harness-mix 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/CHANGELOG.md +10 -1
  2. package/README.md +60 -15
  3. package/docs/images/codex-desktop-home.png +0 -0
  4. package/docs/images/codex-desktop-session.png +0 -0
  5. package/docs/multi-agent-collaboration.md +68 -68
  6. package/output/native-build/renderer-extension.js +2225 -1761
  7. package/package.json +1 -2
  8. package/scripts/collaboration-recovery-test.cjs +22 -2
  9. package/scripts/collaboration-ui-smoke.cjs +10 -5
  10. package/scripts/native-protocol-test.cjs +20 -0
  11. package/scripts/workspace-test.cjs +2 -14
  12. package/src/main/adapters/antigravity.js +49 -18
  13. package/src/main/adapters/claude.js +3 -2
  14. package/src/main/adapters/codex.js +10 -8
  15. package/src/main/adapters/dsh.js +3 -2
  16. package/src/main/adapters/opencode.js +21 -13
  17. package/src/main/adapters/pi-family.js +3 -3
  18. package/src/main/host/collaboration-worktree.js +63 -4
  19. package/src/main/host/collaboration.js +28 -2
  20. package/src/main/host/runtime.js +22 -1
  21. package/src/main/native/protocol.js +250 -24
  22. package/src/native-ui/desktop-control/dist/tsconfig.tsbuildinfo +1 -1
  23. package/src/native-ui/renderer-extension/dist/types/harness-mix-settings.d.ts.map +1 -1
  24. package/src/native-ui/renderer-extension/dist/types/index.d.ts +2 -0
  25. package/src/native-ui/renderer-extension/dist/types/index.d.ts.map +1 -1
  26. package/src/native-ui/renderer-extension/dist/types/renderer-binding-probe.d.ts.map +1 -1
  27. package/src/native-ui/renderer-extension/dist/types/renderer-collab-cards.d.ts +40 -0
  28. package/src/native-ui/renderer-extension/dist/types/renderer-collab-cards.d.ts.map +1 -0
  29. package/src/native-ui/renderer-extension/dist/types/renderer-credits-control.d.ts.map +1 -1
  30. package/src/native-ui/renderer-extension/dist/types/renderer-harness-mentions.d.ts.map +1 -1
  31. package/src/native-ui/renderer-extension/dist/types/renderer-model-client.d.ts +8 -0
  32. package/src/native-ui/renderer-extension/dist/types/renderer-model-client.d.ts.map +1 -1
  33. package/src/native-ui/renderer-extension/dist/types/renderer-usage-control.d.ts.map +1 -1
  34. package/src/native-ui/renderer-extension/dist/types/settings/connections-page.d.ts +3 -1
  35. package/src/native-ui/renderer-extension/dist/types/settings/connections-page.d.ts.map +1 -1
  36. package/src/native-ui/renderer-extension/dist/types/settings/harness-accounts.d.ts +8 -1
  37. package/src/native-ui/renderer-extension/dist/types/settings/harness-accounts.d.ts.map +1 -1
  38. package/src/native-ui/renderer-extension/dist/types/settings/localization.d.ts +16 -0
  39. package/src/native-ui/renderer-extension/dist/types/settings/localization.d.ts.map +1 -1
  40. package/src/native-ui/renderer-extension/dist/types/settings/pages.d.ts +1 -0
  41. package/src/native-ui/renderer-extension/dist/types/settings/pages.d.ts.map +1 -1
  42. package/src/native-ui/renderer-extension/dist/types/tsconfig.tsbuildinfo +1 -1
  43. package/src/native-ui/renderer-extension/src/assets/README.md +8 -38
  44. package/src/native-ui/renderer-extension/src/harness-mix-settings.ts +9 -1
  45. package/src/native-ui/renderer-extension/src/index.ts +9 -0
  46. package/src/native-ui/renderer-extension/src/renderer-binding-probe.ts +67 -6
  47. package/src/native-ui/renderer-extension/src/renderer-collab-cards.ts +198 -0
  48. package/src/native-ui/renderer-extension/src/renderer-credits-control.ts +32 -12
  49. package/src/native-ui/renderer-extension/src/renderer-harness-mentions.ts +139 -46
  50. package/src/native-ui/renderer-extension/src/renderer-model-client.ts +7 -2
  51. package/src/native-ui/renderer-extension/src/renderer-usage-control.ts +34 -3
  52. package/src/native-ui/renderer-extension/src/settings/accounts.css +80 -4
  53. package/src/native-ui/renderer-extension/src/settings/connections-page.ts +68 -29
  54. package/src/native-ui/renderer-extension/src/settings/harness-accounts.ts +89 -28
  55. package/src/native-ui/renderer-extension/src/settings/localization.ts +48 -0
  56. package/src/native-ui/renderer-extension/src/settings/pages.ts +19 -2
  57. package/src/native-ui/renderer-extension/src/settings/shell.css +62 -0
  58. package/src/native-ui/renderer-extension/src/settings/shell.ts +1 -1
  59. package/src/native-ui/renderer-extension/test/renderer-collab-cards.test.ts +45 -0
  60. package/src/native-ui/renderer-extension/test/renderer-model-client.test.ts +1 -0
  61. package/src/native-ui/shared-contracts/dist/harness-accounts.d.ts +20 -6
  62. package/src/native-ui/shared-contracts/dist/harness-accounts.d.ts.map +1 -1
  63. package/src/native-ui/shared-contracts/dist/harness-accounts.js +4 -1
  64. package/src/native-ui/shared-contracts/dist/harness-accounts.js.map +1 -1
  65. package/src/native-ui/shared-contracts/dist/harness-models.d.ts +22 -0
  66. package/src/native-ui/shared-contracts/dist/harness-models.d.ts.map +1 -1
  67. package/src/native-ui/shared-contracts/dist/harness-models.js +2 -1
  68. package/src/native-ui/shared-contracts/dist/harness-models.js.map +1 -1
  69. package/src/native-ui/shared-contracts/dist/tsconfig.tsbuildinfo +1 -1
  70. package/src/native-ui/shared-contracts/src/harness-accounts.ts +4 -1
  71. package/src/native-ui/shared-contracts/src/harness-models.ts +6 -1
  72. package/docs/images/harness-mix-home.png +0 -0
  73. package/docs/images/harness-mix-session.png +0 -0
  74. package/scripts/git-test.cjs +0 -33
  75. package/src/assets/icons/activity-compact.svg +0 -1
  76. package/src/assets/icons/activity-edit.svg +0 -1
  77. package/src/assets/icons/activity-terminal.svg +0 -1
  78. package/src/assets/icons/commands.svg +0 -1
  79. package/src/assets/icons/home-chat.svg +0 -1
  80. package/src/assets/icons/home-folder.svg +0 -1
  81. package/src/assets/icons/thread-fork.svg +0 -1
  82. package/src/main/workspace/git.js +0 -73
  83. package/src/main/workspace/ipc.js +0 -50
  84. package/src/main/workspace/terminal.js +0 -34
  85. package/src/native-ui/renderer-extension/src/assets/claude-agent.svg +0 -3
  86. package/src/native-ui/renderer-extension/src/assets/codex-logo-bright.png +0 -0
  87. package/src/native-ui/renderer-extension/src/assets/codex-logo-transparent.png +0 -0
  88. package/src/native-ui/renderer-extension/src/assets/codex-logo.png +0 -0
  89. package/src/native-ui/renderer-extension/src/assets/codexhost-icon.png +0 -0
  90. package/src/native-ui/renderer-extension/src/assets/codexhost-logo-transparent.png +0 -0
  91. package/src/native-ui/renderer-extension/src/assets/codexhost-logo.png +0 -0
  92. package/src/native-ui/renderer-extension/src/assets/codexhost-readme.svg +0 -8
  93. package/src/native-ui/renderer-extension/src/assets/pi-agent.svg +0 -4
  94. package/src/native-ui/renderer-extension/src/settings/accounts-quota-interactive.prototype.html +0 -1418
  95. package/src/native-ui/renderer-extension/src/settings/update-notes.preview.html +0 -491
  96. package/src/native-ui/renderer-extension/src/settings/windows-update.preview.html +0 -2135
