openclaw-engram 0.5.1 → 1.0.0
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/formatter.js +2 -2
- package/dist/context/formatter.js.map +1 -1
- package/dist/context/tiers.d.ts +26 -0
- package/dist/context/tiers.d.ts.map +1 -0
- package/dist/context/tiers.js +113 -0
- package/dist/context/tiers.js.map +1 -0
- package/dist/hooks/after-tool-call.d.ts +3 -2
- package/dist/hooks/after-tool-call.d.ts.map +1 -1
- package/dist/hooks/after-tool-call.js +4 -3
- package/dist/hooks/after-tool-call.js.map +1 -1
- package/dist/hooks/before-agent-start.d.ts +23 -0
- package/dist/hooks/before-agent-start.d.ts.map +1 -0
- package/dist/hooks/before-agent-start.js +83 -0
- package/dist/hooks/before-agent-start.js.map +1 -0
- package/dist/hooks/before-compaction.d.ts +3 -2
- package/dist/hooks/before-compaction.d.ts.map +1 -1
- package/dist/hooks/before-compaction.js +11 -6
- package/dist/hooks/before-compaction.js.map +1 -1
- package/dist/hooks/before-prompt-build.d.ts +3 -2
- package/dist/hooks/before-prompt-build.d.ts.map +1 -1
- package/dist/hooks/before-prompt-build.js +13 -6
- package/dist/hooks/before-prompt-build.js.map +1 -1
- package/dist/hooks/session-end.d.ts +3 -2
- package/dist/hooks/session-end.d.ts.map +1 -1
- package/dist/hooks/session-end.js +15 -7
- package/dist/hooks/session-end.js.map +1 -1
- package/dist/hooks/session-start.d.ts +9 -5
- package/dist/hooks/session-start.d.ts.map +1 -1
- package/dist/hooks/session-start.js +18 -51
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -8
- package/dist/index.js.map +1 -1
- package/dist/security/redactor.d.ts +18 -0
- package/dist/security/redactor.d.ts.map +1 -0
- package/dist/security/redactor.js +128 -0
- package/dist/security/redactor.js.map +1 -0
- package/dist/tools/engram-remember.d.ts.map +1 -1
- package/dist/tools/engram-remember.js +5 -4
- package/dist/tools/engram-remember.js.map +1 -1
- package/dist/tools/engram-search.d.ts.map +1 -1
- package/dist/tools/engram-search.js +8 -1
- package/dist/tools/engram-search.js.map +1 -1
- package/dist/types/openclaw.d.ts +21 -5
- package/dist/types/openclaw.d.ts.map +1 -1
- package/openclaw.plugin.json +2 -1
- package/package.json +1 -1
|
@@ -146,7 +146,7 @@ function applyTokenBudget(observations, tokenBudget) {
|
|
|
146
146
|
return { budgeted, trimmedCount: observations.length - budgeted.length };
|
|
147
147
|
}
|
|
148
148
|
function renderXml(groups) {
|
|
149
|
-
let out = '<
|
|
149
|
+
let out = '<engram-context>\n';
|
|
150
150
|
out += '# Relevant Knowledge From Previous Sessions\n';
|
|
151
151
|
out +=
|
|
152
152
|
'IMPORTANT: Use this information to answer the question directly. Do NOT explore the codebase if the answer is here.\n\n';
|
|
@@ -187,7 +187,7 @@ function renderXml(groups) {
|
|
|
187
187
|
'REMINDER: Before modifying any file mentioned above, call `engram_search(query="path")` to check for additional context. ';
|
|
188
188
|
out +=
|
|
189
189
|
'Before architectural decisions, call `engram_decisions(query="...")`. These engram tools are available and MUST be used.\n';
|
|
190
|
-
out += '</
|
|
190
|
+
out += '</engram-context>\n';
|
|
191
191
|
return out;
|
|
192
192
|
}
|
|
193
193
|
//# sourceMappingURL=formatter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/context/formatter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/context/formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export type ContextTier = 'FULL' | 'TARGETED' | 'MINIMAL' | 'NONE';
|
|
2
|
+
export interface TierConfig {
|
|
3
|
+
/** How often to do a FULL search (every N turns). Default: 8. */
|
|
4
|
+
fullSearchInterval: number;
|
|
5
|
+
/** How often to do a MINIMAL search if no other trigger. Default: 4. */
|
|
6
|
+
minimalInterval: number;
|
|
7
|
+
/** Maximum prompt length (chars) to be classified as NONE. Default: 30. */
|
|
8
|
+
shortPromptMaxChars: number;
|
|
9
|
+
}
|
|
10
|
+
export declare const DEFAULT_TIER_CONFIG: TierConfig;
|
|
11
|
+
export interface TierResult {
|
|
12
|
+
tier: ContextTier;
|
|
13
|
+
tokenBudget: number;
|
|
14
|
+
reason: string;
|
|
15
|
+
}
|
|
16
|
+
export declare class TurnTracker {
|
|
17
|
+
private turnCount;
|
|
18
|
+
private lastPrompt;
|
|
19
|
+
private readonly config;
|
|
20
|
+
constructor(config?: Partial<TierConfig>);
|
|
21
|
+
/** Classify the current turn and return the appropriate tier. */
|
|
22
|
+
classify(prompt: string): TierResult;
|
|
23
|
+
/** Reset tracker (e.g., on new session). */
|
|
24
|
+
reset(): void;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=tiers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiers.d.ts","sourceRoot":"","sources":["../../src/context/tiers.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAEnE,MAAM,WAAW,UAAU;IACzB,iEAAiE;IACjE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,wEAAwE;IACxE,eAAe,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,mBAAmB,EAAE,UAIjC,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AA4DD,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;gBAExB,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC;IAIxC,iEAAiE;IACjE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;IA+CpC,4CAA4C;IAC5C,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TurnTracker = exports.DEFAULT_TIER_CONFIG = void 0;
|
|
4
|
+
exports.DEFAULT_TIER_CONFIG = {
|
|
5
|
+
fullSearchInterval: 8,
|
|
6
|
+
minimalInterval: 4,
|
|
7
|
+
shortPromptMaxChars: 30,
|
|
8
|
+
};
|
|
9
|
+
const TOKEN_BUDGETS = {
|
|
10
|
+
FULL: 2000,
|
|
11
|
+
TARGETED: 1000,
|
|
12
|
+
MINIMAL: 500,
|
|
13
|
+
NONE: 0,
|
|
14
|
+
};
|
|
15
|
+
const RECALL_PHRASES = [
|
|
16
|
+
'remember',
|
|
17
|
+
'recall',
|
|
18
|
+
'what do you know about',
|
|
19
|
+
'prior decision',
|
|
20
|
+
'previous session',
|
|
21
|
+
'what was decided',
|
|
22
|
+
'engram',
|
|
23
|
+
'memory',
|
|
24
|
+
];
|
|
25
|
+
const STOP_WORDS = new Set([
|
|
26
|
+
'the', 'this', 'that', 'with', 'from', 'have', 'been',
|
|
27
|
+
'will', 'would', 'could', 'should', 'about', 'into',
|
|
28
|
+
'what', 'when', 'where', 'which', 'there', 'their',
|
|
29
|
+
'also', 'just', 'more', 'some', 'than', 'them', 'then',
|
|
30
|
+
'very', 'your', 'make', 'like', 'does', 'each', 'only',
|
|
31
|
+
'need', 'want', 'please', 'can', 'are', 'for', 'and',
|
|
32
|
+
'but', 'not', 'you', 'all', 'any', 'her', 'was', 'one',
|
|
33
|
+
'our', 'out', 'has', 'had', 'how', 'its', 'may', 'new',
|
|
34
|
+
'now', 'old', 'see', 'way', 'who', 'did', 'get', 'let',
|
|
35
|
+
'say', 'she', 'too', 'use',
|
|
36
|
+
]);
|
|
37
|
+
function extractSignificantWords(text) {
|
|
38
|
+
return new Set(text
|
|
39
|
+
.toLowerCase()
|
|
40
|
+
.split(/\W+/)
|
|
41
|
+
.filter((w) => w.length > 3 && !STOP_WORDS.has(w)));
|
|
42
|
+
}
|
|
43
|
+
function jaccardSimilarity(a, b) {
|
|
44
|
+
if (a.size === 0 && b.size === 0)
|
|
45
|
+
return 1;
|
|
46
|
+
const intersection = new Set([...a].filter((w) => b.has(w)));
|
|
47
|
+
const union = new Set([...a, ...b]);
|
|
48
|
+
return union.size === 0 ? 1 : intersection.size / union.size;
|
|
49
|
+
}
|
|
50
|
+
function isTopicShift(current, previous) {
|
|
51
|
+
if (!previous)
|
|
52
|
+
return false;
|
|
53
|
+
const currentWords = extractSignificantWords(current);
|
|
54
|
+
const previousWords = extractSignificantWords(previous);
|
|
55
|
+
return jaccardSimilarity(currentWords, previousWords) < 0.3;
|
|
56
|
+
}
|
|
57
|
+
function makeTier(tier, reason) {
|
|
58
|
+
return { tier, tokenBudget: TOKEN_BUDGETS[tier], reason };
|
|
59
|
+
}
|
|
60
|
+
class TurnTracker {
|
|
61
|
+
turnCount = 0;
|
|
62
|
+
lastPrompt = '';
|
|
63
|
+
config;
|
|
64
|
+
constructor(config) {
|
|
65
|
+
this.config = { ...exports.DEFAULT_TIER_CONFIG, ...config };
|
|
66
|
+
}
|
|
67
|
+
/** Classify the current turn and return the appropriate tier. */
|
|
68
|
+
classify(prompt) {
|
|
69
|
+
this.turnCount++;
|
|
70
|
+
const lowerPrompt = prompt.toLowerCase();
|
|
71
|
+
const hasRecallPhrase = RECALL_PHRASES.some((phrase) => lowerPrompt.includes(phrase));
|
|
72
|
+
// Rule 1: First turn always gets full context.
|
|
73
|
+
if (this.turnCount === 1) {
|
|
74
|
+
this.lastPrompt = prompt;
|
|
75
|
+
return makeTier('FULL', 'first turn');
|
|
76
|
+
}
|
|
77
|
+
// Rule 2: Explicit recall phrases trigger FULL.
|
|
78
|
+
if (hasRecallPhrase) {
|
|
79
|
+
this.lastPrompt = prompt;
|
|
80
|
+
return makeTier('FULL', 'explicit recall');
|
|
81
|
+
}
|
|
82
|
+
// Rule 3: Short prompts without a question mark → NONE.
|
|
83
|
+
if (prompt.length <= this.config.shortPromptMaxChars && !prompt.includes('?')) {
|
|
84
|
+
this.lastPrompt = prompt;
|
|
85
|
+
return makeTier('NONE', 'short response');
|
|
86
|
+
}
|
|
87
|
+
// Rule 4: Periodic FULL.
|
|
88
|
+
if (this.turnCount % this.config.fullSearchInterval === 0) {
|
|
89
|
+
this.lastPrompt = prompt;
|
|
90
|
+
return makeTier('FULL', 'periodic full');
|
|
91
|
+
}
|
|
92
|
+
// Rule 5: Periodic MINIMAL.
|
|
93
|
+
if (this.turnCount % this.config.minimalInterval === 0) {
|
|
94
|
+
this.lastPrompt = prompt;
|
|
95
|
+
return makeTier('MINIMAL', 'periodic minimal');
|
|
96
|
+
}
|
|
97
|
+
// Rule 6: Topic shift → TARGETED.
|
|
98
|
+
if (isTopicShift(prompt, this.lastPrompt)) {
|
|
99
|
+
this.lastPrompt = prompt;
|
|
100
|
+
return makeTier('TARGETED', 'topic shift');
|
|
101
|
+
}
|
|
102
|
+
// Default: no trigger.
|
|
103
|
+
this.lastPrompt = prompt;
|
|
104
|
+
return makeTier('NONE', 'no trigger');
|
|
105
|
+
}
|
|
106
|
+
/** Reset tracker (e.g., on new session). */
|
|
107
|
+
reset() {
|
|
108
|
+
this.turnCount = 0;
|
|
109
|
+
this.lastPrompt = '';
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.TurnTracker = TurnTracker;
|
|
113
|
+
//# sourceMappingURL=tiers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiers.js","sourceRoot":"","sources":["../../src/context/tiers.ts"],"names":[],"mappings":";;;AAWa,QAAA,mBAAmB,GAAe;IAC7C,kBAAkB,EAAE,CAAC;IACrB,eAAe,EAAE,CAAC;IAClB,mBAAmB,EAAE,EAAE;CACxB,CAAC;AAQF,MAAM,aAAa,GAAgC;IACjD,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,GAAG;IACZ,IAAI,EAAE,CAAC;CACR,CAAC;AAEF,MAAM,cAAc,GAAG;IACrB,UAAU;IACV,QAAQ;IACR,wBAAwB;IACxB,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;IAClB,QAAQ;IACR,QAAQ;CACT,CAAC;AAEF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IACzB,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IACrD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM;IACnD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;IAClD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IACtD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IACtD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;IACpD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;IACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;IACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;IACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;CAC3B,CAAC,CAAC;AAEH,SAAS,uBAAuB,CAAC,IAAY;IAC3C,OAAO,IAAI,GAAG,CACZ,IAAI;SACD,WAAW,EAAE;SACb,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACrD,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAc,EAAE,CAAc;IACvD,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AAC/D,CAAC;AAED,SAAS,YAAY,CAAC,OAAe,EAAE,QAAgB;IACrD,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,MAAM,YAAY,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACxD,OAAO,iBAAiB,CAAC,YAAY,EAAE,aAAa,CAAC,GAAG,GAAG,CAAC;AAC9D,CAAC;AAED,SAAS,QAAQ,CAAC,IAAiB,EAAE,MAAc;IACjD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;AAC5D,CAAC;AAED,MAAa,WAAW;IACd,SAAS,GAAG,CAAC,CAAC;IACd,UAAU,GAAG,EAAE,CAAC;IACP,MAAM,CAAa;IAEpC,YAAY,MAA4B;QACtC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,2BAAmB,EAAE,GAAG,MAAM,EAAE,CAAC;IACtD,CAAC;IAED,iEAAiE;IACjE,QAAQ,CAAC,MAAc;QACrB,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjB,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAEtF,+CAA+C;QAC/C,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;YACzB,OAAO,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACxC,CAAC;QAED,gDAAgD;QAChD,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;YACzB,OAAO,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAC7C,CAAC;QAED,wDAAwD;QACxD,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9E,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;YACzB,OAAO,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC5C,CAAC;QAED,yBAAyB;QACzB,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,KAAK,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;YACzB,OAAO,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC3C,CAAC;QAED,4BAA4B;QAC5B,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,KAAK,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;YACzB,OAAO,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;QACjD,CAAC;QAED,kCAAkC;QAClC,IAAI,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;YACzB,OAAO,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAC7C,CAAC;QAED,uBAAuB;QACvB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QACzB,OAAO,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACxC,CAAC;IAED,4CAA4C;IAC5C,KAAK;QACH,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;CACF;AA9DD,kCA8DC"}
|
|
@@ -7,13 +7,14 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { EngramRestClient } from '../client.js';
|
|
9
9
|
import type { PluginConfig } from '../config.js';
|
|
10
|
-
import type { AfterToolCallEvent } from '../types/openclaw.js';
|
|
10
|
+
import type { AfterToolCallEvent, PluginHookContext } from '../types/openclaw.js';
|
|
11
11
|
/**
|
|
12
12
|
* Handle the after_tool_call hook.
|
|
13
13
|
*
|
|
14
14
|
* @param event - The after_tool_call event from OpenClaw.
|
|
15
|
+
* @param ctx - The hook context containing agent identity fields.
|
|
15
16
|
* @param client - Shared engram REST client.
|
|
16
17
|
* @param config - Resolved plugin config.
|
|
17
18
|
*/
|
|
18
|
-
export declare function handleAfterToolCall(event: AfterToolCallEvent, client: EngramRestClient, config: PluginConfig): void;
|
|
19
|
+
export declare function handleAfterToolCall(event: AfterToolCallEvent, ctx: PluginHookContext, client: EngramRestClient, config: PluginConfig): void;
|
|
19
20
|
//# sourceMappingURL=after-tool-call.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"after-tool-call.d.ts","sourceRoot":"","sources":["../../src/hooks/after-tool-call.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"after-tool-call.d.ts","sourceRoot":"","sources":["../../src/hooks/after-tool-call.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAKlF;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,kBAAkB,EACzB,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,YAAY,GACnB,IAAI,CA0BN"}
|
|
@@ -15,16 +15,17 @@ const TOOL_RESULT_MAX_CHARS = 500;
|
|
|
15
15
|
* Handle the after_tool_call hook.
|
|
16
16
|
*
|
|
17
17
|
* @param event - The after_tool_call event from OpenClaw.
|
|
18
|
+
* @param ctx - The hook context containing agent identity fields.
|
|
18
19
|
* @param client - Shared engram REST client.
|
|
19
20
|
* @param config - Resolved plugin config.
|
|
20
21
|
*/
|
|
21
|
-
function handleAfterToolCall(event, client, config) {
|
|
22
|
+
function handleAfterToolCall(event, ctx, client, config) {
|
|
22
23
|
if (!client.isAvailable())
|
|
23
24
|
return;
|
|
24
25
|
if (!config.autoExtract)
|
|
25
26
|
return;
|
|
26
|
-
const agentId =
|
|
27
|
-
const identity = (0, identity_js_1.resolveIdentity)(agentId,
|
|
27
|
+
const agentId = ctx.agentId ?? '';
|
|
28
|
+
const identity = (0, identity_js_1.resolveIdentity)(agentId, ctx.workspaceDir);
|
|
28
29
|
const project = config.project ?? identity.projectId;
|
|
29
30
|
let toolInput;
|
|
30
31
|
let toolResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"after-tool-call.js","sourceRoot":"","sources":["../../src/hooks/after-tool-call.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;
|
|
1
|
+
{"version":3,"file":"after-tool-call.js","sourceRoot":"","sources":["../../src/hooks/after-tool-call.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAkBH,kDA+BC;AA7CD,gDAAiD;AAGjD,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAElC;;;;;;;GAOG;AACH,SAAgB,mBAAmB,CACjC,KAAyB,EACzB,GAAsB,EACtB,MAAwB,EACxB,MAAoB;IAEpB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;QAAE,OAAO;IAClC,IAAI,CAAC,MAAM,CAAC,WAAW;QAAE,OAAO;IAEhC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAA,6BAAe,EAAC,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC;IAErD,IAAI,SAAiB,CAAC;IACtB,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QACH,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAClF,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;IACvF,CAAC;IAAC,MAAM,CAAC;QACP,SAAS,GAAG,kBAAkB,CAAC;QAC/B,UAAU,GAAG,kBAAkB,CAAC;IAClC,CAAC;IAED,iCAAiC;IACjC,KAAK,MAAM,CAAC,WAAW,CAAC;QACtB,UAAU,EAAE,OAAO;QACnB,OAAO;QACP,SAAS,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS;QACtC,UAAU,EAAE,SAAS;QACrB,WAAW,EAAE,UAAU;KACxB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAmC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,QAAgB;IAC/C,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC3C,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* before_agent_start hook — fetches static session context from engram and
|
|
3
|
+
* injects it as appendSystemContext so it is available for the entire session.
|
|
4
|
+
*
|
|
5
|
+
* This hook replaces the context-injection logic that was previously in
|
|
6
|
+
* session_start. The SDK passes agent identity via ctx (not event), so all
|
|
7
|
+
* identity resolution happens here via the ctx parameter.
|
|
8
|
+
*/
|
|
9
|
+
import type { EngramRestClient } from '../client.js';
|
|
10
|
+
import type { PluginConfig } from '../config.js';
|
|
11
|
+
import type { BeforeAgentStartEvent, BeforeAgentStartResult, PluginHookContext, PluginLogger } from '../types/openclaw.js';
|
|
12
|
+
/**
|
|
13
|
+
* Handle the before_agent_start hook.
|
|
14
|
+
*
|
|
15
|
+
* @param event - The before_agent_start event from OpenClaw.
|
|
16
|
+
* @param ctx - The hook context containing agent identity fields.
|
|
17
|
+
* @param client - Shared engram REST client.
|
|
18
|
+
* @param config - Resolved plugin config.
|
|
19
|
+
* @param logger - Optional logger (falls back to console).
|
|
20
|
+
* @returns Append-system-context result, or void if nothing to inject.
|
|
21
|
+
*/
|
|
22
|
+
export declare function handleBeforeAgentStart(event: BeforeAgentStartEvent, ctx: PluginHookContext, client: EngramRestClient, config: PluginConfig, logger?: PluginLogger): Promise<BeforeAgentStartResult | void>;
|
|
23
|
+
//# sourceMappingURL=before-agent-start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"before-agent-start.d.ts","sourceRoot":"","sources":["../../src/hooks/before-agent-start.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,YAAY,EACb,MAAM,sBAAsB,CAAC;AAE9B;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,qBAAqB,EAC5B,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CA6DxC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* before_agent_start hook — fetches static session context from engram and
|
|
4
|
+
* injects it as appendSystemContext so it is available for the entire session.
|
|
5
|
+
*
|
|
6
|
+
* This hook replaces the context-injection logic that was previously in
|
|
7
|
+
* session_start. The SDK passes agent identity via ctx (not event), so all
|
|
8
|
+
* identity resolution happens here via the ctx parameter.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.handleBeforeAgentStart = handleBeforeAgentStart;
|
|
12
|
+
const identity_js_1 = require("../identity.js");
|
|
13
|
+
const formatter_js_1 = require("../context/formatter.js");
|
|
14
|
+
/**
|
|
15
|
+
* Handle the before_agent_start hook.
|
|
16
|
+
*
|
|
17
|
+
* @param event - The before_agent_start event from OpenClaw.
|
|
18
|
+
* @param ctx - The hook context containing agent identity fields.
|
|
19
|
+
* @param client - Shared engram REST client.
|
|
20
|
+
* @param config - Resolved plugin config.
|
|
21
|
+
* @param logger - Optional logger (falls back to console).
|
|
22
|
+
* @returns Append-system-context result, or void if nothing to inject.
|
|
23
|
+
*/
|
|
24
|
+
async function handleBeforeAgentStart(event, ctx, client, config, logger) {
|
|
25
|
+
try {
|
|
26
|
+
if (!client.isAvailable())
|
|
27
|
+
return;
|
|
28
|
+
const agentId = ctx.agentId ?? '';
|
|
29
|
+
const identity = (0, identity_js_1.resolveIdentity)(agentId, ctx.workspaceDir);
|
|
30
|
+
const project = config.project ?? identity.projectId;
|
|
31
|
+
const response = await client.getContextInject(agentId, ctx.workspaceDir);
|
|
32
|
+
if (!response || !Array.isArray(response.observations) || response.observations.length === 0) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const { context, injectedIds, trimmedCount } = (0, formatter_js_1.formatContext)(response.observations, { tokenBudget: config.tokenBudget });
|
|
36
|
+
if (trimmedCount > 0) {
|
|
37
|
+
(logger ?? console).warn(`[engram] before-agent-start: trimmed ${trimmedCount} observations to fit token budget`);
|
|
38
|
+
}
|
|
39
|
+
if (!context)
|
|
40
|
+
return;
|
|
41
|
+
// Mark observations as injected (fire-and-forget)
|
|
42
|
+
if (injectedIds.length > 0 && response.sessionId) {
|
|
43
|
+
void client.markInjected(response.sessionId, injectedIds);
|
|
44
|
+
}
|
|
45
|
+
// Initialize session tracking (fire-and-forget)
|
|
46
|
+
const claudeSessionId = ctx.sessionId ?? agentId;
|
|
47
|
+
if (!claudeSessionId) {
|
|
48
|
+
(logger ?? console).warn('[engram] before-agent-start: no sessionId or agentId available — skipping session init');
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
void client.initSession({
|
|
52
|
+
claudeSessionId,
|
|
53
|
+
project,
|
|
54
|
+
prompt: event.initialPrompt,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
(logger ?? console).warn(`[engram] before-agent-start: injected ${injectedIds.length} observations for project ${project}`);
|
|
58
|
+
// Build static instructions + dynamic session context
|
|
59
|
+
const staticInstructions = buildStaticInstructions(project);
|
|
60
|
+
const fullContext = staticInstructions + '\n\n' + context;
|
|
61
|
+
return { appendSystemContext: fullContext };
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
(logger ?? console).error('[engram] hook error:', err);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Build cacheable static instructions injected once per session.
|
|
69
|
+
* These describe available engram capabilities to the agent.
|
|
70
|
+
*/
|
|
71
|
+
function buildStaticInstructions(project) {
|
|
72
|
+
return [
|
|
73
|
+
'# Engram Persistent Memory',
|
|
74
|
+
'',
|
|
75
|
+
'You have access to persistent memory via engram. Available tools:',
|
|
76
|
+
'- `engram_search` — search prior observations, decisions, and patterns',
|
|
77
|
+
'- `engram_remember` — store new observations for future sessions',
|
|
78
|
+
'- `engram_decisions` — query architectural decisions',
|
|
79
|
+
'',
|
|
80
|
+
`Memory is scoped to project "${project}". Use \`engram_remember\` to store important insights, decisions, and discoveries.`,
|
|
81
|
+
].join('\n');
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=before-agent-start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"before-agent-start.js","sourceRoot":"","sources":["../../src/hooks/before-agent-start.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAuBH,wDAmEC;AAtFD,gDAAiD;AACjD,0DAAwD;AAQxD;;;;;;;;;GASG;AACI,KAAK,UAAU,sBAAsB,CAC1C,KAA4B,EAC5B,GAAsB,EACtB,MAAwB,EACxB,MAAoB,EACpB,MAAqB;IAErB,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YAAE,OAAO;QAElC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAA,6BAAe,EAAC,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC;QAErD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAC5C,OAAO,EACP,GAAG,CAAC,YAAY,CACjB,CAAC;QAEF,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7F,OAAO;QACT,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,IAAA,4BAAa,EAC1D,QAAQ,CAAC,YAAY,EACrB,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CACpC,CAAC;QAEF,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,CACtB,wCAAwC,YAAY,mCAAmC,CACxF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,kDAAkD;QAClD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YACjD,KAAK,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC5D,CAAC;QAED,gDAAgD;QAChD,MAAM,eAAe,GAAG,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC;QACjD,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,CACtB,wFAAwF,CACzF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,CAAC,WAAW,CAAC;gBACtB,eAAe;gBACf,OAAO;gBACP,MAAM,EAAE,KAAK,CAAC,aAAa;aAC5B,CAAC,CAAC;QACL,CAAC;QAED,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,CACtB,yCAAyC,WAAW,CAAC,MAAM,6BAA6B,OAAO,EAAE,CAClG,CAAC;QAEF,sDAAsD;QACtD,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,kBAAkB,GAAG,MAAM,GAAG,OAAO,CAAC;QAE1D,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,CAAC;IAC9C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,uBAAuB,CAAC,OAAe;IAC9C,OAAO;QACL,4BAA4B;QAC5B,EAAE;QACF,mEAAmE;QACnE,wEAAwE;QACxE,kEAAkE;QAClE,sDAAsD;QACtD,EAAE;QACF,gCAAgC,OAAO,qFAAqF;KAC7H,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -7,13 +7,14 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { EngramRestClient } from '../client.js';
|
|
9
9
|
import type { PluginConfig } from '../config.js';
|
|
10
|
-
import type { BeforeCompactionEvent, PluginLogger } from '../types/openclaw.js';
|
|
10
|
+
import type { BeforeCompactionEvent, PluginHookContext, PluginLogger } from '../types/openclaw.js';
|
|
11
11
|
/**
|
|
12
12
|
* Handle the before_compaction hook.
|
|
13
13
|
*
|
|
14
14
|
* @param event - The before_compaction event from OpenClaw.
|
|
15
|
+
* @param ctx - The hook context containing agent identity fields.
|
|
15
16
|
* @param client - Shared engram REST client.
|
|
16
17
|
* @param config - Resolved plugin config.
|
|
17
18
|
*/
|
|
18
|
-
export declare function handleBeforeCompaction(event: BeforeCompactionEvent, client: EngramRestClient, config: PluginConfig, logger?: PluginLogger): void;
|
|
19
|
+
export declare function handleBeforeCompaction(event: BeforeCompactionEvent, ctx: PluginHookContext, client: EngramRestClient, config: PluginConfig, logger?: PluginLogger): void;
|
|
19
20
|
//# sourceMappingURL=before-compaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"before-compaction.d.ts","sourceRoot":"","sources":["../../src/hooks/before-compaction.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAE,qBAAqB,EAAuB,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"before-compaction.d.ts","sourceRoot":"","sources":["../../src/hooks/before-compaction.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAE,qBAAqB,EAAuB,iBAAiB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAOxH;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,qBAAqB,EAC5B,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,YAAY,GACpB,IAAI,CAgCN"}
|
|
@@ -17,26 +17,28 @@ const CONTENT_MAX_CHARS = 6000;
|
|
|
17
17
|
* Handle the before_compaction hook.
|
|
18
18
|
*
|
|
19
19
|
* @param event - The before_compaction event from OpenClaw.
|
|
20
|
+
* @param ctx - The hook context containing agent identity fields.
|
|
20
21
|
* @param client - Shared engram REST client.
|
|
21
22
|
* @param config - Resolved plugin config.
|
|
22
23
|
*/
|
|
23
|
-
function handleBeforeCompaction(event, client, config, logger) {
|
|
24
|
+
function handleBeforeCompaction(event, ctx, client, config, logger) {
|
|
24
25
|
try {
|
|
25
26
|
if (!client.isAvailable())
|
|
26
27
|
return;
|
|
27
28
|
if (!config.autoExtract)
|
|
28
29
|
return;
|
|
29
|
-
const agentId =
|
|
30
|
-
const identity = (0, identity_js_1.resolveIdentity)(agentId,
|
|
30
|
+
const agentId = ctx.agentId ?? '';
|
|
31
|
+
const identity = (0, identity_js_1.resolveIdentity)(agentId, ctx.workspaceDir);
|
|
31
32
|
const project = config.project ?? identity.projectId;
|
|
32
33
|
const messages = Array.isArray(event.messages) ? event.messages : [];
|
|
33
34
|
const recent = messages.slice(-MAX_MESSAGES);
|
|
34
35
|
const content = serializeMessages(recent);
|
|
35
36
|
if (!content)
|
|
36
37
|
return;
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
const stripped = stripEngramContext(content);
|
|
39
|
+
const truncated = stripped.length > CONTENT_MAX_CHARS
|
|
40
|
+
? stripped.slice(0, CONTENT_MAX_CHARS)
|
|
41
|
+
: stripped;
|
|
40
42
|
// Fire-and-forget — do not await
|
|
41
43
|
void client.backfillSession({
|
|
42
44
|
session_id: agentId,
|
|
@@ -57,4 +59,7 @@ function serializeMessages(messages) {
|
|
|
57
59
|
.map((m) => `[${m.role}]: ${m.content}`)
|
|
58
60
|
.join('\n\n');
|
|
59
61
|
}
|
|
62
|
+
function stripEngramContext(text) {
|
|
63
|
+
return text.replace(/<engram-context>[\s\S]*?<\/engram-context>/g, '');
|
|
64
|
+
}
|
|
60
65
|
//# sourceMappingURL=before-compaction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"before-compaction.js","sourceRoot":"","sources":["../../src/hooks/before-compaction.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;
|
|
1
|
+
{"version":3,"file":"before-compaction.js","sourceRoot":"","sources":["../../src/hooks/before-compaction.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAoBH,wDAsCC;AAtDD,gDAAiD;AAGjD,kEAAkE;AAClE,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,8EAA8E;AAC9E,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B;;;;;;;GAOG;AACH,SAAgB,sBAAsB,CACpC,KAA4B,EAC5B,GAAsB,EACtB,MAAwB,EACxB,MAAoB,EACpB,MAAqB;IAErB,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YAAE,OAAO;QAClC,IAAI,CAAC,MAAM,CAAC,WAAW;YAAE,OAAO;QAEhC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAA,6BAAe,EAAC,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC;QAErD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,iBAAiB;YACnD,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC;YACtC,CAAC,CAAC,QAAQ,CAAC;QAEb,iCAAiC;QACjC,KAAK,MAAM,CAAC,eAAe,CAAC;YAC1B,UAAU,EAAE,OAAO;YACnB,OAAO;YACP,OAAO,EAAE,SAAS;SACnB,CAAC,CAAC;QAEH,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,CACtB,0CAA0C,MAAM,CAAC,MAAM,mCAAmC,OAAO,GAAG,CACrG,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,iBAAiB,CAAC,QAA+B;IACxD,OAAO,QAAQ;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;SACvC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,OAAO,IAAI,CAAC,OAAO,CAAC,6CAA6C,EAAE,EAAE,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -7,14 +7,15 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { EngramRestClient } from '../client.js';
|
|
9
9
|
import type { PluginConfig } from '../config.js';
|
|
10
|
-
import type { BeforePromptBuildEvent, PromptBuildResult, PluginLogger } from '../types/openclaw.js';
|
|
10
|
+
import type { BeforePromptBuildEvent, PromptBuildResult, PluginHookContext, PluginLogger } from '../types/openclaw.js';
|
|
11
11
|
/**
|
|
12
12
|
* Handle the before_prompt_build hook.
|
|
13
13
|
*
|
|
14
14
|
* @param event - The before_prompt_build event from OpenClaw.
|
|
15
|
+
* @param ctx - The hook context containing agent identity fields.
|
|
15
16
|
* @param client - Shared engram REST client.
|
|
16
17
|
* @param config - Resolved plugin config.
|
|
17
18
|
* @returns Context to prepend, or void if nothing to inject.
|
|
18
19
|
*/
|
|
19
|
-
export declare function handleBeforePromptBuild(event: BeforePromptBuildEvent, client: EngramRestClient, config: PluginConfig, logger?: PluginLogger): Promise<PromptBuildResult | void>;
|
|
20
|
+
export declare function handleBeforePromptBuild(event: BeforePromptBuildEvent, ctx: PluginHookContext, client: EngramRestClient, config: PluginConfig, logger?: PluginLogger): Promise<PromptBuildResult | void>;
|
|
20
21
|
//# sourceMappingURL=before-prompt-build.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"before-prompt-build.d.ts","sourceRoot":"","sources":["../../src/hooks/before-prompt-build.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"before-prompt-build.d.ts","sourceRoot":"","sources":["../../src/hooks/before-prompt-build.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAKjD,OAAO,KAAK,EACV,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACb,MAAM,sBAAsB,CAAC;AAI9B;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,sBAAsB,EAC7B,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAqEnC"}
|
|
@@ -10,29 +10,36 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
10
10
|
exports.handleBeforePromptBuild = handleBeforePromptBuild;
|
|
11
11
|
const identity_js_1 = require("../identity.js");
|
|
12
12
|
const formatter_js_1 = require("../context/formatter.js");
|
|
13
|
+
const tiers_js_1 = require("../context/tiers.js");
|
|
14
|
+
const turnTracker = new tiers_js_1.TurnTracker();
|
|
13
15
|
/**
|
|
14
16
|
* Handle the before_prompt_build hook.
|
|
15
17
|
*
|
|
16
18
|
* @param event - The before_prompt_build event from OpenClaw.
|
|
19
|
+
* @param ctx - The hook context containing agent identity fields.
|
|
17
20
|
* @param client - Shared engram REST client.
|
|
18
21
|
* @param config - Resolved plugin config.
|
|
19
22
|
* @returns Context to prepend, or void if nothing to inject.
|
|
20
23
|
*/
|
|
21
|
-
async function handleBeforePromptBuild(event, client, config, logger) {
|
|
24
|
+
async function handleBeforePromptBuild(event, ctx, client, config, logger) {
|
|
22
25
|
try {
|
|
23
26
|
if (!client.isAvailable())
|
|
24
27
|
return;
|
|
25
28
|
if (!event.prompt || event.prompt.trim() === '')
|
|
26
29
|
return;
|
|
27
|
-
const
|
|
28
|
-
|
|
30
|
+
const tier = turnTracker.classify(event.prompt ?? '');
|
|
31
|
+
logger?.debug(`[engram] before-prompt-build: tier=${tier.tier} reason=${tier.reason}`);
|
|
32
|
+
if (tier.tier === 'NONE')
|
|
33
|
+
return;
|
|
34
|
+
const agentId = ctx.agentId ?? '';
|
|
35
|
+
const identity = (0, identity_js_1.resolveIdentity)(agentId, ctx.workspaceDir);
|
|
29
36
|
const project = config.project ?? identity.projectId;
|
|
30
37
|
let response;
|
|
31
38
|
try {
|
|
32
39
|
response = await client.searchContext({
|
|
33
40
|
project,
|
|
34
41
|
query: event.prompt,
|
|
35
|
-
cwd:
|
|
42
|
+
cwd: ctx.workspaceDir,
|
|
36
43
|
agent_id: agentId,
|
|
37
44
|
});
|
|
38
45
|
}
|
|
@@ -43,7 +50,7 @@ async function handleBeforePromptBuild(event, client, config, logger) {
|
|
|
43
50
|
if (!response || !Array.isArray(response.observations) || response.observations.length === 0) {
|
|
44
51
|
return;
|
|
45
52
|
}
|
|
46
|
-
const { context, injectedIds, trimmedCount } = (0, formatter_js_1.formatContext)(response.observations, { tokenBudget:
|
|
53
|
+
const { context, injectedIds, trimmedCount } = (0, formatter_js_1.formatContext)(response.observations, { tokenBudget: tier.tokenBudget });
|
|
47
54
|
if (trimmedCount > 0) {
|
|
48
55
|
(logger ?? console).warn(`[engram] before-prompt-build: trimmed ${trimmedCount} observations to fit token budget`);
|
|
49
56
|
}
|
|
@@ -54,7 +61,7 @@ async function handleBeforePromptBuild(event, client, config, logger) {
|
|
|
54
61
|
if (injectedIds.length > 0) {
|
|
55
62
|
try {
|
|
56
63
|
const sessionResp = await client.initSession({
|
|
57
|
-
claudeSessionId:
|
|
64
|
+
claudeSessionId: ctx.sessionId ?? agentId,
|
|
58
65
|
project,
|
|
59
66
|
prompt: event.prompt,
|
|
60
67
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"before-prompt-build.js","sourceRoot":"","sources":["../../src/hooks/before-prompt-build.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;
|
|
1
|
+
{"version":3,"file":"before-prompt-build.js","sourceRoot":"","sources":["../../src/hooks/before-prompt-build.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,13 +6,14 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import type { EngramRestClient } from '../client.js';
|
|
8
8
|
import type { PluginConfig } from '../config.js';
|
|
9
|
-
import type { SessionEndEvent, PluginLogger } from '../types/openclaw.js';
|
|
9
|
+
import type { SessionEndEvent, PluginHookContext, PluginLogger } from '../types/openclaw.js';
|
|
10
10
|
/**
|
|
11
11
|
* Handle the session_end hook.
|
|
12
12
|
*
|
|
13
13
|
* @param event - The session_end event from OpenClaw.
|
|
14
|
+
* @param ctx - The hook context containing agent identity fields.
|
|
14
15
|
* @param client - Shared engram REST client.
|
|
15
16
|
* @param config - Resolved plugin config.
|
|
16
17
|
*/
|
|
17
|
-
export declare function handleSessionEnd(event: SessionEndEvent, client: EngramRestClient, config: PluginConfig, logger?: PluginLogger): void;
|
|
18
|
+
export declare function handleSessionEnd(event: SessionEndEvent, ctx: PluginHookContext, client: EngramRestClient, config: PluginConfig, logger?: PluginLogger): void;
|
|
18
19
|
//# sourceMappingURL=session-end.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-end.d.ts","sourceRoot":"","sources":["../../src/hooks/session-end.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAE,eAAe,EAAuB,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-end.d.ts","sourceRoot":"","sources":["../../src/hooks/session-end.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAE,eAAe,EAAuB,iBAAiB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAKlH;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,YAAY,GACpB,IAAI,CAyCN"}
|