@harness-mix/cli 0.2.3 → 0.3.0

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 (72) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +469 -467
  3. package/docs/harness-management.md +1 -1
  4. package/docs/multi-agent-collaboration.md +3 -1
  5. package/docs/native-acp.md +138 -127
  6. package/output/native-build/desktop-controller.mjs +1 -1
  7. package/output/native-build/renderer-extension.js +172 -23
  8. package/package.json +13 -9
  9. package/scripts/acp-image-test.cjs +69 -0
  10. package/scripts/adapters-test.cjs +25 -0
  11. package/scripts/antigravity-adapter-test.cjs +647 -626
  12. package/scripts/codex-accounts-test.cjs +34 -0
  13. package/scripts/codex-adapter-test.cjs +238 -127
  14. package/scripts/collaboration-test.cjs +577 -262
  15. package/scripts/collaboration-ui-smoke.cjs +25 -3
  16. package/scripts/e2e-delegate.cjs +1 -1
  17. package/scripts/e2e-hermes-image.cjs +60 -0
  18. package/scripts/jsonl-stdin-test.cjs +40 -31
  19. package/scripts/kiro-cursor-adapters-test.cjs +124 -100
  20. package/scripts/native-acp-depth-test.cjs +30 -5
  21. package/scripts/native-update-apply-test.cjs +269 -215
  22. package/scripts/native-update.cjs +78 -0
  23. package/scripts/native-vendor-adapters-test.cjs +196 -154
  24. package/scripts/openclaw-adapter-test.cjs +121 -3
  25. package/scripts/openclaw-mcp-probe.cjs +100 -0
  26. package/scripts/openclaw-mcp-tool-probe.cjs +55 -0
  27. package/scripts/openclaw-thinking-probe.cjs +73 -0
  28. package/scripts/salvage-rollout-writes.cjs +72 -0
  29. package/scripts/storage-verification-test.cjs +11 -0
  30. package/scripts/zcode-adapter-test.cjs +329 -0
  31. package/scripts/zcode-live-probe.cjs +66 -0
  32. package/src/main/adapters/antigravity.js +1428 -1418
  33. package/src/main/adapters/claude.js +15 -7
  34. package/src/main/adapters/codex-app-server.js +29 -11
  35. package/src/main/adapters/codex.js +690 -649
  36. package/src/main/adapters/native-acp-command.js +51 -48
  37. package/src/main/adapters/native-acp.js +47 -12
  38. package/src/main/adapters/omp.js +7 -2
  39. package/src/main/adapters/openclaw.js +534 -343
  40. package/src/main/adapters/pi-family.js +35 -8
  41. package/src/main/adapters/qoder.js +12 -8
  42. package/src/main/adapters/zcode.js +925 -10
  43. package/src/main/host/collaboration-tools.js +1 -1
  44. package/src/main/host/collaboration.js +971 -714
  45. package/src/main/host/jsonl.js +130 -120
  46. package/src/main/host/runtime.js +9 -3
  47. package/src/main/host/verification-gates.js +14 -2
  48. package/src/main/native/codex-accounts.js +15 -4
  49. package/src/main/native/config.js +9 -9
  50. package/src/main/native/launcher.js +252 -237
  51. package/src/main/native/process-utils.js +157 -57
  52. package/src/main/native/protocol.js +1227 -1187
  53. package/src/main/native/update-state.js +123 -110
  54. package/src/main/native/updater.js +460 -394
  55. package/src/native-ui/desktop-control/dist/renderer-cdp-control-session.js +3 -1
  56. package/src/native-ui/desktop-control/dist/renderer-cdp-control-session.js.map +1 -1
  57. package/src/native-ui/desktop-control/dist/tsconfig.tsbuildinfo +1 -1
  58. package/src/native-ui/desktop-control/src/renderer-cdp-control-session.ts +358 -358
  59. package/src/native-ui/renderer-extension/dist/types/renderer-binding-probe.d.ts.map +1 -1
  60. package/src/native-ui/renderer-extension/dist/types/renderer-collab-cards.d.ts +1 -0
  61. package/src/native-ui/renderer-extension/dist/types/renderer-collab-cards.d.ts.map +1 -1
  62. package/src/native-ui/renderer-extension/dist/types/renderer-model-client.d.ts +29 -0
  63. package/src/native-ui/renderer-extension/dist/types/renderer-model-client.d.ts.map +1 -1
  64. package/src/native-ui/renderer-extension/dist/types/renderer-team-cards.d.ts +4 -0
  65. package/src/native-ui/renderer-extension/dist/types/renderer-team-cards.d.ts.map +1 -1
  66. package/src/native-ui/renderer-extension/dist/types/tsconfig.tsbuildinfo +1 -1
  67. package/src/native-ui/renderer-extension/src/renderer-binding-probe.ts +3224 -3181
  68. package/src/native-ui/renderer-extension/src/renderer-collab-cards.ts +25 -0
  69. package/src/native-ui/renderer-extension/src/renderer-model-client.ts +27 -0
  70. package/src/native-ui/renderer-extension/src/renderer-team-cards.ts +93 -13
  71. package/src/native-ui/renderer-extension/src/settings/connections-page.ts +2 -2
  72. package/src/native-ui/renderer-extension/test/renderer-model-client.test.ts +47 -1