package/CHANGELOG.md CHANGED
@@ -1,6 +1,15 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.1 — 2026-09-12
3
+ ## 0.1.3 — 2026-09-13
4
+
5
+ - Added multi-agent collaboration support (@ mentions composer, thread delegation, worktree isolation).
6
+ - Cleaned up legacy standalone workbench UI services, throwaway HTML prototypes, and unused icon assets.
7
+ - Enhanced native harness adapters and settings management.
8
+
9
+ ## 0.1.2 — 2026-09-13
10
+
11
+ - Hardened native process supervision, DPAPI secret store, and dual-channel auto-update.
12
+
4
13
 
5
14
  - Added native ACP adapters for CodeBuddy, Kiro CLI, Cursor CLI and Qoder.
6
15
  - Added explicit ACP bridge configuration for ZCode and Trae without claiming an unverified vendor entry point.
package/README.md CHANGED
@@ -1,20 +1,63 @@
1
1
  # Harness Mix
2
2
 
3
- <p align="center">
4
- <img src="src/assets/brand-harness-mix.png" width="92" alt="Harness Mix logo">
5
- </p>
6
-
7
- <p align="center"><strong>Codex 原生 UI,连接多个原生 Coding Harness。</strong></p>
3
+ <p align="center">
4
+ <img src="src/assets/brand-harness-mix.png" width="92" alt="Harness Mix logo">
5
+ </p>
6
+
7
+ <p align="center">
8
+ ⭐ 如果这个项目对你有帮助,请给我们一个 <a href="https://github.com/emo-xiaoyu/harness-mix">Star</a>! ⭐
9
+ </p>
10
+
11
+ <p align="center"><strong>Codex 原生 UI,连接多个原生 Coding Harness。</strong></p>
8
12
 
