cool-workflow 0.1.98 → 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} +2 -2
- 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 +2 -0
- package/docs/cli-mcp-parity.7.md +280 -219
- package/docs/contract-migration-tooling.7.md +2 -0
- package/docs/control-plane-scheduling.7.md +2 -0
- package/docs/durable-state-and-locking.7.md +2 -0
- package/docs/evidence-adoption-reasoning-chain.7.md +2 -0
- package/docs/execution-backends.7.md +2 -0
- package/docs/multi-agent-cli-mcp-surface.7.md +2 -0
- package/docs/multi-agent-eval-replay-harness.7.md +2 -0
- package/docs/multi-agent-operator-ux.7.md +2 -0
- package/docs/node-snapshot-diff-replay.7.md +2 -0
- package/docs/observability-cost-accounting.7.md +2 -0
- package/docs/project-index.md +132 -71
- package/docs/real-execution-backends.7.md +2 -0
- package/docs/release-and-migration.7.md +2 -0
- package/docs/release-tooling.7.md +2 -0
- package/docs/run-registry-control-plane.7.md +2 -0
- package/docs/run-retention-reclamation.7.md +23 -0
- package/docs/state-explosion-management.7.md +2 -0
- package/docs/team-collaboration.7.md +2 -0
- package/docs/web-desktop-workbench.7.md +2 -0
- package/manifest/plugin.manifest.json +1 -1
- package/manifest/source-context-profiles.json +9 -13
- package/package.json +1 -1
- 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/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 +2 -2
- 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 -1189
- package/dist/capability-registry.js +0 -885
- package/dist/cli/command-surface.js +0 -494
- 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/ledger.js +0 -169
- 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 -864
- package/dist/error-feedback.js +0 -419
- package/dist/evidence-grounding.js +0 -184
- package/dist/execution-backend/agent.js +0 -354
- 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/ledger.js +0 -313
- package/dist/loop-expansion.js +0 -60
- package/dist/mcp/tool-call.js +0 -470
- package/dist/mcp/tool-definitions.js +0 -1066
- 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 -650
- 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 -925
- 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 -815
- 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 -192
- 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
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleBlackboard = handleBlackboard;
|
|
4
|
-
exports.handleCoordinator = handleCoordinator;
|
|
5
|
-
const state_explosion_1 = require("../../state-explosion");
|
|
6
|
-
const io_1 = require("../io");
|
|
7
|
-
/** `cw blackboard <verb> <run-id> …` — shared-blackboard read/write family. */
|
|
8
|
-
function handleBlackboard(args, runner) {
|
|
9
|
-
const [subcommand, action, runId] = args.positionals;
|
|
10
|
-
switch (subcommand) {
|
|
11
|
-
case "summary":
|
|
12
|
-
(0, io_1.printJson)(runner.blackboardSummary((0, io_1.required)(action, "run id"), args.options));
|
|
13
|
-
return;
|
|
14
|
-
case "summarize": {
|
|
15
|
-
const digest = runner.blackboardSummarize((0, io_1.required)(action, "run id"), args.options);
|
|
16
|
-
if ((0, io_1.wantsJson)(args.options))
|
|
17
|
-
(0, io_1.printJson)(digest);
|
|
18
|
-
else
|
|
19
|
-
process.stdout.write(`${(0, state_explosion_1.formatBlackboardDigest)(digest)}\n`);
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
case "graph":
|
|
23
|
-
(0, io_1.printJson)(runner.blackboardGraph((0, io_1.required)(action, "run id")));
|
|
24
|
-
return;
|
|
25
|
-
case "resolve":
|
|
26
|
-
(0, io_1.printJson)(runner.resolveRunBlackboard((0, io_1.required)(action, "run id"), args.options));
|
|
27
|
-
return;
|
|
28
|
-
case "topic":
|
|
29
|
-
if (action === "create") {
|
|
30
|
-
(0, io_1.printJson)(runner.createBlackboardTopic((0, io_1.required)(runId, "run id"), args.options));
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
break;
|
|
34
|
-
case "message":
|
|
35
|
-
if (action === "post") {
|
|
36
|
-
(0, io_1.printJson)(runner.postBlackboardMessage((0, io_1.required)(runId, "run id"), args.options));
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
if (action === "list") {
|
|
40
|
-
(0, io_1.printJson)(runner.listBlackboardMessages((0, io_1.required)(runId, "run id"), args.options));
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
break;
|
|
44
|
-
case "context":
|
|
45
|
-
if (action === "put") {
|
|
46
|
-
(0, io_1.printJson)(runner.putBlackboardContext((0, io_1.required)(runId, "run id"), args.options));
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
break;
|
|
50
|
-
case "artifact":
|
|
51
|
-
if (action === "add") {
|
|
52
|
-
(0, io_1.printJson)(runner.addBlackboardArtifact((0, io_1.required)(runId, "run id"), args.options));
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
if (action === "list") {
|
|
56
|
-
(0, io_1.printJson)(runner.listBlackboardArtifacts((0, io_1.required)(runId, "run id"), args.options));
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
break;
|
|
60
|
-
case "snapshot":
|
|
61
|
-
(0, io_1.printJson)(runner.snapshotBlackboard((0, io_1.required)(action, "run id"), args.options));
|
|
62
|
-
return;
|
|
63
|
-
default:
|
|
64
|
-
break;
|
|
65
|
-
}
|
|
66
|
-
throw new Error("Usage: cw.js blackboard summary|summarize|graph|resolve <run-id> | topic create <run-id> | message post|list <run-id> | context put <run-id> | artifact add|list <run-id> | snapshot <run-id>");
|
|
67
|
-
}
|
|
68
|
-
/** `cw coordinator summary|decision <run-id> …` — coordinator decision ledger. */
|
|
69
|
-
function handleCoordinator(args, runner) {
|
|
70
|
-
const [subcommand, runId] = args.positionals;
|
|
71
|
-
switch (subcommand) {
|
|
72
|
-
case "summary":
|
|
73
|
-
(0, io_1.printJson)(runner.coordinatorSummary((0, io_1.required)(runId, "run id"), args.options));
|
|
74
|
-
return;
|
|
75
|
-
case "decision":
|
|
76
|
-
(0, io_1.printJson)(runner.recordCoordinatorDecision((0, io_1.required)(runId, "run id"), args.options));
|
|
77
|
-
return;
|
|
78
|
-
default:
|
|
79
|
-
throw new Error("Usage: cw.js coordinator summary <run-id> | coordinator decision <run-id> --kind <kind> --outcome <outcome> --reason TEXT");
|
|
80
|
-
}
|
|
81
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleCandidate = handleCandidate;
|
|
4
|
-
const operator_ux_1 = require("../../operator-ux");
|
|
5
|
-
const io_1 = require("../io");
|
|
6
|
-
/** `cw candidate list|show|register|score|rank|select|reject|summary <run-id> [candidate-id]`. */
|
|
7
|
-
function handleCandidate(args, runner) {
|
|
8
|
-
const [subcommand, runId, candidateId, reason] = args.positionals;
|
|
9
|
-
switch (subcommand) {
|
|
10
|
-
case "list":
|
|
11
|
-
(0, io_1.printJson)(runner.listCandidates((0, io_1.required)(runId, "run id"), args.options));
|
|
12
|
-
return;
|
|
13
|
-
case "show":
|
|
14
|
-
(0, io_1.printJson)(runner.showCandidate((0, io_1.required)(runId, "run id"), (0, io_1.required)(candidateId, "candidate id")));
|
|
15
|
-
return;
|
|
16
|
-
case "register":
|
|
17
|
-
(0, io_1.printJson)(runner.registerCandidate((0, io_1.required)(runId, "run id"), args.options));
|
|
18
|
-
return;
|
|
19
|
-
case "score":
|
|
20
|
-
(0, io_1.printJson)(runner.scoreCandidate((0, io_1.required)(runId, "run id"), (0, io_1.required)(candidateId, "candidate id"), args.options));
|
|
21
|
-
return;
|
|
22
|
-
case "rank":
|
|
23
|
-
(0, io_1.printJson)(runner.rankCandidates((0, io_1.required)(runId, "run id"), args.options));
|
|
24
|
-
return;
|
|
25
|
-
case "select":
|
|
26
|
-
(0, io_1.printJson)(runner.selectCandidate((0, io_1.required)(runId, "run id"), (0, io_1.required)(candidateId, "candidate id"), args.options));
|
|
27
|
-
return;
|
|
28
|
-
case "reject":
|
|
29
|
-
(0, io_1.printJson)(runner.rejectCandidate((0, io_1.required)(runId, "run id"), (0, io_1.required)(candidateId, "candidate id"), String(args.options.reason || args.options.message || reason || "rejected")));
|
|
30
|
-
return;
|
|
31
|
-
case "summary":
|
|
32
|
-
if ((0, io_1.wantsJson)(args.options))
|
|
33
|
-
(0, io_1.printJson)(runner.summarizeCandidateOperatorRecords((0, io_1.required)(runId, "run id")));
|
|
34
|
-
else
|
|
35
|
-
process.stdout.write(`${(0, operator_ux_1.formatCandidateSummary)(runner.summarizeCandidateOperatorRecords((0, io_1.required)(runId, "run id")))}\n`);
|
|
36
|
-
return;
|
|
37
|
-
default:
|
|
38
|
-
throw new Error("Usage: cw.js candidate list|show|register|score|rank|select|reject|summary <run-id> [candidate-id]");
|
|
39
|
-
}
|
|
40
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleClones = handleClones;
|
|
4
|
-
// `cw clones` handler — carved out of the command-surface god-dispatch. The
|
|
5
|
-
// remote-source clone cache (v0.1.91): `list` inspects the cached checkouts that
|
|
6
|
-
// `--link`/URL reviews populate; `gc` reclaims them (TTL sweep, or --all). Pure
|
|
7
|
-
// filesystem work — no network, no run registry, no runner needed.
|
|
8
|
-
const capability_core_1 = require("../../capability-core");
|
|
9
|
-
const format_1 = require("../format");
|
|
10
|
-
const io_1 = require("../io");
|
|
11
|
-
/** `cw clones list [--json] | clones gc [--older-than-days N] [--all] [--json]`. */
|
|
12
|
-
function handleClones(args) {
|
|
13
|
-
const [subcommand] = args.positionals;
|
|
14
|
-
switch (subcommand) {
|
|
15
|
-
case "list": {
|
|
16
|
-
const result = (0, capability_core_1.listClones)(args.options);
|
|
17
|
-
if ((0, io_1.wantsJson)(args.options))
|
|
18
|
-
(0, io_1.printJson)(result);
|
|
19
|
-
else
|
|
20
|
-
process.stdout.write(`${(0, format_1.formatClonesList)(result)}\n`);
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
case "gc": {
|
|
24
|
-
const result = (0, capability_core_1.gcClones)(args.options);
|
|
25
|
-
if ((0, io_1.wantsJson)(args.options))
|
|
26
|
-
(0, io_1.printJson)(result);
|
|
27
|
-
else
|
|
28
|
-
process.stdout.write(`${(0, format_1.formatClonesGc)(result)}\n`);
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
default:
|
|
32
|
-
throw new Error("Usage: cw.js clones list [--json] | clones gc [--older-than-days N] [--all] [--json]");
|
|
33
|
-
}
|
|
34
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleApprove = handleApprove;
|
|
4
|
-
exports.handleReject = handleReject;
|
|
5
|
-
exports.handleComment = handleComment;
|
|
6
|
-
exports.handleHandoff = handleHandoff;
|
|
7
|
-
exports.handleReview = handleReview;
|
|
8
|
-
const io_1 = require("../io");
|
|
9
|
-
/** `cw approve <kind> <run-id> <target-id>` — record an approval on a target. */
|
|
10
|
-
function handleApprove(args, runner) {
|
|
11
|
-
const [targetKind, runId, targetId] = args.positionals;
|
|
12
|
-
(0, io_1.printJson)(runner.collaborationApprove((0, io_1.required)(runId, "run id"), (0, io_1.required)(targetKind, "target kind (candidate|commit|selection|run|task|node)"), (0, io_1.required)(targetId, "target id"), args.options));
|
|
13
|
-
}
|
|
14
|
-
/** `cw reject <kind> <run-id> <target-id>` — record a rejection on a target. */
|
|
15
|
-
function handleReject(args, runner) {
|
|
16
|
-
const [targetKind, runId, targetId] = args.positionals;
|
|
17
|
-
(0, io_1.printJson)(runner.collaborationReject((0, io_1.required)(runId, "run id"), (0, io_1.required)(targetKind, "target kind (candidate|commit|selection|run|task|node)"), (0, io_1.required)(targetId, "target id"), args.options));
|
|
18
|
-
}
|
|
19
|
-
/** `cw comment add <kind> <run-id> <target-id> | comment list <run-id>` — leave or list comments. */
|
|
20
|
-
function handleComment(args, runner) {
|
|
21
|
-
const [subcommand, ...rest] = args.positionals;
|
|
22
|
-
if (subcommand === "add") {
|
|
23
|
-
const [targetKind, runId, targetId] = rest;
|
|
24
|
-
(0, io_1.printJson)(runner.collaborationComment((0, io_1.required)(runId, "run id"), (0, io_1.required)(targetKind, "target kind"), (0, io_1.required)(targetId, "target id"), args.options));
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
if (subcommand === "list") {
|
|
28
|
-
const result = runner.collaborationCommentList((0, io_1.required)(rest[0], "run id"), args.options);
|
|
29
|
-
if ((0, io_1.wantsJson)(args.options))
|
|
30
|
-
(0, io_1.printJson)(result);
|
|
31
|
-
else
|
|
32
|
-
process.stdout.write(`${runner.formatCommentList(result.comments)}\n`);
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
throw new Error("Usage: cw.js comment add <kind> <run-id> <target-id> --body <text> | comment list <run-id> [--json]");
|
|
36
|
-
}
|
|
37
|
-
/** `cw handoff <kind> <run-id> [target-id]` — hand a target off to the next owner. */
|
|
38
|
-
function handleHandoff(args, runner) {
|
|
39
|
-
const [targetKind, runId, targetIdRaw] = args.positionals;
|
|
40
|
-
const kind = (0, io_1.required)(targetKind, "target kind (run|task|candidate|commit|node)");
|
|
41
|
-
const rid = (0, io_1.required)(runId, "run id");
|
|
42
|
-
const targetId = targetIdRaw || (kind === "run" ? rid : undefined);
|
|
43
|
-
(0, io_1.printJson)(runner.collaborationHandoff(rid, kind, (0, io_1.required)(targetId, "target id"), args.options));
|
|
44
|
-
}
|
|
45
|
-
/** `cw review status <run-id> | review policy <run-id> …` — read or set review state/policy. */
|
|
46
|
-
function handleReview(args, runner) {
|
|
47
|
-
const [subcommand, runId] = args.positionals;
|
|
48
|
-
if (subcommand === "status") {
|
|
49
|
-
const report = runner.reviewStatus((0, io_1.required)(runId, "run id"), args.options);
|
|
50
|
-
if ((0, io_1.wantsJson)(args.options))
|
|
51
|
-
(0, io_1.printJson)(report);
|
|
52
|
-
else
|
|
53
|
-
process.stdout.write(`${runner.formatReviewStatus(report)}\n`);
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
if (subcommand === "policy") {
|
|
57
|
-
(0, io_1.printJson)(runner.reviewPolicy((0, io_1.required)(runId, "run id"), args.options));
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
throw new Error("Usage: cw.js review status <run-id> [--json] | review policy <run-id> --required-approvals N --authorized-roles a,b --applies-to commit,selection");
|
|
61
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleEval = handleEval;
|
|
4
|
-
const multi_agent_eval_1 = require("../../multi-agent-eval");
|
|
5
|
-
const io_1 = require("../io");
|
|
6
|
-
/** `cw eval snapshot|replay|compare|score|gate|report …` — multi-agent eval. */
|
|
7
|
-
function handleEval(args, runner) {
|
|
8
|
-
const [subcommand, first, second] = args.positionals;
|
|
9
|
-
let result;
|
|
10
|
-
switch (subcommand) {
|
|
11
|
-
case "snapshot":
|
|
12
|
-
result = runner.evalSnapshot((0, io_1.required)(first, "run id"), args.options);
|
|
13
|
-
break;
|
|
14
|
-
case "replay":
|
|
15
|
-
result = runner.evalReplay((0, io_1.required)(first, "snapshot id or path"), args.options);
|
|
16
|
-
break;
|
|
17
|
-
case "compare":
|
|
18
|
-
result = runner.evalCompare((0, io_1.required)(first, "baseline id or path"), (0, io_1.required)(second, "replay id or path"));
|
|
19
|
-
break;
|
|
20
|
-
case "score":
|
|
21
|
-
result = runner.evalScore((0, io_1.required)(first, "replay id or path"));
|
|
22
|
-
break;
|
|
23
|
-
case "gate":
|
|
24
|
-
result = runner.evalGate((0, io_1.required)(first, "suite id or path"));
|
|
25
|
-
if (!(0, io_1.wantsJson)(args.options) && result.status === "fail")
|
|
26
|
-
process.exitCode = 1;
|
|
27
|
-
break;
|
|
28
|
-
case "report":
|
|
29
|
-
result = runner.evalReport((0, io_1.required)(first, "replay id or path"));
|
|
30
|
-
break;
|
|
31
|
-
default:
|
|
32
|
-
throw new Error("Usage: cw.js eval snapshot <run-id> --id <snapshot-id> | replay <snapshot-id-or-path> | compare <baseline-id-or-path> <replay-id-or-path> | score <replay-id-or-path> | gate <suite-id-or-path> | report <replay-id-or-path>");
|
|
33
|
-
}
|
|
34
|
-
if ((0, io_1.wantsJson)(args.options))
|
|
35
|
-
(0, io_1.printJson)(result);
|
|
36
|
-
else
|
|
37
|
-
process.stdout.write(`${(0, multi_agent_eval_1.formatMultiAgentEval)(result)}\n`);
|
|
38
|
-
if (subcommand === "gate" && result.status === "fail")
|
|
39
|
-
process.exitCode = 1;
|
|
40
|
-
}
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// `cw ledger propose|review|verify` — the cross-agent handoff ledger CLI surface.
|
|
3
|
-
// A proposing agent prints a proposal or a review verdict as a verifiable JSON
|
|
4
|
-
// entry; the receiving side verifies it fail-closed before acting. See
|
|
5
|
-
// docs/cross-agent-ledger.7.md and docs/designs/handoff-ledger.md.
|
|
6
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
-
if (k2 === undefined) k2 = k;
|
|
8
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
-
}
|
|
12
|
-
Object.defineProperty(o, k2, desc);
|
|
13
|
-
}) : (function(o, m, k, k2) {
|
|
14
|
-
if (k2 === undefined) k2 = k;
|
|
15
|
-
o[k2] = m[k];
|
|
16
|
-
}));
|
|
17
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
-
}) : function(o, v) {
|
|
20
|
-
o["default"] = v;
|
|
21
|
-
});
|
|
22
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
-
var ownKeys = function(o) {
|
|
24
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
-
var ar = [];
|
|
26
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
-
return ar;
|
|
28
|
-
};
|
|
29
|
-
return ownKeys(o);
|
|
30
|
-
};
|
|
31
|
-
return function (mod) {
|
|
32
|
-
if (mod && mod.__esModule) return mod;
|
|
33
|
-
var result = {};
|
|
34
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
-
__setModuleDefault(result, mod);
|
|
36
|
-
return result;
|
|
37
|
-
};
|
|
38
|
-
})();
|
|
39
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.handleLedger = handleLedger;
|
|
41
|
-
const fs = __importStar(require("fs"));
|
|
42
|
-
const ledger_1 = require("../../ledger");
|
|
43
|
-
const io_1 = require("../io");
|
|
44
|
-
/** Coerce a repeatable/comma-joined list option to a clean string[]. */
|
|
45
|
-
function listOption(value) {
|
|
46
|
-
const parts = Array.isArray(value) ? value : typeof value === "string" ? value.split(",") : [];
|
|
47
|
-
return parts.map((p) => String(p).trim()).filter(Boolean);
|
|
48
|
-
}
|
|
49
|
-
function stringOption(value) {
|
|
50
|
-
return typeof value === "string" && value.trim() ? value.trim() : undefined;
|
|
51
|
-
}
|
|
52
|
-
function nowIso() {
|
|
53
|
-
return new Date().toISOString();
|
|
54
|
-
}
|
|
55
|
-
function handleLedger(args, _runner) {
|
|
56
|
-
const [subcommand] = args.positionals;
|
|
57
|
-
const opts = args.options;
|
|
58
|
-
switch (subcommand) {
|
|
59
|
-
case "propose": {
|
|
60
|
-
const entry = (0, ledger_1.buildLedgerProposal)({
|
|
61
|
-
from: (0, io_1.required)(stringOption(opts.from), "--from <agent/repo>"),
|
|
62
|
-
to: (0, io_1.required)(stringOption(opts.to), "--to <agent/repo>"),
|
|
63
|
-
title: (0, io_1.required)(stringOption(opts.title), "--title <text>"),
|
|
64
|
-
rationale: (0, io_1.required)(stringOption(opts.rationale), "--rationale <text>"),
|
|
65
|
-
targetFiles: listOption(opts.files),
|
|
66
|
-
// Do NOT trim the diff: it is a unified patch (payload, not a label), and
|
|
67
|
-
// trimming strips the trailing newline `git apply` requires — a trimmed
|
|
68
|
-
// diff is a corrupt patch. Presence is detected with a trimmed test, but
|
|
69
|
-
// the bytes are passed through verbatim (matching the MCP propose path).
|
|
70
|
-
suggestedDiff: typeof opts.diff === "string" && opts.diff.trim() ? opts.diff : undefined,
|
|
71
|
-
createdAt: nowIso()
|
|
72
|
-
});
|
|
73
|
-
(0, io_1.printJson)(entry);
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
case "review": {
|
|
77
|
-
const verdictRaw = (0, io_1.required)(stringOption(opts.verdict), "--verdict <approved|rejected>").toUpperCase();
|
|
78
|
-
if (verdictRaw !== "APPROVED" && verdictRaw !== "REJECTED") {
|
|
79
|
-
throw new Error('--verdict must be "approved" or "rejected".');
|
|
80
|
-
}
|
|
81
|
-
const entry = (0, ledger_1.buildLedgerReview)({
|
|
82
|
-
from: (0, io_1.required)(stringOption(opts.from), "--from <agent/repo>"),
|
|
83
|
-
to: (0, io_1.required)(stringOption(opts.to), "--to <agent/repo>"),
|
|
84
|
-
target: (0, io_1.required)(stringOption(opts.target), "--target <proposal-id|pr-ref>"),
|
|
85
|
-
verdict: verdictRaw,
|
|
86
|
-
findings: listOption(opts.findings),
|
|
87
|
-
createdAt: nowIso()
|
|
88
|
-
});
|
|
89
|
-
(0, io_1.printJson)(entry);
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
case "verify": {
|
|
93
|
-
const file = stringOption(opts.file);
|
|
94
|
-
let text;
|
|
95
|
-
try {
|
|
96
|
-
// --file <path>, else read the entry from stdin (fd 0).
|
|
97
|
-
text = fs.readFileSync(file || 0, "utf8");
|
|
98
|
-
}
|
|
99
|
-
catch (error) {
|
|
100
|
-
throw new Error(`Cannot read ledger entry${file ? ` from ${file}` : " from stdin"}: ${error.message}`);
|
|
101
|
-
}
|
|
102
|
-
let parsed;
|
|
103
|
-
try {
|
|
104
|
-
parsed = JSON.parse(text);
|
|
105
|
-
}
|
|
106
|
-
catch {
|
|
107
|
-
// A non-JSON input is itself a fail-closed refusal, not a crash.
|
|
108
|
-
(0, io_1.printJson)({ ok: false, id: null, kind: null, checks: [{ name: "parse", pass: false, code: "ledger-bad-json" }], failedChecks: [{ name: "parse", code: "ledger-bad-json" }] });
|
|
109
|
-
process.exitCode = 1;
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
const result = (0, ledger_1.verifyLedgerEntry)(parsed);
|
|
113
|
-
(0, io_1.printJson)(result);
|
|
114
|
-
// Fail-closed: a tampered/malformed entry exits non-zero so
|
|
115
|
-
// `cw ledger verify <file> && open-pr` cannot proceed on a lie.
|
|
116
|
-
if (!result.ok)
|
|
117
|
-
process.exitCode = 1;
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
case "apply": {
|
|
121
|
-
const file = stringOption(opts.file);
|
|
122
|
-
let text;
|
|
123
|
-
try {
|
|
124
|
-
// --file <path>, else read the entry from stdin (fd 0), same as verify.
|
|
125
|
-
text = fs.readFileSync(file || 0, "utf8");
|
|
126
|
-
}
|
|
127
|
-
catch (error) {
|
|
128
|
-
throw new Error(`Cannot read ledger entry${file ? ` from ${file}` : " from stdin"}: ${error.message}`);
|
|
129
|
-
}
|
|
130
|
-
let parsed;
|
|
131
|
-
try {
|
|
132
|
-
parsed = JSON.parse(text);
|
|
133
|
-
}
|
|
134
|
-
catch {
|
|
135
|
-
(0, io_1.printJson)({ ok: false, id: null, kind: null, diff: null, failedChecks: [{ name: "parse", code: "ledger-bad-json" }] });
|
|
136
|
-
process.exitCode = 1;
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
const result = (0, ledger_1.applyLedgerProposal)(parsed);
|
|
140
|
-
(0, io_1.printJson)(result);
|
|
141
|
-
// Fail-closed: the diff only comes out (ok:true) when the proposal verifies,
|
|
142
|
-
// so `cw ledger apply <file> | git apply` never feeds git an unverified patch.
|
|
143
|
-
if (!result.ok)
|
|
144
|
-
process.exitCode = 1;
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
case "list": {
|
|
148
|
-
// `--dir` is repeatable: 2+ dirs union-verify multiple mirrors into one
|
|
149
|
-
// inbox; a single --dir keeps the original single-directory output (POLA).
|
|
150
|
-
const dirs = Array.isArray(opts.dir) ? opts.dir.map(String).filter(Boolean) : [];
|
|
151
|
-
if (dirs.length > 1) {
|
|
152
|
-
const union = (0, ledger_1.unionLedgerEntries)(dirs);
|
|
153
|
-
(0, io_1.printJson)(union);
|
|
154
|
-
if (!union.allOk)
|
|
155
|
-
process.exitCode = 1;
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
const dir = (0, io_1.required)(dirs[0] || stringOption(opts.dir), "--dir <ledger-directory>");
|
|
159
|
-
const result = (0, ledger_1.listLedgerEntries)(dir);
|
|
160
|
-
(0, io_1.printJson)(result);
|
|
161
|
-
// Fail-closed inbox: refuse the whole batch if any entry does not verify.
|
|
162
|
-
if (!result.allOk)
|
|
163
|
-
process.exitCode = 1;
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
default:
|
|
167
|
-
throw new Error("Usage: cw ledger propose|review|verify|apply|list [options]");
|
|
168
|
-
}
|
|
169
|
-
}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleGc = handleGc;
|
|
4
|
-
exports.handleTelemetry = handleTelemetry;
|
|
5
|
-
exports.handleDemo = handleDemo;
|
|
6
|
-
const capability_core_1 = require("../../capability-core");
|
|
7
|
-
const run_registry_1 = require("../../run-registry");
|
|
8
|
-
const telemetry_demo_1 = require("../../telemetry-demo");
|
|
9
|
-
const io_1 = require("../io");
|
|
10
|
-
/** `cw gc plan|run|verify [run-id] …` — run retention & provable reclamation. */
|
|
11
|
-
function handleGc(args, runner) {
|
|
12
|
-
// Run Retention & Provable Reclamation (v0.1.39). `plan` is a pure dry-run
|
|
13
|
-
// (frees nothing); `run` executes the write-ahead reclamation transaction;
|
|
14
|
-
// `verify` re-proves a reclaimed run. CW never reclaims by default.
|
|
15
|
-
const registry = (0, capability_core_1.runRegistryFor)(args.options, runner);
|
|
16
|
-
const [subcommand, id] = args.positionals;
|
|
17
|
-
switch (subcommand) {
|
|
18
|
-
case "plan": {
|
|
19
|
-
const result = (0, capability_core_1.gcPlan)(registry, id, args.options);
|
|
20
|
-
if ((0, io_1.wantsJson)(args.options))
|
|
21
|
-
(0, io_1.printJson)(result);
|
|
22
|
-
else
|
|
23
|
-
process.stdout.write(`${(0, run_registry_1.formatGcPlan)(result)}\n`);
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
case "run": {
|
|
27
|
-
const result = (0, capability_core_1.gcRun)(registry, id, args.options);
|
|
28
|
-
if ((0, io_1.wantsJson)(args.options))
|
|
29
|
-
(0, io_1.printJson)(result);
|
|
30
|
-
else
|
|
31
|
-
process.stdout.write(`${(0, run_registry_1.formatGcRun)(result)}\n`);
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
case "verify": {
|
|
35
|
-
const result = (0, capability_core_1.gcVerify)(registry, (0, io_1.required)(id, "run id"), args.options);
|
|
36
|
-
if ((0, io_1.wantsJson)(args.options))
|
|
37
|
-
(0, io_1.printJson)(result);
|
|
38
|
-
else
|
|
39
|
-
process.stdout.write(`${(0, run_registry_1.formatGcVerify)(result)}\n`);
|
|
40
|
-
// Fail closed ONLY on a real integrity failure: a run that WAS reclaimed
|
|
41
|
-
// but no longer re-proves. A not-reclaimed run has nothing to verify
|
|
42
|
-
// (reclaimed:false/verified:false) and must not be treated as a failure.
|
|
43
|
-
// LIMIT (honest): a DELETED reclaimed.json reads as reclaimed:false, so
|
|
44
|
-
// proof-deletion is indistinguishable from never-reclaimed here without
|
|
45
|
-
// an independent witness (e.g. a trust-audit reclamation event) — a
|
|
46
|
-
// follow-up. This guard is still strictly better than the prior exit-0.
|
|
47
|
-
if (result.reclaimed && !result.verified)
|
|
48
|
-
process.exitCode = 1;
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
default:
|
|
52
|
-
throw new Error("Usage: cw.js gc plan|run|verify [run-id] [--reclaimAfterArchiveDays N] [--keep-scratch] [--keep-snapshots] [--limit N] [--json]");
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
/** `cw telemetry verify <run-id> …` — verify the signed telemetry ledger. */
|
|
56
|
-
function handleTelemetry(args, runner) {
|
|
57
|
-
const [subcommand, id] = args.positionals;
|
|
58
|
-
switch (subcommand) {
|
|
59
|
-
case "verify": {
|
|
60
|
-
const result = (0, capability_core_1.telemetryVerify)(runner, { ...args.options, runId: id || args.options.runId || args.options.run });
|
|
61
|
-
if ((0, io_1.wantsJson)(args.options))
|
|
62
|
-
(0, io_1.printJson)(result);
|
|
63
|
-
else
|
|
64
|
-
process.stdout.write(`${(0, telemetry_demo_1.formatTelemetryVerify)(result)}\n`);
|
|
65
|
-
// Fail closed: a forged/edited/corrupt ledger verifies false — report it
|
|
66
|
-
// through the exit code so `cw telemetry verify <run> && deploy` cannot
|
|
67
|
-
// pass on a lie. (Absent ledger = present:false/verified:true -> exit 0.)
|
|
68
|
-
if (!result.verified)
|
|
69
|
-
process.exitCode = 1;
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
default:
|
|
73
|
-
throw new Error("Usage: cw.js telemetry verify <run-id> [--pubkey <pem-or-path>] [--json]");
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
/** `cw demo tamper|bundle [--json]` — the tamper/bundle integrity demos. */
|
|
77
|
-
function handleDemo(args, runner) {
|
|
78
|
-
const [subcommand] = args.positionals;
|
|
79
|
-
switch (subcommand) {
|
|
80
|
-
case "tamper": {
|
|
81
|
-
const result = (0, capability_core_1.demoTamper)(runner, args.options);
|
|
82
|
-
if ((0, io_1.wantsJson)(args.options))
|
|
83
|
-
(0, io_1.printJson)(result);
|
|
84
|
-
else
|
|
85
|
-
process.stdout.write(`${(0, telemetry_demo_1.formatTamperDemo)(result)}\n`);
|
|
86
|
-
// Fail closed: if the proof did not hold (a tamper went undetected),
|
|
87
|
-
// exit nonzero so the demo can never green a broken guarantee.
|
|
88
|
-
if (!result.proven)
|
|
89
|
-
process.exitCode = 1;
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
case "bundle": {
|
|
93
|
-
const result = (0, capability_core_1.demoBundle)(runner, args.options);
|
|
94
|
-
if ((0, io_1.wantsJson)(args.options))
|
|
95
|
-
(0, io_1.printJson)(result);
|
|
96
|
-
else
|
|
97
|
-
process.stdout.write(`${(0, telemetry_demo_1.formatBundleDemo)(result)}\n`);
|
|
98
|
-
// Fail closed: a forged bundle that verified would be a regression in the
|
|
99
|
-
// bundle guarantee — exit nonzero so the demo can never green it.
|
|
100
|
-
if (!result.proven)
|
|
101
|
-
process.exitCode = 1;
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
default:
|
|
105
|
-
throw new Error("Usage: cw.js demo tamper|bundle [--json]");
|
|
106
|
-
}
|
|
107
|
-
}
|