@anuma/sdk 10.4.1 → 10.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1846,10 +1846,13 @@ async function refreshNotionAccessToken(params) {
1846
1846
  var HEADER = "[Tool Execution Results]\n\n";
1847
1847
  var FOOTER = "\n\nBased on these results, continue with the task.";
1848
1848
  var ENTRY_SEPARATOR = "\n\n";
1849
- var TOOL_RESULT_FOOTER_LINE = FOOTER.trim();
1849
+ var TRUNCATION_MARKER_HEAD = "... (tool output truncated, ";
1850
+ var TRUNCATION_MARKER_TAIL = " characters omitted)";
1850
1851
  var MAX_PERSISTED_TOOL_RESULT_CHARS = 1e5;
1851
1852
  function buildToolResultContent(results) {
1852
- const entries = results.map((r) => `Tool "${r.name}" returned: ${JSON.stringify(r.result)}`);
1853
+ const entries = results.map(
1854
+ (r) => `Tool "${r.name}" returned: ${JSON.stringify(r.result)}`.replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029")
1855
+ );
1853
1856
  const framing = HEADER.length + FOOTER.length + ENTRY_SEPARATOR.length * Math.max(0, entries.length - 1);
1854
1857
  const summary = capEntries(entries, MAX_PERSISTED_TOOL_RESULT_CHARS - framing).join(
1855
1858
  ENTRY_SEPARATOR
@@ -1880,7 +1883,13 @@ function truncateEntry(entry, allowance) {
1880
1883
  function truncationMarker(omitted) {
1881
1884
  return `
1882
1885
 
1883
- ... (tool output truncated, ${omitted} characters omitted)`;
1886
+ ${TRUNCATION_MARKER_HEAD}${omitted}${TRUNCATION_MARKER_TAIL}`;
1887
+ }
1888
+ function isTruncationMarkerLine(line) {
1889
+ const head = TRUNCATION_MARKER_HEAD;
1890
+ const tail = TRUNCATION_MARKER_TAIL;
1891
+ if (!line.startsWith(head) || !line.endsWith(tail)) return false;
1892
+ return /^\d+$/.test(line.slice(head.length, line.length - tail.length));
1884
1893
  }
1885
1894
 
1886
1895
  // src/lib/tools/toolCatalog.ts
@@ -1986,7 +1995,7 @@ ${neutralised}
1986
1995
  // src/lib/chat/toolResults.ts
1987
1996
  var TOOL_RESULTS_PREFIX = "[Tool Execution Results]";
1988
1997
  var DISPLAY_CARD_PLACEHOLDER = "[displayed a card to the user with the tool result]";
1989
- var TOOL_LINE = /^Tool "([^"]+)" returned: (.*)$/;
1998
+ var TOOL_LINE = /^Tool "([^"]+)" returned: ([\s\S]*)$/;
1990
1999
  var TOOL_RESULT_ORIGIN = "tool_result";
1991
2000
  function isToolResultsRow(row) {
1992
2001
  if (row.origin === TOOL_RESULT_ORIGIN) return true;
@@ -2004,8 +2013,7 @@ function parseToolResultSegments(content) {
2004
2013
  continue;
2005
2014
  }
2006
2015
  const current = segments[segments.length - 1];
2007
- if (!current || line === "" || line === TOOL_RESULT_FOOTER_LINE) continue;
2008
- if (line === TOOL_RESULTS_PREFIX) continue;
2016
+ if (!current || !isTruncationMarkerLine(line)) continue;
2009
2017
  current.line = `${current.line}
2010
2018
  ${line}`;
2011
2019
  }
@@ -2157,6 +2165,7 @@ function notifyKeyAvailable(address) {
2157
2165
  }
2158
2166
  }
2159
2167
  var keyPairStore = /* @__PURE__ */ new Map();
2168
+ var pendingKeyPairRequests = /* @__PURE__ */ new Map();
2160
2169
  function getStoredKeyByVersion(address, version) {
2161
2170
  const keys = encryptionKeyStore.get(address);
2162
2171
  if (!keys) return null;
@@ -2179,6 +2188,7 @@ function clearAllEncryptionState() {
2179
2188
  cryptoKeyCache.clear();
2180
2189
  keyAvailableCallbacks.clear();
2181
2190
  pendingKeyRequests.clear();
2191
+ pendingKeyPairRequests.clear();
2182
2192
  pendingCandidateDerives.clear();
2183
2193
  refreshCandidatesByAddress.clear();
2184
2194
  divergentDeriveAddresses.clear();
@@ -2795,6 +2805,21 @@ async function requestKeyPair(walletAddress, signMessage, embeddedWalletSigner)
2795
2805
  if (existingKeyPair) {
2796
2806
  return;
2797
2807
  }
2808
+ const pending = pendingKeyPairRequests.get(walletAddress);
2809
+ if (pending) {
2810
+ return pending;
2811
+ }
2812
+ const promise = loadOrCreateKeyPair(walletAddress, signMessage, embeddedWalletSigner);
2813
+ pendingKeyPairRequests.set(walletAddress, promise);
2814
+ try {
2815
+ await promise;
2816
+ } finally {
2817
+ if (pendingKeyPairRequests.get(walletAddress) === promise) {
2818
+ pendingKeyPairRequests.delete(walletAddress);
2819
+ }
2820
+ }
2821
+ }
2822
+ async function loadOrCreateKeyPair(walletAddress, signMessage, embeddedWalletSigner) {
2798
2823
  const startEpoch = sessionEpoch;
2799
2824
  try {
2800
2825
  const persistedKeyPair = await loadPersistedKeyPair(walletAddress);
@@ -210,10 +210,13 @@ async function refreshNotionAccessToken(params) {
210
210
  var HEADER = "[Tool Execution Results]\n\n";
211
211
  var FOOTER = "\n\nBased on these results, continue with the task.";
212
212
  var ENTRY_SEPARATOR = "\n\n";
213
- var TOOL_RESULT_FOOTER_LINE = FOOTER.trim();
213
+ var TRUNCATION_MARKER_HEAD = "... (tool output truncated, ";
214
+ var TRUNCATION_MARKER_TAIL = " characters omitted)";
214
215
  var MAX_PERSISTED_TOOL_RESULT_CHARS = 1e5;
215
216
  function buildToolResultContent(results) {
216
- const entries = results.map((r) => `Tool "${r.name}" returned: ${JSON.stringify(r.result)}`);
217
+ const entries = results.map(
218
+ (r) => `Tool "${r.name}" returned: ${JSON.stringify(r.result)}`.replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029")
219
+ );
217
220
  const framing = HEADER.length + FOOTER.length + ENTRY_SEPARATOR.length * Math.max(0, entries.length - 1);
218
221
  const summary = capEntries(entries, MAX_PERSISTED_TOOL_RESULT_CHARS - framing).join(
219
222
  ENTRY_SEPARATOR
@@ -244,7 +247,13 @@ function truncateEntry(entry, allowance) {
244
247
  function truncationMarker(omitted) {
245
248
  return `
246
249
 
247
- ... (tool output truncated, ${omitted} characters omitted)`;
250
+ ${TRUNCATION_MARKER_HEAD}${omitted}${TRUNCATION_MARKER_TAIL}`;
251
+ }
252
+ function isTruncationMarkerLine(line) {
253
+ const head = TRUNCATION_MARKER_HEAD;
254
+ const tail = TRUNCATION_MARKER_TAIL;
255
+ if (!line.startsWith(head) || !line.endsWith(tail)) return false;
256
+ return /^\d+$/.test(line.slice(head.length, line.length - tail.length));
248
257
  }
249
258
 
250
259
  // src/lib/tools/toolCatalog.ts
@@ -350,7 +359,7 @@ ${neutralised}
350
359
  // src/lib/chat/toolResults.ts
351
360
  var TOOL_RESULTS_PREFIX = "[Tool Execution Results]";
352
361
  var DISPLAY_CARD_PLACEHOLDER = "[displayed a card to the user with the tool result]";
353
- var TOOL_LINE = /^Tool "([^"]+)" returned: (.*)$/;
362
+ var TOOL_LINE = /^Tool "([^"]+)" returned: ([\s\S]*)$/;
354
363
  var TOOL_RESULT_ORIGIN = "tool_result";
