Testing
Testowanie
OpenClaw ma trzy zestawy testów Vitest (jednostkowe/integracyjne, e2e i live) oraz mechanizmy uruchamiające Docker. Ta strona opisuje zakres każdego zestawu, polecenia odpowiednie dla poszczególnych przepływów pracy, sposób wykrywania danych uwierzytelniających przez testy live oraz dodawanie testów regresji dla rzeczywistych błędów dostawców i modeli.
Szybki start
W większości przypadków:
- Pełna bramka (oczekiwana przed wysłaniem zmian):
pnpm build && pnpm check && pnpm check:test-types && pnpm test - Szybsze lokalne uruchomienie pełnego zestawu na maszynie z dużą ilością zasobów:
pnpm test:max - Bezpośrednia pętla obserwowania zmian Vitest:
pnpm test:watch - Bezpośrednie wskazanie pliku obsługuje również ścieżki pluginów/kanałów:
pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts - Podczas pracy nad pojedynczym błędem najpierw wybieraj ukierunkowane uruchomienia.
- Środowisko QA oparte na Dockerze:
pnpm qa:lab:up - Ścieżka QA oparta na maszynie wirtualnej z systemem Linux:
pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline
Gdy modyfikujesz testy lub potrzebujesz większej pewności:
- Informacyjny raport pokrycia V8:
pnpm test:coverage - Zestaw E2E:
pnpm test:e2e
Katalogi tymczasowe testów
Używaj współdzielonych funkcji pomocniczych z test/helpers/temp-dir.ts dla należących do testów katalogów tymczasowych, aby własność była jednoznaczna, a sprzątanie pozostawało częścią cyklu życia testu:
const tempDirs = useAutoCleanupTempDirTracker(afterEach); it("uses a temp workspace", () => { const workspace = tempDirs.make("openclaw-example-"); // use workspace});useAutoCleanupTempDirTracker(afterEach) celowo nie udostępnia ręcznej metody sprzątania — Vitest odpowiada za sprzątanie po każdym teście. Starsze funkcje pomocnicze niższego poziomu (makeTempDir, cleanupTempDirs, createTempDirTracker) nadal istnieją dla testów, które nie zostały jeszcze zmigrowane; unikaj ich w nowym kodzie oraz nowych bezpośrednich wywołań fs.mkdtemp*, chyba że test jawnie sprawdza podstawowe zachowanie katalogu tymczasowego. Gdy bezpośrednio utworzony katalog tymczasowy jest rzeczywiście potrzebny, dodaj możliwy do skontrolowania komentarz zezwalający wraz z uzasadnieniem:
// openclaw-temp-dir: allow verifies raw fs cleanup behaviorconst workspace = fs.mkdtempSync(prefix);node scripts/report-test-temp-creations.mjs raportuje nowe bezpośrednie tworzenie katalogów tymczasowych oraz nowe przypadki ręcznego użycia współdzielonych funkcji pomocniczych w dodanych wierszach różnic, bez blokowania istniejących sposobów sprzątania. Stosuje tę samą klasyfikację ścieżek testów co scripts/changed-lanes.mjs i pomija samą implementację współdzielonej funkcji pomocniczej. check:changed uruchamia ten raport dla zmienionych ścieżek testów jako sygnał CI zawierający wyłącznie ostrzeżenia (adnotacje ostrzegawcze GitHub, a nie błędy).
Przepływy pracy live i Docker/Parallels
Podczas debugowania rzeczywistych dostawców/modeli (wymaga prawdziwych danych uwierzytelniających):
- Zestaw live (modele oraz sondy narzędzi/obrazów Gateway):
pnpm test:live - Ciche uruchomienie jednego pliku live:
pnpm test:live -- src/agents/models.profiles.live.test.ts - Raporty wydajności środowiska uruchomieniowego: uruchom
OpenClaw Performancezlive_openai_candidate=true, aby wykonać rzeczywistą turę agentaopenai/gpt-5.6-luna, albo zdeep_profile=true, aby uzyskać artefakty procesora, sterty i śledzenia Kova. Codzienne zaplanowane uruchomienia publikują raporty ścieżek fikcyjnego dostawcy, profilowania szczegółowego oraz GPT-5.6 Luna wopenclaw/clawgrit-reportsza pomocą oddzielnego zadania publikującego, które przetwarza artefakty; brakujące lub nieprawidłowe uwierzytelnienie publikatora powoduje niepowodzenie uruchomień zaplanowanych oraz uruchomień zprofile=release. Ręczne uruchomienia niebędące wydaniami zachowują artefakty GitHub i traktują publikację raportu jako opcjonalną. Raport fikcyjnego dostawcy zawiera również pomiary uruchamiania Gateway na poziomie kodu źródłowego, pamięci, obciążenia pluginami, powtarzanej pętli powitalnej fikcyjnego modelu oraz uruchamiania CLI. - Przegląd modeli live w Dockerze:
pnpm test:docker:live-models- Każdy wybrany model wykonuje turę tekstową oraz niewielką sondę przypominającą odczyt pliku. Modele, których metadane deklarują wejście
image, wykonują również niewielką turę z obrazem. Podczas izolowania awarii dostawcy wyłącz dodatkowe sondy za pomocąOPENCLAW_LIVE_MODEL_FILE_PROBE=0lubOPENCLAW_LIVE_MODEL_IMAGE_PROBE=0. - Pokrycie CI: codzienny przepływ
OpenClaw Scheduled Live And E2E Checksoraz ręcznyOpenClaw Release Checkswywołują wielokrotnego użytku przepływ live/E2E zinclude_live_suites: true, który obejmuje zadania macierzy modeli live w Dockerze podzielone na fragmenty według dostawcy. - Aby wykonać ukierunkowane ponowne uruchomienie CI, uruchom
OpenClaw Live And E2E Checks (Reusable)zinclude_live_suites: trueilive_models_only: true. - Dodawaj nowe sekrety dostawców o wysokiej wartości diagnostycznej do
scripts/ci-hydrate-live-auth.sh,.github/workflows/openclaw-live-and-e2e-checks-reusable.ymloraz wywołujących go przepływów zaplanowanych i wydaniowych.
- Każdy wybrany model wykonuje turę tekstową oraz niewielką sondę przypominającą odczyt pliku. Modele, których metadane deklarują wejście
- Test dymny natywnego powiązanego czatu Codex:
pnpm test:docker:live-codex-bind- Uruchamia ścieżkę live w Dockerze względem ścieżki serwera aplikacji Codex, wiąże syntetyczną wiadomość prywatną Slack poleceniem
/codex bind, sprawdza/codex fasti/codex permissions, a następnie weryfikuje, że zwykła odpowiedź oraz załącznik graficzny są kierowane przez natywne powiązanie pluginu zamiast przez ACP.
- Uruchamia ścieżkę live w Dockerze względem ścieżki serwera aplikacji Codex, wiąże syntetyczną wiadomość prywatną Slack poleceniem
- Test dymny środowiska testowego serwera aplikacji Codex:
pnpm test:docker:live-codex-harness- Uruchamia tury agenta Gateway przez należące do pluginu środowisko testowe serwera aplikacji Codex, weryfikuje
/codex statusi/codex models, a domyślnie sprawdza sondy obrazu, MCP Cron, podagenta oraz Guardian. Podczas izolowania innych awarii wyłącz sondę podagenta za pomocąOPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_PROBE=0. Aby wykonać ukierunkowaną kontrolę podagenta, wyłącz pozostałe sondy: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. Proces kończy się po sondzie podagenta, chyba że ustawionoOPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_ONLY=0.
- Uruchamia tury agenta Gateway przez należące do pluginu środowisko testowe serwera aplikacji Codex, weryfikuje
- Test dymny instalacji Codex na żądanie:
pnpm test:docker:codex-on-demand- Instaluje spakowane archiwum OpenClaw w Dockerze, przeprowadza konfigurację początkową z kluczem API OpenAI i sprawdza, czy plugin Codex oraz zależność
@openai/codexzostały na żądanie pobrane do katalogu głównego zarządzanego projektu npm.
- Instaluje spakowane archiwum OpenClaw w Dockerze, przeprowadza konfigurację początkową z kluczem API OpenAI i sprawdza, czy plugin Codex oraz zależność
- Test dymny zależności narzędzia pluginu live:
pnpm test:docker:live-plugin-tool- Pakuje plugin testowy z rzeczywistą zależnością
slugify, instaluje go przeznpm-pack:, weryfikuje zależność w katalogu głównym zarządzanego projektu npm, a następnie prosi model OpenAI live o wywołanie narzędzia pluginu i zwrócenie ukrytego uproszczonego identyfikatora.
- Pakuje plugin testowy z rzeczywistą zależnością
- Test dymny polecenia ratunkowego Crestodian:
pnpm test:live:crestodian-rescue-channel- Opcjonalna, redundantna kontrola zestawu poleceń ratunkowych kanału wiadomości. Sprawdza
/crestodian status, umieszcza trwałą zmianę modelu w kolejce, odpowiada/crestodian yesi weryfikuje ścieżkę zapisu audytu/konfiguracji.
- Opcjonalna, redundantna kontrola zestawu poleceń ratunkowych kanału wiadomości. Sprawdza
- Test dymny pierwszego uruchomienia Crestodian w Dockerze:
pnpm test:docker:crestodian-first-run- Rozpoczyna od pustego katalogu stanu OpenClaw i najpierw potwierdza, że spakowane polecenie CLI
openclaw crestodianbezpiecznie odmawia działania bez inferencji. Następnie testuje i aktywuje fikcyjny model Claude za pomocą spakowanego modułu aktywacji. Dopiero później nieprecyzyjne żądanie spakowanego CLI dociera do planera i zostaje przekształcone w typowaną konfigurację, po której następują jednorazowe operacje na modelu, agencie, pluginie Discord i SecretRef. Test weryfikuje konfigurację oraz wpisy audytu. Jest to pomocniczy dowód działania bramki i operacji, a nie dowód interaktywnej konfiguracji początkowej ani działania agenta, narzędzia lub zatwierdzania Crestodian. Ta sama ścieżka jest dostępna w QA Lab przezpnpm openclaw qa suite --scenario crestodian-ring-zero-setup.
- Rozpoczyna od pustego katalogu stanu OpenClaw i najpierw potwierdza, że spakowane polecenie CLI
- Test dymny kosztów Moonshot/Kimi: po ustawieniu
MOONSHOT_API_KEYuruchomopenclaw models list --provider moonshot --json, a następnie wykonaj izolowane polecenieopenclaw agent --local --session-id live-kimi-cost --message 'Reply exactly: KIMI_LIVE_OK' --thinking off --jsonwzględemmoonshot/kimi-k2.6. Sprawdź, czy dane JSON wskazują Moonshot/K2.6, a transkrypcja asystenta przechowuje znormalizowaneusage.cost.
Mechanizmy uruchamiające przeznaczone dla QA
Te polecenia uzupełniają główne zestawy testów, gdy potrzebujesz realizmu środowiska QA Lab.
CI uruchamia QA Lab w dedykowanych przepływach pracy. Zgodność agentowa jest częścią QA-Lab - All Lanes oraz walidacji wydania, a nie osobnego przepływu pracy PR. Szeroka walidacja powinna używać Full Release Validation z rerun_group=qa-parity albo grupy QA kontroli wydania. Kontrole wydania stabilnego/domyślnego pozostawiają wyczerpujące długotrwałe testy live/Docker za opcją run_release_soak=true; profil full wymusza ich włączenie. QA-Lab - All Lanes uruchamia się każdej nocy na main oraz ręcznie, wykonując równolegle ścieżkę zgodności z fikcyjnym dostawcą, ścieżkę Matrix live, zarządzaną przez Convex ścieżkę Telegram live oraz zarządzaną przez Convex ścieżkę Discord live. Zaplanowane QA i kontrole wydania jawnie przekazują do Matrix opcję --profile fast, natomiast domyślną wartością CLI Matrix i ręcznego wejścia przepływu pracy pozostaje all; ręczne uruchomienie może podzielić all na zadania transport, media, e2ee-smoke, e2ee-deep i e2ee-cli. OpenClaw Release Checks uruchamia sprawdzenie zgodności oraz szybkie ścieżki Matrix i Telegram przed zatwierdzeniem wydania, używając mock-openai/gpt-5.6-luna do wydaniowych kontroli transportu, dzięki czemu pozostają deterministyczne i unikają standardowego uruchamiania pluginu dostawcy. Te bramy transportowe live wyłączają wyszukiwanie w pamięci; zachowanie pamięci pozostaje objęte zestawami zgodności QA.
Fragmenty multimediów live pełnego wydania używają ghcr.io/openclaw/openclaw-live-media-runner:ubuntu-24.04, który zawiera już ffmpeg i ffprobe. Fragmenty modeli/zaplecza live w Dockerze używają współdzielonego obrazu ghcr.io/openclaw/openclaw-live-test:<sha>, budowanego raz dla każdego wybranego commitu, a następnie pobierają go z OPENCLAW_SKIP_DOCKER_BUILD=1 zamiast przebudowywać go wewnątrz każdego fragmentu.
pnpm openclaw qa suite- Uruchamia scenariusze kontroli jakości oparte na repozytorium bezpośrednio na hoście.
- Zapisuje artefakty najwyższego poziomu
qa-evidence.json,qa-suite-summary.jsonorazqa-suite-report.mddla wybranego zestawu scenariuszy, w tym wybrane scenariusze przepływów mieszanych, Vitest i Playwright. - Po uruchomieniu przez
pnpm openclaw qa run --qa-profile <profile>osadza kartę wyników wybranego profilu taksonomii w tym samym plikuqa-evidence.json.smoke-cizapisuje uproszczone dowody (evidenceMode: "slim", bezexecutiondla poszczególnych wpisów).releaseobejmuje wyselekcjonowany zakres gotowości do wydania;allwybiera wszystkie aktywne kategorie dojrzałości i jest przeznaczony do jawnego uruchamiania przepływu pracy QA Profile Evidence, gdy potrzebny jest pełny artefakt karty wyników. - Domyślnie uruchamia wiele wybranych scenariuszy równolegle przy użyciu
izolowanych procesów roboczych Gateway. Dla
qa-channeldomyślna współbieżność wynosi 4 (ograniczona liczbą wybranych scenariuszy). Użyj--concurrency <count>, aby dostosować liczbę procesów roboczych, albo--concurrency 1, aby użyć starszej ścieżki szeregowej. - Kończy działanie kodem różnym od zera, jeśli którykolwiek scenariusz zakończy się niepowodzeniem. Użyj
--allow-failures, aby uzyskać artefakty bez kodu zakończenia oznaczającego błąd. - Obsługuje tryby dostawcy
live-frontier,mock-openaiorazaimock.aimockuruchamia lokalny serwer dostawcy oparty na AIMock w celu eksperymentalnego testowania fikstur i atrap protokołu bez zastępowania ścieżkimock-openaiuwzględniającej scenariusze.
pnpm openclaw qa coverage --match <query>- Przeszukuje identyfikatory i tytuły scenariuszy, powierzchnie, identyfikatory pokrycia, odwołania do dokumentacji i kodu, pluginy oraz wymagania dostawców, a następnie wyświetla pasujące cele zestawów testów.
- Użyj tego przed uruchomieniem QA Lab, gdy znasz zmieniane zachowanie lub ścieżkę pliku, ale nie znasz najmniejszego odpowiedniego scenariusza. Wynik ma wyłącznie charakter doradczy — nadal wybierz dowód oparty na atrapach, środowisku rzeczywistym, Multipass, Matrix lub transporcie zgodnie ze zmienianym zachowaniem.
pnpm test:plugins:kitchen-sink-live- Uruchamia pełny zestaw rzeczywistych testów pluginu OpenAI Kitchen Sink za pośrednictwem QA Lab.
Instaluje zewnętrzny pakiet Kitchen Sink, weryfikuje spis powierzchni SDK
pluginu, sonduje
/healthzi/readyz, rejestruje dowody dotyczące CPU/RSS Gateway, wykonuje rzeczywistą turę OpenAI i sprawdza diagnostykę w warunkach wrogich. Wymaga rzeczywistych danych uwierzytelniających OpenAI, takich jakOPENAI_API_KEY. W przygotowanych sesjach Testbox automatycznie wczytuje profil rzeczywistego uwierzytelniania Testbox, gdy dostępny jest pomocnikopenclaw-testbox-env.
- Uruchamia pełny zestaw rzeczywistych testów pluginu OpenAI Kitchen Sink za pośrednictwem QA Lab.
Instaluje zewnętrzny pakiet Kitchen Sink, weryfikuje spis powierzchni SDK
pluginu, sonduje
pnpm test:gateway:cpu-scenarios- Uruchamia test wydajności uruchamiania Gateway wraz z małym zestawem scenariuszy QA Lab opartych na atrapach
(
channel-chat-baseline,memory-failure-fallback,gateway-restart-inflight-run) i zapisuje połączone podsumowanie obserwacji CPU w katalogu.artifacts/gateway-cpu-scenarios/. - Domyślnie oznacza tylko utrzymujące się wysokie użycie CPU (
--cpu-core-warn, domyślnie0.9;--hot-wall-warn-ms, domyślnie30000), dzięki czemu krótkie skoki podczas uruchamiania są rejestrowane jako metryki, ale nie wyglądają jak regresja powodująca wielominutowe maksymalne obciążenie Gateway. - Działa na zbudowanych artefaktach
dist; najpierw uruchom kompilację, jeśli kopia robocza nie zawiera jeszcze aktualnych wyników środowiska uruchomieniowego.
- Uruchamia test wydajności uruchamiania Gateway wraz z małym zestawem scenariuszy QA Lab opartych na atrapach
(
pnpm openclaw qa suite --runner multipass- Uruchamia ten sam zestaw testów kontroli jakości wewnątrz jednorazowej maszyny wirtualnej Multipass z systemem Linux,
zachowując te same flagi wyboru scenariuszy oraz dostawcy/modelu co
qa suite. - Rzeczywiste uruchomienia przekazują dane uwierzytelniające QA, które mogą być użyte
w systemie gościa: klucze dostawców oparte na zmiennych środowiskowych, ścieżkę konfiguracji
rzeczywistego dostawcy QA oraz
CODEX_HOME, jeśli jest dostępna. - Katalogi wyjściowe muszą znajdować się w katalogu głównym repozytorium, aby system gościa mógł zapisywać wyniki przez zamontowaną przestrzeń roboczą.
- Zapisuje standardowy raport i podsumowanie QA oraz dzienniki Multipass w
.artifacts/qa-e2e/....
- Uruchamia ten sam zestaw testów kontroli jakości wewnątrz jednorazowej maszyny wirtualnej Multipass z systemem Linux,
zachowując te same flagi wyboru scenariuszy oraz dostawcy/modelu co
pnpm qa:lab:up- Uruchamia witrynę QA opartą na Dockerze do pracy kontrolnej w stylu operatorskim.
pnpm test:docker:npm-onboard-channel-agent- Buduje archiwum npm z bieżącej kopii roboczej, instaluje je globalnie w Dockerze, wykonuje nieinteraktywną konfigurację początkową z kluczem API OpenAI, domyślnie konfiguruje Telegram, sprawdza, czy środowisko uruchomieniowe spakowanego pluginu ładuje się bez naprawiania zależności podczas uruchamiania, uruchamia doctor i wykonuje jedną lokalną turę agenta z atrapą punktu końcowego OpenAI.
- Użyj
OPENCLAW_NPM_ONBOARD_CHANNEL=discord, aby uruchomić tę samą ścieżkę instalacji pakietu z Discord.
pnpm test:docker:session-runtime-context- Uruchamia deterministyczny test dymny zbudowanej aplikacji w Dockerze dla transkrypcji
osadzonego kontekstu środowiska uruchomieniowego. Sprawdza, czy ukryty kontekst środowiska
uruchomieniowego OpenClaw jest zachowywany jako niewyświetlana wiadomość niestandardowa,
zamiast przedostawać się do widocznej tury użytkownika, a następnie umieszcza uszkodzony
plik JSONL sesji dotkniętej problemem i sprawdza, czy
openclaw doctor --fixprzepisuje go do aktywnej gałęzi oraz tworzy kopię zapasową.
- Uruchamia deterministyczny test dymny zbudowanej aplikacji w Dockerze dla transkrypcji
osadzonego kontekstu środowiska uruchomieniowego. Sprawdza, czy ukryty kontekst środowiska
uruchomieniowego OpenClaw jest zachowywany jako niewyświetlana wiadomość niestandardowa,
zamiast przedostawać się do widocznej tury użytkownika, a następnie umieszcza uszkodzony
plik JSONL sesji dotkniętej problemem i sprawdza, czy
pnpm test:docker:npm-telegram-live- Instaluje kandydujący pakiet OpenClaw w Dockerze, wykonuje konfigurację początkową zainstalowanego pakietu, konfiguruje Telegram za pomocą zainstalowanego CLI, a następnie ponownie wykorzystuje rzeczywistą ścieżkę QA Telegram z tym zainstalowanym pakietem jako testowanym Gateway.
- Skrypt opakowujący montuje z kopii roboczej wyłącznie kod zestawu testowego
qa-lab; zainstalowany pakiet jest właścicielemdist,openclaw/plugin-sdkoraz środowiska uruchomieniowego dołączonych pluginów, dzięki czemu ścieżka nie miesza pluginów z bieżącej kopii roboczej z testowanym pakietem. - Domyślnie używa
OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC=openclaw@beta; ustawOPENCLAW_NPM_TELEGRAM_PACKAGE_TGZ=/path/to/openclaw-current.tgzlubOPENCLAW_CURRENT_PACKAGE_TGZ, aby zamiast instalacji z rejestru przetestować rozpoznane lokalne archiwum. - Domyślnie zapisuje wielokrotne pomiary RTT w
qa-evidence.jsonzOPENCLAW_NPM_TELEGRAM_RTT_SAMPLES=20. ZmieńOPENCLAW_NPM_TELEGRAM_RTT_SAMPLES,OPENCLAW_NPM_TELEGRAM_RTT_TIMEOUT_MSlubOPENCLAW_NPM_TELEGRAM_RTT_MAX_FAILURES, aby dostosować uruchomienie.OPENCLAW_NPM_TELEGRAM_RTT_CHECKSprzyjmuje rozdzielaną przecinkami listę identyfikatorów kontroli QA Telegram do próbkowania; jeśli nie jest ustawiona, domyślną kontrolą obsługującą RTT jesttelegram-mentioned-message-reply. - Używa tych samych danych uwierzytelniających Telegram ze zmiennych środowiskowych lub źródła
danych uwierzytelniających Convex co
pnpm openclaw qa telegram. Na potrzeby automatyzacji CI/wydania ustawOPENCLAW_NPM_TELEGRAM_CREDENTIAL_SOURCE=convexwraz zOPENCLAW_QA_CONVEX_SITE_URLi sekretem roli. JeśliOPENCLAW_QA_CONVEX_SITE_URLi sekret roli Convex są dostępne w CI, skrypt opakowujący Dockera automatycznie wybiera Convex. - Skrypt opakowujący sprawdza na hoście zmienne środowiskowe danych uwierzytelniających Telegram
lub Convex przed rozpoczęciem budowania i instalacji w Dockerze. Ustaw
OPENCLAW_NPM_TELEGRAM_SKIP_CREDENTIAL_PREFLIGHT=1tylko podczas świadomego debugowania konfiguracji poprzedzającej udostępnienie danych uwierzytelniających. OPENCLAW_NPM_TELEGRAM_CREDENTIAL_ROLE=ci|maintainerzastępuje współdzieloneOPENCLAW_QA_CREDENTIAL_ROLEwyłącznie dla tej ścieżki. Gdy wybrano dane uwierzytelniające Convex i nie ustawiono roli, skrypt opakowujący używaciw CI, amaintainerpoza CI.- GitHub Actions udostępnia tę ścieżkę jako ręczny przepływ pracy opiekuna
NPM Telegram Beta E2E. Nie jest ona uruchamiana podczas scalania. Przepływ pracy używa środowiskaqa-live-sharedoraz dzierżaw danych uwierzytelniających Convex CI.
- GitHub Actions udostępnia również
Package Acceptancedo dodatkowej weryfikacji produktu względem jednego kandydującego pakietu. Przyjmuje odwołanie Git, opublikowaną specyfikację npm, adres URL HTTPS archiwum wraz z SHA-256, zasady zaufanych adresów URL lub artefakt archiwum z innego uruchomienia (source=ref|npm|url|trusted-url|artifact), przesyła znormalizowany plikopenclaw-current.tgzjakopackage-under-test, a następnie uruchamia istniejący harmonogram kompleksowych testów Dockera z profilami ścieżeksmoke,package,product,fulllubcustom. Ustawtelegram_mode=mock-openaialbolive-frontier, aby uruchomić przepływ pracy QA Telegram względem tego samego artefaktupackage-under-test.- Weryfikacja produktu dla najnowszej wersji beta:
gh workflow run package-acceptance.yml --ref main \ -f source=npm \ -f package_spec=openclaw@beta \ -f suite_profile=product \ -f telegram_mode=mock-openai- Weryfikacja dokładnego adresu URL archiwum wymaga skrótu i korzysta z publicznych zasad bezpieczeństwa adresów URL:
gh workflow run package-acceptance.yml --ref main \ -f source=url \ -f package_url=https://registry.npmjs.org/openclaw/-/openclaw-VERSION.tgz \ -f package_sha256=<sha256> \ -f suite_profile=package- Firmowe/prywatne serwery lustrzane archiwów używają jawnych zasad zaufanego źródła:
gh workflow run package-acceptance.yml --ref main \ -f source=trusted-url \ -f trusted_source_id=enterprise-artifactory \ -f package_url=https://packages.example.internal:8443/artifactory/openclaw/openclaw-VERSION.tgz \ -f package_sha256=<sha256> \ -f suite_profile=packagesource=trusted-url odczytuje .github/package-trusted-sources.json z zaufanego odwołania przepływu pracy i nie akceptuje danych uwierzytelniających w adresie URL ani obejścia sieci prywatnej przekazanego jako parametr wejściowy przepływu pracy. Jeśli wskazane zasady deklarują uwierzytelnianie za pomocą tokenu Bearer, skonfiguruj stały sekret OPENCLAW_TRUSTED_PACKAGE_TOKEN.
- Weryfikacja artefaktu pobiera artefakt archiwum z innego uruchomienia Actions:
gh workflow run package-acceptance.yml --ref main \ -f source=artifact \ -f artifact_run_id=<run-id> \ -f artifact_name=<artifact-name> \ -f suite_profile=smoke-
pnpm test:docker:plugins- Pakuje i instaluje bieżącą kompilację OpenClaw w Dockerze, uruchamia Gateway ze skonfigurowanym OpenAI, a następnie włącza dołączone kanały/pluginy przez modyfikacje konfiguracji.
- Sprawdza, czy wykrywanie podczas konfiguracji nie instaluje nieskonfigurowanych pluginów dostępnych do pobrania, czy pierwsza skonfigurowana naprawa przez doctor jawnie instaluje każdy brakujący plugin dostępny do pobrania oraz czy drugie ponowne uruchomienie nie wykonuje ukrytej naprawy zależności.
- Instaluje również znaną starszą wersję bazową npm, włącza Telegram przed
uruchomieniem
openclaw update --tag <candidate>i sprawdza, czy doctor kandydata po aktualizacji usuwa pozostałości starszych zależności pluginów bez naprawy wykonywanej po instalacji przez zestaw testowy.
-
pnpm test:parallels:npm-update-
Uruchamia natywny test dymny aktualizacji instalacji pakietu na systemach gościa Parallels. Każda wybrana platforma najpierw instaluje żądany pakiet bazowy, następnie uruchamia zainstalowane polecenie
openclaw updatew tym samym systemie gościa i sprawdza zainstalowaną wersję, stan aktualizacji, gotowość Gateway oraz jedną lokalną turę agenta. -
Podczas pracy nad jednym systemem gościa użyj
--platform macos,--platform windowslub--platform linux. Użyj--json, aby uzyskać ścieżkę artefaktu podsumowania i stan poszczególnych ścieżek. -
Ścieżka OpenAI domyślnie używa
openai/gpt-5.6-lunado rzeczywistej weryfikacji tury agenta. Przekaż--model <provider/model>lub ustawOPENCLAW_PARALLELS_OPENAI_MODEL, aby zweryfikować inny model OpenAI. -
Obejmuj długie lokalne uruchomienia limitem czasu hosta, aby zawieszenia transportu Parallels nie zużyły pozostałego czasu przeznaczonego na testy:
bash timeout --foreground 150m pnpm test:parallels:npm-update -- --jsontimeout --foreground 90m pnpm test:parallels:npm-update -- --platform windows --json -
Skrypt zapisuje zagnieżdżone dzienniki ścieżek w
/tmp/openclaw-parallels-npm-update.*. Sprawdźwindows-update.log,macos-update.loglublinux-update.log, zanim uznasz, że zewnętrzny skrypt opakowujący się zawiesił. -
Aktualizacja systemu Windows może spędzić od 10 do 15 minut na działaniu doctor po aktualizacji i aktualizowaniu pakietu w zimnym systemie gościa; działanie nadal przebiega prawidłowo, jeśli zagnieżdżony dziennik debugowania npm jest aktualizowany.
-
Nie uruchamiaj tego zbiorczego skryptu opakowującego równolegle z osobnymi ścieżkami testów dymnych Parallels dla macOS, Windows lub Linux. Współdzielą one stan maszyny wirtualnej i mogą kolidować podczas przywracania migawki, udostępniania pakietu lub korzystania ze stanu Gateway systemu gościa.
-
Weryfikacja po aktualizacji uruchamia standardową powierzchnię dołączonych pluginów, ponieważ fasady funkcji, takich jak mowa, generowanie obrazów i rozumienie multimediów, są ładowane przez dołączone interfejsy API środowiska uruchomieniowego, nawet jeśli sama tura agenta sprawdza jedynie prostą odpowiedź tekstową.
-
-
pnpm openclaw qa aimock- Uruchamia tylko lokalny serwer dostawcy AIMock do bezpośrednich testów dymnych protokołu.
-
pnpm openclaw qa matrix- Uruchamia ścieżkę testów QA na żywo dla Matrix względem jednorazowego,
opartego na Dockerze serwera domowego Tuwunel. Dostępne tylko z kodu
źródłowego — instalacje pakietowe nie zawierają
qa-lab. - Pełny opis CLI, katalog profili/scenariuszy, zmienne środowiskowe i układ artefaktów: QA Matrix.
- Uruchamia ścieżkę testów QA na żywo dla Matrix względem jednorazowego,
opartego na Dockerze serwera domowego Tuwunel. Dostępne tylko z kodu
źródłowego — instalacje pakietowe nie zawierają
-
pnpm openclaw qa telegram- Uruchamia ścieżkę testów QA na żywo dla Telegram względem rzeczywistej grupy prywatnej, używając tokenów bota sterownika i testowanego systemu ze zmiennych środowiskowych.
- Wymaga
OPENCLAW_QA_TELEGRAM_GROUP_ID,OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKENorazOPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN. Identyfikator grupy musi być numerycznym identyfikatorem czatu Telegram. - Obsługuje
--credential-source convexdla współdzielonych danych uwierzytelniających z puli. Domyślnie używaj trybu zmiennych środowiskowych albo ustawOPENCLAW_QA_CREDENTIAL_SOURCE=convex, aby korzystać z dzierżaw puli. - Domyślne ustawienia obejmują wersję canary, bramkowanie wzmianek,
adresowanie poleceń,
/status, odpowiedzi między botami ze wzmianką oraz odpowiedzi podstawowych poleceń natywnych. Domyślne ustawieniamock-openaiobejmują również deterministyczne regresje łańcucha odpowiedzi i strumieniowania wiadomości końcowej Telegram. Użyj--list-scenarios, aby wyświetlić opcjonalne testy, takie jaksession_status. - Kończy działanie kodem różnym od zera, jeśli którykolwiek scenariusz
zakończy się niepowodzeniem. Użyj
--allow-failures, aby wygenerować artefakty bez kodu wyjścia wskazującego niepowodzenie. - Wymaga dwóch różnych botów w tej samej grupie prywatnej, przy czym bot testowanego systemu musi mieć nazwę użytkownika Telegram.
- Aby zapewnić stabilną obserwację komunikacji między botami, włącz
Bot-to-Bot Communication Mode w
@BotFatherdla obu botów i upewnij się, że bot sterownika może obserwować ruch botów w grupie. - Zapisuje raport QA Telegram, podsumowanie oraz
qa-evidence.jsonw.artifacts/qa-e2e/.... Scenariusze z odpowiedziami uwzględniają RTT od żądania wysłania przez sterownik do zaobserwowanej odpowiedzi testowanego systemu.
Mantis Telegram Live to otoka tej ścieżki służąca do dostarczania dowodów
dla PR. Uruchamia wskazaną wersję kandydującą z danymi uwierzytelniającymi
Telegram dzierżawionymi przez Convex, renderuje zredagowany pakiet
raportu i dowodów QA w przeglądarce pulpitu Crabbox, nagrywa dowód MP4,
generuje plik GIF przycięty pod kątem ruchu, przesyła pakiet artefaktów
i publikuje dowody bezpośrednio w PR za pomocą aplikacji Mantis GitHub App,
gdy ustawiono pr_number. Opiekunowie mogą uruchomić ją z poziomu Actions UI
za pomocą Mantis Scenario (scenario_id: telegram-live) lub bezpośrednio
z komentarza w pull requeście:
@openclaw-mantis telegram@openclaw-mantis telegram scenario=telegram-status-command@openclaw-mantis telegram scenarios=telegram-status-command,telegram-mentioned-message-replyMantis Telegram Desktop Proof to agentowa otoka natywnej aplikacji
Telegram Desktop wykonująca dowód wizualny PR przed zmianą i po niej.
Uruchom ją z poziomu Actions UI, podając dowolne instructions, za pomocą
Mantis Scenario (scenario_id: telegram-desktop-proof) albo z komentarza
w PR:
@openclaw-mantis telegram desktop proofAgent Mantis odczytuje PR, ustala, jakie zachowanie widoczne w Telegram
potwierdza zmianę, uruchamia ścieżkę dowodową Crabbox z Telegram Desktop
dla rzeczywistego użytkownika na wersji bazowej i kandydującej, iteruje,
aż natywne pliki GIF będą użyteczne, zapisuje sparowany manifest
motionPreview i publikuje tę samą dwukolumnową tabelę plików GIF za pomocą
aplikacji Mantis GitHub App, gdy ustawiono pr_number.
pnpm openclaw qa mantis telegram-desktop-builder- Dzierżawi lub ponownie wykorzystuje pulpit Linux Crabbox, instaluje natywną aplikację Telegram Desktop, konfiguruje OpenClaw przy użyciu dzierżawionego tokenu bota Telegram testowanego systemu, uruchamia Gateway oraz rejestruje zrzuty ekranu i dowody MP4 z widocznego pulpitu VNC.
- Domyślnie używa
--credential-source convex, dzięki czemu przepływy pracy potrzebują tylko sekretu brokera Convex. Użyj--credential-source envz tymi samymi zmiennymiOPENCLAW_QA_TELEGRAM_*co w przypadkupnpm openclaw qa telegram. - Telegram Desktop nadal wymaga zalogowania użytkownika lub profilu. Token
bota konfiguruje tylko OpenClaw. Użyj
--telegram-profile-archive-env <name>dla archiwum profilu.tgzzakodowanego w base64 albo użyj--keep-leasei zaloguj się ręcznie przez VNC jeden raz. - Zapisuje
mantis-telegram-desktop-builder-report.md,mantis-telegram-desktop-builder-summary.json,telegram-desktop-builder.pngoraztelegram-desktop-builder.mp4w katalogu wyjściowym.
Ścieżki transportu na żywo korzystają ze wspólnego standardowego kontraktu,
aby nowe transporty nie zaczęły się różnić; macierz pokrycia poszczególnych
ścieżek znajduje się w
przeglądzie QA — pokrycie transportu na żywo.
qa-channel jest szerokim zestawem testów syntetycznych i nie należy do tej
macierzy.
Współdzielone dane uwierzytelniające Telegram za pośrednictwem Convex (v1)
Gdy dla testów QA transportu na żywo włączono
--credential-source convex (lub OPENCLAW_QA_CREDENTIAL_SOURCE=convex),
laboratorium QA pozyskuje wyłączną dzierżawę ze wspieranej przez Convex puli,
wysyła Heartbeat dla tej dzierżawy podczas działania ścieżki i zwalnia ją
przy zamykaniu. Nazwa sekcji pochodzi sprzed dodania obsługi Discord, Slack
i WhatsApp; kontrakt dzierżawy jest wspólny dla wszystkich rodzajów.
Referencyjny szkielet projektu Convex: qa/convex-credential-broker/
Wymagane zmienne środowiskowe:
OPENCLAW_QA_CONVEX_SITE_URL(na przykładhttps://your-deployment.convex.site)- Jeden sekret dla wybranej roli:
OPENCLAW_QA_CONVEX_SECRET_MAINTAINERdlamaintainerOPENCLAW_QA_CONVEX_SECRET_CIdlaci
- Wybór roli danych uwierzytelniających:
- CLI:
--credential-role maintainer|ci - Wartość domyślna ze środowiska:
OPENCLAW_QA_CREDENTIAL_ROLE(domyślnieciw CI, w przeciwnym raziemaintainer)
- CLI:
Opcjonalne zmienne środowiskowe:
OPENCLAW_QA_CREDENTIAL_LEASE_TTL_MS(domyślnie1200000)OPENCLAW_QA_CREDENTIAL_HEARTBEAT_INTERVAL_MS(domyślnie30000)OPENCLAW_QA_CREDENTIAL_ACQUIRE_TIMEOUT_MS(domyślnie90000)OPENCLAW_QA_CREDENTIAL_HTTP_TIMEOUT_MS(domyślnie15000)OPENCLAW_QA_CONVEX_ENDPOINT_PREFIX(domyślnie/qa-credentials/v1)OPENCLAW_QA_CREDENTIAL_OWNER_ID(opcjonalny identyfikator śledzenia)OPENCLAW_QA_ALLOW_INSECURE_HTTP=1zezwala na adresy URL Convexhttp://korzystające z local loopback wyłącznie podczas lokalnego programowania.
W normalnym działaniu OPENCLAW_QA_CONVEX_SITE_URL powinien używać
https://.
Polecenia administracyjne opiekunów (dodawanie, usuwanie i wyświetlanie puli)
wymagają konkretnie OPENCLAW_QA_CONVEX_SECRET_MAINTAINER.
Pomocnicze polecenia CLI dla opiekunów:
pnpm openclaw qa credentials doctorpnpm openclaw qa credentials add --kind telegram --payload-file qa/telegram-credential.jsonpnpm openclaw qa credentials list --kind telegrampnpm openclaw qa credentials remove --credential-id <credential-id>Przed uruchomieniami na żywo użyj doctor, aby sprawdzić adres URL witryny
Convex, sekrety brokera, prefiks punktu końcowego, limit czasu HTTP oraz
dostępność funkcji administracyjnych i wyświetlania listy bez drukowania
wartości sekretów. Użyj --json, aby uzyskać dane wyjściowe odczytywalne
maszynowo w skryptach i narzędziach CI.
Domyślny kontrakt punktu końcowego
(OPENCLAW_QA_CONVEX_SITE_URL + /qa-credentials/v1).
Żądania uwierzytelniają się nagłówkiem
Authorization: Bearer <role secret>; poniższe treści żądań pomijają ten
nagłówek:
POST /acquire- Żądanie:
{ kind, ownerId, actorRole, leaseTtlMs, heartbeatIntervalMs } - Powodzenie:
{ status: "ok", credentialId, leaseToken, payload, leaseTtlMs?, heartbeatIntervalMs? } - Wyczerpanie puli/możliwość ponowienia:
{ status: "error", code: "POOL_EXHAUSTED" | "NO_CREDENTIAL_AVAILABLE", ... }
- Żądanie:
POST /payload-chunk- Żądanie:
{ kind, ownerId, actorRole, credentialId, leaseToken, index } - Powodzenie:
{ status: "ok", index, data }
- Żądanie:
POST /heartbeat- Żądanie:
{ kind, ownerId, actorRole, credentialId, leaseToken, leaseTtlMs } - Powodzenie:
{ status: "ok" }(lub pusta odpowiedź2xx)
- Żądanie:
POST /release- Żądanie:
{ kind, ownerId, actorRole, credentialId, leaseToken } - Powodzenie:
{ status: "ok" }(lub pusta odpowiedź2xx)
- Żądanie:
POST /admin/add(tylko sekret opiekuna)- Żądanie:
{ kind, actorId, payload, note?, status? } - Powodzenie:
{ status: "ok", credential }
- Żądanie:
POST /admin/remove(tylko sekret opiekuna)- Żądanie:
{ credentialId, actorId } - Powodzenie:
{ status: "ok", changed, credential } - Ochrona aktywnej dzierżawy:
{ status: "error", code: "LEASE_ACTIVE", ... }
- Żądanie:
POST /admin/list(tylko sekret opiekuna)- Żądanie:
{ kind?, status?, includePayload?, limit? } - Powodzenie:
{ status: "ok", credentials, count }
- Żądanie:
Struktura danych dla rodzaju Telegram:
{ groupId: string, driverToken: string, sutToken: string }groupIdmusi być ciągiem znaków zawierającym numeryczny identyfikator czatu Telegram.admin/addsprawdza tę strukturę dlakind: "telegram"i odrzuca nieprawidłowe dane.
Struktura danych dla rodzaju rzeczywistego użytkownika Telegram:
{ groupId: string, sutToken: string, testerUserId: string, testerUsername: string, telegramApiId: string, telegramApiHash: string, tdlibDatabaseEncryptionKey: string, tdlibArchiveBase64: string, tdlibArchiveSha256: string, desktopTdataArchiveBase64: string, desktopTdataArchiveSha256: string }groupId,testerUserIdoraztelegramApiIdmuszą być ciągami numerycznymi.tdlibArchiveSha256orazdesktopTdataArchiveSha256muszą być ciągami szesnastkowymi SHA-256.kind: "telegram-user"jest zarezerwowany dla przepływu pracy dowodu Mantis Telegram Desktop. Ogólne ścieżki laboratorium QA nie mogą go pozyskiwać.
Weryfikowane przez brokera dane dla wielu kanałów:
- Discord:
{ guildId: string, channelId: string, driverBotToken: string, sutBotToken: string, sutApplicationId: string, voiceChannelId?: string } - WhatsApp:
{ driverPhoneE164: string, sutPhoneE164: string, driverAuthArchiveBase64: string, sutAuthArchiveBase64: string, groupJid?: string }
Ścieżki Slack również mogą dzierżawić dane z puli, ale walidacja danych Slack
znajduje się obecnie w programie uruchamiającym QA Slack, a nie w brokerze.
Dla wpisów Slack używaj
{ channelId: string, driverBotToken: string, sutBotToken: string, sutAppToken: string }.
Dodawanie kanału do QA
Architektura i nazwy funkcji pomocniczych scenariuszy dla nowych adapterów
kanałów znajdują się w
przeglądzie QA — dodawanie kanału.
Minimalne wymagania: zaimplementuj program uruchamiający transport na
wspólnym punkcie integracji hosta qa-lab, dodaj adapterFactory dla
współdzielonych scenariuszy, zadeklaruj qaRunners w manifeście pluginu,
zamontuj jako openclaw qa <runner> i utwórz scenariusze w
qa/scenarios/.
Zestawy testów (co jest uruchamiane i gdzie)
Traktuj zestawy jako zapewniające „coraz większy realizm” (a zarazem coraz większą niestabilność i wyższy koszt).
Testy jednostkowe/integracyjne (domyślne)
- Polecenie:
pnpm test - Konfiguracja: uruchomienia bez określonego celu używają zestawu fragmentów
vitest.full-*.config.tsi mogą rozwijać fragmenty wieloprojektowe do konfiguracji poszczególnych projektów w celu równoległego planowania - Pliki: podstawowe/jednostkowe zestawy w
src/**/*.test.ts,packages/**/*.test.tsoraztest/**/*.test.ts; testy jednostkowe UI są uruchamiane w dedykowanym fragmencieunit-ui - Zakres:
- Czyste testy jednostkowe
- Testy integracyjne wewnątrz procesu (uwierzytelnianie Gateway, routing, narzędzia, analizowanie składni, konfiguracja)
- Deterministyczne testy regresji znanych błędów
- Oczekiwania:
- Uruchamiane w CI
- Nie wymagają rzeczywistych kluczy
- Powinny być szybkie i stabilne
- Testy mechanizmu rozwiązywania i programu ładującego powierzchnię
publiczną muszą potwierdzać szerokie działanie mechanizmu rezerwowego
api.jsiruntime-api.jsprzy użyciu wygenerowanych, minimalnych atrap pluginów, a nie rzeczywistych źródłowych interfejsów API dołączonych pluginów. Ładowanie rzeczywistych interfejsów API pluginów należy do zestawów kontraktowych/integracyjnych będących własnością danego pluginu.
Zasady dotyczące zależności natywnych:
- Domyślne instalacje testowe pomijają opcjonalne natywne kompilacje Opus
dla Discord. Głos Discord używa dołączonego
libopus-wasm, a@discordjs/opuspozostaje wyłączony wallowBuilds, dzięki czemu testy lokalne i ścieżki Testbox nie kompilują natywnego dodatku. - Porównuj wydajność natywnego Opus w repozytorium benchmarków
libopus-wasm, a nie w domyślnych cyklach instalacji/testów OpenClaw. Nie ustawiaj@discordjs/opusnatruew domyślnymallowBuilds; powoduje to kompilowanie kodu natywnego przez niezwiązane z nim cykle instalacji/testów.
Projekty, fragmenty i ścieżki o ograniczonym zakresie
- Nieukierunkowane uruchomienia
pnpm testkorzystają z trzynastu mniejszych konfiguracji fragmentów (core-unit-fast,core-unit-src,core-unit-security,core-unit-ui,core-unit-support,core-support-boundary,core-tooling,core-contracts,core-bundled,core-runtime,agentic,auto-reply,extensions) zamiast jednego ogromnego natywnego procesu projektu głównego. Zmniejsza to szczytowe użycie RSS na obciążonych maszynach i zapobiega odbieraniu zasobów niepowiązanym zestawom testów przez zadania auto-reply/Plugin. pnpm test --watchnadal korzysta z natywnego grafu projektówvitest.config.tsw katalogu głównym, ponieważ pętla obserwująca wiele fragmentów jest niepraktyczna.pnpm test,pnpm test:watchipnpm test:perf:importsnajpierw kierują jawnie wskazane pliki lub katalogi do pasujących zakresowo ścieżek, dzięki czemupnpm test extensions/discord/src/monitor/message-handler.preflight.test.tsnie ponosi pełnego kosztu uruchomienia projektu głównego.pnpm test:changeddomyślnie rozwija zmienione ścieżki git do niedrogich, dopasowanych zakresowo ścieżek: bezpośrednio zmienionych testów, sąsiednich plików*.test.ts, jawnych mapowań źródeł oraz lokalnych elementów zależnych w grafie importów. Zmiany konfiguracji, inicjalizacji lub pakietów nie uruchamiają szerokiego zestawu testów, chyba że jawnie użyjeszOPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed.pnpm check:changedto standardowa inteligentna lokalna bramka kontroli dla zmian o wąskim zakresie. Klasyfikuje różnice na rdzeń, testy rdzenia, plugins, testy plugins, aplikacje, dokumentację, metadane wydania, narzędzia aktywnego środowiska Docker i pozostałe narzędzia, a następnie uruchamia odpowiednie polecenia sprawdzania typów, lintowania i zabezpieczeń. Nie uruchamia testów Vitest; do potwierdzenia testami wywołajpnpm test:changedlub jawnepnpm test <target>. Zmiany wyłącznie wersji w metadanych wydania uruchamiają ukierunkowane kontrole wersji, konfiguracji i zależności głównych, wraz z zabezpieczeniem odrzucającym zmiany pakietu poza polem wersji najwyższego poziomu.- Zmiany w aktywnym środowisku testowym Docker ACP uruchamiają ukierunkowane kontrole: składni powłoki skryptów uwierzytelniania aktywnego środowiska Docker oraz próbne uruchomienie harmonogramu aktywnego środowiska Docker. Zmiany w
package.jsonsą uwzględniane tylko wtedy, gdy różnice ograniczają się doscripts["test:docker:live-*"]; zmiany zależności, eksportów, wersji i innych elementów powierzchni pakietu nadal korzystają z szerszych zabezpieczeń. - Lekkie pod względem importów testy jednostkowe agentów, poleceń, plugins, pomocniczych elementów auto-reply,
plugin-sdki podobnych obszarów zawierających czyste narzędzia są kierowane do ścieżkiunit-fast, która pomijatest/setup-openclaw-runtime.ts; pliki stanowe lub mocno zależne od środowiska uruchomieniowego pozostają w dotychczasowych ścieżkach. - Wybrane pliki źródłowe funkcji pomocniczych
plugin-sdkicommandsrównież mapują uruchomienia w trybie zmian na jawne sąsiednie testy w tych lekkich ścieżkach, dzięki czemu zmiany funkcji pomocniczych nie powodują ponownego uruchomienia całego ciężkiego zestawu dla danego katalogu. auto-replyma osobne grupy dla głównych funkcji pomocniczych rdzenia, testów integracyjnych najwyższego poziomureply.*oraz poddrzewasrc/auto-reply/reply/**. CI dodatkowo dzieli poddrzewo odpowiedzi na fragmenty obsługi agentów, dystrybucji oraz poleceń/routingu stanu, aby jedna grupa z dużą liczbą importów nie zajmowała całej końcowej części wykonania Node.- Standardowy CI dla PR/main celowo pomija zbiorcze testowanie dołączonych plugins oraz fragment
agentic-pluginsprzeznaczony wyłącznie dla wydań. Pełna walidacja wydania uruchamia oddzielny podrzędny przepływ pracyPlugin Prereleasedla tych zestawów mocno obciążonych plugins na kandydatach do wydania.
Pokrycie wbudowanego modułu uruchamiającego
- Gdy zmieniasz dane wejściowe wykrywania narzędzi wiadomości lub kontekst środowiska uruchomieniowego Compaction, zachowaj oba poziomy pokrycia.
- Dodaj ukierunkowane testy regresji funkcji pomocniczych dla granic czystego routingu i normalizacji.
- Utrzymuj sprawność zestawów integracyjnych wbudowanego modułu uruchamiającego:
src/agents/embedded-agent-runner/compact.hooks.test.ts,src/agents/embedded-agent-runner/run.overflow-compaction.test.tsorazsrc/agents/embedded-agent-runner/run.overflow-compaction.loop.test.ts. - Te zestawy sprawdzają, czy identyfikatory ograniczone do zakresu i zachowanie Compaction nadal przechodzą przez rzeczywiste ścieżki
run.ts/compact.ts; testy wyłącznie funkcji pomocniczych nie są wystarczającym zamiennikiem tych ścieżek integracyjnych.
Domyślna pula i izolacja Vitest
- Podstawowa konfiguracja Vitest domyślnie używa
threads. - Współdzielona konfiguracja Vitest ustawia
isolate: falsei korzysta z nieizolowanego modułu uruchamiającego w projektach głównych oraz konfiguracjach e2e i aktywnego środowiska. - Główna ścieżka interfejsu użytkownika zachowuje konfigurację i optymalizator
jsdom, ale również działa we współdzielonym nieizolowanym module uruchamiającym. - Każdy fragment
pnpm testdziedziczy te same ustawienia domyślnethreads+isolate: falseze współdzielonej konfiguracji Vitest. scripts/run-vitest.mjsdomyślnie dodaje--no-maglevdo podrzędnych procesów Node Vitest, aby ograniczyć nakład kompilacji V8 podczas dużych lokalnych uruchomień. UstawOPENCLAW_VITEST_ENABLE_MAGLEV=1, aby porównać działanie ze standardowym zachowaniem V8.scripts/run-vitest.mjskończy jawne uruchomienia Vitest poza trybem obserwacji po 5 minutach bez danych wyjściowych stdout lub stderr. UstawOPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=0, aby wyłączyć mechanizm nadzorujący na potrzeby celowo cichego badania.
Szybka lokalna iteracja
pnpm changed:lanespokazuje, które ścieżki architektoniczne wywołują zmiany.- Hak pre-commit wykonuje tylko formatowanie. Ponownie dodaje sformatowane pliki do obszaru przejściowego i nie uruchamia lintowania, sprawdzania typów ani testów.
- Jawnie uruchom
pnpm check:changedprzed przekazaniem pracy lub wysłaniem zmian, gdy potrzebujesz inteligentnej lokalnej bramki kontroli. pnpm test:changeddomyślnie kieruje zadania przez niedrogie ścieżki dopasowane zakresowo. UżywajOPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changedtylko wtedy, gdy agent uzna, że zmiana środowiska testowego, konfiguracji, pakietu lub kontraktu rzeczywiście wymaga szerszego pokrycia Vitest.pnpm test:maxipnpm test:changed:maxzachowują ten sam sposób routingu, ale z wyższym limitem procesów roboczych.- Automatyczne skalowanie lokalnych procesów roboczych jest celowo zachowawcze i ogranicza liczbę procesów, gdy średnie obciążenie hosta jest już wysokie, dzięki czemu wiele równoległych uruchomień Vitest domyślnie powoduje mniej zakłóceń.
- Podstawowa konfiguracja Vitest oznacza pliki projektów/konfiguracji jako
forceRerunTriggers, dzięki czemu ponowne uruchomienia w trybie zmian pozostają poprawne po zmianie połączeń testowych. - Konfiguracja pozostawia włączone
OPENCLAW_VITEST_FS_MODULE_CACHEna obsługiwanych hostach; ustawOPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/abs/path, aby wskazać jedną jawną lokalizację pamięci podręcznej na potrzeby bezpośredniego profilowania.
Debugowanie wydajności
pnpm test:perf:importswłącza raportowanie czasu importów Vitest oraz szczegółowy podział importów.pnpm test:perf:imports:changedogranicza ten sam widok profilowania do plików zmienionych odorigin/main.- Dane czasowe fragmentów są zapisywane w
.artifacts/vitest-shard-timings.json. Uruchomienia całej konfiguracji używają ścieżki konfiguracji jako klucza; fragmenty CI z wzorcem uwzględniania dołączają nazwę fragmentu, aby filtrowane fragmenty można było śledzić oddzielnie. - Gdy jeden intensywny test nadal spędza większość czasu na importach uruchomieniowych, umieść ciężkie zależności za wąską lokalną granicą
*.runtime.tsi bezpośrednio imituj tę granicę, zamiast głęboko importować funkcje pomocnicze środowiska uruchomieniowego tylko po to, by przekazać je przezvi.mock(...). pnpm test:perf:changed:bench -- --ref <git-ref>porównuje kierowanetest:changedz natywną ścieżką projektu głównego dla zatwierdzonych różnic oraz wyświetla czas rzeczywisty i maksymalne RSS w systemie macOS.pnpm test:perf:changed:bench -- --worktreemierzy wydajność bieżącego drzewa z niezapisanymi zmianami, kierując listę zmienionych plików przezscripts/test-projects.mjsi główną konfigurację Vitest.pnpm test:perf:profile:mainzapisuje profil CPU głównego wątku dla narzutu uruchamiania i transformacji Vitest/Vite.pnpm test:perf:profile:runnerzapisuje profile CPU i sterty modułu uruchamiającego dla zestawu jednostkowego z wyłączoną równoległością plików.
Stabilność (Gateway)
- Polecenie:
pnpm test:stability:gateway - Konfiguracja:
test/vitest/vitest.gateway.config.ts,test/vitest/vitest.logging.config.tsitest/vitest/vitest.infra.config.ts, każda wymuszona do jednego procesu roboczego - Zakres:
- Uruchamia rzeczywisty Gateway local loopback z domyślnie włączoną diagnostyką
- Generuje syntetyczną rotację wiadomości Gateway, pamięci i dużych ładunków przez ścieżkę zdarzeń diagnostycznych
- Wysyła zapytania do
diagnostics.stabilityprzez RPC WS Gateway - Obejmuje funkcje pomocnicze utrwalania pakietu diagnostyki stabilności
- Sprawdza, czy rejestrator zachowuje ograniczony rozmiar, syntetyczne próbki RSS pozostają poniżej budżetu obciążenia, a głębokości kolejek poszczególnych sesji wracają do zera
- Oczekiwania:
- Bezpieczne dla CI i niewymagające kluczy
- Wąska ścieżka do dalszego badania regresji stabilności, a nie zamiennik pełnego zestawu Gateway
E2E (zbiorczo dla repozytorium)
- Polecenie:
pnpm test:e2e - Zakres:
- Uruchamia ścieżkę testów E2E typu smoke dla Gateway
- Uruchamia ścieżkę testów E2E przeglądarki z imitacją Control UI
- Oczekiwania:
- Bezpieczne dla CI i niewymagające kluczy
- Wymaga zainstalowanego Playwright Chromium
E2E (test smoke Gateway)
- Polecenie:
pnpm test:e2e:gateway - Konfiguracja:
test/vitest/vitest.e2e.config.ts - Pliki:
src/**/*.e2e.test.ts,test/**/*.e2e.test.tsoraz testy E2E dołączonych plugins wextensions/ - Domyślne ustawienia środowiska uruchomieniowego:
- Korzysta z
threadsVitest zisolate: false, zgodnie z resztą repozytorium. - Korzysta z adaptacyjnej liczby procesów roboczych (CI: maksymalnie 2, lokalnie: domyślnie 1).
- Domyślnie działa w trybie cichym, aby ograniczyć narzut operacji wejścia/wyjścia konsoli.
- Korzysta z
- Przydatne ustawienia zastępujące:
OPENCLAW_E2E_WORKERS=<n>, aby wymusić liczbę procesów roboczych (maksymalnie 16).OPENCLAW_E2E_VERBOSE=1, aby ponownie włączyć szczegółowe dane wyjściowe konsoli.
- Zakres:
- Kompleksowe zachowanie wielu instancji Gateway
- Powierzchnie WebSocket/HTTP, parowanie Node i bardziej złożone operacje sieciowe
- Oczekiwania:
- Działa w CI (gdy jest włączone w potoku)
- Nie wymaga rzeczywistych kluczy
- Więcej elementów ruchomych niż w testach jednostkowych (może działać wolniej)
E2E (przeglądarka z imitacją Control UI)
- Polecenie:
pnpm test:ui:e2e - Konfiguracja:
test/vitest/vitest.ui-e2e.config.ts - Pliki:
ui/src/**/*.e2e.test.ts - Zakres:
- Uruchamia Control UI Vite
- Steruje rzeczywistą stroną Chromium za pomocą Playwright
- Zastępuje WebSocket Gateway deterministycznymi imitacjami w przeglądarce
- Oczekiwania:
- Działa w CI jako część
pnpm test:e2e - Nie wymaga rzeczywistego Gateway, agentów ani kluczy dostawców
- Zależność przeglądarki musi być dostępna (
pnpm --dir ui exec playwright install chromium)
- Działa w CI jako część
E2E: test smoke backendu OpenShell
- Polecenie:
pnpm test:e2e:openshell - Plik:
extensions/openshell/src/backend.e2e.test.ts - Zakres:
- Ponownie wykorzystuje aktywny lokalny Gateway OpenShell
- Tworzy piaskownicę z tymczasowego lokalnego pliku Dockerfile
- Testuje backend OpenShell systemu OpenClaw za pomocą rzeczywistych
sandbox ssh-configi wykonywania przez SSH - Weryfikuje kanoniczne zachowanie zdalnego systemu plików przez most systemu plików piaskownicy
- Oczekiwania:
- Tylko opcjonalnie; nie należy do domyślnego uruchomienia
pnpm test:e2e - Wymaga lokalnego CLI
openshelloraz działającego demona Docker - Wymaga aktywnego lokalnego Gateway OpenShell i jego źródła konfiguracji
- Korzysta z izolowanych
HOME/XDG_CONFIG_HOME, a następnie niszczy piaskownicę testową
- Tylko opcjonalnie; nie należy do domyślnego uruchomienia
- Przydatne ustawienia zastępujące:
OPENCLAW_E2E_OPENSHELL=1, aby włączyć test podczas ręcznego uruchamiania szerszego zestawu e2eOPENCLAW_E2E_OPENSHELL_COMMAND=/path/to/openshell, aby wskazać niestandardowy plik binarny CLI lub skrypt opakowującyOPENCLAW_E2E_OPENSHELL_CONFIG_HOME=/path/to/config, aby udostępnić zarejestrowaną konfigurację Gateway izolowanemu testowiOPENCLAW_E2E_OPENSHELL_HOST_IP=172.18.0.1, aby zastąpić adres IP Gateway Docker używany przez dane testowe zasad hosta
Aktywne testy (rzeczywiści dostawcy i rzeczywiste modele)
- Polecenie:
pnpm test:live - Konfiguracja:
test/vitest/vitest.live.config.ts - Pliki:
src/**/*.live.test.ts,test/**/*.live.test.tsoraz testy na żywo wbudowanych pluginów w kataloguextensions/ - Domyślnie: włączone przez
pnpm test:live(ustawiaOPENCLAW_LIVE_TEST=1) - Zakres:
- „Czy ten dostawca/model rzeczywiście działa dzisiaj z prawdziwymi danymi uwierzytelniającymi?”
- Wykrywanie zmian formatów dostawców, niuansów wywoływania narzędzi, problemów z uwierzytelnianiem oraz zachowania limitów szybkości
- Założenia:
- Z założenia brak stabilności w CI (rzeczywiste sieci, rzeczywiste zasady dostawców, limity, awarie)
- Generuje koszty / wykorzystuje limity szybkości
- Zaleca się uruchamianie zawężonych podzbiorów zamiast „wszystkiego”
- Uruchomienia na żywo korzystają z już wyeksportowanych kluczy API i przygotowanych profili uwierzytelniania.
- Domyślnie uruchomienia na żywo nadal izolują
HOMEoraz kopiują konfigurację i materiały uwierzytelniające do tymczasowego katalogu domowego testów, aby fixtury testów jednostkowych nie mogły zmodyfikować rzeczywistego katalogu~/.openclaw. - Ustaw
OPENCLAW_LIVE_USE_REAL_HOME=1tylko wtedy, gdy celowo chcesz, aby testy na żywo korzystały z rzeczywistego katalogu domowego. pnpm test:livedomyślnie działa w cichszym trybie: zachowuje komunikaty postępu[live] ..., a wycisza dzienniki uruchamiania Gateway i komunikaty Bonjour. UstawOPENCLAW_LIVE_TEST_QUIET=0, jeśli chcesz ponownie wyświetlać pełne dzienniki uruchamiania.- Rotacja kluczy API (zależna od dostawcy): ustaw
*_API_KEYSw formacie z przecinkami/średnikami albo*_API_KEY_1,*_API_KEY_2(na przykładOPENAI_API_KEYS,ANTHROPIC_API_KEYS,GEMINI_API_KEYS) lub nadpisanie dla uruchomienia na żywo przezOPENCLAW_LIVE_*_KEY; testy ponawiają próby po odpowiedziach o przekroczeniu limitu szybkości. - Komunikaty postępu/Heartbeat:
- Zestawy testów na żywo wysyłają wiersze postępu do stderr, dzięki czemu długie wywołania dostawców pozostają widocznie aktywne, nawet gdy przechwytywanie konsoli przez Vitest jest wyciszone.
test/vitest/vitest.live.config.tswyłącza przechwytywanie konsoli przez Vitest, dzięki czemu wiersze postępu dostawcy/Gateway są natychmiast wyświetlane podczas uruchomień na żywo.- Dostosuj częstotliwość Heartbeat bezpośrednich modeli za pomocą
OPENCLAW_LIVE_HEARTBEAT_MS. - Dostosuj częstotliwość Heartbeat Gateway/sond za pomocą
OPENCLAW_LIVE_GATEWAY_HEARTBEAT_MS.
Który zestaw testów należy uruchomić?
Skorzystaj z tej tabeli decyzyjnej:
- Edycja logiki/testów: uruchom
pnpm test(orazpnpm test:coverage, jeśli zakres zmian był duży) - Zmiany w komunikacji sieciowej Gateway / protokole WS / parowaniu: dodaj
pnpm test:e2e - Diagnozowanie problemu „mój bot nie działa” / błędów właściwych dla dostawcy / wywoływania narzędzi: uruchom zawężone
pnpm test:live
Testy na żywo (korzystające z sieci)
Informacje o macierzy modeli na żywo, testach dymnych zaplecza CLI, testach dymnych ACP, środowisku testowym serwera aplikacji Codex oraz wszystkich testach na żywo dostawców multimediów (Deepgram, BytePlus, ComfyUI, obrazy, muzyka, wideo, środowisko testowe multimediów), a także obsłudze danych uwierzytelniających podczas uruchomień na żywo:
- zobacz Testowanie zestawów na żywo. Dedykowana lista kontrolna weryfikacji aktualizacji i pluginów znajduje się w sekcji Testowanie aktualizacji i pluginów.
Programy uruchamiające Docker (opcjonalne kontrole „czy działa w systemie Linux”)
Te programy uruchamiające Docker dzielą się na dwie grupy:
- Programy uruchamiające modele na żywo:
test:docker:live-modelsitest:docker:live-gatewayuruchamiają w obrazie Docker repozytorium tylko odpowiadający im plik na żywo z kluczami profili (src/agents/models.profiles.live.test.tsisrc/gateway/gateway-models.profiles.live.test.ts), montując lokalny katalog konfiguracji, obszar roboczy i opcjonalny plik środowiskowy profilu. Odpowiadające im lokalne punkty wejścia totest:live:models-profilesitest:live:gateway-profiles. - Programy uruchamiające Docker na żywo zachowują własne praktyczne ograniczenia tam, gdzie są potrzebne:
test:docker:live-modelsdomyślnie używa wyselekcjonowanego, obsługiwanego zestawu zapewniającego wyraźne sygnały, atest:docker:live-gatewaydomyślnie ustawiaOPENCLAW_LIVE_GATEWAY_SMOKE=1,OPENCLAW_LIVE_GATEWAY_MAX_MODELS=8,OPENCLAW_LIVE_GATEWAY_STEP_TIMEOUT_MS=45000orazOPENCLAW_LIVE_GATEWAY_MODEL_TIMEOUT_MS=90000. UstawOPENCLAW_LIVE_MAX_MODELSlub zmienne środowiskowe Gateway, gdy celowo potrzebujesz mniejszego limitu albo szerszego skanowania. test:docker:alljednokrotnie buduje obraz Docker do testów na żywo za pomocątest:docker:live-build, jednokrotnie pakuje OpenClaw jako archiwum npm za pośrednictwemscripts/package-openclaw-for-docker.mjs, a następnie buduje lub ponownie wykorzystuje dwa obrazyscripts/e2e/Dockerfile. Podstawowy obraz zawiera tylko środowisko uruchomieniowe Node/Git dla ścieżek instalacji/aktualizacji/zależności pluginów; ścieżki te montują wcześniej zbudowane archiwum. Obraz funkcjonalny instaluje to samo archiwum w/appdla ścieżek funkcjonalności zbudowanej aplikacji. Definicje ścieżek Docker znajdują się wscripts/lib/docker-e2e-scenarios.mjs; logika planisty znajduje się wscripts/lib/docker-e2e-plan.mjs;scripts/test-docker-all.mjswykonuje wybrany plan. Agregator używa ważonego lokalnego harmonogramu:OPENCLAW_DOCKER_ALL_PARALLELISMokreśla liczbę miejsc na procesy, natomiast limity zasobów zapobiegają jednoczesnemu uruchamianiu wszystkich wymagających ścieżek na żywo, instalacji npm i ścieżek wielousługowych. Jeśli pojedyncza ścieżka jest cięższa niż aktywne limity, harmonogram nadal może ją uruchomić, gdy pula jest pusta, a następnie pozostawia ją jako jedyną uruchomioną do czasu ponownego udostępnienia zasobów. Wartości domyślne to 10 miejsc,OPENCLAW_DOCKER_ALL_LIVE_LIMIT=9,OPENCLAW_DOCKER_ALL_NPM_LIMIT=5iOPENCLAW_DOCKER_ALL_SERVICE_LIMIT=7; dostosujOPENCLAW_DOCKER_ALL_WEIGHT_LIMITlubOPENCLAW_DOCKER_ALL_DOCKER_LIMIT(oraz inne nadpisaniaOPENCLAW_DOCKER_ALL_<RESOURCE>_LIMIT) tylko wtedy, gdy host Docker ma większy zapas zasobów. Program uruchamiający domyślnie przeprowadza kontrolę wstępną Docker, usuwa nieaktualne kontenery E2E OpenClaw, wyświetla stan co 30 sekund, zapisuje czasy pomyślnie wykonanych ścieżek w.artifacts/docker-tests/lane-timings.jsoni wykorzystuje je do wcześniejszego uruchamiania dłuższych ścieżek podczas kolejnych uruchomień. UżyjOPENCLAW_DOCKER_ALL_DRY_RUN=1, aby wyświetlić ważony manifest ścieżek bez budowania ani uruchamiania Docker, lubnode scripts/test-docker-all.mjs --plan-json, aby wyświetlić plan CI dla wybranych ścieżek, wymagania dotyczące pakietów/obrazów i dane uwierzytelniające.Package Acceptanceto natywna dla GitHub kontrola pakietu odpowiadająca na pytanie „czy to instalowalne archiwum działa jako produkt?”. Wyznacza jeden pakiet kandydujący ze źródłasource=npm,source=ref,source=url,source=trusted-urllubsource=artifact, przesyła go jakopackage-under-test, a następnie uruchamia wielokrotnego użytku ścieżki E2E Docker dla dokładnie tego archiwum zamiast ponownie pakować wybrane odwołanie. Profile są uporządkowane według zakresu:smoke,package,productifull(orazcustomdla jawnej listy ścieżek). Zobacz Testowanie aktualizacji i pluginów, aby poznać kontrakt pakietów/aktualizacji/pluginów, macierz zachowania stanu po opublikowanej aktualizacji, ustawienia domyślne wydań i diagnostykę błędów.- Kontrole kompilacji i wydania uruchamiają
scripts/check-cli-bootstrap-imports.mjspo tsdown. Mechanizm ochronny przechodzi statyczny graf zbudowanych zależności oddist/entry.jsidist/cli/run-main.jsoraz zgłasza błąd, jeśli ten graf uruchamiania przed przekazaniem sterowania statycznie importuje jakikolwiek pakiet zewnętrzny (Commander, interfejs monitów, undici, rejestrowanie i podobne zależności obciążające uruchamianie są brane pod uwagę) przed przekazaniem polecenia; ogranicza także rozmiar pakietowanego fragmentu uruchomieniowego Gateway do 70 KB i odrzuca z tego fragmentu statyczne importy znanych rzadko używanych ścieżek Gateway (control-ui-assets,diagnostic-stability-bundle,onboard-helpers,process-respawn,restart-sentinel,server-close,server-reload-handlers).scripts/release-check.tsniezależnie przeprowadza testy dymne spakowanego CLI za pomocą--help,onboard --help,doctor --help,status --json --timeout 1,config schemaimodels list --provider openai. - Zgodność wsteczna
Package Acceptancejest ograniczona do wersji2026.4.25(włącznie z2026.4.25-beta.*). Do tej wersji granicznej środowisko testowe toleruje wyłącznie luki w metadanych opublikowanych pakietów: pominięte wpisy prywatnego spisu QA, brakgateway install --wrapper, brak plików poprawek w fixturze Git utworzonej z archiwum, brak utrwalonegoupdate.channel, starsze lokalizacje rekordów instalacji pluginów, brak utrwalania rekordów instalacji z marketplace oraz migrację metadanych konfiguracji podczasplugins update. W przypadku pakietów nowszych niż2026.4.25ścieżki te powodują bezwzględne błędy. - Programy uruchamiające testy dymne kontenerów:
test:docker:openwebui,test:docker:onboard,test:docker:npm-onboard-channel-agent,test:docker:release-user-journey,test:docker:release-typed-onboarding,test:docker:release-media-memory,test:docker:release-upgrade-user-journey,test:docker:release-plugin-marketplace,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:agent-bundle-mcp-tools,test:docker:cron-mcp-cleanup,test:docker:plugins,test:docker:plugin-update,test:docker:plugin-lifecycle-matrixitest:docker:config-reloaduruchamiają co najmniej jeden rzeczywisty kontener oraz weryfikują ścieżki integracji wyższego poziomu. - Ścieżki E2E Docker/Bash, które instalują spakowane archiwum OpenClaw za pośrednictwem
scripts/lib/openclaw-e2e-instance.sh, ograniczają czasnpm installza pomocąOPENCLAW_E2E_NPM_INSTALL_TIMEOUT(domyślnie600s; ustaw0, aby wyłączyć opakowanie na potrzeby debugowania).
Programy uruchamiające Docker dla modeli na żywo montują również tylko niezbędne katalogi domowe uwierzytelniania CLI (lub wszystkie obsługiwane, gdy uruchomienie nie jest zawężone), a następnie kopiują je do katalogu domowego kontenera przed uruchomieniem, dzięki czemu OAuth zewnętrznego CLI może odświeżać tokeny bez modyfikowania magazynu uwierzytelniania hosta:
-
Modele bezpośrednie:
pnpm test:docker:live-models(skrypt:scripts/test-live-models-docker.sh) -
Test dymny powiązania ACP:
pnpm test:docker:live-acp-bind(skrypt:scripts/test-live-acp-bind-docker.sh; domyślnie obejmuje Claude, Codex i Gemini, a ścisłe pokrycie Droid/OpenCode zapewniająpnpm test:docker:live-acp-bind:droidorazpnpm test:docker:live-acp-bind:opencode) -
Test dymny zaplecza CLI:
pnpm test:docker:live-cli-backend(skrypt:scripts/test-live-cli-backend-docker.sh) -
Test dymny środowiska testowego serwera aplikacji Codex:
pnpm test:docker:live-codex-harness(skrypt:scripts/test-live-codex-harness-docker.sh) -
Gateway + agent deweloperski:
pnpm test:docker:live-gateway(skrypt:scripts/test-live-gateway-models-docker.sh) -
Testy dymne obserwowalności:
pnpm qa:otel:smoke,pnpm qa:prometheus:smokeipnpm qa:observability:smokesą prywatnymi ścieżkami QA dla kopii roboczej kodu źródłowego. Celowo nie należą do ścieżek wydania pakietu Docker, ponieważ archiwum npm pomija QA Lab. -
Test dymny Open WebUI na żywo:
pnpm test:docker:openwebui(skrypt:scripts/e2e/openwebui-docker.sh) -
Kreator wdrażania (TTY, pełne tworzenie struktury):
pnpm test:docker:onboard(skrypt:scripts/e2e/onboard-docker.sh) -
Test dymny wdrażania/kanału/agenta z archiwum npm:
pnpm test:docker:npm-onboard-channel-agentinstaluje globalnie spakowane archiwum OpenClaw w Docker, domyślnie konfiguruje OpenAI za pośrednictwem wdrażania z odwołaniem do zmiennej środowiskowej oraz Telegram, uruchamia doctor, a następnie wykonuje jedną pozorowaną turę agenta OpenAI. Ponownie wykorzystaj wcześniej zbudowane archiwum za pomocąOPENCLAW_CURRENT_PACKAGE_TGZ=/path/to/openclaw-*.tgz, pomiń ponowną kompilację na hoście za pomocąOPENCLAW_NPM_ONBOARD_HOST_BUILD=0albo zmień kanał za pomocąOPENCLAW_NPM_ONBOARD_CHANNEL=discordlubOPENCLAW_NPM_ONBOARD_CHANNEL=slack. -
Test dymny ścieżki użytkownika wydania:
pnpm test:docker:release-user-journeyinstaluje globalnie spakowane archiwum tar OpenClaw w czystym katalogu domowym Dockera, uruchamia proces wdrożeniowy, konfiguruje atrapę dostawcy OpenAI, wykonuje turę agenta, instaluje i odinstalowuje zewnętrzne pluginy, konfiguruje ClickClack względem lokalnej fixtury, weryfikuje komunikację wychodzącą i przychodzącą, ponownie uruchamia Gateway oraz uruchamia diagnostykę. -
Test dymny wydania z typowanym procesem wdrożeniowym:
pnpm test:docker:release-typed-onboardinginstaluje spakowane archiwum tar, przeprowadzaopenclaw onboardprzez rzeczywisty TTY, konfiguruje OpenAI jako dostawcę odwołującego się do zmiennej środowiskowej, weryfikuje, że surowy klucz nie jest utrwalany, oraz wykonuje turę agenta z atrapą. -
Test dymny multimediów i pamięci wydania:
pnpm test:docker:release-media-memoryinstaluje spakowane archiwum tar, weryfikuje rozumienie obrazu z załącznika PNG, wynik generowania obrazu zgodnego z OpenAI, przywoływanie przez wyszukiwanie w pamięci oraz zachowanie możliwości przywoływania po ponownym uruchomieniu Gateway. -
Test dymny ścieżki użytkownika podczas uaktualnienia wydania:
pnpm test:docker:release-upgrade-user-journeydomyślnie instaluje najnowszą opublikowaną wersję bazową starszą od kandydującego archiwum tar, konfiguruje stan dostawcy, pluginu i ClickClack w opublikowanym pakiecie, uaktualnia go do kandydującego archiwum tar, a następnie ponownie wykonuje podstawową ścieżkę agenta, pluginu i kanału. Jeśli nie istnieje starsza opublikowana wersja bazowa, ponownie wykorzystuje wersję kandydującą. Wersję bazową można zastąpić za pomocąOPENCLAW_RELEASE_UPGRADE_BASELINE_SPEC=openclaw@<version>. -
Test dymny sklepu z pluginami wydania:
pnpm test:docker:release-plugin-marketplaceinstaluje plugin z lokalnej fixtury sklepu, aktualizuje zainstalowany plugin, odinstalowuje go i weryfikuje, że CLI pluginu znika wraz z usunięciem metadanych instalacji. -
Test dymny instalowania Skills:
pnpm test:docker:skill-installinstaluje globalnie spakowane archiwum tar OpenClaw w Dockerze, wyłącza w konfiguracji instalowanie przesłanych archiwów, ustala na podstawie wyszukiwania aktualny identyfikator działającego Skill w ClawHub, instaluje go za pomocąopenclaw skills installoraz weryfikuje zainstalowany Skill wraz z metadanymi pochodzenia i blokady.clawhub. -
Test dymny zmiany kanału aktualizacji:
pnpm test:docker:update-channel-switchinstaluje globalnie spakowane archiwum tar OpenClaw w Dockerze, przełącza się z pakietustablena gitowy kanałdev, weryfikuje utrwalony kanał i działanie pluginu po aktualizacji, a następnie przełącza się z powrotem na pakietstablei sprawdza stan aktualizacji. -
Test dymny zachowania stanu po uaktualnieniu:
pnpm test:docker:upgrade-survivorinstaluje spakowane archiwum tar OpenClaw na nieuporządkowanej fixturze starego użytkownika, zawierającej agentów, konfigurację kanału, listy dozwolonych pluginów, nieaktualny stan zależności pluginów oraz istniejące pliki przestrzeni roboczej i sesji. Uruchamia aktualizację pakietu oraz nieinteraktywną diagnostykę bez aktywnych kluczy dostawcy lub kanału, następnie uruchamia Gateway w local loopback i sprawdza zachowanie konfiguracji oraz stanu, a także limity czasu uruchamiania i pobierania stanu. -
Test dymny zachowania stanu po uaktualnieniu opublikowanej wersji:
pnpm test:docker:published-upgrade-survivordomyślnie instalujeopenclaw@latest, tworzy realistyczne pliki istniejącego użytkownika, konfiguruje tę wersję bazową przy użyciu wbudowanej sekwencji poleceń, sprawdza wynikową konfigurację, aktualizuje tę opublikowaną instalację do kandydującego archiwum tar, uruchamia nieinteraktywną diagnostykę, zapisuje.artifacts/upgrade-survivor/summary.json, a następnie uruchamia Gateway w local loopback i sprawdza skonfigurowane intencje, zachowanie stanu, uruchamianie,/healthz,/readyzoraz limity czasu stanu RPC. Jedną wersję bazową można zastąpić za pomocąOPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC; można polecić zbiorczemu harmonogramowi rozwinięcie dokładnych lokalnych wersji bazowych za pomocąOPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS, na przykładopenclaw@2026.5.2 openclaw@2026.4.23 openclaw@2026.4.15, oraz rozwinięcie fixtur odpowiadających zgłoszeniom za pomocąOPENCLAW_UPGRADE_SURVIVOR_SCENARIOS, na przykładreported-issues; zestaw zgłoszonych problemów obejmujeconfigured-plugin-installs, służące do automatycznej naprawy instalacji zewnętrznych pluginów OpenClaw. Akceptacja pakietu udostępnia je jakopublished_upgrade_survivor_baseline,published_upgrade_survivor_baselinesipublished_upgrade_survivor_scenarios, rozwiązuje metatokeny wersji bazowych, takie jaklast-stable-4luball-since-2026.4.23, a pełna walidacja wydania rozwija bramkę pakietową długotrwałego testu wydania dolast-stable-4 2026.4.23 2026.5.2 2026.4.15wraz zreported-issues. -
Test dymny kontekstu środowiska wykonawczego sesji:
pnpm test:docker:session-runtime-contextweryfikuje utrwalanie ukrytego kontekstu środowiska wykonawczego w transkrypcji oraz naprawę przez diagnostykę powiązanych, zduplikowanych gałęzi przepisywania promptów. -
Test dymny globalnej instalacji Bun:
bash scripts/e2e/bun-global-install-smoke.shpakuje bieżące drzewo, instaluje je za pomocąbun install -gw odizolowanym katalogu domowym i weryfikuje, żeopenclaw infer image providers --jsonzwraca wbudowanych dostawców obrazów zamiast się zawieszać. Wstępnie zbudowane archiwum tar można ponownie wykorzystać za pomocąOPENCLAW_BUN_GLOBAL_SMOKE_PACKAGE_TGZ=/path/to/openclaw-*.tgz, pominąć kompilację na hoście za pomocąOPENCLAW_BUN_GLOBAL_SMOKE_HOST_BUILD=0lub skopiowaćdist/ze zbudowanego obrazu Dockera za pomocąOPENCLAW_BUN_GLOBAL_SMOKE_DIST_IMAGE=openclaw-dockerfile-smoke:local. -
Test dymny instalatora w Dockerze:
bash scripts/test-install-sh-docker.shwspółdzieli jedną pamięć podręczną npm między kontenerami głównym, aktualizacyjnym i bezpośredniego npm. Test dymny aktualizacji domyślnie używa wersji npmlatestjako stabilnej wersji bazowej przed uaktualnieniem do kandydującego archiwum tar. Lokalnie można ją zastąpić za pomocąOPENCLAW_INSTALL_SMOKE_UPDATE_BASELINE=2026.4.22, a w GitHubie za pomocą parametruupdate_baseline_versionprzepływu pracy Install Smoke. Kontrole instalatora bez uprawnień użytkownika root zachowują odizolowaną pamięć podręczną npm, aby wpisy pamięci podręcznej należące do użytkownika root nie maskowały zachowania instalacji lokalnej dla użytkownika. UstawOPENCLAW_INSTALL_SMOKE_NPM_CACHE_DIR=/path/to/cache, aby ponownie używać pamięci podręcznej głównego, aktualizacyjnego i bezpośredniego npm podczas lokalnych powtórzeń. -
CI Install Smoke pomija zduplikowaną bezpośrednią globalną aktualizację npm za pomocą
OPENCLAW_INSTALL_SMOKE_SKIP_NPM_GLOBAL=1; uruchom skrypt lokalnie bez tej zmiennej środowiskowej, gdy potrzebne jest pokrycie bezpośredniegonpm install -g. -
Test dymny CLI usuwania przez agentów współdzielonej przestrzeni roboczej:
pnpm test:docker:agents-delete-shared-workspace(skrypt:scripts/e2e/agents-delete-shared-workspace-docker.sh) domyślnie buduje obraz z głównego pliku Dockerfile, tworzy dwóch agentów korzystających z jednej przestrzeni roboczej w odizolowanym katalogu domowym kontenera, uruchamiaagents delete --jsonoraz weryfikuje poprawny JSON i zachowanie pozostawionej przestrzeni roboczej. Obraz testu instalacji można ponownie wykorzystać za pomocąOPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_E2E_IMAGE=openclaw-dockerfile-smoke:local OPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_E2E_SKIP_BUILD=1. -
Sieć Gateway i cykl życia hosta:
pnpm test:docker:gateway-network(skrypt:scripts/e2e/gateway-network-docker.sh) zachowuje dwukontenerowy test dymny uwierzytelniania i kondycji WebSocket w sieci LAN, a następnie używa administracyjnego interfejsu HTTP w local loopback, aby potwierdzić blokadę przygotowania, dostęp z zachowaniem kontroli, odzyskiwanie po wznowieniu oraz przygotowane zatrzymanie i uruchomienie w tym samym kontenerze. Kontrola ponownego uruchomienia musi zakończyć się przed wygaśnięciem pierwotnej dzierżawy; weryfikuje, że stan zawieszenia jest lokalny dla procesu, podczas gdy utrwalona konfiguracja Gateway i tożsamość kontenera zostają zachowane, oraz generuje możliwy do odczytu maszynowego plik JSON z czasami faz. -
Test dymny migawki CDP przeglądarki:
pnpm test:docker:browser-cdp-snapshot(skrypt:scripts/e2e/browser-cdp-snapshot-docker.sh) buduje źródłowy obraz E2E wraz z warstwą Chromium, uruchamia Chromium z bezpośrednim CDP, wykonujebrowser doctor --deepi weryfikuje, że migawki ról CDP obejmują adresy URL odnośników, elementy klikalne wykryte za pomocą kursora, odwołania do ramek iframe oraz metadane ramek. -
Regresja minimalnego poziomu wnioskowania dla
web_searchw OpenAI Responses:pnpm test:docker:openai-web-search-minimal(skrypt:scripts/e2e/openai-web-search-minimal-docker.sh) uruchamia atrapę serwera OpenAI przez Gateway, weryfikuje, żeweb_searchpodnosireasoning.effortzminimaldolow, następnie wymusza odrzucenie schematu dostawcy i sprawdza, czy surowe szczegóły pojawiają się w dziennikach Gateway. -
Most kanałów MCP (Gateway ze wstępnie utworzonym stanem + most stdio + test dymny surowej ramki powiadomienia Claude):
pnpm test:docker:mcp-channels(skrypt:scripts/e2e/mcp-channels-docker.sh) -
Narzędzia MCP pakietu OpenClaw (rzeczywisty serwer MCP stdio + test dymny zezwalania i blokowania we wbudowanym profilu OpenClaw):
pnpm test:docker:agent-bundle-mcp-tools(skrypt:scripts/e2e/agent-bundle-mcp-tools-docker.sh) -
Czyszczenie MCP dla Cron i podagentów (rzeczywisty Gateway + zamykanie procesu potomnego MCP stdio po odizolowanych uruchomieniach Cron i jednorazowych uruchomieniach podagentów):
pnpm test:docker:cron-mcp-cleanup(skrypt:scripts/e2e/cron-mcp-cleanup-docker.sh) -
Pluginy (test dymny instalacji i aktualizacji dla ścieżki lokalnej,
file:, rejestru npm z wyniesionymi zależnościami, nieprawidłowych metadanych pakietu npm, ruchomych odwołań git, kompleksowej fixtury ClawHub, aktualizacji sklepu oraz włączania i inspekcji pakietu Claude):pnpm test:docker:plugins(skrypt:scripts/e2e/plugins-docker.sh) UstawOPENCLAW_PLUGINS_E2E_CLAWHUB=0, aby pominąć blok ClawHub, albo zastąp domyślną parę kompleksowego pakietu i środowiska wykonawczego za pomocąOPENCLAW_PLUGINS_E2E_CLAWHUB_SPECorazOPENCLAW_PLUGINS_E2E_CLAWHUB_ID. BezOPENCLAW_CLAWHUB_URL/CLAWHUB_URLtest używa hermetycznego lokalnego serwera fixtury ClawHub. -
Test dymny aktualizacji niezmienionego pluginu:
pnpm test:docker:plugin-update(skrypt:scripts/e2e/plugin-update-unchanged-docker.sh) -
Test dymny macierzy cyklu życia pluginu:
pnpm test:docker:plugin-lifecycle-matrixinstaluje spakowane archiwum tar OpenClaw w pustym kontenerze, instaluje plugin npm, przełącza jego stan włączenia i wyłączenia, uaktualnia go i obniża jego wersję za pośrednictwem lokalnego rejestru npm, usuwa zainstalowany kod, a następnie weryfikuje, że odinstalowanie nadal usuwa nieaktualny stan, jednocześnie zapisując metryki RSS i CPU dla każdej fazy cyklu życia. -
Test dymny metadanych ponownego wczytywania konfiguracji:
pnpm test:docker:config-reload(skrypt:scripts/e2e/config-reload-source-docker.sh) -
Pluginy:
pnpm test:docker:pluginsobejmuje testy dymne instalacji i aktualizacji dla ścieżki lokalnej,file:, rejestru npm z wyniesionymi zależnościami, ruchomych odwołań git, fixtur ClawHub, aktualizacji sklepu oraz włączania i inspekcji pakietu Claude.pnpm test:docker:plugin-updateobejmuje zachowanie aktualizacji bez zmian dla zainstalowanych pluginów.pnpm test:docker:plugin-lifecycle-matrixobejmuje monitorowane pod względem zasobów instalowanie, włączanie, wyłączanie, uaktualnianie, obniżanie wersji i odinstalowywanie pluginu npm z brakującym kodem.
Aby ręcznie wstępnie zbudować i ponownie wykorzystywać współdzielony obraz funkcjonalny:
OPENCLAW_DOCKER_E2E_IMAGE=openclaw-docker-e2e-functional:local pnpm test:docker:e2e-buildOPENCLAW_DOCKER_E2E_IMAGE=openclaw-docker-e2e-functional:local OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:mcp-channelsUstawienia zastępujące obraz dla poszczególnych zestawów, takie jak OPENCLAW_GATEWAY_NETWORK_E2E_IMAGE, nadal mają pierwszeństwo, gdy są ustawione. Gdy OPENCLAW_SKIP_DOCKER_BUILD=1 wskazuje zdalny obraz współdzielony, skrypty pobierają go, jeśli nie jest jeszcze dostępny lokalnie. Testy QR i instalatora w Dockerze zachowują własne pliki Dockerfile, ponieważ weryfikują zachowanie pakietu i instalacji, a nie środowisko wykonawcze współdzielonej zbudowanej aplikacji.
Mechanizmy uruchamiające modele aktywne w Dockerze również montują bieżące drzewo robocze w trybie tylko do odczytu
i przygotowują je w tymczasowym katalogu roboczym wewnątrz kontenera. Dzięki temu
obraz środowiska wykonawczego pozostaje niewielki, a Vitest nadal działa dokładnie na lokalnych
źródłach i konfiguracji. Etap przygotowania pomija duże pamięci podręczne używane wyłącznie lokalnie oraz wyniki
kompilacji aplikacji, takie jak .pnpm-store, .worktrees, __openclaw_vitest__, a także
lokalne dla aplikacji katalogi wynikowe .build lub Gradle, dzięki czemu aktywne uruchomienia w Dockerze nie
poświęcają wielu minut na kopiowanie artefaktów specyficznych dla danego komputera. Ustawiają również
OPENCLAW_SKIP_CHANNELS=1, aby aktywne sondy Gateway nie uruchamiały rzeczywistych
procesów roboczych kanałów Telegram, Discord itd. wewnątrz kontenera.
test:docker:live-models nadal uruchamia pnpm test:live, dlatego przekaż również
OPENCLAW_LIVE_GATEWAY_*, gdy chcesz zawęzić lub wykluczyć aktywne testy Gateway
z tej ścieżki Dockera.
test:docker:openwebui to test zgodności wyższego poziomu: uruchamia kontener
Gateway OpenClaw z włączonymi punktami końcowymi HTTP zgodnymi z OpenAI,
uruchamia przypięty kontener Open WebUI połączony z tym Gateway, loguje się
przez Open WebUI, sprawdza, czy /api/models udostępnia openclaw/default,
a następnie wysyła rzeczywiste żądanie czatu przez serwer proxy
/api/chat/completions Open WebUI. Ustaw OPENWEBUI_SMOKE_MODE=models dla
kontroli CI ścieżki wydania, które powinny zakończyć się po zalogowaniu do
Open WebUI i wykryciu modelu, bez oczekiwania na odpowiedź aktywnego modelu.
Pierwsze uruchomienie może być zauważalnie wolniejsze, ponieważ Docker może
wymagać pobrania obrazu Open WebUI, a Open WebUI może wymagać ukończenia
własnej konfiguracji po zimnym starcie. Ta ścieżka wymaga użytecznego klucza
aktywnego modelu, udostępnionego przez środowisko procesu, przygotowane profile
uwierzytelniania lub jawny plik OPENCLAW_PROFILE_FILE. Pomyślne uruchomienia
wyświetlają niewielki ładunek JSON, taki jak
{ "ok": true, "model": "openclaw/default", ... }.
test:docker:mcp-channels jest celowo deterministyczny i nie wymaga
rzeczywistego konta Telegram, Discord ani iMessage. Uruchamia kontener Gateway
ze wstępnie przygotowanymi danymi, a następnie drugi kontener, który uruchamia
openclaw mcp serve, po czym sprawdza kierowane wykrywanie konwersacji, odczyt
transkrypcji, metadane załączników, zachowanie kolejki zdarzeń na żywo,
kierowanie wysyłania wychodzącego oraz powiadomienia w stylu Claude dotyczące
kanałów i uprawnień przez rzeczywisty most MCP stdio. Kontrola powiadomień
bezpośrednio analizuje surowe ramki MCP stdio, dzięki czemu test sprawdza to,
co most faktycznie emituje, a nie tylko to, co akurat udostępnia określony
zestaw SDK klienta.
test:docker:agent-bundle-mcp-tools jest deterministyczny i nie wymaga
klucza aktywnego modelu. Buduje obraz Docker repozytorium, uruchamia wewnątrz
kontenera rzeczywisty serwer sondujący MCP stdio, materializuje ten serwer
przez osadzone środowisko uruchomieniowe MCP pakietu OpenClaw, wykonuje
narzędzie, a następnie sprawdza, czy coding i messaging zachowują narzędzia
bundle-mcp, natomiast minimal i tools.deny: ["bundle-mcp"] je filtrują.
test:docker:cron-mcp-cleanup jest deterministyczny i nie wymaga klucza
aktywnego modelu. Uruchamia Gateway ze wstępnie przygotowanymi danymi oraz
rzeczywistym serwerem sondującym MCP stdio, wykonuje izolowaną turę cron i
jednorazową turę potomną sessions_spawn, a następnie sprawdza, czy proces
potomny MCP kończy działanie po każdym uruchomieniu.
Ręczny test wątku ACP z użyciem języka naturalnego (poza CI):
bun scripts/dev/discord-acp-plain-language-smoke.ts --channel <discord-channel-id> ...- Zachowaj ten skrypt na potrzeby procedur regresyjnych i debugowania. Może być ponownie potrzebny do weryfikacji kierowania wątków ACP, dlatego nie należy go usuwać.
Przydatne zmienne środowiskowe:
OPENCLAW_CONFIG_DIR=...(domyślnie:~/.openclaw) montowany w/home/node/.openclawOPENCLAW_WORKSPACE_DIR=...(domyślnie:~/.openclaw/workspace) montowany w/home/node/.openclaw/workspaceOPENCLAW_PROFILE_FILE=...montowany i wczytywany przed uruchomieniem testówOPENCLAW_DOCKER_PROFILE_ENV_ONLY=1, aby sprawdzać wyłącznie zmienne środowiskowe wczytane zOPENCLAW_PROFILE_FILE, z użyciem tymczasowych katalogów konfiguracji i obszaru roboczego oraz bez zewnętrznych montowań uwierzytelniania CLIOPENCLAW_DOCKER_CLI_TOOLS_DIR=...(domyślnie:~/.cache/openclaw/docker-cli-tools, chyba że uruchomienie korzysta już z katalogu montowania zarządzanego lub CI) montowany w/home/node/.npm-globalna potrzeby buforowanych instalacji CLI wewnątrz Docker- Zewnętrzne katalogi i pliki uwierzytelniania CLI w
$HOMEsą montowane tylko do odczytu w/host-auth..., a następnie kopiowane do/home/node/...przed rozpoczęciem testów- Domyślne katalogi (używane, gdy uruchomienie nie jest ograniczone do określonych dostawców):
.factory,.gemini,.minimax - Domyślne pliki:
~/.codex/auth.json,~/.codex/config.toml,.claude.json,~/.claude/.credentials.json,~/.claude/settings.json,~/.claude/settings.local.json - Uruchomienia ograniczone do dostawców montują tylko wymagane katalogi i pliki wywnioskowane z
OPENCLAW_LIVE_PROVIDERS/OPENCLAW_LIVE_GATEWAY_PROVIDERS - Można to ręcznie zastąpić przez
OPENCLAW_DOCKER_AUTH_DIRS=all,OPENCLAW_DOCKER_AUTH_DIRS=nonelub listę rozdzielaną przecinkami, taką jakOPENCLAW_DOCKER_AUTH_DIRS=.claude,.codex
- Domyślne katalogi (używane, gdy uruchomienie nie jest ograniczone do określonych dostawców):
OPENCLAW_LIVE_GATEWAY_MODELS=.../OPENCLAW_LIVE_MODELS=..., aby zawęzić uruchomienieOPENCLAW_LIVE_GATEWAY_PROVIDERS=.../OPENCLAW_LIVE_PROVIDERS=..., aby filtrować dostawców wewnątrz konteneraOPENCLAW_SKIP_DOCKER_BUILD=1, aby ponownie wykorzystać istniejący obrazopenclaw:local-livew kolejnych uruchomieniach, które nie wymagają ponownego budowaniaOPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1, aby upewnić się, że dane uwierzytelniające pochodzą z magazynu profili, a nie ze środowiskaOPENCLAW_OPENWEBUI_MODEL=..., aby wybrać model udostępniany przez Gateway na potrzeby testu Open WebUIOPENCLAW_OPENWEBUI_PROMPT=..., aby zastąpić monit kontroli wartości jednorazowej używany przez test Open WebUIOPENWEBUI_IMAGE=..., aby zastąpić przypięty tag obrazu Open WebUI
Kontrola poprawności dokumentacji
Po edycji dokumentacji uruchom kontrole dokumentacji: pnpm check:docs.
Gdy potrzebne jest również sprawdzenie nagłówków wewnątrz stron, uruchom pełną walidację kotwic Mintlify: pnpm docs:check-links:anchors.
Regresje offline (bezpieczne dla CI)
Są to regresje „rzeczywistego potoku” bez rzeczywistych dostawców:
- Wywoływanie narzędzi przez Gateway (atrapa OpenAI, rzeczywisty Gateway i pętla agenta):
src/gateway/gateway.test.ts(przypadek: "runs a mock OpenAI tool call end-to-end via gateway agent loop") - Kreator Gateway (
wizard.start/wizard.nextprzez WS, zapisuje konfigurację i wymusza uwierzytelnianie):src/gateway/gateway.test.ts(przypadek: "runs wizard over ws and writes auth token config")
Testy oceniające niezawodność agenta (Skills)
Mamy już kilka testów bezpiecznych dla CI, które działają jak „testy oceniające niezawodność agenta”:
- Pozorowane wywoływanie narzędzi przez rzeczywisty Gateway i pętlę agenta (
src/gateway/gateway.test.ts). - Kompleksowe przepływy kreatora, które sprawdzają powiązanie sesji i skutki konfiguracji (
src/gateway/gateway.test.ts).
Czego nadal brakuje w przypadku Skills (zobacz Skills):
- Podejmowanie decyzji: czy agent wybiera właściwą umiejętność, gdy umiejętności są wymienione w monicie, lub unika nieistotnych?
- Zgodność: czy agent przed użyciem odczytuje
SKILL.mdi wykonuje wymagane kroki oraz przekazuje wymagane argumenty? - Kontrakty przepływów pracy: scenariusze wieloturowe, które sprawdzają kolejność narzędzi, przenoszenie historii sesji i granice piaskownicy.
Przyszłe testy oceniające powinny być przede wszystkim deterministyczne:
- Program uruchamiający scenariusze, który używa pozorowanych dostawców do sprawdzania wywołań narzędzi i ich kolejności, odczytów plików umiejętności oraz powiązania sesji.
- Niewielki zestaw scenariuszy dotyczących umiejętności: użycie lub pominięcie, blokady i wstrzykiwanie monitów.
- Opcjonalne testy oceniające na żywo (włączane jawnie i kontrolowane zmiennymi środowiskowymi) dopiero po przygotowaniu zestawu bezpiecznego dla CI.
Testy kontraktowe (struktura Pluginów i kanałów)
Testy kontraktowe sprawdzają, czy każdy zarejestrowany Plugin i kanał jest zgodny
ze swoim kontraktem interfejsu. Iterują po wszystkich wykrytych Pluginach i
uruchamiają zestaw asercji dotyczących struktury oraz zachowania. Domyślna
ścieżka testów jednostkowych pnpm test celowo pomija te współdzielone pliki
granic i testów integracyjnych; po zmianie współdzielonych powierzchni kanałów
lub dostawców uruchom jawnie polecenia testów kontraktowych.
Polecenia
- Wszystkie kontrakty:
pnpm test:contracts - Tylko kontrakty kanałów:
pnpm test:contracts:channels - Tylko kontrakty dostawców:
pnpm test:contracts:plugins
Kontrakty kanałów
Znajdują się w src/channels/plugins/contracts/*.contract.test.ts. Obecne
kategorie najwyższego poziomu:
- katalog kanałów — metadane wpisów katalogu kanałów wbudowanych i pochodzących z rejestru
- Plugin (oparty na rejestrze, podzielony na fragmenty) — podstawowa struktura rejestracji Pluginu
- tylko powierzchnie (oparte na rejestrze, podzielone na fragmenty) — kontrole struktury poszczególnych powierzchni dla
actions,setup,status,outbound,messaging,threading,directoryigateway - powiązanie sesji (oparte na rejestrze) — zachowanie powiązania sesji
- ładunek wychodzący — struktura i normalizacja ładunku wiadomości
- zasady grupy (rozwiązanie rezerwowe) — wymuszanie domyślnych zasad grupy dla każdego kanału
- wątki (oparte na rejestrze, podzielone na fragmenty) — obsługa identyfikatorów wątków
- katalog (oparty na rejestrze, podzielony na fragmenty) — API katalogu i listy użytkowników
- rejestr i rdzeń Pluginów.* — rejestr Pluginów kanałów, moduł ładujący i wewnętrzne mechanizmy autoryzacji zapisu konfiguracji
Pomocnicze mechanizmy przechwytywania wysyłania przychodzącego i ładunku
wychodzącego używane przez te zestawy są udostępniane wewnętrznie przez
src/plugin-sdk/channel-contract-testing.ts (wyłączony z npm, nie jest
publiczną podścieżką SDK); w tym katalogu nie ma samodzielnego pliku
inbound.contract.test.ts.
Kontrakty dostawców
Znajdują się w src/plugins/contracts/*.contract.test.ts. Obecne kategorie
obejmują:
- struktura — struktura manifestu Pluginu, API i eksportów środowiska uruchomieniowego
- rejestracja Pluginu (+ równoległa) — przypadki rejestracji manifestu
- manifest pakietu — wymagania dotyczące manifestu pakietu
- moduł ładujący — zachowanie konfiguracji i zwalniania zasobów modułu ładującego Pluginy
- rejestr — zawartość i wyszukiwanie w rejestrze kontraktów Pluginów
- dostawcy — współdzielone zachowanie dostawców wśród dostawców wbudowanych oraz dostawców wyszukiwania internetowego
- wybór uwierzytelniania — metadane wyboru uwierzytelniania i zachowanie konfiguracji
- wycofanie katalogu dostawców — metadane wycofanych elementów katalogu dostawców
- rozstrzyganie wyboru kreatora, selektor modelu kreatora, opcje konfiguracji kreatora — kontrakty kreatora konfiguracji dostawców
- dostawca osadzania, dostawca osadzania pamięci, dostawca pobierania z internetu, synteza mowy — kontrakty dostawców właściwe dla poszczególnych możliwości
- akcje sesji, załączniki sesji, projekcja wpisu sesji — kontrakty stanu sesji będące własnością Pluginu
- zaplanowane tury — metadane zaplanowanych tur Pluginu i zakresy znaczników czasu
- punkty zaczepienia hosta, cykl życia kontekstu uruchomienia, skutki uboczne importu środowiska uruchomieniowego, granice środowiska uruchomieniowego — kontrakty cyklu życia hosta i środowiska uruchomieniowego Pluginu oraz granic importu
- zależności środowiska uruchomieniowego rozszerzeń — rozmieszczenie zależności środowiska uruchomieniowego rozszerzeń
Kiedy uruchamiać
- Po zmianie eksportów lub podścieżek
plugin-sdk - Po dodaniu lub zmodyfikowaniu Pluginu kanału albo dostawcy
- Po refaktoryzacji rejestracji lub wykrywania Pluginów
Testy kontraktowe działają w CI i nie wymagają rzeczywistych kluczy API.
Dodawanie regresji (wskazówki)
Gdy naprawiasz problem z dostawcą lub modelem wykryty podczas działania na żywo:
- Jeśli to możliwe, dodaj regresję bezpieczną dla CI: pozorowanego dostawcę, atrapę dostawcy lub przechwycenie dokładnego przekształcenia struktury żądania
- Jeśli problem z natury występuje tylko na żywo, na przykład w przypadku limitów szybkości lub zasad uwierzytelniania, test na żywo powinien mieć wąski zakres i być włączany jawnie za pomocą zmiennych środowiskowych
- Preferuj testowanie najmniejszej warstwy, która wykrywa błąd:
- błąd konwersji lub ponownego odtwarzania żądania dostawcy -> bezpośredni test modeli
- błąd sesji, historii lub potoku narzędzi Gateway -> test Gateway na żywo albo bezpieczny dla CI test Gateway z atrapą
- Zabezpieczenie przechodzenia po SecretRef:
src/secrets/exec-secret-ref-id-parity.test.tswyprowadza jeden przykładowy cel dla każdej klasy SecretRef z metadanych rejestru (listSecretTargetRegistryEntries()), a następnie sprawdza, czy identyfikatory wykonania z segmentami przechodzenia są odrzucane.- Jeśli dodasz nową rodzinę celów SecretRef z
includeInPlanwsrc/secrets/target-registry-data.ts, zaktualizujclassifyTargetClassw tym teście. Test celowo kończy się niepowodzeniem w przypadku niesklasyfikowanych identyfikatorów celów, aby nowe klasy nie mogły zostać po cichu pominięte.