Testing

рдкрд░реАрдХреНрд╖рдг: рд▓рд╛рдЗрд╡ рд╕реБрдЗрдЯреНрд╕

рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд, QA рд░рдирд░, рдпреВрдирд┐рдЯ/рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рд╕реБрдЗрдЯ, рдФрд░ Docker рдлреНрд▓реЛ рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ Testingред рдпрд╣ рдкреЗрдЬ live (рдиреЗрдЯрд╡рд░реНрдХ-рд╕реНрдкрд░реНрд╢реА) рдЯреЗрд╕реНрдЯ рд╕реБрдЗрдЯ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ: рдореЙрдбрд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕, CLI рдмреИрдХрдПрдВрдб, ACP, рдФрд░ рдореАрдбрд┐рдпрд╛-рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ live рдЯреЗрд╕реНрдЯ, рд╕рд╛рде рд╣реА рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╣реИрдВрдбрд▓рд┐рдВрдЧред

Live: рд╕реНрдерд╛рдиреАрдп рд╕реНрдореЛрдХ рдХрдорд╛рдВрдб

рддрджрд░реНрде live рдЬрд╛рдВрдЪреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХреБрдВрдЬреА рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдХрд░реЗрдВред

рд╕реБрд░рдХреНрд╖рд┐рдд рдореАрдбрд┐рдпрд╛ рд╕реНрдореЛрдХ:

bash
pnpm openclaw infer tts convert --local --json \  --text "OpenClaw live smoke." \  --output /tmp/openclaw-live-smoke.mp3

рд╕реБрд░рдХреНрд╖рд┐рдд рд╡реЙрдЗрд╕-рдХреЙрд▓ рддреИрдпрд╛рд░реА рд╕реНрдореЛрдХ:

bash
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.invoke validationред
  • рдЖрд╡рд╢реНрдпрдХ рдкреВрд░реНрд╡-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=all modern 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 рд╕реЗрдЯ рдХрд░реЗрдВред
  • 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 рдХрд░ рд╕рдХреЗрдВ):
    • read probe: test workspace рдореЗрдВ nonce file рд▓рд┐рдЦрддрд╛ рд╣реИ рдФрд░ agent рд╕реЗ рдЙрд╕реЗ read рдХрд░рдиреЗ рдФрд░ nonce рд╡рд╛рдкрд╕ echo рдХрд░рдиреЗ рдХреЛ рдХрд╣рддрд╛ рд╣реИред
    • exec+read probe: test agent рд╕реЗ temp file рдореЗрдВ nonce exec-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=all modern 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 рд░рд╣рддреЗ рд╣реИрдВ:
    • read probe + exec+read probe (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)

рд▓рд╛рдЗрд╡: 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=1 Claude Sonnet -> Opus рдЙрд╕реА-рд╕рддреНрд░ continuity probe рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдм рдЪрдпрдирд┐рдд рдореЙрдбрд▓ switch target рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реЛред Docker рд░реЗрд╕рд┐рдкреА рдореЗрдВ рдпрд╣ aggregate reliability рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж рд░рд╣рддрд╛ рд╣реИред
    • OPENCLAW_LIVE_CLI_BACKEND_MCP_PROBE=1 MCP/tool loopback probe рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдПред Docker рд░реЗрд╕рд┐рдкреА рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдиреБрд░реЛрдз рди рдХрд┐рдП рдЬрд╛рдиреЗ рддрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж рд░рд╣рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг:

bash
  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 рдХреЙрдиреНрдлрд╝рд┐рдЧ рд╕реНрдореЛрдХ:

bash
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 рд░реЗрд╕рд┐рдкреА:

bash
pnpm test:docker:live-cli-backend

рдПрдХрд▓-рдкреНрд░рджрд╛рддрд╛ Docker рд░реЗрд╕рд┐рдкреА:

