@harness-mix/cli 0.1.5 → 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/README.md +1 -1
- package/docs/harness-management.md +4 -4
- package/docs/multi-agent-collaboration.md +9 -9
- package/output/native-build/renderer-extension.js +1959 -435
- package/package.json +9 -8
- package/scripts/collaboration-test.cjs +8 -3
- package/scripts/collaboration-ui-smoke.cjs +40 -26
- package/scripts/integrations-test.cjs +63 -4
- package/scripts/integrations-ui-smoke.cjs +77 -16
- package/scripts/native-protocol-test.cjs +102 -1
- package/scripts/native-sidebar-test.cjs +7 -0
- package/scripts/native-skill-roots-test.cjs +90 -0
- package/scripts/test-live-mentions.cjs +152 -0
- package/src/main/adapters/antigravity.js +20 -17
- package/src/main/adapters/claude.js +41 -8
- package/src/main/adapters/codebuddy.js +1 -0
- package/src/main/adapters/codex.js +20 -2
- package/src/main/adapters/cursor.js +5 -1
- package/src/main/adapters/dsh.js +8 -1
- package/src/main/adapters/grok.js +4 -1
- package/src/main/adapters/hermes.js +8 -0
- package/src/main/adapters/kiro.js +2 -1
- package/src/main/adapters/managed-mcp.js +15 -2
- package/src/main/adapters/omp.js +11 -0
- package/src/main/adapters/openclaw.js +6 -0
- package/src/main/adapters/opencode.js +5 -1
- package/src/main/adapters/pi.js +5 -1
- 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/host/collaboration.js +57 -11
- package/src/main/host/integrations.js +164 -26
- package/src/main/host/runtime.js +126 -86
- package/src/main/native/protocol.js +189 -78
- package/src/main/native/thread-list.js +3 -0
- package/src/native-ui/renderer-extension/dist/types/harness-mix-settings.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.map +1 -1
- 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 +29 -4
- package/src/native-ui/renderer-extension/dist/types/renderer-integrations-client.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/integrations-page.d.ts +2 -1
- package/src/native-ui/renderer-extension/dist/types/settings/integrations-page.d.ts.map +1 -1
- 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 +1 -1
- 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 +3 -2
- package/src/native-ui/renderer-extension/src/renderer-binding-probe.ts +149 -171
- package/src/native-ui/renderer-extension/src/renderer-chatgpt-context.ts +5 -1
- package/src/native-ui/renderer-extension/src/renderer-harness-mentions.ts +556 -123
- package/src/native-ui/renderer-extension/src/renderer-integrations-client.ts +36 -3
- package/src/native-ui/renderer-extension/src/settings/integrations-page.ts +1434 -62
- package/src/native-ui/renderer-extension/src/settings/localization.ts +4 -2
- package/src/native-ui/renderer-extension/src/settings/pages.ts +5 -3
- package/src/native-ui/renderer-extension/src/settings/shell.css +96 -6
- package/src/native-ui/renderer-extension/test/renderer-chatgpt-context.test.ts +4 -1
- package/src/native-ui/renderer-extension/test/settings/localization.test.ts +1 -1
- package/src/native-ui/renderer-extension/test/settings/shell.test.ts +5 -2
package/README.md
CHANGED
|
@@ -72,7 +72,7 @@ Harness Mix 是接入官方 Codex Desktop 原生界面的本地内核。它通
|
|
|
72
72
|
- 原生 Diff、审批与提问组件直接渲染,审批路由回原生 Harness,不代替用户作出权限决定。
|
|
73
73
|
- CodeBuddy、Kiro 和 Cursor 使用原生 ACP 加厂商专用接口:提问、计划确认、配置确认、取消恢复、上下文与历史按各自协议处理。功能和验证范围见下表,不将通用 ACP 能力视为所有 CLI 都已支持。
|
|
74
74
|
- 通过 Adapter 注册新 Harness,UI 侧无需理解厂商协议。
|
|
75
|
-
-
|
|
75
|
+
- 原生设置中的「MCP」和「Skills」是独立页面:MCP 使用服务器列表与详情编辑流程,Skills 支持把 Markdown 文件或完整技能文件夹直接拖入安装;配置在下一次原生会话打开时生效,凭据和审批继续由原生 Harness 管理。
|
|
76
76
|
|
|
77
77
|
<p align="center">
|
|
78
78
|
<img src="docs/images/codex-desktop-session.png" width="960" alt="Codex Desktop 原生会话中的 Harness Mix">
|
|
@@ -43,15 +43,15 @@ Pi / DSH 显示「已配置」而非「已登录」,目录存在不能证明
|
|
|
43
43
|
|
|
44
44
|
官方 Codex 任务由官方 app-server 直接拥有,不经过 HostRuntime,因此不会显示接力入口;需要使用 Harness Mix 管理的 `Codex(协作)` 才能参与这种跨 Harness 接力。`/switch <Harness 名> [备注]` 继续作为键盘快捷入口。
|
|
45
45
|
|
|
46
|
-
## MCP
|
|
46
|
+
## MCP 与 Skills
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
设置页把「MCP」和「Skills」拆成两个独立入口,均可按 Harness 和作用域管理。全局配置适用于该 Harness 的全部项目;项目配置按服务名覆盖全局配置。MCP 使用接近 Codex 的服务器列表与详情编辑流程,支持搜索、逐项添加参数、启停和删除。MCP 只保存 stdio 可执行文件与参数,禁止保存令牌、密码和环境变量。账号与凭据继续由原生 Harness 环境管理。
|
|
49
49
|
|
|
50
50
|
Harness Mix 不改写各 Harness 已有的 MCP 配置文件。启用的托管配置在新建、恢复、Fork 或回退后的下一次原生会话打开时,通过各 Harness 的原生会话配置接口传入。正在运行的会话不会热改配置。Claude Code 与 OpenCode 可返回原生连接状态和工具名称;其他已接入 Harness 会区分「已配置」「已传入会话」和「连接状态未报告」,不会把保存成功当成已连接。
|
|
51
51
|
|
|
52
|
-
Skills
|
|
52
|
+
Skills 从每个 Harness 已声明的原生目录发现:全部 16 个 Harness 都登记了全局/项目根目录,所以设置页不再出现「暂未配置原生技能目录」。根目录来自各 Harness 官方文档与已安装程序自身的扫描代码,例如 Codex 的 `~/.agents/skills` 与兼容保留的 `$CODEX_HOME/skills`、Kiro 专用的 `.kiro/skills`、Trae IDE 的 `.trae/skills` 与 TraeCode CLI 的 `.traecli/skills`、Hermes 的 `~/.hermes/skills`。打开原生会话时会先创建缺失的根目录,已安装但从未运行过的 Harness 也能立即发现技能;某个目录创建失败只会提示并跳过,不会阻止会话打开。可以把单个 Markdown 文件直接拖入并作为 `SKILL.md` 安装,也可以拖入或选择根目录含 `SKILL.md` 的完整技能文件夹。拖入内容经过同一套限制:拒绝路径逃逸、同名覆盖、超过 10 MB 或 500 个文件的技能。原有本机绝对目录安装协议仍兼容。停用会把整个技能目录移动到相邻的 Harness Mix 保留目录,恢复时原样移回;不删除技能内容。共享 `.agents/skills` 的修改会影响读取同一目录的 Harness。
|
|
53
53
|
|
|
54
|
-
当前 MCP 会话注入支持 Claude Code、Codex(协作入口)、OpenCode、Grok、Antigravity,以及使用通用 ACP 接入的 CodeBuddy、Kiro、Cursor、Qoder 和 Hermes。DSH 配置托管 MCP 后会使用其官方 ACP profile 打开该会话;未配置时仍走 Web Remote。Pi/OMP 的 MCP 扩展机制不是通用原生 MCP
|
|
54
|
+
当前 MCP 会话注入支持 Claude Code、Codex(协作入口)、OpenCode、Grok、Antigravity,以及使用通用 ACP 接入的 CodeBuddy、Kiro、Cursor、Qoder 和 Hermes。DSH 配置托管 MCP 后会使用其官方 ACP profile 打开该会话;未配置时仍走 Web Remote。Pi/OMP 的 MCP 扩展机制不是通用原生 MCP 声明,当前只保留已有协作工具注入;设置页会明确显示不支持。每个 Harness 都登记了原生技能根目录,只有链接到其他位置的目录(junction/symlink)保持只读。
|
|
55
55
|
|
|
56
56
|
## 验证
|
|
57
57
|
|
|
@@ -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`。
|