@sharkdyt/omni-memory-mcp 1.0.3 → 1.0.5

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 CHANGED
@@ -7,7 +7,7 @@ Universal memory MCP server for multi-agent workflows.
7
7
 
8
8
  - Package: `@sharkdyt/omni-memory-mcp`
9
9
  - npm: `https://www.npmjs.com/package/@sharkdyt/omni-memory-mcp`
10
- - Current `latest`: `1.0.3`
10
+ - Current `latest`: `1.0.5`
11
11
 
12
12
  ## Project Memory
13
13
 
@@ -25,7 +25,11 @@ Operational context is stored through Omni Memory itself.
25
25
  - Local-first storage (SQLite)
26
26
  - Full-text search with FTS5
27
27
  - MCP-native tools
28
+ - **Progressive Disclosure:** Searches return metadata and summaries instead of full text to prevent LLM context overflow.
29
+ - **Active Forgetting Tracking:** Read actions (`memory_get`) increment `access_count` and update `accessed_at`.
28
30
  - CRUD operations (`memory_add`, `memory_get`, `memory_update`, `memory_delete`, `memory_list`, `memory_search`)
31
+ - Context optimization tools (`memory_prune`)
32
+ - Diagnostic tools (`memory_stats`)
29
33
  - Organization by `area`, `project`, and `tags`
30
34
  - Shared long-term memory across multiple projects and multiple coding agents/clients
31
35
  - Canonical MCP config + client adapters (OpenCode, Codex, Cursor)
@@ -186,15 +190,21 @@ Then copy the generated file for your client/platform from `config/mcp/generated
186
190
 
187
191
  ```json
188
192
  {
193
+ "name": "User typescript preferences",
189
194
  "content": "User prefers TypeScript with strict mode",
190
195
  "area": "preferences",
191
196
  "project": "my-project",
192
- "tags": ["typescript", "coding-style"]
197
+ "tags": ["typescript", "coding-style"],
198
+ "metadata": {
199
+ "source": "conversation setup"
200
+ }
193
201
  }
194
202
  ```
195
203
 
196
204
  ### `memory_get`
197
205
 
206
+ *Note: Fetching a memory via `memory_get` registers an access (increments `access_count` and updates `accessed_at`), indicating the memory is actively used.*
207
+
198
208
  ```json
