From 89949be2a4aa9dd64fb3f6142d115d192ebfc530 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Sat, 25 Apr 2026 20:50:39 +0000 Subject: [PATCH] chore(i18n): refresh zh-CN translations --- docs/zh-CN/help/testing-live.md | 359 ++++++++++++++++---------------- 1 file changed, 179 insertions(+), 180 deletions(-) diff --git a/docs/zh-CN/help/testing-live.md b/docs/zh-CN/help/testing-live.md index 31e41ff1f..a6b9419f5 100644 --- a/docs/zh-CN/help/testing-live.md +++ b/docs/zh-CN/help/testing-live.md @@ -7,22 +7,22 @@ sidebarTitle: Live tests summary: 实时(涉及网络)的测试:模型矩阵、CLI 后端、ACP、媒体提供商、凭证 title: 测试:实时测试套件 x-i18n: - generated_at: "2026-04-25T20:41:58Z" + generated_at: "2026-04-25T20:48:49Z" model: gpt-5.4 provider: openai - source_hash: 72e98c2ad8a745254664e72b8ef99e617444e59f0b27785b3670bff2538970c4 + source_hash: 70f3539054e1e19f8a8f312e9b571a1e5894f868c3bc963756db4de9b6aaf8b0 source_path: help/testing-live.md workflow: 15 --- -如需了解快速开始、QA 运行器、单元/集成测试套件以及 Docker 流程,请参阅 -[测试](/zh-CN/help/testing)。本页介绍**实时**(涉及网络)的测试 +有关快速开始、QA 运行器、单元/集成测试套件以及 Docker 流程,请参阅 +[测试](/zh-CN/help/testing)。本页介绍 **实时**(涉及网络)的测试 套件:模型矩阵、CLI 后端、ACP 和媒体提供商实时测试,以及 凭证处理。 ## 实时:本地 profile 冒烟命令 -在进行临时实时检查之前先 `source ~/.profile`,这样提供商密钥和本地工具 +在进行临时实时检查之前,先 source `~/.profile`,这样提供商密钥和本地工具 路径就会与你的 shell 保持一致: ```bash @@ -44,97 +44,97 @@ pnpm openclaw voicecall setup --json pnpm openclaw voicecall smoke --to "+15555550123" ``` -除非同时提供 `--yes`,否则 `voicecall smoke` 是一次演练。仅当 -你明确想要发起真实通知电话时才使用 `--yes`。对于 Twilio、Telnyx 和 -Plivo,成功的就绪检查需要一个公开的 webhook URL;仅本地的 +`voicecall smoke` 是一次干运行,除非同时提供 `--yes`。仅当 +你明确想要发起一次真实的通知呼叫时才使用 `--yes`。对于 Twilio、Telnyx 和 +Plivo,成功的就绪检查需要一个公开的 webhook URL;仅限本地的 loopback/私有回退方案会按设计被拒绝。 -## 实时:Android 节点能力扫描 +## 实时:Android 节点能力全面检查 - 测试:`src/gateway/android-node.capabilities.live.test.ts` - 脚本:`pnpm android:test:integration` - 目标:调用已连接 Android 节点当前**声明的每一条命令**,并断言命令契约行为。 - 范围: - - 有前置条件的手动设置(该套件不会安装/运行/配对应用)。 - - 针对所选 Android 节点逐条命令执行 Gateway 网关 `node.invoke` 验证。 + - 预置条件/手动设置(该测试套件不会安装/运行/配对应用)。 + - 针对所选 Android 节点逐条执行 Gateway 网关 `node.invoke` 验证。 - 必需的预先设置: - - Android 应用已连接并配对到 Gateway 网关。 - - 应用保持在前台。 - - 你期望通过的能力所需的权限/采集同意已授予。 + - Android 应用已连接并已与 Gateway 网关配对。 + - 应用保持在前台运行。 + - 为你希望通过的能力授予所需权限/采集同意。 - 可选目标覆盖: - `OPENCLAW_ANDROID_NODE_ID` 或 `OPENCLAW_ANDROID_NODE_NAME`。 - `OPENCLAW_ANDROID_GATEWAY_URL` / `OPENCLAW_ANDROID_GATEWAY_TOKEN` / `OPENCLAW_ANDROID_GATEWAY_PASSWORD`。 - 完整 Android 设置详情:[Android App](/zh-CN/platforms/android) -## 实时:模型冒烟测试(profile keys) +## 实时:模型冒烟测试(profile 密钥) 实时测试分为两层,这样我们可以隔离故障: -- “Direct model” 用来确认在给定密钥下,提供商/模型本身是否至少能响应。 -- “Gateway smoke” 用来确认该模型的完整 Gateway 网关 + 智能体 流水线是否正常工作(会话、历史、工具、沙箱策略等)。 +- “直接模型”告诉我们,在给定密钥的情况下,提供商/模型是否至少能够响应。 +- “Gateway 网关冒烟测试”告诉我们,该模型的完整 Gateway 网关 + 智能体流水线是否正常工作(会话、历史、工具、沙箱策略等)。 ### 第 1 层:直接模型补全(无 Gateway 网关) - 测试:`src/agents/models.profiles.live.test.ts` - 目标: - - 枚举发现到的模型 - - 使用 `getApiKeyForModel` 选择你已有凭证的模型 - - 对每个模型运行一次小型补全(并在需要时运行定向回归测试) + - 枚举已发现的模型 + - 使用 `getApiKeyForModel` 选择你具备凭证的模型 + - 对每个模型运行一次小型补全(并在需要时运行有针对性的回归测试) - 启用方式: - - `pnpm test:live`(或如果你直接调用 Vitest,则使用 `OPENCLAW_LIVE_TEST=1`) -- 设置 `OPENCLAW_LIVE_MODELS=modern`(或 `all`,即 modern 的别名)才会实际运行该套件;否则它会跳过,以便让 `pnpm test:live` 聚焦于 Gateway 网关冒烟测试 -- 如何选择模型: - - `OPENCLAW_LIVE_MODELS=modern` 运行现代 allowlist(Opus/Sonnet 4.6+、GPT-5.2 + Codex、Gemini 3、DeepSeek V4、GLM 4.7、MiniMax M2.7、Grok 4) - - `OPENCLAW_LIVE_MODELS=all` 是现代 allowlist 的别名 - - 或使用 `OPENCLAW_LIVE_MODELS="openai/gpt-5.2,openai-codex/gpt-5.2,anthropic/claude-opus-4-6,..."`(逗号分隔的 allowlist) - - modern/all 扫描默认有一个精心挑选的高信号上限;设置 `OPENCLAW_LIVE_MAX_MODELS=0` 可执行完整 modern 扫描,或设置为正数以使用更小的上限。 - - 完整扫描会将 `OPENCLAW_LIVE_TEST_TIMEOUT_MS` 用作整个直接模型测试的超时时间。默认值:60 分钟。 - - 直接模型探测默认使用 20 路并行;可设置 `OPENCLAW_LIVE_MODEL_CONCURRENCY` 覆盖。 -- 如何选择提供商: - - `OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli"`(逗号分隔的 allowlist) + - `pnpm test:live`(或者如果你直接调用 Vitest,则设置 `OPENCLAW_LIVE_TEST=1`) +- 设置 `OPENCLAW_LIVE_MODELS=modern`(或 `all`,即 modern 的别名)才能真正运行该套件;否则它会跳过,以便让 `pnpm test:live` 专注于 Gateway 网关冒烟测试 +- 选择模型的方法: + - `OPENCLAW_LIVE_MODELS=modern` 运行 modern 允许列表(Opus/Sonnet 4.6+、GPT-5.2 + Codex、Gemini 3、DeepSeek V4、GLM 4.7、MiniMax M2.7、Grok 4) + - `OPENCLAW_LIVE_MODELS=all` 是 modern 允许列表的别名 + - 或 `OPENCLAW_LIVE_MODELS="openai/gpt-5.2,openai-codex/gpt-5.2,anthropic/claude-opus-4-6,..."`(逗号分隔的允许列表) + - modern/all 全量检查默认使用精心挑选的高信号上限;将 `OPENCLAW_LIVE_MAX_MODELS=0` 设为 exhaustive 的 modern 全量检查,或设为正数以使用更小的上限。 + - exhaustive 全量检查会将 `OPENCLAW_LIVE_TEST_TIMEOUT_MS` 用作整个直接模型测试的超时时间。默认值:60 分钟。 + - 直接模型探测默认以 20 路并行运行;设置 `OPENCLAW_LIVE_MODEL_CONCURRENCY` 可覆盖此值。 +- 选择提供商的方法: + - `OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli"`(逗号分隔的允许列表) - 密钥来源: - - 默认:profile store 和环境变量回退 - - 设置 `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` 可强制**仅使用 profile store** -- 之所以存在这一层: - - 将“提供商 API 损坏 / 密钥无效”与“Gateway 网关智能体流水线损坏”区分开来 - - 包含小型、隔离的回归测试(例如:OpenAI Responses/Codex Responses 推理重放 + 工具调用流程) + - 默认:profile 存储和环境变量回退 + - 设置 `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` 可强制**仅**使用 profile 存储 +- 存在原因: + - 将“提供商 API 出错 / 密钥无效”与“Gateway 网关智能体流水线出错”区分开来 + - 容纳小型、隔离的回归测试(例如:OpenAI Responses/Codex Responses 推理重放 + 工具调用流程) -### 第 2 层:Gateway 网关 + dev 智能体 冒烟测试(也就是 “@openclaw” 实际执行的内容) +### 第 2 层:Gateway 网关 + dev 智能体冒烟测试(也就是 “@openclaw” 实际执行的内容) - 测试:`src/gateway/gateway-models.profiles.live.test.ts` - 目标: - 启动一个进程内 Gateway 网关 - - 创建/修补一个 `agent:dev:*` 会话(每次运行按模型覆盖) - - 遍历带有密钥的模型并断言: - - 有“有意义”的响应(不使用工具) - - 真实工具调用可用(read 探测) + - 创建/修补一个 `agent:dev:*` 会话(每次运行时覆盖模型) + - 遍历带密钥的模型并断言: + - “有意义”的响应(无工具) + - 真实的工具调用可正常工作(read 探测) - 可选的额外工具探测(exec+read 探测) - - OpenAI 回归路径(仅工具调用 → 后续跟进)持续可用 -- 探测细节(这样你可以快速解释失败): - - `read` 探测:测试会在工作区写入一个 nonce 文件,并要求智能体 `read` 该文件并回显 nonce。 - - `exec+read` 探测:测试要求智能体通过 `exec` 将 nonce 写入临时文件,然后再 `read` 回来。 - - 图像探测:测试会附加一张生成的 PNG(猫 + 随机代码),并期待模型返回 `cat `。 + - OpenAI 回归路径(仅工具调用 → 后续跟进)持续正常 +- 探测细节(这样你就能快速解释故障): + - `read` 探测:测试会在工作区中写入一个 nonce 文件,并要求智能体 `read` 该文件并回显 nonce。 + - `exec+read` 探测:测试会要求智能体通过 `exec` 将 nonce 写入一个临时文件,然后再 `read` 回来。 + - 图像探测:测试会附加一个生成的 PNG(猫 + 随机代码),并期望模型返回 `cat `。 - 实现参考:`src/gateway/gateway-models.profiles.live.test.ts` 和 `src/gateway/live-image-probe.ts`。 - 启用方式: - - `pnpm test:live`(或如果你直接调用 Vitest,则使用 `OPENCLAW_LIVE_TEST=1`) -- 如何选择模型: - - 默认:现代 allowlist(Opus/Sonnet 4.6+、GPT-5.2 + Codex、Gemini 3、DeepSeek V4、GLM 4.7、MiniMax M2.7、Grok 4) - - `OPENCLAW_LIVE_GATEWAY_MODELS=all` 是现代 allowlist 的别名 + - `pnpm test:live`(或者如果你直接调用 Vitest,则设置 `OPENCLAW_LIVE_TEST=1`) +- 选择模型的方法: + - 默认:modern 允许列表(Opus/Sonnet 4.6+、GPT-5.2 + Codex、Gemini 3、DeepSeek V4、GLM 4.7、MiniMax M2.7、Grok 4) + - `OPENCLAW_LIVE_GATEWAY_MODELS=all` 是 modern 允许列表的别名 - 或设置 `OPENCLAW_LIVE_GATEWAY_MODELS="provider/model"`(或逗号分隔列表)以缩小范围 - - modern/all Gateway 网关扫描默认有一个精心挑选的高信号上限;设置 `OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0` 可执行完整 modern 扫描,或设置为正数以使用更小的上限。 -- 如何选择提供商(避免 “OpenRouter 全家桶”): - - `OPENCLAW_LIVE_GATEWAY_PROVIDERS="google,google-antigravity,google-gemini-cli,openai,anthropic,zai,minimax"`(逗号分隔的 allowlist) -- 工具 + 图像探测在该实时测试中始终启用: + - modern/all Gateway 网关全量检查默认使用精心挑选的高信号上限;将 `OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0` 设为 exhaustive 的 modern 全量检查,或设为正数以使用更小的上限。 +- 选择提供商的方法(避免 “OpenRouter 一切都测”): + - `OPENCLAW_LIVE_GATEWAY_PROVIDERS="google,google-antigravity,google-gemini-cli,openai,anthropic,zai,minimax"`(逗号分隔的允许列表) +- 工具 + 图像探测在此实时测试中始终启用: - `read` 探测 + `exec+read` 探测(工具压力测试) - - 当模型声明支持图像输入时,运行图像探测 - - 流程(高层概述): + - 当模型声明支持图像输入时,会运行图像探测 + - 流程(高层级): - 测试生成一个带有 “CAT” + 随机代码的小型 PNG(`src/gateway/live-image-probe.ts`) - 通过 `agent` `attachments: [{ mimeType: "image/png", content: "" }]` 发送 - - Gateway 网关 将附件解析到 `images[]`(`src/gateway/server-methods/agent.ts` + `src/gateway/chat-attachments.ts`) - - 嵌入式智能体向模型转发一条多模态用户消息 - - 断言:回复中包含 `cat` + 该代码(OCR 容错:允许轻微错误) + - Gateway 网关将附件解析为 `images[]`(`src/gateway/server-methods/agent.ts` + `src/gateway/chat-attachments.ts`) + - 嵌入式智能体将多模态用户消息转发给模型 + - 断言:回复包含 `cat` + 该代码(OCR 容错:允许少量错误) -提示:要查看你当前机器上可以测试什么(以及准确的 `provider/model` id),请运行: +提示:若要查看你的机器上可以测试什么(以及准确的 `provider/model` id),请运行: ```bash openclaw models list @@ -144,10 +144,10 @@ openclaw models list --json ## 实时:CLI 后端冒烟测试(Claude、Codex、Gemini 或其他本地 CLI) - 测试:`src/gateway/gateway-cli-backend.live.test.ts` -- 目标:使用本地 CLI 后端验证 Gateway 网关 + 智能体 流水线,而不触碰你的默认配置。 -- 后端专用的冒烟测试默认值位于所属扩展的 `cli-backend.ts` 定义中。 +- 目标:使用本地 CLI 后端验证 Gateway 网关 + 智能体流水线,而不触碰你的默认配置。 +- 后端专用的默认冒烟设置位于所属扩展的 `cli-backend.ts` 定义中。 - 启用: - - `pnpm test:live`(或如果你直接调用 Vitest,则使用 `OPENCLAW_LIVE_TEST=1`) + - `pnpm test:live`(或者如果你直接调用 Vitest,则设置 `OPENCLAW_LIVE_TEST=1`) - `OPENCLAW_LIVE_CLI_BACKEND=1` - 默认值: - 默认提供商/模型:`claude-cli/claude-sonnet-4-6` @@ -156,12 +156,12 @@ openclaw models list --json - `OPENCLAW_LIVE_CLI_BACKEND_MODEL="codex-cli/gpt-5.2"` - `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 配方默认关闭此项,除非显式请求。 - - `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` 发送第二轮对话并验证恢复流程。 - - `OPENCLAW_LIVE_CLI_BACKEND_MODEL_SWITCH_PROBE=1` 在所选模型支持切换目标时,启用 Claude Sonnet -> Opus 的同一会话连续性探测。Docker 配方默认关闭此项以提高整体可靠性。 - - `OPENCLAW_LIVE_CLI_BACKEND_MCP_PROBE=1` 启用 MCP/工具 local loopback 探测。Docker 配方默认关闭此项,除非显式请求。 + - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=1` 发送真实图像附件(路径会注入到提示中)。Docker 配方默认关闭此项,除非明确请求。 + - `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` 发送第二轮消息并验证恢复流程。 + - `OPENCLAW_LIVE_CLI_BACKEND_MODEL_SWITCH_PROBE=1` 在所选模型支持切换目标时,选择加入 Claude Sonnet -> Opus 的同一会话连续性探测。Docker 配方默认关闭此项,以提升整体可靠性。 + - `OPENCLAW_LIVE_CLI_BACKEND_MCP_PROBE=1` 选择加入 MCP/工具 local loopback 探测。Docker 配方默认关闭此项,除非明确请求。 示例: @@ -171,7 +171,7 @@ OPENCLAW_LIVE_CLI_BACKEND=1 \ pnpm test:live src/gateway/gateway-cli-backend.live.test.ts ``` -低成本 Gemini MCP 配置冒烟测试: +低成本的 Gemini MCP 配置冒烟测试: ```bash OPENCLAW_LIVE_TEST=1 \ @@ -179,9 +179,8 @@ OPENCLAW_LIVE_TEST=1 \ ``` 这不会要求 Gemini 生成响应。它会写入与 OpenClaw 提供给 Gemini 相同的系统 -设置,然后运行 `gemini --debug mcp list`,以证明已保存的 -`transport: "streamable-http"` 服务器会被规范化为 Gemini 的 HTTP MCP -形态并能够连接。 +设置,然后运行 `gemini --debug mcp list` 来证明一个已保存的 +`transport: "streamable-http"` 服务器会被规范化为 Gemini 的 HTTP MCP 形态,并且能够连接到本地 streamable-HTTP MCP 服务器。 Docker 配方: @@ -201,27 +200,27 @@ pnpm test:docker:live-cli-backend:gemini 说明: - Docker 运行器位于 `scripts/test-live-cli-backend-docker.sh`。 -- 它会在仓库 Docker 镜像内以非 root 的 `node` 用户运行实时 CLI 后端冒烟测试。 -- 它会从所属扩展解析 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 Code 订阅 OAuth,可通过 `~/.claude/.credentials.json` 中的 `claudeAiOauth.subscriptionType` 或来自 `claude setup-token` 的 `CLAUDE_CODE_OAUTH_TOKEN` 提供。它会先在 Docker 中验证直接 `claude -p`,然后在不保留 Anthropic API-key 环境变量的情况下运行两轮 Gateway 网关 CLI 后端测试。此订阅通道默认禁用 Claude MCP/工具和图像探测,因为 Claude 当前会将第三方应用使用量计入额外用量计费,而不是普通订阅计划限额。 -- 现在,实时 CLI 后端冒烟测试会对 Claude、Codex 和 Gemini 执行相同的端到端流程:文本轮次、图像分类轮次,然后通过 Gateway 网关 CLI 验证 MCP `cron` 工具调用。 -- Claude 的默认冒烟测试还会将会话从 Sonnet 修补为 Opus,并验证恢复后的会话仍记得之前的一条备注。 +- 它会在仓库 Docker 镜像内以非 root 的 `node` 用户身份运行实时 CLI 后端冒烟测试。 +- 它会从所属扩展解析 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 Code 订阅 OAuth,可通过 `~/.claude/.credentials.json` 中带有 `claudeAiOauth.subscriptionType` 的配置,或通过 `claude setup-token` 得到的 `CLAUDE_CODE_OAUTH_TOKEN` 提供。它会先在 Docker 中验证直接 `claude -p`,然后在不保留 Anthropic API-key 环境变量的情况下运行两轮 Gateway 网关 CLI 后端测试。此订阅通道默认禁用 Claude MCP/工具和图像探测,因为 Claude 当前会将第三方应用用量路由到额外用量计费,而不是普通订阅套餐限制。 +- 实时 CLI 后端冒烟测试现在会对 Claude、Codex 和 Gemini 运行相同的端到端流程:文本轮次、图像分类轮次,然后是通过 Gateway 网关 CLI 验证的 MCP `cron` 工具调用。 +- Claude 的默认冒烟测试还会将会话从 Sonnet 修补切换到 Opus,并验证恢复后的会话仍然记得先前的备注。 ## 实时:ACP 绑定冒烟测试(`/acp spawn ... --bind here`) - 测试:`src/gateway/gateway-acp-bind.live.test.ts` -- 目标:使用实时 ACP 智能体验证真实的 ACP 会话绑定流程: +- 目标:使用一个实时 ACP 智能体验证真实的 ACP 会话绑定流程: - 发送 `/acp spawn --bind here` - 就地绑定一个合成的消息渠道会话 - - 在同一会话上发送一次普通跟进消息 - - 验证该跟进消息落入已绑定的 ACP 会话转录中 + - 在同一个会话上发送一次普通后续消息 + - 验证该后续消息进入了已绑定 ACP 会话的转录记录 - 启用: - `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 私信 风格的会话上下文 + - 合成渠道:Slack 私信风格的会话上下文 - ACP 后端:`acpx` - 覆盖项: - `OPENCLAW_LIVE_ACP_BIND_AGENT=claude` @@ -235,8 +234,8 @@ pnpm test:docker:live-cli-backend:gemini - `OPENCLAW_LIVE_ACP_BIND_REQUIRE_TRANSCRIPT=1` - `OPENCLAW_LIVE_ACP_BIND_PARENT_MODEL=openai/gpt-5.2` - 说明: - - 此测试通道使用 Gateway 网关 `chat.send` 接口,并带有仅管理员可用的合成 originating-route 字段,因此测试可以附加消息渠道上下文,而无需伪装成外部投递。 - - 当 `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND` 未设置时,测试会对所选 ACP harness 智能体使用内嵌 `acpx` 插件的内置智能体注册表。 + - 该通道使用 Gateway 网关 `chat.send` 接口,并配合仅管理员可用的合成 originating-route 字段,这样测试就可以附加消息渠道上下文,而无需假装进行了外部投递。 + - 当未设置 `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND` 时,测试会使用内嵌 `acpx` 插件内置的智能体注册表来选择所需的 ACP harness 智能体。 示例: @@ -264,11 +263,11 @@ pnpm test:docker:live-acp-bind:opencode Docker 说明: - Docker 运行器位于 `scripts/test-live-acp-bind-docker.sh`。 -- 默认情况下,它会按顺序对聚合的实时 CLI 智能体运行 ACP 绑定冒烟测试:`claude`、`codex`,然后 `gemini`。 -- 使用 `OPENCLAW_LIVE_ACP_BIND_AGENTS=claude`、`OPENCLAW_LIVE_ACP_BIND_AGENTS=codex`、`OPENCLAW_LIVE_ACP_BIND_AGENTS=gemini` 或 `OPENCLAW_LIVE_ACP_BIND_AGENTS=opencode` 可缩小矩阵范围。 -- 它会 `source ~/.profile`,将匹配的 CLI 认证材料暂存到容器中,然后在缺失时安装所请求的实时 CLI(`@anthropic-ai/claude-code`、`@openai/codex`、`@google/gemini-cli` 或 `opencode-ai`)。ACP 后端本身是来自 `acpx` 插件的内置嵌入式 `acpx/runtime` 包。 -- OpenCode Docker 变体是一个严格的单智能体回归测试通道。它会在 `source ~/.profile` 之后,根据 `OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL`(默认 `opencode/kimi-k2.6`)写入一个临时的 `OPENCODE_CONFIG_CONTENT` 默认模型,而 `pnpm test:docker:live-acp-bind:opencode` 要求必须有一个已绑定的 assistant 转录,而不是接受通用的绑定后跳过。 -- 直接调用 `acpx` CLI 仅用于在 Gateway 网关之外对比行为的手动/权宜路径。Docker ACP 绑定冒烟测试会执行 OpenClaw 内嵌的 `acpx` 运行时后端。 +- 默认情况下,它会按顺序对聚合的实时 CLI 智能体运行 ACP 绑定冒烟测试:`claude`、`codex`,然后是 `gemini`。 +- 使用 `OPENCLAW_LIVE_ACP_BIND_AGENTS=claude`、`OPENCLAW_LIVE_ACP_BIND_AGENTS=codex`、`OPENCLAW_LIVE_ACP_BIND_AGENTS=gemini` 或 `OPENCLAW_LIVE_ACP_BIND_AGENTS=opencode` 可以缩小矩阵范围。 +- 它会 source `~/.profile`,将匹配的 CLI 认证材料暂存到容器中,然后在缺失时安装所请求的实时 CLI(`@anthropic-ai/claude-code`、`@openai/codex`、`@google/gemini-cli` 或 `opencode-ai`)。ACP 后端本身则是来自 `acpx` 插件的内置嵌入式 `acpx/runtime` 包。 +- OpenCode Docker 变体是一个严格的单智能体回归通道。它会在 source `~/.profile` 之后,根据 `OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL`(默认值为 `opencode/kimi-k2.6`)写入一个临时 `OPENCODE_CONFIG_CONTENT` 默认模型,并且 `pnpm test:docker:live-acp-bind:opencode` 要求必须存在已绑定的助手转录记录,而不是接受通用的绑定后跳过结果。 +- 直接调用 `acpx` CLI 仅作为手动/变通路径,用于比较 Gateway 网关之外的行为。Docker ACP 绑定冒烟测试验证的是 OpenClaw 内嵌的 `acpx` 运行时后端。 ## 实时:Codex app-server harness 冒烟测试 @@ -276,24 +275,24 @@ Docker 说明: `agent` 方法验证由插件拥有的 Codex harness: - 加载内置的 `codex` 插件 - 选择 `OPENCLAW_AGENT_RUNTIME=codex` - - 使用强制启用的 Codex harness,向 `openai/gpt-5.2` 发送第一轮 Gateway 网关智能体请求 - - 向同一个 OpenClaw 会话发送第二轮请求,并验证 app-server + - 在强制使用 Codex harness 的情况下,向 `openai/gpt-5.2` 发送第一轮 Gateway 网关智能体消息 + - 向同一个 OpenClaw 会话发送第二轮消息,并验证 app-server 线程可以恢复 - - 通过同一个 Gateway 网关命令 + - 通过相同的 Gateway 网关命令 路径运行 `/codex status` 和 `/codex models` - - 可选地运行两个经 Guardian 审核的提权 shell 探测:一个应被批准的 - 无害命令,以及一个应被拒绝的伪造密钥上传命令,从而让智能体回头询问 + - 可选运行两个经 Guardian 审核的提权 shell 探测:一个应被批准的无害 + 命令,以及一个应被拒绝的伪造密钥上传操作,以便智能体回问 - 测试:`src/gateway/gateway-codex-harness.live.test.ts` - 启用:`OPENCLAW_LIVE_CODEX_HARNESS=1` - 默认模型:`openai/gpt-5.2` - 可选图像探测:`OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1` - 可选 MCP/工具探测:`OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1` - 可选 Guardian 探测:`OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1` -- 该冒烟测试会设置 `OPENCLAW_AGENT_HARNESS_FALLBACK=none`,因此损坏的 Codex - harness 不能通过静默回退到 Pi 来蒙混过关。 +- 该冒烟测试会设置 `OPENCLAW_AGENT_HARNESS_FALLBACK=none`,这样损坏的 Codex + harness 就无法通过静默回退到 Pi 来蒙混过关。 - 认证:Codex app-server 认证来自本地 Codex 订阅登录。Docker - 冒烟测试在适用时也可以为非 Codex 探测提供 `OPENAI_API_KEY`, - 以及可选复制的 `~/.codex/auth.json` 和 `~/.codex/config.toml`。 + 冒烟测试在适用时也可以提供 `OPENAI_API_KEY` 用于非 Codex 探测, + 外加可选复制的 `~/.codex/auth.json` 和 `~/.codex/config.toml`。 本地配方: @@ -317,56 +316,56 @@ pnpm test:docker:live-codex-harness Docker 说明: - Docker 运行器位于 `scripts/test-live-codex-harness-docker.sh`。 -- 它会 `source` 挂载的 `~/.profile`,传递 `OPENAI_API_KEY`,在存在时复制 Codex CLI - 认证文件,将 `@openai/codex` 安装到可写的挂载 npm - 前缀中,准备源码树,然后仅运行 Codex-harness 实时测试。 -- Docker 默认启用图像、MCP/工具和 Guardian 探测。设置 - `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0` 或 +- 它会 source 挂载的 `~/.profile`,传递 `OPENAI_API_KEY`,在存在时复制 Codex CLI + 认证文件,将 `@openai/codex` 安装到一个可写的挂载 npm + 前缀中,暂存源代码树,然后只运行 Codex-harness 实时测试。 +- Docker 默认启用图像、MCP/工具和 Guardian 探测。需要更窄的调试 + 运行时,可设置 `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0` 或 `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0` 或 - `OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0`,可在你需要更窄范围调试 - 运行时关闭它们。 + `OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0`。 - Docker 还会导出 `OPENCLAW_AGENT_HARNESS_FALLBACK=none`,与实时 - 测试配置保持一致,因此旧别名或回退到 Pi 都无法掩盖 Codex harness + 测试配置保持一致,这样旧别名或回退到 Pi 的行为就无法掩盖 Codex harness 回归问题。 ### 推荐的实时测试配方 -范围窄、显式的 allowlist 最快且最不容易波动: +范围小且明确的允许列表最快、也最不容易出错: -- 单个模型,直接调用(无 Gateway 网关): +- 单模型,直接调用(无 Gateway 网关): - `OPENCLAW_LIVE_MODELS="openai/gpt-5.2" pnpm test:live src/agents/models.profiles.live.test.ts` -- 单个模型,Gateway 网关冒烟测试: +- 单模型,Gateway 网关冒烟测试: - `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.2" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts` - 跨多个提供商的工具调用: - `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.2,openai-codex/gpt-5.2,anthropic/claude-opus-4-6,google/gemini-3-flash-preview,deepseek/deepseek-v4-flash,zai/glm-4.7,minimax/MiniMax-M2.7" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts` -- Google 聚焦(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` +- 以 Google 为重点(Gemini API 密钥 + Antigravity): + - Gemini(API 密钥):`OPENCLAW_LIVE_GATEWAY_MODELS="google/gemini-3-flash-preview" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts` - Antigravity(OAuth):`OPENCLAW_LIVE_GATEWAY_MODELS="google-antigravity/claude-opus-4-6-thinking,google-antigravity/gemini-3-pro-high" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts` -- Google 自适应思考冒烟测试: +- Google 自适应思维冒烟测试: - 如果本地密钥保存在 shell profile 中:`source ~/.profile` - Gemini 3 动态默认值:`pnpm openclaw qa manual --provider-mode live-frontier --model google/gemini-3.1-pro-preview --alt-model google/gemini-3.1-pro-preview --message '/think adaptive Reply exactly: GEMINI_ADAPTIVE_OK' --timeout-ms 180000` - Gemini 2.5 动态预算:`pnpm openclaw qa manual --provider-mode live-frontier --model google/gemini-2.5-flash --alt-model google/gemini-2.5-flash --message '/think adaptive Reply exactly: GEMINI25_ADAPTIVE_OK' --timeout-ms 180000` 说明: -- `google/...` 使用 Gemini API(API key)。 -- `google-antigravity/...` 使用 Antigravity OAuth 桥接(Cloud Code Assist 风格的智能体端点)。 -- `google-gemini-cli/...` 使用你机器上的本地 Gemini CLI(单独的认证 + 工具行为差异)。 +- `google/...` 使用 Gemini API(API 密钥)。 +- `google-antigravity/...` 使用 Antigravity OAuth bridge(类似 Cloud Code Assist 风格的智能体端点)。 +- `google-gemini-cli/...` 使用你机器上的本地 Gemini CLI(独立认证 + 工具行为差异)。 - Gemini API 与 Gemini CLI: - - API:OpenClaw 通过 HTTP 调用 Google 托管的 Gemini API(API key / profile 认证);这就是大多数用户所说的 “Gemini”。 - - CLI:OpenClaw 会调用本地 `gemini` 二进制;它有自己的认证方式,并且行为可能不同(流式传输/工具支持/版本偏差)。 + - API:OpenClaw 通过 HTTP 调用 Google 托管的 Gemini API(API 密钥 / profile 认证);这也是大多数用户所说的 “Gemini”。 + - CLI:OpenClaw 调用本地 `gemini` 二进制;它有自己的认证方式,并且行为可能不同(流式传输/工具支持/版本偏差)。 ## 实时:模型矩阵(我们的覆盖范围) -没有固定的“CI 模型列表”(实时测试是可选启用的),但以下是建议你在拥有密钥的开发机器上定期覆盖的**推荐**模型。 +没有固定的 “CI 模型列表”(实时测试是选择加入的),但以下是**推荐** +在开发机器上定期覆盖的模型,前提是你有相应密钥。 -### 现代冒烟测试集(工具调用 + 图像) +### 现代冒烟集(工具调用 + 图像) -这是我们预期必须持续保持可用的“常见模型”运行集: +这是我们预期应持续正常工作的 “常见模型” 运行集: - OpenAI(非 Codex):`openai/gpt-5.2` - OpenAI Codex OAuth:`openai-codex/gpt-5.2` @@ -377,12 +376,12 @@ Docker 说明: - Z.AI(GLM):`zai/glm-4.7` - MiniMax:`minimax/MiniMax-M2.7` -使用工具 + 图像运行 Gateway 网关冒烟测试: +运行带工具 + 图像的 Gateway 网关冒烟测试: `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.2,openai-codex/gpt-5.2,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-4.7,minimax/MiniMax-M2.7" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts` ### 基线:工具调用(Read + 可选 Exec) -每个提供商家族至少选择一个: +每个提供商系列至少选择一个: - OpenAI:`openai/gpt-5.2` - Anthropic:`anthropic/claude-opus-4-6`(或 `anthropic/claude-sonnet-4-6`) @@ -391,7 +390,7 @@ Docker 说明: - Z.AI(GLM):`zai/glm-4.7` - MiniMax:`minimax/MiniMax-M2.7` -可选的额外覆盖(有更好,没有也行): +可选附加覆盖(有更好,没有也行): - xAI:`xai/grok-4`(或最新可用版本) - Mistral:`mistral/`…(选择一个你已启用、支持 “tools” 的模型) @@ -400,35 +399,35 @@ Docker 说明: ### 视觉:图像发送(附件 → 多模态消息) -在 `OPENCLAW_LIVE_GATEWAY_MODELS` 中至少包含一个支持图像的模型(Claude/Gemini/OpenAI 支持视觉的变体等),以执行图像探测。 +在 `OPENCLAW_LIVE_GATEWAY_MODELS` 中至少包含一个支持图像的模型(Claude/Gemini/OpenAI 支持视觉的变体等),以便执行图像探测。 ### 聚合器 / 替代 Gateway 网关 -如果你启用了相应密钥,我们还支持通过以下方式测试: +如果你已启用相应密钥,我们也支持通过以下方式测试: -- OpenRouter:`openrouter/...`(数百个模型;使用 `openclaw models scan` 查找支持工具 + 图像的候选模型) -- OpenCode:`opencode/...` 用于 Zen,`opencode-go/...` 用于 Go(通过 `OPENCODE_API_KEY` / `OPENCODE_ZEN_API_KEY` 认证) +- OpenRouter:`openrouter/...`(数百个模型;使用 `openclaw models scan` 查找支持工具 + 图像的候选项) +- OpenCode:Zen 使用 `opencode/...`,Go 使用 `opencode-go/...`(通过 `OPENCODE_API_KEY` / `OPENCODE_ZEN_API_KEY` 认证) -你还可以纳入实时矩阵的更多提供商(如果你有凭证/配置): +你还可以将更多提供商纳入实时矩阵(前提是你有相应凭证/配置): - 内置:`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`(自定义端点):`minimax`(云端/API),以及任何兼容 OpenAI/Anthropic 的代理(LM Studio、vLLM、LiteLLM 等) +- 通过 `models.providers`(自定义端点):`minimax`(云/API),以及任何兼容 OpenAI/Anthropic 的代理(LM Studio、vLLM、LiteLLM 等) -提示:不要尝试在文档中硬编码“所有模型”。权威列表始终是你机器上 `discoverModels(...)` 返回的内容,再加上当前可用的密钥。 +提示:不要尝试在文档中硬编码 “所有模型”。权威列表应以你机器上 `discoverModels(...)` 的返回结果 + 当前可用密钥为准。 -## 凭证(绝不要提交) +## 凭证(切勿提交) 实时测试发现凭证的方式与 CLI 完全相同。实际含义如下: -- 如果 CLI 能工作,实时测试应该也能找到相同的密钥。 -- 如果实时测试提示 “no creds”,就像调试 `openclaw models list` / 模型选择那样去调试。 +- 如果 CLI 能正常工作,实时测试通常也应能找到相同的密钥。 +- 如果某个实时测试提示 “no creds”,请用与调试 `openclaw models list` / 模型选择相同的方法进行排查。 - 按智能体划分的认证 profile:`~/.openclaw/agents//agent/auth-profiles.json`(这就是实时测试中 “profile keys” 的含义) - 配置:`~/.openclaw/openclaw.json`(或 `OPENCLAW_CONFIG_PATH`) -- 旧版状态目录:`~/.openclaw/credentials/`(存在时会复制到暂存的实时 home 中,但它不是主要的 profile-key store) -- 实时本地运行默认会把当前激活的配置、按智能体划分的 `auth-profiles.json` 文件、旧版 `credentials/` 以及受支持的外部 CLI 认证目录复制到临时测试 home;暂存的实时 home 会跳过 `workspace/` 和 `sandboxes/`,并去除 `agents.*.workspace` / `agentDir` 路径覆盖,这样探测就不会落到你的真实主机工作区中。 +- 旧版状态目录:`~/.openclaw/credentials/`(存在时会复制到暂存的实时 home 中,但这不是主要的 profile-key 存储) +- 默认情况下,本地实时运行会将当前活动配置、按智能体划分的 `auth-profiles.json` 文件、旧版 `credentials/` 以及受支持的外部 CLI 认证目录复制到一个临时测试 home 中;暂存的实时 home 会跳过 `workspace/` 和 `sandboxes/`,并移除 `agents.*.workspace` / `agentDir` 路径覆盖,这样探测就不会落到你真实主机的工作区中。 -如果你想依赖环境变量密钥(例如在你的 `~/.profile` 中导出的密钥),请在执行本地测试前运行 `source ~/.profile`,或者使用下面的 Docker 运行器(它们可以将 `~/.profile` 挂载到容器中)。 +如果你想依赖环境变量密钥(例如从你的 `~/.profile` 导出的密钥),请在执行本地测试前运行 `source ~/.profile`,或者使用下面的 Docker 运行器(它们可以将 `~/.profile` 挂载到容器中)。 ## Deepgram 实时测试(音频转录) @@ -441,29 +440,29 @@ Docker 说明: - 启用:`BYTEPLUS_API_KEY=... BYTEPLUS_LIVE_TEST=1 pnpm test:live extensions/byteplus/live.test.ts` - 可选模型覆盖:`BYTEPLUS_CODING_MODEL=ark-code-latest` -## ComfyUI workflow 媒体实时测试 +## ComfyUI 工作流媒体实时测试 - 测试:`extensions/comfy/comfy.live.test.ts` - 启用:`OPENCLAW_LIVE_TEST=1 COMFY_LIVE_TEST=1 pnpm test:live -- extensions/comfy/comfy.live.test.ts` - 范围: - 覆盖内置 comfy 图像、视频和 `music_generate` 路径 - - 除非已配置 `plugins.entries.comfy.config.`,否则跳过每项能力 - - 在修改 comfy workflow 提交、轮询、下载或插件注册后很有用 + - 除非已配置 `plugins.entries.comfy.config.`,否则会跳过各项能力 + - 在修改 comfy 工作流提交、轮询、下载或插件注册后很有用 ## 图像生成实时测试 - 测试:`test/image-generation.runtime.live.test.ts` - 命令:`pnpm test:live test/image-generation.runtime.live.test.ts` -- harness:`pnpm test:live:media image` +- Harness:`pnpm test:live:media image` - 范围: - - 枚举每个已注册的图像生成提供商插件 - - 在探测前,从你的登录 shell(`~/.profile`)加载缺失的提供商环境变量 - - 默认优先使用实时/环境变量 API keys,而不是已存储的认证 profile,因此 `auth-profiles.json` 中过期的测试密钥不会掩盖真实的 shell 凭证 + - 枚举每一个已注册的图像生成提供商插件 + - 在探测前从你的登录 shell(`~/.profile`)加载缺失的提供商环境变量 + - 默认优先使用实时/环境变量 API 密钥,而不是已存储的认证 profile,因此 `auth-profiles.json` 中过期的测试密钥不会掩盖真实的 shell 凭证 - 跳过没有可用认证/profile/模型的提供商 - - 通过共享图像生成运行时运行每个已配置的提供商: + - 通过共享图像生成运行时运行每个已配置提供商: - `:generate` - - 当提供商声明支持编辑时,运行 `:edit` -- 当前已内置覆盖的提供商: + - 当提供商声明支持编辑时运行 `:edit` +- 当前覆盖的内置提供商: - `fal` - `google` - `minimax` @@ -471,15 +470,15 @@ Docker 说明: - `openrouter` - `vydra` - `xai` -- 可选缩小范围: +- 可选范围缩小: - `OPENCLAW_LIVE_IMAGE_GENERATION_PROVIDERS="openai,google,openrouter,xai"` - `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"` - 可选认证行为: - - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` 强制使用 profile store 认证并忽略仅环境变量覆盖 + - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` 强制使用 profile 存储认证,并忽略仅环境变量覆盖 -对于已发布的 CLI 路径,请在提供商/运行时实时 -测试通过后再添加一个 `infer` 冒烟测试: +对于已发布的 CLI 路径,在提供商/运行时实时 +测试通过后,再添加一个 `infer` 冒烟测试: ```bash OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_INFER_CLI_TEST=1 pnpm test:live -- test/image-generation.infer-cli.live.test.ts @@ -491,7 +490,7 @@ openclaw infer image generate \ --json ``` -这会覆盖 CLI 参数解析、配置/默认智能体解析、内置 +这涵盖 CLI 参数解析、配置/默认智能体解析、内置 插件激活、按需修复内置运行时依赖、共享 图像生成运行时,以及实时提供商请求。 @@ -499,69 +498,69 @@ openclaw infer image generate \ - 测试:`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` +- Harness:`pnpm test:live:media music` - 范围: - 覆盖共享的内置音乐生成提供商路径 - 当前覆盖 Google 和 MiniMax - - 在探测前,从你的登录 shell(`~/.profile`)加载提供商环境变量 - - 默认优先使用实时/环境变量 API keys,而不是已存储的认证 profile,因此 `auth-profiles.json` 中过期的测试密钥不会掩盖真实的 shell 凭证 + - 在探测前从你的登录 shell(`~/.profile`)加载提供商环境变量 + - 默认优先使用实时/环境变量 API 密钥,而不是已存储的认证 profile,因此 `auth-profiles.json` 中过期的测试密钥不会掩盖真实的 shell 凭证 - 跳过没有可用认证/profile/模型的提供商 - - 在可用时运行两种已声明的运行时模式: - - 使用仅 prompt 输入的 `generate` + - 在可用时同时运行两种已声明的运行时模式: + - 使用仅提示词输入的 `generate` - 当提供商声明 `capabilities.edit.enabled` 时运行 `edit` - 当前共享通道覆盖: - `google`:`generate`、`edit` - `minimax`:`generate` - - `comfy`:单独的 Comfy 实时文件,不包含在这个共享扫描中 -- 可选缩小范围: + - `comfy`:单独的 Comfy 实时文件,不属于此次共享全面检查 +- 可选范围缩小: - `OPENCLAW_LIVE_MUSIC_GENERATION_PROVIDERS="google,minimax"` - `OPENCLAW_LIVE_MUSIC_GENERATION_MODELS="google/lyria-3-clip-preview,minimax/music-2.6"` - 可选认证行为: - - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` 强制使用 profile store 认证并忽略仅环境变量覆盖 + - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` 强制使用 profile 存储认证,并忽略仅环境变量覆盖 ## 视频生成实时测试 - 测试:`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` +- Harness:`pnpm test:live:media video` - 范围: - 覆盖共享的内置视频生成提供商路径 - - 默认使用发布安全的冒烟路径:非 FAL 提供商、每个提供商一次 text-to-video 请求、一秒钟龙虾 prompt,以及来自 `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS` 的每提供商操作上限(默认 `180000`) - - 默认跳过 FAL,因为提供商侧队列延迟可能主导发布时间;传入 `--video-providers fal` 或 `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="fal"` 可显式运行它 - - 在探测前,从你的登录 shell(`~/.profile`)加载提供商环境变量 - - 默认优先使用实时/环境变量 API keys,而不是已存储的认证 profile,因此 `auth-profiles.json` 中过期的测试密钥不会掩盖真实的 shell 凭证 + - 默认使用发布安全的冒烟路径:非 FAL 提供商、每个提供商一个 text-to-video 请求、1 秒龙虾提示词,并且每个提供商的操作上限由 `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS` 控制(默认 `180000`) + - 默认跳过 FAL,因为提供商侧队列延迟可能主导发布时间;传入 `--video-providers fal` 或 `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="fal"` 可显式运行 + - 在探测前从你的登录 shell(`~/.profile`)加载提供商环境变量 + - 默认优先使用实时/环境变量 API 密钥,而不是已存储的认证 profile,因此 `auth-profiles.json` 中过期的测试密钥不会掩盖真实的 shell 凭证 - 跳过没有可用认证/profile/模型的提供商 - 默认仅运行 `generate` - - 设置 `OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1` 可在可用时也运行已声明的变换模式: - - 当提供商声明 `capabilities.imageToVideo.enabled`,且所选提供商/模型在共享扫描中接受基于 buffer 的本地图像输入时,运行 `imageToVideo` - - 当提供商声明 `capabilities.videoToVideo.enabled`,且所选提供商/模型在共享扫描中接受基于 buffer 的本地视频输入时,运行 `videoToVideo` - - 当前在共享扫描中已声明但被跳过的 `imageToVideo` 提供商: + - 设置 `OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1` 也会在可用时运行已声明的转换模式: + - 当提供商声明 `capabilities.imageToVideo.enabled`,且所选提供商/模型在共享全面检查中接受基于 buffer 的本地图像输入时,运行 `imageToVideo` + - 当提供商声明 `capabilities.videoToVideo.enabled`,且所选提供商/模型在共享全面检查中接受基于 buffer 的本地视频输入时,运行 `videoToVideo` + - 当前在共享全面检查中已声明但跳过的 `imageToVideo` 提供商: - `vydra`,因为内置 `veo3` 仅支持文本,而内置 `kling` 需要远程图像 URL - 提供商专用的 Vydra 覆盖: - `OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_VYDRA_VIDEO=1 pnpm test:live -- extensions/vydra/vydra.live.test.ts` - - 该文件会运行 `veo3` text-to-video,以及默认使用远程图像 URL fixture 的 `kling` 通道 + - 该文件运行 `veo3` text-to-video,并且默认运行一个使用远程图像 URL fixture 的 `kling` 通道 - 当前 `videoToVideo` 实时覆盖: - - 仅 `runway`,且仅当所选模型是 `runway/gen4_aleph` - - 当前在共享扫描中已声明但被跳过的 `videoToVideo` 提供商: + - 仅 `runway`,且所选模型为 `runway/gen4_aleph` + - 当前在共享全面检查中已声明但跳过的 `videoToVideo` 提供商: - `alibaba`、`qwen`、`xai`,因为这些路径当前需要远程 `http(s)` / MP4 参考 URL - - `google`,因为当前共享的 Gemini/Veo 通道使用基于本地 buffer 的输入,而该路径在共享扫描中不被接受 - - `openai`,因为当前共享通道缺少组织专用的视频修补/混剪访问保证 -- 可选缩小范围: + - `google`,因为当前共享 Gemini/Veo 通道使用本地基于 buffer 的输入,而该路径在共享全面检查中不被接受 + - `openai`,因为当前共享通道缺少组织专用的视频修补/混编访问保证 +- 可选范围缩小: - `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="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=""` 以在默认扫描中包含所有提供商,包括 FAL - - `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS=60000` 以降低每个提供商操作上限,用于更激进的冒烟运行 + - `OPENCLAW_LIVE_VIDEO_GENERATION_SKIP_PROVIDERS=""` 将所有提供商都纳入默认全面检查,包括 FAL + - `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS=60000` 降低每个提供商操作上限,以便进行更激进的冒烟运行 - 可选认证行为: - - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` 强制使用 profile store 认证并忽略仅环境变量覆盖 + - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` 强制使用 profile 存储认证,并忽略仅环境变量覆盖 ## 媒体实时 harness - 命令:`pnpm test:live:media` -- 目的: +- 用途: - 通过一个仓库原生入口点运行共享的图像、音乐和视频实时测试套件 - 自动从 `~/.profile` 加载缺失的提供商环境变量 - - 默认自动将每个套件缩小到当前具有可用认证的提供商 - - 复用 `scripts/test-live.mjs`,因此 heartbeat 和 quiet mode 行为保持一致 + - 默认自动将每个测试套件缩小到当前具有可用认证的提供商 + - 复用 `scripts/test-live.mjs`,因此心跳和静默模式行为保持一致 - 示例: - `pnpm test:live:media` - `pnpm test:live:media image video --providers openai,google,minimax`