feat: expose codex runtime lifecycle events

This commit is contained in:
AI Bot
2026-06-03 12:27:41 +08:00
parent f23ed9f188
commit b31238b6e2
12 changed files with 180 additions and 7 deletions

View File

@@ -95,6 +95,7 @@
- 当前 App Server heartbeat discovery 已新增外部 Agent 迁移、Marketplace 和实验特性治理能力摘要,设备详情页会展示“迁移治理 / 市场治理 / 实验特性治理”;该摘要只来自 runner 安全 catalog 和协议快照证明,不会在 heartbeat 中调用 `externalAgentConfig/import``marketplace/*``experimentalFeature/enablement/set` 等写操作。
- 当前 App Server heartbeat discovery 已新增审查、Windows 沙箱和文件搜索事件能力摘要,设备详情页会展示“审查治理 / Windows 沙箱 / 文件搜索事件”;该摘要只来自 runner 安全 catalog 和协议快照证明,不会在 heartbeat 中调用 `review/start``windowsSandbox/setupStart` 等动作。
- 当前 App Server heartbeat discovery 已新增 MCP、用户交互和 Guardian 治理能力摘要设备详情页会展示“MCP 治理 / 用户交互 / Guardian 治理”;该摘要只来自 runner 安全 catalog 和协议快照证明,不会在 heartbeat 中调用 `mcpServer/tool/call``item/tool/requestUserInput``thread/approveGuardianDeniedAction` 等动作。
- 当前 App Server heartbeat discovery 已新增运行事件、扩展事件和线程生命周期事件能力摘要,设备详情页会展示“运行事件 / 扩展事件 / 线程生命周期”;该摘要只来自 runner 安全 catalog 和协议快照证明,不会在 heartbeat 中主动触发进程、插件、Skill 或线程生命周期动作。
- `GET http://127.0.0.1:4317/api/v1/skills` 正常,已返回本机扫描到的 Codex Skill
- `POST http://127.0.0.1:4317/api/v1/heartbeat` 正常,且会顺带触发 `thread-context` 上报
- `local-agent` 当前每 5 秒轮询一次本机 Skill lifecycle 请求;默认打开 `skillLifecycleEnabled=true`。远程 `install` 或带 `sourceUrl` 的更新必须命中 `skillLifecycleAllowedSources``skillLifecycleTrustedSources`,为空时只允许既有本地 Skill 的 `update / rollback / uninstall / version_lock`;请求携带 `checksum / expectedChecksum` 时会校验 `manifest.json``SKILL.md` 的 sha256失败会清理半安装目录或尽量恢复备份。卸载 / 更新 / 回滚前会在 `skillsDir/.boss-skill-backups` 保留备份,卸载仍限制在 `skillsDir` 目录内,版本锁写入 `.boss-skill-locks.json`

View File

