@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,99 @@
1
+ /**
2
+ * Caret — Context Fragment Implementation
3
+ * @module @longarcstudios/caret/fragment
4
+ *
5
+ * The atomic unit of structured context.
6
+ * Immutable, sealed, attributable.
7
+ */
8
+ import type { ContextFragment, SemanticUnit, SemanticType, TokenCount, Constraint, Attribution, SourceURI, TrustLevel } from './types.js';
9
+ /** Tokenizer function type */
10
+ type Tokenizer = (content: unknown) => TokenCount;
11
+ /**
12
+ * Set a custom tokenizer function.
13
+ */
14
+ export declare function setTokenizer(tokenizer: Tokenizer): void;
15
+ /**
16
+ * Count tokens in content using current tokenizer.
17
+ */
18
+ export declare function countTokens(content: unknown): TokenCount;
19
+ /**
20
+ * Create a SemanticUnit from content.
21
+ */
22
+ export declare function createSemanticUnit<T>(data: T, options?: {
23
+ type?: SemanticType;
24
+ compression_ratio?: number;
25
+ }): SemanticUnit<T>;
26
+ /** Options for creating a fragment */
27
+ export interface CreateFragmentOptions<T = unknown> {
28
+ /** The content to store */
29
+ content: T;
30
+ /** Source URI for provenance */
31
+ source: SourceURI | string;
32
+ /** Attribution type */
33
+ attribution: Attribution;
34
+ /** Trust level (0-100, optional) */
35
+ trust_level?: number;
36
+ /** Constraints to apply */
37
+ constraints?: Constraint[];
38
+ /** Parent fragment for provenance chain */
39
+ parent?: ContextFragment;
40
+ /** Optional signature */
41
+ signature?: string;
42
+ /** Semantic type override */
43
+ semantic_type?: SemanticType;
44
+ /** Secret key for sealing */
45
+ seal_key: string;
46
+ }
47
+ /**
48
+ * Create a new ContextFragment.
49
+ * This is the primary factory function for fragments.
50
+ */
51
+ export declare function createFragment<T = unknown>(options: CreateFragmentOptions<T>): Promise<ContextFragment<T>>;
52
+ /**
53
+ * Verify a fragment's integrity.
54
+ * Checks both the content hash and the HMAC seal.
55
+ */
56
+ export declare function verifyFragment(fragment: ContextFragment, seal_key: string): Promise<{
57
+ valid: boolean;
58
+ errors: string[];
59
+ }>;
60
+ /**
61
+ * Derive a new fragment from an existing one.
62
+ * Creates a new fragment with the parent's provenance extended.
63
+ */
64
+ export declare function deriveFragment<T, U = T>(parent: ContextFragment<T>, options: {
65
+ content: U;
66
+ source: SourceURI | string;
67
+ attribution?: Attribution;
68
+ trust_level?: number;
69
+ constraints?: Constraint[];
70
+ seal_key: string;
71
+ }): Promise<ContextFragment<U>>;
72
+ /**
73
+ * Clone a fragment with new constraints.
74
+ * Creates a new fragment with the same content but different constraints.
75
+ */
76
+ export declare function withConstraints<T>(fragment: ContextFragment<T>, constraints: Constraint[], seal_key: string): Promise<ContextFragment<T>>;
77
+ /**
78
+ * Get the age of a fragment in milliseconds.
79
+ */
80
+ export declare function getFragmentAge(fragment: ContextFragment): number;
81
+ /**
82
+ * Check if a fragment is expired based on time constraints.
83
+ */
84
+ export declare function isFragmentExpired(fragment: ContextFragment): boolean;
85
+ /**
86
+ * Get the trust level of a fragment (minimum in chain).
87
+ */
88
+ export declare function getFragmentTrust(fragment: ContextFragment): TrustLevel;
89
+ /**
90
+ * Serialize a fragment to JSON.
91
+ */
92
+ export declare function serializeFragment(fragment: ContextFragment): string;
93
+ /**
94
+ * Deserialize a fragment from JSON.
95
+ * Note: Does NOT verify integrity — call verifyFragment separately.
96
+ */
97
+ export declare function deserializeFragment<T = unknown>(json: string): ContextFragment<T>;
98
+ export {};
99
+ //# sourceMappingURL=fragment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fragment.d.ts","sourceRoot":"","sources":["../../src/context/fragment.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,eAAe,EAGf,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,UAAU,EAEV,WAAW,EACX,SAAS,EACT,UAAU,EACX,MAAM,YAAY,CAAC;AAsDpB,8BAA8B;AAC9B,KAAK,SAAS,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,UAAU,CAAC;AAUlD;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAEvD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAExD;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,IAAI,EAAE,CAAC,EACP,OAAO,GAAE;IACP,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACvB,GACL,YAAY,CAAC,CAAC,CAAC,CAUjB;AAyBD,sCAAsC;AACtC,MAAM,WAAW,qBAAqB,CAAC,CAAC,GAAG,OAAO;IAChD,2BAA2B;IAC3B,OAAO,EAAE,CAAC,CAAC;IAEX,gCAAgC;IAChC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;IAE3B,uBAAuB;IACvB,WAAW,EAAE,WAAW,CAAC;IAEzB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,2BAA2B;IAC3B,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAE3B,2CAA2C;IAC3C,MAAM,CAAC,EAAE,eAAe,CAAC;IAEzB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,6BAA6B;IAC7B,aAAa,CAAC,EAAE,YAAY,CAAC;IAE7B,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,CAAC,GAAG,OAAO,EAC9C,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAChC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAsD7B;AAMD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IACT,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC,CAyCD;AAMD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAC3C,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,EAC1B,OAAO,EAAE;IACP,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB,GACA,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAU7B;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACrC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,EAC5B,WAAW,EAAE,UAAU,EAAE,EACzB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAQ7B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAGhE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAsBpE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,UAAU,CAYtE;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAEnE;AA2BD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAiBjF"}
@@ -0,0 +1,316 @@
1
+ /**
2
+ * Caret — Context Fragment Implementation
3
+ * @module @longarcstudios/caret/fragment
4
+ *
5
+ * The atomic unit of structured context.
6
+ * Immutable, sealed, attributable.
7
+ */
8
+ import { sha256Object } from './crypto/hash.js';
9
+ import { sealFragment, verifyFragmentSeal } from './crypto/hmac.js';
10
+ import { createProvenanceRecord, createProvenanceChain, extendProvenanceChain, } from './provenance.js';
11
+ // ============================================================================
12
+ // UUID GENERATION
13
+ // ============================================================================
14
+ /**
15
+ * Generate a UUID v4.
16
+ * Uses crypto.randomUUID if available, falls back to crypto.getRandomValues.
17
+ * SECURITY: Never falls back to Math.random — fails instead.
18
+ */
19
+ function generateUUID() {
20
+ // Preferred: native randomUUID
21
+ if (typeof crypto !== 'undefined' && crypto.randomUUID) {
22
+ return crypto.randomUUID();
23
+ }
24
+ // Fallback: manual UUID from getRandomValues (still cryptographically secure)
25
+ if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
26
+ const bytes = new Uint8Array(16);
27
+ crypto.getRandomValues(bytes);
28
+ // Set version (4) and variant (RFC4122)
29
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
30
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
31
+ const hex = Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('');
32
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
33
+ }
34
+ // SECURITY: Do not fall back to Math.random — fail secure
35
+ throw new Error('Cryptographically secure random number generator not available');
36
+ }
37
+ // ============================================================================
38
+ // TOKEN COUNTING
39
+ // ============================================================================
40
+ /** Default tokenizer: approximate cl100k_base behavior */
41
+ function defaultTokenCount(text) {
42
+ // Rough approximation: ~4 chars per token for English
43
+ // More accurate would require actual tokenizer
44
+ const charCount = text.length;
45
+ const estimate = Math.ceil(charCount / 4);
46
+ return estimate;
47
+ }
48
+ /** Current tokenizer (can be replaced) */
49
+ let currentTokenizer = (content) => {
50
+ const text = typeof content === 'string'
51
+ ? content
52
+ : JSON.stringify(content);
53
+ return defaultTokenCount(text);
54
+ };
55
+ /**
56
+ * Set a custom tokenizer function.
57
+ */
58
+ export function setTokenizer(tokenizer) {
59
+ currentTokenizer = tokenizer;
60
+ }
61
+ /**
62
+ * Count tokens in content using current tokenizer.
63
+ */
64
+ export function countTokens(content) {
65
+ return currentTokenizer(content);
66
+ }
67
+ // ============================================================================
68
+ // SEMANTIC UNIT
69
+ // ============================================================================
70
+ /**
71
+ * Create a SemanticUnit from content.
72
+ */
73
+ export function createSemanticUnit(data, options = {}) {
74
+ const type = options.type ?? inferSemanticType(data);
75
+ const token_count = countTokens(data);
76
+ return {
77
+ type,
78
+ data,
79
+ token_count,
80
+ compression_ratio: options.compression_ratio,
81
+ };
82
+ }
83
+ /**
84
+ * Infer semantic type from data.
85
+ */
86
+ function inferSemanticType(data) {
87
+ if (typeof data === 'string') {
88
+ return 'text';
89
+ }
90
+ if (typeof data === 'object' && data !== null) {
91
+ // Check for special object patterns
92
+ if ('$ref' in data || 'uri' in data || 'url' in data) {
93
+ return 'reference';
94
+ }
95
+ return 'structured';
96
+ }
97
+ return 'text';
98
+ }
99
+ /**
100
+ * Create a new ContextFragment.
101
+ * This is the primary factory function for fragments.
102
+ */
103
+ export async function createFragment(options) {
104
+ const id = generateUUID();
105
+ const sealed_at = new Date().toISOString();
106
+ // Create semantic unit
107
+ const content = createSemanticUnit(options.content, {
108
+ type: options.semantic_type,
109
+ });
110
+ // Create provenance
111
+ const record = await createProvenanceRecord({
112
+ source: options.source,
113
+ attribution: options.attribution,
114
+ trust_level: options.trust_level,
115
+ parent_hash: options.parent?.hash ?? null,
116
+ signature: options.signature,
117
+ });
118
+ let provenance;
119
+ if (options.parent) {
120
+ provenance = await extendProvenanceChain(options.parent.provenance, record);
121
+ }
122
+ else {
123
+ provenance = await createProvenanceChain(record);
124
+ }
125
+ // Compute content hash
126
+ const hash = await sha256Object({
127
+ content,
128
+ provenance,
129
+ sealed_at,
130
+ });
131
+ // Create seal
132
+ const fragmentData = {
133
+ id,
134
+ hash,
135
+ content,
136
+ provenance,
137
+ sealed_at,
138
+ constraints: options.constraints ?? [],
139
+ };
140
+ const seal = await sealFragment(fragmentData, options.seal_key);
141
+ return {
142
+ id,
143
+ hash,
144
+ content,
145
+ provenance,
146
+ sealed_at,
147
+ seal,
148
+ constraints: options.constraints ?? [],
149
+ version: 'v3.1',
150
+ };
151
+ }
152
+ // ============================================================================
153
+ // FRAGMENT VERIFICATION
154
+ // ============================================================================
155
+ /**
156
+ * Verify a fragment's integrity.
157
+ * Checks both the content hash and the HMAC seal.
158
+ */
159
+ export async function verifyFragment(fragment, seal_key) {
160
+ const errors = [];
161
+ // Verify content hash
162
+ const expectedHash = await sha256Object({
163
+ content: fragment.content,
164
+ provenance: fragment.provenance,
165
+ sealed_at: fragment.sealed_at,
166
+ });
167
+ if (expectedHash !== fragment.hash) {
168
+ errors.push('Content hash mismatch');
169
+ }
170
+ // Verify HMAC seal
171
+ const sealValid = await verifyFragmentSeal({
172
+ id: fragment.id,
173
+ hash: fragment.hash,
174
+ content: fragment.content,
175
+ provenance: fragment.provenance,
176
+ sealed_at: fragment.sealed_at,
177
+ constraints: fragment.constraints,
178
+ seal: fragment.seal,
179
+ }, seal_key);
180
+ if (!sealValid) {
181
+ errors.push('HMAC seal verification failed');
182
+ }
183
+ // Verify version (accept both v3.1 and legacy 1.0)
184
+ if (fragment.version !== 'v3.1' && fragment.version !== '1.0') {
185
+ errors.push(`Unknown fragment version: ${fragment.version}`);
186
+ }
187
+ return {
188
+ valid: errors.length === 0,
189
+ errors,
190
+ };
191
+ }
192
+ // ============================================================================
193
+ // FRAGMENT OPERATIONS
194
+ // ============================================================================
195
+ /**
196
+ * Derive a new fragment from an existing one.
197
+ * Creates a new fragment with the parent's provenance extended.
198
+ */
199
+ export async function deriveFragment(parent, options) {
200
+ return createFragment({
201
+ content: options.content,
202
+ source: options.source,
203
+ attribution: options.attribution ?? 'derived',
204
+ trust_level: options.trust_level,
205
+ constraints: [...(options.constraints ?? parent.constraints)],
206
+ parent,
207
+ seal_key: options.seal_key,
208
+ });
209
+ }
210
+ /**
211
+ * Clone a fragment with new constraints.
212
+ * Creates a new fragment with the same content but different constraints.
213
+ */
214
+ export async function withConstraints(fragment, constraints, seal_key) {
215
+ return deriveFragment(fragment, {
216
+ content: fragment.content.data,
217
+ source: fragment.provenance.head.source,
218
+ attribution: 'derived',
219
+ constraints,
220
+ seal_key,
221
+ });
222
+ }
223
+ /**
224
+ * Get the age of a fragment in milliseconds.
225
+ */
226
+ export function getFragmentAge(fragment) {
227
+ const sealed = new Date(fragment.sealed_at).getTime();
228
+ return Date.now() - sealed;
229
+ }
230
+ /**
231
+ * Check if a fragment is expired based on time constraints.
232
+ */
233
+ export function isFragmentExpired(fragment) {
234
+ for (const constraint of fragment.constraints) {
235
+ if (constraint.kind === 'time') {
236
+ // Check max_age
237
+ if (constraint.max_age_ms !== undefined) {
238
+ const age = getFragmentAge(fragment);
239
+ if (age > constraint.max_age_ms) {
240
+ return true;
241
+ }
242
+ }
243
+ // Check not_after
244
+ if (constraint.not_after !== undefined) {
245
+ const deadline = new Date(constraint.not_after).getTime();
246
+ if (Date.now() > deadline) {
247
+ return true;
248
+ }
249
+ }
250
+ }
251
+ }
252
+ return false;
253
+ }
254
+ /**
255
+ * Get the trust level of a fragment (minimum in chain).
256
+ */
257
+ export function getFragmentTrust(fragment) {
258
+ let min = fragment.provenance.head.trust_level;
259
+ let current = fragment.provenance.tail;
260
+ while (current !== null) {
261
+ if (current.head.trust_level < min) {
262
+ min = current.head.trust_level;
263
+ }
264
+ current = current.tail;
265
+ }
266
+ return min;
267
+ }
268
+ // ============================================================================
269
+ // SERIALIZATION
270
+ // ============================================================================
271
+ /**
272
+ * Serialize a fragment to JSON.
273
+ */
274
+ export function serializeFragment(fragment) {
275
+ return JSON.stringify(fragment);
276
+ }
277
+ /**
278
+ * Sanitize an object to prevent prototype pollution.
279
+ * Removes __proto__, constructor, and prototype properties recursively.
280
+ */
281
+ function sanitizeObject(obj) {
282
+ if (obj === null || typeof obj !== 'object') {
283
+ return obj;
284
+ }
285
+ if (Array.isArray(obj)) {
286
+ return obj.map(sanitizeObject);
287
+ }
288
+ const sanitized = Object.create(null);
289
+ for (const key of Object.keys(obj)) {
290
+ // Block dangerous properties
291
+ if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
292
+ continue;
293
+ }
294
+ sanitized[key] = sanitizeObject(obj[key]);
295
+ }
296
+ return sanitized;
297
+ }
298
+ /**
299
+ * Deserialize a fragment from JSON.
300
+ * Note: Does NOT verify integrity — call verifyFragment separately.
301
+ */
302
+ export function deserializeFragment(json) {
303
+ const raw = JSON.parse(json);
304
+ // Sanitize to prevent prototype pollution
305
+ const parsed = sanitizeObject(raw);
306
+ // Type validation
307
+ if (!parsed.id || !parsed.hash || !parsed.content || !parsed.provenance) {
308
+ throw new Error('Invalid fragment structure');
309
+ }
310
+ if (parsed.version !== 'v3.1' && parsed.version !== '1.0') {
311
+ // SECURITY: Do not leak version value in error message
312
+ throw new Error('Unsupported fragment version');
313
+ }
314
+ return parsed;
315
+ }
316
+ //# sourceMappingURL=fragment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fragment.js","sourceRoot":"","sources":["../../src/context/fragment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
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 type { CaretRuntime, FragmentStore } from './types.js';
49
+ /**
50
+ * Options for creating a Caret instance.
51
+ */
52
+ export interface CreateCaretOptions {
53
+ /** Secret key for HMAC sealing (required) */
54
+ seal_key: string;
55
+ /** Default trust level for unspecified sources */
56
+ default_trust?: number;
57
+ /** Whether to enforce signature requirements */
58
+ require_signatures?: boolean;
59
+ /** Token counting strategy */
60
+ tokenizer?: 'cl100k' | 'p50k' | 'custom';
61
+ /** Custom tokenizer function */
62
+ custom_tokenizer?: (text: string) => number;
63
+ /** Custom store implementation */
64
+ store?: FragmentStore;
65
+ }
66
+ /**
67
+ * Create a Caret runtime instance.
68
+ *
69
+ * @param options - Configuration options
70
+ * @returns The Caret runtime
71
+ *
72
+ * @example
73
+ * ```ts
74
+ * const caret = createCaret({
75
+ * seal_key: process.env.CARET_SEAL_KEY!,
76
+ * default_trust: 50,
77
+ * });
78
+ * ```
79
+ */
80
+ export declare function createCaret(options: CreateCaretOptions): CaretRuntime;
81
+ export type { ContextFragment, Manifold, FragmentId, Hash, Seal, Timestamp, SourceURI, TokenCount, TrustLevel, Attribution, SemanticUnit, SemanticType, ProvenanceRecord, ProvenanceChain, Constraint, TimeConstraint, ScopeConstraint, TrustConstraint, SignatureConstraint, InfluenceConstraint, MdashActionCode, InfluenceBudget, Outcome, ExecutionStep, ExecutionTrace, UtilityScore, UtilityFeedback, LiabilityShare, StepCredit, CreditAssignment, CoreferenceContext, ComposeOptions, CompositionStrategy, ResolutionResult, ConstraintViolation, CaretRuntime, CaretConfig, SealOptions, FragmentStore, } from './types.js';
82
+ export { maxAge, notBefore, notAfter, allowDomains, requireTrust, requireSignature, requireInfluence, requireMCCA, } from './resolve.js';
83
+ export type { ResolutionContext } from './resolve.js';
84
+ export { MemoryStore, CachedStore, CompositeStore, ExtendedMemoryStore, createStore, } from './store.js';
85
+ export type { EmbeddingFunction } from './store.js';
86
+ export { verifyFragment, serializeFragment, deserializeFragment, getFragmentAge, getFragmentTrust, isFragmentExpired, countTokens, setTokenizer, } from './fragment.js';
87
+ export { verifyManifold, getManifoldStats, fitsInBudget, parseTokenCeiling, } from './compose.js';
88
+ export { createProvenanceRecord, createProvenanceChain, extendProvenanceChain, flattenChain, verifyChain, mergeChains, getMinTrust, getMaxTrust, } from './provenance.js';
89
+ export { sha256, sha256Object, sha256Binary, rollingHash, verifyHash, isValidHash, deterministicStringify, } from './crypto/hash.js';
90
+ export { hmacSeal, hmacVerify, isValidSeal, } from './crypto/hmac.js';
91
+ export { isHash, isFragmentId, isTimestamp, isTrustLevel, isTokenCount, isContextFragment, isValidInfluenceBudget, isMdashActionCode, sumInfluence, } from './types.js';
92
+ export { resolveCoreferences, createDefaultContext, hasUnresolvedCoreferences, extractEntityIds, canonicalEncode, computeCommitmentHash, isValidSubject, isValidTimestamp, } from './utils/atomic.js';
93
+ export { updateUtilityScore, updateOutcomeUtility, createInitialUtility, createUtilityFromHistory, predictSuccess, expectedUtility, compareUtility, selectBestOutcome, } from './utils/utility.js';
94
+ export { assignCredit, validateCreditAssignment, attributeLiability, validateLiabilityShares, createDefaultInfluenceBudget, isMCCACompliant, normalizeInfluenceBudget, addInfluenceBudgets, computeTraceInfluence, } from './utils/credit.js';
95
+ export declare const VERSION = "3.1.0";
96
+ export declare const FORMERLY = "Caret v0.2.0";
97
+ /** Alias for createCaret - use this for new code */
98
+ export declare const createContext: typeof createCaret;
99
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"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"}