199
209
  {
200
210
  "id": "abc123"
@@ -206,6 +216,7 @@ Then copy the generated file for your client/platform from `config/mcp/generated
206
216
  ```json
207
217
  {
208
218
  "id": "abc123",
219
+ "name": "Updated typescript preferences",
209
220
  "content": "Updated content",
210
221
  "tags": ["new-tag"]
211
222
  }
@@ -221,6 +232,8 @@ Then copy the generated file for your client/platform from `config/mcp/generated
221
232
 
222
233
  ### `memory_list`
223
234
 
235
+ *Note: Enforces Progressive Disclosure. It returns only IDs, Names, and metadata. You must call `memory_get` with the specific ID to read the full content.*
236
+
224
237
  ```json
225
238
  {
226
239
  "area": "snippets",
@@ -232,13 +245,37 @@ Then copy the generated file for your client/platform from `config/mcp/generated
232
245
 
233
246
  ### `memory_search`
234
247
 
248
+ *Note: Enforces Progressive Disclosure. It returns only IDs, Names, and metadata. You must call `memory_get` with the specific ID to read the full content.*
249
+
235
250
  ```json
236
251
  {
237
252
  "query": "typescript configuration",
238
253
  "project": "my-project",
239
- "limit": 10
254
+ "limit": 10,
255
+ "enableAdvancedSyntax": false
256
+ }
257
+ ```
258
+
259
+ *Note: `enableAdvancedSyntax` allows FTS5 boolean logic (e.g. `"typescript" AND "react" NOT "vue"`) but requires a strictly valid FTS5 query or it will throw an error.*
260
+
261
+ ### `memory_stats`
262
+
263
+ ```json
264
+ {}
265
+ ```
266
+ *Returns total memories, size on disk, and breakdown by project and area.*
267
+
268
+ ### `memory_prune`
269
+
270
+ *Note: Cleans up memories that have decayed below a specific score dynamically calculated based on `created_at`, `accessed_at`, and `access_count`.*
271
+
272
+ ```json
273
+ {
274
+ "threshold_score": 0,
275
+ "dry_run": true
240
276
  }
241
277
  ```
278
+ *Always use `dry_run: true` first to see how many and which memories would be pruned before running the destructible cleanup.*
242
279
 
243
280
  ## Memory Areas
244
281
 
@@ -2,12 +2,13 @@
2
2
  * Omni Memory MCP - Database Module
3
3
  * SQLite + FTS5 for local memory storage and full-text search
4
4
  */
5
- import type { Memory, AddMemoryArgs, UpdateMemoryArgs, ListMemoryArgs, SearchMemoryArgs, SearchResult } from "./types.js";
5
+ import type { Memory, AddMemoryArgs, UpdateMemoryArgs, ListMemoryArgs, SearchMemoryArgs, SearchResult, MemoryStats, PruneMemoryArgs, PruneMemoryResult } from "./types.js";
6
6
  declare function normalizeUserPath(inputPath: string): string;
7
7
  declare function resolveStoragePaths(): {
8
8
  dataDir: string;
9
9
  dbPath: string;
10
10
  };
11
+ export declare function calculateDecayScore(createdAt: string, accessedAt: string | null, accessCount: number, baseScore?: number): number;
11
12
  export declare function addMemory(args: AddMemoryArgs): {
12
13
  id: string;
13
14
  };
@@ -19,7 +20,10 @@ export declare function deleteMemory(id: string): {
19
20
  changes: number;
20
21
  };
21
22
  export declare function listMemories(args: ListMemoryArgs): Memory[];
23
+ export declare function getStats(): MemoryStats;
22
24
  export declare function searchMemories(args: SearchMemoryArgs): SearchResult[];
25
+ export declare function fallbackSearch(args: SearchMemoryArgs): SearchResult[];
26
+ export declare function pruneMemories(args: PruneMemoryArgs): PruneMemoryResult;
23
27
  export declare function closeDatabase(): void;
24
28
  export { resolveStoragePaths, normalizeUserPath };
25
29
  export declare function resetDatabase(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EACV,MAAM,EAEN,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,YAAY,EACb,MAAM,YAAY,CAAC;AAcpB,iBAAS,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CASpD;AAED,iBAAS,mBAAmB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAQlE;AAuFD,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAe7D;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMnD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAwBxE;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAM5D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,EAAE,CA6B3D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,YAAY,EAAE,CA8CrE;AA+BD,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;AAGlD,wBAAgB,aAAa,IAAI,IAAI,CASpC"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EACV,MAAM,EAEN,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAcpB,iBAAS,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CASpD;AAED,iBAAS,mBAAmB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAQlE;AAuGD,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,MAAU,GACpB,MAAM,CAUR;AAuBD,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAiB7D;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWnD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CA0BxE;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAM5D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,EAAE,CA6B3D;AAED,wBAAgB,QAAQ,IAAI,WAAW,CAiCtC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,YAAY,EAAE,CAuErE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,YAAY,EAAE,CAuDrE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,iBAAiB,CAgCtE;AAED,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;AAGlD,wBAAgB,aAAa,IAAI,IAAI,CASpC"}
package/dist/database.js CHANGED
@@ -28,7 +28,7 @@ function resolveStoragePaths() {
28
28
  const defaultDir = join(homedir(), ".omni-memory");
29
29
  const dataDir = normalizeUserPath(process.env.OMNI_MEMORY_DIR || defaultDir);
30
30
  const dbPath = process.env.OMNI_MEMORY_DB
31
- ? normalizeUserPath(process.env.OMNI_MEMORY_DB)
31
+ ? (process.env.OMNI_MEMORY_DB === ":memory:" ? ":memory:" : normalizeUserPath(process.env.OMNI_MEMORY_DB))
32
32
  : join(dataDir, "omni-memory.db");
33
33
  return { dataDir, dbPath };
34
34
  }
@@ -41,9 +41,11 @@ function getDatabase() {
41
41
  if (!existsSync(DATA_DIR)) {
42
42
  mkdirSync(DATA_DIR, { recursive: true });
43
43
  }
44
- const dbDirectory = dirname(DB_PATH);
45
- if (!existsSync(dbDirectory)) {
46
- mkdirSync(dbDirectory, { recursive: true });
44
+ if (DB_PATH !== ":memory:") {
45
+ const dbDirectory = dirname(DB_PATH);
46
+ if (!existsSync(dbDirectory)) {
47
+ mkdirSync(dbDirectory, { recursive: true });
48
+ }
47
49
  }
48
50
  db = new Database(DB_PATH);
49
51
  db.pragma("journal_mode = WAL");
@@ -63,9 +65,24 @@ function initializeSchema(database) {
63
65
  updated_at TEXT DEFAULT (datetime('now'))
64
66
  )
65
67
  `);
68
+ // Migrate existing schema
69
+ const columns = database.pragma("table_info(memories)");
70
+ const hasName = columns.some((c) => c.name === "name");
71
+ if (!hasName) {
72
+ database.exec("ALTER TABLE memories ADD COLUMN name TEXT");
73
+ database.exec("ALTER TABLE memories ADD COLUMN metadata TEXT");
74
+ database.exec("ALTER TABLE memories ADD COLUMN accessed_at TEXT");
75
+ database.exec("ALTER TABLE memories ADD COLUMN access_count INTEGER DEFAULT 0");
76
+ // Recreate FTS
77
+ database.exec("DROP TABLE IF EXISTS memories_fts");
78
+ database.exec("DROP TRIGGER IF EXISTS memories_ai");
79
+ database.exec("DROP TRIGGER IF EXISTS memories_ad");
80
+ database.exec("DROP TRIGGER IF EXISTS memories_au");
81
+ }
66
82
  // Create FTS5 virtual table
67
83
  database.exec(`
68
84
  CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts USING fts5(
85
+ name,
69
86
  content,
70
87
  project,
71
88
  tags,
@@ -76,34 +93,58 @@ function initializeSchema(database) {
76
93
  // Create triggers for FTS sync
77
94
  database.exec(`
78
95
  CREATE TRIGGER IF NOT EXISTS memories_ai AFTER INSERT ON memories BEGIN
79
- INSERT INTO memories_fts(rowid, content, project, tags)
80
- VALUES (new.rowid, new.content, COALESCE(new.project, ''), new.tags);
96
+ INSERT INTO memories_fts(rowid, name, content, project, tags)
97
+ VALUES (new.rowid, COALESCE(new.name, ''), new.content, COALESCE(new.project, ''), new.tags);
81
98
  END
82
99
  `);
83
100
  database.exec(`
84
101
  CREATE TRIGGER IF NOT EXISTS memories_ad AFTER DELETE ON memories BEGIN
85
- INSERT INTO memories_fts(memories_fts, rowid, content, project, tags)
86
- VALUES('delete', old.rowid, old.content, COALESCE(old.project, ''), old.tags);
102
+ INSERT INTO memories_fts(memories_fts, rowid, name, content, project, tags)
103
+ VALUES('delete', old.rowid, COALESCE(old.name, ''), old.content, COALESCE(old.project, ''), old.tags);
87
104
  END
88
105
  `);
89
106
  database.exec(`
90
107
  CREATE TRIGGER IF NOT EXISTS memories_au AFTER UPDATE ON memories BEGIN
91
- INSERT INTO memories_fts(memories_fts, rowid, content, project, tags)
92
- VALUES('delete', old.rowid, old.content, COALESCE(old.project, ''), old.tags);
93
- INSERT INTO memories_fts(rowid, content, project, tags)
94
- VALUES (new.rowid, new.content, COALESCE(new.project, ''), new.tags);
108
+ INSERT INTO memories_fts(memories_fts, rowid, name, content, project, tags)
109
+ VALUES('delete', old.rowid, COALESCE(old.name, ''), old.content, COALESCE(old.project, ''), old.tags);
110
+ INSERT INTO memories_fts(rowid, name, content, project, tags)
111
+ VALUES (new.rowid, COALESCE(new.name, ''), new.content, COALESCE(new.project, ''), new.tags);
95
112
  END
96
113
  `);
114
+ if (!hasName) {
115
+ // Rebuild the FTS data
116
+ database.exec(`
117
+ INSERT INTO memories_fts(rowid, name, content, project, tags)
118
+ SELECT rowid, COALESCE(name, ''), content, COALESCE(project, ''), tags FROM memories;
119
+ `);
120
+ }
121
+ }
122
+ export function calculateDecayScore(createdAt, accessedAt, accessCount, baseScore = 0) {
123
+ const lastAccess = accessedAt ? new Date(accessedAt) : new Date(createdAt);
124
+ const now = new Date();
125
+ const diffDays = Math.max(0, (now.getTime() - lastAccess.getTime()) / (1000 * 60 * 60 * 24));
126
+ let score = baseScore;
127
+ score += Math.min(1.0, accessCount * 0.05); // Bonus max +1.0
128
+ score -= Math.min(5.0, diffDays * 0.1); // Penalty max -5.0
129
+ return Number(score.toFixed(3));
97
130
  }
98
131
  function rowToMemory(row) {
132
+ const accessedAt = row.accessed_at;
133
+ const accessCount = row.access_count || 0;
134
+ const createdAt = row.created_at;
99
135
  return {
100
136
  id: row.id,
137
+ name: row.name,
101
138
  content: row.content,
102
139
  area: row.area || "general",
103
140
  project: row.project,
104
141
  tags: JSON.parse(row.tags || "[]"),
105
- created_at: row.created_at,
142
+ metadata: row.metadata ? JSON.parse(row.metadata) : null,
143
+ accessed_at: accessedAt,
144
+ access_count: accessCount,
145
+ created_at: createdAt,
106
146
  updated_at: row.updated_at,
147
+ decay_score: calculateDecayScore(createdAt, accessedAt, accessCount, 0),
107
148
  };
108
149
  }
109
150
  export function addMemory(args) {
@@ -112,15 +153,20 @@ export function addMemory(args) {
112
153
  const area = args.area || "general";
113
154
  const project = args.project || null;
114
155
  const tags = JSON.stringify(args.tags || []);
156
+ const name = args.name || null;
157
+ const metadata = args.metadata ? JSON.stringify(args.metadata) : null;
115
158
  const stmt = database.prepare(`
116
- INSERT INTO memories (id, content, area, project, tags)
117
- VALUES (?, ?, ?, ?, ?)
159
+ INSERT INTO memories (id, name, content, area, project, tags, metadata)
160
+ VALUES (?, ?, ?, ?, ?, ?, ?)
118
161
  `);
119
- stmt.run(id, args.content, area, project, tags);
162
+ stmt.run(id, name, args.content, area, project, tags, metadata);
120
163
  return { id };
121
164
  }
122
165
  export function getMemory(id) {
123
166
  const database = getDatabase();
167
+ // Track Active Forgetting / Progressive Disclosure metrics
168
+ const updateStmt = database.prepare("UPDATE memories SET accessed_at = datetime('now'), access_count = access_count + 1 WHERE id = ?");
169
+ updateStmt.run(id);
124
170
  const stmt = database.prepare("SELECT * FROM memories WHERE id = ?");
125
171
  const row = stmt.get(id);
126
172
  return row ? rowToMemory(row) : null;
@@ -133,16 +179,18 @@ export function updateMemory(args) {
133
179
  return { changes: 0 };
134
180
  }
135
181
  // Merge updates
182
+ const name = args.name !== undefined ? args.name : existing.name;
136
183
  const content = args.content ?? existing.content;
137
184
  const area = args.area ?? existing.area;
138
185
  const project = args.project !== undefined ? args.project : existing.project;
139
186
  const tags = args.tags !== undefined ? JSON.stringify(args.tags) : JSON.stringify(existing.tags);
187
+ const metadata = args.metadata !== undefined ? JSON.stringify(args.metadata) : JSON.stringify(existing.metadata);
140
188
  const stmt = database.prepare(`
141
189
  UPDATE memories
142
- SET content = ?, area = ?, project = ?, tags = ?, updated_at = datetime('now')
190
+ SET name = ?, content = ?, area = ?, project = ?, tags = ?, metadata = ?, updated_at = datetime('now')
143
191
  WHERE id = ?
144
192
  `);
145
- const result = stmt.run(content, area, project, tags, args.id);
193
+ const result = stmt.run(name, content, area, project, tags, metadata, args.id);
146
194
  return { changes: result.changes };
147
195
  }
148
196
  export function deleteMemory(id) {
@@ -174,11 +222,49 @@ export function listMemories(args) {
174
222
  const rows = stmt.all(...params);
175
223
  return rows.map(rowToMemory);
176
224
  }
225
+ export function getStats() {
226
+ const database = getDatabase();
227
+ const total = database.prepare("SELECT count(*) as c FROM memories").get()?.c || 0;
228
+ const byAreaRows = database.prepare("SELECT area, count(*) as c FROM memories GROUP BY area").all();
229
+ const by_area = byAreaRows.reduce((acc, row) => {
230
+ acc[row.area || "general"] = row.c;
231
+ return acc;
232
+ }, {});
233
+ const byProjectRows = database.prepare("SELECT project, count(*) as c FROM memories GROUP BY project").all();
234
+ const by_project = byProjectRows.reduce((acc, row) => {
235
+ acc[row.project || "unassigned"] = row.c;
236
+ return acc;
237
+ }, {});
238
+ let total_size_bytes = 0;
239
+ if (DB_PATH !== ":memory:" && existsSync(DB_PATH)) {
240
+ try {
241
+ const stats = require("fs").statSync(DB_PATH);
242
+ total_size_bytes = stats.size;
243
+ }
244
+ catch {
245
+ // Ignore if stat fails
246
+ }
247
+ }
248
+ return {
249
+ total_memories: total,
250
+ by_area,
251
+ by_project,
252
+ total_size_bytes,
253
+ };
254
+ }
177
255
  export function searchMemories(args) {
178
256
  const database = getDatabase();
179
257
  const limit = Math.min(args.limit || 10, 50);
258
+ // Helper to sanitize FTS5 query to prevent syntax errors on special chars
259
+ // Removes unmatched quotes and escapes FTS keywords if present
260
+ const sanitizeFtsQuery = (rawQuery) => {
261
+ let clean = rawQuery.replace(/[\^+\-*'"~]/g, " "); // Replace FTS5 syntax chars with spaces
262
+ // Alternatively, you could wrap the whole thing in double quotes,
263
+ // but simply stripping operators guarantees no parse error for plain text queries
264
+ return clean.trim() ? `"${clean.replace(/"/g, '""').trim()}"` : rawQuery;
265
+ };
180
266
  // Build FTS5 query with filters