@@ -52,19 +52,45 @@ function emitAll(emitEvent, mapped) {
52
52
  for (const item of Array.isArray(mapped) ? mapped : [mapped]) if (item) emitEvent(item);
53
53
  }
54
54
 
55
- /** Pi 家族(Pi / Oh My Pi)的权限模型 = 项目信任(project trust):启动时用 --approve / --no-approve 覆盖一次 */
55
+ /** Pi 家族工厂的权限模型按家族成员原生面注入;两者的启动旗标不同,不得共用目录。
56
+ * Pi(pi-coding-agent)的权限模型 = 项目信任(project trust):启动时用 --approve / --no-approve 覆盖一次。
57
+ * 实测校准(本机 pi 0.84.2 `pi --help`):--approve/-a「Trust project-local files for this run」、
58
+ * --no-approve/-na「Ignore project-local files for this run」;default 即不传旗标(走 defaultProjectTrust 全局设置)。 */
56
59
  const PI_PERMISSION_MODES = [
57
60
  { id: "default", label: "默认", description: "按全局设置处理项目级设置与扩展(defaultProjectTrust)" },
58
61
  { id: "approve", label: "信任项目", description: "本次信任该项目的设置与扩展(--approve)" },
59
62
  { id: "no-approve", label: "忽略项目资源", description: "本次不加载项目级设置与扩展(--no-approve)" },
60
63
  ];
61
64
 
65
+ /** OMP(Pi 的 fork)权限模型已与 Pi 分叉:启动旗标为 --approval-mode always-ask|write|yolo
66
+ * (覆盖 tools.approvalMode,仅本次运行不持久化;--auto-approve/--yolo 是 yolo 捷径),
67
+ * 无 --approve/--no-approve。实测本机 @oh-my-pi/pi-coding-agent 18.1.19:
68
+ * src/cli/flag-tables.ts(--approval-mode 合法值)、src/cli/args.ts(--auto-approve/--yolo 解析)、
69
+ * src/config/settings-schema.ts(三档语义,描述为上游原文的中文转写)。 */
70
+ const OMP_APPROVAL_MODES = [
71
+ { id: "always-ask", label: "Always ask", description: "自动放行只读工具;写入与执行类工具需确认。" },
72
+ { id: "write", label: "Write", description: "自动放行只读与写入工具;执行类工具(bash、浏览器、任务等)需确认。" },
73
+ { id: "yolo", label: "Yolo", description: "自动放行全部层级工具;用户策略仍可要求确认或拦截。", dangerous: true },
74
+ ];
75
+
76
+ /** Pi 的权限模式 → 启动旗标(default 不传旗标) */
77
+ function piPermissionLaunchArgs(mode) {
78
+ if (mode === "approve") return ["--approve"];
79
+ if (mode === "no-approve") return ["--no-approve"];
80
+ return [];
81
+ }
82
+
83
+ /** OMP 的权限模式 → 启动旗标(--approval-mode 逐值下发,不持久化) */
84
+ function ompPermissionLaunchArgs(mode) {
85
+ return OMP_APPROVAL_MODES.some((entry) => entry.id === mode) ? ["--approval-mode", mode] : [];
86
+ }
87
+
62
88
  /**
63
89
  * Pi 家族 Adapter 工厂:Pi 与 Oh My Pi(OMP,Pi 的 fork)共用 --mode rpc 协议。
64
90
  * 会话/模型/工具/权限都由原生程序维护,这里只做事件投影。
65
91
  * @param {{ id: string, name: string, icon: string, bin: string, packageHint: string, aliases?: string[] }} options
66
92
  */
