@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.
@@ -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/lancedb.js
399
- var lancedb = __toESM(require("@lancedb/lancedb"), 1);
400
- var LanceDBStorage = class _LanceDBStorage {
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
- table = null;
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
- const db = await lancedb.connect(dbPath);
410
- const storage = new _LanceDBStorage(db);
411
- await storage.initialize();
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
- async initialize() {
415
- const tableNames = await this.db.tableNames();
416
- if (tableNames.includes(this.tableName)) {
417
- this.table = await this.db.openTable(this.tableName);
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 data = [{ id, vector }];
425
- if (!this.table) {
426
- this.table = await this.db.createTable(this.tableName, data);
427
- } else {
428
- await this.table.add(data);
429
- }
430
- await this.optimize();
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
- for (const item of items) {
434
- if (item.vector.length !== this.dimensions) {
435
- throw new Error(`Vector must have ${this.dimensions} dimensions, got ${item.vector.length}`);
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
- if (!this.table) {
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 (!this.table) {
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 results = await this.table.vectorSearch(vector).limit(effectiveLimit).toArray();
451
- return results.map((row) => ({
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 - row._distance
454
- // Convert distance to similarity
484
+ score: 1 / (1 + row.distance)
455
485
  }));
456
486
  }
457
487
  async deleteVector(id) {
458
- if (!this.table)
459
- return;
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
- if (!this.table)
465
- return 0;
466
- return await this.table.countRows();
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 (!this.table || ids.length === 0)
498
+ if (ids.length === 0)
471
499
  return result;
472
500
  const BATCH_SIZE = 100;
473
- try {
474
- for (let i = 0; i < ids.length; i += BATCH_SIZE) {
475
- const batch = ids.slice(i, i + BATCH_SIZE);
476
- const sanitizedIds = batch.map((id) => id.replace(/'/g, "''"));
477
- const filter = sanitizedIds.map((id) => `id = '${id}'`).join(" OR ");
478
- const rows = await this.table.query().where(filter).toArray();
479
- for (const row of rows) {
480
- result.set(row.id, row.vector);
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
- const table = this.table;
501
- const stats = await table.optimize({ cleanupOlderThan: cleanupOlderThan ?? /* @__PURE__ */ new Date() });
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 lancedb2 = await LanceDBStorage.create(VECTORS_PATH);
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 lancedb2.insertVector(memoryId, vector);
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 lancedb2.close();
835
+ await vectorStore.close();
819
836
  await embedder.close();
820
837
  }
821
838
  }
@@ -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, LanceDBStorage, createEmbedFunction } from '@memextend/core';
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 lancedb = await LanceDBStorage.create(VECTORS_PATH);
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 lancedb.insertVector(memoryId, vector);
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 lancedb.close();
214
+ await vectorStore.close();
215
215
  await embedder.close();
216
216
  }
217
217
  }
@@ -1 +1 @@
1
- {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/cli/capture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/cli/capture.ts"],"names":[],"mappings":"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"}
@@ -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/lancedb.js
398
- var lancedb = __toESM(require("@lancedb/lancedb"), 1);
399
- var LanceDBStorage = class _LanceDBStorage {
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
- table = null;
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
- const db = await lancedb.connect(dbPath);
409
- const storage = new _LanceDBStorage(db);
410
- await storage.initialize();
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
- async initialize() {
414
- const tableNames = await this.db.tableNames();
415
- if (tableNames.includes(this.tableName)) {
416
- this.table = await this.db.openTable(this.tableName);
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 data = [{ id, vector }];
424
- if (!this.table) {
425
- this.table = await this.db.createTable(this.tableName, data);
426
- } else {
427
- await this.table.add(data);
428
- }
429
- await this.optimize();
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
- for (const item of items) {
433
- if (item.vector.length !== this.dimensions) {
434
- throw new Error(`Vector must have ${this.dimensions} dimensions, got ${item.vector.length}`);
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
- if (!this.table) {
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 (!this.table) {
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 results = await this.table.vectorSearch(vector).limit(effectiveLimit).toArray();
450
- return results.map((row) => ({
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 - row._distance
453
- // Convert distance to similarity
483
+ score: 1 / (1 + row.distance)
454
484
  }));
455
485
  }
456
486
  async deleteVector(id) {
457
- if (!this.table)
458
- return;
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
- if (!this.table)
464
- return 0;
465
- return await this.table.countRows();
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 (!this.table || ids.length === 0)
497
+ if (ids.length === 0)
470
498
  return result;
471
499
  const BATCH_SIZE = 100;
472
- try {
473
- for (let i = 0; i < ids.length; i += BATCH_SIZE) {
474
- const batch = ids.slice(i, i + BATCH_SIZE);
475
- const sanitizedIds = batch.map((id) => id.replace(/'/g, "''"));
476
- const filter = sanitizedIds.map((id) => `id = '${id}'`).join(" OR ");
477
- const rows = await this.table.query().where(filter).toArray();
478
- for (const row of rows) {
479
- result.set(row.id, row.vector);
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
- const table = this.table;
500
- const stats = await table.optimize({ cleanupOlderThan: cleanupOlderThan ?? /* @__PURE__ */ new Date() });
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
- lancedb;
661
+ vectorStore;
645
662
  embed;
646
663
  options;
647
- constructor(sqlite, lancedb2, embed, options = {}) {
664
+ constructor(sqlite, vectorStore, embed, options = {}) {
648
665
  this.sqlite = sqlite;
649
- this.lancedb = lancedb2;
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 using LanceDB
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.lancedb.search(queryVector, limit * 2);
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 lancedb2 = await LanceDBStorage.create(VECTORS_PATH);
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, lancedb2, embedder.embedQuery, {
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 lancedb2.close();
1057
+ await vectorStore.close();
1041
1058
  await embedder.close();
1042
1059
  }
1043
1060
  }
@@ -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, LanceDBStorage, MemoryRetriever, createEmbedFunction, formatContextForInjection } from '@memextend/core';
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 lancedb = await LanceDBStorage.create(VECTORS_PATH);
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, lancedb, embedder.embedQuery, {
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 lancedb.close();
240
+ await vectorStore.close();
241
241
  await embedder.close();
242
242
  }
243
243
  }
@@ -1 +1 @@
1
- {"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/cli/inject.ts"],"names":[],"mappings":"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"}
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 = "0.2.0";
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';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,YAAY,WAAW,CAAC;AACrC,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,cAAc,SAAS,CAAC;AAErC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC"}
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 = '0.2.0';
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;AACvC,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AAErC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,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"}
@@ -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/lancedb.js
14091
- var lancedb = __toESM(require("@lancedb/lancedb"), 1);
14092
- var LanceDBStorage = class _LanceDBStorage {
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
- table = null;
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
- const db = await lancedb.connect(dbPath);
14102
- const storage = new _LanceDBStorage(db);
14103
- await storage.initialize();
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
- async initialize() {
14107
- const tableNames = await this.db.tableNames();
14108
- if (tableNames.includes(this.tableName)) {
14109
- this.table = await this.db.openTable(this.tableName);
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 data = [{ id, vector }];
14117
- if (!this.table) {
14118
- this.table = await this.db.createTable(this.tableName, data);
14119
- } else {
14120
- await this.table.add(data);
14121
- }
14122
- await this.optimize();
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
- for (const item of items) {
14126
- if (item.vector.length !== this.dimensions) {
14127
- throw new Error(`Vector must have ${this.dimensions} dimensions, got ${item.vector.length}`);
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
- if (!this.table) {
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 (!this.table) {
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 results = await this.table.vectorSearch(vector).limit(effectiveLimit).toArray();
14143
- return results.map((row) => ({
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 - row._distance
14146
- // Convert distance to similarity
14176
+ score: 1 / (1 + row.distance)
14147
14177
  }));
14148
14178
  }
14149
14179
  async deleteVector(id) {
14150
- if (!this.table)
14151
- return;
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
- if (!this.table)
14157
- return 0;
14158
- return await this.table.countRows();
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 (!this.table || ids.length === 0)
14190
+ if (ids.length === 0)
14163
14191
  return result;
14164
14192
  const BATCH_SIZE = 100;
14165
- try {
14166
- for (let i = 0; i < ids.length; i += BATCH_SIZE) {
14167
- const batch = ids.slice(i, i + BATCH_SIZE);
14168
- const sanitizedIds = batch.map((id) => id.replace(/'/g, "''"));
14169
- const filter = sanitizedIds.map((id) => `id = '${id}'`).join(" OR ");
14170
- const rows = await this.table.query().where(filter).toArray();
14171
- for (const row of rows) {
14172
- result.set(row.id, row.vector);
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
- const table = this.table;
14193
- const stats = await table.optimize({ cleanupOlderThan: cleanupOlderThan ?? /* @__PURE__ */ new Date() });
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
- lancedb;
14354
+ vectorStore;
14338
14355
  embed;
14339
14356
  options;
14340
- constructor(sqlite2, lancedb3, embed, options = {}) {
14357
+ constructor(sqlite2, vectorStore2, embed, options = {}) {
14341
14358
  this.sqlite = sqlite2;
14342
- this.lancedb = lancedb3;
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 using LanceDB
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.lancedb.search(queryVector, limit * 2);
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 lancedb2 = null;
14572
+ var vectorStore = null;
14556
14573
  var retriever = null;
14557
14574
  var embedder = null;
14558
14575
  async function getStorage() {
14559
- if (!sqlite || !lancedb2 || !retriever || !embedder) {
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
- lancedb2 = await LanceDBStorage.create(VECTORS_PATH);
14581
+ vectorStore = await SQLiteVecStorage.create(VECTORS_PATH);
14565
14582
  embedder = await createEmbedFunction(MODELS_PATH);
14566
- retriever = new MemoryRetriever(sqlite, lancedb2, embedder.embedQuery);
14583
+ retriever = new MemoryRetriever(sqlite, vectorStore, embedder.embedQuery);
14567
14584
  }
14568
- return { sqlite, lancedb: lancedb2, retriever, embedder };
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.0"
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, lancedb: lancedb3, embedder: embedder2 } = await getStorage();
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 lancedb3.insertVector(memoryId, vector);
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, lancedb: lancedb3 } = await getStorage();
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 lancedb3.deleteVector(memoryId);
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, lancedb: lancedb3, embedder: embedder2 } = await getStorage();
14893
+ const { sqlite: sqlite2, vectorStore: vectorStore2, embedder: embedder2 } = await getStorage();
14877
14894
  const memoryCount = sqlite2.getMemoryCount();
14878
- const vectorCount = await lancedb3.getVectorCount();
14895
+ const vectorCount = await vectorStore2.getVectorCount();
14879
14896
  const projectMemories = sqlite2.getAllMemories(projectId, 1e3);
14880
14897
  const projectMemoryCount = projectMemories.length;
14881
14898
  return {
@@ -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, LanceDBStorage, MemoryRetriever, createEmbedFunction, formatContextForInjection, getProjectId } from '@memextend/core';
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 lancedb = null;
17
+ let vectorStore = null;
18
18
  let retriever = null;
19
19
  let embedder = null;
20
20
  async function getStorage() {
21
- if (!sqlite || !lancedb || !retriever || !embedder) {
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
- lancedb = await LanceDBStorage.create(VECTORS_PATH);
26
+ vectorStore = await SQLiteVecStorage.create(VECTORS_PATH);
27
27
  embedder = await createEmbedFunction(MODELS_PATH);
28
- retriever = new MemoryRetriever(sqlite, lancedb, embedder.embedQuery);
28
+ retriever = new MemoryRetriever(sqlite, vectorStore, embedder.embedQuery);
29
29
  }
30
- return { sqlite, lancedb, retriever, embedder };
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: '0.2.0',
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, lancedb, embedder } = await getStorage();
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 lancedb.insertVector(memoryId, vector);
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, lancedb } = await getStorage();
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 lancedb.deleteVector(memoryId);
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, lancedb, embedder } = await getStorage();
343
+ const { sqlite, vectorStore, embedder } = await getStorage();
344
344
  const memoryCount = sqlite.getMemoryCount();
345
- const vectorCount = await lancedb.getVectorCount();
345
+ const vectorCount = await vectorStore.getVectorCount();
346
346
  const projectMemories = sqlite.getAllMemories(projectId, 1000);
347
347
  const projectMemoryCount = projectMemories.length;
348
348
  return {
@@ -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":"AAAA,6CAA6C;AAC7C,8CAA8C;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEjJ,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AACpD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AACpD,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AACpD,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AAElD,gCAAgC;AAChC,IAAI,MAAM,GAAyB,IAAI,CAAC;AACxC,IAAI,WAAW,GAA4B,IAAI,CAAC;AAChD,IAAI,SAAS,GAA2B,IAAI,CAAC;AAC7C,IAAI,QAAQ,GAA2D,IAAI,CAAC;AAE5E,KAAK,UAAU,UAAU;IAMvB,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QACpC,WAAW,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC1D,QAAQ,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAClD,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB;IAC1B,6CAA6C;IAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB;QACjC,OAAO,CAAC,GAAG,CAAC,qBAAqB;QACjC,OAAO,CAAC,GAAG,CAAC,GAAG;QACf,OAAO,CAAC,GAAG,EAAE,CAAC;AACvB,CAAC;AAKD,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;IACE,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,iBAAiB;CAC3B,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;KACd;CACF,CACF,CAAC;AAEF,uBAAuB;AACvB,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;IAC1D,OAAO;QACL,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EAAE,qUAAqU;gBAClV,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,qGAAqG;yBACnH;wBACD,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,iDAAiD;yBAC/D;wBACD,YAAY,EAAE;4BACZ,IAAI,EAAE,SAAS;4BACf,WAAW,EAAE,qDAAqD;yBACnE;qBACF;oBACD,QAAQ,EAAE,CAAC,OAAO,CAAC;iBACpB;aACF;YACD;gBACE,IAAI,EAAE,gBAAgB;gBACtB,WAAW,EAAE,6TAA6T;gBAC1U,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,OAAO,EAAE;4BACP,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,0EAA0E;yBACxF;wBACD,IAAI,EAAE;4BACJ,IAAI,EAAE,OAAO;4BACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACzB,WAAW,EAAE,uEAAuE;yBACrF;qBACF;oBACD,QAAQ,EAAE,CAAC,SAAS,CAAC;iBACtB;aACF;YACD;gBACE,IAAI,EAAE,uBAAuB;gBAC7B,WAAW,EAAE,8HAA8H;gBAC3I,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,OAAO,EAAE;4BACP,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,6CAA6C;yBAC3D;wBACD,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC;4BACvC,WAAW,EAAE,oGAAoG;yBAClH;qBACF;oBACD,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;iBAC9B;aACF;YACD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EAAE,0HAA0H;gBACvI,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,0CAA0C;yBACxD;wBACD,cAAc,EAAE;4BACd,IAAI,EAAE,SAAS;4BACf,WAAW,EAAE,4CAA4C;yBAC1D;qBACF;iBACF;aACF;YACD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EAAE,mDAAmD;gBAChE,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,QAAQ,EAAE;4BACR,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,gCAAgC;yBAC9C;qBACF;oBACD,QAAQ,EAAE,CAAC,UAAU,CAAC;iBACvB;aACF;YACD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EAAE,qEAAqE;gBAClF,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE;iBACf;aACF;SACF;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,4DAA4D;AAC5D,MAAM,CAAC,iBAAiB,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;IAC9D,OAAO;QACL,SAAS,EAAE;YACT;gBACE,GAAG,EAAE,qBAAqB;gBAC1B,IAAI,EAAE,iBAAiB;gBACvB,WAAW,EAAE,uDAAuD;gBACpE,QAAQ,EAAE,YAAY;aACvB;YACD;gBACE,GAAG,EAAE,oBAAoB;gBACzB,IAAI,EAAE,eAAe;gBACrB,WAAW,EAAE,gCAAgC;gBAC7C,QAAQ,EAAE,kBAAkB;aAC7B;SACF;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,iBAAiB;AACjB,MAAM,CAAC,iBAAiB,CAAC,yBAAyB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IACpE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAE/B,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QAE1C,IAAI,GAAG,KAAK,qBAAqB,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,oBAAoB,CAAC,SAAS,EAAE;gBAC9D,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;YAErD,OAAO;gBACL,QAAQ,EAAE;oBACR;wBACE,GAAG;wBACH,QAAQ,EAAE,YAAY;wBACtB,IAAI,EAAE,SAAS;qBAChB;iBACF;aACF,CAAC;QACJ,CAAC;QAED,IAAI,GAAG,KAAK,oBAAoB,EAAE,CAAC;YACjC,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;YAE5C,OAAO;gBACL,QAAQ,EAAE;oBACR;wBACE,GAAG;wBACH,QAAQ,EAAE,kBAAkB;wBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,WAAW,EAAE,IAAI;4BACjB,WAAW;4BACX,SAAS;4BACT,SAAS;yBACV,EAAE,IAAI,EAAE,CAAC,CAAC;qBACZ;iBACF;aACF,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG;oBACH,QAAQ,EAAE,YAAY;oBACtB,IAAI,EAAE,UAAU,OAAO,EAAE;iBAC1B;aACF;SACF,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,oBAAoB;AACpB,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAEjD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QAE1C,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjD,MAAM,KAAK,GAAG,IAAI,EAAE,KAAe,CAAC;gBACpC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAE,IAAI,EAAE,KAAgB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gBACzD,MAAM,WAAW,GAAG,IAAI,EAAE,YAAuB,IAAI,KAAK,CAAC;gBAE3D,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE;oBAClD,KAAK;oBACL,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;iBAC/C,CAAC,CAAC;gBAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iFAAiF,EAAE,CAAC,EAAE,CAAC;gBAClI,CAAC;gBAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBACrC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,CAAC;oBAC/D,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAC;oBAC5F,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACpE,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,WAAW,KAAK,IAAI,iBAAiB,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,OAAO,EAAE,CAAC;gBAC1H,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAEvB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,OAAO,CAAC,MAAM,iBAAiB,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC;YACpG,CAAC;YAED,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;gBAC7D,MAAM,OAAO,GAAG,IAAI,EAAE,OAAiB,CAAC;gBACxC,MAAM,IAAI,GAAG,IAAI,EAAE,IAAgB,IAAI,EAAE,CAAC;gBAE1C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;oBACpC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iFAAiF,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBACjJ,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;oBAC3B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yCAAyC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBACzG,CAAC;gBAED,+BAA+B;gBAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,CAAC,aAAa,CAAC;wBACnB,EAAE,EAAE,SAAS;wBACb,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;wBACzB,IAAI,EAAE,SAAS;wBACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;qBACpC,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;gBAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;gBAE3F,MAAM,CAAC,YAAY,CAAC;oBAClB,EAAE,EAAE,QAAQ;oBACZ,SAAS;oBACT,OAAO,EAAE,aAAa;oBACtB,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,IAAI;oBAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,SAAS,EAAE,IAAI;oBACf,QAAQ,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;iBAC5C,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC7C,MAAM,WAAW,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAEjD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mCAAmC,QAAQ,cAAc,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAC/H,CAAC;YAED,KAAK,uBAAuB,CAAC,CAAC,CAAC;gBAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;gBACtC,MAAM,OAAO,GAAG,IAAI,EAAE,OAAiB,CAAC;gBACxC,MAAM,IAAI,GAAG,IAAI,EAAE,IAAyC,CAAC;gBAE7D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gDAAgD,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBAChH,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;oBAC3B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sDAAsD,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBACtH,CAAC;gBAED,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;gBAC/B,MAAM,CAAC,mBAAmB,CAAC;oBACzB,EAAE,EAAE,SAAS;oBACb,GAAG,EAAE,IAAI;oBACT,OAAO;oBACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC,CAAC,CAAC;gBAEH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,IAAI,YAAY,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC;YACrF,CAAC;YAED,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;gBACzC,MAAM,IAAI,GAAI,IAAI,EAAE,IAAe,IAAI,CAAC,CAAC;gBACzC,MAAM,aAAa,GAAI,IAAI,EAAE,cAA0B,IAAI,IAAI,CAAC;gBAEhE,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,oBAAoB,CAAC,SAAS,EAAE;oBAC9D,UAAU,EAAE,IAAI;oBAChB,aAAa;iBACd,CAAC,CAAC;gBAEH,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC9E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kDAAkD,IAAI,2EAA2E,EAAE,CAAC,EAAE,CAAC;gBAClL,CAAC;gBAED,MAAM,SAAS,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;gBACrD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;YAC1D,CAAC;YAED,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;gBACnD,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAkB,CAAC;gBAE1C,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBACxF,CAAC;gBAED,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAC9C,IAAI,OAAO,EAAE,CAAC;oBACZ,mCAAmC;oBACnC,MAAM,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;oBACzC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,QAAQ,wBAAwB,EAAE,CAAC,EAAE,CAAC;gBAC3F,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,QAAQ,aAAa,EAAE,CAAC,EAAE,CAAC;gBAChF,CAAC;YACH,CAAC;YAED,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;gBAC7D,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC5C,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,cAAc,EAAE,CAAC;gBAEvD,MAAM,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAC/D,MAAM,kBAAkB,GAAG,eAAe,CAAC,MAAM,CAAC;gBAElD,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE;;WAEP,QAAQ,CAAC,SAAS,CAAC;cAChB,SAAS;oBACH,kBAAkB;;;oBAGlB,WAAW;uBACR,WAAW;qBACb,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,4BAA4B;;;cAGnF,OAAO;aACR,YAAY;YACb,WAAW,EAAE;yBACd,CAAC;iBACH,CAAC;YACJ,CAAC;YAED;gBACE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACzF,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACnF,CAAC;AACH,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,OAAO,CAAC,KAAK,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memextend/cursor",
3
- "version": "0.2.0",
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.0",
29
+ "@memextend/core": "^0.3.2",
30
30
  "@modelcontextprotocol/sdk": "^1.0.0"
31
31
  },
32
32
  "devDependencies": {
@@ -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', '@lancedb/lancedb'],
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',
@@ -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', '@lancedb/lancedb'],
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() {