9
13
  <p align="center">
10
14
  <a href="LICENSE"><img alt="License: Apache-2.0" src="https://img.shields.io/badge/license-Apache--2.0-blue.svg"></a>
11
15
  <img alt="UI" src="https://img.shields.io/badge/UI-Codex%20Desktop-412991.svg">
12
- <img alt="Platform" src="https://img.shields.io/badge/platform-Windows-0078D4.svg">
13
- </p>
14
-
15
- Harness Mix 是接入官方 Codex Desktop 原生界面的本地内核。它通过本地编译的 CLI Shim 对接桌面的 app-server 协议,把 Codex、Pi、Claude Code、DeepSeek Harness、CodeBuddy、Kiro CLI、Cursor CLI 等原生 Coding Harness 接入同一套 UI。Host Runtime 与 Protocol Core 管理任务映射、协作和事件投影;模型调用、工具执行、原生会话与凭据仍由各 Harness 自己管理。
16
-
17
- ![Harness Mix 首页](docs/images/harness-mix-home.png)
16
+ <img alt="Platform" src="https://img.shields.io/badge/platform-Windows-0078D4.svg">
17
+ </p>
18
+
19
+ <p align="center"><strong>当前注册的 Harness(16 个)</strong></p>
20
+
21
+ <table align="center">
22
+ <tbody>
23
+ <tr>
24
+ <td align="center"><img src="src/assets/icons/antigravity-color.svg" width="28" height="28" alt="Antigravity"><br><sub>Antigravity</sub></td>
25
+ <td align="center"><img src="src/assets/icons/codex-harness.svg" width="28" height="28" alt="Codex"><br><sub>Codex</sub></td>
26
+ <td align="center"><img src="src/assets/icons/claude-color.svg" width="28" height="28" alt="Claude Code"><br><sub>Claude Code</sub></td>
27
+ <td align="center"><img src="src/assets/icons/pi.svg" width="28" height="28" alt="Pi"><br><sub>Pi</sub></td>
28
+ </tr>
29
+ <tr>
30
+ <td align="center"><img src="src/assets/icons/omp-color.svg" width="28" height="28" alt="Oh My Pi"><br><sub>Oh My Pi</sub></td>
31
+ <td align="center"><img src="src/assets/icons/deepseek-color.svg" width="28" height="28" alt="DeepSeek Harness"><br><sub>DeepSeek</sub></td>
32
+ <td align="center"><img src="src/assets/icons/opencode-color.svg" width="28" height="28" alt="OpenCode"><br><sub>OpenCode</sub></td>
33
+ <td align="center"><img src="src/assets/icons/grok-color.svg" width="28" height="28" alt="Grok"><br><sub>Grok</sub></td>
34
+ </tr>
35
+ <tr>
36
+ <td align="center"><img src="src/assets/icons/openclaw-color.svg" width="28" height="28" alt="OpenClaw"><br><sub>OpenClaw</sub></td>
37
+ <td align="center"><img src="src/assets/icons/hermes-color.svg" width="28" height="28" alt="Hermes"><br><sub>Hermes</sub></td>
38
+ <td align="center"><img src="src/assets/icons/qoder-color.svg" width="28" height="28" alt="Qoder"><br><sub>Qoder</sub></td>
39
+ <td align="center"><img src="src/assets/icons/codebuddy-color.svg" width="28" height="28" alt="CodeBuddy"><br><sub>CodeBuddy</sub></td>
40
+ </tr>
41
+ <tr>
42
+ <td align="center"><img src="src/assets/icons/kiro-cli-color.svg" width="28" height="28" alt="Kiro"><br><sub>Kiro</sub></td>
43
+ <td align="center"><img src="src/assets/icons/cursor.svg" width="28" height="28" alt="Cursor"><br><sub>Cursor</sub></td>
44
+ <td align="center"><img src="src/assets/icons/zcode-color.svg" width="28" height="28" alt="ZCode"><br><sub>ZCode</sub></td>
45
+ <td align="center"><img src="src/assets/icons/trae-color.svg" width="28" height="28" alt="Trae"><br><sub>Trae</sub></td>
46
+ </tr>
47
+ </tbody>
48
+ </table>
49
+
50
+ <p align="center"><sub>图标与 Harness 能力均来自项目自身的注册表;只有本机已安装且握手成功的 Harness 才会进入真实运行。</sub></p>
51
+
52
+ Harness Mix 是接入官方 Codex Desktop 原生界面的本地内核。它通过本地编译的 CLI Shim 对接桌面的 app-server 协议,把包括 Antigravity、Codex、Pi、Oh My Pi、Claude Code、DeepSeek Harness、OpenCode、Grok、OpenClaw、Hermes、Qoder、CodeBuddy、Kiro CLI、Cursor CLI、ZCode 和 Trae 在内的原生 Coding Harness 接入同一套 UI。Host Runtime 与 Protocol Core 管理任务映射、协作和事件投影;模型调用、工具执行、原生会话与凭据仍由各 Harness 自己管理。
53
+
54
+ ## 界面预览
55
+
56
+ <p align="center">
57
+ <img src="docs/images/codex-desktop-home.png" width="960" alt="Codex Desktop 原生首页中的 Harness Mix">
58
+ </p>
59
+
60
+ 预览来自当前 Codex Desktop 原生窗口:Harness Mix 作为原生扩展入口出现在桌面工具栏和 Composer 中,会话、模型、工具与权限仍由 Codex Desktop 及各 Harness 管理。
18
61
 