355
364
  function isToolResultsRow(row) {
356
365
  if (row.origin === TOOL_RESULT_ORIGIN) return true;
@@ -368,8 +377,7 @@ function parseToolResultSegments(content) {
368
377
  continue;
369
378
  }
370
379
  const current = segments[segments.length - 1];
371
- if (!current || line === "" || line === TOOL_RESULT_FOOTER_LINE) continue;
372
- if (line === TOOL_RESULTS_PREFIX) continue;
380
+ if (!current || !isTruncationMarkerLine(line)) continue;
373
381
  current.line = `${current.line}
374
382
  ${line}`;
375
383
  }
@@ -520,6 +528,7 @@ function notifyKeyAvailable(address) {
520
528
  }
521
529
  }
522
530
  var keyPairStore = /* @__PURE__ */ new Map();
531
+ var pendingKeyPairRequests = /* @__PURE__ */ new Map();
523
532
  function getStoredKeyByVersion(address, version) {
524
533
  const keys = encryptionKeyStore.get(address);
525
534
  if (!keys) return null;
@@ -542,6 +551,7 @@ function clearAllEncryptionState() {
542
551
  cryptoKeyCache.clear();
543
552
  keyAvailableCallbacks.clear();
544
553
  pendingKeyRequests.clear();
554
+ pendingKeyPairRequests.clear();
545
555
  pendingCandidateDerives.clear();
546
556
  refreshCandidatesByAddress.clear();
547
557
  divergentDeriveAddresses.clear();
@@ -1158,6 +1168,21 @@ async function requestKeyPair(walletAddress, signMessage, embeddedWalletSigner)
1158
1168
  if (existingKeyPair) {
1159
1169
  return;
1160
1170
  }
1171
+ const pending = pendingKeyPairRequests.get(walletAddress);
1172
+ if (pending) {
1173
+ return pending;
1174
+ }
1175
+ const promise = loadOrCreateKeyPair(walletAddress, signMessage, embeddedWalletSigner);
1176
+ pendingKeyPairRequests.set(walletAddress, promise);
1177
+ try {
1178
+ await promise;
1179
+ } finally {
1180
+ if (pendingKeyPairRequests.get(walletAddress) === promise) {
1181
+ pendingKeyPairRequests.delete(walletAddress);
1182
+ }
1183
+ }
1184
+ }
1185
+ async function loadOrCreateKeyPair(walletAddress, signMessage, embeddedWalletSigner) {
1161
1186
  const startEpoch = sessionEpoch;
1162
1187
  try {
1163
1188
  const persistedKeyPair = await loadPersistedKeyPair(walletAddress);
@@ -1924,6 +1924,7 @@ function notifyKeyAvailable(address) {
1924
1924
  }
1925
1925
  }
1926
1926
  var keyPairStore = /* @__PURE__ */ new Map();
1927
+ var pendingKeyPairRequests = /* @__PURE__ */ new Map();
1927
1928
  function getStoredKeyByVersion(address, version) {
1928
1929
  const keys = encryptionKeyStore.get(address);
1929
1930
  if (!keys) return null;
@@ -1946,6 +1947,7 @@ function clearAllEncryptionState() {
1946
1947
  cryptoKeyCache.clear();
1947
1948
  keyAvailableCallbacks.clear();
1948
1949
  pendingKeyRequests.clear();
1950
+ pendingKeyPairRequests.clear();
1949
1951
  pendingCandidateDerives.clear();
1950
1952
  refreshCandidatesByAddress.clear();
1951
1953
  divergentDeriveAddresses.clear();
@@ -2613,6 +2615,21 @@ async function requestKeyPair(walletAddress, signMessage, embeddedWalletSigner)
2613
2615
  if (existingKeyPair) {
2614
2616
  return;
2615
2617
  }
2618
+ const pending = pendingKeyPairRequests.get(walletAddress);
2619
+ if (pending) {
2620
+ return pending;
2621
+ }
2622
+ const promise = loadOrCreateKeyPair(walletAddress, signMessage, embeddedWalletSigner);
2623
+ pendingKeyPairRequests.set(walletAddress, promise);
2624
+ try {
2625
+ await promise;
2626
+ } finally {
2627
+ if (pendingKeyPairRequests.get(walletAddress) === promise) {
2628
+ pendingKeyPairRequests.delete(walletAddress);
2629
+ }
2630
+ }
2631
+ }
2632
+ async function loadOrCreateKeyPair(walletAddress, signMessage, embeddedWalletSigner) {
2616
2633
  const startEpoch = sessionEpoch;
2617
2634
  try {
2618
2635
  const persistedKeyPair = await loadPersistedKeyPair(walletAddress);
@@ -3321,10 +3338,13 @@ function getNotionMCPUrl() {
3321
3338
  var HEADER = "[Tool Execution Results]\n\n";
3322
3339
  var FOOTER = "\n\nBased on these results, continue with the task.";
3323
3340
  var ENTRY_SEPARATOR = "\n\n";
3324
- var TOOL_RESULT_FOOTER_LINE = FOOTER.trim();
3341
+ var TRUNCATION_MARKER_HEAD = "... (tool output truncated, ";
3342
+ var TRUNCATION_MARKER_TAIL = " characters omitted)";
3325
3343
  var MAX_PERSISTED_TOOL_RESULT_CHARS = 1e5;
3326
3344
  function buildToolResultContent(results) {
3327
- const entries = results.map((r) => `Tool "${r.name}" returned: ${JSON.stringify(r.result)}`);
3345
+ const entries = results.map(
3346
+ (r) => `Tool "${r.name}" returned: ${JSON.stringify(r.result)}`.replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029")
3347
+ );
3328
3348
  const framing = HEADER.length + FOOTER.length + ENTRY_SEPARATOR.length * Math.max(0, entries.length - 1);
3329
3349
  const summary = capEntries(entries, MAX_PERSISTED_TOOL_RESULT_CHARS - framing).join(
3330
3350
  ENTRY_SEPARATOR
@@ -3355,7 +3375,13 @@ function truncateEntry(entry, allowance) {
3355
3375
  function truncationMarker(omitted) {
3356
3376
  return `
3357
3377
 
3358
- ... (tool output truncated, ${omitted} characters omitted)`;
3378
+ ${TRUNCATION_MARKER_HEAD}${omitted}${TRUNCATION_MARKER_TAIL}`;
3379
+ }
3380
+ function isTruncationMarkerLine(line) {
3381
+ const head = TRUNCATION_MARKER_HEAD;
3382
+ const tail = TRUNCATION_MARKER_TAIL;
3383
+ if (!line.startsWith(head) || !line.endsWith(tail)) return false;
3384
+ return /^\d+$/.test(line.slice(head.length, line.length - tail.length));
3359
3385
  }
3360
3386
 
3361
3387
  // src/lib/tools/toolCatalog.ts
@@ -3461,7 +3487,7 @@ ${neutralised}
3461
3487
  // src/lib/chat/toolResults.ts
3462
3488
  var TOOL_RESULTS_PREFIX = "[Tool Execution Results]";
3463
3489
  var DISPLAY_CARD_PLACEHOLDER = "[displayed a card to the user with the tool result]";
3464
- var TOOL_LINE = /^Tool "([^"]+)" returned: (.*)$/;
3490
+ var TOOL_LINE = /^Tool "([^"]+)" returned: ([\s\S]*)$/;
3465
3491
  var TOOL_RESULT_ORIGIN = "tool_result";
3466
3492
  function isToolResultsRow(row) {
3467
3493
  if (row.origin === TOOL_RESULT_ORIGIN) return true;
@@ -3479,8 +3505,7 @@ function parseToolResultSegments(content) {
3479
3505
  continue;
3480
3506
  }
3481
3507
  const current = segments[segments.length - 1];
3482
- if (!current || line === "" || line === TOOL_RESULT_FOOTER_LINE) continue;
3483
- if (line === TOOL_RESULTS_PREFIX) continue;
3508
+ if (!current || !isTruncationMarkerLine(line)) continue;
3484
3509
  current.line = `${current.line}
3485
3510
  ${line}`;
3486
3511
  }
@@ -86,6 +86,7 @@ function notifyKeyAvailable(address) {
86
86
  }
87
87
  }
88
88
  var keyPairStore = /* @__PURE__ */ new Map();
89
+ var pendingKeyPairRequests = /* @__PURE__ */ new Map();
89
90
  function getStoredKeyByVersion(address, version) {
90
91
  const keys = encryptionKeyStore.get(address);
91
92
  if (!keys) return null;
@@ -108,6 +109,7 @@ function clearAllEncryptionState() {
108
109
  cryptoKeyCache.clear();
109
110
  keyAvailableCallbacks.clear();
110
111
  pendingKeyRequests.clear();
112
+ pendingKeyPairRequests.clear();
111
113
  pendingCandidateDerives.clear();
112
114
  refreshCandidatesByAddress.clear();
113
115
  divergentDeriveAddresses.clear();
@@ -775,6 +777,21 @@ async function requestKeyPair(walletAddress, signMessage, embeddedWalletSigner)
775
777
  if (existingKeyPair) {
776
778
  return;
777
779
  }
780
+ const pending = pendingKeyPairRequests.get(walletAddress);
781
+ if (pending) {
782
+ return pending;
783
+ }
784
+ const promise = loadOrCreateKeyPair(walletAddress, signMessage, embeddedWalletSigner);
785
+ pendingKeyPairRequests.set(walletAddress, promise);
786
+ try {
787
+ await promise;
788
+ } finally {
789
+ if (pendingKeyPairRequests.get(walletAddress) === promise) {
790
+ pendingKeyPairRequests.delete(walletAddress);
791
+ }
792
+ }
793
+ }
794
+ async function loadOrCreateKeyPair(walletAddress, signMessage, embeddedWalletSigner) {
778
795
  const startEpoch = sessionEpoch;
779
796
  try {
780
797
  const persistedKeyPair = await loadPersistedKeyPair(walletAddress);
@@ -1480,10 +1497,13 @@ function getNotionMCPUrl() {
1480
1497
  var HEADER = "[Tool Execution Results]\n\n";
1481
1498
  var FOOTER = "\n\nBased on these results, continue with the task.";
1482
1499
  var ENTRY_SEPARATOR = "\n\n";
1483
- var TOOL_RESULT_FOOTER_LINE = FOOTER.trim();
1500
+ var TRUNCATION_MARKER_HEAD = "... (tool output truncated, ";
1501
+ var TRUNCATION_MARKER_TAIL = " characters omitted)";
1484
1502
  var MAX_PERSISTED_TOOL_RESULT_CHARS = 1e5;
1485
1503
  function buildToolResultContent(results) {
1486
- const entries = results.map((r) => `Tool "${r.name}" returned: ${JSON.stringify(r.result)}`);
1504
+ const entries = results.map(
1505
+ (r) => `Tool "${r.name}" returned: ${JSON.stringify(r.result)}`.replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029")
1506
+ );
1487
1507
  const framing = HEADER.length + FOOTER.length + ENTRY_SEPARATOR.length * Math.max(0, entries.length - 1);
1488
1508
  const summary = capEntries(entries, MAX_PERSISTED_TOOL_RESULT_CHARS - framing).join(
1489
1509
  ENTRY_SEPARATOR
@@ -1514,7 +1534,13 @@ function truncateEntry(entry, allowance) {
1514
1534
  function truncationMarker(omitted) {
1515
1535
  return `
1516
1536
 
1517
- ... (tool output truncated, ${omitted} characters omitted)`;
1537
+ ${TRUNCATION_MARKER_HEAD}${omitted}${TRUNCATION_MARKER_TAIL}`;
1538
+ }
1539
+ function isTruncationMarkerLine(line) {
1540
+ const head = TRUNCATION_MARKER_HEAD;
1541
+ const tail = TRUNCATION_MARKER_TAIL;
1542
+ if (!line.startsWith(head) || !line.endsWith(tail)) return false;
1543
+ return /^\d+$/.test(line.slice(head.length, line.length - tail.length));
1518
1544
  }
1519
1545
 
1520
1546
  // src/lib/tools/toolCatalog.ts
@@ -1620,7 +1646,7 @@ ${neutralised}
1620
1646
  // src/lib/chat/toolResults.ts
1621
1647
  var TOOL_RESULTS_PREFIX = "[Tool Execution Results]";
1622
1648
  var DISPLAY_CARD_PLACEHOLDER = "[displayed a card to the user with the tool result]";
1623
- var TOOL_LINE = /^Tool "([^"]+)" returned: (.*)$/;
1649
+ var TOOL_LINE = /^Tool "([^"]+)" returned: ([\s\S]*)$/;
1624
1650
  var TOOL_RESULT_ORIGIN = "tool_result";
1625
1651
  function isToolResultsRow(row) {
1626
1652
  if (row.origin === TOOL_RESULT_ORIGIN) return true;
@@ -1638,8 +1664,7 @@ function parseToolResultSegments(content) {
1638
1664
  continue;
1639
1665
  }
1640
1666
  const current = segments[segments.length - 1];
1641
- if (!current || line === "" || line === TOOL_RESULT_FOOTER_LINE) continue;
1642
- if (line === TOOL_RESULTS_PREFIX) continue;
1667
+ if (!current || !isTruncationMarkerLine(line)) continue;
1643
1668
  current.line = `${current.line}
1644
1669
  ${line}`;
1645
1670
  }
@@ -16631,8 +16631,14 @@ __export(index_exports, {
16631
16631
  module.exports = __toCommonJS(index_exports);
16632
16632
 
16633
16633
  // src/lib/chat/toolResultMessage.ts
16634
- var FOOTER = "\n\nBased on these results, continue with the task.";
16635
- var TOOL_RESULT_FOOTER_LINE = FOOTER.trim();
16634
+ var TRUNCATION_MARKER_HEAD = "... (tool output truncated, ";
16635
+ var TRUNCATION_MARKER_TAIL = " characters omitted)";
16636
+ function isTruncationMarkerLine(line) {
16637
+ const head = TRUNCATION_MARKER_HEAD;
16638
+ const tail = TRUNCATION_MARKER_TAIL;
16639
+ if (!line.startsWith(head) || !line.endsWith(tail)) return false;
16640
+ return /^\d+$/.test(line.slice(head.length, line.length - tail.length));
16641
+ }
16636
16642
 
16637
16643
  // src/lib/tools/toolCatalog.ts
16638
16644
  var TOOL_CATALOG = {
@@ -16811,7 +16817,7 @@ ${neutralised}
16811
16817
 
16812
16818
  // src/lib/chat/toolResults.ts
16813
16819
  var TOOL_RESULTS_PREFIX = "[Tool Execution Results]";
16814
- var TOOL_LINE = /^Tool "([^"]+)" returned: (.*)$/;
16820
+ var TOOL_LINE = /^Tool "([^"]+)" returned: ([\s\S]*)$/;
16815
16821
  var TOOL_RESULT_ORIGIN = "tool_result";
16816
16822
  function isToolResultsRow(row) {
16817
16823
  if (row.origin === TOOL_RESULT_ORIGIN) return true;
@@ -16829,8 +16835,7 @@ function parseToolResultSegments(content) {
16829
16835
  continue;
16830
16836
  }
16831
16837
  const current = segments[segments.length - 1];
16832
- if (!current || line === "" || line === TOOL_RESULT_FOOTER_LINE) continue;
16833
- if (line === TOOL_RESULTS_PREFIX) continue;
16838
+ if (!current || !isTruncationMarkerLine(line)) continue;
16834
16839
  current.line = `${current.line}
16835
16840
  ${line}`;
16836
16841
  }
@@ -16901,6 +16906,7 @@ function notifyKeyAvailable(address) {
16901
16906
  }
16902
16907
  }
16903
16908
  var keyPairStore = /* @__PURE__ */ new Map();
16909
+ var pendingKeyPairRequests = /* @__PURE__ */ new Map();
16904
16910
  function getStoredKeyByVersion(address, version) {
16905
16911
  const keys = encryptionKeyStore.get(address);
16906
16912
  if (!keys) return null;
@@ -16923,6 +16929,7 @@ function clearAllEncryptionState() {
16923
16929
  cryptoKeyCache.clear();
16924
16930
  keyAvailableCallbacks.clear();
16925
16931
  pendingKeyRequests.clear();
16932
+ pendingKeyPairRequests.clear();
16926
16933
  pendingCandidateDerives.clear();
16927
16934
  refreshCandidatesByAddress.clear();
16928
16935
  divergentDeriveAddresses.clear();
@@ -17590,6 +17597,21 @@ async function requestKeyPair(walletAddress, signMessage, embeddedWalletSigner)
17590
17597
  if (existingKeyPair) {
17591
17598
  return;
17592
17599
  }
17600
+ const pending = pendingKeyPairRequests.get(walletAddress);
17601
+ if (pending) {
17602
+ return pending;
17603
+ }
17604
+ const promise = loadOrCreateKeyPair(walletAddress, signMessage, embeddedWalletSigner);
17605
+ pendingKeyPairRequests.set(walletAddress, promise);
17606
+ try {
17607
+ await promise;
17608
+ } finally {
17609
+ if (pendingKeyPairRequests.get(walletAddress) === promise) {
17610
+ pendingKeyPairRequests.delete(walletAddress);
17611
+ }
17612
+ }
17613
+ }
17614
+ async function loadOrCreateKeyPair(walletAddress, signMessage, embeddedWalletSigner) {
17593
17615
  const startEpoch = sessionEpoch;
17594
17616
  try {
17595
17617
  const persistedKeyPair = await loadPersistedKeyPair(walletAddress);
@@ -14929,8 +14929,14 @@ var require_stepsForMigration = __commonJS({
14929
14929
  });
14930
14930
 
14931
14931
  // src/lib/chat/toolResultMessage.ts
14932
- var FOOTER = "\n\nBased on these results, continue with the task.";
14933
- var TOOL_RESULT_FOOTER_LINE = FOOTER.trim();
14932
+ var TRUNCATION_MARKER_HEAD = "... (tool output truncated, ";
14933
+ var TRUNCATION_MARKER_TAIL = " characters omitted)";
14934
+ function isTruncationMarkerLine(line) {
14935
+ const head = TRUNCATION_MARKER_HEAD;
14936
+ const tail = TRUNCATION_MARKER_TAIL;
14937
+ if (!line.startsWith(head) || !line.endsWith(tail)) return false;
14938
+ return /^\d+$/.test(line.slice(head.length, line.length - tail.length));
14939
+ }
14934
14940
 
14935
14941
  // src/lib/tools/toolCatalog.ts
14936
14942
  var TOOL_CATALOG = {
@@ -15109,7 +15115,7 @@ ${neutralised}
15109
15115
 
15110
15116
  // src/lib/chat/toolResults.ts
15111
15117
  var TOOL_RESULTS_PREFIX = "[Tool Execution Results]";
15112
- var TOOL_LINE = /^Tool "([^"]+)" returned: (.*)$/;
15118
+ var TOOL_LINE = /^Tool "([^"]+)" returned: ([\s\S]*)$/;
15113
15119
  var TOOL_RESULT_ORIGIN = "tool_result";
15114
15120
  function isToolResultsRow(row) {
15115
15121
  if (row.origin === TOOL_RESULT_ORIGIN) return true;
@@ -15127,8 +15133,7 @@ function parseToolResultSegments(content) {
15127
15133
  continue;
15128
15134
  }
15129
15135
  const current = segments[segments.length - 1];
15130
- if (!current || line === "" || line === TOOL_RESULT_FOOTER_LINE) continue;
15131
- if (line === TOOL_RESULTS_PREFIX) continue;
15136
+ if (!current || !isTruncationMarkerLine(line)) continue;
15132
15137
  current.line = `${current.line}
15133
15138
  ${line}`;
15134
15139
  }
@@ -15198,6 +15203,7 @@ function notifyKeyAvailable(address) {
15198
15203
  }
15199
15204
  }
15200
15205
  var keyPairStore = /* @__PURE__ */ new Map();
15206
+ var pendingKeyPairRequests = /* @__PURE__ */ new Map();
15201
15207
  function getStoredKeyByVersion(address, version) {
15202
15208
  const keys = encryptionKeyStore.get(address);
15203
15209
  if (!keys) return null;
@@ -15220,6 +15226,7 @@ function clearAllEncryptionState() {
15220
15226
  cryptoKeyCache.clear();
15221
15227
  keyAvailableCallbacks.clear();
15222
15228
  pendingKeyRequests.clear();
15229
+ pendingKeyPairRequests.clear();
15223
15230
  pendingCandidateDerives.clear();
15224
15231
  refreshCandidatesByAddress.clear();
15225
15232
  divergentDeriveAddresses.clear();
@@ -15887,6 +15894,21 @@ async function requestKeyPair(walletAddress, signMessage, embeddedWalletSigner)
15887
15894
  if (existingKeyPair) {
15888
15895
  return;
15889
15896
  }
15897
+ const pending = pendingKeyPairRequests.get(walletAddress);
15898
+ if (pending) {
15899
+ return pending;
15900
+ }
15901
+ const promise = loadOrCreateKeyPair(walletAddress, signMessage, embeddedWalletSigner);
15902
+ pendingKeyPairRequests.set(walletAddress, promise);
15903
+ try {
15904
+ await promise;
15905
+ } finally {
15906
+ if (pendingKeyPairRequests.get(walletAddress) === promise) {
15907
+ pendingKeyPairRequests.delete(walletAddress);
15908
+ }
15909
+ }
15910
+ }
15911
+ async function loadOrCreateKeyPair(walletAddress, signMessage, embeddedWalletSigner) {
15890
15912
  const startEpoch = sessionEpoch;
15891
15913
  try {
15892
15914
  const persistedKeyPair = await loadPersistedKeyPair(walletAddress);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anuma/sdk",
3
- "version": "10.4.1",
3
+ "version": "10.4.3",
4
4
  "description": "",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",