68 KiB
| read_when | summary | title | x-i18n | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Test kiti: unit/e2e/live paketleri, Docker çalıştırıcıları ve her testin neleri kapsadığı | Test etme |
|
Test etme
OpenClaw’ın üç Vitest paketi (unit/integration, e2e, live) ve küçük bir Docker çalıştırıcı kümesi vardır.
Bu belge, “nasıl test ediyoruz” kılavuzudur:
- Her paketin 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 model/sağlayıcıları nasıl seçtiği
- Gerçek dünya model/sağlayıcı sorunları için nasıl regresyon ekleneceği
Hızlı başlangıç
Çoğu gün:
- Tam kapı (push öncesinde beklenen):
pnpm build && pnpm check && pnpm test - Geniş kaynaklı bir makinede daha hızlı yerel tam paket çalıştırması:
pnpm test:max - Doğrudan Vitest watch döngüsü:
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 - Tek bir hata üzerinde yineleme yapıyorsanız önce hedefli çalıştırmaları tercih edin.
- Docker destekli QA sitesi:
pnpm qa:lab:up - Linux VM destekli QA hattı:
pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline
Testlere dokunduğunuzda veya ek güven istediğinizde:
- Kapsama kapısı:
pnpm test:coverage - E2E paketi:
pnpm test:e2e
Gerçek sağlayıcılar/modeller üzerinde hata ayıklarken (gerçek kimlik bilgileri gerekir):
- Live paketi (modeller + gateway araç/görüntü probları):
pnpm test:live - Tek bir live dosyasını sessizce hedefleyin:
pnpm test:live -- src/agents/models.profiles.live.test.ts
İpucu: yalnızca tek bir başarısız duruma ihtiyacınız varsa, aşağıda açıklanan allowlist ortam değişkenleriyle live testleri daraltmayı tercih edin.
QA’ye özel çalıştırıcılar
QA-lab gerçekçiliğine ihtiyaç duyduğunuzda bu komutlar ana test paketlerinin yanında yer alır:
pnpm openclaw qa suite- Depo destekli QA senaryolarını doğrudan ana makinede çalıştırır.
- Varsayılan olarak seçilen birden çok senaryoyu izole gateway worker’larıyla paralel çalıştırır; en fazla 64 worker veya seçilen senaryo sayısı kullanılır. Worker sayısını ayarlamak için
--concurrency <count>, eski seri hat için--concurrency 1kullanın.
pnpm openclaw qa suite --runner multipass- Aynı QA paketini tek kullanımlık bir Multipass Linux VM içinde çalıştırır.
- Ana makinedeki
qa suiteile aynı senaryo seçimi davranışını korur. qa suiteile aynı sağlayıcı/model seçim bayraklarını yeniden kullanır.- Live çalıştırmalar, misafir sistem için pratik olan desteklenen QA kimlik doğrulama girdilerini iletir:
ortam tabanlı sağlayıcı anahtarları, QA live sağlayıcı yapılandırma yolu ve mevcutsa
CODEX_HOME. - Çıktı dizinleri depo kökü altında kalmalıdır, böylece misafir sistem bağlanmış çalışma alanı üzerinden geri yazabilir.
- Normal QA raporu + özeti ve ayrıca Multipass günlüklerini
.artifacts/qa-e2e/...altına yazar.
pnpm qa:lab:up- Operatör tarzı QA çalışması için Docker destekli QA sitesini başlatır.
pnpm openclaw qa matrix- Matrix live QA hattını tek kullanımlık Docker destekli bir Tuwunel homeserver’a karşı çalıştırır.
- Bu QA ana makinesi şu anda yalnızca repo/geliştirme içindir. Paketlenmiş OpenClaw kurulumları
qa-labiçermez, bu yüzdenopenclaw qasunmaz. - Depo checkout’ları paketlenmiş çalıştırıcıyı doğrudan yükler; ayrı bir Plugin kurulum adımı gerekmez.
- Üç geçici Matrix kullanıcısı (
driver,sut,observer) ve bir özel oda oluşturur, ardından gerçek Matrix Plugin’i SUT taşıması olarak kullanarak bir QA gateway alt süreci başlatır. - Varsayılan olarak sabitlenmiş kararlı Tuwunel görüntüsü
ghcr.io/matrix-construct/tuwunel:v1.5.1kullanılır. Farklı bir görüntüyü test etmeniz gerektiğindeOPENCLAW_QA_MATRIX_TUWUNEL_IMAGEile geçersiz kılın. - Matrix, lane geçici kullanıcıları yerel olarak oluşturduğu için paylaşılan kimlik bilgisi kaynağı bayrakları sunmaz.
- Bir Matrix QA raporu, özet, gözlemlenen olaylar artifaktı ve birleşik stdout/stderr çıktı günlüğünü
.artifacts/qa-e2e/...altına yazar.
pnpm openclaw qa telegram- Telegram live QA hattını, ortamdan alınan driver ve SUT bot token’larıyla gerçek bir özel gruba karşı çalıştırır.
OPENCLAW_QA_TELEGRAM_GROUP_ID,OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKENveOPENCLAW_QA_TELEGRAM_SUT_BOT_TOKENgerektirir. Grup kimliği sayısal Telegram sohbet kimliği olmalıdır.- Paylaşılan havuzlanmış kimlik bilgileri için
--credential-source convexdesteklenir. Varsayılan olarak env modunu kullanın veya havuzlanmış kiralamalara geçmek içinOPENCLAW_QA_CREDENTIAL_SOURCE=convexayarlayın. - Aynı özel grupta iki farklı bot gerektirir ve SUT botunun bir Telegram kullanıcı adı sunması gerekir.
- Kararlı bottan-bota gözlem için her iki botta da
@BotFatheriçinde Bot-to-Bot Communication Mode’u etkinleştirin ve driver botunun grup bot trafiğini gözlemleyebildiğinden emin olun. - Bir Telegram QA raporu, özet ve gözlemlenen mesajlar artifaktını
.artifacts/qa-e2e/...altına yazar.
Live taşıma hatları ortak bir standart sözleşmeyi paylaşır; böylece yeni taşımalar sapma göstermez:
qa-channel, geniş sentetik QA paketi olmaya devam eder ve live taşıma kapsama matrisinin parçası değildir.
| Hat | Canary | Mention geçitleme | Allowlist engelleme | Üst düzey yanıt | Yeniden başlatma sonrası sürdürme | Thread takibi | Thread yalıtımı | Reaksiyon gözlemi | Help komutu |
|---|---|---|---|---|---|---|---|---|---|
| Matrix | x | x | x | x | x | x | x | x | |
| Telegram | x | x |
Convex üzerinden paylaşılan Telegram kimlik bilgileri (v1)
openclaw qa telegram için --credential-source convex (veya OPENCLAW_QA_CREDENTIAL_SOURCE=convex) etkin olduğunda,
QA lab bir Convex destekli havuzdan özel bir kiralama alır, hat çalışırken bu kiralamaya Heartbeat gönderir ve kapanışta kiralamayı serbest bırakır.
Başvuru Convex proje iskeleti:
qa/convex-credential-broker/
Gerekli ortam değişkenleri:
OPENCLAW_QA_CONVEX_SITE_URL(örneğinhttps://your-deployment.convex.site)- Seçilen rol için bir gizli değer:
maintaineriçinOPENCLAW_QA_CONVEX_SECRET_MAINTAINERciiçinOPENCLAW_QA_CONVEX_SECRET_CI
- Kimlik bilgisi rolü seçimi:
- CLI:
--credential-role maintainer|ci - Varsayılan ortam değişkeni:
OPENCLAW_QA_CREDENTIAL_ROLE(varsayılanmaintainer)
- CLI:
İsteğe bağlı ortam değişkenleri:
OPENCLAW_QA_CREDENTIAL_LEASE_TTL_MS(varsayılan1200000)OPENCLAW_QA_CREDENTIAL_HEARTBEAT_INTERVAL_MS(varsayılan30000)OPENCLAW_QA_CREDENTIAL_ACQUIRE_TIMEOUT_MS(varsayılan90000)OPENCLAW_QA_CREDENTIAL_HTTP_TIMEOUT_MS(varsayılan15000)OPENCLAW_QA_CONVEX_ENDPOINT_PREFIX(varsayılan/qa-credentials/v1)OPENCLAW_QA_CREDENTIAL_OWNER_ID(isteğe bağlı izleme kimliği)OPENCLAW_QA_ALLOW_INSECURE_HTTP=1, yalnızca yerel geliştirme için loopbackhttp://Convex URL’lerine izin verir.
OPENCLAW_QA_CONVEX_SITE_URL, normal çalışmada https:// kullanmalıdır.
Maintainer yönetici komutları (havuz ekle/kaldır/listele) özellikle
OPENCLAW_QA_CONVEX_SECRET_MAINTAINER gerektirir.
Maintainer’lar için CLI yardımcıları:
pnpm openclaw qa credentials add --kind telegram --payload-file qa/telegram-credential.json
pnpm openclaw qa credentials list --kind telegram
pnpm openclaw qa credentials remove --credential-id <credential-id>
Betiklerde ve CI yardımcı araçlarında makine tarafından okunabilir çıktı için --json kullanın.
Varsayılan endpoint sözleşmesi (OPENCLAW_QA_CONVEX_SITE_URL + /qa-credentials/v1):
POST /acquire- İstek:
{ kind, ownerId, actorRole, leaseTtlMs, heartbeatIntervalMs } - Başarı:
{ status: "ok", credentialId, leaseToken, payload, leaseTtlMs?, heartbeatIntervalMs? } - Tükenmiş/yeniden denenebilir:
{ status: "error", code: "POOL_EXHAUSTED" | "NO_CREDENTIAL_AVAILABLE", ... }
- İstek:
POST /heartbeat- İstek:
{ kind, ownerId, actorRole, credentialId, leaseToken, leaseTtlMs } - Başarı:
{ status: "ok" }(veya boş2xx)
- İstek:
POST /release- İstek:
{ kind, ownerId, actorRole, credentialId, leaseToken } - Başarı:
{ status: "ok" }(veya boş2xx)
- İstek:
POST /admin/add(yalnızca maintainer gizli değeri)- İstek:
{ kind, actorId, payload, note?, status? } - Başarı:
{ status: "ok", credential }
- İstek:
POST /admin/remove(yalnızca maintainer gizli değeri)- İstek:
{ credentialId, actorId } - Başarı:
{ status: "ok", changed, credential } - Etkin kiralama koruması:
{ status: "error", code: "LEASE_ACTIVE", ... }
- İstek:
POST /admin/list(yalnızca maintainer gizli değeri)- İstek:
{ kind?, status?, includePayload?, limit? } - Başarı:
{ status: "ok", credentials, count }
- İstek:
Telegram türü için payload şekli:
{ groupId: string, driverToken: string, sutToken: string }groupId, sayısal bir Telegram sohbet kimliği dizesi olmalıdır.admin/add,kind: "telegram"için bu şekli doğrular ve hatalı biçimli payload’ları reddeder.
QA’ye bir kanal ekleme
Markdown QA sistemine bir kanal eklemek tam olarak iki şey gerektirir:
- Kanal için bir taşıma adaptörü.
- Kanal sözleşmesini çalıştıran bir senaryo paketi.
Paylaşılan qa-lab ana makinesi akışı sahiplenebiliyorsa yeni bir üst düzey QA komut kökü eklemeyin.
qa-lab, paylaşılan ana makine mekaniklerinin sahibidir:
openclaw qakomut kökü- paket başlatma ve kapatma
- worker eşzamanlılığı
- artifakt yazımı
- rapor oluşturma
- senaryo yürütme
- eski
qa-channelsenaryoları için uyumluluk takma adları
Çalıştırıcı Plugin’leri taşıma sözleşmesinin sahibidir:
openclaw qa <runner>biçiminde paylaşılanqakökü altına nasıl bağlandığı- Gateway’in bu taşıma için nasıl yapılandırıldığı
- hazır oluşun nasıl kontrol edildiği
- gelen olayların nasıl enjekte edildiği
- giden mesajların nasıl gözlemlendiği
- dökümler ve normalleştirilmiş taşıma durumunun nasıl açığa çıkarıldığı
- taşıma destekli eylemlerin nasıl yürütüldüğü
- taşıma özelindeki sıfırlama veya temizliğin nasıl ele alındığı
Yeni bir kanal için minimum benimseme eşiği:
- Paylaşılan
qakökünün sahibi olarakqa-lab’ı koruyun. - Taşıma çalıştırıcısını paylaşılan
qa-labana makine sınırında uygulayın. - Taşıma özelindeki mekanikleri çalıştırıcı Plugin’inde veya kanal harness’inde tutun.
- Rakip bir kök komut kaydetmek yerine çalıştırıcıyı
openclaw qa <runner>olarak bağlayın. Çalıştırıcı Plugin’leriopenclaw.plugin.jsoniçindeqaRunnersbildirmeli veruntime-api.tsiçinden eşleşen birqaRunnerCliRegistrationsdizisi dışa aktarmalıdır.runtime-api.tsdosyasını hafif tutun; lazy CLI ve çalıştırıcı yürütmesi ayrı giriş noktalarının arkasında kalmalıdır. qa/scenarios/altında markdown senaryoları yazın veya uyarlayın.- Yeni senaryolar için genel senaryo yardımcılarını kullanın.
- Depoda kasıtlı bir geçiş yapılmıyorsa mevcut uyumluluk takma adlarını çalışır durumda tutun.
Karar kuralı katıdır:
- Davranış
qa-labiçinde bir kez ifade edilebiliyorsa, onuqa-labiçine koyun. - Davranış tek bir kanal taşımasına bağlıysa, onu o çalıştırıcı Plugin’inde veya Plugin harness’inde tutun.
- Bir senaryo birden fazla kanalın kullanabileceği yeni bir yetenek gerektiriyorsa,
suite.tsiçine kanala özel bir dal eklemek yerine genel bir yardımcı ekleyin. - Bir davranış yalnızca tek bir taşıma için anlamlıysa, senaryoyu taşıma özelinde tutun ve bunu senaryo sözleşmesinde açıkça belirtin.
Yeni senaryolar için tercih edilen genel yardımcı adları:
waitForTransportReadywaitForChannelReadyinjectInboundMessageinjectOutboundMessagewaitForTransportOutboundMessagewaitForChannelOutboundMessagewaitForNoTransportOutboundgetTransportSnapshotreadTransportMessagereadTransportTranscriptformatTransportTranscriptresetTransport
Mevcut senaryolar için uyumluluk takma adları kullanılmaya devam eder; bunlar arasında şunlar vardır:
waitForQaChannelReadywaitForOutboundMessagewaitForNoOutboundformatConversationTranscriptresetBus
Yeni kanal çalışmaları genel yardımcı adlarını kullanmalıdır. Uyumluluk takma adları, bayrak günü tarzı bir geçişi önlemek içindir; yeni senaryo yazımı için model olarak değil.
Test paketleri (hangisi nerede çalışır)
Paketleri “artan gerçekçilik” (ve artan oynaklık/maliyet) olarak düşünün:
Unit / integration (varsayılan)
- Komut:
pnpm test - Yapılandırma: mevcut kapsamlı Vitest projeleri üzerinde on adet sıralı shard çalıştırması (
vitest.full-*.config.ts) - Dosyalar:
src/**/*.test.ts,packages/**/*.test.ts,test/**/*.test.tsaltındaki çekirdek/unit envanterleri vevitest.unit.config.tskapsamındaki allowlist’e alınmışuinode testleri - Kapsam:
- Saf unit testleri
- Süreç içi entegrasyon testleri (gateway auth, yönlendirme, araç kullanımı, ayrıştırma, yapılandırma)
- Bilinen hatalar için deterministik regresyonlar
- Beklentiler:
- CI içinde çalışır
- Gerçek anahtarlar gerekmez
- Hızlı ve kararlı olmalıdır
- Projects notu:
- Hedef belirtilmemiş
pnpm testartık tek bir devasa yerel root-project süreci yerine on bir daha küçük shard yapılandırması (core-unit-src,core-unit-security,core-unit-ui,core-unit-support,core-support-boundary,core-contracts,core-bundled,core-runtime,agentic,auto-reply,extensions) çalıştırır. Bu, yüklü makinelerde en yüksek RSS’i azaltır ve auto-reply/extension işlerinin ilgisiz paketleri aç bırakmasını önler. pnpm test --watchhâlâ yerel rootvitest.config.tsproje grafiğini kullanır, çünkü çok parçalı bir watch döngüsü pratik değildir.pnpm test,pnpm test:watchvepnpm test:perf:imports, açık dosya/dizin hedeflerini önce kapsamlı hatlar üzerinden yönlendirir; böylecepnpm test extensions/discord/src/monitor/message-handler.preflight.test.tstam root proje başlangıç maliyetini ödemez.pnpm test:changed, fark yalnızca yönlendirilebilir kaynak/test dosyalarına dokunuyorsa değişen git yollarını aynı kapsamlı hatlara genişletir; config/setup düzenlemeleri ise yine geniş root-project yeniden çalıştırmasına düşer.- Agents, commands, plugins, auto-reply yardımcıları,
plugin-sdkve benzeri saf yardımcı alanlardaki import yükü hafif unit testleri,test/setup-openclaw-runtime.tsdosyasını atlayanunit-fasthattı üzerinden yönlendirilir; durum bilgili/runtime yükü ağır dosyalar mevcut hatlarda kalır. - Seçilmiş
plugin-sdkvecommandsyardımcı kaynak dosyaları da changed-mode çalıştırmalarını bu hafif hatlardaki açık kardeş testlere eşler; böylece yardımcı düzenlemeleri o dizin için tüm ağır paketi yeniden çalıştırmaktan kaçınır. auto-replyartık üç özel kovaya sahiptir: üst düzey çekirdek yardımcılar, üst düzeyreply.*entegrasyon testleri vesrc/auto-reply/reply/**alt ağacı. Bu, en ağır reply harness işini ucuz status/chunk/token testlerinden uzak tutar.
- Hedef belirtilmemiş
- Embedded runner notu:
- Message-tool keşif girdilerini veya Compaction runtime bağlamını değiştirdiğinizde, iki kapsama düzeyini de koruyun.
- Saf yönlendirme/normalleştirme sınırları için odaklı yardımcı regresyonları ekleyin.
- Ayrıca embedded runner entegrasyon paketlerini 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 paketler, kapsamlı kimliklerin ve Compaction davranışının gerçek
run.ts/compact.tsyolları üzerinden akmaya devam ettiğini doğrular; yalnızca yardımcı testleri bu entegrasyon 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: falseayarlar ve root projects, e2e ve live yapılandırmaları boyunca yalıtılmamış çalıştırıcıyı kullanır. - Root UI hattı
jsdomsetup ve optimizer’ını korur, ancak artık paylaşılan yalıtılmamış çalıştırıcı üzerinde çalışır. - Her
pnpm testshard’ı, paylaşılan Vitest 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-maglevde ekler. Stok V8 davranışıyla karşılaştırmanı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, değişen yollar daha küçük bir pakete temiz biçimde eşleniyorsa kapsamlı hatlar üzerinden yönlendirilir.pnpm test:maxvepnpm test:changed:maxaynı yönlendirme davranışını korur; yalnızca daha yüksek worker sınırıyla çalışır.- Yerel worker otomatik ölçekleme artık kasıtlı olarak daha muhafazakârdır ve ana makine yük ortalaması zaten yüksek olduğunda da geri çekilir; böylece birden fazla eşzamanlı Vitest çalıştırması varsayılan olarak daha az zarar verir.
- Temel Vitest yapılandırması, changed-mode yeniden çalıştırmalarının test bağlantılandırması değiştiğinde 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 profilleme 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-breakdown çıktısını etkinleştirir.pnpm test:perf:imports:changed, aynı profilleme görünümünüorigin/mainsonrasındaki değişen dosyalara daraltır.
pnpm test:perf:changed:bench -- --ref <git-ref>, yönlendirilmiştest:changedile yerel root-project yolunu o commit edilmiş fark için karşılaştırır ve duvar saati süresi ile macOS en yüksek RSS değerini yazdırır.pnpm test:perf:changed:bench -- --worktree, değişen dosya listesiniscripts/test-projects.mjsve root Vitest yapılandırması üzerinden yönlendirerek mevcut kirli ağacı kıyaslar.pnpm test:perf:profile:main, Vitest/Vite başlangıcı ve dönüşüm yükü için ana iş parçacığı CPU profili yazar.pnpm test:perf:profile:runner, dosya paralelliği devre dışıyken unit paketi için çalıştırıcı 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 - Runtime varsayılanları:
- Deponun geri kalanıyla uyumlu şekilde Vitest
threadsveisolate: falsekullanır. - Uyarlanabilir worker’lar kullanır (CI: en fazla 2, yerel: varsayılan 1).
- Konsol G/Ç yükünü azaltmak için varsayılan olarak sessiz modda çalışır.
- Deponun geri kalanıyla uyumlu şekilde Vitest
- Yararlı geçersiz kılmalar:
- Worker sayısını zorlamak için
OPENCLAW_E2E_WORKERS=<n>(üst sınır 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, Node eşleştirme ve daha ağır ağ işlemleri
- Beklentiler:
- CI içinde çalışır (boru hattında etkinleştirildiğinde)
- Gerçek anahtarlar gerekmez
- Unit testlerinden daha fazla hareketli parça içerir (daha yavaş olabilir)
E2E: OpenShell backend smoke
- Komut:
pnpm test:e2e:openshell - Dosya:
test/openshell-sandbox.e2e.test.ts - Kapsam:
- Ana makinede Docker üzerinden izole bir OpenShell gateway başlatır
- Geçici bir yerel Dockerfile’dan bir sandbox oluşturur
- OpenClaw’ın OpenShell backend’ini gerçek
sandbox ssh-config+ SSH exec üzerinden çalıştırır - Sandbox fs bridge üzerinden remote-canonical 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 bir
openshellCLI ve çalışan bir Docker daemon gerektirir - İzole
HOME/XDG_CONFIG_HOMEkullanır, ardından test gateway’i ve sandbox’ı yok eder
- Yalnızca isteğe bağlıdır; varsayılan
- Yararlı geçersiz kılmalar:
- Geniş e2e paketini 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
- Geniş e2e paketini 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=1ayarlar) - Kapsam:
- “Bu sağlayıcı/model bugün gerçekten çalışıyor mu, gerçek kimlik bilgileriyle?”
- Sağlayıcı biçim değişikliklerini, tool-calling tuhaflıklarını, auth sorunlarını ve rate limit davranışını yakalar
- Beklentiler:
- Tasarım gereği CI açısından kararlı değildir (gerçek ağlar, gerçek sağlayıcı politikaları, kotalar, kesintiler)
- Para harcar / rate limit kullanır
- “Her şeyi” çalıştırmak yerine daraltılmış alt kümeler çalıştırmayı tercih edin
- Live çalıştırmaları, eksik API anahtarlarını almak için
~/.profilekaynağını kullanır. - Varsayılan olarak live çalıştırmaları yine de
HOMEdizinini izole eder ve config/auth materyalini geçici bir test home’una kopyalar; böylece unit fixture’ları gerçek~/.openclawdizininizi değiştiremez. - Live testlerinin gerçek home dizininizi kullanmasını özellikle istediğinizde 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. Tam başlangıç günlüklerini geri istiyorsanızOPENCLAW_LIVE_TEST_QUIET=0ayarlayın.- API anahtarı rotasyonu (sağlayıcıya özel): virgül/noktalı virgül biçiminde
*_API_KEYSveya*_API_KEY_1,*_API_KEY_2ayarlayın (örneğinOPENAI_API_KEYS,ANTHROPIC_API_KEYS,GEMINI_API_KEYS) ya da live özel geçersiz kılma olarakOPENCLAW_LIVE_*_KEYkullanın; testler rate limit yanıtlarında yeniden dener. - İlerleme/Heartbeat çıktısı:
- Live paketleri artık ilerleme satırlarını stderr’e yazar; böylece uzun sağlayıcı çağrıları, Vitest konsol yakalaması sessiz olsa bile görünür biçimde etkin kalır.
vitest.live.config.ts, sağlayıcı/gateway ilerleme satırlarının live çalıştırmalar sırasında anında akması için Vitest konsol yakalamasını 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 paketi çalıştırmalıyım?
Bu karar tablosunu kullanın:
- Mantık/test düzenliyorsanız:
pnpm testçalıştırın (ve çok değişiklik yaptıysanızpnpm test:coverage) - Gateway ağ iletişimi / WS protokolü / eşleştirmeye dokunuyorsanız:
pnpm test:e2eekleyin - “Botum çalışmıyor” / sağlayıcıya özel hatalar / tool calling üzerinde hata ayıklıyorsanız: daraltılmış bir
pnpm test:liveçalıştırın
Live: Android Node yetenek taraması
- Test:
src/gateway/android-node.capabilities.live.test.ts - Betik:
pnpm android:test:integration - Amaç: bağlı bir Android Node tarafından şu anda ilan edilen her komutu çağırmak ve komut sözleşmesi davranışını doğrulamak.
- Kapsam:
- Ön koşullu/elle kurulum (paket uygulamayı kurmaz/çalıştırmaz/eşleştirmez).
- Seçilen Android Node için komut bazında gateway
node.invokedoğrulaması.
- Gerekli ön kurulum:
- Android uygulaması zaten gateway’e bağlı ve eşleştirilmiş olmalıdır.
- Uygulama ön planda tutulmalıdır.
- Başarılı olmasını beklediğiniz yetenekler için izinler/yakalama onayı verilmiş olmalıdır.
- İ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 (profile anahtarları)
Live testleri, hataları izole edebilmek için iki katmana ayrılmıştır:
- “Direct model”, sağlayıcının/modelin verilen anahtarla gerçekten yanıt verip veremediğini söyler.
- “Gateway smoke”, tam gateway+agent hattının o model için çalıştığını söyler (oturumlar, geçmiş, araçlar, sandbox politikası vb.).
Katman 1: Direct model completion (gateway yok)
- Test:
src/agents/models.profiles.live.test.ts - Amaç:
- Keşfedilen modelleri numaralandırmak
- Kimlik bilgilerinizin bulunduğu 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 paketi gerçekten çalıştırmak için
OPENCLAW_LIVE_MODELS=modern(veyaall, modern için takma ad) ayarlayın; aksi haldepnpm test:liveodaklı olarak gateway smoke üzerinde kalsın diye atlanır - Modeller nasıl seçilir:
- 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/all taramaları varsayılan olarak özenle seçilmiş yüksek sinyalli bir üst sınır kullanır; kapsamlı bir modern tarama için
OPENCLAW_LIVE_MAX_MODELS=0, daha küçük bir sınır için pozitif bir sayı ayarlayın.
- Modern allowlist’i çalıştırmak için
- Sağlayıcılar nasıl seçilir:
OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli"(virgülle ayrılmış allowlist)
- Anahtarlar nereden gelir:
- Varsayılan olarak: profile deposu ve ortam geri dönüşleri
- Yalnızca profile deposunu zorunlu kılmak için
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1ayarlayın
- Bunun var olma nedeni:
- “Sağlayıcı API bozuk / anahtar geçersiz” ile “gateway agent hattı bozuk” durumlarını ayırır
- Küçük, izole regresyonlar içerir (örnek: OpenAI Responses/Codex Responses reasoning replay + tool-call akışları)
Katman 2: Gateway + geliştirme agent smoke (@openclaw’ın gerçekten yaptığı şey)
- Test:
src/gateway/gateway-models.profiles.live.test.ts - Amaç:
- Süreç içi bir gateway başlatmak
- Bir
agent:dev:*oturumu oluşturmak/yamamak (çalıştırma başına model geçersiz kılma) - Anahtarlı modeller üzerinde yineleyip şunları doğrulamak:
- “anlamlı” yanıt (araç yok)
- gerçek bir araç çağrısının çalışması (
readprobe) - isteğe bağlı ek araç probları (
exec+readprobe) - OpenAI regresyon yollarının (yalnızca tool-call → takip) çalışmaya devam etmesi
- Probe ayrıntıları (böylece hataları hızlıca açıklayabilirsiniz):
readprobe: test çalışma alanına bir nonce dosyası yazar ve agent’tan bunureadetmesini ve nonce’u geri yankılamasını ister.exec+readprobe: test agent’tan bir nonce’u geçici bir dosyayaexecile yazmasını, ardından gerireadetmesini ister.- image probe: test oluşturulmuş bir PNG’yi (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)
- Modeller nasıl seçilir:
- 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ülle ayrılmış liste) ayarlayın - Modern/all gateway taramaları varsayılan olarak özenle seçilmiş yüksek sinyalli bir üst sınır kullanır; kapsamlı bir modern tarama için
OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0, daha küçük bir üst sınır için pozitif bir sayı ayarlayın.
- Sağlayıcılar nasıl seçilir (“OpenRouter her şeyi”nden kaçının):
OPENCLAW_LIVE_GATEWAY_PROVIDERS="google,google-antigravity,google-gemini-cli,openai,anthropic,zai,minimax"(virgülle ayrılmış allowlist)
- Tool + image probları bu live testte her zaman açıktır:
readprobe +exec+readprobe (araç stresi)- image probe, model image input desteği ilan ettiğinde çalışır
- Akış (üst düzey):
- 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) - Embedded agent, modele çok kipli 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 (
İpucu: makinenizde neleri test edebileceğinizi (ve tam provider/model kimliklerini) görmek için şunu çalıştırın:
openclaw models list
openclaw models list --json
Live: CLI backend smoke (Claude, Codex, Gemini veya diğer yerel CLI’lar)
- Test:
src/gateway/gateway-cli-backend.live.test.ts - Amaç: varsayılan yapılandırmanıza dokunmadan, Gateway + agent hattını yerel bir CLI backend kullanarak doğrulamak.
- Backend’e özgü smoke varsayılanları, sahibi olan extension’ın
cli-backend.tstanımıyla birlikte bulunur. - Etkinleştirme:
pnpm test:live(veya Vitest’i doğrudan çağırıyorsanızOPENCLAW_LIVE_TEST=1)OPENCLAW_LIVE_CLI_BACKEND=1
- Varsayılanlar:
- Varsayılan sağlayıcı/model:
claude-cli/claude-sonnet-4-6 - Komut/argüman/image davranışı, sahibi olan CLI backend Plugin metadata’sından gelir.
- Varsayılan sağlayıcı/model:
- Geçersiz kılmalar (isteğe bağlı):
OPENCLAW_LIVE_CLI_BACKEND_MODEL="codex-cli/gpt-5.4"OPENCLAW_LIVE_CLI_BACKEND_COMMAND="/full/path/to/codex"OPENCLAW_LIVE_CLI_BACKEND_ARGS='["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"]'- Gerçek bir image eki göndermek için
OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=1(yollar prompt içine enjekte edilir). - Image dosya yollarını prompt enjeksiyonu yerine CLI argümanları olarak geçirmek için
OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image". IMAGE_ARGayarlı olduğunda image 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. - Varsayılan Claude Sonnet -> Opus aynı-oturum devamlılık probe’unu devre dışı bırakmak için
OPENCLAW_LIVE_CLI_BACKEND_MODEL_SWITCH_PROBE=0(seçilen model bir geçiş hedefini destekliyorsa zorla açmak için1ayarlayın).
Örnek:
OPENCLAW_LIVE_CLI_BACKEND=1 \
OPENCLAW_LIVE_CLI_BACKEND_MODEL="codex-cli/gpt-5.4" \
pnpm test:live src/gateway/gateway-cli-backend.live.test.ts
Docker tarifi:
pnpm test:docker:live-cli-backend
Tek sağlayıcılı Docker tarifleri:
pnpm test:docker:live-cli-backend:claude
pnpm test:docker:live-cli-backend:claude-subscription
pnpm test:docker:live-cli-backend:codex
pnpm test:docker:live-cli-backend:gemini
Notlar:
- Docker çalıştırıcısı
scripts/test-live-cli-backend-docker.shkonumundadır. - Live CLI-backend smoke testini depo Docker image’ı içinde root olmayan
nodekullanıcısı olarak çalıştırır. - Sahibi olan extension’dan CLI smoke metadata’sını çözer, ardından eşleşen Linux CLI paketini (
@anthropic-ai/claude-code,@openai/codexveya@google/gemini-cli) önbelleğe alınmış yazılabilir bir öneke,OPENCLAW_DOCKER_CLI_TOOLS_DIRiçine kurar (varsayılan:~/.cache/openclaw/docker-cli-tools). pnpm test:docker:live-cli-backend:claude-subscription, taşınabilir Claude Code abonelik OAuth’u gerektirir; bunun için yaclaudeAiOauth.subscriptionTypeiçeren~/.claude/.credentials.jsonya daclaude setup-tokeniçindenCLAUDE_CODE_OAUTH_TOKENkullanılmalıdır. Önce Docker içinde doğrudanclaude -pkomutunu kanıtlar, ardından Anthropic API key ortam değişkenlerini korumadan iki Gateway CLI-backend turu çalıştırır. Bu subscription hattı, Claude şu anda üçüncü taraf uygulama kullanımını normal abonelik planı sınırları yerine ek kullanım faturalandırması üzerinden yönlendirdiği için varsayılan olarak Claude MCP/tool ve image problarını devre dışı bırakır.- Live CLI-backend smoke artık Claude, Codex ve Gemini için aynı uçtan uca akışı çalıştırır: metin turu, image sınıflandırma turu, ardından gateway CLI üzerinden doğrulanan MCP
cronaraç çağrısı. - Claude’un varsayılan smoke testi ayrıca oturumu Sonnet’ten Opus’a yamalar ve devam ettirilen oturumun önceki bir notu hâlâ hatırladığını doğrular.
Live: ACP bind smoke (/acp spawn ... --bind here)
- Test:
src/gateway/gateway-acp-bind.live.test.ts - Amaç: gerçek ACP konuşma-bind akışını canlı bir ACP agent ile doğrulamak:
/acp spawn <agent> --bind heregönder- sentetik bir message-channel konuşmasını yerinde bağla
- aynı konuşmada normal bir takip mesajı gönder
- takibin 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:
- Docker içindeki ACP agent’ları:
claude,codex,gemini - Doğrudan
pnpm test:live ...için ACP agent’ı:claude - Sentetik kanal: Slack DM tarzı konuşma bağlamı
- ACP backend:
acpx
- Docker içindeki ACP agent’ları:
- Geçersiz kılmalar:
OPENCLAW_LIVE_ACP_BIND_AGENT=claudeOPENCLAW_LIVE_ACP_BIND_AGENT=codexOPENCLAW_LIVE_ACP_BIND_AGENT=geminiOPENCLAW_LIVE_ACP_BIND_AGENTS=claude,codex,geminiOPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND='npx -y @agentclientprotocol/claude-agent-acp@<version>'
- Notlar:
- Bu hat, testlerin dışarıya gerçekten teslim ediyormuş gibi yapmadan message-channel bağlamı ekleyebilmesi için yöneticiye özel sentetik originating-route alanlarıyla gateway
chat.sendyüzeyini kullanır. OPENCLAW_LIVE_ACP_BIND_AGENT_COMMANDayarlı değilse test, seçilen ACP harness agent için embeddedacpxPlugin’inin yerleşik agent kayıt defterini kullanır.
- Bu hat, testlerin dışarıya gerçekten teslim ediyormuş gibi yapmadan message-channel bağlamı ekleyebilmesi için yöneticiye özel sentetik originating-route alanlarıyla gateway
Örnek:
OPENCLAW_LIVE_ACP_BIND=1 \
OPENCLAW_LIVE_ACP_BIND_AGENT=claude \
pnpm test:live src/gateway/gateway-acp-bind.live.test.ts
Docker tarifi:
pnpm test:docker:live-acp-bind
Tek agent’lı Docker tarifleri:
pnpm test:docker:live-acp-bind:claude
pnpm test:docker:live-acp-bind:codex
pnpm test:docker:live-acp-bind:gemini
Docker notları:
- Docker çalıştırıcısı
scripts/test-live-acp-bind-docker.shkonumundadır. - Varsayılan olarak ACP bind smoke testini desteklenen tüm live CLI agent’larına sırayla çalıştırır:
claude,codex, ardındangemini. - Matrisi daraltmak için
OPENCLAW_LIVE_ACP_BIND_AGENTS=claude,OPENCLAW_LIVE_ACP_BIND_AGENTS=codexveyaOPENCLAW_LIVE_ACP_BIND_AGENTS=geminikullanın. ~/.profilekaynağını alır, eşleşen CLI auth materyalini container içine yerleştirir, yazılabilir bir npm önekineacpxkurar, sonra istenen live CLI’yı (@anthropic-ai/claude-code,@openai/codexveya@google/gemini-cli) eksikse kurar.- Docker içinde çalıştırıcı
OPENCLAW_LIVE_ACP_BIND_ACPX_COMMAND=$HOME/.npm-global/bin/acpxayarlar; böylece acpx, kaynağı alınmış profildeki sağlayıcı ortam değişkenlerini alt harness CLI için kullanılabilir tutar.
Live: Codex app-server harness smoke
- Amaç: Plugin sahibi Codex harness’ini normal gateway
agentyöntemi üzerinden doğrulamak:- paketlenmiş
codexPlugin’ini yükle OPENCLAW_AGENT_RUNTIME=codexseçcodex/gpt-5.4için ilk gateway agent turunu gönder- aynı OpenClaw oturumuna ikinci bir tur gönder ve app-server thread’inin devam ettirilebildiğini doğrula
- aynı gateway komut
yolu üzerinden
/codex statusve/codex modelskomutlarını çalıştır
- paketlenmiş
- Test:
src/gateway/gateway-codex-harness.live.test.ts - Etkinleştirme:
OPENCLAW_LIVE_CODEX_HARNESS=1 - Varsayılan model:
codex/gpt-5.4 - İsteğe bağlı image probe:
OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1 - İsteğe bağlı MCP/tool probe:
OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1 - Smoke testi
OPENCLAW_AGENT_HARNESS_FALLBACK=noneayarlar; böylece bozuk bir Codex harness sessizce PI’a geri düşerek başarılı görünemez. - Auth: shell/profile içinden
OPENAI_API_KEY, ayrıca isteğe bağlı olarak kopyalanmış~/.codex/auth.jsonve~/.codex/config.toml
Yerel tarif:
source ~/.profile
OPENCLAW_LIVE_CODEX_HARNESS=1 \
OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1 \
OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1 \
OPENCLAW_LIVE_CODEX_HARNESS_MODEL=codex/gpt-5.4 \
pnpm test:live -- src/gateway/gateway-codex-harness.live.test.ts
Docker tarifi:
source ~/.profile
pnpm test:docker:live-codex-harness
Docker notları:
- Docker çalıştırıcısı
scripts/test-live-codex-harness-docker.shkonumundadır. - Bağlanmış
~/.profilekaynağını alır,OPENAI_API_KEYgeçirir, mevcutsa Codex CLI auth dosyalarını kopyalar,@openai/codexpaketini yazılabilir bağlanmış bir npm önekine kurar, kaynak ağacını hazırlar ve yalnızca Codex-harness live testini çalıştırır. - Docker varsayılan olarak image ve MCP/tool problarını etkinleştirir. Daha dar bir hata ayıklama çalıştırması gerektiğinde
OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0veyaOPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0ayarlayın. - Docker ayrıca
OPENCLAW_AGENT_HARNESS_FALLBACK=nonedışa aktarır; bu da live test yapılandırmasıyla eşleşir, böyleceopenai-codex/*veya PI fallback bir Codex harness regresyonunu gizleyemez.
Önerilen live tarifleri
Dar ve 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
-
Birden fazla sağlayıcıda 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ı):
Notlar:
google/..., Gemini API’yi kullanır (API anahtarı).google-antigravity/..., Antigravity OAuth köprüsünü kullanır (Cloud Code Assist tarzı agent endpoint’i).google-gemini-cli/..., makinenizdeki yerel Gemini CLI’ı kullanır (ayrı auth + araç kullanımı tuhaflıkları).- Gemini API ile Gemini CLI karşılaştırması:
- API: OpenClaw, Google’ın barındırılan Gemini API’sini HTTP üzerinden çağırır (API anahtarı / profile auth); çoğu kullanıcının “Gemini” derken kastettiği budur.
- CLI: OpenClaw, yerel bir
geminiikilisini shell üzerinden çalıştırır; bunun kendi auth yapısı vardır ve farklı davranabilir (streaming/tool desteği/sürüm kayması).
Live: model matrisi (ne kapsıyoruz)
Sabit bir “CI model listesi” yoktur (live isteğe bağlıdır), ancak bunlar anahtarları olan bir geliştirme makinesinde düzenli olarak kapsanması önerilen modellerdir.
Modern smoke kümesi (tool calling + image)
Çalışır durumda kalmasını beklediğimiz “yaygın modeller” çalıştırması budur:
- 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
Araçlar + image ile gateway smoke çalıştırın:
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 seviye: tool calling (Read + isteğe bağlı Exec)
Her sağlayıcı ailesi için 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
İsteğe bağlı ek kapsama (olsa iyi olur):
- xAI:
xai/grok-4(veya mevcut en yeni sürüm) - Mistral:
mistral/… (etkinleştirdiğiniz araç destekli bir model seçin) - Cerebras:
cerebras/… (erişiminiz varsa) - LM Studio:
lmstudio/… (yerel; tool calling API moduna bağlıdır)
Vision: image gönderimi (ek → çok kipli mesaj)
Image probe’unu çalıştırmak için OPENCLAW_LIVE_GATEWAY_MODELS içine en az bir image özellikli model ekleyin (Claude/Gemini/OpenAI vision özellikli varyantları vb.).
Toplayıcılar / alternatif gateway’ler
Anahtarlarınız etkinse, şu yollar üzerinden test de desteklenir:
- OpenRouter:
openrouter/...(yüzlerce model; tool+image özellikli adayları bulmak içinopenclaw models scankullanın) - OpenCode: Zen için
opencode/..., Go içinopencode-go/...(OPENCODE_API_KEY/OPENCODE_ZEN_API_KEYile auth)
Live matrisine ekleyebileceğiniz daha fazla sağlayıcı (kimlik bilgileriniz/yapılandırmanız varsa):
- 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.providersüzerinden (özel endpoint’ler):minimax(cloud/API) ve ayrıca her türlü OpenAI/Anthropic uyumlu proxy (LM Studio, vLLM, LiteLLM vb.)
İpucu: belgelerde “tüm modelleri” sabit kodlamaya çalışmayın. Yetkili liste, makinenizde discoverModels(...) ne döndürüyorsa ve hangi anahtarlar mevcutsa odur.
Kimlik bilgileri (asla commit etmeyin)
Live testler kimlik bilgilerini CLI ile aynı şekilde keşfeder. Pratik sonuçları:
-
CLI çalışıyorsa, live testler de aynı anahtarları bulabilmelidir.
-
Bir live test “kimlik bilgisi yok” diyorsa, bunu
openclaw models list/ model seçimini hata ayıklarken yaptığınız gibi hata ayıklayın. -
Agent başına auth profilleri:
~/.openclaw/agents/<agentId>/agent/auth-profiles.json(live testlerde “profile anahtarları” denince kastedilen budur) -
Yapılandırma:
~/.openclaw/openclaw.json(veyaOPENCLAW_CONFIG_PATH) -
Eski durum dizini:
~/.openclaw/credentials/(varsa hazırlanan live home’a kopyalanır, ancak ana profile-key deposu değildir) -
Live yerel çalıştırmalar varsayılan olarak etkin yapılandırmayı, agent başına
auth-profiles.jsondosyalarını, eskicredentials/dizinini ve desteklenen harici CLI auth dizinlerini geçici bir test home’una kopyalar; hazırlanan live home’larworkspace/vesandboxes/dizinlerini atlar veagents.*.workspace/agentDiryol geçersiz kılmaları kaldırılır, böylece probe’lar gerçek ana makine çalışma alanınızın dışında kalır.
Ortam anahtarlarına güvenmek istiyorsanız (ör. ~/.profile içinde dışa aktarılmışlarsa), 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ı container içine bağlayabilir).
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
ComfyUI workflow media live
- Test:
extensions/comfy/comfy.live.test.ts - Etkinleştirme:
OPENCLAW_LIVE_TEST=1 COMFY_LIVE_TEST=1 pnpm test:live -- extensions/comfy/comfy.live.test.ts - Kapsam:
- Paketlenmiş comfy image, video ve
music_generateyollarını çalıştırır models.providers.comfy.<capability>yapılandırılmadıkça her yeteneği atlar- Comfy workflow gönderimi, polling, indirmeler veya Plugin kaydı değiştirildikten sonra yararlıdır
- Paketlenmiş comfy image, video ve
Image generation live
- Test:
src/image-generation/runtime.live.test.ts - Komut:
pnpm test:live src/image-generation/runtime.live.test.ts - Harness:
pnpm test:live:media image - Kapsam:
- Kayıtlı her image-generation sağlayıcı Plugin’ini numaralandırır
- Probe’dan önce eksik sağlayıcı ortam değişkenlerini login shell’inizden (
~/.profile) yükler - Varsayılan olarak canlı/env API anahtarlarını kayıtlı auth profillerinin önünde kullanır; böylece
auth-profiles.jsoniçindeki eski test anahtarları gerçek shell kimlik bilgilerini maskelemez - Kullanılabilir auth/profile/model olmayan sağlayıcıları atlar
- Paylaşılan runtime yeteneği üzerinden standart image-generation varyantlarını çalıştırır:
google:flash-generategoogle:pro-generategoogle:pro-editopenai:default-generate
- Şu anda kapsanan 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ışı:
- Yalnızca profile deposu auth’unu zorlamak ve yalnızca env geçersiz kılmalarını yok saymak için
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1
- Yalnızca profile deposu auth’unu zorlamak ve yalnızca env geçersiz kılmalarını yok saymak için
Music generation live
- Test:
extensions/music-generation-providers.live.test.ts - Etkinleştirme:
OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/music-generation-providers.live.test.ts - Harness:
pnpm test:live:media music - Kapsam:
- Paylaşılan paketlenmiş music-generation sağlayıcı yolunu çalıştırır
- Şu anda Google ve MiniMax’ı kapsar
- Probe’dan önce sağlayıcı ortam değişkenlerini login shell’inizden (
~/.profile) yükler - Varsayılan olarak canlı/env API anahtarlarını kayıtlı auth profillerinin önünde kullanır; böylece
auth-profiles.jsoniçindeki eski test anahtarları gerçek shell kimlik bilgilerini maskelemez - Kullanılabilir auth/profile/model olmayan sağlayıcıları atlar
- Mevcut olduğunda bildirilen iki runtime modunu da çalıştırır:
- Yalnızca prompt girdisiyle
generate - Sağlayıcı
capabilities.edit.enabledbildiriyorsaedit
- Yalnızca prompt girdisiyle
- Geçerli paylaşılan hat kapsaması:
google:generate,editminimax:generatecomfy: ayrı Comfy live dosyası, bu paylaşılan tarama değil
- İsteğe bağlı daraltma:
OPENCLAW_LIVE_MUSIC_GENERATION_PROVIDERS="google,minimax"OPENCLAW_LIVE_MUSIC_GENERATION_MODELS="google/lyria-3-clip-preview,minimax/music-2.5+"
- İsteğe bağlı auth davranışı:
- Yalnızca profile deposu auth’unu zorlamak ve yalnızca env geçersiz kılmalarını yok saymak için
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1
- Yalnızca profile deposu auth’unu zorlamak ve yalnızca env geçersiz kılmalarını yok saymak için
Video generation live
- Test:
extensions/video-generation-providers.live.test.ts - Etkinleştirme:
OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.live.test.ts - Harness:
pnpm test:live:media video - Kapsam:
- Paylaşılan paketlenmiş video-generation sağlayıcı yolunu çalıştırır
- Varsayılan olarak sürüm güvenli smoke yolunu kullanır: FAL dışı sağlayıcılar, sağlayıcı başına bir text-to-video isteği, bir saniyelik lobster prompt’u ve
OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MSüzerinden sağlayıcı başına işlem üst sınırı (varsayılan 180000) - Sağlayıcı tarafı kuyruk gecikmesi sürüm süresine baskın çıkabildiği için FAL varsayılan olarak atlanır; açıkça çalıştırmak için
--video-providers falveyaOPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="fal"geçin - Probe’dan önce sağlayıcı ortam değişkenlerini login shell’inizden (
~/.profile) yükler - Varsayılan olarak canlı/env API anahtarlarını kayıtlı auth profillerinin önünde kullanır; böylece
auth-profiles.jsoniçindeki eski test anahtarları gerçek shell kimlik bilgilerini maskelemez - Kullanılabilir auth/profile/model olmayan sağlayıcıları atlar
- Varsayılan olarak yalnızca
generateçalıştırır - Mevcut olduğunda bildirilen dönüşüm modlarını da çalıştırmak için
OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1ayarlayın:- Sağlayıcı
capabilities.imageToVideo.enabledbildiriyorsa ve seçilen sağlayıcı/model paylaşılan taramada tampon destekli yerel image girdisini kabul ediyorsaimageToVideo - Sağlayıcı
capabilities.videoToVideo.enabledbildiriyorsa ve seçilen sağlayıcı/model paylaşılan taramada tampon destekli yerel video girdisini kabul ediyorsavideoToVideo
- Sağlayıcı
- Paylaşılan taramada şu anda bildirilmiş ama atlanan
imageToVideosağlayıcıları:vydra, çünkü paketlenmişveo3yalnızca metindir ve paketlenmişklinguzak bir image URL’si gerektirir
- Sağlayıcıya özel Vydra kapsaması:
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_VYDRA_VIDEO=1 pnpm test:live -- extensions/vydra/vydra.live.test.ts- bu dosya varsayılan olarak uzak bir image URL fixture’ı kullanan
klinghattıyla birlikteveo3text-to-video çalıştırır
- Geçerli
videoToVideolive kapsaması:- yalnızca seçilen model
runway/gen4_alepholduğundarunway
- yalnızca seçilen model
- Paylaşılan taramada şu anda bildirilmiş ama atlanan
videoToVideosağlayıcıları:alibaba,qwen,xai, çünkü bu yollar şu anda uzakhttp(s)/ MP4 referans URL’leri gerektiriyorgoogle, çünkü mevcut paylaşılan Gemini/Veo hattı yerel tampon destekli girdi kullanıyor ve bu yol paylaşılan taramada kabul edilmiyoropenai, çünkü mevcut paylaşılan hatta kuruma özel video inpaint/remix erişim garantileri yok
- İsteğe bağlı daraltma:
OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="google,openai,runway"OPENCLAW_LIVE_VIDEO_GENERATION_MODELS="google/veo-3.1-fast-generate-preview,openai/sora-2,runway/gen4_aleph"- Varsayılan taramadaki FAL dahil tüm sağlayıcıları eklemek için
OPENCLAW_LIVE_VIDEO_GENERATION_SKIP_PROVIDERS="" - Agresif bir smoke çalıştırması için sağlayıcı başına işlem üst sınırını azaltmak üzere
OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS=60000
- İsteğe bağlı auth davranışı:
- Yalnızca profile deposu auth’unu zorlamak ve yalnızca env geçersiz kılmalarını yok saymak için
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1
- Yalnızca profile deposu auth’unu zorlamak ve yalnızca env geçersiz kılmalarını yok saymak için
Media live harness
- Komut:
pnpm test:live:media - Amaç:
- Paylaşılan image, music ve video live paketlerini repo’ya özgü tek bir giriş noktası üzerinden çalıştırır
- Eksik sağlayıcı ortam değişkenlerini
~/.profileiçinden otomatik yükler - Varsayılan olarak her paketi şu anda kullanılabilir auth’u olan sağlayıcılara otomatik olarak daraltır
scripts/test-live.mjsdosyasını yeniden kullanır; böylece Heartbeat ve sessiz mod davranışı tutarlı kalır
- Örnekler:
pnpm test:live:mediapnpm test:live:media image video --providers openai,google,minimaxpnpm test:live:media video --video-providers openai,runway --all-providerspnpm test:live:media music --quiet
Docker çalıştırıcıları (isteğe bağlı “Linux’ta çalışıyor” kontrolleri)
Bu Docker çalıştırıcıları iki kovaya ayrılır:
- Live model çalıştırıcıları:
test:docker:live-modelsvetest:docker:live-gateway, depo Docker image’ı içinde yalnızca eşleşen profile-key live dosyasını ç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ı bağlar (ve bağlanmışsa~/.profilekaynağını alır). Eşleşen yerel giriş noktalarıtest:live:models-profilesvetest:live:gateway-profiles’tır. - Docker live çalıştırıcıları varsayılan olarak daha küçük bir smoke üst sınırı kullanır, böylece tam bir 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 ve kapsamlı taramayı özellikle istediğinizde bu ortam değişkenlerini geçersiz kılın. test:docker:all, live Docker image’ını bir keztest:docker:live-buildile oluşturur, ardından bunu iki live Docker hattında yeniden kullanır.- Container 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 container başlatır ve daha üst düzey entegrasyon yollarını doğrular.
Live-model Docker çalıştırıcıları ayrıca yalnızca gerekli CLI auth home dizinlerini bağlayarak monte eder (veya çalıştırma daraltılmamışsa desteklenenlerin tümünü), ardından dış CLI OAuth’unun ana makine auth deposunu değiştirmeden token’ları yenileyebilmesi için çalıştırma öncesinde bunları container home’una kopyalar:
- 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 backend smoke:
pnpm test:docker:live-cli-backend(betik:scripts/test-live-cli-backend-docker.sh) - Codex app-server harness smoke:
pnpm test:docker:live-codex-harness(betik:scripts/test-live-codex-harness-docker.sh) - Gateway + geliştirme 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 iskele):
pnpm test:docker:onboard(betik:scripts/e2e/onboard-docker.sh) - Gateway ağ iletişimi (iki container, 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 yeniden başlatma semantiği):pnpm test:docker:plugins(betik:scripts/e2e/plugins-docker.sh)
Live-model Docker çalıştırıcıları ayrıca mevcut checkout’u salt okunur olarak bağlayıp
container içinde geçici bir workdir içine hazırlar. Bu, runtime
image’ını ince tutarken yine de Vitest’i tam yerel kaynak/yapılandırmanız üzerinde çalıştırmayı sağlar.
Hazırlama adımı .pnpm-store, .worktrees, __openclaw_vitest__ ve uygulamaya özgü .build veya
Gradle çıktı dizinleri gibi büyük yalnızca-yerel önbellekleri ve uygulama derleme çıktılarını atlar; böylece Docker live çalıştırmaları
makineye özgü artifaktları kopyalamak için dakikalar harcamaz.
Ayrıca OPENCLAW_SKIP_CHANNELS=1 ayarlarlar; böylece gateway live probları container içinde
gerçek Telegram/Discord vb. kanal worker’larını başlatmaz.
test:docker:live-models yine de pnpm test:live çalıştırır; bu nedenle bu Docker hattında gateway
live kapsamını daraltmanız veya hariç tutmanız gerektiğinde OPENCLAW_LIVE_GATEWAY_* değerlerini de geçirin.
test:docker:openwebui, daha üst düzey bir uyumluluk smoke testidir: OpenAI uyumlu HTTP endpoint’leri etkinleştirilmiş bir
OpenClaw gateway container’ı başlatır, bu gateway’e karşı sabitlenmiş bir Open WebUI container’ı başlatır, Open WebUI üzerinden oturum açar,
/api/models içinde openclaw/default gösterildiğini 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 gözle görülür biçimde daha yavaş olabilir; çünkü Docker’ın
Open WebUI image’ını çekmesi gerekebilir ve Open WebUI’nin kendi soğuk başlangıç kurulumunu tamamlaması gerekebilir.
Bu hat kullanılabilir bir live model anahtarı bekler ve Docker ileştirilmiş çalıştırmalarda bunu sağlamak için birincil yol
OPENCLAW_PROFILE_FILE’dır (varsayılan olarak ~/.profile).
Başarılı çalıştırmalar { "ok": true, "model": "openclaw/default", ... } gibi küçük bir JSON payload yazdırır.
test:docker:mcp-channels kasıtlı olarak deterministiktir ve gerçek bir
Telegram, Discord veya iMessage hesabına ihtiyaç duymaz. Tohumlanmış bir Gateway
container’ı başlatır, ardından openclaw mcp serve oluşturan ikinci bir container başlatır; sonra
yönlendirilmiş konuşma keşfini, döküm okumalarını, ek metadata’sını,
live 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 frame’lerini doğrudan inceler; böylece smoke testi yalnızca belirli bir istemci SDK’sının açığa çıkardığını değil,
bridge’in gerçekten ne yaydığını doğrular.
Elle ACP düz dil thread smoke testi (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 koruyun. ACP thread yönlendirme doğrulaması için tekrar gerekebilir, bu yüzden silmeyin.
Yararlı ortam değişkenleri:
OPENCLAW_CONFIG_DIR=...(varsayılan:~/.openclaw),/home/node/.openclawaltına bağlanırOPENCLAW_WORKSPACE_DIR=...(varsayılan:~/.openclaw/workspace),/home/node/.openclaw/workspacealtına bağlanırOPENCLAW_PROFILE_FILE=...(varsayılan:~/.profile),/home/node/.profilealtına bağlanır ve testler çalışmadan önce kaynağı alınırOPENCLAW_DOCKER_PROFILE_ENV_ONLY=1,OPENCLAW_PROFILE_FILEiçinden alınan yalnızca ortam değişkenlerini doğrulamak için; geçici config/workspace dizinleri ve harici CLI auth bağlamaları olmadan kullanılırOPENCLAW_DOCKER_CLI_TOOLS_DIR=...(varsayılan:~/.cache/openclaw/docker-cli-tools), Docker içinde önbellekli CLI kurulumları için/home/node/.npm-globalaltına bağlanır$HOMEaltındaki harici CLI auth dizinleri/dosyaları,/host-auth...altına salt okunur bağlanır, sonra testler başlamadan önce/home/node/...altına kopyalanır- Varsayılan dizinler:
.minimax - Varsayılan dosyalar:
~/.codex/auth.json,~/.codex/config.toml,.claude.json,~/.claude/.credentials.json,~/.claude/settings.json,~/.claude/settings.local.json - Daraltılmış sağlayıcı çalıştırmaları, yalnızca
OPENCLAW_LIVE_PROVIDERS/OPENCLAW_LIVE_GATEWAY_PROVIDERSüzerinden çıkarılan gerekli dizinleri/dosyaları bağlar - Elle geçersiz kılmak için
OPENCLAW_DOCKER_AUTH_DIRS=all,OPENCLAW_DOCKER_AUTH_DIRS=noneveyaOPENCLAW_DOCKER_AUTH_DIRS=.claude,.codexgibi virgülle ayrılmış bir liste kullanın
- Varsayılan dizinler:
- Çalıştırmayı daraltmak için
OPENCLAW_LIVE_GATEWAY_MODELS=.../OPENCLAW_LIVE_MODELS=... - Container içindeki sağlayıcıları filtrelemek için
OPENCLAW_LIVE_GATEWAY_PROVIDERS=.../OPENCLAW_LIVE_PROVIDERS=... - Yeniden derleme gerekmeyen tekrar çalıştırmalarda mevcut
openclaw:local-liveimage’ını yeniden kullanmak içinOPENCLAW_SKIP_DOCKER_BUILD=1 - Kimlik bilgilerinin env’den değil profile deposundan gelmesini sağlamak için
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1 - Open WebUI smoke testi için gateway’in sunduğu modeli seçmek üzere
OPENCLAW_OPENWEBUI_MODEL=... - Open WebUI smoke testinde kullanılan nonce kontrol prompt’unu geçersiz kılmak için
OPENCLAW_OPENWEBUI_PROMPT=... - Sabitlenmiş Open WebUI image etiketini geçersiz kılmak için
OPENWEBUI_IMAGE=...
Belge tutarlılığı
Belge düzenlemelerinden sonra docs kontrollerini çalıştırın: pnpm check:docs.
Sayfa içi başlık kontrollerine de ihtiyaç duyduğunuzda tam Mintlify anchor doğrulamasını çalıştırın: pnpm docs:check-links:anchors.
Çevrimdışı regresyon (CI için güvenli)
Bunlar gerçek sağlayıcılar olmadan “gerçek hat” regresyonlarıdır:
- Gateway tool calling (sahte OpenAI, gerçek gateway + agent 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, config + auth enforced yazımı):src/gateway/gateway.test.ts(durum: "runs wizard over ws and writes auth token config")
Agent güvenilirlik değerlendirmeleri (Skills)
Zaten “agent güvenilirlik değerlendirmeleri” gibi davranan birkaç CI için güvenli testimiz var:
- Gerçek gateway + agent döngüsü üzerinden sahte tool-calling (
src/gateway/gateway.test.ts). - Oturum bağlantılandırmasını ve yapılandırma etkilerini doğrulayan uçtan uca wizard akışları (
src/gateway/gateway.test.ts).
Skills için hâlâ eksik olanlar (bkz. Skills):
- Karar verme: Skills prompt içinde listelendiğinde agent doğru Skill’i seçiyor mu (veya ilgisiz olanlardan kaçınıyor mu)?
- Uyumluluk: agent 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 taşınmasını ve sandbox sınırlarını doğrulayan çok turlu senaryolar.
Gelecekteki değerlendirmeler önce deterministik kalmalıdır:
- Araç çağrılarını + sıralarını, Skill dosyası okumalarını ve oturum bağlantılandırmasını doğrulamak için sahte sağlayıcılar kullanan bir senaryo çalıştırıcısı.
- Skill odaklı küçük bir senaryo paketi (kullan vs kaçın, geçitleme, prompt injection).
- Yalnızca CI için güvenli paket yerleştiğinde isteğe bağlı live değerlendirmeler (env ile geçitlenen).
Sözleşme testleri (Plugin ve kanal şekli)
Sözleşme testleri, kayıtlı her Plugin ve kanalın kendi
arayüz sözleşmesine uyduğunu doğrular. Keşfedilen tüm Plugin’ler üzerinde yineleme yapar ve
şekil ile davranış doğrulamalarından oluşan bir paket çalıştırır. Varsayılan pnpm test unit hattı
bu paylaşılan seam ve smoke dosyalarını özellikle atlar; paylaşılan kanal 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 kanal sözleşmeleri:
pnpm test:contracts:channels - Yalnızca sağlayıcı sözleşmeleri:
pnpm test:contracts:plugins
Kanal sözleşmeleri
src/channels/plugins/contracts/*.contract.test.ts içinde bulunur:
- plugin - Temel Plugin şekli (id, name, capabilities)
- setup - Kurulum wizard’ı sözleşmesi
- session-binding - Oturum bağlama davranışı
- outbound-payload - Mesaj payload yapısı
- inbound - Gelen mesaj işleme
- actions - Kanal eylem işleyicileri
- threading - Thread ID işleme
- directory - Dizin/roster API
- group-policy - Grup ilkesi uygulaması
Sağlayıcı durum sözleşmeleri
src/plugins/contracts/*.contract.test.ts içinde bulunur.
- status - Kanal durum probları
- registry - Plugin kayıt defteri şekli
Sağlayıcı sözleşmeleri
src/plugins/contracts/*.contract.test.ts içinde bulunur:
- auth - Auth akışı sözleşmesi
- auth-choice - Auth seçimi/seçim mantığı
- catalog - Model kataloğu API
- discovery - Plugin keşfi
- loader - Plugin yükleme
- runtime - Sağlayıcı runtime’ı
- shape - Plugin şekli/arayüzü
- wizard - Kurulum wizard’ı
Ne zaman çalıştırılmalı
- Plugin SDK dışa aktarımlarını veya alt yollarını değiştirdikten sonra
- Bir kanal veya sağlayıcı Plugin’i ekledikten ya da değiştirdikten sonra
- Plugin kaydı veya keşfini yeniden düzenledikten sonra
Sözleşme testleri CI içinde çalışır ve gerçek API anahtarları gerektirmez.
Regresyon ekleme (kılavuz)
Live ortamda keşfedilen bir sağlayıcı/model sorununu düzelttiğinizde:
- Mümkünse CI için güvenli bir regresyon ekleyin (sahte/stub sağlayıcı veya tam istek-şekli dönüşümünü yakalayın)
- Sorun doğası gereği yalnızca live ise (rate limit, auth politikaları), live testini dar ve env değişkenleriyle isteğe bağlı tutun
- Hatayı yakalayan en küçük katmanı hedeflemeyi tercih edin:
- sağlayıcı istek dönüştürme/replay hatası → doğrudan model testi
- gateway oturumu/geçmiş/araç hattı hatası → gateway live smoke veya CI için güvenli gateway mock testi
- SecretRef traversal guardrail:
src/secrets/exec-secret-ref-id-parity.test.ts, kayıt defteri metadata’sından (listSecretTargetRegistryEntries()) SecretRef sınıfı başına örnek bir hedef türetir, ardından traversal segmentexeckimliklerinin reddedildiğini doğrular.src/secrets/target-registry-data.tsiçine yeni birincludeInPlanSecretRef hedef ailesi eklerseniz, bu testteclassifyTargetClassdeğerini güncelleyin. Test, sınıflandırılmamış hedef kimliklerinde bilerek başarısız olur; böylece yeni sınıflar sessizce atlanamaz.