cool-workflow 0.1.97 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/README.md +11 -2
- package/apps/architecture-review/app.json +1 -1
- package/apps/architecture-review-fast/app.json +1 -1
- 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/cli/dispatch.js +236 -0
- package/dist/cli/entry.js +120 -0
- package/dist/cli/io.js +21 -4
- package/dist/cli/parseargv.js +157 -0
- package/dist/cli.js +6 -33
- package/dist/core/capability-table.js +3534 -0
- package/dist/core/format/help.js +314 -0
- package/dist/{state-explosion/format.js → core/format/state-explosion-text.js} +10 -1
- package/dist/core/hash.js +137 -0
- package/dist/core/multi-agent/candidate-scoring.js +219 -0
- package/dist/core/multi-agent/collaboration.js +481 -0
- package/dist/core/multi-agent/coordinator.js +515 -0
- package/dist/core/multi-agent/eval-replay.js +306 -0
- package/dist/core/multi-agent/runtime.js +929 -0
- package/dist/core/multi-agent/topology.js +298 -0
- package/dist/core/multi-agent/trust-policy.js +197 -0
- package/dist/core/pipeline/commit-gate.js +320 -0
- package/dist/{pipeline-contract.js → core/pipeline/contract.js} +24 -37
- package/dist/core/pipeline/dispatch.js +103 -0
- package/dist/core/pipeline/drive-decide.js +227 -0
- package/dist/core/pipeline/error-feedback.js +161 -0
- package/dist/core/pipeline/loop-expansion.js +124 -0
- package/dist/{result-normalize.js → core/pipeline/result-normalize.js} +14 -37
- package/dist/core/pipeline/runner.js +230 -0
- package/dist/{contract-migration.js → core/state/contract-migration.js} +68 -92
- package/dist/{state-migrations.js → core/state/migrations.js} +103 -96
- package/dist/core/state/node-projection.js +95 -0
- package/dist/core/state/node-snapshot.js +230 -0
- package/dist/core/state/run-paths.js +93 -0
- package/dist/{schema-validate.js → core/state/schema-validate.js} +35 -28
- package/dist/core/state/schema.js +50 -0
- package/dist/core/state/state-explosion/digest.js +243 -0
- package/dist/core/state/state-explosion/graph.js +527 -0
- package/dist/{state-explosion → core/state/state-explosion}/helpers.js +34 -3
- package/dist/core/state/state-explosion/report.js +187 -0
- package/dist/{state-explosion → core/state/state-explosion}/size.js +25 -7
- package/dist/{state-node.js → core/state/state-node.js} +90 -113
- package/dist/core/state/types.js +19 -0
- package/dist/{validation.js → core/state/validation.js} +64 -131
- package/dist/core/trust/evidence-grounding.js +134 -0
- package/dist/core/trust/ledger.js +199 -0
- package/dist/{telemetry-attestation.js → core/trust/telemetry-attestation.js} +94 -68
- package/dist/core/trust/telemetry-ledger.js +127 -0
- package/dist/core/types.js +20 -0
- package/dist/core/version.js +16 -0
- package/dist/{workflow-app-framework.js → core/workflow-apps/app-schema.js} +337 -426
- package/dist/mcp/dispatch.js +104 -0
- package/dist/mcp/server.js +144 -0
- package/dist/mcp-server.js +6 -84
- package/dist/{agent-config.js → shell/agent-config.js} +118 -71
- package/dist/shell/app-run-cli.js +88 -0
- package/dist/shell/audit-cli.js +259 -0
- package/dist/shell/audit-provenance.js +83 -0
- package/dist/shell/candidate-scoring-io.js +459 -0
- package/dist/shell/collaboration-io.js +264 -0
- package/dist/shell/commit-summary.js +104 -0
- package/dist/shell/commit.js +290 -0
- package/dist/shell/coordinator-io.js +476 -0
- package/dist/shell/demo-cli.js +19 -0
- package/dist/shell/dispatch.js +162 -0
- package/dist/{doctor.js → shell/doctor.js} +123 -56
- package/dist/shell/drive.js +873 -0
- package/dist/shell/error-feedback-io.js +305 -0
- package/dist/shell/eval-io.js +473 -0
- package/dist/{multi-agent-eval/format.js → shell/eval-text.js} +78 -49
- package/dist/{evidence-reasoning.js → shell/evidence-reasoning.js} +124 -255
- package/dist/shell/exec-backend-cli.js +88 -0
- package/dist/shell/execution-backend/agent.js +475 -0
- package/dist/shell/execution-backend/ci.js +15 -0
- package/dist/shell/execution-backend/container.js +69 -0
- package/dist/shell/execution-backend/envelopes.js +55 -0
- package/dist/shell/execution-backend/local.js +113 -0
- package/dist/shell/execution-backend/probes.js +175 -0
- package/dist/shell/execution-backend/registry.js +402 -0
- package/dist/shell/execution-backend/remote.js +128 -0
- package/dist/shell/execution-backend/types.js +11 -0
- package/dist/shell/feedback-cli.js +81 -0
- package/dist/shell/feedback-operations.js +48 -0
- package/dist/shell/fs-atomic.js +276 -0
- package/dist/shell/harness.js +98 -0
- package/dist/shell/ledger-cli.js +212 -0
- package/dist/shell/ledger-io.js +169 -0
- package/dist/shell/man-cli.js +89 -0
- package/dist/shell/metrics-cli.js +98 -0
- package/dist/shell/multi-agent-cli.js +1002 -0
- package/dist/shell/multi-agent-host.js +563 -0
- package/dist/shell/multi-agent-io.js +387 -0
- package/dist/{multi-agent-operator-ux.js → shell/multi-agent-operator-ux.js} +234 -191
- package/dist/shell/node-store.js +124 -0
- package/dist/{observability/format.js → shell/observability-format.js} +7 -1
- package/dist/{observability/intake.js → shell/observability-intake.js} +79 -56
- package/dist/{observability.js → shell/observability.js} +159 -332
- package/dist/{onramp.js → shell/onramp.js} +11 -0
- package/dist/{operator-ux/format.js → shell/operator-ux-text.js} +250 -239
- package/dist/shell/operator-ux.js +431 -0
- package/dist/shell/orchestrator.js +231 -0
- package/dist/shell/pipeline-cli.js +667 -0
- package/dist/shell/pipeline.js +217 -0
- package/dist/shell/reclamation-io.js +1366 -0
- package/dist/shell/registry-cli.js +329 -0
- package/dist/{remote-source.js → shell/remote-source.js} +12 -5
- package/dist/shell/report-cli.js +101 -0
- package/dist/shell/report-view-cli.js +117 -0
- package/dist/{orchestrator → shell}/report.js +289 -282
- package/dist/shell/reporter.js +62 -0
- package/dist/shell/run-export-cli.js +106 -0
- package/dist/shell/run-export.js +680 -0
- package/dist/shell/run-registry-io.js +1014 -0
- package/dist/shell/run-store.js +164 -0
- package/dist/{sandbox-profile.js → shell/sandbox-profile.js} +134 -95
- package/dist/{scheduler.js → shell/scheduler-io.js} +248 -48
- package/dist/shell/scheduling-io.js +311 -0
- package/dist/shell/state-cli.js +181 -0
- package/dist/shell/state-explosion-cli.js +197 -0
- package/dist/shell/telemetry-cli.js +85 -0
- package/dist/{telemetry-demo.js → shell/telemetry-demo.js} +149 -119
- package/dist/shell/telemetry-ledger-io.js +132 -0
- package/dist/{term.js → shell/term.js} +36 -46
- package/dist/shell/topology-io.js +361 -0
- package/dist/shell/trust-audit.js +471 -0
- package/dist/{multi-agent-trust.js → shell/trust-policy-io.js} +67 -205
- package/dist/shell/verifier.js +48 -0
- package/dist/shell/workbench-host.js +250 -0
- package/dist/shell/workbench-text.js +18 -0
- package/dist/shell/workbench.js +175 -0
- package/dist/shell/worker-cli.js +124 -0
- package/dist/shell/worker-isolation.js +852 -0
- package/dist/shell/workflow-app-loader.js +650 -0
- package/docs/agent-delegation-drive.7.md +4 -0
- package/docs/cli-mcp-parity.7.md +284 -211
- package/docs/contract-migration-tooling.7.md +4 -0
- package/docs/control-plane-scheduling.7.md +4 -0
- package/docs/cross-agent-ledger.7.md +217 -0
- package/docs/designs/handoff-ledger.md +145 -0
- package/docs/durable-state-and-locking.7.md +4 -0
- package/docs/evidence-adoption-reasoning-chain.7.md +4 -0
- package/docs/execution-backends.7.md +4 -0
- package/docs/handoff-setup.md +120 -0
- package/docs/multi-agent-cli-mcp-surface.7.md +4 -0
- package/docs/multi-agent-eval-replay-harness.7.md +4 -0
- package/docs/multi-agent-operator-ux.7.md +4 -0
- package/docs/node-snapshot-diff-replay.7.md +4 -0
- package/docs/observability-cost-accounting.7.md +4 -0
- package/docs/project-index.md +143 -71
- package/docs/real-execution-backends.7.md +4 -0
- package/docs/release-and-migration.7.md +4 -0
- package/docs/release-tooling.7.md +4 -0
- package/docs/run-registry-control-plane.7.md +4 -0
- package/docs/run-retention-reclamation.7.md +25 -0
- package/docs/state-explosion-management.7.md +4 -0
- package/docs/team-collaboration.7.md +4 -0
- package/docs/web-desktop-workbench.7.md +4 -0
- package/manifest/plugin.manifest.json +1 -1
- package/manifest/source-context-profiles.json +9 -13
- package/package.json +1 -1
- package/scripts/agents/codex-agent.js +34 -4
- package/scripts/agents/cw-attest-wrap.js +2 -2
- package/scripts/bump-version.js +4 -3
- package/scripts/canonical-apps.js +4 -4
- package/scripts/children/batch-delegate-child.js +30 -10
- package/scripts/dogfood-architecture-review.js +2 -3
- package/scripts/dogfood-release.js +3 -3
- package/scripts/gen-parity-doc.js +15 -2
- package/scripts/golden-path.js +4 -4
- package/scripts/onramp-check.js +1 -1
- package/scripts/parity-check.js +38 -21
- package/scripts/release-flow.js +9 -3
- package/scripts/sync-project-index.js +51 -27
- package/scripts/validate-run-state-schema.js +2 -2
- package/scripts/version-sync-check.js +30 -30
- package/dist/candidate-scoring.js +0 -729
- package/dist/capability-core.js +0 -1186
- package/dist/capability-registry.js +0 -879
- package/dist/cli/command-surface.js +0 -490
- package/dist/cli/format.js +0 -56
- package/dist/cli/handlers/audit.js +0 -82
- package/dist/cli/handlers/blackboard.js +0 -81
- package/dist/cli/handlers/candidate.js +0 -40
- package/dist/cli/handlers/clones.js +0 -34
- package/dist/cli/handlers/collaboration.js +0 -61
- package/dist/cli/handlers/eval.js +0 -40
- package/dist/cli/handlers/maintenance.js +0 -107
- package/dist/cli/handlers/multi-agent.js +0 -165
- package/dist/cli/handlers/node.js +0 -41
- package/dist/cli/handlers/operational.js +0 -155
- package/dist/cli/handlers/operator.js +0 -146
- package/dist/cli/handlers/registry.js +0 -68
- package/dist/cli/handlers/run.js +0 -153
- package/dist/cli/handlers/scheduling.js +0 -132
- package/dist/cli/handlers/workbench.js +0 -41
- package/dist/cli/handlers/worker.js +0 -45
- package/dist/cli/run-summary.js +0 -45
- package/dist/clones.js +0 -162
- package/dist/collaboration.js +0 -726
- package/dist/commit.js +0 -592
- package/dist/compare.js +0 -18
- package/dist/coordinator/classify.js +0 -45
- package/dist/coordinator/paths.js +0 -42
- package/dist/coordinator/util.js +0 -126
- package/dist/coordinator.js +0 -990
- package/dist/daemon.js +0 -44
- package/dist/dispatch.js +0 -250
- package/dist/drive.js +0 -827
- package/dist/error-feedback.js +0 -419
- package/dist/evidence-grounding.js +0 -184
- package/dist/execution-backend/agent.js +0 -294
- package/dist/execution-backend/probes.js +0 -112
- package/dist/execution-backend/util.js +0 -47
- package/dist/execution-backend.js +0 -961
- package/dist/gates.js +0 -48
- package/dist/harness.js +0 -61
- package/dist/loop-expansion.js +0 -60
- package/dist/mcp/tool-call.js +0 -434
- package/dist/mcp/tool-definitions.js +0 -1040
- package/dist/mcp-surface.js +0 -30
- package/dist/multi-agent/graph.js +0 -84
- package/dist/multi-agent/helpers.js +0 -141
- package/dist/multi-agent/ids.js +0 -20
- package/dist/multi-agent/paths.js +0 -22
- package/dist/multi-agent-eval/normalize.js +0 -51
- package/dist/multi-agent-eval.js +0 -678
- package/dist/multi-agent-host.js +0 -777
- package/dist/multi-agent.js +0 -984
- package/dist/node-projection.js +0 -59
- package/dist/node-snapshot.js +0 -260
- package/dist/operator-ux.js +0 -631
- package/dist/orchestrator/app-operations.js +0 -211
- package/dist/orchestrator/audit-operations.js +0 -182
- package/dist/orchestrator/candidate-operations.js +0 -117
- package/dist/orchestrator/cli-options.js +0 -294
- package/dist/orchestrator/collaboration-operations.js +0 -86
- package/dist/orchestrator/feedback-operations.js +0 -81
- package/dist/orchestrator/host-operations.js +0 -78
- package/dist/orchestrator/lifecycle-operations.js +0 -626
- package/dist/orchestrator/migration-operations.js +0 -44
- package/dist/orchestrator/multi-agent-operations.js +0 -362
- package/dist/orchestrator/topology-operations.js +0 -84
- package/dist/orchestrator.js +0 -917
- package/dist/pipeline-runner.js +0 -285
- package/dist/reclamation/hash.js +0 -72
- package/dist/reclamation.js +0 -812
- package/dist/reporter.js +0 -67
- package/dist/run-export.js +0 -784
- package/dist/run-registry/derive.js +0 -175
- package/dist/run-registry/format.js +0 -124
- package/dist/run-registry/gc.js +0 -251
- package/dist/run-registry/policy.js +0 -16
- package/dist/run-registry/queue.js +0 -115
- package/dist/run-registry.js +0 -850
- package/dist/run-state-schema.js +0 -68
- package/dist/scheduling.js +0 -184
- package/dist/state-explosion.js +0 -1014
- package/dist/state.js +0 -367
- package/dist/telemetry-ledger.js +0 -196
- package/dist/topology.js +0 -565
- package/dist/triggers.js +0 -184
- package/dist/trust-audit.js +0 -644
- package/dist/types/blackboard.js +0 -2
- package/dist/types/candidate.js +0 -2
- package/dist/types/collaboration.js +0 -2
- package/dist/types/core.js +0 -2
- package/dist/types/drive.js +0 -10
- package/dist/types/error-feedback.js +0 -2
- package/dist/types/evidence-reasoning.js +0 -2
- package/dist/types/execution-backend.js +0 -2
- package/dist/types/multi-agent.js +0 -2
- package/dist/types/observability.js +0 -2
- package/dist/types/pipeline.js +0 -2
- package/dist/types/reclamation.js +0 -8
- package/dist/types/report-bundle.js +0 -6
- package/dist/types/result.js +0 -2
- package/dist/types/run-registry.js +0 -2
- package/dist/types/run.js +0 -2
- package/dist/types/sandbox.js +0 -2
- package/dist/types/schedule.js +0 -2
- package/dist/types/state-node.js +0 -2
- package/dist/types/topology.js +0 -2
- package/dist/types/trust.js +0 -2
- package/dist/types/workbench.js +0 -2
- package/dist/types/worker.js +0 -2
- package/dist/types/workflow-app.js +0 -2
- package/dist/types.js +0 -44
- package/dist/util/fingerprint.js +0 -19
- package/dist/util/fingerprint.test.js +0 -27
- package/dist/verifier.js +0 -78
- package/dist/version.js +0 -8
- package/dist/workbench-host.js +0 -182
- package/dist/workbench.js +0 -192
- package/dist/worker-accept/acceptance.js +0 -114
- package/dist/worker-accept/blackboard-fanout.js +0 -80
- package/dist/worker-accept/blackboard-linkage.js +0 -19
- package/dist/worker-accept/context.js +0 -2
- package/dist/worker-accept/telemetry-ledger.js +0 -126
- package/dist/worker-accept/validation.js +0 -77
- package/dist/worker-accept/verifier-completion.js +0 -73
- package/dist/worker-isolation/helpers.js +0 -51
- package/dist/worker-isolation/paths.js +0 -46
- package/dist/worker-isolation.js +0 -656
- package/dist/workflow-api.js +0 -131
- /package/dist/{types → core/types}/boundary.js +0 -0
|
@@ -8,13 +8,19 @@
|
|
|
8
8
|
//
|
|
9
9
|
// Reads jobs JSON on stdin, spawns ALL concurrently (shell:false, inherited env —
|
|
10
10
|
// the agent's own credentials resolve; CW never reads them), per-job SIGTERM at
|
|
11
|
-
// timeoutMs + SIGKILL at +5s, caps each captured stdout at 32MB
|
|
12
|
-
//
|
|
13
|
-
//
|
|
11
|
+
// timeoutMs + SIGKILL at +5s, caps each captured stdout at 32MB. Streams ONE
|
|
12
|
+
// NDJSON line per job — `{i, spawnError?, exitCode, stdout}\n` — the INSTANT
|
|
13
|
+
// that job settles (not once at the end): the parent's spawnSync call has its
|
|
14
|
+
// own combined-output cap, so writing incrementally means a job whose line
|
|
15
|
+
// already flushed keeps its real outcome even if a LATER job's output pushes
|
|
16
|
+
// the combined stream over that cap and the whole child gets killed. `i` is
|
|
17
|
+
// the job's index (settle order is concurrent, not submission order — the
|
|
18
|
+
// parent cannot infer which line belongs to which job without it). stderr is
|
|
19
|
+
// drained (a full pipe must never wedge a child). A kill yields exitCode null
|
|
20
|
+
// — the no-exit-code refusal.
|
|
14
21
|
//
|
|
15
22
|
// THE RED LINE: this child only `spawn`s the operator-resolved agent binary with
|
|
16
|
-
// shell:false. It imports NO model SDK and reads NO credentials.
|
|
17
|
-
// stay byte-identical to the previous embedded string.
|
|
23
|
+
// shell:false. It imports NO model SDK and reads NO credentials.
|
|
18
24
|
|
|
19
25
|
const { spawn } = require("node:child_process");
|
|
20
26
|
let raw = "";
|
|
@@ -30,17 +36,16 @@ process.stdin.on("end", () => {
|
|
|
30
36
|
return;
|
|
31
37
|
}
|
|
32
38
|
if (!jobs.length) { process.stdout.write("[]"); return; }
|
|
33
|
-
const out = new Array(jobs.length);
|
|
34
|
-
let pending = jobs.length;
|
|
35
39
|
const CAP = 32 * 1024 * 1024;
|
|
36
40
|
jobs.forEach((job, i) => {
|
|
37
41
|
let stdout = "";
|
|
42
|
+
let stdoutBytes = 0;
|
|
43
|
+
let stdoutTruncated = false;
|
|
38
44
|
let settled = false;
|
|
39
45
|
const settle = (o) => {
|
|
40
46
|
if (settled) return;
|
|
41
47
|
settled = true;
|
|
42
|
-
|
|
43
|
-
if (--pending === 0) process.stdout.write(JSON.stringify(out));
|
|
48
|
+
process.stdout.write(JSON.stringify({ i, ...o }) + "\n");
|
|
44
49
|
};
|
|
45
50
|
let child;
|
|
46
51
|
try {
|
|
@@ -51,7 +56,18 @@ process.stdin.on("end", () => {
|
|
|
51
56
|
}
|
|
52
57
|
const term = setTimeout(() => { try { child.kill("SIGTERM"); } catch {} }, job.timeoutMs);
|
|
53
58
|
const kill = setTimeout(() => { try { child.kill("SIGKILL"); } catch {} }, job.timeoutMs + 5000);
|
|
54
|
-
child.stdout.on("data", (d) => {
|
|
59
|
+
child.stdout.on("data", (d) => {
|
|
60
|
+
const chunk = Buffer.isBuffer(d) ? d : Buffer.from(String(d));
|
|
61
|
+
stdoutBytes += chunk.length;
|
|
62
|
+
if (stdoutTruncated) return;
|
|
63
|
+
const remaining = CAP - Buffer.byteLength(stdout);
|
|
64
|
+
if (remaining <= 0 || chunk.length > remaining) {
|
|
65
|
+
stdoutTruncated = true;
|
|
66
|
+
if (remaining > 0) stdout += chunk.subarray(0, remaining).toString();
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
stdout += chunk.toString();
|
|
70
|
+
});
|
|
55
71
|
child.stderr.on("data", () => {});
|
|
56
72
|
child.on("error", (error) => {
|
|
57
73
|
clearTimeout(term); clearTimeout(kill);
|
|
@@ -59,6 +75,10 @@ process.stdin.on("end", () => {
|
|
|
59
75
|
});
|
|
60
76
|
child.on("close", (code) => {
|
|
61
77
|
clearTimeout(term); clearTimeout(kill);
|
|
78
|
+
if (stdoutTruncated) {
|
|
79
|
+
settle({ spawnError: `stdout exceeded ${CAP} byte cap (${stdoutBytes} bytes)`, exitCode: null, stdout: "" });
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
62
82
|
settle({ exitCode: typeof code === "number" ? code : null, stdout });
|
|
63
83
|
});
|
|
64
84
|
});
|
|
@@ -23,9 +23,8 @@ const os = require("node:os");
|
|
|
23
23
|
const path = require("node:path");
|
|
24
24
|
|
|
25
25
|
const pluginRoot = path.resolve(__dirname, "..");
|
|
26
|
-
const { CoolWorkflowRunner } = require(path.join(pluginRoot, "dist/orchestrator.js"));
|
|
27
|
-
const {
|
|
28
|
-
const { resolveAgentConfig } = require(path.join(pluginRoot, "dist/agent-config.js"));
|
|
26
|
+
const { CoolWorkflowRunner, drive } = require(path.join(pluginRoot, "dist/shell/orchestrator.js"));
|
|
27
|
+
const { resolveAgentConfig } = require(path.join(pluginRoot, "dist/shell/agent-config.js"));
|
|
29
28
|
|
|
30
29
|
const argv = process.argv.slice(2);
|
|
31
30
|
const flags = new Set(argv.filter((a) => a.startsWith("--")));
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
const { spawnSync } = require("node:child_process");
|
|
5
5
|
const fs = require("node:fs");
|
|
6
6
|
const path = require("node:path");
|
|
7
|
-
const { CoolWorkflowRunner } = require("../dist/orchestrator.js");
|
|
7
|
+
const { CoolWorkflowRunner } = require("../dist/shell/orchestrator.js");
|
|
8
8
|
|
|
9
|
-
const TARGET_VERSION = "0.
|
|
9
|
+
const TARGET_VERSION = "0.2.0";
|
|
10
10
|
const PREVIOUS_VERSION = "0.1.31";
|
|
11
11
|
const pluginRoot = path.resolve(__dirname, "..");
|
|
12
12
|
const repoRoot = path.resolve(pluginRoot, "..", "..");
|
|
@@ -269,7 +269,7 @@ function commandsForTask(taskId, context) {
|
|
|
269
269
|
"-e",
|
|
270
270
|
[
|
|
271
271
|
releaseSourceReaderSnippet(),
|
|
272
|
-
"for (const f of ['plugins/cool-workflow/package.json','plugins/cool-workflow/src/version.ts','CHANGELOG.md','RELEASE.md']) {",
|
|
272
|
+
"for (const f of ['plugins/cool-workflow/package.json','plugins/cool-workflow/src/core/version.ts','CHANGELOG.md','RELEASE.md']) {",
|
|
273
273
|
" const t=readSurface(f);",
|
|
274
274
|
` if (t===null) throw new Error(f+' missing from release commit');`,
|
|
275
275
|
` if (!t.includes('${TARGET_VERSION}')) throw new Error(f+' missing ${TARGET_VERSION}');`,
|
|
@@ -22,7 +22,13 @@ const pluginRoot = path.resolve(__dirname, "..");
|
|
|
22
22
|
const DOC = path.join(pluginRoot, "docs", "cli-mcp-parity.7.md");
|
|
23
23
|
const CHECK = process.argv.includes("--check");
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
// v2 repoint: the flat dist/capability-registry.js is gone. The single
|
|
26
|
+
// source of truth is now core/capability-table's REGISTRY (same row shape:
|
|
27
|
+
// capability, surface, cli, mcp, payloadIdentical, reason, entry, ...),
|
|
28
|
+
// exported under the old name too (CAPABILITY_REGISTRY = REGISTRY, an
|
|
29
|
+
// alias declared in capability-table.ts for callers written against the
|
|
30
|
+
// old name).
|
|
31
|
+
const { CAPABILITY_REGISTRY } = require(path.join(pluginRoot, "dist", "core", "capability-table.js"));
|
|
26
32
|
|
|
27
33
|
const NUM_WORDS = ["Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve"];
|
|
28
34
|
const numWord = (n) => NUM_WORDS[n] || String(n);
|
|
@@ -41,6 +47,13 @@ function payload(cap) {
|
|
|
41
47
|
if (cap.surface !== "both") return cap.surface;
|
|
42
48
|
return cap.payloadIdentical === false ? "projected" : "identical";
|
|
43
49
|
}
|
|
50
|
+
// v2 adapt: this table's `entry` field is only set where a row names its
|
|
51
|
+
// shared core entry explicitly (most rows do not yet, unlike the old flat
|
|
52
|
+
// registry where every row named one). Fall back to the capability id
|
|
53
|
+
// itself so the doc table never prints a literal "undefined".
|
|
54
|
+
function coreEntry(cap) {
|
|
55
|
+
return cap.entry || cap.capability;
|
|
56
|
+
}
|
|
44
57
|
|
|
45
58
|
function buildCount() {
|
|
46
59
|
const caps = CAPABILITY_REGISTRY.length;
|
|
@@ -54,7 +67,7 @@ function buildTable() {
|
|
|
54
67
|
"| --- | --- | --- | --- | --- | --- |"
|
|
55
68
|
];
|
|
56
69
|
for (const cap of CAPABILITY_REGISTRY) {
|
|
57
|
-
lines.push(`| \`${cap.capability}\` | \`${cliCommand(cap)}\` | \`${mcpTool(cap)}\` | \`${cap
|
|
70
|
+
lines.push(`| \`${cap.capability}\` | \`${cliCommand(cap)}\` | \`${mcpTool(cap)}\` | \`${coreEntry(cap)}\` | ${payload(cap) === "cli-only" || cap.surface !== "both" ? cap.surface : "both"} | ${payload(cap)} |`);
|
|
58
71
|
}
|
|
59
72
|
return lines.join("\n");
|
|
60
73
|
}
|
package/scripts/golden-path.js
CHANGED
|
@@ -33,7 +33,7 @@ function main() {
|
|
|
33
33
|
const appValidation = runJson(["app", "validate", "end-to-end-golden-path"], pluginRoot);
|
|
34
34
|
assert.equal(appValidation.valid, true);
|
|
35
35
|
assert.equal(appValidation.summary.id, "end-to-end-golden-path");
|
|
36
|
-
assert.equal(appValidation.summary.version, "0.
|
|
36
|
+
assert.equal(appValidation.summary.version, "0.2.0");
|
|
37
37
|
|
|
38
38
|
const plan = runJson(
|
|
39
39
|
[
|
|
@@ -42,7 +42,7 @@ function main() {
|
|
|
42
42
|
"--repo",
|
|
43
43
|
tmp,
|
|
44
44
|
"--question",
|
|
45
|
-
"Prove the deterministic v0.
|
|
45
|
+
"Prove the deterministic v0.2.0 end-to-end golden path."
|
|
46
46
|
],
|
|
47
47
|
pluginRoot
|
|
48
48
|
);
|
|
@@ -52,7 +52,7 @@ function main() {
|
|
|
52
52
|
|
|
53
53
|
let state = readJson(plan.statePath);
|
|
54
54
|
assert.equal(state.workflow.app.id, "end-to-end-golden-path");
|
|
55
|
-
assert.equal(state.workflow.app.version, "0.
|
|
55
|
+
assert.equal(state.workflow.app.version, "0.2.0");
|
|
56
56
|
assert.equal(state.loopStage, "interpret");
|
|
57
57
|
|
|
58
58
|
const dispatch = runJson(["dispatch", plan.runId, "--limit", "1", "--sandbox", "readonly"], tmp);
|
|
@@ -195,7 +195,7 @@ function main() {
|
|
|
195
195
|
assert.equal(reportPath, plan.reportPath);
|
|
196
196
|
assert.ok(fs.existsSync(reportPath));
|
|
197
197
|
const report = fs.readFileSync(reportPath, "utf8");
|
|
198
|
-
assert.match(report, /Workflow App: end-to-end-golden-path@0\.
|
|
198
|
+
assert.match(report, /Workflow App: end-to-end-golden-path@0\.2\.0/);
|
|
199
199
|
assert.match(report, /## Candidates/);
|
|
200
200
|
assert.match(report, /## Trust Audit/);
|
|
201
201
|
assert.match(report, /## Acceptance Rationale/);
|
package/scripts/onramp-check.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
// source/app/script changes need an iteration-log row.
|
|
7
7
|
|
|
8
8
|
const path = require("node:path");
|
|
9
|
-
const { evaluateOnrampContract, resolveChangedFiles } = require("../dist/onramp.js");
|
|
9
|
+
const { evaluateOnrampContract, resolveChangedFiles } = require("../dist/shell/onramp.js");
|
|
10
10
|
|
|
11
11
|
const pluginRoot = path.resolve(__dirname, "..");
|
|
12
12
|
|
package/scripts/parity-check.js
CHANGED
|
@@ -15,8 +15,16 @@
|
|
|
15
15
|
// `cw <cmd> --json` payload must equal the `cw_<tool>` MCP result on a real
|
|
16
16
|
// bootstrap run (whitespace + generation-moment ISO timestamps aside).
|
|
17
17
|
//
|
|
18
|
-
// The registry (src/capability-
|
|
19
|
-
// the single source of truth; this script never re-declares capabilities.
|
|
18
|
+
// The registry (src/core/capability-table.ts -> dist/core/capability-table.js)
|
|
19
|
+
// is the single source of truth; this script never re-declares capabilities.
|
|
20
|
+
//
|
|
21
|
+
// v2 repoint: the old flat dist/capability-registry.js, dist/orchestrator.js,
|
|
22
|
+
// dist/state.js, dist/state-node.js are gone. Each function this script
|
|
23
|
+
// actually calls now lives in its v2 core/shell home:
|
|
24
|
+
// - registry (capability + parity planning data) -> core/capability-table.js
|
|
25
|
+
// - formatHelp -> core/format/help.js
|
|
26
|
+
// - loadRunFromCwd, saveCheckpoint -> shell/run-store.js
|
|
27
|
+
// - appendRunNode, createStateNode -> core/state/state-node.js
|
|
20
28
|
|
|
21
29
|
const assert = require("node:assert/strict");
|
|
22
30
|
const { execFileSync, spawn } = require("node:child_process");
|
|
@@ -29,10 +37,10 @@ const pluginRoot = path.resolve(__dirname, "..");
|
|
|
29
37
|
const node = process.execPath;
|
|
30
38
|
const cli = path.join(pluginRoot, "dist", "cli.js");
|
|
31
39
|
const mcpServer = path.join(pluginRoot, "dist", "mcp-server.js");
|
|
32
|
-
const registry = require(path.join(pluginRoot, "dist", "capability-
|
|
33
|
-
const { formatHelp } = require(path.join(pluginRoot, "dist", "
|
|
34
|
-
const { loadRunFromCwd, saveCheckpoint } = require(path.join(pluginRoot, "dist", "
|
|
35
|
-
const { appendRunNode, createStateNode } = require(path.join(pluginRoot, "dist", "state-node.js"));
|
|
40
|
+
const registry = require(path.join(pluginRoot, "dist", "core", "capability-table.js"));
|
|
41
|
+
const { formatHelp } = require(path.join(pluginRoot, "dist", "core", "format", "help.js"));
|
|
42
|
+
const { loadRunFromCwd, saveCheckpoint } = require(path.join(pluginRoot, "dist", "shell", "run-store.js"));
|
|
43
|
+
const { appendRunNode, createStateNode } = require(path.join(pluginRoot, "dist", "core", "state", "state-node.js"));
|
|
36
44
|
|
|
37
45
|
function capById(id) {
|
|
38
46
|
const cap = registry.CAPABILITY_REGISTRY.find((entry) => entry.capability === id);
|
|
@@ -64,21 +72,20 @@ function liveMcpTools() {
|
|
|
64
72
|
}
|
|
65
73
|
|
|
66
74
|
function cliDispatchTokens() {
|
|
67
|
-
|
|
68
|
-
|
|
75
|
+
// v2 dispatch is table-driven (findCapabilityByCliPath over REGISTRY), not a
|
|
76
|
+
// switch, so the token set is the union of every CLI capability's accepted
|
|
77
|
+
// first tokens (cli.caseTokens where an alias set is declared, else cli.path).
|
|
78
|
+
// The reachability check below then proves each declared path resolves through
|
|
79
|
+
// the live dispatcher — replacing the old `case "x":` dist source-grep.
|
|
80
|
+
return [...new Set(registry.cliCapabilities().flatMap((cap) => cap.cli.caseTokens ?? cap.cli.path))];
|
|
69
81
|
}
|
|
70
82
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const handlerFiles = fs.existsSync(handlersDir)
|
|
78
|
-
? fs.readdirSync(handlersDir).filter((name) => name.endsWith(".js")).map((name) => path.join(handlersDir, name))
|
|
79
|
-
: [];
|
|
80
|
-
return [cli, path.join(pluginRoot, "dist", "cli", "command-surface.js"), ...handlerFiles].filter((file) => fs.existsSync(file));
|
|
81
|
-
}
|
|
83
|
+
// Old-build top-level verbs kept in the frozen help "More commands" index line
|
|
84
|
+
// but folded in v2 into subcommands / the shell layer: init->app.init,
|
|
85
|
+
// search->run.search (declaredCliHelpTokens collapses both to app/run), and
|
|
86
|
+
// update is a shell-level command with no capability-table row. Help-index
|
|
87
|
+
// discovery text, not dispatch-parity tokens — exclude them.
|
|
88
|
+
const HELP_INDEX_ONLY_TOKENS = new Set(["init", "search", "update"]);
|
|
82
89
|
|
|
83
90
|
function cliHelpTokens() {
|
|
84
91
|
const lines = formatHelp().split(/\r?\n/);
|
|
@@ -91,7 +98,7 @@ function cliHelpTokens() {
|
|
|
91
98
|
const first = trimmed.split(/\s+/)[0];
|
|
92
99
|
for (const token of first.split("|")) {
|
|
93
100
|
const clean = token.replace(/[<[].*$/, "");
|
|
94
|
-
if (clean) tokens.add(clean);
|
|
101
|
+
if (clean && !HELP_INDEX_ONLY_TOKENS.has(clean)) tokens.add(clean);
|
|
95
102
|
}
|
|
96
103
|
}
|
|
97
104
|
return [...tokens].sort();
|
|
@@ -101,8 +108,18 @@ function cliHelpTokens() {
|
|
|
101
108
|
// Generation-moment ISO timestamps are presentation metadata, not capability
|
|
102
109
|
// data: the same field carries the wall-clock instant of the render. Neutralize
|
|
103
110
|
// them (and only them) before comparison so we assert canonical-payload identity.
|
|
111
|
+
// Also neutralize the metrics fields derived from a live run's `updatedAt`
|
|
112
|
+
// (wallClockMs = elapsed-since-updatedAt; sourceFingerprint / freshness's
|
|
113
|
+
// current+persisted fingerprints = a hash folding updatedAt). These drift
|
|
114
|
+
// between two separate reads (the CLI subprocess vs the in-process MCP call) of
|
|
115
|
+
// the SAME unchanged run — the same non-determinism web-desktop-workbench-smoke
|
|
116
|
+
// neutralizes with its canonicalStable. Only the workbench/metrics payloads
|
|
117
|
+
// carry these fields, so the extra replacements are a no-op elsewhere.
|
|
104
118
|
function canonical(value) {
|
|
105
|
-
return JSON.stringify(value)
|
|
119
|
+
return JSON.stringify(value)
|
|
120
|
+
.replace(/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z/g, "<ts>")
|
|
121
|
+
.replace(/"wallClockMs":\d+/g, '"wallClockMs":<ms>')
|
|
122
|
+
.replace(/"(sourceFingerprint|currentFingerprint|persistedFingerprint)":"[^"]*"/g, '"$1":"<fp>"');
|
|
106
123
|
}
|
|
107
124
|
|
|
108
125
|
function escapeRegExp(value) {
|
package/scripts/release-flow.js
CHANGED
|
@@ -233,9 +233,9 @@ function delegateReview(resultPath, inputPath) {
|
|
|
233
233
|
// Reuse the canonical agent-config resolver (flags > env > file).
|
|
234
234
|
let resolveAgentConfig;
|
|
235
235
|
try {
|
|
236
|
-
({ resolveAgentConfig } = require(path.join(pluginRoot, "dist", "agent-config.js")));
|
|
236
|
+
({ resolveAgentConfig } = require(path.join(pluginRoot, "dist", "shell", "agent-config.js")));
|
|
237
237
|
} catch (e) {
|
|
238
|
-
die("cannot load dist/agent-config.js — run `npm run build` first", String(e));
|
|
238
|
+
die("cannot load dist/shell/agent-config.js — run `npm run build` first", String(e));
|
|
239
239
|
}
|
|
240
240
|
const cfg = resolveAgentConfig(
|
|
241
241
|
{ "agent-command": val("--agent-command"), "agent-model": val("--agent-model") },
|
|
@@ -283,7 +283,13 @@ function delegateReview(resultPath, inputPath) {
|
|
|
283
283
|
// the file takes precedence. stderr goes to the terminal for live output.
|
|
284
284
|
const r = spawnSync(bin, args, {
|
|
285
285
|
cwd: repoRoot,
|
|
286
|
-
|
|
286
|
+
// CW_RELEASE_REVIEW=1 is a vendor-agnostic signal that THIS spawn is a
|
|
287
|
+
// release verdict, not a fast worker turn. Wrappers that can re-run the gate
|
|
288
|
+
// (e.g. codex-agent.js) read it to raise reasoning effort and open an
|
|
289
|
+
// exec-capable sandbox — a read-only/low-effort reviewer can't execute the
|
|
290
|
+
// gate it judges and degrades to fabricated verdicts. Preflight liveness
|
|
291
|
+
// probes never set it, so they stay fast and read-only.
|
|
292
|
+
env: { ...process.env, CW_RELEASE_REVIEW: "1" },
|
|
287
293
|
encoding: "utf8",
|
|
288
294
|
timeout: cfg.timeoutMs || REVIEWER_TIMEOUT_MS,
|
|
289
295
|
shell: false,
|
|
@@ -25,51 +25,55 @@ const CHECK = process.argv.includes("--check");
|
|
|
25
25
|
const REPO_ONLY = process.argv.includes("--repo-only");
|
|
26
26
|
const indexPathOverride = process.env.CW_PROJECT_INDEX_PATH || "";
|
|
27
27
|
|
|
28
|
+
// v2 layout: src/ splits into a pure core/ (state kernel, pipeline decisions,
|
|
29
|
+
// multi-agent decisions, workflow-app schema) and an impure shell/ (file IO,
|
|
30
|
+
// CLI/MCP wiring, worker sandboxing). Paths below are relative to src/ and
|
|
31
|
+
// may include a subdirectory — the render step keeps the full relative path
|
|
32
|
+
// as both the link target and the label, so the table also shows which
|
|
33
|
+
// layer (core vs shell) each module lives in.
|
|
28
34
|
const moduleCatalog = {
|
|
29
35
|
"Core runtime": [
|
|
30
|
-
["orchestrator.ts", "Plans runs, loads workflows, records results, writes reports, and exposes runner commands."],
|
|
31
|
-
["
|
|
32
|
-
["state-node.ts", "Defines explicit state nodes, pipeline transitions, evidence checks, and node persistence."],
|
|
33
|
-
["pipeline
|
|
34
|
-
["pipeline
|
|
35
|
-
["types.ts", "Owns the shared
|
|
36
|
+
["shell/orchestrator.ts", "Plans runs, loads workflows, records results, writes reports, and exposes runner commands (a thin facade over the shell functions below)."],
|
|
37
|
+
["shell/run-store.ts", "Persists run checkpoints, JSON state, run paths, and state migration entrypoints."],
|
|
38
|
+
["core/state/state-node.ts", "Defines explicit state nodes, pipeline transitions, evidence checks, and node persistence."],
|
|
39
|
+
["core/pipeline/contract.ts", "Builds the default pipeline contract used by run state."],
|
|
40
|
+
["core/pipeline/runner.ts", "Finds runnable stages and advances/fails pipeline nodes with retry-aware errors."],
|
|
41
|
+
["core/state/types.ts", "Owns the shared run/state types: WorkflowRun and everything it carries, StateNode, and the pipeline contract shape."]
|
|
36
42
|
],
|
|
37
43
|
"Verification and state gates": [
|
|
38
|
-
["verifier.ts", "Validates result envelopes, findings, evidence, and run gate completion."],
|
|
39
|
-
["commit.ts", "Creates verifier-gated commits and explicit manual checkpoints."],
|
|
40
|
-
["candidate-scoring.ts", "Registers, scores, ranks, selects, rejects, and summarizes candidate outputs."],
|
|
41
|
-
["error-feedback.ts", "Turns failures into persisted feedback records and correction tasks."],
|
|
42
|
-
["trust-audit.ts", "Records provenance, sandbox decisions, host attestations, and acceptance rationale."]
|
|
44
|
+
["shell/verifier.ts", "Validates result envelopes, findings, evidence, and run gate completion."],
|
|
45
|
+
["shell/commit.ts", "Creates verifier-gated commits and explicit manual checkpoints."],
|
|
46
|
+
["core/multi-agent/candidate-scoring.ts", "Registers, scores, ranks, selects, rejects, and summarizes candidate outputs."],
|
|
47
|
+
["core/pipeline/error-feedback.ts", "Turns failures into persisted feedback records and correction tasks."],
|
|
48
|
+
["shell/trust-audit.ts", "Records provenance, sandbox decisions, host attestations, and acceptance rationale."]
|
|
43
49
|
],
|
|
44
50
|
"Workers and policy": [
|
|
45
|
-
["dispatch.ts", "Selects runnable tasks and writes dispatch manifests."],
|
|
46
|
-
["worker-isolation.ts", "Allocates worker scopes, writes manifests, records worker outputs, and validates boundaries."],
|
|
47
|
-
["sandbox-profile.ts", "Resolves named sandbox policy contracts and validates read/write/command/network boundaries."],
|
|
48
|
-
["harness.ts", "Renders task files for dispatched work."]
|
|
51
|
+
["shell/dispatch.ts", "Selects runnable tasks and writes dispatch manifests."],
|
|
52
|
+
["shell/worker-isolation.ts", "Allocates worker scopes, writes manifests, records worker outputs, and validates boundaries."],
|
|
53
|
+
["shell/sandbox-profile.ts", "Resolves named sandbox policy contracts and validates read/write/command/network boundaries."],
|
|
54
|
+
["shell/harness.ts", "Renders task files for dispatched work."]
|
|
49
55
|
],
|
|
50
56
|
"Multi-agent layer": [
|
|
51
|
-
["multi-agent.ts", "Persists multi-agent runs, roles, groups, memberships, fanouts, and fanins."],
|
|
52
|
-
["coordinator.ts", "Owns blackboard topics, messages, context, artifacts, snapshots, and coordinator decisions."],
|
|
53
|
-
["topology.ts", "Defines and applies official map-reduce, debate, and judge-panel topologies."],
|
|
54
|
-
["multi-agent-host.ts", "Provides the preferred host loop for run, status, step, blackboard, score, and select."]
|
|
57
|
+
["core/multi-agent/runtime.ts", "Persists multi-agent runs, roles, groups, memberships, fanouts, and fanins."],
|
|
58
|
+
["core/multi-agent/coordinator.ts", "Owns blackboard topics, messages, context, artifacts, snapshots, and coordinator decisions."],
|
|
59
|
+
["core/multi-agent/topology.ts", "Defines and applies official map-reduce, debate, and judge-panel topologies."],
|
|
60
|
+
["shell/multi-agent-host.ts", "Provides the preferred host loop for run, status, step, blackboard, score, and select."]
|
|
55
61
|
],
|
|
56
62
|
"User and host surfaces": [
|
|
57
63
|
["cli.ts", "Routes human CLI commands to runtime, app, topology, multi-agent, and operator flows."],
|
|
58
64
|
["mcp-server.ts", "Exposes JSON-RPC/MCP tool parity for agent hosts."],
|
|
59
|
-
["operator-ux.ts", "Formats status, reports, graph, worker, candidate, feedback, commit, and trust summaries."],
|
|
60
|
-
["workflow-app-
|
|
61
|
-
["workflow-
|
|
62
|
-
["
|
|
63
|
-
["
|
|
64
|
-
["triggers.ts", "Bridges routine triggers to explicit workflow events."],
|
|
65
|
-
["version.ts", "Defines current package and state schema versions."]
|
|
65
|
+
["shell/operator-ux.ts", "Formats status, reports, graph, worker, candidate, feedback, commit, and trust summaries."],
|
|
66
|
+
["shell/workflow-app-loader.ts", "Validates app manifests and loads app entrypoints."],
|
|
67
|
+
["core/workflow-apps/app-schema.ts", "Provides the fluent workflow, phase, task, artifact, and input API."],
|
|
68
|
+
["shell/scheduler-io.ts", "Runs wall-clock schedules, the desktop scheduler daemon tick, and routine triggers."],
|
|
69
|
+
["core/version.ts", "Defines current package and state schema versions."]
|
|
66
70
|
]
|
|
67
71
|
};
|
|
68
72
|
|
|
69
73
|
function main() {
|
|
70
74
|
const apps = listApps();
|
|
71
75
|
const docs = listMarkdown(path.join(pluginRoot, "docs"));
|
|
72
|
-
const sourceFiles =
|
|
76
|
+
const sourceFiles = listFilesRecursive(path.join(pluginRoot, "src"), ".ts");
|
|
73
77
|
const smokeTests = listFiles(path.join(pluginRoot, "test"), ".js").filter((file) => file.endsWith("-smoke.js"));
|
|
74
78
|
const context = { apps, docs, sourceFiles, smokeTests };
|
|
75
79
|
|
|
@@ -184,6 +188,26 @@ function listFiles(dir, extension) {
|
|
|
184
188
|
.sort();
|
|
185
189
|
}
|
|
186
190
|
|
|
191
|
+
// v2's src/ splits into core/ and shell/ subdirectories (see moduleCatalog's
|
|
192
|
+
// header note), so a flat top-level scan misses almost every file. Walk the
|
|
193
|
+
// whole tree and return paths relative to `dir` with forward slashes, so a
|
|
194
|
+
// catalog entry like "shell/orchestrator.ts" matches what this returns.
|
|
195
|
+
function listFilesRecursive(dir, extension) {
|
|
196
|
+
const out = [];
|
|
197
|
+
const walk = (current) => {
|
|
198
|
+
for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
|
|
199
|
+
const full = path.join(current, entry.name);
|
|
200
|
+
if (entry.isDirectory()) {
|
|
201
|
+
walk(full);
|
|
202
|
+
} else if (entry.isFile() && entry.name.endsWith(extension)) {
|
|
203
|
+
out.push(path.relative(dir, full).split(path.sep).join("/"));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
walk(dir);
|
|
208
|
+
return out.sort();
|
|
209
|
+
}
|
|
210
|
+
|
|
187
211
|
function renderIndex(target, context) {
|
|
188
212
|
const link = linkFactory(target);
|
|
189
213
|
const lines = [];
|
|
@@ -17,8 +17,8 @@ const fs = require("node:fs");
|
|
|
17
17
|
const path = require("node:path");
|
|
18
18
|
|
|
19
19
|
const PLUGIN_ROOT = path.resolve(__dirname, "..");
|
|
20
|
-
const TYPES_FILE = path.join(PLUGIN_ROOT, "src", "
|
|
21
|
-
const SCHEMA_MODULE = path.join(PLUGIN_ROOT, "dist", "
|
|
20
|
+
const TYPES_FILE = path.join(PLUGIN_ROOT, "src", "core", "state", "types.ts");
|
|
21
|
+
const SCHEMA_MODULE = path.join(PLUGIN_ROOT, "dist", "core", "state", "schema.js");
|
|
22
22
|
|
|
23
23
|
function main() {
|
|
24
24
|
const errors = [];
|
|
@@ -66,10 +66,10 @@ function main() {
|
|
|
66
66
|
checkJson("plugins/cool-workflow/.claude-plugin/plugin.json", "version", VERSION, checks);
|
|
67
67
|
checkJson("plugins/cool-workflow/.gemini-plugin/plugin.json", "version", VERSION, checks);
|
|
68
68
|
checkJson("plugins/cool-workflow/.opencode-plugin/plugin.json", "version", VERSION, checks);
|
|
69
|
-
checkIncludes("plugins/cool-workflow/src/version.ts", `CURRENT_COOL_WORKFLOW_VERSION = "${VERSION}"`, checks);
|
|
70
|
-
checkIncludes("plugins/cool-workflow/src/version.ts", "CURRENT_RUN_STATE_SCHEMA_VERSION = 1", checks);
|
|
71
|
-
checkIncludes("plugins/cool-workflow/src/mcp
|
|
72
|
-
checkIncludes("plugins/cool-workflow/src/workflow-app-
|
|
69
|
+
checkIncludes("plugins/cool-workflow/src/core/version.ts", `CURRENT_COOL_WORKFLOW_VERSION = "${VERSION}"`, checks);
|
|
70
|
+
checkIncludes("plugins/cool-workflow/src/core/version.ts", "CURRENT_RUN_STATE_SCHEMA_VERSION = 1", checks);
|
|
71
|
+
checkIncludes("plugins/cool-workflow/src/mcp/server.ts", "CURRENT_COOL_WORKFLOW_VERSION", checks);
|
|
72
|
+
checkIncludes("plugins/cool-workflow/src/shell/workflow-app-loader.ts", "CURRENT_COOL_WORKFLOW_VERSION", checks);
|
|
73
73
|
|
|
74
74
|
for (const appId of canonicalApps) {
|
|
75
75
|
checkJson(`plugins/cool-workflow/apps/${appId}/app.json`, "version", VERSION, checks);
|
|
@@ -90,9 +90,9 @@ function main() {
|
|
|
90
90
|
checkIncludes("plugins/cool-workflow/test/mcp-app-surface-smoke.js", VERSION, checks);
|
|
91
91
|
checkIncludes("plugins/cool-workflow/test/canonical-workflow-apps-smoke.js", VERSION, checks);
|
|
92
92
|
checkIncludes("plugins/cool-workflow/test/workflow-app-framework-smoke.js", VERSION, checks);
|
|
93
|
-
checkIncludes("plugins/cool-workflow/dist/version.js", VERSION, checks);
|
|
94
|
-
checkIncludes("plugins/cool-workflow/dist/mcp
|
|
95
|
-
checkIncludes("plugins/cool-workflow/dist/workflow-app-
|
|
93
|
+
checkIncludes("plugins/cool-workflow/dist/core/version.js", VERSION, checks);
|
|
94
|
+
checkIncludes("plugins/cool-workflow/dist/mcp/server.js", "CURRENT_COOL_WORKFLOW_VERSION", checks);
|
|
95
|
+
checkIncludes("plugins/cool-workflow/dist/shell/workflow-app-loader.js", "CURRENT_COOL_WORKFLOW_VERSION", checks);
|
|
96
96
|
|
|
97
97
|
// The npm package README (plugins/cool-workflow/README.md) is GENERATED from the GitHub
|
|
98
98
|
// README.md (scripts/sync-readme.js) and conveys the version via the live npm/release shields
|
|
@@ -160,37 +160,37 @@ function main() {
|
|
|
160
160
|
checkIncludes("plugins/cool-workflow/docs/run-retention-reclamation.7.md", VERSION, checks);
|
|
161
161
|
checkIncludes("plugins/cool-workflow/docs/index.md", "run-retention-reclamation.7.md", checks);
|
|
162
162
|
checkIncludes("plugins/cool-workflow/test/run-retention-reclamation-smoke.js", "run-retention-reclamation-smoke", checks);
|
|
163
|
-
checkIncludes("plugins/cool-workflow/src/capability-
|
|
163
|
+
checkIncludes("plugins/cool-workflow/src/core/capability-table.ts", "gc.plan", checks);
|
|
164
164
|
checkIncludes("plugins/cool-workflow/docs/durable-state-and-locking.7.md", "Durable State & Locking", checks);
|
|
165
165
|
checkIncludes("plugins/cool-workflow/docs/durable-state-and-locking.7.md", VERSION, checks);
|
|
166
166
|
checkIncludes("plugins/cool-workflow/docs/index.md", "durable-state-and-locking.7.md", checks);
|
|
167
167
|
checkIncludes("plugins/cool-workflow/test/durable-atomic-write-smoke.js", "durable-atomic-write-smoke", checks);
|
|
168
|
-
checkIncludes("plugins/cool-workflow/src/
|
|
169
|
-
checkIncludes("plugins/cool-workflow/src/drive.ts", "driveStep", checks);
|
|
170
|
-
checkIncludes("plugins/cool-workflow/dist/drive.js", "driveStep", checks);
|
|
171
|
-
checkIncludes("plugins/cool-workflow/src/capability-
|
|
172
|
-
checkIncludes("plugins/cool-workflow/src/collaboration.ts", "deriveReviewState", checks);
|
|
173
|
-
checkIncludes("plugins/cool-workflow/dist/collaboration.js", "deriveReviewState", checks);
|
|
174
|
-
checkIncludes("plugins/cool-workflow/src/capability-
|
|
175
|
-
checkIncludes("plugins/cool-workflow/src/observability.ts", "deriveMetricsReport", checks);
|
|
176
|
-
checkIncludes("plugins/cool-workflow/dist/observability.js", "deriveMetricsReport", checks);
|
|
177
|
-
checkIncludes("plugins/cool-workflow/src/capability-
|
|
168
|
+
checkIncludes("plugins/cool-workflow/src/shell/fs-atomic.ts", "withFileLock", checks);
|
|
169
|
+
checkIncludes("plugins/cool-workflow/src/shell/drive.ts", "driveStep", checks);
|
|
170
|
+
checkIncludes("plugins/cool-workflow/dist/shell/drive.js", "driveStep", checks);
|
|
171
|
+
checkIncludes("plugins/cool-workflow/src/core/capability-table.ts", "run.drive", checks);
|
|
172
|
+
checkIncludes("plugins/cool-workflow/src/shell/collaboration-io.ts", "deriveReviewState", checks);
|
|
173
|
+
checkIncludes("plugins/cool-workflow/dist/shell/collaboration-io.js", "deriveReviewState", checks);
|
|
174
|
+
checkIncludes("plugins/cool-workflow/src/core/capability-table.ts", "review.status", checks);
|
|
175
|
+
checkIncludes("plugins/cool-workflow/src/shell/observability.ts", "deriveMetricsReport", checks);
|
|
176
|
+
checkIncludes("plugins/cool-workflow/dist/shell/observability.js", "deriveMetricsReport", checks);
|
|
177
|
+
checkIncludes("plugins/cool-workflow/src/core/capability-table.ts", "metrics.show", checks);
|
|
178
178
|
checkIncludes("plugins/cool-workflow/manifest/pricing.policy.json", "schemaVersion", checks);
|
|
179
|
-
checkIncludes("plugins/cool-workflow/src/workbench.ts", "buildWorkbenchRunView", checks);
|
|
180
|
-
checkIncludes("plugins/cool-workflow/dist/workbench.js", "buildWorkbenchRunView", checks);
|
|
181
|
-
checkIncludes("plugins/cool-workflow/src/capability-
|
|
182
|
-
checkIncludes("plugins/cool-workflow/src/execution-backend.ts", "ExecutionBackend", checks);
|
|
183
|
-
checkIncludes("plugins/cool-workflow/dist/execution-backend.js", "ExecutionBackend", checks);
|
|
184
|
-
checkIncludes("plugins/cool-workflow/src/capability-
|
|
185
|
-
checkIncludes("plugins/cool-workflow/src/run-registry.ts", "RunRegistry", checks);
|
|
186
|
-
checkIncludes("plugins/cool-workflow/dist/run-registry.js", "RunRegistry", checks);
|
|
187
|
-
checkIncludes("plugins/cool-workflow/src/capability-
|
|
179
|
+
checkIncludes("plugins/cool-workflow/src/shell/workbench.ts", "buildWorkbenchRunView", checks);
|
|
180
|
+
checkIncludes("plugins/cool-workflow/dist/shell/workbench.js", "buildWorkbenchRunView", checks);
|
|
181
|
+
checkIncludes("plugins/cool-workflow/src/core/capability-table.ts", "workbench.view", checks);
|
|
182
|
+
checkIncludes("plugins/cool-workflow/src/shell/execution-backend/registry.ts", "ExecutionBackend", checks);
|
|
183
|
+
checkIncludes("plugins/cool-workflow/dist/shell/execution-backend/registry.js", "ExecutionBackend", checks);
|
|
184
|
+
checkIncludes("plugins/cool-workflow/src/core/capability-table.ts", "backend.list", checks);
|
|
185
|
+
checkIncludes("plugins/cool-workflow/src/shell/run-registry-io.ts", "RunRegistry", checks);
|
|
186
|
+
checkIncludes("plugins/cool-workflow/dist/shell/run-registry-io.js", "RunRegistry", checks);
|
|
187
|
+
checkIncludes("plugins/cool-workflow/src/core/capability-table.ts", "registry.refresh", checks);
|
|
188
188
|
checkIncludes("plugins/cool-workflow/package.json", "parity:check", checks);
|
|
189
189
|
checkIncludes("plugins/cool-workflow/scripts/parity-check.js", "buildParityReport", checks);
|
|
190
190
|
checkIncludes("plugins/cool-workflow/test/cli-mcp-parity-smoke.js", "cli-mcp-parity-smoke", checks);
|
|
191
|
-
checkIncludes("plugins/cool-workflow/src/capability-
|
|
192
|
-
checkIncludes("plugins/cool-workflow/src/
|
|
193
|
-
checkIncludes("plugins/cool-workflow/dist/capability-
|
|
191
|
+
checkIncludes("plugins/cool-workflow/src/core/capability-table.ts", "export const REGISTRY", checks);
|
|
192
|
+
checkIncludes("plugins/cool-workflow/src/shell/pipeline-cli.ts", "planSummary", checks);
|
|
193
|
+
checkIncludes("plugins/cool-workflow/dist/core/capability-table.js", "REGISTRY", checks);
|
|
194
194
|
checkIncludes("plugins/cool-workflow/docs/multi-agent-runtime-core.7.md", "Multi-Agent Runtime Core", checks);
|
|
195
195
|
checkIncludes("plugins/cool-workflow/docs/dogfood-one-real-repo.7.md", "Dogfood One Real Repo", checks);
|
|
196
196
|
checkIncludes("plugins/cool-workflow/docs/getting-started.md", "npm run release:check", checks);
|