Testing
OpenClaw üç Vitest suite’i (unit/integration, e2e, live) ve küçük bir Docker çalıştırıcıları kümesi içerir. Bu belge bir “nasıl test ediyoruz” kılavuzudur:- Her suite’in neyi kapsadığı (ve özellikle neyi kapsamadığı)
- Yaygın iş akışları için hangi komutların çalıştırılacağı (yerel, push öncesi, hata ayıklama)
- Live testlerin kimlik bilgilerini nasıl bulduğu ve modelleri/sağlayıcıları nasıl seçtiği
- Gerçek dünyadaki model/sağlayıcı sorunları için nasıl regresyon ekleneceği
Hızlı başlangıç
Çoğu gün:- Tam gate (push öncesinde beklenir):
pnpm build && pnpm check && pnpm test - Güçlü bir makinede daha hızlı yerel tam-suite çalıştırma:
pnpm test:max - Doğrudan Vitest watch döngüsü (modern project yapılandırması):
pnpm test:watch - Doğrudan dosya hedefleme artık extension/channel yollarını da yönlendirir:
pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts
- Coverage gate:
pnpm test:coverage - E2E suite’i:
pnpm test:e2e
- Live suite (modeller + gateway araç/görsel yoklamaları):
pnpm test:live - Tek bir live dosyayı sessiz çalıştırma:
pnpm test:live -- src/agents/models.profiles.live.test.ts
Test suiteleri (nerede ne çalışır)
Suiteleri “artan gerçekçilik” (ve artan oynaklık/maliyet) olarak düşünün:Unit / integration (varsayılan)
- Komut:
pnpm test - Yapılandırma:
vitest.config.tsaracılığıyla doğal Vitestprojects - Dosyalar:
src/**/*.test.ts,packages/**/*.test.ts,test/**/*.test.tsaltındaki core/unit envanterleri vevitest.unit.config.tskapsamındaki izin listesine alınmışuinode testleri - Kapsam:
- Saf unit testleri
- Süreç içi integration testleri (gateway auth, routing, tooling, parsing, config)
- Bilinen hatalar için deterministik regresyonlar
- Beklentiler:
- CI içinde çalışır
- Gerçek anahtar gerekmez
- Hızlı ve kararlı olmalıdır
- Projects notu:
pnpm test,pnpm test:watchvepnpm test:changedartık aynı doğal Vitest kökprojectsyapılandırmasını kullanır.- Doğrudan dosya filtreleri kök proje grafiği üzerinden doğal olarak yönlendirilir, bu nedenle
pnpm test extensions/discord/src/monitor/message-handler.preflight.test.tsözel bir sarmalayıcı olmadan çalışır.
- Gömülü runner notu:
- Mesaj aracı keşif girdilerini veya sıkıştırma çalışma zamanı bağlamını değiştirirken, her iki kapsama düzeyini de koruyun.
- Saf yönlendirme/normalizasyon sınırları için odaklı yardımcı regresyonlar ekleyin.
- Ayrıca gömülü runner integration suitelerini de sağlıklı tutun:
src/agents/pi-embedded-runner/compact.hooks.test.ts,src/agents/pi-embedded-runner/run.overflow-compaction.test.tsvesrc/agents/pi-embedded-runner/run.overflow-compaction.loop.test.ts. - Bu suiteler, kapsamlı kimliklerin ve sıkıştırma davranışının hâlâ gerçek
run.ts/compact.tsyollarından aktığını doğrular; yalnızca yardımcı testler bu integration yolları için yeterli bir ikame değildir.
- Pool notu:
- Temel Vitest yapılandırması artık varsayılan olarak
threadskullanır. - Paylaşılan Vitest yapılandırması ayrıca
isolate: falsedeğerini sabitler ve kök projects, e2e ve live yapılandırmalarında yalıtımsız runner kullanır. - Kök UI şeridi
jsdomkurulumunu ve optimizer’ını korur, ancak artık paylaşılan yalıtımsız runner üzerinde çalışır. pnpm test, kökvitest.config.tsprojects yapılandırmasından aynıthreads+isolate: falsevarsayılanlarını devralır.- Paylaşılan
scripts/run-vitest.mjsbaşlatıcısı artık büyük yerel çalıştırmalarda V8 derleme dalgalanmasını azaltmak için Vitest alt Node süreçlerine varsayılan olarak--no-maglevda ekler. Varsayılan V8 davranışıyla karşılaştırma yapmanız gerekiyorsaOPENCLAW_VITEST_ENABLE_MAGLEV=1ayarlayın.
- Temel Vitest yapılandırması artık varsayılan olarak
- Hızlı yerel yineleme notu:
pnpm test:changed, doğal projects yapılandırmasını--changed origin/mainile çalıştırır.pnpm test:maxvepnpm test:changed:max, aynı doğal projects yapılandırmasını korur; yalnızca daha yüksek bir worker sınırıyla.- Yerel worker otomatik ölçeklendirmesi artık bilinçli olarak daha muhafazakârdır ve ana makine yük ortalaması zaten yüksekken de geri çekilir; böylece eşzamanlı birden fazla Vitest çalıştırması varsayılan olarak daha az zarar verir.
- Temel Vitest yapılandırması, test kablolaması değiştiğinde changed-mode yeniden çalıştırmaların doğru kalması için projects/config dosyalarını
forceRerunTriggersolarak işaretler. - Yapılandırma, desteklenen ana makinelerde
OPENCLAW_VITEST_FS_MODULE_CACHEözelliğini etkin tutar; doğrudan profiling için tek bir açık önbellek konumu istiyorsanızOPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/abs/pathayarlayın.
- Perf-debug notu:
pnpm test:perf:imports, Vitest import süresi raporlamasını ve import döküm çıktısını etkinleştirir.pnpm test:perf:imports:changed, aynı profiling görünümünüorigin/mainsonrasında değişen dosyalarla sınırlar.pnpm test:perf:profile:main, Vitest/Vite başlangıcı ve transform ek yükü için ana iş parçacığı CPU profili yazar.pnpm test:perf:profile:runner, dosya paralelliği devre dışıyken unit suite’i için runner CPU+heap profilleri yazar.
E2E (gateway smoke)
- Komut:
pnpm test:e2e - Yapılandırma:
vitest.e2e.config.ts - Dosyalar:
src/**/*.e2e.test.ts,test/**/*.e2e.test.ts - Çalışma zamanı varsayılanları:
- Depodaki geri kalanla eşleşecek şekilde Vitest
threadsveisolate: falsekullanır. - Uyarlanabilir worker kullanır (CI: en fazla 2, yerelde varsayılan 1).
- Konsol G/Ç ek yükünü azaltmak için varsayılan olarak sessiz modda çalışır.
- Depodaki geri kalanla eşleşecek şekilde Vitest
- Yararlı geçersiz kılmalar:
- Worker sayısını zorlamak için
OPENCLAW_E2E_WORKERS=<n>(en fazla 16). - Ayrıntılı konsol çıktısını yeniden etkinleştirmek için
OPENCLAW_E2E_VERBOSE=1.
- Worker sayısını zorlamak için
- Kapsam:
- Çok örnekli gateway uçtan uca davranışı
- WebSocket/HTTP yüzeyleri, düğüm eşleştirme ve daha ağır ağ davranışı
- Beklentiler:
- CI içinde çalışır (işlem hattında etkinse)
- Gerçek anahtar gerekmez
- Unit testlerden daha fazla hareketli parça içerir (daha yavaş olabilir)
E2E: OpenShell arka uç smoke
- Komut:
pnpm test:e2e:openshell - Dosya:
test/openshell-sandbox.e2e.test.ts - Kapsam:
- Ana makinede Docker üzerinden yalıtılmış bir OpenShell gateway başlatır
- Geçici bir yerel Dockerfile’dan bir sandbox oluşturur
- OpenClaw’ın OpenShell arka ucunu gerçek
sandbox ssh-config+ SSH exec üzerinden çalıştırır - Sandbox fs köprüsü aracılığıyla uzak-kanonik dosya sistemi davranışını doğrular
- Beklentiler:
- Yalnızca isteğe bağlıdır; varsayılan
pnpm test:e2eçalıştırmasının parçası değildir - Yerel
openshellCLI ve çalışan bir Docker daemon gerektirir - Yalıtılmış
HOME/XDG_CONFIG_HOMEkullanır, sonra test gateway’i ve sandbox’ı yok eder
- Yalnızca isteğe bağlıdır; varsayılan
- Yararlı geçersiz kılmalar:
- Daha geniş e2e suite’ini elle çalıştırırken testi etkinleştirmek için
OPENCLAW_E2E_OPENSHELL=1 - Varsayılan olmayan bir CLI ikilisine veya sarmalayıcı betiğe işaret etmek için
OPENCLAW_E2E_OPENSHELL_COMMAND=/path/to/openshell
- Daha geniş e2e suite’ini elle çalıştırırken testi etkinleştirmek için
Live (gerçek sağlayıcılar + gerçek modeller)
- Komut:
pnpm test:live - Yapılandırma:
vitest.live.config.ts - Dosyalar:
src/**/*.live.test.ts - Varsayılan:
pnpm test:livetarafından etkinleştirilir (OPENCLAW_LIVE_TEST=1ayarlanır) - Kapsam:
- “Bu sağlayıcı/model bugün gerçekten gerçek kimlik bilgileriyle çalışıyor mu?”
- Sağlayıcı biçim değişikliklerini, tool-calling farklılıklarını, auth sorunlarını ve rate limit davranışını yakalamak
- Beklentiler:
- Tasarım gereği CI içinde kararlı değildir (gerçek ağlar, gerçek sağlayıcı politikaları, kotalar, kesintiler)
- Para harcar / rate limit kullanır
- “Hepsini” çalıştırmak yerine daraltılmış alt kümeleri tercih edin
- Live çalıştırmalar, eksik API anahtarlarını almak için
~/.profiledosyasını source eder. - Varsayılan olarak live çalıştırmalar yine de
HOMEdizinini yalıtır ve config/auth materyalini geçici bir test home dizinine kopyalar; böylece unit fixture’ları gerçek~/.openclawdizininizi değiştiremez. - Live testlerin gerçek home dizininizi kullanmasını bilinçli olarak istediğiniz durumlarda yalnızca
OPENCLAW_LIVE_USE_REAL_HOME=1ayarlayın. pnpm test:liveartık varsayılan olarak daha sessiz bir mod kullanır:[live] ...ilerleme çıktısını korur, ancak ek~/.profilebildirimini bastırır ve gateway bootstrap günlükleri/Bonjour gürültüsünü susturur. Tüm başlangıç günlüklerini geri istiyorsanızOPENCLAW_LIVE_TEST_QUIET=0ayarlayın.- API anahtarı döndürme (sağlayıcıya özgü):
*_API_KEYSdeğerini virgül/noktalı virgül biçiminde veya*_API_KEY_1,*_API_KEY_2biçiminde ayarlayın (örneğinOPENAI_API_KEYS,ANTHROPIC_API_KEYS,GEMINI_API_KEYS) ya da live başına geçersiz kılma içinOPENCLAW_LIVE_*_KEY; testler rate limit yanıtlarında yeniden dener. - İlerleme/heartbeat çıktısı:
- Live suiteleri artık uzun sağlayıcı çağrılarının Vitest konsol yakalaması sessizken bile görünür şekilde etkin olduğunu göstermek için stderr’e ilerleme satırları yazar.
vitest.live.config.ts, sağlayıcı/gateway ilerleme satırlarının live çalıştırmalarda hemen akması için Vitest konsol yakalamayı devre dışı bırakır.- Doğrudan model heartbeat’lerini
OPENCLAW_LIVE_HEARTBEAT_MSile ayarlayın. - Gateway/probe heartbeat’lerini
OPENCLAW_LIVE_GATEWAY_HEARTBEAT_MSile ayarlayın.
Hangi suite’i çalıştırmalıyım?
Şu karar tablosunu kullanın:- Mantık/test düzenliyorsanız:
pnpm testçalıştırın (çok şey değiştirdiysenizpnpm test:coverageda) - Gateway ağı / WS protokolü / eşleştirmeye dokunuyorsanız:
pnpm test:e2eekleyin - “Botum kapalı” / sağlayıcıya özgü hatalar / tool calling hata ayıklıyorsanız: daraltılmış bir
pnpm test:liveçalıştırın
Live: Android düğüm capability taraması
- Test:
src/gateway/android-node.capabilities.live.test.ts - Betik:
pnpm android:test:integration - Amaç: bağlı bir Android düğümün şu anda bildirdiği her komutu çağırmak ve komut sözleşmesi davranışını doğrulamak.
- Kapsam:
- Önkoşullu/el ile kurulum (suite uygulamayı kurmaz/çalıştırmaz/eşleştirmez).
- Seçilen Android düğümü için komut bazında gateway
node.invokedoğrulaması.
- Gerekli ön kurulum:
- Android uygulaması gateway’e zaten bağlı + eşleştirilmiş olmalı.
- Uygulama ön planda tutulmalı.
- Başarılı olmasını beklediğiniz capability’ler için izinler/ekran yakalama onayı verilmiş olmalı.
- İsteğe bağlı hedef geçersiz kılmaları:
OPENCLAW_ANDROID_NODE_IDveyaOPENCLAW_ANDROID_NODE_NAME.OPENCLAW_ANDROID_GATEWAY_URL/OPENCLAW_ANDROID_GATEWAY_TOKEN/OPENCLAW_ANDROID_GATEWAY_PASSWORD.
- Tam Android kurulum ayrıntıları: Android App
Live: model smoke (profil anahtarları)
Live testler, hataları yalıtabilmek için iki katmana ayrılmıştır:- “Doğrudan model”, verilen anahtarla sağlayıcının/modelin en azından yanıt verebildiğini söyler.
- “Gateway smoke”, tam gateway+ajan işlem hattısının bu model için çalıştığını söyler (oturumlar, geçmiş, araçlar, sandbox ilkesi vb.).
Katman 1: Doğrudan model completion (gateway yok)
- Test:
src/agents/models.profiles.live.test.ts - Amaç:
- Keşfedilen modelleri listelemek
- Kimlik bilgileriniz olan modelleri seçmek için
getApiKeyForModelkullanmak - Model başına küçük bir completion çalıştırmak (ve gerektiğinde hedeflenmiş regresyonlar)
- Nasıl etkinleştirilir:
pnpm test:live(veya Vitest’i doğrudan çağırıyorsanızOPENCLAW_LIVE_TEST=1)
- Bu suite’in gerçekten çalışması için
OPENCLAW_LIVE_MODELS=modern(veya modern için takma ad olanall) ayarlayın; aksi takdirdepnpm test:liveodağını gateway smoke üzerinde tutmak için atlanır - Model seçimi:
- Modern allowlist’i çalıştırmak için
OPENCLAW_LIVE_MODELS=modern(Opus/Sonnet 4.6+, GPT-5.x + Codex, Gemini 3, GLM 4.7, MiniMax M2.7, Grok 4) OPENCLAW_LIVE_MODELS=all, modern allowlist için bir takma addır- veya
OPENCLAW_LIVE_MODELS="openai/gpt-5.4,anthropic/claude-opus-4-6,..."(virgülle ayrılmış allowlist)
- Modern allowlist’i çalıştırmak için
- Sağlayıcı seçimi:
OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli"(virgülle ayrılmış allowlist)
- Anahtarların geldiği yer:
- Varsayılan olarak: profil deposu ve env fallback’leri
- Yalnızca profil deposunu zorlamak için
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1ayarlayın
- Bunun nedeni:
- “Sağlayıcı API bozuk / anahtar geçersiz” ile “gateway ajan işlem hattısı bozuk” durumlarını ayırır
- Küçük, yalıtılmış regresyonlar içerir (örnek: OpenAI Responses/Codex Responses reasoning replay + tool-call akışları)
Katman 2: Gateway + dev agent smoke (@openclaw gerçekte ne yapıyor)
- Test:
src/gateway/gateway-models.profiles.live.test.ts - Amaç:
- Süreç içinde bir gateway başlatmak
agent:dev:*oturumu oluşturmak/yamamak (çalıştırma başına model geçersiz kılma)- Anahtarı olan modelleri dolaşmak ve şunları doğrulamak:
- “anlamlı” yanıt (araç yok)
- gerçek bir araç çağrısının çalışması (read probe)
- isteğe bağlı ek araç yoklamaları (exec+read probe)
- OpenAI regresyon yollarının (yalnızca tool-call → follow-up) çalışmaya devam etmesi
- Probe ayrıntıları (hataları hızlı açıklayabilmeniz için):
readprobe: test, çalışma alanına bir nonce dosyası yazar ve ajandan bunureadile okuyup nonce’ı geri yansıtmasını ister.exec+readprobe: test, ajandan bir temp dosyayaexecile nonce yazmasını, sonrareadile geri okumasını ister.- image probe: test, oluşturulmuş bir PNG (kedi + rastgele kod) ekler ve modelin
cat <CODE>döndürmesini bekler. - Uygulama başvurusu:
src/gateway/gateway-models.profiles.live.test.tsvesrc/gateway/live-image-probe.ts.
- Nasıl etkinleştirilir:
pnpm test:live(veya Vitest’i doğrudan çağırıyorsanızOPENCLAW_LIVE_TEST=1)
- Model seçimi:
- Varsayılan: modern allowlist (Opus/Sonnet 4.6+, GPT-5.x + Codex, Gemini 3, GLM 4.7, MiniMax M2.7, Grok 4)
OPENCLAW_LIVE_GATEWAY_MODELS=all, modern allowlist için bir takma addır- Ya da daraltmak için
OPENCLAW_LIVE_GATEWAY_MODELS="provider/model"(veya virgül listesi) ayarlayın
- Sağlayıcı seçimi (“OpenRouter her şey” durumundan kaçınmak için):
OPENCLAW_LIVE_GATEWAY_PROVIDERS="google,google-antigravity,google-gemini-cli,openai,anthropic,zai,minimax"(virgülle ayrılmış allowlist)
- Araç + image probe’lar bu live testte her zaman açıktır:
readprobe +exec+readprobe (araç stresi)- Model image input desteği bildirdiğinde image probe çalışır
- Akış (yüksek seviye):
- Test, “CAT” + rastgele kod içeren küçük bir PNG üretir (
src/gateway/live-image-probe.ts) - Bunu
agentüzerindenattachments: [{ mimeType: "image/png", content: "<base64>" }]ile gönderir - Gateway, ekleri
images[]içine ayrıştırır (src/gateway/server-methods/agent.ts+src/gateway/chat-attachments.ts) - Gömülü ajan, modele çok modlu bir kullanıcı mesajı iletir
- Doğrulama: yanıt
cat+ kodu içerir (OCR toleransı: küçük hatalara izin verilir)
- Test, “CAT” + rastgele kod içeren küçük bir PNG üretir (
provider/model kimliklerini) görmek için şunu çalıştırın:
Live: CLI arka uç smoke (Claude CLI veya başka yerel CLI’lar)
- Test:
src/gateway/gateway-cli-backend.live.test.ts - Amaç: varsayılan yapılandırmanıza dokunmadan, yerel bir CLI arka ucu kullanarak Gateway + ajan işlem hattısını doğrulamak.
- Etkinleştirme:
pnpm test:live(veya Vitest’i doğrudan çağırıyorsanızOPENCLAW_LIVE_TEST=1)OPENCLAW_LIVE_CLI_BACKEND=1
- Varsayılanlar:
- Model:
claude-cli/claude-sonnet-4-6 - Komut:
claude - Argümanlar:
["-p","--output-format","stream-json","--include-partial-messages","--verbose","--permission-mode","bypassPermissions"]
- Model:
- Geçersiz kılmalar (isteğe bağlı):
OPENCLAW_LIVE_CLI_BACKEND_MODEL="claude-cli/claude-opus-4-6"OPENCLAW_LIVE_CLI_BACKEND_MODEL="codex-cli/gpt-5.4"OPENCLAW_LIVE_CLI_BACKEND_COMMAND="/full/path/to/claude"OPENCLAW_LIVE_CLI_BACKEND_ARGS='["-p","--output-format","stream-json","--include-partial-messages","--verbose","--permission-mode","bypassPermissions"]'OPENCLAW_LIVE_CLI_BACKEND_CLEAR_ENV='["ANTHROPIC_API_KEY","ANTHROPIC_API_KEY_OLD"]'- Gerçek bir görsel eki göndermek için
OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=1(yollar isteme enjekte edilir). - Görsel dosya yollarını istem enjeksiyonu yerine CLI argümanları olarak geçirmek için
OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image". IMAGE_ARGayarlı olduğunda görsel argümanlarının nasıl geçirileceğini denetlemek içinOPENCLAW_LIVE_CLI_BACKEND_IMAGE_MODE="repeat"(veya"list").- İkinci bir tur gönderip resume akışını doğrulamak için
OPENCLAW_LIVE_CLI_BACKEND_RESUME_PROBE=1.
OPENCLAW_LIVE_CLI_BACKEND_DISABLE_MCP_CONFIG=0, Claude CLI MCP yapılandırmasını etkin tutar (varsayılan davranış, ortam/genel MCP sunucularının smoke sırasında devre dışı kalmasını sağlamak için geçici, katı boş bir--mcp-configenjekte eder).
- Docker çalıştırıcısı
scripts/test-live-cli-backend-docker.shiçinde bulunur. - Canlı CLI arka uç smoke testini depo Docker imajı içinde root olmayan
nodekullanıcısı olarak çalıştırır, çünkü Claude CLI root olarak çağrıldığındabypassPermissionsseçeneğini reddeder. claude-cliiçin Linux@anthropic-ai/claude-codepaketini önbelleğe alınmış yazılabilir bir öneke,OPENCLAW_DOCKER_CLI_TOOLS_DIRaltına kurar (varsayılan:~/.cache/openclaw/docker-cli-tools).claude-cliiçin live smoke,OPENCLAW_LIVE_CLI_BACKEND_DISABLE_MCP_CONFIG=0ayarlamadığınız sürece katı boş bir MCP yapılandırması enjekte eder.- Mevcutsa
~/.claudedizinini kapsayıcıya kopyalar, ancak Claude auth’unANTHROPIC_API_KEYile desteklendiği makinelerde alt Claude CLI içinANTHROPIC_API_KEY/ANTHROPIC_API_KEY_OLDdeğerleriniOPENCLAW_LIVE_CLI_BACKEND_PRESERVE_ENVile de korur.
Live: ACP bind smoke (/acp spawn ... --bind here)
- Test:
src/gateway/gateway-acp-bind.live.test.ts - Amaç: canlı bir ACP ajanıyla gerçek ACP konuşma bağlama akışını doğrulamak:
/acp spawn <agent> --bind heregönder- sentetik bir message-channel konuşmasını yerinde bağla
- aynı konuşma üzerinde normal bir follow-up gönder
- follow-up mesajının bağlı ACP oturum dökümüne düştüğünü doğrula
- Etkinleştirme:
pnpm test:live src/gateway/gateway-acp-bind.live.test.tsOPENCLAW_LIVE_ACP_BIND=1
- Varsayılanlar:
- ACP ajanı:
claude - Sentetik kanal: Slack DM tarzı konuşma bağlamı
- ACP arka ucu:
acpx
- ACP ajanı:
- Geçersiz kılmalar:
OPENCLAW_LIVE_ACP_BIND_AGENT=claudeOPENCLAW_LIVE_ACP_BIND_AGENT=codexOPENCLAW_LIVE_ACP_BIND_ACPX_COMMAND=/full/path/to/acpx
- Notlar:
- Bu şerit, testlerin harici teslimatı taklit etmeden message-channel bağlamı ekleyebilmesi için yalnızca admin kullanımına açık sentetik originating-route alanlarıyla gateway
chat.sendyüzeyini kullanır. OPENCLAW_LIVE_ACP_BIND_ACPX_COMMANDayarlı değilse test yapılandırılmış/paketlenmiş acpx komutunu kullanır. Harness auth’unuz~/.profileiçindeki env değişkenlerine bağlıysa sağlayıcı env değişkenlerini koruyan özel biracpxkomutu tercih edin.
- Bu şerit, testlerin harici teslimatı taklit etmeden message-channel bağlamı ekleyebilmesi için yalnızca admin kullanımına açık sentetik originating-route alanlarıyla gateway
- Docker çalıştırıcısı
scripts/test-live-acp-bind-docker.shiçinde bulunur. ~/.profiledosyasını source eder, eşleşen CLI auth home dizinini (~/.claudeveya~/.codex) kapsayıcıya kopyalar, acpx’i yazılabilir bir npm önekine kurar, ardından eksikse istenen live CLI’yi (@anthropic-ai/claude-codeveya@openai/codex) kurar.- Docker içinde çalıştırıcı
OPENCLAW_LIVE_ACP_BIND_ACPX_COMMAND=$HOME/.npm-global/bin/acpxayarlar, böylece acpx sourced profile’dan gelen sağlayıcı env değişkenlerini alt harness CLI için kullanılabilir tutar.
Önerilen live tarifleri
Dar, açık allowlist’ler en hızlı ve en az oynak olanlardır:-
Tek model, doğrudan (gateway yok):
OPENCLAW_LIVE_MODELS="openai/gpt-5.4" pnpm test:live src/agents/models.profiles.live.test.ts
-
Tek model, gateway smoke:
OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.4" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
-
Birkaç sağlayıcı üzerinde tool calling:
OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.4,anthropic/claude-opus-4-6,google/gemini-3-flash-preview,zai/glm-4.7,minimax/MiniMax-M2.7" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
-
Google odağı (Gemini API anahtarı + Antigravity):
- Gemini (API anahtarı):
OPENCLAW_LIVE_GATEWAY_MODELS="google/gemini-3-flash-preview" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts - Antigravity (OAuth):
OPENCLAW_LIVE_GATEWAY_MODELS="google-antigravity/claude-opus-4-6-thinking,google-antigravity/gemini-3-pro-high" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
- Gemini (API anahtarı):
google/..., Gemini API’sini kullanır (API anahtarı).google-antigravity/..., Antigravity OAuth köprüsünü kullanır (Cloud Code Assist tarzı ajan uç noktası).google-gemini-cli/..., makinenizdeki yerel Gemini CLI’yi kullanır (ayrı auth + tooling farklılıkları).- Gemini API ile Gemini CLI:
- API: OpenClaw, Google’ın barındırılan Gemini API’sini HTTP üzerinden çağırır (API anahtarı / profil auth); çoğu kullanıcı “Gemini” derken bunu kasteder.
- CLI: OpenClaw, yerel bir
geminiikilisini shell üzerinden çağırır; kendi auth’una sahiptir ve farklı davranabilir (streaming/tool desteği/sürüm kayması).
Live: model matrisi (neleri kapsıyoruz)
Sabit bir “CI model listesi” yoktur (live isteğe bağlıdır), ancak geliştirici makinesinde anahtarlarla düzenli kapsanması önerilen modeller bunlardır.Modern smoke seti (tool calling + image)
Çalışmasını korumayı beklediğimiz “yaygın modeller” çalıştırması şudur:- OpenAI (Codex dışı):
openai/gpt-5.4(isteğe bağlı:openai/gpt-5.4-mini) - OpenAI Codex:
openai-codex/gpt-5.4 - Anthropic:
anthropic/claude-opus-4-6(veyaanthropic/claude-sonnet-4-6) - Google (Gemini API):
google/gemini-3.1-pro-previewvegoogle/gemini-3-flash-preview(eski Gemini 2.x modellerinden kaçının) - Google (Antigravity):
google-antigravity/claude-opus-4-6-thinkingvegoogle-antigravity/gemini-3-flash - Z.AI (GLM):
zai/glm-4.7 - MiniMax:
minimax/MiniMax-M2.7
OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.4,openai-codex/gpt-5.4,anthropic/claude-opus-4-6,google/gemini-3.1-pro-preview,google/gemini-3-flash-preview,google-antigravity/claude-opus-4-6-thinking,google-antigravity/gemini-3-flash,zai/glm-4.7,minimax/MiniMax-M2.7" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
Temel: tool calling (Read + isteğe bağlı Exec)
Her sağlayıcı ailesinden en az bir tane seçin:- OpenAI:
openai/gpt-5.4(veyaopenai/gpt-5.4-mini) - Anthropic:
anthropic/claude-opus-4-6(veyaanthropic/claude-sonnet-4-6) - Google:
google/gemini-3-flash-preview(veyagoogle/gemini-3.1-pro-preview) - Z.AI (GLM):
zai/glm-4.7 - MiniMax:
minimax/MiniMax-M2.7
- xAI:
xai/grok-4(veya mevcut en son sürüm) - Mistral:
mistral/… (etkinleştirdiğiniz “tools” destekli modellerden birini seçin) - Cerebras:
cerebras/… (erişiminiz varsa) - LM Studio:
lmstudio/… (yerel; tool calling API moduna bağlıdır)
Vision: görsel gönderimi (ek → çok modlu mesaj)
Image probe’u çalıştırmak içinOPENCLAW_LIVE_GATEWAY_MODELS içine en az bir image destekli model (Claude/Gemini/OpenAI’nin image destekli varyantları vb.) ekleyin.
Toplayıcılar / alternatif gateway’ler
Anahtarlarınız etkinse, şunlar üzerinden test etmeyi de destekliyoruz:- OpenRouter:
openrouter/...(yüzlerce model; tool+image destekli adayları bulmak içinopenclaw models scankullanın) - OpenCode: Zen için
opencode/..., Go içinopencode-go/...(OPENCODE_API_KEY/OPENCODE_ZEN_API_KEYile auth)
- Yerleşik:
openai,openai-codex,anthropic,google,google-vertex,google-antigravity,google-gemini-cli,zai,openrouter,opencode,opencode-go,xai,groq,cerebras,mistral,github-copilot models.providersaracılığıyla (özel uç noktalar):minimax(cloud/API), ayrıca OpenAI/Anthropic uyumlu herhangi bir proxy (LM Studio, vLLM, LiteLLM vb.)
discoverModels(...) ne döndürüyorsa ve hangi anahtarlar mevcutsa odur.
Kimlik bilgileri (asla commit etmeyin)
Live testler, kimlik bilgilerini CLI ile aynı şekilde bulur. Pratik sonuçlar:- CLI çalışıyorsa, live testler de aynı anahtarları bulmalıdır.
-
Bir live test “anahtar yok” diyorsa, bunu
openclaw models list/ model seçimini nasıl hata ayıklıyorsanız aynı şekilde hata ayıklayın. -
Ajan başına auth profilleri:
~/.openclaw/agents/<agentId>/agent/auth-profiles.json(live testlerde “profil anahtarları” denince kastedilen budur) -
Yapılandırma:
~/.openclaw/openclaw.json(veyaOPENCLAW_CONFIG_PATH) -
Eski durum dizini:
~/.openclaw/credentials/(varsa hazırlanan live home dizinine kopyalanır, ancak ana profil-anahtar deposu değildir) -
Live yerel çalıştırmalar varsayılan olarak etkin yapılandırmayı, ajan başına
auth-profiles.jsondosyalarını, eskicredentials/dizinini ve desteklenen harici CLI auth dizinlerini geçici bir test home dizinine kopyalar; böylece bu hazırlanmış yapılandırmadaagents.*.workspace/agentDiryol geçersiz kılmaları kaldırılır ve probe’lar gerçek ana makine çalışma alanınıza uğramaz.
~/.profile içinde export edilmişlerse), yerel testleri source ~/.profile sonrasında çalıştırın veya aşağıdaki Docker çalıştırıcılarını kullanın (bunlar ~/.profile dosyasını kapsayıcıya mount edebilir).
Deepgram live (ses dökümü)
- Test:
src/media-understanding/providers/deepgram/audio.live.test.ts - Etkinleştirme:
DEEPGRAM_API_KEY=... DEEPGRAM_LIVE_TEST=1 pnpm test:live src/media-understanding/providers/deepgram/audio.live.test.ts
BytePlus coding plan live
- Test:
src/agents/byteplus.live.test.ts - Etkinleştirme:
BYTEPLUS_API_KEY=... BYTEPLUS_LIVE_TEST=1 pnpm test:live src/agents/byteplus.live.test.ts - İsteğe bağlı model geçersiz kılması:
BYTEPLUS_CODING_MODEL=ark-code-latest
Image generation live
- Test:
src/image-generation/runtime.live.test.ts - Komut:
pnpm test:live src/image-generation/runtime.live.test.ts - Kapsam:
- Kayıtlı her image-generation sağlayıcı eklentisini listeler
- Yoklama yapmadan önce eksik sağlayıcı env değişkenlerini login shell’inizden (
~/.profile) yükler - Varsayılan olarak depolanmış auth profillerinin önünde live/env API anahtarlarını kullanır; böylece
auth-profiles.jsoniçindeki eski test anahtarları gerçek shell kimlik bilgilerini maskelemez - Kullanılabilir auth/profil/model olmayan sağlayıcıları atlar
- Stok image-generation varyantlarını paylaşılan çalışma zamanı capability’si üzerinden çalıştırır:
google:flash-generategoogle:pro-generategoogle:pro-editopenai:default-generate
- Kapsanan mevcut paketlenmiş sağlayıcılar:
openaigoogle
- İsteğe bağlı daraltma:
OPENCLAW_LIVE_IMAGE_GENERATION_PROVIDERS="openai,google"OPENCLAW_LIVE_IMAGE_GENERATION_MODELS="openai/gpt-image-1,google/gemini-3.1-flash-image-preview"OPENCLAW_LIVE_IMAGE_GENERATION_CASES="google:flash-generate,google:pro-edit"
- İsteğe bağlı auth davranışı:
- Profil deposu auth’unu zorlamak ve yalnızca env geçersiz kılmalarını yok saymak için
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1
- Profil deposu auth’unu zorlamak ve yalnızca env geçersiz kılmalarını yok saymak için
Docker çalıştırıcıları (isteğe bağlı “Linux içinde çalışıyor” kontrolleri)
Bu Docker çalıştırıcıları iki kümeye ayrılır:- Live-model çalıştırıcıları:
test:docker:live-modelsvetest:docker:live-gateway, yalnızca eşleşen profil-anahtar live dosyalarını depo Docker imajı içinde çalıştırır (src/agents/models.profiles.live.test.tsvesrc/gateway/gateway-models.profiles.live.test.ts), yerel config dizininizi ve çalışma alanınızı mount eder (ve mount edilmişse~/.profiledosyasını source eder). Eşleşen yerel giriş noktalarıtest:live:models-profilesvetest:live:gateway-profilesşeklindedir. - Docker live çalıştırıcıları varsayılan olarak daha küçük bir smoke sınırı kullanır; böylece tam Docker taraması pratik kalır:
test:docker:live-modelsvarsayılan olarakOPENCLAW_LIVE_MAX_MODELS=12, vetest:docker:live-gatewayvarsayılan olarakOPENCLAW_LIVE_GATEWAY_SMOKE=1,OPENCLAW_LIVE_GATEWAY_MAX_MODELS=8,OPENCLAW_LIVE_GATEWAY_STEP_TIMEOUT_MS=45000veOPENCLAW_LIVE_GATEWAY_MODEL_TIMEOUT_MS=90000kullanır. Daha büyük kapsamlı taramayı özellikle istediğinizde bu env değişkenlerini geçersiz kılın. test:docker:all, live Docker imajını bir keztest:docker:live-buildile oluşturur, ardından iki live Docker şeridinde yeniden kullanır.- Kapsayıcı smoke çalıştırıcıları:
test:docker:openwebui,test:docker:onboard,test:docker:gateway-network,test:docker:mcp-channelsvetest:docker:plugins, bir veya daha fazla gerçek kapsayıcı başlatır ve daha yüksek seviyeli integration yollarını doğrular.
- Doğrudan modeller:
pnpm test:docker:live-models(betik:scripts/test-live-models-docker.sh) - ACP bind smoke:
pnpm test:docker:live-acp-bind(betik:scripts/test-live-acp-bind-docker.sh) - CLI arka uç smoke:
pnpm test:docker:live-cli-backend(betik:scripts/test-live-cli-backend-docker.sh) - Gateway + dev agent:
pnpm test:docker:live-gateway(betik:scripts/test-live-gateway-models-docker.sh) - Open WebUI live smoke:
pnpm test:docker:openwebui(betik:scripts/e2e/openwebui-docker.sh) - Onboarding wizard’ı (TTY, tam iskelet):
pnpm test:docker:onboard(betik:scripts/e2e/onboard-docker.sh) - Gateway ağı (iki kapsayıcı, WS auth + health):
pnpm test:docker:gateway-network(betik:scripts/e2e/gateway-network-docker.sh) - MCP channel bridge (tohumlanmış Gateway + stdio bridge + ham Claude notification-frame smoke):
pnpm test:docker:mcp-channels(betik:scripts/e2e/mcp-channels-docker.sh) - Plugins (kurulum smoke +
/plugintakma adı + Claude-bundle restart semantiği):pnpm test:docker:plugins(betik:scripts/e2e/plugins-docker.sh)
OPENCLAW_SKIP_CHANNELS=1 ayarlarlar.
test:docker:live-models yine de pnpm test:live çalıştırır, bu yüzden bu Docker şeridindeki
gateway live kapsamını daraltmanız veya hariç tutmanız gerektiğinde OPENCLAW_LIVE_GATEWAY_* değerlerini de iletin.
test:docker:openwebui, daha yüksek seviyeli bir uyumluluk smoke testidir: OpenAI uyumlu HTTP uç noktaları etkin olan bir
OpenClaw gateway kapsayıcısı başlatır, bu gateway’e karşı sabitlenmiş bir Open WebUI kapsayıcısı başlatır, Open WebUI üzerinden oturum açar,
/api/models içinde openclaw/default modelinin sunulduğunu doğrular, ardından
Open WebUI’nin /api/chat/completions proxy’si üzerinden gerçek bir sohbet isteği gönderir.
İlk çalıştırma fark edilir şekilde daha yavaş olabilir çünkü Docker’ın
Open WebUI imajını çekmesi veya Open WebUI’nin kendi soğuk başlangıç kurulumunu tamamlaması gerekebilir.
Bu şerit kullanılabilir bir live model anahtarı bekler ve Docker içi çalıştırmalarda bunu sağlamak için
birincil yol OPENCLAW_PROFILE_FILE (~/.profile varsayılan) değeridir.
Başarılı çalıştırmalar { "ok": true, "model": "openclaw/default", ... } gibi küçük bir JSON yükü yazdırır.
test:docker:mcp-channels bilinçli olarak deterministiktir ve gerçek bir
Telegram, Discord veya iMessage hesabı gerektirmez. Tohumlanmış bir Gateway
kapsayıcısı başlatır, openclaw mcp serve başlatan ikinci bir kapsayıcı başlatır, ardından
yönlendirilmiş konuşma keşfini, döküm okumalarını, ek meta verisini,
canlı olay kuyruğu davranışını, giden gönderim yönlendirmesini ve Claude tarzı kanal +
izin bildirimlerini gerçek stdio MCP bridge üzerinden doğrular. Bildirim kontrolü
ham stdio MCP çerçevelerini doğrudan inceler; böylece smoke test, belirli bir istemci SDK’sının
tesadüfen yüzeye çıkardığını değil, bridge’in gerçekten ne yaydığını doğrular.
El ile ACP plain-language thread smoke (CI değil):
bun scripts/dev/discord-acp-plain-language-smoke.ts --channel <discord-channel-id> ...- Bu betiği regresyon/hata ayıklama iş akışları için saklayın. ACP thread routing doğrulaması için yeniden gerekebilir, bu yüzden silmeyin.
OPENCLAW_CONFIG_DIR=...(varsayılan:~/.openclaw),/home/node/.openclawdizinine mount edilirOPENCLAW_WORKSPACE_DIR=...(varsayılan:~/.openclaw/workspace),/home/node/.openclaw/workspacedizinine mount edilirOPENCLAW_PROFILE_FILE=...(varsayılan:~/.profile),/home/node/.profiledizinine mount edilir ve testler çalıştırılmadan önce source edilirOPENCLAW_DOCKER_CLI_TOOLS_DIR=...(varsayılan:~/.cache/openclaw/docker-cli-tools), Docker içindeki önbelleğe alınmış CLI kurulumları için/home/node/.npm-globaldizinine mount edilir$HOMEaltındaki harici CLI auth dizinleri/host-auth/...altında salt okunur olarak mount edilir, sonra testler başlamadan önce/home/node/...içine kopyalanır- Varsayılan: desteklenen tüm dizinleri mount et (
.codex,.claude,.minimax) - Daraltılmış sağlayıcı çalıştırmaları,
OPENCLAW_LIVE_PROVIDERS/OPENCLAW_LIVE_GATEWAY_PROVIDERSdeğerlerinden çıkarılan yalnızca gerekli dizinleri mount eder - Elle geçersiz kılma:
OPENCLAW_DOCKER_AUTH_DIRS=all,OPENCLAW_DOCKER_AUTH_DIRS=noneveyaOPENCLAW_DOCKER_AUTH_DIRS=.claude,.codexgibi virgül listesi
- Varsayılan: desteklenen tüm dizinleri mount et (
- Çalıştırmayı daraltmak için
OPENCLAW_LIVE_GATEWAY_MODELS=.../OPENCLAW_LIVE_MODELS=... - Kapsayıcı içindeki sağlayıcıları filtrelemek için
OPENCLAW_LIVE_GATEWAY_PROVIDERS=.../OPENCLAW_LIVE_PROVIDERS=... - Kimlik bilgilerinin env’den değil profil deposundan gelmesini sağlamak için
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1 - Open WebUI smoke testi için gateway’in sunacağı modeli seçmek üzere
OPENCLAW_OPENWEBUI_MODEL=... - Open WebUI smoke testinde kullanılan nonce-check istemini geçersiz kılmak için
OPENCLAW_OPENWEBUI_PROMPT=... - Sabitlenmiş Open WebUI imaj etiketini geçersiz kılmak için
OPENWEBUI_IMAGE=...
Belgeler için temel doğrulama
Belge düzenlemelerinden sonra docs denetimlerini çalıştırın:pnpm check:docs.
Sayfa içi başlık denetimlerine de ihtiyaç duyduğunuzda tam Mintlify anchor doğrulamasını çalıştırın: pnpm docs:check-links:anchors.
Çevrimdışı regresyon (CI-güvenli)
Bunlar gerçek sağlayıcılar olmadan “gerçek işlem hattı” regresyonlarıdır:- Gateway tool calling (sahte OpenAI, gerçek gateway + ajan döngüsü):
src/gateway/gateway.test.ts(durum: “runs a mock OpenAI tool call end-to-end via gateway agent loop”) - Gateway wizard (WS
wizard.start/wizard.next, yapılandırma yazar + auth zorlamalı):src/gateway/gateway.test.ts(durum: “runs wizard over ws and writes auth token config”)
Ajan güvenilirlik değerlendirmeleri (Skills)
Şimdiden “ajan güvenilirlik değerlendirmeleri” gibi davranan birkaç CI-güvenli testimiz var:- Gerçek gateway + ajan döngüsü üzerinden sahte tool-calling (
src/gateway/gateway.test.ts). - Oturum kablolamasını ve yapılandırma etkilerini doğrulayan uçtan uca wizard akışları (
src/gateway/gateway.test.ts).
- Karar verme: Skills istemde listelendiğinde ajan doğru skill’i seçiyor mu (veya ilgisiz olanlardan kaçınıyor mu)?
- Uyumluluk: Ajan kullanımdan önce
SKILL.mdokuyor ve gerekli adımları/argümanları izliyor mu? - İş akışı sözleşmeleri: araç sırasını, oturum geçmişi aktarımını ve sandbox sınırlarını doğrulayan çok turlu senaryolar.
- Araç çağrılarını + sıralarını, skill dosyası okumalarını ve oturum kablolamasını doğrulamak için sahte sağlayıcılar kullanan bir senaryo çalıştırıcısı.
- Skill odaklı küçük bir senaryo suite’i (kullan vs kaçın, geçitleme, prompt injection).
- Yalnızca CI-güvenli suite yerinde olduktan sonra isteğe bağlı live değerlendirmeler (opt-in, env geçitli).
Sözleşme testleri (plugin ve channel şekli)
Sözleşme testleri, kayıtlı her plugin ve channel’ın arayüz sözleşmesine uyduğunu doğrular. Keşfedilen tüm plugin’ler üzerinde dolaşır ve şekil ile davranış doğrulamalarından oluşan bir suite çalıştırır. Varsayılanpnpm test
unit şeridi bu paylaşılan seam ve smoke dosyalarını bilinçli olarak atlar; paylaşılan
channel veya sağlayıcı yüzeylerine dokunduğunuzda sözleşme komutlarını açıkça çalıştırın.
Komutlar
- Tüm sözleşmeler:
pnpm test:contracts - Yalnızca channel sözleşmeleri:
pnpm test:contracts:channels - Yalnızca provider sözleşmeleri:
pnpm test:contracts:plugins
Channel sözleşmeleri
src/channels/plugins/contracts/*.contract.test.ts içinde bulunur:
- plugin - Temel plugin şekli (id, name, capabilities)
- setup - Setup wizard sözleşmesi
- session-binding - Oturum bağlama davranışı
- outbound-payload - Mesaj payload yapısı
- inbound - Gelen mesaj işleme
- actions - Channel eylem işleyicileri
- threading - Thread ID işleme
- directory - Directory/roster API
- group-policy - Grup ilkesi zorlaması
Provider status sözleşmeleri
src/plugins/contracts/*.contract.test.ts içinde bulunur.
- status - Channel status probe’ları
- registry - Plugin kayıt şekli
Provider sözleşmeleri
src/plugins/contracts/*.contract.test.ts içinde bulunur:
- auth - Auth akış sözleşmesi
- auth-choice - Auth choice/seçim
- catalog - Model katalog API’si
- discovery - Plugin keşfi
- loader - Plugin yükleme
- runtime - Provider çalışma zamanı
- shape - Plugin şekli/arayüzü
- wizard - Setup wizard
Ne zaman çalıştırılmalı
- plugin-sdk export’larını veya alt yolları değiştirdikten sonra
- Bir channel veya provider plugin ekledikten ya da değiştirdikten sonra
- Plugin kaydı veya keşfi yeniden düzenlendikten sonra
Regresyon ekleme (yönlendirme)
Live içinde keşfettiğiniz bir provider/model sorununu düzelttiğinizde:- Mümkünse CI-güvenli bir regresyon ekleyin (sağlayıcıyı mock/stub yapın veya tam istek-şekli dönüşümünü yakalayın)
- Sorun doğası gereği yalnızca live ise (rate limit’ler, auth politikaları), live testi dar ve env değişkenleriyle opt-in olacak şekilde tutun
- Hatanın yakalandığı en küçük katmanı hedeflemeyi tercih edin:
- provider istek dönüştürme/replay hatası → direct models testi
- gateway oturum/geçmiş/araç işlem hattısı hatası → gateway live smoke veya CI-güvenli gateway mock testi
- SecretRef traversal guardrail:
src/secrets/exec-secret-ref-id-parity.test.ts, registry meta verisinden (listSecretTargetRegistryEntries()) SecretRef sınıfı başına örneklenmiş bir hedef türetir, ardından traversal-segment exec kimliklerinin reddedildiğini doğrular.src/secrets/target-registry-data.tsiçinde yeni birincludeInPlanSecretRef hedef ailesi eklerseniz, o testtekiclassifyTargetClassdeğerini güncelleyin. Test, yeni sınıfların sessizce atlanamaması için sınıflandırılmamış hedef kimliklerinde bilinçli olarak başarısız olur.