Files
boss/docs/architecture/codex_server_progress_card_cn.md
2026-06-03 10:46:45 +08:00

23 KiB
Raw Blame History

Codex Server 协议与 Boss 执行进度卡接入记录

更新时间:2026-06-03

1. Codex 最新开放协议结论

2026-05-31 的最新架构判断Boss 后续优先围绕 Codex App Server / Remote Control 做深度接入,但当前生产链路仍保留 codex exec resumecodex mcp-server 作为兼容 provider 候选。

Codex App Server 是更适合 Boss 长期接入的协议层,因为它面向富客户端和产品级集成,覆盖:

  • authentication
  • conversation history
  • approvals
  • streamed agent events
  • Thread / Turn / Item
  • model/list、skills/list、skills/extraRoots/set、plugin/list、app/list
  • command execution、file change、tool input、MCP tool-call approvals

Boss 不能直接把 App Server 原始 Thread / Turn / Item 字段写进业务层。当前第一批已经新增 local-agent/codex-app-server-runner.mjs,把 App Server 的 thread/resume | thread/start -> turn/start -> item/agentMessage/delta -> turn/completed 映射成 Boss 的普通任务完成回写。

2026-05-31 已继续把 turn/plan/updatedturn/diff/updateditem/started|completedthread/started 这类协议事件归一化为 Boss execution_progress 的步骤、分支变更、产物和后台智能体。同日第二批补齐 item/*/requestApprovalitem/autoApprovalReview/*guardianWarningserverRequest/resolveditem/fileChange/patchUpdated 的安全摘要映射APP 只展示审批状态、风险提醒和文件路径不展示完整命令、diff、系统提示词或密钥。第三批已把 thread/status/changedthread/realtime/* 归一成 executionProgress.threadStatus / realtimeAPP 只展示活跃/等待审批/等待用户输入、realtime 文本摘要、音频片段计数和关闭/错误原因;第四批已把 model/reroutedthread/tokenUsage/updatedmcpServer/startupStatus/updatedremoteControl/status/changed 归一成 executionProgress.modelRoute / tokenUsage / mcpServers / remoteControl,用于 APP “运行状态”区块。

2026-06-01 第五批已把 thread/goal/updated|clearedthread/settings/updatedthread/compacted 归一成 executionProgress.threadGoal / threadSettings / compaction,用于 APP “线程配置”区块;第六批已把 account/updatedaccount/rateLimits/updatedmodel/verificationwarningconfigWarningdeprecationNotice 归一成 executionProgress.accountStatus / modelVerification / warnings;第七批已把官方 ThreadItem.collabToolCall 归一成 executionProgress.threadCollaboration,并按官方建议把新版 ThreadItem.contextCompaction 映射回 executionProgress.compaction;第八批已把 mcpToolCalldynamicToolCallwebSearchimageViewenteredReviewModeexitedReviewModecommandExecution 归一成 executionProgress.toolActivities;第九批已把官方 ThreadItem.plan 的最终 item/completed 文本映射为 executionProgress.steps,并把 ThreadItem.reasoning.summary 映射为 executionProgress.reasoningSummary;第十批已把 ThreadItem.imageGeneration 安全映射为 executionProgress.toolActivities 的图像生成活动和 executionProgress.artifacts 的图片产物;第十一批已把 hook/started|completed 安全映射为 executionProgress.toolActivities 的钩子活动,供 APP 以“钩子”轻卡展示企业治理和插件生命周期状态;第十二批已把 windowsSandbox/setupCompleted 安全映射为 executionProgress.windowsSandbox,供 APP 在“运行状态”里展示 Windows 沙箱准备状态、setup mode 和脱敏错误摘要;第十三批已把 heartbeat discovery 扩展到 experimentalFeature/listcollaborationMode/listpermissionProfile/listmcpServerStatus/list供设备详情、APP 和 PC 后台看到实验特性、协作模式、权限 Profile 与 MCP 服务摘要;第十四批已把 account/readaccount/rateLimits/readconfig/readconfigRequirements/readexternalAgentConfig/detect 纳入 heartbeat discovery用于展示账号、套餐、额度、App 配置、托管要求和外部 Agent 迁移候选摘要;第十五批已把 thread/listthread/loaded/list 纳入 heartbeat discovery用于展示线程总数、已加载线程、活跃线程、归档线程和非归档可见线程轻量目录第十六批已把 thread/turns/list 纳入 heartbeat discovery用于展示总轮次、运行中轮次、完成轮次和每个非归档线程的最近 turn 状态摘要;第十七批已按 codex-cli 0.136.0-alpha.2 补齐 skills/extraRoots/set,支持把企业共享 Skill 根下发给 App Server 后再拉取 skills/list,并把新版 ThreadItem.collabToolCall.receiverThreadIds / agentsStates 安全映射成目标数量和 agent 状态集合。

thread/realtime/sdp、音频 base64、原始 realtime item、remote installationId、thread settings 的 cwd、compaction turnId、collaboration settings 内部 prompt、collabToolCall 源/目标线程 ID、receiverThreadIdsagentsStates.message、共享 Skill 根绝对路径、tool arguments/result/contentItems、web URL token、命令正文/输出、raw reasoning content、reasoning item id、imageGeneration 原始 result/revisedPrompt、hook id/sourcePath/statusMessage/entries、Windows sandbox sourcePath/samplePaths、本地绝对路径、permission profile 文件规则、MCP resource URI、账号邮箱、API key、完整 config、外部 Agent 迁移描述、turn id、turn items、turn 内容、用户正文、模型输出和未清洗的 MCP 错误不入账。

官方文档入口:https://developers.openai.com/codex/app-server

当前仍可作为 Boss 兼容集成入口的是 Codex CLI MCP server

  • 启动命令:codex mcp-server
  • Inspector 调试:npx @modelcontextprotocol/inspector codex mcp-server
  • 官方 MCP 工具:
    • codex:启动一个 Codex 会话,入参包含 prompt / approval-policy / base-instructions / config / cwd / include-plan-tool / model / profile / sandbox
    • codex-reply:继续一个 Codex 会话,入参包含 prompt / threadIdconversationId 只是兼容别名
  • 线程续写应使用 tools/call 返回里的 structuredContent.threadId
  • 现代 MCP 客户端主要读取 structuredContentcontent 只作为旧客户端兼容输出

本机当前检测结果:

  • 本机 codex --versioncodex-cli 0.136.0-alpha.2
  • 本机 codex app-server --help 已可用;本机 help 当前显示 --listen 支持 stdio://unix://unix://PATHws://IP:PORToff
  • 本机 codex app-server --help 当前已经支持 --ws-auth capability-token|signed-bearer-token--ws-token-file--ws-token-sha256--ws-shared-secret-file、issuer/audience/clock-skew 等 WebSocket 认证参数
  • 本机协议快照已生成到 docs/protocol-snapshots/codex-app-server/0.136.0-alpha.2/,共识别 138 个协议方法;确认支持 thread/inject_itemsthread/rollbackthread/goal/*turn/steercommand/execthread/realtime/*account/*model/verificationconfigWarningdeprecationNoticemodel/listskills/extraRoots/set
  • Boss 当前默认仍以 stdio 作为本机 agent 接入方式;ws://127.0.0.1:<port>unix://PATH 本地长驻 transport 已可灰度接入WebSocket/Unix WebSocket handshake 支持 Authorization: Bearer <token>;非 loopback signed bearer/JWT、自动重连和健康探测仍保留为后续增强不直接替换当前稳定链路
  • 官方文档提示 WebSocket ingress 满载时会返回 JSON-RPC -32001 / Server overloaded; retry later.Boss runner 已对该错误做最多 3 次指数退避重试,避免长驻连接瞬时拥塞直接把用户任务打失败
  • Boss heartbeat 已新增 App Server 能力发现缓存:按 codexAppServerDiscoveryTtlMs 拉取 model/listmodelProvider/capabilities/readskills/listplugin/listapp/listexperimentalFeature/listcollaborationMode/listpermissionProfile/listmcpServerStatus/listaccount/readaccount/rateLimits/readconfig/readconfigRequirements/readexternalAgentConfig/detectthread/listthread/loaded/listthread/turns/list;配置了 codexAppServerSkillExtraRoots / BOSS_CODEX_APP_SERVER_SKILL_EXTRA_ROOTS 时,会先调用 skills/extraRoots/set 再拉取 skills/list,归一成设备 capabilities.codexAppServer.metadata;发现失败只记录 warn不阻塞心跳。MCP discovery 使用 detail=toolsAndAuthOnlyturn discovery 固定 itemsView=notLoaded,账号、配置、线程和 Skill extra root discovery 只保留安全摘要不保存邮箱、resource URI、工具参数、完整 config、本地路径、迁移描述、turn id、turn items、用户正文、模型输出或共享 Skill 根绝对路径。
  • Boss 第一批只用 App Server 做任务级 provider不直接复用 ChatGPT Mobile 到 Codex App 的官方 relay官方移动控制链路仍属于 ChatGPT App 与 Codex App 同账号/工作区之间的产品能力,不是第三方 Boss 可以稳定依赖的私有通道

下一轮再核对版本时,不要只看 npm 包版本号;必须同时读取 App Server schema / TypeScript 定义,并把 protocol snapshot 保存到 docs/protocol-snapshots/codex-app-server/<version>/

当前“线程和线程之间可以直接对话”的产品判断:

  • Codex 已经有更强的 thread coordination、subagent thread spawn、thread/forkthread/readthread/inject_itemsturn/startturn/steer 等能力。
  • 但这不等同于任意两个 Codex 线程官方原生 P2P 互聊。更稳的理解是:一个上层 orchestrator 可以读取线程 A、把必要上下文注入线程 B、再启动或 steer 线程 B 的 turn。
  • Boss 应该把这层做成自己的 Inter-Thread Broker:用户看到的是“线程协作 / 主 Agent 协调”,底层实现由 App Server provider 完成 read / inject / start / steer / rollback并把过程写入审计与进度卡。
  • 2026-05-31 已落地第一版 runner 能力:当任务携带 intentCategory=thread_collaborationsourceCodexThreadReftargetCodexThreadRef 时,local-agent/codex-app-server-runner.mjs 会执行 thread/read(source) -> thread/inject_items(target) -> turn/start(target),并只注入受控摘要,不注入系统提示词、设备密钥或内部调度字段。

2. Boss 当前采用的接入策略

短期不直接依赖 Codex Desktop 私有 UI 结构,也不把 Codex CLI 原始 stderr/stdout 泄露给 APP。

当前实现采用 Boss 自有结构化消息:

  • 新消息类型:execution_progress
  • 服务端字段:Message.executionProgress
  • 触发范围:
    • 普通单线程对话:用户在 Boss APP 指定线程里发消息
    • 主 Agent 托管线程:托管消息实际派到目标 Codex 线程时
    • 群聊确认下发:后续目标线程执行单会复用同一张卡
  • 生命周期:
    • 任务入队:创建进度卡
    • local-agent 认领:更新为 running
    • local-agent 完成:更新同一张卡为 completed / failed

APP 展示结构对齐截图:

  • 进度:步骤列表,显示已完成 / 进行中 / 待处理 / 失败
  • 安全提醒:展示 Guardian warning 的用户可读摘要
  • 审批状态:展示命令 / 文件 / 权限审批与自动复核状态
  • 文件变更:展示 App Server patchUpdated 中的文件路径和变更类型,不展示 diff
  • 线程状态:展示 active / idle / systemError / notLoaded 以及 waitingOnApproval / waitingOnUserInput
  • 实时状态:展示 realtime 启动、同步、关闭或错误状态,附带安全清洗后的 transcript 预览和计数
  • 线程配置:展示 thread goal、模型 / provider、审批 / 沙箱、协作模式和上下文压缩状态
  • 线程协作:展示 collabToolCall 的工具名、执行状态、目标类型、目标数量和智能体状态集合,不展示源/目标线程 ID、receiverThreadIds、prompt 或 agent 私有消息
  • 工具活动:展示 MCP / dynamic tool / web search / image view / image generation / hook / Review / command 的类型、名称、状态和安全摘要不展示参数、结果、URL token、命令正文、命令输出、图像生成原始 result/revised prompt 或 hook 原始输出
  • 思考摘要:展示 Codex 官方 reasoning summary 和状态,不展示 raw reasoning content、item id 或密钥
  • 运行状态展示模型重路由、上下文用量、MCP 启动状态、远控连接状态和 Windows 沙箱准备状态
  • 分支详情变更行、Git 操作、GitHub CLI 可用状态
  • 生成结果从执行结果里提取文件、图片、APK、文档等产物名
  • 后台智能体:预留 OMX / Hermes / explorer 等多智能体来源展示

UI 参考:

  • image2 生成稿:design/image2/boss-app-codex-app-server-progress-card-20260531.png
  • 当前生成稿保持微信效率型:顶部保留项目目标 / 版本记录固定入口,聊天区只展示最终用户消息和结构化进度卡,进度卡分为 进度 / 线程状态 / 实时状态 / 线程配置 / 线程协作 / 工具活动 / 思考摘要 / 账号状态 / 运行状态 / 安全提醒 / 审批状态 / 文件变更 / 分支详情 / 生成结果 / 后台智能体
  • 后续 Android / Web 继续按该稿收口,不新增无关功能,不把协议字段、系统提示词或执行 envelope 暴露给用户

3. 安全边界

进度卡只允许展示用户可见摘要:

  • 不展示系统提示词
  • 不展示完整执行 prompt
  • 不展示设备 token、账号密钥、内部工作目录调度说明
  • 不展示 Codex CLI 启动 envelope、sandbox、approval、session id、MCP 启动日志
  • RemoteRuntimeAdapter 仍会先拦截只读环境提示和 Codex envelope 泄漏,再进入消息账本

4. 历史引用项目最新状态

本次按 GitHub 最新元数据核对过的项目:

项目 最新状态 对 Boss 的可借鉴点
openai/codex rust-v0.129.02026-05-07 发布main 在 2026-05-08 仍有提交 后续优先补 codex mcp-server 长驻适配器;参考 ThreadStore、turn metadata、app-server protocol v3 方向,不再只靠 codex exec resume
Yeachan-Heo/oh-my-codex v0.16.22026-05-08 发布 $ultragoal 聚合目标、commit-shared wiki / compaction、state/session isolation、Codex native hook setup 值得同步到 Boss 的任务目标与进度卡
ultraworkers/claw-code main 最新提交 2026-05-06instructkr/claw-code 已指向该仓库;暂无 GitHub release 继续保留抽象后端,不写死版本;重点观察 skills help routing、push_output_block、Rust harness 更新
NousResearch/hermes-agent v2026.5.7 / v0.13.0Tenacity Release Durable Multi-Agent Kanban、heartbeat / reclaim / zombie detection、goal lock、checkpoints v2 可作为 Boss 主 Agent 长任务可靠性升级参考
iflytek/skillhub v0.2.62026-04-29 发布main 2026-05-08 仍更新 Skill 订阅通知、OIDC 登录、S3 IAM、namespace CSV 批量成员导入,适合 Boss 企业 Skill 治理后台后续吸收
openclaw/openclaw v2026.5.72026-05-07 发布main 2026-05-08 仍更新 Telegram allowlist、polling watchdog、deliverySucceeded、Codex approval 去重、provider/model callback 修复,可用于 Boss Telegram 网关和远程审批
goldmar/openclaw-code-agent v4.2.32026-05-08 发布 OpenClaw + Codex coding agent 的 session lifecycle、wake routing、worktree/PR policy可作为 Boss “聊天控制桌面 Codex 开发”的旁路参考

5. 下一步建议

第一阶段已经落地:

  • Boss 消息账本新增 execution_progress
  • Android 原生聊天页新增结构化进度卡
  • local-agent 完成回写会补 Git diff、GitHub CLI 状态和产物名
  • local-agent 新增 Codex App Server runnerboss-agent 默认打开;conversation_reply / dispatch_execution 会先尝试 App Server任务尚未真正启动 turn 时允许回退 CLIturn 已启动后不再重复下发,避免双写同一线程
  • local-agent 新增 Codex Computer Use -> CUA Driver 桌面控制级 fallback远程控制这台电脑时默认先通过 Codex Computer Use 执行,失败后再走 Boss 既有 CUA Driver runtime
  • device-heartbeat 设备能力新增 codexAppServer,用于前台和后台知道该设备是否具备 App Server provider
  • 新增 scripts/codex-app-server-protocol-snapshot.mjs,可把本机 Codex App Server 的 help、JSON Schema、TypeScript bindings 和方法清单生成到 docs/protocol-snapshots/codex-app-server/<version>/
  • local-agent/codex-app-server-runner.mjs 已吸收 App Server 协议进度事件,并把 plan、diff、artifact、subagent 归一成 Boss executionProgress,服务端 complete 回写会与本地 Git/GitHub 进度合并,不再覆盖协议原生进度
  • local-agent/codex-app-server-runner.mjs 已把 App Server 审批、Guardian warning 和 file-change patch 事件归一成 executionProgress.approvals / warnings / fileChanges;服务端和 Android 原生进度卡已支持展示,且测试覆盖了密钥和 diff 不外泄
  • local-agent/codex-app-server-runner.mjs 已把 App Server thread/status/changedthread/realtime/started|transcript|outputAudio|itemAdded|error|closed 归一成 executionProgress.threadStatus / realtime;服务端进度路由和 Android 原生进度卡已支持展示,测试覆盖 SDP、音频原始数据和 raw item 不外泄
  • local-agent/codex-app-server-runner.mjs 已把 App Server model/reroutedthread/tokenUsage/updatedmcpServer/startupStatus/updatedremoteControl/status/changed 归一成 executionProgress.modelRoute / tokenUsage / mcpServers / remoteControl;服务端进度路由和 Android 原生进度卡已支持展示,测试覆盖 installationId 和密钥不外泄
  • local-agent/codex-app-server-runner.mjs 已把 App Server thread/goal/updated|clearedthread/settings/updatedthread/compacted 归一成 executionProgress.threadGoal / threadSettings / compaction;服务端进度路由和 Android 原生进度卡已支持展示,测试覆盖 cwd、turnId、内部 prompt 不外泄
  • local-agent/codex-app-server-runner.mjs 已把 App Server account/updatedaccount/rateLimits/updatedmodel/verificationwarningconfigWarningdeprecationNotice 归一成 executionProgress.accountStatus / modelVerification / warnings;服务端进度路由和 Android 原生进度卡已支持展示测试覆盖配置路径、turnId 和密钥不外泄
  • local-agent/codex-app-server-runner.mjs 已把 App Server ThreadItem.collabToolCallThreadItem.contextCompaction 归一成 executionProgress.threadCollaboration / compaction;新版 receiverThreadIds / agentsStates 只归一为目标数量与 agent 状态集合;服务端进度路由和 Android 原生进度卡已支持展示,测试覆盖源/目标线程 ID、内部 prompt、agent 私有消息、turnId 和密钥不外泄
  • local-agent/codex-app-server-runner.mjs 已把 App Server mcpToolCalldynamicToolCallwebSearchimageViewenteredReviewModeexitedReviewModecommandExecution 归一成 executionProgress.toolActivities;服务端进度路由和 Android 原生进度卡已支持展示,测试覆盖 tool arguments/result、URL token、命令正文/输出、本地路径和密钥不外泄
  • local-agent/codex-app-server-runner.mjs 已把 App Server ThreadItem.planThreadItem.reasoning.summary 归一成 executionProgress.steps / reasoningSummary;服务端进度路由和 Android 原生进度卡已支持展示,测试覆盖 raw reasoning content、reasoning item id 和密钥不外泄
  • local-agent/codex-app-server-runner.mjs 已把 App Server ThreadItem.imageGeneration 归一成 executionProgress.toolActivities / artifacts;服务端进度路由和 Android 原生进度卡已支持展示,测试覆盖 revisedPrompt、result、item id、本地绝对路径和密钥不外泄
  • local-agent/codex-app-server-runner.mjs 已把 App Server hook/started|completed 归一成 executionProgress.toolActivities;服务端进度路由和 Android 原生进度卡已支持展示,测试覆盖 hook id、sourcePath、statusMessage、entries、本地绝对路径和密钥不外泄
  • local-agent/codex-app-server-runner.mjs 已把 App Server windowsSandbox/setupCompleted 归一成 executionProgress.windowsSandbox;服务端进度路由和 Android 原生进度卡已支持展示,测试覆盖 setup error 中的 token、本地 Windows 路径和 sourcePath 不外泄
  • 新增实时进度入口 POST /api/v1/master-agent/tasks/[taskId]/progress,设备端可在任务执行中持续刷新同一张 execution_progress 卡;local-agent 的 App Server runner 已在收到协议进度事件时调用该接口complete 仍携带最终进度作为兜底
  • 新增服务端线程协作入口 POST /api/v1/projects/[projectId]/thread-collaboration,由 Boss 校验源/目标项目权限并创建 intentCategory=thread_collaborationconversation_reply 任务;设备端继续通过 App Server runner 执行 thread/read -> thread/inject_items -> turn/start,避免把“线程互通”误做成无监管 P2P
  • 新增活跃 turn 干预:任务携带 targetCodexTurnId / targetTurnIdApp Server runner 会调用 turn/steer,并把 turnControl=steerturnId 写回执行结果;没有活跃 turn id 时仍使用 turn/start
  • getCodexAppServerRunnerConfig 已识别 codexAppServerTransport / BOSS_CODEX_APP_SERVER_TRANSPORTcodexAppServerUrl / BOSS_CODEX_APP_SERVER_URLcodexAppServerAuthTokenFile / BOSS_CODEX_APP_SERVER_AUTH_TOKEN_FILElocal-agent/codex-app-server-runner.mjs 现已支持 stdiows://127.0.0.1:<port>unix://PATH 三种 JSON-RPC transport默认仍是 stdiows/unix 适合作为同机长驻 App Server 灰度路径
  • 新增 App Server 过载退避:单个 JSON-RPC 请求收到 -32001retry later 文案时,会在同一个任务生命周期内重试,超出上限后才进入失败/CLI fallback 判定
  • 新增 App Server capability discoverylocal-agent 会把可用模型、默认/快速/深度模型建议、provider 能力、Skill、Plugin、App 摘要写入设备 heartbeatWeb 设备详情已显示 App Server、模型和扩展数量为后续 APP/后台模型配置页提供真实数据来源
  • 新增 App Server 共享 Skill 根下发:配置 codexAppServerSkillExtraRootsBOSS_CODEX_APP_SERVER_SKILL_EXTRA_ROOTSrunner 会在 discovery 阶段调用 skills/extraRoots/set,再刷新 skills/list;设备详情页展示“共享 Skill 根N 个 · 已下发/下发失败”metadata 只保存数量、basename 和状态,不保存绝对路径

后续建议按两步继续:

  1. 把当前 runner 提升为完整 CodexAppServerBackendAdapter:继续补 MCP tool / account / rate-limit / config 事件映射,并把 realtime 字段纳入后台风险看板,但保持 feature flag 默认关闭。
  2. 完善长驻 transport 灰度:ws://127.0.0.1:<port>unix://PATH 和 bearer token handshake 已可用,下一步补 signed bearer JWT 的 issuer / audience 校验联调、断线重连和健康探测;失败自动回退 stdio。
  3. 新增 CodexMcpBackendAdapter:让 codex mcp-server 成为 ExecutionBackend 的兼容实现,用于 App Server 不可用或只需要轻量会话时。
  4. 每次 Codex 协议升级时生成 schema、跑映射测试、灰度打开新 capability避免把某个 Codex 版本写死到 APP 或后台。