@cmdoss/memwal-sdk 0.6.1 → 0.7.0
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.
- package/dist/ai-sdk/PDWVectorStore.d.ts.map +1 -1
- package/dist/ai-sdk/PDWVectorStore.js +4 -1
- package/dist/ai-sdk/PDWVectorStore.js.map +1 -1
- package/dist/ai-sdk/tools.d.ts +2 -2
- package/dist/ai-sdk/tools.js +2 -2
- package/dist/browser.d.ts +5 -6
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +7 -6
- package/dist/browser.js.map +1 -1
- package/dist/client/ClientMemoryManager.d.ts +1 -0
- package/dist/client/ClientMemoryManager.d.ts.map +1 -1
- package/dist/client/ClientMemoryManager.js +5 -1
- package/dist/client/ClientMemoryManager.js.map +1 -1
- package/dist/client/SimplePDWClient.d.ts +24 -1
- package/dist/client/SimplePDWClient.d.ts.map +1 -1
- package/dist/client/SimplePDWClient.js +31 -9
- package/dist/client/SimplePDWClient.js.map +1 -1
- package/dist/client/namespaces/EmbeddingsNamespace.d.ts +1 -1
- package/dist/client/namespaces/EmbeddingsNamespace.js +1 -1
- package/dist/client/namespaces/IndexNamespace.d.ts +38 -9
- package/dist/client/namespaces/IndexNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/IndexNamespace.js +77 -10
- package/dist/client/namespaces/IndexNamespace.js.map +1 -1
- package/dist/client/namespaces/MemoryNamespace.d.ts +27 -0
- package/dist/client/namespaces/MemoryNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/MemoryNamespace.js +104 -0
- package/dist/client/namespaces/MemoryNamespace.js.map +1 -1
- package/dist/client/namespaces/SearchNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/SearchNamespace.js +25 -14
- package/dist/client/namespaces/SearchNamespace.js.map +1 -1
- package/dist/client/namespaces/consolidated/AINamespace.d.ts +2 -2
- package/dist/client/namespaces/consolidated/AINamespace.js +2 -2
- package/dist/client/namespaces/consolidated/BlockchainNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/consolidated/BlockchainNamespace.js +69 -1
- package/dist/client/namespaces/consolidated/BlockchainNamespace.js.map +1 -1
- package/dist/client/namespaces/consolidated/StorageNamespace.d.ts +46 -0
- package/dist/client/namespaces/consolidated/StorageNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/consolidated/StorageNamespace.js +34 -0
- package/dist/client/namespaces/consolidated/StorageNamespace.js.map +1 -1
- package/dist/graph/GraphService.js +2 -2
- package/dist/graph/GraphService.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/permissions/ConsentRepository.browser.d.ts +56 -0
- package/dist/permissions/ConsentRepository.browser.d.ts.map +1 -0
- package/dist/permissions/ConsentRepository.browser.js +198 -0
- package/dist/permissions/ConsentRepository.browser.js.map +1 -0
- package/dist/retrieval/MemoryRetrievalService.d.ts +31 -0
- package/dist/retrieval/MemoryRetrievalService.d.ts.map +1 -1
- package/dist/retrieval/MemoryRetrievalService.js +44 -4
- package/dist/retrieval/MemoryRetrievalService.js.map +1 -1
- package/dist/services/EmbeddingService.d.ts +28 -1
- package/dist/services/EmbeddingService.d.ts.map +1 -1
- package/dist/services/EmbeddingService.js +54 -0
- package/dist/services/EmbeddingService.js.map +1 -1
- package/dist/services/GeminiAIService.d.ts.map +1 -1
- package/dist/services/GeminiAIService.js +283 -27
- package/dist/services/GeminiAIService.js.map +1 -1
- package/dist/services/IndexManager.d.ts +5 -1
- package/dist/services/IndexManager.d.ts.map +1 -1
- package/dist/services/IndexManager.js +17 -40
- package/dist/services/IndexManager.js.map +1 -1
- package/dist/services/MemoryIndexService.d.ts +31 -2
- package/dist/services/MemoryIndexService.d.ts.map +1 -1
- package/dist/services/MemoryIndexService.js +75 -3
- package/dist/services/MemoryIndexService.js.map +1 -1
- package/dist/services/QueryService.js +1 -1
- package/dist/services/QueryService.js.map +1 -1
- package/dist/services/StorageService.d.ts +10 -0
- package/dist/services/StorageService.d.ts.map +1 -1
- package/dist/services/StorageService.js +13 -0
- package/dist/services/StorageService.js.map +1 -1
- package/dist/services/storage/QuiltBatchManager.d.ts +111 -4
- package/dist/services/storage/QuiltBatchManager.d.ts.map +1 -1
- package/dist/services/storage/QuiltBatchManager.js +450 -38
- package/dist/services/storage/QuiltBatchManager.js.map +1 -1
- package/dist/services/storage/index.d.ts +1 -1
- package/dist/services/storage/index.d.ts.map +1 -1
- package/dist/services/storage/index.js.map +1 -1
- package/dist/utils/LRUCache.d.ts +106 -0
- package/dist/utils/LRUCache.d.ts.map +1 -0
- package/dist/utils/LRUCache.js +281 -0
- package/dist/utils/LRUCache.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/memoryIndexOnChain.d.ts +212 -0
- package/dist/utils/memoryIndexOnChain.d.ts.map +1 -0
- package/dist/utils/memoryIndexOnChain.js +312 -0
- package/dist/utils/memoryIndexOnChain.js.map +1 -0
- package/dist/utils/rebuildIndexNode.d.ts +29 -0
- package/dist/utils/rebuildIndexNode.d.ts.map +1 -1
- package/dist/utils/rebuildIndexNode.js +387 -45
- package/dist/utils/rebuildIndexNode.js.map +1 -1
- package/dist/vector/HnswWasmService.d.ts +20 -5
- package/dist/vector/HnswWasmService.d.ts.map +1 -1
- package/dist/vector/HnswWasmService.js +73 -40
- package/dist/vector/HnswWasmService.js.map +1 -1
- package/dist/vector/IHnswService.d.ts +10 -1
- package/dist/vector/IHnswService.d.ts.map +1 -1
- package/dist/vector/IHnswService.js.map +1 -1
- package/dist/vector/NodeHnswService.d.ts +16 -0
- package/dist/vector/NodeHnswService.d.ts.map +1 -1
- package/dist/vector/NodeHnswService.js +108 -10
- package/dist/vector/NodeHnswService.js.map +1 -1
- package/dist/vector/createHnswService.d.ts +1 -1
- package/dist/vector/createHnswService.js +1 -1
- package/dist/vector/index.d.ts +1 -1
- package/dist/vector/index.js +1 -1
- package/package.json +157 -157
- package/src/ai-sdk/PDWVectorStore.ts +4 -1
- package/src/ai-sdk/tools.ts +2 -2
- package/src/browser.ts +15 -10
- package/src/client/ClientMemoryManager.ts +6 -1
- package/src/client/SimplePDWClient.ts +63 -10
- package/src/client/namespaces/EmbeddingsNamespace.ts +1 -1
- package/src/client/namespaces/IndexNamespace.ts +89 -11
- package/src/client/namespaces/MemoryNamespace.ts +137 -0
- package/src/client/namespaces/SearchNamespace.ts +27 -14
- package/src/client/namespaces/consolidated/AINamespace.ts +2 -2
- package/src/client/namespaces/consolidated/BlockchainNamespace.ts +73 -1
- package/src/client/namespaces/consolidated/StorageNamespace.ts +57 -0
- package/src/core/types/index.ts +1 -1
- package/src/generated/pdw/capability.ts +319 -319
- package/src/graph/GraphService.ts +2 -2
- package/src/index.ts +25 -1
- package/src/permissions/ConsentRepository.browser.ts +249 -0
- package/src/retrieval/MemoryRetrievalService.ts +78 -4
- package/src/services/EmbeddingService.ts +66 -1
- package/src/services/GeminiAIService.ts +283 -27
- package/src/services/IndexManager.ts +18 -45
- package/src/services/MemoryIndexService.ts +85 -3
- package/src/services/QueryService.ts +1 -1
- package/src/services/StorageService.ts +15 -0
- package/src/services/storage/QuiltBatchManager.ts +538 -42
- package/src/services/storage/index.ts +6 -1
- package/src/utils/LRUCache.ts +378 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/memoryIndexOnChain.ts +507 -0
- package/src/utils/rebuildIndexNode.ts +482 -52
- package/src/vector/HnswWasmService.ts +95 -43
- package/src/vector/IHnswService.ts +10 -1
- package/src/vector/NodeHnswService.ts +130 -10
- package/src/vector/createHnswService.ts +1 -1
- package/src/vector/index.ts +1 -1
|
@@ -26,13 +26,82 @@
|
|
|
26
26
|
* ```
|
|
27
27
|
*/
|
|
28
28
|
import { WalrusClient } from '@mysten/walrus';
|
|
29
|
+
/**
|
|
30
|
+
* Find a matching file in a Quilt using multiple strategies
|
|
31
|
+
* Mirrors the logic in SDK's QuiltBatchManager.findMemoryInQuilt()
|
|
32
|
+
*
|
|
33
|
+
* Strategies (in order):
|
|
34
|
+
* 1. Match by tags['memory_id'] === vectorId
|
|
35
|
+
* 2. Match by identifier === `memory-${vectorId}.json`
|
|
36
|
+
* 3. Match by JSON metadata.memoryId === vectorId
|
|
37
|
+
* 4. Fallback to index-based matching
|
|
38
|
+
*/
|
|
39
|
+
async function findMatchingFile(files, vectorId, fallbackIndex) {
|
|
40
|
+
let matchedFile;
|
|
41
|
+
let matchStrategy = '';
|
|
42
|
+
// Strategy 1: Match by tags['memory_id']
|
|
43
|
+
for (const f of files) {
|
|
44
|
+
const tags = await f.getTags();
|
|
45
|
+
if (tags?.['memory_id'] === String(vectorId)) {
|
|
46
|
+
matchedFile = f;
|
|
47
|
+
const identifier = await f.getIdentifier();
|
|
48
|
+
matchStrategy = `memory_id tag: ${tags['memory_id']} (${identifier})`;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Strategy 2: Match by identifier pattern "memory-{vectorId}.json"
|
|
53
|
+
if (!matchedFile) {
|
|
54
|
+
for (const f of files) {
|
|
55
|
+
const identifier = await f.getIdentifier();
|
|
56
|
+
if (identifier === `memory-${vectorId}.json`) {
|
|
57
|
+
matchedFile = f;
|
|
58
|
+
matchStrategy = `identifier: ${identifier}`;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Strategy 3: Parse JSON to find matching metadata.memoryId
|
|
64
|
+
if (!matchedFile) {
|
|
65
|
+
for (const f of files) {
|
|
66
|
+
try {
|
|
67
|
+
const json = await f.json();
|
|
68
|
+
if (json?.metadata?.memoryId === String(vectorId)) {
|
|
69
|
+
matchedFile = f;
|
|
70
|
+
const identifier = await f.getIdentifier();
|
|
71
|
+
matchStrategy = `JSON metadata.memoryId: ${json.metadata.memoryId} (${identifier})`;
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// Not valid JSON, continue
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Strategy 4: Fallback to index-based matching
|
|
81
|
+
if (!matchedFile && fallbackIndex < files.length) {
|
|
82
|
+
matchedFile = files[fallbackIndex];
|
|
83
|
+
const identifier = await matchedFile.getIdentifier();
|
|
84
|
+
matchStrategy = `index fallback (${fallbackIndex}): ${identifier || 'no identifier'}`;
|
|
85
|
+
}
|
|
86
|
+
return { file: matchedFile, matchStrategy };
|
|
87
|
+
}
|
|
29
88
|
/**
|
|
30
89
|
* Rebuild HNSW index from blockchain + Walrus (Node.js)
|
|
31
90
|
*/
|
|
32
91
|
export async function rebuildIndexNode(options) {
|
|
33
|
-
const { userAddress, client, packageId, network = process.env.WALRUS_NETWORK || 'testnet', walrusAggregator, indexDirectory = './.pdw-indexes', onProgress, force = false } = options;
|
|
92
|
+
const { userAddress, client, packageId, network = process.env.WALRUS_NETWORK || 'testnet', walrusAggregator, indexDirectory = './.pdw-indexes', onProgress, force = false, quiltIds = [], fetchConcurrency = 10 } = options;
|
|
34
93
|
const startTime = Date.now();
|
|
35
94
|
const errors = [];
|
|
95
|
+
// Detailed timing
|
|
96
|
+
const timing = {
|
|
97
|
+
initMs: 0,
|
|
98
|
+
blockchainFetchMs: 0,
|
|
99
|
+
walrusFetchMs: 0,
|
|
100
|
+
processingMs: 0,
|
|
101
|
+
saveMs: 0,
|
|
102
|
+
blobsFetched: 0,
|
|
103
|
+
totalBytesDownloaded: 0,
|
|
104
|
+
};
|
|
36
105
|
console.log('[rebuildIndexNode] Starting index rebuild...');
|
|
37
106
|
onProgress?.(0, 0, 'Initializing...');
|
|
38
107
|
try {
|
|
@@ -57,6 +126,8 @@ export async function rebuildIndexNode(options) {
|
|
|
57
126
|
}
|
|
58
127
|
});
|
|
59
128
|
await hnswService.initialize();
|
|
129
|
+
timing.initMs = Date.now() - startTime;
|
|
130
|
+
console.log(`[rebuildIndexNode] ⏱️ Init: ${timing.initMs}ms`);
|
|
60
131
|
// Check if index exists
|
|
61
132
|
const indexPath = `${indexDirectory}/${userAddress.replace(/[^a-zA-Z0-9]/g, '_')}.hnsw`;
|
|
62
133
|
let indexExists = false;
|
|
@@ -83,6 +154,7 @@ export async function rebuildIndexNode(options) {
|
|
|
83
154
|
console.log('[rebuildIndexNode] Deleted existing index for rebuild');
|
|
84
155
|
}
|
|
85
156
|
// Fetch all memories from blockchain
|
|
157
|
+
const blockchainFetchStart = Date.now();
|
|
86
158
|
console.log('[rebuildIndexNode] Fetching memories from blockchain...');
|
|
87
159
|
onProgress?.(0, 0, 'Fetching memories from blockchain...');
|
|
88
160
|
const memories = [];
|
|
@@ -129,65 +201,335 @@ export async function rebuildIndexNode(options) {
|
|
|
129
201
|
duration: Date.now() - startTime
|
|
130
202
|
};
|
|
131
203
|
}
|
|
132
|
-
// Process
|
|
204
|
+
// Process memories grouped by blobId (for Quilt support)
|
|
205
|
+
// In a Quilt, multiple memories share the same blobId
|
|
206
|
+
const memoriesByBlobId = new Map();
|
|
207
|
+
for (const memory of memories) {
|
|
208
|
+
const list = memoriesByBlobId.get(memory.blobId) || [];
|
|
209
|
+
list.push(memory);
|
|
210
|
+
memoriesByBlobId.set(memory.blobId, list);
|
|
211
|
+
}
|
|
212
|
+
console.log(`[rebuildIndexNode] Unique blobIds: ${memoriesByBlobId.size} (${memoriesByBlobId.size < totalMemories ? 'Quilt detected' : 'individual blobs'})`);
|
|
213
|
+
timing.blockchainFetchMs = Date.now() - blockchainFetchStart;
|
|
214
|
+
console.log(`[rebuildIndexNode] ⏱️ Blockchain fetch: ${timing.blockchainFetchMs}ms`);
|
|
133
215
|
let indexedCount = 0;
|
|
134
216
|
let failedCount = 0;
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
217
|
+
let processedCount = 0;
|
|
218
|
+
// ==================== PARALLEL BLOB FETCHING + CONTENT ====================
|
|
219
|
+
// Step 1: Check blob types (Quilt vs regular) in parallel
|
|
220
|
+
// Step 2: Fetch content in parallel (patches for Quilt, bytes for regular)
|
|
221
|
+
const blobIds = Array.from(memoriesByBlobId.keys());
|
|
222
|
+
console.log(`[rebuildIndexNode] Fetching ${blobIds.length} blobs (concurrency: ${fetchConcurrency})...`);
|
|
223
|
+
const fetchStartTime = Date.now();
|
|
224
|
+
const quiltFileCache = new Map();
|
|
225
|
+
const contentCache = new Map(); // blobId or blobId:identifier -> content
|
|
226
|
+
const fetchErrors = [];
|
|
227
|
+
// Process in batches to control concurrency
|
|
228
|
+
for (let i = 0; i < blobIds.length; i += fetchConcurrency) {
|
|
229
|
+
const batch = blobIds.slice(i, i + fetchConcurrency);
|
|
230
|
+
const batchNum = Math.floor(i / fetchConcurrency) + 1;
|
|
231
|
+
const totalBatches = Math.ceil(blobIds.length / fetchConcurrency);
|
|
232
|
+
console.log(`[rebuildIndexNode] 📥 Batch ${batchNum}/${totalBatches}: ${batch.length} blobs...`);
|
|
233
|
+
onProgress?.(i, blobIds.length, `Fetching batch ${batchNum}/${totalBatches}...`);
|
|
234
|
+
// Parallel fetch: check type + fetch content for each blob
|
|
235
|
+
const results = await Promise.all(batch.map(async (blobId) => {
|
|
236
|
+
try {
|
|
237
|
+
// Try as Quilt first (getBlob + files)
|
|
238
|
+
try {
|
|
239
|
+
const blob = await walrusClient.walrus.getBlob({ blobId });
|
|
240
|
+
const quiltFiles = await blob.files();
|
|
241
|
+
if (quiltFiles.length > 1) {
|
|
242
|
+
// It's a Quilt with multiple patches - fetch all content in parallel
|
|
243
|
+
const patchResults = await Promise.all(quiltFiles.map(async (file) => {
|
|
244
|
+
const identifier = await file.getIdentifier();
|
|
245
|
+
const tags = await file.getTags();
|
|
246
|
+
const bytes = await file.bytes();
|
|
247
|
+
return { file, identifier, tags, bytes };
|
|
248
|
+
}));
|
|
249
|
+
return {
|
|
250
|
+
blobId,
|
|
251
|
+
success: true,
|
|
252
|
+
isQuilt: true,
|
|
253
|
+
files: quiltFiles,
|
|
254
|
+
patches: patchResults,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
// Single file in blob - fetch content
|
|
259
|
+
const bytes = await quiltFiles[0].bytes();
|
|
260
|
+
return {
|
|
261
|
+
blobId,
|
|
262
|
+
success: true,
|
|
263
|
+
isQuilt: false,
|
|
264
|
+
files: quiltFiles,
|
|
265
|
+
bytes,
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
// Not a Quilt - try as regular blob
|
|
271
|
+
const files = await walrusClient.walrus.getFiles({ ids: [blobId] });
|
|
272
|
+
if (files[0]) {
|
|
273
|
+
const bytes = await files[0].bytes();
|
|
274
|
+
return {
|
|
275
|
+
blobId,
|
|
276
|
+
success: true,
|
|
277
|
+
isQuilt: false,
|
|
278
|
+
files,
|
|
279
|
+
bytes,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
return { blobId, success: false, error: 'No file found' };
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
catch (error) {
|
|
286
|
+
return { blobId, success: false, error: error.message || String(error) };
|
|
287
|
+
}
|
|
288
|
+
}));
|
|
289
|
+
// Process results into caches
|
|
290
|
+
for (const result of results) {
|
|
291
|
+
if (!result.success) {
|
|
292
|
+
fetchErrors.push({ blobId: result.blobId, error: result.error || 'Unknown error' });
|
|
293
|
+
console.error(`[rebuildIndexNode] ✗ ${result.blobId.substring(0, 16)}...: ${result.error}`);
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
if (result.isQuilt && result.patches) {
|
|
297
|
+
// Quilt: cache files and patch contents
|
|
298
|
+
quiltFileCache.set(result.blobId, result.files);
|
|
299
|
+
for (const patch of result.patches) {
|
|
300
|
+
const cacheKey = patch.identifier
|
|
301
|
+
? `${result.blobId}:${patch.identifier}`
|
|
302
|
+
: result.blobId;
|
|
303
|
+
contentCache.set(cacheKey, patch.bytes);
|
|
304
|
+
}
|
|
305
|
+
console.log(`[rebuildIndexNode] ✓ ${result.blobId.substring(0, 16)}... (Quilt: ${result.patches.length} patches)`);
|
|
306
|
+
}
|
|
307
|
+
else if (result.bytes) {
|
|
308
|
+
// Regular blob: cache file and content
|
|
309
|
+
quiltFileCache.set(result.blobId, result.files);
|
|
310
|
+
contentCache.set(result.blobId, result.bytes);
|
|
311
|
+
console.log(`[rebuildIndexNode] ✓ ${result.blobId.substring(0, 16)}... (${result.bytes.length} bytes)`);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
timing.walrusFetchMs = Date.now() - fetchStartTime;
|
|
316
|
+
timing.blobsFetched = quiltFileCache.size;
|
|
317
|
+
// Calculate total bytes downloaded
|
|
318
|
+
for (const bytes of contentCache.values()) {
|
|
319
|
+
timing.totalBytesDownloaded += bytes.length;
|
|
320
|
+
}
|
|
321
|
+
console.log(`[rebuildIndexNode] ⏱️ Walrus fetch: ${timing.walrusFetchMs}ms (${quiltFileCache.size} blobs, ${contentCache.size} contents, ${(timing.totalBytesDownloaded / 1024).toFixed(1)}KB)`);
|
|
322
|
+
const processingStart = Date.now();
|
|
323
|
+
// ==================== PROCESS MEMORIES ====================
|
|
324
|
+
for (const [blobId, memoriesInBlob] of memoriesByBlobId) {
|
|
325
|
+
console.log(`[rebuildIndexNode] Processing blobId ${blobId.substring(0, 20)}... (${memoriesInBlob.length} memories)`);
|
|
326
|
+
// Get pre-fetched files from cache
|
|
327
|
+
const files = quiltFileCache.get(blobId);
|
|
328
|
+
if (!files) {
|
|
329
|
+
// Blob fetch failed - mark all memories in this blob as failed
|
|
330
|
+
const fetchError = fetchErrors.find(e => e.blobId === blobId);
|
|
331
|
+
const errorMsg = fetchError?.error || 'Failed to fetch blob';
|
|
332
|
+
console.error(`[rebuildIndexNode] ✗ No files available: ${errorMsg}`);
|
|
333
|
+
for (const memory of memoriesInBlob) {
|
|
334
|
+
processedCount++;
|
|
335
|
+
failedCount++;
|
|
336
|
+
errors.push({ blobId: memory.blobId, error: `Blob fetch failed: ${errorMsg}` });
|
|
337
|
+
}
|
|
338
|
+
continue;
|
|
339
|
+
}
|
|
340
|
+
console.log(`[rebuildIndexNode] 📦 Using ${files.length} pre-fetched file(s)`);
|
|
341
|
+
// For each memory in this blobId
|
|
342
|
+
for (let i = 0; i < memoriesInBlob.length; i++) {
|
|
343
|
+
const memory = memoriesInBlob[i];
|
|
344
|
+
processedCount++;
|
|
345
|
+
const progress = `Memory ${processedCount}/${totalMemories}`;
|
|
346
|
+
console.log(`[rebuildIndexNode] Processing ${progress}: vectorId=${memory.vectorId}`);
|
|
347
|
+
onProgress?.(processedCount, totalMemories, `Processing ${progress}...`);
|
|
348
|
+
try {
|
|
349
|
+
// Find matching file using helper function (mirrors SDK's QuiltBatchManager.findMemoryInQuilt)
|
|
350
|
+
let file;
|
|
351
|
+
if (files.length === 1) {
|
|
352
|
+
// Single file - use it directly
|
|
353
|
+
file = files[0];
|
|
354
|
+
}
|
|
355
|
+
else if (files.length > 1) {
|
|
356
|
+
// Multiple files in Quilt - use matching strategies
|
|
357
|
+
const { file: matchedFile, matchStrategy } = await findMatchingFile(files, memory.vectorId, i);
|
|
358
|
+
file = matchedFile;
|
|
359
|
+
if (matchStrategy) {
|
|
360
|
+
console.log(`[rebuildIndexNode] 🎯 Matched by ${matchStrategy}`);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
if (!file) {
|
|
364
|
+
throw new Error(`No file found for memory vectorId=${memory.vectorId} (blob has ${files.length} files)`);
|
|
365
|
+
}
|
|
366
|
+
// Get file identifier and tags if available (for Quilts)
|
|
367
|
+
const identifier = await file.getIdentifier();
|
|
368
|
+
const tags = await file.getTags();
|
|
369
|
+
// Get content from cache (already pre-fetched) or fetch if not cached
|
|
370
|
+
const cacheKey = identifier ? `${blobId}:${identifier}` : blobId;
|
|
371
|
+
let rawBytes = contentCache.get(cacheKey);
|
|
372
|
+
if (!rawBytes) {
|
|
373
|
+
// Fallback: fetch content if not in cache
|
|
374
|
+
rawBytes = await file.bytes();
|
|
375
|
+
}
|
|
376
|
+
const rawText = new TextDecoder().decode(rawBytes);
|
|
377
|
+
const trimmedText = rawText.trim();
|
|
378
|
+
if (identifier) {
|
|
379
|
+
console.log(`[rebuildIndexNode] 📎 File identifier: ${identifier}`);
|
|
380
|
+
}
|
|
381
|
+
let content;
|
|
382
|
+
let embedding;
|
|
383
|
+
let metadata = {};
|
|
384
|
+
let timestamp = Date.now();
|
|
385
|
+
if (trimmedText.startsWith('{') && trimmedText.endsWith('}')) {
|
|
386
|
+
// JSON package format (correct format)
|
|
387
|
+
try {
|
|
388
|
+
const memoryData = JSON.parse(trimmedText);
|
|
389
|
+
content = memoryData.content;
|
|
390
|
+
embedding = memoryData.embedding;
|
|
391
|
+
metadata = memoryData.metadata || {};
|
|
392
|
+
timestamp = memoryData.timestamp || Date.now();
|
|
393
|
+
if (!embedding || embedding.length !== 3072) {
|
|
394
|
+
throw new Error(`Invalid embedding in JSON: length=${embedding?.length || 0}`);
|
|
395
|
+
}
|
|
396
|
+
console.log(`[rebuildIndexNode] 📦 Format: JSON package`);
|
|
397
|
+
}
|
|
398
|
+
catch (jsonError) {
|
|
399
|
+
throw new Error(`Invalid JSON structure: ${jsonError.message}`);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
else if (trimmedText.length > 0 && !trimmedText.includes('\x00') && trimmedText.length < 10000) {
|
|
403
|
+
// Plain text format - cannot index without embedding
|
|
404
|
+
throw new Error('Plain text format detected but no embedding available - skip');
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
throw new Error('Binary, encrypted, or empty content - cannot index');
|
|
408
|
+
}
|
|
409
|
+
// Add to HNSW index
|
|
410
|
+
await hnswService.addVector(userAddress, memory.vectorId, embedding, {
|
|
411
|
+
blobId: memory.blobId,
|
|
412
|
+
memoryObjectId: memory.id,
|
|
413
|
+
category: metadata.category || memory.category || tags?.['category'],
|
|
414
|
+
importance: metadata.importance || memory.importance || parseInt(tags?.['importance'] || '5'),
|
|
415
|
+
topic: metadata.topic || tags?.['topic'] || '',
|
|
416
|
+
timestamp,
|
|
417
|
+
content,
|
|
418
|
+
isEncrypted: false
|
|
419
|
+
});
|
|
420
|
+
indexedCount++;
|
|
421
|
+
console.log(`[rebuildIndexNode] ✓ Indexed: "${content.substring(0, 30)}..."`);
|
|
422
|
+
}
|
|
423
|
+
catch (error) {
|
|
424
|
+
failedCount++;
|
|
425
|
+
const errorMsg = error.message || String(error);
|
|
426
|
+
errors.push({ blobId: memory.blobId, error: errorMsg });
|
|
427
|
+
console.error(`[rebuildIndexNode] ✗ Failed: ${errorMsg}`);
|
|
151
428
|
}
|
|
152
|
-
// Add to HNSW index
|
|
153
|
-
// Option A+: Store content in index for fast local retrieval (no Walrus fetch needed)
|
|
154
|
-
// Note: Only for unencrypted content. If content was encrypted, it won't be parseable anyway.
|
|
155
|
-
await hnswService.addVector(userAddress, memory.vectorId, embedding, {
|
|
156
|
-
blobId: memory.blobId,
|
|
157
|
-
memoryObjectId: memory.id,
|
|
158
|
-
category: memory.category,
|
|
159
|
-
importance: memory.importance,
|
|
160
|
-
topic: memoryData.metadata?.topic || '',
|
|
161
|
-
timestamp: memoryData.timestamp,
|
|
162
|
-
// Option A+: Store content for fast retrieval (avoids Walrus fetch on search)
|
|
163
|
-
content: memoryData.content,
|
|
164
|
-
isEncrypted: false // If we can parse it, it's not encrypted
|
|
165
|
-
});
|
|
166
|
-
indexedCount++;
|
|
167
|
-
console.log(`[rebuildIndexNode] ✓ Indexed: ${memory.blobId.substring(0, 20)}...`);
|
|
168
429
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
430
|
+
}
|
|
431
|
+
// ==================== QUILT MEMORIES ====================
|
|
432
|
+
// Process additional Quilts that may not have on-chain Memory objects
|
|
433
|
+
let quiltMemoriesTotal = 0;
|
|
434
|
+
let quiltMemoriesIndexed = 0;
|
|
435
|
+
if (quiltIds.length > 0) {
|
|
436
|
+
console.log(`\n[rebuildIndexNode] Processing ${quiltIds.length} additional Quilt(s)...`);
|
|
437
|
+
onProgress?.(processedCount, totalMemories + quiltIds.length, 'Processing Quilts...');
|
|
438
|
+
for (const quiltId of quiltIds) {
|
|
439
|
+
console.log(`[rebuildIndexNode] Processing Quilt: ${quiltId.substring(0, 30)}...`);
|
|
440
|
+
try {
|
|
441
|
+
// Fetch Quilt files
|
|
442
|
+
const blob = await walrusClient.walrus.getBlob({ blobId: quiltId });
|
|
443
|
+
const files = await blob.files();
|
|
444
|
+
console.log(`[rebuildIndexNode] 📥 Fetched Quilt: ${files.length} file(s)`);
|
|
445
|
+
// Process each file in the Quilt
|
|
446
|
+
for (let fileIdx = 0; fileIdx < files.length; fileIdx++) {
|
|
447
|
+
const file = files[fileIdx];
|
|
448
|
+
quiltMemoriesTotal++;
|
|
449
|
+
try {
|
|
450
|
+
const identifier = await file.getIdentifier() || `quilt-file-${fileIdx}`;
|
|
451
|
+
const tags = await file.getTags();
|
|
452
|
+
// Parse JSON content
|
|
453
|
+
const rawBytes = await file.bytes();
|
|
454
|
+
let rawText = new TextDecoder().decode(rawBytes);
|
|
455
|
+
// Trim trailing null bytes (Quilt corruption workaround)
|
|
456
|
+
let lastValidIndex = rawText.length - 1;
|
|
457
|
+
while (lastValidIndex >= 0 && rawText.charCodeAt(lastValidIndex) === 0) {
|
|
458
|
+
lastValidIndex--;
|
|
459
|
+
}
|
|
460
|
+
rawText = rawText.slice(0, lastValidIndex + 1);
|
|
461
|
+
if (!rawText.startsWith('{') || !rawText.endsWith('}')) {
|
|
462
|
+
throw new Error('Not a JSON file');
|
|
463
|
+
}
|
|
464
|
+
const memoryData = JSON.parse(rawText);
|
|
465
|
+
if (!memoryData.embedding || memoryData.embedding.length === 0) {
|
|
466
|
+
throw new Error('No embedding in package');
|
|
467
|
+
}
|
|
468
|
+
// Generate unique vector ID for Quilt memory
|
|
469
|
+
const vectorId = Date.now() % 4294967295 + fileIdx;
|
|
470
|
+
const memoryId = memoryData.metadata?.memoryId || identifier.replace('.json', '');
|
|
471
|
+
// Add to HNSW index
|
|
472
|
+
await hnswService.addVector(userAddress, vectorId, memoryData.embedding, {
|
|
473
|
+
blobId: quiltId,
|
|
474
|
+
memoryObjectId: memoryId,
|
|
475
|
+
category: memoryData.metadata?.category || tags?.['category'] || 'general',
|
|
476
|
+
importance: memoryData.metadata?.importance || parseInt(tags?.['importance'] || '3'),
|
|
477
|
+
topic: memoryData.metadata?.topic || tags?.['topic'] || '',
|
|
478
|
+
timestamp: memoryData.timestamp || Date.now(),
|
|
479
|
+
content: memoryData.content || '[encrypted]',
|
|
480
|
+
isEncrypted: memoryData.encrypted === true,
|
|
481
|
+
quiltId,
|
|
482
|
+
identifier
|
|
483
|
+
});
|
|
484
|
+
quiltMemoriesIndexed++;
|
|
485
|
+
console.log(`[rebuildIndexNode] ✓ Indexed Quilt file: ${identifier}`);
|
|
486
|
+
}
|
|
487
|
+
catch (fileError) {
|
|
488
|
+
const errorMsg = fileError.message || String(fileError);
|
|
489
|
+
errors.push({ blobId: quiltId, error: `File ${fileIdx}: ${errorMsg}` });
|
|
490
|
+
console.error(`[rebuildIndexNode] ✗ Failed file ${fileIdx}: ${errorMsg}`);
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
catch (quiltError) {
|
|
495
|
+
const errorMsg = quiltError.message || String(quiltError);
|
|
496
|
+
errors.push({ blobId: quiltId, error: `Quilt fetch failed: ${errorMsg}` });
|
|
497
|
+
console.error(`[rebuildIndexNode] ✗ Failed to fetch Quilt: ${errorMsg}`);
|
|
498
|
+
}
|
|
174
499
|
}
|
|
500
|
+
console.log(`[rebuildIndexNode] Quilt indexing complete: ${quiltMemoriesIndexed}/${quiltMemoriesTotal}`);
|
|
175
501
|
}
|
|
502
|
+
// Update totals
|
|
503
|
+
const finalTotal = totalMemories + quiltMemoriesTotal;
|
|
504
|
+
const finalIndexed = indexedCount + quiltMemoriesIndexed;
|
|
505
|
+
const finalFailed = failedCount + (quiltMemoriesTotal - quiltMemoriesIndexed);
|
|
506
|
+
timing.processingMs = Date.now() - processingStart;
|
|
507
|
+
console.log(`[rebuildIndexNode] ⏱️ Processing: ${timing.processingMs}ms`);
|
|
176
508
|
// Force save index
|
|
509
|
+
const saveStart = Date.now();
|
|
177
510
|
console.log('[rebuildIndexNode] Saving index to disk...');
|
|
178
|
-
onProgress?.(
|
|
511
|
+
onProgress?.(finalTotal, finalTotal, 'Saving index...');
|
|
179
512
|
await hnswService.flushBatch(userAddress);
|
|
513
|
+
timing.saveMs = Date.now() - saveStart;
|
|
514
|
+
console.log(`[rebuildIndexNode] ⏱️ Save: ${timing.saveMs}ms`);
|
|
180
515
|
const duration = Date.now() - startTime;
|
|
181
516
|
console.log('[rebuildIndexNode] Index rebuild complete!');
|
|
182
|
-
console.log(`[rebuildIndexNode]
|
|
517
|
+
console.log(`[rebuildIndexNode] On-chain: ${totalMemories}, Quilts: ${quiltMemoriesTotal}, Total indexed: ${finalIndexed}, Failed: ${finalFailed}`);
|
|
183
518
|
console.log(`[rebuildIndexNode] Duration: ${(duration / 1000).toFixed(2)}s`);
|
|
519
|
+
console.log(`[rebuildIndexNode] ⏱️ TIMING BREAKDOWN:`);
|
|
520
|
+
console.log(` Init: ${timing.initMs}ms (${((timing.initMs / duration) * 100).toFixed(1)}%)`);
|
|
521
|
+
console.log(` Blockchain: ${timing.blockchainFetchMs}ms (${((timing.blockchainFetchMs / duration) * 100).toFixed(1)}%)`);
|
|
522
|
+
console.log(` Walrus: ${timing.walrusFetchMs}ms (${((timing.walrusFetchMs / duration) * 100).toFixed(1)}%)`);
|
|
523
|
+
console.log(` Processing: ${timing.processingMs}ms (${((timing.processingMs / duration) * 100).toFixed(1)}%)`);
|
|
524
|
+
console.log(` Save: ${timing.saveMs}ms (${((timing.saveMs / duration) * 100).toFixed(1)}%)`);
|
|
184
525
|
return {
|
|
185
526
|
success: true,
|
|
186
|
-
totalMemories,
|
|
187
|
-
indexedMemories:
|
|
188
|
-
failedMemories:
|
|
527
|
+
totalMemories: finalTotal,
|
|
528
|
+
indexedMemories: finalIndexed,
|
|
529
|
+
failedMemories: finalFailed,
|
|
189
530
|
errors,
|
|
190
|
-
duration
|
|
531
|
+
duration,
|
|
532
|
+
timing
|
|
191
533
|
};
|
|
192
534
|
}
|
|
193
535
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rebuildIndexNode.js","sourceRoot":"","sources":["../../src/utils/rebuildIndexNode.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rebuildIndexNode.js","sourceRoot":"","sources":["../../src/utils/rebuildIndexNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* - ✅ Walrus storage integration
|
|
12
12
|
* - ✅ Near-native performance via WASM
|
|
13
13
|
* - ✅ Safe for Node.js/SSR (uses dynamic import)
|
|
14
|
+
* - ✅ LRU cache with memory limits to prevent OOM
|
|
14
15
|
*/
|
|
15
16
|
type HierarchicalNSW = any;
|
|
16
17
|
import { StorageService } from '../services/StorageService';
|
|
@@ -18,6 +19,12 @@ import { HNSWIndexConfig, HNSWSearchResult, HNSWSearchOptions, BatchConfig, Batc
|
|
|
18
19
|
/**
|
|
19
20
|
* Browser-compatible HNSW vector indexing service using WebAssembly
|
|
20
21
|
* Drop-in replacement for HnswIndexService with identical API
|
|
22
|
+
*
|
|
23
|
+
* Memory Management:
|
|
24
|
+
* - LRU cache limits number of indexes in memory (default: 5)
|
|
25
|
+
* - TTL-based expiration for idle indexes (default: 10 minutes)
|
|
26
|
+
* - Optional memory limit (default: 512MB)
|
|
27
|
+
* - Automatic cleanup of expired/evicted indexes
|
|
21
28
|
*/
|
|
22
29
|
export declare class HnswWasmService {
|
|
23
30
|
private storageService;
|
|
@@ -27,9 +34,15 @@ export declare class HnswWasmService {
|
|
|
27
34
|
private readonly config;
|
|
28
35
|
private readonly indexConfig;
|
|
29
36
|
private batchProcessor?;
|
|
30
|
-
private cacheCleanup?;
|
|
31
37
|
private initPromise;
|
|
32
|
-
|
|
38
|
+
private readonly maxCachedIndexes;
|
|
39
|
+
private readonly indexTtlMs;
|
|
40
|
+
private readonly maxMemoryBytes;
|
|
41
|
+
constructor(storageService: StorageService, indexConfig?: Partial<HNSWIndexConfig>, batchConfig?: Partial<BatchConfig>, memoryConfig?: {
|
|
42
|
+
maxCachedIndexes?: number;
|
|
43
|
+
indexTtlMs?: number;
|
|
44
|
+
maxMemoryMB?: number;
|
|
45
|
+
});
|
|
33
46
|
/**
|
|
34
47
|
* Initialize hnswlib-wasm (must be called before use)
|
|
35
48
|
*/
|
|
@@ -68,7 +81,11 @@ export declare class HnswWasmService {
|
|
|
68
81
|
/**
|
|
69
82
|
* Get cache statistics
|
|
70
83
|
*/
|
|
71
|
-
getCacheStats(): BatchStats
|
|
84
|
+
getCacheStats(): BatchStats & {
|
|
85
|
+
memoryUsageMB: number;
|
|
86
|
+
maxMemoryMB: number;
|
|
87
|
+
maxCachedIndexes: number;
|
|
88
|
+
};
|
|
72
89
|
/**
|
|
73
90
|
* Remove a vector from the index
|
|
74
91
|
*/
|
|
@@ -84,12 +101,10 @@ export declare class HnswWasmService {
|
|
|
84
101
|
private createCacheEntry;
|
|
85
102
|
private scheduleBatchJob;
|
|
86
103
|
private startBatchProcessor;
|
|
87
|
-
private startCacheCleanup;
|
|
88
104
|
private processBatchJobs;
|
|
89
105
|
private flushPendingVectors;
|
|
90
106
|
private saveIndexToWalrus;
|
|
91
107
|
private applyMetadataFilter;
|
|
92
|
-
private cleanupCache;
|
|
93
108
|
private validateVector;
|
|
94
109
|
private createVectorError;
|
|
95
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HnswWasmService.d.ts","sourceRoot":"","sources":["../../src/vector/HnswWasmService.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"HnswWasmService.d.ts","sourceRoot":"","sources":["../../src/vector/HnswWasmService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,KAAK,eAAe,GAAG,GAAG,CAAC;AAU3B,OAAO,EAAE,cAAc,EAAuB,MAAM,4BAA4B,CAAC;AACjF,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EAEX,UAAU,EAEX,MAAM,oBAAoB,CAAC;AAgC5B;;;;;;;;;GASG;AACH,qBAAa,eAAe;IAexB,OAAO,CAAC,cAAc;IAdxB,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4B;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4B;IACxD,OAAO,CAAC,cAAc,CAAC,CAAiC;IACxD,OAAO,CAAC,WAAW,CAA8B;IAGjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAG9B,cAAc,EAAE,cAAc,EACtC,WAAW,GAAE,OAAO,CAAC,eAAe,CAAM,EAC1C,WAAW,GAAE,OAAO,CAAC,WAAW,CAAM,EACtC,YAAY,CAAC,EAAE;QACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;IA4DH;;OAEG;YACW,UAAU;IAcxB;;OAEG;YACW,iBAAiB;IAS/B;;OAEG;IACG,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAO,CAAC,eAAe,CAAM,GACrC,OAAO,CAAC;QAAE,KAAK,EAAE,eAAe,CAAC;QAAC,UAAU,EAAE,UAAU,CAAA;KAAE,CAAC;IA4C9D;;OAEG;IACH,uBAAuB,CACrB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EAAE,EAChB,QAAQ,CAAC,EAAE,GAAG,GACb,IAAI;IAqDP;;OAEG;IACG,aAAa,CACjB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC;IAuE5B;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAwC9E;;OAEG;IACG,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBrD;;OAEG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD;;OAEG;IACH,aAAa,IAAI,UAAU,GAAG;QAC5B,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;KAC1B;IAsBD;;OAEG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAqBzD;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAMzC;;OAEG;IACH,OAAO,IAAI,IAAI;YAYD,gBAAgB;IAkB9B,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,mBAAmB;YAQb,gBAAgB;YAuBhB,mBAAmB;YAsDnB,iBAAiB;IAyC/B,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,iBAAiB;CAM1B;AAED,eAAe,eAAe,CAAC"}
|