cool-workflow 0.1.85 → 0.1.87
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/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/README.md +53 -332
- package/apps/architecture-review/app.json +1 -1
- package/apps/architecture-review-fast/app.json +1 -1
- package/apps/architecture-review-fast/workflow.js +2 -0
- package/apps/end-to-end-golden-path/app.json +1 -1
- package/apps/pr-review-fix-ci/app.json +1 -1
- package/apps/release-cut/app.json +1 -1
- package/apps/research-synthesis/app.json +1 -1
- package/dist/capability-core.js +131 -3
- package/dist/capability-registry.js +108 -50
- package/dist/cli/command-surface.js +83 -10
- package/dist/cli.js +2 -1
- package/dist/doctor.js +50 -5
- package/dist/execution-backend.js +8 -0
- package/dist/mcp/tool-call.js +428 -0
- package/dist/mcp/tool-definitions.js +1027 -0
- package/dist/mcp-surface.js +5 -1442
- package/dist/onramp.js +421 -0
- package/dist/operator-ux/format.js +21 -15
- package/dist/operator-ux.js +2 -1
- package/dist/orchestrator.js +190 -87
- package/dist/term.js +93 -0
- package/dist/version.js +1 -1
- package/dist/workbench-host.js +1 -8
- package/docs/agent-delegation-drive.7.md +45 -8
- package/docs/cli-mcp-parity.7.md +41 -6
- package/docs/contract-migration-tooling.7.md +6 -0
- package/docs/control-plane-scheduling.7.md +6 -0
- package/docs/dogfood-one-real-repo.7.md +9 -1
- package/docs/durable-state-and-locking.7.md +6 -0
- package/docs/evidence-adoption-reasoning-chain.7.md +6 -0
- package/docs/execution-backends.7.md +6 -0
- package/docs/getting-started.md +40 -2
- package/docs/index.md +51 -38
- package/docs/multi-agent-cli-mcp-surface.7.md +6 -0
- package/docs/multi-agent-eval-replay-harness.7.md +6 -0
- package/docs/multi-agent-operator-ux.7.md +6 -0
- package/docs/node-snapshot-diff-replay.7.md +6 -0
- package/docs/observability-cost-accounting.7.md +6 -0
- package/docs/project-index.md +24 -7
- package/docs/real-execution-backends.7.md +6 -0
- package/docs/release-and-migration.7.md +7 -1
- package/docs/release-history.md +352 -0
- package/docs/release-tooling.7.md +28 -0
- package/docs/run-registry-control-plane.7.md +6 -0
- package/docs/run-retention-reclamation.7.md +6 -0
- package/docs/state-explosion-management.7.md +6 -0
- package/docs/team-collaboration.7.md +6 -0
- package/docs/web-desktop-workbench.7.md +6 -0
- package/manifest/plugin.manifest.json +1 -1
- package/manifest/source-context-profiles.json +1 -1
- package/package.json +2 -1
- package/scripts/agents/agent-adapter-core.js +180 -0
- package/scripts/agents/builtin-templates.json +4 -1
- package/scripts/agents/codex-agent.js +134 -0
- package/scripts/agents/gemini-agent.js +115 -0
- package/scripts/agents/opencode-agent.js +119 -0
- package/scripts/architecture-review-fast.js +44 -2
- package/scripts/canonical-apps.js +4 -4
- package/scripts/dogfood-release.js +55 -133
- package/scripts/golden-path.js +4 -4
- package/scripts/onramp-check.js +47 -0
- package/scripts/parity-check.js +741 -2
- package/scripts/release-check.js +5 -3
- package/scripts/release-gate.sh +1 -1
- package/scripts/source-context.js +31 -5
- package/scripts/version-sync-check.js +4 -2
package/dist/doctor.js
CHANGED
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.runDoctor = runDoctor;
|
|
7
7
|
exports.formatDoctorReport = formatDoctorReport;
|
|
8
|
+
exports.formatDoctorFixes = formatDoctorFixes;
|
|
8
9
|
// `cw doctor` — environment diagnostics, in the spirit of `brew doctor`.
|
|
9
10
|
//
|
|
10
11
|
// Homebrew's `doctor` turned "something is subtly wrong with your setup" into a
|
|
@@ -25,6 +26,8 @@ const node_os_1 = __importDefault(require("node:os"));
|
|
|
25
26
|
const node_path_1 = __importDefault(require("node:path"));
|
|
26
27
|
const node_child_process_1 = require("node:child_process");
|
|
27
28
|
const agent_config_1 = require("./agent-config");
|
|
29
|
+
const onramp_1 = require("./onramp");
|
|
30
|
+
const term_1 = require("./term");
|
|
28
31
|
/** Resolve a bare binary name against $PATH (or accept an explicit path). Returns
|
|
29
32
|
* the resolved path, or undefined when not found. No spawning. */
|
|
30
33
|
function whichBinary(bin, env) {
|
|
@@ -136,18 +139,60 @@ function runDoctor(args = {}, env = process.env, cwd = process.cwd()) {
|
|
|
136
139
|
? "ready — all checks passed"
|
|
137
140
|
: `ready, with ${warns} warning${warns === 1 ? "" : "s"}`
|
|
138
141
|
: `${fails} blocking problem${fails === 1 ? "" : "s"} found`;
|
|
139
|
-
return {
|
|
142
|
+
return {
|
|
143
|
+
schemaVersion: 1,
|
|
144
|
+
ok,
|
|
145
|
+
checks,
|
|
146
|
+
summary,
|
|
147
|
+
...((0, onramp_1.optionEnabled)(args.onramp)
|
|
148
|
+
? { onramp: (0, onramp_1.buildDoctorOnramp)({ cwd, env, changedFrom: typeof args["changed-from"] === "string" ? args["changed-from"] : undefined }) }
|
|
149
|
+
: {})
|
|
150
|
+
};
|
|
140
151
|
}
|
|
141
152
|
/** Human rendering (TTY/default). `--json` callers use the report object directly. */
|
|
142
153
|
function formatDoctorReport(report) {
|
|
143
|
-
const
|
|
144
|
-
const lines = ["cw doctor"];
|
|
154
|
+
const lines = [(0, term_1.bold)("cw doctor")];
|
|
145
155
|
for (const check of report.checks) {
|
|
146
|
-
lines.push(` ${
|
|
156
|
+
lines.push(` ${(0, term_1.doctorGlyph)(check.status)} ${check.name}: ${check.detail}`);
|
|
147
157
|
if (check.fix && check.status !== "ok")
|
|
148
158
|
lines.push(` fix: ${check.fix}`);
|
|
149
159
|
}
|
|
150
160
|
lines.push("");
|
|
151
|
-
|
|
161
|
+
const summaryGlyph = report.ok ? (0, term_1.green)("✓") : (0, term_1.red)("✗");
|
|
162
|
+
lines.push(`${summaryGlyph} ${report.summary}`);
|
|
163
|
+
if (report.onramp) {
|
|
164
|
+
lines.push("");
|
|
165
|
+
lines.push("Onramp");
|
|
166
|
+
lines.push(` ${report.onramp.summary}`);
|
|
167
|
+
if (report.onramp.recommendedChecks) {
|
|
168
|
+
lines.push("");
|
|
169
|
+
lines.push(" Recommended Checks");
|
|
170
|
+
for (const command of report.onramp.recommendedChecks.commands)
|
|
171
|
+
lines.push(` - ${command}`);
|
|
172
|
+
}
|
|
173
|
+
if (report.onramp.contract && !report.onramp.contract.ok) {
|
|
174
|
+
lines.push("");
|
|
175
|
+
lines.push(" Contract Issues");
|
|
176
|
+
for (const issue of report.onramp.contract.issues) {
|
|
177
|
+
lines.push(` - ${issue.code}: ${issue.detail}`);
|
|
178
|
+
lines.push(` fix: ${issue.fix}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
for (const section of report.onramp.sections) {
|
|
182
|
+
lines.push("");
|
|
183
|
+
lines.push(` ${section.title}: ${section.summary}`);
|
|
184
|
+
for (const action of section.actions) {
|
|
185
|
+
lines.push(` - ${action.command}`);
|
|
186
|
+
lines.push(` ${action.reason}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
152
190
|
return lines.join("\n");
|
|
153
191
|
}
|
|
192
|
+
/** `--fix` rendering: consolidates all fix strings into an actionable block. */
|
|
193
|
+
function formatDoctorFixes(report) {
|
|
194
|
+
const fixes = report.checks.filter((c) => c.fix && c.status !== "ok").map((c) => c.fix);
|
|
195
|
+
if (!fixes.length)
|
|
196
|
+
return "No fixes needed.";
|
|
197
|
+
return [(0, term_1.bold)("Fix Commands"), ...fixes.map((f, i) => ` ${i + 1}. ${f}`), ""].join("\n");
|
|
198
|
+
}
|
|
@@ -411,9 +411,17 @@ function executeLocal(descriptor, policy, request, label, attestation) {
|
|
|
411
411
|
// shell backend runs via /bin/sh -c; node/bun run the command directly
|
|
412
412
|
// (bun is Node-compatible by default so evidence stays byte-stable with node).
|
|
413
413
|
// spawnStyle comes from the registered driver, not a hardcoded id check.
|
|
414
|
+
const isTTY = process.stderr.isTTY;
|
|
415
|
+
const shortLabel = command.split("/").pop() || command;
|
|
416
|
+
if (isTTY)
|
|
417
|
+
process.stderr.write(`● Running ${shortLabel}...\n`);
|
|
418
|
+
const startedAt = process.hrtime.bigint();
|
|
414
419
|
const result = getBackendDriver(descriptor.id)?.spawnStyle === "shell"
|
|
415
420
|
? (0, node_child_process_1.spawnSync)([command, ...args].join(" "), { ...options, shell: true })
|
|
416
421
|
: (0, node_child_process_1.spawnSync)(command, args, { ...options, shell: false });
|
|
422
|
+
const elapsedMs = Number((process.hrtime.bigint() - startedAt) / 1000000n);
|
|
423
|
+
if (isTTY)
|
|
424
|
+
process.stderr.write(`✓ Done (${elapsedMs}ms)\n`);
|
|
417
425
|
const exitCode = typeof result.status === "number" ? result.status : null;
|
|
418
426
|
const spawnError = result.error ? (0, util_1.messageOf)(result.error) : undefined;
|
|
419
427
|
const stdout = String(result.stdout || "");
|
|
@@ -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
|
+
}
|