OpenClaw üç Vitest test paketine (unit/integration, e2e, live) ve küçük bir Docker çalıştırıcı kümesine sahiptir. Bu doküman bir “nasıl test ederiz” kılavuzudur:Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
- Her test paketinin neyi kapsadığı (ve bilinçli olarak 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 keşfettiği ve modelleri/sağlayıcıları nasıl seçtiği.
- Gerçek dünya model/sağlayıcı sorunları için regresyonların nasıl ekleneceği.
QA yığını (qa-lab, qa-channel, canlı taşıma hatları) ayrı olarak belgelenmiştir:
- QA genel bakışı - mimari, komut yüzeyi, senaryo yazımı.
- Matrix QA -
pnpm openclaw qa matrixiçin referans. - QA kanalı - repo destekli senaryolar tarafından kullanılan sentetik taşıma Plugin’i.
qa çağrılarını listeler ve yukarıdaki referanslara geri yönlendirir.Hızlı başlangıç
Çoğu gün:- Tam kapı (push öncesinde beklenir):
pnpm build && pnpm check && pnpm check:test-types && pnpm test - Geniş kaynaklı bir makinede daha hızlı yerel tam test paketi çalıştırması:
pnpm test:max - Doğrudan Vitest izleme döngüsü:
pnpm test:watch - Doğrudan dosya hedefleme artık eklenti/kanal yollarını da yönlendirir:
pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts - Tek bir hata üzerinde yineleme yaparken ö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
- Kapsam kapısı:
pnpm test:coverage - E2E test paketi:
pnpm test:e2e
- Live test 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 - Çalışma zamanı performans raporları: gerçek bir
openai/gpt-5.4ajan dönüşü içinlive_gpt54=trueile veya Kova CPU/heap/trace yapıtları içindeep_profile=trueileOpenClaw Performancegönderin. Günlük zamanlanmış çalıştırmalar,CLAWGRIT_REPORTS_TOKENyapılandırıldığında mock-provider, deep-profile ve GPT 5.4 hat yapıtlarınıopenclaw/clawgrit-reportskonumunda yayımlar. mock-provider raporu ayrıca kaynak düzeyinde Gateway açılışı, bellek, Plugin baskısı, yinelenen sahte model hello-loop ve CLI başlangıç sayılarını içerir. - Docker canlı model taraması:
pnpm test:docker:live-models- Seçilen her model artık bir metin dönüşü ve küçük bir dosya okuma tarzı prob çalıştırır.
Metadata’sı
imagegirdisi ilan eden modeller ayrıca küçük bir görüntü dönüşü çalıştırır. Sağlayıcı hatalarını izole ederken ek problarıOPENCLAW_LIVE_MODEL_FILE_PROBE=0veyaOPENCLAW_LIVE_MODEL_IMAGE_PROBE=0ile devre dışı bırakın. - CI kapsamı: günlük
OpenClaw Scheduled Live And E2E Checksve manuelOpenClaw Release Checks, ikisi de yeniden kullanılabilir live/E2E iş akışınıinclude_live_suites: trueile çağırır; buna sağlayıcıya göre parçalanmış ayrı Docker canlı model matris işleri dahildir. - Odaklı CI yeniden çalıştırmaları için
OpenClaw Live And E2E Checks (Reusable)iş akışınıinclude_live_suites: truevelive_models_only: trueile gönderin. - Yeni yüksek sinyalli sağlayıcı sırlarını
scripts/ci-hydrate-live-auth.shdosyasına, ayrıca.github/workflows/openclaw-live-and-e2e-checks-reusable.ymldosyasına ve onun zamanlanmış/sürüm çağırıcılarına ekleyin.
- Seçilen her model artık bir metin dönüşü ve küçük bir dosya okuma tarzı prob çalıştırır.
Metadata’sı
- Yerel Codex bağlı sohbet smoke testi:
pnpm test:docker:live-codex-bind- Codex app-server yolu üzerinde bir Docker live hattı çalıştırır,
/codex bindile sentetik bir Slack DM bağlar,/codex fastve/codex permissionskomutlarını çalıştırır, ardından düz bir yanıtın ve bir görüntü ekinin ACP yerine yerel Plugin bağlaması üzerinden yönlendiğini doğrular.
- Codex app-server yolu üzerinde bir Docker live hattı çalıştırır,
- Codex app-server harness smoke testi:
pnpm test:docker:live-codex-harness- Gateway ajan dönüşlerini Plugin’e ait Codex app-server harness üzerinden çalıştırır,
/codex statusve/codex modelskomutlarını doğrular ve varsayılan olarak görüntü, cron MCP, alt ajan ve Guardian problarını çalıştırır. Diğer Codex app-server hatalarını izole ederken alt ajan probunuOPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_PROBE=0ile devre dışı bırakın. Odaklı bir alt ajan kontrolü için diğer probları devre dışı bırakın:OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0 OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0 OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0 OPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_PROBE=1 pnpm test:docker:live-codex-harness.OPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_ONLY=0ayarlanmadığı sürece bu, alt ajan probundan sonra çıkar.
- Gateway ajan dönüşlerini Plugin’e ait Codex app-server harness üzerinden çalıştırır,
- Codex isteğe bağlı kurulum smoke testi:
pnpm test:docker:codex-on-demand- Paketlenmiş OpenClaw tarball’ını Docker içinde kurar, OpenAI API anahtarı
ilk kurulumunu çalıştırır ve Codex Plugin’i ile
@openai/codexbağımlılığının isteğe bağlı olarak yönetilen npm köküne indirildiğini doğrular.
- Paketlenmiş OpenClaw tarball’ını Docker içinde kurar, OpenAI API anahtarı
ilk kurulumunu çalıştırır ve Codex Plugin’i ile
- Live Plugin araç bağımlılığı smoke testi:
pnpm test:docker:live-plugin-tool- Gerçek bir
slugifybağımlılığı olan bir fixture Plugin’i paketler, bununpm-pack:üzerinden kurar, yönetilen npm kökü altındaki bağımlılığı doğrular, ardından canlı bir OpenAI modelinden Plugin aracını çağırmasını ve gizli slug’ı döndürmesini ister.
- Gerçek bir
- Crestodian kurtarma komutu smoke testi:
pnpm test:live:crestodian-rescue-channel- Mesaj kanalı kurtarma komutu yüzeyi için katılımlı, ek güvenlik amaçlı kontrol.
/crestodian statuskomutunu çalıştırır, kalıcı bir model değişikliğini kuyruğa alır,/crestodian yesyanıtını verir ve denetim/yapılandırma yazma yolunu doğrular.
- Mesaj kanalı kurtarma komutu yüzeyi için katılımlı, ek güvenlik amaçlı kontrol.
- Crestodian planlayıcı Docker smoke testi:
pnpm test:docker:crestodian-planner- Crestodian’ı
PATHüzerinde sahte bir Claude CLI ile yapılandırmasız bir container içinde çalıştırır ve bulanık planlayıcı fallback’inin denetimli, tipli bir yapılandırma yazımına çevrildiğini doğrular.
- Crestodian’ı
- Crestodian ilk çalıştırma Docker smoke testi:
pnpm test:docker:crestodian-first-run- Boş bir OpenClaw durum dizininden başlar, çıplak
openclawkomutunu Crestodian’a yönlendirir, kurulum/model/ajan/Discord Plugin + SecretRef yazımlarını uygular, yapılandırmayı doğrular ve denetim girdilerini doğrular. Aynı Ring 0 kurulum yolu, QA Lab’de depnpm openclaw qa suite --scenario crestodian-ring-zero-setupile kapsanır.
- Boş bir OpenClaw durum dizininden başlar, çıplak
- Moonshot/Kimi maliyet smoke testi:
MOONSHOT_API_KEYayarlıykenopenclaw models list --provider moonshot --jsonçalıştırın, ardındanmoonshot/kimi-k2.6üzerinde izole biropenclaw agent --local --session-id live-kimi-cost --message 'Reply exactly: KIMI_LIVE_OK' --thinking off --jsonçalıştırın. JSON’un Moonshot/K2.6 bildirdiğini ve asistan dökümünün normalize edilmişusage.costsakladığını doğrulayın.
QA’ya özgü çalıştırıcılar
QA-lab gerçekçiliğine ihtiyaç duyduğunuzda bu komutlar ana test paketlerinin yanında yer alır: CI, QA Lab’i özel iş akışlarında çalıştırır. Ajanlı parite, bağımsız bir PR iş akışı değil,QA-Lab - All Lanes ve sürüm doğrulaması altında iç içedir.
Geniş doğrulama, rerun_group=qa-parity ile Full Release Validation veya release-checks QA grubunu kullanmalıdır. Kararlı/varsayılan sürüm
kontrolleri, kapsamlı live/Docker soak’ı run_release_soak=true arkasında tutar; full profili soak’ı zorunlu kılar. QA-Lab - All Lanes,
mock parite hattı, live Matrix hattı, Convex yönetimli live Telegram hattı ve Convex yönetimli live Discord
hattı paralel işler olarak main üzerinde gecelik ve manuel gönderimle çalışır. Zamanlanmış QA ve sürüm kontrolleri Matrix’e
açıkça --profile fast geçirirken, Matrix CLI ve manuel iş akışı girdisi
varsayılanı all olarak kalır; manuel gönderim all değerini transport,
media, e2ee-smoke, e2ee-deep ve e2ee-cli işlerine bölebilir. OpenClaw Release Checks, sürüm onayından önce pariteyi, hızlı Matrix’i ve Telegram hatlarını çalıştırır; sürüm taşıma kontrolleri için mock-openai/gpt-5.5 kullanır, böylece deterministik kalırlar ve normal sağlayıcı Plugin başlangıcından kaçınırlar. Bu canlı taşıma
Gateway’leri bellek aramasını devre dışı bırakır; bellek davranışı QA parite
test paketleri tarafından kapsanmaya devam eder.
Tam sürüm live medya parçaları,
zaten ffmpeg ve ffprobe içeren
ghcr.io/openclaw/openclaw-live-media-runner:ubuntu-24.04 kullanır. Docker canlı model/backend parçaları, seçilen her commit için bir kez oluşturulan paylaşılan
ghcr.io/openclaw/openclaw-live-test:<sha> görüntüsünü kullanır, ardından her parça içinde yeniden oluşturmak yerine bunu OPENCLAW_SKIP_DOCKER_BUILD=1 ile çeker.
pnpm openclaw qa suite- Depo destekli QA senaryolarını doğrudan ana makinede çalıştırır.
- Seçilen birden çok senaryoyu varsayılan olarak yalıtılmış gateway
worker’larıyla paralel çalıştırır.
qa-channelvarsayılan olarak eşzamanlılık 4 kullanır (seçilen senaryo sayısıyla sınırlıdır). Worker sayısını ayarlamak için--concurrency <count>, eski seri hat için--concurrency 1kullanın. - Herhangi bir senaryo başarısız olduğunda sıfır olmayan kodla çıkar. Başarısız
çıkış kodu olmadan artefakt almak istediğinizde
--allow-failureskullanın. live-frontier,mock-openaiveaimockprovider modlarını destekler.aimock, senaryo farkındalıklımock-openaihattını değiştirmeden deneysel fixture ve protocol-mock kapsamı için yerel AIMock destekli bir provider sunucusu başlatır.
pnpm test:plugins:kitchen-sink-live- Canlı OpenAI Kitchen Sink Plugin sınama koşusunu QA Lab üzerinden çalıştırır.
Harici Kitchen Sink paketini kurar, Plugin SDK yüzey envanterini doğrular,
/healthzve/readyzuçlarını yoklar, Gateway CPU/RSS kanıtını kaydeder, canlı bir OpenAI turu çalıştırır ve adversarial tanıları denetler.OPENAI_API_KEYgibi canlı OpenAI kimlik doğrulaması gerektirir. Hydrate edilmiş Testbox oturumlarında,openclaw-testbox-envyardımcısı mevcutsa Testbox canlı kimlik doğrulama profilini otomatik olarak kaynak gösterir.
- Canlı OpenAI Kitchen Sink Plugin sınama koşusunu QA Lab üzerinden çalıştırır.
Harici Kitchen Sink paketini kurar, Plugin SDK yüzey envanterini doğrular,
pnpm test:gateway:cpu-scenarios- Gateway başlangıç bench’ini ve küçük bir mock QA Lab senaryo paketini
(
channel-chat-baseline,memory-failure-fallback,gateway-restart-inflight-run) çalıştırır ve birleşik CPU gözlem özetini.artifacts/gateway-cpu-scenarios/altında yazar. - Varsayılan olarak yalnızca sürekli sıcak CPU gözlemlerini işaretler
(
--cpu-core-warnve--hot-wall-warn-ms), böylece kısa başlangıç sıçramaları, dakikalar süren Gateway sabitlenme regresyonu gibi görünmeden metrik olarak kaydedilir. - Derlenmiş
distartefaktlarını kullanır; checkout zaten güncel runtime çıktısına sahip değilse önce bir build çalıştırın.
- Gateway başlangıç bench’ini ve küçük bir mock QA Lab senaryo paketini
(
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ı provider/model seçim bayraklarını yeniden kullanır.- Canlı çalıştırmalar, konuk için pratik olan desteklenen QA kimlik doğrulama
girdilerini iletir: env tabanlı provider anahtarları, QA canlı provider
config yolu ve mevcut olduğunda
CODEX_HOME. - Çıktı dizinleri, konuğun bağlı çalışma alanı üzerinden geri yazabilmesi için repo kökü altında kalmalıdır.
- Normal QA raporu ve özetinin yanı sıra Multipass günlüklerini
.artifacts/qa-e2e/...altında yazar.
pnpm qa:lab:up- Operatör tarzı QA çalışması için Docker destekli QA sitesini başlatır.
pnpm test:docker:npm-onboard-channel-agent- Geçerli checkout’tan bir npm tarball oluşturur, bunu Docker içinde global olarak kurar, etkileşimsiz OpenAI API anahtarı onboarding’i çalıştırır, varsayılan olarak Telegram’ı yapılandırır, paketlenmiş Plugin runtime’ının başlangıç dependency onarımı olmadan yüklendiğini doğrular, doctor çalıştırır ve mock’lanmış bir OpenAI endpoint’ine karşı bir yerel agent turu çalıştırır.
- Aynı paketlenmiş kurulum hattını Discord ile çalıştırmak için
OPENCLAW_NPM_ONBOARD_CHANNEL=discordkullanın.
pnpm test:docker:session-runtime-context- Gömülü runtime context transcript’leri için deterministik bir built-app
Docker smoke çalıştırır. Gizli OpenClaw runtime context’inin görünür kullanıcı
turuna sızmak yerine gösterilmeyen özel bir mesaj olarak kalıcılaştırıldığını
doğrular, ardından etkilenmiş bozuk bir session JSONL tohumu ekler ve
openclaw doctor --fixkomutunun bunu bir yedekle etkin dala yeniden yazdığını doğrular.
- Gömülü runtime context transcript’leri için deterministik bir built-app
Docker smoke çalıştırır. Gizli OpenClaw runtime context’inin görünür kullanıcı
turuna sızmak yerine gösterilmeyen özel bir mesaj olarak kalıcılaştırıldığını
doğrular, ardından etkilenmiş bozuk bir session JSONL tohumu ekler ve
pnpm test:docker:npm-telegram-live- Docker içinde bir OpenClaw paket adayını kurar, kurulu paket onboarding’ini çalıştırır, kurulu CLI üzerinden Telegram’ı yapılandırır, ardından bu kurulu paketi SUT Gateway olarak kullanarak canlı Telegram QA hattını yeniden kullanır.
- Wrapper, checkout’tan yalnızca
qa-labharness kaynağını bağlar; kurulu paketdist,openclaw/plugin-sdkve paketlenmiş Plugin runtime’ının sahibidir, böylece hat geçerli checkout Plugin’lerini test edilen pakete karıştırmaz. - Varsayılan
OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC=openclaw@betadeğeridir; registry’den kurmak yerine çözümlenmiş yerel bir tarball test etmek içinOPENCLAW_NPM_TELEGRAM_PACKAGE_TGZ=/path/to/openclaw-current.tgzveyaOPENCLAW_CURRENT_PACKAGE_TGZayarlayın. pnpm openclaw qa telegramile aynı Telegram env kimlik bilgilerini veya Convex kimlik bilgisi kaynağını kullanır. CI/release otomasyonu içinOPENCLAW_NPM_TELEGRAM_CREDENTIAL_SOURCE=convexile birlikteOPENCLAW_QA_CONVEX_SITE_URLve rol secret’ını ayarlayın. CI’daOPENCLAW_QA_CONVEX_SITE_URLve bir Convex rol secret’ı varsa Docker wrapper Convex’i otomatik olarak seçer.- Wrapper, Docker build/install çalışmasından önce ana makinedeki Telegram veya
Convex kimlik bilgisi env’ini doğrular.
OPENCLAW_NPM_TELEGRAM_SKIP_CREDENTIAL_PREFLIGHT=1değerini yalnızca kimlik bilgisi öncesi kurulumu bilinçli olarak debug ederken ayarlayın. OPENCLAW_NPM_TELEGRAM_CREDENTIAL_ROLE=ci|maintainer, yalnızca bu hat için paylaşılanOPENCLAW_QA_CREDENTIAL_ROLEdeğerini geçersiz kılar.- GitHub Actions bu hattı manuel maintainer workflow’u
NPM Telegram Beta E2Eolarak sunar. Merge sırasında çalışmaz. Workflow,qa-live-sharedenvironment’ını ve Convex CI kimlik bilgisi lease’lerini kullanır.
- GitHub Actions ayrıca tek bir aday pakete karşı yan çalıştırma ürün kanıtı için
Package Acceptancesunar. Güvenilir bir ref, yayımlanmış npm spec, SHA-256 ile HTTPS tarball URL’si veya başka bir çalıştırmadan tarball artefaktı kabul eder, normalize edilmişopenclaw-current.tgzdosyasınıpackage-under-testolarak yükler, ardından smoke, package, product, full veya custom hat profilleriyle mevcut Docker E2E scheduler’ını çalıştırır. Telegram QA workflow’unu aynıpackage-under-testartefaktına karşı çalıştırmak içintelegram_mode=mock-openaiveyalive-frontierayarlayın.- En son beta ürün kanıtı:
- Tam tarball URL kanıtı bir digest gerektirir:
- Artefakt kanıtı, başka bir Actions çalıştırmasından tarball artefaktı indirir:
-
pnpm test:docker:plugins- Geçerli OpenClaw build’ini Docker içinde paketleyip kurar, OpenAI yapılandırılmış olarak Gateway’i başlatır, ardından paketlenmiş channel/Plugin’leri config düzenlemeleriyle etkinleştirir.
- Setup discovery’nin yapılandırılmamış indirilebilir Plugin’leri yok bıraktığını, ilk yapılandırılmış doctor onarımının eksik indirilebilir Plugin’lerin her birini açıkça kurduğunu ve ikinci bir restart’ın gizli dependency onarımı çalıştırmadığını doğrular.
- Ayrıca bilinen eski bir npm baseline kurar,
openclaw update --tag <candidate>çalıştırmadan önce Telegram’ı etkinleştirir ve adayın update sonrası doctor’ının legacy Plugin dependency kalıntılarını harness taraflı postinstall onarımı olmadan temizlediğini doğrular.
-
pnpm test:parallels:npm-update-
Native paketlenmiş kurulum update smoke’unu Parallels konuklarında çalıştırır.
Seçilen her platform önce istenen baseline paketi kurar, ardından aynı
konukta kurulu
openclaw updatekomutunu çalıştırır ve kurulu sürümü, update durumunu, Gateway hazır oluşunu ve bir yerel agent turunu doğrular. -
Tek bir konuk üzerinde iterasyon yaparken
--platform macos,--platform windowsveya--platform linuxkullanın. Özet artefakt yolu ve hat başına durum için--jsonkullanın. -
OpenAI hattı, canlı agent turu kanıtı için varsayılan olarak
openai/gpt-5.5kullanır. Bilinçli olarak başka bir OpenAI modelini doğrularken--model <provider/model>iletin veyaOPENCLAW_PARALLELS_OPENAI_MODELayarlayın. -
Parallels transport duraksamalarının test penceresinin geri kalanını
tüketememesi için uzun yerel çalıştırmaları bir ana makine timeout’u ile
sarın:
-
Script, iç içe hat günlüklerini
/tmp/openclaw-parallels-npm-update.*altında yazar. Dış wrapper’ın takıldığını varsaymadan öncewindows-update.log,macos-update.logveyalinux-update.logdosyasını inceleyin. - Windows update, soğuk bir konukta update sonrası doctor ve package update çalışmasında 10 ila 15 dakika harcayabilir; iç içe npm debug günlüğü ilerliyorsa bu hâlâ sağlıklıdır.
- Bu toplu wrapper’ı ayrı Parallels macOS, Windows veya Linux smoke hatlarıyla paralel çalıştırmayın. VM durumunu paylaşırlar ve snapshot restore, package serving veya konuk Gateway durumu üzerinde çakışabilirler.
- Update sonrası kanıt, normal paketlenmiş Plugin yüzeyini çalıştırır çünkü konuşma, image generation ve media understanding gibi capability facade’ları, agent turu yalnızca basit bir metin yanıtını denetlese bile paketlenmiş runtime API’leri üzerinden yüklenir.
-
Native paketlenmiş kurulum update smoke’unu Parallels konuklarında çalıştırır.
Seçilen her platform önce istenen baseline paketi kurar, ardından aynı
konukta kurulu
-
pnpm openclaw qa aimock- Doğrudan protocol smoke testi için yalnızca yerel AIMock provider sunucusunu başlatır.
-
pnpm openclaw qa matrix- Matrix canlı QA hattını tek kullanımlık Docker destekli Tuwunel homeserver’a karşı çalıştırır. Yalnızca kaynak checkout’u - paketlenmiş kurulumlar
qa-labgöndermez. - Tam CLI, profil/senaryo kataloğu, env var’ları ve artefakt düzeni: Matrix QA.
- Matrix canlı QA hattını tek kullanımlık Docker destekli Tuwunel homeserver’a karşı çalıştırır. Yalnızca kaynak checkout’u - paketlenmiş kurulumlar
-
pnpm openclaw qa telegram- Telegram canlı QA hattını env’den gelen 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 id’si sayısal Telegram chat id’si olmalıdır.- Paylaşılan havuz kimlik bilgileri için
--credential-source convexdestekler. Varsayılan olarak env modunu kullanın veya havuz lease’lerine geçmek içinOPENCLAW_QA_CREDENTIAL_SOURCE=convexayarlayın. - Varsayılanlar canary, mention gating, command addressing,
/status, bot’tan bot’a mention edilmiş yanıtlar ve core native command yanıtlarını kapsar.mock-openaivarsayılanları ayrıca deterministik reply-chain ve Telegram final-message streaming regresyonlarını kapsar.session_statusgibi isteğe bağlı yoklamalar için--list-scenarioskullanın. - Herhangi bir senaryo başarısız olduğunda sıfır olmayan kodla çıkar. Başarısız
çıkış kodu olmadan artefakt almak istediğinizde
--allow-failureskullanın. - Aynı özel grupta iki ayrı bot gerektirir; SUT botunun bir Telegram kullanıcı adı göstermesi gerekir.
- Kararlı bot’tan bot’a gözlem için
@BotFatheriçinde her iki bot için Bot-to-Bot Communication Mode’u etkinleştirin ve driver botunun grup bot trafiğini gözlemleyebildiğinden emin olun. .artifacts/qa-e2e/...altında bir Telegram QA raporu, özeti ve observed-messages artefaktı yazar. Yanıt veren senaryolar, driver gönderme isteğinden gözlenen SUT yanıtına kadar RTT içerir.
Mantis Telegram Live, bu hattın etrafındaki PR kanıtı wrapper’ıdır. Aday ref’i
Convex lease’li Telegram kimlik bilgileriyle çalıştırır, redakte edilmiş
observed-message transcript’ini bir Crabbox masaüstü tarayıcısında render eder,
MP4 kanıtı kaydeder, hareket kırpılmış GIF oluşturur, artefakt paketini yükler
ve pr_number ayarlandığında Mantis GitHub App üzerinden satır içi PR kanıtı
gönderir. Maintainer’lar bunu Actions UI üzerinden Mantis Scenario
(scenario_id: telegram-live) ile veya doğrudan bir pull request yorumundan
başlatabilir:
pnpm openclaw qa mantis telegram-desktop-builder- Bir Crabbox Linux masaüstünü kiralar veya yeniden kullanır, yerel Telegram Desktop kurar, OpenClaw’ı kiralanmış bir Telegram SUT bot token’ı ile yapılandırır, gateway’i başlatır ve görünür VNC masaüstünden ekran görüntüsü/MP4 kanıtı kaydeder.
- Varsayılan olarak
--credential-source convexkullanır; böylece iş akışları yalnızca Convex aracı secret’ına ihtiyaç duyar.pnpm openclaw qa telegramile aynıOPENCLAW_QA_TELEGRAM_*değişkenleriyle--credential-source envkullanın. - Telegram Desktop yine de kullanıcı oturumu açma/profil gerektirir. Bot token’ı yalnızca OpenClaw’ı yapılandırır. Base64
.tgzprofil arşivi için--telegram-profile-archive-env <name>kullanın veya--keep-leasekullanıp VNC üzerinden bir kez elle oturum açın. - Çıktı dizini altında
mantis-telegram-desktop-builder-report.md,mantis-telegram-desktop-builder-summary.json,telegram-desktop-builder.pngvetelegram-desktop-builder.mp4yazar.
qa-channel geniş sentetik pakettir ve bu matrisin parçası değildir.
Convex üzerinden paylaşılan Telegram kimlik bilgileri (v1)
Canlı aktarım QA için--credential-source convex (veya OPENCLAW_QA_CREDENTIAL_SOURCE=convex) etkinleştirildiğinde, QA lab Convex destekli bir havuzdan özel bir kira alır, kulvar çalışırken bu kiraya heartbeat gönderir ve kapanışta kirayı serbest bırakır. Bölüm adı Discord, Slack ve WhatsApp desteğinden eskidir; kira sözleşmesi türler arasında paylaşılır.
Referans Convex proje iskelesi:
qa/convex-credential-broker/
OPENCLAW_QA_CONVEX_SITE_URL(örneğinhttps://your-deployment.convex.site)- Seçilen rol için bir secret:
maintaineriçinOPENCLAW_QA_CONVEX_SECRET_MAINTAINERciiçinOPENCLAW_QA_CONVEX_SECRET_CI
- Kimlik bilgisi rolü seçimi:
- CLI:
--credential-role maintainer|ci - Env varsayılanı:
OPENCLAW_QA_CREDENTIAL_ROLE(CI’da varsayılanci, aksi haldemaintainer)
- CLI:
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 https:// kullanmalıdır.
Bakımcı yönetici komutları (havuz ekleme/kaldırma/listeleme) özellikle OPENCLAW_QA_CONVEX_SECRET_MAINTAINER gerektirir.
Bakımcılar için CLI yardımcıları:
doctor kullanın. Betiklerde ve CI yardımcı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ılı:
{ status: "ok", credentialId, leaseToken, payload, leaseTtlMs?, heartbeatIntervalMs? } - Tükenmiş/yeniden denenebilir:
{ status: "error", code: "POOL_EXHAUSTED" | "NO_CREDENTIAL_AVAILABLE", ... }
- İstek:
POST /payload-chunk- İstek:
{ kind, ownerId, actorRole, credentialId, leaseToken, index } - Başarılı:
{ status: "ok", index, data }
- İstek:
POST /heartbeat- İstek:
{ kind, ownerId, actorRole, credentialId, leaseToken, leaseTtlMs } - Başarılı:
{ status: "ok" }(veya boş2xx)
- İstek:
POST /release- İstek:
{ kind, ownerId, actorRole, credentialId, leaseToken } - Başarılı:
{ status: "ok" }(veya boş2xx)
- İstek:
POST /admin/add(yalnızca bakımcı secret’ı)- İstek:
{ kind, actorId, payload, note?, status? } - Başarılı:
{ status: "ok", credential }
- İstek:
POST /admin/remove(yalnızca bakımcı secret’ı)- İstek:
{ credentialId, actorId } - Başarılı:
{ status: "ok", changed, credential } - Aktif kira koruması:
{ status: "error", code: "LEASE_ACTIVE", ... }
- İstek:
POST /admin/list(yalnızca bakımcı secret’ı)- İstek:
{ kind?, status?, includePayload?, limit? } - Başarılı:
{ status: "ok", credentials, count }
- İstek:
{ groupId: string, driverToken: string, sutToken: string }groupIdsayısal bir Telegram sohbet kimliği dizesi olmalıdır.admin/add,kind: "telegram"için bu biçimi doğrular ve hatalı biçimlendirilmiş payload’ları reddeder.
{ groupId: string, sutToken: string, testerUserId: string, testerUsername: string, telegramApiId: string, telegramApiHash: string, tdlibDatabaseEncryptionKey: string, tdlibArchiveBase64: string, tdlibArchiveSha256: string, desktopTdataArchiveBase64: string, desktopTdataArchiveSha256: string }groupId,testerUserIdvetelegramApiIdsayısal dizeler olmalıdır.tdlibArchiveSha256vedesktopTdataArchiveSha256SHA-256 hex dizeleri olmalıdır.kind: "telegram-user"bir Telegram burner hesabını temsil eder. Kirayı hesap geneline ait kabul edin: TDLib CLI sürücüsü ve Telegram Desktop görsel tanığı aynı payload’dan geri yüklenir ve aynı anda kirayı yalnızca bir iş tutmalıdır.
Telegram -workdir "$tmp/desktop" ile kullanın. Yerel operatör ortamlarında, süreç env değişkenleri yoksa scripts/e2e/telegram-user-credential.ts varsayılan olarak ~/.codex/skills/custom/telegram-e2e-bot-to-bot/convex.local.env dosyasını okur.
Ajan güdümlü Crabbox oturumu:
start, telegram-user kimlik bilgisini kiralar, aynı hesabı bir Crabbox Linux masaüstünde TDLib ve Telegram Desktop içine geri yükler, geçerli checkout’tan yerel bir mock SUT gateway başlatır, görünür Telegram sohbetini açar, masaüstü kaydını başlatır ve özel bir session.json yazar. Oturum canlıyken bir ajan tatmin olana kadar test etmeyi sürdürebilir:
send --session <file> --text <message>, gerçek TDLib kullanıcısı üzerinden gönderir ve SUT yanıtını bekler.run --session <file> -- <remote command>, Crabbox üzerinde rastgele bir komut çalıştırır ve çıktısını kaydeder; örneğinbash -lc 'source /tmp/openclaw-telegram-user-crabbox/env.sh && python3 /tmp/openclaw-telegram-user-crabbox/user-driver.py transcript --limit 20 --json'.screenshot --session <file>geçerli görünür masaüstünü yakalar.status --session <file>kira ve WebVNC komutunu yazdırır.finish --session <file>kaydediciyi durdurur, ekran görüntüsü/video/hareket kırpma artefaktlarını yakalar, Convex kimlik bilgisini serbest bırakır, yerel SUT süreçlerini durdurur ve--keep-boxgeçirilmediği sürece Crabbox kirasını durdurur.publish --session <file> --pr <number>varsayılan olarak yalnızca GIF içeren bir PR yorumu yayımlar.--full-artifactsseçeneğini yalnızca günlükler veya JSON artefaktları kasıtlı olarak gerektiğinde geçirin.
start komutuna veya tek komutluk probe kısayoluna --mock-response-file <path> geçirin. Çalıştırıcı varsayılan olarak standart bir Crabbox sınıfı, 24fps kayıt, 24fps hareket GIF önizlemeleri ve 1920px GIF genişliği kullanır. Yalnızca kanıt farklı yakalama ayarları gerektirdiğinde --class, --record-fps, --preview-fps ve --preview-width ile geçersiz kılın.
Tek komutluk Crabbox kanıtı:
probe komutu, tek bir start/send/finish döngüsü için kısayoldur. Hızlı bir /status smoke için kullanın. PR incelemesi, hata yeniden üretme çalışması veya ajanın kanıtın tamamlandığına karar vermeden önce dakikalarca rastgele deney yapması gereken her durumda oturum komutlarını kullanın. Sıcak bir masaüstü kirasını yeniden kullanmak için --id <cbx_...>, bitişten sonra VNC’yi açık tutmak için --keep-box, görünür sohbeti seçmek için --desktop-chat-title <name> ve yeni bir kutuda TDLib derlemek yerine önceden hazırlanmış Linux libtdjson.so arşivi kullanırken --tdlib-url <tgz> kullanın. Çalıştırıcı --tdlib-url değerini --tdlib-sha256 <hex> ile veya varsayılan olarak kardeş bir <url>.sha256 dosyasıyla doğrular.
Aracı tarafından doğrulanmış çok kanallı payload’lar:
- Discord:
{ guildId: string, channelId: string, driverBotToken: string, sutBotToken: string, sutApplicationId: string, voiceChannelId?: string } - WhatsApp:
{ driverPhoneE164: string, sutPhoneE164: string, driverAuthArchiveBase64: string, sutAuthArchiveBase64: string, groupJid?: string }
{ channelId: string, driverBotToken: string, sutBotToken: string, sutAppToken: string } kullanın.
QA’ya kanal ekleme
Yeni kanal adaptörleri için mimari ve senaryo yardımcısı adları QA genel bakışı → Kanal ekleme bölümünde yer alır. Asgari eşik: aktarım çalıştırıcısını paylaşılanqa-lab host seam üzerinde uygulamak, Plugin bildiriminde qaRunners bildirmek, openclaw qa <runner> olarak bağlamak ve senaryoları qa/scenarios/ altında yazmaktır.
Test paketleri (nerede ne çalışır)
Paketleri “artan gerçekçilik” (ve artan kararsızlık/maliyet) olarak düşünün:Unit / entegrasyon (varsayılan)
- Komut:
pnpm test - Yapılandırma: hedefsiz çalıştırmalar
vitest.full-*.config.tsshard kümesini kullanır ve paralel zamanlama için çok projeli shard’ları proje başına yapılandırmalara genişletebilir - Dosyalar:
src/**/*.test.ts,packages/**/*.test.tsvetest/**/*.test.tsaltındaki core/unit envanterleri; UI unit testleri özelunit-uishard’ında çalışır - Kapsam:
- Saf unit testleri
- Süreç içi entegrasyon testleri (gateway kimlik doğrulaması, yönlendirme, araç kullanımı, ayrıştırma, yapılandırma)
- Bilinen hatalar için deterministik regresyonlar
- Beklentiler:
- CI’da çalışır
- Gerçek anahtar gerektirmez
- Hızlı ve kararlı olmalıdır
- Çözümleyici ve genel yüzey yükleyici testleri, gerçek bundled Plugin kaynak API’leriyle değil, üretilmiş küçük Plugin fixture’larıyla geniş
api.jsveruntime-api.jsfallback davranışını kanıtlamalıdır. Gerçek Plugin API yüklemeleri, Plugin’e ait sözleşme/entegrasyon paketlerine aittir.
- Varsayılan test kurulumları isteğe bağlı yerel Discord opus derlemelerini atlar. Discord voice receive saf JS
opusscriptdecoder’ını kullanır ve@discordjs/opusignoredBuiltDependenciesiçinde kalır; böylece yerel testler ve Testbox kulvarları yerel addon’u derlemez. - Yerel opus derlemesini kasıtlı olarak karşılaştırmanız gerekiyorsa özel bir Discord ses performansı veya canlı kulvar kullanın.
@discordjs/opusöğesini varsayılanonlyBuiltDependenciesiçine geri eklemeyin; bu, ilgisiz kurulum/test döngülerinin yerel kod derlemesine neden olur.
Projeler, shard'lar ve kapsamlı kulvarlar
Projeler, shard'lar ve kapsamlı kulvarlar
- Hedef belirtilmemiş
pnpm test, tek bir dev yerel kök proje süreci yerine on iki küçük shard yapılandırması (core-unit-fast,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ük altındaki makinelerde en yüksek RSS değerini azaltır ve auto-reply/extension çalışmalarının ilgisiz suiteleri aç bırakmasını önler. pnpm test --watchhâlâ yerel kökvitest.config.tsproje grafiğini kullanır, çünkü çok shard’lı bir watch döngüsü pratik değildir.pnpm test,pnpm test:watchvepnpm test:perf:imports, açık dosya/dizin hedeflerini önce kapsamlı lane’ler üzerinden yönlendirir; böylecepnpm test extensions/discord/src/monitor/message-handler.preflight.test.tstam kök proje başlatma maliyetini ödemez.pnpm test:changed, değişen git yollarını varsayılan olarak ucuz kapsamlı lane’lere genişletir: doğrudan test düzenlemeleri, kardeş*.test.tsdosyaları, açık kaynak eşlemeleri ve yerel import grafiği bağımlıları. Config/setup/package düzenlemeleri, açıkçaOPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changedkullanmadığınız sürece testleri geniş kapsamda çalıştırmaz.pnpm check:changed, dar çalışmalar için normal akıllı yerel denetim kapısıdır. Diff’i core, core testleri, extensions, extension testleri, apps, docs, release metadata, live Docker tooling ve tooling olarak sınıflandırır; ardından eşleşen typecheck, lint ve guard komutlarını çalıştırır. Vitest testlerini çalıştırmaz; test kanıtı içinpnpm test:changedveya açıkpnpm test <target>çağırın. Yalnızca release metadata içeren sürüm artışları, üst düzey version alanı dışındaki package değişikliklerini reddeden bir guard ile hedefli version/config/root-dependency denetimleri çalıştırır.- Live Docker ACP harness düzenlemeleri odaklı denetimler çalıştırır: live Docker auth script’leri için shell söz dizimi ve live Docker scheduler dry-run.
package.jsondeğişiklikleri yalnızca diffscripts["test:docker:live-*"]ile sınırlı olduğunda dahil edilir; dependency, export, version ve diğer package-surface düzenlemeleri hâlâ daha geniş guard’ları kullanır. - Agents, commands, plugins, auto-reply yardımcıları,
plugin-sdkve benzeri saf utility alanlarından import-light unit testleri,test/setup-openclaw-runtime.tsdosyasını atlayanunit-fastlane’i üzerinden yönlendirilir; stateful/runtime-heavy dosyalar mevcut lane’lerde kalır. - Seçili
plugin-sdkvecommandsyardımcı kaynak dosyaları da changed-mode çalıştırmalarını bu hafif lane’lerdeki açık kardeş testlere eşler; böylece yardımcı düzenlemeleri o dizin için tam ağır suiti yeniden çalıştırmaktan kaçınır. auto-reply, üst düzey core yardımcıları, üst düzeyreply.*entegrasyon testleri vesrc/auto-reply/reply/**alt ağacı için ayrılmış bucket’lara sahiptir. CI ayrıca reply alt ağacını agent-runner, dispatch ve commands/state-routing shard’larına böler; böylece import-heavy tek bir bucket tam Node kuyruğunu sahiplenmez.- Normal PR/main CI, extension toplu taramasını ve yalnızca release için olan
agentic-pluginsshard’ını bilinçli olarak atlar. Tam Release Validation, release candidate’larında bu plugin/extension ağırlıklı suiteler için ayrıPlugin Prereleasechild workflow’unu dispatch eder.
Embedded runner coverage
Embedded runner coverage
- Message-tool discovery girdilerini veya compaction runtime context’ini değiştirdiğinizde, her iki coverage düzeyini de koruyun.
- Saf routing ve normalization sınırları için odaklı yardımcı regresyonlar ekleyin.
- Embedded runner entegrasyon suitelerini 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ı id’lerin ve compaction davranışının gerçek
run.ts/compact.tsyollarından hâlâ aktığını doğrular; yalnızca yardımcı testleri bu entegrasyon yolları için yeterli bir ikame değildir.
Vitest pool and isolation defaults
Vitest pool and isolation defaults
- Temel Vitest config varsayılanı
threadsdeğeridir. - Paylaşılan Vitest config,
isolate: falsedeğerini sabitler ve kök projeler, e2e ve live config’ler genelinde yalıtımsız runner’ı kullanır. - Kök UI lane’i
jsdomsetup ve optimizer’ını korur, ancak o da paylaşılan yalıtımsız runner üzerinde çalışır. - Her
pnpm testshard’ı aynıthreads+isolate: falsevarsayılanlarını paylaşılan Vitest config’den devralır. scripts/run-vitest.mjs, büyük yerel çalıştırmalarda V8 compile churn’ünü azaltmak için Vitest child Node süreçlerine varsayılan olarak--no-maglevekler. Stok V8 davranışıyla karşılaştırmak içinOPENCLAW_VITEST_ENABLE_MAGLEV=1ayarlayın.
Fast local iteration
Fast local iteration
pnpm changed:lanes, bir diff’in hangi mimari lane’leri tetiklediğini gösterir.- Pre-commit hook yalnızca biçimlendirme yapar. Biçimlendirilmiş dosyaları yeniden stage eder ve lint, typecheck veya test çalıştırmaz.
- Handoff veya push öncesinde akıllı yerel denetim kapısına
ihtiyacınız olduğunda
pnpm check:changedkomutunu açıkça çalıştırın. pnpm test:changed, varsayılan olarak ucuz kapsamlı lane’ler üzerinden yönlendirilir.OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changedkomutunu yalnızca agent bir harness, config, package veya contract düzenlemesinin gerçekten daha geniş Vitest coverage gerektirdiğine karar verdiğinde kullanın.pnpm test:maxvepnpm test:changed:maxaynı routing davranışını korur, yalnızca daha yüksek bir worker sınırıyla.- Yerel worker otomatik ölçeklendirmesi bilinçli olarak muhafazakârdır ve host load average zaten yüksek olduğunda geri çekilir; böylece birden fazla eşzamanlı Vitest çalıştırması varsayılan olarak daha az zarar verir.
- Temel Vitest config, test
wiring değiştiğinde changed-mode yeniden çalıştırmalarının doğru kalması için project/config dosyalarını
forceRerunTriggersolarak işaretler. - Config, desteklenen host’larda
OPENCLAW_VITEST_FS_MODULE_CACHEdeğerini etkin tutar; doğrudan profiling için tek bir açık cache konumu istiyorsanızOPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/abs/pathayarlayın.
Perf debugging
Perf debugging
pnpm test:perf:imports, Vitest import-duration raporlamasını ve import-breakdown çıktısını etkinleştirir.pnpm test:perf:imports:changed, aynı profiling görünümünüorigin/mainsonrasından beri değişen dosyalara kapsamlar.- Shard zamanlama verileri
.artifacts/vitest-shard-timings.jsondosyasına yazılır. Whole-config çalıştırmaları anahtar olarak config yolunu kullanır; include-pattern CI shard’ları shard adını ekler, böylece filtrelenmiş shard’lar ayrı ayrı izlenebilir. - Tek bir sıcak test hâlâ zamanının çoğunu başlatma import’larında harcıyorsa,
ağır bağımlılıkları dar bir yerel
*.runtime.tssınırının arkasında tutun ve runtime yardımcılarını yalnızcavi.mock(...)üzerinden geçirmek için deep-import etmek yerine o sınırı doğrudan mock’layın. pnpm test:perf:changed:bench -- --ref <git-ref>, yönlendirilmiştest:changedçalıştırmasını o commit’lenmiş diff için yerel kök proje yoluyla karşılaştırır ve wall time ile macOS max RSS yazdırır.pnpm test:perf:changed:bench -- --worktree, değişen dosya listesiniscripts/test-projects.mjsve kök Vitest config üzerinden yönlendirerek mevcut kirli ağacı benchmark eder.pnpm test:perf:profile:main, Vitest/Vite başlatma ve transform overhead’i için main-thread CPU profili yazar.pnpm test:perf:profile:runner, dosya paralelliği devre dışı bırakılmış unit suite için runner CPU+heap profilleri yazar.
Stability (gateway)
- Komut:
pnpm test:stability:gateway - Config:
vitest.gateway.config.ts, tek worker’a zorlanır - Kapsam:
- Varsayılan olarak diagnostics etkinleştirilmiş gerçek bir loopback Gateway başlatır
- Diagnostic event yolu üzerinden sentetik gateway message, memory ve large-payload churn çalıştırır
- Gateway WS RPC üzerinden
diagnostics.stabilitysorgular - Diagnostic stability bundle persistence yardımcılarını kapsar
- Recorder’ın bounded kaldığını, sentetik RSS örneklerinin pressure budget altında kaldığını ve session başına queue depth’lerin tekrar sıfıra boşaldığını doğrular
- Beklentiler:
- CI-safe ve keyless
- Stability-regression takibi için dar lane; tam Gateway suite’inin yerine geçmez
E2E (gateway smoke)
- Komut:
pnpm test:e2e - Config:
vitest.e2e.config.ts - Dosyalar:
src/**/*.e2e.test.ts,test/**/*.e2e.test.tsveextensions/altındaki bundled-plugin E2E testleri - Runtime varsayılanları:
- Repo’nun geri kalanıyla eşleşecek şekilde
isolate: falseile Vitestthreadskullanır. - Uyarlanabilir worker’lar kullanır (CI: en fazla 2, local: varsayılan olarak 1).
- Console I/O overhead’ini azaltmak için varsayılan olarak silent mode’da çalışır.
- Repo’nun geri kalanıyla eşleşecek şekilde
- Yararlı override’lar:
- Worker sayısını zorlamak için
OPENCLAW_E2E_WORKERS=<n>(16 ile sınırlıdır). - Verbose console çıktısını yeniden etkinleştirmek için
OPENCLAW_E2E_VERBOSE=1.
- Worker sayısını zorlamak için
- Kapsam:
- Multi-instance gateway end-to-end davranışı
- WebSocket/HTTP yüzeyleri, node pairing ve daha ağır networking
- Beklentiler:
- CI’da çalışır (pipeline’da etkinleştirildiğinde)
- Gerçek key gerekmez
- Unit testlerinden daha fazla hareketli parça içerir (daha yavaş olabilir)
E2E: OpenShell backend smoke
- Komut:
pnpm test:e2e:openshell - Dosya:
extensions/openshell/src/backend.e2e.test.ts - Kapsam:
- Docker üzerinden host’ta yalıtılmış bir OpenShell gateway başlatır
- Geçici bir yerel Dockerfile’dan sandbox oluşturur
- Gerçek
sandbox ssh-config+ SSH exec üzerinden OpenClaw’ın OpenShell backend’ini çalıştırır - Sandbox fs bridge üzerinden remote-canonical filesystem davranışını doğrular
- Beklentiler:
- Yalnızca opt-in; varsayılan
pnpm test:e2eçalıştırmasının parçası değildir - Yerel bir
openshellCLI ve çalışan bir Docker daemon gerektirir - Yalıtılmış
HOME/XDG_CONFIG_HOMEkullanır, ardından test gateway’ini ve sandbox’ı yok eder
- Yalnızca opt-in; varsayılan
- Yararlı override’lar:
- Daha geniş e2e suite’i manuel çalıştırırken testi etkinleştirmek için
OPENCLAW_E2E_OPENSHELL=1 - Varsayılan olmayan bir CLI binary veya wrapper script’e işaret etmek için
OPENCLAW_E2E_OPENSHELL_COMMAND=/path/to/openshell
- Daha geniş e2e suite’i manuel çalıştırırken testi etkinleştirmek için
Live (real providers + real models)
- Komut:
pnpm test:live - Config:
vitest.live.config.ts - Dosyalar:
src/**/*.live.test.ts,test/**/*.live.test.tsveextensions/altındaki bundled-plugin live testleri - Varsayılan:
pnpm test:livetarafından etkin (OPENCLAW_LIVE_TEST=1ayarlar) - Kapsam:
- “Bu provider/model gerçek kimlik bilgileriyle bugün gerçekten çalışıyor mu?”
- Provider format değişikliklerini, tool-calling quirks’lerini, auth sorunlarını ve rate limit davranışını yakalar
- Beklentiler:
- Tasarım gereği CI-stable değildir (gerçek ağlar, gerçek provider politikaları, kotalar, kesintiler)
- Para harcar / rate limit kullanır
- “Her şey” yerine daraltılmış alt kümeleri çalıştırmayı tercih edin
- Live çalıştırmalar, eksik API key’leri almak için
~/.profiledosyasını source eder. - Varsayılan olarak live çalıştırmalar yine
HOMEdeğerini 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. OPENCLAW_LIVE_USE_REAL_HOME=1değerini yalnızca live testlerin bilerek gerçek home dizininizi kullanmasına ihtiyacınız olduğunda ayarlayın.pnpm test:liveartık varsayılan olarak daha sessiz bir moda geçer:[live] ...progress çıktısını korur, ancak ek~/.profilebildirimini bastırır ve gateway bootstrap log’larını/Bonjour chatter’ını susturur. Tam startup log’larını geri istiyorsanızOPENCLAW_LIVE_TEST_QUIET=0ayarlayın.- API key rotation (provider-specific): virgül/noktalı virgül formatıyla
*_API_KEYSveya*_API_KEY_1,*_API_KEY_2ayarlayın (örneğinOPENAI_API_KEYS,ANTHROPIC_API_KEYS,GEMINI_API_KEYS) ya daOPENCLAW_LIVE_*_KEYüzerinden live başına override kullanın; testler rate limit yanıtlarında yeniden dener. - Progress/heartbeat çıktısı:
- Live suiteler artık progress satırlarını stderr’e yazar; böylece uzun provider çağrıları, Vitest console capture sessiz olduğunda bile görünür şekilde aktiftir.
vitest.live.config.ts, live çalıştırmalar sırasında provider/gateway progress satırlarının hemen stream edilmesi için Vitest console interception’ı devre dışı bırakır.- Direct-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?
Bu karar tablosunu kullanın:- Düzenleme mantığı/testleri:
pnpm testçalıştırın (çok fazla değişiklik yaptıysanızpnpm test:coverageda) - Gateway ağ iletişimine / WS protokolüne / eşleştirmeye dokunma:
pnpm test:e2eekleyin - “botum kapalı” / sağlayıcıya özgü hatalar / araç çağırma hata ayıklaması: daraltılmış bir
pnpm test:liveçalıştırın
Canlı (ağa dokunan) testler
Canlı model matrisi, CLI arka uç duman testleri, ACP duman testleri, Codex uygulama sunucusu harness’ı ve tüm medya sağlayıcısı canlı testleri (Deepgram, BytePlus, ComfyUI, görsel, müzik, video, medya harness’ı) - canlı çalıştırmalar için kimlik bilgisi yönetimiyle birlikte - için Canlı test paketlerini test etme bölümüne bakın. Ayrılmış güncelleme ve Plugin doğrulama kontrol listesi için Güncellemeleri ve Plugin’leri test etme bölümüne bakın.Docker çalıştırıcıları (isteğe bağlı “Linux’ta çalışır” kontrolleri)
Bu Docker çalıştırıcıları iki gruba ayrılır:- Canlı model çalıştırıcıları:
test:docker:live-modelsvetest:docker:live-gateway, repo Docker imajı içinde yalnızca eşleşen profil anahtarlı canlı dosyaları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 (bağlanmışsa~/.profilekaynağını da alır). Eşleşen yerel giriş noktalarıtest:live:models-profilesvetest:live:gateway-profilesolur. - Docker canlı çalıştırıcıları varsayılan olarak daha küçük bir duman sınırı kullanır; böylece tam Docker taraması pratik kalır:
test:docker:live-modelsvarsayılan olarakOPENCLAW_LIVE_MAX_MODELS=12kullanır 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ı açıkça istediğinizde bu env değişkenlerini geçersiz kılın. test:docker:all, canlı Docker imajınıtest:docker:live-buildüzerinden bir kez derler, OpenClaw’ıscripts/package-openclaw-for-docker.mjsile bir kez npm tarball olarak paketler, ardından ikiscripts/e2e/Dockerfileimajını derler/yeniden kullanır. Çıplak imaj, install/update/plugin-dependency hatları için yalnızca Node/Git çalıştırıcısıdır; bu hatlar önceden derlenmiş tarball’ı bağlar. İşlevsel imaj, derlenmiş uygulama işlevselliği hatları için aynı tarball’ı/appiçine kurar. Docker hat tanımlarıscripts/lib/docker-e2e-scenarios.mjsiçinde bulunur; planlayıcı mantığıscripts/lib/docker-e2e-plan.mjsiçinde bulunur;scripts/test-docker-all.mjsseçilen planı yürütür. Toplu çalıştırma ağırlıklı bir yerel zamanlayıcı kullanır:OPENCLAW_DOCKER_ALL_PARALLELISMsüreç yuvalarını kontrol ederken, kaynak sınırları ağır canlı, npm-install ve çok servisli hatların aynı anda başlamasını engeller. Tek bir hat etkin sınırlardan daha ağırsa, zamanlayıcı havuz boşken yine de onu başlatabilir ve kapasite yeniden kullanılabilir olana kadar tek başına çalıştırır. Varsayılanlar 10 yuva,OPENCLAW_DOCKER_ALL_LIVE_LIMIT=9,OPENCLAW_DOCKER_ALL_NPM_LIMIT=10veOPENCLAW_DOCKER_ALL_SERVICE_LIMIT=7değerleridir;OPENCLAW_DOCKER_ALL_WEIGHT_LIMITveyaOPENCLAW_DOCKER_ALL_DOCKER_LIMITdeğerlerini yalnızca Docker host’unda daha fazla kapasite olduğunda ayarlayın. Çalıştırıcı varsayılan olarak bir Docker ön kontrolü yapar, bayat OpenClaw E2E container’larını kaldırır, her 30 saniyede bir durum yazdırır, başarılı hat sürelerini.artifacts/docker-tests/lane-timings.jsoniçinde saklar ve sonraki çalıştırmalarda daha uzun hatları önce başlatmak için bu süreleri kullanır. Docker derlemeden veya çalıştırmadan ağırlıklı hat manifestini yazdırmak içinOPENCLAW_DOCKER_ALL_DRY_RUN=1kullanın ya da seçilen hatlar, paket/imaj gereksinimleri ve kimlik bilgileri için CI planını yazdırmak üzerenode scripts/test-docker-all.mjs --plan-jsonçalıştırın.Package Acceptance, “bu kurulabilir tarball bir ürün olarak çalışıyor mu?” sorusuna yanıt veren GitHub yerel paket kapısıdır.source=npm,source=ref,source=urlveyasource=artifactiçinden bir aday paketi çözer, onupackage-under-testolarak yükler, ardından yeniden kullanılabilir Docker E2E hatlarını seçilen ref’i yeniden paketlemek yerine tam olarak o tarball’a karşı çalıştırır. Profiller kapsam genişliğine göre sıralanır:smoke,package,productvefull. Paket/güncelleme/Plugin sözleşmesi, yayımlanmış yükseltme kalıcılık matrisi, sürüm varsayılanları ve hata triyajı için Güncellemeleri ve Plugin’leri test etme bölümüne bakın.- Derleme ve sürüm kontrolleri tsdown sonrasında
scripts/check-cli-bootstrap-imports.mjsçalıştırır. Koruma,dist/entry.jsvedist/cli/run-main.jsüzerinden statik derlenmiş grafiği gezer ve komut yönlendirmesinden önceki başlangıç, Commander, prompt UI, undici veya günlükleme gibi paket bağımlılıklarını içe aktarırsa başarısız olur; ayrıca paketlenmiş Gateway çalıştırma parçasını bütçe altında tutar ve bilinen soğuk Gateway yollarının statik içe aktarmalarını reddeder. Paketlenmiş CLI duman testi ayrıca kök yardım, onboard yardımı, doctor yardımı, durum, config şeması ve bir model-list komutunu kapsar. - Paket Kabulü eski uyumluluğu
2026.4.25ile sınırlıdır (2026.4.25-beta.*dahil). Bu sınıra kadar harness yalnızca yayımlanmış paket metadata boşluklarını tolere eder: atlanmış özel QA envanter girdileri, eksikgateway install --wrapper, tarball türetilmiş git fixture’ında eksik patch dosyaları, eksik kalıcıupdate.channel, eski Plugin kurulum kaydı konumları, eksik marketplace kurulum kaydı kalıcılığı veplugins updatesırasında config metadata migrasyonu.2026.4.25sonrasındaki paketler için bu yollar katı hata sayılır. - Container duman çalıştırıcıları:
test:docker:openwebui,test:docker:onboard,test:docker:npm-onboard-channel-agent,test:docker:skill-install,test:docker:update-channel-switch,test:docker:upgrade-survivor,test:docker:published-upgrade-survivor,test:docker:session-runtime-context,test:docker:agents-delete-shared-workspace,test:docker:gateway-network,test:docker:browser-cdp-snapshot,test:docker:mcp-channels,test:docker:pi-bundle-mcp-tools,test:docker:cron-mcp-cleanup,test:docker:plugins,test:docker:plugin-update,test:docker:plugin-lifecycle-matrixvetest:docker:config-reloadbir veya daha fazla gerçek container başlatır ve daha üst düzey entegrasyon yollarını doğrular.
- Doğrudan modeller:
pnpm test:docker:live-models(betik:scripts/test-live-models-docker.sh) - ACP bağlama smoke testi:
pnpm test:docker:live-acp-bind(betik:scripts/test-live-acp-bind-docker.sh; varsayılan olarak Claude, Codex ve Gemini’yi kapsar; Droid/OpenCode için katı kapsampnpm test:docker:live-acp-bind:droidvepnpm test:docker:live-acp-bind:opencodeile sağlanır) - CLI backend smoke testi:
pnpm test:docker:live-cli-backend(betik:scripts/test-live-cli-backend-docker.sh) - Codex app-server harness smoke testi:
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) - Gözlemlenebilirlik smoke testi:
pnpm qa:otel:smokeözel bir QA kaynak-checkout hattıdır. npm tarball QA Lab’i dışarıda bıraktığı için özellikle paket Docker yayın hatlarının parçası değildir. - Open WebUI canlı smoke testi:
pnpm test:docker:openwebui(betik:scripts/e2e/openwebui-docker.sh) - Katılım sihirbazı (TTY, tam scaffolding):
pnpm test:docker:onboard(betik:scripts/e2e/onboard-docker.sh) - Npm tarball katılım/kanal/agent smoke testi:
pnpm test:docker:npm-onboard-channel-agent, paketlenmiş OpenClaw tarball’ını Docker içinde global olarak kurar, varsayılan olarak env-ref katılımı üzerinden OpenAI’ı ve Telegram’ı yapılandırır, doctor çalıştırır ve bir mocked OpenAI agent turu çalıştırır. Önceden oluşturulmuş bir tarball’ıOPENCLAW_CURRENT_PACKAGE_TGZ=/path/to/openclaw-*.tgzile yeniden kullanın, host yeniden derlemesiniOPENCLAW_NPM_ONBOARD_HOST_BUILD=0ile atlayın veya kanalıOPENCLAW_NPM_ONBOARD_CHANNEL=discordya daOPENCLAW_NPM_ONBOARD_CHANNEL=slackile değiştirin. - Skill kurulum smoke testi:
pnpm test:docker:skill-install, paketlenmiş OpenClaw tarball’ını Docker içinde global olarak kurar, config içinde yüklenen arşiv kurulumlarını devre dışı bırakır, aramadan mevcut canlı ClawHub skill slug’ını çözümler,openclaw skills installile kurar ve kurulu skill ile.clawhuborigin/lock metadata’sını doğrular. - Güncelleme kanalı değiştirme smoke testi:
pnpm test:docker:update-channel-switch, paketlenmiş OpenClaw tarball’ını Docker içinde global olarak kurar, paketstablekanalından gitdevkanalına geçer, kalıcı kanalı ve Plugin güncelleme sonrası çalışmayı doğrular, ardından tekrar paketstablekanalına döner ve güncelleme durumunu kontrol eder. - Yükseltme kurtulan smoke testi:
pnpm test:docker:upgrade-survivor, paketlenmiş OpenClaw tarball’ını agent’lar, kanal config’i, Plugin allowlist’leri, stale Plugin bağımlılık durumu ve mevcut workspace/session dosyaları içeren kirli bir eski kullanıcı fixture’ının üzerine kurar. Canlı provider veya kanal anahtarları olmadan paket güncellemesini ve etkileşimsiz doctor’ı çalıştırır, ardından bir loopback Gateway başlatır ve config/state korumasını, başlangıç/status bütçelerini kontrol eder. - Yayınlanmış yükseltme kurtulan smoke testi:
pnpm test:docker:published-upgrade-survivor, varsayılan olarakopenclaw@latestkurar, gerçekçi mevcut kullanıcı dosyalarını seed eder, bu baseline’ı yerleşik bir komut tarifiyle yapılandırır, ortaya çıkan config’i doğrular, bu yayınlanmış kurulumu aday tarball’a günceller, etkileşimsiz doctor çalıştırır,.artifacts/upgrade-survivor/summary.jsonyazar, ardından bir loopback Gateway başlatır ve yapılandırılmış intent’leri, state korumasını, başlangıcı,/healthz,/readyzve RPC status bütçelerini kontrol eder. Tek bir baseline’ıOPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECile override edin, aggregate scheduler’danOPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECSileopenclaw@2026.5.2 openclaw@2026.4.23 openclaw@2026.4.15gibi kesin yerel baseline’ları genişletmesini isteyin ve issue biçimli fixture’larıOPENCLAW_UPGRADE_SURVIVOR_SCENARIOSilereported-issuesgibi genişletin; reported-issues seti, otomatik harici OpenClaw Plugin kurulum onarımı içinconfigured-plugin-installsiçerir. Package Acceptance bunlarıpublished_upgrade_survivor_baseline,published_upgrade_survivor_baselinesvepublished_upgrade_survivor_scenariosolarak sunar,last-stable-4veyaall-since-2026.4.23gibi meta baseline token’larını çözümler ve Full Release Validation, release-soak paket kapısınılast-stable-4 2026.4.23 2026.5.2 2026.4.15artıreported-issuesolarak genişletir. - Session runtime bağlamı smoke testi:
pnpm test:docker:session-runtime-context, gizli runtime bağlamı transcript kalıcılığını ve etkilenen yinelenmiş prompt-rewrite branch’lerinin doctor onarımını doğrular. - Bun global kurulum smoke testi:
bash scripts/e2e/bun-global-install-smoke.sh, mevcut ağacı paketler, yalıtılmış bir home içindebun install -gile kurar veopenclaw infer image providers --jsonkomutunun takılmak yerine paketlenmiş image provider’larını döndürdüğünü doğrular. Önceden oluşturulmuş bir tarball’ıOPENCLAW_BUN_GLOBAL_SMOKE_PACKAGE_TGZ=/path/to/openclaw-*.tgzile yeniden kullanın, host derlemesiniOPENCLAW_BUN_GLOBAL_SMOKE_HOST_BUILD=0ile atlayın veya derlenmiş bir Docker imajındandist/kopyalamak içinOPENCLAW_BUN_GLOBAL_SMOKE_DIST_IMAGE=openclaw-dockerfile-smoke:localkullanın. - Installer Docker smoke testi:
bash scripts/test-install-sh-docker.sh, root, update ve direct-npm container’ları arasında tek bir npm cache paylaşır. Update smoke testi, aday tarball’a yükseltmeden önce stable baseline olarak varsayılan npmlatestkullanır. YereldeOPENCLAW_INSTALL_SMOKE_UPDATE_BASELINE=2026.4.22ile veya GitHub’da Install Smoke workflow’ununupdate_baseline_versioninput’u ile override edin. Non-root installer kontrolleri, root’a ait cache girişlerinin kullanıcı yerel kurulum davranışını maskelememesi için yalıtılmış bir npm cache tutar. Yerel yeniden çalıştırmalarda root/update/direct-npm cache’ini yeniden kullanmak içinOPENCLAW_INSTALL_SMOKE_NPM_CACHE_DIR=/path/to/cacheayarlayın. - Install Smoke CI, yinelenen direct-npm global güncellemeyi
OPENCLAW_INSTALL_SMOKE_SKIP_NPM_GLOBAL=1ile atlar; doğrudannpm install -gkapsamı gerektiğinde betiği bu env olmadan yerelde çalıştırın. - Agents paylaşılan workspace silme CLI smoke testi:
pnpm test:docker:agents-delete-shared-workspace(betik:scripts/e2e/agents-delete-shared-workspace-docker.sh) varsayılan olarak root Dockerfile imajını derler, yalıtılmış bir container home içinde bir workspace’e sahip iki agent seed eder,agents delete --jsonçalıştırır ve geçerli JSON ile korunan workspace davranışını doğrular. Install-smoke imajınıOPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_E2E_IMAGE=openclaw-dockerfile-smoke:local OPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_E2E_SKIP_BUILD=1ile yeniden kullanın. - Gateway ağ bağlantısı (iki container, WS auth + health):
pnpm test:docker:gateway-network(betik:scripts/e2e/gateway-network-docker.sh) - Browser CDP snapshot smoke testi:
pnpm test:docker:browser-cdp-snapshot(betik:scripts/e2e/browser-cdp-snapshot-docker.sh) kaynak E2E imajını ve bir Chromium katmanını derler, Chromium’u raw CDP ile başlatır,browser doctor --deepçalıştırır ve CDP rol snapshot’larının link URL’lerini, cursor-promoted tıklanabilirleri, iframe ref’lerini ve frame metadata’sını kapsadığını doğrular. - OpenAI Responses web_search minimal reasoning regresyonu:
pnpm test:docker:openai-web-search-minimal(betik:scripts/e2e/openai-web-search-minimal-docker.sh) Gateway üzerinden mocked bir OpenAI server çalıştırır,web_searchöğesininreasoning.effortdeğeriniminimalseviyesindenlowseviyesine yükselttiğini doğrular, ardından provider schema reddini zorlar ve raw ayrıntının Gateway log’larında göründüğünü kontrol eder. - MCP kanal köprüsü (seed edilmiş Gateway + stdio bridge + raw Claude notification-frame smoke testi):
pnpm test:docker:mcp-channels(betik:scripts/e2e/mcp-channels-docker.sh) - Pi bundle MCP araçları (gerçek stdio MCP server + gömülü Pi profil allow/deny smoke testi):
pnpm test:docker:pi-bundle-mcp-tools(betik:scripts/e2e/pi-bundle-mcp-tools-docker.sh) - Cron/subagent MCP cleanup (yalıtılmış cron ve tek seferlik subagent çalıştırmalarından sonra gerçek Gateway + stdio MCP child kapatma):
pnpm test:docker:cron-mcp-cleanup(betik:scripts/e2e/cron-mcp-cleanup-docker.sh) - Plugins (yerel path,
file:, hoisted bağımlılıklı npm registry, git moving refs, ClawHub kitchen-sink, marketplace güncellemeleri ve Claude-bundle enable/inspect için install/update smoke testi):pnpm test:docker:plugins(betik:scripts/e2e/plugins-docker.sh) ClawHub bloğunu atlamak içinOPENCLAW_PLUGINS_E2E_CLAWHUB=0ayarlayın veya varsayılan kitchen-sink package/runtime çiftiniOPENCLAW_PLUGINS_E2E_CLAWHUB_SPECveOPENCLAW_PLUGINS_E2E_CLAWHUB_IDile override edin.OPENCLAW_CLAWHUB_URL/CLAWHUB_URLolmadan test, hermetic yerel bir ClawHub fixture server kullanır. - Plugin update unchanged smoke testi:
pnpm test:docker:plugin-update(betik:scripts/e2e/plugin-update-unchanged-docker.sh) - Plugin yaşam döngüsü matrisi smoke testi:
pnpm test:docker:plugin-lifecycle-matrix, paketlenmiş OpenClaw tarball’ını bare bir container’a kurar, bir npm Plugin’i kurar, enable/disable arasında geçiş yapar, yerel bir npm registry üzerinden onu yükseltir ve düşürür, kurulu kodu siler, ardından uninstall’ın her yaşam döngüsü aşaması için RSS/CPU metriklerini log’larken stale state’i yine de kaldırdığını doğrular. - Config reload metadata smoke testi:
pnpm test:docker:config-reload(betik:scripts/e2e/config-reload-source-docker.sh) - Plugins:
pnpm test:docker:plugins, yerel path,file:, hoisted bağımlılıklı npm registry, git moving refs, ClawHub fixture’ları, marketplace güncellemeleri ve Claude-bundle enable/inspect için install/update smoke testini kapsar.pnpm test:docker:plugin-update, kurulu Plugins için unchanged update davranışını kapsar.pnpm test:docker:plugin-lifecycle-matrix, kaynak takibi yapılan npm Plugin install, enable, disable, upgrade, downgrade ve missing-code uninstall işlemlerini kapsar.
OPENCLAW_GATEWAY_NETWORK_E2E_IMAGE gibi suite’e özel imaj override’ları ayarlandıklarında yine önceliklidir. OPENCLAW_SKIP_DOCKER_BUILD=1 uzak bir paylaşılan imajı işaret ettiğinde, yerelde yoksa betikler onu çeker. QR ve installer Docker testleri kendi Dockerfile’larını korur çünkü paylaşılan derlenmiş uygulama runtime’ı yerine paket/install davranışını doğrularlar.
Canlı model Docker çalıştırıcıları ayrıca geçerli checkout’u salt okunur olarak bind mount eder ve
container içinde geçici bir workdir’e hazırlar. Bu, runtime image’ını
ince tutarken Vitest’i yine de tam olarak yerel source/config’inize karşı çalıştırır. Hazırlama
adımı, Docker canlı çalıştırmalarının makineye özgü artifact’leri kopyalamakla
dakikalar harcamaması için .pnpm-store, .worktrees, __openclaw_vitest__
ve app’e yerel .build ya da Gradle çıktı dizinleri gibi büyük yalnızca yerel
cache’leri ve app build çıktılarını atlar.
Ayrıca OPENCLAW_SKIP_CHANNELS=1 ayarlarlar; böylece gateway canlı probe’ları
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
o Docker hattından gateway canlı 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 etkin olan 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’ın openclaw/default sunduğunu doğrular
ve ardından Open WebUI’nin /api/chat/completions proxy’si üzerinden gerçek bir
sohbet isteği gönderir.
Canlı model tamamlamasını beklemeden Open WebUI oturum açma ve model keşfinden
sonra durması gereken release-path CI kontrolleri için OPENWEBUI_SMOKE_MODE=models
ayarlayın.
İlk çalıştırma belirgin biçimde daha yavaş olabilir; çünkü Docker’ın Open WebUI
image’ını çekmesi ve Open WebUI’nin kendi cold-start kurulumunu tamamlaması
gerekebilir.
Bu hat kullanılabilir bir canlı model anahtarı bekler ve OPENCLAW_PROFILE_FILE
(Docker’laştırılmış çalıştırmalarda varsayılan olarak ~/.profile) bunu sağlamanın
birincil yoludur.
Başarılı çalıştırmalar { "ok": true, "model": "openclaw/default", ... } gibi küçük bir JSON payload’u yazdırır.
test:docker:mcp-channels bilerek deterministiktir ve gerçek bir Telegram,
Discord veya iMessage hesabına ihtiyaç duymaz. Seed edilmiş bir Gateway
container’ı başlatır, openclaw mcp serve üreten ikinci bir container başlatır
ve ardından gerçek stdio MCP bridge’i üzerinden yönlendirilmiş konuşma keşfini,
transcript okumalarını, attachment metadata’sını, canlı event queue davranışını,
outbound send yönlendirmesini ve Claude tarzı kanal + izin bildirimlerini
doğrular. Bildirim kontrolü ham stdio MCP frame’lerini doğrudan inceler; böylece
smoke testi, yalnızca belirli bir client SDK’sının yüzeye çıkarmayı tesadüfen
başardığını değil, bridge’in gerçekten ne yaydığını doğrular.
test:docker:pi-bundle-mcp-tools deterministiktir ve canlı model anahtarına
ihtiyaç duymaz. Repo Docker image’ını build eder, container içinde gerçek bir
stdio MCP probe server başlatır, bu server’ı gömülü Pi bundle MCP runtime’ı
üzerinden materialize eder, tool’u yürütür ve ardından coding ile messaging’in
bundle-mcp tool’larını tuttuğunu, minimal ve tools.deny: ["bundle-mcp"]’in
ise bunları filtrelediğini doğrular.
test:docker:cron-mcp-cleanup deterministiktir ve canlı model anahtarına ihtiyaç
duymaz. Gerçek bir stdio MCP probe server ile seed edilmiş bir Gateway başlatır,
izole bir cron turn ve bir /subagents spawn tek seferlik child turn çalıştırır,
ardından MCP child process’in her çalıştırmadan sonra çıktığını doğrular.
Manuel ACP düz dil thread smoke testi (CI değil):
bun scripts/dev/discord-acp-plain-language-smoke.ts --channel <discord-channel-id> ...- Bu script’i regresyon/debug workflow’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/.openclawkonumuna mount edilirOPENCLAW_WORKSPACE_DIR=...(varsayılan:~/.openclaw/workspace)/home/node/.openclaw/workspacekonumuna mount edilirOPENCLAW_PROFILE_FILE=...(varsayılan:~/.profile)/home/node/.profilekonumuna mount edilir ve testler çalıştırılmadan önce source edilir- Yalnızca
OPENCLAW_PROFILE_FILEüzerinden source edilen env var’larını, geçici config/workspace dizinleri kullanarak ve harici CLI auth mount’ları olmadan doğrulamak içinOPENCLAW_DOCKER_PROFILE_ENV_ONLY=1 OPENCLAW_DOCKER_CLI_TOOLS_DIR=...(varsayılan:~/.cache/openclaw/docker-cli-tools) Docker içinde cache’lenmiş CLI kurulumları için/home/node/.npm-globalkonumuna mount edilir$HOMEaltındaki harici CLI auth dizinleri/dosyaları/host-auth...altında salt okunur olarak mount edilir, ardından testler başlamadan önce/home/node/...içine 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_PROVIDERSdeğerlerinden çıkarılan gerekli dizinleri/dosyaları mount eder OPENCLAW_DOCKER_AUTH_DIRS=all,OPENCLAW_DOCKER_AUTH_DIRS=noneveyaOPENCLAW_DOCKER_AUTH_DIRS=.claude,.codexgibi virgüllü bir listeyle manuel olarak override edin
- Varsayılan dizinler:
- Çalıştırmayı daraltmak için
OPENCLAW_LIVE_GATEWAY_MODELS=.../OPENCLAW_LIVE_MODELS=... - Container içinde sağlayıcıları filtrelemek için
OPENCLAW_LIVE_GATEWAY_PROVIDERS=.../OPENCLAW_LIVE_PROVIDERS=... - Rebuild gerektirmeyen yeniden çalıştırmalarda mevcut bir
openclaw:local-liveimage’ını yeniden kullanmak içinOPENCLAW_SKIP_DOCKER_BUILD=1 - Kimlik bilgilerinin env’den değil profile store’dan geldiğinden emin olmak için
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1 - Open WebUI smoke testi için gateway tarafından sunulan modeli seçmek üzere
OPENCLAW_OPENWEBUI_MODEL=... - Open WebUI smoke testi tarafından kullanılan nonce-check prompt’unu override etmek için
OPENCLAW_OPENWEBUI_PROMPT=... - Sabitlenmiş Open WebUI image tag’ini override etmek için
OPENWEBUI_IMAGE=...
Doküman sanity kontrolü
Doküman düzenlemelerinden sonra doküman kontrollerini çalıştırın:pnpm check:docs.
Sayfa içi başlık kontrolleri de gerektiğinde tam Mintlify anchor doğrulamasını çalıştırın: pnpm docs:check-links:anchors.
Çevrimdışı regresyon (CI-safe)
Bunlar gerçek sağlayıcılar olmadan “gerçek pipeline” regresyonlarıdır:- Gateway tool calling (mock OpenAI, gerçek gateway + agent loop):
src/gateway/gateway.test.ts(case: “runs a mock OpenAI tool call end-to-end via gateway agent loop”) - Gateway wizard (WS
wizard.start/wizard.next, config yazar + auth enforced):src/gateway/gateway.test.ts(case: “runs wizard over ws and writes auth token config”)
Agent reliability evals (Skills)
Zaten “agent reliability evals” gibi davranan birkaç CI-safe testimiz var:- Gerçek gateway + agent loop üzerinden mock tool-calling (
src/gateway/gateway.test.ts). - Session wiring ve config etkilerini doğrulayan uçtan uca wizard flow’ları (
src/gateway/gateway.test.ts).
- Karar verme: prompt’ta skills listelendiğinde, agent doğru skill’i seçiyor mu (veya alakasız olanlardan kaçınıyor mu)?
- Uyumluluk: agent kullanmadan önce
SKILL.mdokuyor ve gerekli adımları/argümanları izliyor mu? - Workflow sözleşmeleri: tool sırasını, session history carryover’ını ve sandbox sınırlarını doğrulayan multi-turn senaryolar.
- Tool call’larını + sırasını, skill dosyası okumalarını ve session wiring’i doğrulamak için mock sağlayıcılar kullanan bir senaryo runner’ı.
- Skill odaklı küçük bir senaryo paketi (kullanma ve kaçınma, gating, prompt injection).
- İsteğe bağlı canlı eval’lar (opt-in, env-gated) yalnızca CI-safe paket yerine oturduktan sonra.
Sözleşme testleri (Plugin ve kanal şekli)
Sözleşme testleri, kayıtlı her Plugin ve kanalın kendi interface sözleşmesine uyduğunu doğrular. Keşfedilen tüm Plugin’ler üzerinde iterasyon yapar ve bir shape ve davranış assertion paketi çalıştırırlar. Varsayılanpnpm test unit
hattı bu paylaşılan seam ve smoke dosyalarını bilerek 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, ad, capability’ler)
- setup - Setup wizard sözleşmesi
- session-binding - Session binding davranışı
- outbound-payload - Message payload yapısı
- inbound - Inbound message işleme
- actions - Kanal action handler’ları
- threading - Thread ID işleme
- directory - Directory/roster API
- group-policy - Group policy enforcement
Sağlayıcı durum sözleşmeleri
src/plugins/contracts/*.contract.test.ts içinde bulunur.
- status - Kanal status probe’ları
- registry - Plugin registry şekli
Sağlayıcı sözleşmeleri
src/plugins/contracts/*.contract.test.ts içinde bulunur:
- auth - Auth flow sözleşmesi
- auth-choice - Auth choice/selection
- catalog - Model catalog API
- discovery - Plugin discovery
- loader - Plugin loading
- runtime - Provider runtime
- shape - Plugin shape/interface
- wizard - Setup wizard
Ne zaman çalıştırılır
- plugin-sdk export’ları veya subpath’leri değiştirildikten sonra
- Bir kanal veya sağlayıcı Plugin’i eklendikten ya da değiştirildikten sonra
- Plugin registration veya discovery refactor edildikten sonra
Regresyon ekleme (rehberlik)
Canlıda keşfedilen bir sağlayıcı/model sorununu düzelttiğinizde:- Mümkünse CI-safe bir regresyon ekleyin (mock/stub sağlayıcı veya tam request-shape transformation’ı yakalayın)
- Doğası gereği yalnızca canlı ise (rate limit’ler, auth politikaları), canlı testi dar ve env var’ları üzerinden opt-in tutun
- Bug’ı yakalayan en küçük katmanı hedeflemeyi tercih edin:
- sağlayıcı request conversion/replay bug’ı → doğrudan models test
- gateway session/history/tool pipeline bug’ı → gateway canlı smoke testi veya CI-safe gateway mock test
- SecretRef traversal guardrail:
src/secrets/exec-secret-ref-id-parity.test.ts, registry metadata’sından (listSecretTargetRegistryEntries()) her SecretRef class için örneklenmiş bir hedef türetir, ardından traversal-segment exec id’lerinin reddedildiğini doğrular.src/secrets/target-registry-data.tsiçine yeni birincludeInPlanSecretRef target family eklerseniz, o testtekiclassifyTargetClassdeğerini güncelleyin. Yeni class’ların sessizce atlanamaması için test, sınıflandırılmamış target id’lerinde bilerek başarısız olur.