181
- let ftsQuery = args.query;
267
+ let ftsQuery = args.enableAdvancedSyntax ? args.query : sanitizeFtsQuery(args.query);
182
268
  // Add area filter to query
183
269
  if (args.area) {
184
270
  // We'll filter results after search
@@ -204,21 +290,51 @@ export function searchMemories(args) {
204
290
  try {
205
291
  const stmt = database.prepare(sql);
206
292
  const rows = stmt.all(...params);
207
- return rows.map((row) => ({
208
- ...rowToMemory(row),
209
- score: Math.abs(row.score) || 0,
210
- }));
293
+ return rows.map((row) => {
294
+ const memory = rowToMemory(row);
295
+ return {
296
+ id: memory.id,
297
+ name: memory.name,
298
+ area: memory.area,
299
+ project: memory.project,
300
+ tags: memory.tags,
301
+ metadata: memory.metadata,
302
+ accessed_at: memory.accessed_at,
303
+ access_count: memory.access_count,
304
+ created_at: memory.created_at,
305
+ updated_at: memory.updated_at,
306
+ score: Math.abs(row.score) || 0,
307
+ decay_score: calculateDecayScore(memory.created_at, memory.accessed_at ?? null, memory.access_count || 0, Math.abs(row.score) || 0),
308
+ };
309
+ });
211
310
  }
212
311
  catch (error) {
312
+ if (args.enableAdvancedSyntax) {
313
+ throw new Error(`Invalid FTS5 advanced syntax: ${error instanceof Error ? error.message : String(error)}`);
314
+ }
213
315
  // FTS5 might fail on special characters, fallback to LIKE search
214
316
  return fallbackSearch(args);
215
317
  }
216
318
  }
217
- function fallbackSearch(args) {
319
+ export function fallbackSearch(args) {
218
320
  const database = getDatabase();
219
321
  const limit = Math.min(args.limit || 10, 50);
220
- let sql = "SELECT * FROM memories WHERE content LIKE ?";
221
- const params = [`%${args.query}%`];
322
+ // Split query into individual words, ignore empty spaces
323
+ const words = args.query.trim().split(/\s+/).filter(Boolean);
324
+ let sql = "SELECT * FROM memories WHERE 1=1";
325
+ const params = [];
326
+ // If there are words, add a LIKE condition for each word
327
+ if (words.length > 0) {
328
+ for (const word of words) {
329
+ sql += " AND content LIKE ?";
330
+ params.push(`%${word}%`);
331
+ }
332
+ }
333
+ else {
334
+ // Fallback if empty query
335
+ sql += " AND content LIKE ?";
336
+ params.push(`%${args.query}%`);
337
+ }
222
338
  if (args.area) {
223
339
  sql += " AND area = ?";
224
340
  params.push(args.area);
@@ -231,10 +347,51 @@ function fallbackSearch(args) {
231
347
  params.push(limit);
232
348
  const stmt = database.prepare(sql);
233
349
  const rows = stmt.all(...params);
234
- return rows.map((row) => ({
235
- ...rowToMemory(row),
236
- score: 0.5, // Default score for fallback search
237
- }));
350
+ return rows.map((row) => {
351
+ const memory = rowToMemory(row);
352
+ return {
353
+ id: memory.id,
354
+ name: memory.name,
355
+ area: memory.area,
356
+ project: memory.project,
357
+ tags: memory.tags,
358
+ metadata: memory.metadata,
359
+ accessed_at: memory.accessed_at,
360
+ access_count: memory.access_count,
361
+ created_at: memory.created_at,
362
+ updated_at: memory.updated_at,
363
+ score: 0.5, // Default score for fallback search
364
+ decay_score: calculateDecayScore(memory.created_at, memory.accessed_at ?? null, memory.access_count || 0, 0.5),
365
+ };
366
+ });
367
+ }
368
+ export function pruneMemories(args) {
369
+ const database = getDatabase();
370
+ const threshold = args.threshold_score ?? 0;
371
+ // We need to fetch all memories to calculate their dynamic decay score
372
+ const stmt = database.prepare("SELECT * FROM memories");
373
+ const rows = stmt.all();
374
+ const toPrune = [];
375
+ for (const row of rows) {
376
+ const memory = rowToMemory(row);
377
+ if ((memory.decay_score ?? 0) < threshold) {
378
+ toPrune.push({ id: memory.id, name: memory.name || null });
379
+ }
380
+ }
381
+ if (!args.dry_run && toPrune.length > 0) {
382
+ const deleteStmt = database.prepare("DELETE FROM memories WHERE id = ?");
383
+ const deleteMany = database.transaction((ids) => {
384
+ for (const id of ids) {
385
+ deleteStmt.run(id);
386
+ }
387
+ });
388
+ deleteMany(toPrune.map(p => p.id));
389
+ }
390
+ return {
391
+ success: true,
392
+ pruned_count: toPrune.length,
393
+ details: toPrune
394
+ };
238
395
  }
239
396
  export function closeDatabase() {
240
397
  if (db) {
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAc7B,SAAS,cAAc,CAAC,SAAiB;IACvC,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;QACtB,OAAO,OAAO,EAAE,CAAC;IACnB,CAAC;IAED,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9D,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAEjD,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,UAAU,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc;QACvC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC1G,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAEpC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,mBAAmB,EAAE,CAAC;AAErE,IAAI,EAAE,GAA6B,IAAI,CAAC;AAExC,SAAS,WAAW;IAClB,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAElB,mCAAmC;IACnC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,EAAE,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3B,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACrB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,gBAAgB,CAAC,QAA2B;IACnD,wBAAwB;IACxB,QAAQ,CAAC,IAAI,CAAC;;;;;;;;;;GAUb,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,sBAAsB,CAAU,CAAC;IACjE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAEvD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC3D,QAAQ,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC/D,QAAQ,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAClE,QAAQ,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;QAEhF,eAAe;QACf,QAAQ,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACnD,QAAQ,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACtD,CAAC;IAED,4BAA4B;IAC5B,QAAQ,CAAC,IAAI,CAAC;;;;;;;;;GASb,CAAC,CAAC;IAEH,+BAA+B;IAC/B,QAAQ,CAAC,IAAI,CAAC;;;;;GAKb,CAAC,CAAC;IAEH,QAAQ,CAAC,IAAI,CAAC;;;;;GAKb,CAAC,CAAC;IAEH,QAAQ,CAAC,IAAI,CAAC;;;;;;;GAOb,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,uBAAuB;QACvB,QAAQ,CAAC,IAAI,CAAC;;;KAGb,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,SAAiB,EACjB,UAAyB,EACzB,WAAmB,EACnB,YAAoB,CAAC;IAErB,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3E,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAE7F,IAAI,KAAK,GAAG,SAAS,CAAC;IACtB,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,iBAAiB;IAC7D,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAK,mBAAmB;IAE/D,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,WAAW,CAAC,GAA4B;IAC/C,MAAM,UAAU,GAAG,GAAG,CAAC,WAA4B,CAAC;IACpD,MAAM,WAAW,GAAI,GAAG,CAAC,YAAuB,IAAI,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,GAAG,CAAC,UAAoB,CAAC;IAE3C,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAY;QACpB,IAAI,EAAE,GAAG,CAAC,IAAqB;QAC/B,OAAO,EAAE,GAAG,CAAC,OAAiB;QAC9B,IAAI,EAAG,GAAG,CAAC,IAAmB,IAAI,SAAS;QAC3C,OAAO,EAAE,GAAG,CAAC,OAAwB;QACrC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAE,GAAG,CAAC,IAAe,IAAI,IAAI,CAAC;QAC9C,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAkB,CAAC,CAAC,CAAC,CAAC,IAAI;QAClE,WAAW,EAAE,UAAU;QACvB,YAAY,EAAE,WAAW;QACzB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,GAAG,CAAC,UAAoB;QACpC,WAAW,EAAE,mBAAmB,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;KACxE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAmB;IAC3C,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IACpB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEtE,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC;;;GAG7B,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEhE,OAAO,EAAE,EAAE,EAAE,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAU;IAClC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,2DAA2D;IAC3D,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,iGAAiG,CAAC,CAAC;IACvI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEnB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;IACrE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAwC,CAAC;IAEhE,OAAO,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAsB;IACjD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACxB,CAAC;IAED,gBAAgB;IAChB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjG,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEjH,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC;;;;GAI7B,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAE/E,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAE5B,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAoB;IAC/C,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IAE9C,IAAI,GAAG,GAAG,kCAAkC,CAAC;IAC7C,MAAM,MAAM,GAAwB,EAAE,CAAC;IAEvC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,GAAG,IAAI,eAAe,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,IAAI,kBAAkB,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,GAAG,IAAI,kBAAkB,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,GAAG,IAAI,mCAAmC,CAAC;IAC3C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEnB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAA8B,CAAC;IAE9D,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,MAAM,KAAK,GAAI,QAAQ,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,GAAG,EAAU,EAAE,CAAC,IAAI,CAAC,CAAC;IAE5F,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAC,GAAG,EAAW,CAAC;IAC7G,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC7C,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACnC,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAA4B,CAAC,CAAC;IAEjC,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,8DAA8D,CAAC,CAAC,GAAG,EAAW,CAAC;IACtH,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACnD,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACzC,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAA4B,CAAC,CAAC;IAEjC,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,OAAO,KAAK,UAAU,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC9C,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;IACH,CAAC;IAED,OAAO;QACL,cAAc,EAAE,KAAK;QACrB,OAAO;QACP,UAAU;QACV,gBAAgB;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAsB;IACnD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAE7C,0EAA0E;IAC1E,+DAA+D;IAC/D,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAU,EAAE;QACpD,IAAI,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,wCAAwC;QAC3F,mEAAmE;QACnE,kFAAkF;QAClF,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC3E,CAAC,CAAC;IAEF,gCAAgC;IAChC,IAAI,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAErF,2BAA2B;IAC3B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,oCAAoC;IACtC,CAAC;IAED,2BAA2B;IAC3B,IAAI,GAAG,GAAG;;;;;GAKT,CAAC;IACF,MAAM,MAAM,GAAwB,CAAC,QAAQ,CAAC,CAAC;IAE/C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,GAAG,IAAI,iBAAiB,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,IAAI,oBAAoB,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,GAAG,IAAI,4BAA4B,CAAC;IACpC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEnB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAA8B,CAAC;QAE9D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACtB,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAChC,OAAO;gBACL,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAe,CAAC,IAAI,CAAC;gBACzC,WAAW,EAAE,mBAAmB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,IAAI,IAAI,EAAE,MAAM,CAAC,YAAY,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAe,CAAC,IAAI,CAAC,CAAC;aAC9I,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7G,CAAC;QACD,iEAAiE;QACjE,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAsB;IACnD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAE7C,yDAAyD;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE7D,IAAI,GAAG,GAAG,kCAAkC,CAAC;IAC7C,MAAM,MAAM,GAAwB,EAAE,CAAC;IAEvC,yDAAyD;IACzD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,GAAG,IAAI,qBAAqB,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;SAAM,CAAC;QACN,0BAA0B;QAC1B,GAAG,IAAI,qBAAqB,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,GAAG,IAAI,eAAe,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,IAAI,kBAAkB,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,GAAG,IAAI,mCAAmC,CAAC;IAC3C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEnB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAA8B,CAAC;IAE9D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,KAAK,EAAE,GAAG,EAAE,oCAAoC;YAChD,WAAW,EAAE,mBAAmB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,IAAI,IAAI,EAAE,MAAM,CAAC,YAAY,IAAI,CAAC,EAAE,GAAG,CAAC;SAC/G,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAqB;IACjD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC;IAE5C,uEAAuE;IACvE,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAA+B,CAAC;IAErD,MAAM,OAAO,GAA0C,EAAE,CAAC;IAE1D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,GAAa,EAAE,EAAE;YACxD,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;gBACrB,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,YAAY,EAAE,OAAO,CAAC,MAAM;QAC5B,OAAO,EAAE,OAAO;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,IAAI,EAAE,EAAE,CAAC;QACP,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,EAAE,GAAG,IAAI,CAAC;IACZ,CAAC;AACH,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;AAElD,cAAc;AACd,MAAM,UAAU,aAAa;IAC3B,IAAI,EAAE,EAAE,CAAC;QACP,EAAE,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QACzC,EAAE,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAC7C,EAAE,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAC9C,EAAE,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAC9C,EAAE,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAC9C,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
package/dist/index.js CHANGED
@@ -12,10 +12,20 @@ import { schema as updateSchema, handler as updateHandler } from "./tools/update
12
12
  import { schema as deleteSchema, handler as deleteHandler } from "./tools/delete.js";
13
13
  import { schema as listSchema, handler as listHandler } from "./tools/list.js";
14
14
  import { schema as searchSchema, handler as searchHandler } from "./tools/search.js";
15
+ import { schema as statsSchema, handler as statsHandler } from "./tools/stats.js";
16
+ import { schema as pruneSchema, handler as pruneHandler } from "./tools/prune.js";
17
+ import { readFileSync } from "fs";
18
+ import { dirname, join } from "path";
19
+ import { fileURLToPath } from "url";
20
+ const __filename = fileURLToPath(import.meta.url);
21
+ const __dirname = dirname(__filename);
22
+ // Read version dynamically from package.json to stay in sync
23
+ const packageJsonPath = join(__dirname, "..", "package.json");
24
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
15
25
  // Create MCP server
16
26
  const server = new McpServer({
17
27
  name: "omni-memory-mcp",
18
- version: "1.0.0",
28
+ version: packageJson.version || "1.0.0",
19
29
  });
20
30
  // Register tools
21
31
  server.tool("memory_add", "Add a memory to the universal memory store. Memories can be searched and retrieved later.", addSchema, addHandler);
@@ -24,6 +34,8 @@ server.tool("memory_update", "Update an existing memory's content, area, project
24
34
  server.tool("memory_delete", "Delete a memory by its ID.", deleteSchema, deleteHandler);
25
35
  server.tool("memory_list", "List memories with optional filters by area, project, or tag.", listSchema, listHandler);
26
36
  server.tool("memory_search", "Full-text search across all memories using FTS5.", searchSchema, searchHandler);
37
+ server.tool("memory_stats", "Get statistics about the Omni Memory database, including total memories, size on disk, and counts by area and project.", statsSchema, statsHandler);
38
+ server.tool("memory_prune", "Cleanup decayed memories dynamically based on threshold decay score.", pruneSchema, pruneHandler);
27
39
  // Graceful shutdown
28
40
  process.on("SIGINT", async () => {
29
41
  await server.close();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAErF,oBAAoB;AACpB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,iBAAiB;IACvB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,iBAAiB;AACjB,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,2FAA2F,EAC3F,SAAS,EACT,UAAU,CACX,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,uCAAuC,EACvC,SAAS,EACT,UAAU,CACX,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,8DAA8D,EAC9D,YAAY,EACZ,aAAa,CACd,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,4BAA4B,EAC5B,YAAY,EACZ,aAAa,CACd,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,+DAA+D,EAC/D,UAAU,EACV,WAAW,CACZ,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,kDAAkD,EAClD,YAAY,EACZ,aAAa,CACd,CAAC;AAEF,oBAAoB;AACpB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;IAC9B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;IAC/B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,eAAe;AACf,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -4,10 +4,12 @@
4
4
  import { z } from "zod";
5
5
  import type { ToolCallback } from "./index.js";
6
6
  export declare const schema: {
7
+ name: z.ZodOptional<z.ZodString>;
7
8
  content: z.ZodString;
8
9
  area: z.ZodOptional<z.ZodEnum<["general", "snippets", "solutions", "preferences"]>>;
9
10
  project: z.ZodOptional<z.ZodString>;
10
11
  tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
12
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
11
13
  };
12
14
  export declare const handler: ToolCallback<typeof schema>;
13
15
  //# sourceMappingURL=add.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/tools/add.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,MAAM;;;;;CAKlB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,YAAY,CAAC,OAAO,MAAM,CAuB/C,CAAC"}
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/tools/add.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,MAAM;;;;;;;CAOlB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,YAAY,CAAC,OAAO,MAAM,CAuB/C,CAAC"}
package/dist/tools/add.js CHANGED
@@ -4,14 +4,16 @@
4
4
  import { z } from "zod";
5
5
  import { addMemory } from "../database.js";
6
6
  export const schema = {
7
+ name: z.string().optional().describe("Summary or title of the memory"),
7
8
  content: z.string().describe("The content to store in memory"),
8
9
  area: z.enum(["general", "snippets", "solutions", "preferences"]).optional().describe("Memory area (default: general)"),
9
10
  project: z.string().optional().describe("Project identifier for organization"),
10
11
  tags: z.array(z.string()).optional().describe("Tags for categorization"),
12
+ metadata: z.record(z.any()).optional().describe("Graph relationships or extra properties"),
11
13
  };
12
- export const handler = async ({ content, area, project, tags }) => {
14
+ export const handler = async ({ name, content, area, project, tags, metadata }) => {
13
15
  try {
14
- const result = addMemory({ content, area, project, tags });
16
+ const result = addMemory({ name, content, area, project, tags, metadata });
15
17
  return {
16
18
  content: [
17
19
  {
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/tools/add.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC9D,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACvH,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAC9E,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CACzE,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAgC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;IAC7F,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3D,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,kCAAkC,MAAM,CAAC,EAAE,EAAE;iBACpD;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBACxF;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/tools/add.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACtE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC9D,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACvH,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAC9E,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACxE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;CAC3F,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAgC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC7G,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAE3E,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,kCAAkC,MAAM,CAAC,EAAE,EAAE;iBACpD;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBACxF;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
@@ -34,15 +34,15 @@ export const handler = async ({ area, project, tag, limit }) => {
34
34
  .map((m, i) => {
35
35
  const projectTag = m.project ? ` [${m.project}]` : "";
36
36
  const tags = m.tags.length > 0 ? ` #${m.tags.join(" #")}` : "";
37
- const preview = m.content.length > 150 ? m.content.substring(0, 150) + "..." : m.content;
38
- return `${i + 1}. [${m.area}]${projectTag}${tags}\n ID: ${m.id}\n ${preview}`;
37
+ const title = m.name ? m.name : "Unnamed Memory";
38
+ return `${i + 1}. [${m.area}]${projectTag}${tags}\n ID: ${m.id}\n Name: ${title}\n Accessed: ${m.accessed_at || 'Never'} (${m.access_count} times)`;
39
39
  })
40
40
  .join("\n\n");
41
41
  return {
42
42
  content: [
43
43
  {
44
44
  type: "text",
45
- text: `${memories.length} memories:\n\n${memoriesText}`,
45
+ text: `Found ${memories.length} memories. Use 'memory_get' to read full content.\n\n${memoriesText}`,
46
46
  },
47
47
  ],
48
48
  };
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * memory_prune tool - Cleanup decayed memories
3
+ */
4
+ import { z } from "zod";
5
+ import type { ToolCallback } from "./index.js";
6
+ export declare const schema: {
7
+ threshold_score: z.ZodOptional<z.ZodNumber>;
8
+ dry_run: z.ZodOptional<z.ZodBoolean>;
9
+ };
10
+ export declare const handler: ToolCallback<typeof schema>;
11
+ //# sourceMappingURL=prune.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prune.d.ts","sourceRoot":"","sources":["../../src/tools/prune.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,MAAM;;;CAGlB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,YAAY,CAAC,OAAO,MAAM,CAuB/C,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * memory_prune tool - Cleanup decayed memories
3
+ */
4
+ import { z } from "zod";
5
+ import { pruneMemories } from "../database.js";
6
+ export const schema = {
7
+ threshold_score: z.number().optional().describe("Score threshold below which memories are pruned (default 0)"),
8
+ dry_run: z.boolean().optional().describe("If true, calculates which memories would be pruned without deleting them"),
9
+ };
10
+ export const handler = async ({ threshold_score, dry_run }) => {
11
+ try {
12
+ const result = pruneMemories({ threshold_score, dry_run });
13
+ return {
14
+ content: [
15
+ {
16
+ type: "text",
17
+ text: JSON.stringify(result, null, 2),
18
+ },
19
+ ],
20
+ };
21
+ }
22
+ catch (error) {
23
+ return {
24
+ content: [
25
+ {
26
+ type: "text",
27
+ text: `Failed to prune memories: ${error instanceof Error ? error.message : String(error)}`,
28
+ },
29
+ ],
30
+ isError: true,
31
+ };
32
+ }
33
+ };
34
+ //# sourceMappingURL=prune.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prune.js","sourceRoot":"","sources":["../../src/tools/prune.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,MAAM,CAAC,MAAM,MAAM,GAAG;IAClB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;IAC9G,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0EAA0E,CAAC;CACvH,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAgC,KAAK,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE,EAAE;IACvF,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC;QAE3D,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;iBACxC;aACJ;SACJ,CAAC;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBAC9F;aACJ;YACD,OAAO,EAAE,IAAI;SAChB,CAAC;IACN,CAAC;AACL,CAAC,CAAC"}
@@ -8,6 +8,7 @@ export declare const schema: {
8
8
  area: z.ZodOptional<z.ZodEnum<["general", "snippets", "solutions", "preferences"]>>;
9
9
  project: z.ZodOptional<z.ZodString>;
10
10
  limit: z.ZodOptional<z.ZodNumber>;
11
+ enableAdvancedSyntax: z.ZodOptional<z.ZodBoolean>;
11
12
  };
12
13
  export declare const handler: ToolCallback<typeof schema>;
13
14
  //# sourceMappingURL=search.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,MAAM;;;;;CAKlB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,YAAY,CAAC,OAAO,MAAM,CA2C/C,CAAC"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,MAAM;;;;;;CAMlB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,YAAY,CAAC,OAAO,MAAM,CA4C/C,CAAC"}
@@ -8,10 +8,11 @@ export const schema = {
8
8
  area: z.enum(["general", "snippets", "solutions", "preferences"]).optional().describe("Filter by area"),
9
9
  project: z.string().optional().describe("Filter by project"),
10
10
  limit: z.number().min(1).max(50).optional().describe("Max results (default: 10, max: 50)"),
11
+ enableAdvancedSyntax: z.boolean().optional().describe("Enable FTS5 boolean and wildcard advanced syntax"),
11
12
  };
12
- export const handler = async ({ query, area, project, limit }) => {
13
+ export const handler = async ({ query, area, project, limit, enableAdvancedSyntax }) => {
13
14
  try {
14
- const results = searchMemories({ query, area, project, limit });
15
+ const results = searchMemories({ query, area, project, limit, enableAdvancedSyntax });
15
16
  if (results.length === 0) {
16
17
  return {
17
18
  content: [
@@ -26,15 +27,16 @@ export const handler = async ({ query, area, project, limit }) => {
26
27
  .map((m, i) => {
27
28
  const score = `(${(m.score * 100).toFixed(0)}%)`;
28
29
  const projectTag = m.project ? ` [${m.project}]` : "";
29
- const preview = m.content.length > 200 ? m.content.substring(0, 200) + "..." : m.content;
30
- return `${i + 1}. ${score} [${m.area}]${projectTag}\n ID: ${m.id}\n ${preview}`;
30
+ const title = m.name ? m.name : "Unnamed Memory";
31
+ const tags = m.tags && m.tags.length ? ` {Tags: ${m.tags.join(',')}}` : "";
32
+ return `${i + 1}. ${score} [${m.area}]${projectTag}\n ID: ${m.id}\n Name: ${title}${tags}\n Accessed: ${m.accessed_at || 'Never'} (${m.access_count} times)`;
31
33
  })
32
34
  .join("\n\n");
33
35
  return {
34
36
  content: [
35
37
  {
36
38
  type: "text",
37
- text: `Found ${results.length} memories for "${query}":\n\n${resultsText}`,
39
+ text: `Found ${results.length} memories for "${query}".\nNote: To read the full content of a memory, use 'memory_get' with the ID.\n\n${resultsText}`,
38
40
  },
39
41
  ],
40
42
  };
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACvG,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC5D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CAC3F,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAgC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;IAC5F,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAEhE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,gCAAgC,KAAK,GAAG;qBAC/C;iBACF;aACF,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,OAAO;aACxB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACZ,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;YACjD,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACzF,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,UAAU,YAAY,CAAC,CAAC,EAAE,QAAQ,OAAO,EAAE,CAAC;QACtF,CAAC,CAAC;aACD,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,SAAS,OAAO,CAAC,MAAM,kBAAkB,KAAK,SAAS,WAAW,EAAE;iBAC3E;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,kBAAkB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBACjF;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * memory_stats tool - Get statistics about the Omni Memory database
3
+ */
4
+ import type { ToolCallback } from "./index.js";
5
+ export declare const schema: {};
6
+ export declare const handler: ToolCallback<typeof schema>;
7
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/tools/stats.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,MAAM,IAAK,CAAC;AAEzB,eAAO,MAAM,OAAO,EAAE,YAAY,CAAC,OAAO,MAAM,CAiD/C,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * memory_stats tool - Get statistics about the Omni Memory database
3
+ */
4
+ import { getStats } from "../database.js";
5
+ export const schema = {};
6
+ export const handler = async () => {
7
+ try {
8
+ const stats = getStats();
9
+ const formatBytes = (bytes) => {
10
+ if (bytes === 0)
11
+ return "0 Bytes";
12
+ const k = 1024;
13
+ const sizes = ["Bytes", "KB", "MB", "GB"];
14
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
15
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + " " + sizes[i];
16
+ };
17
+ const areasList = Object.entries(stats.by_area)
18
+ .map(([area, count]) => ` - ${area}: ${count}`)
19
+ .join("\n");
20
+ const projectsList = Object.entries(stats.by_project)
21
+ .map(([project, count]) => ` - ${project}: ${count}`)
22
+ .join("\n");
23
+ const text = `Omni Memory Database Statistics:
24
+ Total Memories: ${stats.total_memories}
25
+ Total Size on Disk: ${stats.total_size_bytes > 0 ? formatBytes(stats.total_size_bytes) : "Unknown (Memory DB)"}
26
+
27
+ By Area:
28
+ ${areasList || " (None)"}
29
+
30
+ By Project:
31
+ ${projectsList || " (None)"}`;
32
+ return {
33
+ content: [
34
+ {
35
+ type: "text",
36
+ text,
37
+ },
38
+ ],
39
+ };
40
+ }
41
+ catch (error) {
42
+ return {
43
+ content: [
44
+ {
45
+ type: "text",
46
+ text: `Failed to retrieve stats: ${error instanceof Error ? error.message : String(error)}`,
47
+ },
48
+ ],
49
+ isError: true,
50
+ };
51
+ }
52
+ };
53
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/tools/stats.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,MAAM,CAAC,MAAM,MAAM,GAAG,EAAE,CAAC;AAEzB,MAAM,CAAC,MAAM,OAAO,GAAgC,KAAK,IAAI,EAAE;IAC3D,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QAEzB,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,EAAE;YAClC,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAC;YAClC,MAAM,CAAC,GAAG,IAAI,CAAC;YACf,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,OAAO,UAAU,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;aAC1C,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,KAAK,EAAE,CAAC;aAC/C,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhB,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;aAChD,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,OAAO,KAAK,KAAK,EAAE,CAAC;aACrD,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhB,MAAM,IAAI,GAAG;kBACH,KAAK,CAAC,cAAc;sBAChB,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,qBAAqB;;;EAG5G,SAAS,IAAI,UAAU;;;EAGvB,YAAY,IAAI,UAAU,EAAE,CAAC;QAEvB,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAe;oBACrB,IAAI;iBACP;aACJ;SACJ,CAAC;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBAC9F;aACJ;YACD,OAAO,EAAE,IAAI;SAChB,CAAC;IACN,CAAC;AACL,CAAC,CAAC"}
@@ -5,10 +5,12 @@ import { z } from "zod";
5
5
  import type { ToolCallback } from "./index.js";
6
6
  export declare const schema: {
7
7
  id: z.ZodString;
8
+ name: z.ZodOptional<z.ZodString>;
8
9
  content: z.ZodOptional<z.ZodString>;
9
10
  area: z.ZodOptional<z.ZodEnum<["general", "snippets", "solutions", "preferences"]>>;
10
11
  project: z.ZodOptional<z.ZodNullable<z.ZodString>>;
11
12
  tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
13
+ metadata: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodAny>>>;
12
14
  };
13
15
  export declare const handler: ToolCallback<typeof schema>;
14
16
  //# sourceMappingURL=update.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/tools/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,MAAM;;;;;;CAMlB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,YAAY,CAAC,OAAO,MAAM,CAgD/C,CAAC"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/tools/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,MAAM;;;;;;;;CAQlB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,YAAY,CAAC,OAAO,MAAM,CAgD/C,CAAC"}
@@ -5,12 +5,14 @@ import { z } from "zod";
5
5
  import { updateMemory, getMemory } from "../database.js";
6
6
  export const schema = {
7
7
  id: z.string().describe("The memory ID to update"),
8
+ name: z.string().optional().describe("New summary or title (optional)"),
8
9
  content: z.string().optional().describe("New content (optional)"),
9
10
  area: z.enum(["general", "snippets", "solutions", "preferences"]).optional().describe("New area (optional)"),
10
11
  project: z.string().nullable().optional().describe("New project (optional, null to clear)"),
11
12
  tags: z.array(z.string()).optional().describe("New tags (optional)"),
13
+ metadata: z.record(z.any()).nullable().optional().describe("New metadata (optional, null to clear)"),
12
14
  };
13
- export const handler = async ({ id, content, area, project, tags }) => {
15
+ export const handler = async ({ id, name, content, area, project, tags, metadata }) => {
14
16
  try {
15
17
  // Check if memory exists
16
18
  const existing = getMemory(id);
@@ -25,7 +27,7 @@ export const handler = async ({ id, content, area, project, tags }) => {
25
27
  isError: true,
26
28
  };
27
29
  }
28
- const result = updateMemory({ id, content, area, project: project ?? undefined, tags });
30
+ const result = updateMemory({ id, name, content, area, project: project ?? undefined, tags, metadata: metadata ?? undefined });
29
31
  if (result.changes === 0) {
30
32
  return {
31
33
  content: [
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/tools/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGzD,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAClD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACjE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC5G,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC3F,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;CACrE,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAgC,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;IACjG,IAAI,CAAC;QACH,yBAAyB;QACzB,MAAM,QAAQ,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,qBAAqB,EAAE,EAAE;qBAChC;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAExF,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,8BAA8B,EAAE,EAAE;qBACzC;iBACF;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,oCAAoC,EAAE,cAAc,MAAM,CAAC,OAAO,EAAE;iBAC3E;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBAC3F;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/tools/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGzD,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAClD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACvE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACjE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC5G,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC3F,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACpE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;CACrG,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAgC,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IACjH,IAAI,CAAC;QACH,yBAAyB;QACzB,MAAM,QAAQ,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,qBAAqB,EAAE,EAAE;qBAChC;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,IAAI,SAAS,EAAE,CAAC,CAAC;QAE/H,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,8BAA8B,EAAE,EAAE;qBACzC;iBACF;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,oCAAoC,EAAE,cAAc,MAAM,CAAC,OAAO,EAAE;iBAC3E;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBAC3F;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -4,28 +4,37 @@
4
4
  export type MemoryArea = "general" | "snippets" | "solutions" | "preferences";
5
5
  export interface Memory {
6
6
  id: string;
7
+ name?: string | null;
7
8
  content: string;
8
9
  area: MemoryArea;
9
10
  project: string | null;
10
11
  tags: string[];
12
+ metadata?: Record<string, any> | null;
13
+ accessed_at?: string | null;
14
+ access_count?: number;
11
15
  created_at: string;
12
16
  updated_at: string;
17
+ decay_score?: number;
13
18
  }
14
19
  export interface AddMemoryArgs {
20
+ name?: string;
15
21
  content: string;
16
22
  area?: MemoryArea;
17
23
  project?: string;
18
24
  tags?: string[];
25
+ metadata?: Record<string, any>;
19
26
  }
20
27
  export interface GetMemoryArgs {
21
28
  id: string;
22
29
  }
23
30
  export interface UpdateMemoryArgs {
24
31
  id: string;
32
+ name?: string;
25
33
  content?: string;
26
34
  area?: MemoryArea;
27
35
  project?: string;
28
36
  tags?: string[];
37
+ metadata?: Record<string, any>;
29
38
  }
30
39
  export interface DeleteMemoryArgs {
31
40
  id: string;
@@ -41,9 +50,30 @@ export interface SearchMemoryArgs {
41
50
  area?: MemoryArea;
42
51
  project?: string;
43
52
  limit?: number;
53
+ enableAdvancedSyntax?: boolean;
44
54
  }
45
- export interface SearchResult extends Memory {
55
+ export interface SearchResult extends Omit<Memory, "content"> {
56
+ content?: string;
46
57
  score: number;
58
+ decay_score: number;
59
+ }
60
+ export interface MemoryStats {
61
+ total_memories: number;
62
+ by_area: Record<string, number>;
63
+ by_project: Record<string, number>;
64
+ total_size_bytes: number;
65
+ }
66
+ export interface PruneMemoryArgs {
67
+ threshold_score?: number;
68
+ dry_run?: boolean;
69
+ }
70
+ export interface PruneMemoryResult {
71
+ success: boolean;
72
+ pruned_count: number;
73
+ details?: {
74
+ id: string;
75
+ name: string | null;
76
+ }[];
47
77
  }
48
78
  export interface AddMemoryResult {
49
79
  success: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,CAAC;AAE9E,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAa,SAAQ,MAAM;IAC1C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sharkdyt/omni-memory-mcp",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "Universal memory MCP server for multi-agent AI workflows. 100% local with SQLite + FTS5.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -65,4 +65,4 @@
65
65
  "publishConfig": {
66
66
  "access": "public"
67
67
  }
68
- }
68
+ }