@susu-eng/gralkor 27.2.10 → 27.2.12
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/README.md +3 -16
- package/dist/hooks.d.ts +32 -9
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +52 -48
- package/dist/hooks.js.map +1 -1
- package/dist/test-fixtures/capture-cases.d.ts +30 -0
- package/dist/test-fixtures/capture-cases.d.ts.map +1 -0
- package/dist/test-fixtures/capture-cases.js +176 -0
- package/dist/test-fixtures/capture-cases.js.map +1 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +8 -12
- package/server/main.py +73 -41
- package/server/wheels/falkordblite-0.9.0-py3-none-manylinux_2_36_aarch64.whl +0 -0
package/README.md
CHANGED
|
@@ -95,23 +95,10 @@ openclaw config set plugins.entries.gralkor.config.test true
|
|
|
95
95
|
### 3. Install the plugin
|
|
96
96
|
|
|
97
97
|
```bash
|
|
98
|
-
openclaw plugins install @susu-eng/gralkor --dangerously-force-unsafe-install
|
|
98
|
+
openclaw plugins install @susu-eng/gralkor@latest --dangerously-force-unsafe-install
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
```bash
|
|
104
|
-
openclaw plugins install ./susu-eng-gralkor-memory-26.0.14.tgz --dangerously-force-unsafe-install
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
> **Why `--dangerously-force-unsafe-install`?** OpenClaw's install-time security
|
|
108
|
-
> scanner flags Gralkor as critical because `dist/server-manager.js` imports
|
|
109
|
-
> `node:child_process` and calls `spawn()` to launch the embedded Python server.
|
|
110
|
-
> This is intrinsic to how Gralkor works (managed FalkorDB + Graphiti subprocess)
|
|
111
|
-
> and cannot be removed. The flag is required on every install and update until
|
|
112
|
-
> OpenClaw provides a manifest-level allowlist mechanism. Inspect the source on
|
|
113
|
-
> npm/ClawHub before installing if you'd like to verify there's nothing else
|
|
114
|
-
> going on.
|
|
101
|
+
> **Why `--dangerously-force-unsafe-install`?** OpenClaw's install-time security scanner flags Gralkor as critical because of the embeeded Python server. Inspect the source if you'd like to verify there's nothing weird going on.
|
|
115
102
|
|
|
116
103
|
### 4. Enable and assign the memory slot
|
|
117
104
|
|
|
@@ -155,7 +142,7 @@ Start chatting with your agent. Gralkor works in the background:
|
|
|
155
142
|
### Upgrading
|
|
156
143
|
|
|
157
144
|
```bash
|
|
158
|
-
openclaw plugins update gralkor --dangerously-force-unsafe-install
|
|
145
|
+
openclaw plugins update gralkor@latest --dangerously-force-unsafe-install
|
|
159
146
|
```
|
|
160
147
|
|
|
161
148
|
### LLM providers
|
package/dist/hooks.d.ts
CHANGED
|
@@ -51,19 +51,42 @@ export interface HookSessionContext {
|
|
|
51
51
|
sessionKey?: string;
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
54
|
-
* Extract the
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
54
|
+
* Extract the search query for auto-recall from the trailing run of user
|
|
55
|
+
* messages. Walks backwards from the end, collecting consecutive user
|
|
56
|
+
* messages (drip messages), stops at the first non-user role, cleans each
|
|
57
|
+
* via cleanUserMessageText, and joins in original order.
|
|
58
|
+
*/
|
|
59
|
+
export declare function extractInjectQuery(messages: MessageEntry[]): string | null;
|
|
60
|
+
/**
|
|
61
|
+
* System message detectors — content matching any pattern is dropped entirely.
|
|
62
|
+
* OpenClaw injects system content under user/assistant roles (session
|
|
63
|
+
* notifications, timestamps, startup instructions). These patterns detect
|
|
64
|
+
* those injections so extractMessagesFromCtx can drop them before ingestion.
|
|
58
65
|
*
|
|
59
|
-
*
|
|
66
|
+
* When a new runtime-injected pattern appears, add it here rather than
|
|
67
|
+
* writing bespoke stripping logic.
|
|
68
|
+
*/
|
|
69
|
+
export declare const SYSTEM_MESSAGE_PATTERNS: RegExp[];
|
|
70
|
+
/**
|
|
71
|
+
* Returns true if the text is a system-injected message.
|
|
60
72
|
*/
|
|
61
|
-
export declare function
|
|
73
|
+
export declare function isSystemMessage(text: string): boolean;
|
|
62
74
|
/**
|
|
63
|
-
*
|
|
64
|
-
*
|
|
75
|
+
* Returns true if a single non-empty line matches a system pattern.
|
|
76
|
+
* Unlike isSystemMessage, does NOT treat empty/whitespace as system content —
|
|
77
|
+
* preserves paragraph breaks when filtering line-by-line.
|
|
78
|
+
*/
|
|
79
|
+
export declare function isSystemLine(line: string): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Detect system-injected user messages and extract real user content.
|
|
82
|
+
*
|
|
83
|
+
* Messages matching SYSTEM_MESSAGE_PATTERNS are dropped entirely.
|
|
84
|
+
* Metadata wrappers and gralkor-memory XML are unwrapped because they
|
|
85
|
+
* surround real user content.
|
|
86
|
+
*
|
|
87
|
+
* Returns the user's text, or empty string if the message is a system message.
|
|
65
88
|
*/
|
|
66
|
-
export declare function
|
|
89
|
+
export declare function cleanUserMessageText(text: string): string;
|
|
67
90
|
/**
|
|
68
91
|
* Extract and filter messages for episode ingestion.
|
|
69
92
|
*
|
package/dist/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EAAE,KAAK,cAAc,EAAuC,MAAM,cAAc,CAAC;AACxF,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,iBAAiB,CAAC;AAE7D;;GAEG;AACH,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;CAClC;AAgED,sEAAsE;AACtE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,iDAAiD;AACjD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks.js
CHANGED
|
@@ -59,45 +59,27 @@ function truncateText(text, limit) {
|
|
|
59
59
|
return text.slice(0, limit) + "... (truncated)";
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
|
-
* Extract the
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* System prompts (e.g. "A new session was started via /new") are not user messages.
|
|
62
|
+
* Extract the search query for auto-recall from the trailing run of user
|
|
63
|
+
* messages. Walks backwards from the end, collecting consecutive user
|
|
64
|
+
* messages (drip messages), stops at the first non-user role, cleans each
|
|
65
|
+
* via cleanUserMessageText, and joins in original order.
|
|
68
66
|
*/
|
|
69
|
-
export function
|
|
70
|
-
|
|
71
|
-
const stripped = event.prompt.replace(/^(?:System: [^\n]*\n\n)+/, "");
|
|
72
|
-
// Strip session-start system instruction (may have user message after it)
|
|
73
|
-
const afterSession = stripped.replace(/^A new session was started[^\n]*(?:\n\n)?/, "");
|
|
74
|
-
if (!afterSession)
|
|
75
|
-
return "";
|
|
76
|
-
// Strip metadata wrapper if present
|
|
77
|
-
const metadataPattern = /^.+?\(untrusted metadata\):\n```json\n[\s\S]*?\n```\n\n/;
|
|
78
|
-
const fromPrompt = afterSession.replace(metadataPattern, "").trim();
|
|
79
|
-
if (fromPrompt)
|
|
80
|
-
return fromPrompt;
|
|
81
|
-
// Prompt was only metadata wrapper — extract from messages instead.
|
|
82
|
-
return extractLastUserMessageFromMessages(event.messages);
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Extract the last user message text from the messages array.
|
|
86
|
-
* Used as fallback when the prompt contains only metadata wrapper.
|
|
87
|
-
*/
|
|
88
|
-
export function extractLastUserMessageFromMessages(messages) {
|
|
67
|
+
export function extractInjectQuery(messages) {
|
|
68
|
+
const parts = [];
|
|
89
69
|
for (let i = messages.length - 1; i >= 0; i--) {
|
|
90
|
-
if (messages[i].role
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
70
|
+
if (messages[i].role !== "user")
|
|
71
|
+
break;
|
|
72
|
+
const text = normalizeContent(messages[i].content)
|
|
73
|
+
.filter(isTextBlock)
|
|
74
|
+
.map((block) => block.text)
|
|
75
|
+
.join("\n");
|
|
76
|
+
const cleaned = cleanUserMessageText(text);
|
|
77
|
+
if (cleaned)
|
|
78
|
+
parts.push(cleaned);
|
|
99
79
|
}
|
|
100
|
-
|
|
80
|
+
if (parts.length === 0)
|
|
81
|
+
return null;
|
|
82
|
+
return parts.reverse().join("\n\n");
|
|
101
83
|
}
|
|
102
84
|
/**
|
|
103
85
|
* System message detectors — content matching any pattern is dropped entirely.
|
|
@@ -108,7 +90,7 @@ export function extractLastUserMessageFromMessages(messages) {
|
|
|
108
90
|
* When a new runtime-injected pattern appears, add it here rather than
|
|
109
91
|
* writing bespoke stripping logic.
|
|
110
92
|
*/
|
|
111
|
-
const SYSTEM_MESSAGE_PATTERNS = [
|
|
93
|
+
export const SYSTEM_MESSAGE_PATTERNS = [
|
|
112
94
|
/^A new session was started\b/,
|
|
113
95
|
/^Current time:/i,
|
|
114
96
|
/^✅?\s*New session started\b/,
|
|
@@ -118,7 +100,7 @@ const SYSTEM_MESSAGE_PATTERNS = [
|
|
|
118
100
|
/**
|
|
119
101
|
* Returns true if the text is a system-injected message.
|
|
120
102
|
*/
|
|
121
|
-
function isSystemMessage(text) {
|
|
103
|
+
export function isSystemMessage(text) {
|
|
122
104
|
const trimmed = text.trim();
|
|
123
105
|
return !trimmed || SYSTEM_MESSAGE_PATTERNS.some((p) => p.test(trimmed));
|
|
124
106
|
}
|
|
@@ -127,10 +109,27 @@ function isSystemMessage(text) {
|
|
|
127
109
|
* Unlike isSystemMessage, does NOT treat empty/whitespace as system content —
|
|
128
110
|
* preserves paragraph breaks when filtering line-by-line.
|
|
129
111
|
*/
|
|
130
|
-
function isSystemLine(line) {
|
|
112
|
+
export function isSystemLine(line) {
|
|
131
113
|
const trimmed = line.trim();
|
|
132
114
|
return trimmed !== "" && SYSTEM_MESSAGE_PATTERNS.some((p) => p.test(trimmed));
|
|
133
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Remove gralkor-memory XML from text (feedback loop prevention).
|
|
118
|
+
* Applied to all message roles, not just user.
|
|
119
|
+
*/
|
|
120
|
+
function stripGralkorMemoryXml(text) {
|
|
121
|
+
return text.replace(/<gralkor-memory[\s\S]*?<\/gralkor-memory>\n*/g, "");
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Multi-line patterns that match entire messages which are NOT real user content.
|
|
125
|
+
* Checked in cleanUserMessageText as early-out — if the full text matches, the
|
|
126
|
+
* message is dropped entirely. Used for external plugin prompts that wrap
|
|
127
|
+
* conversation context in a structured template.
|
|
128
|
+
*/
|
|
129
|
+
const SYSTEM_MESSAGE_MULTILINE_PATTERNS = [
|
|
130
|
+
// File-naming slug prompt from external plugins (e.g., ACPX session-namer)
|
|
131
|
+
/^Based on this conversation, generate a short \d+-\d+ word filename slug[\s\S]*Reply with ONLY the slug/,
|
|
132
|
+
];
|
|
134
133
|
/**
|
|
135
134
|
* Detect system-injected user messages and extract real user content.
|
|
136
135
|
*
|
|
@@ -140,13 +139,16 @@ function isSystemLine(line) {
|
|
|
140
139
|
*
|
|
141
140
|
* Returns the user's text, or empty string if the message is a system message.
|
|
142
141
|
*/
|
|
143
|
-
function cleanUserMessageText(text) {
|
|
142
|
+
export function cleanUserMessageText(text) {
|
|
144
143
|
if (!text.trim())
|
|
145
144
|
return "";
|
|
145
|
+
// Drop messages matching known multi-line system templates
|
|
146
|
+
if (SYSTEM_MESSAGE_MULTILINE_PATTERNS.some((p) => p.test(text.trim())))
|
|
147
|
+
return "";
|
|
146
148
|
// Unwrap metadata wrappers (they surround real user content)
|
|
147
149
|
let cleaned = text.replace(/[^\n]+\(untrusted metadata\):\n```json\n[\s\S]*?\n```\n\n/g, "");
|
|
148
150
|
// Remove gralkor-memory XML (feedback loop prevention)
|
|
149
|
-
cleaned = cleaned
|
|
151
|
+
cleaned = stripGralkorMemoryXml(cleaned);
|
|
150
152
|
// Remove Untrusted context footer (appended by OpenClaw's appendUntrustedContext)
|
|
151
153
|
cleaned = cleaned.replace(/\n*Untrusted context \(metadata[^)]*\):\n[\s\S]*$/, "");
|
|
152
154
|
// Strip individual system lines (session-start, Current time, etc.)
|
|
@@ -194,8 +196,9 @@ export function extractMessagesFromCtx(event) {
|
|
|
194
196
|
filtered.push({ type: "tool_use", text: serializeToolBlock(block) });
|
|
195
197
|
}
|
|
196
198
|
else if (isTextBlock(block)) {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
+
const cleaned = stripGralkorMemoryXml(block.text);
|
|
200
|
+
if (cleaned.trim() && !isSystemMessage(cleaned)) {
|
|
201
|
+
filtered.push({ type: "text", text: cleaned });
|
|
199
202
|
}
|
|
200
203
|
}
|
|
201
204
|
}
|
|
@@ -208,10 +211,11 @@ export function extractMessagesFromCtx(event) {
|
|
|
208
211
|
.filter(isTextBlock)
|
|
209
212
|
.map((block) => block.text)
|
|
210
213
|
.join("\n");
|
|
211
|
-
|
|
214
|
+
const cleaned = stripGralkorMemoryXml(textParts);
|
|
215
|
+
if (cleaned.trim()) {
|
|
212
216
|
result.push({
|
|
213
217
|
role: "assistant",
|
|
214
|
-
content: [{ type: "tool_result", text: truncateText(
|
|
218
|
+
content: [{ type: "tool_result", text: truncateText(cleaned, TOOL_RESULT_TRUNCATE_LIMIT) }],
|
|
215
219
|
});
|
|
216
220
|
}
|
|
217
221
|
}
|
|
@@ -292,8 +296,8 @@ export function createBeforePromptBuildHandler(client, config, opts) {
|
|
|
292
296
|
console.log(`[gralkor] auto-recall skip (disabled) — agentId:${agentId}`);
|
|
293
297
|
return;
|
|
294
298
|
}
|
|
295
|
-
const userMessage =
|
|
296
|
-
if (
|
|
299
|
+
const userMessage = extractInjectQuery(event.messages);
|
|
300
|
+
if (userMessage === null) {
|
|
297
301
|
console.log(`[gralkor] auto-recall skip (no query) — agentId:${agentId} promptLen:${event.prompt.length} messages:${event.messages.length}`);
|
|
298
302
|
return;
|
|
299
303
|
}
|
|
@@ -306,7 +310,7 @@ export function createBeforePromptBuildHandler(client, config, opts) {
|
|
|
306
310
|
const searchResults = await client.search(userMessage, [groupId], limit, "fast");
|
|
307
311
|
const factCount = searchResults.facts.length;
|
|
308
312
|
console.log(`[gralkor] auto-recall result — graph: ${factCount} facts — groupId:${groupId}`);
|
|
309
|
-
const furtherQuerying = "
|
|
313
|
+
const furtherQuerying = "Search memory up to 3 times in parallel with diverse queries to understand more deeply.";
|
|
310
314
|
let contextBody;
|
|
311
315
|
if (factCount > 0) {
|
|
312
316
|
const factsText = "Facts:\n" + searchResults.facts.map(formatFact).join("\n");
|
package/dist/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data-driven test fixtures for capture hygiene.
|
|
3
|
+
*
|
|
4
|
+
* To add a new case: append an entry to the relevant array. Each case is a
|
|
5
|
+
* self-contained input/expected pair with an optional `discovered` field
|
|
6
|
+
* noting where the problematic content was found.
|
|
7
|
+
*
|
|
8
|
+
* When enough cases accumulate, analyse for underlying patterns and promote
|
|
9
|
+
* to structural filters.
|
|
10
|
+
*/
|
|
11
|
+
export interface SystemPatternCase {
|
|
12
|
+
description: string;
|
|
13
|
+
input: string;
|
|
14
|
+
expected: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare const systemPatternCases: SystemPatternCase[];
|
|
17
|
+
/**
|
|
18
|
+
* Edge cases for isSystemMessage that go beyond pattern matching.
|
|
19
|
+
* isSystemMessage has a !trimmed short-circuit that treats empty/whitespace
|
|
20
|
+
* as system content even though no SYSTEM_MESSAGE_PATTERNS matches them.
|
|
21
|
+
*/
|
|
22
|
+
export declare const isSystemMessageEdgeCases: SystemPatternCase[];
|
|
23
|
+
export interface CleanTextCase {
|
|
24
|
+
description: string;
|
|
25
|
+
input: string;
|
|
26
|
+
expected: string;
|
|
27
|
+
discovered?: string;
|
|
28
|
+
}
|
|
29
|
+
export declare const cleanTextCases: CleanTextCase[];
|
|
30
|
+
//# sourceMappingURL=capture-cases.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-cases.d.ts","sourceRoot":"","sources":["../../src/test-fixtures/capture-cases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,kBAAkB,EAAE,iBAAiB,EA2DjD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,iBAAiB,EAWvD,CAAC;AAIF,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,cAAc,EAAE,aAAa,EA4FzC,CAAC"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data-driven test fixtures for capture hygiene.
|
|
3
|
+
*
|
|
4
|
+
* To add a new case: append an entry to the relevant array. Each case is a
|
|
5
|
+
* self-contained input/expected pair with an optional `discovered` field
|
|
6
|
+
* noting where the problematic content was found.
|
|
7
|
+
*
|
|
8
|
+
* When enough cases accumulate, analyse for underlying patterns and promote
|
|
9
|
+
* to structural filters.
|
|
10
|
+
*/
|
|
11
|
+
export const systemPatternCases = [
|
|
12
|
+
// Positive matches (expected: true)
|
|
13
|
+
{
|
|
14
|
+
description: "session-start instruction",
|
|
15
|
+
input: "A new session was started via /new or /reset. Execute your Session Startup sequence now",
|
|
16
|
+
expected: true,
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
description: "Current time line",
|
|
20
|
+
input: "Current time: Wednesday, March 25th, 2026 — 20:37 (Asia/Bangkok)",
|
|
21
|
+
expected: true,
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
description: "Current time line (lowercase)",
|
|
25
|
+
input: "current time: Thursday",
|
|
26
|
+
expected: true,
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
description: "session-started notification with emoji",
|
|
30
|
+
input: "✅ New session started · model: anthropic/claude-opus-4-6",
|
|
31
|
+
expected: true,
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
description: "session-started notification without emoji",
|
|
35
|
+
input: "New session started · model: openai/gpt-4o",
|
|
36
|
+
expected: true,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
description: "System: event line",
|
|
40
|
+
input: "System: [Fri 2026-03-27 09:15:30] Node: agent-1 running",
|
|
41
|
+
expected: true,
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
description: "media placeholder",
|
|
45
|
+
input: "[User sent media without caption]",
|
|
46
|
+
expected: true,
|
|
47
|
+
},
|
|
48
|
+
// Negative matches (expected: false)
|
|
49
|
+
{
|
|
50
|
+
description: "real user question",
|
|
51
|
+
input: "What is the weather today?",
|
|
52
|
+
expected: false,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
description: "System: appearing mid-string",
|
|
56
|
+
input: "Tell me about System: concepts in Linux",
|
|
57
|
+
expected: false,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
description: "session-start text appearing mid-string",
|
|
61
|
+
input: "Explain what A new session was started means in this app",
|
|
62
|
+
expected: false,
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
description: "assistant response",
|
|
66
|
+
input: "Here is the answer to your question",
|
|
67
|
+
expected: false,
|
|
68
|
+
},
|
|
69
|
+
];
|
|
70
|
+
/**
|
|
71
|
+
* Edge cases for isSystemMessage that go beyond pattern matching.
|
|
72
|
+
* isSystemMessage has a !trimmed short-circuit that treats empty/whitespace
|
|
73
|
+
* as system content even though no SYSTEM_MESSAGE_PATTERNS matches them.
|
|
74
|
+
*/
|
|
75
|
+
export const isSystemMessageEdgeCases = [
|
|
76
|
+
{
|
|
77
|
+
description: "empty string is system",
|
|
78
|
+
input: "",
|
|
79
|
+
expected: true,
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
description: "whitespace only is system",
|
|
83
|
+
input: " ",
|
|
84
|
+
expected: true,
|
|
85
|
+
},
|
|
86
|
+
];
|
|
87
|
+
export const cleanTextCases = [
|
|
88
|
+
// Metadata wrappers
|
|
89
|
+
{
|
|
90
|
+
description: "strips metadata and keeps user text",
|
|
91
|
+
input: 'Sender (untrusted metadata):\n```json\n{"id": "123"}\n```\n\nHey, enjoying tmux?',
|
|
92
|
+
expected: "Hey, enjoying tmux?",
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
description: "drops message when only metadata remains",
|
|
96
|
+
input: 'Sender (untrusted metadata):\n```json\n{"id": "123"}\n```\n\n',
|
|
97
|
+
expected: "",
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
description: "drops system message inside metadata wrapper",
|
|
101
|
+
input: 'Eli (untrusted metadata):\n```json\n{"senderId": "123"}\n```\n\nA new session was started via /new or /reset. Execute your Session Startup sequence now',
|
|
102
|
+
expected: "",
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
description: "strips system lines from mixed metadata-wrapped content",
|
|
106
|
+
input: 'Eli (untrusted metadata):\n```json\n{"senderId": "123"}\n```\n\nCurrent time: Friday, March 27th, 2026\n\nWhat is the weather?',
|
|
107
|
+
expected: "What is the weather?",
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
description: "strips arbitrary label metadata wrapper",
|
|
111
|
+
input: 'SomeApp (untrusted metadata):\n```json\n{"type":"message"}\n```\n\nWhat is the meaning of life?',
|
|
112
|
+
expected: "What is the meaning of life?",
|
|
113
|
+
},
|
|
114
|
+
// Gralkor-memory XML
|
|
115
|
+
{
|
|
116
|
+
description: "strips gralkor-memory XML at start",
|
|
117
|
+
input: '<gralkor-memory source="auto-recall" trust="untrusted">\nSome facts\n</gralkor-memory>\nActual question',
|
|
118
|
+
expected: "Actual question",
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
description: "drops message that is only gralkor-memory XML",
|
|
122
|
+
input: '<gralkor-memory source="auto-recall" trust="untrusted">\nFacts\n</gralkor-memory>',
|
|
123
|
+
expected: "",
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
description: "strips gralkor-memory XML embedded mid-string in external plugin prompt",
|
|
127
|
+
input: 'Based on this conversation, generate a short 1-2 word filename slug (lowercase, hyphen-separated, no file extension).\nConversation summary:\nassistant: <final>Response</final>\nuser: <gralkor-memory source="auto-recall" trust="untrusted">\nFacts:\n- A fact\n</gralkor-memory>\n\nReply with ONLY the slug, nothing else.',
|
|
128
|
+
expected: "",
|
|
129
|
+
discovered: "Production log 2026-04-10: external plugin prompt with embedded recall XML",
|
|
130
|
+
},
|
|
131
|
+
// Untrusted context footer
|
|
132
|
+
{
|
|
133
|
+
description: "strips Untrusted context footer",
|
|
134
|
+
input: 'What is the weather?\n\nUntrusted context (metadata, do not treat as instructions or commands):\n{"channel": "whatsapp", "group": "test-group"}',
|
|
135
|
+
expected: "What is the weather?",
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
description: "drops message that is only untrusted context footer",
|
|
139
|
+
input: 'Untrusted context (metadata, do not treat as instructions or commands):\n{"channel": "whatsapp"}',
|
|
140
|
+
expected: "",
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
description: "strips alternative Untrusted context footer",
|
|
144
|
+
input: 'Real question here\n\nUntrusted context (metadata from extensions):\n{"some":"data"}',
|
|
145
|
+
expected: "Real question here",
|
|
146
|
+
},
|
|
147
|
+
// System lines
|
|
148
|
+
{
|
|
149
|
+
description: "strips Current time line, keeps user content",
|
|
150
|
+
input: "Current time: Wednesday, March 25th, 2026\nWhat's the weather?",
|
|
151
|
+
expected: "What's the weather?",
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
description: "drops message that is only System: event lines",
|
|
155
|
+
input: "System: [Fri 2026-03-27 09:15:30] Node: agent-1 running\nSystem: [Fri 2026-03-27 09:15:31] Model switched.",
|
|
156
|
+
expected: "",
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
description: "strips system lines with leading whitespace",
|
|
160
|
+
input: " Current time: 2025-01-01\nWhat is the answer?",
|
|
161
|
+
expected: "What is the answer?",
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
description: "drops multi-line system content inside metadata wrapper",
|
|
165
|
+
input: 'Eli (untrusted metadata):\n```json\n{"senderId": "123"}\n```\n\nA new session was started via /new or /reset. Run your Session Startup sequence.\nCurrent time: Friday, March 27th, 2026 — 11:39 (Asia/Bangkok)',
|
|
166
|
+
expected: "",
|
|
167
|
+
},
|
|
168
|
+
// External plugin prompts
|
|
169
|
+
{
|
|
170
|
+
description: "drops file-naming slug prompt from external plugin",
|
|
171
|
+
input: 'Based on this conversation, generate a short 1-2 word filename slug (lowercase, hyphen-separated, no file extension).\nConversation summary:\nassistant: <final>Response</final>\nuser: Hello\n\nReply with ONLY the slug, nothing else. Examples: "vendor-pitch", "api-design", "bug-fix"',
|
|
172
|
+
expected: "",
|
|
173
|
+
discovered: "Production log 2026-04-10: ACPX session-namer plugin prompt",
|
|
174
|
+
},
|
|
175
|
+
];
|
|
176
|
+
//# sourceMappingURL=capture-cases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-cases.js","sourceRoot":"","sources":["../../src/test-fixtures/capture-cases.ts"],"names":[],"mappings":"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"}
|
package/openclaw.plugin.json
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@susu-eng/gralkor",
|
|
3
3
|
"displayName": "Gralkor",
|
|
4
|
-
"version": "27.2.
|
|
4
|
+
"version": "27.2.12",
|
|
5
5
|
"description": "OpenClaw memory plugin powered by Graphiti knowledge graphs and FalkorDB",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/index.js",
|
|
@@ -18,14 +18,12 @@
|
|
|
18
18
|
},
|
|
19
19
|
"files": [
|
|
20
20
|
"dist",
|
|
21
|
-
"server/Dockerfile",
|
|
22
21
|
"server/main.py",
|
|
23
22
|
"server/pyproject.toml",
|
|
24
23
|
"server/uv.lock",
|
|
25
24
|
"server/requirements.txt",
|
|
26
25
|
"server/wheels",
|
|
27
26
|
"openclaw.plugin.json",
|
|
28
|
-
"docker-compose.yml",
|
|
29
27
|
"config.yaml",
|
|
30
28
|
".env.example"
|
|
31
29
|
],
|
|
@@ -69,24 +67,22 @@
|
|
|
69
67
|
"scripts": {
|
|
70
68
|
"build": "tsc",
|
|
71
69
|
"typecheck": "tsc --noEmit",
|
|
72
|
-
"test": "pnpm run typecheck && pnpm run test:
|
|
73
|
-
"test:
|
|
74
|
-
"test:
|
|
70
|
+
"test": "pnpm run typecheck && pnpm run test:unit && pnpm run test:integration",
|
|
71
|
+
"test:unit": "pnpm run test:unit:ts && pnpm run test:unit:py",
|
|
72
|
+
"test:unit:ts": "vitest run",
|
|
73
|
+
"test:unit:py": "cd server && uv run pytest tests/ --ignore=tests/test_integration.py",
|
|
74
|
+
"test:integration": "pnpm run test:integration:ts && pnpm run test:integration:py",
|
|
75
|
+
"test:integration:ts": "vitest run --config test/integration/vitest.config.ts",
|
|
76
|
+
"test:integration:py": "cd server && uv run pytest tests/test_integration.py",
|
|
75
77
|
"test:functional": "bash test/harness/functional-env.sh test",
|
|
76
78
|
"test:functional:both": "bash scripts/functional-test-both.sh",
|
|
77
79
|
"test:functional:results": "bash scripts/functional-test-results.sh /tmp/gralkor-functional-arm64.log /tmp/gralkor-functional-amd64.log",
|
|
78
80
|
"test:functional:up": "bash test/harness/functional-env.sh up",
|
|
79
81
|
"test:functional:run": "bash test/harness/functional-env.sh run",
|
|
80
82
|
"test:functional:down": "bash test/harness/functional-env.sh down",
|
|
81
|
-
"test:server": "cd server && uv run pytest tests/",
|
|
82
|
-
"test:server:changed": "cd server && files=$(git diff --name-only --diff-filter=d HEAD -- 'tests/*.py') && [ -n \"$files\" ] && uv run pytest $files || echo 'No changed server test files'",
|
|
83
83
|
"test:mutate": "stryker run",
|
|
84
84
|
"setup:server": "cd server && uv sync",
|
|
85
85
|
"pack": "bash scripts/pack.sh",
|
|
86
|
-
"docker:build": "docker build -t gralkor-server:latest server/",
|
|
87
|
-
"docker:up": "pnpm run docker:build && docker compose up -d",
|
|
88
|
-
"docker:down": "docker compose down",
|
|
89
|
-
"docker:logs": "docker compose logs graphiti",
|
|
90
86
|
"publish:npm": "bash scripts/publish-npm.sh",
|
|
91
87
|
"publish:clawhub": "bash scripts/publish-clawhub.sh",
|
|
92
88
|
"publish:all": "bash scripts/publish-all.sh"
|
package/server/main.py
CHANGED
|
@@ -198,6 +198,15 @@ ontology_entity_types: dict[str, type[BaseModel]] | None = None
|
|
|
198
198
|
ontology_edge_types: dict[str, type[BaseModel]] | None = None
|
|
199
199
|
ontology_edge_type_map: dict[tuple[str, str], list[str]] | None = None
|
|
200
200
|
|
|
201
|
+
# Serializes any operation that depends on graphiti.driver pointing at a
|
|
202
|
+
# specific FalkorDB named graph. graphiti-core's add_episode() and our
|
|
203
|
+
# _ensure_driver_graph() both work by mutating the global graphiti.driver,
|
|
204
|
+
# so two concurrent requests for different group_ids can interleave and
|
|
205
|
+
# clobber each other's driver state — losing data on writes and returning
|
|
206
|
+
# wrong results on reads. Single-user agent semantics make serialization
|
|
207
|
+
# acceptable; correctness > throughput here.
|
|
208
|
+
_driver_lock = asyncio.Lock()
|
|
209
|
+
|
|
201
210
|
|
|
202
211
|
@asynccontextmanager
|
|
203
212
|
async def lifespan(_app: FastAPI):
|
|
@@ -469,18 +478,19 @@ async def add_episode(req: AddEpisodeRequest):
|
|
|
469
478
|
)
|
|
470
479
|
episode_type = EpisodeType(req.source) if req.source else EpisodeType.message
|
|
471
480
|
t0 = time.monotonic()
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
481
|
+
async with _driver_lock:
|
|
482
|
+
result = await graphiti.add_episode(
|
|
483
|
+
name=req.name,
|
|
484
|
+
episode_body=req.episode_body,
|
|
485
|
+
source_description=req.source_description,
|
|
486
|
+
group_id=_sanitize_group_id(req.group_id),
|
|
487
|
+
reference_time=ref_time,
|
|
488
|
+
source=episode_type,
|
|
489
|
+
entity_types=ontology_entity_types,
|
|
490
|
+
edge_types=ontology_edge_types,
|
|
491
|
+
edge_type_map=ontology_edge_type_map,
|
|
492
|
+
excluded_entity_types=None,
|
|
493
|
+
)
|
|
484
494
|
duration_ms = (time.monotonic() - t0) * 1000
|
|
485
495
|
episode = result.episode
|
|
486
496
|
logger.info("[gralkor] episode added — uuid:%s duration:%.0fms", episode.uuid, duration_ms)
|
|
@@ -499,6 +509,17 @@ def _sanitize_query(query: str) -> str:
|
|
|
499
509
|
return query.replace("`", " ")
|
|
500
510
|
|
|
501
511
|
|
|
512
|
+
def _sanitize_group_id(group_id: str) -> str:
|
|
513
|
+
"""Replace hyphens with underscores to avoid RediSearch syntax errors.
|
|
514
|
+
|
|
515
|
+
graphiti-core embeds group_id verbatim in RediSearch queries like
|
|
516
|
+
(@group_id:"my-hyphen-agent") where hyphens break the parser.
|
|
517
|
+
The plugin-side sanitizeGroupId() handles this at write time, but
|
|
518
|
+
direct API callers (e.g. functional tests) may pass raw hyphens.
|
|
519
|
+
"""
|
|
520
|
+
return group_id.replace("-", "_")
|
|
521
|
+
|
|
522
|
+
|
|
502
523
|
def _ensure_driver_graph(group_ids: list[str] | None) -> None:
|
|
503
524
|
"""Route graphiti's driver to the correct FalkorDB named graph.
|
|
504
525
|
|
|
@@ -512,43 +533,52 @@ def _ensure_driver_graph(group_ids: list[str] | None) -> None:
|
|
|
512
533
|
return
|
|
513
534
|
target = group_ids[0]
|
|
514
535
|
if target != graphiti.driver._database:
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
536
|
+
try:
|
|
537
|
+
graphiti.driver = graphiti.driver.clone(database=target)
|
|
538
|
+
graphiti.clients.driver = graphiti.driver
|
|
539
|
+
print(f"[gralkor] driver graph routed: {target}", flush=True)
|
|
540
|
+
except Exception as e:
|
|
541
|
+
# Invalid group_id (e.g. hyphens rejected by FalkorDB). Skip routing
|
|
542
|
+
# so the search runs against the current graph and returns empty results
|
|
543
|
+
# instead of 500ing.
|
|
544
|
+
logger.warning("[gralkor] driver graph routing failed for %s: %s", target, e)
|
|
518
545
|
|
|
519
546
|
|
|
520
547
|
@app.post("/search")
|
|
521
548
|
async def search(req: SearchRequest):
|
|
549
|
+
# Sanitize group IDs: hyphens cause RediSearch syntax errors in graphiti-core.
|
|
550
|
+
sanitized = [_sanitize_group_id(g) for g in req.group_ids]
|
|
522
551
|
logger.info("[gralkor] search — mode:%s query:%d chars group_ids:%s num_results:%d",
|
|
523
|
-
req.mode, len(req.query),
|
|
552
|
+
req.mode, len(req.query), sanitized, req.num_results)
|
|
524
553
|
# graphiti.add_episode() clones the driver to target the correct FalkorDB
|
|
525
554
|
# named graph (database=group_id), but graphiti.search() does not — it just
|
|
526
555
|
# uses whatever graph the driver currently points at. Before the first
|
|
527
556
|
# add_episode, the driver targets 'default_db' (an empty graph), so all
|
|
528
557
|
# searches return 0 results. Fix: route to the correct graph here.
|
|
529
|
-
_ensure_driver_graph(req.group_ids)
|
|
530
558
|
t0 = time.monotonic()
|
|
531
559
|
try:
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
560
|
+
async with _driver_lock:
|
|
561
|
+
_ensure_driver_graph(sanitized)
|
|
562
|
+
if req.mode == "slow":
|
|
563
|
+
# Cross-encoder + BFS: higher quality, also returns entity node summaries.
|
|
564
|
+
# deepcopy required — COMBINED_HYBRID_SEARCH_CROSS_ENCODER is a module-level
|
|
565
|
+
# constant; mutating .limit directly would corrupt it across requests.
|
|
566
|
+
config = deepcopy(COMBINED_HYBRID_SEARCH_CROSS_ENCODER)
|
|
567
|
+
config.limit = req.num_results
|
|
568
|
+
search_result = await graphiti.search_(
|
|
569
|
+
query=_sanitize_query(req.query),
|
|
570
|
+
group_ids=sanitized,
|
|
571
|
+
config=config,
|
|
572
|
+
)
|
|
573
|
+
edges = search_result.edges
|
|
574
|
+
nodes = search_result.nodes
|
|
575
|
+
else:
|
|
576
|
+
edges = await graphiti.search(
|
|
577
|
+
query=_sanitize_query(req.query),
|
|
578
|
+
group_ids=sanitized,
|
|
579
|
+
num_results=req.num_results,
|
|
580
|
+
)
|
|
581
|
+
nodes = []
|
|
552
582
|
except Exception as e:
|
|
553
583
|
duration_ms = (time.monotonic() - t0) * 1000
|
|
554
584
|
logger.error("[gralkor] search failed — mode:%s %.0fms: %s", req.mode, duration_ms, e)
|
|
@@ -571,8 +601,10 @@ async def build_indices():
|
|
|
571
601
|
|
|
572
602
|
@app.post("/build-communities")
|
|
573
603
|
async def build_communities(req: GroupIdRequest):
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
604
|
+
gid = _sanitize_group_id(req.group_id)
|
|
605
|
+
async with _driver_lock:
|
|
606
|
+
_ensure_driver_graph([gid])
|
|
607
|
+
communities, edges = await graphiti.build_communities(
|
|
608
|
+
group_ids=[gid],
|
|
609
|
+
)
|
|
578
610
|
return {"communities": len(communities), "edges": len(edges)}
|
|
Binary file
|