bash
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 -p billing рдФрд░ rate-limit behavior рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред
  • live CLI-backend smoke рдЕрдм Claude рдФрд░ Gemini рдХреЗ рд▓рд┐рдП рд╡рд╣реА end-to-end flow exercise рдХрд░рддрд╛ рд╣реИ: text turn, image classification turn, рдлрд┐рд░ gateway CLI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд MCP cron tool 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 InvalidProviderToken response 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.ts
    • OPENCLAW_LIVE_ACP_BIND=1
  • рдбрд┐рдлреЙрд▓реНрдЯ:
    • Docker рдореЗрдВ ACP рдПрдЬреЗрдВрдЯ: claude,codex,gemini
    • рд╕реАрдзреЗ pnpm test:live ... рдХреЗ рд▓рд┐рдП ACP рдПрдЬреЗрдВрдЯ: claude
    • рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЪреИрдирд▓: Slack DM-рд╢реИрд▓реА рдмрд╛рддрдЪреАрдд рд╕рдВрджрд░реНрдн
    • ACP рдмреИрдХрдПрдВрдб: acpx
  • рдУрд╡рд░рд░рд╛рдЗрдб:
    • OPENCLAW_LIVE_ACP_BIND_AGENT=claude
    • OPENCLAW_LIVE_ACP_BIND_AGENT=codex
    • OPENCLAW_LIVE_ACP_BIND_AGENT=droid
    • OPENCLAW_LIVE_ACP_BIND_AGENT=gemini
    • OPENCLAW_LIVE_ACP_BIND_AGENT=opencode
    • OPENCLAW_LIVE_ACP_BIND_AGENTS=claude,codex,gemini
    • OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND='npx -y @agentclientprotocol/claude-agent-acp@<version>'
    • OPENCLAW_LIVE_ACP_BIND_CODEX_MODEL=gpt-5.5
    • OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL=opencode/kimi-k2.6
    • OPENCLAW_LIVE_ACP_BIND_REQUIRE_TRANSCRIPT=1
    • OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1
    • OPENCLAW_LIVE_ACP_BIND_PARENT_MODEL=openai/gpt-5.5
  • рдиреЛрдЯреНрд╕:
    • рдпрд╣ lane gateway chat.send surface рдХрд╛ рдЙрдкрдпреЛрдЧ admin-only рд╕рд┐рдВрдереЗрдЯрд┐рдХ originating-route fields рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдкрд░реАрдХреНрд╖рдг message-channel рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝ рд╕рдХреЗрдВ рдмрд┐рдирд╛ рдмрд╛рд╣рд░реА delivery рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдХрд┐рдПред
    • рдЬрдм OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND рд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛, рдкрд░реАрдХреНрд╖рдг рдЪреБрдиреЗ рдЧрдП ACP harness agent рдХреЗ рд▓рд┐рдП embedded acpx Plugin рдХреА 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 рд╕реЗрдЯ рдХрд░реЗрдВред

рдЙрджрд╛рд╣рд░рдг:

bash
OPENCLAW_LIVE_ACP_BIND=1 \  OPENCLAW_LIVE_ACP_BIND_AGENT=claude \  pnpm test:live src/gateway/gateway-acp-bind.live.test.ts

Docker рд╡рд┐рдзрд┐:

bash
pnpm test:docker:live-acp-bind

рдПрдХрд▓-рдПрдЬреЗрдВрдЯ Docker рд╡рд┐рдзрд┐рдпрд╛рдВ:

bash
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:opencode

Docker рдиреЛрдЯреНрд╕:

  • 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 via https://app.factory.ai/cli, @google/gemini-cli, рдпрд╛ opencode-ai) missing рд╣реЛрдиреЗ рдкрд░ install рдХрд░рддрд╛ рд╣реИред ACP backend рд╕реНрд╡рдпрдВ official acpx Plugin рд╕реЗ embedded acpx/runtime package рд╣реИред
  • Droid Docker variant settings рдХреЗ рд▓рд┐рдП ~/.factory stage рдХрд░рддрд╛ рд╣реИ, FACTORY_API_KEY forward рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕ API key рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ local Factory OAuth/keyring auth container рдореЗрдВ portable рдирд╣реАрдВ рд╣реИред рдпрд╣ ACPX рдХреА built-in droid exec --output-format acp registry entry рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
  • OpenCode Docker variant рдПрдХ strict single-agent regression lane рд╣реИред рдпрд╣ OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL (рдбрд┐рдлреЙрд▓реНрдЯ opencode/kimi-k2.6) рд╕реЗ temporary OPENCODE_CONFIG_CONTENT default model рд▓рд┐рдЦрддрд╛ рд╣реИ, рдФрд░ pnpm test:docker:live-acp-bind:opencode generic post-bind skip рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп bound assistant transcript рдорд╛рдВрдЧрддрд╛ рд╣реИред
  • Direct acpx CLI calls Gateway рдХреЗ рдмрд╛рд╣рд░ behavior compare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ manual/workaround path рд╣реИрдВред Docker ACP bind smoke OpenClaw рдХреЗ embedded acpx runtime backend рдХреЛ exercise рдХрд░рддрд╛ рд╣реИред

