Testing
Testowanie: zestawy testów na żywo
Aby szybko zacząć, sprawdzić uruchomienia QA, zestawy testów jednostkowych/integracyjnych oraz przepływy Docker, zobacz Testowanie. Ta strona obejmuje zestawy testów na żywo (dotykające sieci): macierz modeli, backendy CLI, ACP oraz testy na żywo dostawców multimediów, a także obsługę poświadczeń.
Na żywo: lokalne polecenia smoke dla profilu
Wczytaj ~/.profile przed doraźnymi testami na żywo, aby klucze dostawców i ścieżki
lokalnych narzędzi odpowiadały Twojej powłoce:
source ~/.profile
Bezpieczny smoke multimediów:
pnpm openclaw infer tts convert --local --json \
--text "OpenClaw live smoke." \
--output /tmp/openclaw-live-smoke.mp3
Bezpieczny smoke gotowości połączeń głosowych:
pnpm openclaw voicecall setup --json
pnpm openclaw voicecall smoke --to "+15555550123"
voicecall smoke jest suchym przebiegiem, chyba że podano też --yes. Używaj --yes tylko
wtedy, gdy celowo chcesz wykonać prawdziwe połączenie powiadamiające. W przypadku Twilio, Telnyx i
Plivo pomyślny test gotowości wymaga publicznego adresu URL webhooka; lokalne
fallbacki typu loopback/prywatne są celowo odrzucane.
Na żywo: przegląd możliwości Android Node
- Test:
src/gateway/android-node.capabilities.live.test.ts - Skrypt:
pnpm android:test:integration - Cel: wywołać każde polecenie obecnie reklamowane przez połączony Android Node i potwierdzić zachowanie kontraktu poleceń.
- Zakres:
- Wstępnie przygotowana/ręczna konfiguracja (zestaw nie instaluje, nie uruchamia ani nie paruje aplikacji).
- Walidacja Gateway
node.invokepolecenie po poleceniu dla wybranego Android Node.
- Wymagana konfiguracja wstępna:
- Aplikacja Android jest już połączona i sparowana z Gateway.
- Aplikacja pozostaje na pierwszym planie.
- Przyznano uprawnienia/zgodę na przechwytywanie dla możliwości, które mają przejść.
- Opcjonalne nadpisania celu:
OPENCLAW_ANDROID_NODE_IDlubOPENCLAW_ANDROID_NODE_NAME.OPENCLAW_ANDROID_GATEWAY_URL/OPENCLAW_ANDROID_GATEWAY_TOKEN/OPENCLAW_ANDROID_GATEWAY_PASSWORD.
- Pełne szczegóły konfiguracji Android: Aplikacja Android
Na żywo: smoke modeli (klucze profilu)
Testy na żywo są podzielone na dwie warstwy, aby można było izolować awarie:
- „Model bezpośredni” mówi nam, czy dostawca/model w ogóle potrafi odpowiedzieć z danym kluczem.
- „Smoke Gateway” mówi nam, czy pełny potok gateway+agent działa dla tego modelu (sesje, historia, narzędzia, polityka piaskownicy itd.).
Warstwa 1: bezpośrednie uzupełnianie modelu (bez Gateway)
- Test:
src/agents/models.profiles.live.test.ts - Cel:
- Wyliczyć wykryte modele
- Użyć
getApiKeyForModel, aby wybrać modele, dla których masz poświadczenia - Uruchomić małe uzupełnienie dla każdego modelu (oraz ukierunkowane regresje tam, gdzie potrzeba)
- Jak włączyć:
pnpm test:live(lubOPENCLAW_LIVE_TEST=1, jeśli wywołujesz Vitest bezpośrednio)
- Ustaw
OPENCLAW_LIVE_MODELS=modern(luball, alias dla modern), aby faktycznie uruchomić ten zestaw; w przeciwnym razie jest pomijany, żebypnpm test:livepozostawał skupiony na smoke Gateway - Jak wybrać modele:
OPENCLAW_LIVE_MODELS=modern, aby uruchomić nowoczesną listę dozwolonych modeli (Opus/Sonnet 4.6+, GPT-5.2 + Codex, Gemini 3, DeepSeek V4, GLM 4.7, MiniMax M2.7, Grok 4.3)OPENCLAW_LIVE_MODELS=alljest aliasem nowoczesnej listy dozwolonych modeli- albo
OPENCLAW_LIVE_MODELS="openai/gpt-5.5,openai-codex/gpt-5.5,anthropic/claude-opus-4-6,..."(lista dozwolonych rozdzielona przecinkami) - Przeglądy modern/all domyślnie używają wyselekcjonowanego limitu o wysokim sygnale; ustaw
OPENCLAW_LIVE_MAX_MODELS=0, aby wykonać wyczerpujący przegląd modern, albo liczbę dodatnią dla mniejszego limitu. - Wyczerpujące przeglądy używają
OPENCLAW_LIVE_TEST_TIMEOUT_MSjako limitu czasu całego testu bezpośredniego modelu. Domyślnie: 60 minut. - Próby bezpośredniego modelu domyślnie działają z równoległością 20; ustaw
OPENCLAW_LIVE_MODEL_CONCURRENCY, aby to nadpisać.
- Jak wybrać dostawców:
OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli"(lista dozwolonych rozdzielona przecinkami)
- Skąd pochodzą klucze:
- Domyślnie: magazyn profilu i fallbacki env
- Ustaw
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1, aby wymusić wyłącznie magazyn profilu
- Dlaczego to istnieje:
- Oddziela „API dostawcy jest zepsute / klucz jest nieprawidłowy” od „potok agenta Gateway jest zepsuty”
- Zawiera małe, izolowane regresje (przykład: OpenAI Responses/Codex Responses, odtwarzanie reasoning + przepływy wywołań narzędzi)
Warstwa 2: Gateway + smoke agenta dev (co naprawdę robi „@openclaw”)
- Test:
src/gateway/gateway-models.profiles.live.test.ts - Cel:
- Uruchomić Gateway w procesie
- Utworzyć/załatać sesję
agent:dev:*(nadpisanie modelu na każde uruchomienie) - Iterować po modelach z kluczami i potwierdzić:
- „sensowną” odpowiedź (bez narzędzi)
- działa prawdziwe wywołanie narzędzia (próba odczytu)
- opcjonalne dodatkowe próby narzędzi (próba exec+read)
- ścieżki regresji OpenAI (tylko wywołanie narzędzia → follow-up) nadal działają
- Szczegóły prób (aby szybko wyjaśniać awarie):
- Próba
read: test zapisuje plik nonce w workspace i prosi agenta oreadoraz zwrócenie nonce. - Próba
exec+read: test prosi agenta o zapisanie nonce do pliku tymczasowego przezexec, a potem odczytanie go przezread. - Próba obrazu: test dołącza wygenerowany PNG (cat + losowy kod) i oczekuje, że model zwróci
cat <CODE>. - Referencja implementacji:
src/gateway/gateway-models.profiles.live.test.tsisrc/gateway/live-image-probe.ts.
- Próba
- Jak włączyć:
pnpm test:live(lubOPENCLAW_LIVE_TEST=1, jeśli wywołujesz Vitest bezpośrednio)
- Jak wybrać modele:
- Domyślnie: nowoczesna lista dozwolonych modeli (Opus/Sonnet 4.6+, GPT-5.2 + Codex, Gemini 3, DeepSeek V4, GLM 4.7, MiniMax M2.7, Grok 4.3)
OPENCLAW_LIVE_GATEWAY_MODELS=alljest aliasem nowoczesnej listy dozwolonych modeli- Albo ustaw
OPENCLAW_LIVE_GATEWAY_MODELS="provider/model"(lub listę rozdzieloną przecinkami), aby zawęzić - Przeglądy Gateway modern/all domyślnie używają wyselekcjonowanego limitu o wysokim sygnale; ustaw
OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0, aby wykonać wyczerpujący przegląd modern, albo liczbę dodatnią dla mniejszego limitu.
- Jak wybrać dostawców (unikaj „wszystkiego z OpenRouter”):
OPENCLAW_LIVE_GATEWAY_PROVIDERS="google,google-antigravity,google-gemini-cli,openai,anthropic,zai,minimax"(lista dozwolonych rozdzielona przecinkami)
- Próby narzędzi + obrazu są w tym teście na żywo zawsze włączone:
- próba
read+ próbaexec+read(obciążenie narzędzi) - próba obrazu działa, gdy model deklaruje obsługę wejścia obrazowego
- Przepływ (wysoki poziom):
- Test generuje mały PNG z „CAT” + losowym kodem (
src/gateway/live-image-probe.ts) - Wysyła go przez
agentattachments: [{ mimeType: "image/png", content: "<base64>" }] - Gateway parsuje załączniki do
images[](src/gateway/server-methods/agent.ts+src/gateway/chat-attachments.ts) - Osadzony agent przekazuje multimodalną wiadomość użytkownika do modelu
- Asercja: odpowiedź zawiera
cat+ kod (tolerancja OCR: drobne pomyłki dozwolone)
- Test generuje mały PNG z „CAT” + losowym kodem (
- próba
Na żywo: smoke backendu CLI (Claude, Codex, Gemini lub inne lokalne CLI)
- Test:
src/gateway/gateway-cli-backend.live.test.ts - Cel: zweryfikować potok Gateway + agent z użyciem lokalnego backendu CLI, bez dotykania domyślnej konfiguracji.
- Domyślne wartości smoke specyficzne dla backendu znajdują się w definicji
cli-backend.tsnależącej do właściwego Plugin. - Włącz:
pnpm test:live(lubOPENCLAW_LIVE_TEST=1, jeśli wywołujesz Vitest bezpośrednio)OPENCLAW_LIVE_CLI_BACKEND=1
- Domyślne:
- Domyślny dostawca/model:
claude-cli/claude-sonnet-4-6 - Zachowanie polecenia/argumentów/obrazu pochodzi z metadanych Plugin backendu CLI należącego do właściciela.
- Domyślny dostawca/model:
- Nadpisania (opcjonalne):
OPENCLAW_LIVE_CLI_BACKEND_MODEL="codex-cli/gpt-5.5"OPENCLAW_LIVE_CLI_BACKEND_COMMAND="/full/path/to/codex"OPENCLAW_LIVE_CLI_BACKEND_ARGS='["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"]'OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=1, aby wysłać prawdziwy załącznik obrazowy (ścieżki są wstrzykiwane do promptu). Receptury Docker domyślnie to wyłączają, chyba że wyraźnie tego zażądano.OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image", aby przekazywać ścieżki plików obrazów jako argumenty CLI zamiast wstrzykiwania do promptu.OPENCLAW_LIVE_CLI_BACKEND_IMAGE_MODE="repeat"(lub"list"), aby kontrolować sposób przekazywania argumentów obrazu, gdy ustawionoIMAGE_ARG.OPENCLAW_LIVE_CLI_BACKEND_RESUME_PROBE=1, aby wysłać drugą turę i zweryfikować przepływ wznawiania.OPENCLAW_LIVE_CLI_BACKEND_MODEL_SWITCH_PROBE=1, aby włączyć próbę ciągłości tej samej sesji Claude Sonnet -> Opus, gdy wybrany model obsługuje cel przełączenia. Receptury Docker domyślnie to wyłączają dla zbiorczej niezawodności.OPENCLAW_LIVE_CLI_BACKEND_MCP_PROBE=1, aby włączyć próbę loopback MCP/narzędzi. Receptury Docker domyślnie to wyłączają, chyba że wyraźnie tego zażądano.
Przykład:
OPENCLAW_LIVE_CLI_BACKEND=1 \
OPENCLAW_LIVE_CLI_BACKEND_MODEL="codex-cli/gpt-5.5" \
pnpm test:live src/gateway/gateway-cli-backend.live.test.ts
Tani smoke konfiguracji Gemini MCP:
OPENCLAW_LIVE_TEST=1 \
pnpm test:live src/agents/cli-runner/bundle-mcp.gemini.live.test.ts
To nie prosi Gemini o wygenerowanie odpowiedzi. Zapisuje te same ustawienia systemowe,
które OpenClaw przekazuje Gemini, a następnie uruchamia gemini --debug mcp list, aby potwierdzić, że
zapisany serwer transport: "streamable-http" jest normalizowany do formatu HTTP MCP
Gemini i może połączyć się z lokalnym serwerem MCP streamable-HTTP.
Receptura Docker:
pnpm test:docker:live-cli-backend
Receptury Docker dla pojedynczego dostawcy:
pnpm test:docker:live-cli-backend:claude
pnpm test:docker:live-cli-backend:claude-subscription
pnpm test:docker:live-cli-backend:codex
pnpm test:docker:live-cli-backend:gemini
Uwagi:
- Runner Docker znajduje się w
scripts/test-live-cli-backend-docker.sh. - Uruchamia smoke backendu CLI na żywo wewnątrz obrazu Docker repozytorium jako użytkownik
nodebez uprawnień root. - Rozwiązuje metadane smoke CLI z rozszerzenia właściciela, a następnie instaluje pasujący pakiet CLI dla Linux (
@anthropic-ai/claude-code,@openai/codexlub@google/gemini-cli) do buforowanego zapisywalnego prefiksu wOPENCLAW_DOCKER_CLI_TOOLS_DIR(domyślnie:~/.cache/openclaw/docker-cli-tools). pnpm test:docker:live-cli-backend:claude-subscriptionwymaga przenośnego OAuth subskrypcji Claude Code przez~/.claude/.credentials.jsonzclaudeAiOauth.subscriptionTypealboCLAUDE_CODE_OAUTH_TOKENzclaude setup-token. Najpierw potwierdza bezpośrednieclaude -pw Docker, a następnie uruchamia dwie tury backendu CLI Gateway bez zachowywania zmiennych env klucza API Anthropic. Ten tor subskrypcji domyślnie wyłącza próby Claude MCP/narzędzi i obrazu, ponieważ Claude obecnie kieruje użycie aplikacji zewnętrznych przez rozliczanie dodatkowego użycia zamiast normalnych limitów planu subskrypcyjnego.- Smoke backendu CLI na żywo wykonuje teraz ten sam przepływ end-to-end dla Claude, Codex i Gemini: turę tekstową, turę klasyfikacji obrazu, a następnie wywołanie narzędzia MCP
cronzweryfikowane przez CLI Gateway. - Domyślny smoke Claude łata też sesję z Sonnet na Opus i weryfikuje, że wznowiona sesja nadal pamięta wcześniejszą notatkę.
Na żywo: osiągalność proxy APNs HTTP/2
- Test:
src/infra/push-apns-http2.live.test.ts - Cel: tunelować przez lokalny proxy HTTP CONNECT do endpointu sandbox APNs Apple, wysłać żądanie walidacyjne APNs HTTP/2 i potwierdzić, że prawdziwa odpowiedź Apple
403 InvalidProviderTokenwraca przez ścieżkę proxy. - Włącz:
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_APNS_REACHABILITY=1 pnpm test:live src/infra/push-apns-http2.live.test.ts
- Opcjonalny limit czasu:
OPENCLAW_LIVE_APNS_TIMEOUT_MS=30000
Na żywo: smoke bindowania ACP (/acp spawn ... --bind here)
- Test:
src/gateway/gateway-acp-bind.live.test.ts - Cel: zweryfikować rzeczywisty przepływ wiązania konwersacji ACP z żywym agentem ACP:
- wyślij
/acp spawn <agent> --bind here - powiąż syntetyczną konwersację kanału wiadomości w miejscu
- wyślij zwykłą wiadomość uzupełniającą w tej samej konwersacji
- sprawdź, czy wiadomość uzupełniająca trafia do transkryptu powiązanej sesji ACP
- wyślij
- Włącz:
pnpm test:live src/gateway/gateway-acp-bind.live.test.tsOPENCLAW_LIVE_ACP_BIND=1
- Wartości domyślne:
- Agenci ACP w Docker:
claude,codex,gemini - Agent ACP dla bezpośredniego
pnpm test:live ...:claude - Kanał syntetyczny: kontekst konwersacji w stylu wiadomości bezpośredniej Slack
- Backend ACP:
acpx
- Agenci ACP w Docker:
- Nadpisania:
OPENCLAW_LIVE_ACP_BIND_AGENT=claudeOPENCLAW_LIVE_ACP_BIND_AGENT=codexOPENCLAW_LIVE_ACP_BIND_AGENT=droidOPENCLAW_LIVE_ACP_BIND_AGENT=geminiOPENCLAW_LIVE_ACP_BIND_AGENT=opencodeOPENCLAW_LIVE_ACP_BIND_AGENTS=claude,codex,geminiOPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND='npx -y @agentclientprotocol/claude-agent-acp@<version>'OPENCLAW_LIVE_ACP_BIND_CODEX_MODEL=gpt-5.5OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL=opencode/kimi-k2.6OPENCLAW_LIVE_ACP_BIND_REQUIRE_TRANSCRIPT=1OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1OPENCLAW_LIVE_ACP_BIND_PARENT_MODEL=openai/gpt-5.5
- Uwagi:
- Ta ścieżka używa powierzchni
chat.sendGateway z syntetycznymi polami trasy źródłowej tylko dla administratora, aby testy mogły dołączać kontekst kanału wiadomości bez udawania dostarczania na zewnątrz. - Gdy
OPENCLAW_LIVE_ACP_BIND_AGENT_COMMANDnie jest ustawione, test używa wbudowanego rejestru agentów w osadzonym Pluginacpxdla wybranego agenta uprzęży ACP. - Tworzenie MCP cron powiązanej sesji jest domyślnie best-effort, ponieważ zewnętrzne uprzęże ACP mogą anulować wywołania MCP po przejściu dowodu powiązania/obrazu; ustaw
OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1, aby ten po-powiązaniowy próbnik cron był rygorystyczny.
- Ta ścieżka używa powierzchni
Przykład:
OPENCLAW_LIVE_ACP_BIND=1 \
OPENCLAW_LIVE_ACP_BIND_AGENT=claude \
pnpm test:live src/gateway/gateway-acp-bind.live.test.ts
Recepta Docker:
pnpm test:docker:live-acp-bind
Recepty Docker dla pojedynczego agenta:
pnpm test:docker:live-acp-bind:claude
pnpm test:docker:live-acp-bind:codex
pnpm test:docker:live-acp-bind:droid
pnpm test:docker:live-acp-bind:gemini
pnpm test:docker:live-acp-bind:opencode
Uwagi Docker:
- Runner Docker znajduje się w
scripts/test-live-acp-bind-docker.sh. - Domyślnie uruchamia smoke wiązania ACP przeciwko zagregowanym żywym agentom CLI po kolei:
claude,codex, a następniegemini. - Użyj
OPENCLAW_LIVE_ACP_BIND_AGENTS=claude,OPENCLAW_LIVE_ACP_BIND_AGENTS=codex,OPENCLAW_LIVE_ACP_BIND_AGENTS=droid,OPENCLAW_LIVE_ACP_BIND_AGENTS=geminilubOPENCLAW_LIVE_ACP_BIND_AGENTS=opencode, aby zawęzić macierz. - Źródłuje
~/.profile, przygotowuje pasujące materiały uwierzytelniania CLI w kontenerze, a następnie instaluje żądane żywe CLI (@anthropic-ai/claude-code,@openai/codex, Factory Droid przezhttps://app.factory.ai/cli,@google/gemini-clilubopencode-ai), jeśli go brakuje. Sam backend ACP to osadzony pakietacpx/runtimez oficjalnego Pluginacpx. - Wariant Docker dla Droid przygotowuje
~/.factorydla ustawień, przekazujeFACTORY_API_KEYi wymaga tego klucza API, ponieważ lokalne uwierzytelnianie Factory OAuth/keyring nie jest przenośne do kontenera. Używa wbudowanego wpisu rejestru ACPXdroid exec --output-format acp. - Wariant Docker dla OpenCode to rygorystyczna ścieżka regresji dla pojedynczego agenta. Zapisuje tymczasowy domyślny model
OPENCODE_CONFIG_CONTENTzOPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL(domyślnieopencode/kimi-k2.6) po źródłowaniu~/.profile, apnpm test:docker:live-acp-bind:opencodewymaga transkryptu powiązanego asystenta zamiast akceptowania ogólnego pominięcia po powiązaniu. - Bezpośrednie wywołania CLI
acpxsą tylko ręczną/obejściową ścieżką do porównywania zachowania poza Gateway. Smoke wiązania ACP w Docker ćwiczy osadzony backend runtimeacpxOpenClaw.
Live: smoke uprzęży serwera aplikacji Codex
- Cel: zweryfikować należącą do Plugin uprząż Codex przez zwykłą metodę Gateway
agent:- załaduj dołączony Plugin
codex - wybierz
OPENCLAW_AGENT_RUNTIME=codex - wyślij pierwszą turę agenta Gateway do
openai/gpt-5.5z wymuszoną uprzężą Codex - wyślij drugą turę do tej samej sesji OpenClaw i sprawdź, czy wątek serwera aplikacji może zostać wznowiony
- uruchom
/codex statusi/codex modelsprzez tę samą ścieżkę poleceń Gateway - opcjonalnie uruchom dwa przejrzane przez Guardian eskalowane próbniki powłoki: jedno łagodne polecenie, które powinno zostać zatwierdzone, i jedno wysłanie fałszywego sekretu, które powinno zostać odrzucone, aby agent zapytał z powrotem
- załaduj dołączony Plugin
- Test:
src/gateway/gateway-codex-harness.live.test.ts - Włącz:
OPENCLAW_LIVE_CODEX_HARNESS=1 - Model domyślny:
openai/gpt-5.5 - Opcjonalny próbnik obrazu:
OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1 - Opcjonalny próbnik MCP/narzędzia:
OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1 - Opcjonalny próbnik Guardian:
OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1 - Smoke używa
agentRuntime.id: "codex", więc uszkodzona uprząż Codex nie może przejść przez ciche wycofanie do PI. - Uwierzytelnianie: uwierzytelnianie serwera aplikacji Codex z lokalnego logowania subskrypcji Codex. Smoke Docker
mogą też dostarczyć
OPENAI_API_KEYdla próbników innych niż Codex, gdy ma to zastosowanie, oraz opcjonalnie skopiowane~/.codex/auth.jsoni~/.codex/config.toml.
Recepta lokalna:
source ~/.profile
OPENCLAW_LIVE_CODEX_HARNESS=1 \
OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1 \
OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1 \
OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1 \
OPENCLAW_LIVE_CODEX_HARNESS_MODEL=openai/gpt-5.5 \
pnpm test:live -- src/gateway/gateway-codex-harness.live.test.ts
Recepta Docker:
source ~/.profile
pnpm test:docker:live-codex-harness
Uwagi Docker:
- Runner Docker znajduje się w
scripts/test-live-codex-harness-docker.sh. - Źródłuje zamontowany
~/.profile, przekazujeOPENAI_API_KEY, kopiuje pliki uwierzytelniania Codex CLI, gdy są obecne, instaluje@openai/codexdo zapisywalnego zamontowanego prefiksu npm, przygotowuje drzewo źródłowe, a następnie uruchamia tylko żywy test uprzęży Codex. - Docker domyślnie włącza próbniki obrazu, MCP/narzędzi i Guardian. Ustaw
OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0alboOPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0alboOPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0, gdy potrzebujesz węższego przebiegu debugowania. - Docker używa tej samej jawnej konfiguracji runtime Codex, więc starsze aliasy lub wycofanie PI nie mogą ukryć regresji uprzęży Codex.
Zalecane recepty live
Wąskie, jawne listy dozwolonych elementów są najszybsze i najmniej niestabilne:
-
Pojedynczy model, bezpośrednio (bez Gateway):
OPENCLAW_LIVE_MODELS="openai/gpt-5.5" pnpm test:live src/agents/models.profiles.live.test.ts
-
Pojedynczy model, smoke Gateway:
OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
-
Wywoływanie narzędzi u kilku dostawców:
OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5,openai-codex/gpt-5.5,anthropic/claude-opus-4-6,google/gemini-3-flash-preview,deepseek/deepseek-v4-flash,zai/glm-5.1,minimax/MiniMax-M2.7" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
-
Skupienie na Google (klucz API Gemini + Antigravity):
- Gemini (klucz API):
OPENCLAW_LIVE_GATEWAY_MODELS="google/gemini-3-flash-preview" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts - Antigravity (OAuth):
OPENCLAW_LIVE_GATEWAY_MODELS="google-antigravity/claude-opus-4-6-thinking,google-antigravity/gemini-3-pro-high" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
- Gemini (klucz API):
-
Smoke adaptacyjnego myślenia Google:
- Jeśli lokalne klucze znajdują się w profilu powłoki:
source ~/.profile - Dynamiczna wartość domyślna Gemini 3:
pnpm openclaw qa manual --provider-mode live-frontier --model google/gemini-3.1-pro-preview --alt-model google/gemini-3.1-pro-preview --message '/think adaptive Reply exactly: GEMINI_ADAPTIVE_OK' --timeout-ms 180000 - Dynamiczny budżet Gemini 2.5:
pnpm openclaw qa manual --provider-mode live-frontier --model google/gemini-2.5-flash --alt-model google/gemini-2.5-flash --message '/think adaptive Reply exactly: GEMINI25_ADAPTIVE_OK' --timeout-ms 180000
- Jeśli lokalne klucze znajdują się w profilu powłoki:
Uwagi:
google/...używa API Gemini (klucz API).google-antigravity/...używa mostu Antigravity OAuth (punkt końcowy agenta w stylu Cloud Code Assist).google-gemini-cli/...używa lokalnego Gemini CLI na Twoim komputerze (osobne uwierzytelnianie + osobliwości narzędzi).- Gemini API a Gemini CLI:
- API: OpenClaw wywołuje hostowane przez Google API Gemini przez HTTP (klucz API / uwierzytelnianie profilu); to ma na myśli większość użytkowników, mówiąc „Gemini”.
- CLI: OpenClaw wywołuje lokalny plik binarny
geminiprzez powłokę; ma on własne uwierzytelnianie i może zachowywać się inaczej (obsługa streamingu/narzędzi/rozjazd wersji).
Live: macierz modeli (co obejmujemy)
Nie ma stałej „listy modeli CI” (live jest opt-in), ale to są zalecane modele do regularnego obejmowania na maszynie deweloperskiej z kluczami.
Nowoczesny zestaw smoke (wywoływanie narzędzi + obraz)
To jest przebieg „typowych modeli”, który ma nadal działać:
- OpenAI (nie-Codex):
openai/gpt-5.5 - OpenAI Codex OAuth:
openai-codex/gpt-5.5 - Anthropic:
anthropic/claude-opus-4-6(lubanthropic/claude-sonnet-4-6) - Google (Gemini API):
google/gemini-3.1-pro-previewigoogle/gemini-3-flash-preview(unikaj starszych modeli Gemini 2.x) - Google (Antigravity):
google-antigravity/claude-opus-4-6-thinkingigoogle-antigravity/gemini-3-flash - DeepSeek:
deepseek/deepseek-v4-flashideepseek/deepseek-v4-pro - Z.AI (GLM):
zai/glm-5.1 - MiniMax:
minimax/MiniMax-M2.7
Uruchom smoke Gateway z narzędziami + obrazem:
OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5,openai-codex/gpt-5.5,anthropic/claude-opus-4-6,google/gemini-3.1-pro-preview,google/gemini-3-flash-preview,google-antigravity/claude-opus-4-6-thinking,google-antigravity/gemini-3-flash,deepseek/deepseek-v4-flash,zai/glm-5.1,minimax/MiniMax-M2.7" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
Punkt odniesienia: wywoływanie narzędzi (Read + opcjonalny Exec)
Wybierz co najmniej jeden dla każdej rodziny dostawców:
- OpenAI:
openai/gpt-5.5 - Anthropic:
anthropic/claude-opus-4-6(lubanthropic/claude-sonnet-4-6) - Google:
google/gemini-3-flash-preview(lubgoogle/gemini-3.1-pro-preview) - DeepSeek:
deepseek/deepseek-v4-flash - Z.AI (GLM):
zai/glm-5.1 - MiniMax:
minimax/MiniMax-M2.7
Opcjonalne dodatkowe pokrycie (warto mieć):
- xAI:
xai/grok-4.3(lub najnowszy dostępny) - Mistral:
mistral/… (wybierz jeden model obsługujący „tools”, który masz włączony) - Cerebras:
cerebras/… (jeśli masz dostęp) - LM Studio:
lmstudio/… (lokalnie; wywoływanie narzędzi zależy od trybu API)
Vision: wysyłanie obrazu (załącznik → wiadomość multimodalna)
Uwzględnij co najmniej jeden model obsługujący obrazy w OPENCLAW_LIVE_GATEWAY_MODELS (warianty Claude/Gemini/OpenAI obsługujące vision itd.), aby ćwiczyć próbnik obrazu.
Agregatory / alternatywne Gateway
Jeśli masz włączone klucze, obsługujemy też testowanie przez:
- OpenRouter:
openrouter/...(setki modeli; użyjopenclaw models scan, aby znaleźć kandydatów obsługujących narzędzia+obrazy) - OpenCode:
opencode/...dla Zen iopencode-go/...dla Go (uwierzytelnianie przezOPENCODE_API_KEY/OPENCODE_ZEN_API_KEY)
Więcej dostawców, których możesz uwzględnić w macierzy live (jeśli masz poświadczenia/konfigurację):
- Wbudowane:
openai,openai-codex,anthropic,google,google-vertex,google-antigravity,google-gemini-cli,zai,openrouter,opencode,opencode-go,xai,groq,cerebras,mistral,github-copilot - Przez
models.providers(niestandardowe punkty końcowe):minimax(chmura/API) oraz dowolny proxy zgodny z OpenAI/Anthropic (LM Studio, vLLM, LiteLLM itd.)
Poświadczenia (nigdy nie commituj)
Testy live wykrywają poświadczenia tak samo jak CLI. Praktyczne konsekwencje:
-
Jeśli CLI działa, testy live powinny znaleźć te same klucze.
-
Jeśli test live mówi „no creds”, debuguj tak samo, jak debugowałbyś
openclaw models list/ wybór modelu. -
Profile uwierzytelniania dla poszczególnych agentów:
~/.openclaw/agents/<agentId>/agent/auth-profiles.json(to właśnie oznacza „klucze profilu” w testach live) -
Konfiguracja:
~/.openclaw/openclaw.json(lubOPENCLAW_CONFIG_PATH) -
Katalog stanu starszego typu:
~/.openclaw/credentials/(kopiowany do przygotowanego katalogu domowego live, gdy istnieje, ale nie jest głównym magazynem kluczy profilu) -
Lokalne uruchomienia live domyślnie kopiują aktywną konfigurację, pliki
auth-profiles.jsonposzczególnych agentów, starszy katalogcredentials/oraz obsługiwane zewnętrzne katalogi uwierzytelniania CLI do tymczasowego testowego katalogu domowego; przygotowane katalogi domowe live pomijająworkspace/isandboxes/, a nadpisania ścieżekagents.*.workspace/agentDirsą usuwane, aby próby nie dotykały rzeczywistego obszaru roboczego hosta.
Jeśli chcesz polegać na kluczach ze zmiennych środowiskowych (np. wyeksportowanych w ~/.profile), uruchom lokalne testy po source ~/.profile albo użyj poniższych runnerów Docker (mogą zamontować ~/.profile w kontenerze).
Deepgram live (transkrypcja audio)
- Test:
extensions/deepgram/audio.live.test.ts - Włącz:
DEEPGRAM_API_KEY=... DEEPGRAM_LIVE_TEST=1 pnpm test:live extensions/deepgram/audio.live.test.ts
BytePlus coding plan live
- Test:
extensions/byteplus/live.test.ts - Włącz:
BYTEPLUS_API_KEY=... BYTEPLUS_LIVE_TEST=1 pnpm test:live extensions/byteplus/live.test.ts - Opcjonalne nadpisanie modelu:
BYTEPLUS_CODING_MODEL=ark-code-latest
ComfyUI workflow media live
- Test:
extensions/comfy/comfy.live.test.ts - Włącz:
OPENCLAW_LIVE_TEST=1 COMFY_LIVE_TEST=1 pnpm test:live -- extensions/comfy/comfy.live.test.ts - Zakres:
- Sprawdza dołączone ścieżki comfy dla obrazów, wideo i
music_generate - Pomija każdą możliwość, chyba że skonfigurowano
plugins.entries.comfy.config.<capability> - Przydatne po zmianach w przesyłaniu workflow comfy, odpytywaniu, pobieraniu lub rejestracji Plugin
- Sprawdza dołączone ścieżki comfy dla obrazów, wideo i
Generowanie obrazów live
- Test:
test/image-generation.runtime.live.test.ts - Polecenie:
pnpm test:live test/image-generation.runtime.live.test.ts - Harness:
pnpm test:live:media image - Zakres:
- Wylicza każdy zarejestrowany Plugin dostawcy generowania obrazów
- Ładuje brakujące zmienne środowiskowe dostawcy z powłoki logowania (
~/.profile) przed sondowaniem - Domyślnie używa kluczy API live/ze zmiennych środowiskowych przed zapisanymi profilami uwierzytelniania, aby nieaktualne klucze testowe w
auth-profiles.jsonnie maskowały rzeczywistych poświadczeń powłoki - Pomija dostawców bez użytecznego uwierzytelniania/profilu/modelu
- Uruchamia każdego skonfigurowanego dostawcę przez współdzielony runtime generowania obrazów:
<provider>:generate<provider>:edit, gdy dostawca deklaruje obsługę edycji
- Obecnie objęci dołączeni dostawcy:
deepinfrafalgoogleminimaxopenaiopenroutervydraxai
- Opcjonalne zawężenie:
OPENCLAW_LIVE_IMAGE_GENERATION_PROVIDERS="openai,google,openrouter,xai"OPENCLAW_LIVE_IMAGE_GENERATION_PROVIDERS="deepinfra"OPENCLAW_LIVE_IMAGE_GENERATION_MODELS="openai/gpt-image-2,google/gemini-3.1-flash-image-preview,openrouter/google/gemini-3.1-flash-image-preview,xai/grok-imagine-image"OPENCLAW_LIVE_IMAGE_GENERATION_CASES="google:flash-generate,google:pro-edit,openrouter:generate,xai:default-generate,xai:default-edit"
- Opcjonalne zachowanie uwierzytelniania:
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1, aby wymusić uwierzytelnianie z magazynu profili i ignorować nadpisania dostępne tylko przez zmienne środowiskowe
Dla dostarczanej ścieżki CLI dodaj smoke infer po przejściu testu live dostawcy/runtime:
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_INFER_CLI_TEST=1 pnpm test:live -- test/image-generation.infer-cli.live.test.ts
openclaw infer image providers --json
openclaw infer image generate \
--model google/gemini-3.1-flash-image-preview \
--prompt "Minimal flat test image: one blue square on a white background, no text." \
--output ./openclaw-infer-image-smoke.png \
--json
Obejmuje to parsowanie argumentów CLI, rozwiązywanie konfiguracji/domyślnego agenta, aktywację dołączonego Plugin, współdzielony runtime generowania obrazów oraz żądanie live do dostawcy. Oczekuje się, że zależności Plugin będą obecne przed załadowaniem runtime.
Generowanie muzyki live
- Test:
extensions/music-generation-providers.live.test.ts - Włącz:
OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/music-generation-providers.live.test.ts - Harness:
pnpm test:live:media music - Zakres:
- Sprawdza współdzieloną ścieżkę dołączonego dostawcy generowania muzyki
- Obecnie obejmuje Google i MiniMax
- Ładuje zmienne środowiskowe dostawcy z powłoki logowania (
~/.profile) przed sondowaniem - Domyślnie używa kluczy API live/ze zmiennych środowiskowych przed zapisanymi profilami uwierzytelniania, aby nieaktualne klucze testowe w
auth-profiles.jsonnie maskowały rzeczywistych poświadczeń powłoki - Pomija dostawców bez użytecznego uwierzytelniania/profilu/modelu
- Uruchamia oba deklarowane tryby runtime, gdy są dostępne:
generatez wejściem zawierającym tylko promptedit, gdy dostawca deklarujecapabilities.edit.enabled
- Obecne pokrycie współdzielonej ścieżki:
google:generate,editminimax:generatecomfy: osobny plik live Comfy, nie ten współdzielony sweep
- Opcjonalne zawężenie:
OPENCLAW_LIVE_MUSIC_GENERATION_PROVIDERS="google,minimax"OPENCLAW_LIVE_MUSIC_GENERATION_MODELS="google/lyria-3-clip-preview,minimax/music-2.6"
- Opcjonalne zachowanie uwierzytelniania:
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1, aby wymusić uwierzytelnianie z magazynu profili i ignorować nadpisania dostępne tylko przez zmienne środowiskowe
Generowanie wideo live
- Test:
extensions/video-generation-providers.live.test.ts - Włącz:
OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.live.test.ts - Harness:
pnpm test:live:media video - Zakres:
- Sprawdza współdzieloną ścieżkę dołączonego dostawcy generowania wideo
- Domyślnie używa bezpiecznej dla wydania ścieżki smoke: dostawcy inni niż FAL, jedno żądanie tekst-na-wideo na dostawcę, jednosekundowy prompt z homarem oraz limit operacji na dostawcę z
OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS(domyślnie180000) - Domyślnie pomija FAL, ponieważ opóźnienie kolejki po stronie dostawcy może zdominować czas wydania; przekaż
--video-providers falalboOPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="fal", aby uruchomić go jawnie - Ładuje zmienne środowiskowe dostawcy z powłoki logowania (
~/.profile) przed sondowaniem - Domyślnie używa kluczy API live/ze zmiennych środowiskowych przed zapisanymi profilami uwierzytelniania, aby nieaktualne klucze testowe w
auth-profiles.jsonnie maskowały rzeczywistych poświadczeń powłoki - Pomija dostawców bez użytecznego uwierzytelniania/profilu/modelu
- Domyślnie uruchamia tylko
generate - Ustaw
OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1, aby uruchamiać także deklarowane tryby transformacji, gdy są dostępne:imageToVideo, gdy dostawca deklarujecapabilities.imageToVideo.enabled, a wybrany dostawca/model akceptuje w współdzielonym sweep lokalne wejście obrazu oparte na buforzevideoToVideo, gdy dostawca deklarujecapabilities.videoToVideo.enabled, a wybrany dostawca/model akceptuje w współdzielonym sweep lokalne wejście wideo oparte na buforze
- Obecni dostawcy
imageToVideodeklarowani, ale pomijani we współdzielonym sweep:vydra, ponieważ dołączonyveo3obsługuje tylko tekst, a dołączonyklingwymaga zdalnego URL obrazu
- Pokrycie specyficzne dla dostawcy Vydra:
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_VYDRA_VIDEO=1 pnpm test:live -- extensions/vydra/vydra.live.test.ts- ten plik uruchamia tekst-na-wideo
veo3oraz ścieżkękling, która domyślnie używa fixture ze zdalnym URL obrazu
- Obecne pokrycie live
videoToVideo:- tylko
runway, gdy wybrany model torunway/gen4_aleph
- tylko
- Obecni dostawcy
videoToVideodeklarowani, ale pomijani we współdzielonym sweep:alibaba,qwen,xai, ponieważ te ścieżki obecnie wymagają zdalnych URL referencyjnychhttp(s)/ MP4google, ponieważ obecna współdzielona ścieżka Gemini/Veo używa lokalnego wejścia opartego na buforze, a ta ścieżka nie jest akceptowana we współdzielonym sweepopenai, ponieważ obecnej współdzielonej ścieżce brakuje gwarancji dostępu specyficznego dla organizacji do wypełniania/remiksu wideo
- Opcjonalne zawężenie:
OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="deepinfra,google,openai,runway"OPENCLAW_LIVE_VIDEO_GENERATION_MODELS="google/veo-3.1-fast-generate-preview,openai/sora-2,runway/gen4_aleph"OPENCLAW_LIVE_VIDEO_GENERATION_SKIP_PROVIDERS="", aby uwzględnić każdego dostawcę w domyślnym sweep, w tym FALOPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS=60000, aby zmniejszyć limit operacji każdego dostawcy na potrzeby agresywnego uruchomienia smoke
- Opcjonalne zachowanie uwierzytelniania:
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1, aby wymusić uwierzytelnianie z magazynu profili i ignorować nadpisania dostępne tylko przez zmienne środowiskowe
Media live harness
- Polecenie:
pnpm test:live:media - Cel:
- Uruchamia współdzielone zestawy live dla obrazów, muzyki i wideo przez jeden natywny dla repo punkt wejścia
- Automatycznie ładuje brakujące zmienne środowiskowe dostawcy z
~/.profile - Domyślnie automatycznie zawęża każdy zestaw do dostawców, którzy obecnie mają użyteczne uwierzytelnianie
- Ponownie używa
scripts/test-live.mjs, więc zachowanie Heartbeat i trybu cichego pozostaje spójne
- Przykłady:
pnpm test:live:mediapnpm test:live:media image video --providers openai,google,minimaxpnpm test:live:media video --video-providers openai,runway --all-providerspnpm test:live:media music --quiet
Powiązane
- Testowanie - zestawy jednostkowe, integracyjne, QA i Docker