cool-workflow 0.1.98 → 0.2.1

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 (315) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/README.md +18 -7
  4. package/apps/architecture-review/app.json +2 -2
  5. package/apps/architecture-review/workflow.js +12 -12
  6. package/apps/architecture-review-fast/app.json +1 -1
  7. package/apps/end-to-end-golden-path/app.json +1 -1
  8. package/apps/pr-review-fix-ci/app.json +1 -1
  9. package/apps/release-cut/app.json +1 -1
  10. package/apps/research-synthesis/app.json +1 -1
  11. package/dist/cli/dispatch.js +236 -0
  12. package/dist/cli/entry.js +120 -0
  13. package/dist/cli/io.js +21 -4
  14. package/dist/cli/parseargv.js +157 -0
  15. package/dist/cli.js +6 -33
  16. package/dist/core/capability-table.js +3518 -0
  17. package/dist/core/format/help.js +314 -0
  18. package/dist/{state-explosion/format.js → core/format/state-explosion-text.js} +10 -1
  19. package/dist/core/hash.js +137 -0
  20. package/dist/core/multi-agent/candidate-scoring.js +219 -0
  21. package/dist/core/multi-agent/collaboration.js +481 -0
  22. package/dist/core/multi-agent/coordinator.js +515 -0
  23. package/dist/core/multi-agent/eval-replay.js +306 -0
  24. package/dist/core/multi-agent/runtime.js +929 -0
  25. package/dist/core/multi-agent/topology.js +298 -0
  26. package/dist/core/multi-agent/trust-policy.js +197 -0
  27. package/dist/core/pipeline/commit-gate.js +320 -0
  28. package/dist/{pipeline-contract.js → core/pipeline/contract.js} +24 -37
  29. package/dist/core/pipeline/dispatch.js +103 -0
  30. package/dist/core/pipeline/drive-decide.js +227 -0
  31. package/dist/core/pipeline/error-feedback.js +161 -0
  32. package/dist/core/pipeline/loop-expansion.js +124 -0
  33. package/dist/{result-normalize.js → core/pipeline/result-normalize.js} +14 -37
  34. package/dist/core/pipeline/runner.js +230 -0
  35. package/dist/{contract-migration.js → core/state/contract-migration.js} +68 -92
  36. package/dist/{state-migrations.js → core/state/migrations.js} +103 -96
  37. package/dist/core/state/node-projection.js +95 -0
  38. package/dist/core/state/node-snapshot.js +230 -0
  39. package/dist/core/state/run-paths.js +93 -0
  40. package/dist/{schema-validate.js → core/state/schema-validate.js} +35 -28
  41. package/dist/core/state/schema.js +50 -0
  42. package/dist/core/state/state-explosion/digest.js +243 -0
  43. package/dist/core/state/state-explosion/graph.js +527 -0
  44. package/dist/{state-explosion → core/state/state-explosion}/helpers.js +34 -3
  45. package/dist/core/state/state-explosion/report.js +187 -0
  46. package/dist/{state-explosion → core/state/state-explosion}/size.js +25 -7
  47. package/dist/{state-node.js → core/state/state-node.js} +90 -113
  48. package/dist/core/state/types.js +19 -0
  49. package/dist/{validation.js → core/state/validation.js} +64 -131
  50. package/dist/core/trust/evidence-grounding.js +134 -0
  51. package/dist/core/trust/ledger.js +199 -0
  52. package/dist/{telemetry-attestation.js → core/trust/telemetry-attestation.js} +94 -68
  53. package/dist/core/trust/telemetry-ledger.js +127 -0
  54. package/dist/core/types.js +20 -0
  55. package/dist/core/version.js +16 -0
  56. package/dist/{workflow-app-framework.js → core/workflow-apps/app-schema.js} +337 -426
  57. package/dist/mcp/dispatch.js +104 -0
  58. package/dist/mcp/server.js +144 -0
  59. package/dist/mcp-server.js +6 -84
  60. package/dist/{agent-config.js → shell/agent-config.js} +118 -71
  61. package/dist/shell/app-run-cli.js +88 -0
  62. package/dist/shell/audit-cli.js +259 -0
  63. package/dist/shell/audit-provenance.js +83 -0
  64. package/dist/shell/candidate-scoring-io.js +459 -0
  65. package/dist/shell/collaboration-io.js +264 -0
  66. package/dist/shell/commit-summary.js +104 -0
  67. package/dist/shell/commit.js +290 -0
  68. package/dist/shell/coordinator-io.js +476 -0
  69. package/dist/shell/demo-cli.js +19 -0
  70. package/dist/shell/dispatch.js +162 -0
  71. package/dist/shell/doctor.js +292 -0
  72. package/dist/shell/drive.js +885 -0
  73. package/dist/shell/error-feedback-io.js +305 -0
  74. package/dist/shell/eval-io.js +473 -0
  75. package/dist/{multi-agent-eval/format.js → shell/eval-text.js} +78 -49
  76. package/dist/{evidence-reasoning.js → shell/evidence-reasoning.js} +124 -255
  77. package/dist/shell/exec-backend-cli.js +88 -0
  78. package/dist/shell/execution-backend/agent.js +507 -0
  79. package/dist/shell/execution-backend/ci.js +15 -0
  80. package/dist/shell/execution-backend/container.js +69 -0
  81. package/dist/shell/execution-backend/envelopes.js +55 -0
  82. package/dist/shell/execution-backend/local.js +113 -0
  83. package/dist/shell/execution-backend/probes.js +175 -0
  84. package/dist/shell/execution-backend/registry.js +402 -0
  85. package/dist/shell/execution-backend/remote.js +128 -0
  86. package/dist/shell/execution-backend/types.js +11 -0
  87. package/dist/shell/feedback-cli.js +81 -0
  88. package/dist/shell/feedback-operations.js +48 -0
  89. package/dist/shell/fs-atomic.js +276 -0
  90. package/dist/shell/harness.js +98 -0
  91. package/dist/shell/ledger-cli.js +212 -0
  92. package/dist/shell/ledger-io.js +169 -0
  93. package/dist/shell/man-cli.js +89 -0
  94. package/dist/shell/metrics-cli.js +100 -0
  95. package/dist/shell/multi-agent-cli.js +1002 -0
  96. package/dist/shell/multi-agent-host.js +563 -0
  97. package/dist/shell/multi-agent-io.js +387 -0
  98. package/dist/{multi-agent-operator-ux.js → shell/multi-agent-operator-ux.js} +234 -191
  99. package/dist/shell/node-store.js +124 -0
  100. package/dist/{observability/format.js → shell/observability-format.js} +7 -1
  101. package/dist/{observability/intake.js → shell/observability-intake.js} +79 -56
  102. package/dist/{observability.js → shell/observability.js} +159 -332
  103. package/dist/{onramp.js → shell/onramp.js} +11 -0
  104. package/dist/{operator-ux/format.js → shell/operator-ux-text.js} +250 -239
  105. package/dist/shell/operator-ux.js +431 -0
  106. package/dist/shell/orchestrator.js +231 -0
  107. package/dist/shell/pipeline-cli.js +667 -0
  108. package/dist/shell/pipeline.js +217 -0
  109. package/dist/shell/reclamation-io.js +1366 -0
  110. package/dist/shell/registry-cli.js +344 -0
  111. package/dist/{remote-source.js → shell/remote-source.js} +2 -2
  112. package/dist/shell/report-cli.js +101 -0
  113. package/dist/shell/report-view-cli.js +117 -0
  114. package/dist/{orchestrator → shell}/report.js +289 -282
  115. package/dist/shell/reporter.js +62 -0
  116. package/dist/shell/run-export-cli.js +106 -0
  117. package/dist/shell/run-export.js +680 -0
  118. package/dist/shell/run-registry-io.js +1014 -0
  119. package/dist/shell/run-store.js +164 -0
  120. package/dist/{sandbox-profile.js → shell/sandbox-profile.js} +134 -95
  121. package/dist/{scheduler.js → shell/scheduler-io.js} +257 -48
  122. package/dist/shell/scheduling-io.js +321 -0
  123. package/dist/shell/state-cli.js +181 -0
  124. package/dist/shell/state-explosion-cli.js +197 -0
  125. package/dist/shell/telemetry-cli.js +85 -0
  126. package/dist/{telemetry-demo.js → shell/telemetry-demo.js} +149 -119
  127. package/dist/shell/telemetry-ledger-io.js +132 -0
  128. package/dist/{term.js → shell/term.js} +36 -46
  129. package/dist/shell/topology-io.js +361 -0
  130. package/dist/shell/trust-audit.js +472 -0
  131. package/dist/{multi-agent-trust.js → shell/trust-policy-io.js} +67 -205
  132. package/dist/shell/verifier.js +48 -0
  133. package/dist/shell/workbench-host.js +258 -0
  134. package/dist/shell/workbench-text.js +18 -0
  135. package/dist/shell/workbench.js +170 -0
  136. package/dist/shell/worker-cli.js +124 -0
  137. package/dist/shell/worker-isolation.js +852 -0
  138. package/dist/shell/workflow-app-loader.js +650 -0
  139. package/docs/agent-delegation-drive.7.md +4 -0
  140. package/docs/cli-mcp-parity.7.md +282 -219
  141. package/docs/contract-migration-tooling.7.md +4 -0
  142. package/docs/control-plane-scheduling.7.md +4 -0
  143. package/docs/durable-state-and-locking.7.md +4 -0
  144. package/docs/evidence-adoption-reasoning-chain.7.md +4 -0
  145. package/docs/execution-backends.7.md +4 -0
  146. package/docs/multi-agent-cli-mcp-surface.7.md +4 -0
  147. package/docs/multi-agent-eval-replay-harness.7.md +4 -0
  148. package/docs/multi-agent-operator-ux.7.md +4 -0
  149. package/docs/node-snapshot-diff-replay.7.md +4 -0
  150. package/docs/observability-cost-accounting.7.md +6 -1
  151. package/docs/project-index.md +137 -71
  152. package/docs/real-execution-backends.7.md +4 -0
  153. package/docs/release-and-migration.7.md +4 -0
  154. package/docs/release-tooling.7.md +4 -0
  155. package/docs/remote-source-review.7.md +4 -4
  156. package/docs/report-verifiable-bundle.7.md +1 -1
  157. package/docs/run-registry-control-plane.7.md +4 -0
  158. package/docs/run-retention-reclamation.7.md +25 -0
  159. package/docs/security-trust-hardening.7.md +3 -1
  160. package/docs/state-explosion-management.7.md +4 -0
  161. package/docs/team-collaboration.7.md +4 -0
  162. package/docs/web-desktop-workbench.7.md +15 -1
  163. package/manifest/plugin.manifest.json +1 -1
  164. package/manifest/source-context-profiles.json +9 -13
  165. package/package.json +1 -1
  166. package/scripts/agents/agent-adapter-core.js +22 -2
  167. package/scripts/agents/claude-p-agent.js +8 -3
  168. package/scripts/agents/cw-attest-wrap.js +2 -2
  169. package/scripts/agents/gemini-agent.js +5 -1
  170. package/scripts/agents/opencode-agent.js +5 -1
  171. package/scripts/bump-version.js +4 -3
  172. package/scripts/canonical-apps.js +4 -4
  173. package/scripts/dogfood-architecture-review.js +2 -3
  174. package/scripts/dogfood-release.js +3 -3
  175. package/scripts/gen-parity-doc.js +15 -2
  176. package/scripts/golden-path.js +4 -4
  177. package/scripts/onramp-check.js +1 -1
  178. package/scripts/parity-check.js +38 -21
  179. package/scripts/release-flow.js +2 -2
  180. package/scripts/sync-project-index.js +51 -27
  181. package/scripts/validate-run-state-schema.js +2 -2
  182. package/scripts/version-sync-check.js +30 -30
  183. package/dist/candidate-scoring.js +0 -729
  184. package/dist/capability-core.js +0 -1189
  185. package/dist/capability-registry.js +0 -885
  186. package/dist/cli/command-surface.js +0 -494
  187. package/dist/cli/format.js +0 -56
  188. package/dist/cli/handlers/audit.js +0 -82
  189. package/dist/cli/handlers/blackboard.js +0 -81
  190. package/dist/cli/handlers/candidate.js +0 -40
  191. package/dist/cli/handlers/clones.js +0 -34
  192. package/dist/cli/handlers/collaboration.js +0 -61
  193. package/dist/cli/handlers/eval.js +0 -40
  194. package/dist/cli/handlers/ledger.js +0 -169
  195. package/dist/cli/handlers/maintenance.js +0 -107
  196. package/dist/cli/handlers/multi-agent.js +0 -165
  197. package/dist/cli/handlers/node.js +0 -41
  198. package/dist/cli/handlers/operational.js +0 -155
  199. package/dist/cli/handlers/operator.js +0 -146
  200. package/dist/cli/handlers/registry.js +0 -68
  201. package/dist/cli/handlers/run.js +0 -153
  202. package/dist/cli/handlers/scheduling.js +0 -132
  203. package/dist/cli/handlers/workbench.js +0 -41
  204. package/dist/cli/handlers/worker.js +0 -45
  205. package/dist/cli/run-summary.js +0 -45
  206. package/dist/clones.js +0 -162
  207. package/dist/collaboration.js +0 -726
  208. package/dist/commit.js +0 -592
  209. package/dist/compare.js +0 -18
  210. package/dist/coordinator/classify.js +0 -45
  211. package/dist/coordinator/paths.js +0 -42
  212. package/dist/coordinator/util.js +0 -126
  213. package/dist/coordinator.js +0 -990
  214. package/dist/daemon.js +0 -44
  215. package/dist/dispatch.js +0 -250
  216. package/dist/doctor.js +0 -212
  217. package/dist/drive.js +0 -864
  218. package/dist/error-feedback.js +0 -419
  219. package/dist/evidence-grounding.js +0 -184
  220. package/dist/execution-backend/agent.js +0 -354
  221. package/dist/execution-backend/probes.js +0 -112
  222. package/dist/execution-backend/util.js +0 -47
  223. package/dist/execution-backend.js +0 -961
  224. package/dist/gates.js +0 -48
  225. package/dist/harness.js +0 -61
  226. package/dist/ledger.js +0 -313
  227. package/dist/loop-expansion.js +0 -60
  228. package/dist/mcp/tool-call.js +0 -470
  229. package/dist/mcp/tool-definitions.js +0 -1066
  230. package/dist/mcp-surface.js +0 -30
  231. package/dist/multi-agent/graph.js +0 -84
  232. package/dist/multi-agent/helpers.js +0 -141
  233. package/dist/multi-agent/ids.js +0 -20
  234. package/dist/multi-agent/paths.js +0 -22
  235. package/dist/multi-agent-eval/normalize.js +0 -51
  236. package/dist/multi-agent-eval.js +0 -678
  237. package/dist/multi-agent-host.js +0 -777
  238. package/dist/multi-agent.js +0 -984
  239. package/dist/node-projection.js +0 -59
  240. package/dist/node-snapshot.js +0 -260
  241. package/dist/operator-ux.js +0 -631
  242. package/dist/orchestrator/app-operations.js +0 -211
  243. package/dist/orchestrator/audit-operations.js +0 -182
  244. package/dist/orchestrator/candidate-operations.js +0 -117
  245. package/dist/orchestrator/cli-options.js +0 -294
  246. package/dist/orchestrator/collaboration-operations.js +0 -86
  247. package/dist/orchestrator/feedback-operations.js +0 -81
  248. package/dist/orchestrator/host-operations.js +0 -78
  249. package/dist/orchestrator/lifecycle-operations.js +0 -650
  250. package/dist/orchestrator/migration-operations.js +0 -44
  251. package/dist/orchestrator/multi-agent-operations.js +0 -362
  252. package/dist/orchestrator/topology-operations.js +0 -84
  253. package/dist/orchestrator.js +0 -925
  254. package/dist/pipeline-runner.js +0 -285
  255. package/dist/reclamation/hash.js +0 -72
  256. package/dist/reclamation.js +0 -812
  257. package/dist/reporter.js +0 -67
  258. package/dist/run-export.js +0 -815
  259. package/dist/run-registry/derive.js +0 -175
  260. package/dist/run-registry/format.js +0 -124
  261. package/dist/run-registry/gc.js +0 -251
  262. package/dist/run-registry/policy.js +0 -16
  263. package/dist/run-registry/queue.js +0 -115
  264. package/dist/run-registry.js +0 -850
  265. package/dist/run-state-schema.js +0 -68
  266. package/dist/scheduling.js +0 -184
  267. package/dist/state-explosion.js +0 -1014
  268. package/dist/state.js +0 -367
  269. package/dist/telemetry-ledger.js +0 -196
  270. package/dist/topology.js +0 -565
  271. package/dist/triggers.js +0 -184
  272. package/dist/trust-audit.js +0 -644
  273. package/dist/types/blackboard.js +0 -2
  274. package/dist/types/candidate.js +0 -2
  275. package/dist/types/collaboration.js +0 -2
  276. package/dist/types/core.js +0 -2
  277. package/dist/types/drive.js +0 -10
  278. package/dist/types/error-feedback.js +0 -2
  279. package/dist/types/evidence-reasoning.js +0 -2
  280. package/dist/types/execution-backend.js +0 -2
  281. package/dist/types/multi-agent.js +0 -2
  282. package/dist/types/observability.js +0 -2
  283. package/dist/types/pipeline.js +0 -2
  284. package/dist/types/reclamation.js +0 -8
  285. package/dist/types/report-bundle.js +0 -6
  286. package/dist/types/result.js +0 -2
  287. package/dist/types/run-registry.js +0 -2
  288. package/dist/types/run.js +0 -2
  289. package/dist/types/sandbox.js +0 -2
  290. package/dist/types/schedule.js +0 -2
  291. package/dist/types/state-node.js +0 -2
  292. package/dist/types/topology.js +0 -2
  293. package/dist/types/trust.js +0 -2
  294. package/dist/types/workbench.js +0 -2
  295. package/dist/types/worker.js +0 -2
  296. package/dist/types/workflow-app.js +0 -2
  297. package/dist/types.js +0 -44
  298. package/dist/util/fingerprint.js +0 -19
  299. package/dist/util/fingerprint.test.js +0 -27
  300. package/dist/verifier.js +0 -78
  301. package/dist/version.js +0 -8
  302. package/dist/workbench-host.js +0 -192
  303. package/dist/workbench.js +0 -192
  304. package/dist/worker-accept/acceptance.js +0 -114
  305. package/dist/worker-accept/blackboard-fanout.js +0 -80
  306. package/dist/worker-accept/blackboard-linkage.js +0 -19
  307. package/dist/worker-accept/context.js +0 -2
  308. package/dist/worker-accept/telemetry-ledger.js +0 -126
  309. package/dist/worker-accept/validation.js +0 -77
  310. package/dist/worker-accept/verifier-completion.js +0 -73
  311. package/dist/worker-isolation/helpers.js +0 -51
  312. package/dist/worker-isolation/paths.js +0 -46
  313. package/dist/worker-isolation.js +0 -656
  314. package/dist/workflow-api.js +0 -131
  315. /package/dist/{types → core/types}/boundary.js +0 -0
