@anuma/sdk 3.13.1 → 3.13.2

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.
@@ -17563,6 +17563,31 @@ function createMemoryEngineTool(storageCtx, embeddingOptions, searchOptions, cal
17563
17563
  // src/expo/useChatStorage.ts
17564
17564
  init_constants();
17565
17565
 
17566
+ // src/lib/memoryVault/embeddingCacheRegistry.ts
17567
+ init_useEncryption();
17568
+ init_lruCache();
17569
+ var registry = /* @__PURE__ */ new WeakMap();
17570
+ function buildKey(walletAddress, model) {
17571
+ return JSON.stringify([walletAddress ?? null, model]);
17572
+ }
17573
+ function getVaultEmbeddingCache(database, walletAddress, model) {
17574
+ let perDb = registry.get(database);
17575
+ if (!perDb) {
17576
+ perDb = /* @__PURE__ */ new Map();
17577
+ registry.set(database, perDb);
17578
+ }
17579
+ const key = buildKey(walletAddress, model);
17580
+ let cache = perDb.get(key);
17581
+ if (!cache) {
17582
+ cache = createVaultEmbeddingCache();
17583
+ perDb.set(key, cache);
17584
+ }
17585
+ return cache;
17586
+ }
17587
+ onClearAllEncryptionState(() => {
17588
+ registry = /* @__PURE__ */ new WeakMap();
17589
+ });
17590
+
17566
17591
  // src/lib/memoryVault/index.ts
17567
17592
  init_searchTool();
17568
17593
 
@@ -19024,14 +19049,17 @@ function useChatStorage(options) {
19024
19049
  },
19025
19050
  [vaultCtx]
19026
19051
  );
19027
- const vaultEmbeddingCacheRef = (0, import_react4.useRef)(createVaultEmbeddingCache());
19052
+ const vaultEmbeddingCache = (0, import_react4.useMemo)(
19053
+ () => getVaultEmbeddingCache(database, walletAddress, embeddingModel),
19054
+ [database, walletAddress, embeddingModel]
19055
+ );
19028
19056
  const chunkVectorCacheRef = (0, import_react4.useRef)(createChunkVectorCache());