19
62
  ## 能做什么
20
63
 
@@ -26,7 +69,9 @@ Harness Mix 是接入官方 Codex Desktop 原生界面的本地内核。它通
26
69
  - CodeBuddy、Kiro 和 Cursor 使用原生 ACP 加厂商专用接口:提问、计划确认、配置确认、取消恢复、上下文与历史按各自协议处理。功能和验证范围见下表,不将通用 ACP 能力视为所有 CLI 都已支持。
27
70
  - 通过 Adapter 注册新 Harness,UI 侧无需理解厂商协议。
28
71
 
29
- ![Harness Mix 会话](docs/images/harness-mix-session.png)
72
+ <p align="center">
73
+ <img src="docs/images/codex-desktop-session.png" width="960" alt="Codex Desktop 原生会话中的 Harness Mix">
74
+ </p>
30
75
 
31
76
  ## 原生接入
32
77
 
@@ -204,9 +249,9 @@ npm run e2e:codex
204
249
 
205
250
  ## 项目状态
206
251
 
207
- - [内核迁移状态](CORE-MIGRATION-STATUS.md)
208
- - [下一步计划](NEXT-STEPS.md)
209
- - [设计验收记录](design-qa.md)
252
+ - [内核迁移状态](CORE-MIGRATION-STATUS.md)
253
+ - [下一步计划](NEXT-STEPS.md)
254
+ - [Codex Desktop 原生接入说明](docs/native-codex.md)
210
255
 
