@xfabric/memory 0.2.9 → 0.2.11

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.
@@ -1,29 +1,50 @@
1
1
  /**
2
2
  * OpenCode plugin for semantic memory search
3
- * Exposes memory_search and memory_get tools to AI agents
3
+ * Exposes memory_search, memory_get, memory_write, and memory_flush tools to AI agents
4
+ * Includes memory flush trigger before session compaction with LLM extraction support
5
+ * Supports indexing OpenCode session transcripts for searchable conversation history
4
6
  */
5
7
  import { tool } from "@opencode-ai/plugin/tool";
6
8
  import { homedir } from "node:os";
7
9
  import { join } from "node:path";
8
10
  import { MemoryManager } from "../memory-manager.js";
11
+ import { DEFAULT_MEMORY_FLUSH_PROMPT, DEFAULT_MEMORY_FLUSH_SYSTEM_PROMPT, } from "../flush/index.js";
9
12
  let manager = null;
10
13
  /**
11
- * Get the XDG data directory for opencode
14
+ * Get the XDG data directory for memory storage
12
15
  * Follows XDG Base Directory Specification
13
16
  */
14
17
  function getDataDir() {
15
18
  const xdgDataHome = process.env.XDG_DATA_HOME || join(homedir(), ".local", "share");
16
19
  return join(xdgDataHome, "memory");
17
20
  }
