@longarc/mdash 3.1.1 → 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 (178) 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 +2 -2
  12. package/dist/checkpoint/engine.d.ts.map +1 -1
  13. package/dist/checkpoint/engine.js +5 -1
  14. package/dist/checkpoint/engine.js.map +1 -1
  15. package/dist/context/compose.d.ts +62 -0
  16. package/dist/context/compose.d.ts.map +1 -0
  17. package/dist/context/compose.js +286 -0
  18. package/dist/context/compose.js.map +1 -0
  19. package/dist/context/crypto/hash.d.ts +100 -0
  20. package/dist/context/crypto/hash.d.ts.map +1 -0
  21. package/dist/context/crypto/hash.js +248 -0
  22. package/dist/context/crypto/hash.js.map +1 -0
  23. package/dist/context/crypto/hmac.d.ts +80 -0
  24. package/dist/context/crypto/hmac.d.ts.map +1 -0
  25. package/dist/context/crypto/hmac.js +192 -0
  26. package/dist/context/crypto/hmac.js.map +1 -0
  27. package/dist/context/crypto/index.d.ts +7 -0
  28. package/dist/context/crypto/index.d.ts.map +1 -0
  29. package/dist/context/crypto/index.js +7 -0
  30. package/dist/context/crypto/index.js.map +1 -0
  31. package/dist/context/engine-v3.0-backup.d.ts +197 -0
  32. package/dist/context/engine-v3.0-backup.d.ts.map +1 -0
  33. package/dist/context/engine-v3.0-backup.js +392 -0
  34. package/dist/context/engine-v3.0-backup.js.map +1 -0
  35. package/dist/context/engine.d.ts +2 -2
  36. package/dist/context/engine.d.ts.map +1 -1
  37. package/dist/context/engine.js +2 -2
  38. package/dist/context/engine.js.map +1 -1
  39. package/dist/context/fragment.d.ts +99 -0
  40. package/dist/context/fragment.d.ts.map +1 -0
  41. package/dist/context/fragment.js +316 -0
  42. package/dist/context/fragment.js.map +1 -0
  43. package/dist/context/index.d.ts +99 -0
  44. package/dist/context/index.d.ts.map +1 -0
  45. package/dist/context/index.js +180 -0
  46. package/dist/context/index.js.map +1 -0
  47. package/dist/context/provenance.d.ts +80 -0
  48. package/dist/context/provenance.d.ts.map +1 -0
  49. package/dist/context/provenance.js +294 -0
  50. package/dist/context/provenance.js.map +1 -0
  51. package/dist/context/resolve.d.ts +106 -0
  52. package/dist/context/resolve.d.ts.map +1 -0
  53. package/dist/context/resolve.js +440 -0
  54. package/dist/context/resolve.js.map +1 -0
  55. package/dist/context/store.d.ts +156 -0
  56. package/dist/context/store.d.ts.map +1 -0
  57. package/dist/context/store.js +396 -0
  58. package/dist/context/store.js.map +1 -0
  59. package/dist/context/types.d.ts +463 -0
  60. package/dist/context/types.d.ts.map +1 -0
  61. package/dist/context/types.js +94 -0
  62. package/dist/context/types.js.map +1 -0
  63. package/dist/context/utils/atomic.d.ts +76 -0
  64. package/dist/context/utils/atomic.d.ts.map +1 -0
  65. package/dist/context/utils/atomic.js +159 -0
  66. package/dist/context/utils/atomic.js.map +1 -0
  67. package/dist/context/utils/credit.d.ts +65 -0
  68. package/dist/context/utils/credit.d.ts.map +1 -0
  69. package/dist/context/utils/credit.js +164 -0
  70. package/dist/context/utils/credit.js.map +1 -0
  71. package/dist/context/utils/index.d.ts +13 -0
  72. package/dist/context/utils/index.d.ts.map +1 -0
  73. package/dist/context/utils/index.js +13 -0
  74. package/dist/context/utils/index.js.map +1 -0
  75. package/dist/context/utils/utility.d.ts +63 -0
  76. package/dist/context/utils/utility.d.ts.map +1 -0
  77. package/dist/context/utils/utility.js +141 -0
  78. package/dist/context/utils/utility.js.map +1 -0
  79. package/dist/core/commitment.d.ts +26 -3
  80. package/dist/core/commitment.d.ts.map +1 -1
  81. package/dist/core/commitment.js +45 -7
  82. package/dist/core/commitment.js.map +1 -1
  83. package/dist/core/crypto.d.ts +2 -0
  84. package/dist/core/crypto.d.ts.map +1 -1
  85. package/dist/core/crypto.js +12 -0
  86. package/dist/core/crypto.js.map +1 -1
  87. package/dist/index.d.ts +11 -6
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +35 -10
  90. package/dist/index.js.map +1 -1
  91. package/dist/mcca/engine.d.ts.map +1 -1
  92. package/dist/mcca/engine.js +5 -4
  93. package/dist/mcca/engine.js.map +1 -1
  94. package/dist/physics/engine.d.ts +3 -2
  95. package/dist/physics/engine.d.ts.map +1 -1
  96. package/dist/physics/engine.js +37 -3
  97. package/dist/physics/engine.js.map +1 -1
  98. package/dist/provenance/api-handler.d.ts +45 -0
  99. package/dist/provenance/api-handler.d.ts.map +1 -0
  100. package/dist/provenance/api-handler.js +223 -0
  101. package/dist/provenance/api-handler.js.map +1 -0
  102. package/dist/provenance/api-types.d.ts +108 -0
  103. package/dist/provenance/api-types.d.ts.map +1 -0
  104. package/dist/provenance/api-types.js +9 -0
  105. package/dist/provenance/api-types.js.map +1 -0
  106. package/dist/provenance/index.d.ts +6 -0
  107. package/dist/provenance/index.d.ts.map +1 -0
  108. package/dist/provenance/index.js +3 -0
  109. package/dist/provenance/index.js.map +1 -0
  110. package/dist/provenance/provenance-engine.d.ts +63 -0
  111. package/dist/provenance/provenance-engine.d.ts.map +1 -0
  112. package/dist/provenance/provenance-engine.js +311 -0
  113. package/dist/provenance/provenance-engine.js.map +1 -0
  114. package/dist/provenance/types.d.ts +193 -0
  115. package/dist/provenance/types.d.ts.map +1 -0
  116. package/dist/provenance/types.js +9 -0
  117. package/dist/provenance/types.js.map +1 -0
  118. package/dist/tee/engine.d.ts.map +1 -1
  119. package/dist/tee/engine.js +14 -0
  120. package/dist/tee/engine.js.map +1 -1
  121. package/dist/warrant/engine.d.ts +24 -1
  122. package/dist/warrant/engine.d.ts.map +1 -1
  123. package/dist/warrant/engine.js +76 -1
  124. package/dist/warrant/engine.js.map +1 -1
  125. package/dist/zk/engine.d.ts.map +1 -1
  126. package/dist/zk/engine.js +7 -4
  127. package/dist/zk/engine.js.map +1 -1
  128. package/docs/SECURITY-PATCHES.md +170 -0
  129. package/package.json +17 -5
  130. package/src/__tests__/accountability.test.ts +308 -0
  131. package/src/__tests__/l1-verification-modes.test.ts +424 -0
  132. package/src/__tests__/phase1.benchmark.test.ts +94 -0
  133. package/src/__tests__/phase1.test.ts +0 -77
  134. package/src/__tests__/phase2-4.benchmark.test.ts +60 -0
  135. package/src/__tests__/phase2-4.test.ts +1 -52
  136. package/src/__tests__/provenance/api-handler.test.ts +356 -0
  137. package/src/__tests__/provenance/provenance-engine.test.ts +628 -0
  138. package/src/__tests__/sa-2026-008.test.ts +45 -0
  139. package/src/__tests__/sa-2026-009.test.ts +86 -0
  140. package/src/__tests__/sa-2026-010.test.ts +72 -0
  141. package/src/__tests__/sa-2026-012.test.ts +65 -0
  142. package/src/__tests__/sa-2026-nfc.test.ts +40 -0
  143. package/src/__tests__/security.test.ts +786 -0
  144. package/src/accountability/engine.ts +230 -0
  145. package/src/accountability/types.ts +58 -0
  146. package/src/checkpoint/engine.ts +6 -2
  147. package/src/context/__tests__/caret-v0.2.0.test.ts +860 -0
  148. package/src/context/__tests__/integration.test.ts +356 -0
  149. package/src/context/compose.ts +388 -0
  150. package/src/context/crypto/hash.ts +277 -0
  151. package/src/context/crypto/hmac.ts +253 -0
  152. package/src/context/crypto/index.ts +29 -0
  153. package/src/context/engine-v3.0-backup.ts +598 -0
  154. package/src/context/engine.ts +2 -2
  155. package/src/context/fragment.ts +454 -0
  156. package/src/context/index.ts +427 -0
  157. package/src/context/provenance.ts +380 -0
  158. package/src/context/resolve.ts +581 -0
  159. package/src/context/store.ts +503 -0
  160. package/src/context/types.ts +679 -0
  161. package/src/context/utils/atomic.ts +207 -0
  162. package/src/context/utils/credit.ts +224 -0
  163. package/src/context/utils/index.ts +13 -0
  164. package/src/context/utils/utility.ts +200 -0
  165. package/src/core/commitment.ts +130 -68
  166. package/src/core/crypto.ts +13 -0
  167. package/src/index.ts +62 -10
  168. package/src/mcca/engine.ts +5 -4
  169. package/src/physics/engine.ts +42 -5
  170. package/src/provenance/api-handler.ts +248 -0
  171. package/src/provenance/api-types.ts +112 -0
  172. package/src/provenance/index.ts +19 -0
  173. package/src/provenance/provenance-engine.ts +387 -0
  174. package/src/provenance/types.ts +211 -0
  175. package/src/tee/engine.ts +16 -0
  176. package/src/warrant/engine.ts +89 -1
  177. package/src/zk/engine.ts +8 -4
  178. package/tsconfig.json +1 -1
