@xdarkicex/openclaw-memory-libravdb 1.9.2 → 1.9.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.
@@ -1426,6 +1426,26 @@ export function normalizeAssembleResult(result, sourceMessages) {
1426
1426
  const systemPromptWasReduced = rawSystemPromptAddition.length > systemPromptAddition.length;
1427
1427
  const messages = [];
1428
1428
  const extractedMemoryItems = [];
1429
+ let lastProviderReplayKey;
1430
+ let lastSourceIndex;
1431
+ const pushProviderReplayMessage = (message, sourceIndex) => {
1432
+ const key = `${message.role}\0${message.content}`;
1433
+ if (key === lastProviderReplayKey) {
1434
+ if (lastSourceIndex !== undefined &&
1435
+ sourceIndex !== undefined &&
1436
+ lastSourceIndex >= 0 &&
1437
+ sourceIndex >= 0 &&
1438
+ lastSourceIndex !== sourceIndex) {
1439
+ // Fall through — push the message.
1440
+ }
1441
+ else {
1442
+ return;
1443
+ }
1444
+ }
1445
+ messages.push(message);
1446
+ lastProviderReplayKey = key;
1447
+ lastSourceIndex = sourceIndex;
1448
+ };
1429
1449
  const pushMemoryItem = (args) => {
1430
1450
  if (args.content.trim().length === 0)
1431
1451
  return;
@@ -1435,6 +1455,7 @@ export function normalizeAssembleResult(result, sourceMessages) {
1435
1455
  if (Array.isArray(result.messages)) {
1436
1456
  const lastUserIndex = sourceMessages ? findLastUserMessageIndex(sourceMessages) : -1;
1437
1457
  let liveSourceCursor = sourceMessages ? lastUserIndex + 1 : undefined;
1458
+ let providerReplaySourceCursor = sourceMessages ? 0 : undefined;
1438
1459
  for (const message of result.messages) {
1439
1460
  const content = normalizeKernelContent(message.content);
1440
1461
  const historicalToolSource = getHistoricalToolSource(message.role, message.content, content);
@@ -1447,6 +1468,10 @@ export function normalizeAssembleResult(result, sourceMessages) {
1447
1468
  }
1448
1469
  const liveToolProtocolSource = consumeLiveToolAtCursor(message, content, sourceMessages, liveSourceCursor, lastUserIndex >= 0 ? lastUserIndex : undefined);
1449
1470
  if (liveToolProtocolSource) {
1471
+ // Live tool protocol messages are cursor-guarded by
1472
+ // consumeLiveToolAtCursor — consecutive toolResults with the
1473
+ // same content but different toolCallId linkage must not be
1474
+ // collapsed. Push directly, bypassing provider-replay dedup.
1450
1475
  messages.push(preserveLiveToolProtocolMessage(liveToolProtocolSource.message));
1451
1476
  liveSourceCursor = liveToolProtocolSource.index + 1;
1452
1477
  }
@@ -1478,11 +1503,19 @@ export function normalizeAssembleResult(result, sourceMessages) {
1478
1503
  }
1479
1504
  continue;
1480
1505
  }
1481
- messages.push({
1506
+ const providerReplaySourceIndex = sourceMessages
1507
+ ? findMatchingSourceMessageIndex(message, content, sourceMessages, providerReplaySourceCursor)
1508
+ : undefined;
1509
+ pushProviderReplayMessage({
1482
1510
  role: message.role,
1483
1511
  content: sanitizedContent,
1484
1512
  ...(typeof message.id === "string" ? { id: message.id } : {}),
1485
- });
1513
+ }, providerReplaySourceIndex);
1514
+ if (providerReplaySourceCursor !== undefined &&
1515
+ providerReplaySourceIndex !== undefined &&
1516
+ providerReplaySourceIndex >= 0) {
1517
+ providerReplaySourceCursor = providerReplaySourceIndex + 1;
1518
+ }
1486
1519
  }
1487
1520
  else {
1488
1521
  // Daemon memory items may not be in sourceMessages — only advance
package/dist/index.js CHANGED
@@ -36673,6 +36673,20 @@ function normalizeAssembleResult(result, sourceMessages) {
36673
36673
  const systemPromptWasReduced = rawSystemPromptAddition.length > systemPromptAddition.length;
36674
36674
  const messages = [];
36675
36675
  const extractedMemoryItems = [];
36676
+ let lastProviderReplayKey;
36677
+ let lastSourceIndex;
36678
+ const pushProviderReplayMessage = (message, sourceIndex) => {
36679
+ const key = `${message.role}\0${message.content}`;
36680
+ if (key === lastProviderReplayKey) {
36681
+ if (lastSourceIndex !== void 0 && sourceIndex !== void 0 && lastSourceIndex >= 0 && sourceIndex >= 0 && lastSourceIndex !== sourceIndex) {
36682
+ } else {
36683
+ return;
36684
+ }
36685
+ }
36686
+ messages.push(message);
36687
+ lastProviderReplayKey = key;
36688
+ lastSourceIndex = sourceIndex;
36689
+ };
36676
36690
  const pushMemoryItem = (args) => {
36677
36691
  if (args.content.trim().length === 0) return;
36678
36692
  const roleAttr = args.role ? ` role="${escapeMemoryFactText(args.role)}"` : "";
@@ -36683,6 +36697,7 @@ function normalizeAssembleResult(result, sourceMessages) {
36683
36697
  if (Array.isArray(result.messages)) {
36684
36698
  const lastUserIndex = sourceMessages ? findLastUserMessageIndex(sourceMessages) : -1;
36685
36699
  let liveSourceCursor = sourceMessages ? lastUserIndex + 1 : void 0;
36700
+ let providerReplaySourceCursor = sourceMessages ? 0 : void 0;
36686
36701
  for (const message of result.messages) {
36687
36702
  const content = normalizeKernelContent(message.content);
36688
36703
  const historicalToolSource = getHistoricalToolSource(message.role, message.content, content);
@@ -36726,11 +36741,18 @@ function normalizeAssembleResult(result, sourceMessages) {
36726
36741
  }
36727
36742
  continue;
36728
36743
  }
36729
- messages.push({
36730
- role: message.role,
36731
- content: sanitizedContent,
36732
- ...typeof message.id === "string" ? { id: message.id } : {}
36733
- });
36744
+ const providerReplaySourceIndex = sourceMessages ? findMatchingSourceMessageIndex(message, content, sourceMessages, providerReplaySourceCursor) : void 0;
36745
+ pushProviderReplayMessage(
36746
+ {
36747
+ role: message.role,
36748
+ content: sanitizedContent,
36749
+ ...typeof message.id === "string" ? { id: message.id } : {}
36750
+ },
36751
+ providerReplaySourceIndex
36752
+ );
36753
+ if (providerReplaySourceCursor !== void 0 && providerReplaySourceIndex !== void 0 && providerReplaySourceIndex >= 0) {
36754
+ providerReplaySourceCursor = providerReplaySourceIndex + 1;
36755
+ }
36734
36756
  } else {
36735
36757
  if (liveSourceCursor !== void 0 && sourceMessages) {
36736
36758
  const idx = findMatchingSourceMessageIndex(message, content, sourceMessages, liveSourceCursor);
@@ -2,7 +2,7 @@
2
2
  "id": "libravdb-memory",
3
3
  "name": "LibraVDB Memory",
4
4
  "description": "Persistent vector memory with three-tier hybrid scoring",
5
- "version": "1.9.2",
5
+ "version": "1.9.3",
6
6
  "kind": [
7
7
  "memory",
8
8
  "context-engine"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xdarkicex/openclaw-memory-libravdb",
3
- "version": "1.9.2",
3
+ "version": "1.9.3",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",