@memextend/cursor 0.2.0 → 0.3.2
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/dist/cli/capture.cjs +93 -76
- package/dist/cli/capture.js +4 -4
- package/dist/cli/capture.js.map +1 -1
- package/dist/cli/inject.cjs +98 -81
- package/dist/cli/inject.js +4 -4
- package/dist/cli/inject.js.map +1 -1
- package/dist/index.d.ts +1 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.cjs +107 -90
- package/dist/mcp/server.js +13 -13
- package/dist/mcp/server.js.map +1 -1
- package/package.json +2 -2
- package/scripts/build-cli.js +9 -1
- package/scripts/build-mcp.js +9 -1
package/dist/cli/capture.cjs
CHANGED
|
@@ -38,6 +38,7 @@ var SQLiteStorage = class {
|
|
|
38
38
|
constructor(dbPath) {
|
|
39
39
|
this.db = new import_better_sqlite3.default(dbPath);
|
|
40
40
|
this.db.pragma("journal_mode = WAL");
|
|
41
|
+
this.db.pragma("busy_timeout = 5000");
|
|
41
42
|
this.initialize();
|
|
42
43
|
}
|
|
43
44
|
initialize() {
|
|
@@ -391,122 +392,138 @@ var SQLiteStorage = class {
|
|
|
391
392
|
};
|
|
392
393
|
}
|
|
393
394
|
close() {
|
|
395
|
+
try {
|
|
396
|
+
this.db.pragma("wal_checkpoint(TRUNCATE)");
|
|
397
|
+
} catch {
|
|
398
|
+
}
|
|
394
399
|
this.db.close();
|
|
395
400
|
}
|
|
396
401
|
};
|
|
397
402
|
|
|
398
|
-
// ../../core/dist/storage/
|
|
399
|
-
var
|
|
400
|
-
var
|
|
403
|
+
// ../../core/dist/storage/sqlite-vec.js
|
|
404
|
+
var import_better_sqlite32 = __toESM(require("better-sqlite3"), 1);
|
|
405
|
+
var sqliteVec = __toESM(require("sqlite-vec"), 1);
|
|
406
|
+
var SQLiteVecStorage = class _SQLiteVecStorage {
|
|
401
407
|
db;
|
|
402
|
-
|
|
403
|
-
tableName = "memories";
|
|
408
|
+
tableName = "memory_vectors";
|
|
404
409
|
dimensions = 384;
|
|
405
410
|
constructor(db) {
|
|
406
411
|
this.db = db;
|
|
407
412
|
}
|
|
408
413
|
static async create(dbPath) {
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
414
|
+
let actualPath = dbPath;
|
|
415
|
+
if (dbPath.endsWith("vectors") || dbPath.endsWith("vectors/")) {
|
|
416
|
+
actualPath = dbPath.replace(/\/?$/, ".db");
|
|
417
|
+
}
|
|
418
|
+
const db = new import_better_sqlite32.default(actualPath);
|
|
419
|
+
sqliteVec.load(db);
|
|
420
|
+
db.pragma("journal_mode = WAL");
|
|
421
|
+
db.pragma("busy_timeout = 5000");
|
|
422
|
+
const storage = new _SQLiteVecStorage(db);
|
|
423
|
+
storage.initialize();
|
|
412
424
|
return storage;
|
|
413
425
|
}
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
426
|
+
initialize() {
|
|
427
|
+
this.db.exec(`
|
|
428
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS ${this.tableName} USING vec0(
|
|
429
|
+
id TEXT PRIMARY KEY,
|
|
430
|
+
vector FLOAT[${this.dimensions}]
|
|
431
|
+
)
|
|
432
|
+
`);
|
|
419
433
|
}
|
|
420
434
|
async insertVector(id, vector) {
|
|
421
435
|
if (vector.length !== this.dimensions) {
|
|
422
436
|
throw new Error(`Vector must have ${this.dimensions} dimensions, got ${vector.length}`);
|
|
423
437
|
}
|
|
424
|
-
const
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
438
|
+
const float32 = new Float32Array(vector);
|
|
439
|
+
const vectorBuffer = Buffer.from(float32.buffer);
|
|
440
|
+
const stmt = this.db.prepare(`
|
|
441
|
+
INSERT OR REPLACE INTO ${this.tableName} (id, vector)
|
|
442
|
+
VALUES (?, ?)
|
|
443
|
+
`);
|
|
444
|
+
stmt.run(id, vectorBuffer);
|
|
431
445
|
}
|
|
432
446
|
async insertVectors(items) {
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
447
|
+
const stmt = this.db.prepare(`
|
|
448
|
+
INSERT OR REPLACE INTO ${this.tableName} (id, vector)
|
|
449
|
+
VALUES (?, ?)
|
|
450
|
+
`);
|
|
451
|
+
const insertMany = this.db.transaction((items2) => {
|
|
452
|
+
for (const item of items2) {
|
|
453
|
+
if (item.vector.length !== this.dimensions) {
|
|
454
|
+
throw new Error(`Vector must have ${this.dimensions} dimensions, got ${item.vector.length}`);
|
|
455
|
+
}
|
|
456
|
+
const float32 = new Float32Array(item.vector);
|
|
457
|
+
const vectorBuffer = Buffer.from(float32.buffer);
|
|
458
|
+
stmt.run(item.id, vectorBuffer);
|
|
436
459
|
}
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
this.table = await this.db.createTable(this.tableName, items);
|
|
440
|
-
} else {
|
|
441
|
-
await this.table.add(items);
|
|
442
|
-
}
|
|
443
|
-
await this.optimize();
|
|
460
|
+
});
|
|
461
|
+
insertMany(items);
|
|
444
462
|
}
|
|
445
463
|
async search(vector, limit = 10) {
|
|
446
|
-
if (
|
|
464
|
+
if (vector.length !== this.dimensions) {
|
|
465
|
+
throw new Error(`Query vector must have ${this.dimensions} dimensions, got ${vector.length}`);
|
|
466
|
+
}
|
|
467
|
+
const count = await this.getVectorCount();
|
|
468
|
+
if (count === 0) {
|
|
447
469
|
return [];
|
|
448
470
|
}
|
|
449
471
|
const effectiveLimit = limit > 0 ? limit : 100;
|
|
450
|
-
const
|
|
451
|
-
|
|
472
|
+
const float32 = new Float32Array(vector);
|
|
473
|
+
const vectorBuffer = Buffer.from(float32.buffer);
|
|
474
|
+
const stmt = this.db.prepare(`
|
|
475
|
+
SELECT id, distance
|
|
476
|
+
FROM ${this.tableName}
|
|
477
|
+
WHERE vector MATCH ?
|
|
478
|
+
AND k = ?
|
|
479
|
+
ORDER BY distance
|
|
480
|
+
`);
|
|
481
|
+
const rows = stmt.all(vectorBuffer, effectiveLimit);
|
|
482
|
+
return rows.map((row) => ({
|
|
452
483
|
id: row.id,
|
|
453
|
-
score: 1
|
|
454
|
-
// Convert distance to similarity
|
|
484
|
+
score: 1 / (1 + row.distance)
|
|
455
485
|
}));
|
|
456
486
|
}
|
|
457
487
|
async deleteVector(id) {
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
const sanitizedId = id.replace(/'/g, "''");
|
|
461
|
-
await this.table.delete(`id = '${sanitizedId}'`);
|
|
488
|
+
const stmt = this.db.prepare(`DELETE FROM ${this.tableName} WHERE id = ?`);
|
|
489
|
+
stmt.run(id);
|
|
462
490
|
}
|
|
463
491
|
async getVectorCount() {
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
return
|
|
492
|
+
const stmt = this.db.prepare(`SELECT COUNT(*) as count FROM ${this.tableName}`);
|
|
493
|
+
const result = stmt.get();
|
|
494
|
+
return result.count;
|
|
467
495
|
}
|
|
468
496
|
async getVectorsByIds(ids) {
|
|
469
497
|
const result = /* @__PURE__ */ new Map();
|
|
470
|
-
if (
|
|
498
|
+
if (ids.length === 0)
|
|
471
499
|
return result;
|
|
472
500
|
const BATCH_SIZE = 100;
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
501
|
+
for (let i = 0; i < ids.length; i += BATCH_SIZE) {
|
|
502
|
+
const batch = ids.slice(i, i + BATCH_SIZE);
|
|
503
|
+
const placeholders = batch.map(() => "?").join(",");
|
|
504
|
+
const stmt = this.db.prepare(`
|
|
505
|
+
SELECT id, vector FROM ${this.tableName}
|
|
506
|
+
WHERE id IN (${placeholders})
|
|
507
|
+
`);
|
|
508
|
+
const rows = stmt.all(...batch);
|
|
509
|
+
for (const row of rows) {
|
|
510
|
+
const vector = Array.from(new Float32Array(row.vector));
|
|
511
|
+
result.set(row.id, vector);
|
|
482
512
|
}
|
|
483
|
-
} catch {
|
|
484
513
|
}
|
|
485
514
|
return result;
|
|
486
515
|
}
|
|
487
516
|
async close() {
|
|
488
|
-
}
|
|
489
|
-
/**
|
|
490
|
-
* Optimize the LanceDB table to reduce storage.
|
|
491
|
-
* This compacts files, prunes old versions, and optimizes indices.
|
|
492
|
-
* Should be called periodically (e.g., after many inserts or on cleanup command).
|
|
493
|
-
*
|
|
494
|
-
* @param cleanupOlderThan - Date before which old versions should be pruned (default: now)
|
|
495
|
-
*/
|
|
496
|
-
async optimize(cleanupOlderThan) {
|
|
497
|
-
if (!this.table)
|
|
498
|
-
return null;
|
|
499
517
|
try {
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
return {
|
|
503
|
-
compacted: stats?.compaction?.filesRemoved ?? 0,
|
|
504
|
-
pruned: stats?.prune?.versionsRemoved ?? 0
|
|
505
|
-
};
|
|
506
|
-
} catch (error) {
|
|
507
|
-
console.error("[memextend] LanceDB optimize failed:", error);
|
|
508
|
-
return null;
|
|
518
|
+
this.db.pragma("wal_checkpoint(TRUNCATE)");
|
|
519
|
+
} catch {
|
|
509
520
|
}
|
|
521
|
+
this.db.close();
|
|
522
|
+
}
|
|
523
|
+
// No optimize needed - SQLite handles this automatically!
|
|
524
|
+
async optimize() {
|
|
525
|
+
this.db.exec("VACUUM");
|
|
526
|
+
return { compacted: 0, pruned: 0 };
|
|
510
527
|
}
|
|
511
528
|
};
|
|
512
529
|
|
|
@@ -780,7 +797,7 @@ async function main() {
|
|
|
780
797
|
const workspace = options.workspace ? (0, import_path2.resolve)(options.workspace) : process.cwd();
|
|
781
798
|
const projectId = getProjectId2(workspace);
|
|
782
799
|
const sqlite = new SQLiteStorage(DB_PATH);
|
|
783
|
-
const
|
|
800
|
+
const vectorStore = await SQLiteVecStorage.create(VECTORS_PATH);
|
|
784
801
|
const embedder = await createEmbedFunction(MODELS_PATH);
|
|
785
802
|
try {
|
|
786
803
|
const project = sqlite.getProject(projectId);
|
|
@@ -805,7 +822,7 @@ async function main() {
|
|
|
805
822
|
};
|
|
806
823
|
sqlite.insertMemory(memory);
|
|
807
824
|
const vector = await embedder.embed(content);
|
|
808
|
-
await
|
|
825
|
+
await vectorStore.insertVector(memoryId, vector);
|
|
809
826
|
if (!options.quiet) {
|
|
810
827
|
console.log(`Memory captured successfully!`);
|
|
811
828
|
console.log(` ID: ${memoryId}`);
|
|
@@ -815,7 +832,7 @@ async function main() {
|
|
|
815
832
|
}
|
|
816
833
|
} finally {
|
|
817
834
|
sqlite.close();
|
|
818
|
-
await
|
|
835
|
+
await vectorStore.close();
|
|
819
836
|
await embedder.close();
|
|
820
837
|
}
|
|
821
838
|
}
|
package/dist/cli/capture.js
CHANGED
|
@@ -21,7 +21,7 @@ import { readFile } from 'fs/promises';
|
|
|
21
21
|
import { join, basename, resolve } from 'path';
|
|
22
22
|
import { homedir } from 'os';
|
|
23
23
|
import { execSync } from 'child_process';
|
|
24
|
-
import { SQLiteStorage,
|
|
24
|
+
import { SQLiteStorage, SQLiteVecStorage, createEmbedFunction } from '@memextend/core';
|
|
25
25
|
const MEMEXTEND_DIR = join(homedir(), '.memextend');
|
|
26
26
|
const DB_PATH = join(MEMEXTEND_DIR, 'memextend.db');
|
|
27
27
|
const VECTORS_PATH = join(MEMEXTEND_DIR, 'vectors');
|
|
@@ -170,7 +170,7 @@ async function main() {
|
|
|
170
170
|
const projectId = getProjectId(workspace);
|
|
171
171
|
// Initialize storage
|
|
172
172
|
const sqlite = new SQLiteStorage(DB_PATH);
|
|
173
|
-
const
|
|
173
|
+
const vectorStore = await SQLiteVecStorage.create(VECTORS_PATH);
|
|
174
174
|
const embedder = await createEmbedFunction(MODELS_PATH);
|
|
175
175
|
try {
|
|
176
176
|
// Ensure project is registered
|
|
@@ -199,7 +199,7 @@ async function main() {
|
|
|
199
199
|
sqlite.insertMemory(memory);
|
|
200
200
|
// Generate and store embedding
|
|
201
201
|
const vector = await embedder.embed(content);
|
|
202
|
-
await
|
|
202
|
+
await vectorStore.insertVector(memoryId, vector);
|
|
203
203
|
if (!options.quiet) {
|
|
204
204
|
console.log(`Memory captured successfully!`);
|
|
205
205
|
console.log(` ID: ${memoryId}`);
|
|
@@ -211,7 +211,7 @@ async function main() {
|
|
|
211
211
|
finally {
|
|
212
212
|
// Cleanup
|
|
213
213
|
sqlite.close();
|
|
214
|
-
await
|
|
214
|
+
await vectorStore.close();
|
|
215
215
|
await embedder.close();
|
|
216
216
|
}
|
|
217
217
|
}
|
package/dist/cli/capture.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/cli/capture.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,8CAA8C;AAE9C;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EACL,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/cli/capture.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/inject.cjs
CHANGED
|
@@ -37,6 +37,7 @@ var SQLiteStorage = class {
|
|
|
37
37
|
constructor(dbPath) {
|
|
38
38
|
this.db = new import_better_sqlite3.default(dbPath);
|
|
39
39
|
this.db.pragma("journal_mode = WAL");
|
|
40
|
+
this.db.pragma("busy_timeout = 5000");
|
|
40
41
|
this.initialize();
|
|
41
42
|
}
|
|
42
43
|
initialize() {
|
|
@@ -390,122 +391,138 @@ var SQLiteStorage = class {
|
|
|
390
391
|
};
|
|
391
392
|
}
|
|
392
393
|
close() {
|
|
394
|
+
try {
|
|
395
|
+
this.db.pragma("wal_checkpoint(TRUNCATE)");
|
|
396
|
+
} catch {
|
|
397
|
+
}
|
|
393
398
|
this.db.close();
|
|
394
399
|
}
|
|
395
400
|
};
|
|
396
401
|
|
|
397
|
-
// ../../core/dist/storage/
|
|
398
|
-
var
|
|
399
|
-
var
|
|
402
|
+
// ../../core/dist/storage/sqlite-vec.js
|
|
403
|
+
var import_better_sqlite32 = __toESM(require("better-sqlite3"), 1);
|
|
404
|
+
var sqliteVec = __toESM(require("sqlite-vec"), 1);
|
|
405
|
+
var SQLiteVecStorage = class _SQLiteVecStorage {
|
|
400
406
|
db;
|
|
401
|
-
|
|
402
|
-
tableName = "memories";
|
|
407
|
+
tableName = "memory_vectors";
|
|
403
408
|
dimensions = 384;
|
|
404
409
|
constructor(db) {
|
|
405
410
|
this.db = db;
|
|
406
411
|
}
|
|
407
412
|
static async create(dbPath) {
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
413
|
+
let actualPath = dbPath;
|
|
414
|
+
if (dbPath.endsWith("vectors") || dbPath.endsWith("vectors/")) {
|
|
415
|
+
actualPath = dbPath.replace(/\/?$/, ".db");
|
|
416
|
+
}
|
|
417
|
+
const db = new import_better_sqlite32.default(actualPath);
|
|
418
|
+
sqliteVec.load(db);
|
|
419
|
+
db.pragma("journal_mode = WAL");
|
|
420
|
+
db.pragma("busy_timeout = 5000");
|
|
421
|
+
const storage = new _SQLiteVecStorage(db);
|
|
422
|
+
storage.initialize();
|
|
411
423
|
return storage;
|
|
412
424
|
}
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
425
|
+
initialize() {
|
|
426
|
+
this.db.exec(`
|
|
427
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS ${this.tableName} USING vec0(
|
|
428
|
+
id TEXT PRIMARY KEY,
|
|
429
|
+
vector FLOAT[${this.dimensions}]
|
|
430
|
+
)
|
|
431
|
+
`);
|
|
418
432
|
}
|
|
419
433
|
async insertVector(id, vector) {
|
|
420
434
|
if (vector.length !== this.dimensions) {
|
|
421
435
|
throw new Error(`Vector must have ${this.dimensions} dimensions, got ${vector.length}`);
|
|
422
436
|
}
|
|
423
|
-
const
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
437
|
+
const float32 = new Float32Array(vector);
|
|
438
|
+
const vectorBuffer = Buffer.from(float32.buffer);
|
|
439
|
+
const stmt = this.db.prepare(`
|
|
440
|
+
INSERT OR REPLACE INTO ${this.tableName} (id, vector)
|
|
441
|
+
VALUES (?, ?)
|
|
442
|
+
`);
|
|
443
|
+
stmt.run(id, vectorBuffer);
|
|
430
444
|
}
|
|
431
445
|
async insertVectors(items) {
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
446
|
+
const stmt = this.db.prepare(`
|
|
447
|
+
INSERT OR REPLACE INTO ${this.tableName} (id, vector)
|
|
448
|
+
VALUES (?, ?)
|
|
449
|
+
`);
|
|
450
|
+
const insertMany = this.db.transaction((items2) => {
|
|
451
|
+
for (const item of items2) {
|
|
452
|
+
if (item.vector.length !== this.dimensions) {
|
|
453
|
+
throw new Error(`Vector must have ${this.dimensions} dimensions, got ${item.vector.length}`);
|
|
454
|
+
}
|
|
455
|
+
const float32 = new Float32Array(item.vector);
|
|
456
|
+
const vectorBuffer = Buffer.from(float32.buffer);
|
|
457
|
+
stmt.run(item.id, vectorBuffer);
|
|
435
458
|
}
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
this.table = await this.db.createTable(this.tableName, items);
|
|
439
|
-
} else {
|
|
440
|
-
await this.table.add(items);
|
|
441
|
-
}
|
|
442
|
-
await this.optimize();
|
|
459
|
+
});
|
|
460
|
+
insertMany(items);
|
|
443
461
|
}
|
|
444
462
|
async search(vector, limit = 10) {
|
|
445
|
-
if (
|
|
463
|
+
if (vector.length !== this.dimensions) {
|
|
464
|
+
throw new Error(`Query vector must have ${this.dimensions} dimensions, got ${vector.length}`);
|
|
465
|
+
}
|
|
466
|
+
const count = await this.getVectorCount();
|
|
467
|
+
if (count === 0) {
|
|
446
468
|
return [];
|
|
447
469
|
}
|
|
448
470
|
const effectiveLimit = limit > 0 ? limit : 100;
|
|
449
|
-
const
|
|
450
|
-
|
|
471
|
+
const float32 = new Float32Array(vector);
|
|
472
|
+
const vectorBuffer = Buffer.from(float32.buffer);
|
|
473
|
+
const stmt = this.db.prepare(`
|
|
474
|
+
SELECT id, distance
|
|
475
|
+
FROM ${this.tableName}
|
|
476
|
+
WHERE vector MATCH ?
|
|
477
|
+
AND k = ?
|
|
478
|
+
ORDER BY distance
|
|
479
|
+
`);
|
|
480
|
+
const rows = stmt.all(vectorBuffer, effectiveLimit);
|
|
481
|
+
return rows.map((row) => ({
|
|
451
482
|
id: row.id,
|
|
452
|
-
score: 1
|
|
453
|
-
// Convert distance to similarity
|
|
483
|
+
score: 1 / (1 + row.distance)
|
|
454
484
|
}));
|
|
455
485
|
}
|
|
456
486
|
async deleteVector(id) {
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
const sanitizedId = id.replace(/'/g, "''");
|
|
460
|
-
await this.table.delete(`id = '${sanitizedId}'`);
|
|
487
|
+
const stmt = this.db.prepare(`DELETE FROM ${this.tableName} WHERE id = ?`);
|
|
488
|
+
stmt.run(id);
|
|
461
489
|
}
|
|
462
490
|
async getVectorCount() {
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
return
|
|
491
|
+
const stmt = this.db.prepare(`SELECT COUNT(*) as count FROM ${this.tableName}`);
|
|
492
|
+
const result = stmt.get();
|
|
493
|
+
return result.count;
|
|
466
494
|
}
|
|
467
495
|
async getVectorsByIds(ids) {
|
|
468
496
|
const result = /* @__PURE__ */ new Map();
|
|
469
|
-
if (
|
|
497
|
+
if (ids.length === 0)
|
|
470
498
|
return result;
|
|
471
499
|
const BATCH_SIZE = 100;
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
500
|
+
for (let i = 0; i < ids.length; i += BATCH_SIZE) {
|
|
501
|
+
const batch = ids.slice(i, i + BATCH_SIZE);
|
|
502
|
+
const placeholders = batch.map(() => "?").join(",");
|
|
503
|
+
const stmt = this.db.prepare(`
|
|
504
|
+
SELECT id, vector FROM ${this.tableName}
|
|
505
|
+
WHERE id IN (${placeholders})
|
|
506
|
+
`);
|
|
507
|
+
const rows = stmt.all(...batch);
|
|
508
|
+
for (const row of rows) {
|
|
509
|
+
const vector = Array.from(new Float32Array(row.vector));
|
|
510
|
+
result.set(row.id, vector);
|
|
481
511
|
}
|
|
482
|
-
} catch {
|
|
483
512
|
}
|
|
484
513
|
return result;
|
|
485
514
|
}
|
|
486
515
|
async close() {
|
|
487
|
-
}
|
|
488
|
-
/**
|
|
489
|
-
* Optimize the LanceDB table to reduce storage.
|
|
490
|
-
* This compacts files, prunes old versions, and optimizes indices.
|
|
491
|
-
* Should be called periodically (e.g., after many inserts or on cleanup command).
|
|
492
|
-
*
|
|
493
|
-
* @param cleanupOlderThan - Date before which old versions should be pruned (default: now)
|
|
494
|
-
*/
|
|
495
|
-
async optimize(cleanupOlderThan) {
|
|
496
|
-
if (!this.table)
|
|
497
|
-
return null;
|
|
498
516
|
try {
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
return {
|
|
502
|
-
compacted: stats?.compaction?.filesRemoved ?? 0,
|
|
503
|
-
pruned: stats?.prune?.versionsRemoved ?? 0
|
|
504
|
-
};
|
|
505
|
-
} catch (error) {
|
|
506
|
-
console.error("[memextend] LanceDB optimize failed:", error);
|
|
507
|
-
return null;
|
|
517
|
+
this.db.pragma("wal_checkpoint(TRUNCATE)");
|
|
518
|
+
} catch {
|
|
508
519
|
}
|
|
520
|
+
this.db.close();
|
|
521
|
+
}
|
|
522
|
+
// No optimize needed - SQLite handles this automatically!
|
|
523
|
+
async optimize() {
|
|
524
|
+
this.db.exec("VACUUM");
|
|
525
|
+
return { compacted: 0, pruned: 0 };
|
|
509
526
|
}
|
|
510
527
|
};
|
|
511
528
|
|
|
@@ -641,12 +658,12 @@ async function createEmbedFunction(modelsDir) {
|
|
|
641
658
|
// ../../core/dist/memory/retrieve.js
|
|
642
659
|
var MemoryRetriever = class {
|
|
643
660
|
sqlite;
|
|
644
|
-
|
|
661
|
+
vectorStore;
|
|
645
662
|
embed;
|
|
646
663
|
options;
|
|
647
|
-
constructor(sqlite,
|
|
664
|
+
constructor(sqlite, vectorStore, embed, options = {}) {
|
|
648
665
|
this.sqlite = sqlite;
|
|
649
|
-
this.
|
|
666
|
+
this.vectorStore = vectorStore;
|
|
650
667
|
this.embed = embed;
|
|
651
668
|
this.options = {
|
|
652
669
|
defaultLimit: options.defaultLimit ?? 0,
|
|
@@ -664,12 +681,12 @@ var MemoryRetriever = class {
|
|
|
664
681
|
return this.sqlite.searchFTS(query, limit);
|
|
665
682
|
}
|
|
666
683
|
/**
|
|
667
|
-
* Vector similarity search
|
|
684
|
+
* Vector similarity search
|
|
668
685
|
*/
|
|
669
686
|
async vectorSearch(query, options = {}) {
|
|
670
687
|
const limit = options.limit ?? this.options.defaultLimit;
|
|
671
688
|
const queryVector = await this.embed(query);
|
|
672
|
-
const vectorResults = await this.
|
|
689
|
+
const vectorResults = await this.vectorStore.search(queryVector, limit * 2);
|
|
673
690
|
const results = [];
|
|
674
691
|
for (const vr of vectorResults) {
|
|
675
692
|
const memory = this.sqlite.getMemory(vr.id);
|
|
@@ -972,10 +989,10 @@ async function main() {
|
|
|
972
989
|
const workspace = options.workspace ? (0, import_path2.resolve)(options.workspace) : process.cwd();
|
|
973
990
|
const projectId = getProjectId2(workspace);
|
|
974
991
|
const sqlite = new SQLiteStorage(DB_PATH);
|
|
975
|
-
const
|
|
992
|
+
const vectorStore = await SQLiteVecStorage.create(VECTORS_PATH);
|
|
976
993
|
const embedder = await createEmbedFunction(MODELS_PATH);
|
|
977
994
|
try {
|
|
978
|
-
const retriever = new MemoryRetriever(sqlite,
|
|
995
|
+
const retriever = new MemoryRetriever(sqlite, vectorStore, embedder.embedQuery, {
|
|
979
996
|
defaultLimit: options.limit ?? 0,
|
|
980
997
|
defaultRecentDays: options.days ?? 0
|
|
981
998
|
});
|
|
@@ -1037,7 +1054,7 @@ No memories found. This might be a new project.
|
|
|
1037
1054
|
console.log(output);
|
|
1038
1055
|
} finally {
|
|
1039
1056
|
sqlite.close();
|
|
1040
|
-
await
|
|
1057
|
+
await vectorStore.close();
|
|
1041
1058
|
await embedder.close();
|
|
1042
1059
|
}
|
|
1043
1060
|
}
|
package/dist/cli/inject.js
CHANGED
|
@@ -21,7 +21,7 @@ import { existsSync } from 'fs';
|
|
|
21
21
|
import { join, basename, resolve } from 'path';
|
|
22
22
|
import { homedir } from 'os';
|
|
23
23
|
import { execSync } from 'child_process';
|
|
24
|
-
import { SQLiteStorage,
|
|
24
|
+
import { SQLiteStorage, SQLiteVecStorage, MemoryRetriever, createEmbedFunction, formatContextForInjection } from '@memextend/core';
|
|
25
25
|
const MEMEXTEND_DIR = join(homedir(), '.memextend');
|
|
26
26
|
const DB_PATH = join(MEMEXTEND_DIR, 'memextend.db');
|
|
27
27
|
const VECTORS_PATH = join(MEMEXTEND_DIR, 'vectors');
|
|
@@ -165,10 +165,10 @@ async function main() {
|
|
|
165
165
|
const projectId = getProjectId(workspace);
|
|
166
166
|
// Initialize storage
|
|
167
167
|
const sqlite = new SQLiteStorage(DB_PATH);
|
|
168
|
-
const
|
|
168
|
+
const vectorStore = await SQLiteVecStorage.create(VECTORS_PATH);
|
|
169
169
|
const embedder = await createEmbedFunction(MODELS_PATH);
|
|
170
170
|
try {
|
|
171
|
-
const retriever = new MemoryRetriever(sqlite,
|
|
171
|
+
const retriever = new MemoryRetriever(sqlite, vectorStore, embedder.embedQuery, {
|
|
172
172
|
defaultLimit: options.limit ?? 0,
|
|
173
173
|
defaultRecentDays: options.days ?? 0,
|
|
174
174
|
});
|
|
@@ -237,7 +237,7 @@ async function main() {
|
|
|
237
237
|
finally {
|
|
238
238
|
// Cleanup
|
|
239
239
|
sqlite.close();
|
|
240
|
-
await
|
|
240
|
+
await vectorStore.close();
|
|
241
241
|
await embedder.close();
|
|
242
242
|
}
|
|
243
243
|
}
|
package/dist/cli/inject.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/cli/inject.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,8CAA8C;AAE9C;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EACL,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/cli/inject.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,18 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cursor Adapter for memextend
|
|
3
|
-
*
|
|
4
|
-
* This adapter provides memextend integration for Cursor IDE through:
|
|
5
|
-
* 1. MCP server - for mid-session memory operations (search, save)
|
|
6
|
-
* 2. CLI tools - for session capture and context injection
|
|
7
|
-
*
|
|
8
|
-
* Unlike Claude Code which has native hooks, Cursor requires a different approach:
|
|
9
|
-
* - MCP server provides tools that Claude/AI can use during sessions
|
|
10
|
-
* - CLI tools allow manual or scripted session capture/injection
|
|
11
|
-
*
|
|
12
|
-
* See README.md for setup instructions.
|
|
13
|
-
*/
|
|
14
1
|
export declare const ADAPTER_NAME = "cursor";
|
|
15
|
-
export declare const ADAPTER_VERSION
|
|
2
|
+
export declare const ADAPTER_VERSION: any;
|
|
16
3
|
export declare const ADAPTER_STATUS = "beta";
|
|
17
4
|
export * from './mcp/index.js';
|
|
18
5
|
export * from './cli/index.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,YAAY,WAAW,CAAC;AACrC,eAAO,MAAM,eAAe,KAAc,CAAC;AAC3C,eAAO,MAAM,cAAc,SAAS,CAAC;AAErC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
// @memextend/cursor
|
|
2
2
|
// Copyright (c) 2026 ZodTTD LLC. MIT License.
|
|
3
|
+
import { readFileSync } from 'fs';
|
|
4
|
+
import { dirname, join } from 'path';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
3
6
|
/**
|
|
4
7
|
* Cursor Adapter for memextend
|
|
5
8
|
*
|
|
@@ -13,8 +16,11 @@
|
|
|
13
16
|
*
|
|
14
17
|
* See README.md for setup instructions.
|
|
15
18
|
*/
|
|
19
|
+
// Read version from package.json
|
|
20
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
21
|
+
const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
|
|
16
22
|
export const ADAPTER_NAME = 'cursor';
|
|
17
|
-
export const ADAPTER_VERSION =
|
|
23
|
+
export const ADAPTER_VERSION = pkg.version;
|
|
18
24
|
export const ADAPTER_STATUS = 'beta';
|
|
19
25
|
export * from './mcp/index.js';
|
|
20
26
|
export * from './cli/index.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,8CAA8C;AAE9C;;;;;;;;;;;;GAYG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,8CAA8C;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC;;;;;;;;;;;;GAYG;AAEH,iCAAiC;AACjC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAErF,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC,OAAO,CAAC;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AAErC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC"}
|
package/dist/mcp/server.cjs
CHANGED
|
@@ -13730,6 +13730,7 @@ var SQLiteStorage = class {
|
|
|
13730
13730
|
constructor(dbPath) {
|
|
13731
13731
|
this.db = new import_better_sqlite3.default(dbPath);
|
|
13732
13732
|
this.db.pragma("journal_mode = WAL");
|
|
13733
|
+
this.db.pragma("busy_timeout = 5000");
|
|
13733
13734
|
this.initialize();
|
|
13734
13735
|
}
|
|
13735
13736
|
initialize() {
|
|
@@ -14083,122 +14084,138 @@ var SQLiteStorage = class {
|
|
|
14083
14084
|
};
|
|
14084
14085
|
}
|
|
14085
14086
|
close() {
|
|
14087
|
+
try {
|
|
14088
|
+
this.db.pragma("wal_checkpoint(TRUNCATE)");
|
|
14089
|
+
} catch {
|
|
14090
|
+
}
|
|
14086
14091
|
this.db.close();
|
|
14087
14092
|
}
|
|
14088
14093
|
};
|
|
14089
14094
|
|
|
14090
|
-
// ../../core/dist/storage/
|
|
14091
|
-
var
|
|
14092
|
-
var
|
|
14095
|
+
// ../../core/dist/storage/sqlite-vec.js
|
|
14096
|
+
var import_better_sqlite32 = __toESM(require("better-sqlite3"), 1);
|
|
14097
|
+
var sqliteVec = __toESM(require("sqlite-vec"), 1);
|
|
14098
|
+
var SQLiteVecStorage = class _SQLiteVecStorage {
|
|
14093
14099
|
db;
|
|
14094
|
-
|
|
14095
|
-
tableName = "memories";
|
|
14100
|
+
tableName = "memory_vectors";
|
|
14096
14101
|
dimensions = 384;
|
|
14097
14102
|
constructor(db) {
|
|
14098
14103
|
this.db = db;
|
|
14099
14104
|
}
|
|
14100
14105
|
static async create(dbPath) {
|
|
14101
|
-
|
|
14102
|
-
|
|
14103
|
-
|
|
14106
|
+
let actualPath = dbPath;
|
|
14107
|
+
if (dbPath.endsWith("vectors") || dbPath.endsWith("vectors/")) {
|
|
14108
|
+
actualPath = dbPath.replace(/\/?$/, ".db");
|
|
14109
|
+
}
|
|
14110
|
+
const db = new import_better_sqlite32.default(actualPath);
|
|
14111
|
+
sqliteVec.load(db);
|
|
14112
|
+
db.pragma("journal_mode = WAL");
|
|
14113
|
+
db.pragma("busy_timeout = 5000");
|
|
14114
|
+
const storage = new _SQLiteVecStorage(db);
|
|
14115
|
+
storage.initialize();
|
|
14104
14116
|
return storage;
|
|
14105
14117
|
}
|
|
14106
|
-
|
|
14107
|
-
|
|
14108
|
-
|
|
14109
|
-
|
|
14110
|
-
|
|
14118
|
+
initialize() {
|
|
14119
|
+
this.db.exec(`
|
|
14120
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS ${this.tableName} USING vec0(
|
|
14121
|
+
id TEXT PRIMARY KEY,
|
|
14122
|
+
vector FLOAT[${this.dimensions}]
|
|
14123
|
+
)
|
|
14124
|
+
`);
|
|
14111
14125
|
}
|
|
14112
14126
|
async insertVector(id, vector) {
|
|
14113
14127
|
if (vector.length !== this.dimensions) {
|
|
14114
14128
|
throw new Error(`Vector must have ${this.dimensions} dimensions, got ${vector.length}`);
|
|
14115
14129
|
}
|
|
14116
|
-
const
|
|
14117
|
-
|
|
14118
|
-
|
|
14119
|
-
|
|
14120
|
-
|
|
14121
|
-
|
|
14122
|
-
|
|
14130
|
+
const float32 = new Float32Array(vector);
|
|
14131
|
+
const vectorBuffer = Buffer.from(float32.buffer);
|
|
14132
|
+
const stmt = this.db.prepare(`
|
|
14133
|
+
INSERT OR REPLACE INTO ${this.tableName} (id, vector)
|
|
14134
|
+
VALUES (?, ?)
|
|
14135
|
+
`);
|
|
14136
|
+
stmt.run(id, vectorBuffer);
|
|
14123
14137
|
}
|
|
14124
14138
|
async insertVectors(items) {
|
|
14125
|
-
|
|
14126
|
-
|
|
14127
|
-
|
|
14139
|
+
const stmt = this.db.prepare(`
|
|
14140
|
+
INSERT OR REPLACE INTO ${this.tableName} (id, vector)
|
|
14141
|
+
VALUES (?, ?)
|
|
14142
|
+
`);
|
|
14143
|
+
const insertMany = this.db.transaction((items2) => {
|
|
14144
|
+
for (const item of items2) {
|
|
14145
|
+
if (item.vector.length !== this.dimensions) {
|
|
14146
|
+
throw new Error(`Vector must have ${this.dimensions} dimensions, got ${item.vector.length}`);
|
|
14147
|
+
}
|
|
14148
|
+
const float32 = new Float32Array(item.vector);
|
|
14149
|
+
const vectorBuffer = Buffer.from(float32.buffer);
|
|
14150
|
+
stmt.run(item.id, vectorBuffer);
|
|
14128
14151
|
}
|
|
14129
|
-
}
|
|
14130
|
-
|
|
14131
|
-
this.table = await this.db.createTable(this.tableName, items);
|
|
14132
|
-
} else {
|
|
14133
|
-
await this.table.add(items);
|
|
14134
|
-
}
|
|
14135
|
-
await this.optimize();
|
|
14152
|
+
});
|
|
14153
|
+
insertMany(items);
|
|
14136
14154
|
}
|
|
14137
14155
|
async search(vector, limit = 10) {
|
|
14138
|
-
if (
|
|
14156
|
+
if (vector.length !== this.dimensions) {
|
|
14157
|
+
throw new Error(`Query vector must have ${this.dimensions} dimensions, got ${vector.length}`);
|
|
14158
|
+
}
|
|
14159
|
+
const count = await this.getVectorCount();
|
|
14160
|
+
if (count === 0) {
|
|
14139
14161
|
return [];
|
|
14140
14162
|
}
|
|
14141
14163
|
const effectiveLimit = limit > 0 ? limit : 100;
|
|
14142
|
-
const
|
|
14143
|
-
|
|
14164
|
+
const float32 = new Float32Array(vector);
|
|
14165
|
+
const vectorBuffer = Buffer.from(float32.buffer);
|
|
14166
|
+
const stmt = this.db.prepare(`
|
|
14167
|
+
SELECT id, distance
|
|
14168
|
+
FROM ${this.tableName}
|
|
14169
|
+
WHERE vector MATCH ?
|
|
14170
|
+
AND k = ?
|
|
14171
|
+
ORDER BY distance
|
|
14172
|
+
`);
|
|
14173
|
+
const rows = stmt.all(vectorBuffer, effectiveLimit);
|
|
14174
|
+
return rows.map((row) => ({
|
|
14144
14175
|
id: row.id,
|
|
14145
|
-
score: 1
|
|
14146
|
-
// Convert distance to similarity
|
|
14176
|
+
score: 1 / (1 + row.distance)
|
|
14147
14177
|
}));
|
|
14148
14178
|
}
|
|
14149
14179
|
async deleteVector(id) {
|
|
14150
|
-
|
|
14151
|
-
|
|
14152
|
-
const sanitizedId = id.replace(/'/g, "''");
|
|
14153
|
-
await this.table.delete(`id = '${sanitizedId}'`);
|
|
14180
|
+
const stmt = this.db.prepare(`DELETE FROM ${this.tableName} WHERE id = ?`);
|
|
14181
|
+
stmt.run(id);
|
|
14154
14182
|
}
|
|
14155
14183
|
async getVectorCount() {
|
|
14156
|
-
|
|
14157
|
-
|
|
14158
|
-
return
|
|
14184
|
+
const stmt = this.db.prepare(`SELECT COUNT(*) as count FROM ${this.tableName}`);
|
|
14185
|
+
const result = stmt.get();
|
|
14186
|
+
return result.count;
|
|
14159
14187
|
}
|
|
14160
14188
|
async getVectorsByIds(ids) {
|
|
14161
14189
|
const result = /* @__PURE__ */ new Map();
|
|
14162
|
-
if (
|
|
14190
|
+
if (ids.length === 0)
|
|
14163
14191
|
return result;
|
|
14164
14192
|
const BATCH_SIZE = 100;
|
|
14165
|
-
|
|
14166
|
-
|
|
14167
|
-
|
|
14168
|
-
|
|
14169
|
-
|
|
14170
|
-
|
|
14171
|
-
|
|
14172
|
-
|
|
14173
|
-
|
|
14193
|
+
for (let i = 0; i < ids.length; i += BATCH_SIZE) {
|
|
14194
|
+
const batch = ids.slice(i, i + BATCH_SIZE);
|
|
14195
|
+
const placeholders = batch.map(() => "?").join(",");
|
|
14196
|
+
const stmt = this.db.prepare(`
|
|
14197
|
+
SELECT id, vector FROM ${this.tableName}
|
|
14198
|
+
WHERE id IN (${placeholders})
|
|
14199
|
+
`);
|
|
14200
|
+
const rows = stmt.all(...batch);
|
|
14201
|
+
for (const row of rows) {
|
|
14202
|
+
const vector = Array.from(new Float32Array(row.vector));
|
|
14203
|
+
result.set(row.id, vector);
|
|
14174
14204
|
}
|
|
14175
|
-
} catch {
|
|
14176
14205
|
}
|
|
14177
14206
|
return result;
|
|
14178
14207
|
}
|
|
14179
14208
|
async close() {
|
|
14180
|
-
}
|
|
14181
|
-
/**
|
|
14182
|
-
* Optimize the LanceDB table to reduce storage.
|
|
14183
|
-
* This compacts files, prunes old versions, and optimizes indices.
|
|
14184
|
-
* Should be called periodically (e.g., after many inserts or on cleanup command).
|
|
14185
|
-
*
|
|
14186
|
-
* @param cleanupOlderThan - Date before which old versions should be pruned (default: now)
|
|
14187
|
-
*/
|
|
14188
|
-
async optimize(cleanupOlderThan) {
|
|
14189
|
-
if (!this.table)
|
|
14190
|
-
return null;
|
|
14191
14209
|
try {
|
|
14192
|
-
|
|
14193
|
-
|
|
14194
|
-
return {
|
|
14195
|
-
compacted: stats?.compaction?.filesRemoved ?? 0,
|
|
14196
|
-
pruned: stats?.prune?.versionsRemoved ?? 0
|
|
14197
|
-
};
|
|
14198
|
-
} catch (error2) {
|
|
14199
|
-
console.error("[memextend] LanceDB optimize failed:", error2);
|
|
14200
|
-
return null;
|
|
14210
|
+
this.db.pragma("wal_checkpoint(TRUNCATE)");
|
|
14211
|
+
} catch {
|
|
14201
14212
|
}
|
|
14213
|
+
this.db.close();
|
|
14214
|
+
}
|
|
14215
|
+
// No optimize needed - SQLite handles this automatically!
|
|
14216
|
+
async optimize() {
|
|
14217
|
+
this.db.exec("VACUUM");
|
|
14218
|
+
return { compacted: 0, pruned: 0 };
|
|
14202
14219
|
}
|
|
14203
14220
|
};
|
|
14204
14221
|
|
|
@@ -14334,12 +14351,12 @@ async function createEmbedFunction(modelsDir) {
|
|
|
14334
14351
|
// ../../core/dist/memory/retrieve.js
|
|
14335
14352
|
var MemoryRetriever = class {
|
|
14336
14353
|
sqlite;
|
|
14337
|
-
|
|
14354
|
+
vectorStore;
|
|
14338
14355
|
embed;
|
|
14339
14356
|
options;
|
|
14340
|
-
constructor(sqlite2,
|
|
14357
|
+
constructor(sqlite2, vectorStore2, embed, options = {}) {
|
|
14341
14358
|
this.sqlite = sqlite2;
|
|
14342
|
-
this.
|
|
14359
|
+
this.vectorStore = vectorStore2;
|
|
14343
14360
|
this.embed = embed;
|
|
14344
14361
|
this.options = {
|
|
14345
14362
|
defaultLimit: options.defaultLimit ?? 0,
|
|
@@ -14357,12 +14374,12 @@ var MemoryRetriever = class {
|
|
|
14357
14374
|
return this.sqlite.searchFTS(query, limit);
|
|
14358
14375
|
}
|
|
14359
14376
|
/**
|
|
14360
|
-
* Vector similarity search
|
|
14377
|
+
* Vector similarity search
|
|
14361
14378
|
*/
|
|
14362
14379
|
async vectorSearch(query, options = {}) {
|
|
14363
14380
|
const limit = options.limit ?? this.options.defaultLimit;
|
|
14364
14381
|
const queryVector = await this.embed(query);
|
|
14365
|
-
const vectorResults = await this.
|
|
14382
|
+
const vectorResults = await this.vectorStore.search(queryVector, limit * 2);
|
|
14366
14383
|
const results = [];
|
|
14367
14384
|
for (const vr of vectorResults) {
|
|
14368
14385
|
const memory = this.sqlite.getMemory(vr.id);
|
|
@@ -14552,20 +14569,20 @@ var DB_PATH = (0, import_path2.join)(MEMEXTEND_DIR, "memextend.db");
|
|
|
14552
14569
|
var VECTORS_PATH = (0, import_path2.join)(MEMEXTEND_DIR, "vectors");
|
|
14553
14570
|
var MODELS_PATH = (0, import_path2.join)(MEMEXTEND_DIR, "models");
|
|
14554
14571
|
var sqlite = null;
|
|
14555
|
-
var
|
|
14572
|
+
var vectorStore = null;
|
|
14556
14573
|
var retriever = null;
|
|
14557
14574
|
var embedder = null;
|
|
14558
14575
|
async function getStorage() {
|
|
14559
|
-
if (!sqlite || !
|
|
14576
|
+
if (!sqlite || !vectorStore || !retriever || !embedder) {
|
|
14560
14577
|
if (!(0, import_fs2.existsSync)(DB_PATH)) {
|
|
14561
14578
|
throw new Error("memextend not initialized. Run `memextend init` first.");
|
|
14562
14579
|
}
|
|
14563
14580
|
sqlite = new SQLiteStorage(DB_PATH);
|
|
14564
|
-
|
|
14581
|
+
vectorStore = await SQLiteVecStorage.create(VECTORS_PATH);
|
|
14565
14582
|
embedder = await createEmbedFunction(MODELS_PATH);
|
|
14566
|
-
retriever = new MemoryRetriever(sqlite,
|
|
14583
|
+
retriever = new MemoryRetriever(sqlite, vectorStore, embedder.embedQuery);
|
|
14567
14584
|
}
|
|
14568
|
-
return { sqlite,
|
|
14585
|
+
return { sqlite, vectorStore, retriever, embedder };
|
|
14569
14586
|
}
|
|
14570
14587
|
function getCurrentWorkspace() {
|
|
14571
14588
|
return process.env.CURSOR_WORKSPACE_PATH || process.env.VSCODE_WORKSPACE_PATH || process.env.PWD || process.cwd();
|
|
@@ -14573,7 +14590,7 @@ function getCurrentWorkspace() {
|
|
|
14573
14590
|
var server = new Server(
|
|
14574
14591
|
{
|
|
14575
14592
|
name: "memextend",
|
|
14576
|
-
version: "0.2
|
|
14593
|
+
version: "0.3.2"
|
|
14577
14594
|
},
|
|
14578
14595
|
{
|
|
14579
14596
|
capabilities: {
|
|
@@ -14788,7 +14805,7 @@ ${preview}`;
|
|
|
14788
14805
|
${formatted}` }] };
|
|
14789
14806
|
}
|
|
14790
14807
|
case "memextend_save": {
|
|
14791
|
-
const { sqlite: sqlite2,
|
|
14808
|
+
const { sqlite: sqlite2, vectorStore: vectorStore2, embedder: embedder2 } = await getStorage();
|
|
14792
14809
|
const content = args?.content;
|
|
14793
14810
|
const tags = args?.tags ?? [];
|
|
14794
14811
|
if (!content || content.length < 10) {
|
|
@@ -14820,7 +14837,7 @@ ${content}` : content;
|
|
|
14820
14837
|
metadata: tags.length > 0 ? { tags } : null
|
|
14821
14838
|
});
|
|
14822
14839
|
const vector = await embedder2.embed(content);
|
|
14823
|
-
await
|
|
14840
|
+
await vectorStore2.insertVector(memoryId, vector);
|
|
14824
14841
|
return { content: [{ type: "text", text: `Memory saved successfully!
|
|
14825
14842
|
ID: ${memoryId}
|
|
14826
14843
|
Project: ${(0, import_path2.basename)(workspace)}` }] };
|
|
@@ -14859,23 +14876,23 @@ Project: ${(0, import_path2.basename)(workspace)}` }] };
|
|
|
14859
14876
|
return { content: [{ type: "text", text: formatted }] };
|
|
14860
14877
|
}
|
|
14861
14878
|
case "memextend_forget": {
|
|
14862
|
-
const { sqlite: sqlite2,
|
|
14879
|
+
const { sqlite: sqlite2, vectorStore: vectorStore2 } = await getStorage();
|
|
14863
14880
|
const memoryId = args?.memoryId;
|
|
14864
14881
|
if (!memoryId) {
|
|
14865
14882
|
return { content: [{ type: "text", text: "Memory ID is required." }], isError: true };
|
|
14866
14883
|
}
|
|
14867
14884
|
const deleted = sqlite2.deleteMemory(memoryId);
|
|
14868
14885
|
if (deleted) {
|
|
14869
|
-
await
|
|
14886
|
+
await vectorStore2.deleteVector(memoryId);
|
|
14870
14887
|
return { content: [{ type: "text", text: `Memory ${memoryId} deleted successfully.` }] };
|
|
14871
14888
|
} else {
|
|
14872
14889
|
return { content: [{ type: "text", text: `Memory ${memoryId} not found.` }] };
|
|
14873
14890
|
}
|
|
14874
14891
|
}
|
|
14875
14892
|
case "memextend_status": {
|
|
14876
|
-
const { sqlite: sqlite2,
|
|
14893
|
+
const { sqlite: sqlite2, vectorStore: vectorStore2, embedder: embedder2 } = await getStorage();
|
|
14877
14894
|
const memoryCount = sqlite2.getMemoryCount();
|
|
14878
|
-
const vectorCount = await
|
|
14895
|
+
const vectorCount = await vectorStore2.getVectorCount();
|
|
14879
14896
|
const projectMemories = sqlite2.getAllMemories(projectId, 1e3);
|
|
14880
14897
|
const projectMemoryCount = projectMemories.length;
|
|
14881
14898
|
return {
|
package/dist/mcp/server.js
CHANGED
|
@@ -7,27 +7,27 @@ import { randomUUID } from 'crypto';
|
|
|
7
7
|
import { existsSync } from 'fs';
|
|
8
8
|
import { join, basename } from 'path';
|
|
9
9
|
import { homedir } from 'os';
|
|
10
|
-
import { SQLiteStorage,
|
|
10
|
+
import { SQLiteStorage, SQLiteVecStorage, MemoryRetriever, createEmbedFunction, formatContextForInjection, getProjectId } from '@memextend/core';
|
|
11
11
|
const MEMEXTEND_DIR = join(homedir(), '.memextend');
|
|
12
12
|
const DB_PATH = join(MEMEXTEND_DIR, 'memextend.db');
|
|
13
13
|
const VECTORS_PATH = join(MEMEXTEND_DIR, 'vectors');
|
|
14
14
|
const MODELS_PATH = join(MEMEXTEND_DIR, 'models');
|
|
15
15
|
// Lazy-loaded storage instances
|
|
16
16
|
let sqlite = null;
|
|
17
|
-
let
|
|
17
|
+
let vectorStore = null;
|
|
18
18
|
let retriever = null;
|
|
19
19
|
let embedder = null;
|
|
20
20
|
async function getStorage() {
|
|
21
|
-
if (!sqlite || !
|
|
21
|
+
if (!sqlite || !vectorStore || !retriever || !embedder) {
|
|
22
22
|
if (!existsSync(DB_PATH)) {
|
|
23
23
|
throw new Error('memextend not initialized. Run `memextend init` first.');
|
|
24
24
|
}
|
|
25
25
|
sqlite = new SQLiteStorage(DB_PATH);
|
|
26
|
-
|
|
26
|
+
vectorStore = await SQLiteVecStorage.create(VECTORS_PATH);
|
|
27
27
|
embedder = await createEmbedFunction(MODELS_PATH);
|
|
28
|
-
retriever = new MemoryRetriever(sqlite,
|
|
28
|
+
retriever = new MemoryRetriever(sqlite, vectorStore, embedder.embedQuery);
|
|
29
29
|
}
|
|
30
|
-
return { sqlite,
|
|
30
|
+
return { sqlite, vectorStore, retriever, embedder };
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
33
|
* Get current workspace from environment or cwd
|
|
@@ -41,7 +41,7 @@ function getCurrentWorkspace() {
|
|
|
41
41
|
}
|
|
42
42
|
const server = new Server({
|
|
43
43
|
name: 'memextend',
|
|
44
|
-
version:
|
|
44
|
+
version: MEMEXTEND_VERSION,
|
|
45
45
|
}, {
|
|
46
46
|
capabilities: {
|
|
47
47
|
tools: {},
|
|
@@ -255,7 +255,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
255
255
|
return { content: [{ type: 'text', text: `Found ${results.length} memories:\n\n${formatted}` }] };
|
|
256
256
|
}
|
|
257
257
|
case 'memextend_save': {
|
|
258
|
-
const { sqlite,
|
|
258
|
+
const { sqlite, vectorStore, embedder } = await getStorage();
|
|
259
259
|
const content = args?.content;
|
|
260
260
|
const tags = args?.tags ?? [];
|
|
261
261
|
if (!content || content.length < 10) {
|
|
@@ -287,7 +287,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
287
287
|
metadata: tags.length > 0 ? { tags } : null,
|
|
288
288
|
});
|
|
289
289
|
const vector = await embedder.embed(content);
|
|
290
|
-
await
|
|
290
|
+
await vectorStore.insertVector(memoryId, vector);
|
|
291
291
|
return { content: [{ type: 'text', text: `Memory saved successfully!\nID: ${memoryId}\nProject: ${basename(workspace)}` }] };
|
|
292
292
|
}
|
|
293
293
|
case 'memextend_save_global': {
|
|
@@ -324,7 +324,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
324
324
|
return { content: [{ type: 'text', text: formatted }] };
|
|
325
325
|
}
|
|
326
326
|
case 'memextend_forget': {
|
|
327
|
-
const { sqlite,
|
|
327
|
+
const { sqlite, vectorStore } = await getStorage();
|
|
328
328
|
const memoryId = args?.memoryId;
|
|
329
329
|
if (!memoryId) {
|
|
330
330
|
return { content: [{ type: 'text', text: 'Memory ID is required.' }], isError: true };
|
|
@@ -332,7 +332,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
332
332
|
const deleted = sqlite.deleteMemory(memoryId);
|
|
333
333
|
if (deleted) {
|
|
334
334
|
// Also delete the vector embedding
|
|
335
|
-
await
|
|
335
|
+
await vectorStore.deleteVector(memoryId);
|
|
336
336
|
return { content: [{ type: 'text', text: `Memory ${memoryId} deleted successfully.` }] };
|
|
337
337
|
}
|
|
338
338
|
else {
|
|
@@ -340,9 +340,9 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
340
340
|
}
|
|
341
341
|
}
|
|
342
342
|
case 'memextend_status': {
|
|
343
|
-
const { sqlite,
|
|
343
|
+
const { sqlite, vectorStore, embedder } = await getStorage();
|
|
344
344
|
const memoryCount = sqlite.getMemoryCount();
|
|
345
|
-
const vectorCount = await
|
|
345
|
+
const vectorCount = await vectorStore.getVectorCount();
|
|
346
346
|
const projectMemories = sqlite.getAllMemories(projectId, 1000);
|
|
347
347
|
const projectMemoryCount = projectMemories.length;
|
|
348
348
|
return {
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memextend/cursor",
|
|
3
|
-
"version": "0.2
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"description": "Cursor IDE adapter for memextend - persistent AI memory via MCP",
|
|
5
5
|
"author": "ZodTTD LLC <repo@zodttd.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"postinstall": "node scripts/postinstall.js || true"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@memextend/core": "^0.2
|
|
29
|
+
"@memextend/core": "^0.3.2",
|
|
30
30
|
"@modelcontextprotocol/sdk": "^1.0.0"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
package/scripts/build-cli.js
CHANGED
|
@@ -5,19 +5,27 @@ import { build } from 'esbuild';
|
|
|
5
5
|
import { join, dirname } from 'path';
|
|
6
6
|
import { fileURLToPath } from 'url';
|
|
7
7
|
import { mkdir, chmod } from 'fs/promises';
|
|
8
|
+
import { readFileSync } from 'fs';
|
|
8
9
|
|
|
9
10
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
10
11
|
const srcDir = join(__dirname, '..', 'src');
|
|
11
12
|
const distDir = join(__dirname, '..', 'dist');
|
|
12
13
|
|
|
14
|
+
// Read version from root package.json
|
|
15
|
+
const rootPkg = JSON.parse(readFileSync(join(__dirname, '..', '..', '..', '..', 'package.json'), 'utf-8'));
|
|
16
|
+
const version = rootPkg.version;
|
|
17
|
+
|
|
13
18
|
const commonOptions = {
|
|
14
19
|
bundle: true,
|
|
15
20
|
platform: 'node',
|
|
16
21
|
target: 'node18',
|
|
17
22
|
format: 'cjs',
|
|
18
23
|
// External native modules that can't be bundled
|
|
19
|
-
external: ['better-sqlite3', 'node-llama-cpp', '
|
|
24
|
+
external: ['better-sqlite3', 'node-llama-cpp', 'sqlite-vec'],
|
|
20
25
|
logLevel: 'warning',
|
|
26
|
+
define: {
|
|
27
|
+
'MEMEXTEND_VERSION': JSON.stringify(version),
|
|
28
|
+
},
|
|
21
29
|
// Add shebang for CLI executables
|
|
22
30
|
banner: {
|
|
23
31
|
js: '#!/usr/bin/env node',
|
package/scripts/build-mcp.js
CHANGED
|
@@ -5,19 +5,27 @@ import { build } from 'esbuild';
|
|
|
5
5
|
import { join, dirname } from 'path';
|
|
6
6
|
import { fileURLToPath } from 'url';
|
|
7
7
|
import { mkdir } from 'fs/promises';
|
|
8
|
+
import { readFileSync } from 'fs';
|
|
8
9
|
|
|
9
10
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
10
11
|
const srcDir = join(__dirname, '..', 'src');
|
|
11
12
|
const distDir = join(__dirname, '..', 'dist');
|
|
12
13
|
|
|
14
|
+
// Read version from root package.json
|
|
15
|
+
const rootPkg = JSON.parse(readFileSync(join(__dirname, '..', '..', '..', '..', 'package.json'), 'utf-8'));
|
|
16
|
+
const version = rootPkg.version;
|
|
17
|
+
|
|
13
18
|
const commonOptions = {
|
|
14
19
|
bundle: true,
|
|
15
20
|
platform: 'node',
|
|
16
21
|
target: 'node18',
|
|
17
22
|
format: 'cjs',
|
|
18
23
|
// External native modules that can't be bundled
|
|
19
|
-
external: ['better-sqlite3', 'node-llama-cpp', '
|
|
24
|
+
external: ['better-sqlite3', 'node-llama-cpp', 'sqlite-vec'],
|
|
20
25
|
logLevel: 'warning',
|
|
26
|
+
define: {
|
|
27
|
+
'MEMEXTEND_VERSION': JSON.stringify(version),
|
|
28
|
+
},
|
|
21
29
|
};
|
|
22
30
|
|
|
23
31
|
async function buildMCP() {
|