67
- function piFamily({ id, name, icon, bin, packageHint, aliases }) {
93
+ function piFamily({ id, name, icon, bin, packageHint, aliases, permissionModes = PI_PERMISSION_MODES, permissionLaunchArgs = piPermissionLaunchArgs }) {
68
94
  const manifest = {
69
95
  id,
70
96
  name,
@@ -117,8 +143,8 @@ function piFamily({ id, name, icon, bin, packageHint, aliases }) {
117
143
  const args = thread.restore && thread.nativeSessionFile
118
144
  ? ['--session', thread.nativeSessionFile]
119
145
  : ["--session-id", thread.nativeSessionId, "--name", sanitizeName(thread.title)];
120
- if (thread.options?.permissionMode === "approve") args.push("--approve");
121
- if (thread.options?.permissionMode === "no-approve") args.push("--no-approve");
146
+ // 权限模式只在该原生 CLI 真正支持的旗标集内映射(Pi 项目信任 vs OMP --approval-mode)
147
+ args.push(...permissionLaunchArgs(thread.options?.permissionMode));
122
148
  const process = spawnProcess(args, thread.cwd, {
123
149
  onEvent: event => forwardEvent(process, event, emitEvent),
124
150
  onDiagnostic: (message) => diagnostic(message),
@@ -239,7 +265,7 @@ function piFamily({ id, name, icon, bin, packageHint, aliases }) {
239
265
  return {
240
266
  models: (modelsData?.models ?? []).map((m) => ({ id: m.id, name: m.name || m.id, provider: m.provider, contextWindow: m.contextWindow })),
241
267
  thinkingLevels: (levelsData?.levels ?? []).map((l) => ({ id: l, label: l })),
242
- permissionModes: PI_PERMISSION_MODES,
268
+ permissionModes,
243
269
  };
244
270
  } finally {
245
271
  process.stop();
@@ -251,7 +277,7 @@ function piFamily({ id, name, icon, bin, packageHint, aliases }) {
251
277
  this.listModelsFor(session),
252
278
  session.process.command({ type: 'get_available_thinking_levels' }),
253
279
  ]);
254
- return { models, thinkingLevels: (levels?.levels ?? []).map(id => ({ id, label: id })), permissionModes: PI_PERMISSION_MODES };
280
+ return { models, thinkingLevels: (levels?.levels ?? []).map(id => ({ id, label: id })), permissionModes };
255
281
  },
256
282
 
257
283
  /** 任务级 Fork:另起进程,用 CLI --fork 从源会话分叉出全新原生会话 */
@@ -369,7 +395,8 @@ function piFamily({ id, name, icon, bin, packageHint, aliases }) {
369
395
  }
370
396
 
371
397
  // forwardEvent 暴露给回放/单测(runtime 经由 create().open() 闭包使用同一份实现)
372
- return { manifest, create, project, forwardEvent };
398
+ // permissionModes 暴露注入的本成员权限目录(测试/契约侧可校验,不必拉起原生进程)
399
+ return { manifest, create, project, forwardEvent, permissionModes };
373
400
  }
374
401
 
375
- module.exports = { piFamily, PI_PERMISSION_MODES };
402
+ module.exports = { piFamily, PI_PERMISSION_MODES, OMP_APPROVAL_MODES, piPermissionLaunchArgs, ompPermissionLaunchArgs };
@@ -1,8 +1,12 @@
1
- const { nativeAcp } = require('./native-acp');
2
-
3
- // Official CLI ACP; native account and tools remain in Qoder.
4
- module.exports = nativeAcp({
5
- id: 'qoder', name: 'Qoder', args: ['--acp'],
6
- capabilities: { questions: false, thinkingLevels: false, usage: true, contextUsage: true, attachments: true, fork: false, compaction: false },
7
- });
8
- module.exports.manifest.integrations.skills = { global: ['.qoder/skills'], project: ['.qoder/skills'] };
1
+ const { nativeAcp } = require('./native-acp');
2
+
3
+ // Official CLI ACP; native account and tools remain in Qoder.
4
+ // Capabilities measured against qodercli 1.1.58: the effort selector is the
5
+ // `reasoning_effort` config option (xhigh/low/medium/none); session/fork takes
6
+ // the standard Zed params; usage_update exists only as an input schema, the CLI
7
+ // never emits it, so usage displays would be fabricated.
8
+ module.exports = nativeAcp({
9
+ id: 'qoder', name: 'Qoder', args: ['--acp'],
10
+ capabilities: { questions: false, thinkingLevels: true, usage: false, contextUsage: false, attachments: true, fork: true, compaction: false },
11
+ });
12
+ module.exports.manifest.integrations.skills = { global: ['.qoder/skills'], project: ['.qoder/skills'] };