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
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// shell/node-store.ts — writeRunNode, node-snapshot/replay disk persistence
|
|
3
|
+
// and reads.
|
|
4
|
+
//
|
|
5
|
+
// MILESTONE 3. The disk half of core/state/state-node.ts (writeRunNode)
|
|
6
|
+
// and core/state/node-snapshot.ts (persist callbacks + readNodeSnapshot/
|
|
7
|
+
// readNodeReplay's directory scans). Byte-exact port of the old build's
|
|
8
|
+
// src/state-node.ts:226-231 and src/node-snapshot.ts:96-127.
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.writeRunNode = writeRunNode;
|
|
44
|
+
exports.appendRunNode = appendRunNode;
|
|
45
|
+
exports.snapshotNode = snapshotNode;
|
|
46
|
+
exports.replayNodeSnapshot = replayNodeSnapshot;
|
|
47
|
+
exports.readNodeSnapshot = readNodeSnapshot;
|
|
48
|
+
exports.readNodeReplay = readNodeReplay;
|
|
49
|
+
const fs = __importStar(require("node:fs"));
|
|
50
|
+
const path = __importStar(require("node:path"));
|
|
51
|
+
const fs_atomic_1 = require("./fs-atomic");
|
|
52
|
+
const state_node_1 = require("../core/state/state-node");
|
|
53
|
+
const node_snapshot_1 = require("../core/state/node-snapshot");
|
|
54
|
+
const validation_1 = require("../core/state/validation");
|
|
55
|
+
const node_snapshot_2 = require("../core/state/node-snapshot");
|
|
56
|
+
/** Writes the node JSON to `<stateNodesDir>/<safeFileName(node.id)>.json`
|
|
57
|
+
* with `writeJson` (NOT durable) and returns the file path. */
|
|
58
|
+
function writeRunNode(run, node) {
|
|
59
|
+
const dir = run.paths.stateNodesDir || path.join(run.paths.runDir, "nodes");
|
|
60
|
+
const file = path.join(dir, `${(0, fs_atomic_1.safeFileName)(node.id)}.json`);
|
|
61
|
+
(0, fs_atomic_1.writeJson)(file, node);
|
|
62
|
+
return file;
|
|
63
|
+
}
|
|
64
|
+
/** Upserts `node` into `run.nodes` in place, then writes it to disk. */
|
|
65
|
+
function appendRunNode(run, node) {
|
|
66
|
+
return (0, state_node_1.appendRunNode)(run, node, writeRunNode);
|
|
67
|
+
}
|
|
68
|
+
function snapshotsRoot(run) {
|
|
69
|
+
const base = run.paths.stateNodesDir || path.join(run.paths.runDir, "nodes");
|
|
70
|
+
return path.join(base, "snapshots");
|
|
71
|
+
}
|
|
72
|
+
function snapshotDir(run, nodeId) {
|
|
73
|
+
return path.join(snapshotsRoot(run), (0, fs_atomic_1.safeFileName)(nodeId));
|
|
74
|
+
}
|
|
75
|
+
/** Snapshot one StateNode by id, persisting by default under
|
|
76
|
+
* `nodes/snapshots/<safeFileName(nodeId)>/<snapshotId>.json`. */
|
|
77
|
+
function snapshotNode(run, nodeId, options = {}) {
|
|
78
|
+
return (0, node_snapshot_1.snapshotNode)(run, nodeId, {
|
|
79
|
+
now: options.now,
|
|
80
|
+
persist: options.persist === false
|
|
81
|
+
? false
|
|
82
|
+
: (snapshot) => (0, fs_atomic_1.writeJson)(path.join(snapshotDir(run, nodeId), `${snapshot.snapshotId}.json`), snapshot),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/** Deterministically replay one node from a snapshot, persisting by
|
|
86
|
+
* default under `.../replays/<replayId>.json`. `pathExists` defaults to
|
|
87
|
+
* the real filesystem. */
|
|
88
|
+
function replayNodeSnapshot(run, snapshot, options = {}) {
|
|
89
|
+
return (0, node_snapshot_1.replayNodeSnapshot)(run, snapshot, {
|
|
90
|
+
now: options.now,
|
|
91
|
+
pathExists: fs.existsSync,
|
|
92
|
+
persist: options.persist === false
|
|
93
|
+
? false
|
|
94
|
+
: (replay) => (0, fs_atomic_1.writeJson)(path.join(snapshotDir(run, snapshot.nodeId), "replays", `${replay.replayId}.json`), replay),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/** Scans every dir under `nodes/snapshots/` for `<snapshotId>.json`. */
|
|
98
|
+
function readNodeSnapshot(run, snapshotId) {
|
|
99
|
+
const root = snapshotsRoot(run);
|
|
100
|
+
if (fs.existsSync(root)) {
|
|
101
|
+
for (const nodeDir of fs.readdirSync(root)) {
|
|
102
|
+
const file = path.join(root, nodeDir, `${snapshotId}.json`);
|
|
103
|
+
if (fs.existsSync(file))
|
|
104
|
+
return (0, validation_1.validateNodeSnapshot)(JSON.parse(fs.readFileSync(file, "utf8")));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
throw new node_snapshot_2.NodeSnapshotError("snapshot-not-found", `Node snapshot ${snapshotId} not found in run ${run.id}`, {
|
|
108
|
+
freshness: "absent",
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/** Scans every dir under `nodes/snapshots/<nodeDir>/replays/` for `<replayId>.json`. */
|
|
112
|
+
function readNodeReplay(run, replayId) {
|
|
113
|
+
const root = snapshotsRoot(run);
|
|
114
|
+
if (fs.existsSync(root)) {
|
|
115
|
+
for (const nodeDir of fs.readdirSync(root)) {
|
|
116
|
+
const file = path.join(root, nodeDir, "replays", `${replayId}.json`);
|
|
117
|
+
if (fs.existsSync(file))
|
|
118
|
+
return (0, validation_1.validateNodeReplayRun)(JSON.parse(fs.readFileSync(file, "utf8")));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
throw new node_snapshot_2.NodeSnapshotError("replay-not-found", `Node replay ${replayId} not found in run ${run.id}`, {
|
|
122
|
+
freshness: "absent",
|
|
123
|
+
});
|
|
124
|
+
}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
// shell/observability-format.ts — human formatters for `cw metrics show`/
|
|
3
|
+
// `cw metrics summary`. Byte-exact port of the old build's
|
|
4
|
+
// src/observability/format.ts.
|
|
5
|
+
//
|
|
6
|
+
// MILESTONE 11 (reporting/observability). Evidence: SPEC/reporting-ux.md
|
|
7
|
+
// "cw metrics show / summary" (exact line shapes).
|
|
2
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
9
|
exports.formatMetricsReport = formatMetricsReport;
|
|
4
10
|
exports.formatMetricsSummary = formatMetricsSummary;
|
|
5
11
|
function formatRate(r) {
|
|
6
12
|
if (r.state === "n/a")
|
|
7
13
|
return `n/a (0 samples)`;
|
|
8
|
-
return `${(
|
|
14
|
+
return `${(r.rate * 100).toFixed(1)}% (${r.count}/${r.total})`;
|
|
9
15
|
}
|
|
10
16
|
function formatMs(ms) {
|
|
11
17
|
if (ms === null)
|
|
@@ -1,74 +1,75 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
// shell/observability-intake.ts — POLICY as DATA + host-attested usage
|
|
3
|
+
// parsing for shell/observability.ts. Byte-exact port of the old build's
|
|
4
|
+
// src/observability/intake.ts.
|
|
5
|
+
//
|
|
6
|
+
// MILESTONE 11 (reporting/observability).
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
5
40
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
41
|
exports.loadCostPolicy = loadCostPolicy;
|
|
7
42
|
exports.parseUsageFromArgs = parseUsageFromArgs;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const state_1 = require("../state");
|
|
16
|
-
/** Resolve a CostPolicy from CLI/MCP args. `--pricing <path>` loads a policy
|
|
17
|
-
* file; `--pricing default|bundled` loads the bundled example under
|
|
18
|
-
* manifest/pricing.policy.json. Absent ⇒ undefined ⇒ cost is `unpriced`/
|
|
19
|
-
* `unreported`, never guessed. */
|
|
43
|
+
const fs = __importStar(require("node:fs"));
|
|
44
|
+
const path = __importStar(require("node:path"));
|
|
45
|
+
const fs_atomic_1 = require("./fs-atomic");
|
|
46
|
+
/** Resolve a CostPolicy from CLI/MCP args. `--pricing <path>` loads a
|
|
47
|
+
* policy file; `--pricing default|bundled` loads the bundled example.
|
|
48
|
+
* Absent -> undefined -> cost is `unpriced`/`unreported`, never
|
|
49
|
+
* guessed. */
|
|
20
50
|
function loadCostPolicy(args, pluginRoot) {
|
|
21
51
|
const raw = args.pricing ?? args.pricingPolicy ?? args.policy;
|
|
22
52
|
if (raw === undefined || raw === null || raw === "")
|
|
23
53
|
return undefined;
|
|
24
54
|
const value = String(raw);
|
|
25
|
-
const file = value === "default" || value === "bundled"
|
|
26
|
-
|
|
27
|
-
: node_path_1.default.resolve(value);
|
|
28
|
-
if (!node_fs_1.default.existsSync(file))
|
|
55
|
+
const file = value === "default" || value === "bundled" ? path.join(pluginRoot, "manifest", "pricing.policy.json") : path.resolve(value);
|
|
56
|
+
if (!fs.existsSync(file))
|
|
29
57
|
throw new Error(`Pricing policy file not found: ${file}`);
|
|
30
|
-
const parsed = (0,
|
|
58
|
+
const parsed = (0, fs_atomic_1.readJson)(file);
|
|
31
59
|
if (!parsed || parsed.schemaVersion !== 1 || !Array.isArray(parsed.models)) {
|
|
32
60
|
throw new Error(`Invalid pricing policy (expected schemaVersion 1 + models[]): ${file}`);
|
|
33
61
|
}
|
|
34
62
|
return parsed;
|
|
35
63
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
* caller that passes nothing gets nothing. */
|
|
39
|
-
function parseUsageFromArgs(args, now) {
|
|
40
|
-
const inline = args.usage;
|
|
41
|
-
if (inline && typeof inline === "object" && !Array.isArray(inline)) {
|
|
42
|
-
return normalizeUsage(inline, now);
|
|
43
|
-
}
|
|
44
|
-
const input = numeric(args.usageInputTokens ?? args["usage-input-tokens"]);
|
|
45
|
-
const output = numeric(args.usageOutputTokens ?? args["usage-output-tokens"]);
|
|
46
|
-
const model = args.usageModel ?? args["usage-model"];
|
|
47
|
-
const total = numeric(args.usageTotalTokens ?? args["usage-total-tokens"]);
|
|
48
|
-
const cacheRead = numeric(args.usageCacheReadTokens ?? args["usage-cache-read-tokens"]);
|
|
49
|
-
const cacheWrite = numeric(args.usageCacheWriteTokens ?? args["usage-cache-write-tokens"]);
|
|
50
|
-
if (input === undefined && output === undefined && total === undefined && model === undefined) {
|
|
64
|
+
function numeric(value) {
|
|
65
|
+
if (value === undefined || value === null || value === "")
|
|
51
66
|
return undefined;
|
|
52
|
-
|
|
53
|
-
return
|
|
54
|
-
source: args.usageSource ?? args["usage-source"],
|
|
55
|
-
model,
|
|
56
|
-
inputTokens: input,
|
|
57
|
-
outputTokens: output,
|
|
58
|
-
totalTokens: total,
|
|
59
|
-
cacheReadTokens: cacheRead,
|
|
60
|
-
cacheWriteTokens: cacheWrite,
|
|
61
|
-
attestedAt: args.usageAttestedAt ?? args["usage-attested-at"],
|
|
62
|
-
note: args.usageNote ?? args["usage-note"]
|
|
63
|
-
}, now);
|
|
67
|
+
const n = Number(value);
|
|
68
|
+
return Number.isFinite(n) ? n : undefined;
|
|
64
69
|
}
|
|
65
70
|
function normalizeUsage(raw, now) {
|
|
66
71
|
const source = raw.source === "operator-recorded" ? "operator-recorded" : "host-attested";
|
|
67
|
-
const usage = {
|
|
68
|
-
schemaVersion: 1,
|
|
69
|
-
source,
|
|
70
|
-
attestedAt: typeof raw.attestedAt === "string" && raw.attestedAt ? raw.attestedAt : now
|
|
71
|
-
};
|
|
72
|
+
const usage = { schemaVersion: 1, source, attestedAt: typeof raw.attestedAt === "string" && raw.attestedAt ? raw.attestedAt : now };
|
|
72
73
|
if (raw.model !== undefined && raw.model !== null && raw.model !== "")
|
|
73
74
|
usage.model = String(raw.model);
|
|
74
75
|
const input = numeric(raw.inputTokens);
|
|
@@ -90,9 +91,31 @@ function normalizeUsage(raw, now) {
|
|
|
90
91
|
usage.note = String(raw.note);
|
|
91
92
|
return usage;
|
|
92
93
|
}
|
|
93
|
-
|
|
94
|
-
|
|
94
|
+
/** Parse a host-attested UsageRecord from CLI/MCP intake args. Returns
|
|
95
|
+
* undefined when NO usage was provided (-> `unreported`). CW never
|
|
96
|
+
* fabricates usage. */
|
|
97
|
+
function parseUsageFromArgs(args, now) {
|
|
98
|
+
const inline = args.usage;
|
|
99
|
+
if (inline && typeof inline === "object" && !Array.isArray(inline)) {
|
|
100
|
+
return normalizeUsage(inline, now);
|
|
101
|
+
}
|
|
102
|
+
const input = numeric(args.usageInputTokens ?? args["usage-input-tokens"]);
|
|
103
|
+
const output = numeric(args.usageOutputTokens ?? args["usage-output-tokens"]);
|
|
104
|
+
const model = args.usageModel ?? args["usage-model"];
|
|
105
|
+
const total = numeric(args.usageTotalTokens ?? args["usage-total-tokens"]);
|
|
106
|
+
const cacheRead = numeric(args.usageCacheReadTokens ?? args["usage-cache-read-tokens"]);
|
|
107
|
+
const cacheWrite = numeric(args.usageCacheWriteTokens ?? args["usage-cache-write-tokens"]);
|
|
108
|
+
if (input === undefined && output === undefined && total === undefined && model === undefined)
|
|
95
109
|
return undefined;
|
|
96
|
-
|
|
97
|
-
|
|
110
|
+
return normalizeUsage({
|
|
111
|
+
source: args.usageSource ?? args["usage-source"],
|
|
112
|
+
model,
|
|
113
|
+
inputTokens: input,
|
|
114
|
+
outputTokens: output,
|
|
115
|
+
totalTokens: total,
|
|
116
|
+
cacheReadTokens: cacheRead,
|
|
117
|
+
cacheWriteTokens: cacheWrite,
|
|
118
|
+
attestedAt: args.usageAttestedAt ?? args["usage-attested-at"],
|
|
119
|
+
note: args.usageNote ?? args["usage-note"],
|
|
120
|
+
}, now);
|
|
98
121
|
}
|