Testing
測試:即時測試套件
如需快速開始、QA runner、單元/整合套件與 Docker 流程,請參閱 測試。本頁涵蓋 live(會觸及網路的)測試 套件:模型矩陣、CLI 後端、ACP、媒體提供者 live 測試,以及 憑證處理。
Live:本機設定檔煙霧測試命令
在臨時 live 檢查前先 source ~/.profile,讓提供者金鑰與本機工具
路徑符合你的 shell:
source ~/.profile
安全媒體煙霧測試:
pnpm openclaw infer tts convert --local --json \
--text "OpenClaw live smoke." \
--output /tmp/openclaw-live-smoke.mp3
安全語音通話就緒度煙霧測試:
pnpm openclaw voicecall setup --json
pnpm openclaw voicecall smoke --to "+15555550123"
除非同時提供 --yes,否則 voicecall smoke 是 dry run。只有在你刻意想撥出真正的通知電話時,才使用 --yes。對 Twilio、Telnyx 和 Plivo 而言,成功的就緒度檢查需要公開 Webhook URL;依設計會拒絕僅限本機的 local loopback/私人備援。
Live:Android Node capability sweep
- 測試:
src/gateway/android-node.capabilities.live.test.ts - 腳本:
pnpm android:test:integration - 目標:叫用已連線 Android Node 目前宣告的每個命令,並斷言命令合約行為。
- 範圍:
- 需要前置條件/手動設定(此套件不會安裝/執行/配對應用程式)。
- 針對所選 Android Node 逐一驗證 Gateway
node.invoke。
- 必要前置設定:
- Android 應用程式已連線並配對到 gateway。
- 應用程式保持在前景。
- 已授予你預期會通過的 capability 所需權限/擷取同意。
- 選用目標覆寫:
OPENCLAW_ANDROID_NODE_ID或OPENCLAW_ANDROID_NODE_NAME。OPENCLAW_ANDROID_GATEWAY_URL/OPENCLAW_ANDROID_GATEWAY_TOKEN/OPENCLAW_ANDROID_GATEWAY_PASSWORD。
- 完整 Android 設定詳細資訊:Android 應用程式
Live:模型煙霧測試(設定檔金鑰)
Live 測試分成兩層,好讓我們隔離失敗:
- 「直接模型」告訴我們提供者/模型在使用指定金鑰時,是否完全能回答。
- 「Gateway 煙霧測試」告訴我們完整 gateway+agent 管線是否能用於該模型(工作階段、歷史、工具、沙盒政策等)。
第 1 層:直接模型完成(無 gateway)
- 測試:
src/agents/models.profiles.live.test.ts - 目標:
- 列舉探索到的模型
- 使用
getApiKeyForModel選取你有憑證的模型 - 對每個模型執行一個小型 completion(並在需要時執行定向回歸測試)
- 啟用方式:
pnpm test:live(或在直接叫用 Vitest 時使用OPENCLAW_LIVE_TEST=1)
- 設定
OPENCLAW_LIVE_MODELS=modern(或all,modern 的別名)才會實際執行此套件;否則會略過,以讓pnpm test:live聚焦於 gateway 煙霧測試 - 選取模型的方式:
OPENCLAW_LIVE_MODELS=modern可執行 modern allowlist(Opus/Sonnet 4.6+、GPT-5.2 + Codex、Gemini 3、DeepSeek V4、GLM 4.7、MiniMax M2.7、Grok 4.3)OPENCLAW_LIVE_MODELS=all是 modern allowlist 的別名- 或
OPENCLAW_LIVE_MODELS="openai/gpt-5.5,openai-codex/gpt-5.5,anthropic/claude-opus-4-6,..."(逗號分隔 allowlist) - Modern/all sweep 預設使用精選的高訊號上限;設定
OPENCLAW_LIVE_MAX_MODELS=0可進行完整 modern sweep,或設定正數以使用較小上限。 - 完整 sweep 會使用
OPENCLAW_LIVE_TEST_TIMEOUT_MS作為整個直接模型測試逾時。預設:60 分鐘。 - 直接模型 probe 預設以 20 路平行執行;設定
OPENCLAW_LIVE_MODEL_CONCURRENCY可覆寫。
- 選取提供者的方式:
OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli"(逗號分隔 allowlist)
- 金鑰來源:
- 預設:設定檔儲存區與 env 備援
- 設定
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1以強制只使用 設定檔儲存區
- 存在原因:
- 將「提供者 API 壞了 / 金鑰無效」與「gateway agent 管線壞了」分開
- 包含小型、隔離的回歸測試(範例:OpenAI Responses/Codex Responses reasoning replay + tool-call 流程)
第 2 層:Gateway + 開發 agent 煙霧測試(「@openclaw」實際做的事)
- 測試:
src/gateway/gateway-models.profiles.live.test.ts - 目標:
- 啟動一個程序內 gateway
- 建立/patch 一個
agent:dev:*工作階段(每次執行使用模型覆寫) - 反覆測試有金鑰的模型並斷言:
- 「有意義」的回應(無工具)
- 真正的工具叫用可運作(讀取 probe)
- 選用額外工具 probe(exec+read probe)
- OpenAI 回歸路徑(僅 tool-call → follow-up)持續運作
- Probe 詳細資訊(方便你快速解釋失敗):
readprobe:測試會在 workspace 中寫入 nonce 檔案,並要求 agentread它且回傳 nonce。exec+readprobe:測試要求 agent 用exec將 nonce 寫入暫存檔,再read回來。- image probe:測試附加產生的 PNG(cat + 隨機化代碼),並預期模型回傳
cat <CODE>。 - 實作參考:
src/gateway/gateway-models.profiles.live.test.ts和src/gateway/live-image-probe.ts。
- 啟用方式:
pnpm test:live(或在直接叫用 Vitest 時使用OPENCLAW_LIVE_TEST=1)
- 選取模型的方式:
- 預設:modern allowlist(Opus/Sonnet 4.6+、GPT-5.2 + Codex、Gemini 3、DeepSeek V4、GLM 4.7、MiniMax M2.7、Grok 4.3)
OPENCLAW_LIVE_GATEWAY_MODELS=all是 modern allowlist 的別名- 或設定
OPENCLAW_LIVE_GATEWAY_MODELS="provider/model"(或逗號清單)以縮小範圍 - Modern/all gateway sweep 預設使用精選的高訊號上限;設定
OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0可進行完整 modern sweep,或設定正數以使用較小上限。
- 選取提供者的方式(避免「OpenRouter 全部」):
OPENCLAW_LIVE_GATEWAY_PROVIDERS="google,google-antigravity,google-gemini-cli,openai,anthropic,zai,minimax"(逗號分隔 allowlist)
- 工具 + 圖片 probe 在此 live 測試中一律開啟:
readprobe +exec+readprobe(工具壓力測試)- 當模型宣告支援圖片輸入時,會執行 image probe
- 流程(高階):
- 測試產生一個含有 "CAT" + 隨機代碼的小型 PNG(
src/gateway/live-image-probe.ts) - 透過
agentattachments: [{ mimeType: "image/png", content: "<base64>" }]傳送它 - Gateway 將附件解析成
images[](src/gateway/server-methods/agent.ts+src/gateway/chat-attachments.ts) - 內嵌 agent 將多模態使用者訊息轉送給模型
- 斷言:回覆包含
cat+ 該代碼(OCR 容錯:允許輕微錯誤)
- 測試產生一個含有 "CAT" + 隨機代碼的小型 PNG(
Live:CLI 後端煙霧測試(Claude、Codex、Gemini 或其他本機 CLI)
- 測試:
src/gateway/gateway-cli-backend.live.test.ts - 目標:使用本機 CLI 後端驗證 Gateway + agent 管線,而不觸碰你的預設設定。
- 後端特定的煙霧測試預設值存放於擁有該後端的 Plugin 的
cli-backend.ts定義。 - 啟用:
pnpm test:live(或在直接叫用 Vitest 時使用OPENCLAW_LIVE_TEST=1)OPENCLAW_LIVE_CLI_BACKEND=1
- 預設值:
- 預設提供者/模型:
claude-cli/claude-sonnet-4-6 - 命令/引數/圖片行為來自擁有該 CLI 後端的 Plugin 中繼資料。
- 預設提供者/模型:
- 覆寫(選用):
OPENCLAW_LIVE_CLI_BACKEND_MODEL="codex-cli/gpt-5.5"OPENCLAW_LIVE_CLI_BACKEND_COMMAND="/full/path/to/codex"OPENCLAW_LIVE_CLI_BACKEND_ARGS='["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"]'OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=1可傳送真正的圖片附件(路徑會注入提示中)。Docker recipe 預設關閉此項,除非明確要求。OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image"可將圖片檔案路徑作為 CLI 引數傳入,而不是注入提示。OPENCLAW_LIVE_CLI_BACKEND_IMAGE_MODE="repeat"(或"list")可在設定IMAGE_ARG時控制圖片引數的傳遞方式。OPENCLAW_LIVE_CLI_BACKEND_RESUME_PROBE=1可傳送第二回合並驗證 resume 流程。OPENCLAW_LIVE_CLI_BACKEND_MODEL_SWITCH_PROBE=1可在所選模型支援切換目標時,選擇加入 Claude Sonnet -> Opus 同工作階段連續性 probe。Docker recipe 預設關閉此項,以提升彙總可靠性。OPENCLAW_LIVE_CLI_BACKEND_MCP_PROBE=1可選擇加入 MCP/工具 loopback probe。Docker recipe 預設關閉此項,除非明確要求。
範例:
OPENCLAW_LIVE_CLI_BACKEND=1 \
OPENCLAW_LIVE_CLI_BACKEND_MODEL="codex-cli/gpt-5.5" \
pnpm test:live src/gateway/gateway-cli-backend.live.test.ts
低成本 Gemini MCP 設定煙霧測試:
OPENCLAW_LIVE_TEST=1 \
pnpm test:live src/agents/cli-runner/bundle-mcp.gemini.live.test.ts
這不會要求 Gemini 產生回應。它會寫入 OpenClaw 提供給 Gemini 的相同系統
設定,然後執行 gemini --debug mcp list,以證明已儲存的 transport: "streamable-http" 伺服器會正規化為 Gemini 的 HTTP MCP
形狀,且能連線到本機 streamable-HTTP MCP 伺服器。
Docker recipe:
pnpm test:docker:live-cli-backend
單一提供者 Docker recipe:
pnpm test:docker:live-cli-backend:claude
pnpm test:docker:live-cli-backend:claude-subscription
pnpm test:docker:live-cli-backend:codex
pnpm test:docker:live-cli-backend:gemini
注意事項:
- Docker runner 位於
scripts/test-live-cli-backend-docker.sh。 - 它會在 repo Docker 映像中,以非 root 的
node使用者執行 live CLI 後端煙霧測試。 - 它會從擁有該後端的 Plugin 解析 CLI 煙霧測試中繼資料,然後將相符的 Linux CLI 套件(
@anthropic-ai/claude-code、@openai/codex或@google/gemini-cli)安裝到OPENCLAW_DOCKER_CLI_TOOLS_DIR的快取可寫前綴(預設:~/.cache/openclaw/docker-cli-tools)。 pnpm test:docker:live-cli-backend:claude-subscription需要透過~/.claude/.credentials.json中的claudeAiOauth.subscriptionType,或來自claude setup-token的CLAUDE_CODE_OAUTH_TOKEN,取得可攜式 Claude Code 訂閱 OAuth。它會先在 Docker 中證明直接claude -p可運作,接著在不保留 Anthropic API 金鑰 env vars 的情況下,執行兩個 Gateway CLI 後端回合。此訂閱 lane 預設停用 Claude MCP/工具與圖片 probe,因為 Claude 目前會將第三方應用程式使用量導向額外用量計費,而不是一般訂閱方案限制。- live CLI 後端煙霧測試現在會對 Claude、Codex 和 Gemini 執行相同的端到端流程:文字回合、圖片分類回合,接著是透過 gateway CLI 驗證的 MCP
cron工具呼叫。 - Claude 的預設煙霧測試也會將工作階段從 Sonnet patch 到 Opus,並驗證 resumed 工作階段仍記得先前的筆記。
Live:APNs HTTP/2 代理可達性
- 測試:
src/infra/push-apns-http2.live.test.ts - 目標:透過本機 HTTP CONNECT 代理通道連到 Apple 的 sandbox APNs 端點,傳送 APNs HTTP/2 驗證請求,並斷言 Apple 真正的
403 InvalidProviderToken回應會透過代理路徑回來。 - 啟用:
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_APNS_REACHABILITY=1 pnpm test:live src/infra/push-apns-http2.live.test.ts
- 選用逾時:
OPENCLAW_LIVE_APNS_TIMEOUT_MS=30000
Live:ACP bind 煙霧測試(/acp spawn ... --bind here)
- 測試:
src/gateway/gateway-acp-bind.live.test.ts - 目標:使用即時 ACP agent 驗證真實的 ACP conversation-bind 流程:
- 傳送
/acp spawn <agent> --bind here - 就地綁定合成的 message-channel conversation
- 在同一個 conversation 傳送一般 follow-up
- 驗證 follow-up 進入已綁定 ACP session transcript
- 傳送
- 啟用:
pnpm test:live src/gateway/gateway-acp-bind.live.test.tsOPENCLAW_LIVE_ACP_BIND=1
- 預設值:
- Docker 中的 ACP agents:
claude,codex,gemini - 直接執行
pnpm test:live ...時的 ACP agent:claude - 合成 channel:Slack DM 風格的 conversation context
- ACP 後端:
acpx
- Docker 中的 ACP agents:
- 覆寫:
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,並搭配僅限管理員的 synthetic originating-route 欄位,讓測試可以附加 message-channel context,而不必假裝對外傳遞。 - 未設定
OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND時,測試會使用嵌入式acpxplugin 的內建 agent registry,對應所選的 ACP harness agent。 - Bound-session cron MCP 建立預設是 best-effort,因為外部 ACP harness 可能在 bind/image proof 通過後取消 MCP 呼叫;設定
OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1可讓該 post-bind cron probe 變成嚴格檢查。
- 此 lane 使用 gateway
範例:
OPENCLAW_LIVE_ACP_BIND=1 \
OPENCLAW_LIVE_ACP_BIND_AGENT=claude \
pnpm test:live src/gateway/gateway-acp-bind.live.test.ts
Docker 配方:
pnpm test:docker:live-acp-bind
單一 agent Docker 配方:
pnpm test:docker:live-acp-bind:claude
pnpm test:docker:live-acp-bind:codex
pnpm test:docker:live-acp-bind:droid
pnpm test:docker:live-acp-bind:gemini
pnpm test:docker:live-acp-bind:opencode
Docker 備註:
- Docker runner 位於
scripts/test-live-acp-bind-docker.sh。 - 預設會依序對彙總的即時 CLI agents 執行 ACP bind smoke:
claude、codex,然後是gemini。 - 使用
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縮小矩陣。 - 它會載入
~/.profile,將相符的 CLI auth material 暫存到容器中,然後在缺少時安裝要求的即時 CLI(@anthropic-ai/claude-code、@openai/codex、透過https://app.factory.ai/cli的 Factory Droid、@google/gemini-cli或opencode-ai)。ACP 後端本身是官方acpxplugin 內嵌的acpx/runtimepackage。 - Droid Docker variant 會暫存
~/.factory作為設定、轉送FACTORY_API_KEY,且需要該 API key,因為本機 Factory OAuth/keyring auth 無法移植到容器中。它會使用 ACPX 內建的droid exec --output-format acpregistry entry。 - OpenCode Docker variant 是嚴格的單一 agent regression lane。它會在載入
~/.profile後,從OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL(預設opencode/kimi-k2.6)寫入暫時的OPENCODE_CONFIG_CONTENTdefault model,且pnpm test:docker:live-acp-bind:opencode需要已綁定的 assistant transcript,而不是接受一般的 post-bind skip。 - 直接呼叫
acpxCLI 只是用於在 Gateway 外比較行為的手動/workaround 路徑。Docker ACP bind smoke 會測試 OpenClaw 內嵌的acpxruntime 後端。
即時:Codex app-server harness smoke
- 目標:透過一般 gateway
agentmethod 驗證 Plugin 擁有的 Codex harness:- 載入 bundled
codexplugin - 選取
OPENCLAW_AGENT_RUNTIME=codex - 在強制使用 Codex harness 的情況下,將第一個 gateway agent turn 傳送到
openai/gpt-5.5 - 將第二個 turn 傳送到同一個 OpenClaw session,並驗證 app-server thread 可以 resume
- 透過同一個 gateway command
path 執行
/codex status和/codex models - 選擇性執行兩個經 Guardian-reviewed 的 escalated shell probes:一個應該被核准的 benign command,以及一個應該被拒絕、使 agent 回問的 fake-secret upload
- 載入 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 使用
agentRuntime.id: "codex",因此損壞的 Codex harness 無法透過靜默 fallback 到 PI 而通過。 - Auth:來自本機 Codex subscription login 的 Codex app-server auth。Docker
smokes 也可以在適用時提供
OPENAI_API_KEY供非 Codex probes 使用, 並選擇性複製~/.codex/auth.json和~/.codex/config.toml。
本機配方:
source ~/.profile
OPENCLAW_LIVE_CODEX_HARNESS=1 \
OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1 \
OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1 \
OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1 \
OPENCLAW_LIVE_CODEX_HARNESS_MODEL=openai/gpt-5.5 \
pnpm test:live -- src/gateway/gateway-codex-harness.live.test.ts
Docker 配方:
source ~/.profile
pnpm test:docker:live-codex-harness
Docker 備註:
- Docker runner 位於
scripts/test-live-codex-harness-docker.sh。 - 它會載入掛載的
~/.profile、傳遞OPENAI_API_KEY、在存在時複製 Codex CLI auth files、將@openai/codex安裝到可寫入的 mounted npm prefix、暫存 source tree,然後只執行 Codex-harness live test。 - Docker 預設啟用 image、MCP/tool 和 Guardian probes。當你需要較窄的 debug
run 時,設定
OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0或OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0或OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0。 - Docker 使用相同的明確 Codex runtime config,因此 legacy aliases 或 PI fallback 無法隱藏 Codex harness regression。
建議的即時配方
狹窄且明確的 allowlists 速度最快,也最不容易 flaky:
-
單一 model,直接執行(無 gateway):
OPENCLAW_LIVE_MODELS="openai/gpt-5.5" pnpm test:live src/agents/models.profiles.live.test.ts
-
單一 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,openai-codex/gpt-5.5,anthropic/claude-opus-4-6,google/gemini-3-flash-preview,deepseek/deepseek-v4-flash,zai/glm-5.1,minimax/MiniMax-M2.7" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
-
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:
- 如果本機 keys 位於 shell profile:
source ~/.profile - 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
- 如果本機 keys 位於 shell profile:
備註:
google/...使用 Gemini API(API key)。google-antigravity/...使用 Antigravity OAuth bridge(Cloud Code Assist-style agent endpoint)。google-gemini-cli/...使用你機器上的本機 Gemini CLI(獨立 auth + tooling quirks)。- Gemini API 與 Gemini CLI:
- API:OpenClaw 透過 HTTP 呼叫 Google 的 hosted Gemini API(API key / profile auth);這是多數使用者所稱的「Gemini」。
- CLI:OpenClaw shell out 到本機
geminibinary;它有自己的 auth,且行為可能不同(streaming/tool support/version skew)。
即時:model matrix(涵蓋範圍)
沒有固定的「CI model list」(live 為 opt-in),但以下是在具備 keys 的開發機器上建議定期涵蓋的 recommended models。
現代 smoke set(tool calling + image)
這是我們預期持續可用的「common models」run:
- OpenAI(非 Codex):
openai/gpt-5.5 - OpenAI Codex OAuth:
openai-codex/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 - MiniMax:
minimax/MiniMax-M2.7
使用 tools + image 執行 gateway smoke:
OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5,openai-codex/gpt-5.5,anthropic/claude-opus-4-6,google/gemini-3.1-pro-preview,google/gemini-3-flash-preview,google-antigravity/claude-opus-4-6-thinking,google-antigravity/gemini-3-flash,deepseek/deepseek-v4-flash,zai/glm-5.1,minimax/MiniMax-M2.7" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
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 - MiniMax:
minimax/MiniMax-M2.7
選用的額外涵蓋範圍(加分項):
- xAI:
xai/grok-4.3(或最新可用版本) - Mistral:
mistral/…(挑一個你已啟用且支援 "tools" 的 model) - Cerebras:
cerebras/…(如果你有存取權) - LM Studio:
lmstudio/…(本機;tool calling 取決於 API mode)
Vision:image send(attachment → multimodal message)
在 OPENCLAW_LIVE_GATEWAY_MODELS 中包含至少一個支援 image 的 model(Claude/Gemini/OpenAI vision-capable variants 等),以測試 image probe。
Aggregators / alternate gateways
如果你已啟用 keys,我們也支援透過以下方式測試:
- OpenRouter:
openrouter/...(數百個 models;使用openclaw models scan尋找支援 tool+image 的 candidates) - OpenCode:Zen 使用
opencode/...,Go 使用opencode-go/...(透過OPENCODE_API_KEY/OPENCODE_ZEN_API_KEYauth)
你可以納入 live matrix 的更多 providers(如果你有 creds/config):
- 內建:
openai、openai-codex、anthropic、google、google-vertex、google-antigravity、google-gemini-cli、zai、openrouter、opencode、opencode-go、xai、groq、cerebras、mistral、github-copilot - 透過
models.providers(自訂 endpoints):minimax(cloud/API),以及任何 OpenAI/Anthropic-compatible proxy(LM Studio、vLLM、LiteLLM 等)
Credentials(切勿 commit)
Live tests 會以和 CLI 相同的方式探索 credentials。實務影響:
-
如果 CLI 可用,live tests 應該會找到相同的 keys。
-
如果 live test 顯示「no creds」,請用你 debug
openclaw models list/ model selection 的相同方式 debug。 -
每個 agent 的 auth profiles:
~/.openclaw/agents/<agentId>/agent/auth-profiles.json(這就是即時測試中「profile keys」的意思) -
設定:
~/.openclaw/openclaw.json(或OPENCLAW_CONFIG_PATH) -
舊版狀態目錄:
~/.openclaw/credentials/(存在時會複製到暫存的即時家目錄,但不是主要的 profile-key 儲存區) -
即時本機執行預設會將目前啟用的設定、每個 agent 的
auth-profiles.json檔案、舊版credentials/,以及支援的外部 CLI auth 目錄複製到暫存測試家目錄;暫存即時家目錄會略過workspace/和sandboxes/,並移除agents.*.workspace/agentDir路徑覆寫,讓探測不會碰到你真實主機上的工作區。
如果你想依賴 env keys(例如匯出在你的 ~/.profile 中),請在 source ~/.profile 後執行本機測試,或使用下方的 Docker 執行器(它們可以將 ~/.profile 掛載到容器中)。
Deepgram 即時(音訊轉錄)
- 測試:
extensions/deepgram/audio.live.test.ts - 啟用:
DEEPGRAM_API_KEY=... DEEPGRAM_LIVE_TEST=1 pnpm test:live extensions/deepgram/audio.live.test.ts
BytePlus 程式碼規劃即時測試
- 測試:
extensions/byteplus/live.test.ts - 啟用:
BYTEPLUS_API_KEY=... BYTEPLUS_LIVE_TEST=1 pnpm test:live extensions/byteplus/live.test.ts - 選用模型覆寫:
BYTEPLUS_CODING_MODEL=ark-code-latest
ComfyUI 工作流程媒體即時測試
- 測試:
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 圖像、影片和
music_generate路徑 - 除非已設定
plugins.entries.comfy.config.<capability>,否則會略過各項能力 - 適用於變更 comfy 工作流程提交、輪詢、下載或 Plugin 註冊之後
- 測試 bundled comfy 圖像、影片和
圖像生成即時測試
- 測試:
test/image-generation.runtime.live.test.ts - 命令:
pnpm test:live test/image-generation.runtime.live.test.ts - 測試框架:
pnpm test:live:media image - 範圍:
- 列舉每個已註冊的圖像生成 provider Plugin
- 在探測前,從你的登入 shell(
~/.profile)載入缺少的 provider env vars - 預設優先使用 live/env API keys,而不是已儲存的 auth profiles,因此
auth-profiles.json中過期的測試金鑰不會遮蔽真實的 shell credentials - 略過沒有可用 auth/profile/model 的 providers
- 透過共用圖像生成 runtime 執行每個已設定的 provider:
<provider>:generate- 當 provider 宣告支援 edit 時執行
<provider>:edit
- 目前涵蓋的 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 行為:
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1用於強制 profile-store auth 並忽略僅 env 的覆寫
對於已出貨的 CLI 路徑,請在 provider/runtime 即時測試通過後加入一個 infer smoke:
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_INFER_CLI_TEST=1 pnpm test:live -- test/image-generation.infer-cli.live.test.ts
openclaw infer image providers --json
openclaw infer image generate \
--model google/gemini-3.1-flash-image-preview \
--prompt "Minimal flat test image: one blue square on a white background, no text." \
--output ./openclaw-infer-image-smoke.png \
--json
這涵蓋 CLI 參數解析、設定/default-agent 解析、bundled Plugin 啟用、共用圖像生成 runtime,以及即時 provider 請求。Plugin 相依套件預期在 runtime 載入前已存在。
音樂生成即時測試
- 測試:
extensions/music-generation-providers.live.test.ts - 啟用:
OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/music-generation-providers.live.test.ts - 測試框架:
pnpm test:live:media music - 範圍:
- 測試共用 bundled 音樂生成 provider 路徑
- 目前涵蓋 Google 和 MiniMax
- 在探測前,從你的登入 shell(
~/.profile)載入 provider env vars - 預設優先使用 live/env API keys,而不是已儲存的 auth profiles,因此
auth-profiles.json中過期的測試金鑰不會遮蔽真實的 shell credentials - 略過沒有可用 auth/profile/model 的 providers
- 可用時執行兩種已宣告的 runtime 模式:
generate使用僅 prompt 的輸入- 當 provider 宣告
capabilities.edit.enabled時執行edit
- 目前共用 lane 涵蓋:
google:generate、editminimax:generatecomfy:獨立的 Comfy 即時檔案,不在此共用 sweep 中
- 選用縮小範圍:
OPENCLAW_LIVE_MUSIC_GENERATION_PROVIDERS="google,minimax"OPENCLAW_LIVE_MUSIC_GENERATION_MODELS="google/lyria-3-clip-preview,minimax/music-2.6"
- 選用 auth 行為:
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1用於強制 profile-store auth 並忽略僅 env 的覆寫
影片生成即時測試
- 測試:
extensions/video-generation-providers.live.test.ts - 啟用:
OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.live.test.ts - 測試框架:
pnpm test:live:media video - 範圍:
- 測試共用 bundled 影片生成 provider 路徑
- 預設使用 release-safe smoke 路徑:非 FAL providers、每個 provider 一個 text-to-video 請求、一秒龍蝦 prompt,以及來自
OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS的每個 provider 操作上限(預設為180000) - 預設略過 FAL,因為 provider 端佇列延遲可能主導 release 時間;傳入
--video-providers fal或OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="fal"可明確執行它 - 在探測前,從你的登入 shell(
~/.profile)載入 provider env vars - 預設優先使用 live/env API keys,而不是已儲存的 auth profiles,因此
auth-profiles.json中過期的測試金鑰不會遮蔽真實的 shell credentials - 略過沒有可用 auth/profile/model 的 providers
- 預設只執行
generate - 設定
OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1也會在可用時執行已宣告的 transform 模式:- 當 provider 宣告
capabilities.imageToVideo.enabled,且所選 provider/model 在共用 sweep 中接受以 buffer 支援的本機圖像輸入時,執行imageToVideo - 當 provider 宣告
capabilities.videoToVideo.enabled,且所選 provider/model 在共用 sweep 中接受以 buffer 支援的本機影片輸入時,執行videoToVideo
- 當 provider 宣告
- 目前在共用 sweep 中已宣告但略過的
imageToVideoproviders:vydra,因為 bundledveo3僅支援文字,而 bundledkling需要遠端圖像 URL
- Provider 專屬 Vydra 涵蓋範圍:
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_VYDRA_VIDEO=1 pnpm test:live -- extensions/vydra/vydra.live.test.ts- 該檔案會執行
veo3text-to-video,以及預設使用遠端圖像 URL fixture 的klinglane
- 目前
videoToVideo即時涵蓋範圍:- 只有在所選模型為
runway/gen4_aleph時涵蓋runway
- 只有在所選模型為
- 目前在共用 sweep 中已宣告但略過的
videoToVideoproviders:alibaba、qwen、xai,因為這些路徑目前需要遠端http(s)/ MP4 參考 URLgoogle,因為目前共用 Gemini/Veo lane 使用本機 buffer-backed 輸入,而共用 sweep 不接受該路徑openai,因為目前共用 lane 缺少 org-specific 影片 inpaint/remix 存取保證
- 選用縮小範圍:
OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="deepinfra,google,openai,runway"OPENCLAW_LIVE_VIDEO_GENERATION_MODELS="google/veo-3.1-fast-generate-preview,openai/sora-2,runway/gen4_aleph"OPENCLAW_LIVE_VIDEO_GENERATION_SKIP_PROVIDERS=""用於在預設 sweep 中包含每個 provider,包括 FALOPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS=60000用於降低每個 provider 的操作上限,以進行更積極的 smoke 執行
- 選用 auth 行為:
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1用於強制 profile-store auth 並忽略僅 env 的覆寫
媒體即時測試框架
- 命令:
pnpm test:live:media - 目的:
- 透過單一 repo-native 進入點執行共用的圖像、音樂和影片即時測試套件
- 自動從
~/.profile載入缺少的 provider env vars - 預設自動將每個套件縮小到目前有可用 auth 的 providers
- 重用
scripts/test-live.mjs,因此 Heartbeat 和 quiet-mode 行為保持一致
- 範例:
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 套件