@@ -0,0 +1,180 @@
1
+ /**
2
+ * mdash v3.1 — Context Module (formerly Caret)
3
+ * @module @longarcstudios/mdash/context
4
+ * @version 3.1.0
5
+ *
6
+ * The context primitive runtime, now integrated into mdash.
7
+ *
8
+ * Architecture: LLM at the edges, cryptography at the core.
9
+ *
10
+ * v3.1.0: Merged into mdash from Caret v0.2.0
11
+ * - MdashActionCode for standardized action vocabulary
12
+ * - InfluenceBudget for MCCA-compliant bounds
13
+ * - InfluenceConstraint for influence-based resolution
14
+ * - Outcome<T> for Intent-Experience-Utility tracking
15
+ * - Atomic encoding with coreference resolution
16
+ * - Utility learning and credit assignment utilities
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * import { createCaret, requireInfluence } from '@longarcstudios/caret';
21
+ *
22
+ * const caret = createCaret({ seal_key: 'your-secret-key' });
23
+ *
24
+ * // Seal content into a fragment with MCCA constraints
25
+ * const fragment = await caret.seal({
26
+ * content: { message: 'Hello, world!' },
27
+ * source: 'app://example/greeting',
28
+ * attribution: 'system',
29
+ * constraints: [
30
+ * requireInfluence({ system: 0.45, user: 0.30, environment: 0.15, assistant: 0.10 })
31
+ * ],
32
+ * atomic_encoding: { enabled: true }
33
+ * });
34
+ *
35
+ * // Compose multiple fragments
36
+ * const manifold = await caret.compose([
37
+ * fragment,
38
+ * anotherFragment
39
+ * ], { ceiling: '8k tokens' });
40
+ *
41
+ * // Resolve through constraints
42
+ * const result = await caret.resolve(fragment);
43
+ * if (result.success) {
44
+ * console.log('Fragment is valid:', result.fragment);
45
+ * }
46
+ * ```
47
+ */
48
+ import { createFragment, verifyFragment, setTokenizer, } from './fragment.js';
49
+ import { compose } from './compose.js';
50
+ import { resolve } from './resolve.js';
51
+ import { MemoryStore } from './store.js';
52
+ /**
53
+ * Create the Caret runtime.
54
+ */
55
+ function createRuntime(state) {
56
+ const { config, store } = state;
57
+ return {
58
+ async seal(options) {
59
+ const fragment = await createFragment({
60
+ content: options.content,
61
+ source: options.source,
62
+ attribution: options.attribution,
63
+ trust_level: options.trust_level ?? getDefaultTrust(options.attribution, config),
64
+ constraints: options.constraints,
65
+ parent: options.parent,
66
+ signature: options.signature,
67
+ seal_key: config.seal_key,
68
+ });
69
+ // Store the fragment
70
+ await store.put(fragment);
71
+ return fragment;
72
+ },
73
+ async compose(fragments, options) {
74
+ return compose(fragments, options, config.seal_key);
75
+ },
76
+ async resolve(fragment, context) {
77
+ return resolve(fragment, context);
78
+ },
79
+ async verify(fragment) {
80
+ const result = await verifyFragment(fragment, config.seal_key);
81
+ return result.valid;
82
+ },
83
+ get store() {
84
+ return store;
85
+ },
86
+ };
87
+ }
88
+ /**
89
+ * Get default trust level for attribution.
90
+ */
91
+ function getDefaultTrust(attribution, config) {
92
+ switch (attribution) {
93
+ case 'system':
94
+ return 100;
95
+ case 'operator':
96
+ return 90;
97
+ case 'user':
98
+ return 70;
99
+ case 'derived':
100
+ return 60;
101
+ case 'agent':
102
+ return 50;
103
+ case 'external':
104
+ return 30;
105
+ default:
106
+ return config.default_trust;
107
+ }
108
+ }
109
+ /**
110
+ * Create a Caret runtime instance.
111
+ *
112
+ * @param options - Configuration options
113
+ * @returns The Caret runtime
114
+ *
115
+ * @example
116
+ * ```ts
117
+ * const caret = createCaret({
118
+ * seal_key: process.env.CARET_SEAL_KEY!,
119
+ * default_trust: 50,
120
+ * });
121
+ * ```
122
+ */
123
+ export function createCaret(options) {
124
+ if (!options.seal_key) {
125
+ throw new Error('seal_key is required');
126
+ }
127
+ // Enforce minimum key length for security (P5 fix: increased to 32)
128
+ if (options.seal_key.length < 32) {
129
+ throw new Error('seal_key must be at least 32 characters for security');
130
+ }
131
+ // Build config with defaults
132
+ const config = {
133
+ seal_key: options.seal_key,
134
+ default_trust: (options.default_trust ?? 50),
135
+ require_signatures: options.require_signatures ?? false,
136
+ tokenizer: options.tokenizer ?? 'cl100k',
137
+ custom_tokenizer: options.custom_tokenizer,
138
+ };
139
+ // Set up tokenizer if custom provided
140
+ if (options.custom_tokenizer) {
141
+ setTokenizer((content) => {
142
+ const text = typeof content === 'string' ? content : JSON.stringify(content);
143
+ return options.custom_tokenizer(text);
144
+ });
145
+ }
146
+ // Create or use provided store
147
+ const store = options.store ?? new MemoryStore(config.seal_key);
148
+ return createRuntime({ config, store });
149
+ }
150
+ // Re-export constraint builders
151
+ export { maxAge, notBefore, notAfter, allowDomains, requireTrust, requireSignature, requireInfluence, requireMCCA, } from './resolve.js';
152
+ // Re-export store utilities
153
+ export { MemoryStore, CachedStore, CompositeStore, ExtendedMemoryStore, createStore, } from './store.js';
154
+ // Re-export fragment utilities
155
+ export { verifyFragment, serializeFragment, deserializeFragment, getFragmentAge, getFragmentTrust, isFragmentExpired, countTokens, setTokenizer, } from './fragment.js';
156
+ // Re-export composition utilities
157
+ export { verifyManifold, getManifoldStats, fitsInBudget, parseTokenCeiling, } from './compose.js';
158
+ // Re-export provenance utilities
159
+ export { createProvenanceRecord, createProvenanceChain, extendProvenanceChain, flattenChain, verifyChain, mergeChains, getMinTrust, getMaxTrust, } from './provenance.js';
160
+ // Re-export crypto utilities
161
+ export { sha256, sha256Object, sha256Binary, rollingHash, verifyHash, isValidHash, deterministicStringify, } from './crypto/hash.js';
162
+ export { hmacSeal, hmacVerify, isValidSeal, } from './crypto/hmac.js';
163
+ // Re-export type guards
164
+ export { isHash, isFragmentId, isTimestamp, isTrustLevel, isTokenCount, isContextFragment, isValidInfluenceBudget, isMdashActionCode, sumInfluence, } from './types.js';
165
+ // Re-export research pattern utilities
166
+ export {
167
+ // Atomic encoding
168
+ resolveCoreferences, createDefaultContext, hasUnresolvedCoreferences, extractEntityIds, canonicalEncode, computeCommitmentHash, isValidSubject, isValidTimestamp, } from './utils/atomic.js';
169
+ export {
170
+ // Utility learning
171
+ updateUtilityScore, updateOutcomeUtility, createInitialUtility, createUtilityFromHistory, predictSuccess, expectedUtility, compareUtility, selectBestOutcome, } from './utils/utility.js';
172
+ export {
173
+ // Credit assignment
174
+ assignCredit, validateCreditAssignment, attributeLiability, validateLiabilityShares, createDefaultInfluenceBudget, isMCCACompliant, normalizeInfluenceBudget, addInfluenceBudgets, computeTraceInfluence, } from './utils/credit.js';
175
+ // Version export
176
+ export const VERSION = '3.1.0';
177
+ export const FORMERLY = 'Caret v0.2.0';
178
+ /** Alias for createCaret - use this for new code */
179
+ export const createContext = createCaret;
180
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Caret — Provenance Chain Implementation
3
+ * @module @longarcstudios/caret/provenance
4
+ *
5
+ * Immutable provenance tracking for context fragments.
6
+ * Every fragment knows exactly where it came from.
7
+ */
8
+ import type { ProvenanceRecord, ProvenanceChain, SourceURI, Attribution, TrustLevel, Timestamp, Hash } from './types.js';
9
+ /**
10
+ * Create a new ProvenanceRecord.
11
+ */
12
+ export declare function createProvenanceRecord(options: {
13
+ source: SourceURI | string;
14
+ attribution: Attribution;
15
+ trust_level?: number;
16
+ parent_hash?: Hash | null;
17
+ signature?: string;
18
+ }): Promise<ProvenanceRecord>;
19
+ /**
20
+ * Create a new ProvenanceChain with a single record.
21
+ */
22
+ export declare function createProvenanceChain(record: ProvenanceRecord): Promise<ProvenanceChain>;
23
+ /**
24
+ * Extend an existing ProvenanceChain with a new record.
25
+ * Returns a new chain (immutable).
26
+ */
27
+ export declare function extendProvenanceChain(chain: ProvenanceChain, record: ProvenanceRecord): Promise<ProvenanceChain>;
28
+ /**
29
+ * Get all records in the chain as an array (head to tail).
30
+ */
31
+ export declare function flattenChain(chain: ProvenanceChain): ProvenanceRecord[];
32
+ /**
33
+ * Find a record in the chain by source URI.
34
+ */
35
+ export declare function findBySource(chain: ProvenanceChain, source: SourceURI | string): ProvenanceRecord | null;
36
+ /**
37
+ * Get the minimum trust level in the chain.
38
+ */
39
+ export declare function getMinTrust(chain: ProvenanceChain): TrustLevel;
40
+ /**
41
+ * Get the maximum trust level in the chain.
42
+ */
43
+ export declare function getMaxTrust(chain: ProvenanceChain): TrustLevel;
44
+ /**
45
+ * Check if chain contains a specific attribution type.
46
+ */
47
+ export declare function hasAttribution(chain: ProvenanceChain, attribution: Attribution): boolean;
48
+ /**
49
+ * Get all unique attributions in the chain.
50
+ */
51
+ export declare function getAttributions(chain: ProvenanceChain): Attribution[];
52
+ /**
53
+ * Verify the integrity of a provenance chain.
54
+ * Checks that all hash links are valid.
55
+ */
56
+ export declare function verifyChain(chain: ProvenanceChain): Promise<{
57
+ valid: boolean;
58
+ errors: string[];
59
+ }>;
60
+ /**
61
+ * Merge multiple provenance chains into one.
62
+ * Used when composing multiple fragments into a manifold.
63
+ *
64
+ * Strategy: Creates a new chain with all records, ordered by timestamp.
65
+ */
66
+ export declare function mergeChains(chains: readonly ProvenanceChain[]): Promise<ProvenanceChain>;
67
+ /**
68
+ * Parse a source string into a SourceURI.
69
+ * Validates the format if strict mode is enabled.
70
+ */
71
+ export declare function parseSourceURI(source: string, strict?: boolean): SourceURI;
72
+ /**
73
+ * Create a timestamp for the current moment.
74
+ */
75
+ export declare function now(): Timestamp;
76
+ /**
77
+ * Check if a timestamp is expired given a max age.
78
+ */
79
+ export declare function isExpired(timestamp: Timestamp, maxAgeMs: number): boolean;
80
+ //# sourceMappingURL=provenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../src/context/provenance.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,SAAS,EACT,WAAW,EACX,UAAU,EACV,SAAS,EACT,IAAI,EACL,MAAM,YAAY,CAAC;AAOpB;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAW5B;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,eAAe,CAAC,CAS1B;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,eAAe,CAAC,CAiB1B;AAMD;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,EAAE,CAUvE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,SAAS,GAAG,MAAM,GACzB,gBAAgB,GAAG,IAAI,CAWzB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CAY9D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CAY9D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,EACtB,WAAW,EAAE,WAAW,GACvB,OAAO,CAWT;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,WAAW,EAAE,CAUrE;AAMD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC;IACjE,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC,CAmCD;AAmBD;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,SAAS,eAAe,EAAE,GACjC,OAAO,CAAC,eAAe,CAAC,CA+C1B;AAoCD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,SAAS,CAUxE;AAED;;GAEG;AACH,wBAAgB,GAAG,IAAI,SAAS,CAE/B;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIzE"}
@@ -0,0 +1,294 @@
1
+ /**
2
+ * Caret — Provenance Chain Implementation
3
+ * @module @longarcstudios/caret/provenance
4
+ *
5
+ * Immutable provenance tracking for context fragments.
6
+ * Every fragment knows exactly where it came from.
7
+ */
8
+ import { sha256Object, rollingHash } from './crypto/hash.js';
9
+ // ============================================================================
10
+ // FACTORY FUNCTIONS
11
+ // ============================================================================
12
+ /**
13
+ * Create a new ProvenanceRecord.
14
+ */
15
+ export async function createProvenanceRecord(options) {
16
+ const trust = validateTrustLevel(options.trust_level ?? getDefaultTrust(options.attribution));
17
+ return {
18
+ source: options.source,
19
+ attribution: options.attribution,
20
+ trust_level: trust,
21
+ timestamp: new Date().toISOString(),
22
+ parent_hash: options.parent_hash ?? null,
23
+ signature: options.signature,
24
+ };
25
+ }
26
+ /**
27
+ * Create a new ProvenanceChain with a single record.
28
+ */
29
+ export async function createProvenanceChain(record) {
30
+ const chain_hash = await sha256Object(record);
31
+ return {
32
+ head: record,
33
+ tail: null,
34
+ length: 1,
35
+ chain_hash,
36
+ };
37
+ }
38
+ /**
39
+ * Extend an existing ProvenanceChain with a new record.
40
+ * Returns a new chain (immutable).
41
+ */
42
+ export async function extendProvenanceChain(chain, record) {
43
+ // Update record's parent_hash to point to current chain
44
+ const linkedRecord = {
45
+ ...record,
46
+ parent_hash: chain.chain_hash,
47
+ };
48
+ // Compute new chain hash
49
+ const recordHash = await sha256Object(linkedRecord);
50
+ const chain_hash = await rollingHash([chain.chain_hash, recordHash]);
51
+ return {
52
+ head: linkedRecord,
53
+ tail: chain,
54
+ length: chain.length + 1,
55
+ chain_hash,
56
+ };
57
+ }
58
+ // ============================================================================
59
+ // CHAIN OPERATIONS
60
+ // ============================================================================
61
+ /**
62
+ * Get all records in the chain as an array (head to tail).
63
+ */
64
+ export function flattenChain(chain) {
65
+ const records = [];
66
+ let current = chain;
67
+ while (current !== null) {
68
+ records.push(current.head);
69
+ current = current.tail;
70
+ }
71
+ return records;
72
+ }
73
+ /**
74
+ * Find a record in the chain by source URI.
75
+ */
76
+ export function findBySource(chain, source) {
77
+ let current = chain;
78
+ while (current !== null) {
79
+ if (current.head.source === source) {
80
+ return current.head;
81
+ }
82
+ current = current.tail;
83
+ }
84
+ return null;
85
+ }
86
+ /**
87
+ * Get the minimum trust level in the chain.
88
+ */
89
+ export function getMinTrust(chain) {
90
+ let min = chain.head.trust_level;
91
+ let current = chain.tail;
92
+ while (current !== null) {
93
+ if (current.head.trust_level < min) {
94
+ min = current.head.trust_level;
95
+ }
96
+ current = current.tail;
97
+ }
98
+ return min;
99
+ }
100
+ /**
101
+ * Get the maximum trust level in the chain.
102
+ */
103
+ export function getMaxTrust(chain) {
104
+ let max = chain.head.trust_level;
105
+ let current = chain.tail;
106
+ while (current !== null) {
107
+ if (current.head.trust_level > max) {
108
+ max = current.head.trust_level;
109
+ }
110
+ current = current.tail;
111
+ }
112
+ return max;
113
+ }
114
+ /**
115
+ * Check if chain contains a specific attribution type.
116
+ */
117
+ export function hasAttribution(chain, attribution) {
118
+ let current = chain;
119
+ while (current !== null) {
120
+ if (current.head.attribution === attribution) {
121
+ return true;
122
+ }
123
+ current = current.tail;
124
+ }
125
+ return false;
126
+ }
127
+ /**
128
+ * Get all unique attributions in the chain.
129
+ */
130
+ export function getAttributions(chain) {
131
+ const attributions = new Set();
132
+ let current = chain;
133
+ while (current !== null) {
134
+ attributions.add(current.head.attribution);
135
+ current = current.tail;
136
+ }
137
+ return Array.from(attributions);
138
+ }
139
+ // ============================================================================
140
+ // CHAIN VERIFICATION
141
+ // ============================================================================
142
+ /**
143
+ * Verify the integrity of a provenance chain.
144
+ * Checks that all hash links are valid.
145
+ */
146
+ export async function verifyChain(chain) {
147
+ const errors = [];
148
+ // Single-record chain
149
+ if (chain.length === 1) {
150
+ const expectedHash = await sha256Object(chain.head);
151
+ if (expectedHash !== chain.chain_hash) {
152
+ errors.push('Chain hash mismatch for single-record chain');
153
+ }
154
+ return { valid: errors.length === 0, errors };
155
+ }
156
+ // Multi-record chain
157
+ let current = chain;
158
+ const recordHashes = [];
159
+ while (current !== null) {
160
+ const recordHash = await sha256Object(current.head);
161
+ recordHashes.unshift(recordHash); // Add to front (we're traversing head to tail)
162
+ // Check parent_hash linkage
163
+ if (current.tail !== null && current.head.parent_hash !== current.tail.chain_hash) {
164
+ errors.push(`Parent hash mismatch at depth ${recordHashes.length}`);
165
+ }
166
+ current = current.tail;
167
+ }
168
+ // Verify rolling hash
169
+ const expectedChainHash = await computeChainHash(chain);
170
+ if (expectedChainHash !== chain.chain_hash) {
171
+ errors.push('Rolling chain hash verification failed');
172
+ }
173
+ return { valid: errors.length === 0, errors };
174
+ }
175
+ /**
176
+ * Recompute the chain hash from records.
177
+ */
178
+ async function computeChainHash(chain) {
179
+ if (chain.tail === null) {
180
+ return sha256Object(chain.head);
181
+ }
182
+ const tailHash = await computeChainHash(chain.tail);
183
+ const headHash = await sha256Object(chain.head);
184
+ return rollingHash([tailHash, headHash]);
185
+ }
186
+ // ============================================================================
187
+ // CHAIN MERGING
188
+ // ============================================================================
189
+ /**
190
+ * Merge multiple provenance chains into one.
191
+ * Used when composing multiple fragments into a manifold.
192
+ *
193
+ * Strategy: Creates a new chain with all records, ordered by timestamp.
194
+ */
195
+ export async function mergeChains(chains) {
196
+ if (chains.length === 0) {
197
+ throw new Error('Cannot merge empty chain array');
198
+ }
199
+ if (chains.length === 1) {
200
+ const first = chains[0];
201
+ if (!first)
202
+ throw new Error('Invalid chain');
203
+ return first;
204
+ }
205
+ // Collect all records
206
+ const allRecords = [];
207
+ for (const chain of chains) {
208
+ allRecords.push(...flattenChain(chain));
209
+ }
210
+ // Sort by timestamp (oldest first)
211
+ allRecords.sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());
212
+ // Deduplicate by source + timestamp
213
+ const seen = new Set();
214
+ const uniqueRecords = allRecords.filter(record => {
215
+ const key = `${record.source}:${record.timestamp}`;
216
+ if (seen.has(key))
217
+ return false;
218
+ seen.add(key);
219
+ return true;
220
+ });
221
+ // Build new chain
222
+ const firstRecord = uniqueRecords[0];
223
+ if (!firstRecord) {
224
+ throw new Error('No records to merge');
225
+ }
226
+ let result = await createProvenanceChain(firstRecord);
227
+ for (let i = 1; i < uniqueRecords.length; i++) {
228
+ const record = uniqueRecords[i];
229
+ if (record) {
230
+ result = await extendProvenanceChain(result, record);
231
+ }
232
+ }
233
+ return result;
234
+ }
235
+ // ============================================================================
236
+ // UTILITY FUNCTIONS
237
+ // ============================================================================
238
+ /**
239
+ * Get default trust level for an attribution type.
240
+ */
241
+ function getDefaultTrust(attribution) {
242
+ switch (attribution) {
243
+ case 'system':
244
+ return 100;
245
+ case 'operator':
246
+ return 90;
247
+ case 'user':
248
+ return 70;
249
+ case 'derived':
250
+ return 60;
251
+ case 'agent':
252
+ return 50;
253
+ case 'external':
254
+ return 30;
255
+ default:
256
+ return 50;
257
+ }
258
+ }
259
+ /**
260
+ * Validate and clamp trust level to 0-100.
261
+ */
262
+ function validateTrustLevel(value) {
263
+ const clamped = Math.max(0, Math.min(100, Math.round(value)));
264
+ return clamped;
265
+ }
266
+ /**
267
+ * Parse a source string into a SourceURI.
268
+ * Validates the format if strict mode is enabled.
269
+ */
270
+ export function parseSourceURI(source, strict = false) {
271
+ if (strict) {
272
+ // Validate URI format: scheme://path
273
+ const uriPattern = /^[a-z][a-z0-9+.-]*:\/\/.+$/i;
274
+ if (!uriPattern.test(source)) {
275
+ throw new Error('Invalid source URI format');
276
+ }
277
+ }
278
+ return source;
279
+ }
280
+ /**
281
+ * Create a timestamp for the current moment.
282
+ */
283
+ export function now() {
284
+ return new Date().toISOString();
285
+ }
286
+ /**
287
+ * Check if a timestamp is expired given a max age.
288
+ */
289
+ export function isExpired(timestamp, maxAgeMs) {
290
+ const then = new Date(timestamp).getTime();
291
+ const now = Date.now();
292
+ return (now - then) > maxAgeMs;
293
+ }
294
+ //# sourceMappingURL=provenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../src/context/provenance.ts"],"names":[],"mappings":"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"}