21
+ /**
22
+ * Get the OpenCode sessions directory
23
+ */
24
+ function getSessionsDir() {
25
+ const xdgDataHome = process.env.XDG_DATA_HOME || join(homedir(), ".local", "share");
26
+ return join(xdgDataHome, "opencode", "storage", "message");
27
+ }
28
+ /**
29
+ * Generate a default filename based on current date
30
+ */
31
+ function generateDefaultFilename() {
32
+ const now = new Date();
33
+ const yyyy = now.getFullYear();
34
+ const mm = String(now.getMonth() + 1).padStart(2, "0");
35
+ const dd = String(now.getDate()).padStart(2, "0");
36
+ return `${yyyy}-${mm}-${dd}.md`;
37
+ }
18
38
  async function getManager() {
19
39
  if (!manager) {
20
40
  const memoryDir = getDataDir();
41
+ const sessionsDir = getSessionsDir();
21
42
  // Ensure memory directories exist (base + subfolder for markdown files)
22
43
  const { mkdir } = await import("node:fs/promises");
23
44
  await mkdir(join(memoryDir, "memory"), { recursive: true });
24
- manager = await MemoryManager.create({
45
+ const config = {
25
46
  agentId: "opencode-agent",
26
- workspaceDir: memoryDir, // Index markdown files from memory directory
47
+ workspaceDir: memoryDir,
27
48
  provider: "auto",
28
49
  remote: {
29
50
  apiKey: process.env.OPENROUTER_API_KEY || process.env.OPENAI_API_KEY,
@@ -33,19 +54,53 @@ async function getManager() {
33
54
  },
34
55
  sync: {
35
56
  enabled: true,
36
- onSearch: true, // Re-sync before search if files changed
57
+ onSearch: true,
58
+ syncSessions: true,
59
+ sessions: {
60
+ deltaBytes: 4096,
61
+ deltaMessages: 5,
62
+ },
37
63
  },
38
- });
64
+ sessionsDir,
65
+ };
66
+ // Add sessionFormat for OpenCode
67
+ config.sessionFormat = "opencode";
68
+ manager = await MemoryManager.create(config);
39
69
  }
40
70
  return manager;
41
71
  }
72
+ /**
73
+ * Memory flush prompt - injected before session compaction
74
+ * Enhanced with specific guidance for memory extraction
75
+ */
76
+ const MEMORY_FLUSH_CONTEXT = `
77
+ MEMORY FLUSH: The session is about to be compacted.
78
+
79
+ Before compaction, analyze the conversation and save important information to durable memory using the memory_write tool:
80
+
81
+ 1. **User Preferences** - Settings, coding style, preferred tools
82
+ 2. **Key Decisions** - Technical choices made, rationale discussed
83
+ 3. **Important Facts** - Project details, codebase knowledge, domain info
84
+ 4. **TODOs & Action Items** - Pending tasks, follow-ups needed
85
+ 5. **Context** - Information useful for future sessions
86
+
87
+ Format as markdown with clear headings. Each memory should be self-contained.
88
+
89
+ If nothing important needs to be saved, you may skip this step.
90
+ `.trim();
91
+ /**
92
+ * Extended memory flush context for LLM extraction
93
+ */
94
+ const MEMORY_FLUSH_SYSTEM = DEFAULT_MEMORY_FLUSH_SYSTEM_PROMPT;
95
+ const MEMORY_FLUSH_USER = DEFAULT_MEMORY_FLUSH_PROMPT;
42
96
  export const MemoryPlugin = async (_input) => {
43
97
  const memoryDir = getDataDir();
44
98
  return {
45
99
  tool: {
46
100
  memory_search: tool({
47
- description: "Search semantic memory for relevant information from indexed markdown files. " +
48
- "Use this to find past context, preferences, notes, or any stored knowledge.",
101
+ description: "Search semantic memory for relevant information from indexed markdown files and session history. " +
102
+ "Use this to find past context, preferences, notes, decisions, or any stored knowledge. " +
103
+ "Also searches indexed conversation history from previous sessions.",
49
104
  args: {
50
105
  query: tool.schema.string().describe("Natural language search query"),
51
106
  maxResults: tool.schema
@@ -62,7 +117,7 @@ export const MemoryPlugin = async (_input) => {
62
117
  if (results.length === 0) {
63
118
  return JSON.stringify({
64
119
  status: "no_results",
65
- message: "No matching content found in memory.",
120
+ message: "No matching content found in memory or session history.",
66
121
  query: args.query,
67
122
  });
68
123
  }
@@ -70,6 +125,7 @@ export const MemoryPlugin = async (_input) => {
70
125
  status: "success",
71
126
  results: results.map((r) => ({
72
127
  path: r.path,
128
+ source: r.source,
73
129
  lines: `${r.startLine}-${r.endLine}`,
74
130
  score: r.score.toFixed(3),
75
131
  snippet: r.snippet,
@@ -127,6 +183,185 @@ export const MemoryPlugin = async (_input) => {
127
183
  }
128
184
  },
129
185
  }),
186
+ memory_write: tool({
187
+ description: "Write content to a memory file for durable storage. " +
188
+ "Use this to save important information like user preferences, decisions, facts, or TODOs. " +
189
+ "Content is stored as markdown and will be searchable via memory_search.",
190
+ args: {
191
+ content: tool.schema
192
+ .string()
193
+ .describe("The content to write (markdown format recommended)"),
194
+ filename: tool.schema
195
+ .string()
196
+ .optional()
197
+ .describe("Filename to write to (default: YYYY-MM-DD.md based on current date). Use memory/ prefix for subdirectory."),
198
+ append: tool.schema
199
+ .boolean()
200
+ .optional()
201
+ .describe("If true, append to existing file instead of overwriting (default: true)"),
202
+ },
203
+ async execute(args) {
204
+ try {
205
+ const mgr = await getManager();
206
+ // Determine filename
207
+ let filename = args.filename?.trim();
208
+ if (!filename) {
209
+ filename = `memory/${generateDefaultFilename()}`;
210
+ }
211
+ // Ensure it's in memory subdirectory if no path specified
212
+ if (!filename.includes("/")) {
213
+ filename = `memory/${filename}`;
214
+ }
215
+ const result = await mgr.writeMemory(args.content, {
216
+ filename,
217
+ append: args.append,
218
+ });
219
+ if (result.success) {
220
+ return JSON.stringify({
221
+ status: "success",
222
+ path: result.path,
223
+ message: args.append !== false
224
+ ? "Content appended to memory file"
225
+ : "Content written to memory file",
226
+ bytesWritten: result.bytesWritten,
227
+ }, null, 2);
228
+ }
229
+ else {
230
+ return JSON.stringify({
231
+ status: "error",
232
+ error: result.error,
233
+ });
234
+ }
235
+ }
236
+ catch (error) {
237
+ return JSON.stringify({
238
+ status: "error",
239
+ error: error instanceof Error ? error.message : String(error),
240
+ });
241
+ }
242
+ },
243
+ }),
244
+ memory_flush: tool({
245
+ description: "Manually trigger memory extraction from the current session. " +
246
+ "Analyzes conversation history and saves important information to durable memory. " +
247
+ "Use this when you want to persist important context before it's lost.",
248
+ args: {
249
+ sessionId: tool.schema
250
+ .string()
251
+ .optional()
252
+ .describe("Session ID to extract memories from (optional, uses current session if not specified)"),
253
+ },
254
+ async execute(args) {
255
+ try {
256
+ const mgr = await getManager();
257
+ const result = await mgr.flushMemories({
258
+ sessionId: args.sessionId,
259
+ onProgress: (_status) => {
260
+ // Progress is logged internally
261
+ },
262
+ });
263
+ if (result.success) {
264
+ if (result.noReply) {
265
+ return JSON.stringify({
266
+ status: "success",
267
+ message: "No important memories to save at this time.",
268
+ memoriesWritten: 0,
269
+ });
270
+ }
271
+ return JSON.stringify({
272
+ status: "success",
273
+ message: `Successfully extracted and saved ${result.memoriesWritten} memory entries.`,
274
+ memoriesWritten: result.memoriesWritten,
275
+ bytesWritten: result.bytesWritten,
276
+ }, null, 2);
277
+ }
278
+ else {
279
+ return JSON.stringify({
280
+ status: "error",
281
+ error: result.error || "Failed to flush memories",
282
+ });
283
+ }
284
+ }
285
+ catch (error) {
286
+ return JSON.stringify({
287
+ status: "error",
288
+ error: error instanceof Error ? error.message : String(error),
289
+ });
290
+ }
291
+ },
292
+ }),
293
+ memory_status: tool({
294
+ description: "Get the status of the memory system including indexed files, sessions, and search capabilities.",
295
+ args: {},
296
+ async execute() {
297
+ try {
298
+ const mgr = await getManager();
299
+ const status = mgr.getStatus();
300
+ return JSON.stringify({
301
+ status: "success",
302
+ memory: {
303
+ files: status.sources.memory.files,
304
+ chunks: status.sources.memory.chunks,
305
+ },
306
+ sessions: {
307
+ files: status.sources.sessions.files,
308
+ chunks: status.sources.sessions.chunks,
309
+ },
310
+ provider: {
311
+ id: status.provider.id,
312
+ model: status.provider.model,
313
+ fallbackActive: status.provider.fallbackActivated,
314
+ },
315
+ search: {
316
+ vectorSearch: status.vector.sqliteVecAvailable ? "sqlite-vec" : "js-fallback",
317
+ ftsSearch: status.fts.available,
318
+ },
319
+ sync: {
320
+ watching: status.sync.watching,
321
+ lastSync: status.sync.lastSyncAt
322
+ ? new Date(status.sync.lastSyncAt).toISOString()
323
+ : null,
324
+ },
325
+ }, null, 2);
326
+ }
327
+ catch (error) {
328
+ return JSON.stringify({
329
+ status: "error",
330
+ error: error instanceof Error ? error.message : String(error),
331
+ });
332
+ }
333
+ },
334
+ }),
335
+ },
336
+ // Memory flush hook - triggered before session compaction
337
+ "experimental.session.compacting": async (_input, output) => {
338
+ // The compaction hook is triggered when session is about to be compacted
339
+ // We inject context to prompt the agent to save important memories
340
+ // Try to get manager for potential LLM-based extraction
341
+ try {
342
+ const mgr = await getManager();
343
+ const flushConfig = mgr.getFlushConfig();
344
+ if (flushConfig?.enabled) {
345
+ // Add enhanced context for memory flush
346
+ output.context.push(MEMORY_FLUSH_CONTEXT);
347
+ // Also add the system-level guidance
348
+ output.context.push(`
349
+ System guidance for memory extraction:
350
+ ${MEMORY_FLUSH_SYSTEM}
351
+
352
+ User instruction:
353
+ ${MEMORY_FLUSH_USER}
354
+ `.trim());
355
+ }
356
+ else {
357
+ // Basic reminder if flush is disabled
358
+ output.context.push(MEMORY_FLUSH_CONTEXT);
359
+ }
360
+ }
361
+ catch {
362
+ // Fallback to basic context injection
363
+ output.context.push(MEMORY_FLUSH_CONTEXT);
364
+ }
130
365
  },
131
366
  };
132
367
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,5 @@ export { FileWatcher, type FileWatcherOptions } from "./watcher.js";
2
2
  export { SessionMonitor, type SessionMonitorOptions } from "./session-monitor.js";
3
3
  export { minimatch } from "./minimatch.js";
4
4
  export { onSessionTranscriptUpdate, emitSessionTranscriptUpdate, getSessionListenerCount, type SessionTranscriptUpdate, type SessionTranscriptListener, } from "./session-events.js";
5
+ export { scanOpenCodeSessions, buildOpenCodeSessionEntry, extractOpenCodeText, getOpenCodeSessionHistory, watchOpenCodeSessions, } from "./opencode-session.js";
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,GAC/B,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,GAC/B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC"}
@@ -2,4 +2,5 @@ export { FileWatcher } from "./watcher.js";
2
2
  export { SessionMonitor } from "./session-monitor.js";
3
3
  export { minimatch } from "./minimatch.js";
4
4
  export { onSessionTranscriptUpdate, emitSessionTranscriptUpdate, getSessionListenerCount, } from "./session-events.js";
5
+ export { scanOpenCodeSessions, buildOpenCodeSessionEntry, extractOpenCodeText, getOpenCodeSessionHistory, watchOpenCodeSessions, } from "./opencode-session.js";
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA2B,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,cAAc,EAA8B,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,GAGxB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA2B,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,cAAc,EAA8B,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,GAGxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * OpenCode session format parser
3
+ * Handles JSON-per-message format from ~/.local/share/opencode/storage/message/
4
+ */
5
+ import type { OpenCodeMessage, OpenCodeSessionEntry } from "../types.js";
6
+ /**
7
+ * Scan OpenCode session directories and return session entries
8
+ */
9
+ export declare function scanOpenCodeSessions(basePath: string): Promise<OpenCodeSessionEntry[]>;
10
+ /**
11
+ * Build a session entry from an OpenCode session directory
12
+ */
13
+ export declare function buildOpenCodeSessionEntry(sessionDir: string): Promise<OpenCodeSessionEntry | null>;
14
+ /**
15
+ * Extract text content from an OpenCode message
16
+ */
17
+ export declare function extractOpenCodeText(msg: OpenCodeMessage): string | null;
18
+ /**
19
+ * Get session history as formatted text (for LLM context)
20
+ */
21
+ export declare function getOpenCodeSessionHistory(sessionDir: string, options?: {
22
+ maxMessages?: number;
23
+ includeToolResults?: boolean;
24
+ }): Promise<string>;
25
+ /**
26
+ * Watch for changes in OpenCode session directory
27
+ * Returns a cleanup function
28
+ */
29
+ export declare function watchOpenCodeSessions(basePath: string, onSessionUpdate: (sessionId: string, sessionDir: string) => void, options?: {
30
+ debounceMs?: number;
31
+ }): () => void;
32
+ //# sourceMappingURL=opencode-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-session.d.ts","sourceRoot":"","sources":["../../src/sync/opencode-session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EACV,eAAe,EAEf,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA0BjC;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAmEtC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAuBvE;AAsCD;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,GACA,OAAO,CAAC,MAAM,CAAC,CAoCjB;AAgCD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,EAChE,OAAO,CAAC,EAAE;IACR,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,MAAM,IAAI,CA6EZ"}