211
256
  Harness Mix 参考了 [codex-host](https://github.com/BytePioneer-AI/codex-host) 的插件化组织方式,并使用 [OpenAI Codex](https://github.com/openai/codex) 官方 app-server 协议完成 Codex 原生接入。
212
257
 
@@ -1,73 +1,73 @@
1
- # 多 Agent 协作
2
-
3
- ## 用法
4
-
5
- 重新启动 Harness Mix 后,新建或恢复一个 Pi / Oh My Pi / Claude Code / **Codex(协作)** / Grok / OpenCode 任务,输入 `@`,在 **Agents** 页选择目标 Harness;**会话** 页单独提供历史引用。左右键切换分页,上下键选择,Enter/Tab 插入。Codex(协作)通过 Host Adapter 使用原生 app-server;原来的 Codex 入口仍为官方直通。可用目标来自 Host 注册的 Adapter;未就绪的目标不可选。示例:
6
-
7
- ```text
8
- 你负责实现后端。
9
- @claude-code 审查 API 设计,只读,不修改文件。
10
- @pi 为 tests/ 编写测试,不修改 src/。
11
- 收齐结果后由你运行验证并总结。
12
- ```
13
-
14
- 也可直接输入 `@pi`、`@claude`、`@dsh`、`@codex` 等已注册 ID/别名。显式 `[名称](harness-mix://agent/pi)` 引用可随草稿复制;代码块、行内代码和邮箱里的 @ 不作为路由元数据。提及本身由主模型结合用户任务理解,Host 不按文字片段盲目拆任务。
15
-
16
- ## 执行方式
17
-
18
- 借鉴 Codeg 的 [委派工具](https://github.com/xintaofei/codeg/blob/main/src-tauri/src/acp/delegation/tool_schema.json) 和 [Agent 引用路由](https://github.com/xintaofei/codeg/blob/main/src-tauri/src/acp/agent_mentions.rs):
19
-
20
- 1. Host 为主任务提供会话绑定的协作工具。Claude 通过 SDK 的 MCP 配置,Codex Adapter 通过 app-server 的线程 MCP 配置,Pi/OMP 通过原生扩展加载,Grok 通过原生 `session/new` 的 `mcpServers` 槽注入(L1),OpenCode 通过 `OPENCODE_CONFIG_CONTENT` 内联配置注入 `mcp["harness-mix"]`(V2 schema,运行时最高优先级、不写任何用户配置文件),DSH 协作主任务通过官方 `dsh --profile acp` 的 session-scoped MCP 注入;DSH 普通任务仍走 Web Remote。
21
- 2. 主模型调用 `delegate_to_agent(agent_type, task)`,立即取得 `task_id`,可以继续发起其他任务。
22
- 3. Host 创建带 `parentThreadId` 的独立原生会话。任务中需要的上下文由主模型明确传递,不复制其他 Harness 的隐藏状态、账户或权限。
23
- 4. `update_agent_plan(steps)` 发布开发、审查、返工和最终验收计划;步骤状态为 pending / in_progress / completed。`get_delegation_status(task_ids, wait_ms)` 收取状态和最终文本;单次等待不超过 60 秒。`message_agent` 在已结束的子会话中继续对话,`cancel_delegation` 取消子任务。
24
- 5. 结果作为真正的原生工具结果返回主模型,由主模型验证、整合并继续执行。Host 额外投影原生 `collabAgentToolCall` 协作卡片(真实子任务 ID、Harness 名称、提示词和最终状态),不代替主模型生成总结。
25
-
26
- `list_agents` 提供真实可用性。旧 `/delegate` 仍是独立的手动委派入口,其完成结果只回投父任务工具卡片,不自动调用父模型。
27
-
28
- ## 执行边界
29
-
30
- - 同一主任务最多四个同时运行的子任务,每轮最多创建十六个;子任务不注入协作工具,不允许递归委派。
31
- - 模型工具委派默认共享主任务目录,子 Agent 使用独立原生会话。开发完成后再委派审查,审查意见通过 `message_agent` 发回原开发者,修复后复用原审查会话复审。主任务应等待依赖步骤完成并避免同时修改相同文件。主任务负责共享目录整体文件快照。显式 `isolation=worktree`(或 Git 项目中的 `auto`)仍创建隔离分支与工作区,保存主目录当前非忽略文件作为起点,保留用户暂存区;隔离改动不会自动出现在主目录。
32
- - 协作不创建独立面板或第二套 UI。父子关系通过原生 `parentThreadId` 投影,子任务进入 Codex 原生任务体系;委派和跟进显示为原生协作卡片;普通工具及轮询仍显示为 MCP 工具卡片,审批在相应原生子任务中处理,文件变化由原生 Changes 界面展示。
33
- - 主任务可调用 `review_delegation_changes` 在原生工具卡片中审查 worktree patch。只有用户明确要求应用时才可调用 `apply_delegation_changes`,并必须提交刚审查得到的 digest。应用前检查 Git patch 冲突;冲突时保留两个目录,交给用户处理。worktree 保留供检查,不自动删除。隔离子任务有独立审查快照;共享子任务仍由主任务记录整体快照。旧 `/delegate` 手动入口仍为共享目录。
34
- - 同目录的无关任务仍受原有执行互斥约束。父任务结束/取消、Host 关闭会取消尚未完成的子任务;30 分钟未完成的子任务会超时。
35
- - 协作 HTTP 桥仅绑定 loopback,以每个主任务的随机本地能力标识鉴权;工具参数校验,子任务归属检查,外部 Origin 拒绝。该标识不是模型账户令牌。Host 不读取或代理原生账户密钥。
36
- - Claude 的 `canUseTool` 和 Codex MCP elicitation 继续走原生审批。需要确认时,用户在相应任务的审批界面处理;自动验证不会代答。
37
- - 主任务 Fork 会重新绑定自己的协作身份,不复用源任务的子任务访问权。
38
- - task_id、父子会话、任务文本、结果和 worktree 起点在独立串行存储中持久化;重启后在途任务变为 interrupted,不自动重复执行有副作用的操作。点击「继续协作」向原主任务发送续跑请求,主模型用 `list_delegations` / `resume_delegation` 恢复原子会话。原生会话丢失或无法恢复会明确报错。会话鉴权标识不持久化,重启重新签发。
39
-
40
- ## 支持与验证范围
41
-
42
- | 入口 | 状态 |
43
- | --- | --- |
44
- | Pi 主任务 | 原生扩展工具;Pi→Pi、Pi→Claude 两条真实模型链路通过 |
45
- | Claude Code 主任务 | SDK MCP 注入;本机真实运行触发原生工具审批,未代答,尚未完成模型闭环验收 |
46
- | Oh My Pi 主任务 | 同 Pi 家族的扩展接线;本机未安装 OMP,真实验收未完成 |
47
- | Codex(协作)主任务 | 已接入选择器、模型/强度、恢复归属、@ 菜单;桌面使用配套 CLI。真实请求已到原生 MCP 审批,尚未完成需授权的闭环 |
48
- | Grok 主任务 | L1:`session/new`/`session/load` 原生 `mcpServers` 槽注入,恢复会话同样携带;真实模型闭环验收待跑 |
1
+ # 多 Agent 协作
2
+
3
+ ## 用法
4
+
5
+ 重新启动 Harness Mix 后,新建或恢复一个 Pi / Oh My Pi / Claude Code / **Codex(协作)** / Grok / OpenCode / **Antigravity** 任务,输入 `@`,在 **Agents** 页选择目标 Harness;**会话** 页单独提供历史引用。左右键切换分页,上下键选择,Enter/Tab 插入。Codex(协作)通过 Host Adapter 使用原生 app-server;原来的 Codex 入口仍为官方直通。可用目标来自 Host 注册的 Adapter;未就绪的目标不可选。示例:
6
+
7
+ ```text
8
+ 你负责实现后端。
9
+ @claude-code 审查 API 设计,只读,不修改文件。
10
+ @pi 为 tests/ 编写测试,不修改 src/。
11
+ 收齐结果后由你运行验证并总结。
12
+ ```
13
+
14
+ 也可直接输入 `@pi`、`@claude`、`@dsh`、`@codex` 等已注册 ID/别名。显式 `[名称](harness-mix://agent/pi)` 引用可随草稿复制;代码块、行内代码和邮箱里的 @ 不作为路由元数据。提及本身由主模型结合用户任务理解,Host 不按文字片段盲目拆任务。
15
+
16
+ ## 执行方式
17
+
18
+ 借鉴 Codeg 的 [委派工具](https://github.com/xintaofei/codeg/blob/main/src-tauri/src/acp/delegation/tool_schema.json) 和 [Agent 引用路由](https://github.com/xintaofei/codeg/blob/main/src-tauri/src/acp/agent_mentions.rs):
19
+
20
+ 1. Host 为主任务提供会话绑定的协作工具。Claude 通过 SDK 的 MCP 配置,Codex Adapter 通过 app-server 的线程 MCP 配置,Pi/OMP 通过原生扩展加载,Grok 通过原生 `session/new` 的 `mcpServers` 槽注入(L1),OpenCode 通过 `OPENCODE_CONFIG_CONTENT` 内联配置注入 `mcp["harness-mix"]`(V2 schema,运行时最高优先级、不写任何用户配置文件),DSH 协作主任务通过官方 `dsh --profile acp` 的 session-scoped MCP 注入,Antigravity 协作主任务通过 bridge 目录自动生成的 `.agents/plugins/harness-mix` plugin 及 loopback MCP 配置注入与引导词;DSH 普通任务仍走 Web Remote。
21
+ 2. 主模型调用 `delegate_to_agent(agent_type, task)`,立即取得 `task_id`,可以继续发起其他任务。
22
+ 3. Host 创建带 `parentThreadId` 的独立原生会话。任务中需要的上下文由主模型明确传递,不复制其他 Harness 的隐藏状态、账户或权限。
23
+ 4. `update_agent_plan(steps)` 发布开发、审查、返工和最终验收计划;步骤状态为 pending / in_progress / completed。`get_delegation_status(task_ids, wait_ms)` 收取状态和最终文本;单次等待不超过 60 秒。`message_agent` 在已结束的子会话中继续对话,`cancel_delegation` 取消子任务。
24
+ 5. 结果作为真正的原生工具结果返回主模型,由主模型验证、整合并继续执行。Host 额外投影原生 `collabAgentToolCall` 协作卡片(真实子任务 ID、Harness 名称、提示词、最终状态、Worktree 补丁与改动摘要),原生桌面渲染扩展支持点击直接跳转定位到子会话、内联展开语法高亮 Diff 查看改动、以及一键合并回主项目。
25
+
26
+ `list_agents` 提供真实可用性。旧 `/delegate` 仍是独立的手动委派入口,其完成结果只回投父任务工具卡片,不自动调用父模型。
27
+
28
+ ## 执行边界
29
+
30
+ - 同一主任务最多四个同时运行的子任务,每轮最多创建十六个;子任务不注入协作工具,不允许递归委派。
31
+ - 模型工具委派默认共享主任务目录,子 Agent 使用独立原生会话。开发完成后再委派审查,审查意见通过 `message_agent` 发回原开发者,修复后复用原审查会话复审。主任务应等待依赖步骤完成并避免同时修改相同文件。主任务负责共享目录整体文件快照。显式 `isolation=worktree`(或 Git 项目中的 `auto`)仍创建隔离分支与工作区,保存主目录当前非忽略文件作为起点,保留用户暂存区;隔离改动不会自动出现在主目录。
32
+ - 协作不创建独立面板或第二套 UI。父子关系通过原生 `parentThreadId` 投影,子任务进入 Codex 原生任务体系;委派和跟进显示为原生协作卡片;普通工具及轮询仍显示为 MCP 工具卡片,审批在相应原生子任务中处理,文件变化由原生 Changes 界面展示。
33
+ - 主任务可调用 `review_delegation_changes` 在原生工具卡片中审查 worktree patch。只有用户明确要求应用时才可调用 `apply_delegation_changes`,并必须提交刚审查得到的 digest。应用前检查 Git patch 冲突;冲突时结构化输出冲突文件清单及处置指引(工作区手动解决、推送到远程分支开 PR、或一键丢弃)。系统提供 `codexhost/thread/workspace/discard` 一键安全清除 worktree 与删除临时分支,以及 `codexhost/thread/workspace/push` 提交快照并直接推送到 Git 远程分支。worktree 默认保留供检查,不自动删除。隔离子任务有独立审查快照;共享子任务仍由主任务记录整体快照。旧 `/delegate` 手动入口仍为共享目录。
34
+ - 同目录的无关任务仍受原有执行互斥约束。父任务结束/取消、Host 关闭会取消尚未完成的子任务;30 分钟未完成的子任务会超时。
35
+ - 协作 HTTP 桥仅绑定 loopback,以每个主任务的随机本地能力标识鉴权;工具参数校验,子任务归属检查,外部 Origin 拒绝。该标识不是模型账户令牌。Host 不读取或代理原生账户密钥。
36
+ - Claude 的 `canUseTool` 和 Codex MCP elicitation 继续走原生审批。需要确认时,用户在相应任务的审批界面处理;自动验证不会代答。
37
+ - 主任务 Fork 会重新绑定自己的协作身份,不复用源任务的子任务访问权。
38
+ - task_id、父子会话、任务文本、结果和 worktree 起点在独立串行存储中持久化;重启后在途任务变为 interrupted,不自动重复执行有副作用的操作。点击「继续协作」向原主任务发送续跑请求,主模型用 `list_delegations` / `resume_delegation` 恢复原子会话。原生会话丢失或无法恢复会明确报错。会话鉴权标识不持久化,重启重新签发。
39
+
40
+ ## 支持与验证范围
41
+
42
+ | 入口 | 状态 |
43
+ | --- | --- |
44
+ | Pi 主任务 | 原生扩展工具;Pi→Pi、Pi→Claude 两条真实模型链路通过 |
45
+ | Claude Code 主任务 | SDK MCP 注入;本机真实运行触发原生工具审批,未代答,尚未完成模型闭环验收 |
46
+ | Oh My Pi 主任务 | 同 Pi 家族的扩展接线;本机未安装 OMP,真实验收未完成 |
47
+ | Codex(协作)主任务 | 已接入选择器、模型/强度、恢复归属、@ 菜单;桌面使用配套 CLI。真实请求已到原生 MCP 审批,尚未完成需授权的闭环 |
48
+ | Grok 主任务 | L1:`session/new`/`session/load` 原生 `mcpServers` 槽注入,恢复会话同样携带;真实模型闭环验收待跑 |
49
49
  | OpenCode 主任务 | L2:`OPENCODE_CONFIG_CONTENT` 使用 `mcp["harness-mix"]`(V2 schema),会话结束即失效;本机真实请求已到官方 API,但被账户余额阻断 |
50
50
  | DSH 主任务 | 官方 `dsh --profile acp` 接收 session-scoped `harness-mix` MCP;DSH→CodeBuddy 两个 worktree 子任务和最终 `COLLAB_VERIFIED` 已通过真实模型回路。普通 DSH 任务继续使用 Web Remote |
51
- | 官方 Codex 桌面直通任务 | 保持官方直通,不展示 Host 的 @ 协作菜单;不要把 Adapter 接线等同于已支持这个入口 |
52
- | 其他 Harness 主任务(含 Antigravity) | Agents 页明确提示需要切换可编排的主 Agent,目标不可选;历史引用仍可用;可使用旧 /delegate |
53
- | 子任务目标 | 所有已注册且本机可用的 Adapter;不代表每一对组合都已实测 |
54
-
55
- ```powershell
56
- npm run test:collaboration
57
- npm run test:collaboration-recovery
58
- npm run smoke:collaboration-ui
59
- npm run e2e:collaboration -- --lead=pi --worker=claude
60
- npm run check
61
- npm run test:core-all
62
- npm run test:native-protocol
63
- npm run e2e:native
64
- npm run build:native
65
- ```
66
-
67
- `test:collaboration` 使用真实 MCP stdio 子进程、本地鉴权桥和受控原生会话 Adapter 验证并发、结果、跟进、取消、跨任务访问限制、历史引用提示和共享快照策略。UI smoke 只检查原生输入框内的 Harness/历史会话选择、图标、标识、键盘选取和清理,截图位于 `output/collaboration-ui/mentions.png`。协作过程由 Native Protocol 的原生工具卡片测试覆盖。这不是完整 Codex Desktop 的交互验收;构建过程不会重启当前桌面。
68
-
51
+ | Antigravity 主任务 | 支持主编排(通过 `.agents/plugins/harness-mix` MCP 自动挂载及指导词注入);已接入协同工具与卡片投影 |
52
+ | 官方 Codex 桌面直通任务 | 保持官方直通,不展示 Host 的 @ 协作菜单;不要把 Adapter 接线等同于已支持这个入口 |
53
+ | 其他 Harness 主任务 | Agents 页明确提示需要切换可编排的主 Agent,目标不可选;历史引用仍可用;可使用旧 /delegate |
54
+ | 子任务目标 | 所有已注册且本机可用的 Adapter;不代表每一对组合都已实测 |
55
+
56
+ ```powershell
57
+ npm run test:collaboration
58
+ npm run test:collaboration-recovery
59
+ npm run smoke:collaboration-ui
60
+ npm run e2e:collaboration -- --lead=pi --worker=claude
61
+ npm run check
62
+ npm run test:core-all
63
+ npm run test:native-protocol
64
+ npm run e2e:native
65
+ npm run build:native
66
+ ```
67
+
68
+ `test:collaboration` 使用真实 MCP stdio 子进程、本地鉴权桥和受控原生会话 Adapter 验证并发、结果、跟进、取消、跨任务访问限制、历史引用提示和共享快照策略。UI smoke 只检查原生输入框内的 Harness/历史会话选择、图标、标识、键盘选取和清理,截图位于 `output/collaboration-ui/mentions.png`。协作过程由 Native Protocol 的原生工具卡片测试覆盖。这不是完整 Codex Desktop 的交互验收;构建过程不会重启当前桌面。
69
+
69
70
  2026-09-12 验证:Pi→Claude 两个真实子任务分别在不同 worktree 运行,DSH→CodeBuddy 两个真实子任务也在独立 worktree 完成并由 DSH 主会话汇总 `COLLAB_VERIFIED`。恢复测试覆盖持久化身份、原子会话续跑、不重复建任务;Git 测试覆盖脏目录起点、暂存区保留、过期预览拒绝、冲突时不部分应用。Native Protocol 覆盖父子任务归属与原生 MCP 工具卡片,Electron 仅覆盖原生输入框中的协作引用增强。Runtime 保持 Adapter `open()` 返回对象的同一身份,避免原生回调更新到浅拷贝而被活动回合闸门丢弃。
70
-
71
71
  ## 统一历史
72
72
 
73
73
  设置 → 会话导入 → 全部历史,支持按标题、目录和会话 ID 搜索、分页、导入并打开。Pi、Claude、Codex 从本机原生历史发现会话;其余 Harness 当前聚合 Host 已管理的历史,并在来源名称上标为「Host 历史」,尚未接入各自 CLI 的外部会话扫描。
@@ -86,4 +86,4 @@ npm run build:native
86
86
  npm run e2e:collaboration -- --lead=pi --worker=pi --cycle
87
87
  ```
88
88
 
89
- 桌面实测:Pi 主 Agent 切换、Agents/会话切页、Claude 提及精确插入(无重复 @)、图标标识、Antigravity 未支持主编排的提示和草稿清理通过。截图与报告在 `output/collaboration-ui/desktop-*.png` 和 `desktop-report.json`。专用子任务卡片的协议投影已验证;尚未完成真实桌面卡片点击跳转验收。
89
+ 桌面实测与隔离增强:Pi 主 Agent 切换、Agents/会话切页、Claude 提及精确插入(无重复 @)、图标标识和草稿清理通过。原生协作卡片已实装「↗ 查看 @agent 会话」跳转子任务 Thread、「🔍 查看产物 Diff」语法高亮展开与「✓ 合并改动到主项目」操作;Worktree 隔离环境已实装补丁冲突结构化指引、`discardWorkspace` 一键丢弃临时分支与 `pushWorkspace` 远程分支推送协议支持。截图与报告在 `output/collaboration-ui/desktop-*.png` 和 `desktop-report.json`。