@fides-anima/fpp-protocol-core 1.0.2

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.
Files changed (101) hide show
  1. package/LICENSE +95 -0
  2. package/README.md +41 -0
  3. package/SKILL.md +348 -0
  4. package/constitution.json +102 -0
  5. package/constitution.yaml +106 -0
  6. package/dist/adoption-disclosure.d.ts +35 -0
  7. package/dist/adoption-disclosure.d.ts.map +1 -0
  8. package/dist/adoption-disclosure.js +67 -0
  9. package/dist/adoption-disclosure.js.map +1 -0
  10. package/dist/adoption.d.ts +56 -0
  11. package/dist/adoption.d.ts.map +1 -0
  12. package/dist/adoption.js +97 -0
  13. package/dist/adoption.js.map +1 -0
  14. package/dist/canonical-json.d.ts +23 -0
  15. package/dist/canonical-json.d.ts.map +1 -0
  16. package/dist/canonical-json.js +60 -0
  17. package/dist/canonical-json.js.map +1 -0
  18. package/dist/capsules.d.ts +63 -0
  19. package/dist/capsules.d.ts.map +1 -0
  20. package/dist/capsules.js +94 -0
  21. package/dist/capsules.js.map +1 -0
  22. package/dist/claims.d.ts +62 -0
  23. package/dist/claims.d.ts.map +1 -0
  24. package/dist/claims.js +99 -0
  25. package/dist/claims.js.map +1 -0
  26. package/dist/digest.d.ts +38 -0
  27. package/dist/digest.d.ts.map +1 -0
  28. package/dist/digest.js +52 -0
  29. package/dist/digest.js.map +1 -0
  30. package/dist/disposition.d.ts +34 -0
  31. package/dist/disposition.d.ts.map +1 -0
  32. package/dist/disposition.js +51 -0
  33. package/dist/disposition.js.map +1 -0
  34. package/dist/emergency-override.d.ts +73 -0
  35. package/dist/emergency-override.d.ts.map +1 -0
  36. package/dist/emergency-override.js +102 -0
  37. package/dist/emergency-override.js.map +1 -0
  38. package/dist/evidence.d.ts +25 -0
  39. package/dist/evidence.d.ts.map +1 -0
  40. package/dist/evidence.js +30 -0
  41. package/dist/evidence.js.map +1 -0
  42. package/dist/freshness.d.ts +41 -0
  43. package/dist/freshness.d.ts.map +1 -0
  44. package/dist/freshness.js +66 -0
  45. package/dist/freshness.js.map +1 -0
  46. package/dist/governance.d.ts +87 -0
  47. package/dist/governance.d.ts.map +1 -0
  48. package/dist/governance.js +94 -0
  49. package/dist/governance.js.map +1 -0
  50. package/dist/identity.d.ts +43 -0
  51. package/dist/identity.d.ts.map +1 -0
  52. package/dist/identity.js +93 -0
  53. package/dist/identity.js.map +1 -0
  54. package/dist/index.d.ts +30 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +30 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/mandates.d.ts +80 -0
  59. package/dist/mandates.d.ts.map +1 -0
  60. package/dist/mandates.js +127 -0
  61. package/dist/mandates.js.map +1 -0
  62. package/dist/merkle.d.ts +31 -0
  63. package/dist/merkle.d.ts.map +1 -0
  64. package/dist/merkle.js +95 -0
  65. package/dist/merkle.js.map +1 -0
  66. package/dist/quorum.d.ts +133 -0
  67. package/dist/quorum.d.ts.map +1 -0
  68. package/dist/quorum.js +128 -0
  69. package/dist/quorum.js.map +1 -0
  70. package/dist/receipts.d.ts +77 -0
  71. package/dist/receipts.d.ts.map +1 -0
  72. package/dist/receipts.js +104 -0
  73. package/dist/receipts.js.map +1 -0
  74. package/dist/steward-authorization.d.ts +200 -0
  75. package/dist/steward-authorization.d.ts.map +1 -0
  76. package/dist/steward-authorization.js +483 -0
  77. package/dist/steward-authorization.js.map +1 -0
  78. package/dist/workspace-profile.d.ts +43 -0
  79. package/dist/workspace-profile.d.ts.map +1 -0
  80. package/dist/workspace-profile.js +91 -0
  81. package/dist/workspace-profile.js.map +1 -0
  82. package/package.json +56 -0
  83. package/src/adoption-disclosure.ts +120 -0
  84. package/src/adoption.ts +152 -0
  85. package/src/canonical-json.ts +70 -0
  86. package/src/capsules.ts +161 -0
  87. package/src/claims.ts +147 -0
  88. package/src/digest.ts +63 -0
  89. package/src/disposition.ts +74 -0
  90. package/src/emergency-override.ts +168 -0
  91. package/src/evidence.ts +48 -0
  92. package/src/freshness.ts +103 -0
  93. package/src/governance.ts +152 -0
  94. package/src/identity.ts +119 -0
  95. package/src/index.ts +270 -0
  96. package/src/mandates.ts +201 -0
  97. package/src/merkle.ts +138 -0
  98. package/src/quorum.ts +193 -0
  99. package/src/receipts.ts +150 -0
  100. package/src/steward-authorization.ts +657 -0
  101. package/src/workspace-profile.ts +134 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capsules.js","sourceRoot":"","sources":["../src/capsules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Versioned constitutional claim schemas and parsers.
