openclaw-engram 1.3.1 → 1.4.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.
- package/dist/client.d.ts +15 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +6 -2
- package/dist/client.js.map +1 -1
- package/dist/context/formatter.d.ts +14 -0
- package/dist/context/formatter.d.ts.map +1 -1
- package/dist/context/formatter.js +49 -0
- package/dist/context/formatter.js.map +1 -1
- package/dist/hooks/after-tool-call.d.ts.map +1 -1
- package/dist/hooks/after-tool-call.js +25 -9
- package/dist/hooks/after-tool-call.js.map +1 -1
- package/dist/hooks/before-compaction.d.ts.map +1 -1
- package/dist/hooks/before-compaction.js +2 -9
- package/dist/hooks/before-compaction.js.map +1 -1
- package/dist/hooks/before-prompt-build.d.ts.map +1 -1
- package/dist/hooks/before-prompt-build.js +20 -3
- package/dist/hooks/before-prompt-build.js.map +1 -1
- package/dist/hooks/content.d.ts +16 -0
- package/dist/hooks/content.d.ts.map +1 -0
- package/dist/hooks/content.js +23 -0
- package/dist/hooks/content.js.map +1 -0
- package/dist/hooks/message-classifier.d.ts +23 -0
- package/dist/hooks/message-classifier.d.ts.map +1 -0
- package/dist/hooks/message-classifier.js +92 -0
- package/dist/hooks/message-classifier.js.map +1 -0
- package/dist/hooks/session-end.d.ts.map +1 -1
- package/dist/hooks/session-end.js +2 -11
- package/dist/hooks/session-end.js.map +1 -1
- package/dist/tools/engram-remember.d.ts.map +1 -1
- package/dist/tools/engram-remember.js +4 -1
- 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 +0 -6
- package/dist/tools/engram-search.js.map +1 -1
- package/package.json +1 -1
package/dist/client.d.ts
CHANGED
|
@@ -23,6 +23,12 @@ export interface ContextInjectResponse {
|
|
|
23
23
|
}
|
|
24
24
|
export interface ContextSearchResponse {
|
|
25
25
|
observations: Observation[];
|
|
26
|
+
/**
|
|
27
|
+
* Observations flagged always_inject=true in the server config.
|
|
28
|
+
* These are behavioral rules that must be rendered in every context injection
|
|
29
|
+
* regardless of query relevance.
|
|
30
|
+
*/
|
|
31
|
+
always_inject?: Observation[];
|
|
26
32
|
}
|
|
27
33
|
export interface SessionInitResponse {
|
|
28
34
|
sessionDbId: number;
|
|
@@ -88,6 +94,8 @@ export declare class EngramRestClient {
|
|
|
88
94
|
query: string;
|
|
89
95
|
cwd?: string;
|
|
90
96
|
agent_id?: string;
|
|
97
|
+
/** Source identifier passed through to the server for analytics/routing. */
|
|
98
|
+
source?: string;
|
|
91
99
|
}): Promise<ContextSearchResponse | null>;
|
|
92
100
|
/**
|
|
93
101
|
* Search for relevant decisions.
|
|
@@ -116,6 +124,8 @@ export declare class EngramRestClient {
|
|
|
116
124
|
tool_name: string;
|
|
117
125
|
tool_input: string;
|
|
118
126
|
tool_result: string;
|
|
127
|
+
/** Source identifier passed through to the server for analytics/routing. */
|
|
128
|
+
source?: string;
|
|
119
129
|
}): Promise<void>;
|
|
120
130
|
/**
|
|
121
131
|
* Submit a transcript for session backfill/extraction.
|
|
@@ -154,10 +164,13 @@ export declare class EngramRestClient {
|
|
|
154
164
|
* Bulk-import observations.
|
|
155
165
|
* POST /api/observations/bulk-import
|
|
156
166
|
*
|
|
157
|
-
* Server expects: { project, observations: [{ type, title, narrative, scope, concepts }] }
|
|
167
|
+
* Server expects: { project, session_id?, observations: [{ type, title, narrative, scope, concepts }] }
|
|
158
168
|
* Client uses: { content → narrative, tags → concepts }
|
|
169
|
+
*
|
|
170
|
+
* Passing sessionId reuses the caller's existing session instead of creating a new
|
|
171
|
+
* synthetic one per call, preventing phantom session proliferation.
|
|
159
172
|
*/
|
|
160
|
-
bulkImport(observations: BulkObservationInput[]): Promise<BulkImportResponse | null>;
|
|
173
|
+
bulkImport(observations: BulkObservationInput[], sessionId?: string): Promise<BulkImportResponse | null>;
|
|
161
174
|
/**
|
|
162
175
|
* Bulk-delete (archive) observations by ID.
|
|
163
176
|
* POST /api/observations/bulk-status { action: "archive", ids, reason }
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,WAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B;;;;OAIG;IACH,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClE;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,oDAAoD;AACpD,MAAM,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,sEAAsE;AACtE,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,gDAAgD;AAChD,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,yBAAyB,EAAE,CAAC;CAC3C;AAMD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;gBAE/B,MAAM,EAAE,YAAY;IAYhC;;;OAGG;IACG,gBAAgB,CACpB,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAOxC;;;OAGG;IACG,aAAa,CAAC,IAAI,EAAE;QACxB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,4EAA4E;QAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAIzC;;;OAGG;IACG,eAAe,CAAC,IAAI,EAAE;QAC1B,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAI1C;;;OAGG;IACG,eAAe,CAAC,IAAI,EAAE;QAC1B,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjB;;;OAGG;IACG,WAAW,CAAC,IAAI,EAAE;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,4EAA4E;QAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjB;;;OAGG;IACG,eAAe,CAAC,IAAI,EAAE;QAC1B,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjB;;;OAGG;IACG,WAAW,CAAC,IAAI,EAAE;QACtB,eAAe,EAAE,MAAM,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAIvC;;;OAGG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrE;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAI9C;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAIpD;;;;;;;;;OASG;IACG,UAAU,CACd,YAAY,EAAE,oBAAoB,EAAE,EACpC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAqBrC;;;;;;OAMG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAYnE,oEAAoE;IACpE,WAAW,IAAI,OAAO;YAQR,GAAG;YAOH,IAAI;YAQJ,OAAO;CA8CtB"}
|
package/dist/client.js
CHANGED
|
@@ -103,10 +103,13 @@ class EngramRestClient {
|
|
|
103
103
|
* Bulk-import observations.
|
|
104
104
|
* POST /api/observations/bulk-import
|
|
105
105
|
*
|
|
106
|
-
* Server expects: { project, observations: [{ type, title, narrative, scope, concepts }] }
|
|
106
|
+
* Server expects: { project, session_id?, observations: [{ type, title, narrative, scope, concepts }] }
|
|
107
107
|
* Client uses: { content → narrative, tags → concepts }
|
|
108
|
+
*
|
|
109
|
+
* Passing sessionId reuses the caller's existing session instead of creating a new
|
|
110
|
+
* synthetic one per call, preventing phantom session proliferation.
|
|
108
111
|
*/
|
|
109
|
-
async bulkImport(observations) {
|
|
112
|
+
async bulkImport(observations, sessionId) {
|
|
110
113
|
if (observations.length === 0)
|
|
111
114
|
return { imported: 0, skipped_duplicates: 0 };
|
|
112
115
|
// All observations in a batch must share the same project.
|
|
@@ -120,6 +123,7 @@ class EngramRestClient {
|
|
|
120
123
|
}));
|
|
121
124
|
return this.post('/api/observations/bulk-import', {
|
|
122
125
|
project,
|
|
126
|
+
...(sessionId ? { session_id: sessionId } : {}),
|
|
123
127
|
observations: mapped,
|
|
124
128
|
});
|
|
125
129
|
}
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,uDAAwD;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,20 @@ export interface FormatResult {
|
|
|
17
17
|
/** Number of observations trimmed by token budget. */
|
|
18
18
|
trimmedCount: number;
|
|
19
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Format always_inject observations into a compact behavioral rules block.
|
|
22
|
+
*
|
|
23
|
+
* These are observations marked always_inject=true on the server. They represent
|
|
24
|
+
* standing behavioral rules (e.g., "always use X", "never do Y") that must be
|
|
25
|
+
* injected into every turn regardless of query relevance.
|
|
26
|
+
*
|
|
27
|
+
* Rendered as a lightweight XML block separate from the main engram-context so
|
|
28
|
+
* the agent can distinguish standing rules from query-matched knowledge.
|
|
29
|
+
*
|
|
30
|
+
* @param observations - The always_inject observations from the search response.
|
|
31
|
+
* @returns A non-empty XML block string, or '' if nothing to render.
|
|
32
|
+
*/
|
|
33
|
+
export declare function formatAlwaysInject(observations: Observation[]): string;
|
|
20
34
|
/**
|
|
21
35
|
* Format an array of engram observations into an XML context block.
|
|
22
36
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/context/formatter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD,UAAU,gBAAgB;IACxB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAoBD,MAAM,WAAW,YAAY;IAC3B,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAC;CACtB;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,WAAW,EAAE,EAC3B,OAAO,GAAE,gBAAqB,GAC7B,YAAY,CA6Cd"}
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/context/formatter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD,UAAU,gBAAgB;IACxB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAoBD,MAAM,WAAW,YAAY;IAC3B,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAC;CACtB;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,CAuCtE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,WAAW,EAAE,EAC3B,OAAO,GAAE,gBAAqB,GAC7B,YAAY,CA6Cd"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* Faithfully ported from plugin/engram/hooks/user-prompt.js with TypeScript types.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.formatAlwaysInject = formatAlwaysInject;
|
|
9
10
|
exports.formatContext = formatContext;
|
|
10
11
|
const SECTION_DEFS = [
|
|
11
12
|
{ key: 'decisions', label: 'Decisions' },
|
|
@@ -16,6 +17,54 @@ const SECTION_DEFS = [
|
|
|
16
17
|
// ---------------------------------------------------------------------------
|
|
17
18
|
// Public API
|
|
18
19
|
// ---------------------------------------------------------------------------
|
|
20
|
+
/**
|
|
21
|
+
* Format always_inject observations into a compact behavioral rules block.
|
|
22
|
+
*
|
|
23
|
+
* These are observations marked always_inject=true on the server. They represent
|
|
24
|
+
* standing behavioral rules (e.g., "always use X", "never do Y") that must be
|
|
25
|
+
* injected into every turn regardless of query relevance.
|
|
26
|
+
*
|
|
27
|
+
* Rendered as a lightweight XML block separate from the main engram-context so
|
|
28
|
+
* the agent can distinguish standing rules from query-matched knowledge.
|
|
29
|
+
*
|
|
30
|
+
* @param observations - The always_inject observations from the search response.
|
|
31
|
+
* @returns A non-empty XML block string, or '' if nothing to render.
|
|
32
|
+
*/
|
|
33
|
+
function formatAlwaysInject(observations) {
|
|
34
|
+
const safe = observations.filter((obs) => asString(obs.type).toLowerCase() !== 'credential');
|
|
35
|
+
if (safe.length === 0)
|
|
36
|
+
return '';
|
|
37
|
+
let out = '<engram-behavioral-rules>\n';
|
|
38
|
+
out += '# Standing Behavioral Rules (Always Active)\n';
|
|
39
|
+
out += 'IMPORTANT: These rules apply to ALL tasks in this session. Follow them unconditionally.\n\n';
|
|
40
|
+
for (let i = 0; i < safe.length; i++) {
|
|
41
|
+
const obs = safe[i];
|
|
42
|
+
const title = escapeXml(obs.title);
|
|
43
|
+
const obsType = escapeXml(asString(obs.type).toUpperCase());
|
|
44
|
+
const scopeTag = typeof obs.scope === 'string' && obs.scope === 'global' ? ' [GLOBAL]' : '';
|
|
45
|
+
out += `## ${i + 1}. [${obsType}] ${title}${scopeTag}\n`;
|
|
46
|
+
const facts = Array.isArray(obs.facts) ? obs.facts : [];
|
|
47
|
+
if (facts.length > 0) {
|
|
48
|
+
let hasFacts = false;
|
|
49
|
+
for (const fact of facts) {
|
|
50
|
+
if (typeof fact === 'string' && fact !== '') {
|
|
51
|
+
if (!hasFacts) {
|
|
52
|
+
out += 'Key facts:\n';
|
|
53
|
+
hasFacts = true;
|
|
54
|
+
}
|
|
55
|
+
out += `- ${escapeXml(fact)}\n`;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (hasFacts)
|
|
59
|
+
out += '\n';
|
|
60
|
+
}
|
|
61
|
+
const narrative = escapeXml(obs.narrative);
|
|
62
|
+
if (narrative !== '')
|
|
63
|
+
out += `${narrative}\n\n`;
|
|
64
|
+
}
|
|
65
|
+
out += '</engram-behavioral-rules>\n';
|
|
66
|
+
return out;
|
|
67
|
+
}
|
|
19
68
|
/**
|
|
20
69
|
* Format an array of engram observations into an XML context block.
|
|
21
70
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/context/formatter.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/context/formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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;AAGjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAsBhG;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,kBAAkB,EACzB,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,YAAY,GACpB,IAAI,CAoDN"}
|
|
@@ -9,14 +9,14 @@
|
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.handleAfterToolCall = handleAfterToolCall;
|
|
11
11
|
const identity_js_1 = require("../identity.js");
|
|
12
|
+
const message_classifier_js_1 = require("./message-classifier.js");
|
|
12
13
|
const TOOL_INPUT_MAX_CHARS = 500;
|
|
13
14
|
const TOOL_RESULT_MAX_CHARS = 500;
|
|
14
15
|
/**
|
|
15
|
-
* Tool names
|
|
16
|
-
*
|
|
17
|
-
* observation store. Ingestion is skipped unless config.heartbeat.ingest is true.
|
|
16
|
+
* Tool names whose name alone identifies them as heartbeat / keep-alive events
|
|
17
|
+
* regardless of input content. These supplement the content-based classifier.
|
|
18
18
|
*/
|
|
19
|
-
const
|
|
19
|
+
const HEARTBEAT_TOOL_NAMES = new Set([
|
|
20
20
|
'heartbeat',
|
|
21
21
|
'keepalive',
|
|
22
22
|
'keep_alive',
|
|
@@ -41,10 +41,25 @@ function handleAfterToolCall(event, ctx, client, config, logger) {
|
|
|
41
41
|
return;
|
|
42
42
|
if (!config.autoExtract)
|
|
43
43
|
return;
|
|
44
|
-
// Skip heartbeat / keep-alive tool events unless explicitly opted in
|
|
44
|
+
// Skip heartbeat / keep-alive tool events unless explicitly opted in.
|
|
45
|
+
// Two-layer check:
|
|
46
|
+
// 1. Tool name allowlist — fast path for well-known heartbeat tool names.
|
|
47
|
+
// 2. Content-based classifier — catches heartbeat file reads/writes by input content.
|
|
45
48
|
const toolNameLower = (event.toolName ?? '').toLowerCase();
|
|
46
|
-
if (
|
|
47
|
-
|
|
49
|
+
if (!config.heartbeat?.ingest) {
|
|
50
|
+
if (HEARTBEAT_TOOL_NAMES.has(toolNameLower))
|
|
51
|
+
return;
|
|
52
|
+
// Build a probe string from tool name + serialized input for content classification
|
|
53
|
+
let inputProbe;
|
|
54
|
+
try {
|
|
55
|
+
inputProbe = JSON.stringify(event.toolInput ?? '');
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
inputProbe = '';
|
|
59
|
+
}
|
|
60
|
+
const category = (0, message_classifier_js_1.classifyMessage)(`${event.toolName ?? ''} ${inputProbe}`, event.toolName);
|
|
61
|
+
if (category === 'heartbeat' || category === 'system')
|
|
62
|
+
return;
|
|
48
63
|
}
|
|
49
64
|
const agentId = ctx.agentId ?? '';
|
|
50
65
|
const sessionId = ctx.sessionId ?? ctx.sessionKey ?? agentId;
|
|
@@ -69,6 +84,7 @@ function handleAfterToolCall(event, ctx, client, config, logger) {
|
|
|
69
84
|
tool_name: event.toolName ?? 'unknown',
|
|
70
85
|
tool_input: toolInput,
|
|
71
86
|
tool_result: toolResult,
|
|
87
|
+
source: 'openclaw',
|
|
72
88
|
}).catch(() => { });
|
|
73
89
|
// Contradiction detection: check Write/Edit results against stored decisions
|
|
74
90
|
if (isWriteOrEdit(event.toolName)) {
|
|
@@ -83,9 +99,9 @@ function truncate(value, maxChars) {
|
|
|
83
99
|
// ---------------------------------------------------------------------------
|
|
84
100
|
// Contradiction detection helpers
|
|
85
101
|
// ---------------------------------------------------------------------------
|
|
86
|
-
const WRITE_TOOLS = new Set(['write', 'edit'
|
|
102
|
+
const WRITE_TOOLS = new Set(['write', 'edit']);
|
|
87
103
|
function isWriteOrEdit(toolName) {
|
|
88
|
-
return toolName
|
|
104
|
+
return typeof toolName === 'string' && WRITE_TOOLS.has(toolName.toLowerCase());
|
|
89
105
|
}
|
|
90
106
|
async function checkContradictions(client, project, toolResult, logger) {
|
|
91
107
|
// Extract text content from tool result
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"after-tool-call.js","sourceRoot":"","sources":["../../src/hooks/after-tool-call.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAoCH,
|
|
1
|
+
{"version":3,"file":"after-tool-call.js","sourceRoot":"","sources":["../../src/hooks/after-tool-call.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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;AAGjD,OAAO,KAAK,EAAE,qBAAqB,EAAuB,iBAAiB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAKxH;;;;;;;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,CA+BN"}
|
|
@@ -8,11 +8,10 @@
|
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.handleBeforeCompaction = handleBeforeCompaction;
|
|
11
|
+
const content_js_1 = require("./content.js");
|
|
11
12
|
const identity_js_1 = require("../identity.js");
|
|
12
13
|
/** Maximum recent messages to include in the backfill payload. */
|
|
13
14
|
const MAX_MESSAGES = 20;
|
|
14
|
-
/** Soft character limit for the content field (server hard limit: 10,000). */
|
|
15
|
-
const CONTENT_MAX_CHARS = 6000;
|
|
16
15
|
/**
|
|
17
16
|
* Handle the before_compaction hook.
|
|
18
17
|
*
|
|
@@ -38,10 +37,7 @@ function handleBeforeCompaction(event, ctx, client, config, logger) {
|
|
|
38
37
|
const content = serializeMessages(recent);
|
|
39
38
|
if (!content)
|
|
40
39
|
return;
|
|
41
|
-
const
|
|
42
|
-
const truncated = stripped.length > CONTENT_MAX_CHARS
|
|
43
|
-
? stripped.slice(0, CONTENT_MAX_CHARS)
|
|
44
|
-
: stripped;
|
|
40
|
+
const truncated = (0, content_js_1.normalizeEngramContent)(content);
|
|
45
41
|
// Fire-and-forget — do not await
|
|
46
42
|
void client.backfillSession({
|
|
47
43
|
session_id: sessionId,
|
|
@@ -62,7 +58,4 @@ function serializeMessages(messages) {
|
|
|
62
58
|
.map((m) => `[${m.role}]: ${m.content}`)
|
|
63
59
|
.join('\n\n');
|
|
64
60
|
}
|
|
65
|
-
function stripEngramContext(text) {
|
|
66
|
-
return text.replace(/<engram-context>[\s\S]*?<\/engram-context>/g, '');
|
|
67
|
-
}
|
|
68
61
|
//# 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;;AAmBH,wDAqCC;AApDD,6CAAsD;AACtD,gDAAiD;AAGjD,kEAAkE;AAClE,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB;;;;;;;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,SAAS,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC;QAC7D,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE;YAAE,OAAO,CAAC,uCAAuC;QACvE,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,SAAS,GAAG,IAAA,mCAAsB,EAAC,OAAO,CAAC,CAAC;QAElD,iCAAiC;QACjC,KAAK,MAAM,CAAC,eAAe,CAAC;YAC1B,UAAU,EAAE,SAAS;YACrB,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"}
|
|
@@ -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;AAMjD,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,CA6FnC"}
|
|
@@ -11,6 +11,7 @@ exports.handleBeforePromptBuild = handleBeforePromptBuild;
|
|
|
11
11
|
const identity_js_1 = require("../identity.js");
|
|
12
12
|
const formatter_js_1 = require("../context/formatter.js");
|
|
13
13
|
const tiers_js_1 = require("../context/tiers.js");
|
|
14
|
+
const message_classifier_js_1 = require("./message-classifier.js");
|
|
14
15
|
const turnTracker = new tiers_js_1.TurnTracker();
|
|
15
16
|
/**
|
|
16
17
|
* Handle the before_prompt_build hook.
|
|
@@ -27,6 +28,10 @@ async function handleBeforePromptBuild(event, ctx, client, config, logger) {
|
|
|
27
28
|
return;
|
|
28
29
|
if (!event.prompt || event.prompt.trim() === '')
|
|
29
30
|
return;
|
|
31
|
+
// Skip non-user messages — heartbeats and SDK metadata are not real queries
|
|
32
|
+
const category = (0, message_classifier_js_1.classifyMessage)(event.prompt);
|
|
33
|
+
if (category !== 'user_prompt')
|
|
34
|
+
return;
|
|
30
35
|
const tier = turnTracker.classify(event.prompt ?? '', event.messages);
|
|
31
36
|
logger?.debug(`[engram] before-prompt-build: tier=${tier.tier} budget=${tier.tokenBudget} reason=${tier.reason}`);
|
|
32
37
|
if (tier.tier === 'NONE')
|
|
@@ -41,6 +46,7 @@ async function handleBeforePromptBuild(event, ctx, client, config, logger) {
|
|
|
41
46
|
query: event.prompt,
|
|
42
47
|
cwd: ctx.workspaceDir,
|
|
43
48
|
agent_id: agentId,
|
|
49
|
+
source: 'openclaw',
|
|
44
50
|
});
|
|
45
51
|
}
|
|
46
52
|
catch (err) {
|
|
@@ -61,9 +67,17 @@ async function handleBeforePromptBuild(event, ctx, client, config, logger) {
|
|
|
61
67
|
if (trimmedCount > 0) {
|
|
62
68
|
(logger ?? console).warn(`[engram] before-prompt-build: trimmed ${trimmedCount} observations to fit token budget`);
|
|
63
69
|
}
|
|
64
|
-
|
|
70
|
+
// Render always_inject behavioral rules (appended before the main context block).
|
|
71
|
+
// These are observations marked always_inject=true on the server — they contain
|
|
72
|
+
// behavioral guidance that must be present in every turn regardless of query match.
|
|
73
|
+
const alwaysInjectObs = Array.isArray(response.always_inject) ? response.always_inject : [];
|
|
74
|
+
const alwaysInjectBlock = alwaysInjectObs.length > 0
|
|
75
|
+
? (0, formatter_js_1.formatAlwaysInject)(alwaysInjectObs)
|
|
76
|
+
: '';
|
|
77
|
+
if (!context && !alwaysInjectBlock)
|
|
65
78
|
return;
|
|
66
|
-
|
|
79
|
+
const totalInjected = injectedIds.length + alwaysInjectObs.length;
|
|
80
|
+
(logger ?? console).warn(`[engram] before-prompt-build: injecting ${injectedIds.length} observations + ${alwaysInjectObs.length} always_inject rules for project ${project}`);
|
|
67
81
|
// Mark injected observations (fire-and-forget)
|
|
68
82
|
if (injectedIds.length > 0) {
|
|
69
83
|
try {
|
|
@@ -81,7 +95,10 @@ async function handleBeforePromptBuild(event, ctx, client, config, logger) {
|
|
|
81
95
|
// Non-critical — context was already injected
|
|
82
96
|
}
|
|
83
97
|
}
|
|
84
|
-
|
|
98
|
+
// Combine: always_inject rules first (highest priority), then query-matched context
|
|
99
|
+
const combined = [alwaysInjectBlock, context].filter(Boolean).join('\n');
|
|
100
|
+
void totalInjected; // used only in log message above
|
|
101
|
+
return { prependContext: combined };
|
|
85
102
|
}
|
|
86
103
|
catch (err) {
|
|
87
104
|
(logger ?? console).error('[engram] hook error:', err);
|
|
@@ -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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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared content normalization helpers used across hook implementations.
|
|
3
|
+
*
|
|
4
|
+
* Centralizes strip-and-truncate logic to ensure consistent behaviour
|
|
5
|
+
* in before-compaction and session-end hooks.
|
|
6
|
+
*/
|
|
7
|
+
/** Soft character limit for the content field (server hard limit: 10,000). */
|
|
8
|
+
export declare const CONTENT_MAX_CHARS = 6000;
|
|
9
|
+
/**
|
|
10
|
+
* Strip `<engram-context>` blocks from `text` and truncate to {@link CONTENT_MAX_CHARS}.
|
|
11
|
+
*
|
|
12
|
+
* @param content - Raw serialized conversation text.
|
|
13
|
+
* @returns Normalized content safe for the engram backfill API.
|
|
14
|
+
*/
|
|
15
|
+
export declare function normalizeEngramContent(content: string): string;
|
|
16
|
+
//# sourceMappingURL=content.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/hooks/content.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG9D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared content normalization helpers used across hook implementations.
|
|
4
|
+
*
|
|
5
|
+
* Centralizes strip-and-truncate logic to ensure consistent behaviour
|
|
6
|
+
* in before-compaction and session-end hooks.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.CONTENT_MAX_CHARS = void 0;
|
|
10
|
+
exports.normalizeEngramContent = normalizeEngramContent;
|
|
11
|
+
/** Soft character limit for the content field (server hard limit: 10,000). */
|
|
12
|
+
exports.CONTENT_MAX_CHARS = 6000;
|
|
13
|
+
/**
|
|
14
|
+
* Strip `<engram-context>` blocks from `text` and truncate to {@link CONTENT_MAX_CHARS}.
|
|
15
|
+
*
|
|
16
|
+
* @param content - Raw serialized conversation text.
|
|
17
|
+
* @returns Normalized content safe for the engram backfill API.
|
|
18
|
+
*/
|
|
19
|
+
function normalizeEngramContent(content) {
|
|
20
|
+
const stripped = content.replace(/<engram-context>[\s\S]*?<\/engram-context>/g, '');
|
|
21
|
+
return stripped.length > exports.CONTENT_MAX_CHARS ? stripped.slice(0, exports.CONTENT_MAX_CHARS) : stripped;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/hooks/content.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAWH,wDAGC;AAZD,8EAA8E;AACjE,QAAA,iBAAiB,GAAG,IAAI,CAAC;AAEtC;;;;;GAKG;AACH,SAAgB,sBAAsB,CAAC,OAAe;IACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,6CAA6C,EAAE,EAAE,CAAC,CAAC;IACpF,OAAO,QAAQ,CAAC,MAAM,GAAG,yBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,yBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC/F,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* message-classifier — content-based message classification for hook filtering.
|
|
3
|
+
*
|
|
4
|
+
* Provides an allowlist/blocklist approach to classify incoming prompts so that
|
|
5
|
+
* hooks can skip low-value messages (heartbeats, SDK metadata) without duplicating
|
|
6
|
+
* detection logic across multiple hook files.
|
|
7
|
+
*/
|
|
8
|
+
/** Semantic category of an incoming message. */
|
|
9
|
+
export type MessageCategory = 'user_prompt' | 'heartbeat' | 'system' | 'agent_internal';
|
|
10
|
+
/**
|
|
11
|
+
* Classify an incoming message based on its content and optional tool name.
|
|
12
|
+
*
|
|
13
|
+
* Decision order:
|
|
14
|
+
* 1. Heartbeat — always block (workspace health check noise)
|
|
15
|
+
* 2. System — always block (SDK metadata, not a user query)
|
|
16
|
+
* 3. Default — treat as user_prompt (allow)
|
|
17
|
+
*
|
|
18
|
+
* @param prompt - The raw prompt or message text to classify.
|
|
19
|
+
* @param toolName - Optional tool name associated with the message (after_tool_call hook).
|
|
20
|
+
* @returns The most specific category that matches, or 'user_prompt' by default.
|
|
21
|
+
*/
|
|
22
|
+
export declare function classifyMessage(prompt: string, toolName?: string): MessageCategory;
|
|
23
|
+
//# sourceMappingURL=message-classifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-classifier.d.ts","sourceRoot":"","sources":["../../src/hooks/message-classifier.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,gDAAgD;AAChD,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,gBAAgB,CAAC;AAuCxF;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,eAAe,CAIlF"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* message-classifier — content-based message classification for hook filtering.
|
|
4
|
+
*
|
|
5
|
+
* Provides an allowlist/blocklist approach to classify incoming prompts so that
|
|
6
|
+
* hooks can skip low-value messages (heartbeats, SDK metadata) without duplicating
|
|
7
|
+
* detection logic across multiple hook files.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.classifyMessage = classifyMessage;
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Pattern lists
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
/**
|
|
15
|
+
* Content substrings that positively identify a heartbeat message.
|
|
16
|
+
* All comparisons are case-sensitive to avoid false positives on common words.
|
|
17
|
+
*/
|
|
18
|
+
const HEARTBEAT_CONTENT_PATTERNS = [
|
|
19
|
+
'heartbeat.md',
|
|
20
|
+
'heartbeat_ok',
|
|
21
|
+
'HEARTBEAT',
|
|
22
|
+
'Read HEARTBEAT',
|
|
23
|
+
'check heartbeat',
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Tool names that operate on files. Used together with content inspection:
|
|
27
|
+
* a Read/Write tool call is only a heartbeat if its target IS the heartbeat file.
|
|
28
|
+
*/
|
|
29
|
+
const FILE_TOOLS = new Set(['Read', 'Write']);
|
|
30
|
+
/**
|
|
31
|
+
* SDK-injected metadata patterns that should not be treated as real user prompts.
|
|
32
|
+
* These appear at the beginning of forwarded agent-to-agent messages or tool events.
|
|
33
|
+
*/
|
|
34
|
+
const SYSTEM_CONTENT_PATTERNS = [
|
|
35
|
+
'Conversation info (untrusted metadata)',
|
|
36
|
+
'Sender (untrusted metadata)',
|
|
37
|
+
'<task-notification>',
|
|
38
|
+
'<command-name>',
|
|
39
|
+
];
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// Public API
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
/**
|
|
44
|
+
* Classify an incoming message based on its content and optional tool name.
|
|
45
|
+
*
|
|
46
|
+
* Decision order:
|
|
47
|
+
* 1. Heartbeat — always block (workspace health check noise)
|
|
48
|
+
* 2. System — always block (SDK metadata, not a user query)
|
|
49
|
+
* 3. Default — treat as user_prompt (allow)
|
|
50
|
+
*
|
|
51
|
+
* @param prompt - The raw prompt or message text to classify.
|
|
52
|
+
* @param toolName - Optional tool name associated with the message (after_tool_call hook).
|
|
53
|
+
* @returns The most specific category that matches, or 'user_prompt' by default.
|
|
54
|
+
*/
|
|
55
|
+
function classifyMessage(prompt, toolName) {
|
|
56
|
+
if (isHeartbeat(prompt, toolName))
|
|
57
|
+
return 'heartbeat';
|
|
58
|
+
if (isSystemMessage(prompt))
|
|
59
|
+
return 'system';
|
|
60
|
+
return 'user_prompt';
|
|
61
|
+
}
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// Internal classifiers
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
/**
|
|
66
|
+
* Returns true if the prompt is a workspace heartbeat / keep-alive check.
|
|
67
|
+
*
|
|
68
|
+
* Two detection strategies:
|
|
69
|
+
* a) Content match — prompt contains a known heartbeat substring.
|
|
70
|
+
* b) Tool match — a file-operating tool (Read/Write) targets the HEARTBEAT file
|
|
71
|
+
* (handles cases where the prompt text itself is sparse).
|
|
72
|
+
*/
|
|
73
|
+
function isHeartbeat(prompt, toolName) {
|
|
74
|
+
// Strategy (a): content substring match
|
|
75
|
+
for (const pattern of HEARTBEAT_CONTENT_PATTERNS) {
|
|
76
|
+
if (prompt.includes(pattern))
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
// Strategy (b): file tool whose target is the heartbeat file
|
|
80
|
+
if (toolName && FILE_TOOLS.has(toolName) && prompt.includes('HEARTBEAT')) {
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Returns true if the prompt is an SDK-injected metadata block rather than a
|
|
87
|
+
* real user query. These appear in agent-to-agent forwarded messages.
|
|
88
|
+
*/
|
|
89
|
+
function isSystemMessage(prompt) {
|
|
90
|
+
return SYSTEM_CONTENT_PATTERNS.some((pattern) => prompt.includes(pattern));
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=message-classifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-classifier.js","sourceRoot":"","sources":["../../src/hooks/message-classifier.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AA0DH,0CAIC;AArDD,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,0BAA0B,GAAsB;IACpD,cAAc;IACd,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iBAAiB;CAClB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,GAAwB,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEnE;;;GAGG;AACH,MAAM,uBAAuB,GAAsB;IACjD,wCAAwC;IACxC,6BAA6B;IAC7B,qBAAqB;IACrB,gBAAgB;CACjB,CAAC;AAEF,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;;;;GAWG;AACH,SAAgB,eAAe,CAAC,MAAc,EAAE,QAAiB;IAC/D,IAAI,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC;QAAE,OAAO,WAAW,CAAC;IACtD,IAAI,eAAe,CAAC,MAAM,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC7C,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E;;;;;;;GAOG;AACH,SAAS,WAAW,CAAC,MAAc,EAAE,QAAiB;IACpD,wCAAwC;IACxC,KAAK,MAAM,OAAO,IAAI,0BAA0B,EAAE,CAAC;QACjD,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;IAC5C,CAAC;IAED,6DAA6D;IAC7D,IAAI,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,MAAc;IACrC,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7E,CAAC"}
|
|
@@ -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;
|
|
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;AAGjD,OAAO,KAAK,EAAE,eAAe,EAAuB,iBAAiB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIlH;;;;;;;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,CAsCN"}
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.handleSessionEnd = handleSessionEnd;
|
|
10
|
+
const content_js_1 = require("./content.js");
|
|
10
11
|
const identity_js_1 = require("../identity.js");
|
|
11
12
|
const MAX_MESSAGES = 20;
|
|
12
|
-
const CONTENT_MAX_CHARS = 6000;
|
|
13
13
|
/**
|
|
14
14
|
* Handle the session_end hook.
|
|
15
15
|
*
|
|
@@ -36,10 +36,7 @@ function handleSessionEnd(event, ctx, client, config, logger) {
|
|
|
36
36
|
.join('\n\n');
|
|
37
37
|
if (!content)
|
|
38
38
|
return;
|
|
39
|
-
const
|
|
40
|
-
const truncated = stripped.length > CONTENT_MAX_CHARS
|
|
41
|
-
? stripped.slice(0, CONTENT_MAX_CHARS)
|
|
42
|
-
: stripped;
|
|
39
|
+
const truncated = (0, content_js_1.normalizeEngramContent)(content);
|
|
43
40
|
const sessionId = ctx.sessionId ?? ctx.sessionKey ?? agentId;
|
|
44
41
|
if (!sessionId?.trim())
|
|
45
42
|
return;
|
|
@@ -56,10 +53,4 @@ function handleSessionEnd(event, ctx, client, config, logger) {
|
|
|
56
53
|
(logger ?? console).error('[engram] hook error:', err);
|
|
57
54
|
}
|
|
58
55
|
}
|
|
59
|
-
// ---------------------------------------------------------------------------
|
|
60
|
-
// Helpers
|
|
61
|
-
// ---------------------------------------------------------------------------
|
|
62
|
-
function stripEngramContext(text) {
|
|
63
|
-
return text.replace(/<engram-context>[\s\S]*?<\/engram-context>/g, '');
|
|
64
|
-
}
|
|
65
56
|
//# sourceMappingURL=session-end.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-end.js","sourceRoot":"","sources":["../../src/hooks/session-end.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAkBH,
|
|
1
|
+
{"version":3,"file":"session-end.js","sourceRoot":"","sources":["../../src/hooks/session-end.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAkBH,4CA4CC;AA1DD,6CAAsD;AACtD,gDAAiD;AAGjD,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB;;;;;;;GAOG;AACH,SAAgB,gBAAgB,CAC9B,KAAsB,EACtB,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,GAA0B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAElC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM;aACnB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;aACvC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,SAAS,GAAG,IAAA,mCAAsB,EAAC,OAAO,CAAC,CAAC;QAElD,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC;QAC7D,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE;YAAE,OAAO;QAE/B,iCAAiC;QACjC,KAAK,MAAM,CAAC,eAAe,CAAC;YAC1B,UAAU,EAAE,SAAS;YACrB,OAAO;YACP,OAAO,EAAE,SAAS;SACnB,CAAC,CAAC;QAEH,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,CACtB,mCAAmC,MAAM,CAAC,MAAM,wBAAwB;YACtE,aAAa,OAAO,aAAa,KAAK,CAAC,MAAM,IAAI,SAAS,GAAG,CAChE,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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engram-remember.d.ts","sourceRoot":"","sources":["../../src/tools/engram-remember.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAqB,MAAM,cAAc,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"engram-remember.d.ts","sourceRoot":"","sources":["../../src/tools/engram-remember.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAqB,MAAM,cAAc,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAoGpF,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,yBAAyB,EAC9B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,YAAY,GACnB,YAAY,CAoBd;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,yBAAyB,EAC9B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,YAAY,GACnB,YAAY,CAqBd"}
|
|
@@ -67,7 +67,10 @@ async function storeObservation(title, content, type, scope, tags, ctx, client,
|
|
|
67
67
|
scope,
|
|
68
68
|
tags,
|
|
69
69
|
};
|
|
70
|
-
|
|
70
|
+
// Pass the agent's session ID so the server reuses the existing session
|
|
71
|
+
// instead of creating a new synthetic one for every store call.
|
|
72
|
+
const sessionId = ctx.sessionId ?? ctx.sessionKey;
|
|
73
|
+
const response = await client.bulkImport([observation], sessionId);
|
|
71
74
|
if (!response) {
|
|
72
75
|
return 'engram store failed — server returned no response';
|
|
73
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engram-remember.js","sourceRoot":"","sources":["../../src/tools/engram-remember.ts"],"names":[],"mappings":";AAAA;;GAEG;;
|
|
1
|
+
{"version":3,"file":"engram-remember.js","sourceRoot":"","sources":["../../src/tools/engram-remember.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engram-search.d.ts","sourceRoot":"","sources":["../../src/tools/engram-search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,OAAO,KAAK,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"engram-search.d.ts","sourceRoot":"","sources":["../../src/tools/engram-search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,OAAO,KAAK,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAgEpF,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,yBAAyB,EAC9B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,YAAY,GACnB,YAAY,CAEd;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,yBAAyB,EAC9B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,YAAY,GACnB,YAAY,CAEd"}
|
|
@@ -12,14 +12,10 @@ const formatter_js_1 = require("../context/formatter.js");
|
|
|
12
12
|
const SearchParamsSchema = zod_1.z.object({
|
|
13
13
|
query: zod_1.z.string().min(1),
|
|
14
14
|
limit: zod_1.z.number().int().positive().max(50).optional(),
|
|
15
|
-
scope: zod_1.z.enum(['personal', 'shared', 'all']).optional(),
|
|
16
15
|
});
|
|
17
16
|
const searchParameters = typebox_1.Type.Object({
|
|
18
17
|
query: typebox_1.Type.String({ description: 'Search query for engram memory' }),
|
|
19
18
|
limit: typebox_1.Type.Optional(typebox_1.Type.Number({ description: 'Maximum number of results (default: 10)' })),
|
|
20
|
-
scope: typebox_1.Type.Optional(typebox_1.Type.Union([
|
|
21
|
-
typebox_1.Type.Literal('personal'), typebox_1.Type.Literal('shared'), typebox_1.Type.Literal('all'),
|
|
22
|
-
], { description: 'Search scope: personal (agent only), shared (project+global), all (default)' })),
|
|
23
19
|
});
|
|
24
20
|
function createSearchTool(name, ctx, client, config) {
|
|
25
21
|
return {
|
|
@@ -38,8 +34,6 @@ function createSearchTool(name, ctx, client, config) {
|
|
|
38
34
|
}
|
|
39
35
|
const identity = (0, identity_js_1.resolveIdentity)(ctx.agentId ?? '', ctx.workspaceDir);
|
|
40
36
|
const project = config.project ?? identity.projectId;
|
|
41
|
-
// TODO: Pass scope filter to server when dedicated endpoint supports it.
|
|
42
|
-
// Currently all searches include agent-scoped results via agent_id.
|
|
43
37
|
const response = await client.searchContext({
|
|
44
38
|
project,
|
|
45
39
|
query: parsed.data.query,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engram-search.js","sourceRoot":"","sources":["../../src/tools/engram-search.ts"],"names":[],"mappings":";AAAA;;GAEG;;
|
|
1
|
+
{"version":3,"file":"engram-search.js","sourceRoot":"","sources":["../../src/tools/engram-search.ts"],"names":[],"mappings":"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"}
|