cool-workflow 0.1.85 → 0.1.86

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 (58) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/README.md +47 -333
  4. package/apps/architecture-review/app.json +1 -1
  5. package/apps/architecture-review-fast/app.json +1 -1
  6. package/apps/architecture-review-fast/workflow.js +2 -0
  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/capability-core.js +131 -3
  12. package/dist/capability-registry.js +84 -50
  13. package/dist/cli/command-surface.js +3 -0
  14. package/dist/doctor.js +37 -1
  15. package/dist/mcp/tool-call.js +428 -0
  16. package/dist/mcp/tool-definitions.js +1027 -0
  17. package/dist/mcp-surface.js +5 -1442
  18. package/dist/onramp.js +421 -0
  19. package/dist/orchestrator.js +20 -15
  20. package/dist/version.js +1 -1
  21. package/dist/workbench-host.js +1 -8
  22. package/docs/agent-delegation-drive.7.md +21 -2
  23. package/docs/cli-mcp-parity.7.md +29 -4
  24. package/docs/contract-migration-tooling.7.md +2 -0
  25. package/docs/control-plane-scheduling.7.md +2 -0
  26. package/docs/dogfood-one-real-repo.7.md +9 -1
  27. package/docs/durable-state-and-locking.7.md +2 -0
  28. package/docs/evidence-adoption-reasoning-chain.7.md +2 -0
  29. package/docs/execution-backends.7.md +2 -0
  30. package/docs/getting-started.md +40 -2
  31. package/docs/index.md +51 -38
  32. package/docs/multi-agent-cli-mcp-surface.7.md +2 -0
  33. package/docs/multi-agent-eval-replay-harness.7.md +2 -0
  34. package/docs/multi-agent-operator-ux.7.md +2 -0
  35. package/docs/node-snapshot-diff-replay.7.md +2 -0
  36. package/docs/observability-cost-accounting.7.md +2 -0
  37. package/docs/project-index.md +18 -7
  38. package/docs/real-execution-backends.7.md +2 -0
  39. package/docs/release-and-migration.7.md +3 -1
  40. package/docs/release-history.md +342 -0
  41. package/docs/release-tooling.7.md +16 -0
  42. package/docs/run-registry-control-plane.7.md +2 -0
  43. package/docs/run-retention-reclamation.7.md +2 -0
  44. package/docs/state-explosion-management.7.md +2 -0
  45. package/docs/team-collaboration.7.md +2 -0
  46. package/docs/web-desktop-workbench.7.md +2 -0
  47. package/manifest/plugin.manifest.json +1 -1
  48. package/manifest/source-context-profiles.json +1 -1
  49. package/package.json +2 -1
  50. package/scripts/architecture-review-fast.js +44 -2
  51. package/scripts/canonical-apps.js +4 -4
  52. package/scripts/dogfood-release.js +55 -133
  53. package/scripts/golden-path.js +4 -4
  54. package/scripts/onramp-check.js +47 -0
  55. package/scripts/parity-check.js +740 -2
  56. package/scripts/release-check.js +2 -0
  57. package/scripts/source-context.js +31 -5
  58. package/scripts/version-sync-check.js +4 -2
