@anuma/sdk 3.13.0 → 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.
@@ -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,
@@ -22274,6 +22310,45 @@ function useChatStorage(options) {
22274
22310
  }
22275
22311
  }
22276
22312
  const { callRedactor, callPiiRedaction, maskForCall } = resolvePiiForCall(convId);
22313
+ const isServerToolsFunction = typeof serverToolsFilter === "function";
22314
+ const needsEmbeddings = isServerToolsFunction || !!clientToolsFilter || !!clientTools?.length;
22315
+ const embeddingsPromise = needsEmbeddings && getToken ? (async () => {
22316
+ try {
22317
+ const embeddingOptions = { getToken, baseUrl, model: embeddingModel };
22318
+ if (shouldChunkMessage(contentForStorage, DEFAULT_CHUNK_SIZE)) {
22319
+ const textChunks = chunkText(contentForStorage);
22320
+ const chunkTexts = textChunks.map((c) => maskForCall(c.text));
22321
+ return {
22322
+ embeddings: await generateEmbeddings(chunkTexts, embeddingOptions),
22323
+ failed: false
22324
+ };
22325
+ }
22326
+ if (contentForStorage.length >= MIN_CONTENT_LENGTH_FOR_TOOLS) {
22327
+ return {
22328
+ embeddings: await generateEmbedding(
22329
+ maskForCall(contentForStorage),
22330
+ embeddingOptions
22331
+ ),
22332
+ failed: false
22333
+ };
22334
+ }
22335
+ return { failed: false };
22336
+ } catch {
22337
+ return { failed: true };
22338
+ }
22339
+ })() : null;
22340
+ const serverToolsPromise = getToken && !(Array.isArray(serverToolsFilter) && serverToolsFilter.length === 0) ? (async () => {
22341
+ try {
22342
+ return await getServerTools({
22343
+ baseUrl,
22344
+ cacheExpirationMs: serverToolsConfig?.cacheExpirationMs,
22345
+ getToken,
22346
+ cache: serverToolsConfig?.cache
22347
+ });
22348
+ } catch {
22349
+ return null;
22350
+ }
22351
+ })() : null;
22277
22352
  let messagesToSend;
22278
22353
  const storedMessages = await getMessagesOp(storageCtx, convId);
22279
22354
  const knownToolCallEventIds = /* @__PURE__ */ new Set();
@@ -22453,44 +22528,27 @@ function useChatStorage(options) {
22453
22528
  let filteredServerTools = [];
22454
22529
  let userMessageEmbeddings;
22455
22530
  let userMessageEmbeddingsFailed = false;
22456
- const isServerToolsFunction = typeof serverToolsFilter === "function";
22457
- const needsEmbeddings = isServerToolsFunction || !!clientToolsFilter || !!clientTools?.length;
22458
- if (needsEmbeddings && getToken) {
22459
- try {
22460
- const embeddingOptions = { getToken, baseUrl, model: embeddingModel };
22461
- if (shouldChunkMessage(contentForStorage, DEFAULT_CHUNK_SIZE)) {
22462
- const textChunks = chunkText(contentForStorage);
22463
- const chunkTexts = textChunks.map((c) => maskForCall(c.text));
22464
- userMessageEmbeddings = await generateEmbeddings(chunkTexts, embeddingOptions);
22465
- } else if (contentForStorage.length >= MIN_CONTENT_LENGTH_FOR_TOOLS) {
22466
- userMessageEmbeddings = await generateEmbedding(
22467
- maskForCall(contentForStorage),
22468
- embeddingOptions
22469
- );
22470
- }
22471
- } catch {
22472
- userMessageEmbeddingsFailed = true;
22473
- }
22474
- }
22475
- if (getToken && !(Array.isArray(serverToolsFilter) && serverToolsFilter.length === 0)) {
22476
- try {
22477
- const allServerTools = await getServerTools({
22478
- baseUrl,
22479
- cacheExpirationMs: serverToolsConfig?.cacheExpirationMs,
22480
- getToken,
22481
- cache: serverToolsConfig?.cache
22482
- });
22483
- if (serverToolsConfig?.deferLoading?.enabled && effectiveApiType === "responses") {
22484
- filteredServerTools = allServerTools;
22485
- } else if (isServerToolsFunction) {
22486
- if (userMessageEmbeddings) {
22487
- const toolNames = serverToolsFilter(userMessageEmbeddings, allServerTools);
22488
- filteredServerTools = filterServerTools(allServerTools, toolNames);
22531
+ if (embeddingsPromise) {
22532
+ const embeddingsResult = await embeddingsPromise;
22533
+ userMessageEmbeddings = embeddingsResult.embeddings;
22534
+ userMessageEmbeddingsFailed = embeddingsResult.failed;
22535
+ }
22536
+ if (serverToolsPromise) {
22537
+ const allServerTools = await serverToolsPromise;
22538
+ if (allServerTools) {
22539
+ try {
22540
+ if (serverToolsConfig?.deferLoading?.enabled && effectiveApiType === "responses") {
22541
+ filteredServerTools = allServerTools;
22542
+ } else if (isServerToolsFunction) {
22543
+ if (userMessageEmbeddings) {
22544
+ const toolNames = serverToolsFilter(userMessageEmbeddings, allServerTools);
22545
+ filteredServerTools = filterServerTools(allServerTools, toolNames);
22546
+ }
22547
+ } else {
22548
+ filteredServerTools = filterServerTools(allServerTools, serverToolsFilter);
22489
22549
  }
22490
- } else {
22491
- filteredServerTools = filterServerTools(allServerTools, serverToolsFilter);
22550
+ } catch {
22492
22551
  }
22493
- } catch {
22494
22552
  }
22495
22553
  }
22496
22554
  let filteredClientTools = clientTools;
@@ -22892,7 +22950,7 @@ Based on these results, continue with the task.`;
22892
22950
  createRecallTool: createRecallTool2,
22893
22951
  recall: recallFn,
22894
22952
  searchVaultMemories: searchVaultMemoriesFn,
22895
- vaultEmbeddingCache: vaultEmbeddingCacheRef.current,
22953
+ vaultEmbeddingCache,
22896
22954
  getVaultMemories,
22897
22955
  createVaultMemory,
22898
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
  /**