跳转至

ACP 绑定和 Codex app-server 通道

实时:ACP 绑定冒烟测试(/acp spawn ... --bind here)

  • 测试:src/gateway/gateway-acp-bind.live.test.ts
  • 目标:使用实时 ACP 代理验证真实的 ACP 会话绑定流程:
  • 发送 /acp spawn <agent> --bind here
  • 就地绑定一个合成的消息通道会话
  • 在同一会话上发送一条普通的后续消息
  • 验证该后续消息是否出现在所绑定的 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 私信风格的会话上下文
  • 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.6-luna
  • OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL=opencode/kimi-k2.6
  • OPENCLAW_LIVE_ACP_BIND_IMAGE_PROBE=1(或 on/true/yes)可强制启用图像探测;任何其他值都会强制关闭。默认对除 opencode 外的所有代理运行。
  • OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1
  • OPENCLAW_LIVE_ACP_BIND_PARENT_MODEL=openai/gpt-5.6-luna
  • 说明:
  • 该测试通道使用网关的 chat.send 接口,并借助仅管理员可用的合成来源路由字段,使测试可以在不伪装外部投递的情况下附加消息通道上下文。
  • 当未设置 OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND 时,测试会使用内嵌的 acpx 插件内置的代理注册表来定位所选的 ACP harness 代理。
  • 默认情况下,绑定会话的 cron MCP 创建采用尽力而为策略,因为外部 ACP harness 可能在绑定/图像验证通过后取消 MCP 调用;设置 OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1 可使绑定后的 cron 探测变为严格模式。

示例:

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

