@susu-eng/gralkor 26.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.
Files changed (83) hide show
  1. package/.env.example +32 -0
  2. package/README.md +429 -0
  3. package/config.yaml +16 -0
  4. package/dist/cli/bin.d.ts +3 -0
  5. package/dist/cli/bin.d.ts.map +1 -0
  6. package/dist/cli/bin.js +89 -0
  7. package/dist/cli/bin.js.map +1 -0
  8. package/dist/cli/commands/check.d.ts +2 -0
  9. package/dist/cli/commands/check.d.ts.map +1 -0
  10. package/dist/cli/commands/check.js +118 -0
  11. package/dist/cli/commands/check.js.map +1 -0
  12. package/dist/cli/commands/config.d.ts +3 -0
  13. package/dist/cli/commands/config.d.ts.map +1 -0
  14. package/dist/cli/commands/config.js +24 -0
  15. package/dist/cli/commands/config.js.map +1 -0
  16. package/dist/cli/commands/install.d.ts +8 -0
  17. package/dist/cli/commands/install.d.ts.map +1 -0
  18. package/dist/cli/commands/install.js +105 -0
  19. package/dist/cli/commands/install.js.map +1 -0
  20. package/dist/cli/commands/status.d.ts +2 -0
  21. package/dist/cli/commands/status.d.ts.map +1 -0
  22. package/dist/cli/commands/status.js +68 -0
  23. package/dist/cli/commands/status.js.map +1 -0
  24. package/dist/cli/lib/config.d.ts +7 -0
  25. package/dist/cli/lib/config.d.ts.map +1 -0
  26. package/dist/cli/lib/config.js +38 -0
  27. package/dist/cli/lib/config.js.map +1 -0
  28. package/dist/cli/lib/openclaw.d.ts +21 -0
  29. package/dist/cli/lib/openclaw.d.ts.map +1 -0
  30. package/dist/cli/lib/openclaw.js +93 -0
  31. package/dist/cli/lib/openclaw.js.map +1 -0
  32. package/dist/cli/lib/output.d.ts +9 -0
  33. package/dist/cli/lib/output.d.ts.map +1 -0
  34. package/dist/cli/lib/output.js +36 -0
  35. package/dist/cli/lib/output.js.map +1 -0
  36. package/dist/cli/lib/version.d.ts +9 -0
  37. package/dist/cli/lib/version.d.ts.map +1 -0
  38. package/dist/cli/lib/version.js +51 -0
  39. package/dist/cli/lib/version.js.map +1 -0
  40. package/dist/client.d.ts +72 -0
  41. package/dist/client.d.ts.map +1 -0
  42. package/dist/client.js +85 -0
  43. package/dist/client.js.map +1 -0
  44. package/dist/config.d.ts +69 -0
  45. package/dist/config.d.ts.map +1 -0
  46. package/dist/config.js +163 -0
  47. package/dist/config.js.map +1 -0
  48. package/dist/hooks.d.ts +131 -0
  49. package/dist/hooks.d.ts.map +1 -0
  50. package/dist/hooks.js +458 -0
  51. package/dist/hooks.js.map +1 -0
  52. package/dist/index.d.ts +88 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +184 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/native-memory.d.ts +67 -0
  57. package/dist/native-memory.d.ts.map +1 -0
  58. package/dist/native-memory.js +79 -0
  59. package/dist/native-memory.js.map +1 -0
  60. package/dist/register.d.ts +10 -0
  61. package/dist/register.d.ts.map +1 -0
  62. package/dist/register.js +150 -0
  63. package/dist/register.js.map +1 -0
  64. package/dist/server-manager.d.ts +19 -0
  65. package/dist/server-manager.d.ts.map +1 -0
  66. package/dist/server-manager.js +238 -0
  67. package/dist/server-manager.js.map +1 -0
  68. package/dist/tools.d.ts +32 -0
  69. package/dist/tools.d.ts.map +1 -0
  70. package/dist/tools.js +56 -0
  71. package/dist/tools.js.map +1 -0
  72. package/dist/types.d.ts +48 -0
  73. package/dist/types.d.ts.map +1 -0
  74. package/dist/types.js +8 -0
  75. package/dist/types.js.map +1 -0
  76. package/docker-compose.yml +34 -0
  77. package/openclaw.plugin.json +99 -0
  78. package/package.json +65 -0
  79. package/server/Dockerfile +7 -0
  80. package/server/main.py +763 -0
  81. package/server/pyproject.toml +19 -0
  82. package/server/requirements.txt +5 -0
  83. package/server/uv.lock +1162 -0