3
+ *
4
+ * Untrusted peer JSON is runtime-validated. Legacy v1 claims are accepted
5
+ * only as declaration-only input and are never silently upgraded to v2.
6
+ */
7
+ import { type Static } from "@sinclair/typebox";
8
+ export declare const CLAIM_CLASSES: readonly ["identity", "configuration", "runtime", "event", "completeness", "behavioral"];
9
+ export type ClaimClass = (typeof CLAIM_CLASSES)[number];
10
+ export declare const LegacyConstitutionalClaimV1Schema: import("@sinclair/typebox").TObject<{
11
+ agentId: import("@sinclair/typebox").TString;
12
+ constitutionHash: import("@sinclair/typebox").TString;
13
+ adoptedAt: import("@sinclair/typebox").TString;
14
+ auditMerkleRoot: import("@sinclair/typebox").TString;
15
+ auditEntryCount: import("@sinclair/typebox").TInteger;
16
+ chainIntact: import("@sinclair/typebox").TBoolean;
17
+ recentLaws: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
18
+ }>;
19
+ export type LegacyConstitutionalClaimV1 = Static<typeof LegacyConstitutionalClaimV1Schema>;
20
+ export declare const ConstitutionalClaimV2Schema: import("@sinclair/typebox").TObject<{
21
+ schemaVersion: import("@sinclair/typebox").TLiteral<2>;
22
+ claimClass: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"completeness" | "identity" | "configuration" | "runtime" | "event" | "behavioral">, ...import("@sinclair/typebox").TLiteral<"completeness" | "identity" | "configuration" | "runtime" | "event" | "behavioral">[]]>;
23
+ agentId: import("@sinclair/typebox").TString;
24
+ keyAlgorithm: import("@sinclair/typebox").TLiteral<"ed25519">;
25
+ constitutionHash: import("@sinclair/typebox").TString;
26
+ adoptedAt: import("@sinclair/typebox").TString;
27
+ auditMerkleRoot: import("@sinclair/typebox").TString;
28
+ auditEntryCount: import("@sinclair/typebox").TInteger;
29
+ chainIntact: import("@sinclair/typebox").TBoolean;
30
+ recentLaws: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
31
+ /** When present, freshness fields are part of the signed canonical payload. */
32
+ freshness: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
33
+ audience: import("@sinclair/typebox").TString;
34
+ challenge: import("@sinclair/typebox").TString;
35
+ issuedAt: import("@sinclair/typebox").TString;
36
+ expiresAt: import("@sinclair/typebox").TString;
37
+ }>>;
38
+ }>;
39
+ export type ConstitutionalClaimV2 = Static<typeof ConstitutionalClaimV2Schema>;
40
+ export type ClaimParseResult = {
41
+ ok: true;
42
+ kind: "legacy-v1";
43
+ assurance: "declaration-only";
44
+ claim: LegacyConstitutionalClaimV1;
45
+ diagnostics: string[];
46
+ } | {
47
+ ok: true;
48
+ kind: "v2";
49
+ assurance: "schema-validated";
50
+ claim: ConstitutionalClaimV2;
51
+ diagnostics: string[];
52
+ } | {
53
+ ok: false;
54
+ error: string;
55
+ diagnostics: string[];
56
+ };
57
+ /**
58
+ * Parse untrusted claim JSON into an explicit v1 or v2 result.
59
+ * Unknown critical versions fail closed. V1 never escalates to v2 assurance.
60
+ */
61
+ export declare function parseClaim(input: unknown): ClaimParseResult;
62
+ //# sourceMappingURL=claims.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claims.d.ts","sourceRoot":"","sources":["../src/claims.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKtD,eAAO,MAAM,aAAa,0FAOhB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,eAAO,MAAM,iCAAiC;;;;;;;;EAW7C,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,MAAM,CAC9C,OAAO,iCAAiC,CACzC,CAAC;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;;;IAiBpC,+EAA+E;;;;;;;EAIlF,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAE/E,MAAM,MAAM,gBAAgB,GACxB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,KAAK,EAAE,2BAA2B,CAAC;IACnC,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,GACD;IACE,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,kBAAkB,CAAC;IAC9B,KAAK,EAAE,qBAAqB,CAAC;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAMN;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAoD3D"}
package/dist/claims.js ADDED
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Versioned constitutional claim schemas and parsers.
3
+ *
4
+ * Untrusted peer JSON is runtime-validated. Legacy v1 claims are accepted
5
+ * only as declaration-only input and are never silently upgraded to v2.
6
+ */
7
+ import { Type } from "@sinclair/typebox";
8
+ import { Value } from "@sinclair/typebox/value";
9
+ import { KEY_ALGORITHM } from "./identity.js";
10
+ import { FreshnessEnvelopeSchema } from "./freshness.js";
11
+ export const CLAIM_CLASSES = [
12
+ "identity",
13
+ "configuration",
14
+ "runtime",
15
+ "event",
16
+ "completeness",
17
+ "behavioral",
18
+ ];
19
+ export const LegacyConstitutionalClaimV1Schema = Type.Object({
20
+ agentId: Type.String({ minLength: 1 }),
21
+ constitutionHash: Type.String({ minLength: 1 }),
22
+ adoptedAt: Type.String({ minLength: 1 }),
23
+ auditMerkleRoot: Type.String({ minLength: 1 }),
24
+ auditEntryCount: Type.Integer({ minimum: 0 }),
25
+ chainIntact: Type.Boolean(),
26
+ recentLaws: Type.Array(Type.String()),
27
+ }, { additionalProperties: true });
28
+ export const ConstitutionalClaimV2Schema = Type.Object({
29
+ schemaVersion: Type.Literal(2),
30
+ claimClass: Type.Union(CLAIM_CLASSES.map((c) => Type.Literal(c))),
31
+ agentId: Type.String({ pattern: "^fpp:ed25519:[0-9a-fA-F]{64}$" }),
32
+ keyAlgorithm: Type.Literal(KEY_ALGORITHM),
33
+ constitutionHash: Type.String({ minLength: 1 }),
34
+ adoptedAt: Type.String({ minLength: 1 }),
35
+ auditMerkleRoot: Type.String({ minLength: 1 }),
36
+ auditEntryCount: Type.Integer({ minimum: 0 }),
37
+ chainIntact: Type.Boolean(),
38
+ recentLaws: Type.Array(Type.String()),
39
+ /** When present, freshness fields are part of the signed canonical payload. */
40
+ freshness: Type.Optional(FreshnessEnvelopeSchema),
41
+ }, { additionalProperties: true });
42
+ function isRecord(value) {
43
+ return value !== null && typeof value === "object" && !Array.isArray(value);
44
+ }
45
+ /**
46
+ * Parse untrusted claim JSON into an explicit v1 or v2 result.
47
+ * Unknown critical versions fail closed. V1 never escalates to v2 assurance.
48
+ */
49
+ export function parseClaim(input) {
50
+ if (!isRecord(input)) {
51
+ return {
52
+ ok: false,
53
+ error: "claim must be a JSON object",
54
+ diagnostics: ["expected object"],
55
+ };
56
+ }
57
+ if ("schemaVersion" in input) {
58
+ if (input.schemaVersion === 2) {
59
+ const errors = [...Value.Errors(ConstitutionalClaimV2Schema, input)];
60
+ if (errors.length > 0) {
61
+ return {
62
+ ok: false,
63
+ error: "malformed constitutional claim v2",
64
+ diagnostics: errors.map((e) => `${e.path}: ${e.message}`),
65
+ };
66
+ }
67
+ return {
68
+ ok: true,
69
+ kind: "v2",
70
+ assurance: "schema-validated",
71
+ claim: input,
72
+ diagnostics: [],
73
+ };
74
+ }
75
+ return {
76
+ ok: false,
77
+ error: `unsupported critical schema version: ${String(input.schemaVersion)}`,
78
+ diagnostics: [`schemaVersion=${String(input.schemaVersion)}`],
79
+ };
80
+ }
81
+ const errors = [...Value.Errors(LegacyConstitutionalClaimV1Schema, input)];
82
+ if (errors.length > 0) {
83
+ return {
84
+ ok: false,
85
+ error: "malformed legacy constitutional claim v1",
86
+ diagnostics: errors.map((e) => `${e.path}: ${e.message}`),
87
+ };
88
+ }
89
+ return {
90
+ ok: true,
91
+ kind: "legacy-v1",
92
+ assurance: "declaration-only",
93
+ claim: input,
94
+ diagnostics: [
95
+ "legacy-v1 accepted as declaration-only; not escalated to v2 assurance",
96
+ ],
97
+ };
98
+ }
99
+ //# sourceMappingURL=claims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claims.js","sourceRoot":"","sources":["../src/claims.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Versioned digests with optional domain separation.
3
+ *
4
+ * V1 entry hashes omit domain prefixes so historical audit chains verify.
5
+ * V2 digests always include a domain label to prevent cross-type reuse.
6
+ */
7
+ /** Well-known digest domains for v2 payloads. */
8
+ export declare const DIGEST_DOMAINS: {
9
+ readonly entry: "fpp:v2:entry";
10
+ readonly claim: "fpp:v2:claim";
11
+ readonly leaf: "fpp:v2:merkle-leaf";
12
+ readonly node: "fpp:v2:merkle-node";
13
+ readonly receipt: "fpp:v2:receipt";
14
+ readonly capsule: "fpp:v2:capsule";
15
+ readonly evidence: "fpp:v2:evidence";
16
+ readonly adoption: "fpp:v2:adoption";
17
+ readonly quorum: "fpp:v2:quorum";
18
+ readonly mandate: "fpp:v2:mandate";
19
+ };
20
+ export type DigestDomain = (typeof DIGEST_DOMAINS)[keyof typeof DIGEST_DOMAINS] | (string & {});
21
+ /**
22
+ * Historical v1 entry digest: SHA-256 of canonicalizeV1(entry without hash).
23
+ */
24
+ export declare function hashEntryV1(entry: Record<string, unknown>): string;
25
+ export type DigestInput = {
26
+ version: 1;
27
+ value: unknown;
28
+ domain?: never;
29
+ } | {
30
+ version: 2;
31
+ value: unknown;
32
+ domain: DigestDomain;
33
+ };
34
+ /**
35
+ * Compute a versioned digest. Version 2 requires a domain separator.
36
+ */
37
+ export declare function digest(input: DigestInput): string;
38
+ //# sourceMappingURL=digest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digest.d.ts","sourceRoot":"","sources":["../src/digest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,iDAAiD;AACjD,eAAO,MAAM,cAAc;;;;;;;;;;;CAWjB,CAAC;AAEX,MAAM,MAAM,YAAY,GACtB,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAMvE;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAIlE;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,OAAO,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,KAAK,CAAA;CAAE,GAC9C;IAAE,OAAO,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC;AAEzD;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAcjD"}
package/dist/digest.js ADDED
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Versioned digests with optional domain separation.
3
+ *
4
+ * V1 entry hashes omit domain prefixes so historical audit chains verify.
5
+ * V2 digests always include a domain label to prevent cross-type reuse.
6
+ */
7
+ import { sha256 } from "@noble/hashes/sha256";
8
+ import { bytesToHex, utf8ToBytes } from "@noble/hashes/utils";
9
+ import { canonicalizeV1, canonicalizeV2 } from "./canonical-json.js";
10
+ /** Well-known digest domains for v2 payloads. */
11
+ export const DIGEST_DOMAINS = {
12
+ entry: "fpp:v2:entry",
13
+ claim: "fpp:v2:claim",
14
+ leaf: "fpp:v2:merkle-leaf",
15
+ node: "fpp:v2:merkle-node",
16
+ receipt: "fpp:v2:receipt",
17
+ capsule: "fpp:v2:capsule",
18
+ evidence: "fpp:v2:evidence",
19
+ adoption: "fpp:v2:adoption",
20
+ quorum: "fpp:v2:quorum",
21
+ mandate: "fpp:v2:mandate",
22
+ };
23
+ function sha256Hex(data) {
24
+ return bytesToHex(sha256(utf8ToBytes(data)));
25
+ }
26
+ /**
27
+ * Historical v1 entry digest: SHA-256 of canonicalizeV1(entry without hash).
28
+ */
29
+ export function hashEntryV1(entry) {
30
+ const { hash: _ignored, ...rest } = entry;
31
+ void _ignored;
32
+ return sha256Hex(canonicalizeV1(rest));
33
+ }
34
+ /**
35
+ * Compute a versioned digest. Version 2 requires a domain separator.
36
+ */
37
+ export function digest(input) {
38
+ if (input.version === 1) {
39
+ if (input.value !== null && typeof input.value === "object" && !Array.isArray(input.value)) {
40
+ return hashEntryV1(input.value);
41
+ }
42
+ return sha256Hex(canonicalizeV1(input.value));
43
+ }
44
+ if (input.version === 2) {
45
+ if (!input.domain || typeof input.domain !== "string") {
46
+ throw new Error("digest version 2 requires a domain separator");
47
+ }
48
+ return sha256Hex(input.domain + "\0" + canonicalizeV2(input.value));
49
+ }
50
+ throw new Error(`unsupported digest version: ${input.version}`);
51
+ }
52
+ //# sourceMappingURL=digest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digest.js","sourceRoot":"","sources":["../src/digest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErE,iDAAiD;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,cAAc;IACrB,IAAI,EAAE,oBAAoB;IAC1B,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,gBAAgB;IACzB,OAAO,EAAE,gBAAgB;IACzB,QAAQ,EAAE,iBAAiB;IAC3B,QAAQ,EAAE,iBAAiB;IAC3B,MAAM,EAAE,eAAe;IACvB,OAAO,EAAE,gBAAgB;CACjB,CAAC;AAKX,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAA8B;IACxD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAC1C,KAAK,QAAQ,CAAC;IACd,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AACzC,CAAC;AAMD;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,KAAkB;IACvC,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3F,OAAO,WAAW,CAAC,KAAK,CAAC,KAAgC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,+BAAgC,KAA8B,CAAC,OAAO,EAAE,CAAC,CAAC;AAC5F,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Disposition decisions and authorization classes for unattended /
3
+ * operator-present policy resolution and receipt emission.
4
+ */
5
+ export declare const DISPOSITION_DECISIONS: readonly ["allow", "deny", "require_approval", "abstain", "allow_staged", "allow_minimal"];
6
+ export type DispositionDecision = (typeof DISPOSITION_DECISIONS)[number];
7
+ export declare const AUTHORIZATION_CLASSES: readonly ["mandate", "standing-allowlist", "emergency", "quorum-mandate", "abstain", "approved", "policy-block"];
8
+ export type AuthorizationClass = (typeof AUTHORIZATION_CLASSES)[number];
9
+ /**
10
+ * Named authorization-class constants for call sites.
11
+ * Prefer `AUTHZ.*` (or `const authorization = AUTHZ.…; { authorization }`)
12
+ * over `authorization: "<literal>"` so static scanners do not treat
13
+ * AuthorizationClass strings as exposed API-token secret literals.
14
+ */
15
+ export declare const AUTHZ: {
16
+ readonly mandate: "mandate";
17
+ readonly standingAllowlist: "standing-allowlist";
18
+ readonly emergency: "emergency";
19
+ readonly quorumMandate: "quorum-mandate";
20
+ readonly abstain: "abstain";
21
+ readonly approved: "approved";
22
+ readonly policyBlock: "policy-block";
23
+ };
24
+ export type DispositionParseResult = {
25
+ ok: true;
26
+ disposition: DispositionDecision;
27
+ } | {
28
+ ok: false;
29
+ error: string;
30
+ };
31
+ export declare function isDispositionDecision(value: unknown): value is DispositionDecision;
32
+ export declare function isAuthorizationClass(value: unknown): value is AuthorizationClass;
33
+ export declare function parseDispositionDecision(input: unknown): DispositionParseResult;
34
+ //# sourceMappingURL=disposition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disposition.d.ts","sourceRoot":"","sources":["../src/disposition.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,qBAAqB,4FAOxB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzE,eAAO,MAAM,qBAAqB,kHAQxB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,KAAK;;;;;;;;CAQqC,CAAC;AAExD,MAAM,MAAM,sBAAsB,GAC9B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,mBAAmB,CAAA;CAAE,GAC9C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,mBAAmB,CAK9B;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,kBAAkB,CAK7B;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,GACb,sBAAsB,CAKxB"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Disposition decisions and authorization classes for unattended /
3
+ * operator-present policy resolution and receipt emission.
4
+ */
5
+ export const DISPOSITION_DECISIONS = [
6
+ "allow",
7
+ "deny",
8
+ "require_approval",
9
+ "abstain",
10
+ "allow_staged",
11
+ "allow_minimal",
12
+ ];
13
+ export const AUTHORIZATION_CLASSES = [
14
+ "mandate",
15
+ "standing-allowlist",
16
+ "emergency",
17
+ "quorum-mandate",
18
+ "abstain",
19
+ "approved",
20
+ "policy-block",
21
+ ];
22
+ /**
23
+ * Named authorization-class constants for call sites.
24
+ * Prefer `AUTHZ.*` (or `const authorization = AUTHZ.…; { authorization }`)
25
+ * over `authorization: "<literal>"` so static scanners do not treat
26
+ * AuthorizationClass strings as exposed API-token secret literals.
27
+ */
28
+ export const AUTHZ = {
29
+ mandate: "mandate",
30
+ standingAllowlist: "standing-allowlist",
31
+ emergency: "emergency",
32
+ quorumMandate: "quorum-mandate",
33
+ abstain: "abstain",
34
+ approved: "approved",
35
+ policyBlock: "policy-block",
36
+ };
37
+ export function isDispositionDecision(value) {
38
+ return (typeof value === "string" &&
39
+ DISPOSITION_DECISIONS.includes(value));
40
+ }
41
+ export function isAuthorizationClass(value) {
42
+ return (typeof value === "string" &&
43
+ AUTHORIZATION_CLASSES.includes(value));
44
+ }
45
+ export function parseDispositionDecision(input) {
46
+ if (!isDispositionDecision(input)) {
47
+ return { ok: false, error: "invalid DispositionDecision" };
48
+ }
49
+ return { ok: true, disposition: input };
50
+ }
51
+ //# sourceMappingURL=disposition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disposition.js","sourceRoot":"","sources":["../src/disposition.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,OAAO;IACP,MAAM;IACN,kBAAkB;IAClB,SAAS;IACT,cAAc;IACd,eAAe;CACP,CAAC;AAIX,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,SAAS;IACT,oBAAoB;IACpB,WAAW;IACX,gBAAgB;IAChB,SAAS;IACT,UAAU;IACV,cAAc;CACN,CAAC;AAIX;;;;;GAKG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,OAAO,EAAE,SAAS;IAClB,iBAAiB,EAAE,oBAAoB;IACvC,SAAS,EAAE,WAAW;IACtB,aAAa,EAAE,gBAAgB;IAC/B,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,cAAc;CAC0B,CAAC;AAMxD,MAAM,UAAU,qBAAqB,CACnC,KAAc;IAEd,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACxB,qBAA2C,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC7D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAAc;IAEd,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACxB,qBAA2C,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC7D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,KAAc;IAEd,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC;IAC7D,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Signed emergency override grant — mandate-shaped but mandate-separate.
3
+ *
4
+ * Stewards only for v1: agent-to-agent (peer) escalation without steward
5
+ * involvement is a materially larger trust decision; not an oversight.
6
+ */
7
+ import { type Static } from "@sinclair/typebox";
8
+ export declare const SignedEmergencyOverrideV1Schema: import("@sinclair/typebox").TObject<{
9
+ schemaVersion: import("@sinclair/typebox").TLiteral<1>;
10
+ overrideId: import("@sinclair/typebox").TString;
11
+ issuerId: import("@sinclair/typebox").TString;
12
+ publicKey: import("@sinclair/typebox").TString;
13
+ signature: import("@sinclair/typebox").TString;
14
+ scope: import("@sinclair/typebox").TObject<{
15
+ classifications: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
16
+ capabilities: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
17
+ }>;
18
+ budgets: import("@sinclair/typebox").TObject<{
19
+ maxActions: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
20
+ remainingActions: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
21
+ }>;
22
+ validFrom: import("@sinclair/typebox").TString;
23
+ validTo: import("@sinclair/typebox").TString;
24
+ evidenceRef: import("@sinclair/typebox").TString;
25
+ revoked: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
26
+ }>;
27
+ export type SignedEmergencyOverrideV1 = Static<typeof SignedEmergencyOverrideV1Schema>;
28
+ /** Mutable runtime counters — never part of the signed grant payload. */
29
+ export type EmergencyOverrideLedgerEntry = {
30
+ remainingActions?: number;
31
+ revoked?: boolean;
32
+ };
33
+ /**
34
+ * Shared on-disk emergency override store shape.
35
+ * `ledgers` is additive; absent keys mean unlimited budget / not revoked.
36
+ */
37
+ export type EmergencyOverrideStoreFile = {
38
+ schemaVersion: 1;
39
+ overrides: SignedEmergencyOverrideV1[];
40
+ ledgers?: Record<string, EmergencyOverrideLedgerEntry>;
41
+ };
42
+ export type EmergencyOverrideParseResult = {
43
+ ok: true;
44
+ override: SignedEmergencyOverrideV1;
45
+ } | {
46
+ ok: false;
47
+ error: string;
48
+ };
49
+ export type EmergencyOverrideValidityPolicy = {
50
+ /** Verifier clock — not signer-controlled. */
51
+ nowMs: number;
52
+ };
53
+ export type EmergencyOverrideValidity = {
54
+ valid: boolean;
55
+ reason: string;
56
+ };
57
+ export declare function parseSignedEmergencyOverride(input: unknown): EmergencyOverrideParseResult;
58
+ /**
59
+ * Temporal / revocation check for a schema-valid emergency override.
60
+ * Budget debit and signature verification live in the enforcement store.
61
+ */
62
+ export declare function validateEmergencyOverrideValidity(override: SignedEmergencyOverrideV1, policy: EmergencyOverrideValidityPolicy): EmergencyOverrideValidity;
63
+ /**
64
+ * Canonical unsigned payload for emergency override signatures.
65
+ * Excludes `signature`, `revoked`, and `budgets.remainingActions` so debit/revoke
66
+ * can mutate an unsigned ledger without invalidating the grant.
67
+ */
68
+ export declare function emergencyOverrideSigningFields(override: SignedEmergencyOverrideV1): Record<string, unknown>;
69
+ /**
70
+ * Verify an emergency override signature over `emergencyOverrideSigningFields`.
71
+ */
72
+ export declare function verifyEmergencyOverrideSignature(override: SignedEmergencyOverrideV1): boolean;
73
+ //# sourceMappingURL=emergency-override.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emergency-override.d.ts","sourceRoot":"","sources":["../src/emergency-override.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKtD,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;EA2B3C,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,MAAM,CAC5C,OAAO,+BAA+B,CACvC,CAAC;AAEF,yEAAyE;AACzE,MAAM,MAAM,4BAA4B,GAAG;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,aAAa,EAAE,CAAC,CAAC;IACjB,SAAS,EAAE,yBAAyB,EAAE,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;CACxD,CAAC;AAEF,MAAM,MAAM,4BAA4B,GACpC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,yBAAyB,CAAA;CAAE,GACjD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC,MAAM,MAAM,+BAA+B,GAAG;IAC5C,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,OAAO,GACb,4BAA4B,CAY9B;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,yBAAyB,EACnC,MAAM,EAAE,+BAA+B,GACtC,yBAAyB,CAsB3B;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,yBAAyB,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzB;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,yBAAyB,GAClC,OAAO,CAcT"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Signed emergency override grant — mandate-shaped but mandate-separate.
3
+ *
4
+ * Stewards only for v1: agent-to-agent (peer) escalation without steward
5
+ * involvement is a materially larger trust decision; not an oversight.
6
+ */
7
+ import { Type } from "@sinclair/typebox";
8
+ import { Value } from "@sinclair/typebox/value";
9
+ import { canonicalizeV2 } from "./canonical-json.js";
10
+ import { verifySignature } from "./identity.js";
11
+ export const SignedEmergencyOverrideV1Schema = Type.Object({
12
+ schemaVersion: Type.Literal(1),
13
+ overrideId: Type.String({ minLength: 1 }),
14
+ issuerId: Type.String({ minLength: 1 }),
15
+ publicKey: Type.String({ minLength: 1 }),
16
+ signature: Type.String({ minLength: 1 }),
17
+ scope: Type.Object({
18
+ classifications: Type.Optional(Type.Array(Type.String({ minLength: 1 }))),
19
+ capabilities: Type.Optional(Type.Array(Type.String({ minLength: 1 }))),
20
+ }, { additionalProperties: false }),
21
+ budgets: Type.Object({
22
+ maxActions: Type.Optional(Type.Integer({ minimum: 0 })),
23
+ remainingActions: Type.Optional(Type.Integer({ minimum: 0 })),
24
+ }, { additionalProperties: false }),
25
+ validFrom: Type.String({ minLength: 1 }),
26
+ validTo: Type.String({ minLength: 1 }),
27
+ evidenceRef: Type.String({ minLength: 1 }),
28
+ revoked: Type.Optional(Type.Boolean()),
29
+ }, { additionalProperties: false });
30
+ export function parseSignedEmergencyOverride(input) {
31
+ if (!Value.Check(SignedEmergencyOverrideV1Schema, input)) {
32
+ const errors = [...Value.Errors(SignedEmergencyOverrideV1Schema, input)];
33
+ return {
34
+ ok: false,
35
+ error: errors[0] !== undefined
36
+ ? `${errors[0].path}: ${errors[0].message}`
37
+ : "invalid SignedEmergencyOverrideV1",
38
+ };
39
+ }
40
+ return { ok: true, override: input };
41
+ }
42
+ /**
43
+ * Temporal / revocation check for a schema-valid emergency override.
44
+ * Budget debit and signature verification live in the enforcement store.
45
+ */
46
+ export function validateEmergencyOverrideValidity(override, policy) {
47
+ if (override.revoked === true) {
48
+ return { valid: false, reason: "emergency override revoked" };
49
+ }
50
+ const from = Date.parse(override.validFrom);
51
+ const to = Date.parse(override.validTo);
52
+ if (Number.isNaN(from) || Number.isNaN(to)) {
53
+ return { valid: false, reason: "validFrom/validTo must be ISO-8601" };
54
+ }
55
+ if (to <= from) {
56
+ return { valid: false, reason: "validTo must be after validFrom" };
57
+ }
58
+ if (policy.nowMs < from) {
59
+ return {
60
+ valid: false,
61
+ reason: "emergency override not yet valid (validFrom)",
62
+ };
63
+ }
64
+ if (policy.nowMs > to) {
65
+ return { valid: false, reason: "emergency override expired" };
66
+ }
67
+ return { valid: true, reason: "ok" };
68
+ }
69
+ /**
70
+ * Canonical unsigned payload for emergency override signatures.
71
+ * Excludes `signature`, `revoked`, and `budgets.remainingActions` so debit/revoke
72
+ * can mutate an unsigned ledger without invalidating the grant.
73
+ */
74
+ export function emergencyOverrideSigningFields(override) {
75
+ const { signature: _signature, revoked: _revoked, budgets, ...rest } = override;
76
+ void _signature;
77
+ void _revoked;
78
+ const signingBudgets = {};
79
+ if (budgets.maxActions !== undefined) {
80
+ signingBudgets.maxActions = budgets.maxActions;
81
+ }
82
+ return {
83
+ ...rest,
84
+ budgets: signingBudgets,
85
+ };
86
+ }
87
+ /**
88
+ * Verify an emergency override signature over `emergencyOverrideSigningFields`.
89
+ */
90
+ export function verifyEmergencyOverrideSignature(override) {
91
+ if (!override.publicKey || !override.signature) {
92
+ return false;
93
+ }
94
+ const message = Buffer.from(canonicalizeV2(emergencyOverrideSigningFields(override)), "utf8");
95
+ const sigBytes = Buffer.from(override.signature, "hex");
96
+ const pubBytes = Buffer.from(override.publicKey, "hex");
97
+ if (sigBytes.length !== 64 || pubBytes.length !== 32) {
98
+ return false;
99
+ }
100
+ return verifySignature(message, sigBytes, pubBytes);
101
+ }
102
+ //# sourceMappingURL=emergency-override.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emergency-override.js","sourceRoot":"","sources":["../src/emergency-override.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAe,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,CAAC,MAAM,+BAA+B,GAAG,IAAI,CAAC,MAAM,CACxD;IACE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9B,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACzC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACvC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACxC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACxC,KAAK,EAAE,IAAI,CAAC,MAAM,CAChB;QACE,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KACvE,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC;IACD,OAAO,EAAE,IAAI,CAAC,MAAM,CAClB;QACE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QACvD,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;KAC9D,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC;IACD,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACxC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACtC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAC1C,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;CACvC,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC;AAoCF,MAAM,UAAU,4BAA4B,CAC1C,KAAc;IAEd,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC,CAAC;QACzE,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EACH,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS;gBACrB,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;gBAC3C,CAAC,CAAC,mCAAmC;SAC1C,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iCAAiC,CAC/C,QAAmC,EACnC,MAAuC;IAEvC,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC9B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,4BAA4B,EAAE,CAAC;IAChE,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,oCAAoC,EAAE,CAAC;IACxE,CAAC;IACD,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC;IACrE,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC;QACxB,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,8CAA8C;SACvD,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC;QACtB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,4BAA4B,EAAE,CAAC;IAChE,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAC5C,QAAmC;IAEnC,MAAM,EACJ,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,QAAQ,EACjB,OAAO,EACP,GAAG,IAAI,EACR,GAAG,QAAQ,CAAC;IACb,KAAK,UAAU,CAAC;IAChB,KAAK,QAAQ,CAAC;IACd,MAAM,cAAc,GAA4B,EAAE,CAAC;IACnD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACrC,cAAc,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACjD,CAAC;IACD,OAAO;QACL,GAAG,IAAI;QACP,OAAO,EAAE,cAAc;KACxB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gCAAgC,CAC9C,QAAmC;IAEnC,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CACzB,cAAc,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC,EACxD,MAAM,CACP,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACxD,IAAI,QAAQ,CAAC,MAAM,KAAK,EAAE,IAAI,QAAQ,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACrD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Append-only evidence envelopes with optional correction references.
3
+ * Global trust scores are intentionally excluded.
4
+ */
5
+ import { type Static } from "@sinclair/typebox";
6
+ export declare const EvidenceEnvelopeV1Schema: import("@sinclair/typebox").TObject<{
7
+ schemaVersion: import("@sinclair/typebox").TLiteral<1>;
8
+ evidenceId: import("@sinclair/typebox").TString;
9
+ evidenceClass: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"claim">, import("@sinclair/typebox").TLiteral<"receipt">, import("@sinclair/typebox").TLiteral<"capsule">, import("@sinclair/typebox").TLiteral<"adoption">, import("@sinclair/typebox").TLiteral<"annotation">]>;
10
+ claimClass: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"completeness" | "identity" | "configuration" | "runtime" | "event" | "behavioral">, ...import("@sinclair/typebox").TLiteral<"completeness" | "identity" | "configuration" | "runtime" | "event" | "behavioral">[]]>>;
11
+ payloadDigest: import("@sinclair/typebox").TString;
12
+ recordedAt: import("@sinclair/typebox").TString;
13
+ corrects: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
14
+ annotation: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
15
+ }>;
16
+ export type EvidenceEnvelopeV1 = Static<typeof EvidenceEnvelopeV1Schema>;
17
+ export type EvidenceParseResult = {
18
+ ok: true;
19
+ envelope: EvidenceEnvelopeV1;
20
+ } | {
21
+ ok: false;
22
+ error: string;
23
+ };
24
+ export declare function parseEvidenceEnvelope(input: unknown): EvidenceParseResult;
25
+ //# sourceMappingURL=evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../src/evidence.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAItD,eAAO,MAAM,wBAAwB;;;;;;;;;EAyBpC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAEzE,MAAM,MAAM,mBAAmB,GAC3B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,GAC1C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAKzE"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Append-only evidence envelopes with optional correction references.
3
+ * Global trust scores are intentionally excluded.
4
+ */
5
+ import { Type } from "@sinclair/typebox";
6
+ import { Value } from "@sinclair/typebox/value";
7
+ import { CLAIM_CLASSES } from "./claims.js";
8
+ export const EvidenceEnvelopeV1Schema = Type.Object({
9
+ schemaVersion: Type.Literal(1),
10
+ evidenceId: Type.String({ minLength: 1 }),
11
+ evidenceClass: Type.Union([
12
+ Type.Literal("claim"),
13
+ Type.Literal("receipt"),
14
+ Type.Literal("capsule"),
15
+ Type.Literal("adoption"),
16
+ Type.Literal("annotation"),
17
+ ]),
18
+ claimClass: Type.Optional(Type.Union(CLAIM_CLASSES.map((c) => Type.Literal(c)))),
19
+ payloadDigest: Type.String({ minLength: 1 }),
20
+ recordedAt: Type.String({ minLength: 1 }),
21
+ corrects: Type.Optional(Type.String({ minLength: 1 })),
22
+ annotation: Type.Optional(Type.String()),
23
+ }, { additionalProperties: false });
24
+ export function parseEvidenceEnvelope(input) {
25
+ if (!Value.Check(EvidenceEnvelopeV1Schema, input)) {
26
+ return { ok: false, error: "invalid EvidenceEnvelopeV1" };
27
+ }
28
+ return { ok: true, envelope: input };
29
+ }
30
+ //# sourceMappingURL=evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../src/evidence.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAe,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC,MAAM,CACjD;IACE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9B,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACzC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QACrB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;KAC3B,CAAC;IACF,UAAU,EAAE,IAAI,CAAC,QAAQ,CACvB,IAAI,CAAC,KAAK,CACR,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAGvC,CACF,CACF;IACD,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAC5C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACzC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IACtD,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;CACzC,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC;AAQF,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;IAC5D,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACvC,CAAC"}