@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,156 @@
1
+ /**
2
+ * Caret — Fragment Store Implementation
3
+ * @module @longarcstudios/caret/store
4
+ *
5
+ * Storage interface for context fragments.
6
+ * Provides in-memory implementation and interface for custom backends.
7
+ */
8
+ import type { ContextFragment, FragmentStore, FragmentId, Hash, SourceURI, Timestamp } from './types.js';
9
+ /**
10
+ * In-memory fragment store.
11
+ * Suitable for development, testing, and single-session use.
12
+ */
13
+ export declare class MemoryStore implements FragmentStore {
14
+ private fragments;
15
+ private hashIndex;
16
+ private sourceIndex;
17
+ private deletedIds;
18
+ private seal_key;
19
+ constructor(seal_key: string);
20
+ put(fragment: ContextFragment): Promise<void>;
21
+ get(id: FragmentId): Promise<ContextFragment | null>;
22
+ getByHash(hash: Hash): Promise<ContextFragment | null>;
23
+ queryBySource(source: SourceURI): Promise<readonly ContextFragment[]>;
24
+ queryByTime(from: Timestamp, to: Timestamp): Promise<readonly ContextFragment[]>;
25
+ delete(id: FragmentId): Promise<boolean>;
26
+ verify(id: FragmentId): Promise<boolean>;
27
+ size(): number;
28
+ all(): Promise<readonly ContextFragment[]>;
29
+ clear(): void;
30
+ compact(): void;
31
+ /**
32
+ * Layer 2: Keyword search (lexical).
33
+ * Searches fragment content for matching keywords.
34
+ *
35
+ * @param keywords - Keywords to match (case-insensitive)
36
+ * @param matchMode - 'any' matches if any keyword found, 'all' requires all keywords
37
+ * @returns Matching fragments
38
+ */
39
+ queryByKeywords(keywords: string[], matchMode?: 'any' | 'all'): Promise<readonly ContextFragment[]>;
40
+ /**
41
+ * Convert fragment to searchable text.
42
+ * Extracts text from content and source.
43
+ */
44
+ private fragmentToSearchableText;
45
+ }
46
+ export interface CacheConfig {
47
+ maxSize: number;
48
+ ttlMs?: number;
49
+ }
50
+ export declare class CachedStore implements FragmentStore {
51
+ private backend;
52
+ private cache;
53
+ private maxSize;
54
+ private ttlMs;
55
+ constructor(backend: FragmentStore, config: CacheConfig);
56
+ put(fragment: ContextFragment): Promise<void>;
57
+ get(id: FragmentId): Promise<ContextFragment | null>;
58
+ getByHash(hash: Hash): Promise<ContextFragment | null>;
59
+ queryBySource(source: SourceURI): Promise<readonly ContextFragment[]>;
60
+ queryByTime(from: Timestamp, to: Timestamp): Promise<readonly ContextFragment[]>;
61
+ delete(id: FragmentId): Promise<boolean>;
62
+ verify(id: FragmentId): Promise<boolean>;
63
+ private cacheFragment;
64
+ clearCache(): void;
65
+ cacheStats(): {
66
+ size: number;
67
+ maxSize: number;
68
+ };
69
+ }
70
+ export declare class CompositeStore implements FragmentStore {
71
+ private primary;
72
+ private replicas;
73
+ constructor(primary: FragmentStore, replicas?: FragmentStore[]);
74
+ put(fragment: ContextFragment): Promise<void>;
75
+ get(id: FragmentId): Promise<ContextFragment | null>;
76
+ getByHash(hash: Hash): Promise<ContextFragment | null>;
77
+ queryBySource(source: SourceURI): Promise<readonly ContextFragment[]>;
78
+ queryByTime(from: Timestamp, to: Timestamp): Promise<readonly ContextFragment[]>;
79
+ delete(id: FragmentId): Promise<boolean>;
80
+ verify(id: FragmentId): Promise<boolean>;
81
+ }
82
+ export type StoreType = 'memory' | 'cached-memory';
83
+ export interface StoreOptions {
84
+ type: StoreType;
85
+ seal_key: string;
86
+ cache?: CacheConfig;
87
+ }
88
+ export declare function createStore(options: StoreOptions): FragmentStore;
89
+ /**
90
+ * Embedding function type.
91
+ * Takes text and returns embedding vector.
92
+ */
93
+ export type EmbeddingFunction = (text: string) => Promise<Float32Array>;
94
+ /**
95
+ * Extended memory store with Three-Layer Index support.
96
+ *
97
+ * Layer 1: Semantic (embedding-based similarity)
98
+ * Layer 2: Lexical (keyword search)
99
+ * Layer 3: Symbolic (structured metadata — inherited from MemoryStore)
100
+ */
101
+ export declare class ExtendedMemoryStore extends MemoryStore {
102
+ private embeddings;
103
+ private embeddingFn;
104
+ /**
105
+ * Set the embedding function for semantic search.
106
+ *
107
+ * @param fn - Function that converts text to embedding vector
108
+ *
109
+ * @example
110
+ * ```ts
111
+ * store.setEmbeddingFunction(async (text) => {
112
+ * // Use OpenAI, local model, etc.
113
+ * return await embed(text);
114
+ * });
115
+ * ```
116
+ */
117
+ setEmbeddingFunction(fn: EmbeddingFunction): void;
118
+ /**
119
+ * Store fragment and compute embedding if embedding function is set.
120
+ */
121
+ put(fragment: ContextFragment): Promise<void>;
122
+ /**
123
+ * Manually set embedding for a fragment.
124
+ * Useful when embeddings are pre-computed.
125
+ */
126
+ setEmbedding(id: FragmentId, embedding: Float32Array): void;
127
+ /**
128
+ * Layer 1: Semantic similarity search.
129
+ * Requires embedding function to be set.
130
+ *
131
+ * @param embedding - Query embedding vector
132
+ * @param threshold - Minimum cosine similarity (0.0-1.0)
133
+ * @param limit - Maximum results
134
+ * @returns Matching fragments with similarity scores
135
+ */
136
+ queryBySimilarity(embedding: Float32Array, threshold?: number, limit?: number): Promise<readonly {
137
+ fragment: ContextFragment;
138
+ similarity: number;
139
+ }[]>;
140
+ /**
141
+ * Convert fragment to text for embedding.
142
+ */
143
+ private fragmentToText;
144
+ /**
145
+ * Clear embeddings cache.
146
+ */
147
+ clearEmbeddings(): void;
148
+ /**
149
+ * Get embedding statistics.
150
+ */
151
+ embeddingStats(): {
152
+ count: number;
153
+ fragmentCount: number;
154
+ };
155
+ }
156
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/context/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,396 @@
1
+ /**
2
+ * Caret — Fragment Store Implementation
3
+ * @module @longarcstudios/caret/store
4
+ *
5
+ * Storage interface for context fragments.
6
+ * Provides in-memory implementation and interface for custom backends.
7
+ */
8
+ import { verifyFragment } from './fragment.js';
9
+ // ============================================================================
10
+ // IN-MEMORY STORE
11
+ // ============================================================================
12
+ /**
13
+ * In-memory fragment store.
14
+ * Suitable for development, testing, and single-session use.
15
+ */
16
+ export class MemoryStore {
17
+ fragments = new Map();
18
+ hashIndex = new Map();
19
+ sourceIndex = new Map();
20
+ deletedIds = new Set();
21
+ seal_key;
22
+ constructor(seal_key) {
23
+ this.seal_key = seal_key;
24
+ }
25
+ async put(fragment) {
26
+ this.fragments.set(fragment.id, fragment);
27
+ this.hashIndex.set(fragment.hash, fragment.id);
28
+ const source = fragment.provenance.head.source;
29
+ if (!this.sourceIndex.has(source)) {
30
+ this.sourceIndex.set(source, new Set());
31
+ }
32
+ this.sourceIndex.get(source).add(fragment.id);
33
+ this.deletedIds.delete(fragment.id);
34
+ }
35
+ async get(id) {
36
+ if (this.deletedIds.has(id))
37
+ return null;
38
+ return this.fragments.get(id) ?? null;
39
+ }
40
+ async getByHash(hash) {
41
+ const id = this.hashIndex.get(hash);
42
+ if (!id || this.deletedIds.has(id))
43
+ return null;
44
+ return this.fragments.get(id) ?? null;
45
+ }
46
+ async queryBySource(source) {
47
+ const ids = this.sourceIndex.get(source);
48
+ if (!ids)
49
+ return [];
50
+ const results = [];
51
+ for (const id of ids) {
52
+ if (!this.deletedIds.has(id)) {
53
+ const fragment = this.fragments.get(id);
54
+ if (fragment)
55
+ results.push(fragment);
56
+ }
57
+ }
58
+ return results;
59
+ }
60
+ async queryByTime(from, to) {
61
+ const fromTime = new Date(from).getTime();
62
+ const toTime = new Date(to).getTime();
63
+ const results = [];
64
+ for (const [id, fragment] of this.fragments) {
65
+ if (this.deletedIds.has(id))
66
+ continue;
67
+ const sealedTime = new Date(fragment.sealed_at).getTime();
68
+ if (sealedTime >= fromTime && sealedTime <= toTime) {
69
+ results.push(fragment);
70
+ }
71
+ }
72
+ return results.sort((a, b) => new Date(a.sealed_at).getTime() - new Date(b.sealed_at).getTime());
73
+ }
74
+ async delete(id) {
75
+ if (!this.fragments.has(id) || this.deletedIds.has(id))
76
+ return false;
77
+ this.deletedIds.add(id);
78
+ return true;
79
+ }
80
+ async verify(id) {
81
+ const fragment = await this.get(id);
82
+ if (!fragment)
83
+ return false;
84
+ const result = await verifyFragment(fragment, this.seal_key);
85
+ return result.valid;
86
+ }
87
+ size() {
88
+ return this.fragments.size - this.deletedIds.size;
89
+ }
90
+ async all() {
91
+ const results = [];
92
+ for (const [id, fragment] of this.fragments) {
93
+ if (!this.deletedIds.has(id))
94
+ results.push(fragment);
95
+ }
96
+ return results;
97
+ }
98
+ clear() {
99
+ this.fragments.clear();
100
+ this.hashIndex.clear();
101
+ this.sourceIndex.clear();
102
+ this.deletedIds.clear();
103
+ }
104
+ compact() {
105
+ for (const id of this.deletedIds) {
106
+ const fragment = this.fragments.get(id);
107
+ if (fragment) {
108
+ this.hashIndex.delete(fragment.hash);
109
+ this.sourceIndex.get(fragment.provenance.head.source)?.delete(id);
110
+ }
111
+ this.fragments.delete(id);
112
+ }
113
+ this.deletedIds.clear();
114
+ }
115
+ /**
116
+ * Layer 2: Keyword search (lexical).
117
+ * Searches fragment content for matching keywords.
118
+ *
119
+ * @param keywords - Keywords to match (case-insensitive)
120
+ * @param matchMode - 'any' matches if any keyword found, 'all' requires all keywords
121
+ * @returns Matching fragments
122
+ */
123
+ async queryByKeywords(keywords, matchMode = 'any') {
124
+ if (keywords.length === 0)
125
+ return [];
126
+ const normalizedKeywords = keywords.map(k => k.toLowerCase());
127
+ const results = [];
128
+ for (const [id, fragment] of this.fragments) {
129
+ if (this.deletedIds.has(id))
130
+ continue;
131
+ // Convert fragment content to searchable text
132
+ const text = this.fragmentToSearchableText(fragment).toLowerCase();
133
+ const matches = normalizedKeywords.map(keyword => text.includes(keyword));
134
+ const isMatch = matchMode === 'any'
135
+ ? matches.some(Boolean)
136
+ : matches.every(Boolean);
137
+ if (isMatch) {
138
+ results.push(fragment);
139
+ }
140
+ }
141
+ return results;
142
+ }
143
+ /**
144
+ * Convert fragment to searchable text.
145
+ * Extracts text from content and source.
146
+ */
147
+ fragmentToSearchableText(fragment) {
148
+ const parts = [];
149
+ // Content
150
+ if (typeof fragment.content.data === 'string') {
151
+ parts.push(fragment.content.data);
152
+ }
153
+ else if (fragment.content.data !== null && typeof fragment.content.data === 'object') {
154
+ parts.push(JSON.stringify(fragment.content.data));
155
+ }
156
+ // Source URI
157
+ parts.push(fragment.provenance.head.source);
158
+ return parts.join(' ');
159
+ }
160
+ }
161
+ export class CachedStore {
162
+ backend;
163
+ cache;
164
+ maxSize;
165
+ ttlMs;
166
+ constructor(backend, config) {
167
+ this.backend = backend;
168
+ this.cache = new Map();
169
+ this.maxSize = config.maxSize;
170
+ this.ttlMs = config.ttlMs ?? 300000;
171
+ }
172
+ async put(fragment) {
173
+ await this.backend.put(fragment);
174
+ this.cacheFragment(fragment);
175
+ }
176
+ async get(id) {
177
+ const cached = this.cache.get(id);
178
+ if (cached && Date.now() - cached.timestamp < this.ttlMs) {
179
+ this.cache.delete(id);
180
+ this.cache.set(id, cached);
181
+ return cached.fragment;
182
+ }
183
+ if (cached)
184
+ this.cache.delete(id);
185
+ const fragment = await this.backend.get(id);
186
+ if (fragment)
187
+ this.cacheFragment(fragment);
188
+ return fragment;
189
+ }
190
+ async getByHash(hash) {
191
+ const fragment = await this.backend.getByHash(hash);
192
+ if (fragment)
193
+ this.cacheFragment(fragment);
194
+ return fragment;
195
+ }
196
+ async queryBySource(source) {
197
+ return this.backend.queryBySource(source);
198
+ }
199
+ async queryByTime(from, to) {
200
+ return this.backend.queryByTime(from, to);
201
+ }
202
+ async delete(id) {
203
+ this.cache.delete(id);
204
+ return this.backend.delete(id);
205
+ }
206
+ async verify(id) {
207
+ return this.backend.verify(id);
208
+ }
209
+ cacheFragment(fragment) {
210
+ if (this.cache.size >= this.maxSize) {
211
+ const oldest = this.cache.keys().next().value;
212
+ if (oldest)
213
+ this.cache.delete(oldest);
214
+ }
215
+ this.cache.set(fragment.id, { fragment, timestamp: Date.now() });
216
+ }
217
+ clearCache() {
218
+ this.cache.clear();
219
+ }
220
+ cacheStats() {
221
+ return { size: this.cache.size, maxSize: this.maxSize };
222
+ }
223
+ }
224
+ // ============================================================================
225
+ // COMPOSITE STORE
226
+ // ============================================================================
227
+ export class CompositeStore {
228
+ primary;
229
+ replicas;
230
+ constructor(primary, replicas = []) {
231
+ this.primary = primary;
232
+ this.replicas = replicas;
233
+ }
234
+ async put(fragment) {
235
+ await Promise.all([
236
+ this.primary.put(fragment),
237
+ ...this.replicas.map(r => r.put(fragment)),
238
+ ]);
239
+ }
240
+ async get(id) {
241
+ return this.primary.get(id);
242
+ }
243
+ async getByHash(hash) {
244
+ return this.primary.getByHash(hash);
245
+ }
246
+ async queryBySource(source) {
247
+ return this.primary.queryBySource(source);
248
+ }
249
+ async queryByTime(from, to) {
250
+ return this.primary.queryByTime(from, to);
251
+ }
252
+ async delete(id) {
253
+ const results = await Promise.all([
254
+ this.primary.delete(id),
255
+ ...this.replicas.map(r => r.delete(id)),
256
+ ]);
257
+ return results[0];
258
+ }
259
+ async verify(id) {
260
+ return this.primary.verify(id);
261
+ }
262
+ }
263
+ export function createStore(options) {
264
+ switch (options.type) {
265
+ case 'memory':
266
+ return new MemoryStore(options.seal_key);
267
+ case 'cached-memory':
268
+ const memory = new MemoryStore(options.seal_key);
269
+ return new CachedStore(memory, options.cache ?? { maxSize: 1000 });
270
+ default:
271
+ throw new Error(`Unknown store type: ${options.type}`);
272
+ }
273
+ }
274
+ /**
275
+ * Extended memory store with Three-Layer Index support.
276
+ *
277
+ * Layer 1: Semantic (embedding-based similarity)
278
+ * Layer 2: Lexical (keyword search)
279
+ * Layer 3: Symbolic (structured metadata — inherited from MemoryStore)
280
+ */
281
+ export class ExtendedMemoryStore extends MemoryStore {
282
+ embeddings = new Map();
283
+ embeddingFn = null;
284
+ /**
285
+ * Set the embedding function for semantic search.
286
+ *
287
+ * @param fn - Function that converts text to embedding vector
288
+ *
289
+ * @example
290
+ * ```ts
291
+ * store.setEmbeddingFunction(async (text) => {
292
+ * // Use OpenAI, local model, etc.
293
+ * return await embed(text);
294
+ * });
295
+ * ```
296
+ */
297
+ setEmbeddingFunction(fn) {
298
+ this.embeddingFn = fn;
299
+ }
300
+ /**
301
+ * Store fragment and compute embedding if embedding function is set.
302
+ */
303
+ async put(fragment) {
304
+ await super.put(fragment);
305
+ // Compute and store embedding if function available
306
+ if (this.embeddingFn) {
307
+ const text = this.fragmentToText(fragment);
308
+ const embedding = await this.embeddingFn(text);
309
+ this.embeddings.set(fragment.id, embedding);
310
+ }
311
+ }
312
+ /**
313
+ * Manually set embedding for a fragment.
314
+ * Useful when embeddings are pre-computed.
315
+ */
316
+ setEmbedding(id, embedding) {
317
+ this.embeddings.set(id, embedding);
318
+ }
319
+ /**
320
+ * Layer 1: Semantic similarity search.
321
+ * Requires embedding function to be set.
322
+ *
323
+ * @param embedding - Query embedding vector
324
+ * @param threshold - Minimum cosine similarity (0.0-1.0)
325
+ * @param limit - Maximum results
326
+ * @returns Matching fragments with similarity scores
327
+ */
328
+ async queryBySimilarity(embedding, threshold = 0.7, limit = 10) {
329
+ const results = [];
330
+ const allFragments = await this.all();
331
+ for (const fragment of allFragments) {
332
+ const storedEmbedding = this.embeddings.get(fragment.id);
333
+ if (!storedEmbedding)
334
+ continue;
335
+ const similarity = cosineSimilarity(embedding, storedEmbedding);
336
+ if (similarity >= threshold) {
337
+ results.push({ fragment, similarity });
338
+ }
339
+ }
340
+ // Sort by similarity descending
341
+ results.sort((a, b) => b.similarity - a.similarity);
342
+ // Apply limit
343
+ return results.slice(0, limit);
344
+ }
345
+ /**
346
+ * Convert fragment to text for embedding.
347
+ */
348
+ fragmentToText(fragment) {
349
+ const parts = [];
350
+ if (typeof fragment.content.data === 'string') {
351
+ parts.push(fragment.content.data);
352
+ }
353
+ else if (fragment.content.data !== null && typeof fragment.content.data === 'object') {
354
+ parts.push(JSON.stringify(fragment.content.data));
355
+ }
356
+ return parts.join(' ');
357
+ }
358
+ /**
359
+ * Clear embeddings cache.
360
+ */
361
+ clearEmbeddings() {
362
+ this.embeddings.clear();
363
+ }
364
+ /**
365
+ * Get embedding statistics.
366
+ */
367
+ embeddingStats() {
368
+ return {
369
+ count: this.embeddings.size,
370
+ fragmentCount: this.size(),
371
+ };
372
+ }
373
+ }
374
+ /**
375
+ * Compute cosine similarity between two vectors.
376
+ */
377
+ function cosineSimilarity(a, b) {
378
+ if (a.length !== b.length) {
379
+ throw new Error(`Embedding dimension mismatch: ${a.length} vs ${b.length}`);
380
+ }
381
+ let dotProduct = 0;
382
+ let normA = 0;
383
+ let normB = 0;
384
+ for (let i = 0; i < a.length; i++) {
385
+ const aVal = a[i] ?? 0;
386
+ const bVal = b[i] ?? 0;
387
+ dotProduct += aVal * bVal;
388
+ normA += aVal * aVal;
389
+ normB += bVal * bVal;
390
+ }
391
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
392
+ if (denominator === 0)
393
+ return 0;
394
+ return dotProduct / denominator;
395
+ }
396
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/context/store.ts"],"names":[],"mappings":"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"}