package/dist/hooks.js ADDED
@@ -0,0 +1,458 @@
1
+ import { formatFact, INTERPRETATION_INSTRUCTION } from "./tools.js";
2
+ /**
3
+ * Normalize message content to a ContentBlock array.
4
+ *
5
+ * UserMessage.content may be a plain string at runtime (OpenClaw's
6
+ * AgentMessage union). Convert it to a single text block so downstream
7
+ * code can always use array methods.
8
+ */
9
+ function normalizeContent(content) {
10
+ if (!content)
11
+ return [];
12
+ if (typeof content === "string")
13
+ return [{ type: "text", text: content }];
14
+ return content;
15
+ }
16
+ /**
17
+ * Check if a content block contains extractable text.
18
+ * Matches both standard "text" blocks and the "output_text" variant
19
+ * emitted by some providers.
20
+ */
21
+ function isTextBlock(block) {
22
+ return (block.type === "text" || block.type === "output_text") && !!block.text;
23
+ }
24
+ /**
25
+ * Check if a content block is a thinking block with content.
26
+ */
27
+ function isThinkingBlock(block) {
28
+ return block.type === "thinking" && !!block.thinking;
29
+ }
30
+ /** Tool block type names used by OpenClaw providers. */
31
+ const TOOL_BLOCK_TYPES = new Set(["toolCall", "toolUse", "functionCall"]);
32
+ /**
33
+ * Check if a content block is a tool call block.
34
+ */
35
+ function isToolBlock(block) {
36
+ return TOOL_BLOCK_TYPES.has(block.type);
37
+ }
38
+ /**
39
+ * Serialize a tool call block into a human-readable text representation.
40
+ * Field names vary by provider: Anthropic uses `input`, OpenAI uses `arguments`,
41
+ * and some providers use `params`.
42
+ */
43
+ function serializeToolBlock(block) {
44
+ const name = block.name || "unknown";
45
+ const input = block.input ?? block.arguments ?? block.params;
46
+ const inputStr = input ? JSON.stringify(input) : "";
47
+ return inputStr ? `Tool: ${name}\nInput: ${inputStr}` : `Tool: ${name}`;
48
+ }
49
+ /** Maximum characters for tool result text before truncation. */
50
+ const TOOL_RESULT_TRUNCATE_LIMIT = 1000;
51
+ /**
52
+ * Truncate text to a character limit, appending an indicator if truncated.
53
+ */
54
+ function truncateText(text, limit) {
55
+ if (text.length <= limit)
56
+ return text;
57
+ return text.slice(0, limit) + "... (truncated)";
58
+ }
59
+ /**
60
+ * Extract the user's actual message from event.prompt.
61
+ *
62
+ * The prompt may be wrapped in metadata:
63
+ * "Sender (untrusted metadata):\n```json\n{...}\n```\n\nActual message"
64
+ *
65
+ * System prompts (e.g. "A new session was started via /new") are not user messages.
66
+ */
67
+ export function extractUserMessageFromPrompt(event) {
68
+ // Strip leading "System: ..." lines (queued events prepended by gateway)
69
+ const stripped = event.prompt.replace(/^(?:System: [^\n]*\n\n)+/, "");
70
+ // Strip session-start system instruction (may have user message after it)
71
+ const afterSession = stripped.replace(/^A new session was started[^\n]*(?:\n\n)?/, "");
72
+ if (!afterSession)
73
+ return "";
74
+ // Strip metadata wrapper if present
75
+ const metadataPattern = /^.+?\(untrusted metadata\):\n```json\n[\s\S]*?\n```\n\n/;
76
+ const fromPrompt = afterSession.replace(metadataPattern, "").trim();
77
+ if (fromPrompt)
78
+ return fromPrompt;
79
+ // Prompt was only metadata wrapper — extract from messages instead.
80
+ return extractLastUserMessageFromMessages(event.messages);
81
+ }
82
+ /**
83
+ * Extract the last user message text from the messages array.
84
+ * Used as fallback when the prompt contains only metadata wrapper.
85
+ */
86
+ export function extractLastUserMessageFromMessages(messages) {
87
+ for (let i = messages.length - 1; i >= 0; i--) {
88
+ if (messages[i].role === "user") {
89
+ const text = normalizeContent(messages[i].content)
90
+ .filter(isTextBlock)
91
+ .map((block) => block.text)
92
+ .join("\n");
93
+ const cleaned = cleanUserMessageText(text);
94
+ if (cleaned)
95
+ return cleaned;
96
+ }
97
+ }
98
+ return "";
99
+ }
100
+ /**
101
+ * System message detectors — content matching any pattern is dropped entirely.
102
+ * OpenClaw injects system content under user/assistant roles (session
103
+ * notifications, timestamps, startup instructions). These patterns detect
104
+ * those injections so extractMessagesFromCtx can drop them before ingestion.
105
+ *
106
+ * When a new runtime-injected pattern appears, add it here rather than
107
+ * writing bespoke stripping logic.
108
+ */
109
+ const SYSTEM_MESSAGE_PATTERNS = [
110
+ /^A new session was started\b/,
111
+ /^Current time:/i,
112
+ /^✅?\s*New session started\b/,
113
+ /^System: /,
114
+ /^\[User sent media without caption\]$/,
115
+ ];
116
+ /**
117
+ * Returns true if the text is a system-injected message.
118
+ */
119
+ function isSystemMessage(text) {
120
+ const trimmed = text.trim();
121
+ return !trimmed || SYSTEM_MESSAGE_PATTERNS.some((p) => p.test(trimmed));
122
+ }
123
+ /**
124
+ * Returns true if a single non-empty line matches a system pattern.
125
+ * Unlike isSystemMessage, does NOT treat empty/whitespace as system content —
126
+ * preserves paragraph breaks when filtering line-by-line.
127
+ */
128
+ function isSystemLine(line) {
129
+ const trimmed = line.trim();
130
+ return trimmed !== "" && SYSTEM_MESSAGE_PATTERNS.some((p) => p.test(trimmed));
131
+ }
132
+ /**
133
+ * Detect system-injected user messages and extract real user content.
134
+ *
135
+ * Messages matching SYSTEM_MESSAGE_PATTERNS are dropped entirely.
136
+ * Metadata wrappers and gralkor-memory XML are unwrapped because they
137
+ * surround real user content.
138
+ *
139
+ * Returns the user's text, or empty string if the message is a system message.
140
+ */
141
+ function cleanUserMessageText(text) {
142
+ if (!text.trim())
143
+ return "";
144
+ // Unwrap metadata wrappers (they surround real user content)
145
+ let cleaned = text.replace(/[^\n]+\(untrusted metadata\):\n```json\n[\s\S]*?\n```\n\n/g, "");
146
+ // Remove gralkor-memory XML (feedback loop prevention)
147
+ cleaned = cleaned.replace(/<gralkor-memory[\s\S]*?<\/gralkor-memory>\n*/g, "");
148
+ // Remove Untrusted context footer (appended by OpenClaw's appendUntrustedContext)
149
+ cleaned = cleaned.replace(/\n*Untrusted context \(metadata[^)]*\):\n[\s\S]*$/, "");
150
+ // Strip individual system lines (session-start, Current time, etc.)
151
+ cleaned = cleaned
152
+ .split("\n")
153
+ .filter((line) => !isSystemLine(line))
154
+ .join("\n")
155
+ .trim();
156
+ return cleaned;
157
+ }
158
+ /**
159
+ * Extract and filter messages for episode ingestion.
160
+ *
161
+ * Filters the raw OpenClaw message array down to user and assistant messages
162
+ * with only text/output_text/thinking blocks. Cleans user messages of system
163
+ * noise (session-start instructions, metadata wrappers, gralkor-memory XML).
164
+ * Serializes toolCall/toolUse/functionCall blocks as tool_use blocks.
165
+ * Converts toolResult messages to assistant messages with truncated tool_result blocks.
166
+ *
167
+ * The server handles transcript formatting and thinking distillation.
168
+ */
169
+ export function extractMessagesFromCtx(event) {
170
+ const result = [];
171
+ for (const msg of event.messages) {
172
+ const blocks = normalizeContent(msg.content);
173
+ if (msg.role === "user") {
174
+ const textParts = blocks
175
+ .filter(isTextBlock)
176
+ .map((block) => block.text)
177
+ .join("\n");
178
+ if (!textParts)
179
+ continue;
180
+ const cleanText = cleanUserMessageText(textParts);
181
+ if (!cleanText)
182
+ continue;
183
+ result.push({ role: "user", content: [{ type: "text", text: cleanText }] });
184
+ }
185
+ else if (msg.role === "assistant") {
186
+ const filtered = [];
187
+ for (const block of blocks) {
188
+ if (isThinkingBlock(block)) {
189
+ filtered.push({ type: "thinking", text: block.thinking });
190
+ }
191
+ else if (isToolBlock(block)) {
192
+ filtered.push({ type: "tool_use", text: serializeToolBlock(block) });
193
+ }
194
+ else if (isTextBlock(block)) {
195
+ if (!isSystemMessage(block.text)) {
196
+ filtered.push({ type: "text", text: block.text });
197
+ }
198
+ }
199
+ }
200
+ if (filtered.length > 0) {
201
+ result.push({ role: "assistant", content: filtered });
202
+ }
203
+ }
204
+ else if (msg.role === "toolResult" || msg.role === "tool") {
205
+ const textParts = blocks
206
+ .filter(isTextBlock)
207
+ .map((block) => block.text)
208
+ .join("\n");
209
+ if (textParts) {
210
+ result.push({
211
+ role: "assistant",
212
+ content: [{ type: "tool_result", text: truncateText(textParts, TOOL_RESULT_TRUNCATE_LIMIT) }],
213
+ });
214
+ }
215
+ }
216
+ }
217
+ return result;
218
+ }
219
+ /**
220
+ * Count actual results in a native search response.
221
+ * Native memory_search returns JSON with metadata even when results are empty:
222
+ * { "results": [], "provider": "...", ... }
223
+ * For non-JSON strings, returns 1 if non-empty (opaque content).
224
+ */
225
+ export function countNativeResults(nativeResult) {
226
+ if (!nativeResult)
227
+ return 0;
228
+ try {
229
+ const parsed = JSON.parse(nativeResult);
230
+ return Array.isArray(parsed.results) ? parsed.results.length : 0;
231
+ }
232
+ catch {
233
+ return nativeResult.trim().length > 0 ? 1 : 0;
234
+ }
235
+ }
236
+ export function createBeforePromptBuildHandler(client, config, opts = {}) {
237
+ const { setGroupId, getNativeSearch, serverReady } = opts;
238
+ return async (event, ctx = {}) => {
239
+ const agentId = ctx.agentId;
240
+ console.log(`[gralkor] auto-recall — agentId:${agentId} promptLen:${event.prompt.length} messages:${event.messages.length}`);
241
+ if (setGroupId && agentId) {
242
+ setGroupId(agentId);
243
+ }
244
+ if (!config.autoRecall.enabled) {
245
+ console.log(`[gralkor] auto-recall skip (disabled) — agentId:${agentId}`);
246
+ return;
247
+ }
248
+ const userMessage = extractUserMessageFromPrompt(event);
249
+ if (!userMessage) {
250
+ console.log(`[gralkor] auto-recall skip (no query) — agentId:${agentId} promptLen:${event.prompt.length} messages:${event.messages.length}`);
251
+ return;
252
+ }
253
+ const groupId = agentId ?? "default";
254
+ try {
255
+ const limit = config.autoRecall.maxResults;
256
+ if (serverReady && !serverReady.isReady()) {
257
+ throw new Error("[gralkor] auto-recall failed: server is not ready");
258
+ }
259
+ const nativeSearch = getNativeSearch?.();
260
+ const [searchResults, nativeResult] = await Promise.all([
261
+ client.search(userMessage, [groupId], limit),
262
+ nativeSearch ? nativeSearch(userMessage) : Promise.resolve(null),
263
+ ]);
264
+ const factCount = searchResults.facts.length;
265
+ const nativeCount = countNativeResults(nativeResult);
266
+ console.log(`[gralkor] auto-recall result — graph: ${factCount} facts, native: ${nativeCount} results — groupId:${groupId}`);
267
+ const sections = [];
268
+ if (factCount > 0) {
269
+ sections.push("Facts from knowledge graph:\n" + searchResults.facts.map(formatFact).join("\n"));
270
+ }
271
+ else {
272
+ sections.push("No facts found.");
273
+ }
274
+ if (nativeCount > 0 && nativeResult) {
275
+ sections.push("From native memory:\n" + nativeResult);
276
+ }
277
+ else {
278
+ sections.push("No native results.");
279
+ }
280
+ const furtherQuerying = "Then, search memory up to 3 times in parallel with diverse queries to understand more deeply.";
281
+ const prependContext = `<gralkor-memory source="auto-recall" trust="untrusted">\n${sections.join("\n\n")}\n\n${INTERPRETATION_INSTRUCTION}\n\n${furtherQuerying}\n</gralkor-memory>`;
282
+ if (config.test) {
283
+ console.log(`[gralkor] [test] auto-recall query: ${userMessage}`);
284
+ console.log(`[gralkor] [test] auto-recall context:\n${prependContext}`);
285
+ }
286
+ return { prependContext };
287
+ }
288
+ catch (err) {
289
+ console.error("[gralkor] auto-recall failed:", err instanceof Error ? err.message : err);
290
+ throw err;
291
+ }
292
+ };
293
+ }
294
+ function resolveBufferKey(ctx) {
295
+ return ctx.sessionKey || ctx.agentId || "default";
296
+ }
297
+ /**
298
+ * Returns true if the error is retryable (not a 4xx client error).
299
+ */
300
+ function isRetryableError(err) {
301
+ if (err instanceof Error && /returned 4\d{2}:/.test(err.message))
302
+ return false;
303
+ return true;
304
+ }
305
+ /**
306
+ * Keyed debouncer: stores a value per key and flushes it after idle timeout.
307
+ * Each `set()` resets the timer. `flush()` forces immediate delivery.
308
+ * At most one flush per key — whichever fires first (idle or explicit) wins.
309
+ */
310
+ export class DebouncedFlush {
311
+ delayMs;
312
+ onFlush;
313
+ entries = new Map();
314
+ timers = new Map();
315
+ constructor(delayMs, onFlush) {
316
+ this.delayMs = delayMs;
317
+ this.onFlush = onFlush;
318
+ }
319
+ set(key, value) {
320
+ this.entries.set(key, value);
321
+ const existing = this.timers.get(key);
322
+ if (existing)
323
+ clearTimeout(existing);
324
+ const timer = setTimeout(() => {
325
+ this.timers.delete(key);
326
+ const val = this.entries.get(key);
327
+ if (!val)
328
+ return;
329
+ this.entries.delete(key);
330
+ this.onFlush(key, val).catch(() => { });
331
+ }, this.delayMs);
332
+ timer.unref();
333
+ this.timers.set(key, timer);
334
+ }
335
+ async flush(key) {
336
+ const timer = this.timers.get(key);
337
+ if (timer) {
338
+ clearTimeout(timer);
339
+ this.timers.delete(key);
340
+ }
341
+ const val = this.entries.get(key);
342
+ if (!val)
343
+ return;
344
+ this.entries.delete(key);
345
+ await this.onFlush(key, val);
346
+ }
347
+ async flushAll() {
348
+ const keys = [...this.entries.keys()];
349
+ await Promise.allSettled(keys.map(key => this.flush(key)));
350
+ }
351
+ has(key) {
352
+ return this.entries.has(key);
353
+ }
354
+ get pendingCount() {
355
+ return this.entries.size;
356
+ }
357
+ get timerCount() {
358
+ return this.timers.size;
359
+ }
360
+ dispose() {
361
+ for (const timer of this.timers.values())
362
+ clearTimeout(timer);
363
+ this.timers.clear();
364
+ this.entries.clear();
365
+ }
366
+ }
367
+ /**
368
+ * Flush a session buffer → episode. Retries up to 3 times with exponential backoff.
369
+ */
370
+ export async function flushSessionBuffer(key, buffer, client, { retryDelayMs = 1000, test } = {}) {
371
+ const filtered = extractMessagesFromCtx({ messages: buffer.messages });
372
+ if (filtered.length === 0) {
373
+ console.log(`[gralkor] auto-capture flush skip (empty) — key:${key}`);
374
+ return;
375
+ }
376
+ const groupId = buffer.agentId ?? "default";
377
+ const userFiltered = filtered.filter(m => m.role === "user").length;
378
+ const assistantFiltered = filtered.filter(m => m.role === "assistant").length;
379
+ const assistantBlocks = filtered.filter(m => m.role === "assistant").flatMap(m => m.content);
380
+ const thinkingBlockCount = assistantBlocks.filter(b => b.type === "thinking").length;
381
+ const toolUseBlockCount = assistantBlocks.filter(b => b.type === "tool_use").length;
382
+ const toolResultBlockCount = assistantBlocks.filter(b => b.type === "tool_result").length;
383
+ const textBlockCount = filtered.reduce((sum, m) => sum + m.content.filter(b => b.type === "text").length, 0);
384
+ const totalChars = filtered.reduce((sum, m) => sum + m.content.reduce((s, b) => s + b.text.length, 0), 0);
385
+ console.log(`[gralkor] auto-capture flushing — key:${key} groupId:${groupId} messages:${filtered.length} (user:${userFiltered} assistant:${assistantFiltered} textBlocks:${textBlockCount} thinkingBlocks:${thinkingBlockCount} toolUseBlocks:${toolUseBlockCount} toolResultBlocks:${toolResultBlockCount} chars:${totalChars})`);
386
+ if (test) {
387
+ console.log(`[gralkor] [test] episode messages:\n${JSON.stringify(filtered, null, 2)}`);
388
+ }
389
+ const maxRetries = 3;
390
+ let lastError;
391
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
392
+ try {
393
+ const flushStart = Date.now();
394
+ await client.ingestMessages({
395
+ name: `conversation-${Date.now()}`,
396
+ source_description: "auto-capture",
397
+ group_id: groupId,
398
+ messages: filtered,
399
+ });
400
+ const flushDuration = Date.now() - flushStart;
401
+ console.log(`[gralkor] auto-capture flushed — key:${key} duration:${flushDuration}ms`);
402
+ return;
403
+ }
404
+ catch (err) {
405
+ lastError = err;
406
+ if (attempt < maxRetries && isRetryableError(err)) {
407
+ const delay = retryDelayMs * Math.pow(2, attempt);
408
+ console.warn(`[gralkor] auto-capture flush attempt ${attempt + 1} failed, retrying in ${delay}ms: ${err instanceof Error ? err.message : err}`);
409
+ await new Promise((resolve) => setTimeout(resolve, delay));
410
+ }
411
+ else {
412
+ console.error(`[gralkor] auto-capture flush failed after ${attempt + 1} attempts — key:${key}: ${err instanceof Error ? err.message : err}`);
413
+ break;
414
+ }
415
+ }
416
+ }
417
+ throw lastError;
418
+ }
419
+ export function createAgentEndHandler(config, debouncer) {
420
+ return async (event, ctx = {}) => {
421
+ console.log(`[gralkor] agent_end — agentId:${ctx.agentId} messages:${event.messages.length} success:${event.success}`);
422
+ if (!config.autoCapture.enabled) {
423
+ console.log("[gralkor] agent_end skip (disabled)");
424
+ return;
425
+ }
426
+ if (event.messages.length === 0) {
427
+ console.log(`[gralkor] agent_end skip (no messages) — agentId:${ctx.agentId}`);
428
+ return;
429
+ }
430
+ const key = resolveBufferKey(ctx);
431
+ const userCount = event.messages.filter(m => m.role === "user").length;
432
+ const assistantCount = event.messages.filter(m => m.role === "assistant").length;
433
+ const assistantBlocksRaw = event.messages
434
+ .filter(m => m.role === "assistant")
435
+ .flatMap(m => normalizeContent(m.content));
436
+ const thinkingBlocks = assistantBlocksRaw.filter(isThinkingBlock).length;
437
+ const toolBlocks = assistantBlocksRaw.filter(isToolBlock).length;
438
+ const toolResultCount = event.messages.filter(m => m.role === "toolResult").length;
439
+ debouncer.set(key, {
440
+ messages: event.messages,
441
+ agentId: ctx.agentId,
442
+ sessionKey: ctx.sessionKey,
443
+ });
444
+ console.log(`[gralkor] auto-capture buffered — key:${key} total:${event.messages.length} user:${userCount} assistant:${assistantCount} thinkingBlocks:${thinkingBlocks} toolBlocks:${toolBlocks} toolResults:${toolResultCount}`);
445
+ };
446
+ }
447
+ export function createSessionEndHandler(debouncer) {
448
+ return async (_event, ctx) => {
449
+ const key = resolveBufferKey(ctx);
450
+ if (!debouncer.has(key)) {
451
+ console.log(`[gralkor] session_end — no buffer for key:${key}`);
452
+ return;
453
+ }
454
+ console.log(`[gralkor] session_end flush — key:${key}`);
455
+ await debouncer.flush(key);
456
+ };
457
+ }
458
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import type { MemoryPluginApi } from "./types.js";
2
+ export declare const id = "gralkor";
3
+ export declare const name = "Gralkor Memory";
4
+ export declare const description = "Persistent, temporally-aware memory via Graphiti knowledge graphs and FalkorDB";
5
+ export declare const kind: "memory";
6
+ export declare const tools: string[];
7
+ export declare const configSchema: {
8
+ type: "object";
9
+ properties: {
10
+ autoCapture: {
11
+ type: "object";
12
+ properties: {
13
+ enabled: {
14
+ type: "boolean";
15
+ default: boolean;
16
+ };
17
+ };
18
+ };
19
+ autoRecall: {
20
+ type: "object";
21
+ properties: {
22
+ enabled: {
23
+ type: "boolean";
24
+ default: boolean;
25
+ };
26
+ maxResults: {
27
+ type: "number";
28
+ default: number;
29
+ };
30
+ };
31
+ };
32
+ dataDir: {
33
+ type: "string";
34
+ description: string;
35
+ };
36
+ test: {
37
+ type: "boolean";
38
+ default: boolean;
39
+ description: string;
40
+ };
41
+ };
42
+ };
43
+ export declare function register(api: MemoryPluginApi): void;
44
+ declare const _default: {
45
+ id: string;
46
+ name: string;
47
+ description: string;
48
+ kind: "memory";
49
+ configSchema: {
50
+ type: "object";
51
+ properties: {
52
+ autoCapture: {
53
+ type: "object";
54
+ properties: {
55
+ enabled: {
56
+ type: "boolean";
57
+ default: boolean;
58
+ };
59
+ };
60
+ };
61
+ autoRecall: {
62
+ type: "object";
63
+ properties: {
64
+ enabled: {
65
+ type: "boolean";
66
+ default: boolean;
67
+ };
68
+ maxResults: {
69
+ type: "number";
70
+ default: number;
71
+ };
72
+ };
73
+ };
74
+ dataDir: {
75
+ type: "string";
76
+ description: string;
77
+ };
78
+ test: {
79
+ type: "boolean";
80
+ default: boolean;
81
+ description: string;
82
+ };
83
+ };
84
+ };
85
+ register: typeof register;
86
+ };
87
+ export default _default;
88
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAiKlD,eAAO,MAAM,EAAE,YAAY,CAAC;AAC5B,eAAO,MAAM,IAAI,mBAAmB,CAAC;AACrC,eAAO,MAAM,WAAW,mFAC0D,CAAC;AACnF,eAAO,MAAM,IAAI,EAAG,QAAiB,CAAC;AAEtC,eAAO,MAAM,KAAK,UAAgD,CAAC;AAEnE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BxB,CAAC;AAEF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,eAAe,QA2B5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,wBAAuE"}