pi-daddy 0.18.1 → 0.20.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/CHANGELOG.md +201 -0
- package/README.md +136 -23
- package/contracts/ledger/v2/README.md +59 -0
- package/contracts/ledger/v2/fixtures/capability-decision.json +95 -0
- package/contracts/ledger/v2/fixtures/check-receipt.json +40 -0
- package/contracts/ledger/v2/fixtures/child-lifecycle.json +42 -0
- package/contracts/ledger/v2/fixtures/workspace-lease.json +41 -0
- package/contracts/ledger/v2/ledger-event.schema.json +633 -0
- package/contracts/ledger/v3/README.md +36 -0
- package/contracts/ledger/v3/fixtures/capability-decision.json +98 -0
- package/contracts/ledger/v3/fixtures/check-receipt.json +42 -0
- package/contracts/ledger/v3/fixtures/child-lifecycle.json +45 -0
- package/contracts/ledger/v3/fixtures/workflow-fact.json +41 -0
- package/contracts/ledger/v3/fixtures/workspace-lease.json +43 -0
- package/contracts/ledger/v3/ledger-event.schema.json +930 -0
- package/dist/approval-prompt.d.ts +2 -1
- package/dist/approval-prompt.d.ts.map +1 -1
- package/dist/approval-prompt.js +9 -0
- package/dist/approval-prompt.js.map +1 -1
- package/dist/approval.d.ts +4 -2
- package/dist/approval.d.ts.map +1 -1
- package/dist/approval.js +4 -0
- package/dist/approval.js.map +1 -1
- package/dist/capabilities.d.ts +90 -0
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +114 -3
- package/dist/capabilities.js.map +1 -1
- package/dist/catalog.d.ts +15 -1
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +54 -3
- package/dist/catalog.js.map +1 -1
- package/dist/check-runner.d.ts.map +1 -1
- package/dist/check-runner.js +19 -7
- package/dist/check-runner.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +21 -1
- package/dist/cli.js.map +1 -1
- package/dist/correlation.d.ts.map +1 -1
- package/dist/correlation.js +10 -0
- package/dist/correlation.js.map +1 -1
- package/dist/dashboard-cli.d.ts +18 -0
- package/dist/dashboard-cli.d.ts.map +1 -0
- package/dist/dashboard-cli.js +154 -0
- package/dist/dashboard-cli.js.map +1 -0
- package/dist/dashboard-handshake.d.ts +37 -0
- package/dist/dashboard-handshake.d.ts.map +1 -0
- package/dist/dashboard-handshake.js +127 -0
- package/dist/dashboard-handshake.js.map +1 -0
- package/dist/dashboard-herdr.d.ts +54 -0
- package/dist/dashboard-herdr.d.ts.map +1 -0
- package/dist/dashboard-herdr.js +286 -0
- package/dist/dashboard-herdr.js.map +1 -0
- package/dist/dashboard-projection.d.ts +73 -0
- package/dist/dashboard-projection.d.ts.map +1 -0
- package/dist/dashboard-projection.js +294 -0
- package/dist/dashboard-projection.js.map +1 -0
- package/dist/dashboard-render.d.ts +10 -0
- package/dist/dashboard-render.d.ts.map +1 -0
- package/dist/dashboard-render.js +208 -0
- package/dist/dashboard-render.js.map +1 -0
- package/dist/definitions.d.ts.map +1 -1
- package/dist/definitions.js +7 -1
- package/dist/definitions.js.map +1 -1
- package/dist/delegate-types.d.ts +6 -2
- package/dist/delegate-types.d.ts.map +1 -1
- package/dist/delegate-types.js.map +1 -1
- package/dist/delegate.d.ts.map +1 -1
- package/dist/delegate.js +34 -4
- package/dist/delegate.js.map +1 -1
- package/dist/delegation-approval.d.ts.map +1 -1
- package/dist/delegation-approval.js +37 -12
- package/dist/delegation-approval.js.map +1 -1
- package/dist/execution-id.d.ts +6 -0
- package/dist/execution-id.d.ts.map +1 -0
- package/dist/execution-id.js +13 -0
- package/dist/execution-id.js.map +1 -0
- package/dist/executor.d.ts +2 -1
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +1 -0
- package/dist/executor.js.map +1 -1
- package/dist/grant-env.d.ts +2 -0
- package/dist/grant-env.d.ts.map +1 -1
- package/dist/grant-env.js +26 -3
- package/dist/grant-env.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +13 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +35 -2
- package/dist/init.js.map +1 -1
- package/dist/lease-helper.d.ts +58 -0
- package/dist/lease-helper.d.ts.map +1 -0
- package/dist/lease-helper.js +94 -0
- package/dist/lease-helper.js.map +1 -0
- package/dist/lease-record.d.ts +15 -3
- package/dist/lease-record.d.ts.map +1 -1
- package/dist/lease-record.js.map +1 -1
- package/dist/ledger-events.d.ts +59 -15
- package/dist/ledger-events.d.ts.map +1 -1
- package/dist/ledger-events.js +67 -5
- package/dist/ledger-events.js.map +1 -1
- package/dist/ledger-identifiers.d.ts +7 -0
- package/dist/ledger-identifiers.d.ts.map +1 -0
- package/dist/ledger-identifiers.js +20 -0
- package/dist/ledger-identifiers.js.map +1 -0
- package/dist/ledger-report.d.ts +5 -2
- package/dist/ledger-report.d.ts.map +1 -1
- package/dist/ledger-report.js +38 -14
- package/dist/ledger-report.js.map +1 -1
- package/dist/ledger-v3-validation.d.ts +11 -0
- package/dist/ledger-v3-validation.d.ts.map +1 -0
- package/dist/ledger-v3-validation.js +265 -0
- package/dist/ledger-v3-validation.js.map +1 -0
- package/dist/ledger.d.ts +27 -9
- package/dist/ledger.d.ts.map +1 -1
- package/dist/ledger.js +38 -6
- package/dist/ledger.js.map +1 -1
- package/dist/propagation.d.ts +19 -1
- package/dist/propagation.d.ts.map +1 -1
- package/dist/propagation.js +23 -1
- package/dist/propagation.js.map +1 -1
- package/dist/refusals.d.ts +1 -1
- package/dist/refusals.d.ts.map +1 -1
- package/dist/refusals.js +1 -0
- package/dist/refusals.js.map +1 -1
- package/dist/resolve.d.ts +10 -0
- package/dist/resolve.d.ts.map +1 -1
- package/dist/resolve.js +27 -3
- package/dist/resolve.js.map +1 -1
- package/dist/routing-authority.d.ts +71 -0
- package/dist/routing-authority.d.ts.map +1 -0
- package/dist/routing-authority.js +100 -0
- package/dist/routing-authority.js.map +1 -0
- package/dist/run-child.d.ts +3 -1
- package/dist/run-child.d.ts.map +1 -1
- package/dist/run-child.js +30 -2
- package/dist/run-child.js.map +1 -1
- package/dist/run-herdr.d.ts +2 -0
- package/dist/run-herdr.d.ts.map +1 -1
- package/dist/run-herdr.js +8 -0
- package/dist/run-herdr.js.map +1 -1
- package/dist/skill-packages.d.ts +11 -5
- package/dist/skill-packages.d.ts.map +1 -1
- package/dist/skill-packages.js +20 -11
- package/dist/skill-packages.js.map +1 -1
- package/dist/workflow-fact-id.d.ts +4 -0
- package/dist/workflow-fact-id.d.ts.map +1 -0
- package/dist/workflow-fact-id.js +14 -0
- package/dist/workflow-fact-id.js.map +1 -0
- package/dist/workflow-facts.d.ts +34 -0
- package/dist/workflow-facts.d.ts.map +1 -0
- package/dist/workflow-facts.js +43 -0
- package/dist/workflow-facts.js.map +1 -0
- package/dist/workspace-lease.d.ts +15 -3
- package/dist/workspace-lease.d.ts.map +1 -1
- package/dist/workspace-lease.js +81 -24
- package/dist/workspace-lease.js.map +1 -1
- package/dist/workspace.d.ts +25 -0
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +142 -5
- package/dist/workspace.js.map +1 -1
- package/extensions/chain-ledger.ts +4 -0
- package/extensions/chain-plan.ts +98 -0
- package/extensions/delegate-chain.ts +63 -122
- package/extensions/delegation-ledger.ts +60 -0
- package/extensions/delegation.ts +20 -14
- package/extensions/execute-child.ts +85 -21
- package/extensions/execution-occurrence.ts +20 -0
- package/extensions/grants-command.ts +33 -4
- package/extensions/grants.ts +50 -1
- package/extensions/init-command.ts +33 -2
- package/extensions/run-delegation.ts +36 -56
- package/extensions/session-report.ts +13 -20
- package/extensions/session.ts +16 -3
- package/extensions/workspace-runtime.ts +44 -4
- package/herdr-plugin/herdr-plugin.toml +18 -0
- package/package.json +22 -5
- package/src/approval-prompt.ts +2 -1
- package/src/approval.ts +4 -2
- package/src/capabilities.ts +120 -4
- package/src/catalog.ts +62 -4
- package/src/check-runner.ts +24 -8
- package/src/cli.ts +24 -1
- package/src/correlation.ts +11 -0
- package/src/dashboard-cli.ts +171 -0
- package/src/dashboard-handshake.ts +185 -0
- package/src/dashboard-herdr.ts +355 -0
- package/src/dashboard-projection.ts +390 -0
- package/src/dashboard-render.ts +254 -0
- package/src/definitions.ts +7 -1
- package/src/delegate-types.ts +6 -2
- package/src/delegate.ts +43 -4
- package/src/delegation-approval.ts +37 -12
- package/src/execution-id.ts +18 -0
- package/src/executor.ts +2 -1
- package/src/grant-env.ts +39 -7
- package/src/index.ts +26 -0
- package/src/init.ts +40 -2
- package/src/lease-helper.ts +97 -0
- package/src/lease-record.ts +15 -3
- package/src/ledger-events.ts +116 -28
- package/src/ledger-identifiers.ts +21 -0
- package/src/ledger-report.ts +40 -19
- package/src/ledger-v3-validation.ts +266 -0
- package/src/ledger.ts +75 -12
- package/src/propagation.ts +24 -1
- package/src/refusals.ts +1 -0
- package/src/resolve.ts +29 -3
- package/src/routing-authority.ts +121 -0
- package/src/run-child.ts +35 -3
- package/src/run-herdr.ts +9 -0
- package/src/skill-packages.ts +20 -13
- package/src/workflow-fact-id.ts +16 -0
- package/src/workflow-facts.ts +65 -0
- package/src/workspace-lease.ts +84 -24
- package/src/workspace.ts +179 -6
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Identifier text safe to copy onto the operator's terminal; prose belongs in no ledger display field. */
|
|
2
|
+
export declare function isLedgerDisplayIdentifier(value: unknown): value is string;
|
|
3
|
+
/** The tighter bound for model-facing correlation labels that are copied onto every event. */
|
|
4
|
+
export declare function isLedgerCorrelationIdentifier(value: unknown): value is string;
|
|
5
|
+
/** A namespaced capability id with an ASCII, non-prose tail. Namespace wildcards remain representable. */
|
|
6
|
+
export declare function isLedgerCapabilityIdentifier(value: unknown): value is string;
|
|
7
|
+
//# sourceMappingURL=ledger-identifiers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger-identifiers.d.ts","sourceRoot":"","sources":["../src/ledger-identifiers.ts"],"names":[],"mappings":"AAKA,2GAA2G;AAC3G,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEzE;AAED,8FAA8F;AAC9F,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE7E;AAED,0GAA0G;AAC1G,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAI5E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const DISPLAY_IDENTIFIER = /^[A-Za-z0-9@*][A-Za-z0-9@*._:/-]{0,511}$/;
|
|
2
|
+
const CORRELATION_IDENTIFIER = /^[A-Za-z0-9@*][A-Za-z0-9@*._:/-]{0,127}$/;
|
|
3
|
+
const CAPABILITY_TAIL = /^[A-Za-z0-9@*][A-Za-z0-9@*._/-]{0,255}$/;
|
|
4
|
+
const CAPABILITY_PREFIXES = ["tool:", "skill:", "agent:", "workspace:", "ext:"];
|
|
5
|
+
/** Identifier text safe to copy onto the operator's terminal; prose belongs in no ledger display field. */
|
|
6
|
+
export function isLedgerDisplayIdentifier(value) {
|
|
7
|
+
return typeof value === "string" && DISPLAY_IDENTIFIER.test(value);
|
|
8
|
+
}
|
|
9
|
+
/** The tighter bound for model-facing correlation labels that are copied onto every event. */
|
|
10
|
+
export function isLedgerCorrelationIdentifier(value) {
|
|
11
|
+
return typeof value === "string" && CORRELATION_IDENTIFIER.test(value);
|
|
12
|
+
}
|
|
13
|
+
/** A namespaced capability id with an ASCII, non-prose tail. Namespace wildcards remain representable. */
|
|
14
|
+
export function isLedgerCapabilityIdentifier(value) {
|
|
15
|
+
if (typeof value !== "string")
|
|
16
|
+
return false;
|
|
17
|
+
const prefix = CAPABILITY_PREFIXES.find((candidate) => value.startsWith(candidate));
|
|
18
|
+
return Boolean(prefix && CAPABILITY_TAIL.test(value.slice(prefix.length)));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=ledger-identifiers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger-identifiers.js","sourceRoot":"","sources":["../src/ledger-identifiers.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,0CAA0C,CAAC;AACtE,MAAM,sBAAsB,GAAG,0CAA0C,CAAC;AAC1E,MAAM,eAAe,GAAG,yCAAyC,CAAC;AAClE,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAU,CAAC;AAEzF,2GAA2G;AAC3G,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACtD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,6BAA6B,CAAC,KAAc;IAC1D,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzE,CAAC;AAED,0GAA0G;AAC1G,MAAM,UAAU,4BAA4B,CAAC,KAAc;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IACpF,OAAO,OAAO,CAAC,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC"}
|
package/dist/ledger-report.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ import type { ApprovalSource } from "./approval.ts";
|
|
|
14
14
|
export interface LedgerReport {
|
|
15
15
|
/** False when the file is absent — a configuration state, not damage. */
|
|
16
16
|
exists: boolean;
|
|
17
|
-
/** Capability-decision records (legacy or
|
|
17
|
+
/** Capability-decision records (legacy, v2, or v3). */
|
|
18
18
|
records: number;
|
|
19
19
|
/** Every parsed ledger event, including lifecycle and lease events. */
|
|
20
20
|
events: number;
|
|
@@ -31,13 +31,16 @@ export interface LedgerReport {
|
|
|
31
31
|
};
|
|
32
32
|
lifecycle: {
|
|
33
33
|
starting: number;
|
|
34
|
+
running: number;
|
|
34
35
|
completed: number;
|
|
35
36
|
failed: number;
|
|
36
37
|
};
|
|
38
|
+
/** Planned/observed/controller-validated facts; never counted as enforced child executions. */
|
|
39
|
+
workflowFacts: number;
|
|
37
40
|
/** Lines that did not, with 1-based line numbers so the report is actionable. */
|
|
38
41
|
corrupt: Array<{
|
|
39
42
|
line: number;
|
|
40
|
-
|
|
43
|
+
reason: string;
|
|
41
44
|
}>;
|
|
42
45
|
/** Records where an agent asked for more than it held — ADR-0008's designated signal. */
|
|
43
46
|
escalationAttempts: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger-report.d.ts","sourceRoot":"","sources":["../src/ledger-report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ledger-report.d.ts","sourceRoot":"","sources":["../src/ledger-report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAOpD,MAAM,WAAW,YAAY;IAC3B,yEAAyE;IACzE,MAAM,EAAE,OAAO,CAAC;IAChB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE;QACf,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QACzE,kBAAkB,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;KAChG,CAAC;IACF,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpF,+FAA+F;IAC/F,aAAa,EAAE,MAAM,CAAC;IACtB,iFAAiF;IACjF,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,yFAAyF;IACzF,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;;;;;;;;;;;OAYG;IACH,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D;;;;;;;;;;;;OAYG;IACH,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrF;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,SAAS,EAAE;QACT,2FAA2F;QAC3F,QAAQ,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QACzC,2EAA2E;QAC3E,gBAAgB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QACjD,0GAA0G;QAC1G,YAAY,EAAE,MAAM,CAAC;QACrB,uFAAuF;QACvF,WAAW,EAAE,MAAM,CAAC;QACpB;;;;;;;;WAQG;QACH,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,EAAE,EAAE,OAAO,CAAC;CACb;AAoDD,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA2LtE"}
|
package/dist/ledger-report.js
CHANGED
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
import { readFile } from "node:fs/promises";
|
|
14
14
|
import { DELEGATE_SUBJECT } from "./approval.js";
|
|
15
15
|
import { isEscalationAttempt } from "./ledger.js";
|
|
16
|
+
import { isExecutionId } from "./execution-id.js";
|
|
17
|
+
import { validateLedgerV3Event } from "./ledger-v3-validation.js";
|
|
16
18
|
/**
|
|
17
19
|
* Read the ledger back and report what is wrong with it.
|
|
18
20
|
*
|
|
@@ -38,16 +40,19 @@ const LEASE_OUTCOME_COUNTERS = {
|
|
|
38
40
|
timeout: "timeout",
|
|
39
41
|
recovered: "recovered",
|
|
40
42
|
};
|
|
41
|
-
function
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
function requireV2(event, fields) {
|
|
45
|
-
if (!validV2Base(event) || fields.some((field) => typeof event[field] !== "string" || event[field] === "")) {
|
|
43
|
+
function requireVersioned(event, fields) {
|
|
44
|
+
if ((event.ledgerVersion !== 2 && event.ledgerVersion !== 3) || typeof event.ts !== "string" ||
|
|
45
|
+
fields.some((field) => typeof event[field] !== "string" || event[field] === "")) {
|
|
46
46
|
throw new Error("invalid versioned ledger event");
|
|
47
47
|
}
|
|
48
|
+
if (event.ledgerVersion === 3 &&
|
|
49
|
+
(!isExecutionId(event.executionId) ||
|
|
50
|
+
(event.parentExecutionId !== null && !isExecutionId(event.parentExecutionId)))) {
|
|
51
|
+
throw new Error("invalid v3 execution identity");
|
|
52
|
+
}
|
|
48
53
|
}
|
|
49
54
|
function requireCapabilityDecision(event) {
|
|
50
|
-
|
|
55
|
+
requireVersioned(event, ["parentId", "childId", "executor", "taskDigest"]);
|
|
51
56
|
for (const field of ["requested", "parentGrant", "effective", "denied", "clipped", "gatedBlocked"]) {
|
|
52
57
|
if (!Array.isArray(event[field]) || !event[field].every((value) => typeof value === "string")) {
|
|
53
58
|
throw new Error("invalid capability decision arrays");
|
|
@@ -69,7 +74,8 @@ export async function verifyLedger(path) {
|
|
|
69
74
|
records: 0,
|
|
70
75
|
events: 0,
|
|
71
76
|
workspaceLeases: { acquired: 0, uncontended: 0, refused: 0, released: 0, releasedUnrecorded: 0, lost: 0, retained: 0, timeout: 0, recovered: 0 },
|
|
72
|
-
lifecycle: { starting: 0, completed: 0, failed: 0 },
|
|
77
|
+
lifecycle: { starting: 0, running: 0, completed: 0, failed: 0 },
|
|
78
|
+
workflowFacts: 0,
|
|
73
79
|
corrupt: [],
|
|
74
80
|
escalationAttempts: 0,
|
|
75
81
|
executors: { herdr: 0, process: 0, unknown: 0 },
|
|
@@ -92,7 +98,8 @@ export async function verifyLedger(path) {
|
|
|
92
98
|
let records = 0;
|
|
93
99
|
let events = 0;
|
|
94
100
|
const workspaceLeases = { acquired: 0, uncontended: 0, refused: 0, released: 0, releasedUnrecorded: 0, lost: 0, retained: 0, timeout: 0, recovered: 0 };
|
|
95
|
-
const lifecycle = { starting: 0, completed: 0, failed: 0 };
|
|
101
|
+
const lifecycle = { starting: 0, running: 0, completed: 0, failed: 0 };
|
|
102
|
+
let workflowFacts = 0;
|
|
96
103
|
let escalationAttempts = 0;
|
|
97
104
|
const executors = { herdr: 0, process: 0, unknown: 0 };
|
|
98
105
|
const bySource = { prompt: 0, session: 0, persisted: 0, inherited: 0 };
|
|
@@ -113,11 +120,25 @@ export async function verifyLedger(path) {
|
|
|
113
120
|
return;
|
|
114
121
|
try {
|
|
115
122
|
const event = JSON.parse(raw);
|
|
116
|
-
if (event.ledgerVersion !== undefined
|
|
117
|
-
|
|
123
|
+
if (event.ledgerVersion !== undefined) {
|
|
124
|
+
if (event.event === undefined)
|
|
125
|
+
throw new Error("versioned ledger line has no event discriminator");
|
|
126
|
+
if (event.ledgerVersion !== 2 && event.ledgerVersion !== 3)
|
|
127
|
+
throw new Error("unsupported ledger version");
|
|
128
|
+
if (event.ledgerVersion === 3 && validateLedgerV3Event(event))
|
|
129
|
+
throw new Error("invalid ledger v3 event");
|
|
130
|
+
}
|
|
131
|
+
if (event.event === "workflow_fact") {
|
|
132
|
+
// v2 has no workflow facts; the exact v3 validator above already checked its vocabulary,
|
|
133
|
+
// correlation and provenance/state relation.
|
|
134
|
+
if (event.ledgerVersion !== 3)
|
|
135
|
+
throw new Error("invalid workflow fact event");
|
|
136
|
+
workflowFacts += 1;
|
|
137
|
+
events += 1;
|
|
138
|
+
return;
|
|
118
139
|
}
|
|
119
140
|
if (event.event === "workspace_lease") {
|
|
120
|
-
|
|
141
|
+
requireVersioned(event, ["childId", "workspaceId", "root", "access"]);
|
|
121
142
|
const outcome = typeof event.outcome === "string" ? event.outcome : "";
|
|
122
143
|
// Explicit map, not a name match: the ledger's outcome vocabulary and these counter names are
|
|
123
144
|
// allowed to differ, and a valid event must never be counted as corruption because a counter
|
|
@@ -132,7 +153,7 @@ export async function verifyLedger(path) {
|
|
|
132
153
|
return;
|
|
133
154
|
}
|
|
134
155
|
if (event.event === "child_lifecycle") {
|
|
135
|
-
|
|
156
|
+
requireVersioned(event, ["childId", "executor"]);
|
|
136
157
|
const state = typeof event.state === "string" ? event.state : "";
|
|
137
158
|
if (!Object.hasOwn(lifecycle, state))
|
|
138
159
|
throw new Error("invalid child lifecycle event");
|
|
@@ -141,7 +162,7 @@ export async function verifyLedger(path) {
|
|
|
141
162
|
return;
|
|
142
163
|
}
|
|
143
164
|
if (event.event === "check_receipt") {
|
|
144
|
-
|
|
165
|
+
requireVersioned(event, ["childId", "receiptId", "workspaceId", "checkId", "treeSha"]);
|
|
145
166
|
events += 1;
|
|
146
167
|
return;
|
|
147
168
|
}
|
|
@@ -216,7 +237,9 @@ export async function verifyLedger(path) {
|
|
|
216
237
|
}
|
|
217
238
|
}
|
|
218
239
|
catch {
|
|
219
|
-
|
|
240
|
+
// Content-free by contract: a torn or foreign line can contain exactly the task/output material the
|
|
241
|
+
// ledger and dashboard promise never to expose. The line number locates the evidence without copying it.
|
|
242
|
+
corrupt.push({ line: index + 1, reason: "invalid ledger line" });
|
|
220
243
|
}
|
|
221
244
|
});
|
|
222
245
|
return {
|
|
@@ -225,6 +248,7 @@ export async function verifyLedger(path) {
|
|
|
225
248
|
events,
|
|
226
249
|
workspaceLeases,
|
|
227
250
|
lifecycle,
|
|
251
|
+
workflowFacts,
|
|
228
252
|
corrupt,
|
|
229
253
|
escalationAttempts,
|
|
230
254
|
executors,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger-report.js","sourceRoot":"","sources":["../src/ledger-report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ledger-report.js","sourceRoot":"","sources":["../src/ledger-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type LedgerV3Object = Record<string, unknown>;
|
|
2
|
+
export declare function isLedgerObject(value: unknown): value is LedgerV3Object;
|
|
3
|
+
export declare function isNonEmptyString(value: unknown): value is string;
|
|
4
|
+
/** Ledger timestamp profile: JSON Schema `date-time`, narrowed to seconds 00-59 for JS date arithmetic. */
|
|
5
|
+
export declare function isTimestamp(value: unknown): value is string;
|
|
6
|
+
export declare function isStringArray(value: unknown): value is string[];
|
|
7
|
+
/** Exact, content-free runtime validation for one closed ledger v3 event. */
|
|
8
|
+
export declare function validateLedgerV3Event(event: LedgerV3Object): string | null;
|
|
9
|
+
/** Ensure a public builder cannot emit bytes the closed v3 reader would reject. */
|
|
10
|
+
export declare function assertLedgerV3Wire<T extends object>(event: T): T;
|
|
11
|
+
//# sourceMappingURL=ledger-v3-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger-v3-validation.d.ts","sourceRoot":"","sources":["../src/ledger-v3-validation.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA4CrD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAItE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEhE;AAED,2GAA2G;AAC3G,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAgB3D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,EAAE,CAE/D;AA4JD,6EAA6E;AAC7E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAa1E;AAED,mFAAmF;AACnF,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAWhE"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import { normaliseCorrelation } from "./correlation.js";
|
|
2
|
+
import { isExecutionId } from "./execution-id.js";
|
|
3
|
+
import { REFUSAL_CODES } from "./refusals.js";
|
|
4
|
+
import { isWorkflowFactId, isWorkflowIdentifier, workflowFactStateMatches } from "./workflow-fact-id.js";
|
|
5
|
+
import { isLedgerCapabilityIdentifier, isLedgerDisplayIdentifier } from "./ledger-identifiers.js";
|
|
6
|
+
const SHA256_RE = /^[a-f0-9]{64}$/i;
|
|
7
|
+
const EXECUTORS = new Set(["process", "herdr"]);
|
|
8
|
+
const APPROVAL_SOURCES = new Set(["prompt", "session", "persisted", "inherited"]);
|
|
9
|
+
const APPROVAL_SCOPES = new Set(["once", "session", "always"]);
|
|
10
|
+
const GATE_OUTCOMES = new Set(["declined", "dismissed", "no-ui", "error"]);
|
|
11
|
+
const LEASE_OUTCOMES = new Set([
|
|
12
|
+
"acquired", "uncontended", "refused", "released", "released-unrecorded", "lost", "retained", "timeout", "recovered",
|
|
13
|
+
]);
|
|
14
|
+
const PROCESS_SIGNALS = new Set([
|
|
15
|
+
"SIGABRT", "SIGALRM", "SIGBUS", "SIGCHLD", "SIGCONT", "SIGFPE", "SIGHUP", "SIGILL", "SIGINT", "SIGIO",
|
|
16
|
+
"SIGIOT", "SIGKILL", "SIGPIPE", "SIGPOLL", "SIGPROF", "SIGPWR", "SIGQUIT", "SIGSEGV", "SIGSTKFLT",
|
|
17
|
+
"SIGSTOP", "SIGSYS", "SIGTERM", "SIGTRAP", "SIGTSTP", "SIGTTIN", "SIGTTOU", "SIGUNUSED", "SIGURG",
|
|
18
|
+
"SIGUSR1", "SIGUSR2", "SIGVTALRM", "SIGWINCH", "SIGXCPU", "SIGXFSZ", "SIGBREAK", "SIGLOST", "SIGINFO",
|
|
19
|
+
]);
|
|
20
|
+
const FIELDS = {
|
|
21
|
+
capability_decision: new Set([
|
|
22
|
+
"ledgerVersion", "event", "ts", "executionId", "parentExecutionId", "parentId", "childId", "depth",
|
|
23
|
+
"agentType", "requested", "parentGrant", "effective", "denied", "clipped", "gatedBlocked", "blocked",
|
|
24
|
+
"reason", "approved", "approvalSource", "approvalSources", "approvalScopes", "approvalExpiresAt",
|
|
25
|
+
"approvalUses", "approvalScope", "humanDenied", "gateOutcome", "definitionDigest", "executor", "taskFrom",
|
|
26
|
+
"taskFromExecutionId", "taskDigest", "correlation", "refusal",
|
|
27
|
+
]),
|
|
28
|
+
workspace_lease: new Set([
|
|
29
|
+
"ledgerVersion", "event", "ts", "executionId", "parentExecutionId", "childId", "workspaceId", "root",
|
|
30
|
+
"access", "outcome", "recovered", "releaseReason", "refusal", "correlation",
|
|
31
|
+
]),
|
|
32
|
+
child_lifecycle: new Set([
|
|
33
|
+
"ledgerVersion", "event", "ts", "executionId", "parentExecutionId", "childId", "state", "executor",
|
|
34
|
+
"exitCode", "signal", "timedOut", "aborted", "truncated", "reason", "deadlineAt", "herdrPaneId",
|
|
35
|
+
"herdrAgentName", "correlation",
|
|
36
|
+
]),
|
|
37
|
+
check_receipt: new Set([
|
|
38
|
+
"ledgerVersion", "event", "ts", "executionId", "parentExecutionId", "childId", "receiptId", "workspaceId",
|
|
39
|
+
"checkId", "treeSha", "correlation",
|
|
40
|
+
]),
|
|
41
|
+
workflow_fact: new Set([
|
|
42
|
+
"ledgerVersion", "event", "ts", "factId", "source", "provenance", "kind", "subject", "state", "correlation",
|
|
43
|
+
]),
|
|
44
|
+
};
|
|
45
|
+
export function isLedgerObject(value) {
|
|
46
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
47
|
+
return false;
|
|
48
|
+
const prototype = Object.getPrototypeOf(value);
|
|
49
|
+
return prototype === Object.prototype || prototype === null;
|
|
50
|
+
}
|
|
51
|
+
export function isNonEmptyString(value) {
|
|
52
|
+
return typeof value === "string" && value.length > 0;
|
|
53
|
+
}
|
|
54
|
+
/** Ledger timestamp profile: JSON Schema `date-time`, narrowed to seconds 00-59 for JS date arithmetic. */
|
|
55
|
+
export function isTimestamp(value) {
|
|
56
|
+
if (typeof value !== "string")
|
|
57
|
+
return false;
|
|
58
|
+
const match = /^(\d{4})-(\d{2})-(\d{2})[Tt](\d{2}):(\d{2}):(\d{2})(?:\.\d+)?(?:[Zz]|([+-])(\d{2}):(\d{2}))$/.exec(value);
|
|
59
|
+
if (!match)
|
|
60
|
+
return false;
|
|
61
|
+
const [, yearText, monthText, dayText, hourText, minuteText, secondText, , offsetHourText, offsetMinuteText] = match;
|
|
62
|
+
const year = Number(yearText);
|
|
63
|
+
const month = Number(monthText);
|
|
64
|
+
const day = Number(dayText);
|
|
65
|
+
const hour = Number(hourText);
|
|
66
|
+
const minute = Number(minuteText);
|
|
67
|
+
const second = Number(secondText);
|
|
68
|
+
if (month < 1 || month > 12 || hour > 23 || minute > 59 || second > 59)
|
|
69
|
+
return false;
|
|
70
|
+
const leap = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
|
|
71
|
+
const days = [31, leap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
72
|
+
if (day < 1 || day > days[month - 1])
|
|
73
|
+
return false;
|
|
74
|
+
return offsetHourText === undefined || (Number(offsetHourText) <= 23 && Number(offsetMinuteText) <= 59);
|
|
75
|
+
}
|
|
76
|
+
export function isStringArray(value) {
|
|
77
|
+
return Array.isArray(value) && value.every((item) => typeof item === "string");
|
|
78
|
+
}
|
|
79
|
+
function optional(event, field, valid) {
|
|
80
|
+
return !Object.hasOwn(event, field) || valid(event[field]);
|
|
81
|
+
}
|
|
82
|
+
function stringMap(value, valid) {
|
|
83
|
+
return isLedgerObject(value) && Object.values(value).every(valid);
|
|
84
|
+
}
|
|
85
|
+
function capabilityMap(value, valid) {
|
|
86
|
+
return isLedgerObject(value) && Object.keys(value).every(isLedgerCapabilityIdentifier) && Object.values(value).every(valid);
|
|
87
|
+
}
|
|
88
|
+
function validCorrelation(value) {
|
|
89
|
+
if (!isLedgerObject(value))
|
|
90
|
+
return false;
|
|
91
|
+
try {
|
|
92
|
+
const normalised = normaliseCorrelation(value);
|
|
93
|
+
// `normaliseCorrelation` drops nulls. The closed schema does not, so equality is part of validation.
|
|
94
|
+
return JSON.stringify(normalised) === JSON.stringify(value);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function validRefusal(value) {
|
|
101
|
+
if (!isLedgerObject(value) || Object.keys(value).some((key) => !["code", "message", "details"].includes(key)))
|
|
102
|
+
return false;
|
|
103
|
+
if (!REFUSAL_CODES.includes(value.code) || typeof value.message !== "string")
|
|
104
|
+
return false;
|
|
105
|
+
return optional(value, "details", (details) => isLedgerObject(details) && Object.values(details).every((entry) => entry === null || ["string", "number", "boolean"].includes(typeof entry)));
|
|
106
|
+
}
|
|
107
|
+
function validDefinitionDigest(value) {
|
|
108
|
+
return isLedgerObject(value) &&
|
|
109
|
+
Object.keys(value).every((key) => ["name", "source", "sha256"].includes(key)) &&
|
|
110
|
+
typeof value.name === "string" && typeof value.source === "string" && SHA256_RE.test(String(value.sha256));
|
|
111
|
+
}
|
|
112
|
+
function validApprovalUse(value) {
|
|
113
|
+
return isLedgerObject(value) && Object.keys(value).every((key) => ["max", "remaining"].includes(key)) &&
|
|
114
|
+
Number.isInteger(value.max) && value.max >= 0 &&
|
|
115
|
+
Number.isInteger(value.remaining) && value.remaining >= 0;
|
|
116
|
+
}
|
|
117
|
+
function validateBase(event) {
|
|
118
|
+
if (!isTimestamp(event.ts))
|
|
119
|
+
return "ts must be an RFC 3339 timestamp";
|
|
120
|
+
if (!isExecutionId(event.executionId))
|
|
121
|
+
return "executionId is missing or invalid";
|
|
122
|
+
if (event.parentExecutionId !== null && !isExecutionId(event.parentExecutionId)) {
|
|
123
|
+
return "parentExecutionId must be an execution id or null";
|
|
124
|
+
}
|
|
125
|
+
if (event.parentExecutionId === event.executionId)
|
|
126
|
+
return "an execution cannot be its own parent";
|
|
127
|
+
if (!isLedgerDisplayIdentifier(event.childId))
|
|
128
|
+
return "childId is missing or invalid";
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
function validateCapabilityDecision(event) {
|
|
132
|
+
if (!isLedgerDisplayIdentifier(event.parentId) || !Number.isInteger(event.depth) || event.depth < 0) {
|
|
133
|
+
return "capability decision identity is invalid";
|
|
134
|
+
}
|
|
135
|
+
for (const field of ["requested", "parentGrant", "effective", "denied", "clipped", "gatedBlocked"]) {
|
|
136
|
+
if (!isStringArray(event[field]) || !event[field].every(isLedgerCapabilityIdentifier)) {
|
|
137
|
+
return `capability decision ${field} must contain capability identifiers`;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (typeof event.blocked !== "boolean" || !EXECUTORS.has(String(event.executor)) || !SHA256_RE.test(String(event.taskDigest))) {
|
|
141
|
+
return "capability decision required fields are invalid";
|
|
142
|
+
}
|
|
143
|
+
if (!optional(event, "agentType", isLedgerDisplayIdentifier) ||
|
|
144
|
+
!optional(event, "reason", (value) => typeof value === "string") ||
|
|
145
|
+
!optional(event, "approved", (value) => isStringArray(value) && value.every(isLedgerCapabilityIdentifier)) ||
|
|
146
|
+
!optional(event, "approvalSource", (value) => APPROVAL_SOURCES.has(String(value))) ||
|
|
147
|
+
!optional(event, "approvalSources", (value) => capabilityMap(value, (entry) => APPROVAL_SOURCES.has(String(entry)))) ||
|
|
148
|
+
!optional(event, "approvalScopes", (value) => capabilityMap(value, (entry) => APPROVAL_SCOPES.has(String(entry)))) ||
|
|
149
|
+
!optional(event, "approvalExpiresAt", (value) => capabilityMap(value, isTimestamp)) ||
|
|
150
|
+
!optional(event, "approvalUses", (value) => capabilityMap(value, validApprovalUse)) ||
|
|
151
|
+
!optional(event, "approvalScope", (value) => APPROVAL_SCOPES.has(String(value))) ||
|
|
152
|
+
!optional(event, "humanDenied", (value) => value === true) ||
|
|
153
|
+
!optional(event, "gateOutcome", (value) => GATE_OUTCOMES.has(String(value))) ||
|
|
154
|
+
!optional(event, "definitionDigest", validDefinitionDigest) ||
|
|
155
|
+
!optional(event, "taskFrom", isLedgerDisplayIdentifier) ||
|
|
156
|
+
!optional(event, "taskFromExecutionId", isExecutionId) ||
|
|
157
|
+
!optional(event, "correlation", validCorrelation) ||
|
|
158
|
+
!optional(event, "refusal", validRefusal)) {
|
|
159
|
+
return "capability decision optional fields are invalid";
|
|
160
|
+
}
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
function validateWorkspaceLease(event) {
|
|
164
|
+
if (!isLedgerDisplayIdentifier(event.workspaceId) || !isNonEmptyString(event.root) ||
|
|
165
|
+
!["read", "write"].includes(String(event.access)) || !LEASE_OUTCOMES.has(String(event.outcome))) {
|
|
166
|
+
return "workspace lease required fields are invalid";
|
|
167
|
+
}
|
|
168
|
+
if (!optional(event, "recovered", (value) => value === true || value === false || value === "unknown") ||
|
|
169
|
+
!optional(event, "releaseReason", (value) => typeof value === "string") ||
|
|
170
|
+
!optional(event, "refusal", validRefusal) || !optional(event, "correlation", validCorrelation)) {
|
|
171
|
+
return "workspace lease optional fields are invalid";
|
|
172
|
+
}
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
function validateChildLifecycle(event) {
|
|
176
|
+
if (!["starting", "running", "completed", "failed"].includes(String(event.state)) || !EXECUTORS.has(String(event.executor))) {
|
|
177
|
+
return "child lifecycle required fields are invalid";
|
|
178
|
+
}
|
|
179
|
+
if (["starting", "running"].includes(String(event.state)) && !isTimestamp(event.deadlineAt)) {
|
|
180
|
+
return "deadlineAt is required and must be an RFC 3339 timestamp for a non-terminal lifecycle";
|
|
181
|
+
}
|
|
182
|
+
if (!optional(event, "deadlineAt", isTimestamp) ||
|
|
183
|
+
!optional(event, "exitCode", (value) => value === null || Number.isInteger(value)) ||
|
|
184
|
+
!optional(event, "signal", (value) => value === null || PROCESS_SIGNALS.has(String(value))) ||
|
|
185
|
+
!optional(event, "timedOut", (value) => value === true) ||
|
|
186
|
+
!optional(event, "aborted", (value) => value === true) ||
|
|
187
|
+
!optional(event, "truncated", (value) => value === true) ||
|
|
188
|
+
!optional(event, "reason", (value) => typeof value === "string") ||
|
|
189
|
+
!optional(event, "correlation", validCorrelation)) {
|
|
190
|
+
return "child lifecycle optional fields are invalid";
|
|
191
|
+
}
|
|
192
|
+
if (!optional(event, "herdrPaneId", isLedgerDisplayIdentifier) ||
|
|
193
|
+
!optional(event, "herdrAgentName", isLedgerDisplayIdentifier)) {
|
|
194
|
+
return "Herdr runtime identity is invalid";
|
|
195
|
+
}
|
|
196
|
+
if (Object.hasOwn(event, "herdrPaneId") !== Object.hasOwn(event, "herdrAgentName")) {
|
|
197
|
+
return "Herdr runtime identity must be paired";
|
|
198
|
+
}
|
|
199
|
+
if (Object.hasOwn(event, "herdrPaneId") && event.executor !== "herdr") {
|
|
200
|
+
return "Herdr runtime identity requires the Herdr executor";
|
|
201
|
+
}
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
function validateCheckReceipt(event) {
|
|
205
|
+
if (!SHA256_RE.test(String(event.receiptId)) || !isLedgerDisplayIdentifier(event.workspaceId) ||
|
|
206
|
+
!isLedgerDisplayIdentifier(event.checkId) || !isNonEmptyString(event.treeSha) ||
|
|
207
|
+
!optional(event, "correlation", validCorrelation)) {
|
|
208
|
+
return "check receipt required fields are invalid";
|
|
209
|
+
}
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
function validateWorkflowFact(event) {
|
|
213
|
+
if (!isTimestamp(event.ts) || !isWorkflowFactId(event.factId) ||
|
|
214
|
+
!isWorkflowIdentifier(event.source) || !isWorkflowIdentifier(event.subject) ||
|
|
215
|
+
!["planned", "observed", "controller_validated"].includes(String(event.provenance)) ||
|
|
216
|
+
!["workflow_phase", "inline_skill", "transition"].includes(String(event.kind)) ||
|
|
217
|
+
!["pending", "observed", "started", "completed", "blocked"].includes(String(event.state)) ||
|
|
218
|
+
!validCorrelation(event.correlation) ||
|
|
219
|
+
!isNonEmptyString(event.correlation.run_id)) {
|
|
220
|
+
return "workflow fact required fields are invalid";
|
|
221
|
+
}
|
|
222
|
+
return workflowFactStateMatches(event.provenance, event.state)
|
|
223
|
+
? null
|
|
224
|
+
: "workflow fact provenance contradicts its state";
|
|
225
|
+
}
|
|
226
|
+
/** Exact, content-free runtime validation for one closed ledger v3 event. */
|
|
227
|
+
export function validateLedgerV3Event(event) {
|
|
228
|
+
if (event.ledgerVersion !== 3)
|
|
229
|
+
return "unsupported ledger version";
|
|
230
|
+
const kind = event.event;
|
|
231
|
+
if (typeof kind !== "string" || !Object.hasOwn(FIELDS, kind))
|
|
232
|
+
return "unknown ledger event discriminator";
|
|
233
|
+
const allowed = FIELDS[kind];
|
|
234
|
+
if (Object.keys(event).some((field) => !allowed.has(field)))
|
|
235
|
+
return "ledger v3 contains an unsupported field";
|
|
236
|
+
if (kind === "workflow_fact")
|
|
237
|
+
return validateWorkflowFact(event);
|
|
238
|
+
const base = validateBase(event);
|
|
239
|
+
if (base)
|
|
240
|
+
return base;
|
|
241
|
+
if (kind === "capability_decision")
|
|
242
|
+
return validateCapabilityDecision(event);
|
|
243
|
+
if (kind === "workspace_lease")
|
|
244
|
+
return validateWorkspaceLease(event);
|
|
245
|
+
if (kind === "child_lifecycle")
|
|
246
|
+
return validateChildLifecycle(event);
|
|
247
|
+
return validateCheckReceipt(event);
|
|
248
|
+
}
|
|
249
|
+
/** Ensure a public builder cannot emit bytes the closed v3 reader would reject. */
|
|
250
|
+
export function assertLedgerV3Wire(event) {
|
|
251
|
+
let wire;
|
|
252
|
+
try {
|
|
253
|
+
wire = JSON.parse(JSON.stringify(event));
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
throw new TypeError(`invalid ledger v3 event: ${String(error)}`);
|
|
257
|
+
}
|
|
258
|
+
if (!isLedgerObject(wire))
|
|
259
|
+
throw new TypeError("invalid ledger v3 event: event is not a JSON object");
|
|
260
|
+
const invalid = validateLedgerV3Event(wire);
|
|
261
|
+
if (invalid)
|
|
262
|
+
throw new TypeError(`invalid ledger v3 event: ${invalid}`);
|
|
263
|
+
return event;
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=ledger-v3-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger-v3-validation.js","sourceRoot":"","sources":["../src/ledger-v3-validation.ts"],"names":[],"mappings":"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"}
|