@harness-mix/cli 0.1.4 → 0.1.6
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.
- package/CHANGELOG.md +8 -0
- package/README.md +26 -96
- package/docs/chatgpt-web-sidebar.md +7 -1
- package/docs/cross-platform.md +15 -0
- package/docs/harness-handoff-design.md +377 -0
- package/docs/harness-management.md +28 -1
- package/docs/multi-agent-collaboration.md +9 -9
- package/docs/native-codex.md +21 -10
- package/output/native-build/harness-mix-shim.exe +0 -0
- package/output/native-build/renderer-extension.js +2596 -135
- package/package.json +20 -10
- package/scripts/chatgpt-context-ui-smoke.cjs +16 -0
- package/scripts/codex-accounts-test.cjs +81 -0
- package/scripts/codex-accounts-ui-smoke.cjs +70 -0
- package/scripts/collaboration-test.cjs +8 -3
- package/scripts/collaboration-ui-smoke.cjs +40 -26
- package/scripts/e2e-integrations.cjs +52 -0
- package/scripts/e2e-native-host.cjs +39 -0
- package/scripts/handoff-checkpoint-test.cjs +83 -0
- package/scripts/install-native.cjs +4 -1
- package/scripts/integrations-test.cjs +123 -0
- package/scripts/integrations-ui-smoke.cjs +124 -0
- package/scripts/native-protocol-test.cjs +180 -5
- package/scripts/native-secret-test.cjs +2 -2
- package/scripts/native-shim-test.cjs +20 -4
- package/scripts/native-sidebar-test.cjs +7 -0
- package/scripts/native-skill-roots-test.cjs +90 -0
- package/scripts/native-ui-smoke.cjs +58 -2
- package/scripts/publish-native-package.cjs +8 -5
- package/scripts/support/integrations-mcp-fixture.cjs +15 -0
- package/scripts/switch-harness-test.cjs +27 -1
- package/scripts/test-live-mentions.cjs +152 -0
- package/src/main/adapters/acp.js +3 -3
- package/src/main/adapters/antigravity.js +17 -17
- package/src/main/adapters/claude.js +50 -10
- package/src/main/adapters/codebuddy.js +1 -0
- package/src/main/adapters/codex-app-server.js +20 -13
- package/src/main/adapters/codex.js +25 -5
- package/src/main/adapters/cursor.js +5 -1
- package/src/main/adapters/dsh.js +9 -1
- package/src/main/adapters/grok.js +7 -3
- package/src/main/adapters/hermes.js +8 -0
- package/src/main/adapters/kiro.js +2 -1
- package/src/main/adapters/managed-mcp.js +25 -0
- package/src/main/adapters/native-acp.js +4 -4
- package/src/main/adapters/omp.js +11 -0
- package/src/main/adapters/openclaw.js +6 -0
- package/src/main/adapters/opencode.js +13 -3
- package/src/main/adapters/pi.js +5 -0
- package/src/main/adapters/qoder.js +1 -0
- package/src/main/adapters/trae.js +4 -0
- package/src/main/adapters/zcode.js +3 -0
- package/src/main/harness-adapter/manifest.js +17 -2
- package/src/main/host/collaboration.js +57 -11
- package/src/main/host/handoff-access.js +53 -0
- package/src/main/host/handoff-checkpoints.js +206 -0
- package/src/main/host/handoff-mcp.cjs +38 -0
- package/src/main/host/handoff-tools.js +13 -0
- package/src/main/host/handoff.js +28 -6
- package/src/main/host/integrations.js +339 -0
- package/src/main/host/runtime.js +95 -15
- package/src/main/host/store.js +4 -4
- package/src/main/native/codex-accounts.js +260 -0
- package/src/main/native/host.js +1 -1
- package/src/main/native/launcher.js +2 -2
- package/src/main/native/protocol.js +176 -14
- package/src/main/native/redact.js +1 -1
- package/src/main/native/rs/crates/shim/src/main.rs +155 -12
- package/src/main/native/thread-list.js +3 -0
- package/src/native-ui/desktop-control/dist/tsconfig.tsbuildinfo +1 -1
- package/src/native-ui/renderer-extension/dist/types/harness-mix-settings.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/index.d.ts +4 -0
- package/src/native-ui/renderer-extension/dist/types/index.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-agent-picker.d.ts +2 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-agent-picker.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-binding-probe.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-chatgpt-context.d.ts +36 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-chatgpt-context.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-codex-account-state.d.ts +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-codex-account-state.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-composer-dom.d.ts +3 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-composer-dom.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-handoff.d.ts +53 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-handoff.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-mentions.d.ts +11 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-mentions.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-integrations-client.d.ts +105 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-integrations-client.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-model-client.d.ts +7 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-model-client.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-settings-lifecycle.d.ts +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-settings-lifecycle.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/accounts-list.d.ts +2 -0
- package/src/native-ui/renderer-extension/dist/types/settings/accounts-list.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/accounts-page.d.ts +1 -0
- package/src/native-ui/renderer-extension/dist/types/settings/accounts-page.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/integrations-page.d.ts +6 -0
- package/src/native-ui/renderer-extension/dist/types/settings/integrations-page.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/settings/localization.d.ts +5 -0
- package/src/native-ui/renderer-extension/dist/types/settings/localization.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/pages.d.ts +8 -4
- package/src/native-ui/renderer-extension/dist/types/settings/pages.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/tsconfig.tsbuildinfo +1 -1
- package/src/native-ui/renderer-extension/src/harness-mix-settings.ts +4 -1
- package/src/native-ui/renderer-extension/src/index.ts +28 -0
- package/src/native-ui/renderer-extension/src/renderer-agent-icon.ts +4 -4
- package/src/native-ui/renderer-extension/src/renderer-agent-picker.ts +46 -6
- package/src/native-ui/renderer-extension/src/renderer-binding-probe.ts +115 -18
- package/src/native-ui/renderer-extension/src/renderer-chatgpt-context.ts +87 -0
- package/src/native-ui/renderer-extension/src/renderer-codex-account-state.ts +10 -0
- package/src/native-ui/renderer-extension/src/renderer-composer-dom.ts +10 -0
- package/src/native-ui/renderer-extension/src/renderer-harness-handoff.ts +330 -0
- package/src/native-ui/renderer-extension/src/renderer-harness-mentions.ts +556 -123
- package/src/native-ui/renderer-extension/src/renderer-integrations-client.ts +59 -0
- package/src/native-ui/renderer-extension/src/renderer-model-client.ts +17 -1
- package/src/native-ui/renderer-extension/src/renderer-settings-lifecycle.ts +2 -0
- package/src/native-ui/renderer-extension/src/settings/accounts-list.ts +16 -1
- package/src/native-ui/renderer-extension/src/settings/accounts-page.ts +32 -3
- package/src/native-ui/renderer-extension/src/settings/integrations-page.ts +1474 -0
- package/src/native-ui/renderer-extension/src/settings/localization.ts +32 -13
- package/src/native-ui/renderer-extension/src/settings/pages.ts +49 -18
- package/src/native-ui/renderer-extension/src/settings/shell.css +103 -0
- package/src/native-ui/renderer-extension/test/renderer-agent-picker.test.ts +44 -13
- package/src/native-ui/renderer-extension/test/renderer-chatgpt-context.test.ts +21 -0
- package/src/native-ui/renderer-extension/test/renderer-codex-account-state.test.ts +13 -1
- package/src/native-ui/renderer-extension/test/renderer-harness-handoff.test.ts +20 -0
- package/src/native-ui/renderer-extension/test/renderer-model-client.test.ts +9 -2
- package/src/native-ui/renderer-extension/test/settings/localization.test.ts +1 -1
- package/src/native-ui/renderer-extension/test/settings/pages.test.ts +77 -8
- package/src/native-ui/renderer-extension/test/settings/shell.test.ts +6 -0
- package/src/native-ui/shared-contracts/dist/codex-accounts.d.ts +19 -4
- package/src/native-ui/shared-contracts/dist/codex-accounts.d.ts.map +1 -1
- package/src/native-ui/shared-contracts/dist/codex-accounts.js +2 -0
- package/src/native-ui/shared-contracts/dist/codex-accounts.js.map +1 -1
- package/src/native-ui/shared-contracts/dist/index.d.ts +2 -2
- package/src/native-ui/shared-contracts/dist/index.d.ts.map +1 -1
- package/src/native-ui/shared-contracts/dist/index.js +1 -1
- package/src/native-ui/shared-contracts/dist/index.js.map +1 -1
- package/src/native-ui/shared-contracts/dist/thread-harness-switch.d.ts +29 -0
- package/src/native-ui/shared-contracts/dist/thread-harness-switch.d.ts.map +1 -1
- package/src/native-ui/shared-contracts/dist/thread-harness-switch.js +13 -0
- package/src/native-ui/shared-contracts/dist/thread-harness-switch.js.map +1 -1
- package/src/native-ui/shared-contracts/dist/tsconfig.tsbuildinfo +1 -1
- package/src/native-ui/shared-contracts/src/codex-accounts.ts +2 -0
- package/src/native-ui/shared-contracts/src/index.ts +8 -1
- package/src/native-ui/shared-contracts/src/thread-harness-switch.ts +17 -0
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
## 用法
|
|
4
4
|
|
|
5
|
-
重新启动 Harness Mix 后,新建或恢复一个 Pi / Oh My Pi / Claude Code / **Codex(协作)** / Grok / OpenCode / **Antigravity**
|
|
5
|
+
重新启动 Harness Mix 后,新建或恢复一个 Pi / Oh My Pi / Claude Code / **Codex(协作)** / Grok / OpenCode / **Antigravity** 任务,在原生输入框中输入 `#`,在 **Agents** 页选择目标 Harness;**会话** 页单独提供历史引用。已选 Agent 以内联标签显示在输入框顶部,可点击或在光标位于正文开头时按 Backspace 移除。左右键切换分页,上下键选择,Enter/Tab 插入,Escape 关闭。`@` 保留给 Codex 原生功能,不会调出 Harness Mix 协作选择器。Codex(协作)通过 Host Adapter 使用原生 app-server;原来的 Codex 入口仍为官方直通。可用目标来自 Host 注册的 Adapter;未就绪的目标不可选。示例:
|
|
6
6
|
|
|
7
7
|
```text
|
|
8
8
|
你负责实现后端。
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
#claude-code 审查 API 设计,只读,不修改文件。
|
|
10
|
+
#pi 为 tests/ 编写测试,不修改 src/。
|
|
11
11
|
收齐结果后由你运行验证并总结。
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
-
也可直接输入
|
|
14
|
+
也可直接输入 `#pi`、`#claude`、`#dsh`、`#codex` 等已注册 ID/别名。显式 `[名称](harness-mix://agent/pi)` 引用可随草稿复制;代码块和行内代码中的 `#` 不作为路由元数据。选择本身由主模型结合用户任务理解,Host 不按文字片段盲目拆任务。
|
|
15
15
|
|
|
16
16
|
## 执行方式
|
|
17
17
|
|
|
@@ -44,12 +44,12 @@
|
|
|
44
44
|
| Pi 主任务 | 原生扩展工具;Pi→Pi、Pi→Claude 两条真实模型链路通过 |
|
|
45
45
|
| Claude Code 主任务 | SDK MCP 注入;本机真实运行触发原生工具审批,未代答,尚未完成模型闭环验收 |
|
|
46
46
|
| Oh My Pi 主任务 | 同 Pi 家族的扩展接线;本机未安装 OMP,真实验收未完成 |
|
|
47
|
-
| Codex(协作)主任务 |
|
|
47
|
+
| Codex(协作)主任务 | 已接入选择器、模型/强度、恢复归属、# 菜单;桌面使用配套 CLI。真实请求已到原生 MCP 审批,尚未完成需授权的闭环 |
|
|
48
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
51
|
| Antigravity 主任务 | 支持主编排(通过 `.agents/plugins/harness-mix` MCP 自动挂载及指导词注入);已接入协同工具与卡片投影 |
|
|
52
|
-
| 官方 Codex 桌面直通任务 | 保持官方直通,不展示 Host 的
|
|
52
|
+
| 官方 Codex 桌面直通任务 | 保持官方直通,不展示 Host 的 # 协作菜单;不要把 Adapter 接线等同于已支持这个入口 |
|
|
53
53
|
| 其他 Harness 主任务 | Agents 页明确提示需要切换可编排的主 Agent,目标不可选;历史引用仍可用;可使用旧 /delegate |
|
|
54
54
|
| 子任务目标 | 所有已注册且本机可用的 Adapter;不代表每一对组合都已实测 |
|
|
55
55
|
|
|
@@ -72,11 +72,11 @@ npm run build:native
|
|
|
72
72
|
|
|
73
73
|
设置 → 会话导入 → 全部历史,支持按标题、目录和会话 ID 搜索、分页、导入并打开。Pi、Claude、Codex 从本机原生历史发现会话;其余 Harness 当前聚合 Host 已管理的历史,并在来源名称上标为「Host 历史」,尚未接入各自 CLI 的外部会话扫描。
|
|
74
74
|
|
|
75
|
-
导入只创建投影和原生会话引用,不启动模型;再次发送时原生恢复。重复导入返回同一任务。输入
|
|
75
|
+
导入只创建投影和原生会话引用,不启动模型;再次发送时原生恢复。重复导入返回同一任务。输入 `#` 可从「会话」页选择一条记录;Host 最多读取三条引用,每条只附加最近十二条用户/助手文本,并明确标记为不可执行的历史数据。引用不会创建、恢复或占用原生会话。原始完整工具、隐藏状态和分支数据仍留在原生存储,因此这不是原生历史的无损迁移。原生运行状态未知时,应先关闭其他客户端的同一会话。
|
|
76
76
|
|
|
77
77
|
## 2026-09-11 Codeg 协作流程修复
|
|
78
78
|
|
|
79
|
-
- Agents
|
|
79
|
+
- Agents 与历史会话分栏,使用 `#` 调出协作菜单,`@` 保留给原生功能;提示不可用主 Agent 的能力边界。
|
|
80
80
|
- 默认共享目录,使开发与审查读取同一份实际文件;保留显式隔离工作区。多任务等待在任一结果可收取时返回。
|
|
81
81
|
- 新增可更新的原生计划,子任务卡片投影真实会话 ID 与 Harness 名称,跟进复用原会话。
|
|
82
82
|
- 实测 Pi 主任务 + 两个独立 Pi 原生子会话:开发者写入错误样本 41 → 审查者 REVIEW_FAIL → message_agent 交回原开发者修为 42 → 原审查者 REVIEW_PASS → 主模型完成计划并汇总。测试验证文件实际导出值以及两个会话均收到跟进。日志:`output/collaboration-cycle.log`。
|
|
@@ -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
|
|
89
|
+
桌面实测与隔离增强:Pi 主 Agent 切换、Agents/会话切页、Claude 选择精确插入、图标标识和草稿清理通过。原生协作卡片已实装「↗ 查看 Agent 会话」跳转子任务 Thread、「🔍 查看产物 Diff」语法高亮展开与「✓ 合并改动到主项目」操作;Worktree 隔离环境已实装补丁冲突结构化指引、`discardWorkspace` 一键丢弃临时分支与 `pushWorkspace` 远程分支推送协议支持。截图与报告在 `output/collaboration-ui/desktop-*.png` 和 `desktop-report.json`。
|
package/docs/native-codex.md
CHANGED
|
@@ -5,22 +5,31 @@
|
|
|
5
5
|
## 调用链
|
|
6
6
|
|
|
7
7
|
```text
|
|
8
|
-
Codex
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
→ Codex app-server 事件投影 (src/main/native/protocol.js)
|
|
14
|
-
→ Codex Desktop 原生流式文本、工具、审批和 Diff 组件
|
|
8
|
+
官方 Codex:
|
|
9
|
+
Codex Desktop → Harness Mix Shim/Host 多路复用器 → 官方 Codex app-server
|
|
10
|
+
|
|
11
|
+
其他 Harness 与显式的 Codex 协作 Worker:
|
|
12
|
+
Codex Desktop → Harness Mix Shim/Host → HostRuntime/ProtocolCore → 原生 Harness
|
|
15
13
|
```
|
|
16
14
|
|
|
15
|
+
选择器中的 `Codex(官方原生)` 使用第一条路径。它的 `thread/start`、`thread/resume`、`turn/start`、`turn/interrupt`、Fork、压缩、工具、审批、模型和 Usage 请求不进入 HostRuntime,由官方 app-server 处理。Host 只负责把同一连接上的官方消息转发给 Desktop,并在 `thread/list` 首页加入其他 Harness 的任务。
|
|
16
|
+
|
|
17
|
+
`Codex(Harness Mix 协作)` 是显式的受管 Worker 路由,用于跨 Harness 委派;它通过 Codex Adapter 进入 HostRuntime。两个入口名称和线程所有权分开,避免把协作 Worker 误认为官方 Codex 主路径。
|
|
18
|
+
|
|
19
|
+
## Codex 多账号
|
|
20
|
+
|
|
21
|
+
「设置 → 账号」保留官方 Codex Desktop 账号,并允许添加最多 127 个附加账号。每个附加账号使用 `%APPDATA%\harness-mix\codexhost\codex-accounts\profiles\<account-id>` 作为独立 `CODEX_HOME`;设备码登录、`auth.json`、令牌刷新、额度与原生会话均由该目录对应的 Codex app-server 所有。Harness Mix 的 `accounts.json` 只记录账号档案 ID、显示名、创建时间和默认选择,不读取或复制认证内容。
|
|
22
|
+
|
|
23
|
+
账号页会从每个账号的原生 `account/read` 与 `account/rateLimits/read` 读取套餐、5 小时/7 天已用或剩余额度及刷新时间。编辑器 Agent 菜单可直接选择账号;官方账号仍走官方直通路径,附加账号的新任务进入同一套 Desktop Thread/Turn/工具/审批/Diff 界面并固定到所选账号。更改默认账号不会迁移或中断已运行任务。
|
|
24
|
+
|
|
17
25
|
外部 Thread 支持「调整方向」:会话运行中发送新消息会取消当前 Turn、等待其完全终结(含文件快照结算),再将新输入作为独立新 Turn 启动;超时、目标过期或并发冲突一律失败,绝不自动启动非预期 Turn。
|
|
18
26
|
|
|
19
|
-
|
|
27
|
+
Harness Mix 的多 Harness 部分是本项目自研自建架构:
|
|
20
28
|
- **无上游 npm 依赖**:Launcher、Shim、Host Runtime 与 Renderer 扩展源码均维护在本项目(`src/main/native` 与 `src/native-ui`),不依赖任何上游 npm 包。
|
|
21
|
-
-
|
|
29
|
+
- **官方 Codex 保持官方所有权**:账号、凭据、会话、模型调用、工具、审批和权限由官方 app-server 管理;Harness Mix 不把官方 Codex Thread 导入自己的 HostRuntime。
|
|
30
|
+
- **外部 Harness 由本地内核管理**:`HostRuntime`、`ProtocolCore` 与原生适配器管理外部 Harness 的会话映射、事件投影和协作。
|
|
22
31
|
- **图标与资源自主集成**:Harness 品牌图标及各厂商模型图标直接从 `src/assets/icons` 提取并在本地编译时嵌入 Renderer 扩展。
|
|
23
|
-
-
|
|
32
|
+
- **同一套 UI**:两条执行路径都复用 Codex Desktop 的会话、工具、审批和 Diff 组件。
|
|
24
33
|
|
|
25
34
|
## 启动与配置
|
|
26
35
|
|
|
@@ -53,6 +62,8 @@ npm start
|
|
|
53
62
|
|
|
54
63
|
`harness-mix-shim.exe`、`harness-mix-appx.exe` 与 `harness-mix-secret.exe` 由 `src/main/native/rs` 下的 Rust workspace 构建(`npm run build:native`),零外部 crate 依赖:Shim 仅用 std 并给自身挂 kill-on-close Job Object,AppX 手写 COM 声明,Secret 手写 DPAPI/kernel32 声明;任意干净的 Rust 工具链即可构建。Shim 产物经 e2e:native 全链路验证,Job Object 级联清理由 `npm run test:native-job-object` 验证。
|
|
55
64
|
|
|
65
|
+
Shim 只接管作为 Desktop 协议端点的普通 `app-server`。`app-server proxy`、`app-server daemon`、普通 Codex 命令、参数值中的同名文本以及未知的新命令形态都直接交给官方 CLI;未知语法默认保持 Codex 可用,不猜测为 Harness Mix 路由。
|
|
66
|
+
|
|
56
67
|
## 进程监管
|
|
57
68
|
|
|
58
69
|
- Shim 启动即把自身加入 Job Object(`KILL_ON_JOB_CLOSE`):node 宿主、官方 app-server、各家 CLI 与 pwsh 终端全部随 shim 级联清理,强杀或崩溃也不例外。
|
|
Binary file
|