@vheins/local-memory-mcp 0.1.2 → 0.1.4

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.
File without changes
package/dist/server.js CHANGED
File without changes
@@ -0,0 +1,95 @@
1
+ import { MemoryEntry } from "../types.js";
2
+ export declare class SQLiteStore {
3
+ private db;
4
+ constructor(dbPath?: string);
5
+ private migrate;
6
+ insert(entry: MemoryEntry): void;
7
+ update(id: string, updates: {
8
+ title?: string;
9
+ content?: string;
10
+ importance?: number;
11
+ }): void;
12
+ searchByRepo(repo: string, options?: {
13
+ types?: string[];
14
+ minImportance?: number;
15
+ limit?: number;
16
+ }): MemoryEntry[];
17
+ getById(id: string): MemoryEntry | null;
18
+ getByIdWithStats(id: string): (MemoryEntry & {
19
+ recall_rate: number;
20
+ }) | null;
21
+ listRecent(limit?: number): Array<{
22
+ id: string;
23
+ type: string;
24
+ repo: string;
25
+ }>;
26
+ getSummary(repo: string): {
27
+ summary: string;
28
+ updated_at: string;
29
+ } | null;
30
+ upsertSummary(repo: string, summary: string): void;
31
+ delete(id: string): void;
32
+ listRepos(): string[];
33
+ listRepoNavigation(): Array<{
34
+ repo: string;
35
+ memory_count: number;
36
+ last_updated_at: string | null;
37
+ }>;
38
+ incrementHitCount(id: string): void;
39
+ incrementRecallCount(id: string): void;
40
+ getStats(repo?: string): {
41
+ total: number;
42
+ byType: Record<string, number>;
43
+ unused: number;
44
+ };
45
+ getRecentMemories(repo: string, limit: number, offset?: number): MemoryEntry[];
46
+ getTotalCount(repo: string): number;
47
+ searchBySimilarity(query: string, repo: string, limit?: number): Array<MemoryEntry & {
48
+ similarity: number;
49
+ }>;
50
+ archiveExpiredMemories(): number;
51
+ getAllMemoriesWithStats(repo?: string): Array<MemoryEntry & {
52
+ hit_count: number;
53
+ recall_count: number;
54
+ recall_rate: number;
55
+ last_used_at: string | null;
56
+ }>;
57
+ listMemoriesForDashboard(options: {
58
+ repo: string;
59
+ type?: string;
60
+ search?: string;
61
+ minImportance?: number;
62
+ maxImportance?: number;
63
+ sortBy?: string;
64
+ sortOrder?: "asc" | "desc";
65
+ limit?: number;
66
+ offset?: number;
67
+ }): {
68
+ items: Array<MemoryEntry & {
69
+ hit_count: number;
70
+ recall_count: number;
71
+ recall_rate: number;
72
+ last_used_at: string | null;
73
+ }>;
74
+ total: number;
75
+ };
76
+ upsertVectorEmbedding(memoryId: string, vector: number[] | string[]): void;
77
+ getVectorEmbedding(memoryId: string): number[] | string[] | null;
78
+ close(): void;
79
+ private computeVector;
80
+ private cosineSimilarity;
81
+ private rowToMemoryEntry;
82
+ logAction(action: 'search' | 'read' | 'write' | 'update' | 'delete', repo: string, options?: {
83
+ query?: string;
84
+ memoryId?: string;
85
+ resultCount?: number;
86
+ }): void;
87
+ getRecentActions(repo?: string, limit?: number): Array<{
88
+ action: string;
89
+ query?: string;
90
+ memory_id?: string;
91
+ result_count?: number;
92
+ created_at: string;
93
+ }>;
94
+ }
95
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,537 @@
1
+ import Database from "better-sqlite3";
2
+ import path from "path";
3
+ import { fileURLToPath } from "url";
4
+ import { tokenize } from "../utils/normalize.js";
5
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
6
+ const DB_PATH = path.join(__dirname, "../../storage/memory.db");
7
+ export class SQLiteStore {
8
+ db;
9
+ constructor(dbPath) {
10
+ this.db = new Database(dbPath ?? DB_PATH);
11
+ this.migrate();
12
+ }
13
+ migrate() {
14
+ // Create base tables
15
+ this.db.exec(`
16
+ CREATE TABLE IF NOT EXISTS memories (
17
+ id TEXT PRIMARY KEY,
18
+ repo TEXT NOT NULL,
19
+ type TEXT NOT NULL CHECK (type IN (
20
+ 'code_fact',
21
+ 'decision',
22
+ 'mistake',
23
+ 'pattern'
24
+ )),
25
+ title TEXT,
26
+ content TEXT NOT NULL,
27
+ importance INTEGER NOT NULL CHECK (importance BETWEEN 1 AND 5),
28
+ folder TEXT,
29
+ language TEXT,
30
+ created_at TEXT NOT NULL,
31
+ updated_at TEXT NOT NULL,
32
+ hit_count INTEGER NOT NULL DEFAULT 0,
33
+ recall_count INTEGER NOT NULL DEFAULT 0,
34
+ last_used_at TEXT
35
+ );
36
+
37
+ CREATE INDEX IF NOT EXISTS idx_memories_repo ON memories(repo);
38
+ CREATE INDEX IF NOT EXISTS idx_memories_type ON memories(type);
39
+ CREATE INDEX IF NOT EXISTS idx_memories_importance ON memories(importance);
40
+ CREATE INDEX IF NOT EXISTS idx_memories_hit_count ON memories(hit_count);
41
+ CREATE INDEX IF NOT EXISTS idx_memories_created_at ON memories(created_at);
42
+ CREATE INDEX IF NOT EXISTS idx_memories_updated_at ON memories(updated_at);
43
+ CREATE INDEX IF NOT EXISTS idx_memories_repo_created_at ON memories(repo, created_at DESC);
44
+ CREATE INDEX IF NOT EXISTS idx_memories_repo_hit_count ON memories(repo, hit_count DESC);
45
+ CREATE INDEX IF NOT EXISTS idx_memories_title ON memories(title);
46
+
47
+ CREATE TABLE IF NOT EXISTS memory_summary (
48
+ repo TEXT PRIMARY KEY,
49
+ summary TEXT NOT NULL,
50
+ updated_at TEXT NOT NULL
51
+ );
52
+
53
+ CREATE TABLE IF NOT EXISTS memory_vectors (
54
+ memory_id TEXT PRIMARY KEY,
55
+ vector TEXT NOT NULL,
56
+ updated_at TEXT NOT NULL,
57
+ FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE
58
+ );
59
+ `);
60
+ // Add title column if it doesn't exist (for existing databases)
61
+ try {
62
+ this.db.exec(`ALTER TABLE memories ADD COLUMN title TEXT`);
63
+ }
64
+ catch (e) {
65
+ // Column already exists, ignore
66
+ }
67
+ this.db.exec(`
68
+ CREATE TABLE IF NOT EXISTS memories_archive (
69
+ id TEXT PRIMARY KEY,
70
+ repo TEXT NOT NULL,
71
+ type TEXT NOT NULL,
72
+ content TEXT NOT NULL,
73
+ importance INTEGER NOT NULL,
74
+ folder TEXT,
75
+ language TEXT,
76
+ created_at TEXT NOT NULL,
77
+ updated_at TEXT NOT NULL,
78
+ hit_count INTEGER NOT NULL DEFAULT 0,
79
+ recall_count INTEGER NOT NULL DEFAULT 0,
80
+ last_used_at TEXT,
81
+ expires_at TEXT,
82
+ archived_at TEXT NOT NULL
83
+ );
84
+
85
+ CREATE TABLE IF NOT EXISTS action_log (
86
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
87
+ action TEXT NOT NULL CHECK (action IN ('search', 'read', 'write', 'update', 'delete')),
88
+ query TEXT,
89
+ memory_id TEXT,
90
+ repo TEXT NOT NULL,
91
+ result_count INTEGER NOT NULL DEFAULT 0,
92
+ created_at TEXT NOT NULL
93
+ );
94
+
95
+ CREATE INDEX IF NOT EXISTS idx_action_log_repo ON action_log(repo);
96
+ CREATE INDEX IF NOT EXISTS idx_action_log_created_at ON action_log(created_at);
97
+ `);
98
+ // Sub-task 2.1: Use PRAGMA table_info to safely add columns
99
+ const existingColumns = this.db.prepare("PRAGMA table_info(memories)").all().map((col) => col.name);
100
+ const columnsToAdd = [
101
+ { name: "hit_count", definition: "ALTER TABLE memories ADD COLUMN hit_count INTEGER NOT NULL DEFAULT 0" },
102
+ { name: "recall_count", definition: "ALTER TABLE memories ADD COLUMN recall_count INTEGER NOT NULL DEFAULT 0" },
103
+ { name: "last_used_at", definition: "ALTER TABLE memories ADD COLUMN last_used_at TEXT" },
104
+ { name: "expires_at", definition: "ALTER TABLE memories ADD COLUMN expires_at TEXT" },
105
+ ];
106
+ for (const col of columnsToAdd) {
107
+ if (!existingColumns.includes(col.name)) {
108
+ this.db.exec(col.definition);
109
+ }
110
+ }
111
+ }
112
+ insert(entry) {
113
+ if (!entry.title) {
114
+ throw new Error("Title is required for memory entry");
115
+ }
116
+ const stmt = this.db.prepare(`
117
+ INSERT INTO memories (
118
+ id, repo, type, title, content, importance, folder, language,
119
+ created_at, updated_at, hit_count, recall_count, last_used_at, expires_at
120
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0, 0, NULL, ?)
121
+ `);
122
+ stmt.run(entry.id, entry.scope.repo, entry.type, entry.title, entry.content, entry.importance, entry.scope.folder || null, entry.scope.language || null, entry.created_at, entry.updated_at, entry.expires_at ?? null);
123
+ }
124
+ update(id, updates) {
125
+ const fields = [];
126
+ const values = [];
127
+ if (updates.title !== undefined) {
128
+ if (updates.title.length < 3) {
129
+ throw new Error("Title must be at least 3 characters");
130
+ }
131
+ fields.push("title = ?");
132
+ values.push(updates.title);
133
+ }
134
+ if (updates.content !== undefined) {
135
+ fields.push("content = ?");
136
+ values.push(updates.content);
137
+ }
138
+ if (updates.importance !== undefined) {
139
+ fields.push("importance = ?");
140
+ values.push(updates.importance);
141
+ }
142
+ if (fields.length === 0) {
143
+ return; // Nothing to update
144
+ }
145
+ fields.push("updated_at = ?");
146
+ values.push(new Date().toISOString());
147
+ values.push(id);
148
+ const stmt = this.db.prepare(`
149
+ UPDATE memories
150
+ SET ${fields.join(", ")}
151
+ WHERE id = ?
152
+ `);
153
+ stmt.run(...values);
154
+ }
155
+ // Sub-task 2.4: Exclude expired memories from searchByRepo
156
+ searchByRepo(repo, options = {}) {
157
+ let query = `SELECT * FROM memories WHERE repo = ?
158
+ AND (expires_at IS NULL OR expires_at > datetime('now'))`;
159
+ const params = [repo];
160
+ if (options.types && options.types.length > 0) {
161
+ const placeholders = options.types.map(() => "?").join(", ");
162
+ query += ` AND type IN (${placeholders})`;
163
+ params.push(...options.types);
164
+ }
165
+ if (options.minImportance !== undefined) {
166
+ query += " AND importance >= ?";
167
+ params.push(options.minImportance);
168
+ }
169
+ query += " ORDER BY importance DESC, created_at DESC";
170
+ if (options.limit !== undefined) {
171
+ query += " LIMIT ?";
172
+ params.push(options.limit);
173
+ }
174
+ const stmt = this.db.prepare(query);
175
+ const rows = stmt.all(...params);
176
+ return rows.map((row) => this.rowToMemoryEntry(row));
177
+ }
178
+ getById(id) {
179
+ const stmt = this.db.prepare("SELECT * FROM memories WHERE id = ?");
180
+ const row = stmt.get(id);
181
+ if (!row)
182
+ return null;
183
+ return this.rowToMemoryEntry(row);
184
+ }
185
+ getByIdWithStats(id) {
186
+ const stmt = this.db.prepare(`
187
+ SELECT *,
188
+ CASE WHEN hit_count > 0 THEN CAST(recall_count AS REAL) / hit_count ELSE 0 END AS recall_rate
189
+ FROM memories
190
+ WHERE id = ?
191
+ `);
192
+ const row = stmt.get(id);
193
+ if (!row)
194
+ return null;
195
+ return {
196
+ ...this.rowToMemoryEntry(row),
197
+ recall_rate: row.recall_rate ?? 0,
198
+ };
199
+ }
200
+ listRecent(limit = 10) {
201
+ const stmt = this.db.prepare(`
202
+ SELECT id, type, repo
203
+ FROM memories
204
+ ORDER BY created_at DESC
205
+ LIMIT ?
206
+ `);
207
+ return stmt.all(limit);
208
+ }
209
+ getSummary(repo) {
210
+ const stmt = this.db.prepare("SELECT summary, updated_at FROM memory_summary WHERE repo = ?");
211
+ return stmt.get(repo);
212
+ }
213
+ upsertSummary(repo, summary) {
214
+ const stmt = this.db.prepare(`
215
+ INSERT INTO memory_summary (repo, summary, updated_at)
216
+ VALUES (?, ?, ?)
217
+ ON CONFLICT(repo) DO UPDATE SET
218
+ summary = excluded.summary,
219
+ updated_at = excluded.updated_at
220
+ `);
221
+ stmt.run(repo, summary, new Date().toISOString());
222
+ }
223
+ delete(id) {
224
+ const stmt = this.db.prepare("DELETE FROM memories WHERE id = ?");
225
+ stmt.run(id);
226
+ }
227
+ // Sub-task 2.5: Renamed from listAllRepos to listRepos
228
+ listRepos() {
229
+ const stmt = this.db.prepare("SELECT DISTINCT repo FROM memories ORDER BY repo");
230
+ const rows = stmt.all();
231
+ return rows.map((row) => row.repo);
232
+ }
233
+ listRepoNavigation() {
234
+ const stmt = this.db.prepare(`
235
+ SELECT
236
+ repo,
237
+ COUNT(*) AS memory_count,
238
+ MAX(COALESCE(updated_at, created_at)) AS last_updated_at
239
+ FROM memories
240
+ GROUP BY repo
241
+ ORDER BY last_updated_at DESC, repo ASC
242
+ `);
243
+ return stmt.all();
244
+ }
245
+ incrementHitCount(id) {
246
+ const stmt = this.db.prepare(`
247
+ UPDATE memories
248
+ SET hit_count = hit_count + 1,
249
+ last_used_at = ?
250
+ WHERE id = ?
251
+ `);
252
+ stmt.run(new Date().toISOString(), id);
253
+ }
254
+ incrementRecallCount(id) {
255
+ const stmt = this.db.prepare(`
256
+ UPDATE memories
257
+ SET recall_count = recall_count + 1,
258
+ last_used_at = ?
259
+ WHERE id = ?
260
+ `);
261
+ stmt.run(new Date().toISOString(), id);
262
+ }
263
+ getStats(repo) {
264
+ let query = "SELECT type, COUNT(*) as count FROM memories";
265
+ const params = [];
266
+ if (repo) {
267
+ query += " WHERE repo = ?";
268
+ params.push(repo);
269
+ }
270
+ query += " GROUP BY type";
271
+ const stmt = this.db.prepare(query);
272
+ const rows = stmt.all(...params);
273
+ const byType = {};
274
+ let total = 0;
275
+ for (const row of rows) {
276
+ byType[row.type] = row.count;
277
+ total += row.count;
278
+ }
279
+ let unusedQuery = "SELECT COUNT(*) as count FROM memories WHERE hit_count = 0";
280
+ if (repo) {
281
+ unusedQuery += " AND repo = ?";
282
+ }
283
+ const unusedStmt = this.db.prepare(unusedQuery);
284
+ const unusedRow = (repo ? unusedStmt.get(repo) : unusedStmt.get());
285
+ const unused = unusedRow?.count || 0;
286
+ return { total, byType, unused };
287
+ }
288
+ // Sub-task 2.2: Public method for Memory_Recap
289
+ getRecentMemories(repo, limit, offset = 0) {
290
+ const stmt = this.db.prepare(`
291
+ SELECT * FROM memories
292
+ WHERE repo = ?
293
+ ORDER BY created_at DESC
294
+ LIMIT ? OFFSET ?
295
+ `);
296
+ const rows = stmt.all(repo, limit, offset);
297
+ return rows.map((row) => this.rowToMemoryEntry(row));
298
+ }
299
+ // Sub-task 2.2: Public method for total count
300
+ getTotalCount(repo) {
301
+ const stmt = this.db.prepare("SELECT COUNT(*) as count FROM memories WHERE repo = ?");
302
+ const row = stmt.get(repo);
303
+ return row?.count ?? 0;
304
+ }
305
+ // Sub-task 2.3: searchBySimilarity with pre-filter SQL + exclude expired
306
+ searchBySimilarity(query, repo, limit = 10) {
307
+ const queryVector = this.computeVector(query);
308
+ const now = new Date().toISOString();
309
+ // Pre-filter: fetch at most limit*10 candidates, exclude expired
310
+ const stmt = this.db.prepare(`
311
+ SELECT * FROM memories
312
+ WHERE repo = ?
313
+ AND (expires_at IS NULL OR expires_at > ?)
314
+ ORDER BY importance DESC, created_at DESC
315
+ LIMIT ?
316
+ `);
317
+ const candidates = stmt.all(repo, now, limit * 10);
318
+ const withSimilarity = candidates.map((row) => {
319
+ const memory = this.rowToMemoryEntry(row);
320
+ const memoryVector = this.computeVector(memory.content);
321
+ const similarity = this.cosineSimilarity(queryVector, memoryVector);
322
+ return {
323
+ id: row.id,
324
+ type: row.type,
325
+ title: row.title || undefined,
326
+ content: row.content,
327
+ importance: row.importance,
328
+ scope: {
329
+ repo: row.repo,
330
+ folder: row.folder || undefined,
331
+ language: row.language || undefined,
332
+ },
333
+ created_at: row.created_at,
334
+ updated_at: row.updated_at,
335
+ hit_count: row.hit_count ?? 0,
336
+ recall_count: row.recall_count ?? 0,
337
+ last_used_at: row.last_used_at ?? null,
338
+ expires_at: row.expires_at ?? null,
339
+ similarity
340
+ };
341
+ });
342
+ return withSimilarity
343
+ .sort((a, b) => b.similarity - a.similarity)
344
+ .slice(0, limit);
345
+ }
346
+ // Sub-task 2.5: Archive expired memories
347
+ archiveExpiredMemories() {
348
+ const now = new Date().toISOString();
349
+ const insertArchive = this.db.prepare(`
350
+ INSERT OR IGNORE INTO memories_archive
351
+ (id, repo, type, content, importance, folder, language,
352
+ created_at, updated_at, hit_count, recall_count, last_used_at, expires_at, archived_at)
353
+ SELECT id, repo, type, content, importance, folder, language,
354
+ created_at, updated_at, hit_count, recall_count, last_used_at, expires_at, ?
355
+ FROM memories
356
+ WHERE expires_at IS NOT NULL AND expires_at <= ?
357
+ `);
358
+ const deleteExpired = this.db.prepare(`
359
+ DELETE FROM memories
360
+ WHERE expires_at IS NOT NULL AND expires_at <= ?
361
+ `);
362
+ const archive = this.db.transaction(() => {
363
+ insertArchive.run(now, now);
364
+ const result = deleteExpired.run(now);
365
+ return result.changes;
366
+ });
367
+ return archive();
368
+ }
369
+ // Get all memories with stats (for dashboard)
370
+ getAllMemoriesWithStats(repo) {
371
+ let query = "SELECT * FROM memories";
372
+ const params = [];
373
+ if (repo) {
374
+ query += " WHERE repo = ?";
375
+ params.push(repo);
376
+ }
377
+ query += " ORDER BY hit_count DESC, importance DESC, created_at DESC";
378
+ const stmt = this.db.prepare(query);
379
+ const rows = stmt.all(...params);
380
+ return rows.map((row) => ({
381
+ ...this.rowToMemoryEntry(row),
382
+ hit_count: row.hit_count || 0,
383
+ recall_count: row.recall_count || 0,
384
+ recall_rate: row.hit_count > 0 ? row.recall_count / row.hit_count : 0,
385
+ last_used_at: row.last_used_at ?? null,
386
+ }));
387
+ }
388
+ listMemoriesForDashboard(options) {
389
+ const where = ["repo = ?"];
390
+ const params = [options.repo];
391
+ if (options.type) {
392
+ where.push("type = ?");
393
+ params.push(options.type);
394
+ }
395
+ if (options.search) {
396
+ where.push("(LOWER(COALESCE(title, '')) LIKE ? OR LOWER(content) LIKE ? OR LOWER(id) LIKE ?)");
397
+ const term = `%${options.search.toLowerCase()}%`;
398
+ params.push(term, term, term);
399
+ }
400
+ if (options.minImportance !== undefined) {
401
+ where.push("importance >= ?");
402
+ params.push(options.minImportance);
403
+ }
404
+ if (options.maxImportance !== undefined) {
405
+ where.push("importance <= ?");
406
+ params.push(options.maxImportance);
407
+ }
408
+ const whereSql = where.length > 0 ? `WHERE ${where.join(" AND ")}` : "";
409
+ const sortableColumns = {
410
+ id: "id",
411
+ title: "COALESCE(title, content)",
412
+ type: "type",
413
+ importance: "importance",
414
+ hit_count: "hit_count",
415
+ recall_rate: "recall_rate",
416
+ created_at: "created_at",
417
+ updated_at: "updated_at",
418
+ };
419
+ const sortBy = sortableColumns[options.sortBy ?? "hit_count"] ?? sortableColumns.hit_count;
420
+ const sortOrder = options.sortOrder === "asc" ? "ASC" : "DESC";
421
+ const limit = options.limit ?? 25;
422
+ const offset = options.offset ?? 0;
423
+ const countStmt = this.db.prepare(`SELECT COUNT(*) AS count FROM memories ${whereSql}`);
424
+ const total = countStmt.get(...params)?.count ?? 0;
425
+ const listStmt = this.db.prepare(`
426
+ SELECT *,
427
+ CASE WHEN hit_count > 0 THEN CAST(recall_count AS REAL) / hit_count ELSE 0 END AS recall_rate
428
+ FROM memories
429
+ ${whereSql}
430
+ ORDER BY ${sortBy} ${sortOrder}, created_at DESC
431
+ LIMIT ? OFFSET ?
432
+ `);
433
+ const rows = listStmt.all(...params, limit, offset);
434
+ return {
435
+ items: rows.map((row) => ({
436
+ ...this.rowToMemoryEntry(row),
437
+ hit_count: row.hit_count || 0,
438
+ recall_count: row.recall_count || 0,
439
+ recall_rate: row.recall_rate ?? 0,
440
+ last_used_at: row.last_used_at ?? null,
441
+ })),
442
+ total,
443
+ };
444
+ }
445
+ upsertVectorEmbedding(memoryId, vector) {
446
+ const stmt = this.db.prepare(`
447
+ INSERT INTO memory_vectors (memory_id, vector, updated_at)
448
+ VALUES (?, ?, ?)
449
+ ON CONFLICT(memory_id) DO UPDATE SET
450
+ vector = excluded.vector,
451
+ updated_at = excluded.updated_at
452
+ `);
453
+ stmt.run(memoryId, JSON.stringify(vector), new Date().toISOString());
454
+ }
455
+ getVectorEmbedding(memoryId) {
456
+ const stmt = this.db.prepare("SELECT vector FROM memory_vectors WHERE memory_id = ?");
457
+ const row = stmt.get(memoryId);
458
+ if (!row)
459
+ return null;
460
+ try {
461
+ return JSON.parse(row.vector);
462
+ }
463
+ catch {
464
+ return null;
465
+ }
466
+ }
467
+ close() {
468
+ this.db.close();
469
+ }
470
+ // Sub-task 2.3: Use tokenize() from normalize.ts (single source of truth)
471
+ computeVector(text) {
472
+ const tokens = tokenize(text);
473
+ const vector = {};
474
+ for (const token of tokens) {
475
+ vector[token] = (vector[token] || 0) + 1;
476
+ }
477
+ return vector;
478
+ }
479
+ cosineSimilarity(v1, v2) {
480
+ const keys1 = Object.keys(v1);
481
+ const keys2 = Object.keys(v2);
482
+ if (keys1.length === 0 || keys2.length === 0)
483
+ return 0;
484
+ let dotProduct = 0;
485
+ for (const key of keys1) {
486
+ if (v2[key]) {
487
+ dotProduct += v1[key] * v2[key];
488
+ }
489
+ }
490
+ const mag1 = Math.sqrt(keys1.reduce((sum, key) => sum + v1[key] * v1[key], 0));
491
+ const mag2 = Math.sqrt(keys2.reduce((sum, key) => sum + v2[key] * v2[key], 0));
492
+ if (mag1 === 0 || mag2 === 0)
493
+ return 0;
494
+ return dotProduct / (mag1 * mag2);
495
+ }
496
+ rowToMemoryEntry(row) {
497
+ return {
498
+ id: row.id,
499
+ type: row.type,
500
+ title: row.title || undefined,
501
+ content: row.content,
502
+ importance: row.importance,
503
+ scope: {
504
+ repo: row.repo,
505
+ folder: row.folder || undefined,
506
+ language: row.language || undefined,
507
+ },
508
+ created_at: row.created_at,
509
+ updated_at: row.updated_at,
510
+ hit_count: row.hit_count ?? 0,
511
+ recall_count: row.recall_count ?? 0,
512
+ last_used_at: row.last_used_at ?? null,
513
+ expires_at: row.expires_at ?? null,
514
+ };
515
+ }
516
+ logAction(action, repo, options) {
517
+ const stmt = this.db.prepare(`
518
+ INSERT INTO action_log (action, query, memory_id, repo, result_count, created_at)
519
+ VALUES (?, ?, ?, ?, ?, ?)
520
+ `);
521
+ stmt.run(action, options?.query || null, options?.memoryId || null, repo, options?.resultCount || 0, new Date().toISOString());
522
+ }
523
+ getRecentActions(repo, limit = 20) {
524
+ let sql = `SELECT action, query, memory_id, result_count, created_at FROM action_log`;
525
+ const params = [];
526
+ if (repo) {
527
+ sql += ` WHERE repo = ?`;
528
+ params.push(repo);
529
+ }
530
+ sql += ` ORDER BY created_at DESC, id DESC LIMIT ?`;
531
+ params.push(String(limit));
532
+ const stmt = this.db.prepare(sql);
533
+ const rows = repo ? stmt.all(repo, String(limit)) : stmt.all(String(limit));
534
+ return rows;
535
+ }
536
+ }
537
+ //# sourceMappingURL=sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sqlite.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.test.d.ts","sourceRoot":"","sources":["../../src/storage/sqlite.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.test.js","sourceRoot":"","sources":["../../src/storage/sqlite.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { VectorStore, VectorResult } from "../types.js";
2
+ import { SQLiteStore } from "./sqlite.js";
3
+ export declare class StubVectorStore implements VectorStore {
4
+ private db;
5
+ constructor(db?: SQLiteStore);
6
+ private generateTextVector;
7
+ private calculateSimilarity;
8
+ upsert(id: string, text: string): Promise<void>;
9
+ remove(id: string): Promise<void>;
10
+ search(query: string, limit: number): Promise<VectorResult[]>;
11
+ }
12
+ //# sourceMappingURL=vectors.stub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectors.stub.d.ts","sourceRoot":"","sources":["../../src/storage/vectors.stub.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,EAAE,CAAc;gBAEZ,EAAE,CAAC,EAAE,WAAW;IAQ5B,OAAO,CAAC,kBAAkB;IAsC1B,OAAO,CAAC,mBAAmB;IAarB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAiBpE"}
@@ -0,0 +1,88 @@
1
+ // Simple vector store using SQLite - lightweight embeddings without ollama
2
+ export class StubVectorStore {
3
+ db;
4
+ constructor(db) {
5
+ if (!db) {
6
+ throw new Error("SQLiteStore required for vector operations");
7
+ }
8
+ this.db = db;
9
+ }
10
+ // Generate simple text-based vector (TF-IDF style) without external embeddings
11
+ generateTextVector(text) {
12
+ const normalized = text.toLowerCase()
13
+ // Remove punctuation and special characters, but keep Indonesian characters
14
+ .replace(/[^\w\s\u00C0-\u017F]/g, ' ')
15
+ // Normalize multiple spaces to single space
16
+ .replace(/\s+/g, ' ')
17
+ .trim()
18
+ .split(/\s+/)
19
+ .filter(word => word.length > 2);
20
+ const stopwords = new Set([
21
+ // English stopwords
22
+ 'the', 'is', 'at', 'which', 'on', 'and', 'or', 'but', 'for', 'with',
23
+ 'to', 'from', 'by', 'as', 'in', 'of', 'a', 'an', 'be', 'this', 'that',
24
+ 'are', 'was', 'were', 'been', 'have', 'has', 'had', 'do', 'does', 'did',
25
+ // Indonesian stopwords
26
+ 'yang', 'di', 'ke', 'dari', 'untuk', 'dengan', 'oleh', 'pada', 'dalam', 'atas',
27
+ 'bawah', 'depan', 'belakang', 'samping', 'sebelah', 'antara', 'diantara', 'melalui',
28
+ 'selama', 'sampai', 'hingga', 'sejak', 'sebelum', 'sesudah', 'setelah', 'sebelumnya',
29
+ 'kemudian', 'selanjutnya', 'lagi', 'juga', 'pun', 'bahkan', 'malah', 'bahwa',
30
+ 'karena', 'sebab', 'oleh', 'karena', 'sehingga', 'maka', 'lalu', 'kemudian',
31
+ 'saya', 'kamu', 'dia', 'kami', 'kalian', 'mereka', 'aku', 'engkau', 'ia', 'kita',
32
+ 'anda', 'beliau', 'mereka', 'siapa', 'apa', 'dimana', 'kapan', 'bagaimana', 'mengapa',
33
+ 'berapa', 'banyak', 'sedikit', 'semua', 'beberapa', 'banyak', 'sedikit', 'hampir',
34
+ 'hanya', 'sudah', 'belum', 'masih', 'lagi', 'selalu', 'kadang', 'sering', 'jarang',
35
+ 'pernah', 'belum', 'sudah', 'akan', 'sedang', 'telah', 'baru', 'lama', 'cepat',
36
+ 'lambat', 'besar', 'kecil', 'panjang', 'pendek', 'tinggi', 'rendah', 'lebar', 'sempit',
37
+ 'tebal', 'tipis', 'berat', 'ringan', 'kuat', 'lemah', 'baik', 'buruk', 'benar', 'salah',
38
+ 'cantik', 'jelek', 'indah', 'buruk', 'bagus', 'jelek', 'suka', 'tidak', 'bukan',
39
+ 'jangan', 'harus', 'boleh', 'bisa', 'mampu', 'dapat', 'mau', 'ingin', 'perlu', 'penting',
40
+ // Additional common Indonesian words
41
+ 'dan', 'atau', 'tapi', 'namun', 'lalu', 'kemudian', 'jadi', 'maka', 'yaitu', 'yakni'
42
+ ]);
43
+ return normalized.filter(word => !stopwords.has(word));
44
+ }
45
+ // Calculate similarity between two token sets
46
+ calculateSimilarity(tokens1, tokens2) {
47
+ if (tokens1.length === 0 || tokens2.length === 0)
48
+ return 0;
49
+ const set1 = new Set(tokens1);
50
+ const set2 = new Set(tokens2);
51
+ // Jaccard similarity: intersection / union
52
+ const intersection = new Set([...set1].filter(x => set2.has(x)));
53
+ const union = new Set([...set1, ...set2]);
54
+ return union.size > 0 ? intersection.size / union.size : 0;
55
+ }
56
+ async upsert(id, text) {
57
+ try {
58
+ // Generate simple vector from text tokens
59
+ const tokens = this.generateTextVector(text);
60
+ // Store tokens as JSON array for better retrieval
61
+ this.db.upsertVectorEmbedding(id, tokens);
62
+ }
63
+ catch (error) {
64
+ console.error("Error upserting vector:", error);
65
+ // Silently fail - vector is optional for search fallback
66
+ }
67
+ }
68
+ async remove(id) {
69
+ // Vectors are automatically removed by CASCADE when memory is deleted
70
+ }
71
+ async search(query, limit) {
72
+ try {
73
+ // Get all memories and compute similarity to query
74
+ const queryTokens = this.generateTextVector(query);
75
+ if (queryTokens.length === 0) {
76
+ return [];
77
+ }
78
+ // For now, return empty - we'll use similarity search in SQLite instead
79
+ // In production, you could implement approximate nearest neighbor search here
80
+ return [];
81
+ }
82
+ catch (error) {
83
+ console.error("Error searching vectors:", error);
84
+ return [];
85
+ }
86
+ }
87
+ }
88
+ //# sourceMappingURL=vectors.stub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectors.stub.js","sourceRoot":"","sources":["../../src/storage/vectors.stub.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,15 @@
1
1
  {
2
2
  "name": "@vheins/local-memory-mcp",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "MCP Local Memory Service for coding copilot agents",
5
5
  "type": "module",
6
6
  "main": "dist/server.js",
7
+ "bin": {
8
+ "local-memory-mcp": "dist/server.js",
9
+ "mcp-memory-dashboard": "dist/dashboard/server.js"
10
+ },
11
+ "author": "Muhammad Rheza Alfin <m.rheza.alfin@gmail.com>",
12
+ "license": "MIT",
7
13
  "scripts": {
8
14
  "build": "tsc && mkdir -p dist/dashboard/public && rsync -a --delete src/dashboard/public/ dist/dashboard/public/",
9
15
  "dev": "tsc --watch",
@@ -13,14 +19,6 @@
13
19
  "test": "vitest --run",
14
20
  "test:watch": "vitest"
15
21
  },
16
- "keywords": [
17
- "mcp",
18
- "memory",
19
- "ai",
20
- "coding-copilot"
21
- ],
22
- "author": "",
23
- "license": "MIT",
24
22
  "dependencies": {
25
23
  "better-sqlite3": "^12.6.2",
26
24
  "express": "^5.2.1",