@longarc/mdash 3.1.2 → 3.1.3

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 (172) hide show
  1. package/README.md +86 -23
  2. package/SECURITY.md +254 -0
  3. package/dist/accountability/engine.d.ts +27 -0
  4. package/dist/accountability/engine.d.ts.map +1 -0
  5. package/dist/accountability/engine.js +148 -0
  6. package/dist/accountability/engine.js.map +1 -0
  7. package/dist/accountability/types.d.ts +46 -0
  8. package/dist/accountability/types.d.ts.map +1 -0
  9. package/dist/accountability/types.js +8 -0
  10. package/dist/accountability/types.js.map +1 -0
  11. package/dist/checkpoint/engine.d.ts.map +1 -1
  12. package/dist/checkpoint/engine.js +4 -0
  13. package/dist/checkpoint/engine.js.map +1 -1
  14. package/dist/context/compose.d.ts +62 -0
  15. package/dist/context/compose.d.ts.map +1 -0
  16. package/dist/context/compose.js +286 -0
  17. package/dist/context/compose.js.map +1 -0
  18. package/dist/context/crypto/hash.d.ts +100 -0
  19. package/dist/context/crypto/hash.d.ts.map +1 -0
  20. package/dist/context/crypto/hash.js +248 -0
  21. package/dist/context/crypto/hash.js.map +1 -0
  22. package/dist/context/crypto/hmac.d.ts +80 -0
  23. package/dist/context/crypto/hmac.d.ts.map +1 -0
  24. package/dist/context/crypto/hmac.js +192 -0
  25. package/dist/context/crypto/hmac.js.map +1 -0
  26. package/dist/context/crypto/index.d.ts +7 -0
  27. package/dist/context/crypto/index.d.ts.map +1 -0
  28. package/dist/context/crypto/index.js +7 -0
  29. package/dist/context/crypto/index.js.map +1 -0
  30. package/dist/context/engine-v3.0-backup.d.ts +197 -0
  31. package/dist/context/engine-v3.0-backup.d.ts.map +1 -0
  32. package/dist/context/engine-v3.0-backup.js +392 -0
  33. package/dist/context/engine-v3.0-backup.js.map +1 -0
  34. package/dist/context/fragment.d.ts +99 -0
  35. package/dist/context/fragment.d.ts.map +1 -0
  36. package/dist/context/fragment.js +316 -0
  37. package/dist/context/fragment.js.map +1 -0
  38. package/dist/context/index.d.ts +99 -0
  39. package/dist/context/index.d.ts.map +1 -0
  40. package/dist/context/index.js +180 -0
  41. package/dist/context/index.js.map +1 -0
  42. package/dist/context/provenance.d.ts +80 -0
  43. package/dist/context/provenance.d.ts.map +1 -0
  44. package/dist/context/provenance.js +294 -0
  45. package/dist/context/provenance.js.map +1 -0
  46. package/dist/context/resolve.d.ts +106 -0
  47. package/dist/context/resolve.d.ts.map +1 -0
  48. package/dist/context/resolve.js +440 -0
  49. package/dist/context/resolve.js.map +1 -0
  50. package/dist/context/store.d.ts +156 -0
  51. package/dist/context/store.d.ts.map +1 -0
  52. package/dist/context/store.js +396 -0
  53. package/dist/context/store.js.map +1 -0
  54. package/dist/context/types.d.ts +463 -0
  55. package/dist/context/types.d.ts.map +1 -0
  56. package/dist/context/types.js +94 -0
  57. package/dist/context/types.js.map +1 -0
  58. package/dist/context/utils/atomic.d.ts +76 -0
  59. package/dist/context/utils/atomic.d.ts.map +1 -0
  60. package/dist/context/utils/atomic.js +159 -0
  61. package/dist/context/utils/atomic.js.map +1 -0
  62. package/dist/context/utils/credit.d.ts +65 -0
  63. package/dist/context/utils/credit.d.ts.map +1 -0
  64. package/dist/context/utils/credit.js +164 -0
  65. package/dist/context/utils/credit.js.map +1 -0
  66. package/dist/context/utils/index.d.ts +13 -0
  67. package/dist/context/utils/index.d.ts.map +1 -0
  68. package/dist/context/utils/index.js +13 -0
  69. package/dist/context/utils/index.js.map +1 -0
  70. package/dist/context/utils/utility.d.ts +63 -0
  71. package/dist/context/utils/utility.d.ts.map +1 -0
  72. package/dist/context/utils/utility.js +141 -0
  73. package/dist/context/utils/utility.js.map +1 -0
  74. package/dist/core/commitment.d.ts +25 -2
  75. package/dist/core/commitment.d.ts.map +1 -1
  76. package/dist/core/commitment.js +44 -6
  77. package/dist/core/commitment.js.map +1 -1
  78. package/dist/core/crypto.d.ts +2 -0
  79. package/dist/core/crypto.d.ts.map +1 -1
  80. package/dist/core/crypto.js +12 -0
  81. package/dist/core/crypto.js.map +1 -1
  82. package/dist/index.d.ts +11 -6
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +35 -10
  85. package/dist/index.js.map +1 -1
  86. package/dist/mcca/engine.d.ts.map +1 -1
  87. package/dist/mcca/engine.js +5 -4
  88. package/dist/mcca/engine.js.map +1 -1
  89. package/dist/physics/engine.d.ts +1 -0
  90. package/dist/physics/engine.d.ts.map +1 -1
  91. package/dist/physics/engine.js +36 -2
  92. package/dist/physics/engine.js.map +1 -1
  93. package/dist/provenance/api-handler.d.ts +45 -0
  94. package/dist/provenance/api-handler.d.ts.map +1 -0
  95. package/dist/provenance/api-handler.js +223 -0
  96. package/dist/provenance/api-handler.js.map +1 -0
  97. package/dist/provenance/api-types.d.ts +108 -0
  98. package/dist/provenance/api-types.d.ts.map +1 -0
  99. package/dist/provenance/api-types.js +9 -0
  100. package/dist/provenance/api-types.js.map +1 -0
  101. package/dist/provenance/index.d.ts +6 -0
  102. package/dist/provenance/index.d.ts.map +1 -0
  103. package/dist/provenance/index.js +3 -0
  104. package/dist/provenance/index.js.map +1 -0
  105. package/dist/provenance/provenance-engine.d.ts +63 -0
  106. package/dist/provenance/provenance-engine.d.ts.map +1 -0
  107. package/dist/provenance/provenance-engine.js +311 -0
  108. package/dist/provenance/provenance-engine.js.map +1 -0
  109. package/dist/provenance/types.d.ts +193 -0
  110. package/dist/provenance/types.d.ts.map +1 -0
  111. package/dist/provenance/types.js +9 -0
  112. package/dist/provenance/types.js.map +1 -0
  113. package/dist/tee/engine.d.ts.map +1 -1
  114. package/dist/tee/engine.js +14 -0
  115. package/dist/tee/engine.js.map +1 -1
  116. package/dist/warrant/engine.d.ts +24 -1
  117. package/dist/warrant/engine.d.ts.map +1 -1
  118. package/dist/warrant/engine.js +76 -1
  119. package/dist/warrant/engine.js.map +1 -1
  120. package/dist/zk/engine.d.ts.map +1 -1
  121. package/dist/zk/engine.js +7 -4
  122. package/dist/zk/engine.js.map +1 -1
  123. package/docs/SECURITY-PATCHES.md +170 -0
  124. package/package.json +17 -5
  125. package/src/__tests__/accountability.test.ts +308 -0
  126. package/src/__tests__/l1-verification-modes.test.ts +424 -0
  127. package/src/__tests__/phase1.benchmark.test.ts +94 -0
  128. package/src/__tests__/phase1.test.ts +0 -77
  129. package/src/__tests__/phase2-4.benchmark.test.ts +60 -0
  130. package/src/__tests__/phase2-4.test.ts +1 -52
  131. package/src/__tests__/provenance/api-handler.test.ts +356 -0
  132. package/src/__tests__/provenance/provenance-engine.test.ts +628 -0
  133. package/src/__tests__/sa-2026-008.test.ts +45 -0
  134. package/src/__tests__/sa-2026-009.test.ts +86 -0
  135. package/src/__tests__/sa-2026-010.test.ts +72 -0
  136. package/src/__tests__/sa-2026-012.test.ts +65 -0
  137. package/src/__tests__/sa-2026-nfc.test.ts +40 -0
  138. package/src/__tests__/security.test.ts +786 -0
  139. package/src/accountability/engine.ts +230 -0
  140. package/src/accountability/types.ts +58 -0
  141. package/src/checkpoint/engine.ts +4 -0
  142. package/src/context/__tests__/caret-v0.2.0.test.ts +860 -0
  143. package/src/context/__tests__/integration.test.ts +356 -0
  144. package/src/context/compose.ts +388 -0
  145. package/src/context/crypto/hash.ts +277 -0
  146. package/src/context/crypto/hmac.ts +253 -0
  147. package/src/context/crypto/index.ts +29 -0
  148. package/src/context/engine-v3.0-backup.ts +598 -0
  149. package/src/context/fragment.ts +454 -0
  150. package/src/context/index.ts +427 -0
  151. package/src/context/provenance.ts +380 -0
  152. package/src/context/resolve.ts +581 -0
  153. package/src/context/store.ts +503 -0
  154. package/src/context/types.ts +679 -0
  155. package/src/context/utils/atomic.ts +207 -0
  156. package/src/context/utils/credit.ts +224 -0
  157. package/src/context/utils/index.ts +13 -0
  158. package/src/context/utils/utility.ts +200 -0
  159. package/src/core/commitment.ts +129 -67
  160. package/src/core/crypto.ts +13 -0
  161. package/src/index.ts +62 -10
  162. package/src/mcca/engine.ts +5 -4
  163. package/src/physics/engine.ts +40 -3
  164. package/src/provenance/api-handler.ts +248 -0
  165. package/src/provenance/api-types.ts +112 -0
  166. package/src/provenance/index.ts +19 -0
  167. package/src/provenance/provenance-engine.ts +387 -0
  168. package/src/provenance/types.ts +211 -0
  169. package/src/tee/engine.ts +16 -0
  170. package/src/warrant/engine.ts +89 -1
  171. package/src/zk/engine.ts +8 -4
  172. package/tsconfig.json +1 -1
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Caret — Constraint Resolution Engine
3
+ * @module @longarcstudios/caret/resolve
4
+ *
5
+ * Resolve context fragments through their constraints.
6
+ * Determines if a fragment is valid for use in the current context.
7
+ */
8
+ import type { ContextFragment, TimeConstraint, ScopeConstraint, TrustConstraint, SignatureConstraint, InfluenceConstraint, InfluenceBudget, ResolutionResult, ConstraintViolation, TrustLevel, Attribution } from './types.js';
9
+ /** Context for resolution operations */
10
+ export interface ResolutionContext {
11
+ /** Current domain for scope checking */
12
+ domain?: string;
13
+ /** Current time for time constraint checking (default: now) */
14
+ current_time?: Date;
15
+ /** Minimum required trust level */
16
+ min_trust?: TrustLevel;
17
+ /** Required attributions */
18
+ required_attributions?: Attribution[];
19
+ /** Known trusted signers */
20
+ trusted_signers?: string[];
21
+ /** Current influence budget for MCCA compliance checking */
22
+ current_influence?: InfluenceBudget;
23
+ }
24
+ /**
25
+ * Resolve a fragment through its constraints.
26
+ *
27
+ * @param fragment - The fragment to resolve
28
+ * @param context - Resolution context
29
+ * @returns Resolution result indicating success or violations
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * const result = await resolve(fragment, {
34
+ * domain: 'hr.company.com',
35
+ * min_trust: 50
36
+ * });
37
+ *
38
+ * if (result.success) {
39
+ * // Use fragment.content safely
40
+ * } else {
41
+ * console.log('Violations:', result.violations);
42
+ * }
43
+ * ```
44
+ */
45
+ export declare function resolve<T = unknown>(fragment: ContextFragment<T>, context?: ResolutionContext): Promise<ResolutionResult<T>>;
46
+ /**
47
+ * Resolve multiple fragments at once.
48
+ * Returns only fragments that pass all constraints.
49
+ */
50
+ export declare function resolveAll<T = unknown>(fragments: readonly ContextFragment<T>[], context?: ResolutionContext): Promise<{
51
+ resolved: ContextFragment<T>[];
52
+ rejected: Array<{
53
+ fragment: ContextFragment<T>;
54
+ violations: ConstraintViolation[];
55
+ }>;
56
+ }>;
57
+ /**
58
+ * Filter fragments by trust level.
59
+ */
60
+ export declare function filterByTrust<T>(fragments: readonly ContextFragment<T>[], minTrust: TrustLevel): ContextFragment<T>[];
61
+ /**
62
+ * Filter fragments by age.
63
+ */
64
+ export declare function filterByAge<T>(fragments: readonly ContextFragment<T>[], maxAgeMs: number): ContextFragment<T>[];
65
+ /**
66
+ * Create a max age constraint.
67
+ */
68
+ export declare function maxAge(duration: string | number): TimeConstraint;
69
+ /**
70
+ * Create a not-before constraint.
71
+ */
72
+ export declare function notBefore(time: Date | string): TimeConstraint;
73
+ /**
74
+ * Create a not-after constraint.
75
+ */
76
+ export declare function notAfter(time: Date | string): TimeConstraint;
77
+ /**
78
+ * Create a scope constraint.
79
+ */
80
+ export declare function allowDomains(...domains: string[]): ScopeConstraint;
81
+ /**
82
+ * Create a minimum trust constraint.
83
+ */
84
+ export declare function requireTrust(level: number): TrustConstraint;
85
+ /**
86
+ * Create a signature requirement constraint.
87
+ */
88
+ export declare function requireSignature(allowedSigners?: string[]): SignatureConstraint;
89
+ /**
90
+ * Create an influence budget constraint (MCCA compliance).
91
+ *
92
+ * @example
93
+ * ```ts
94
+ * // Strict MCCA enforcement
95
+ * requireInfluence({ system: 0.45, user: 0.30, environment: 0.15, assistant: 0.10 })
96
+ *
97
+ * // Advisory mode (warnings only)
98
+ * requireInfluence({ system: 0.40, user: 0.35, environment: 0.20, assistant: 0.05 }, 'advisory')
99
+ * ```
100
+ */
101
+ export declare function requireInfluence(budget: InfluenceBudget, enforcement?: 'strict' | 'advisory'): InfluenceConstraint;
102
+ /**
103
+ * Create a default MCCA-compliant influence constraint.
104
+ */
105
+ export declare function requireMCCA(overrides?: Partial<InfluenceBudget> | 'strict' | 'advisory', enforcement?: 'strict' | 'advisory'): InfluenceConstraint;
106
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/context/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,eAAe,EAEf,cAAc,EACd,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EAEnB,UAAU,EACV,WAAW,EACZ,MAAM,YAAY,CAAC;AASpB,wCAAwC;AACxC,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,IAAI,CAAC;IAEpB,mCAAmC;IACnC,SAAS,CAAC,EAAE,UAAU,CAAC;IAEvB,4BAA4B;IAC5B,qBAAqB,CAAC,EAAE,WAAW,EAAE,CAAC;IAEtC,4BAA4B;IAC5B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,eAAe,CAAC;CACrC;AAMD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,OAAO,CAAC,CAAC,GAAG,OAAO,EACvC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,EAC5B,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CA6C9B;AAyQD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,CAAC,GAAG,OAAO,EAC1C,SAAS,EAAE,SAAS,eAAe,CAAC,CAAC,CAAC,EAAE,EACxC,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC;IACT,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,QAAQ,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;QAAC,UAAU,EAAE,mBAAmB,EAAE,CAAA;KAAE,CAAC,CAAC;CACtF,CAAC,CAeD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,SAAS,EAAE,SAAS,eAAe,CAAC,CAAC,CAAC,EAAE,EACxC,QAAQ,EAAE,UAAU,GACnB,eAAe,CAAC,CAAC,CAAC,EAAE,CAEtB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,SAAS,EAAE,SAAS,eAAe,CAAC,CAAC,CAAC,EAAE,EACxC,QAAQ,EAAE,MAAM,GACf,eAAe,CAAC,CAAC,CAAC,EAAE,CAEtB;AAsCD;;GAEG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,cAAc,CAGhE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,cAAc,CAG7D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,cAAc,CAG5D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,eAAe,CAElE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAE3D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAE/E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,eAAe,EACvB,WAAW,GAAE,QAAQ,GAAG,UAAqB,GAC5C,mBAAmB,CAErB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,QAAQ,GAAG,UAAU,EAC5D,WAAW,GAAE,QAAQ,GAAG,UAAqB,GAC5C,mBAAmB,CAcrB"}
@@ -0,0 +1,440 @@
1
+ /**
2
+ * Caret — Constraint Resolution Engine
3
+ * @module @longarcstudios/caret/resolve
4
+ *
5
+ * Resolve context fragments through their constraints.
6
+ * Determines if a fragment is valid for use in the current context.
7
+ */
8
+ import { isValidInfluenceBudget } from './types.js';
9
+ import { getFragmentTrust, getFragmentAge } from './fragment.js';
10
+ import { flattenChain } from './provenance.js';
11
+ // ============================================================================
12
+ // MAIN RESOLUTION FUNCTION
13
+ // ============================================================================
14
+ /**
15
+ * Resolve a fragment through its constraints.
16
+ *
17
+ * @param fragment - The fragment to resolve
18
+ * @param context - Resolution context
19
+ * @returns Resolution result indicating success or violations
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * const result = await resolve(fragment, {
24
+ * domain: 'hr.company.com',
25
+ * min_trust: 50
26
+ * });
27
+ *
28
+ * if (result.success) {
29
+ * // Use fragment.content safely
30
+ * } else {
31
+ * console.log('Violations:', result.violations);
32
+ * }
33
+ * ```
34
+ */
35
+ export async function resolve(fragment, context = {}) {
36
+ const violations = [];
37
+ const currentTime = context.current_time ?? new Date();
38
+ // Check each constraint
39
+ for (const constraint of fragment.constraints) {
40
+ const violation = checkConstraint(constraint, fragment, context, currentTime);
41
+ if (violation) {
42
+ violations.push(violation);
43
+ }
44
+ }
45
+ // Check context-level requirements (not in fragment constraints)
46
+ if (context.min_trust !== undefined) {
47
+ const trust = getFragmentTrust(fragment);
48
+ if (trust < context.min_trust) {
49
+ violations.push({
50
+ constraint: { kind: 'trust', minimum_trust: context.min_trust },
51
+ reason: `Fragment trust ${trust} is below required ${context.min_trust}`,
52
+ severity: 'error',
53
+ });
54
+ }
55
+ }
56
+ if (context.required_attributions !== undefined) {
57
+ const records = flattenChain(fragment.provenance);
58
+ const attributions = new Set(records.map(r => r.attribution));
59
+ for (const required of context.required_attributions) {
60
+ if (!attributions.has(required)) {
61
+ violations.push({
62
+ constraint: { kind: 'trust', minimum_trust: 0, required_attributions: context.required_attributions },
63
+ reason: `Missing required attribution: ${required}`,
64
+ severity: 'error',
65
+ });
66
+ }
67
+ }
68
+ }
69
+ return {
70
+ success: violations.filter(v => v.severity === 'error').length === 0,
71
+ fragment: violations.filter(v => v.severity === 'error').length === 0 ? fragment : null,
72
+ violations,
73
+ resolved_at: new Date().toISOString(),
74
+ };
75
+ }
76
+ // ============================================================================
77
+ // CONSTRAINT CHECKERS
78
+ // ============================================================================
79
+ /**
80
+ * Check a single constraint against a fragment.
81
+ */
82
+ function checkConstraint(constraint, fragment, context, currentTime) {
83
+ switch (constraint.kind) {
84
+ case 'time':
85
+ return checkTimeConstraint(constraint, fragment, currentTime);
86
+ case 'scope':
87
+ return checkScopeConstraint(constraint, context);
88
+ case 'trust':
89
+ return checkTrustConstraint(constraint, fragment);
90
+ case 'signature':
91
+ return checkSignatureConstraint(constraint, fragment, context);
92
+ case 'influence':
93
+ return checkInfluenceConstraint(constraint, context);
94
+ default:
95
+ return null;
96
+ }
97
+ }
98
+ /**
99
+ * Check time-based constraints.
100
+ */
101
+ function checkTimeConstraint(constraint, fragment, currentTime) {
102
+ // Check max_age
103
+ if (constraint.max_age_ms !== undefined) {
104
+ const age = getFragmentAge(fragment);
105
+ if (age > constraint.max_age_ms) {
106
+ return {
107
+ constraint,
108
+ reason: `Fragment age (${formatDuration(age)}) exceeds max_age (${formatDuration(constraint.max_age_ms)})`,
109
+ severity: 'error',
110
+ };
111
+ }
112
+ }
113
+ // Check not_before
114
+ if (constraint.not_before !== undefined) {
115
+ const notBefore = new Date(constraint.not_before);
116
+ if (currentTime < notBefore) {
117
+ return {
118
+ constraint,
119
+ reason: `Current time is before not_before (${constraint.not_before})`,
120
+ severity: 'error',
121
+ };
122
+ }
123
+ }
124
+ // Check not_after
125
+ if (constraint.not_after !== undefined) {
126
+ const notAfter = new Date(constraint.not_after);
127
+ if (currentTime > notAfter) {
128
+ return {
129
+ constraint,
130
+ reason: `Current time is after not_after (${constraint.not_after})`,
131
+ severity: 'error',
132
+ };
133
+ }
134
+ }
135
+ return null;
136
+ }
137
+ /**
138
+ * Check scope-based constraints.
139
+ */
140
+ function checkScopeConstraint(constraint, context) {
141
+ if (!context.domain) {
142
+ // No domain context — can't verify scope
143
+ return {
144
+ constraint,
145
+ reason: 'No domain context provided for scope verification',
146
+ severity: 'warning',
147
+ };
148
+ }
149
+ // Check denied domains first
150
+ if (constraint.denied_domains) {
151
+ for (const denied of constraint.denied_domains) {
152
+ if (domainMatches(context.domain, denied)) {
153
+ return {
154
+ constraint,
155
+ reason: `Domain ${context.domain} is in denied list`,
156
+ severity: 'error',
157
+ };
158
+ }
159
+ }
160
+ }
161
+ // Check allowed domains
162
+ let allowed = false;
163
+ for (const allowedDomain of constraint.allowed_domains) {
164
+ if (domainMatches(context.domain, allowedDomain)) {
165
+ allowed = true;
166
+ break;
167
+ }
168
+ }
169
+ if (!allowed) {
170
+ return {
171
+ constraint,
172
+ reason: `Domain ${context.domain} is not in allowed list`,
173
+ severity: 'error',
174
+ };
175
+ }
176
+ return null;
177
+ }
178
+ /**
179
+ * Check trust-based constraints.
180
+ */
181
+ function checkTrustConstraint(constraint, fragment) {
182
+ const trust = getFragmentTrust(fragment);
183
+ // Check minimum trust
184
+ if (trust < constraint.minimum_trust) {
185
+ return {
186
+ constraint,
187
+ reason: `Fragment trust ${trust} is below minimum ${constraint.minimum_trust}`,
188
+ severity: 'error',
189
+ };
190
+ }
191
+ // Check required attributions
192
+ if (constraint.required_attributions) {
193
+ const records = flattenChain(fragment.provenance);
194
+ const attributions = new Set(records.map(r => r.attribution));
195
+ for (const required of constraint.required_attributions) {
196
+ if (!attributions.has(required)) {
197
+ return {
198
+ constraint,
199
+ reason: `Missing required attribution: ${required}`,
200
+ severity: 'error',
201
+ };
202
+ }
203
+ }
204
+ }
205
+ return null;
206
+ }
207
+ /**
208
+ * Check signature-based constraints.
209
+ */
210
+ function checkSignatureConstraint(constraint, fragment, _context) {
211
+ if (!constraint.required) {
212
+ return null;
213
+ }
214
+ // Check if any record in the chain has a signature
215
+ const records = flattenChain(fragment.provenance);
216
+ const signedRecords = records.filter(r => r.signature !== undefined);
217
+ if (signedRecords.length === 0) {
218
+ return {
219
+ constraint,
220
+ reason: 'No signatures found in provenance chain',
221
+ severity: 'error',
222
+ };
223
+ }
224
+ // If allowed_signers specified, verify at least one matches
225
+ if (constraint.allowed_signers && constraint.allowed_signers.length > 0) {
226
+ const allowedSignersSet = new Set(constraint.allowed_signers);
227
+ const hasAllowedSigner = signedRecords.some(r => r.signature !== undefined && allowedSignersSet.has(r.signature));
228
+ if (!hasAllowedSigner) {
229
+ return {
230
+ constraint,
231
+ reason: 'No signatures from allowed signers',
232
+ severity: 'error',
233
+ };
234
+ }
235
+ }
236
+ return null;
237
+ }
238
+ /**
239
+ * Check influence-based constraints (MCCA compliance).
240
+ */
241
+ function checkInfluenceConstraint(constraint, context) {
242
+ // First validate the constraint's budget itself
243
+ if (!isValidInfluenceBudget(constraint.budget)) {
244
+ return {
245
+ constraint,
246
+ reason: 'Constraint budget is not MCCA-compliant',
247
+ severity: constraint.enforcement === 'strict' ? 'error' : 'warning',
248
+ };
249
+ }
250
+ // If no current influence in context, we can't verify compliance
251
+ if (!context.current_influence) {
252
+ return {
253
+ constraint,
254
+ reason: 'No current influence budget in resolution context',
255
+ severity: 'warning',
256
+ };
257
+ }
258
+ const current = context.current_influence;
259
+ const budget = constraint.budget;
260
+ const violations = [];
261
+ // Check each MCCA bound
262
+ if (current.system < budget.system) {
263
+ violations.push(`system influence ${current.system.toFixed(2)} below required ${budget.system.toFixed(2)}`);
264
+ }
265
+ if (current.user > budget.user) {
266
+ violations.push(`user influence ${current.user.toFixed(2)} exceeds limit ${budget.user.toFixed(2)}`);
267
+ }
268
+ if (current.environment > budget.environment) {
269
+ violations.push(`environment influence ${current.environment.toFixed(2)} exceeds limit ${budget.environment.toFixed(2)}`);
270
+ }
271
+ if (current.assistant > budget.assistant) {
272
+ violations.push(`assistant influence ${current.assistant.toFixed(2)} exceeds limit ${budget.assistant.toFixed(2)}`);
273
+ }
274
+ if (violations.length > 0) {
275
+ return {
276
+ constraint,
277
+ reason: `MCCA violations: ${violations.join('; ')}`,
278
+ severity: constraint.enforcement === 'strict' ? 'error' : 'warning',
279
+ };
280
+ }
281
+ return null;
282
+ }
283
+ // ============================================================================
284
+ // BATCH RESOLUTION
285
+ // ============================================================================
286
+ /**
287
+ * Resolve multiple fragments at once.
288
+ * Returns only fragments that pass all constraints.
289
+ */
290
+ export async function resolveAll(fragments, context = {}) {
291
+ const resolved = [];
292
+ const rejected = [];
293
+ for (const fragment of fragments) {
294
+ const result = await resolve(fragment, context);
295
+ if (result.success && result.fragment) {
296
+ resolved.push(result.fragment);
297
+ }
298
+ else {
299
+ rejected.push({ fragment, violations: [...result.violations] });
300
+ }
301
+ }
302
+ return { resolved, rejected };
303
+ }
304
+ /**
305
+ * Filter fragments by trust level.
306
+ */
307
+ export function filterByTrust(fragments, minTrust) {
308
+ return fragments.filter(f => getFragmentTrust(f) >= minTrust);
309
+ }
310
+ /**
311
+ * Filter fragments by age.
312
+ */
313
+ export function filterByAge(fragments, maxAgeMs) {
314
+ return fragments.filter(f => getFragmentAge(f) <= maxAgeMs);
315
+ }
316
+ // ============================================================================
317
+ // UTILITY FUNCTIONS
318
+ // ============================================================================
319
+ /**
320
+ * Check if a domain matches a pattern.
321
+ * Supports wildcards: *.example.com matches sub.example.com
322
+ */
323
+ function domainMatches(domain, pattern) {
324
+ if (pattern === '*') {
325
+ return true;
326
+ }
327
+ if (pattern.startsWith('*.')) {
328
+ const suffix = pattern.slice(1); // Remove the *
329
+ return domain.endsWith(suffix) || domain === pattern.slice(2);
330
+ }
331
+ return domain === pattern;
332
+ }
333
+ /**
334
+ * Format a duration in milliseconds to human readable string.
335
+ */
336
+ function formatDuration(ms) {
337
+ if (ms < 1000)
338
+ return `${ms}ms`;
339
+ if (ms < 60000)
340
+ return `${Math.round(ms / 1000)}s`;
341
+ if (ms < 3600000)
342
+ return `${Math.round(ms / 60000)}m`;
343
+ if (ms < 86400000)
344
+ return `${Math.round(ms / 3600000)}h`;
345
+ return `${Math.round(ms / 86400000)}d`;
346
+ }
347
+ // ============================================================================
348
+ // CONSTRAINT BUILDERS
349
+ // ============================================================================
350
+ /**
351
+ * Create a max age constraint.
352
+ */
353
+ export function maxAge(duration) {
354
+ const ms = typeof duration === 'number' ? duration : parseDuration(duration);
355
+ return { kind: 'time', max_age_ms: ms };
356
+ }
357
+ /**
358
+ * Create a not-before constraint.
359
+ */
360
+ export function notBefore(time) {
361
+ const ts = typeof time === 'string' ? time : time.toISOString();
362
+ return { kind: 'time', not_before: ts };
363
+ }
364
+ /**
365
+ * Create a not-after constraint.
366
+ */
367
+ export function notAfter(time) {
368
+ const ts = typeof time === 'string' ? time : time.toISOString();
369
+ return { kind: 'time', not_after: ts };
370
+ }
371
+ /**
372
+ * Create a scope constraint.
373
+ */
374
+ export function allowDomains(...domains) {
375
+ return { kind: 'scope', allowed_domains: domains };
376
+ }
377
+ /**
378
+ * Create a minimum trust constraint.
379
+ */
380
+ export function requireTrust(level) {
381
+ return { kind: 'trust', minimum_trust: level };
382
+ }
383
+ /**
384
+ * Create a signature requirement constraint.
385
+ */
386
+ export function requireSignature(allowedSigners) {
387
+ return { kind: 'signature', required: true, allowed_signers: allowedSigners };
388
+ }
389
+ /**
390
+ * Create an influence budget constraint (MCCA compliance).
391
+ *
392
+ * @example
393
+ * ```ts
394
+ * // Strict MCCA enforcement
395
+ * requireInfluence({ system: 0.45, user: 0.30, environment: 0.15, assistant: 0.10 })
396
+ *
397
+ * // Advisory mode (warnings only)
398
+ * requireInfluence({ system: 0.40, user: 0.35, environment: 0.20, assistant: 0.05 }, 'advisory')
399
+ * ```
400
+ */
401
+ export function requireInfluence(budget, enforcement = 'strict') {
402
+ return { kind: 'influence', budget, enforcement };
403
+ }
404
+ /**
405
+ * Create a default MCCA-compliant influence constraint.
406
+ */
407
+ export function requireMCCA(overrides, enforcement = 'strict') {
408
+ const defaults = {
409
+ system: 0.45,
410
+ user: 0.30,
411
+ environment: 0.15,
412
+ assistant: 0.10,
413
+ };
414
+ if (typeof overrides === 'string') {
415
+ return { kind: 'influence', budget: defaults, enforcement: overrides };
416
+ }
417
+ const budget = overrides ? { ...defaults, ...overrides } : defaults;
418
+ return { kind: 'influence', budget, enforcement };
419
+ }
420
+ /**
421
+ * Parse a duration string like "24h", "7d", "30m", "1w"
422
+ */
423
+ function parseDuration(duration) {
424
+ const match = duration.match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d|w)$/i);
425
+ if (!match || !match[1] || !match[2]) {
426
+ throw new Error(`Invalid duration format: ${duration}`);
427
+ }
428
+ const value = parseFloat(match[1]);
429
+ const unit = match[2].toLowerCase();
430
+ switch (unit) {
431
+ case 'ms': return value;
432
+ case 's': return value * 1000;
433
+ case 'm': return value * 60 * 1000;
434
+ case 'h': return value * 60 * 60 * 1000;
435
+ case 'd': return value * 24 * 60 * 60 * 1000;
436
+ case 'w': return value * 7 * 24 * 60 * 60 * 1000;
437
+ default: throw new Error(`Unknown duration unit: ${unit}`);
438
+ }
439
+ }
440
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/context/resolve.ts"],"names":[],"mappings":"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"}