@xdarkicex/openclaw-memory-libravdb 1.9.10-beta.11 → 1.9.10-beta.13
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.
- package/dist/context-engine.js +15 -1
- package/dist/index.js +18 -2
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
package/dist/context-engine.js
CHANGED
|
@@ -16,6 +16,7 @@ const EXACT_RECALL_MAX_TOKENS = 4;
|
|
|
16
16
|
const RESERVED_CURRENT_TURN_TOKENS = 150;
|
|
17
17
|
const AFTER_TURN_INGEST_MAX_TOKENS = 2048;
|
|
18
18
|
const OPENCLAW_LEADING_TIMESTAMP_PREFIX_RE = /^\[[A-Za-z]{3} \d{4}-\d{2}-\d{2} \d{2}:\d{2}[^\]]*\] */;
|
|
19
|
+
const OPENCLAW_CONTEXT_PREFIX_RE = /^\[OpenClaw context: [^\]]*\][\r\n]*/;
|
|
19
20
|
const SELECTED_CONTEXT_HEADER = "Conversation context (untrusted, chronological, selected for current message):";
|
|
20
21
|
const RETRIEVAL_QUERY_MAX_CHARS = 1000;
|
|
21
22
|
const SELECTED_CONTEXT_TURN_RE = /^#\d+\s+[A-Za-z]{3}\s+\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}(?::\d{2})?\s+\S+\s+([^:\n]{1,80}):\s*(.*)$/;
|
|
@@ -208,6 +209,7 @@ function normalizeRetrievalQuery(primaryText, fallbackText = "") {
|
|
|
208
209
|
}
|
|
209
210
|
function normalizeRetrievalCandidate(text) {
|
|
210
211
|
const normalized = text
|
|
212
|
+
.replace(OPENCLAW_CONTEXT_PREFIX_RE, "")
|
|
211
213
|
.replace(OPENCLAW_LEADING_TIMESTAMP_PREFIX_RE, "")
|
|
212
214
|
.replace(/\r\n/g, "\n")
|
|
213
215
|
.trim();
|
|
@@ -1394,7 +1396,6 @@ export function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
|
1394
1396
|
// Then run the standard metadata envelope stripping.
|
|
1395
1397
|
return stripOpenClawUntrustedMetadataEnvelope(stripped);
|
|
1396
1398
|
}
|
|
1397
|
-
const OPENCLAW_CONTEXT_PREFIX_RE = /^\[OpenClaw context: [^\]]*\][\r\n]*/;
|
|
1398
1399
|
function formatRetrievedMemory(predictions) {
|
|
1399
1400
|
if (!predictions?.length)
|
|
1400
1401
|
return "";
|
|
@@ -1601,8 +1602,19 @@ export function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
|
1601
1602
|
: {}),
|
|
1602
1603
|
};
|
|
1603
1604
|
}
|
|
1605
|
+
const continuityCache = new Map(); // sessionKey -> raw context block
|
|
1606
|
+
function updateContinuityCache(sessionKey, messages) {
|
|
1607
|
+
const lastTurns = messages.filter(m => m.role === 'user' || m.role === 'assistant').slice(-2);
|
|
1608
|
+
if (lastTurns.length > 0) {
|
|
1609
|
+
continuityCache.set(sessionKey, lastTurns.map(m => `${m.role}: ${m.content}`).join('\n'));
|
|
1610
|
+
}
|
|
1611
|
+
}
|
|
1604
1612
|
async function injectContinuityContext(params) {
|
|
1605
1613
|
try {
|
|
1614
|
+
const cached = continuityCache.get(params.sessionKey);
|
|
1615
|
+
if (cached) {
|
|
1616
|
+
return `<continuity_context>\nRecent conversation:\n${cached}\n</continuity_context>`;
|
|
1617
|
+
}
|
|
1606
1618
|
// Use a natural-language query that semantically matches the
|
|
1607
1619
|
// pointer record text ("Previous session continuity — ...").
|
|
1608
1620
|
// Fetch enough results so the exact ID match isn't crowded out
|
|
@@ -1940,6 +1952,7 @@ export function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
|
1940
1952
|
client,
|
|
1941
1953
|
userId,
|
|
1942
1954
|
sessionId,
|
|
1955
|
+
sessionKey: args.sessionKey ?? sessionId,
|
|
1943
1956
|
logger,
|
|
1944
1957
|
tokenBudget: args.tokenBudget,
|
|
1945
1958
|
systemPromptAddition: assembled.systemPromptAddition,
|
|
@@ -2101,6 +2114,7 @@ export function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
|
2101
2114
|
isHeartbeat: args.isHeartbeat,
|
|
2102
2115
|
cursor,
|
|
2103
2116
|
});
|
|
2117
|
+
updateContinuityCache(args.sessionKey ?? sessionId, ingestMessages);
|
|
2104
2118
|
// Reconcile manifest with daemon-confirmed cursor.
|
|
2105
2119
|
// The daemon returns a cursor even when it ingests zero messages
|
|
2106
2120
|
// (e.g. gap detected, all messages deduped). Trust its
|
package/dist/index.js
CHANGED
|
@@ -35491,6 +35491,7 @@ var EXACT_RECALL_MAX_TOKENS = 4;
|
|
|
35491
35491
|
var RESERVED_CURRENT_TURN_TOKENS = 150;
|
|
35492
35492
|
var AFTER_TURN_INGEST_MAX_TOKENS = 2048;
|
|
35493
35493
|
var OPENCLAW_LEADING_TIMESTAMP_PREFIX_RE = /^\[[A-Za-z]{3} \d{4}-\d{2}-\d{2} \d{2}:\d{2}[^\]]*\] */;
|
|
35494
|
+
var OPENCLAW_CONTEXT_PREFIX_RE = /^\[OpenClaw context: [^\]]*\][\r\n]*/;
|
|
35494
35495
|
var SELECTED_CONTEXT_HEADER = "Conversation context (untrusted, chronological, selected for current message):";
|
|
35495
35496
|
var RETRIEVAL_QUERY_MAX_CHARS = 1e3;
|
|
35496
35497
|
var SELECTED_CONTEXT_TURN_RE = /^#\d+\s+[A-Za-z]{3}\s+\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}(?::\d{2})?\s+\S+\s+([^:\n]{1,80}):\s*(.*)$/;
|
|
@@ -35666,7 +35667,7 @@ function normalizeRetrievalQuery(primaryText, fallbackText = "") {
|
|
|
35666
35667
|
return normalizeRetrievalCandidate(fallbackText);
|
|
35667
35668
|
}
|
|
35668
35669
|
function normalizeRetrievalCandidate(text) {
|
|
35669
|
-
const normalized = text.replace(OPENCLAW_LEADING_TIMESTAMP_PREFIX_RE, "").replace(/\r\n/g, "\n").trim();
|
|
35670
|
+
const normalized = text.replace(OPENCLAW_CONTEXT_PREFIX_RE, "").replace(OPENCLAW_LEADING_TIMESTAMP_PREFIX_RE, "").replace(/\r\n/g, "\n").trim();
|
|
35670
35671
|
if (!normalized) return "";
|
|
35671
35672
|
const selected = extractLatestSelectedContextUtterance(normalized);
|
|
35672
35673
|
const candidate = selected || normalized;
|
|
@@ -36637,7 +36638,6 @@ function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
|
36637
36638
|
const stripped = text.replace(OPENCLAW_CONTEXT_PREFIX_RE, "").trimStart();
|
|
36638
36639
|
return stripOpenClawUntrustedMetadataEnvelope(stripped);
|
|
36639
36640
|
}
|
|
36640
|
-
const OPENCLAW_CONTEXT_PREFIX_RE = /^\[OpenClaw context: [^\]]*\][\r\n]*/;
|
|
36641
36641
|
function formatRetrievedMemory(predictions) {
|
|
36642
36642
|
if (!predictions?.length) return "";
|
|
36643
36643
|
if (cfg.beforeTurnDebug) {
|
|
@@ -36837,8 +36837,22 @@ function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
|
36837
36837
|
...typeof cfg.continuityPriorContextTokens === "number" ? { continuityPriorContextTokens: cfg.continuityPriorContextTokens } : {}
|
|
36838
36838
|
};
|
|
36839
36839
|
}
|
|
36840
|
+
const continuityCache = /* @__PURE__ */ new Map();
|
|
36841
|
+
function updateContinuityCache(sessionKey, messages) {
|
|
36842
|
+
const lastTurns = messages.filter((m) => m.role === "user" || m.role === "assistant").slice(-2);
|
|
36843
|
+
if (lastTurns.length > 0) {
|
|
36844
|
+
continuityCache.set(sessionKey, lastTurns.map((m) => `${m.role}: ${m.content}`).join("\n"));
|
|
36845
|
+
}
|
|
36846
|
+
}
|
|
36840
36847
|
async function injectContinuityContext(params) {
|
|
36841
36848
|
try {
|
|
36849
|
+
const cached = continuityCache.get(params.sessionKey);
|
|
36850
|
+
if (cached) {
|
|
36851
|
+
return `<continuity_context>
|
|
36852
|
+
Recent conversation:
|
|
36853
|
+
${cached}
|
|
36854
|
+
</continuity_context>`;
|
|
36855
|
+
}
|
|
36842
36856
|
const continuityHits = await params.client.searchTextCollections({
|
|
36843
36857
|
collections: [resolveUserCollection(params.userId)],
|
|
36844
36858
|
text: "previous session context continuity",
|
|
@@ -37162,6 +37176,7 @@ function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
|
37162
37176
|
client,
|
|
37163
37177
|
userId,
|
|
37164
37178
|
sessionId,
|
|
37179
|
+
sessionKey: args.sessionKey ?? sessionId,
|
|
37165
37180
|
logger,
|
|
37166
37181
|
tokenBudget: args.tokenBudget,
|
|
37167
37182
|
systemPromptAddition: assembled.systemPromptAddition
|
|
@@ -37321,6 +37336,7 @@ function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
|
37321
37336
|
isHeartbeat: args.isHeartbeat,
|
|
37322
37337
|
cursor
|
|
37323
37338
|
});
|
|
37339
|
+
updateContinuityCache(args.sessionKey ?? sessionId, ingestMessages);
|
|
37324
37340
|
const daemonCursor = extractCursorFromResult(result);
|
|
37325
37341
|
if (daemonCursor) {
|
|
37326
37342
|
if (!daemonCursor.manifestTailHash) {
|
package/openclaw.plugin.json
CHANGED