@@ -0,0 +1,428 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.callTool = callTool;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const orchestrator_1 = require("../orchestrator");
10
+ const scheduler_1 = require("../scheduler");
11
+ const triggers_1 = require("../triggers");
12
+ const workbench_1 = require("../workbench");
13
+ const capability_core_1 = require("../capability-core");
14
+ const baseRunner = new orchestrator_1.CoolWorkflowRunner({
15
+ pluginRoot: node_path_1.default.resolve(__dirname, "../..")
16
+ });
17
+ // This is an EXPLICIT switch by design, NOT a descriptor-driven generic dispatcher
18
+ // (FreeBSD-audit R1, assessed & closed as won't-do). A data-routing rewrite is
19
+ // ACTIVELY DANGEROUS here, not just risky: (1) `descriptor.entry` does NOT reliably
20
+ // name the function an arm calls (e.g. cw_app_run entry="validateApp" actually calls
21
+ // appRun; cw_commit entry="commit" calls commitEnvelope), so `runner[entry](args)`
22
+ // would silently call the WRONG method; (2) the parity gate is token-set-only +
23
+ // payload-probes ~30 read-only runId caps, so ~150 multi-positional/write arms are
24
+ // UNPROBED — a mis-marshalling generic dispatcher would pass BOTH gates green = the
25
+ // existential public false-green (a CW red line — see DIRECTION.md). The arms
26
+ // work and parity guards the surface; the real defect the audit flagged (a DEAD
27
+ // dispatcher) was already removed (#131). Cheap safe hardening, if ever wanted:
28
+ // broaden parity-check payload probes to cover multi-positional/write arms, and
29
+ // correct the wrong `entry` metadata — NOT a dispatch rewrite.
30
+ function callTool(name, args) {
31
+ const cwd = resolveInvocationCwd(args);
32
+ if (cwd)
33
+ args = { ...args, cwd };
34
+ const runner = baseRunner.withBaseDir(cwd);
35
+ const workCwd = cwd || process.cwd();
36
+ const scheduler = new scheduler_1.Scheduler(workCwd);
37
+ const triggers = new triggers_1.RoutineTriggerBridge(workCwd);
38
+ switch (name) {
39
+ case "cw_list":
40
+ return runner.listWorkflows();
41
+ case "cw_plan":
42
+ return (0, capability_core_1.planSummary)(runner, String(args.workflowId || ""), args);
43
+ case "cw_app_run":
44
+ return (0, capability_core_1.appRun)(runner, args);
45
+ case "cw_status":
46
+ return runner.status(String(args.runId || ""));
47
+ case "cw_init":
48
+ return runner.init(String(args.workflowId || ""), args);
49
+ case "cw_next":
50
+ return runner.next(String(args.runId || ""), args);
51
+ case "cw_state_check":
52
+ return runner.checkState(String(args.runId || ""), args);
53
+ case "cw_contract_show":
54
+ return runner.showContract(String(args.runId || ""), (0, capability_core_1.optionalString)(args.contractId));
55
+ case "cw_node_list":
56
+ return runner.listNodes(String(args.runId || ""));
57
+ case "cw_node_show":
58
+ return runner.showNode(String(args.runId || ""), String(args.nodeId || ""));
59
+ case "cw_node_graph":
60
+ return runner.graphNodes(String(args.runId || ""));
61
+ case "cw_node_snapshot":
62
+ return runner.nodeSnapshot(String(args.runId || ""), String(args.nodeId || ""), args);
63
+ case "cw_node_diff":
64
+ return runner.nodeDiff(String(args.runId || ""), String(args.baselineSnapshotId || args.baseline || ""), String(args.candidateSnapshotId || args.candidate || ""));
65
+ case "cw_node_replay":
66
+ return runner.nodeReplay(String(args.runId || ""), String(args.snapshotId || ""), args);
67
+ case "cw_node_replay_verify":
68
+ return runner.nodeReplayVerify(String(args.runId || ""), String(args.replayId || ""), args);
69
+ case "cw_migration_list":
70
+ return runner.migrationList();
71
+ case "cw_migration_check":
72
+ return runner.migrationCheck(String(args.target || args.runId || ""), args);
73
+ case "cw_migration_prove":
74
+ return runner.migrationProve(String(args.target || args.runId || ""), args);
75
+ case "cw_operator_status":
76
+ return runner.operatorStatus(String(args.runId || ""));
77
+ case "cw_operator_graph":
78
+ return runner.operatorGraph(String(args.runId || ""));
79
+ case "cw_operator_report":
80
+ return runner.operatorReport(String(args.runId || ""));
81
+ case "cw_worker_summary":
82
+ return runner.summarizeWorkerRecords(String(args.runId || ""));
83
+ case "cw_candidate_summary":
84
+ return runner.summarizeCandidateOperatorRecords(String(args.runId || ""));
85
+ case "cw_feedback_summary":
86
+ return runner.summarizeFeedbackRecords(String(args.runId || ""));
87
+ case "cw_commit_summary":
88
+ return runner.summarizeCommitRecords(String(args.runId || ""));
89
+ case "cw_multi_agent_summary":
90
+ return runner.multiAgentSummary(String(args.runId || ""));
91
+ case "cw_multi_agent_graph":
92
+ return runner.multiAgentOperatorGraph(String(args.runId || ""));
93
+ case "cw_multi_agent_dependencies":
94
+ return runner.multiAgentDependencies(String(args.runId || ""));
95
+ case "cw_multi_agent_failures":
96
+ return runner.multiAgentFailures(String(args.runId || ""));
97
+ case "cw_multi_agent_evidence":
98
+ return runner.multiAgentEvidence(String(args.runId || ""));
99
+ case "cw_evidence_reasoning":
100
+ return runner.multiAgentReasoning(String(args.runId || ""), args);
101
+ case "cw_evidence_reasoning_refresh":
102
+ return runner.multiAgentReasoningRefresh(String(args.runId || ""));
103
+ case "cw_multi_agent_run":
104
+ return runner.hostMultiAgentRun((0, capability_core_1.optionalString)(args.runId), args);
105
+ case "cw_multi_agent_status":
106
+ return runner.hostMultiAgentStatus(String(args.runId || ""));
107
+ case "cw_multi_agent_step":
108
+ return runner.hostMultiAgentStep(String(args.runId || ""), args);
109
+ case "cw_multi_agent_blackboard":
110
+ return runner.hostMultiAgentBlackboard(String(args.runId || ""), (0, capability_core_1.optionalString)(args.action || args.operation), args);
111
+ case "cw_multi_agent_score":
112
+ return runner.hostMultiAgentScore(String(args.runId || ""), args);
113
+ case "cw_multi_agent_select":
114
+ return runner.hostMultiAgentSelect(String(args.runId || ""), args);
115
+ case "cw_summary_refresh":
116
+ return runner.summaryRefresh(String(args.runId || ""), args);
117
+ case "cw_summary_show":
118
+ return runner.summaryShow(String(args.runId || ""));
119
+ case "cw_blackboard_summarize":
120
+ return runner.blackboardSummarize(String(args.runId || ""), args);
121
+ case "cw_multi_agent_summarize":
122
+ return runner.multiAgentSummarize(String(args.runId || ""));
123
+ case "cw_multi_agent_graph_compact":
124
+ return runner.multiAgentGraphView(String(args.runId || ""), args);
125
+ case "cw_eval_snapshot":
126
+ return runner.evalSnapshot(String(args.runId || ""), args);
127
+ case "cw_eval_replay":
128
+ return runner.evalReplay(String(args.snapshot || args.snapshotId || args.path || ""), args);
129
+ case "cw_eval_compare":
130
+ return runner.evalCompare(String(args.baseline || args.baselinePath || ""), String(args.replay || args.replayPath || ""));
131
+ case "cw_eval_score":
132
+ return runner.evalScore(String(args.replay || args.replayPath || args.path || ""));
133
+ case "cw_eval_gate":
134
+ return runner.evalGate(String(args.suite || args.suiteId || args.path || ""));
135
+ case "cw_eval_report":
136
+ return runner.evalReport(String(args.replay || args.replayPath || args.path || ""));
137
+ case "cw_multi_agent_run_create":
138
+ return runner.createMultiAgentRun(String(args.runId || ""), args);
139
+ case "cw_multi_agent_run_transition":
140
+ return runner.transitionMultiAgentRun(String(args.runId || ""), String(args.multiAgentRunId || args.id || ""), args);
141
+ case "cw_multi_agent_run_show":
142
+ return runner.showMultiAgentRun(String(args.runId || ""), String(args.multiAgentRunId || args.id || ""));
143
+ case "cw_multi_agent_role_create":
144
+ return runner.createAgentRole(String(args.runId || ""), args);
145
+ case "cw_multi_agent_role_show":
146
+ return runner.showAgentRole(String(args.runId || ""), String(args.roleId || args.id || ""));
147
+ case "cw_multi_agent_group_create":
148
+ return runner.createAgentGroup(String(args.runId || ""), args);
149
+ case "cw_multi_agent_group_show":
150
+ return runner.showAgentGroup(String(args.runId || ""), String(args.groupId || args.id || ""));
151
+ case "cw_multi_agent_membership_create":
152
+ return runner.assignAgentMembership(String(args.runId || ""), args);
153
+ case "cw_multi_agent_membership_show":
154
+ return runner.showAgentMembership(String(args.runId || ""), String(args.membershipId || args.id || ""));
155
+ case "cw_multi_agent_fanout_create":
156
+ return runner.createAgentFanout(String(args.runId || ""), args);
157
+ case "cw_multi_agent_fanout_show":
158
+ return runner.showAgentFanout(String(args.runId || ""), String(args.fanoutId || args.id || ""));
159
+ case "cw_multi_agent_fanin_collect":
160
+ return runner.collectAgentFanin(String(args.runId || ""), args);
161
+ case "cw_multi_agent_fanin_show":
162
+ return runner.showAgentFanin(String(args.runId || ""), String(args.faninId || args.id || ""));
163
+ case "cw_topology_list":
164
+ return runner.listTopologies();
165
+ case "cw_topology_show":
166
+ if (args.runId && (args.topologyRunId || args.id))
167
+ return runner.showTopologyRun(String(args.runId || ""), String(args.topologyRunId || args.id || ""));
168
+ return runner.showTopology(String(args.topologyId || args.id || ""));
169
+ case "cw_topology_validate":
170
+ return runner.validateTopology(String(args.topologyId || args.id || ""));
171
+ case "cw_topology_apply":
172
+ return runner.applyTopology(String(args.runId || ""), String(args.topologyId || args.id || ""), args);
173
+ case "cw_topology_summary":
174
+ return runner.topologySummary(String(args.runId || ""));
175
+ case "cw_topology_graph":
176
+ return runner.topologyGraph(String(args.runId || ""));
177
+ case "cw_blackboard_summary":
178
+ return runner.blackboardSummary(String(args.runId || ""), args);
179
+ case "cw_blackboard_graph":
180
+ return runner.blackboardGraph(String(args.runId || ""));
181
+ case "cw_blackboard_resolve":
182
+ return runner.resolveRunBlackboard(String(args.runId || ""), args);
183
+ case "cw_blackboard_topic_create":
184
+ return runner.createBlackboardTopic(String(args.runId || ""), args);
185
+ case "cw_blackboard_message_post":
186
+ return runner.postBlackboardMessage(String(args.runId || ""), args);
187
+ case "cw_blackboard_message_list":
188
+ return runner.listBlackboardMessages(String(args.runId || ""), args);
189
+ case "cw_blackboard_context_put":
190
+ return runner.putBlackboardContext(String(args.runId || ""), args);
191
+ case "cw_blackboard_artifact_add":
192
+ return runner.addBlackboardArtifact(String(args.runId || ""), args);
193
+ case "cw_blackboard_artifact_list":
194
+ return runner.listBlackboardArtifacts(String(args.runId || ""), args);
195
+ case "cw_blackboard_snapshot":
196
+ return runner.snapshotBlackboard(String(args.runId || ""), args);
197
+ case "cw_coordinator_summary":
198
+ return runner.coordinatorSummary(String(args.runId || ""), args);
199
+ case "cw_coordinator_decision":
200
+ return runner.recordCoordinatorDecision(String(args.runId || ""), args);
201
+ case "cw_audit_summary":
202
+ return runner.auditSummary(String(args.runId || ""));
203
+ case "cw_audit_verify":
204
+ return (0, capability_core_1.auditVerify)(runner, args);
205
+ case "cw_audit_worker":
206
+ return runner.workerAudit(String(args.runId || ""), String(args.workerId || ""));
207
+ case "cw_audit_provenance":
208
+ return runner.evidenceProvenance(String(args.runId || ""), args);
209
+ case "cw_audit_multi_agent":
210
+ return runner.auditMultiAgent(String(args.runId || ""));
211
+ case "cw_audit_policy":
212
+ return runner.auditPolicy(String(args.runId || ""));
213
+ case "cw_audit_role":
214
+ return runner.auditRole(String(args.runId || ""), String(args.roleId || args.id || ""));
215
+ case "cw_audit_blackboard":
216
+ return runner.auditBlackboard(String(args.runId || ""));
217
+ case "cw_audit_judge":
218
+ return runner.auditJudge(String(args.runId || ""));
219
+ case "cw_audit_attest":
220
+ return runner.recordAuditAttestation(String(args.runId || ""), args);
221
+ case "cw_audit_decision":
222
+ return runner.recordAuditDecision(String(args.runId || ""), String(args.workerId || ""), args);
223
+ case "cw_dispatch":
224
+ return runner.dispatch(String(args.runId || ""), args);
225
+ case "cw_sandbox_list":
226
+ return runner.listSandboxProfiles(args);
227
+ case "cw_sandbox_show":
228
+ return runner.showSandboxProfile(String(args.profileId || ""), args);
229
+ case "cw_sandbox_validate":
230
+ return runner.validateSandboxProfile(String(args.profileFile || ""), args);
231
+ case "cw_sandbox_choose":
232
+ case "cw_sandbox_resolve":
233
+ return (0, capability_core_1.sandboxChoose)(runner, args);
234
+ case "cw_backend_list":
235
+ return runner.listBackends(args);
236
+ case "cw_backend_show":
237
+ return runner.showBackend(String(args.backendId || args.backend || ""), args);
238
+ case "cw_backend_probe":
239
+ return runner.probeBackend((0, capability_core_1.optionalString)(args.backendId || args.backend), args);
240
+ case "cw_backend_agent_config_show":
241
+ return (0, capability_core_1.backendAgentConfigShow)(args);
242
+ case "cw_backend_agent_config_set":
243
+ return (0, capability_core_1.backendAgentConfigSet)(args);
244
+ case "cw_result":
245
+ return runner.recordResult(String(args.runId || ""), String(args.taskId || ""), String(args.resultPath || ""), args);
246
+ case "cw_commit":
247
+ return (0, capability_core_1.commitEnvelope)(runner, String(args.runId || ""), args);
248
+ case "cw_report":
249
+ return runner.report(String(args.runId || ""));
250
+ case "cw_app_list":
251
+ return runner.listApps();
252
+ case "cw_app_show":
253
+ return runner.showApp(String(args.appId || ""));
254
+ case "cw_app_validate":
255
+ return runner.validateApp(String(args.target || args.appId || args.path || ""));
256
+ case "cw_app_init":
257
+ return runner.initApp(String(args.appId || ""), args);
258
+ case "cw_app_package":
259
+ return runner.packageApp(String(args.appId || ""), args);
260
+ case "cw_worker_list":
261
+ return runner.listWorkers(String(args.runId || ""), args);
262
+ case "cw_worker_show":
263
+ return runner.showWorker(String(args.runId || ""), String(args.workerId || ""));
264
+ case "cw_worker_manifest":
265
+ return runner.showWorkerManifest(String(args.runId || ""), String(args.workerId || ""));
266
+ case "cw_worker_output":
267
+ return runner.recordWorkerOutput(String(args.runId || ""), String(args.workerId || ""), String(args.resultPath || ""), args);
268
+ case "cw_worker_fail":
269
+ return runner.recordWorkerFailure(String(args.runId || ""), String(args.workerId || ""), String(args.message || ""), args);
270
+ case "cw_worker_validate":
271
+ return runner.validateWorker(String(args.runId || ""), String(args.workerId || ""), (0, capability_core_1.optionalString)(args.path || args.resultPath));
272
+ case "cw_candidate_list":
273
+ return runner.listCandidates(String(args.runId || ""), args);
274
+ case "cw_candidate_show":
275
+ return runner.showCandidate(String(args.runId || ""), String(args.candidateId || ""));
276
+ case "cw_candidate_register":
277
+ return runner.registerCandidate(String(args.runId || ""), args);
278
+ case "cw_candidate_score":
279
+ return runner.scoreCandidate(String(args.runId || ""), String(args.candidateId || ""), args);
280
+ case "cw_candidate_rank":
281
+ return runner.rankCandidates(String(args.runId || ""), args);
282
+ case "cw_candidate_select":
283
+ return runner.selectCandidate(String(args.runId || ""), String(args.candidateId || ""), args);
284
+ case "cw_candidate_reject":
285
+ return runner.rejectCandidate(String(args.runId || ""), String(args.candidateId || ""), String(args.reason || "rejected"));
286
+ // ---- Team Collaboration (v0.1.32) ----
287
+ case "cw_approve":
288
+ return runner.collaborationApprove(String(args.runId || ""), String(args.targetKind || args.kind || ""), String(args.targetId || args.target || ""), args);
289
+ case "cw_reject":
290
+ return runner.collaborationReject(String(args.runId || ""), String(args.targetKind || args.kind || ""), String(args.targetId || args.target || ""), args);
291
+ case "cw_comment_add":
292
+ return runner.collaborationComment(String(args.runId || ""), String(args.targetKind || args.kind || ""), String(args.targetId || args.target || ""), args);
293
+ case "cw_comment_list":
294
+ return runner.collaborationCommentList(String(args.runId || ""), args);
295
+ case "cw_handoff":
296
+ return runner.collaborationHandoff(String(args.runId || ""), String(args.targetKind || args.kind || ""), String(args.targetId || args.target || ""), args);
297
+ case "cw_review_status":
298
+ return runner.reviewStatus(String(args.runId || ""), args);
299
+ case "cw_review_policy":
300
+ return runner.reviewPolicy(String(args.runId || ""), args);
301
+ case "cw_feedback_list":
302
+ return runner.listFeedback(String(args.runId || ""), args);
303
+ case "cw_feedback_show":
304
+ return runner.showFeedback(String(args.runId || ""), String(args.feedbackId || ""));
305
+ case "cw_feedback_collect":
306
+ return runner.collectFeedback(String(args.runId || ""));
307
+ case "cw_feedback_task":
308
+ return runner.createFeedbackTask(String(args.runId || ""), String(args.feedbackId || ""), args);
309
+ case "cw_feedback_resolve":
310
+ return runner.resolveFeedback(String(args.runId || ""), String(args.feedbackId || ""), args);
311
+ case "cw_schedule_create":
312
+ return scheduler.create(args);
313
+ case "cw_schedule_list":
314
+ return scheduler.list(args.status ? String(args.status) : undefined);
315
+ case "cw_schedule_delete":
316
+ return scheduler.delete(String(args.id || ""));
317
+ case "cw_schedule_due":
318
+ return scheduler.due();
319
+ case "cw_schedule_complete":
320
+ return scheduler.complete(String(args.id || ""), args);
321
+ case "cw_schedule_pause":
322
+ return scheduler.pause(String(args.id || ""));
323
+ case "cw_schedule_resume":
324
+ return scheduler.resume(String(args.id || ""));
325
+ case "cw_schedule_run_now":
326
+ return scheduler.runNow(String(args.id || ""));
327
+ case "cw_schedule_history":
328
+ return scheduler.history(args.id ? String(args.id) : undefined);
329
+ case "cw_routine_create":
330
+ return triggers.create(args);
331
+ case "cw_routine_list":
332
+ return triggers.list(args.kind ? String(args.kind) : undefined);
333
+ case "cw_routine_delete":
334
+ return triggers.delete(String(args.id || ""));
335
+ case "cw_routine_fire":
336
+ return triggers.fire(String(args.kind || "api"), args.payload || args);
337
+ case "cw_routine_events":
338
+ return triggers.events(args.id ? String(args.id) : undefined);
339
+ case "cw_registry_refresh":
340
+ return (0, capability_core_1.runRegistryRefresh)((0, capability_core_1.runRegistryFor)(args, runner), args);
341
+ case "cw_registry_show":
342
+ return (0, capability_core_1.runRegistryShow)((0, capability_core_1.runRegistryFor)(args, runner), args);
343
+ case "cw_metrics_show":
344
+ return runner.metricsShow(String(args.runId || ""), args);
345
+ case "cw_metrics_summary":
346
+ return (0, capability_core_1.metricsSummary)((0, capability_core_1.runRegistryFor)(args, runner), runner, args);
347
+ case "cw_run_search":
348
+ return (0, capability_core_1.runSearch)((0, capability_core_1.runRegistryFor)(args, runner), args);
349
+ case "cw_run_list":
350
+ return (0, capability_core_1.runList)((0, capability_core_1.runRegistryFor)(args, runner), args);
351
+ case "cw_run_show":
352
+ return (0, capability_core_1.runShow)((0, capability_core_1.runRegistryFor)(args, runner), String(args.runId || ""), args);
353
+ case "cw_run_resume":
354
+ return (0, capability_core_1.runResume)((0, capability_core_1.runRegistryFor)(args, runner), runner, String(args.runId || ""), args);
355
+ case "cw_run_archive":
356
+ return (0, capability_core_1.runArchive)((0, capability_core_1.runRegistryFor)(args, runner), (0, capability_core_1.optionalString)(args.runId), args);
357
+ case "cw_run_rerun":
358
+ return (0, capability_core_1.runRerun)((0, capability_core_1.runRegistryFor)(args, runner), String(args.runId || ""), args);
359
+ case "cw_run_export":
360
+ return (0, capability_core_1.runExportArchive)(runner, String(args.runId || ""), args);
361
+ case "cw_run_import":
362
+ return (0, capability_core_1.runImportArchive)(runner, args);
363
+ case "cw_run_verify_import":
364
+ return (0, capability_core_1.runVerifyImport)(runner, String(args.runId || ""), args);
365
+ case "cw_run_inspect_archive":
366
+ return (0, capability_core_1.runInspectArchive)(runner, args);
367
+ case "cw_report_verify_bundle":
368
+ return (0, capability_core_1.runVerifyReportBundle)(runner, args);
369
+ case "cw_report_bundle":
370
+ return (0, capability_core_1.reportBundle)(runner, String(args.runId || ""), args);
371
+ case "cw_run_drive":
372
+ return (0, capability_core_1.runDrivePreview)(runner, args);
373
+ case "cw_run_drive_step":
374
+ return (0, capability_core_1.runDrive)(runner, args);
375
+ case "cw_queue_add":
376
+ return (0, capability_core_1.queueAdd)((0, capability_core_1.runRegistryFor)(args, runner), args);
377
+ case "cw_queue_list":
378
+ return (0, capability_core_1.queueList)((0, capability_core_1.runRegistryFor)(args, runner), args);
379
+ case "cw_queue_drain":
380
+ return (0, capability_core_1.queueDrain)((0, capability_core_1.runRegistryFor)(args, runner), args);
381
+ case "cw_queue_show":
382
+ return (0, capability_core_1.queueShow)((0, capability_core_1.runRegistryFor)(args, runner), String(args.id || ""));
383
+ case "cw_sched_plan":
384
+ return (0, capability_core_1.schedPlan)((0, capability_core_1.runRegistryFor)(args, runner), args);
385
+ case "cw_sched_lease":
386
+ return (0, capability_core_1.schedLease)((0, capability_core_1.runRegistryFor)(args, runner), args);
387
+ case "cw_sched_release":
388
+ return (0, capability_core_1.schedRelease)((0, capability_core_1.runRegistryFor)(args, runner), args);
389
+ case "cw_sched_complete":
390
+ return (0, capability_core_1.schedComplete)((0, capability_core_1.runRegistryFor)(args, runner), args);
391
+ case "cw_sched_reclaim":
392
+ return (0, capability_core_1.schedReclaim)((0, capability_core_1.runRegistryFor)(args, runner), args);
393
+ case "cw_sched_reset":
394
+ return (0, capability_core_1.schedReset)((0, capability_core_1.runRegistryFor)(args, runner), args);
395
+ case "cw_sched_policy_show":
396
+ return (0, capability_core_1.schedPolicyShow)((0, capability_core_1.runRegistryFor)(args, runner));
397
+ case "cw_sched_policy_set":
398
+ return (0, capability_core_1.schedPolicySet)((0, capability_core_1.runRegistryFor)(args, runner), args);
399
+ case "cw_gc_plan":
400
+ return (0, capability_core_1.gcPlan)((0, capability_core_1.runRegistryFor)(args, runner), (0, capability_core_1.optionalString)(args.runId), args);
401
+ case "cw_gc_run":
402
+ return (0, capability_core_1.gcRun)((0, capability_core_1.runRegistryFor)(args, runner), (0, capability_core_1.optionalString)(args.runId), args);
403
+ case "cw_gc_verify":
404
+ return (0, capability_core_1.gcVerify)((0, capability_core_1.runRegistryFor)(args, runner), String(args.runId || ""), args);
405
+ case "cw_telemetry_verify":
406
+ return (0, capability_core_1.telemetryVerify)(runner, args);
407
+ case "cw_history":
408
+ return (0, capability_core_1.runHistory)((0, capability_core_1.runRegistryFor)(args, runner), args);
409
+ case "cw_workbench_view":
410
+ return (0, workbench_1.buildWorkbenchRunView)(runner, String(args.runId || ""));
411
+ case "cw_workbench_serve":
412
+ // MCP cannot start a blocking server; it returns the descriptor only
413
+ // (identical to `cw workbench serve --json`). The CLI default additionally
414
+ // starts the localhost host — declared divergence (see capability-registry).
415
+ return (0, workbench_1.buildWorkbenchServeDescriptor)(runner, { ...args, once: true });
416
+ default:
417
+ throw new Error(`Unknown tool: ${name}`);
418
+ }
419
+ }
420
+ function resolveInvocationCwd(args) {
421
+ const value = (0, capability_core_1.optionalString)(args.cwd);
422
+ if (!value)
423
+ return undefined;
424
+ const resolved = node_path_1.default.resolve(value);
425
+ if (!node_fs_1.default.statSync(resolved).isDirectory())
426
+ throw new Error(`MCP cwd is not a directory: ${resolved}`);
427
+ return resolved;
428
+ }