@@ -1,81 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleBlackboard = handleBlackboard;
4
- exports.handleCoordinator = handleCoordinator;
5
- const state_explosion_1 = require("../../state-explosion");
6
- const io_1 = require("../io");
7
- /** `cw blackboard <verb> <run-id> …` — shared-blackboard read/write family. */
8
- function handleBlackboard(args, runner) {
9
- const [subcommand, action, runId] = args.positionals;
10
- switch (subcommand) {
11
- case "summary":
12
- (0, io_1.printJson)(runner.blackboardSummary((0, io_1.required)(action, "run id"), args.options));
13
- return;
14
- case "summarize": {
15
- const digest = runner.blackboardSummarize((0, io_1.required)(action, "run id"), args.options);
16
- if ((0, io_1.wantsJson)(args.options))
17
- (0, io_1.printJson)(digest);
18
- else
19
- process.stdout.write(`${(0, state_explosion_1.formatBlackboardDigest)(digest)}\n`);
20
- return;
21
- }
22
- case "graph":
23
- (0, io_1.printJson)(runner.blackboardGraph((0, io_1.required)(action, "run id")));
24
- return;
25
- case "resolve":
26
- (0, io_1.printJson)(runner.resolveRunBlackboard((0, io_1.required)(action, "run id"), args.options));
27
- return;
28
- case "topic":
29
- if (action === "create") {
30
- (0, io_1.printJson)(runner.createBlackboardTopic((0, io_1.required)(runId, "run id"), args.options));
31
- return;
32
- }
33
- break;
34
- case "message":
35
- if (action === "post") {
36
- (0, io_1.printJson)(runner.postBlackboardMessage((0, io_1.required)(runId, "run id"), args.options));
37
- return;
38
- }
39
- if (action === "list") {
40
- (0, io_1.printJson)(runner.listBlackboardMessages((0, io_1.required)(runId, "run id"), args.options));
41
- return;
42
- }
43
- break;
44
- case "context":
45
- if (action === "put") {
46
- (0, io_1.printJson)(runner.putBlackboardContext((0, io_1.required)(runId, "run id"), args.options));
47
- return;
48
- }
49
- break;
50
- case "artifact":
51
- if (action === "add") {
52
- (0, io_1.printJson)(runner.addBlackboardArtifact((0, io_1.required)(runId, "run id"), args.options));
53
- return;
54
- }
55
- if (action === "list") {
56
- (0, io_1.printJson)(runner.listBlackboardArtifacts((0, io_1.required)(runId, "run id"), args.options));
57
- return;
58
- }
59
- break;
60
- case "snapshot":
61
- (0, io_1.printJson)(runner.snapshotBlackboard((0, io_1.required)(action, "run id"), args.options));
62
- return;
63
- default:
64
- break;
65
- }
66
- throw new Error("Usage: cw.js blackboard summary|summarize|graph|resolve <run-id> | topic create <run-id> | message post|list <run-id> | context put <run-id> | artifact add|list <run-id> | snapshot <run-id>");
67
- }
68
- /** `cw coordinator summary|decision <run-id> …` — coordinator decision ledger. */
69
- function handleCoordinator(args, runner) {
70
- const [subcommand, runId] = args.positionals;
71
- switch (subcommand) {
72
- case "summary":
73
- (0, io_1.printJson)(runner.coordinatorSummary((0, io_1.required)(runId, "run id"), args.options));
74
- return;
75
- case "decision":
76
- (0, io_1.printJson)(runner.recordCoordinatorDecision((0, io_1.required)(runId, "run id"), args.options));
77
- return;
78
- default:
79
- throw new Error("Usage: cw.js coordinator summary <run-id> | coordinator decision <run-id> --kind <kind> --outcome <outcome> --reason TEXT");
80
- }
81
- }
@@ -1,40 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleCandidate = handleCandidate;
4
- const operator_ux_1 = require("../../operator-ux");
5
- const io_1 = require("../io");
6
- /** `cw candidate list|show|register|score|rank|select|reject|summary <run-id> [candidate-id]`. */
7
- function handleCandidate(args, runner) {
8
- const [subcommand, runId, candidateId, reason] = args.positionals;
9
- switch (subcommand) {
10
- case "list":
11
- (0, io_1.printJson)(runner.listCandidates((0, io_1.required)(runId, "run id"), args.options));
12
- return;
13
- case "show":
14
- (0, io_1.printJson)(runner.showCandidate((0, io_1.required)(runId, "run id"), (0, io_1.required)(candidateId, "candidate id")));
15
- return;
16
- case "register":
17
- (0, io_1.printJson)(runner.registerCandidate((0, io_1.required)(runId, "run id"), args.options));
18
- return;
19
- case "score":
20
- (0, io_1.printJson)(runner.scoreCandidate((0, io_1.required)(runId, "run id"), (0, io_1.required)(candidateId, "candidate id"), args.options));
21
- return;
22
- case "rank":
23
- (0, io_1.printJson)(runner.rankCandidates((0, io_1.required)(runId, "run id"), args.options));
24
- return;
25
- case "select":
26
- (0, io_1.printJson)(runner.selectCandidate((0, io_1.required)(runId, "run id"), (0, io_1.required)(candidateId, "candidate id"), args.options));
27
- return;
28
- case "reject":
29
- (0, io_1.printJson)(runner.rejectCandidate((0, io_1.required)(runId, "run id"), (0, io_1.required)(candidateId, "candidate id"), String(args.options.reason || args.options.message || reason || "rejected")));
30
- return;
31
- case "summary":
32
- if ((0, io_1.wantsJson)(args.options))
33
- (0, io_1.printJson)(runner.summarizeCandidateOperatorRecords((0, io_1.required)(runId, "run id")));
34
- else
35
- process.stdout.write(`${(0, operator_ux_1.formatCandidateSummary)(runner.summarizeCandidateOperatorRecords((0, io_1.required)(runId, "run id")))}\n`);
36
- return;
37
- default:
38
- throw new Error("Usage: cw.js candidate list|show|register|score|rank|select|reject|summary <run-id> [candidate-id]");
39
- }
40
- }
@@ -1,34 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleClones = handleClones;
4
- // `cw clones` handler — carved out of the command-surface god-dispatch. The
5
- // remote-source clone cache (v0.1.91): `list` inspects the cached checkouts that
6
- // `--link`/URL reviews populate; `gc` reclaims them (TTL sweep, or --all). Pure
7
- // filesystem work — no network, no run registry, no runner needed.
8
- const capability_core_1 = require("../../capability-core");
9
- const format_1 = require("../format");
10
- const io_1 = require("../io");
11
- /** `cw clones list [--json] | clones gc [--older-than-days N] [--all] [--json]`. */
12
- function handleClones(args) {
13
- const [subcommand] = args.positionals;
14
- switch (subcommand) {
15
- case "list": {
16
- const result = (0, capability_core_1.listClones)(args.options);
17
- if ((0, io_1.wantsJson)(args.options))
18
- (0, io_1.printJson)(result);
19
- else
20
- process.stdout.write(`${(0, format_1.formatClonesList)(result)}\n`);
21
- return;
22
- }
23
- case "gc": {
24
- const result = (0, capability_core_1.gcClones)(args.options);
25
- if ((0, io_1.wantsJson)(args.options))
26
- (0, io_1.printJson)(result);
27
- else
28
- process.stdout.write(`${(0, format_1.formatClonesGc)(result)}\n`);
29
- return;
30
- }
31
- default:
32
- throw new Error("Usage: cw.js clones list [--json] | clones gc [--older-than-days N] [--all] [--json]");
33
- }
34
- }
@@ -1,61 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleApprove = handleApprove;
4
- exports.handleReject = handleReject;
5
- exports.handleComment = handleComment;
6
- exports.handleHandoff = handleHandoff;
7
- exports.handleReview = handleReview;
8
- const io_1 = require("../io");
9
- /** `cw approve <kind> <run-id> <target-id>` — record an approval on a target. */
10
- function handleApprove(args, runner) {
11
- const [targetKind, runId, targetId] = args.positionals;
12
- (0, io_1.printJson)(runner.collaborationApprove((0, io_1.required)(runId, "run id"), (0, io_1.required)(targetKind, "target kind (candidate|commit|selection|run|task|node)"), (0, io_1.required)(targetId, "target id"), args.options));
13
- }
14
- /** `cw reject <kind> <run-id> <target-id>` — record a rejection on a target. */
15
- function handleReject(args, runner) {
16
- const [targetKind, runId, targetId] = args.positionals;
17
- (0, io_1.printJson)(runner.collaborationReject((0, io_1.required)(runId, "run id"), (0, io_1.required)(targetKind, "target kind (candidate|commit|selection|run|task|node)"), (0, io_1.required)(targetId, "target id"), args.options));
18
- }
19
- /** `cw comment add <kind> <run-id> <target-id> | comment list <run-id>` — leave or list comments. */
20
- function handleComment(args, runner) {
21
- const [subcommand, ...rest] = args.positionals;
22
- if (subcommand === "add") {
23
- const [targetKind, runId, targetId] = rest;
24
- (0, io_1.printJson)(runner.collaborationComment((0, io_1.required)(runId, "run id"), (0, io_1.required)(targetKind, "target kind"), (0, io_1.required)(targetId, "target id"), args.options));
25
- return;
26
- }
27
- if (subcommand === "list") {
28
- const result = runner.collaborationCommentList((0, io_1.required)(rest[0], "run id"), args.options);
29
- if ((0, io_1.wantsJson)(args.options))
30
- (0, io_1.printJson)(result);
31
- else
32
- process.stdout.write(`${runner.formatCommentList(result.comments)}\n`);
33
- return;
34
- }
35
- throw new Error("Usage: cw.js comment add <kind> <run-id> <target-id> --body <text> | comment list <run-id> [--json]");
36
- }
37
- /** `cw handoff <kind> <run-id> [target-id]` — hand a target off to the next owner. */
38
- function handleHandoff(args, runner) {
39
- const [targetKind, runId, targetIdRaw] = args.positionals;
40
- const kind = (0, io_1.required)(targetKind, "target kind (run|task|candidate|commit|node)");
41
- const rid = (0, io_1.required)(runId, "run id");
42
- const targetId = targetIdRaw || (kind === "run" ? rid : undefined);
43
- (0, io_1.printJson)(runner.collaborationHandoff(rid, kind, (0, io_1.required)(targetId, "target id"), args.options));
44
- }
45
- /** `cw review status <run-id> | review policy <run-id> …` — read or set review state/policy. */
46
- function handleReview(args, runner) {
47
- const [subcommand, runId] = args.positionals;
48
- if (subcommand === "status") {
49
- const report = runner.reviewStatus((0, io_1.required)(runId, "run id"), args.options);
50
- if ((0, io_1.wantsJson)(args.options))
51
- (0, io_1.printJson)(report);
52
- else
53
- process.stdout.write(`${runner.formatReviewStatus(report)}\n`);
54
- return;
55
- }
56
- if (subcommand === "policy") {
57
- (0, io_1.printJson)(runner.reviewPolicy((0, io_1.required)(runId, "run id"), args.options));
58
- return;
59
- }
60
- throw new Error("Usage: cw.js review status <run-id> [--json] | review policy <run-id> --required-approvals N --authorized-roles a,b --applies-to commit,selection");
61
- }
@@ -1,40 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleEval = handleEval;
4
- const multi_agent_eval_1 = require("../../multi-agent-eval");
5
- const io_1 = require("../io");
6
- /** `cw eval snapshot|replay|compare|score|gate|report …` — multi-agent eval. */
7
- function handleEval(args, runner) {
8
- const [subcommand, first, second] = args.positionals;
9
- let result;
10
- switch (subcommand) {
11
- case "snapshot":
12
- result = runner.evalSnapshot((0, io_1.required)(first, "run id"), args.options);
13
- break;
14
- case "replay":
15
- result = runner.evalReplay((0, io_1.required)(first, "snapshot id or path"), args.options);
16
- break;
17
- case "compare":
18
- result = runner.evalCompare((0, io_1.required)(first, "baseline id or path"), (0, io_1.required)(second, "replay id or path"));
19
- break;
20
- case "score":
21
- result = runner.evalScore((0, io_1.required)(first, "replay id or path"));
22
- break;
23
- case "gate":
24
- result = runner.evalGate((0, io_1.required)(first, "suite id or path"));
25
- if (!(0, io_1.wantsJson)(args.options) && result.status === "fail")
26
- process.exitCode = 1;
27
- break;
28
- case "report":
29
- result = runner.evalReport((0, io_1.required)(first, "replay id or path"));
30
- break;
31
- default:
32
- throw new Error("Usage: cw.js eval snapshot <run-id> --id <snapshot-id> | replay <snapshot-id-or-path> | compare <baseline-id-or-path> <replay-id-or-path> | score <replay-id-or-path> | gate <suite-id-or-path> | report <replay-id-or-path>");
33
- }
34
- if ((0, io_1.wantsJson)(args.options))
35
- (0, io_1.printJson)(result);
36
- else
37
- process.stdout.write(`${(0, multi_agent_eval_1.formatMultiAgentEval)(result)}\n`);
38
- if (subcommand === "gate" && result.status === "fail")
39
- process.exitCode = 1;
40
- }
@@ -1,169 +0,0 @@
1
- "use strict";
2
- // `cw ledger propose|review|verify` — the cross-agent handoff ledger CLI surface.
3
- // A proposing agent prints a proposal or a review verdict as a verifiable JSON
4
- // entry; the receiving side verifies it fail-closed before acting. See
5
- // docs/cross-agent-ledger.7.md and docs/designs/handoff-ledger.md.
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- var desc = Object.getOwnPropertyDescriptor(m, k);
9
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
- desc = { enumerable: true, get: function() { return m[k]; } };
11
- }
12
- Object.defineProperty(o, k2, desc);
13
- }) : (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- o[k2] = m[k];
16
- }));
17
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
- Object.defineProperty(o, "default", { enumerable: true, value: v });
19
- }) : function(o, v) {
20
- o["default"] = v;
21
- });
22
- var __importStar = (this && this.__importStar) || (function () {
23
- var ownKeys = function(o) {
24
- ownKeys = Object.getOwnPropertyNames || function (o) {
25
- var ar = [];
26
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
- return ar;
28
- };
29
- return ownKeys(o);
30
- };
31
- return function (mod) {
32
- if (mod && mod.__esModule) return mod;
33
- var result = {};
34
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
- __setModuleDefault(result, mod);
36
- return result;
37
- };
38
- })();
39
- Object.defineProperty(exports, "__esModule", { value: true });
40
- exports.handleLedger = handleLedger;
41
- const fs = __importStar(require("fs"));
42
- const ledger_1 = require("../../ledger");
43
- const io_1 = require("../io");
44
- /** Coerce a repeatable/comma-joined list option to a clean string[]. */
45
- function listOption(value) {
46
- const parts = Array.isArray(value) ? value : typeof value === "string" ? value.split(",") : [];
47
- return parts.map((p) => String(p).trim()).filter(Boolean);
48
- }
49
- function stringOption(value) {
50
- return typeof value === "string" && value.trim() ? value.trim() : undefined;
51
- }
52
- function nowIso() {
53
- return new Date().toISOString();
54
- }
55
- function handleLedger(args, _runner) {
56
- const [subcommand] = args.positionals;
57
- const opts = args.options;
58
- switch (subcommand) {
59
- case "propose": {
60
- const entry = (0, ledger_1.buildLedgerProposal)({
61
- from: (0, io_1.required)(stringOption(opts.from), "--from <agent/repo>"),
62
- to: (0, io_1.required)(stringOption(opts.to), "--to <agent/repo>"),
63
- title: (0, io_1.required)(stringOption(opts.title), "--title <text>"),
64
- rationale: (0, io_1.required)(stringOption(opts.rationale), "--rationale <text>"),
65
- targetFiles: listOption(opts.files),
66
- // Do NOT trim the diff: it is a unified patch (payload, not a label), and
67
- // trimming strips the trailing newline `git apply` requires — a trimmed
68
- // diff is a corrupt patch. Presence is detected with a trimmed test, but
69
- // the bytes are passed through verbatim (matching the MCP propose path).
70
- suggestedDiff: typeof opts.diff === "string" && opts.diff.trim() ? opts.diff : undefined,
71
- createdAt: nowIso()
72
- });
73
- (0, io_1.printJson)(entry);
74
- return;
75
- }
76
- case "review": {
77
- const verdictRaw = (0, io_1.required)(stringOption(opts.verdict), "--verdict <approved|rejected>").toUpperCase();
78
- if (verdictRaw !== "APPROVED" && verdictRaw !== "REJECTED") {
79
- throw new Error('--verdict must be "approved" or "rejected".');
80
- }
81
- const entry = (0, ledger_1.buildLedgerReview)({
82
- from: (0, io_1.required)(stringOption(opts.from), "--from <agent/repo>"),
83
- to: (0, io_1.required)(stringOption(opts.to), "--to <agent/repo>"),
84
- target: (0, io_1.required)(stringOption(opts.target), "--target <proposal-id|pr-ref>"),
85
- verdict: verdictRaw,
86
- findings: listOption(opts.findings),
87
- createdAt: nowIso()
88
- });
89
- (0, io_1.printJson)(entry);
90
- return;
91
- }
92
- case "verify": {
93
- const file = stringOption(opts.file);
94
- let text;
95
- try {
96
- // --file <path>, else read the entry from stdin (fd 0).
97
- text = fs.readFileSync(file || 0, "utf8");
98
- }
99
- catch (error) {
100
- throw new Error(`Cannot read ledger entry${file ? ` from ${file}` : " from stdin"}: ${error.message}`);
101
- }
102
- let parsed;
103
- try {
104
- parsed = JSON.parse(text);
105
- }
106
- catch {
107
- // A non-JSON input is itself a fail-closed refusal, not a crash.
108
- (0, io_1.printJson)({ ok: false, id: null, kind: null, checks: [{ name: "parse", pass: false, code: "ledger-bad-json" }], failedChecks: [{ name: "parse", code: "ledger-bad-json" }] });
109
- process.exitCode = 1;
110
- return;
111
- }
112
- const result = (0, ledger_1.verifyLedgerEntry)(parsed);
113
- (0, io_1.printJson)(result);
114
- // Fail-closed: a tampered/malformed entry exits non-zero so
115
- // `cw ledger verify <file> && open-pr` cannot proceed on a lie.
116
- if (!result.ok)
117
- process.exitCode = 1;
118
- return;
119
- }
120
- case "apply": {
121
- const file = stringOption(opts.file);
122
- let text;
123
- try {
124
- // --file <path>, else read the entry from stdin (fd 0), same as verify.
125
- text = fs.readFileSync(file || 0, "utf8");
126
- }
127
- catch (error) {
128
- throw new Error(`Cannot read ledger entry${file ? ` from ${file}` : " from stdin"}: ${error.message}`);
129
- }
130
- let parsed;
131
- try {
132
- parsed = JSON.parse(text);
133
- }
134
- catch {
135
- (0, io_1.printJson)({ ok: false, id: null, kind: null, diff: null, failedChecks: [{ name: "parse", code: "ledger-bad-json" }] });
136
- process.exitCode = 1;
137
- return;
138
- }
139
- const result = (0, ledger_1.applyLedgerProposal)(parsed);
140
- (0, io_1.printJson)(result);
141
- // Fail-closed: the diff only comes out (ok:true) when the proposal verifies,
142
- // so `cw ledger apply <file> | git apply` never feeds git an unverified patch.
143
- if (!result.ok)
144
- process.exitCode = 1;
145
- return;
146
- }
147
- case "list": {
148
- // `--dir` is repeatable: 2+ dirs union-verify multiple mirrors into one
149
- // inbox; a single --dir keeps the original single-directory output (POLA).
150
- const dirs = Array.isArray(opts.dir) ? opts.dir.map(String).filter(Boolean) : [];
151
- if (dirs.length > 1) {
152
- const union = (0, ledger_1.unionLedgerEntries)(dirs);
153
- (0, io_1.printJson)(union);
154
- if (!union.allOk)
155
- process.exitCode = 1;
156
- return;
157
- }
158
- const dir = (0, io_1.required)(dirs[0] || stringOption(opts.dir), "--dir <ledger-directory>");
159
- const result = (0, ledger_1.listLedgerEntries)(dir);
160
- (0, io_1.printJson)(result);
161
- // Fail-closed inbox: refuse the whole batch if any entry does not verify.
162
- if (!result.allOk)
163
- process.exitCode = 1;
164
- return;
165
- }
166
- default:
167
- throw new Error("Usage: cw ledger propose|review|verify|apply|list [options]");
168
- }
169
- }
@@ -1,107 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleGc = handleGc;
4
- exports.handleTelemetry = handleTelemetry;
5
- exports.handleDemo = handleDemo;
6
- const capability_core_1 = require("../../capability-core");
7
- const run_registry_1 = require("../../run-registry");
8
- const telemetry_demo_1 = require("../../telemetry-demo");
9
- const io_1 = require("../io");
10
- /** `cw gc plan|run|verify [run-id] …` — run retention & provable reclamation. */
11
- function handleGc(args, runner) {
12
- // Run Retention & Provable Reclamation (v0.1.39). `plan` is a pure dry-run
13
- // (frees nothing); `run` executes the write-ahead reclamation transaction;
14
- // `verify` re-proves a reclaimed run. CW never reclaims by default.
15
- const registry = (0, capability_core_1.runRegistryFor)(args.options, runner);
16
- const [subcommand, id] = args.positionals;
17
- switch (subcommand) {
18
- case "plan": {
19
- const result = (0, capability_core_1.gcPlan)(registry, id, args.options);
20
- if ((0, io_1.wantsJson)(args.options))
21
- (0, io_1.printJson)(result);
22
- else
23
- process.stdout.write(`${(0, run_registry_1.formatGcPlan)(result)}\n`);
24
- return;
25
- }
26
- case "run": {
27
- const result = (0, capability_core_1.gcRun)(registry, id, args.options);
28
- if ((0, io_1.wantsJson)(args.options))
29
- (0, io_1.printJson)(result);
30
- else
31
- process.stdout.write(`${(0, run_registry_1.formatGcRun)(result)}\n`);
32
- return;
33
- }
34
- case "verify": {
35
- const result = (0, capability_core_1.gcVerify)(registry, (0, io_1.required)(id, "run id"), args.options);
36
- if ((0, io_1.wantsJson)(args.options))
37
- (0, io_1.printJson)(result);
38
- else
39
- process.stdout.write(`${(0, run_registry_1.formatGcVerify)(result)}\n`);
40
- // Fail closed ONLY on a real integrity failure: a run that WAS reclaimed
41
- // but no longer re-proves. A not-reclaimed run has nothing to verify
42
- // (reclaimed:false/verified:false) and must not be treated as a failure.
43
- // LIMIT (honest): a DELETED reclaimed.json reads as reclaimed:false, so
44
- // proof-deletion is indistinguishable from never-reclaimed here without
45
- // an independent witness (e.g. a trust-audit reclamation event) — a
46
- // follow-up. This guard is still strictly better than the prior exit-0.
47
- if (result.reclaimed && !result.verified)
48
- process.exitCode = 1;
49
- return;
50
- }
51
- default:
52
- throw new Error("Usage: cw.js gc plan|run|verify [run-id] [--reclaimAfterArchiveDays N] [--keep-scratch] [--keep-snapshots] [--limit N] [--json]");
53
- }
54
- }
55
- /** `cw telemetry verify <run-id> …` — verify the signed telemetry ledger. */
56
- function handleTelemetry(args, runner) {
57
- const [subcommand, id] = args.positionals;
58
- switch (subcommand) {
59
- case "verify": {
60
- const result = (0, capability_core_1.telemetryVerify)(runner, { ...args.options, runId: id || args.options.runId || args.options.run });
61
- if ((0, io_1.wantsJson)(args.options))
62
- (0, io_1.printJson)(result);
63
- else
64
- process.stdout.write(`${(0, telemetry_demo_1.formatTelemetryVerify)(result)}\n`);
65
- // Fail closed: a forged/edited/corrupt ledger verifies false — report it
66
- // through the exit code so `cw telemetry verify <run> && deploy` cannot
67
- // pass on a lie. (Absent ledger = present:false/verified:true -> exit 0.)
68
- if (!result.verified)
69
- process.exitCode = 1;
70
- return;
71
- }
72
- default:
73
- throw new Error("Usage: cw.js telemetry verify <run-id> [--pubkey <pem-or-path>] [--json]");
74
- }
75
- }
76
- /** `cw demo tamper|bundle [--json]` — the tamper/bundle integrity demos. */
77
- function handleDemo(args, runner) {
78
- const [subcommand] = args.positionals;
79
- switch (subcommand) {
80
- case "tamper": {
81
- const result = (0, capability_core_1.demoTamper)(runner, args.options);
82
- if ((0, io_1.wantsJson)(args.options))
83
- (0, io_1.printJson)(result);
84
- else
85
- process.stdout.write(`${(0, telemetry_demo_1.formatTamperDemo)(result)}\n`);
86
- // Fail closed: if the proof did not hold (a tamper went undetected),
87
- // exit nonzero so the demo can never green a broken guarantee.
88
- if (!result.proven)
89
- process.exitCode = 1;
90
- return;
91
- }
92
- case "bundle": {
93
- const result = (0, capability_core_1.demoBundle)(runner, args.options);
94
- if ((0, io_1.wantsJson)(args.options))
95
- (0, io_1.printJson)(result);
96
- else
97
- process.stdout.write(`${(0, telemetry_demo_1.formatBundleDemo)(result)}\n`);
98
- // Fail closed: a forged bundle that verified would be a regression in the
99
- // bundle guarantee — exit nonzero so the demo can never green it.
100
- if (!result.proven)
101
- process.exitCode = 1;
102
- return;
103
- }
104
- default:
105
- throw new Error("Usage: cw.js demo tamper|bundle [--json]");
106
- }
107
- }