feat: expose codex remote control status
This commit is contained in:
@@ -170,6 +170,7 @@
|
|||||||
- 第二十七批另补 `streamDeltaEventSummary` 流式增量事件能力摘要:设备详情页会显示 agent delta、plan delta、reasoning delta、MCP progress、command output、terminal interaction 和 file output 等能力分组;该字段只读,不保存原始增量文本、命令输出、推理正文或文件输出。
|
- 第二十七批另补 `streamDeltaEventSummary` 流式增量事件能力摘要:设备详情页会显示 agent delta、plan delta、reasoning delta、MCP progress、command output、terminal interaction 和 file output 等能力分组;该字段只读,不保存原始增量文本、命令输出、推理正文或文件输出。
|
||||||
- 当前任务执行态也已补 `executionProgress.streamEvents`:App Server runner 会把 agent / plan / reasoning / MCP / command / terminal / file 的流式 delta 归一成计数,Android 进度卡展示“流式增量”,不保存或渲染原始 delta、命令输出、终端输入、推理正文或文件输出。
|
- 当前任务执行态也已补 `executionProgress.streamEvents`:App Server runner 会把 agent / plan / reasoning / MCP / command / terminal / file 的流式 delta 归一成计数,Android 进度卡展示“流式增量”,不保存或渲染原始 delta、命令输出、终端输入、推理正文或文件输出。
|
||||||
- 当前 App Server 任务取消已从“服务端标记”升级为“真实 turn 中断”:`POST /api/v1/master-agent/tasks/[taskId]/cancel` 仍负责把任务置为 `canceled`,新增 `GET /api/v1/master-agent/tasks/[taskId]/control-state` 供设备端轮询;`local-agent` 在 App Server turn 启动后会按取消状态调用 `turn/interrupt`,并把 `interrupted` 作为干净取消处理,避免取消后长任务继续跑或被误写成失败日志。
|
- 当前 App Server 任务取消已从“服务端标记”升级为“真实 turn 中断”:`POST /api/v1/master-agent/tasks/[taskId]/cancel` 仍负责把任务置为 `canceled`,新增 `GET /api/v1/master-agent/tasks/[taskId]/control-state` 供设备端轮询;`local-agent` 在 App Server turn 启动后会按取消状态调用 `turn/interrupt`,并把 `interrupted` 作为干净取消处理,避免取消后长任务继续跑或被误写成失败日志。
|
||||||
|
- 当前本机 `codex remote-control` 已确认为官方 App Server daemon 远控入口;boss-agent 本机状态页会展示 `Codex Remote Control` 托管摘要和 `codex remote-control start --json` 默认启动命令,但状态页刷新不会自动启动 daemon。后续真正启动、停止或重启该 daemon 必须走显式用户动作、RBAC、审批和审计链路。
|
||||||
- 当前已补 Codex App Server 受控线程回滚:`POST /api/v1/projects/[projectId]/thread-rollback` 会创建 `intentCategory=thread_rollback` 任务,`local-agent` 调用 `thread/rollback` 回滚目标线程最近 N 轮;该链路不启动新 turn,不把 thread/turn/items 原文写回 APP,只提示“线程历史已回滚”,且不会自动还原本地文件变更。
|
- 当前已补 Codex App Server 受控线程回滚:`POST /api/v1/projects/[projectId]/thread-rollback` 会创建 `intentCategory=thread_rollback` 任务,`local-agent` 调用 `thread/rollback` 回滚目标线程最近 N 轮;该链路不启动新 turn,不把 thread/turn/items 原文写回 APP,只提示“线程历史已回滚”,且不会自动还原本地文件变更。
|
||||||
- 当前已补 Codex App Server 受控线程压缩:`POST /api/v1/projects/[projectId]/thread-compact` 会创建 `intentCategory=thread_compact` 任务,`local-agent` 调用 `thread/compact/start` 发起目标线程上下文压缩;该链路不启动普通 turn,不把 contextCompaction item 原文写回 APP,只提示“上下文压缩已发起”。
|
- 当前已补 Codex App Server 受控线程压缩:`POST /api/v1/projects/[projectId]/thread-compact` 会创建 `intentCategory=thread_compact` 任务,`local-agent` 调用 `thread/compact/start` 发起目标线程上下文压缩;该链路不启动普通 turn,不把 contextCompaction item 原文写回 APP,只提示“上下文压缩已发起”。
|
||||||
- 当前已补 Codex App Server 受控线程归档 / 恢复:`POST /api/v1/projects/[projectId]/thread-archive` 会创建 `intentCategory=thread_archive|thread_unarchive` 任务,`local-agent` 直接调用 `thread/archive` 或 `thread/unarchive`;该链路不启动普通 turn,不把 thread 原始字段写回 APP,只提示“线程已归档/已恢复”。
|
- 当前已补 Codex App Server 受控线程归档 / 恢复:`POST /api/v1/projects/[projectId]/thread-archive` 会创建 `intentCategory=thread_archive|thread_unarchive` 任务,`local-agent` 直接调用 `thread/archive` 或 `thread/unarchive`;该链路不启动普通 turn,不把 thread 原始字段写回 APP,只提示“线程已归档/已恢复”。
|
||||||
|
|||||||
@@ -119,7 +119,7 @@
|
|||||||
- 当前 `RemoteRuntimeAdapter` 还负责拦截固定模式的线程内部环境提示;命中后会直接改写成失败,避免把只读/cwd 这类脏文本写进聊天记录
|
- 当前 `RemoteRuntimeAdapter` 还负责拦截固定模式的线程内部环境提示;命中后会直接改写成失败,避免把只读/cwd 这类脏文本写进聊天记录
|
||||||
- 当前普通单线程 `conversation_reply` 在真正执行 `codex exec resume` 前,会先把 Boss 用户消息镜像进目标 Codex Desktop rollout;定位优先走 `state_5.sqlite`,不可用时回退扫描 `~/.codex/sessions`,并按 `sourceMessageId` 去重
|
- 当前普通单线程 `conversation_reply` 在真正执行 `codex exec resume` 前,会先把 Boss 用户消息镜像进目标 Codex Desktop rollout;定位优先走 `state_5.sqlite`,不可用时回退扫描 `~/.codex/sessions`,并按 `sourceMessageId` 去重
|
||||||
- 当前 Codex Desktop 同步新增常驻刷新桥:`scripts/codex-desktop-refresh-bridge-daemon.mjs` 通过 launchd 监听 `127.0.0.1:4318`,暴露 `POST /api/v1/codex-desktop/refresh`、`GET /api/v1/codex-desktop/events`、`GET /api/v1/codex-desktop/events/recent` 和 `GET /api/v1/codex-desktop/capabilities`;`local-agent` 会优先调用 refresh endpoint,失败时回退到 `scripts/codex-desktop-refresh-hint.mjs` 命令式刷新。SSE 事件只包含线程引用、消息 ID、状态、deep link 等安全元数据,不包含用户正文或内部 prompt;`scripts/codex-desktop-event-consumer.mjs` 可作为 Desktop 插件/IPC 接入前的订阅 smoke;`scripts/codex-desktop-integration-probe.mjs` 负责只读探测 Codex.app 能力
|
- 当前 Codex Desktop 同步新增常驻刷新桥:`scripts/codex-desktop-refresh-bridge-daemon.mjs` 通过 launchd 监听 `127.0.0.1:4318`,暴露 `POST /api/v1/codex-desktop/refresh`、`GET /api/v1/codex-desktop/events`、`GET /api/v1/codex-desktop/events/recent` 和 `GET /api/v1/codex-desktop/capabilities`;`local-agent` 会优先调用 refresh endpoint,失败时回退到 `scripts/codex-desktop-refresh-hint.mjs` 命令式刷新。SSE 事件只包含线程引用、消息 ID、状态、deep link 等安全元数据,不包含用户正文或内部 prompt;`scripts/codex-desktop-event-consumer.mjs` 可作为 Desktop 插件/IPC 接入前的订阅 smoke;`scripts/codex-desktop-integration-probe.mjs` 负责只读探测 Codex.app 能力
|
||||||
- 当前新增 Codex App Server runner:`local-agent/codex-app-server-runner.mjs`。boss-agent 默认配置 `codexAppServerEnabled=true`,会接管 `conversation_reply / dispatch_execution`;它默认通过 stdio 启动 `codex app-server`,也支持 `codexAppServerTransport=ws + codexAppServerUrl=ws://127.0.0.1:<port>` 或 `codexAppServerTransport=unix + codexAppServerUrl=unix:///absolute/path.sock` 连接同机长驻 App Server,bearer token 可通过 `codexAppServerAuthTokenFile` 读取并在握手时发送 `Authorization: Bearer <token>`。runner 执行 `initialize -> thread/resume|thread/start -> turn/start|turn/steer`,并把 `item/agentMessage/delta` 或 `item/completed` 归一成 Boss 任务回复;当 App Server 对单个 JSON-RPC 请求返回 `-32001 / retry later` 时,runner 会做最多 3 次指数退避重试。turn 启动前失败可回退 CLI,turn 启动后失败不回退,避免重复执行。2026-05-31 起,runner 会把 `turn/plan/updated`、`turn/diff/updated`、`item/started|completed`、`thread/started` 归一成 `executionProgress.steps / branch / artifacts / agents`,把 `item/*/requestApproval`、`item/autoApprovalReview/*`、`guardianWarning`、`serverRequest/resolved`、`item/fileChange/patchUpdated` 归一成 `executionProgress.approvals / warnings / fileChanges`,把 `thread/status/changed`、`thread/realtime/started|transcript|outputAudio|itemAdded|error|closed` 归一成 `executionProgress.threadStatus / realtime`,把 `model/rerouted`、`thread/tokenUsage/updated`、`mcpServer/startupStatus/updated`、`remoteControl/status/changed` 归一成 `executionProgress.modelRoute / tokenUsage / mcpServers / remoteControl`,并把 `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`、`windowsSandbox/setupCompleted`、`enteredReviewMode`、`exitedReviewMode`、`commandExecution`、`ThreadItem.plan`、`ThreadItem.reasoning.summary` 归一成线程配置、账号状态、模型校验、安全提醒、线程协作、上下文压缩、工具活动、图片产物、钩子生命周期、Windows 沙箱准备状态、计划步骤和思考摘要;新版 `ThreadItem.collabToolCall.receiverThreadIds / agentsStates` 只归一为目标数量和 agent 状态集合。2026-06-03 起,runner 还会把 `item/agentMessage/delta`、`item/plan/delta`、`item/reasoning/summaryPartAdded|summaryTextDelta|textDelta`、`item/mcpToolCall/progress`、`command/exec/outputDelta`、`item/commandExecution/outputDelta|terminalInteraction` 和 `item/fileChange/outputDelta` 归一成 `executionProgress.streamEvents` 计数。服务端 complete/progress 回写会与本地 Git/GitHub 进度合并,且不保存 SDP、音频 base64、raw realtime item、remote installationId、cwd、turnId、配置路径、collab 源/目标线程 ID、receiverThreadIds、collab prompt、agentsStates 私有消息、tool arguments/result/contentItems、web URL token、命令正文/输出、raw reasoning content、reasoning item id、原始 delta、terminal input、file output、imageGeneration revisedPrompt/result、hook sourcePath/statusMessage/entries、Windows sandbox sourcePath/samplePaths/本地绝对路径或未清洗的 MCP 错误。heartbeat 同时支持按 TTL 拉取 `model/list / skills/list / hooks/list / plugin/list / app/list / modelProvider/capabilities/read`,并把摘要保存在 `capabilities.codexAppServer.metadata`。
|
- 当前新增 Codex App Server runner:`local-agent/codex-app-server-runner.mjs`。boss-agent 默认配置 `codexAppServerEnabled=true`,会接管 `conversation_reply / dispatch_execution`;它默认通过 stdio 启动 `codex app-server`,也支持 `codexAppServerTransport=ws + codexAppServerUrl=ws://127.0.0.1:<port>` 或 `codexAppServerTransport=unix + codexAppServerUrl=unix:///absolute/path.sock` 连接同机长驻 App Server,bearer token 可通过 `codexAppServerAuthTokenFile` 读取并在握手时发送 `Authorization: Bearer <token>`。runner 执行 `initialize -> thread/resume|thread/start -> turn/start|turn/steer`,并把 `item/agentMessage/delta` 或 `item/completed` 归一成 Boss 任务回复;当 App Server 对单个 JSON-RPC 请求返回 `-32001 / retry later` 时,runner 会做最多 3 次指数退避重试。turn 启动前失败可回退 CLI,turn 启动后失败不回退,避免重复执行。boss-agent 本机状态页另新增 `Codex Remote Control` 摘要:读取 `codexRemoteControlEnabled / codexRemoteControlCommand / codexRemoteControlArgs`,默认展示 `codex remote-control start --json` 作为官方 daemon 远控入口;状态页只展示能力,不因刷新自动启动 daemon。2026-05-31 起,runner 会把 `turn/plan/updated`、`turn/diff/updated`、`item/started|completed`、`thread/started` 归一成 `executionProgress.steps / branch / artifacts / agents`,把 `item/*/requestApproval`、`item/autoApprovalReview/*`、`guardianWarning`、`serverRequest/resolved`、`item/fileChange/patchUpdated` 归一成 `executionProgress.approvals / warnings / fileChanges`,把 `thread/status/changed`、`thread/realtime/started|transcript|outputAudio|itemAdded|error|closed` 归一成 `executionProgress.threadStatus / realtime`,把 `model/rerouted`、`thread/tokenUsage/updated`、`mcpServer/startupStatus/updated`、`remoteControl/status/changed` 归一成 `executionProgress.modelRoute / tokenUsage / mcpServers / remoteControl`,并把 `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`、`windowsSandbox/setupCompleted`、`enteredReviewMode`、`exitedReviewMode`、`commandExecution`、`ThreadItem.plan`、`ThreadItem.reasoning.summary` 归一成线程配置、账号状态、模型校验、安全提醒、线程协作、上下文压缩、工具活动、图片产物、钩子生命周期、Windows 沙箱准备状态、计划步骤和思考摘要;新版 `ThreadItem.collabToolCall.receiverThreadIds / agentsStates` 只归一为目标数量和 agent 状态集合。2026-06-03 起,runner 还会把 `item/agentMessage/delta`、`item/plan/delta`、`item/reasoning/summaryPartAdded|summaryTextDelta|textDelta`、`item/mcpToolCall/progress`、`command/exec/outputDelta`、`item/commandExecution/outputDelta|terminalInteraction` 和 `item/fileChange/outputDelta` 归一成 `executionProgress.streamEvents` 计数。服务端 complete/progress 回写会与本地 Git/GitHub 进度合并,且不保存 SDP、音频 base64、raw realtime item、remote installationId、cwd、turnId、配置路径、collab 源/目标线程 ID、receiverThreadIds、collab prompt、agentsStates 私有消息、tool arguments/result/contentItems、web URL token、命令正文/输出、raw reasoning content、reasoning item id、原始 delta、terminal input、file output、imageGeneration revisedPrompt/result、hook sourcePath/statusMessage/entries、Windows sandbox sourcePath/samplePaths/本地绝对路径或未清洗的 MCP 错误。heartbeat 同时支持按 TTL 拉取 `model/list / skills/list / hooks/list / plugin/list / app/list / modelProvider/capabilities/read`,并把摘要保存在 `capabilities.codexAppServer.metadata`。
|
||||||
- App Server heartbeat discovery 现在还会按 TTL 拉取 `experimentalFeature/list / collaborationMode/list / permissionProfile/list / mcpServerStatus/list`,写入 `capabilities.codexAppServer.metadata.experimentalFeatures / collaborationModes / permissionProfiles / mcpServers`。这些字段用于 APP/后台治理页展示 Codex 当前可用的实验特性、多 Agent/协作模式、权限 profile 和 MCP 服务健康;MCP 请求固定使用 `detail=toolsAndAuthOnly`,服务端状态里不保存 resource URI、工具参数、permission profile 文件规则、本地路径或密钥。
|
- App Server heartbeat discovery 现在还会按 TTL 拉取 `experimentalFeature/list / collaborationMode/list / permissionProfile/list / mcpServerStatus/list`,写入 `capabilities.codexAppServer.metadata.experimentalFeatures / collaborationModes / permissionProfiles / mcpServers`。这些字段用于 APP/后台治理页展示 Codex 当前可用的实验特性、多 Agent/协作模式、权限 profile 和 MCP 服务健康;MCP 请求固定使用 `detail=toolsAndAuthOnly`,服务端状态里不保存 resource URI、工具参数、permission profile 文件规则、本地路径或密钥。
|
||||||
- App Server heartbeat discovery 现在还会按 TTL 拉取 `account/read / account/rateLimits/read / config/read / configRequirements/read / externalAgentConfig/detect`,写入 `capabilities.codexAppServer.metadata.accountSummary / rateLimitSummary / appConfigSummary / configRequirements / externalAgentMigration`。这些字段用于 APP/后台展示账号、额度、App 配置、企业托管要求和外部 Agent 迁移候选摘要;当前只做观测,不通过 Boss 远程写 `config.toml` 或执行外部 Agent 导入,且不保存邮箱、完整 config、API key、本地路径或迁移描述。
|
- App Server heartbeat discovery 现在还会按 TTL 拉取 `account/read / account/rateLimits/read / config/read / configRequirements/read / externalAgentConfig/detect`,写入 `capabilities.codexAppServer.metadata.accountSummary / rateLimitSummary / appConfigSummary / configRequirements / externalAgentMigration`。这些字段用于 APP/后台展示账号、额度、App 配置、企业托管要求和外部 Agent 迁移候选摘要;当前只做观测,不通过 Boss 远程写 `config.toml` 或执行外部 Agent 导入,且不保存邮箱、完整 config、API key、本地路径或迁移描述。
|
||||||
- App Server heartbeat discovery 现在还会按 TTL 拉取 `thread/list / thread/loaded/list`,写入 `capabilities.codexAppServer.metadata.threadSummary`。该字段用于 APP/后台展示 Codex 当前可见线程数量、加载态、活跃态和非归档线程轻量目录;目录只保留 `id / name / sourceKind / status / updatedAt / loaded`,不保存 cwd、本地路径、turn 内容、用户正文或内部 prompt。
|
- App Server heartbeat discovery 现在还会按 TTL 拉取 `thread/list / thread/loaded/list`,写入 `capabilities.codexAppServer.metadata.threadSummary`。该字段用于 APP/后台展示 Codex 当前可见线程数量、加载态、活跃态和非归档线程轻量目录;目录只保留 `id / name / sourceKind / status / updatedAt / loaded`,不保存 cwd、本地路径、turn 内容、用户正文或内部 prompt。
|
||||||
@@ -158,6 +158,7 @@
|
|||||||
- `computerUseEnabled / computerUseCommand / computerUseArgs / computerUseWorkdir / computerUseTimeoutMs`
|
- `computerUseEnabled / computerUseCommand / computerUseArgs / computerUseWorkdir / computerUseTimeoutMs`
|
||||||
- `codexComputerUseEnabled / codexComputerUseCommand / codexComputerUseArgs / codexComputerUseWorkdir / codexComputerUseTimeoutMs / codexComputerUseFallbackToCua`
|
- `codexComputerUseEnabled / codexComputerUseCommand / codexComputerUseArgs / codexComputerUseWorkdir / codexComputerUseTimeoutMs / codexComputerUseFallbackToCua`
|
||||||
- `codexAppServerEnabled / codexAppServerCommand / codexAppServerArgs / codexAppServerWorkdir / codexAppServerTimeoutMs / codexAppServerFallbackToCli / codexAppServerTransport / codexAppServerUrl / codexAppServerAuthTokenFile / codexAppServerSkillExtraRoots / codexAppServerDiscoveryEnabled / codexAppServerDiscoveryTtlMs / codexAppServerDiscoveryLimit`
|
- `codexAppServerEnabled / codexAppServerCommand / codexAppServerArgs / codexAppServerWorkdir / codexAppServerTimeoutMs / codexAppServerFallbackToCli / codexAppServerTransport / codexAppServerUrl / codexAppServerAuthTokenFile / codexAppServerSkillExtraRoots / codexAppServerDiscoveryEnabled / codexAppServerDiscoveryTtlMs / codexAppServerDiscoveryLimit`
|
||||||
|
- `codexRemoteControlEnabled / codexRemoteControlCommand / codexRemoteControlArgs`
|
||||||
- `scripts/codex-app-server-protocol-snapshot.mjs`:生成本机 Codex App Server help、JSON Schema、TypeScript bindings、协议方法清单和 support matrix;当前快照目录为 `docs/protocol-snapshots/codex-app-server/0.136.0-alpha.2/`
|
- `scripts/codex-app-server-protocol-snapshot.mjs`:生成本机 Codex App Server help、JSON Schema、TypeScript bindings、协议方法清单和 support matrix;当前快照目录为 `docs/protocol-snapshots/codex-app-server/0.136.0-alpha.2/`
|
||||||
|
|
||||||
#### `POST /api/v1/master-agent/tasks/[taskId]/progress`
|
#### `POST /api/v1/master-agent/tasks/[taskId]/progress`
|
||||||
|
|||||||
@@ -6,6 +6,8 @@
|
|||||||
|
|
||||||
2026-05-31 的最新架构判断:Boss 后续优先围绕 Codex App Server / Remote Control 做深度接入,但当前生产链路仍保留 `codex exec resume`,`codex mcp-server` 作为兼容 provider 候选。
|
2026-05-31 的最新架构判断:Boss 后续优先围绕 Codex App Server / Remote Control 做深度接入,但当前生产链路仍保留 `codex exec resume`,`codex mcp-server` 作为兼容 provider 候选。
|
||||||
|
|
||||||
|
2026-06-04 按官方文档与本机 `codex-cli 0.136.0-alpha.2` 复核后的口径:`codex app-server` 是 Boss 直接控制 Codex 线程、turn、审批、进度事件和治理动作的主协议;`codex remote-control` 是带 remote-control 能力的本机 App Server daemon 管理入口;`codex mcp-server` 是让其他 Agent / MCP 客户端把 Codex 当工具调用的兼容入口;`features.multi_agent` 提供 `spawn_agent / send_input / resume_agent / wait_agent / close_agent` 这类主控调度子 Agent 的能力,但不等同于任意两个历史线程官方原生 P2P 私聊。Boss 产品口径继续固定为“Boss Broker + App Server read / inject / start / steer / rollback 的受控线程协作”。
|
||||||
|
|
||||||
Codex App Server 是更适合 Boss 长期接入的协议层,因为它面向富客户端和产品级集成,覆盖:
|
Codex App Server 是更适合 Boss 长期接入的协议层,因为它面向富客户端和产品级集成,覆盖:
|
||||||
|
|
||||||
- authentication
|
- authentication
|
||||||
@@ -47,7 +49,9 @@ Boss 不能直接把 App Server 原始 Thread / Turn / Item 字段写进业务
|
|||||||
- 本机 `codex --version`:`codex-cli 0.136.0-alpha.2`
|
- 本机 `codex --version`:`codex-cli 0.136.0-alpha.2`
|
||||||
- 本机 `codex app-server --help` 已可用;本机 help 当前显示 `--listen` 支持 `stdio://`、`unix://`、`unix://PATH`、`ws://IP:PORT` 和 `off`
|
- 本机 `codex app-server --help` 已可用;本机 help 当前显示 `--listen` 支持 `stdio://`、`unix://`、`unix://PATH`、`ws://IP:PORT` 和 `off`
|
||||||
- 本机 `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 认证参数
|
- 本机 `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_items`、`thread/rollback`、`thread/archive`、`thread/unarchive`、`thread/fork`、`thread/compact/start`、`thread/name/set`、`thread/metadata/update`、`thread/shellCommand`、`thread/unsubscribe`、`thread/goal/*`、`turn/steer`、`turn/interrupt`、`command/exec`、`command/exec/write`、`command/exec/resize`、`command/exec/terminate`、`command/exec/outputDelta`、`process/outputDelta|exited`、`rawResponseItem/completed`、`thread/realtime/*`、`thread/started|closed|archived|unarchived|name/updated`、`item/agentMessage/delta`、`item/plan/delta`、`item/reasoning/*Delta`、`item/mcpToolCall/progress`、`item/commandExecution/terminalInteraction`、`item/fileChange/outputDelta`、`account/*`、`model/verification`、`configWarning`、`deprecationNotice`、`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`
|
- 本机 `codex remote-control --help` 已可用;它会管理“带 remote control enabled 的 App Server daemon”,当前 boss-agent 状态页已把 `codexRemoteControlEnabled / codexRemoteControlCommand / codexRemoteControlArgs` 归一成 `Codex Remote Control` 摘要,但状态页刷新不会自动执行 `start`
|
||||||
|
- 本机 `codex mcp-server --help` 已可用;它用于把 Codex 暴露为 stdio MCP server,后续进入 `CodexMcpBackendAdapter` 兼容 provider,而不是替代 App Server 主链
|
||||||
|
- 本机协议快照已生成到 `docs/protocol-snapshots/codex-app-server/0.136.0-alpha.2/`,共识别 151 个协议方法;确认支持 `thread/inject_items`、`thread/rollback`、`thread/archive`、`thread/unarchive`、`thread/fork`、`thread/compact/start`、`thread/name/set`、`thread/metadata/update`、`thread/shellCommand`、`thread/unsubscribe`、`thread/goal/*`、`turn/steer`、`turn/interrupt`、`command/exec`、`command/exec/write`、`command/exec/resize`、`command/exec/terminate`、`command/exec/outputDelta`、`process/outputDelta|exited`、`rawResponseItem/completed`、`thread/realtime/*`、`thread/started|closed|archived|unarchived|name/updated`、`item/agentMessage/delta`、`item/plan/delta`、`item/reasoning/*Delta`、`item/mcpToolCall/progress`、`item/commandExecution/terminalInteraction`、`item/fileChange/outputDelta`、`account/*`、`model/verification`、`configWarning`、`deprecationNotice`、`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`
|
||||||
- Boss 当前默认仍以 `stdio` 作为本机 agent 接入方式;`ws://127.0.0.1:<port>` 和 `unix://PATH` 本地长驻 transport 已可灰度接入,WebSocket/Unix WebSocket handshake 支持 `Authorization: Bearer <token>`;非 loopback signed bearer/JWT、自动重连和健康探测仍保留为后续增强,不直接替换当前稳定链路
|
- 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 次指数退避重试,避免长驻连接瞬时拥塞直接把用户任务打失败
|
- 官方文档提示 WebSocket ingress 满载时会返回 JSON-RPC `-32001 / Server overloaded; retry later.`;Boss runner 已对该错误做最多 3 次指数退避重试,避免长驻连接瞬时拥塞直接把用户任务打失败
|
||||||
- Boss heartbeat 已新增 App Server 能力发现缓存:按 `codexAppServerDiscoveryTtlMs` 拉取 `model/list`、`modelProvider/capabilities/read`、`skills/list`、`hooks/list`、`plugin/list`、`app/list`、`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`;配置了 `codexAppServerSkillExtraRoots` / `BOSS_CODEX_APP_SERVER_SKILL_EXTRA_ROOTS` 时,会先调用 `skills/extraRoots/set` 再拉取 `skills/list`,归一成设备 `capabilities.codexAppServer.metadata`;发现失败只记录 warn,不阻塞心跳。MCP discovery 使用 `detail=toolsAndAuthOnly`,turn discovery 固定 `itemsView=summary`,账号、配置、线程、Hook 和 Skill extra root discovery 只保留安全摘要;turn discovery 只额外保留最终 `agentMessage` 摘要,并会合并进 `projectCandidates.recentAssistantMessages` 用于 Codex Desktop 回复反向同步,不保存邮箱、resource URI、工具参数、完整 config、本地路径、迁移描述、用户正文、reasoning 原文、命令输出、原始 items、内部 prompt、系统提示词、hook 命令或共享 Skill 根绝对路径。
|
- Boss heartbeat 已新增 App Server 能力发现缓存:按 `codexAppServerDiscoveryTtlMs` 拉取 `model/list`、`modelProvider/capabilities/read`、`skills/list`、`hooks/list`、`plugin/list`、`app/list`、`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`;配置了 `codexAppServerSkillExtraRoots` / `BOSS_CODEX_APP_SERVER_SKILL_EXTRA_ROOTS` 时,会先调用 `skills/extraRoots/set` 再拉取 `skills/list`,归一成设备 `capabilities.codexAppServer.metadata`;发现失败只记录 warn,不阻塞心跳。MCP discovery 使用 `detail=toolsAndAuthOnly`,turn discovery 固定 `itemsView=summary`,账号、配置、线程、Hook 和 Skill extra root discovery 只保留安全摘要;turn discovery 只额外保留最终 `agentMessage` 摘要,并会合并进 `projectCandidates.recentAssistantMessages` 用于 Codex Desktop 回复反向同步,不保存邮箱、resource URI、工具参数、完整 config、本地路径、迁移描述、用户正文、reasoning 原文、命令输出、原始 items、内部 prompt、系统提示词、hook 命令或共享 Skill 根绝对路径。
|
||||||
|
|||||||
@@ -35,7 +35,8 @@
|
|||||||
- `launchd` 已安装:`~/Library/LaunchAgents/com.hyzq.boss.local-agent.plist`
|
- `launchd` 已安装:`~/Library/LaunchAgents/com.hyzq.boss.local-agent.plist`
|
||||||
- 当前执行底座抽象层已落地在 `src/lib/execution/`,并已补齐 `ExecutionBackend / PromptAssembler / PermissionPolicy / RemoteRuntimeAdapter / OrchestrationBackend` 默认实现
|
- 当前执行底座抽象层已落地在 `src/lib/execution/`,并已补齐 `ExecutionBackend / PromptAssembler / PermissionPolicy / RemoteRuntimeAdapter / OrchestrationBackend` 默认实现
|
||||||
- 当前生产主链仍然沿用 `local-agent -> codex exec resume -> /api/v1/master-agent/tasks/[taskId]/complete`,执行底座重构以“先抽象、不改行为”为准
|
- 当前生产主链仍然沿用 `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/started|closed|archived|unarchived|name/updated`、`process/outputDelta|exited`、`rawResponseItem/completed`、`item/agentMessage/delta`、`item/plan/delta`、`item/reasoning/*Delta`、`item/mcpToolCall/progress`、`command/exec/outputDelta`、`item/commandExecution/terminalInteraction`、`item/fileChange/outputDelta`、`thread/goal/*`、`thread/settings/updated`、`thread/compacted`、`ThreadItem.contextCompaction`、`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`
|
- 当前 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/`,确认 151 个 method,并支持 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`、`item/agentMessage/delta`、`item/plan/delta`、`item/reasoning/*Delta`、`item/mcpToolCall/progress`、`command/exec/outputDelta`、`item/commandExecution/terminalInteraction`、`item/fileChange/outputDelta`、`thread/goal/*`、`thread/settings/updated`、`thread/compacted`、`ThreadItem.contextCompaction`、`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`
|
||||||
|
- 当前本机 `codex remote-control` 已确认为官方 App Server daemon 远控管理入口;boss-agent 本机状态页会展示 `Codex Remote Control` 托管摘要和启动命令,默认只观测不启动,后续真正启动 / 停止必须走显式操作、权限、审批和审计链路。
|
||||||
- 2026-06-04 重新生成 0.136.0-alpha.2 协议快照后,manifest 识别 151 个 method,并新增 `itemTypes` 支持矩阵。当前本机 schema 已确认 `app/list`、`app/list/updated`、`configRequirements/read`、`mcpServerStatus/list` 和 `ThreadItem.contextCompaction`;官方 App Server 文档列出的 `collaborationMode/list`、`thread/turns/list`、`ThreadItem.collabToolCall` 在本机生成 schema 中仍未声明,所以 Boss 只把它们作为运行时兼容/官方文档跟进项,不把“线程间对话”写成无监管 P2P。
|
- 2026-06-04 重新生成 0.136.0-alpha.2 协议快照后,manifest 识别 151 个 method,并新增 `itemTypes` 支持矩阵。当前本机 schema 已确认 `app/list`、`app/list/updated`、`configRequirements/read`、`mcpServerStatus/list` 和 `ThreadItem.contextCompaction`;官方 App Server 文档列出的 `collaborationMode/list`、`thread/turns/list`、`ThreadItem.collabToolCall` 在本机生成 schema 中仍未声明,所以 Boss 只把它们作为运行时兼容/官方文档跟进项,不把“线程间对话”写成无监管 P2P。
|
||||||
- 当前 App Server 能力发现已新增治理摘要:local-agent 会在 heartbeat discovery 中拉取 `experimentalFeature/list / collaborationMode/list / permissionProfile/list / mcpServerStatus/list`,并把实验特性、协作模式、权限 Profile 与 MCP 服务状态写入设备 `codexAppServer.metadata`;Web 与原生 Android 设备详情页都会显示“治理”摘要。该链路只保留安全摘要,不保存 MCP resource URI、permission profile 文件规则、本地路径、token 或工具参数。
|
- 当前 App Server 能力发现已新增治理摘要:local-agent 会在 heartbeat discovery 中拉取 `experimentalFeature/list / collaborationMode/list / permissionProfile/list / mcpServerStatus/list`,并把实验特性、协作模式、权限 Profile 与 MCP 服务状态写入设备 `codexAppServer.metadata`;Web 与原生 Android 设备详情页都会显示“治理”摘要。该链路只保留安全摘要,不保存 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`;Web 设备详情页会显示“账号 / 配置”摘要,原生 Android 设备详情页会显示“账号”摘要。该链路只读不写,不保存账号邮箱、完整 config、API key、本地路径或迁移描述。
|
- 当前 App Server 能力发现已新增账号与配置摘要:local-agent 会在 heartbeat discovery 中拉取 `account/read / account/rateLimits/read / config/read / configRequirements/read / externalAgentConfig/detect`,并把账号登录方式、套餐、额度使用率、App 配置计数、托管要求数量和外部 Agent 迁移候选数量写入设备 `codexAppServer.metadata`;Web 设备详情页会显示“账号 / 配置”摘要,原生 Android 设备详情页会显示“账号”摘要。该链路只读不写,不保存账号邮箱、完整 config、API key、本地路径或迁移描述。
|
||||||
|
|||||||
@@ -166,6 +166,36 @@ function resolveLicense(config, bound) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function normalizeCommandArgs(value, fallback = []) {
|
||||||
|
if (!Array.isArray(value)) return [...fallback];
|
||||||
|
return value.map((item) => nonEmpty(item)).filter(Boolean);
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveBooleanWithDefault(value, defaultValue = false) {
|
||||||
|
if (value === undefined || value === null || value === "") return defaultValue;
|
||||||
|
if (value === false || value === "false" || value === "0" || value === 0) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveCodexRemoteControl(config, appServerEnabled) {
|
||||||
|
const enabled = resolveBooleanWithDefault(config.codexRemoteControlEnabled, appServerEnabled);
|
||||||
|
const command = nonEmpty(config.codexRemoteControlCommand) ?? nonEmpty(config.codexAppServerCommand) ?? "codex";
|
||||||
|
const args = normalizeCommandArgs(config.codexRemoteControlArgs, ["remote-control", "start", "--json"]);
|
||||||
|
const startCommandLabel = [command, ...args].join(" ");
|
||||||
|
|
||||||
|
return {
|
||||||
|
enabled,
|
||||||
|
mode: enabled ? "managed_daemon" : "disabled",
|
||||||
|
command,
|
||||||
|
args,
|
||||||
|
startCommandLabel,
|
||||||
|
statusLabel: enabled ? "可托管启动" : "未启用",
|
||||||
|
summary: enabled
|
||||||
|
? "Codex Remote Control 会通过 App Server daemon 提供官方远控入口;当前状态页只展示能力,不在刷新时自动启动。"
|
||||||
|
: "Codex Remote Control daemon 未启用;远程控制会继续使用当前 App Server / Computer Use 配置。",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
function resolveCodexBinding(config) {
|
function resolveCodexBinding(config) {
|
||||||
const appServerEnabled = config.codexAppServerEnabled === true;
|
const appServerEnabled = config.codexAppServerEnabled === true;
|
||||||
const codexComputerUseEnabled = config.codexComputerUseEnabled === true;
|
const codexComputerUseEnabled = config.codexComputerUseEnabled === true;
|
||||||
@@ -187,6 +217,7 @@ function resolveCodexBinding(config) {
|
|||||||
: "Boss CUA Driver",
|
: "Boss CUA Driver",
|
||||||
fallbackProvider: "cua-driver-computer-use",
|
fallbackProvider: "cua-driver-computer-use",
|
||||||
fallbackLabel: "Boss CUA Driver",
|
fallbackLabel: "Boss CUA Driver",
|
||||||
|
remoteControl: resolveCodexRemoteControl(config, appServerEnabled),
|
||||||
summary:
|
summary:
|
||||||
defaultDesktopProvider === "codex-computer-use"
|
defaultDesktopProvider === "codex-computer-use"
|
||||||
? "远程控制默认走 Codex Computer Use,失败后回退 Boss CUA Driver。"
|
? "远程控制默认走 Codex Computer Use,失败后回退 Boss CUA Driver。"
|
||||||
@@ -620,6 +651,11 @@ function renderOverviewTab(status, { bound, heroTitle, heroSubtitle, qrBlock })
|
|||||||
<div class="metric-value">${escapeHtml(status.codex.desktopProviderLabel)}</div>
|
<div class="metric-value">${escapeHtml(status.codex.desktopProviderLabel)}</div>
|
||||||
<div class="metric-detail">${escapeHtml(status.codex.summary)}</div>
|
<div class="metric-detail">${escapeHtml(status.codex.summary)}</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="card metric">
|
||||||
|
<div class="metric-title">Codex Remote Control</div>
|
||||||
|
<div class="metric-value">${escapeHtml(status.codex.remoteControl.statusLabel)}</div>
|
||||||
|
<div class="metric-detail">${escapeHtml(status.codex.remoteControl.startCommandLabel)}</div>
|
||||||
|
</div>
|
||||||
<div class="card metric">
|
<div class="card metric">
|
||||||
<div class="metric-title">boss-agent OTA</div>
|
<div class="metric-title">boss-agent OTA</div>
|
||||||
<div class="metric-value">${escapeHtml(status.agentOta.statusLabel)}</div>
|
<div class="metric-value">${escapeHtml(status.agentOta.statusLabel)}</div>
|
||||||
|
|||||||
@@ -35,6 +35,13 @@
|
|||||||
"codexAppServerDiscoveryTtlMs": 300000,
|
"codexAppServerDiscoveryTtlMs": 300000,
|
||||||
"codexAppServerDiscoveryLimit": 20,
|
"codexAppServerDiscoveryLimit": 20,
|
||||||
"codexAppServerFallbackToCli": true,
|
"codexAppServerFallbackToCli": true,
|
||||||
|
"codexRemoteControlEnabled": true,
|
||||||
|
"codexRemoteControlCommand": "codex",
|
||||||
|
"codexRemoteControlArgs": [
|
||||||
|
"remote-control",
|
||||||
|
"start",
|
||||||
|
"--json"
|
||||||
|
],
|
||||||
"codexComputerUseEnabled": true,
|
"codexComputerUseEnabled": true,
|
||||||
"codexComputerUseCommand": "node",
|
"codexComputerUseCommand": "node",
|
||||||
"codexComputerUseArgs": [
|
"codexComputerUseArgs": [
|
||||||
|
|||||||
@@ -37,6 +37,13 @@
|
|||||||
"codexAppServerDiscoveryTtlMs": 300000,
|
"codexAppServerDiscoveryTtlMs": 300000,
|
||||||
"codexAppServerDiscoveryLimit": 20,
|
"codexAppServerDiscoveryLimit": 20,
|
||||||
"codexAppServerFallbackToCli": true,
|
"codexAppServerFallbackToCli": true,
|
||||||
|
"codexRemoteControlEnabled": true,
|
||||||
|
"codexRemoteControlCommand": "codex",
|
||||||
|
"codexRemoteControlArgs": [
|
||||||
|
"remote-control",
|
||||||
|
"start",
|
||||||
|
"--json"
|
||||||
|
],
|
||||||
"codexComputerUseEnabled": true,
|
"codexComputerUseEnabled": true,
|
||||||
"codexComputerUseCommand": "node",
|
"codexComputerUseCommand": "node",
|
||||||
"codexComputerUseArgs": [
|
"codexComputerUseArgs": [
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ test("boss-agent status exposes unbound QR binding and local permission states",
|
|||||||
backupApiLabel: "未启用",
|
backupApiLabel: "未启用",
|
||||||
codexAppServerEnabled: true,
|
codexAppServerEnabled: true,
|
||||||
codexComputerUseEnabled: true,
|
codexComputerUseEnabled: true,
|
||||||
|
codexRemoteControlEnabled: true,
|
||||||
bossAgentVersion: "20260501000000",
|
bossAgentVersion: "20260501000000",
|
||||||
bossAgentOtaEnabled: true,
|
bossAgentOtaEnabled: true,
|
||||||
licenseExpiresAt: "2027-05-12T00:00:00.000Z",
|
licenseExpiresAt: "2027-05-12T00:00:00.000Z",
|
||||||
@@ -68,6 +69,10 @@ test("boss-agent status exposes unbound QR binding and local permission states",
|
|||||||
assert.equal(status.skills.total, 2);
|
assert.equal(status.skills.total, 2);
|
||||||
assert.equal(status.codex.bindingStatus, "connected");
|
assert.equal(status.codex.bindingStatus, "connected");
|
||||||
assert.equal(status.codex.defaultDesktopProvider, "codex-computer-use");
|
assert.equal(status.codex.defaultDesktopProvider, "codex-computer-use");
|
||||||
|
assert.equal(status.codex.remoteControl.enabled, true);
|
||||||
|
assert.equal(status.codex.remoteControl.mode, "managed_daemon");
|
||||||
|
assert.equal(status.codex.remoteControl.startCommandLabel, "codex remote-control start --json");
|
||||||
|
assert.match(status.codex.remoteControl.summary, /App Server daemon/);
|
||||||
assert.equal(status.agentOta.enabled, true);
|
assert.equal(status.agentOta.enabled, true);
|
||||||
assert.equal(status.agentOta.currentVersion, "20260501000000");
|
assert.equal(status.agentOta.currentVersion, "20260501000000");
|
||||||
assert.equal(status.agentOta.hasUpdate, true);
|
assert.equal(status.agentOta.hasUpdate, true);
|
||||||
@@ -113,6 +118,7 @@ test("boss-agent status treats token-backed devices as bound and renders enterpr
|
|||||||
backupApiLabel: "OpenAI 备用",
|
backupApiLabel: "OpenAI 备用",
|
||||||
codexAppServerEnabled: true,
|
codexAppServerEnabled: true,
|
||||||
codexComputerUseEnabled: true,
|
codexComputerUseEnabled: true,
|
||||||
|
codexRemoteControlEnabled: true,
|
||||||
license: {
|
license: {
|
||||||
enterpriseName: "默认公司",
|
enterpriseName: "默认公司",
|
||||||
status: "valid",
|
status: "valid",
|
||||||
@@ -159,6 +165,8 @@ test("boss-agent status treats token-backed devices as bound and renders enterpr
|
|||||||
assert.match(html, /DeepSeek V4/);
|
assert.match(html, /DeepSeek V4/);
|
||||||
assert.match(html, /Codex 默认接管/);
|
assert.match(html, /Codex 默认接管/);
|
||||||
assert.match(html, /Codex Computer Use/);
|
assert.match(html, /Codex Computer Use/);
|
||||||
|
assert.match(html, /Codex Remote Control/);
|
||||||
|
assert.match(html, /remote-control start --json/);
|
||||||
assert.match(html, /boss-agent OTA/);
|
assert.match(html, /boss-agent OTA/);
|
||||||
assert.match(html, /发现新版本/);
|
assert.match(html, /发现新版本/);
|
||||||
assert.match(html, /默认公司/);
|
assert.match(html, /默认公司/);
|
||||||
|
|||||||
Reference in New Issue
Block a user