@xdarkicex/openclaw-memory-libravdb 1.4.68 → 1.4.70
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 +39 -6
- package/dist/grpc-client.js +6 -2
- package/dist/index.js +43 -8
- package/dist/types.d.ts +5 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
package/dist/context-engine.js
CHANGED
|
@@ -275,6 +275,17 @@ function resolvePredictiveCompactionTokenCount(args) {
|
|
|
275
275
|
return (normalizeCurrentTokenCount(args.currentTokenCount) ??
|
|
276
276
|
approximateMessagesTokens(args.messages) + approximateTokenCount(args.prompt ?? ""));
|
|
277
277
|
}
|
|
278
|
+
function resolveAfterTurnPredictiveCompactionTokenCount(args) {
|
|
279
|
+
const currentTokenCount = normalizeCurrentTokenCount(args.currentTokenCount);
|
|
280
|
+
const forwardedMessageTokens = normalizeCurrentTokenCount(approximateMessagesTokens(args.messages));
|
|
281
|
+
if (currentTokenCount == null) {
|
|
282
|
+
return forwardedMessageTokens;
|
|
283
|
+
}
|
|
284
|
+
if (forwardedMessageTokens == null) {
|
|
285
|
+
return currentTokenCount;
|
|
286
|
+
}
|
|
287
|
+
return Math.max(currentTokenCount, forwardedMessageTokens);
|
|
288
|
+
}
|
|
278
289
|
export function normalizeKernelMessage(message) {
|
|
279
290
|
return {
|
|
280
291
|
role: message.role,
|
|
@@ -387,6 +398,7 @@ export function normalizeAssembleResult(result) {
|
|
|
387
398
|
};
|
|
388
399
|
}
|
|
389
400
|
export function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
401
|
+
const predictiveContextCache = new Map();
|
|
390
402
|
let cachedIdentity = null;
|
|
391
403
|
let cachedSessionKey;
|
|
392
404
|
function resolveUserId(args) {
|
|
@@ -564,11 +576,15 @@ export function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
|
564
576
|
}
|
|
565
577
|
async function performAfterTurnPredictiveCompaction(args) {
|
|
566
578
|
const dynamicCompactThreshold = getDynamicCompactThreshold(args.tokenBudget);
|
|
567
|
-
const
|
|
579
|
+
const currentContextTokens = resolveAfterTurnPredictiveCompactionTokenCount({
|
|
568
580
|
currentTokenCount: args.currentTokenCount,
|
|
581
|
+
messages: args.messages,
|
|
582
|
+
});
|
|
583
|
+
const predictiveTargetSize = resolvePredictiveCompactionTarget({
|
|
584
|
+
currentTokenCount: currentContextTokens,
|
|
569
585
|
threshold: dynamicCompactThreshold,
|
|
570
586
|
});
|
|
571
|
-
if (
|
|
587
|
+
if (currentContextTokens == null ||
|
|
572
588
|
dynamicCompactThreshold == null ||
|
|
573
589
|
predictiveTargetSize == null) {
|
|
574
590
|
return;
|
|
@@ -577,7 +593,7 @@ export function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
|
577
593
|
logger,
|
|
578
594
|
phase: "afterTurn",
|
|
579
595
|
sessionId: args.sessionId,
|
|
580
|
-
currentTokenCount:
|
|
596
|
+
currentTokenCount: currentContextTokens,
|
|
581
597
|
threshold: dynamicCompactThreshold,
|
|
582
598
|
targetSize: predictiveTargetSize,
|
|
583
599
|
tokenBudget: args.tokenBudget,
|
|
@@ -587,13 +603,13 @@ export function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
|
587
603
|
targetSize: predictiveTargetSize,
|
|
588
604
|
tokenBudget: args.tokenBudget,
|
|
589
605
|
force: true,
|
|
590
|
-
currentTokenCount:
|
|
606
|
+
currentTokenCount: currentContextTokens,
|
|
591
607
|
});
|
|
592
608
|
logPredictiveCompactionOutcome({
|
|
593
609
|
logger,
|
|
594
610
|
phase: "afterTurn",
|
|
595
611
|
sessionId: args.sessionId,
|
|
596
|
-
currentTokenCount:
|
|
612
|
+
currentTokenCount: currentContextTokens,
|
|
597
613
|
threshold: dynamicCompactThreshold,
|
|
598
614
|
targetSize: predictiveTargetSize,
|
|
599
615
|
tokenBudget: args.tokenBudget,
|
|
@@ -760,12 +776,19 @@ export function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
|
760
776
|
config: buildAssemblyConfig(args.tokenBudget),
|
|
761
777
|
});
|
|
762
778
|
const assembled = normalizeAssembleResult(resp);
|
|
763
|
-
|
|
779
|
+
const enforced = enforceTokenBudgetInvariant(await augmentWithExactRecall(assembled, {
|
|
764
780
|
queryText: args.prompt ?? messages[messages.length - 1]?.content ?? "",
|
|
765
781
|
userId,
|
|
766
782
|
sessionId,
|
|
767
783
|
tokenBudget: args.tokenBudget,
|
|
768
784
|
}), args.tokenBudget);
|
|
785
|
+
const predictions = predictiveContextCache.get(sessionId) || [];
|
|
786
|
+
predictiveContextCache.delete(sessionId);
|
|
787
|
+
if (predictions.length > 0) {
|
|
788
|
+
const injection = ["<predictive_context>", ...predictions.map((p) => p.text), "</predictive_context>"].join("\n");
|
|
789
|
+
enforced.systemPromptAddition = appendSystemPromptAddition(enforced.systemPromptAddition, injection);
|
|
790
|
+
}
|
|
791
|
+
return enforced;
|
|
769
792
|
}
|
|
770
793
|
catch (error) {
|
|
771
794
|
logger.warn?.(`LibraVDB assemble sidecar failed, using budget-clamped fallback context: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -803,9 +826,14 @@ export function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
|
803
826
|
});
|
|
804
827
|
await performAfterTurnPredictiveCompaction({
|
|
805
828
|
sessionId,
|
|
829
|
+
messages,
|
|
806
830
|
tokenBudget: args.tokenBudget,
|
|
807
831
|
currentTokenCount,
|
|
808
832
|
});
|
|
833
|
+
const predictions = result.predictions;
|
|
834
|
+
if (Array.isArray(predictions) && predictions.length > 0) {
|
|
835
|
+
predictiveContextCache.set(sessionId, predictions);
|
|
836
|
+
}
|
|
809
837
|
return result;
|
|
810
838
|
}
|
|
811
839
|
const rpc = await runtime.getRpc();
|
|
@@ -818,9 +846,14 @@ export function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
|
818
846
|
});
|
|
819
847
|
await performAfterTurnPredictiveCompaction({
|
|
820
848
|
sessionId,
|
|
849
|
+
messages,
|
|
821
850
|
tokenBudget: args.tokenBudget,
|
|
822
851
|
currentTokenCount,
|
|
823
852
|
});
|
|
853
|
+
const predictions = result.predictions;
|
|
854
|
+
if (Array.isArray(predictions) && predictions.length > 0) {
|
|
855
|
+
predictiveContextCache.set(sessionId, predictions);
|
|
856
|
+
}
|
|
824
857
|
return result;
|
|
825
858
|
}
|
|
826
859
|
catch (error) {
|
package/dist/grpc-client.js
CHANGED
|
@@ -36,8 +36,12 @@ export class GrpcKernelClient {
|
|
|
36
36
|
if (!this.nonceHex) {
|
|
37
37
|
throw new Error("call initializeSession before authenticated RPCs");
|
|
38
38
|
}
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
// Challenge-response: HMAC(secret, nonce) — the secret is the HMAC key,
|
|
40
|
+
// the server-issued nonce is the message. The previous implementation
|
|
41
|
+
// swapped these, computing HMAC(nonce, secret), which is cryptographically
|
|
42
|
+
// incorrect: the nonce is sent in the clear and must not be used as the key.
|
|
43
|
+
const hmac = createHmac("sha256", this.secret);
|
|
44
|
+
hmac.update(this.nonceHex);
|
|
41
45
|
const signature = hmac.digest("hex");
|
|
42
46
|
md.add("x-libravdb-auth", signature);
|
|
43
47
|
}
|
package/dist/index.js
CHANGED
|
@@ -33927,6 +33927,19 @@ function buildBudgetFallbackContext(messages, tokenBudget) {
|
|
|
33927
33927
|
function resolvePredictiveCompactionTokenCount(args) {
|
|
33928
33928
|
return normalizeCurrentTokenCount(args.currentTokenCount) ?? approximateMessagesTokens(args.messages) + approximateTokenCount(args.prompt ?? "");
|
|
33929
33929
|
}
|
|
33930
|
+
function resolveAfterTurnPredictiveCompactionTokenCount(args) {
|
|
33931
|
+
const currentTokenCount = normalizeCurrentTokenCount(args.currentTokenCount);
|
|
33932
|
+
const forwardedMessageTokens = normalizeCurrentTokenCount(
|
|
33933
|
+
approximateMessagesTokens(args.messages)
|
|
33934
|
+
);
|
|
33935
|
+
if (currentTokenCount == null) {
|
|
33936
|
+
return forwardedMessageTokens;
|
|
33937
|
+
}
|
|
33938
|
+
if (forwardedMessageTokens == null) {
|
|
33939
|
+
return currentTokenCount;
|
|
33940
|
+
}
|
|
33941
|
+
return Math.max(currentTokenCount, forwardedMessageTokens);
|
|
33942
|
+
}
|
|
33930
33943
|
function normalizeKernelMessage(message) {
|
|
33931
33944
|
return {
|
|
33932
33945
|
role: message.role,
|
|
@@ -34021,6 +34034,7 @@ function normalizeAssembleResult(result) {
|
|
|
34021
34034
|
};
|
|
34022
34035
|
}
|
|
34023
34036
|
function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
34037
|
+
const predictiveContextCache = /* @__PURE__ */ new Map();
|
|
34024
34038
|
let cachedIdentity = null;
|
|
34025
34039
|
let cachedSessionKey;
|
|
34026
34040
|
function resolveUserId(args) {
|
|
@@ -34184,18 +34198,22 @@ function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
|
34184
34198
|
}
|
|
34185
34199
|
async function performAfterTurnPredictiveCompaction(args) {
|
|
34186
34200
|
const dynamicCompactThreshold = getDynamicCompactThreshold(args.tokenBudget);
|
|
34187
|
-
const
|
|
34201
|
+
const currentContextTokens = resolveAfterTurnPredictiveCompactionTokenCount({
|
|
34188
34202
|
currentTokenCount: args.currentTokenCount,
|
|
34203
|
+
messages: args.messages
|
|
34204
|
+
});
|
|
34205
|
+
const predictiveTargetSize = resolvePredictiveCompactionTarget({
|
|
34206
|
+
currentTokenCount: currentContextTokens,
|
|
34189
34207
|
threshold: dynamicCompactThreshold
|
|
34190
34208
|
});
|
|
34191
|
-
if (
|
|
34209
|
+
if (currentContextTokens == null || dynamicCompactThreshold == null || predictiveTargetSize == null) {
|
|
34192
34210
|
return;
|
|
34193
34211
|
}
|
|
34194
34212
|
logPredictiveCompactionAttempt({
|
|
34195
34213
|
logger,
|
|
34196
34214
|
phase: "afterTurn",
|
|
34197
34215
|
sessionId: args.sessionId,
|
|
34198
|
-
currentTokenCount:
|
|
34216
|
+
currentTokenCount: currentContextTokens,
|
|
34199
34217
|
threshold: dynamicCompactThreshold,
|
|
34200
34218
|
targetSize: predictiveTargetSize,
|
|
34201
34219
|
tokenBudget: args.tokenBudget
|
|
@@ -34205,13 +34223,13 @@ function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
|
34205
34223
|
targetSize: predictiveTargetSize,
|
|
34206
34224
|
tokenBudget: args.tokenBudget,
|
|
34207
34225
|
force: true,
|
|
34208
|
-
currentTokenCount:
|
|
34226
|
+
currentTokenCount: currentContextTokens
|
|
34209
34227
|
});
|
|
34210
34228
|
logPredictiveCompactionOutcome({
|
|
34211
34229
|
logger,
|
|
34212
34230
|
phase: "afterTurn",
|
|
34213
34231
|
sessionId: args.sessionId,
|
|
34214
|
-
currentTokenCount:
|
|
34232
|
+
currentTokenCount: currentContextTokens,
|
|
34215
34233
|
threshold: dynamicCompactThreshold,
|
|
34216
34234
|
targetSize: predictiveTargetSize,
|
|
34217
34235
|
tokenBudget: args.tokenBudget,
|
|
@@ -34382,7 +34400,7 @@ function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
|
34382
34400
|
config: buildAssemblyConfig(args.tokenBudget)
|
|
34383
34401
|
});
|
|
34384
34402
|
const assembled = normalizeAssembleResult(resp);
|
|
34385
|
-
|
|
34403
|
+
const enforced = enforceTokenBudgetInvariant(
|
|
34386
34404
|
await augmentWithExactRecall(assembled, {
|
|
34387
34405
|
queryText: args.prompt ?? messages[messages.length - 1]?.content ?? "",
|
|
34388
34406
|
userId,
|
|
@@ -34391,6 +34409,13 @@ function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
|
34391
34409
|
}),
|
|
34392
34410
|
args.tokenBudget
|
|
34393
34411
|
);
|
|
34412
|
+
const predictions = predictiveContextCache.get(sessionId) || [];
|
|
34413
|
+
predictiveContextCache.delete(sessionId);
|
|
34414
|
+
if (predictions.length > 0) {
|
|
34415
|
+
const injection = ["<predictive_context>", ...predictions.map((p) => p.text), "</predictive_context>"].join("\n");
|
|
34416
|
+
enforced.systemPromptAddition = appendSystemPromptAddition(enforced.systemPromptAddition, injection);
|
|
34417
|
+
}
|
|
34418
|
+
return enforced;
|
|
34394
34419
|
} catch (error) {
|
|
34395
34420
|
logger.warn?.(
|
|
34396
34421
|
`LibraVDB assemble sidecar failed, using budget-clamped fallback context: ${error instanceof Error ? error.message : String(error)}`
|
|
@@ -34428,9 +34453,14 @@ function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
|
34428
34453
|
});
|
|
34429
34454
|
await performAfterTurnPredictiveCompaction({
|
|
34430
34455
|
sessionId,
|
|
34456
|
+
messages,
|
|
34431
34457
|
tokenBudget: args.tokenBudget,
|
|
34432
34458
|
currentTokenCount
|
|
34433
34459
|
});
|
|
34460
|
+
const predictions2 = result2.predictions;
|
|
34461
|
+
if (Array.isArray(predictions2) && predictions2.length > 0) {
|
|
34462
|
+
predictiveContextCache.set(sessionId, predictions2);
|
|
34463
|
+
}
|
|
34434
34464
|
return result2;
|
|
34435
34465
|
}
|
|
34436
34466
|
const rpc = await runtime.getRpc();
|
|
@@ -34443,9 +34473,14 @@ function buildContextEngineFactory(runtime, cfg, logger = console) {
|
|
|
34443
34473
|
});
|
|
34444
34474
|
await performAfterTurnPredictiveCompaction({
|
|
34445
34475
|
sessionId,
|
|
34476
|
+
messages,
|
|
34446
34477
|
tokenBudget: args.tokenBudget,
|
|
34447
34478
|
currentTokenCount
|
|
34448
34479
|
});
|
|
34480
|
+
const predictions = result.predictions;
|
|
34481
|
+
if (Array.isArray(predictions) && predictions.length > 0) {
|
|
34482
|
+
predictiveContextCache.set(sessionId, predictions);
|
|
34483
|
+
}
|
|
34449
34484
|
return result;
|
|
34450
34485
|
} catch (error) {
|
|
34451
34486
|
logger.warn?.(
|
|
@@ -39522,8 +39557,8 @@ var GrpcKernelClient = class {
|
|
|
39522
39557
|
if (!this.nonceHex) {
|
|
39523
39558
|
throw new Error("call initializeSession before authenticated RPCs");
|
|
39524
39559
|
}
|
|
39525
|
-
const hmac = createHmac("sha256",
|
|
39526
|
-
hmac.update(this.
|
|
39560
|
+
const hmac = createHmac("sha256", this.secret);
|
|
39561
|
+
hmac.update(this.nonceHex);
|
|
39527
39562
|
const signature = hmac.digest("hex");
|
|
39528
39563
|
md.add("x-libravdb-auth", signature);
|
|
39529
39564
|
}
|
package/dist/types.d.ts
CHANGED
package/openclaw.plugin.json
CHANGED