19029
19057
  (0, import_react4.useEffect)(() => {
19030
19058
  return onClearAllEncryptionState(() => {
19031
- vaultEmbeddingCacheRef.current.clear();
19059
+ vaultEmbeddingCache.clear();
19032
19060
  chunkVectorCacheRef.current.clear();
19033
19061
  });
19034
- }, []);
19062
+ }, [vaultEmbeddingCache]);
19035
19063
  const createRecallTool2 = (0, import_react4.useCallback)(
19036
19064
  (toolOptions, callbacks) => {
19037
19065
  if (!getToken) {
@@ -19048,7 +19076,7 @@ function useChatStorage(options) {
19048
19076
  model: embeddingModel,
19049
19077
  maskInput: maskEmbeddingInput
19050
19078
  },
19051
- vaultCache: vaultEmbeddingCacheRef.current,
19079
+ vaultCache: vaultEmbeddingCache,
19052
19080
  chunkCache: chunkVectorCacheRef.current
19053
19081
  // entityCtx is intentionally omitted on Expo for now — the
19054
19082
  // W5 graph lane is a no-op without it (recall falls through
@@ -19066,7 +19094,8 @@ function useChatStorage(options) {
19066
19094
  baseUrl,
19067
19095
  embeddingModel,
19068
19096
  currentConversationId,
19069
- maskEmbeddingInput
19097
+ maskEmbeddingInput,
19098
+ vaultEmbeddingCache
19070
19099
  ]
19071
19100
  );
19072
19101
  const recallFn = (0, import_react4.useCallback)(
@@ -19091,7 +19120,7 @@ function useChatStorage(options) {
19091
19120
  model: embeddingModel,
19092
19121
  maskInput: maskEmbeddingInput
19093
19122
  },
19094
- vaultCache: vaultEmbeddingCacheRef.current,
19123
+ vaultCache: vaultEmbeddingCache,
19095
19124
  chunkCache: chunkVectorCacheRef.current
19096
19125
  },
19097
19126
  resolvedOptions
@@ -19104,7 +19133,8 @@ function useChatStorage(options) {
19104
19133
  baseUrl,
19105
19134
  embeddingModel,
19106
19135
  currentConversationId,
19107
- maskEmbeddingInput
19136
+ maskEmbeddingInput,
19137
+ vaultEmbeddingCache
19108
19138
  ]
19109
19139
  );
19110
19140
  const getVaultMemories = (0, import_react4.useCallback)(
@@ -8829,6 +8829,29 @@ function createMemoryEngineTool(storageCtx, embeddingOptions, searchOptions, cal
8829
8829
  };
8830
8830
  }
8831
8831
 
8832
+ // src/lib/memoryVault/embeddingCacheRegistry.ts
8833
+ var registry = /* @__PURE__ */ new WeakMap();
8834
+ function buildKey(walletAddress, model) {
8835
+ return JSON.stringify([walletAddress ?? null, model]);
8836
+ }
8837
+ function getVaultEmbeddingCache(database, walletAddress, model) {
8838
+ let perDb = registry.get(database);
8839
+ if (!perDb) {
8840
+ perDb = /* @__PURE__ */ new Map();
8841
+ registry.set(database, perDb);
8842
+ }
8843
+ const key = buildKey(walletAddress, model);
8844
+ let cache = perDb.get(key);
8845
+ if (!cache) {
8846
+ cache = createVaultEmbeddingCache();
8847
+ perDb.set(key, cache);
8848
+ }
8849
+ return cache;
8850
+ }
8851
+ onClearAllEncryptionState(() => {
8852
+ registry = /* @__PURE__ */ new WeakMap();
8853
+ });
8854
+
8832
8855
  // src/lib/memoryVault/tool.ts
8833
8856
  var MANUAL_FACT_TYPES = [
8834
8857
  "identity",
@@ -10275,14 +10298,17 @@ function useChatStorage(options) {
10275
10298
  },
10276
10299
  [vaultCtx]
10277
10300
  );
10278
- const vaultEmbeddingCacheRef = useRef4(createVaultEmbeddingCache());
10301
+ const vaultEmbeddingCache = useMemo(
10302
+ () => getVaultEmbeddingCache(database, walletAddress, embeddingModel),
10303
+ [database, walletAddress, embeddingModel]
10304
+ );
10279
10305
  const chunkVectorCacheRef = useRef4(createChunkVectorCache());
10280
10306
  useEffect4(() => {
10281
10307
  return onClearAllEncryptionState(() => {
10282
- vaultEmbeddingCacheRef.current.clear();
10308
+ vaultEmbeddingCache.clear();
10283
10309
  chunkVectorCacheRef.current.clear();
10284
10310
  });
10285
- }, []);
10311
+ }, [vaultEmbeddingCache]);
10286
10312
  const createRecallTool2 = useCallback4(
10287
10313
  (toolOptions, callbacks) => {
10288
10314
  if (!getToken) {
@@ -10299,7 +10325,7 @@ function useChatStorage(options) {
10299
10325
  model: embeddingModel,
10300
10326
  maskInput: maskEmbeddingInput
10301
10327
  },
10302
- vaultCache: vaultEmbeddingCacheRef.current,
10328
+ vaultCache: vaultEmbeddingCache,
10303
10329
  chunkCache: chunkVectorCacheRef.current
10304
10330
  // entityCtx is intentionally omitted on Expo for now — the
10305
10331
  // W5 graph lane is a no-op without it (recall falls through
@@ -10317,7 +10343,8 @@ function useChatStorage(options) {
10317
10343
  baseUrl,
10318
10344
  embeddingModel,
10319
10345
  currentConversationId,
10320
- maskEmbeddingInput
10346
+ maskEmbeddingInput,
10347
+ vaultEmbeddingCache
10321
10348
  ]
10322
10349
  );
10323
10350
  const recallFn = useCallback4(
@@ -10342,7 +10369,7 @@ function useChatStorage(options) {
10342
10369
  model: embeddingModel,
10343
10370
  maskInput: maskEmbeddingInput
10344
10371
  },
10345
- vaultCache: vaultEmbeddingCacheRef.current,
10372
+ vaultCache: vaultEmbeddingCache,
10346
10373
  chunkCache: chunkVectorCacheRef.current
10347
10374
  },
10348
10375
  resolvedOptions
@@ -10355,7 +10382,8 @@ function useChatStorage(options) {
10355
10382
  baseUrl,
10356
10383
  embeddingModel,
10357
10384
  currentConversationId,
10358
- maskEmbeddingInput
10385
+ maskEmbeddingInput,
10386
+ vaultEmbeddingCache
10359
10387
  ]
10360
10388
  );
10361
10389
  const getVaultMemories = useCallback4(
@@ -18890,6 +18890,31 @@ function createMemoryEngineTool(storageCtx, embeddingOptions, searchOptions, cal
18890
18890
  // src/react/useChatStorage.ts
18891
18891
  init_constants();
18892
18892
 
18893
+ // src/lib/memoryVault/embeddingCacheRegistry.ts
18894
+ init_useEncryption();
18895
+ init_lruCache();
18896
+ var registry = /* @__PURE__ */ new WeakMap();
18897
+ function buildKey(walletAddress, model) {
18898
+ return JSON.stringify([walletAddress ?? null, model]);
18899
+ }
18900
+ function getVaultEmbeddingCache(database, walletAddress, model) {
18901
+ let perDb = registry.get(database);
18902
+ if (!perDb) {
18903
+ perDb = /* @__PURE__ */ new Map();
18904
+ registry.set(database, perDb);
18905
+ }
18906
+ const key = buildKey(walletAddress, model);
18907
+ let cache = perDb.get(key);
18908
+ if (!cache) {
18909
+ cache = createVaultEmbeddingCache();
18910
+ perDb.set(key, cache);
18911
+ }
18912
+ return cache;
18913
+ }
18914
+ onClearAllEncryptionState(() => {
18915
+ registry = /* @__PURE__ */ new WeakMap();
18916
+ });
18917
+
18893
18918
  // src/lib/memoryVault/index.ts
18894
18919
  init_searchTool();
18895
18920
 
@@ -19411,8 +19436,8 @@ var ZipProcessor = class {
19411
19436
  * Set the processor registry for handling nested files
19412
19437
  * This must be called before processing if you want nested file support
19413
19438
  */
19414
- setRegistry(registry) {
19415
- this.registry = registry;
19439
+ setRegistry(registry2) {
19440
+ this.registry = registry2;
19416
19441
  }
19417
19442
  async process(file) {
19418
19443
  try {
@@ -19651,15 +19676,15 @@ var ProcessorRegistry = class {
19651
19676
  init_logger();
19652
19677
  var MAX_TOTAL_IMAGES = 20;
19653
19678
  function createDefaultRegistry() {
19654
- const registry = new ProcessorRegistry();
19655
- registry.register(new PdfProcessor());
19656
- registry.register(new ExcelProcessor());
19657
- registry.register(new WordProcessor());
19658
- registry.register(new TextProcessor());
19679
+ const registry2 = new ProcessorRegistry();
19680
+ registry2.register(new PdfProcessor());
19681
+ registry2.register(new ExcelProcessor());
19682
+ registry2.register(new WordProcessor());
19683
+ registry2.register(new TextProcessor());
19659
19684
  const zipProcessor = new ZipProcessor();
19660
- zipProcessor.setRegistry(registry);
19661
- registry.register(zipProcessor);
19662
- return registry;
19685
+ zipProcessor.setRegistry(registry2);
19686
+ registry2.register(zipProcessor);
19687
+ return registry2;
19663
19688
  }
19664
19689
  var cachedDefaultRegistry = null;
19665
19690
  function getDefaultRegistry() {
@@ -19672,10 +19697,10 @@ function isSupportedFile(file) {
19672
19697
  return getDefaultRegistry().isSupported(file);
19673
19698
  }
19674
19699
  function getSupportedFileTypes() {
19675
- const registry = getDefaultRegistry();
19700
+ const registry2 = getDefaultRegistry();
19676
19701
  return {
19677
- mimeTypes: registry.getSupportedMimeTypes(),
19678
- extensions: registry.getSupportedExtensions()
19702
+ mimeTypes: registry2.getSupportedMimeTypes(),
19703
+ extensions: registry2.getSupportedExtensions()
19679
19704
  };
19680
19705
  }
19681
19706
  function formatExtractedContent(fileName, content, format) {
@@ -19731,16 +19756,16 @@ async function preprocessFiles(files, options = {}) {
19731
19756
  metadata: { processedCount: 0, skippedCount: 0, errorCount: 0 }
19732
19757
  };
19733
19758
  }
19734
- let registry;
19759
+ let registry2;
19735
19760
  if (processors === void 0) {
19736
- registry = getDefaultRegistry();
19761
+ registry2 = getDefaultRegistry();
19737
19762
  } else {
19738
- registry = new ProcessorRegistry();
19763
+ registry2 = new ProcessorRegistry();
19739
19764
  processors.forEach((p) => {
19740
19765
  if (p instanceof ZipProcessor) {
19741
- p.setRegistry(registry);
19766
+ p.setRegistry(registry2);
19742
19767
  }
19743
- registry.register(p);
19768
+ registry2.register(p);
19744
19769
  });
19745
19770
  }
19746
19771
  const extractedTexts = [];
@@ -19759,7 +19784,7 @@ async function preprocessFiles(files, options = {}) {
19759
19784
  skippedCount++;
19760
19785
  continue;
19761
19786
  }
19762
- const processor = registry.findProcessor(file);
19787
+ const processor = registry2.findProcessor(file);
19763
19788
  if (!processor) {
19764
19789
  skippedCount++;
19765
19790
  continue;
@@ -21412,6 +21437,10 @@ function useChatStorage(options) {
21412
21437
  }),
21413
21438
  [database, vaultMemoryCollection, walletAddress, signMessage, embeddedWalletSigner]
21414
21439
  );
21440
+ const vaultEmbeddingCache = (0, import_react5.useMemo)(
21441
+ () => getVaultEmbeddingCache(database, walletAddress, embeddingModel),
21442
+ [database, walletAddress, embeddingModel]
21443
+ );
21415
21444
  const entityCollection = (0, import_react5.useMemo)(() => database.get("entity"), [database]);
21416
21445
  const memoryEntityCollection = (0, import_react5.useMemo)(
21417
21446
  () => database.get("memory_entity"),
@@ -21637,10 +21666,10 @@ function useChatStorage(options) {
21637
21666
  vaultCtx,
21638
21667
  options2,
21639
21668
  embOpts,
21640
- embOpts ? vaultEmbeddingCacheRef.current : void 0
21669
+ embOpts ? vaultEmbeddingCache : void 0
21641
21670
  );
21642
21671
  },
21643
- [vaultCtx, getToken, vaultEmbeddingOptions]
21672
+ [vaultCtx, getToken, vaultEmbeddingOptions, vaultEmbeddingCache]
21644
21673
  );
21645
21674
  const getVaultMemories = (0, import_react5.useCallback)(
21646
21675
  (options2) => {
@@ -21655,7 +21684,7 @@ function useChatStorage(options) {
21655
21684
  eagerEmbedContent(
21656
21685
  content,
21657
21686
  vaultEmbeddingOptions,
21658
- vaultEmbeddingCacheRef.current,
21687
+ vaultEmbeddingCache,
21659
21688
  vaultCtx,
21660
21689
  result.uniqueId
21661
21690
  ).catch((err) => {
@@ -21664,7 +21693,7 @@ function useChatStorage(options) {
21664
21693
  }
21665
21694
  return result;
21666
21695
  },
21667
- [vaultCtx, getToken, vaultEmbeddingOptions]
21696
+ [vaultCtx, getToken, vaultEmbeddingOptions, vaultEmbeddingCache]
21668
21697
  );
21669
21698
  const updateVaultMemory = (0, import_react5.useCallback)(
21670
21699
  async (id, content, scope) => {
@@ -21672,55 +21701,46 @@ function useChatStorage(options) {
21672
21701
  const result = await updateVaultMemoryOp(vaultCtx, id, { content, scope, embedding: null });
21673
21702
  if (result && getToken) {
21674
21703
  if (existing) {
21675
- vaultEmbeddingCacheRef.current.delete(id);
21704
+ vaultEmbeddingCache.delete(id);
21676
21705
  }
21677
- eagerEmbedContent(
21678
- content,
21679
- vaultEmbeddingOptions,
21680
- vaultEmbeddingCacheRef.current,
21681
- vaultCtx,
21682
- id
21683
- ).catch((err) => {
21684
- getLogger().warn("[useChatStorage] Failed to eagerly embed updated vault memory:", err);
21685
- });
21706
+ eagerEmbedContent(content, vaultEmbeddingOptions, vaultEmbeddingCache, vaultCtx, id).catch(
21707
+ (err) => {
21708
+ getLogger().warn("[useChatStorage] Failed to eagerly embed updated vault memory:", err);
21709
+ }
21710
+ );
21686
21711
  }
21687
21712
  return result;
21688
21713
  },
21689
- [vaultCtx, getToken, vaultEmbeddingOptions]
21714
+ [vaultCtx, getToken, vaultEmbeddingOptions, vaultEmbeddingCache]
21690
21715
  );
21691
21716
  const deleteVaultMemory = (0, import_react5.useCallback)(
21692
21717
  async (id) => {
21693
21718
  const existing = await getVaultMemoryOp(vaultCtx, id);
21694
21719
  const result = await deleteVaultMemoryOp(vaultCtx, id);
21695
21720
  if (result && existing) {
21696
- vaultEmbeddingCacheRef.current.delete(id);
21721
+ vaultEmbeddingCache.delete(id);
21697
21722
  }
21698
21723
  return result;
21699
21724
  },
21700
- [vaultCtx]
21725
+ [vaultCtx, vaultEmbeddingCache]
21701
21726
  );
21702
- const vaultEmbeddingCacheRef = (0, import_react5.useRef)(createVaultEmbeddingCache());
21703
21727
  const chunkVectorCacheRef = (0, import_react5.useRef)(createChunkVectorCache());
21704
21728
  const clientToolEmbeddingsCacheRef = (0, import_react5.useRef)(/* @__PURE__ */ new Map());
21705
21729
  (0, import_react5.useEffect)(() => {
21706
21730
  if (!getToken) return;
21707
21731
  void (async () => {
21708
21732
  try {
21709
- await preEmbedVaultMemories(
21710
- vaultCtx,
21711
- vaultEmbeddingOptions,
21712
- vaultEmbeddingCacheRef.current
21713
- );
21733
+ await preEmbedVaultMemories(vaultCtx, vaultEmbeddingOptions, vaultEmbeddingCache);
21714
21734
  } catch {
21715
21735
  }
21716
21736
  })();
21717
- }, [vaultCtx, getToken, vaultEmbeddingOptions]);
21737
+ }, [vaultCtx, getToken, vaultEmbeddingOptions, vaultEmbeddingCache]);
21718
21738
  (0, import_react5.useEffect)(() => {
21719
21739
  return onClearAllEncryptionState(() => {
21720
- vaultEmbeddingCacheRef.current.clear();
21740
+ vaultEmbeddingCache.clear();
21721
21741
  chunkVectorCacheRef.current.clear();
21722
21742
  });
21723
- }, []);
21743
+ }, [vaultEmbeddingCache]);
21724
21744
  const createMemoryVaultSearchTool2 = (0, import_react5.useCallback)(
21725
21745
  (searchOptions) => {
21726
21746
  if (!getToken) {
@@ -21729,11 +21749,11 @@ function useChatStorage(options) {
21729
21749
  return createMemoryVaultSearchTool(
21730
21750
  vaultCtx,
21731
21751
  vaultEmbeddingOptions,
21732
- vaultEmbeddingCacheRef.current,
21752
+ vaultEmbeddingCache,
21733
21753
  searchOptions
21734
21754
  );
21735
21755
  },
21736
- [vaultCtx, getToken, vaultEmbeddingOptions]
21756
+ [vaultCtx, getToken, vaultEmbeddingOptions, vaultEmbeddingCache]
21737
21757
  );
21738
21758
  const createRecallTool2 = (0, import_react5.useCallback)(
21739
21759
  (toolOptions, callbacks) => {
@@ -21746,7 +21766,7 @@ function useChatStorage(options) {
21746
21766
  vaultCtx,
21747
21767
  storageCtx,
21748
21768
  embeddingOptions: vaultEmbeddingOptions,
21749
- vaultCache: vaultEmbeddingCacheRef.current,
21769
+ vaultCache: vaultEmbeddingCache,
21750
21770
  chunkCache: chunkVectorCacheRef.current,
21751
21771
  // Graph lane fires when entityCtx is present and the query
21752
21772
  // contains extractable entities. Empty memory_entity (e.g.
@@ -21758,7 +21778,15 @@ function useChatStorage(options) {
21758
21778
  callbacks
21759
21779
  );
21760
21780
  },
21761
- [vaultCtx, storageCtx, entityCtx, getToken, vaultEmbeddingOptions, currentConversationId]
21781
+ [
21782
+ vaultCtx,
21783
+ storageCtx,
21784
+ entityCtx,
21785
+ getToken,
21786
+ vaultEmbeddingOptions,
21787
+ vaultEmbeddingCache,
21788
+ currentConversationId
21789
+ ]
21762
21790
  );
21763
21791
  const searchVaultMemoriesFn = (0, import_react5.useCallback)(
21764
21792
  async (query, searchOptions) => {
@@ -21767,11 +21795,11 @@ function useChatStorage(options) {
21767
21795
  query,
21768
21796
  vaultCtx,
21769
21797
  vaultEmbeddingOptions,
21770
- vaultEmbeddingCacheRef.current,
21798
+ vaultEmbeddingCache,
21771
21799
  searchOptions
21772
21800
  );
21773
21801
  },
21774
- [vaultCtx, getToken, vaultEmbeddingOptions]
21802
+ [vaultCtx, getToken, vaultEmbeddingOptions, vaultEmbeddingCache]
21775
21803
  );
21776
21804
  const recallFn = (0, import_react5.useCallback)(
21777
21805
  async (query, options2) => {
@@ -21794,7 +21822,7 @@ function useChatStorage(options) {
21794
21822
  // createRecallTool / searchVaultMemoriesFn. Without this, recall()
21795
21823
  // would embed the raw query (often containing the user's PII).
21796
21824
  embeddingOptions: vaultEmbeddingOptions,
21797
- vaultCache: vaultEmbeddingCacheRef.current,
21825
+ vaultCache: vaultEmbeddingCache,
21798
21826
  chunkCache: chunkVectorCacheRef.current,
21799
21827
  // Graph lane fires only when entityCtx is present and the query
21800
21828
  // has extractable entities; empty memory_entity is a graceful
@@ -21804,7 +21832,15 @@ function useChatStorage(options) {
21804
21832
  resolvedOptions
21805
21833
  );
21806
21834
  },
21807
- [vaultCtx, storageCtx, entityCtx, getToken, currentConversationId, vaultEmbeddingOptions]
21835
+ [
21836
+ vaultCtx,
21837
+ storageCtx,
21838
+ entityCtx,
21839
+ getToken,
21840
+ currentConversationId,
21841
+ vaultEmbeddingOptions,
21842
+ vaultEmbeddingCache
21843
+ ]
21808
21844
  );
21809
21845
  const {
21810
21846
  isLoading,
@@ -22914,7 +22950,7 @@ Based on these results, continue with the task.`;
22914
22950
  createRecallTool: createRecallTool2,
22915
22951
  recall: recallFn,
22916
22952
  searchVaultMemories: searchVaultMemoriesFn,
22917
- vaultEmbeddingCache: vaultEmbeddingCacheRef.current,
22953
+ vaultEmbeddingCache,
22918
22954
  getVaultMemories,
22919
22955
  createVaultMemory,
22920
22956
  updateVaultMemory,
@@ -9752,6 +9752,13 @@ interface UseChatStorageResult extends BaseUseChatStorageResult {
9752
9752
  /**
9753
9753
  * The shared vault embedding cache. Use this to eagerly embed content
9754
9754
  * when saving vault memories (via eagerEmbedContent).
9755
+ *
9756
+ * Shared per `(database, walletAddress, embeddingModel)` rather than owned by
9757
+ * this hook instance: every `useChatStorage` on the same three gets this exact
9758
+ * object, and it outlives their unmounts. Writes and evictions are therefore
9759
+ * visible to all of them — which is the point (a memory deleted through one
9760
+ * hook stops being served by the others) but does mean `clear()` clears for
9761
+ * everyone.
9755
9762
  */
9756
9763
  vaultEmbeddingCache: VaultEmbeddingCache;
9757
9764
  /**
@@ -9752,6 +9752,13 @@ interface UseChatStorageResult extends BaseUseChatStorageResult {
9752
9752
  /**
9753
9753
  * The shared vault embedding cache. Use this to eagerly embed content
9754
9754
  * when saving vault memories (via eagerEmbedContent).
9755
+ *
9756
+ * Shared per `(database, walletAddress, embeddingModel)` rather than owned by
9757
+ * this hook instance: every `useChatStorage` on the same three gets this exact
9758
+ * object, and it outlives their unmounts. Writes and evictions are therefore
9759
+ * visible to all of them — which is the point (a memory deleted through one
9760
+ * hook stops being served by the others) but does mean `clear()` clears for
9761
+ * everyone.
9755
9762
  */
9756
9763
  vaultEmbeddingCache: VaultEmbeddingCache;
9757
9764
  /**
@@ -9646,6 +9646,29 @@ function createMemoryEngineTool(storageCtx, embeddingOptions, searchOptions, cal
9646
9646
  };
9647
9647
  }
9648
9648
 
9649
+ // src/lib/memoryVault/embeddingCacheRegistry.ts
9650
+ var registry = /* @__PURE__ */ new WeakMap();
9651
+ function buildKey(walletAddress, model) {
9652
+ return JSON.stringify([walletAddress ?? null, model]);
9653
+ }
9654
+ function getVaultEmbeddingCache(database, walletAddress, model) {
9655
+ let perDb = registry.get(database);
9656
+ if (!perDb) {
9657
+ perDb = /* @__PURE__ */ new Map();
9658
+ registry.set(database, perDb);
9659
+ }
9660
+ const key = buildKey(walletAddress, model);
9661
+ let cache = perDb.get(key);
9662
+ if (!cache) {
9663
+ cache = createVaultEmbeddingCache();
9664
+ perDb.set(key, cache);
9665
+ }
9666
+ return cache;
9667
+ }
9668
+ onClearAllEncryptionState(() => {
9669
+ registry = /* @__PURE__ */ new WeakMap();
9670
+ });
9671
+
9649
9672
  // src/lib/memoryVault/tool.ts
9650
9673
  var MANUAL_FACT_TYPES = [
9651
9674
  "identity",
@@ -10150,8 +10173,8 @@ var ZipProcessor = class {
10150
10173
  * Set the processor registry for handling nested files
10151
10174
  * This must be called before processing if you want nested file support
10152
10175
  */
10153
- setRegistry(registry) {
10154
- this.registry = registry;
10176
+ setRegistry(registry2) {
10177
+ this.registry = registry2;
10155
10178
  }
10156
10179
  async process(file) {
10157
10180
  try {
@@ -10389,15 +10412,15 @@ var ProcessorRegistry = class {
10389
10412
  // src/lib/processors/preprocessor.ts
10390
10413
  var MAX_TOTAL_IMAGES = 20;
10391
10414
  function createDefaultRegistry() {
10392
- const registry = new ProcessorRegistry();
10393
- registry.register(new PdfProcessor());
10394
- registry.register(new ExcelProcessor());
10395
- registry.register(new WordProcessor());
10396
- registry.register(new TextProcessor());
10415
+ const registry2 = new ProcessorRegistry();
10416
+ registry2.register(new PdfProcessor());
10417
+ registry2.register(new ExcelProcessor());
10418
+ registry2.register(new WordProcessor());
10419
+ registry2.register(new TextProcessor());
10397
10420
  const zipProcessor = new ZipProcessor();
10398
- zipProcessor.setRegistry(registry);
10399
- registry.register(zipProcessor);
10400
- return registry;
10421
+ zipProcessor.setRegistry(registry2);
10422
+ registry2.register(zipProcessor);
10423
+ return registry2;
10401
10424
  }
10402
10425
  var cachedDefaultRegistry = null;
10403
10426
  function getDefaultRegistry() {
@@ -10410,10 +10433,10 @@ function isSupportedFile(file) {
10410
10433
  return getDefaultRegistry().isSupported(file);
10411
10434
  }
10412
10435
  function getSupportedFileTypes() {
10413
- const registry = getDefaultRegistry();
10436
+ const registry2 = getDefaultRegistry();
10414
10437
  return {
10415
- mimeTypes: registry.getSupportedMimeTypes(),
10416
- extensions: registry.getSupportedExtensions()
10438
+ mimeTypes: registry2.getSupportedMimeTypes(),
10439
+ extensions: registry2.getSupportedExtensions()
10417
10440
  };
10418
10441
  }
10419
10442
  function formatExtractedContent(fileName, content, format) {
@@ -10469,16 +10492,16 @@ async function preprocessFiles(files, options = {}) {
10469
10492
  metadata: { processedCount: 0, skippedCount: 0, errorCount: 0 }
10470
10493
  };
10471
10494
  }
10472
- let registry;
10495
+ let registry2;
10473
10496
  if (processors === void 0) {
10474
- registry = getDefaultRegistry();
10497
+ registry2 = getDefaultRegistry();
10475
10498
  } else {
10476
- registry = new ProcessorRegistry();
10499
+ registry2 = new ProcessorRegistry();
10477
10500
  processors.forEach((p) => {
10478
10501
  if (p instanceof ZipProcessor) {
10479
- p.setRegistry(registry);
10502
+ p.setRegistry(registry2);
10480
10503
  }
10481
- registry.register(p);
10504
+ registry2.register(p);
10482
10505
  });
10483
10506
  }
10484
10507
  const extractedTexts = [];
@@ -10497,7 +10520,7 @@ async function preprocessFiles(files, options = {}) {
10497
10520
  skippedCount++;
10498
10521
  continue;
10499
10522
  }
10500
- const processor = registry.findProcessor(file);
10523
+ const processor = registry2.findProcessor(file);
10501
10524
  if (!processor) {
10502
10525
  skippedCount++;
10503
10526
  continue;
@@ -12139,6 +12162,10 @@ function useChatStorage(options) {
12139
12162
  }),
12140
12163
  [database, vaultMemoryCollection, walletAddress, signMessage, embeddedWalletSigner]
12141
12164
  );
12165
+ const vaultEmbeddingCache = useMemo3(
12166
+ () => getVaultEmbeddingCache(database, walletAddress, embeddingModel),
12167
+ [database, walletAddress, embeddingModel]
12168
+ );
12142
12169
  const entityCollection = useMemo3(() => database.get("entity"), [database]);
12143
12170
  const memoryEntityCollection = useMemo3(
12144
12171
  () => database.get("memory_entity"),
@@ -12364,10 +12391,10 @@ function useChatStorage(options) {
12364
12391
  vaultCtx,
12365
12392
  options2,
12366
12393
  embOpts,
12367
- embOpts ? vaultEmbeddingCacheRef.current : void 0
12394
+ embOpts ? vaultEmbeddingCache : void 0
12368
12395
  );
12369
12396
  },
12370
- [vaultCtx, getToken, vaultEmbeddingOptions]
12397
+ [vaultCtx, getToken, vaultEmbeddingOptions, vaultEmbeddingCache]
12371
12398
  );
12372
12399
  const getVaultMemories = useCallback4(
12373
12400
  (options2) => {
@@ -12382,7 +12409,7 @@ function useChatStorage(options) {
12382
12409
  eagerEmbedContent(
12383
12410
  content,
12384
12411
  vaultEmbeddingOptions,
12385
- vaultEmbeddingCacheRef.current,
12412
+ vaultEmbeddingCache,
12386
12413
  vaultCtx,
12387
12414
  result.uniqueId
12388
12415
  ).catch((err) => {
@@ -12391,7 +12418,7 @@ function useChatStorage(options) {
12391
12418
  }
12392
12419
  return result;
12393
12420
  },
12394
- [vaultCtx, getToken, vaultEmbeddingOptions]
12421
+ [vaultCtx, getToken, vaultEmbeddingOptions, vaultEmbeddingCache]
12395
12422
  );
12396
12423
  const updateVaultMemory = useCallback4(
12397
12424
  async (id, content, scope) => {
@@ -12399,55 +12426,46 @@ function useChatStorage(options) {
12399
12426
  const result = await updateVaultMemoryOp(vaultCtx, id, { content, scope, embedding: null });
12400
12427
  if (result && getToken) {
12401
12428
  if (existing) {
12402
- vaultEmbeddingCacheRef.current.delete(id);
12429
+ vaultEmbeddingCache.delete(id);
12403
12430
  }
12404
- eagerEmbedContent(
12405
- content,
12406
- vaultEmbeddingOptions,
12407
- vaultEmbeddingCacheRef.current,
12408
- vaultCtx,
12409
- id
12410
- ).catch((err) => {
12411
- getLogger().warn("[useChatStorage] Failed to eagerly embed updated vault memory:", err);
12412
- });
12431
+ eagerEmbedContent(content, vaultEmbeddingOptions, vaultEmbeddingCache, vaultCtx, id).catch(
12432
+ (err) => {
12433
+ getLogger().warn("[useChatStorage] Failed to eagerly embed updated vault memory:", err);
12434
+ }
12435
+ );
12413
12436
  }
12414
12437
  return result;
12415
12438
  },
12416
- [vaultCtx, getToken, vaultEmbeddingOptions]
12439
+ [vaultCtx, getToken, vaultEmbeddingOptions, vaultEmbeddingCache]
12417
12440
  );
12418
12441
  const deleteVaultMemory = useCallback4(
12419
12442
  async (id) => {
12420
12443
  const existing = await getVaultMemoryOp(vaultCtx, id);
12421
12444
  const result = await deleteVaultMemoryOp(vaultCtx, id);
12422
12445
  if (result && existing) {
12423
- vaultEmbeddingCacheRef.current.delete(id);
12446
+ vaultEmbeddingCache.delete(id);
12424
12447
  }
12425
12448
  return result;
12426
12449
  },
12427
- [vaultCtx]
12450
+ [vaultCtx, vaultEmbeddingCache]
12428
12451
  );
12429
- const vaultEmbeddingCacheRef = useRef4(createVaultEmbeddingCache());
12430
12452
  const chunkVectorCacheRef = useRef4(createChunkVectorCache());
12431
12453
  const clientToolEmbeddingsCacheRef = useRef4(/* @__PURE__ */ new Map());
12432
12454
  useEffect3(() => {
12433
12455
  if (!getToken) return;
12434
12456
  void (async () => {
12435
12457
  try {
12436
- await preEmbedVaultMemories(
12437
- vaultCtx,
12438
- vaultEmbeddingOptions,
12439
- vaultEmbeddingCacheRef.current
12440
- );
12458
+ await preEmbedVaultMemories(vaultCtx, vaultEmbeddingOptions, vaultEmbeddingCache);
12441
12459
  } catch {
12442
12460
  }
12443
12461
  })();
12444
- }, [vaultCtx, getToken, vaultEmbeddingOptions]);
12462
+ }, [vaultCtx, getToken, vaultEmbeddingOptions, vaultEmbeddingCache]);
12445
12463
  useEffect3(() => {
12446
12464
  return onClearAllEncryptionState(() => {
12447
- vaultEmbeddingCacheRef.current.clear();
12465
+ vaultEmbeddingCache.clear();
12448
12466
  chunkVectorCacheRef.current.clear();
12449
12467
  });
12450
- }, []);
12468
+ }, [vaultEmbeddingCache]);
12451
12469
  const createMemoryVaultSearchTool2 = useCallback4(
12452
12470
  (searchOptions) => {
12453
12471
  if (!getToken) {
@@ -12456,11 +12474,11 @@ function useChatStorage(options) {
12456
12474
  return createMemoryVaultSearchTool(
12457
12475
  vaultCtx,
12458
12476
  vaultEmbeddingOptions,
12459
- vaultEmbeddingCacheRef.current,
12477
+ vaultEmbeddingCache,
12460
12478
  searchOptions
12461
12479
  );
12462
12480
  },
12463
- [vaultCtx, getToken, vaultEmbeddingOptions]
12481
+ [vaultCtx, getToken, vaultEmbeddingOptions, vaultEmbeddingCache]
12464
12482
  );
12465
12483
  const createRecallTool2 = useCallback4(
12466
12484
  (toolOptions, callbacks) => {
@@ -12473,7 +12491,7 @@ function useChatStorage(options) {
12473
12491
  vaultCtx,
12474
12492
  storageCtx,
12475
12493
  embeddingOptions: vaultEmbeddingOptions,
12476
- vaultCache: vaultEmbeddingCacheRef.current,
12494
+ vaultCache: vaultEmbeddingCache,
12477
12495
  chunkCache: chunkVectorCacheRef.current,
12478
12496
  // Graph lane fires when entityCtx is present and the query
12479
12497
  // contains extractable entities. Empty memory_entity (e.g.
@@ -12485,7 +12503,15 @@ function useChatStorage(options) {
12485
12503
  callbacks
12486
12504
  );
12487
12505
  },
12488
- [vaultCtx, storageCtx, entityCtx, getToken, vaultEmbeddingOptions, currentConversationId]
12506
+ [
12507
+ vaultCtx,
12508
+ storageCtx,
12509
+ entityCtx,
12510
+ getToken,
12511
+ vaultEmbeddingOptions,
12512
+ vaultEmbeddingCache,
12513
+ currentConversationId
12514
+ ]
12489
12515
  );
12490
12516
  const searchVaultMemoriesFn = useCallback4(
12491
12517
  async (query, searchOptions) => {
@@ -12494,11 +12520,11 @@ function useChatStorage(options) {
12494
12520
  query,
12495
12521
  vaultCtx,
12496
12522
  vaultEmbeddingOptions,
12497
- vaultEmbeddingCacheRef.current,
12523
+ vaultEmbeddingCache,
12498
12524
  searchOptions
12499
12525
  );
12500
12526
  },
12501
- [vaultCtx, getToken, vaultEmbeddingOptions]
12527
+ [vaultCtx, getToken, vaultEmbeddingOptions, vaultEmbeddingCache]
12502
12528
  );
12503
12529
  const recallFn = useCallback4(
12504
12530
  async (query, options2) => {
@@ -12521,7 +12547,7 @@ function useChatStorage(options) {
12521
12547
  // createRecallTool / searchVaultMemoriesFn. Without this, recall()
12522
12548
  // would embed the raw query (often containing the user's PII).
12523
12549
  embeddingOptions: vaultEmbeddingOptions,
12524
- vaultCache: vaultEmbeddingCacheRef.current,
12550
+ vaultCache: vaultEmbeddingCache,
12525
12551
  chunkCache: chunkVectorCacheRef.current,
12526
12552
  // Graph lane fires only when entityCtx is present and the query
12527
12553
  // has extractable entities; empty memory_entity is a graceful
@@ -12531,7 +12557,15 @@ function useChatStorage(options) {
12531
12557
  resolvedOptions
12532
12558
  );
12533
12559
  },
12534
- [vaultCtx, storageCtx, entityCtx, getToken, currentConversationId, vaultEmbeddingOptions]
12560
+ [
12561
+ vaultCtx,
12562
+ storageCtx,
12563
+ entityCtx,
12564
+ getToken,
12565
+ currentConversationId,
12566
+ vaultEmbeddingOptions,
12567
+ vaultEmbeddingCache
12568
+ ]
12535
12569
  );
12536
12570
  const {
12537
12571
  isLoading,
@@ -13641,7 +13675,7 @@ Based on these results, continue with the task.`;
13641
13675
  createRecallTool: createRecallTool2,
13642
13676
  recall: recallFn,
13643
13677
  searchVaultMemories: searchVaultMemoriesFn,
13644
- vaultEmbeddingCache: vaultEmbeddingCacheRef.current,
13678
+ vaultEmbeddingCache,
13645
13679
  getVaultMemories,
13646
13680
  createVaultMemory,
13647
13681
  updateVaultMemory,
@@ -20310,7 +20310,7 @@ function createMemoryVaultSearchTool(vaultCtx, embeddingOptions, cache, searchOp
20310
20310
  legacy.map((r) => ({ id: r.uniqueId, content: r.content, score: r.similarity }))
20311
20311
  );
20312
20312
  }
20313
- const { recall: recall2 } = await import("./recall-RMCSM6L6.mjs");
20313
+ const { recall: recall2 } = await import("./recall-YZWIV6IH.mjs");
20314
20314
  let recallDegraded = [];
20315
20315
  const result = await recall2(
20316
20316
  query,
@@ -21357,14 +21357,14 @@ export {
21357
21357
  embedAllMessages,
21358
21358
  chunkAndEmbedMessage,
21359
21359
  chunkAndEmbedAllMessages,
21360
+ DEFAULT_VAULT_CACHE_SIZE,
21361
+ LRUCache,
21362
+ createVaultEmbeddingCache,
21360
21363
  RECALL_TOOL_NAME,
21361
21364
  RECALL_MAX_LIMIT,
21362
21365
  EMBEDDINGS_DEGRADED_EMPTY,
21363
21366
  RerankerUnavailableError,
21364
21367
  isRerankerAvailable,
21365
- DEFAULT_VAULT_CACHE_SIZE,
21366
- LRUCache,
21367
- createVaultEmbeddingCache,
21368
21368
  MAX_HOPS,
21369
21369
  ENTITY_FANOUT,
21370
21370
  NODE_BUDGET,
@@ -19576,6 +19576,44 @@ var init_embeddings = __esm({
19576
19576
  }
19577
19577
  });
19578
19578
 
19579
+ // src/lib/memoryVault/lruCache.ts
19580
+ function createVaultEmbeddingCache(maxSize = DEFAULT_VAULT_CACHE_SIZE) {
19581
+ return new LRUCache(maxSize);
19582
+ }
19583
+ var DEFAULT_VAULT_CACHE_SIZE, LRUCache;
19584
+ var init_lruCache = __esm({
19585
+ "src/lib/memoryVault/lruCache.ts"() {
19586
+ "use strict";
19587
+ DEFAULT_VAULT_CACHE_SIZE = 5e3;
19588
+ LRUCache = class extends Map {
19589
+ constructor(maxSize) {
19590
+ super();
19591
+ this.maxSize = maxSize;
19592
+ }
19593
+ get(key) {
19594
+ if (!super.has(key)) return void 0;
19595
+ const value = super.get(key);
19596
+ super.delete(key);
19597
+ super.set(key, value);
19598
+ return value;
19599
+ }
19600
+ set(key, value) {
19601
+ if (super.has(key)) {
19602
+ super.delete(key);
19603
+ }
19604
+ super.set(key, value);
19605
+ if (this.size > this.maxSize) {
19606
+ const oldest = this.keys().next().value;
19607
+ if (oldest !== void 0) {
19608
+ super.delete(oldest);
19609
+ }
19610
+ }
19611
+ return this;
19612
+ }
19613
+ };
19614
+ }
19615
+ });
19616
+
19579
19617
  // src/lib/memory/mmr.ts
19580
19618
  function applyMMR(candidates, k, lambda = 0.5) {
19581
19619
  if (candidates.length === 0 || k <= 0) return [];
@@ -20355,44 +20393,6 @@ Output strict JSON. No prose.`;
20355
20393
  }
20356
20394
  });
20357
20395
 
20358
- // src/lib/memoryVault/lruCache.ts
20359
- function createVaultEmbeddingCache(maxSize = DEFAULT_VAULT_CACHE_SIZE) {
20360
- return new LRUCache(maxSize);
20361
- }
20362
- var DEFAULT_VAULT_CACHE_SIZE, LRUCache;
20363
- var init_lruCache = __esm({
20364
- "src/lib/memoryVault/lruCache.ts"() {
20365
- "use strict";
20366
- DEFAULT_VAULT_CACHE_SIZE = 5e3;
20367
- LRUCache = class extends Map {
20368
- constructor(maxSize) {
20369
- super();
20370
- this.maxSize = maxSize;
20371
- }
20372
- get(key) {
20373
- if (!super.has(key)) return void 0;
20374
- const value = super.get(key);
20375
- super.delete(key);
20376
- super.set(key, value);
20377
- return value;
20378
- }
20379
- set(key, value) {
20380
- if (super.has(key)) {
20381
- super.delete(key);
20382
- }
20383
- super.set(key, value);
20384
- if (this.size > this.maxSize) {
20385
- const oldest = this.keys().next().value;
20386
- if (oldest !== void 0) {
20387
- super.delete(oldest);
20388
- }
20389
- }
20390
- return this;
20391
- }
20392
- };
20393
- }
20394
- });
20395
-
20396
20396
  // src/lib/memory/queryEntities.ts
20397
20397
  function hasMeaningfulCandidate(candidates) {
20398
20398
  for (const candidate of candidates) {
@@ -133,7 +133,7 @@ import {
133
133
  updateVaultMemoryOp,
134
134
  upsertMessageOp,
135
135
  vaultMemoryToStored
136
- } from "./chunk-ME6ZQN52.mjs";
136
+ } from "./chunk-WZE6ZVKE.mjs";
137
137
  import {
138
138
  createStreamingDeAnonymizer,
139
139
  notifyConsolidationFallback,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  recall
3
- } from "./chunk-ME6ZQN52.mjs";
3
+ } from "./chunk-WZE6ZVKE.mjs";
4
4
  import "./chunk-OBDRKQQI.mjs";
5
5
  import "./chunk-3RPGXXPZ.mjs";
6
6
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anuma/sdk",
3
- "version": "3.13.1",
3
+ "version": "3.13.2",
4
4
  "description": "",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",