Testing
рдкрд░реАрдХреНрд╖рдг: рд▓рд╛рдЗрд╡ рд╕реБрдЗрдЯреНрд╕
рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд, QA рд░рдирд░, рдпреВрдирд┐рдЯ/рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рд╕реБрдЗрдЯ, рдФрд░ Docker рдлреНрд▓реЛ рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ Testingред рдпрд╣ рдкреЗрдЬ live (рдиреЗрдЯрд╡рд░реНрдХ-рд╕реНрдкрд░реНрд╢реА) рдЯреЗрд╕реНрдЯ рд╕реБрдЗрдЯ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ: рдореЙрдбрд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕, CLI рдмреИрдХрдПрдВрдб, ACP, рдФрд░ рдореАрдбрд┐рдпрд╛-рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ live рдЯреЗрд╕реНрдЯ, рд╕рд╛рде рд╣реА рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╣реИрдВрдбрд▓рд┐рдВрдЧред
Live: рд╕реНрдерд╛рдиреАрдп рд╕реНрдореЛрдХ рдХрдорд╛рдВрдб
рддрджрд░реНрде live рдЬрд╛рдВрдЪреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХреБрдВрдЬреА рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдХрд░реЗрдВред
рд╕реБрд░рдХреНрд╖рд┐рдд рдореАрдбрд┐рдпрд╛ рд╕реНрдореЛрдХ:
pnpm openclaw infer tts convert --local --json \ --text "OpenClaw live smoke." \ --output /tmp/openclaw-live-smoke.mp3рд╕реБрд░рдХреНрд╖рд┐рдд рд╡реЙрдЗрд╕-рдХреЙрд▓ рддреИрдпрд╛рд░реА рд╕реНрдореЛрдХ:
pnpm openclaw voicecall setup --jsonpnpm openclaw voicecall smoke --to "+15555550123"voicecall smoke рдПрдХ рдбреНрд░рд╛рдИ рд░рди рд╣реИ рдЬрдм рддрдХ --yes рднреА рдореМрдЬреВрдж рди рд╣реЛред --yes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓
рддрдм рдХрд░реЗрдВ рдЬрдм рдЖрдк рдЬрд╛рдирдмреВрдЭрдХрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдиреЛрдЯрд┐рдлрд╛рдИ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реЛрдВред Twilio, Telnyx, рдФрд░
Plivo рдХреЗ рд▓рд┐рдП, рд╕рдлрд▓ рддреИрдпрд╛рд░реА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ webhook URL рдЖрд╡рд╢реНрдпрдХ рд╣реИ; рдХреЗрд╡рд▓-рд╕реНрдерд╛рдиреАрдп
loopback/рдирд┐рдЬреА fallback рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
Live: Android node рдХреНрд╖рдорддрд╛ рд╕реНрд╡реАрдк
- рдЯреЗрд╕реНрдЯ:
src/gateway/android-node.capabilities.live.test.ts - рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
pnpm android:test:integration - рд▓рдХреНрд╖реНрдп: рдХрдиреЗрдХреНрдЯреЗрдб Android node рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рдЬреНрдЮрд╛рдкрд┐рдд рд╣рд░ рдХрдорд╛рдВрдб рдХреЛ invoke рдХрд░рдирд╛ рдФрд░ рдХрдорд╛рдВрдб рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ assert рдХрд░рдирд╛ред
- рджрд╛рдпрд░рд╛:
- рдкреВрд░реНрд╡-рд╢рд░реНрдд/рдореИрдиреБрдЕрд▓ setup (рд╕реБрдЗрдЯ рдРрдк рдХреЛ install/run/pair рдирд╣реАрдВ рдХрд░рддрд╛)ред
- рдЪреБрдиреЗ рдЧрдП Android node рдХреЗ рд▓рд┐рдП command-by-command gateway
node.invokevalidationред
- рдЖрд╡рд╢реНрдпрдХ рдкреВрд░реНрд╡-setup:
- Android рдРрдк рдкрд╣рд▓реЗ рд╕реЗ gateway рд╕реЗ connected + paired рд╣реЛред
- рдРрдк foreground рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реЛред
- рдЬрд┐рди capabilities рдХреЗ рдкрд╛рд╕ рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд╣реИ, рдЙрдирдХреЗ рд▓рд┐рдП permissions/capture consent granted рд╣реЛред
- рд╡реИрдХрд▓реНрдкрд┐рдХ target overrides:
OPENCLAW_ANDROID_NODE_IDрдпрд╛OPENCLAW_ANDROID_NODE_NAMEредOPENCLAW_ANDROID_GATEWAY_URL/OPENCLAW_ANDROID_GATEWAY_TOKEN/OPENCLAW_ANDROID_GATEWAY_PASSWORDред
- рдкреВрд░реНрдг Android setup рд╡рд┐рд╡рд░рдг: Android App
Live: model smoke (profile keys)
Live рдЯреЗрд╕реНрдЯ рджреЛ рдкрд░рддреЛрдВ рдореЗрдВ рдмрд╛рдВрдЯреЗ рдЧрдП рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо failures рдХреЛ isolate рдХрд░ рд╕рдХреЗрдВ:
- "Direct model" рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ provider/model рджреА рдЧрдИ key рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ answer рдХрд░ рд╕рдХрддрд╛ рд╣реИред
- "Gateway smoke" рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреВрд░рд╛ gateway+agent pipeline рдЙрд╕ model рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (sessions, history, tools, sandbox policy, рдЖрджрд┐)ред
Layer 1: Direct model completion (no gateway)
- рдЯреЗрд╕реНрдЯ:
src/agents/models.profiles.live.test.ts - рд▓рдХреНрд╖реНрдп:
- discovered models рдХреЛ enumerate рдХрд░рдирд╛
- рдЬрд┐рди models рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ creds рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ select рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
getApiKeyForModelрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ - рд╣рд░ model рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ completion рдЪрд▓рд╛рдирд╛ (рдФрд░ рдЬрд╣рд╛рдВ рдЬрд░реВрд░рдд рд╣реЛ targeted regressions)
- enable рдХреИрд╕реЗ рдХрд░реЗрдВ:
pnpm test:live(рдпрд╛ Vitest рдХреЛ рд╕реАрдзреЗ invoke рдХрд░рдиреЗ рдкрд░OPENCLAW_LIVE_TEST=1)
- рдЗрд╕ suite рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП
OPENCLAW_LIVE_MODELS=modern,small, рдпрд╛all(modern рдХрд╛ alias) рд╕реЗрдЯ рдХрд░реЗрдВ; рдЕрдиреНрдпрдерд╛ рдпрд╣pnpm test:liveрдХреЛ gateway smoke рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП skip рдХрд░рддрд╛ рд╣реИ - models рдХреИрд╕реЗ рдЪреБрдиреЗрдВ:
- modern allowlist рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП
OPENCLAW_LIVE_MODELS=modern(Opus/Sonnet 4.6+, GPT-5.2 + Codex, Gemini 3, DeepSeek V4, GLM 5.1, MiniMax M3, Grok 4.3) - constrained small-model allowlist рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП
OPENCLAW_LIVE_MODELS=small(Qwen 8B/9B local-compatible routes, Ollama Gemma, OpenRouter Qwen/GLM, рдФрд░ Z.AI GLM) OPENCLAW_LIVE_MODELS=allmodern allowlist рдХрд╛ alias рд╣реИ- рдпрд╛
OPENCLAW_LIVE_MODELS="openai/gpt-5.5,anthropic/claude-opus-4-6,..."(comma allowlist) - Local Ollama small-model runs рдбрд┐рдлреЙрд▓реНрдЯ рд░реВрдк рд╕реЗ
http://127.0.0.1:11434рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ;OPENCLAW_LIVE_OLLAMA_BASE_URLрдХреЗрд╡рд▓ LAN, custom, рдпрд╛ Ollama Cloud endpoints рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░реЗрдВред - Modern/all рдФрд░ small sweeps рдбрд┐рдлреЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкрдиреА curated caps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ; exhaustive selected-profile sweep рдХреЗ рд▓рд┐рдП
OPENCLAW_LIVE_MAX_MODELS=0рд╕реЗрдЯ рдХрд░реЗрдВ рдпрд╛ рдЫреЛрдЯреЗ cap рдХреЗ рд▓рд┐рдП positive numberред - Exhaustive sweeps рдкреВрд░реЗ direct-model test timeout рдХреЗ рд▓рд┐рдП
OPENCLAW_LIVE_TEST_TIMEOUT_MSрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдбрд┐рдлреЙрд▓реНрдЯ: 60 рдорд┐рдирдЯред - Direct-model probes рдбрд┐рдлреЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 20-way parallelism рдХреЗ рд╕рд╛рде рдЪрд▓рддреЗ рд╣реИрдВ; override рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
OPENCLAW_LIVE_MODEL_CONCURRENCYрд╕реЗрдЯ рдХрд░реЗрдВред
- modern allowlist рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП
- providers рдХреИрд╕реЗ рдЪреБрдиреЗрдВ:
OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli"(comma allowlist)
- keys рдХрд╣рд╛рдВ рд╕реЗ рдЖрддреА рд╣реИрдВ:
- рдбрд┐рдлреЙрд▓реНрдЯ рд░реВрдк рд╕реЗ: profile store рдФрд░ env fallbacks
- рдХреЗрд╡рд▓ profile store enforce рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1рд╕реЗрдЯ рдХрд░реЗрдВ
- рдпрд╣ рдХреНрдпреЛрдВ рдореМрдЬреВрдж рд╣реИ:
- "provider API broken рд╣реИ / key invalid рд╣реИ" рдХреЛ "gateway agent pipeline broken рд╣реИ" рд╕реЗ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИ
- рдЫреЛрдЯреЗ, isolated regressions рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг: OpenAI Responses/Codex Responses reasoning replay + tool-call flows)
Layer 2: Gateway + dev agent smoke (what "@openclaw" actually does)
- рдЯреЗрд╕реНрдЯ:
src/gateway/gateway-models.profiles.live.test.ts - рд▓рдХреНрд╖реНрдп:
- рдПрдХ in-process gateway spin up рдХрд░рдирд╛
agent:dev:*session create/patch рдХрд░рдирд╛ (рд╣рд░ run рдкрд░ model override)- models-with-keys рдкрд░ iterate рдХрд░рдирд╛ рдФрд░ assert рдХрд░рдирд╛:
- "meaningful" response (no tools)
- рд╡рд╛рд╕реНрддрд╡рд┐рдХ tool invocation рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (read probe)
- рд╡реИрдХрд▓реНрдкрд┐рдХ extra tool probes (exec+read probe)
- OpenAI regression paths (tool-call-only тЖТ follow-up) рдХрд╛рдо рдХрд░рддреЗ рд░рд╣рддреЗ рд╣реИрдВ
- Probe рд╡рд┐рд╡рд░рдг (рддрд╛рдХрд┐ рдЖрдк failures рдХреЛ рдЬрд▓реНрджреА explain рдХрд░ рд╕рдХреЗрдВ):
readprobe: test workspace рдореЗрдВ nonce file рд▓рд┐рдЦрддрд╛ рд╣реИ рдФрд░ agent рд╕реЗ рдЙрд╕реЗreadрдХрд░рдиреЗ рдФрд░ nonce рд╡рд╛рдкрд╕ echo рдХрд░рдиреЗ рдХреЛ рдХрд╣рддрд╛ рд╣реИредexec+readprobe: test agent рд╕реЗ temp file рдореЗрдВ nonceexec-write рдХрд░рдиреЗ, рдлрд┐рд░ рдЙрд╕реЗ рд╡рд╛рдкрд╕readрдХрд░рдиреЗ рдХреЛ рдХрд╣рддрд╛ рд╣реИред- image probe: test рдПрдХ generated PNG (cat + randomized code) attach рдХрд░рддрд╛ рд╣реИ рдФрд░ model рд╕реЗ
cat <CODE>return рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред - Implementation reference:
src/gateway/gateway-models.profiles.live.test.tsрдФрд░test/helpers/live-image-probe.tsред
- enable рдХреИрд╕реЗ рдХрд░реЗрдВ:
pnpm test:live(рдпрд╛ Vitest рдХреЛ рд╕реАрдзреЗ invoke рдХрд░рдиреЗ рдкрд░OPENCLAW_LIVE_TEST=1)
- models рдХреИрд╕реЗ рдЪреБрдиреЗрдВ:
- рдбрд┐рдлреЙрд▓реНрдЯ: modern allowlist (Opus/Sonnet 4.6+, GPT-5.2 + Codex, Gemini 3, DeepSeek V4, GLM 4.7, MiniMax M3, Grok 4.3)
- full gateway+agent pipeline рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╣реА constrained small-model allowlist рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП
OPENCLAW_LIVE_GATEWAY_MODELS=small OPENCLAW_LIVE_GATEWAY_MODELS=allmodern allowlist рдХрд╛ alias рд╣реИ- рдпрд╛ narrow рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
OPENCLAW_LIVE_GATEWAY_MODELS="provider/model"(рдпрд╛ comma list) рд╕реЗрдЯ рдХрд░реЗрдВ - Modern/all рдФрд░ small gateway sweeps рдбрд┐рдлреЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкрдиреА curated caps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ; exhaustive selected sweep рдХреЗ рд▓рд┐рдП
OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0рд╕реЗрдЯ рдХрд░реЗрдВ рдпрд╛ рдЫреЛрдЯреЗ cap рдХреЗ рд▓рд┐рдП positive numberред
- providers рдХреИрд╕реЗ рдЪреБрдиреЗрдВ ("OpenRouter everything" рд╕реЗ рдмрдЪреЗрдВ):
OPENCLAW_LIVE_GATEWAY_PROVIDERS="google,google-antigravity,google-gemini-cli,openai,anthropic,zai,minimax"(comma allowlist)
- Tool + image probes рдЗрд╕ live test рдореЗрдВ рд╣рдореЗрд╢рд╛ on рд░рд╣рддреЗ рд╣реИрдВ:
readprobe +exec+readprobe (tool stress)- image probe рддрдм рдЪрд▓рддрд╛ рд╣реИ рдЬрдм model image input support advertise рдХрд░рддрд╛ рд╣реИ
- Flow (high level):
- Test "CAT" + random code рд╡рд╛рд▓рд╛ рдЫреЛрдЯрд╛ PNG generate рдХрд░рддрд╛ рд╣реИ (
test/helpers/live-image-probe.ts) - рдЗрд╕реЗ
agentрдХреЗ рдЬрд░рд┐рдПattachments: [{ mimeType: "image/png", content: "<base64>" }]рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИ - Gateway attachments рдХреЛ
images[]рдореЗрдВ parse рдХрд░рддрд╛ рд╣реИ (src/gateway/server-methods/agent.ts+src/gateway/chat-attachments.ts) - Embedded agent model рдХреЛ multimodal user message forward рдХрд░рддрд╛ рд╣реИ
- Assertion: reply рдореЗрдВ
cat+ code рд╢рд╛рдорд┐рд▓ рд╣реИ (OCR tolerance: рдЫреЛрдЯреА рдЧрд▓рддрд┐рдпрд╛рдВ allowed)
- Test "CAT" + random code рд╡рд╛рд▓рд╛ рдЫреЛрдЯрд╛ PNG generate рдХрд░рддрд╛ рд╣реИ (
рд▓рд╛рдЗрд╡: CLI рдмреИрдХрдПрдВрдб рд╕реНрдореЛрдХ (Claude, Gemini, рдпрд╛ рдЕрдиреНрдп рд╕реНрдерд╛рдиреАрдп CLI)
- рдкрд░реАрдХреНрд╖рдг:
src/gateway/gateway-cli-backend.live.test.ts - рд▓рдХреНрд╖реНрдп: рдЖрдкрдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧ рдХреЛ рдЫреБрдП рдмрд┐рдирд╛, рдХрд┐рд╕реА рд╕реНрдерд╛рдиреАрдп CLI рдмреИрдХрдПрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Gateway + рдПрдЬреЗрдВрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ред
- рдмреИрдХрдПрдВрдб-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдореЛрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдкрдиреЗ рд╕реНрд╡рд╛рдореА extension рдХреА
cli-backend.tsрдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рд░рд╣рддреЗ рд╣реИрдВред - рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:
pnpm test:live(рдпрд╛ Vitest рдХреЛ рд╕реАрдзреЗ рдЪрд▓рд╛рдиреЗ рдкрд░OPENCLAW_LIVE_TEST=1)OPENCLAW_LIVE_CLI_BACKEND=1
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ:
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рджрд╛рддрд╛/рдореЙрдбрд▓:
claude-cli/claude-sonnet-4-6 - рдХрдорд╛рдВрдб/args/рдЫрд╡рд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реНрд╡рд╛рдореА CLI рдмреИрдХрдПрдВрдб plugin рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕реЗ рдЖрддреЗ рд╣реИрдВред
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рджрд╛рддрд╛/рдореЙрдбрд▓:
- рдУрд╡рд░рд░рд╛рдЗрдб (рд╡реИрдХрд▓реНрдкрд┐рдХ):
OPENCLAW_LIVE_CLI_BACKEND_MODEL="claude-cli/claude-sonnet-4-6"OPENCLAW_LIVE_CLI_BACKEND_COMMAND="/full/path/to/claude"OPENCLAW_LIVE_CLI_BACKEND_ARGS='["-p","--output-format","json"]'OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=1рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЫрд╡рд┐ рдЕрдЯреИрдЪрдореЗрдВрдЯ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП (рдкрд╛рде рдкреНрд░реЙрдореНрдкреНрдЯ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ)ред Docker рд░реЗрд╕рд┐рдкреА рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдиреБрд░реЛрдз рди рдХрд┐рдП рдЬрд╛рдиреЗ рддрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж рд░рд╣рддрд╛ рд╣реИредOPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image"рдЫрд╡рд┐ рдлрд╝рд╛рдЗрд▓ рдкрд╛рде рдХреЛ рдкреНрд░реЙрдореНрдкреНрдЯ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп CLI args рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПредOPENCLAW_LIVE_CLI_BACKEND_IMAGE_MODE="repeat"(рдпрд╛"list") рдпрд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐IMAGE_ARGрд╕реЗрдЯ рд╣реЛрдиреЗ рдкрд░ рдЫрд╡рд┐ args рдХреИрд╕реЗ рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВредOPENCLAW_LIVE_CLI_BACKEND_RESUME_PROBE=1рджреВрд╕рд░рд╛ turn рднреЗрдЬрдиреЗ рдФрд░ resume flow рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПредOPENCLAW_LIVE_CLI_BACKEND_MODEL_SWITCH_PROBE=1Claude Sonnet -> Opus рдЙрд╕реА-рд╕рддреНрд░ continuity probe рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдм рдЪрдпрдирд┐рдд рдореЙрдбрд▓ switch target рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реЛред Docker рд░реЗрд╕рд┐рдкреА рдореЗрдВ рдпрд╣ aggregate reliability рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж рд░рд╣рддрд╛ рд╣реИредOPENCLAW_LIVE_CLI_BACKEND_MCP_PROBE=1MCP/tool loopback probe рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдПред Docker рд░реЗрд╕рд┐рдкреА рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдиреБрд░реЛрдз рди рдХрд┐рдП рдЬрд╛рдиреЗ рддрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж рд░рд╣рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг:
OPENCLAW_LIVE_CLI_BACKEND=1 \ OPENCLAW_LIVE_CLI_BACKEND_MODEL="claude-cli/claude-sonnet-4-6" \ pnpm test:live src/gateway/gateway-cli-backend.live.test.tsрд╕рд╕реНрддрд╛ Gemini MCP рдХреЙрдиреНрдлрд╝рд┐рдЧ рд╕реНрдореЛрдХ:
OPENCLAW_LIVE_TEST=1 \ pnpm test:live src/agents/cli-runner/bundle-mcp.gemini.live.test.tsрдпрд╣ Gemini рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЛ рдирд╣реАрдВ рдХрд╣рддрд╛ред рдпрд╣ рд╡рд╣реА рд╕рд┐рд╕реНрдЯрдо
settings рд▓рд┐рдЦрддрд╛ рд╣реИ рдЬреЛ OpenClaw Gemini рдХреЛ рджреЗрддрд╛ рд╣реИ, рдлрд┐рд░ gemini --debug mcp list рдЪрд▓рд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рд╛рдмрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐
рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ transport: "streamable-http" рд╕рд░реНрд╡рд░ Gemini рдХреЗ HTTP MCP
shape рдореЗрдВ normalize рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕реНрдерд╛рдиреАрдп streamable-HTTP MCP рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
Docker рд░реЗрд╕рд┐рдкреА:
pnpm test:docker:live-cli-backendрдПрдХрд▓-рдкреНрд░рджрд╛рддрд╛ Docker рд░реЗрд╕рд┐рдкреА:
pnpm test:docker:live-cli-backend:claudepnpm test:docker:live-cli-backend:claude-subscriptionpnpm test:docker:live-cli-backend:geminiрдиреЛрдЯреНрд╕:
- Docker runner
scripts/test-live-cli-backend-docker.shрдкрд░ рд░рд╣рддрд╛ рд╣реИред - рдпрд╣ repo Docker image рдХреЗ рдЕрдВрджрд░ non-root
nodeрдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ live CLI-backend smoke рдЪрд▓рд╛рддрд╛ рд╣реИред - рдпрд╣ рд╕реНрд╡рд╛рдореА extension рд╕реЗ CLI smoke metadata resolve рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ matching Linux CLI package (
@anthropic-ai/claude-codeрдпрд╛@google/gemini-cli) рдХреЛOPENCLAW_DOCKER_CLI_TOOLS_DIRрдкрд░ cached writable prefix рдореЗрдВ install рдХрд░рддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ:~/.cache/openclaw/docker-cli-tools)ред pnpm test:docker:live-cli-backend:claude-subscriptionрдХреЗ рд▓рд┐рдПclaudeAiOauth.subscriptionTypeрд╡рд╛рд▓реЗ~/.claude/.credentials.jsonрдпрд╛claude setup-tokenрд╕реЗCLAUDE_CODE_OAUTH_TOKENрдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ portable Claude Code subscription OAuth рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкрд╣рд▓реЗ Docker рдореЗрдВ рд╕реАрдзреЗclaude -pрд╕рд╛рдмрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ Anthropic API-key env vars рдХреЛ preserve рдХрд┐рдП рдмрд┐рдирд╛ рджреЛ Gateway CLI-backend turns рдЪрд▓рд╛рддрд╛ рд╣реИред рдпрд╣ subscription lane Claude MCP/tool рдФрд░ image probes рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ disable рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ signed-in subscription рдХреА usage limits consume рдХрд░рддрд╛ рд╣реИ рдФрд░ Anthropic, OpenClaw release рдХреЗ рдмрд┐рдирд╛ Claude Agent SDK /claude -pbilling рдФрд░ rate-limit behavior рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред- live CLI-backend smoke рдЕрдм Claude рдФрд░ Gemini рдХреЗ рд▓рд┐рдП рд╡рд╣реА end-to-end flow exercise рдХрд░рддрд╛ рд╣реИ: text turn, image classification turn, рдлрд┐рд░ gateway CLI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд MCP
crontool callред - Claude рдХрд╛ default smoke session рдХреЛ Sonnet рд╕реЗ Opus рдореЗрдВ patch рднреА рдХрд░рддрд╛ рд╣реИ рдФрд░ verifies рдХрд░рддрд╛ рд╣реИ рдХрд┐ resumed session рдХреЛ рдкрд╣рд▓реЗ рдХрд╛ note рдЕрдм рднреА рдпрд╛рдж рд╣реИред
рд▓рд╛рдЗрд╡: APNs HTTP/2 proxy reachability
- рдкрд░реАрдХреНрд╖рдг:
src/infra/push-apns-http2.live.test.ts - рд▓рдХреНрд╖реНрдп: рд╕реНрдерд╛рдиреАрдп HTTP CONNECT proxy рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Apple рдХреЗ sandbox APNs endpoint рддрдХ tunnel рдХрд░рдирд╛, APNs HTTP/2 validation request рднреЗрдЬрдирд╛, рдФрд░ assert рдХрд░рдирд╛ рдХрд┐ Apple рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ
403 InvalidProviderTokenresponse proxy path рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╛рдкрд╕ рдЖрддреА рд╣реИред - рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_APNS_REACHABILITY=1 pnpm test:live src/infra/push-apns-http2.live.test.ts
- рд╡реИрдХрд▓реНрдкрд┐рдХ timeout:
OPENCLAW_LIVE_APNS_TIMEOUT_MS=30000
рд▓рд╛рдЗрд╡: ACP bind smoke (/acp spawn ... --bind here)
- рдкрд░реАрдХреНрд╖рдг:
src/gateway/gateway-acp-bind.live.test.ts - рд▓рдХреНрд╖реНрдп: рд▓рд╛рдЗрд╡ ACP рдПрдЬреЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ ACP conversation-bind рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдирд╛:
/acp spawn <agent> --bind hereрднреЗрдЬреЗрдВ- рд╕рд┐рдВрдереЗрдЯрд┐рдХ message-channel рдмрд╛рддрдЪреАрдд рдХреЛ рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ bind рдХрд░реЗрдВ
- рдЙрд╕реА рдмрд╛рддрдЪреАрдд рдкрд░ рд╕рд╛рдорд╛рдиреНрдп follow-up рднреЗрдЬреЗрдВ
- рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ follow-up bound ACP session transcript рдореЗрдВ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ
- рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:
pnpm test:live src/gateway/gateway-acp-bind.live.test.tsOPENCLAW_LIVE_ACP_BIND=1
- рдбрд┐рдлреЙрд▓реНрдЯ:
- Docker рдореЗрдВ ACP рдПрдЬреЗрдВрдЯ:
claude,codex,gemini - рд╕реАрдзреЗ
pnpm test:live ...рдХреЗ рд▓рд┐рдП ACP рдПрдЬреЗрдВрдЯ:claude - рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЪреИрдирд▓: Slack DM-рд╢реИрд▓реА рдмрд╛рддрдЪреАрдд рд╕рдВрджрд░реНрдн
- ACP рдмреИрдХрдПрдВрдб:
acpx
- Docker рдореЗрдВ ACP рдПрдЬреЗрдВрдЯ:
- рдУрд╡рд░рд░рд╛рдЗрдб:
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
- рдиреЛрдЯреНрд╕:
- рдпрд╣ lane gateway
chat.sendsurface рдХрд╛ рдЙрдкрдпреЛрдЧ admin-only рд╕рд┐рдВрдереЗрдЯрд┐рдХ originating-route fields рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдкрд░реАрдХреНрд╖рдг message-channel рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝ рд╕рдХреЗрдВ рдмрд┐рдирд╛ рдмрд╛рд╣рд░реА delivery рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдХрд┐рдПред - рдЬрдм
OPENCLAW_LIVE_ACP_BIND_AGENT_COMMANDрд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛, рдкрд░реАрдХреНрд╖рдг рдЪреБрдиреЗ рдЧрдП ACP harness agent рдХреЗ рд▓рд┐рдП embeddedacpxPlugin рдХреА built-in agent registry рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред - Bound-session cron MCP creation рдбрд┐рдлреЙрд▓реНрдЯ рд░реВрдк рд╕реЗ best-effort рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рд╣рд░реА ACP harnesses bind/image proof рдкрд╛рд╕ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж MCP calls cancel рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рдЙрд╕ post-bind cron probe рдХреЛ strict рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1рд╕реЗрдЯ рдХрд░реЗрдВред
- рдпрд╣ lane gateway
рдЙрджрд╛рд╣рд░рдг:
OPENCLAW_LIVE_ACP_BIND=1 \ OPENCLAW_LIVE_ACP_BIND_AGENT=claude \ pnpm test:live src/gateway/gateway-acp-bind.live.test.tsDocker рд╡рд┐рдзрд┐:
pnpm test:docker:live-acp-bindрдПрдХрд▓-рдПрдЬреЗрдВрдЯ Docker рд╡рд┐рдзрд┐рдпрд╛рдВ:
pnpm test:docker:live-acp-bind:claudepnpm test:docker:live-acp-bind:codexpnpm test:docker:live-acp-bind:droidpnpm test:docker:live-acp-bind:geminipnpm test:docker:live-acp-bind:opencodeDocker рдиреЛрдЯреНрд╕:
- Docker runner
scripts/test-live-acp-bind-docker.shрдкрд░ рд░рд╣рддрд╛ рд╣реИред - рдбрд┐рдлреЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ ACP bind smoke рдХреЛ aggregate live CLI agents рдХреЗ рд╡рд┐рд░реБрджреНрдз рдХреНрд░рдо рдореЗрдВ рдЪрд▓рд╛рддрд╛ рд╣реИ:
claude,codex, рдлрд┐рд░geminiред - matrix рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
OPENCLAW_LIVE_ACP_BIND_AGENTS=claude,OPENCLAW_LIVE_ACP_BIND_AGENTS=codex,OPENCLAW_LIVE_ACP_BIND_AGENTS=droid,OPENCLAW_LIVE_ACP_BIND_AGENTS=gemini, рдпрд╛OPENCLAW_LIVE_ACP_BIND_AGENTS=opencodeрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред - рдпрд╣ matching CLI auth material рдХреЛ container рдореЗрдВ stage рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдЕрдиреБрд░реЛрдзрд┐рдд live CLI (
@anthropic-ai/claude-code,@openai/codex, Factory Droid viahttps://app.factory.ai/cli,@google/gemini-cli, рдпрд╛opencode-ai) missing рд╣реЛрдиреЗ рдкрд░ install рдХрд░рддрд╛ рд╣реИред ACP backend рд╕реНрд╡рдпрдВ officialacpxPlugin рд╕реЗ embeddedacpx/runtimepackage рд╣реИред - Droid Docker variant settings рдХреЗ рд▓рд┐рдП
~/.factorystage рдХрд░рддрд╛ рд╣реИ,FACTORY_API_KEYforward рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕ API key рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ local Factory OAuth/keyring auth container рдореЗрдВ portable рдирд╣реАрдВ рд╣реИред рдпрд╣ ACPX рдХреА built-indroid exec --output-format acpregistry entry рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред - OpenCode Docker variant рдПрдХ strict single-agent regression lane рд╣реИред рдпрд╣
OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL(рдбрд┐рдлреЙрд▓реНрдЯopencode/kimi-k2.6) рд╕реЗ temporaryOPENCODE_CONFIG_CONTENTdefault model рд▓рд┐рдЦрддрд╛ рд╣реИ, рдФрд░pnpm test:docker:live-acp-bind:opencodegeneric post-bind skip рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп bound assistant transcript рдорд╛рдВрдЧрддрд╛ рд╣реИред - Direct
acpxCLI calls Gateway рдХреЗ рдмрд╛рд╣рд░ behavior compare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ manual/workaround path рд╣реИрдВред Docker ACP bind smoke OpenClaw рдХреЗ embeddedacpxruntime backend рдХреЛ exercise рдХрд░рддрд╛ рд╣реИред
рд▓рд╛рдЗрд╡: Codex app-server harness smoke
- рд▓рдХреНрд╖реНрдп: рд╕рд╛рдорд╛рдиреНрдп gateway
agentmethod рдХреЗ рдЬрд░рд┐рдП Plugin-owned Codex harness рдХреЛ рдорд╛рдиреНрдп рдХрд░рдирд╛:- bundled
codexPlugin load рдХрд░реЗрдВ openai/gpt-5.5рдЪреБрдиреЗрдВ, рдЬреЛ OpenAI agent turns рдХреЛ рдбрд┐рдлреЙрд▓реНрдЯ рд░реВрдк рд╕реЗ Codex рдХреЗ рдЬрд░рд┐рдП route рдХрд░рддрд╛ рд╣реИ- Codex harness selected рд░рдЦрддреЗ рд╣реБрдП
openai/gpt-5.5рдХреЛ рдкрд╣рд▓рд╛ gateway agent turn рднреЗрдЬреЗрдВ - рдЙрд╕реА OpenClaw session рдХреЛ рджреВрд╕рд░рд╛ turn рднреЗрдЬреЗрдВ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ app-server thread resume рдХрд░ рд╕рдХрддрд╛ рд╣реИ
- рдЙрд╕реА gateway command
path рдХреЗ рдЬрд░рд┐рдП
/codex statusрдФрд░/codex modelsрдЪрд▓рд╛рдПрдВ - рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рджреЛ Guardian-reviewed escalated shell probes рдЪрд▓рд╛рдПрдВ: рдПрдХ benign command рдЬрд┐рд╕реЗ approved рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ fake-secret upload рдЬрд┐рд╕реЗ denied рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ agent рд╡рд╛рдкрд╕ рдкреВрдЫреЗ
- bundled
- рдкрд░реАрдХреНрд╖рдг:
src/gateway/gateway-codex-harness.live.test.ts - рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:
OPENCLAW_LIVE_CODEX_HARNESS=1 - рдбрд┐рдлреЙрд▓реНрдЯ model:
openai/gpt-5.5 - рд╡реИрдХрд▓реНрдкрд┐рдХ image probe:
OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1 - рд╡реИрдХрд▓реНрдкрд┐рдХ MCP/tool probe:
OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1 - рд╡реИрдХрд▓реНрдкрд┐рдХ Guardian probe:
OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1 - smoke provider/model
agentRuntime.id: "codex"рдХреЛ force рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ broken Codex harness OpenClaw рдкрд░ silently fallback рдХрд░рдХреЗ pass рди рд╣реЛ рд╕рдХреЗред - Auth: local Codex subscription login рд╕реЗ Codex app-server authред Docker
smokes рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдкрд░ non-Codex probes рдХреЗ рд▓рд┐рдП
OPENAI_API_KEYрднреА provide рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ copied~/.codex/auth.jsonрдФрд░~/.codex/config.tomlред
рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдзрд┐:
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.tsDocker рд╡рд┐рдзрд┐:
pnpm test:docker:live-codex-harnessDocker рдиреЛрдЯреНрд╕:
- Docker runner
scripts/test-live-codex-harness-docker.shрдкрд░ рд░рд╣рддрд╛ рд╣реИред - рдпрд╣
OPENAI_API_KEYpass рдХрд░рддрд╛ рд╣реИ, рдореМрдЬреВрдж рд╣реЛрдиреЗ рдкрд░ Codex CLI auth files copy рдХрд░рддрд╛ рд╣реИ,@openai/codexрдХреЛ writable mounted npm prefix рдореЗрдВ install рдХрд░рддрд╛ рд╣реИ, source tree stage рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдХреЗрд╡рд▓ Codex-harness live test рдЪрд▓рд╛рддрд╛ рд╣реИред - Docker image, MCP/tool, рдФрд░ Guardian probes рдХреЛ рдбрд┐рдлреЙрд▓реНрдЯ рд░реВрдк рд╕реЗ enable рдХрд░рддрд╛ рд╣реИред рдЬрдм рдЖрдкрдХреЛ narrow debug
run рдЪрд╛рд╣рд┐рдП, рддрдм
OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0рдпрд╛OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0рдпрд╛OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0рд╕реЗрдЯ рдХрд░реЗрдВред - Docker рд╡рд╣реА explicit Codex runtime config рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП legacy aliases рдпрд╛ OpenClaw fallback Codex harness regression рдХреЛ рдЫрд┐рдкрд╛ рдирд╣реАрдВ рд╕рдХрддреЗред
рдЕрдиреБрд╢рдВрд╕рд┐рдд live рд╡рд┐рдзрд┐рдпрд╛рдВ
Narrow, explicit allowlists рд╕рдмрд╕реЗ рддреЗрдЬ рдФрд░ least flaky рд╣реИрдВ:
-
Single model, direct (рдХреЛрдИ gateway рдирд╣реАрдВ):
OPENCLAW_LIVE_MODELS="openai/gpt-5.5" pnpm test:live src/agents/models.profiles.live.test.ts
-
Small-model direct profile:
OPENCLAW_LIVE_MODELS=small pnpm test:live src/agents/models.profiles.live.test.ts
-
Small-model gateway profile:
OPENCLAW_LIVE_GATEWAY_MODELS=small pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
-
Ollama Cloud API smoke:
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_OLLAMA=1 OPENCLAW_LIVE_OLLAMA_BASE_URL=https://ollama.com OPENCLAW_LIVE_OLLAMA_MODEL=glm-5.1:cloud OPENCLAW_LIVE_OLLAMA_WEB_SEARCH=0 pnpm test:live -- extensions/ollama/ollama.live.test.ts
-
Single model, gateway smoke:
OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
-
рдХрдИ providers рдореЗрдВ tool calling:
OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5,anthropic/claude-opus-4-6,google/gemini-3-flash-preview,deepseek/deepseek-v4-flash,zai/glm-5.1,minimax/MiniMax-M3" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
-
Z.AI Coding Plan GLM-5.2 direct smoke:
ZAI_CODING_LIVE_TEST=1 pnpm test:live src/agents/zai.live.test.ts
-
Google focus (Gemini API key + Antigravity):
- Gemini (API key):
OPENCLAW_LIVE_GATEWAY_MODELS="google/gemini-3-flash-preview" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts - Antigravity (OAuth):
OPENCLAW_LIVE_GATEWAY_MODELS="google-antigravity/claude-opus-4-6-thinking,google-antigravity/gemini-3-pro-high" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
- Gemini (API key):
-
Google adaptive thinking smoke:
- Gemini 3 dynamic default:
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 - Gemini 2.5 dynamic budget:
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
- Gemini 3 dynamic default:
рдиреЛрдЯреНрд╕:
google/...Gemini API (API key) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИредgoogle-antigravity/...Antigravity OAuth bridge (Cloud Code Assist-style agent endpoint) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИредgoogle-gemini-cli/...рдЖрдкрдХреА machine рдкрд░ local Gemini CLI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдЕрд▓рдЧ auth + tooling quirks)ред- Gemini API рдмрдирд╛рдо Gemini CLI:
- API: OpenClaw HTTP рдХреЗ рдЬрд░рд┐рдП Google's hosted Gemini API call рдХрд░рддрд╛ рд╣реИ (API key / profile auth); рдЕрдзрд┐рдХрд╛рдВрд╢ users "Gemini" рд╕реЗ рдпрд╣реА рдорддрд▓рдм рд▓реЗрддреЗ рд╣реИрдВред
- CLI: OpenClaw local
geminibinary рдХреЛ shell out рдХрд░рддрд╛ рд╣реИ; рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ auth рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЕрд▓рдЧ behavior рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ (streaming/tool support/version skew)ред
рд▓рд╛рдЗрд╡: model matrix (рд╣рдо рдХреНрдпрд╛ cover рдХрд░рддреЗ рд╣реИрдВ)
рдХреЛрдИ fixed "CI model list" рдирд╣реАрдВ рд╣реИ (live opt-in рд╣реИ), рд▓реЗрдХрд┐рди рдпреЗ dev machine рдкрд░ keys рдХреЗ рд╕рд╛рде рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ cover рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд models рд╣реИрдВред
Modern smoke set (tool calling + image)
рдпрд╣ "common models" run рд╣реИ рдЬрд┐рд╕рдХреЗ working рд░рд╣рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд╣реИ:
- OpenAI (non-Codex):
openai/gpt-5.5 - OpenAI ChatGPT/Codex OAuth:
openai/gpt-5.5 - Anthropic:
anthropic/claude-opus-4-6(рдпрд╛anthropic/claude-sonnet-4-6) - Google (Gemini API):
google/gemini-3.1-pro-previewрдФрд░google/gemini-3-flash-preview(рдкреБрд░рд╛рдиреЗ Gemini 2.x models рд╕реЗ рдмрдЪреЗрдВ) - Google (Antigravity):
google-antigravity/claude-opus-4-6-thinkingрдФрд░google-antigravity/gemini-3-flash - DeepSeek:
deepseek/deepseek-v4-flashрдФрд░deepseek/deepseek-v4-pro - Z.AI (GLM):
zai/glm-5.1(general API) рдпрд╛zai/glm-5.2(Coding Plan) - MiniMax:
minimax/MiniMax-M3
tools + image рдХреЗ рд╕рд╛рде gateway smoke рдЪрд▓рд╛рдПрдВ:
OPENCLAW_LIVE_GATEWAY_MODELS="openai/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-M3" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
Baseline: tool calling (Read + рд╡реИрдХрд▓реНрдкрд┐рдХ Exec)
рд╣рд░ provider family рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЪреБрдиреЗрдВ:
- OpenAI:
openai/gpt-5.5 - Anthropic:
anthropic/claude-opus-4-6(рдпрд╛anthropic/claude-sonnet-4-6) - Google:
google/gemini-3-flash-preview(рдпрд╛google/gemini-3.1-pro-preview) - DeepSeek:
deepseek/deepseek-v4-flash - Z.AI (GLM):
zai/glm-5.1(general API) рдпрд╛zai/glm-5.2(Coding Plan) - MiniMax:
minimax/MiniMax-M3
рд╡реИрдХрд▓реНрдкрд┐рдХ рдЕрддрд┐рд░рд┐рдХреНрдд coverage (рд╣реЛ рддреЛ рдЕрдЪреНрдЫрд╛):
- xAI:
xai/grok-4.3(рдпрд╛ latest available) - Mistral:
mistral/тАж (рдЖрдкрдиреЗ enable рдХрд┐рдпрд╛ рд╣реБрдЖ рдПрдХ "tools" capable model рдЪреБрдиреЗрдВ) - Cerebras:
cerebras/тАж (рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ access рд╣реИ) - LM Studio:
lmstudio/тАж (local; tool calling API mode рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ)
Vision: image send (attachment тЖТ multimodal message)
image probe exercise рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП OPENCLAW_LIVE_GATEWAY_MODELS рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ image-capable model рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ (Claude/Gemini/OpenAI vision-capable variants, рдЖрджрд┐)ред
Aggregators / alternate gateways
рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ keys enabled рд╣реИрдВ, рддреЛ рд╣рдо рдЗрдирдХреЗ рдЬрд░рд┐рдП testing рднреА support рдХрд░рддреЗ рд╣реИрдВ:
- OpenRouter:
openrouter/...(рд╕реИрдХрдбрд╝реЛрдВ models; tool+image capable candidates рдвреВрдВрдврдиреЗ рдХреЗ рд▓рд┐рдПopenclaw models scanрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ) - OpenCode: Zen рдХреЗ рд▓рд┐рдП
opencode/...рдФрд░ Go рдХреЗ рд▓рд┐рдПopencode-go/...(auth viaOPENCODE_API_KEY/OPENCODE_ZEN_API_KEY)
рдФрд░ providers рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк live matrix рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ creds/config рд╣реИрдВ):
- рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд:
openai,anthropic,google,google-vertex,google-antigravity,google-gemini-cli,zai,openrouter,opencode,opencode-go,xai,groq,cerebras,mistral,github-copilot models.providersрдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ (рдХрд╕реНрдЯрдо рдПрдВрдбрдкреЙрдЗрдВрдЯ):minimax(рдХреНрд▓рд╛рдЙрдб/API), рд╕рд╛рде рд╣реА рдХреЛрдИ рднреА OpenAI/Anthropic-рд╕рдВрдЧрдд рдкреНрд░реЙрдХреНрд╕реА (LM Studio, vLLM, LiteLLM, рдЖрджрд┐)
рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ (рдХрднреА рдХрдорд┐рдЯ рди рдХрд░реЗрдВ)
рд▓рд╛рдЗрд╡ рдкрд░реАрдХреНрд╖рдг рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдЙрд╕реА рддрд░рд╣ рдЦреЛрдЬрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ CLI рдХрд░рддрд╛ рд╣реИред рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкреНрд░рднрд╛рд╡:
-
рдпрджрд┐ CLI рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рд▓рд╛рдЗрд╡ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╡рд╣реА рдХреБрдВрдЬрд┐рдпрд╛рдВ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдПред
-
рдпрджрд┐ рдХреЛрдИ рд▓рд╛рдЗрд╡ рдкрд░реАрдХреНрд╖рдг "no creds" рдХрд╣рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реА рддрд░рд╣ рдбреАрдмрдЧ рдХрд░реЗрдВ рдЬреИрд╕реЗ рдЖрдк
openclaw models list/ рдореЙрдбрд▓ рдЪрдпрди рдХреЛ рдбреАрдмрдЧ рдХрд░реЗрдВрдЧреЗред -
рдкреНрд░рддрд┐-рдПрдЬреЗрдВрдЯ auth рдкреНрд░реЛрдлрд╛рдЗрд▓:
~/.openclaw/agents/<agentId>/agent/auth-profiles.json(рд▓рд╛рдЗрд╡ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ "profile keys" рдХрд╛ рдЕрд░реНрде рдпрд╣реА рд╣реИ) -
рдХреЙрдиреНрдлрд╝рд┐рдЧ:
~/.openclaw/openclaw.json(рдпрд╛OPENCLAW_CONFIG_PATH) -
рд▓реЗрдЧреЗрд╕реА рд╕реНрдЯреЗрдЯ dir:
~/.openclaw/credentials/(рдореМрдЬреВрдж рд╣реЛрдиреЗ рдкрд░ staged live home рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп profile-key store рдирд╣реАрдВ рд╣реИ) -
рд▓рд╛рдЗрд╡ рд╕реНрдерд╛рдиреАрдп рд░рди рд╕рдХреНрд░рд┐рдп рдХреЙрдиреНрдлрд╝рд┐рдЧ, рдкреНрд░рддрд┐-рдПрдЬреЗрдВрдЯ
auth-profiles.jsonрдлрд╝рд╛рдЗрд▓реЗрдВ, рд▓реЗрдЧреЗрд╕реАcredentials/, рдФрд░ рд╕рдорд░реНрдерд┐рдд рдмрд╛рд╣рд░реА CLI auth dirs рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЕрд╕реНрдерд╛рдпреА test home рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ; staged live homesworkspace/рдФрд░sandboxes/рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рдФрд░agents.*.workspace/agentDirpath overrides рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ probes рдЖрдкрдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ host workspace рд╕реЗ рджреВрд░ рд░рд╣реЗрдВред
рдпрджрд┐ рдЖрдк env keys рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдиреАрдп рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ export рдХрд░реЗрдВ рдпрд╛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП
Docker runners рдХреЛ рд╕реНрдкрд╖реНрдЯ OPENCLAW_PROFILE_FILE рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
Deepgram рд▓рд╛рдЗрд╡ (рдСрдбрд┐рдпреЛ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди)
- рдкрд░реАрдХреНрд╖рдг:
extensions/deepgram/audio.live.test.ts - рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:
DEEPGRAM_API_KEY=... DEEPGRAM_LIVE_TEST=1 pnpm test:live extensions/deepgram/audio.live.test.ts
BytePlus coding plan рд▓рд╛рдЗрд╡
- рдкрд░реАрдХреНрд╖рдг:
extensions/byteplus/live.test.ts - рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:
BYTEPLUS_API_KEY=... BYTEPLUS_LIVE_TEST=1 pnpm test:live extensions/byteplus/live.test.ts - рд╡реИрдХрд▓реНрдкрд┐рдХ рдореЙрдбрд▓ override:
BYTEPLUS_CODING_MODEL=ark-code-latest
ComfyUI workflow media рд▓рд╛рдЗрд╡
- рдкрд░реАрдХреНрд╖рдг:
extensions/comfy/comfy.live.test.ts - рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:
OPENCLAW_LIVE_TEST=1 COMFY_LIVE_TEST=1 pnpm test:live -- extensions/comfy/comfy.live.test.ts - рджрд╛рдпрд░рд╛:
- bundled comfy image, video, рдФрд░
music_generatepaths рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реИ - рдЬрдм рддрдХ
plugins.entries.comfy.config.<capability>рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рди рд╣реЛ, рд╣рд░ capability рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ - comfy workflow submission, polling, downloads, рдпрд╛ Plugin registration рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧреА
- bundled comfy image, video, рдФрд░
рдЗрдореЗрдЬ рдЬрдирд░реЗрд╢рди рд▓рд╛рдЗрд╡
- рдкрд░реАрдХреНрд╖рдг:
test/image-generation.runtime.live.test.ts - рдХрдорд╛рдВрдб:
pnpm test:live test/image-generation.runtime.live.test.ts - Harness:
pnpm test:live:media image - рджрд╛рдпрд░рд╛:
- рд╣рд░ registered image-generation provider Plugin рдХреЛ enumerate рдХрд░рддрд╛ рд╣реИ
- probing рд╕реЗ рдкрд╣рд▓реЗ рдкрд╣рд▓реЗ рд╕реЗ exported provider env vars рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ stored auth profiles рд╕реЗ рдкрд╣рд▓реЗ live/env API keys рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐
auth-profiles.jsonрдореЗрдВ stale test keys рд╡рд╛рд╕реНрддрд╡рд┐рдХ shell credentials рдХреЛ mask рди рдХрд░реЗрдВ - рдЬрд┐рди providers рдХреЗ рдкрд╛рд╕ usable auth/profile/model рдирд╣реАрдВ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ
- рд╣рд░ configured provider рдХреЛ shared image-generation runtime рд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реИ:
<provider>:generate<provider>:editрдЬрдм provider edit support рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ
- рдХрд╡рд░ рдХрд┐рдП рдЧрдП рдореМрдЬреВрджрд╛ bundled providers:
deepinfrafalgoogleminimaxopenaiopenroutervydraxai
- рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реАрдорд┐рддрдХрд░рдг:
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"
- рд╡реИрдХрд▓реНрдкрд┐рдХ auth рд╡реНрдпрд╡рд╣рд╛рд░:
- profile-store auth рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдФрд░ env-only overrides рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1
- profile-store auth рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдФрд░ env-only overrides рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
shipped CLI path рдХреЗ рд▓рд┐рдП, provider/runtime live
test рдкрд╛рд╕ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ infer smoke рдЬреЛрдбрд╝реЗрдВ:
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_INFER_CLI_TEST=1 pnpm test:live -- test/image-generation.infer-cli.live.test.tsopenclaw infer image providers --jsonopenclaw 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рдпрд╣ CLI argument parsing, config/default-agent resolution, bundled Plugin activation, shared image-generation runtime, рдФрд░ live provider request рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред Plugin dependencies runtime load рд╕реЗ рдкрд╣рд▓реЗ рдореМрдЬреВрдж рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд╣реИред
рдореНрдпреВрдЬрд╝рд┐рдХ рдЬрдирд░реЗрд╢рди рд▓рд╛рдЗрд╡
- рдкрд░реАрдХреНрд╖рдг:
extensions/music-generation-providers.live.test.ts - рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:
OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/music-generation-providers.live.test.ts - Harness:
pnpm test:live:media music - рджрд╛рдпрд░рд╛:
- shared bundled music-generation provider path рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реИ
- рдлрд┐рд▓рд╣рд╛рд▓ Google рдФрд░ MiniMax рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ
- probing рд╕реЗ рдкрд╣рд▓реЗ рдкрд╣рд▓реЗ рд╕реЗ exported provider env vars рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ stored auth profiles рд╕реЗ рдкрд╣рд▓реЗ live/env API keys рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐
auth-profiles.jsonрдореЗрдВ stale test keys рд╡рд╛рд╕реНрддрд╡рд┐рдХ shell credentials рдХреЛ mask рди рдХрд░реЗрдВ - рдЬрд┐рди providers рдХреЗ рдкрд╛рд╕ usable auth/profile/model рдирд╣реАрдВ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ
- рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рджреЛрдиреЛрдВ рдШреЛрд╖рд┐рдд runtime modes рдЪрд▓рд╛рддрд╛ рд╣реИ:
- prompt-only input рдХреЗ рд╕рд╛рде
generate - рдЬрдм provider
capabilities.edit.enabledрдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рддрдмedit
- prompt-only input рдХреЗ рд╕рд╛рде
- рдореМрдЬреВрджрд╛ shared-lane coverage:
google:generate,editminimax:generatecomfy: рдЕрд▓рдЧ Comfy live file, рдпрд╣ shared sweep рдирд╣реАрдВ
- рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реАрдорд┐рддрдХрд░рдг:
OPENCLAW_LIVE_MUSIC_GENERATION_PROVIDERS="google,minimax"OPENCLAW_LIVE_MUSIC_GENERATION_MODELS="google/lyria-3-clip-preview,minimax/music-2.6"
- рд╡реИрдХрд▓реНрдкрд┐рдХ auth рд╡реНрдпрд╡рд╣рд╛рд░:
- profile-store auth рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдФрд░ env-only overrides рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1
- profile-store auth рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдФрд░ env-only overrides рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрд╢рди рд▓рд╛рдЗрд╡
- рдкрд░реАрдХреНрд╖рдг:
extensions/video-generation-providers.live.test.ts - рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:
OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.live.test.ts - Harness:
pnpm test:live:media video - рджрд╛рдпрд░рд╛:
- shared bundled video-generation provider path рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реИ
- release-safe smoke path рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд░рддрд╛ рд╣реИ: non-FAL providers, рд╣рд░ provider рдХреЗ рд▓рд┐рдП рдПрдХ text-to-video request, one-second lobster prompt, рдФрд░
OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MSрд╕реЗ рдкреНрд░рддрд┐-provider operation cap (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ180000) - FAL рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ provider-side queue latency release time рдкрд░ рд╣рд╛рд╡реА рд╣реЛ рд╕рдХрддреА рд╣реИ; рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП
--video-providers falрдпрд╛OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="fal"рдкрд╛рд╕ рдХрд░реЗрдВ - probing рд╕реЗ рдкрд╣рд▓реЗ рдкрд╣рд▓реЗ рд╕реЗ exported provider env vars рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ stored auth profiles рд╕реЗ рдкрд╣рд▓реЗ live/env API keys рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐
auth-profiles.jsonрдореЗрдВ stale test keys рд╡рд╛рд╕реНрддрд╡рд┐рдХ shell credentials рдХреЛ mask рди рдХрд░реЗрдВ - рдЬрд┐рди providers рдХреЗ рдкрд╛рд╕ usable auth/profile/model рдирд╣реАрдВ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓
generateрдЪрд▓рд╛рддрд╛ рд╣реИ - рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рдШреЛрд╖рд┐рдд transform modes рднреА рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП
OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1рд╕реЗрдЯ рдХрд░реЗрдВ:- рдЬрдм provider
capabilities.imageToVideo.enabledрдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ selected provider/model shared sweep рдореЗрдВ buffer-backed local image input рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рддрдмimageToVideo - рдЬрдм provider
capabilities.videoToVideo.enabledрдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ selected provider/model shared sweep рдореЗрдВ buffer-backed local video input рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рддрдмvideoToVideo
- рдЬрдм provider
- shared sweep рдореЗрдВ рдореМрдЬреВрджрд╛ declared-but-skipped
imageToVideoproviders:vydraрдХреНрдпреЛрдВрдХрд┐ bundledveo3text-only рд╣реИ рдФрд░ bundledklingрдХреЛ remote image URL рдЪрд╛рд╣рд┐рдП
- Provider-specific Vydra coverage:
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_VYDRA_VIDEO=1 pnpm test:live -- extensions/vydra/vydra.live.test.ts- рд╡рд╣ рдлрд╝рд╛рдЗрд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ
veo3text-to-video рдФрд░ рдПрдХklinglane рдЪрд▓рд╛рддреА рд╣реИ рдЬреЛ remote image URL fixture рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
- рдореМрдЬреВрджрд╛
videoToVideolive coverage:runwayрдХреЗрд╡рд▓ рддрдм рдЬрдм selected modelrunway/gen4_alephрд╣реЛ
- shared sweep рдореЗрдВ рдореМрдЬреВрджрд╛ declared-but-skipped
videoToVideoproviders:alibaba,qwen,xaiрдХреНрдпреЛрдВрдХрд┐ рдЙрди paths рдХреЛ рдЕрднреА remotehttp(s)/ MP4 reference URLs рдЪрд╛рд╣рд┐рдПgoogleрдХреНрдпреЛрдВрдХрд┐ рдореМрдЬреВрджрд╛ shared Gemini/Veo lane local buffer-backed input рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд╣ path shared sweep рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛openaiрдХреНрдпреЛрдВрдХрд┐ рдореМрдЬреВрджрд╛ shared lane рдореЗрдВ org-specific video edit access guarantees рдирд╣реАрдВ рд╣реИрдВ
- рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реАрдорд┐рддрдХрд░рдг:
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"- FAL рд╕рд╣рд┐рдд default sweep рдореЗрдВ рд╣рд░ provider рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
OPENCLAW_LIVE_VIDEO_GENERATION_SKIP_PROVIDERS="" - aggressive smoke run рдХреЗ рд▓рд┐рдП рд╣рд░ provider operation cap рдШрдЯрд╛рдиреЗ рд╣реЗрддреБ
OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS=60000
- рд╡реИрдХрд▓реНрдкрд┐рдХ auth рд╡реНрдпрд╡рд╣рд╛рд░:
- profile-store auth рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдФрд░ env-only overrides рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1
- profile-store auth рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдФрд░ env-only overrides рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдореАрдбрд┐рдпрд╛ рд▓рд╛рдЗрд╡ Harness
- рдХрдорд╛рдВрдб:
pnpm test:live:media - рдЙрджреНрджреЗрд╢реНрдп:
- shared image, music, рдФрд░ video live suites рдХреЛ рдПрдХ repo-native entrypoint рд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реИ
- рдкрд╣рд▓реЗ рд╕реЗ exported provider env vars рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╣рд░ suite рдХреЛ рдЙрди providers рддрдХ auto-narrow рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдЕрднреА usable auth рд╣реИ
scripts/test-live.mjsрдХреЛ reuse рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП Heartbeat рдФрд░ quiet-mode рд╡реНрдпрд╡рд╣рд╛рд░ consistent рд░рд╣рддреЗ рд╣реИрдВ
- рдЙрджрд╛рд╣рд░рдг:
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
рд╕рдВрдмрдВрдзрд┐рдд
- рдкрд░реАрдХреНрд╖рдг - unit, integration, QA, рдФрд░ Docker suites