рд▓рд╛рдЗрд╡: Codex app-server harness smoke

  • рд▓рдХреНрд╖реНрдп: рд╕рд╛рдорд╛рдиреНрдп gateway agent method рдХреЗ рдЬрд░рд┐рдП Plugin-owned Codex harness рдХреЛ рдорд╛рдиреНрдп рдХрд░рдирд╛:
    • bundled codex Plugin 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 рд╡рд╛рдкрд╕ рдкреВрдЫреЗ
  • рдкрд░реАрдХреНрд╖рдг: 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ред

рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдзрд┐:

bash
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

Docker рд╡рд┐рдзрд┐:

bash
pnpm test:docker:live-codex-harness

Docker рдиреЛрдЯреНрд╕:

  • Docker runner scripts/test-live-codex-harness-docker.sh рдкрд░ рд░рд╣рддрд╛ рд╣реИред
  • рдпрд╣ OPENAI_API_KEY pass рдХрд░рддрд╛ рд╣реИ, рдореМрдЬреВрдж рд╣реЛрдиреЗ рдкрд░ 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
  • 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

рдиреЛрдЯреНрд╕:

  • 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 gemini binary рдХреЛ 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 via OPENCODE_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 homes workspace/ рдФрд░ sandboxes/ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ agents.*.workspace / agentDir path 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_generate paths рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реИ
    • рдЬрдм рддрдХ plugins.entries.comfy.config.<capability> рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рди рд╣реЛ, рд╣рд░ capability рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ
    • comfy workflow submission, polling, downloads, рдпрд╛ Plugin registration рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧреА

рдЗрдореЗрдЬ рдЬрдирд░реЗрд╢рди рд▓рд╛рдЗрд╡

  • рдкрд░реАрдХреНрд╖рдг: 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:
    • deepinfra
    • fal
    • google
    • minimax
    • openai
    • openrouter
    • vydra
    • xai
  • рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реАрдорд┐рддрдХрд░рдг:
    • 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

shipped CLI path рдХреЗ рд▓рд┐рдП, provider/runtime live test рдкрд╛рд╕ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ infer smoke рдЬреЛрдбрд╝реЗрдВ:

bash
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
    • рдореМрдЬреВрджрд╛ shared-lane coverage:
      • google: generate, edit
      • minimax: generate
      • comfy: рдЕрд▓рдЧ 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

рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрд╢рди рд▓рд╛рдЗрд╡

  • рдкрд░реАрдХреНрд╖рдг: 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
    • shared sweep рдореЗрдВ рдореМрдЬреВрджрд╛ declared-but-skipped imageToVideo providers:
      • vydra рдХреНрдпреЛрдВрдХрд┐ bundled veo3 text-only рд╣реИ рдФрд░ bundled kling рдХреЛ 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
      • рд╡рд╣ рдлрд╝рд╛рдЗрд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ veo3 text-to-video рдФрд░ рдПрдХ kling lane рдЪрд▓рд╛рддреА рд╣реИ рдЬреЛ remote image URL fixture рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
    • рдореМрдЬреВрджрд╛ videoToVideo live coverage:
      • runway рдХреЗрд╡рд▓ рддрдм рдЬрдм selected model runway/gen4_aleph рд╣реЛ
    • shared sweep рдореЗрдВ рдореМрдЬреВрджрд╛ declared-but-skipped videoToVideo providers:
      • alibaba, qwen, xai рдХреНрдпреЛрдВрдХрд┐ рдЙрди paths рдХреЛ рдЕрднреА remote http(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

рдореАрдбрд┐рдпрд╛ рд▓рд╛рдЗрд╡ 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:media
    • pnpm test:live:media image video --providers openai,google,minimax
    • pnpm test:live:media video --video-providers openai,runway --all-providers
    • pnpm test:live:media music --quiet

рд╕рдВрдмрдВрдзрд┐рдд

Was this useful?
On this page

On this page