@@ -153,7 +153,7 @@
- Web 和原生 Android 当前都已经接上“新设备导入草稿 -> 勾选 -> 决议预览 -> 应用导入”的前台页面;已绑定生产设备继续保留 heartbeat 自动导入链路
- 原生首页的刷新失败策略当前已改成按当前 tab 独立判错,不会再因为 `设备 / 设置 / OTA` 的旁路请求失败把会话页刷新一并判成失败
- 当前量产方向已经明确为“Boss 企业控制面 + 可插拔执行协议”:多租户、权限、审批、审计、备份、回退和 Skill 治理由 Boss 承担Codex App Server / Codex MCP / Codex CLI / Computer Use / 业务系统 API 都作为 provider 接入;详见 `docs/architecture/enterprise_ai_ops_architecture_cn.md`
- 当前 Codex App Server 已完成二十批接入boss-agent 默认开启 `local-agent/codex-app-server-runner.mjs` 作为 Codex 绑定入口,优先走 `codex app-server` stdio也可灰度连接 `ws://127.0.0.1:<port>``unix://PATH` 同机长驻 App Server长驻连接支持 `Authorization: Bearer <token>`,配置上优先使用 `codexAppServerAuthTokenFile`。turn 启动前失败才回退 CLIturn 启动后不重复执行;桌面远程控制默认先走 `codex-computer-use`,失败后回退 `cua-driver-computer-use`。2026-06-03 已按本机 `codex-cli 0.136.0-alpha.2` 生成协议快照 `docs/protocol-snapshots/codex-app-server/0.136.0-alpha.2/`,并把 `turn/plan/updated``turn/diff/updated``item/started|completed``thread/started``item/*/requestApproval``item/autoApprovalReview/*``guardianWarning``serverRequest/resolved``item/fileChange/patchUpdated``thread/status/changed``thread/realtime/*``model/rerouted``thread/tokenUsage/updated``mcpServer/startupStatus/updated``remoteControl/status/changed``windowsSandbox/setupCompleted``thread/goal/*``thread/settings/updated``thread/compacted``account/updated``account/rateLimits/updated``model/verification``warning``configWarning``deprecationNotice``ThreadItem.collabToolCall``ThreadItem.contextCompaction``mcpToolCall``dynamicToolCall``webSearch``imageView``imageGeneration``hook/started|completed``enteredReviewMode``exitedReviewMode``commandExecution``ThreadItem.plan``ThreadItem.reasoning.summary` 归一到 Boss `execution_progress` 卡片realtime 只保留状态、文本摘要和计数运行状态只保留模型切换、上下文用量、MCP 状态、远控连接摘要和 Windows 沙箱准备状态,线程配置只保留目标、模型、审批、沙箱、协作模式和压缩状态,线程协作只保留工具名、状态、目标类型、目标数量和智能体状态集合,工具活动只保留类型、名称、状态和安全摘要,图像生成只保留状态与安全文件名,钩子生命周期只保留事件名、处理器类型、状态、来源、执行模式和耗时,思考摘要只保留官方 summary 文本和状态,账号状态只保留认证方式、套餐、额度窗口、积分余额和模型校验摘要,不保存 SDP、音频原始数据、raw item、remote installationId、cwd、turnId、配置文件路径、collab 源/目标线程 ID、collab receiverThreadIds、collab prompt、agentsStates 私有消息、共享 Skill 根绝对路径、hook key/command/sourcePath/statusMessage/hash/error message、tool arguments/result/contentItems、web URL token、命令正文/输出、raw reasoning content、reasoning item id、imageGeneration revisedPrompt/result、hook sourcePath/statusMessage/entries、Windows sandbox sourcePath/samplePaths/本地绝对路径或未清洗密钥。heartbeat 已能缓存 `model/list / skills/list / skills/extraRoots/set / hooks/list / plugin/list / app/list / modelProvider/capabilities/read / experimentalFeature/list / collaborationMode/list / permissionProfile/list / mcpServerStatus/list / account/read / account/rateLimits/read / config/read / configRequirements/read / externalAgentConfig/detect / thread/list / thread/loaded/list / thread/turns/list` 的能力摘要;同批已补 `turn/steer` 活跃 turn 干预和 `POST /api/v1/projects/[projectId]/thread-collaboration` 服务端线程协作排队入口。MCP、权限、账号、配置、外部 Agent、线程、turn、HookSkill extra roots discovery 只保留安全摘要,不保存 resource URI、权限文件规则、工具参数、邮箱、完整 config、本地路径、迁移描述、turn id、turn items、用户正文、模型输出、hook 命令、共享 Skill 根绝对路径或 token。
- 当前 Codex App Server 已完成二十批接入boss-agent 默认开启 `local-agent/codex-app-server-runner.mjs` 作为 Codex 绑定入口,优先走 `codex app-server` stdio也可灰度连接 `ws://127.0.0.1:<port>``unix://PATH` 同机长驻 App Server长驻连接支持 `Authorization: Bearer <token>`,配置上优先使用 `codexAppServerAuthTokenFile`。turn 启动前失败才回退 CLIturn 启动后不重复执行;桌面远程控制默认先走 `codex-computer-use`,失败后回退 `cua-driver-computer-use`。2026-06-03 已按本机 `codex-cli 0.136.0-alpha.2` 生成协议快照 `docs/protocol-snapshots/codex-app-server/0.136.0-alpha.2/`,并把 `turn/plan/updated``turn/diff/updated``item/started|completed``thread/started``item/*/requestApproval``item/autoApprovalReview/*``guardianWarning``serverRequest/resolved``item/fileChange/patchUpdated``thread/status/changed``thread/realtime/*``model/rerouted``thread/tokenUsage/updated``mcpServer/startupStatus/updated``remoteControl/status/changed``windowsSandbox/setupCompleted``thread/goal/*``thread/settings/updated``thread/compacted``account/updated``account/rateLimits/updated``model/verification``warning``configWarning``deprecationNotice``ThreadItem.collabToolCall``ThreadItem.contextCompaction``mcpToolCall``dynamicToolCall``webSearch``imageView``imageGeneration``hook/started|completed``enteredReviewMode``exitedReviewMode``commandExecution``ThreadItem.plan``ThreadItem.reasoning.summary` 归一到 Boss `execution_progress` 卡片realtime 只保留状态、文本摘要和计数运行状态只保留模型切换、上下文用量、MCP 状态、远控连接摘要和 Windows 沙箱准备状态,线程配置只保留目标、模型、审批、沙箱、协作模式和压缩状态,线程协作只保留工具名、状态、目标类型、目标数量和智能体状态集合,工具活动只保留类型、名称、状态和安全摘要,图像生成只保留状态与安全文件名,钩子生命周期只保留事件名、处理器类型、状态、来源、执行模式和耗时,思考摘要只保留官方 summary 文本和状态,账号状态只保留认证方式、套餐、额度窗口、积分余额和模型校验摘要,不保存 SDP、音频原始数据、raw item、remote installationId、cwd、turnId、配置文件路径、collab 源/目标线程 ID、collab receiverThreadIds、collab prompt、agentsStates 私有消息、共享 Skill 根绝对路径、hook key/command/sourcePath/statusMessage/hash/error message、tool arguments/result/contentItems、web URL token、命令正文/输出、raw reasoning content、reasoning item id、imageGeneration revisedPrompt/result、hook sourcePath/statusMessage/entries、Windows sandbox sourcePath/samplePaths/本地绝对路径或未清洗密钥。heartbeat 已能缓存 `model/list / skills/list / skills/extraRoots/set / hooks/list / plugin/list / app/list / modelProvider/capabilities/read / experimentalFeature/list / collaborationMode/list / permissionProfile/list / mcpServerStatus/list / account/read / account/rateLimits/read / config/read / configRequirements/read / externalAgentConfig/detect / thread/list / thread/loaded/list / thread/turns/list` 的能力摘要;同批已补 `turn/steer` 活跃 turn 干预和 `POST /api/v1/projects/[projectId]/thread-collaboration` 服务端线程协作排队入口。MCP、权限、账号、配置、外部 Agent、线程、turn、HookSkill extra roots、运行事件、扩展事件和线程生命周期 discovery 只保留安全摘要,不保存 resource URI、权限文件规则、工具参数、邮箱、完整 config、本地路径、迁移描述、turn id、turn items、用户正文、模型输出、hook 命令、共享 Skill 根绝对路径或 token。
- 第十九批另补 `threadActionSummary` 线程操作能力摘要:设备详情页会显示 archive / unarchive / fork / compact / rollback / rename / metadata / steer / interrupt / shell / unsubscribe 等能力分组;该字段只读,不在 heartbeat 中调用任何会改变线程状态的 App Server API。
- 第二十批另补 `pluginGovernanceSummary` 插件治理能力摘要:设备详情页会显示 install / uninstall / read / skill-read / share 等能力分组;该字段只读,不在 heartbeat 中调用任何插件安装、卸载或共享写 API。
- 第二十一批另补 `accountGovernanceSummary / configGovernanceSummary` 账号与配置治理能力摘要:设备详情页会显示 login / logout / token refresh / add credits nudge / config write / MCP reload / Skill config write 等能力分组;这些字段只读,不在 heartbeat 中调用任何账号或配置写 API。
@@ -161,6 +161,7 @@
- 第二十三批另补 `externalAgentGovernanceSummary / marketplaceGovernanceSummary / experimentalFeatureGovernanceSummary` 外部 Agent 迁移、Marketplace 和实验特性治理能力摘要:设备详情页会显示 external-agent import、marketplace add/remove/upgrade 和 experimental feature enablement 等能力分组;这些字段只读,不在 heartbeat 中调用任何迁移导入、marketplace 写入或实验特性启用 API。
- 第二十四批另补 `reviewGovernanceSummary / windowsSandboxGovernanceSummary / fuzzyFileSearchSummary` 审查、Windows 沙箱和文件搜索事件能力摘要:设备详情页会显示 review start、Windows sandbox readiness/setup 和 fuzzy file search updated/completed 等能力分组;这些字段只读,不在 heartbeat 中调用任何审查启动、沙箱设置或文件搜索动作。
- 第二十五批另补 `mcpGovernanceSummary / userInteractionGovernanceSummary / guardianGovernanceSummary` MCP、用户交互和 Guardian 治理能力摘要:设备详情页会显示 MCP OAuth/resource/tool/elicitation、tool requestUserInput、Guardian denied action approval 和 permission request approval 等能力分组;这些字段只读,不在 heartbeat 中调用任何 MCP、用户输入或 Guardian 放行动作。
- 第二十六批另补 `runtimeEventSummary / extensionEventSummary / threadLifecycleEventSummary` 运行事件、扩展事件和线程生命周期事件能力摘要:设备详情页会显示 process output/exited、raw response completed、skills changed、plugin installed、thread started/closed/archived/unarchived/name updated 等能力分组;这些字段只读,不在 heartbeat 中主动触发进程、插件、Skill 或线程生命周期动作。
- 当前 boss-agent 已支持 Mac OTA`local-agent/boss-agent-ota-runner.mjs` 默认开启,每 5 分钟检查服务端最新包;状态页可手动检查或下载并安装,安装时保留原绑定配置,只更新版本号和本机 runtime 路径。最新验证版本为 `20260516221619`,已在 MacBook Air `macbook-air` 上确认 OTA 下载校验、暂存、覆盖安装后不会误切到默认 `config.cloud.json`。正式分发脚本已预留 Developer ID 公证路径:`BOSS_AGENT_NOTARIZE=1` 配合 notary profile 或 Apple ID 凭据。
- 当前量产治理已补设备撤权和任务可靠性底座:`revoke_device` 会清空设备 token、标记离线并阻断 heartbeat / 任务认领 / Skill 同步 / 日志上报 / boss-agent OTA`MasterAgentTask` claim 会记录 attempt 和 lease运行中任务可按租约重试超过上限转 `timed_out`,用户或管理员可通过 cancel 接口转 `canceled` 且迟到 complete 不覆盖终态。
- 当前群聊 `dispatch_execution` 完成回写已补幂等,重复完成不会再向群聊重复追加结果

View File

@@ -129,6 +129,7 @@
- App Server heartbeat discovery 现在还会写入 `capabilities.codexAppServer.metadata.externalAgentGovernanceSummary / marketplaceGovernanceSummary / experimentalFeatureGovernanceSummary`。这些字段用于 APP/后台展示当前协议下可接入的外部 Agent 迁移、Marketplace 和实验特性治理动作数量和分组,覆盖 external-agent import、marketplace add/remove/upgrade 和 experimental feature enablement它们只来自 runner 安全 catalog 和协议快照,不会在 heartbeat 中调用迁移导入、marketplace 写入或实验特性启用操作。
- App Server heartbeat discovery 现在还会写入 `capabilities.codexAppServer.metadata.reviewGovernanceSummary / windowsSandboxGovernanceSummary / fuzzyFileSearchSummary`。这些字段用于 APP/后台展示当前协议下可接入的审查、Windows 沙箱和文件搜索事件能力,覆盖 review start、Windows sandbox readiness/setup 和 fuzzy file search updated/completed它们只来自 runner 安全 catalog 和协议快照,不会在 heartbeat 中调用审查启动、沙箱设置或文件搜索动作。
- App Server heartbeat discovery 现在还会写入 `capabilities.codexAppServer.metadata.mcpGovernanceSummary / userInteractionGovernanceSummary / guardianGovernanceSummary`。这些字段用于 APP/后台展示当前协议下可接入的 MCP、用户交互和 Guardian 治理能力,覆盖 MCP OAuth/resource/tool/elicitation、tool requestUserInput、Guardian denied action approval 和 permission request approval它们只来自 runner 安全 catalog 和协议快照,不会在 heartbeat 中调用 MCP、用户输入或 Guardian 放行动作。
- App Server heartbeat discovery 现在还会写入 `capabilities.codexAppServer.metadata.runtimeEventSummary / extensionEventSummary / threadLifecycleEventSummary`。这些字段用于 APP/后台展示当前协议下可接入的运行事件、扩展事件和线程生命周期事件能力,覆盖 process output/exited、raw response completed、skills changed、plugin installed、thread started/closed/archived/unarchived/name updated它们只来自 runner 安全 catalog 和协议快照,不会在 heartbeat 中主动触发进程、插件、Skill 或线程生命周期动作。
- App Server heartbeat discovery 现在支持 `skills/extraRoots/set`:配置 `codexAppServerSkillExtraRoots` 或环境变量 `BOSS_CODEX_APP_SERVER_SKILL_EXTRA_ROOTS`runner 会先把共享 Skill 根下发给 App Server再刷新 `skills/list`,并写入 `capabilities.codexAppServer.metadata.skillExtraRootsSummary`。该字段用于 APP/后台展示企业共享 Skill 根是否已下发只保留数量、basename 和状态不保存根目录绝对路径、Skill 文件路径或配置原文。
- App Server heartbeat discovery 现在支持 `hooks/list`,写入 `capabilities.codexAppServer.metadata.hookSummary`。该字段用于 APP/后台展示本机 Codex hook 治理状态;只保留 workspace 数、hook 数、启用数、受管 / 可信 / 修改 / 未信任计数、warning / error 计数和事件 / handler 类型,不保存 hook key、command、sourcePath、statusMessage、hash、error message 或本地路径。
- 当前 Codex App Server runner 已新增第一版 Boss Inter-Thread Broker任务携带 `intentCategory=thread_collaboration``sourceCodexThreadRef``targetCodexThreadRef` 时,会先 `thread/read` 源线程,再通过 `thread/inject_items` 向目标线程注入受控摘要,最后 `turn/start` 目标线程;服务端入口是 `POST /api/v1/projects/[projectId]/thread-collaboration`,负责权限、源/目标线程校验和任务排队。这不是假设官方线程 P2P而是 Boss 自己做线程协作编排。

File diff suppressed because one or more lines are too long

View File

@@ -35,7 +35,7 @@
- `launchd` 已安装:`~/Library/LaunchAgents/com.hyzq.boss.local-agent.plist`
- 当前执行底座抽象层已落地在 `src/lib/execution/`,并已补齐 `ExecutionBackend / PromptAssembler / PermissionPolicy / RemoteRuntimeAdapter / OrchestrationBackend` 默认实现
- 当前生产主链仍然沿用 `local-agent -> codex exec resume -> /api/v1/master-agent/tasks/[taskId]/complete`,执行底座重构以“先抽象、不改行为”为准
- 当前 Codex server 调研结论已记录在 `docs/architecture/codex_server_progress_card_cn.md`:长期优先方向更新为 `Codex App Server / Remote Control -> Inter-Thread Broker -> CodexMcpBackendAdapter -> codex exec resume` 的分层 provider 策略;当前 boss-agent 默认打开 `Codex App Server` runner 作为 Codex 绑定入口Boss 仍保留 `codex exec resume` 兜底,并继续用 `execution_progress` 结构化进度卡作为 APP 可见执行态。本机 `codex-cli 0.136.0-alpha.2` 协议快照已生成到 `docs/protocol-snapshots/codex-app-server/0.136.0-alpha.2/`,确认支持 WebSocket auth、`thread/inject_items``turn/steer``turn/interrupt``thread/archive``thread/unarchive``thread/fork``thread/compact/start``thread/rollback``thread/name/set``thread/metadata/update``thread/shellCommand``thread/unsubscribe``thread/realtime/*``thread/goal/*``thread/settings/updated``thread/compacted``ThreadItem.contextCompaction``ThreadItem.collabToolCall``account/*``model/verification``configWarning``deprecationNotice``command/exec``command/exec/write``command/exec/resize``command/exec/terminate``model/list``skills/extraRoots/set``hooks/list``plugin/install``plugin/uninstall``plugin/read``plugin/skill/read``plugin/share/*``config/value/write``config/batchWrite``config/mcpServer/reload``skills/config/write``fs/*``externalAgentConfig/import``marketplace/add|remove|upgrade``experimentalFeature/enablement/set``review/start``windowsSandbox/readiness|setupStart``fuzzyFileSearch/session*``mcpServer/oauth*``mcpServer/resource/read``mcpServer/tool/call``mcpServer/elicitation/request``item/tool/requestUserInput``thread/approveGuardianDeniedAction`
- 当前 Codex server 调研结论已记录在 `docs/architecture/codex_server_progress_card_cn.md`:长期优先方向更新为 `Codex App Server / Remote Control -> Inter-Thread Broker -> CodexMcpBackendAdapter -> codex exec resume` 的分层 provider 策略;当前 boss-agent 默认打开 `Codex App Server` runner 作为 Codex 绑定入口Boss 仍保留 `codex exec resume` 兜底,并继续用 `execution_progress` 结构化进度卡作为 APP 可见执行态。本机 `codex-cli 0.136.0-alpha.2` 协议快照已生成到 `docs/protocol-snapshots/codex-app-server/0.136.0-alpha.2/`,确认支持 WebSocket auth、`thread/inject_items``turn/steer``turn/interrupt``thread/archive``thread/unarchive``thread/fork``thread/compact/start``thread/rollback``thread/name/set``thread/metadata/update``thread/shellCommand``thread/unsubscribe``thread/realtime/*``thread/started|closed|archived|unarchived|name/updated``process/outputDelta|exited``rawResponseItem/completed``thread/goal/*``thread/settings/updated``thread/compacted``ThreadItem.contextCompaction``ThreadItem.collabToolCall``account/*``model/verification``configWarning``deprecationNotice``command/exec``command/exec/write``command/exec/resize``command/exec/terminate``model/list``skills/changed``skills/extraRoots/set``hooks/list``plugin/installed``plugin/install``plugin/uninstall``plugin/read``plugin/skill/read``plugin/share/*``config/value/write``config/batchWrite``config/mcpServer/reload``skills/config/write``fs/*``externalAgentConfig/import``marketplace/add|remove|upgrade``experimentalFeature/enablement/set``review/start``windowsSandbox/readiness|setupStart``fuzzyFileSearch/session*``mcpServer/oauth*``mcpServer/resource/read``mcpServer/tool/call``mcpServer/elicitation/request``item/tool/requestUserInput``thread/approveGuardianDeniedAction`
- 当前 App Server 能力发现已新增治理摘要local-agent 会在 heartbeat discovery 中拉取 `experimentalFeature/list / collaborationMode/list / permissionProfile/list / mcpServerStatus/list`,并把实验特性、协作模式、权限 Profile 与 MCP 服务状态写入设备 `codexAppServer.metadata`;设备详情页会显示“治理”摘要。该链路只保留安全摘要,不保存 MCP resource URI、permission profile 文件规则、本地路径、token 或工具参数。
- 当前 App Server 能力发现已新增账号与配置摘要local-agent 会在 heartbeat discovery 中拉取 `account/read / account/rateLimits/read / config/read / configRequirements/read / externalAgentConfig/detect`并把账号登录方式、套餐、额度使用率、App 配置计数、托管要求数量和外部 Agent 迁移候选数量写入设备 `codexAppServer.metadata`;设备详情页会显示“账号 / 配置”摘要。该链路只读不写,不保存账号邮箱、完整 config、API key、本地路径或迁移描述。
- 当前 App Server 能力发现已新增线程可见性摘要local-agent 会在 heartbeat discovery 中拉取 `thread/list / thread/loaded/list`,并把线程总数、已加载线程数、活跃线程数、归档线程数、最新更新时间和非归档线程轻量目录写入设备 `codexAppServer.metadata.threadSummary`;设备详情页会显示“线程”摘要。该链路不保存 cwd、本地路径、turn 内容、用户正文或内部 prompt。
@@ -47,6 +47,7 @@
- 当前 App Server 能力发现已新增外部 Agent 迁移、Marketplace 和实验特性治理能力摘要local-agent 会把已验证进入当前协议快照的 external-agent 导入、marketplace 添加 / 移除 / 升级、实验特性 enablement 写入设备 `codexAppServer.metadata.externalAgentGovernanceSummary / marketplaceGovernanceSummary / experimentalFeatureGovernanceSummary`;设备详情页会显示“迁移治理 / 市场治理 / 实验特性治理”。这些字段只读,不在 heartbeat 中调用任何迁移导入、marketplace 写入或实验特性启用 API。
- 当前 App Server 能力发现已新增审查、Windows 沙箱和文件搜索事件能力摘要local-agent 会把已验证进入当前协议快照的 review start、Windows sandbox readiness / setup start / setup completed、fuzzy file search updated / completed 写入设备 `codexAppServer.metadata.reviewGovernanceSummary / windowsSandboxGovernanceSummary / fuzzyFileSearchSummary`;设备详情页会显示“审查治理 / Windows 沙箱 / 文件搜索事件”。这些字段只读,不在 heartbeat 中调用任何审查启动、沙箱设置或文件搜索动作。
- 当前 App Server 能力发现已新增 MCP、用户交互和 Guardian 治理能力摘要local-agent 会把已验证进入当前协议快照的 MCP OAuth / resource / tool / elicitation、tool requestUserInput、Guardian denied action approval 和 permission request approval 写入设备 `codexAppServer.metadata.mcpGovernanceSummary / userInteractionGovernanceSummary / guardianGovernanceSummary`设备详情页会显示“MCP 治理 / 用户交互 / Guardian 治理”。这些字段只读,不在 heartbeat 中调用任何 MCP、用户输入或 Guardian 放行动作。
- 当前 App Server 能力发现已新增运行事件、扩展事件和线程生命周期事件能力摘要local-agent 会把已验证进入当前协议快照的 process output / exited、raw response completed、skills changed、plugin installed、thread started / closed / archived / unarchived / name updated 写入设备 `codexAppServer.metadata.runtimeEventSummary / extensionEventSummary / threadLifecycleEventSummary`;设备详情页会显示“运行事件 / 扩展事件 / 线程生命周期”。这些字段只读,不在 heartbeat 中主动触发进程、插件、Skill 或线程生命周期动作。
- 当前 App Server 能力发现已支持共享 Skill 根目录下发:配置 `codexAppServerSkillExtraRoots` / `BOSS_CODEX_APP_SERVER_SKILL_EXTRA_ROOTS`local-agent 会先调用 `skills/extraRoots/set`,再刷新 `skills/list`,并把 `skillExtraRootsSummary` 写入设备 `codexAppServer.metadata`;设备详情页会显示“共享 Skill 根”。该链路只保存数量、basename 和状态不保存根目录绝对路径、Skill 文件路径或配置原文。
- 当前 App Server 能力发现已新增 Hook 治理摘要local-agent 会在 heartbeat discovery 中拉取 `hooks/list`,并把 hook 数、启用数、受管 / 可信 / 修改 / 未信任计数、warning / error 计数写入设备 `codexAppServer.metadata.hookSummary`设备详情页会显示“Hook”。该链路不保存 hook key、command、sourcePath、statusMessage、hash、error message 或本地路径。
- 当前量产 B+ 架构开发文档已新增:`docs/architecture/enterprise_ai_ops_architecture_cn.md`。该文档把 PPT 中的主 Agent / 业务 Agent / 老板端 / 经理端 / 员工端 / 治理层 / 系统层 / 设备层 / 执行层 / 接入层整理成后续产品架构约束并明确数据库备份、业务回退、Codex 协议扩展和 Skill 治理方向;它是规划文档,不代表当前全部已落地
@@ -263,7 +264,7 @@ cd /Users/kris/code/boss
- 当前已新增 Boss 自有 Inter-Thread Broker 第一版:服务端入口 `POST /api/v1/projects/[projectId]/thread-collaboration` 会创建带源/目标 Codex 线程引用的协作任务App Server runner 执行 `thread/read(source) -> thread/inject_items(target) -> turn/start(target)`,用于让一个线程的结论受控进入另一个线程,不依赖官方任意线程 P2P 互聊能力
- 当前 `local-agent``dispatch_execution` 任务会按 `orchestrationBackendId` 分流:默认走 `codex exec resume`;当任务显式选择 `omx-team` 且本机 `omxEnabled + omxCommand/omxArgs` 可用时,会改走 `OMX Team Runtime` JSON 协议执行并回写 `rawThreadReply / replyBody`
- 当前 `local-agent` 会在 Codex 任务执行中和完成时回传 `executionProgress`:服务端把同一任务的进度卡从 queued / running 更新到 completed / failedAndroid 原生聊天页会显示“进度 / 线程状态 / 实时状态 / 线程配置 / 线程协作 / 工具活动 / 思考摘要 / 账号状态 / 运行状态 / 安全提醒 / 审批状态 / 文件变更 / 分支详情 / 生成结果 / 后台智能体”。2026-05-31 起Codex App Server 的 `turn/plan/updated``turn/diff/updated``item/started|completed``thread/started` 会直接映射为进度步骤、变更统计、生成产物和后台智能体;第二批已把 `item/*/requestApproval``item/autoApprovalReview/*``guardianWarning``serverRequest/resolved``item/fileChange/patchUpdated` 映射为审批、安全提醒和文件变更摘要;第三批已把 `thread/status/changed``thread/realtime/*` 安全映射为线程状态和实时状态摘要;第四批已把 `model/rerouted``thread/tokenUsage/updated``mcpServer/startupStatus/updated``remoteControl/status/changed` 安全映射为运行状态摘要;第五批已把 `thread/goal/*``thread/settings/updated``thread/compacted` 映射为线程配置摘要;第六批已把 `account/updated``account/rateLimits/updated``model/verification``warning``configWarning``deprecationNotice` 映射为账号状态、模型校验和安全提醒摘要;第七批已把 `ThreadItem.collabToolCall``ThreadItem.contextCompaction` 映射为线程协作和上下文压缩摘要;第八批已把 `mcpToolCall``dynamicToolCall``webSearch``imageView``enteredReviewMode``exitedReviewMode``commandExecution` 映射为工具活动摘要;第九批已把 `ThreadItem.plan``ThreadItem.reasoning.summary` 映射为计划步骤与思考摘要;第十批已把 `ThreadItem.imageGeneration` 映射为图像生成工具活动和图片产物;第十一批已把 `hook/started|completed` 映射为钩子生命周期工具活动;第十二批已把 `windowsSandbox/setupCompleted` 映射为 Windows 沙箱准备状态摘要;第十七批已把新版 `ThreadItem.collabToolCall.receiverThreadIds / agentsStates` 安全映射为线程协作目标数量和 agent 状态集合。所有进度均通过 `POST /api/v1/master-agent/tasks/[taskId]/progress` 实时刷新;字段白名单会剥离 cwd、turnId、配置文件路径、内部 prompt、collab 源/目标线程 ID、receiverThreadIds、agentsStates 私有消息、共享 Skill 根绝对路径、tool arguments/result、web URL token、命令正文/输出、raw reasoning content、reasoning item id、图像生成 revisedPrompt/result、hook sourcePath/statusMessage/entries、Windows sandbox sourcePath/samplePaths/本地绝对路径和未清洗密钥complete 回写仍会携带最终进度兜底
- 当前 `local-agent` heartbeat 已新增 Codex App Server capability discovery按 TTL 拉取模型、provider 能力、Skill、Hook、Plugin、App 摘要,并附加只读线程操作、插件治理、账号治理、配置治理、文件治理、命令会话、外部 Agent 迁移、Marketplace、实验特性、审查、Windows 沙箱、文件搜索事件、MCP、用户交互Guardian 治理能力 catalog写入 `capabilities.codexAppServer.metadata`Web 设备详情会展示 App Server 连接状态、模型数量、默认/快速/深度模型、扩展数量、Hook 治理摘要、线程操作摘要、插件治理摘要、账号治理摘要、配置治理摘要、文件治理摘要、命令会话摘要、迁移治理摘要、市场治理摘要、实验特性治理摘要、审查治理摘要、Windows 沙箱摘要、文件搜索事件摘要、MCP 治理摘要、用户交互摘要Guardian 治理摘要
- 当前 `local-agent` heartbeat 已新增 Codex App Server capability discovery按 TTL 拉取模型、provider 能力、Skill、Hook、Plugin、App 摘要,并附加只读线程操作、插件治理、账号治理、配置治理、文件治理、命令会话、外部 Agent 迁移、Marketplace、实验特性、审查、Windows 沙箱、文件搜索事件、MCP、用户交互Guardian、运行事件、扩展事件和线程生命周期能力 catalog写入 `capabilities.codexAppServer.metadata`Web 设备详情会展示 App Server 连接状态、模型数量、默认/快速/深度模型、扩展数量、Hook 治理摘要、线程操作摘要、插件治理摘要、账号治理摘要、配置治理摘要、文件治理摘要、命令会话摘要、迁移治理摘要、市场治理摘要、实验特性治理摘要、审查治理摘要、Windows 沙箱摘要、文件搜索事件摘要、MCP 治理摘要、用户交互摘要Guardian 治理摘要、运行事件摘要、扩展事件摘要和线程生命周期摘要
- 当前 `MasterAgentTask` 已具备服务端租约和取消基础状态机claim 会写入 `attemptCount / maxAttempts / leaseExpiresAt`,运行中任务租约过期后可被重新认领,超过重试上限会转 `timed_out``POST /api/v1/master-agent/tasks/[taskId]/cancel` 会把任务转 `canceled`,迟到的成功 complete 不会覆盖终态
- 当前 `local-agent``browser_control / desktop_control` 已从占位骨架升级成外部 runtime 桥:当本机配置了 `browserControlEnabled + browserControlCommand``computerUseEnabled + computerUseCommand` 时,会把标准化 JSON 请求透传给外部进程,并解析单行 JSON 结果;未启用时会 fail closed返回明确的 runtime disabled 错误,不再假装执行成功
- 远程电脑控制链路当前已有可复用压测基线:`npm run stress:remote-control` 可按参数压测 `local-agent -> MasterAgentTask -> browser_control / desktop_control runtime -> complete 回写` 全链路;`npm run stress:remote-control:ci` 固定 120 条链路任务和 360 条 runtime 并发任务,并用 p95 延迟预算判断是否退化。压测报告可通过 `--report-json=PATH` 落盘,便于后续接入真实 macOS AX / Windows UIA helper 后复用同一套稳定性判断。

View File

@@ -1,5 +1,5 @@
{
"generatedAt": "2026-06-03T04:08:48.708Z",
"generatedAt": "2026-06-03T04:20:50.905Z",
"codexVersion": "0.136.0-alpha.2",
"codexVersionRaw": "codex-cli 0.136.0-alpha.2",
"codexBin": "codex",
@@ -201,6 +201,11 @@
"mcpElicitation": true,
"toolRequestUserInput": true,
"permissionRequestApproval": true,
"guardianDeniedActionApproval": true
"guardianDeniedActionApproval": true,
"processEvents": true,
"rawResponseCompleted": true,
"skillsChanged": true,
"pluginInstalledNotification": true,
"threadLifecycleEvents": true
}
}

View File

@@ -1500,6 +1500,53 @@ function normalizeDiscoveryGuardianGovernanceSummary() {
};
}
function normalizeDiscoveryRuntimeEventSummary() {
const events = [
{ label: "进程输出", group: "process" },
{ label: "进程退出", group: "process" },
{ label: "原始响应完成", group: "rawResponse", rawResponse: true },
];
return {
eventCount: events.length,
processEventCount: events.filter((event) => event.group === "process").length,
rawResponseEventAvailable: events.some((event) => event.rawResponse === true),
notificationOnly: true,
labels: events.map((event) => event.label),
};
}
function normalizeDiscoveryExtensionEventSummary() {
const events = [
{ label: "Skill 变更", group: "skill", skillChange: true },
{ label: "插件安装", group: "plugin", pluginInstall: true },
];
return {
eventCount: events.length,
skillChangeEventAvailable: events.some((event) => event.skillChange === true),
pluginInstallEventAvailable: events.some((event) => event.pluginInstall === true),
notificationOnly: true,
labels: events.map((event) => event.label),
};
}
function normalizeDiscoveryThreadLifecycleEventSummary() {
const events = [
{ label: "线程启动", group: "start" },
{ label: "线程关闭", group: "close", close: true },
{ label: "已归档", group: "archive" },
{ label: "已恢复", group: "archive" },
{ label: "改名完成", group: "name", name: true },
];
return {
eventCount: events.length,
archiveEventCount: events.filter((event) => event.group === "archive").length,
nameEventAvailable: events.some((event) => event.name === true),
closeEventAvailable: events.some((event) => event.close === true),
notificationOnly: true,
labels: events.map((event) => event.label),
};
}
function normalizeDiscoveryPlugins(result) {
return asArray(result?.marketplaces)
.flatMap((marketplace) => asArray(marketplace?.plugins))
@@ -1997,6 +2044,9 @@ export async function discoverCodexAppServerCapabilities(runnerConfig) {
mcpGovernanceSummary: normalizeDiscoveryMcpGovernanceSummary(),
userInteractionGovernanceSummary: normalizeDiscoveryUserInteractionGovernanceSummary(),
guardianGovernanceSummary: normalizeDiscoveryGuardianGovernanceSummary(),
runtimeEventSummary: normalizeDiscoveryRuntimeEventSummary(),
extensionEventSummary: normalizeDiscoveryExtensionEventSummary(),
threadLifecycleEventSummary: normalizeDiscoveryThreadLifecycleEventSummary(),
errors: [
modelResult?.__bossError ? `model/list:${safeRuntimeDiagnosticText(modelResult.__bossError)}` : undefined,
providerCapabilities?.__bossError

View File

@@ -175,6 +175,16 @@ function buildSupportMatrix({ helpText, methods }) {
toolRequestUserInput: methodSet.has("item/tool/requestUserInput"),
permissionRequestApproval: methodSet.has("item/permissions/requestApproval"),
guardianDeniedActionApproval: methodSet.has("thread/approveGuardianDeniedAction"),
processEvents: methodSet.has("process/outputDelta") || methodSet.has("process/exited"),
rawResponseCompleted: methodSet.has("rawResponseItem/completed"),
skillsChanged: methodSet.has("skills/changed"),
pluginInstalledNotification: methodSet.has("plugin/installed"),
threadLifecycleEvents:
methodSet.has("thread/started") ||
methodSet.has("thread/closed") ||
methodSet.has("thread/archived") ||
methodSet.has("thread/unarchived") ||
methodSet.has("thread/name/updated"),
};
}

View File

@@ -146,6 +146,11 @@ export function buildDeviceWorkspaceDetailCards(workspace: DeviceWorkspaceView)
codexAppServerMetadata.userInteractionGovernanceSummary,
);
const codexGuardianGovernanceSummary = objectFromMetadata(codexAppServerMetadata.guardianGovernanceSummary);
const codexRuntimeEventSummary = objectFromMetadata(codexAppServerMetadata.runtimeEventSummary);
const codexExtensionEventSummary = objectFromMetadata(codexAppServerMetadata.extensionEventSummary);
const codexThreadLifecycleEventSummary = objectFromMetadata(
codexAppServerMetadata.threadLifecycleEventSummary,
);
return {
capabilities: {
@@ -271,6 +276,23 @@ export function buildDeviceWorkspaceDetailCards(workspace: DeviceWorkspaceView)
)} 项 · 审批 ${numberFromMetadata(codexGuardianGovernanceSummary.approvalActionCount)} 项 · ${
codexGuardianGovernanceSummary.permissionRequestEventAvailable === true ? "权限事件可用" : "权限事件不可用"
}`,
codexRuntimeEvents: `运行事件:${numberFromMetadata(
codexRuntimeEventSummary.eventCount,
)} 项 · 进程 ${numberFromMetadata(codexRuntimeEventSummary.processEventCount)} 项 · ${
codexRuntimeEventSummary.rawResponseEventAvailable === true ? "原始响应可用" : "原始响应不可用"
}`,
codexExtensionEvents: `扩展事件:${numberFromMetadata(
codexExtensionEventSummary.eventCount,
)} 项 · ${
codexExtensionEventSummary.skillChangeEventAvailable === true ? "Skill 变更可用" : "Skill 变更不可用"
} · ${
codexExtensionEventSummary.pluginInstallEventAvailable === true ? "插件安装可用" : "插件安装不可用"
}`,
codexThreadLifecycleEvents: `线程生命周期:${numberFromMetadata(
codexThreadLifecycleEventSummary.eventCount,
)} 项 · 归档 ${numberFromMetadata(codexThreadLifecycleEventSummary.archiveEventCount)} 项 · ${
codexThreadLifecycleEventSummary.nameEventAvailable === true ? "改名可用" : "改名不可用"
} · ${codexThreadLifecycleEventSummary.closeEventAvailable === true ? "关闭可用" : "关闭不可用"}`,
preferredExecutionMode: `默认执行模式:${
selectedDevice?.preferredExecutionMode === "gui"
? "GUI"
@@ -968,6 +990,15 @@ export function DeviceEditorCard({
<div className="rounded-2xl bg-[#F7F8FA] px-3 py-2">
{detailCards.capabilities.items.codexGuardianGovernance}
</div>
<div className="rounded-2xl bg-[#F7F8FA] px-3 py-2">
{detailCards.capabilities.items.codexRuntimeEvents}
</div>
<div className="rounded-2xl bg-[#F7F8FA] px-3 py-2">
{detailCards.capabilities.items.codexExtensionEvents}
</div>
<div className="rounded-2xl bg-[#F7F8FA] px-3 py-2">
{detailCards.capabilities.items.codexThreadLifecycleEvents}
</div>
<div className="rounded-2xl bg-[#F7F8FA] px-3 py-2">
{detailCards.capabilities.items.preferredExecutionMode}
</div>

View File

@@ -38,15 +38,21 @@ if (args[0] === "app-server" && args[1] === "generate-json-schema") {
{ properties: { method: { const: "thread/start" } } },
{ properties: { method: { const: "thread/inject_items" } } },
{ properties: { method: { const: "thread/archive" } } },
{ properties: { method: { const: "thread/archived" } } },
{ properties: { method: { const: "thread/unarchive" } } },
{ properties: { method: { const: "thread/unarchived" } } },
{ properties: { method: { const: "thread/fork" } } },
{ properties: { method: { const: "thread/closed" } } },
{ properties: { method: { const: "thread/compact/start" } } },
{ properties: { method: { const: "thread/rollback" } } },
{ properties: { method: { const: "thread/name/set" } } },
{ properties: { method: { const: "thread/name/updated" } } },
{ properties: { method: { const: "thread/metadata/update" } } },
{ properties: { method: { const: "thread/shellCommand" } } },
{ properties: { method: { const: "thread/unsubscribe" } } },
{ properties: { method: { const: "thread/started" } } },
{ properties: { method: { const: "plugin/install" } } },
{ properties: { method: { const: "plugin/installed" } } },
{ properties: { method: { const: "plugin/uninstall" } } },
{ properties: { method: { const: "plugin/read" } } },
{ properties: { method: { const: "plugin/skill/read" } } },
@@ -99,7 +105,11 @@ if (args[0] === "app-server" && args[1] === "generate-json-schema") {
{ properties: { method: { const: "mcpServer/elicitation/request" } } },
{ properties: { method: { const: "item/tool/requestUserInput" } } },
{ properties: { method: { const: "item/permissions/requestApproval" } } },
{ properties: { method: { const: "process/outputDelta" } } },
{ properties: { method: { const: "process/exited" } } },
{ properties: { method: { const: "rawResponseItem/completed" } } },
{ properties: { method: { const: "thread/approveGuardianDeniedAction" } } },
{ properties: { method: { const: "skills/changed" } } },
{ properties: { method: { const: "skills/extraRoots/set" } } },
{ properties: { method: { const: "hooks/list" } } },
{ properties: { method: { const: "turn/interrupt" } } },
@@ -190,6 +200,11 @@ process.exit(2);
assert.equal(manifest.supports.toolRequestUserInput, true);
assert.equal(manifest.supports.permissionRequestApproval, true);
assert.equal(manifest.supports.guardianDeniedActionApproval, true);
assert.equal(manifest.supports.processEvents, true);
assert.equal(manifest.supports.rawResponseCompleted, true);
assert.equal(manifest.supports.skillsChanged, true);
assert.equal(manifest.supports.pluginInstalledNotification, true);
assert.equal(manifest.supports.threadLifecycleEvents, true);
assert.deepEqual(manifest.methods, [
"account/chatgptAuthTokens/refresh",
"account/login/cancel",
@@ -232,6 +247,7 @@ process.exit(2);
"mcpServer/resource/read",
"mcpServer/tool/call",
"plugin/install",
"plugin/installed",
"plugin/read",
"plugin/share/checkout",
"plugin/share/delete",
@@ -240,20 +256,29 @@ process.exit(2);
"plugin/share/updateTargets",
"plugin/skill/read",
"plugin/uninstall",
"process/exited",
"process/outputDelta",
"rawResponseItem/completed",
"review/start",
"skills/changed",
"skills/config/write",
"skills/extraRoots/set",
"thread/approveGuardianDeniedAction",
"thread/archive",
"thread/archived",
"thread/closed",
"thread/compact/start",
"thread/fork",
"thread/inject_items",
"thread/metadata/update",
"thread/name/set",
"thread/name/updated",
"thread/rollback",
"thread/shellCommand",
"thread/start",
"thread/started",
"thread/unarchive",
"thread/unarchived",
"thread/unsubscribe",
"turn/interrupt",
"turn/start",

View File

@@ -271,6 +271,28 @@ test("device detail exposes Codex App Server discovered model and extension summ
userInitiatedOnly: true,
labels: ["Guardian 放行", "权限请求"],
},
runtimeEventSummary: {
eventCount: 3,
processEventCount: 2,
rawResponseEventAvailable: true,
notificationOnly: true,
labels: ["进程输出", "进程退出", "原始响应完成"],
},
extensionEventSummary: {
eventCount: 2,
skillChangeEventAvailable: true,
pluginInstallEventAvailable: true,
notificationOnly: true,
labels: ["Skill 变更", "插件安装"],
},
threadLifecycleEventSummary: {
eventCount: 5,
archiveEventCount: 2,
nameEventAvailable: true,
closeEventAvailable: true,
notificationOnly: true,
labels: ["线程启动", "线程关闭", "已归档", "已恢复", "改名完成"],
},
},
},
};
@@ -304,6 +326,9 @@ test("device detail exposes Codex App Server discovered model and extension summ
assert.equal(cards.capabilities.items.codexMcpGovernance, "MCP 治理5 项 · OAuth 2 项 · 工具 1 项 · 交互可用");
assert.equal(cards.capabilities.items.codexUserInteractionGovernance, "用户交互1 项 · 输入请求可用");
assert.equal(cards.capabilities.items.codexGuardianGovernance, "Guardian 治理2 项 · 审批 1 项 · 权限事件可用");
assert.equal(cards.capabilities.items.codexRuntimeEvents, "运行事件3 项 · 进程 2 项 · 原始响应可用");
assert.equal(cards.capabilities.items.codexExtensionEvents, "扩展事件2 项 · Skill 变更可用 · 插件安装可用");
assert.equal(cards.capabilities.items.codexThreadLifecycleEvents, "线程生命周期5 项 · 归档 2 项 · 改名可用 · 关闭可用");
});
test("device detail exposes folder and project conflict skeleton from workspace policy", async () => {

View File

@@ -231,6 +231,28 @@ test("codex app-server discovery includes governance and MCP summaries without l
userInitiatedOnly: true,
labels: ["Guardian 放行", "权限请求"],
});
assert.deepEqual(metadata.runtimeEventSummary, {
eventCount: 3,
processEventCount: 2,
rawResponseEventAvailable: true,
notificationOnly: true,
labels: ["进程输出", "进程退出", "原始响应完成"],
});
assert.deepEqual(metadata.extensionEventSummary, {
eventCount: 2,
skillChangeEventAvailable: true,
pluginInstallEventAvailable: true,
notificationOnly: true,
labels: ["Skill 变更", "插件安装"],
});
assert.deepEqual(metadata.threadLifecycleEventSummary, {
eventCount: 5,
archiveEventCount: 2,
nameEventAvailable: true,
closeEventAvailable: true,
notificationOnly: true,
labels: ["线程启动", "线程关闭", "已归档", "已恢复", "改名完成"],
});
const serialized = JSON.stringify(metadata);
assert.equal(serialized.includes("sk-secret-should-not-leak"), false);