@xdarkicex/openclaw-memory-libravdb 1.9.0 → 1.9.1

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.
@@ -748,6 +748,10 @@ function resolveDynamicCompactThreshold(tokenBudget, compactThreshold, compactio
748
748
  logger?.info?.(`[compact:trace] resolveDynamicCompactThreshold branch=explicit tokenBudget=${tokenBudget} compactThreshold=${compactThreshold} → ${val}`);
749
749
  return val;
750
750
  }
751
+ if (compactSessionTokenBudget === 0) {
752
+ logger?.info?.(`[compact:trace] resolveDynamicCompactThreshold branch=disabled tokenBudget=${tokenBudget}`);
753
+ return undefined;
754
+ }
751
755
  const normalizedBudget = normalizeTokenBudget(tokenBudget);
752
756
  if (normalizedBudget == null) {
753
757
  logger?.info?.(`[compact:trace] resolveDynamicCompactThreshold branch=null_budget tokenBudget=${tokenBudget} → undefined`);
@@ -759,12 +763,6 @@ function resolveDynamicCompactThreshold(tokenBudget, compactThreshold, compactio
759
763
  // enough turns to compact) or absurdly high (Codex Runtime 1M tokens
760
764
  // would produce an unreachable 800k threshold).
761
765
  const withBounds = Math.max(2000, Math.min(16000, derived));
762
- // User-configured compactSessionTokenBudget overrides the ceiling.
763
- if (typeof compactSessionTokenBudget === "number" && compactSessionTokenBudget > 0) {
764
- const capped = Math.min(withBounds, compactSessionTokenBudget);
765
- logger?.info?.(`[compact:trace] resolveDynamicCompactThreshold branch=user_cap tokenBudget=${tokenBudget} normalizedBudget=${normalizedBudget} fraction=${fraction} derived=${derived} withBounds=${withBounds} cap=${compactSessionTokenBudget} → ${capped}`);
766
- return capped;
767
- }
768
766
  logger?.info?.(`[compact:trace] resolveDynamicCompactThreshold branch=clamped tokenBudget=${tokenBudget} normalizedBudget=${normalizedBudget} fraction=${fraction} derived=${derived} withBounds=${withBounds} → ${withBounds}`);
769
767
  return withBounds;
770
768
  }
@@ -774,6 +772,13 @@ function resolvePredictiveCompactionTarget(params) {
774
772
  if (currentTokenCount == null || threshold == null || currentTokenCount < threshold) {
775
773
  return undefined;
776
774
  }
775
+ const sinceLastBudget = normalizeTokenBudget(params.compactSessionTokenBudget);
776
+ const lastCompactedTokenCount = normalizeCurrentTokenCount(params.lastCompactedTokenCount);
777
+ if (sinceLastBudget != null &&
778
+ lastCompactedTokenCount != null &&
779
+ currentTokenCount - lastCompactedTokenCount < sinceLastBudget) {
780
+ return undefined;
781
+ }
777
782
  const belowThresholdTarget = Math.max(1, threshold - 1);
778
783
  return belowThresholdTarget < currentTokenCount
779
784
  ? belowThresholdTarget
@@ -918,8 +923,30 @@ function buildBudgetFallbackContext(messages, tokenBudget) {
918
923
  }
919
924
  const DAEMON_AUTHORED_CONTEXT_RE = /<authored_context\b[^>]*>([\s\S]*?)<\/authored_context>/gi;
920
925
  const DAEMON_AUTHORED_CONTEXT_GUIDANCE_RE = /^\s*Treat the authored entries below as active project rules and identity context\.?\s*$/i;
926
+ const COMPACTED_SESSION_CONTEXT_RE = /<compacted_session_context\b([^>]*)>([\s\S]*?)<\/compacted_session_context>/gi;
927
+ const COMPACTED_SESSION_RENDER_LEDGER_RE = /(?:^|\n)(?:Artifacts:|Constraints:|Open Next Steps:|Extracted context anchors:)(?:\n|$)/;
921
928
  function sanitizeDaemonSystemPromptAddition(text) {
922
- return demoteDaemonAuthoredContextBlocks(sanitizeToolCallPatterns(text));
929
+ return demoteDaemonAuthoredContextBlocks(sanitizeToolCallPatterns(canonicalizeCompactedSessionContextBlocks(text)));
930
+ }
931
+ function canonicalizeCompactedSessionContextBlocks(text) {
932
+ return text.replace(COMPACTED_SESSION_CONTEXT_RE, (match, attrs, inner) => {
933
+ const trimmed = String(inner).trim();
934
+ const firstLine = trimmed.split(/\r?\n/, 1)[0]?.trim();
935
+ if (!firstLine?.startsWith("{")) {
936
+ return match;
937
+ }
938
+ const rest = trimmed.slice(firstLine.length).trim();
939
+ if (!COMPACTED_SESSION_RENDER_LEDGER_RE.test(rest)) {
940
+ return match;
941
+ }
942
+ try {
943
+ JSON.parse(firstLine);
944
+ }
945
+ catch {
946
+ return match;
947
+ }
948
+ return `<compacted_session_context${attrs}>\n${firstLine}\n</compacted_session_context>`;
949
+ });
923
950
  }
924
951
  function demoteDaemonAuthoredContextBlocks(text) {
925
952
  return text.replace(DAEMON_AUTHORED_CONTEXT_RE, (_match, inner) => {
@@ -1372,9 +1399,13 @@ function ensureReplaySafeUserTurn(assembled, sourceMessages, logger, tokenBudget
1372
1399
  * Normalizes a compact result into the OpenClaw-compatible assemble result format.
1373
1400
  */
1374
1401
  export function normalizeAssembleResult(result, sourceMessages) {
1375
- let systemPromptAddition = typeof result.systemPromptAddition === "string"
1376
- ? sanitizeDaemonSystemPromptAddition(result.systemPromptAddition)
1402
+ const rawSystemPromptAddition = typeof result.systemPromptAddition === "string"
1403
+ ? result.systemPromptAddition
1404
+ : "";
1405
+ let systemPromptAddition = rawSystemPromptAddition
1406
+ ? sanitizeDaemonSystemPromptAddition(rawSystemPromptAddition)
1377
1407
  : "";
1408
+ const systemPromptWasReduced = rawSystemPromptAddition.length > systemPromptAddition.length;
1378
1409
  const messages = [];
1379
1410
  const extractedMemoryItems = [];
1380
1411
  const pushMemoryItem = (args) => {
@@ -1465,7 +1496,9 @@ export function normalizeAssembleResult(result, sourceMessages) {
1465
1496
  }
1466
1497
  return {
1467
1498
  messages,
1468
- estimatedTokens: typeof result.estimatedTokens === "number" ? result.estimatedTokens : 0,
1499
+ estimatedTokens: systemPromptWasReduced
1500
+ ? approximateTokenCount(systemPromptAddition) + approximateMessagesTokens(messages)
1501
+ : typeof result.estimatedTokens === "number" ? result.estimatedTokens : 0,
1469
1502
  systemPromptAddition,
1470
1503
  promptAuthority: PROMPT_AUTHORITY_PREASSEMBLY_MAY_OVERFLOW,
1471
1504
  ...(result.debug != null ? { debug: result.debug } : {}),
@@ -1563,6 +1596,8 @@ export function buildContextEngineFactory(runtime, cfg, logger = console) {
1563
1596
  }
1564
1597
  const predictiveContextCache = new Map();
1565
1598
  const PREDICTIVE_CACHE_MAX_SIZE = 100;
1599
+ const predictiveCompactionCursors = new Map();
1600
+ const PREDICTIVE_COMPACTION_CURSOR_MAX_SIZE = 100;
1566
1601
  // BeforeTurnKernel state
1567
1602
  const turnCache = new TurnMemoryCache(100);
1568
1603
  const circuitBreakers = new Map();
@@ -1760,6 +1795,14 @@ export function buildContextEngineFactory(runtime, cfg, logger = console) {
1760
1795
  return scored.slice(0, maxItems).map((s) => s.prediction);
1761
1796
  }
1762
1797
  const getDynamicCompactThreshold = (tokenBudget) => resolveDynamicCompactThreshold(tokenBudget, cfg.compactThreshold, cfg.compactionThresholdFraction, cfg.compactSessionTokenBudget);
1798
+ const markPredictiveCompactionCursor = (sessionId, currentTokenCount) => {
1799
+ if (predictiveCompactionCursors.size >= PREDICTIVE_COMPACTION_CURSOR_MAX_SIZE) {
1800
+ const oldest = predictiveCompactionCursors.keys().next().value;
1801
+ if (oldest !== undefined)
1802
+ predictiveCompactionCursors.delete(oldest);
1803
+ }
1804
+ predictiveCompactionCursors.set(sessionId, currentTokenCount);
1805
+ };
1763
1806
  const buildAssemblyConfig = (tokenBudget) => ({
1764
1807
  useSessionRecallProjection: cfg.useSessionRecallProjection,
1765
1808
  useSessionSummarySearchExperiment: cfg.useSessionSummarySearchExperiment,
@@ -1971,6 +2014,8 @@ export function buildContextEngineFactory(runtime, cfg, logger = console) {
1971
2014
  const predictiveTargetSize = resolvePredictiveCompactionTarget({
1972
2015
  currentTokenCount: currentContextTokens,
1973
2016
  threshold: dynamicCompactThreshold,
2017
+ compactSessionTokenBudget: cfg.compactSessionTokenBudget,
2018
+ lastCompactedTokenCount: predictiveCompactionCursors.get(args.sessionId),
1974
2019
  });
1975
2020
  if (currentContextTokens == null ||
1976
2021
  dynamicCompactThreshold == null ||
@@ -1993,6 +2038,9 @@ export function buildContextEngineFactory(runtime, cfg, logger = console) {
1993
2038
  force: true,
1994
2039
  currentTokenCount: currentContextTokens,
1995
2040
  });
2041
+ if (compactionResult.compacted) {
2042
+ markPredictiveCompactionCursor(args.sessionId, currentContextTokens);
2043
+ }
1996
2044
  logPredictiveCompactionOutcome({
1997
2045
  logger,
1998
2046
  phase: "afterTurn",
@@ -2011,6 +2059,7 @@ export function buildContextEngineFactory(runtime, cfg, logger = console) {
2011
2059
  async bootstrap(args) {
2012
2060
  const sessionId = requireSessionId(args.sessionId, "bootstrap");
2013
2061
  predictiveContextCache.delete(sessionId);
2062
+ predictiveCompactionCursors.delete(sessionId);
2014
2063
  postToolRecallCache.delete(sessionId);
2015
2064
  asyncIngestionQueues.delete(sessionId);
2016
2065
  const userId = resolveUserId({
@@ -2078,6 +2127,8 @@ export function buildContextEngineFactory(runtime, cfg, logger = console) {
2078
2127
  const predictiveTargetSize = resolvePredictiveCompactionTarget({
2079
2128
  currentTokenCount: currentContextTokens,
2080
2129
  threshold: dynamicCompactThreshold,
2130
+ compactSessionTokenBudget: cfg.compactSessionTokenBudget,
2131
+ lastCompactedTokenCount: predictiveCompactionCursors.get(sessionId),
2081
2132
  });
2082
2133
  if (dynamicCompactThreshold != null && predictiveTargetSize != null) {
2083
2134
  logPredictiveCompactionAttempt({
@@ -2096,6 +2147,9 @@ export function buildContextEngineFactory(runtime, cfg, logger = console) {
2096
2147
  force: true,
2097
2148
  currentTokenCount: currentContextTokens,
2098
2149
  });
2150
+ if (compactionResult.compacted) {
2151
+ markPredictiveCompactionCursor(sessionId, currentContextTokens);
2152
+ }
2099
2153
  logPredictiveCompactionOutcome({
2100
2154
  logger,
2101
2155
  phase: "assemble",
@@ -2479,6 +2533,7 @@ export function buildContextEngineFactory(runtime, cfg, logger = console) {
2479
2533
  }
2480
2534
  }
2481
2535
  predictiveContextCache.clear();
2536
+ predictiveCompactionCursors.clear();
2482
2537
  postToolRecallCache.clear();
2483
2538
  asyncIngestionQueues.clear();
2484
2539
  triggerCache.clear();
package/dist/index.js CHANGED
@@ -36117,6 +36117,10 @@ function resolveDynamicCompactThreshold(tokenBudget, compactThreshold, compactio
36117
36117
  logger?.info?.(`[compact:trace] resolveDynamicCompactThreshold branch=explicit tokenBudget=${tokenBudget} compactThreshold=${compactThreshold} \u2192 ${val}`);
36118
36118
  return val;
36119
36119
  }
36120
+ if (compactSessionTokenBudget === 0) {
36121
+ logger?.info?.(`[compact:trace] resolveDynamicCompactThreshold branch=disabled tokenBudget=${tokenBudget}`);
36122
+ return void 0;
36123
+ }
36120
36124
  const normalizedBudget = normalizeTokenBudget(tokenBudget);
36121
36125
  if (normalizedBudget == null) {
36122
36126
  logger?.info?.(`[compact:trace] resolveDynamicCompactThreshold branch=null_budget tokenBudget=${tokenBudget} \u2192 undefined`);
@@ -36125,11 +36129,6 @@ function resolveDynamicCompactThreshold(tokenBudget, compactThreshold, compactio
36125
36129
  const fraction = normalizeThresholdFraction(compactionThresholdFraction);
36126
36130
  const derived = Math.max(1, Math.floor(normalizedBudget * fraction));
36127
36131
  const withBounds = Math.max(2e3, Math.min(16e3, derived));
36128
- if (typeof compactSessionTokenBudget === "number" && compactSessionTokenBudget > 0) {
36129
- const capped = Math.min(withBounds, compactSessionTokenBudget);
36130
- logger?.info?.(`[compact:trace] resolveDynamicCompactThreshold branch=user_cap tokenBudget=${tokenBudget} normalizedBudget=${normalizedBudget} fraction=${fraction} derived=${derived} withBounds=${withBounds} cap=${compactSessionTokenBudget} \u2192 ${capped}`);
36131
- return capped;
36132
- }
36133
36132
  logger?.info?.(`[compact:trace] resolveDynamicCompactThreshold branch=clamped tokenBudget=${tokenBudget} normalizedBudget=${normalizedBudget} fraction=${fraction} derived=${derived} withBounds=${withBounds} \u2192 ${withBounds}`);
36134
36133
  return withBounds;
36135
36134
  }
@@ -36139,6 +36138,11 @@ function resolvePredictiveCompactionTarget(params) {
36139
36138
  if (currentTokenCount == null || threshold == null || currentTokenCount < threshold) {
36140
36139
  return void 0;
36141
36140
  }
36141
+ const sinceLastBudget = normalizeTokenBudget(params.compactSessionTokenBudget);
36142
+ const lastCompactedTokenCount = normalizeCurrentTokenCount(params.lastCompactedTokenCount);
36143
+ if (sinceLastBudget != null && lastCompactedTokenCount != null && currentTokenCount - lastCompactedTokenCount < sinceLastBudget) {
36144
+ return void 0;
36145
+ }
36142
36146
  const belowThresholdTarget = Math.max(1, threshold - 1);
36143
36147
  return belowThresholdTarget < currentTokenCount ? belowThresholdTarget : Math.max(1, currentTokenCount - 1);
36144
36148
  }
@@ -36253,8 +36257,33 @@ function buildBudgetFallbackContext(messages, tokenBudget) {
36253
36257
  }
36254
36258
  var DAEMON_AUTHORED_CONTEXT_RE = /<authored_context\b[^>]*>([\s\S]*?)<\/authored_context>/gi;
36255
36259
  var DAEMON_AUTHORED_CONTEXT_GUIDANCE_RE = /^\s*Treat the authored entries below as active project rules and identity context\.?\s*$/i;
36260
+ var COMPACTED_SESSION_CONTEXT_RE = /<compacted_session_context\b([^>]*)>([\s\S]*?)<\/compacted_session_context>/gi;
36261
+ var COMPACTED_SESSION_RENDER_LEDGER_RE = /(?:^|\n)(?:Artifacts:|Constraints:|Open Next Steps:|Extracted context anchors:)(?:\n|$)/;
36256
36262
  function sanitizeDaemonSystemPromptAddition(text) {
36257
- return demoteDaemonAuthoredContextBlocks(sanitizeToolCallPatterns(text));
36263
+ return demoteDaemonAuthoredContextBlocks(
36264
+ sanitizeToolCallPatterns(canonicalizeCompactedSessionContextBlocks(text))
36265
+ );
36266
+ }
36267
+ function canonicalizeCompactedSessionContextBlocks(text) {
36268
+ return text.replace(COMPACTED_SESSION_CONTEXT_RE, (match, attrs, inner) => {
36269
+ const trimmed = String(inner).trim();
36270
+ const firstLine = trimmed.split(/\r?\n/, 1)[0]?.trim();
36271
+ if (!firstLine?.startsWith("{")) {
36272
+ return match;
36273
+ }
36274
+ const rest = trimmed.slice(firstLine.length).trim();
36275
+ if (!COMPACTED_SESSION_RENDER_LEDGER_RE.test(rest)) {
36276
+ return match;
36277
+ }
36278
+ try {
36279
+ JSON.parse(firstLine);
36280
+ } catch {
36281
+ return match;
36282
+ }
36283
+ return `<compacted_session_context${attrs}>
36284
+ ${firstLine}
36285
+ </compacted_session_context>`;
36286
+ });
36258
36287
  }
36259
36288
  function demoteDaemonAuthoredContextBlocks(text) {
36260
36289
  return text.replace(DAEMON_AUTHORED_CONTEXT_RE, (_match, inner) => {
@@ -36622,7 +36651,9 @@ function ensureReplaySafeUserTurn(assembled, sourceMessages, logger, tokenBudget
36622
36651
  };
36623
36652
  }
36624
36653
  function normalizeAssembleResult(result, sourceMessages) {
36625
- let systemPromptAddition = typeof result.systemPromptAddition === "string" ? sanitizeDaemonSystemPromptAddition(result.systemPromptAddition) : "";
36654
+ const rawSystemPromptAddition = typeof result.systemPromptAddition === "string" ? result.systemPromptAddition : "";
36655
+ let systemPromptAddition = rawSystemPromptAddition ? sanitizeDaemonSystemPromptAddition(rawSystemPromptAddition) : "";
36656
+ const systemPromptWasReduced = rawSystemPromptAddition.length > systemPromptAddition.length;
36626
36657
  const messages = [];
36627
36658
  const extractedMemoryItems = [];
36628
36659
  const pushMemoryItem = (args) => {
@@ -36712,7 +36743,7 @@ ${extractedMemoryItems.join("\n")}
36712
36743
  }
36713
36744
  return {
36714
36745
  messages,
36715
- estimatedTokens: typeof result.estimatedTokens === "number" ? result.estimatedTokens : 0,
36746
+ estimatedTokens: systemPromptWasReduced ? approximateTokenCount(systemPromptAddition) + approximateMessagesTokens(messages) : typeof result.estimatedTokens === "number" ? result.estimatedTokens : 0,
36716
36747
  systemPromptAddition,
36717
36748
  promptAuthority: PROMPT_AUTHORITY_PREASSEMBLY_MAY_OVERFLOW,
36718
36749
  ...result.debug != null ? { debug: result.debug } : {}
@@ -36786,6 +36817,8 @@ function buildContextEngineFactory(runtime, cfg, logger = console) {
36786
36817
  }
36787
36818
  const predictiveContextCache = /* @__PURE__ */ new Map();
36788
36819
  const PREDICTIVE_CACHE_MAX_SIZE = 100;
36820
+ const predictiveCompactionCursors = /* @__PURE__ */ new Map();
36821
+ const PREDICTIVE_COMPACTION_CURSOR_MAX_SIZE = 100;
36789
36822
  const turnCache = new TurnMemoryCache(100);
36790
36823
  const circuitBreakers = /* @__PURE__ */ new Map();
36791
36824
  const CIRCUIT_STATE_MAX_SIZE = 200;
@@ -36978,6 +37011,13 @@ function buildContextEngineFactory(runtime, cfg, logger = console) {
36978
37011
  cfg.compactionThresholdFraction,
36979
37012
  cfg.compactSessionTokenBudget
36980
37013
  );
37014
+ const markPredictiveCompactionCursor = (sessionId, currentTokenCount) => {
37015
+ if (predictiveCompactionCursors.size >= PREDICTIVE_COMPACTION_CURSOR_MAX_SIZE) {
37016
+ const oldest = predictiveCompactionCursors.keys().next().value;
37017
+ if (oldest !== void 0) predictiveCompactionCursors.delete(oldest);
37018
+ }
37019
+ predictiveCompactionCursors.set(sessionId, currentTokenCount);
37020
+ };
36981
37021
  const buildAssemblyConfig = (tokenBudget) => ({
36982
37022
  useSessionRecallProjection: cfg.useSessionRecallProjection,
36983
37023
  useSessionSummarySearchExperiment: cfg.useSessionSummarySearchExperiment,
@@ -37169,7 +37209,9 @@ function buildContextEngineFactory(runtime, cfg, logger = console) {
37169
37209
  });
37170
37210
  const predictiveTargetSize = resolvePredictiveCompactionTarget({
37171
37211
  currentTokenCount: currentContextTokens,
37172
- threshold: dynamicCompactThreshold
37212
+ threshold: dynamicCompactThreshold,
37213
+ compactSessionTokenBudget: cfg.compactSessionTokenBudget,
37214
+ lastCompactedTokenCount: predictiveCompactionCursors.get(args.sessionId)
37173
37215
  });
37174
37216
  if (currentContextTokens == null || dynamicCompactThreshold == null || predictiveTargetSize == null) {
37175
37217
  return;
@@ -37190,6 +37232,9 @@ function buildContextEngineFactory(runtime, cfg, logger = console) {
37190
37232
  force: true,
37191
37233
  currentTokenCount: currentContextTokens
37192
37234
  });
37235
+ if (compactionResult.compacted) {
37236
+ markPredictiveCompactionCursor(args.sessionId, currentContextTokens);
37237
+ }
37193
37238
  logPredictiveCompactionOutcome({
37194
37239
  logger,
37195
37240
  phase: "afterTurn",
@@ -37208,6 +37253,7 @@ function buildContextEngineFactory(runtime, cfg, logger = console) {
37208
37253
  async bootstrap(args) {
37209
37254
  const sessionId = requireSessionId(args.sessionId, "bootstrap");
37210
37255
  predictiveContextCache.delete(sessionId);
37256
+ predictiveCompactionCursors.delete(sessionId);
37211
37257
  postToolRecallCache.delete(sessionId);
37212
37258
  asyncIngestionQueues.delete(sessionId);
37213
37259
  const userId = resolveUserId({
@@ -37270,7 +37316,9 @@ function buildContextEngineFactory(runtime, cfg, logger = console) {
37270
37316
  const dynamicCompactThreshold = getDynamicCompactThreshold(args.tokenBudget);
37271
37317
  const predictiveTargetSize = resolvePredictiveCompactionTarget({
37272
37318
  currentTokenCount: currentContextTokens,
37273
- threshold: dynamicCompactThreshold
37319
+ threshold: dynamicCompactThreshold,
37320
+ compactSessionTokenBudget: cfg.compactSessionTokenBudget,
37321
+ lastCompactedTokenCount: predictiveCompactionCursors.get(sessionId)
37274
37322
  });
37275
37323
  if (dynamicCompactThreshold != null && predictiveTargetSize != null) {
37276
37324
  logPredictiveCompactionAttempt({
@@ -37289,6 +37337,9 @@ function buildContextEngineFactory(runtime, cfg, logger = console) {
37289
37337
  force: true,
37290
37338
  currentTokenCount: currentContextTokens
37291
37339
  });
37340
+ if (compactionResult.compacted) {
37341
+ markPredictiveCompactionCursor(sessionId, currentContextTokens);
37342
+ }
37292
37343
  logPredictiveCompactionOutcome({
37293
37344
  logger,
37294
37345
  phase: "assemble",
@@ -37669,6 +37720,7 @@ function buildContextEngineFactory(runtime, cfg, logger = console) {
37669
37720
  }
37670
37721
  }
37671
37722
  predictiveContextCache.clear();
37723
+ predictiveCompactionCursors.clear();
37672
37724
  postToolRecallCache.clear();
37673
37725
  asyncIngestionQueues.clear();
37674
37726
  triggerCache.clear();
@@ -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.0",
5
+ "version": "1.9.1",
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.0",
3
+ "version": "1.9.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",