单代理 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 运行器位于 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=droid、OPENCLAW_LIVE_ACP_BIND_AGENTS=gemini 或 OPENCLAW_LIVE_ACP_BIND_AGENTS=opencode 来缩小矩阵范围。
  • 它会将匹配的 CLI 认证材料暂存到容器中,然后在缺失时安装所请求的实时 CLI(@anthropic-ai/claude-code、@openai/codex、通过 https://app.factory.ai/cli 安装的 Factory Droid、@google/gemini-cli 或 opencode-ai)。ACP 后端本身是来自官方 acpx 插件的内嵌 acpx/runtime 包。
  • Droid Docker 变体会暂存 ~/.factory 作为设置,转发 FACTORY_API_KEY,并且必须提供该 API 密钥,因为本地 Factory OAuth/钥匙串认证无法移植到容器中。它使用 ACPX 内置的 droid exec --output-format acp 注册表条目。
  • OpenCode Docker 变体是一条严格的单代理回归测试通道。它会根据 OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL(默认 opencode/kimi-k2.6)写入一个临时的 OPENCODE_CONFIG_CONTENT 默认模型。
  • 直接调用 acpx CLI 只是在 Gateway 之外对比行为时使用的手动/变通路径。Docker ACP 绑定冒烟测试实际运行的是 OpenClaw 内嵌的 acpx 运行时后端。

实时:Codex app-server harness 冒烟测试

  • 目标:通过常规网关 agent 方法验证插件自有的 Codex harness:
  • 加载内置的 codex 插件
  • 通过 /model <ref> --runtime codex 选择 OpenAI 模型
  • 以所请求的思考级别发送第一轮网关代理对话
  • 向同一个 OpenClaw 会话发送第二轮对话,并验证 app-server 线程能够恢复
  • 通过相同的网关命令路径运行 /codex status 和 /codex models
  • 可选地运行两个由 Guardian 审核的升级 shell 探测:一个应当被批准的良性命令,另一个应当被拒绝的伪造密钥上传,以便代理回问用户
  • 测试:src/gateway/gateway-codex-harness.live.test.ts
  • 启用:OPENCLAW_LIVE_CODEX_HARNESS=1
  • Harness 基准模型:openai/gpt-5.6-luna
  • 使用全新 OpenAI API 密钥时的默认选择:openai/gpt-6-astra
  • 默认思考级别:low
  • 模型覆盖:OPENCLAW_LIVE_CODEX_HARNESS_MODEL=openai/<model>
  • 思考级别覆盖:OPENCLAW_LIVE_CODEX_HARNESS_THINKING=<level>
  • 非默认模型的 effort 断言:OPENCLAW_LIVE_CODEX_HARNESS_EXPECTED_EFFORT=<level>
  • 矩阵覆盖:OPENCLAW_LIVE_CODEX_HARNESS_TARGETS=<model>=<thinking>,...
  • 认证模式:OPENCLAW_LIVE_CODEX_HARNESS_AUTH=codex-auth(默认)使用复制的 Codex 登录状态;api-key 则通过 Codex app-server 使用 OPENAI_API_KEY。
  • 可选图像探测:OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1
  • 可选 MCP/工具探测:OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1
  • 可选 Guardian 探测:OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1
  • 可选恢复压力测试:OPENCLAW_LIVE_CODEX_HARNESS_RESUME_STRESS=1 会添加四轮历史对话,然后在要求保持相同原生线程 ID 和会话历史的同时,关闭并重启 Gateway 和 Codex app-server 三次。可通过 OPENCLAW_LIVE_CODEX_HARNESS_RESUME_STRESS_HISTORY_TURNS(1-20)和 OPENCLAW_LIVE_CODEX_HARNESS_RESUME_STRESS_RESTARTS(1-10)覆盖这些有界计数。
  • 可选扇出压力测试:设置 OPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_PROBE=1 和 OPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_COUNT(1-12)。Harness 会并发启动所有子任务,等待每个子任务运行结束,并验证每个唯一的子任务回复和原生线程身份。
  • 可选压缩压力测试:OPENCLAW_LIVE_CODEX_HARNESS_COMPACTION_STRESS=1 会生成有界大小的原生工具输出,要求出现自动压缩事件,验证持久化的压缩计数和隐藏标记召回,重启 Gateway 和物理 Codex app-server,然后重复输出与压缩流程。可通过 OPENCLAW_LIVE_CODEX_HARNESS_COMPACTION_STRESS_TURNS(1-8)和 OPENCLAW_LIVE_CODEX_HARNESS_LARGE_OUTPUT_BYTES(100000-800000)调整有界工作量。
  • 完整直接 API 上下文:OPENCLAW_LIVE_CODEX_HARNESS_FULL_CONTEXT=1 会应用 922000 上下文和 700000 总自动压缩限制,在不使用 /compact 或其他手动检查点的情况下发送密集的有界用户轮次,并要求稍后的小轮次触发原生自动压缩。它需要 OPENCLAW_LIVE_CODEX_HARNESS_AUTH=api-key 以及一个绝对的 OPENCLAW_LIVE_CODEX_HARNESS_MODEL_CATALOG 路径。该目录必须暴露精确选择的模型,并带有 context_window: 922000、max_context_window: 922000 和 auto_compact_token_limit: 700000,这样 Codex 才不会把覆盖值重新钳制回其正常的目录窗口。上述普通的降低阈值压力测试保留了更严格的自动压缩和隐藏标记保留断言。
  • 可选 loop-relay 退出探测:OPENCLAW_LIVE_CODEX_HARNESS_DISABLE_LOOP_RELAY=1
  • 所请求的思考偏好可能会映射到 Codex 为该模型公布的最接近的 effort 级别。例如,Luna 会将 minimal 映射为 low。
  • 已知的 Codex 目录模型会自动推导出精确的原生 effort。未知模型的覆盖必须显式声明预期的映射后 effort。
  • 该冒烟测试会强制 provider/model 的 agentRuntime.id: "codex",因此损坏的 Codex harness 无法通过静默回退到 OpenClaw 来通过测试。
  • 认证:Codex app-server 认证来自本地 Codex 订阅登录;当 OPENCLAW_LIVE_CODEX_HARNESS_AUTH=api-key 时使用 OPENAI_API_KEY。Docker 可以复制 ~/.codex/auth.json 和 ~/.codex/config.toml 以进行订阅运行。

本地方式:

OPENCLAW_LIVE_CODEX_HARNESS=1 \
  OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1 \
  OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1 \
  OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1 \
  OPENCLAW_LIVE_CODEX_HARNESS_MODEL=openai/gpt-5.6-luna \
  pnpm test:live -- src/gateway/gateway-codex-harness.live.test.ts

Docker 方式:

pnpm test:docker:live-codex-harness

重启与历史压力测试:

OPENCLAW_LIVE_CODEX_HARNESS_RESUME_STRESS=1 \
pnpm test:docker:live-codex-harness

扇出、大输出、压缩与重启压力测试:

OPENCLAW_LIVE_CODEX_HARNESS_AUTH=api-key \
  OPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_PROBE=1 \
  OPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_COUNT=8 \
  OPENCLAW_LIVE_CODEX_HARNESS_RESUME_STRESS=1 \
  OPENCLAW_LIVE_CODEX_HARNESS_COMPACTION_STRESS=1 \
  pnpm test:docker:live-codex-harness

完整原生 Codex 922000 输入预算压缩压力测试:

OPENCLAW_LIVE_CODEX_HARNESS=1 \
  OPENCLAW_LIVE_CODEX_HARNESS_AUTH=api-key \
  OPENCLAW_LIVE_CODEX_HARNESS_FULL_CONTEXT=1 \
  OPENCLAW_LIVE_CODEX_HARNESS_MODEL_CATALOG=/absolute/path/to/models-api-1m.json \
  OPENCLAW_LIVE_CODEX_HARNESS_MODEL=openai/gpt-5.6-luna \
  OPENCLAW_LIVE_CODEX_HARNESS_THINKING=low \
  OPENCLAW_LIVE_CODEX_HARNESS_COMPACTION_STRESS_TURNS=8 \
  OPENCLAW_LIVE_CODEX_HARNESS_LARGE_OUTPUT_BYTES=800000 \
  OPENCLAW_LIVE_CODEX_HARNESS_DEBUG=1 \
  node --import tsx scripts/test-live.mts --quiet src/gateway/gateway-codex-harness.live.test.ts

GPT-5.6 原生 Codex 矩阵:

OPENCLAW_LIVE_CODEX_HARNESS_AUTH=api-key \
  OPENCLAW_LIVE_CODEX_HARNESS_TARGETS='openai/gpt-5.6-terra=ultra,openai/gpt-5.6-luna=max' \
  pnpm test:docker:live-codex-harness

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw