@memextend/cursor 0.2.0 → 0.3.0

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.
@@ -395,118 +395,168 @@ var SQLiteStorage = class {
395
395
  }
396
396
  };
397
397
 
398
- // ../../core/dist/storage/lancedb.js
399
- var lancedb = __toESM(require("@lancedb/lancedb"), 1);
400
- var LanceDBStorage = class _LanceDBStorage {
398
+ // ../../core/dist/storage/sqlite-vec.js
399
+ var import_better_sqlite32 = __toESM(require("better-sqlite3"), 1);
400
+
401
+ // ../../../node_modules/sqlite-vec/index.mjs
402
+ var import_node_path = require("node:path");
403
+ var import_node_url = require("node:url");
404
+ var import_node_process = require("node:process");
405
+ var import_node_fs = require("node:fs");
406
+ var import_meta = {};
407
+ var BASE_PACKAGE_NAME = "sqlite-vec";
408
+ var ENTRYPOINT_BASE_NAME = "vec0";
409
+ var supportedPlatforms = [["macos", "aarch64"], ["macos", "x86_64"], ["windows", "x86_64"], ["linux", "x86_64"], ["linux", "aarch64"]];
410
+ var invalidPlatformErrorMessage = `Unsupported platform for ${BASE_PACKAGE_NAME}, on a ${import_node_process.platform}-${import_node_process.arch} machine. Supported platforms are (${supportedPlatforms.map(([p, a]) => `${p}-${a}`).join(",")}). Consult the ${BASE_PACKAGE_NAME} NPM package README for details.`;
411
+ var extensionNotFoundErrorMessage = (packageName) => `Loadble extension for ${BASE_PACKAGE_NAME} not found. Was the ${packageName} package installed?`;
412
+ function validPlatform(platform2, arch2) {
413
+ return supportedPlatforms.find(([p, a]) => platform2 == p && arch2 === a) !== null;
414
+ }
415
+ function extensionSuffix(platform2) {
416
+ if (platform2 === "win32")
417
+ return "dll";
418
+ if (platform2 === "darwin")
419
+ return "dylib";
420
+ return "so";
421
+ }
422
+ function platformPackageName(platform2, arch2) {
423
+ const os = platform2 === "win32" ? "windows" : platform2;
424
+ return `${BASE_PACKAGE_NAME}-${os}-${arch2}`;
425
+ }
426
+ function getLoadablePath() {
427
+ if (!validPlatform(import_node_process.platform, import_node_process.arch)) {
428
+ throw new Error(
429
+ invalidPlatformErrorMessage
430
+ );
431
+ }
432
+ const packageName = platformPackageName(import_node_process.platform, import_node_process.arch);
433
+ const loadablePath = (0, import_node_path.join)(
434
+ (0, import_node_url.fileURLToPath)(new URL((0, import_node_path.join)("."), import_meta.url)),
435
+ "..",
436
+ packageName,
437
+ `${ENTRYPOINT_BASE_NAME}.${extensionSuffix(import_node_process.platform)}`
438
+ );
439
+ if (!(0, import_node_fs.statSync)(loadablePath, { throwIfNoEntry: false })) {
440
+ throw new Error(extensionNotFoundErrorMessage(packageName));
441
+ }
442
+ return loadablePath;
443
+ }
444
+ function load(db) {
445
+ db.loadExtension(getLoadablePath());
446
+ }
447
+
448
+ // ../../core/dist/storage/sqlite-vec.js
449
+ var SQLiteVecStorage = class _SQLiteVecStorage {
401
450
  db;
402
- table = null;
403
- tableName = "memories";
451
+ tableName = "memory_vectors";
404
452
  dimensions = 384;
405
453
  constructor(db) {
406
454
  this.db = db;
407
455
  }
408
456
  static async create(dbPath) {
409
- const db = await lancedb.connect(dbPath);
410
- const storage = new _LanceDBStorage(db);
411
- await storage.initialize();
457
+ let actualPath = dbPath;
458
+ if (dbPath.endsWith("vectors") || dbPath.endsWith("vectors/")) {
459
+ actualPath = dbPath.replace(/\/?$/, ".db");
460
+ }
461
+ const db = new import_better_sqlite32.default(actualPath);
462
+ load(db);
463
+ const storage = new _SQLiteVecStorage(db);
464
+ storage.initialize();
412
465
  return storage;
413
466
  }
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
- }
467
+ initialize() {
468
+ this.db.exec(`
469
+ CREATE VIRTUAL TABLE IF NOT EXISTS ${this.tableName} USING vec0(
470
+ id TEXT PRIMARY KEY,
471
+ vector FLOAT[${this.dimensions}]
472
+ )
473
+ `);
419
474
  }
420
475
  async insertVector(id, vector) {
421
476
  if (vector.length !== this.dimensions) {
422
477
  throw new Error(`Vector must have ${this.dimensions} dimensions, got ${vector.length}`);
423
478
  }
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();
479
+ const float32 = new Float32Array(vector);
480
+ const vectorBuffer = Buffer.from(float32.buffer);
481
+ const stmt = this.db.prepare(`
482
+ INSERT OR REPLACE INTO ${this.tableName} (id, vector)
483
+ VALUES (?, ?)
484
+ `);
485
+ stmt.run(id, vectorBuffer);
431
486
  }
432
487
  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}`);
488
+ const stmt = this.db.prepare(`
489
+ INSERT OR REPLACE INTO ${this.tableName} (id, vector)
490
+ VALUES (?, ?)
491
+ `);
492
+ const insertMany = this.db.transaction((items2) => {
493
+ for (const item of items2) {
494
+ if (item.vector.length !== this.dimensions) {
495
+ throw new Error(`Vector must have ${this.dimensions} dimensions, got ${item.vector.length}`);
496
+ }
497
+ const float32 = new Float32Array(item.vector);
498
+ const vectorBuffer = Buffer.from(float32.buffer);
499
+ stmt.run(item.id, vectorBuffer);
436
500
  }
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();
501
+ });
502
+ insertMany(items);
444
503
  }
445
504
  async search(vector, limit = 10) {
446
- if (!this.table) {
447
- return [];
505
+ if (vector.length !== this.dimensions) {
506
+ throw new Error(`Query vector must have ${this.dimensions} dimensions, got ${vector.length}`);
448
507
  }
449
508
  const effectiveLimit = limit > 0 ? limit : 100;
450
- const results = await this.table.vectorSearch(vector).limit(effectiveLimit).toArray();
451
- return results.map((row) => ({
509
+ const float32 = new Float32Array(vector);
510
+ const vectorBuffer = Buffer.from(float32.buffer);
511
+ const stmt = this.db.prepare(`
512
+ SELECT id, distance
513
+ FROM ${this.tableName}
514
+ WHERE vector MATCH ?
515
+ ORDER BY distance
516
+ LIMIT ?
517
+ `);
518
+ const rows = stmt.all(vectorBuffer, effectiveLimit);
519
+ return rows.map((row) => ({
452
520
  id: row.id,
453
- score: 1 - row._distance
454
- // Convert distance to similarity
521
+ score: 1 / (1 + row.distance)
455
522
  }));
456
523
  }
457
524
  async deleteVector(id) {
458
- if (!this.table)
459
- return;
460
- const sanitizedId = id.replace(/'/g, "''");
461
- await this.table.delete(`id = '${sanitizedId}'`);
525
+ const stmt = this.db.prepare(`DELETE FROM ${this.tableName} WHERE id = ?`);
526
+ stmt.run(id);
462
527
  }
463
528
  async getVectorCount() {
464
- if (!this.table)
465
- return 0;
466
- return await this.table.countRows();
529
+ const stmt = this.db.prepare(`SELECT COUNT(*) as count FROM ${this.tableName}`);
530
+ const result = stmt.get();
531
+ return result.count;
467
532
  }
468
533
  async getVectorsByIds(ids) {
469
534
  const result = /* @__PURE__ */ new Map();
470
- if (!this.table || ids.length === 0)
535
+ if (ids.length === 0)
471
536
  return result;
472
537
  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
- }
538
+ for (let i = 0; i < ids.length; i += BATCH_SIZE) {
539
+ const batch = ids.slice(i, i + BATCH_SIZE);
540
+ const placeholders = batch.map(() => "?").join(",");
541
+ const stmt = this.db.prepare(`
542
+ SELECT id, vector FROM ${this.tableName}
543
+ WHERE id IN (${placeholders})
544
+ `);
545
+ const rows = stmt.all(...batch);
546
+ for (const row of rows) {
547
+ const vector = Array.from(new Float32Array(row.vector));
548
+ result.set(row.id, vector);
482
549
  }
483
- } catch {
484
550
  }
485
551
  return result;
486
552
  }
487
553
  async close() {
554
+ this.db.close();
488
555
  }
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
- 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;
509
- }
556
+ // No optimize needed - SQLite handles this automatically!
557
+ async optimize() {
558
+ this.db.exec("VACUUM");
559
+ return { compacted: 0, pruned: 0 };
510
560
  }
511
561
  };
512
562
 
@@ -780,7 +830,7 @@ async function main() {
780
830
  const workspace = options.workspace ? (0, import_path2.resolve)(options.workspace) : process.cwd();
781
831
  const projectId = getProjectId2(workspace);
782
832
  const sqlite = new SQLiteStorage(DB_PATH);
783
- const lancedb2 = await LanceDBStorage.create(VECTORS_PATH);
833
+ const vectorStore = await SQLiteVecStorage.create(VECTORS_PATH);
784
834
  const embedder = await createEmbedFunction(MODELS_PATH);
785
835
  try {
786
836
  const project = sqlite.getProject(projectId);
@@ -805,7 +855,7 @@ async function main() {
805
855
  };
806
856
  sqlite.insertMemory(memory);
807
857
  const vector = await embedder.embed(content);
808
- await lancedb2.insertVector(memoryId, vector);
858
+ await vectorStore.insertVector(memoryId, vector);
809
859
  if (!options.quiet) {
810
860
  console.log(`Memory captured successfully!`);
811
861
  console.log(` ID: ${memoryId}`);
@@ -815,7 +865,7 @@ async function main() {
815
865
  }
816
866
  } finally {
817
867
  sqlite.close();
818
- await lancedb2.close();
868
+ await vectorStore.close();
819
869
  await embedder.close();
820
870
  }
821
871
  }
@@ -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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"}
@@ -394,118 +394,168 @@ var SQLiteStorage = class {
394
394
  }
395
395
  };
396
396
 
397
- // ../../core/dist/storage/lancedb.js
398
- var lancedb = __toESM(require("@lancedb/lancedb"), 1);
399
- var LanceDBStorage = class _LanceDBStorage {
397
+ // ../../core/dist/storage/sqlite-vec.js
398
+ var import_better_sqlite32 = __toESM(require("better-sqlite3"), 1);
399
+
400
+ // ../../../node_modules/sqlite-vec/index.mjs
401
+ var import_node_path = require("node:path");
402
+ var import_node_url = require("node:url");
403
+ var import_node_process = require("node:process");
404
+ var import_node_fs = require("node:fs");
405
+ var import_meta = {};
406
+ var BASE_PACKAGE_NAME = "sqlite-vec";
407
+ var ENTRYPOINT_BASE_NAME = "vec0";
408
+ var supportedPlatforms = [["macos", "aarch64"], ["macos", "x86_64"], ["windows", "x86_64"], ["linux", "x86_64"], ["linux", "aarch64"]];
409
+ var invalidPlatformErrorMessage = `Unsupported platform for ${BASE_PACKAGE_NAME}, on a ${import_node_process.platform}-${import_node_process.arch} machine. Supported platforms are (${supportedPlatforms.map(([p, a]) => `${p}-${a}`).join(",")}). Consult the ${BASE_PACKAGE_NAME} NPM package README for details.`;
410
+ var extensionNotFoundErrorMessage = (packageName) => `Loadble extension for ${BASE_PACKAGE_NAME} not found. Was the ${packageName} package installed?`;
411
+ function validPlatform(platform2, arch2) {
412
+ return supportedPlatforms.find(([p, a]) => platform2 == p && arch2 === a) !== null;
413
+ }
414
+ function extensionSuffix(platform2) {
415
+ if (platform2 === "win32")
416
+ return "dll";
417
+ if (platform2 === "darwin")
418
+ return "dylib";
419
+ return "so";
420
+ }
421
+ function platformPackageName(platform2, arch2) {
422
+ const os = platform2 === "win32" ? "windows" : platform2;
423
+ return `${BASE_PACKAGE_NAME}-${os}-${arch2}`;
424
+ }
425
+ function getLoadablePath() {
426
+ if (!validPlatform(import_node_process.platform, import_node_process.arch)) {
427
+ throw new Error(
428
+ invalidPlatformErrorMessage
429
+ );
430
+ }
431
+ const packageName = platformPackageName(import_node_process.platform, import_node_process.arch);
432
+ const loadablePath = (0, import_node_path.join)(
433
+ (0, import_node_url.fileURLToPath)(new URL((0, import_node_path.join)("."), import_meta.url)),
434
+ "..",
435
+ packageName,
436
+ `${ENTRYPOINT_BASE_NAME}.${extensionSuffix(import_node_process.platform)}`
437
+ );
438
+ if (!(0, import_node_fs.statSync)(loadablePath, { throwIfNoEntry: false })) {
439
+ throw new Error(extensionNotFoundErrorMessage(packageName));
440
+ }
441
+ return loadablePath;
442
+ }
443
+ function load(db) {
444
+ db.loadExtension(getLoadablePath());
445
+ }
446
+
447
+ // ../../core/dist/storage/sqlite-vec.js
448
+ var SQLiteVecStorage = class _SQLiteVecStorage {
400
449
  db;
401
- table = null;
402
- tableName = "memories";
450
+ tableName = "memory_vectors";
403
451
  dimensions = 384;
404
452
  constructor(db) {
405
453
  this.db = db;
406
454
  }
407
455
  static async create(dbPath) {
408
- const db = await lancedb.connect(dbPath);
409
- const storage = new _LanceDBStorage(db);
410
- await storage.initialize();
456
+ let actualPath = dbPath;
457
+ if (dbPath.endsWith("vectors") || dbPath.endsWith("vectors/")) {
458
+ actualPath = dbPath.replace(/\/?$/, ".db");
459
+ }
460
+ const db = new import_better_sqlite32.default(actualPath);
461
+ load(db);
462
+ const storage = new _SQLiteVecStorage(db);
463
+ storage.initialize();
411
464
  return storage;
412
465
  }
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
- }
466
+ initialize() {
467
+ this.db.exec(`
468
+ CREATE VIRTUAL TABLE IF NOT EXISTS ${this.tableName} USING vec0(
469
+ id TEXT PRIMARY KEY,
470
+ vector FLOAT[${this.dimensions}]
471
+ )
472
+ `);
418
473
  }
419
474
  async insertVector(id, vector) {
420
475
  if (vector.length !== this.dimensions) {
421
476
  throw new Error(`Vector must have ${this.dimensions} dimensions, got ${vector.length}`);
422
477
  }
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();
478
+ const float32 = new Float32Array(vector);
479
+ const vectorBuffer = Buffer.from(float32.buffer);
480
+ const stmt = this.db.prepare(`
481
+ INSERT OR REPLACE INTO ${this.tableName} (id, vector)
482
+ VALUES (?, ?)
483
+ `);
484
+ stmt.run(id, vectorBuffer);
430
485
  }
431
486
  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}`);
487
+ const stmt = this.db.prepare(`
488
+ INSERT OR REPLACE INTO ${this.tableName} (id, vector)
489
+ VALUES (?, ?)
490
+ `);
491
+ const insertMany = this.db.transaction((items2) => {
492
+ for (const item of items2) {
493
+ if (item.vector.length !== this.dimensions) {
494
+ throw new Error(`Vector must have ${this.dimensions} dimensions, got ${item.vector.length}`);
495
+ }
496
+ const float32 = new Float32Array(item.vector);
497
+ const vectorBuffer = Buffer.from(float32.buffer);
498
+ stmt.run(item.id, vectorBuffer);
435
499
  }
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();
500
+ });
501
+ insertMany(items);
443
502
  }
444
503
  async search(vector, limit = 10) {
445
- if (!this.table) {
446
- return [];
504
+ if (vector.length !== this.dimensions) {
505
+ throw new Error(`Query vector must have ${this.dimensions} dimensions, got ${vector.length}`);
447
506
  }
448
507
  const effectiveLimit = limit > 0 ? limit : 100;
449
- const results = await this.table.vectorSearch(vector).limit(effectiveLimit).toArray();
450
- return results.map((row) => ({
508
+ const float32 = new Float32Array(vector);
509
+ const vectorBuffer = Buffer.from(float32.buffer);
510
+ const stmt = this.db.prepare(`
511
+ SELECT id, distance
512
+ FROM ${this.tableName}
513
+ WHERE vector MATCH ?
514
+ ORDER BY distance
515
+ LIMIT ?
516
+ `);
517
+ const rows = stmt.all(vectorBuffer, effectiveLimit);
518
+ return rows.map((row) => ({
451
519
  id: row.id,
452
- score: 1 - row._distance
453
- // Convert distance to similarity
520
+ score: 1 / (1 + row.distance)
454
521
  }));
455
522
  }
456
523
  async deleteVector(id) {
457
- if (!this.table)
458
- return;
459
- const sanitizedId = id.replace(/'/g, "''");
460
- await this.table.delete(`id = '${sanitizedId}'`);
524
+ const stmt = this.db.prepare(`DELETE FROM ${this.tableName} WHERE id = ?`);
525
+ stmt.run(id);
461
526
  }
462
527
  async getVectorCount() {
463
- if (!this.table)
464
- return 0;
465
- return await this.table.countRows();
528
+ const stmt = this.db.prepare(`SELECT COUNT(*) as count FROM ${this.tableName}`);
529
+ const result = stmt.get();
530
+ return result.count;
466
531
  }
467
532
  async getVectorsByIds(ids) {
468
533
  const result = /* @__PURE__ */ new Map();
469
- if (!this.table || ids.length === 0)
534
+ if (ids.length === 0)
470
535
  return result;
471
536
  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
- }
537
+ for (let i = 0; i < ids.length; i += BATCH_SIZE) {
538
+ const batch = ids.slice(i, i + BATCH_SIZE);
539
+ const placeholders = batch.map(() => "?").join(",");
540
+ const stmt = this.db.prepare(`
541
+ SELECT id, vector FROM ${this.tableName}
542
+ WHERE id IN (${placeholders})
543
+ `);
544
+ const rows = stmt.all(...batch);
545
+ for (const row of rows) {
546
+ const vector = Array.from(new Float32Array(row.vector));
547
+ result.set(row.id, vector);
481
548
  }
482
- } catch {
483
549
  }
484
550
  return result;
485
551
  }
486
552
  async close() {
553
+ this.db.close();
487
554
  }
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
- 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;
508
- }
555
+ // No optimize needed - SQLite handles this automatically!
556
+ async optimize() {
557
+ this.db.exec("VACUUM");
558
+ return { compacted: 0, pruned: 0 };
509
559
  }
510
560
  };
511
561
 
@@ -641,12 +691,12 @@ async function createEmbedFunction(modelsDir) {
641
691
  // ../../core/dist/memory/retrieve.js
642
692
  var MemoryRetriever = class {
643
693
  sqlite;
644
- lancedb;
694
+ vectorStore;
645
695
  embed;
646
696
  options;
647
- constructor(sqlite, lancedb2, embed, options = {}) {
697
+ constructor(sqlite, vectorStore, embed, options = {}) {
648
698
  this.sqlite = sqlite;
649
- this.lancedb = lancedb2;
699
+ this.vectorStore = vectorStore;
650
700
  this.embed = embed;
651
701
  this.options = {
652
702
  defaultLimit: options.defaultLimit ?? 0,
@@ -664,12 +714,12 @@ var MemoryRetriever = class {
664
714
  return this.sqlite.searchFTS(query, limit);
665
715
  }
666
716
  /**
667
- * Vector similarity search using LanceDB
717
+ * Vector similarity search
668
718
  */
669
719
  async vectorSearch(query, options = {}) {
670
720
  const limit = options.limit ?? this.options.defaultLimit;
671
721
  const queryVector = await this.embed(query);
672
- const vectorResults = await this.lancedb.search(queryVector, limit * 2);
722
+ const vectorResults = await this.vectorStore.search(queryVector, limit * 2);
673
723
  const results = [];
674
724
  for (const vr of vectorResults) {
675
725
  const memory = this.sqlite.getMemory(vr.id);
@@ -972,10 +1022,10 @@ async function main() {
972
1022
  const workspace = options.workspace ? (0, import_path2.resolve)(options.workspace) : process.cwd();
973
1023
  const projectId = getProjectId2(workspace);
974
1024
  const sqlite = new SQLiteStorage(DB_PATH);
975
- const lancedb2 = await LanceDBStorage.create(VECTORS_PATH);
1025
+ const vectorStore = await SQLiteVecStorage.create(VECTORS_PATH);
976
1026
  const embedder = await createEmbedFunction(MODELS_PATH);
977
1027
  try {
978
- const retriever = new MemoryRetriever(sqlite, lancedb2, embedder.embedQuery, {
1028
+ const retriever = new MemoryRetriever(sqlite, vectorStore, embedder.embedQuery, {
979
1029
  defaultLimit: options.limit ?? 0,
980
1030
  defaultRecentDays: options.days ?? 0
981
1031
  });
@@ -1037,7 +1087,7 @@ No memories found. This might be a new project.
1037
1087
  console.log(output);
1038
1088
  } finally {
1039
1089
  sqlite.close();
1040
- await lancedb2.close();
1090
+ await vectorStore.close();
1041
1091
  await embedder.close();
1042
1092
  }
1043
1093
  }
@@ -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":"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,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EAC1B,MAAM,iBAAiB,CAAC;AAEzB,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;AAYlD,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAkB;QAC7B,aAAa,EAAE,IAAI;QACnB,MAAM,EAAE,MAAM;KACf,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAEzB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,aAAa,CAAC;YACnB,KAAK,IAAI;gBACP,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;gBACzB,CAAC,EAAE,CAAC;gBACJ,MAAM;YACR,KAAK,QAAQ,CAAC;YACd,KAAK,IAAI;gBACP,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAClC,CAAC,EAAE,CAAC;gBACJ,MAAM;YACR,KAAK,SAAS,CAAC;YACf,KAAK,IAAI;gBACP,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACnC,CAAC,EAAE,CAAC;gBACJ,MAAM;YACR,KAAK,aAAa;gBAChB,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC;gBAC9B,MAAM;YACR,KAAK,UAAU,CAAC;YAChB,KAAK,IAAI;gBACP,OAAO,CAAC,MAAM,GAAG,IAAoC,CAAC;gBACtD,CAAC,EAAE,CAAC;gBACJ,MAAM;YACR,KAAK,aAAa,CAAC;YACnB,KAAK,IAAI;gBACP,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;gBACzB,MAAM;YACR,KAAK,SAAS,CAAC;YACf,KAAK,IAAI;gBACP,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;gBACrB,MAAM;YACR,KAAK,QAAQ,CAAC;YACd,KAAK,IAAI;gBACP,SAAS,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCb,CAAC,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,+BAA+B,EAAE;YACxD,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC;QACH,QAAQ;QACR,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,QAAQ,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,mBAAmB;QACnB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,QAAQ,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,UAAU;QACV,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,QAAQ,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAE5B,oCAAoC;IACpC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC1E,CAAC;QACD,gCAAgC;QAChC,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,yCAAyC;IAC5D,CAAC;IAED,sBAAsB;IACtB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IACjF,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAE1C,qBAAqB;IACrB,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,UAAU,EAAE;YAC1E,YAAY,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;YAChC,iBAAiB,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC;SACrC,CAAC,CAAC;QAEH,+BAA+B;QAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,aAAa,CAAC;gBACnB,EAAE,EAAE,SAAS;gBACb,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;gBACzB,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC;QAED,0BAA0B;QAC1B,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,oBAAoB,CAAC,SAAS,EAAE;YAC9D,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI;YAC5C,UAAU,EAAE,OAAO,CAAC,IAAI;SACzB,CAAC,CAAC;QAEH,+BAA+B;QAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;YACjC,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;YAChC,CAAC,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAErF,IAAI,MAAc,CAAC;QAEnB,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;gBACtB,SAAS;gBACT,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC;gBAChC,SAAS;gBACT,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;gBAC1C,UAAU;aACX,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACd,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACzC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,GAAG,wBAAwB,QAAQ,CAAC,SAAS,CAAC,uDAAuD,CAAC;YAC9G,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,GAAG,oCAAoC,QAAQ,CAAC,SAAS,CAAC,2EAA2E,CAAC;YAC9I,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBAChD,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;QACH,CAAC;QAED,SAAS;QACT,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEtB,CAAC;YAAS,CAAC;QACT,UAAU;QACV,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,OAIhC,EAAE,WAAmB;IACpB,MAAM,KAAK,GAAa,CAAC,wBAAwB,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;IAEpE,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,CAAC;YAC7D,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,GAAG,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
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,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EAC1B,MAAM,iBAAiB,CAAC;AAEzB,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;AAYlD,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAkB;QAC7B,aAAa,EAAE,IAAI;QACnB,MAAM,EAAE,MAAM;KACf,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAEzB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,aAAa,CAAC;YACnB,KAAK,IAAI;gBACP,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;gBACzB,CAAC,EAAE,CAAC;gBACJ,MAAM;YACR,KAAK,QAAQ,CAAC;YACd,KAAK,IAAI;gBACP,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAClC,CAAC,EAAE,CAAC;gBACJ,MAAM;YACR,KAAK,SAAS,CAAC;YACf,KAAK,IAAI;gBACP,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACnC,CAAC,EAAE,CAAC;gBACJ,MAAM;YACR,KAAK,aAAa;gBAChB,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC;gBAC9B,MAAM;YACR,KAAK,UAAU,CAAC;YAChB,KAAK,IAAI;gBACP,OAAO,CAAC,MAAM,GAAG,IAAoC,CAAC;gBACtD,CAAC,EAAE,CAAC;gBACJ,MAAM;YACR,KAAK,aAAa,CAAC;YACnB,KAAK,IAAI;gBACP,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;gBACzB,MAAM;YACR,KAAK,SAAS,CAAC;YACf,KAAK,IAAI;gBACP,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;gBACrB,MAAM;YACR,KAAK,QAAQ,CAAC;YACd,KAAK,IAAI;gBACP,SAAS,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCb,CAAC,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,+BAA+B,EAAE;YACxD,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC;QACH,QAAQ;QACR,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,QAAQ,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,mBAAmB;QACnB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,QAAQ,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,UAAU;QACV,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,QAAQ,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAE5B,oCAAoC;IACpC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC1E,CAAC;QACD,gCAAgC;QAChC,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,yCAAyC;IAC5D,CAAC;IAED,sBAAsB;IACtB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IACjF,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAE1C,qBAAqB;IACrB,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,UAAU,EAAE;YAC9E,YAAY,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;YAChC,iBAAiB,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC;SACrC,CAAC,CAAC;QAEH,+BAA+B;QAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,aAAa,CAAC;gBACnB,EAAE,EAAE,SAAS;gBACb,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;gBACzB,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC;QAED,0BAA0B;QAC1B,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,oBAAoB,CAAC,SAAS,EAAE;YAC9D,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI;YAC5C,UAAU,EAAE,OAAO,CAAC,IAAI;SACzB,CAAC,CAAC;QAEH,+BAA+B;QAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;YACjC,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;YAChC,CAAC,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAErF,IAAI,MAAc,CAAC;QAEnB,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;gBACtB,SAAS;gBACT,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC;gBAChC,SAAS;gBACT,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;gBAC1C,UAAU;aACX,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACd,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACzC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,GAAG,wBAAwB,QAAQ,CAAC,SAAS,CAAC,uDAAuD,CAAC;YAC9G,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,GAAG,oCAAoC,QAAQ,CAAC,SAAS,CAAC,2EAA2E,CAAC;YAC9I,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBAChD,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;QACH,CAAC;QAED,SAAS;QACT,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEtB,CAAC;YAAS,CAAC;QACT,UAAU;QACV,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;QAC1B,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,OAIhC,EAAE,WAAmB;IACpB,MAAM,KAAK,GAAa,CAAC,wBAAwB,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;IAEpE,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,CAAC;YAC7D,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,GAAG,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -14087,118 +14087,168 @@ var SQLiteStorage = class {
14087
14087
  }
14088
14088
  };
14089
14089
 
14090
- // ../../core/dist/storage/lancedb.js
14091
- var lancedb = __toESM(require("@lancedb/lancedb"), 1);
14092
- var LanceDBStorage = class _LanceDBStorage {
14090
+ // ../../core/dist/storage/sqlite-vec.js
14091
+ var import_better_sqlite32 = __toESM(require("better-sqlite3"), 1);
14092
+
14093
+ // ../../../node_modules/sqlite-vec/index.mjs
14094
+ var import_node_path = require("node:path");
14095
+ var import_node_url = require("node:url");
14096
+ var import_node_process2 = require("node:process");
14097
+ var import_node_fs = require("node:fs");
14098
+ var import_meta = {};
14099
+ var BASE_PACKAGE_NAME = "sqlite-vec";
14100
+ var ENTRYPOINT_BASE_NAME = "vec0";
14101
+ var supportedPlatforms = [["macos", "aarch64"], ["macos", "x86_64"], ["windows", "x86_64"], ["linux", "x86_64"], ["linux", "aarch64"]];
14102
+ var invalidPlatformErrorMessage = `Unsupported platform for ${BASE_PACKAGE_NAME}, on a ${import_node_process2.platform}-${import_node_process2.arch} machine. Supported platforms are (${supportedPlatforms.map(([p, a]) => `${p}-${a}`).join(",")}). Consult the ${BASE_PACKAGE_NAME} NPM package README for details.`;
14103
+ var extensionNotFoundErrorMessage = (packageName) => `Loadble extension for ${BASE_PACKAGE_NAME} not found. Was the ${packageName} package installed?`;
14104
+ function validPlatform(platform2, arch2) {
14105
+ return supportedPlatforms.find(([p, a]) => platform2 == p && arch2 === a) !== null;
14106
+ }
14107
+ function extensionSuffix(platform2) {
14108
+ if (platform2 === "win32")
14109
+ return "dll";
14110
+ if (platform2 === "darwin")
14111
+ return "dylib";
14112
+ return "so";
14113
+ }
14114
+ function platformPackageName(platform2, arch2) {
14115
+ const os = platform2 === "win32" ? "windows" : platform2;
14116
+ return `${BASE_PACKAGE_NAME}-${os}-${arch2}`;
14117
+ }
14118
+ function getLoadablePath() {
14119
+ if (!validPlatform(import_node_process2.platform, import_node_process2.arch)) {
14120
+ throw new Error(
14121
+ invalidPlatformErrorMessage
14122
+ );
14123
+ }
14124
+ const packageName = platformPackageName(import_node_process2.platform, import_node_process2.arch);
14125
+ const loadablePath = (0, import_node_path.join)(
14126
+ (0, import_node_url.fileURLToPath)(new URL((0, import_node_path.join)("."), import_meta.url)),
14127
+ "..",
14128
+ packageName,
14129
+ `${ENTRYPOINT_BASE_NAME}.${extensionSuffix(import_node_process2.platform)}`
14130
+ );
14131
+ if (!(0, import_node_fs.statSync)(loadablePath, { throwIfNoEntry: false })) {
14132
+ throw new Error(extensionNotFoundErrorMessage(packageName));
14133
+ }
14134
+ return loadablePath;
14135
+ }
14136
+ function load(db) {
14137
+ db.loadExtension(getLoadablePath());
14138
+ }
14139
+
14140
+ // ../../core/dist/storage/sqlite-vec.js
14141
+ var SQLiteVecStorage = class _SQLiteVecStorage {
14093
14142
  db;
14094
- table = null;
14095
- tableName = "memories";
14143
+ tableName = "memory_vectors";
14096
14144
  dimensions = 384;
14097
14145
  constructor(db) {
14098
14146
  this.db = db;
14099
14147
  }
14100
14148
  static async create(dbPath) {
14101
- const db = await lancedb.connect(dbPath);
14102
- const storage = new _LanceDBStorage(db);
14103
- await storage.initialize();
14149
+ let actualPath = dbPath;
14150
+ if (dbPath.endsWith("vectors") || dbPath.endsWith("vectors/")) {
14151
+ actualPath = dbPath.replace(/\/?$/, ".db");
14152
+ }
14153
+ const db = new import_better_sqlite32.default(actualPath);
14154
+ load(db);
14155
+ const storage = new _SQLiteVecStorage(db);
14156
+ storage.initialize();
14104
14157
  return storage;
14105
14158
  }
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
- }
14159
+ initialize() {
14160
+ this.db.exec(`
14161
+ CREATE VIRTUAL TABLE IF NOT EXISTS ${this.tableName} USING vec0(
14162
+ id TEXT PRIMARY KEY,
14163
+ vector FLOAT[${this.dimensions}]
14164
+ )
14165
+ `);
14111
14166
  }
14112
14167
  async insertVector(id, vector) {
14113
14168
  if (vector.length !== this.dimensions) {
14114
14169
  throw new Error(`Vector must have ${this.dimensions} dimensions, got ${vector.length}`);
14115
14170
  }
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();
14171
+ const float32 = new Float32Array(vector);
14172
+ const vectorBuffer = Buffer.from(float32.buffer);
14173
+ const stmt = this.db.prepare(`
14174
+ INSERT OR REPLACE INTO ${this.tableName} (id, vector)
14175
+ VALUES (?, ?)
14176
+ `);
14177
+ stmt.run(id, vectorBuffer);
14123
14178
  }
14124
14179
  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}`);
14180
+ const stmt = this.db.prepare(`
14181
+ INSERT OR REPLACE INTO ${this.tableName} (id, vector)
14182
+ VALUES (?, ?)
14183
+ `);
14184
+ const insertMany = this.db.transaction((items2) => {
14185
+ for (const item of items2) {
14186
+ if (item.vector.length !== this.dimensions) {
14187
+ throw new Error(`Vector must have ${this.dimensions} dimensions, got ${item.vector.length}`);
14188
+ }
14189
+ const float32 = new Float32Array(item.vector);
14190
+ const vectorBuffer = Buffer.from(float32.buffer);
14191
+ stmt.run(item.id, vectorBuffer);
14128
14192
  }
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();
14193
+ });
14194
+ insertMany(items);
14136
14195
  }
14137
14196
  async search(vector, limit = 10) {
14138
- if (!this.table) {
14139
- return [];
14197
+ if (vector.length !== this.dimensions) {
14198
+ throw new Error(`Query vector must have ${this.dimensions} dimensions, got ${vector.length}`);
14140
14199
  }
14141
14200
  const effectiveLimit = limit > 0 ? limit : 100;
14142
- const results = await this.table.vectorSearch(vector).limit(effectiveLimit).toArray();
14143
- return results.map((row) => ({
14201
+ const float32 = new Float32Array(vector);
14202
+ const vectorBuffer = Buffer.from(float32.buffer);
14203
+ const stmt = this.db.prepare(`
14204
+ SELECT id, distance
14205
+ FROM ${this.tableName}
14206
+ WHERE vector MATCH ?
14207
+ ORDER BY distance
14208
+ LIMIT ?
14209
+ `);
14210
+ const rows = stmt.all(vectorBuffer, effectiveLimit);
14211
+ return rows.map((row) => ({
14144
14212
  id: row.id,
14145
- score: 1 - row._distance
14146
- // Convert distance to similarity
14213
+ score: 1 / (1 + row.distance)
14147
14214
  }));
14148
14215
  }
14149
14216
  async deleteVector(id) {
14150
- if (!this.table)
14151
- return;
14152
- const sanitizedId = id.replace(/'/g, "''");
14153
- await this.table.delete(`id = '${sanitizedId}'`);
14217
+ const stmt = this.db.prepare(`DELETE FROM ${this.tableName} WHERE id = ?`);
14218
+ stmt.run(id);
14154
14219
  }
14155
14220
  async getVectorCount() {
14156
- if (!this.table)
14157
- return 0;
14158
- return await this.table.countRows();
14221
+ const stmt = this.db.prepare(`SELECT COUNT(*) as count FROM ${this.tableName}`);
14222
+ const result = stmt.get();
14223
+ return result.count;
14159
14224
  }
14160
14225
  async getVectorsByIds(ids) {
14161
14226
  const result = /* @__PURE__ */ new Map();
14162
- if (!this.table || ids.length === 0)
14227
+ if (ids.length === 0)
14163
14228
  return result;
14164
14229
  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
- }
14230
+ for (let i = 0; i < ids.length; i += BATCH_SIZE) {
14231
+ const batch = ids.slice(i, i + BATCH_SIZE);
14232
+ const placeholders = batch.map(() => "?").join(",");
14233
+ const stmt = this.db.prepare(`
14234
+ SELECT id, vector FROM ${this.tableName}
14235
+ WHERE id IN (${placeholders})
14236
+ `);
14237
+ const rows = stmt.all(...batch);
14238
+ for (const row of rows) {
14239
+ const vector = Array.from(new Float32Array(row.vector));
14240
+ result.set(row.id, vector);
14174
14241
  }
14175
- } catch {
14176
14242
  }
14177
14243
  return result;
14178
14244
  }
14179
14245
  async close() {
14246
+ this.db.close();
14180
14247
  }
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
- 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;
14201
- }
14248
+ // No optimize needed - SQLite handles this automatically!
14249
+ async optimize() {
14250
+ this.db.exec("VACUUM");
14251
+ return { compacted: 0, pruned: 0 };
14202
14252
  }
14203
14253
  };
14204
14254
 
@@ -14334,12 +14384,12 @@ async function createEmbedFunction(modelsDir) {
14334
14384
  // ../../core/dist/memory/retrieve.js
14335
14385
  var MemoryRetriever = class {
14336
14386
  sqlite;
14337
- lancedb;
14387
+ vectorStore;
14338
14388
  embed;
14339
14389
  options;
14340
- constructor(sqlite2, lancedb3, embed, options = {}) {
14390
+ constructor(sqlite2, vectorStore2, embed, options = {}) {
14341
14391
  this.sqlite = sqlite2;
14342
- this.lancedb = lancedb3;
14392
+ this.vectorStore = vectorStore2;
14343
14393
  this.embed = embed;
14344
14394
  this.options = {
14345
14395
  defaultLimit: options.defaultLimit ?? 0,
@@ -14357,12 +14407,12 @@ var MemoryRetriever = class {
14357
14407
  return this.sqlite.searchFTS(query, limit);
14358
14408
  }
14359
14409
  /**
14360
- * Vector similarity search using LanceDB
14410
+ * Vector similarity search
14361
14411
  */
14362
14412
  async vectorSearch(query, options = {}) {
14363
14413
  const limit = options.limit ?? this.options.defaultLimit;
14364
14414
  const queryVector = await this.embed(query);
14365
- const vectorResults = await this.lancedb.search(queryVector, limit * 2);
14415
+ const vectorResults = await this.vectorStore.search(queryVector, limit * 2);
14366
14416
  const results = [];
14367
14417
  for (const vr of vectorResults) {
14368
14418
  const memory = this.sqlite.getMemory(vr.id);
@@ -14552,20 +14602,20 @@ var DB_PATH = (0, import_path2.join)(MEMEXTEND_DIR, "memextend.db");
14552
14602
  var VECTORS_PATH = (0, import_path2.join)(MEMEXTEND_DIR, "vectors");
14553
14603
  var MODELS_PATH = (0, import_path2.join)(MEMEXTEND_DIR, "models");
14554
14604
  var sqlite = null;
14555
- var lancedb2 = null;
14605
+ var vectorStore = null;
14556
14606
  var retriever = null;
14557
14607
  var embedder = null;
14558
14608
  async function getStorage() {
14559
- if (!sqlite || !lancedb2 || !retriever || !embedder) {
14609
+ if (!sqlite || !vectorStore || !retriever || !embedder) {
14560
14610
  if (!(0, import_fs2.existsSync)(DB_PATH)) {
14561
14611
  throw new Error("memextend not initialized. Run `memextend init` first.");
14562
14612
  }
14563
14613
  sqlite = new SQLiteStorage(DB_PATH);
14564
- lancedb2 = await LanceDBStorage.create(VECTORS_PATH);
14614
+ vectorStore = await SQLiteVecStorage.create(VECTORS_PATH);
14565
14615
  embedder = await createEmbedFunction(MODELS_PATH);
14566
- retriever = new MemoryRetriever(sqlite, lancedb2, embedder.embedQuery);
14616
+ retriever = new MemoryRetriever(sqlite, vectorStore, embedder.embedQuery);
14567
14617
  }
14568
- return { sqlite, lancedb: lancedb2, retriever, embedder };
14618
+ return { sqlite, vectorStore, retriever, embedder };
14569
14619
  }
14570
14620
  function getCurrentWorkspace() {
14571
14621
  return process.env.CURSOR_WORKSPACE_PATH || process.env.VSCODE_WORKSPACE_PATH || process.env.PWD || process.cwd();
@@ -14788,7 +14838,7 @@ ${preview}`;
14788
14838
  ${formatted}` }] };
14789
14839
  }
14790
14840
  case "memextend_save": {
14791
- const { sqlite: sqlite2, lancedb: lancedb3, embedder: embedder2 } = await getStorage();
14841
+ const { sqlite: sqlite2, vectorStore: vectorStore2, embedder: embedder2 } = await getStorage();
14792
14842
  const content = args?.content;
14793
14843
  const tags = args?.tags ?? [];
14794
14844
  if (!content || content.length < 10) {
@@ -14820,7 +14870,7 @@ ${content}` : content;
14820
14870
  metadata: tags.length > 0 ? { tags } : null
14821
14871
  });
14822
14872
  const vector = await embedder2.embed(content);
14823
- await lancedb3.insertVector(memoryId, vector);
14873
+ await vectorStore2.insertVector(memoryId, vector);
14824
14874
  return { content: [{ type: "text", text: `Memory saved successfully!
14825
14875
  ID: ${memoryId}
14826
14876
  Project: ${(0, import_path2.basename)(workspace)}` }] };
@@ -14859,23 +14909,23 @@ Project: ${(0, import_path2.basename)(workspace)}` }] };
14859
14909
  return { content: [{ type: "text", text: formatted }] };
14860
14910
  }
14861
14911
  case "memextend_forget": {
14862
- const { sqlite: sqlite2, lancedb: lancedb3 } = await getStorage();
14912
+ const { sqlite: sqlite2, vectorStore: vectorStore2 } = await getStorage();
14863
14913
  const memoryId = args?.memoryId;
14864
14914
  if (!memoryId) {
14865
14915
  return { content: [{ type: "text", text: "Memory ID is required." }], isError: true };
14866
14916
  }
14867
14917
  const deleted = sqlite2.deleteMemory(memoryId);
14868
14918
  if (deleted) {
14869
- await lancedb3.deleteVector(memoryId);
14919
+ await vectorStore2.deleteVector(memoryId);
14870
14920
  return { content: [{ type: "text", text: `Memory ${memoryId} deleted successfully.` }] };
14871
14921
  } else {
14872
14922
  return { content: [{ type: "text", text: `Memory ${memoryId} not found.` }] };
14873
14923
  }
14874
14924
  }
14875
14925
  case "memextend_status": {
14876
- const { sqlite: sqlite2, lancedb: lancedb3, embedder: embedder2 } = await getStorage();
14926
+ const { sqlite: sqlite2, vectorStore: vectorStore2, embedder: embedder2 } = await getStorage();
14877
14927
  const memoryCount = sqlite2.getMemoryCount();
14878
- const vectorCount = await lancedb3.getVectorCount();
14928
+ const vectorCount = await vectorStore2.getVectorCount();
14879
14929
  const projectMemories = sqlite2.getAllMemories(projectId, 1e3);
14880
14930
  const projectMemoryCount = projectMemories.length;
14881
14931
  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
@@ -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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memextend/cursor",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
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.0",
30
30
  "@modelcontextprotocol/sdk": "^1.0.0"
31
31
  },
32
32
  "devDependencies": {
@@ -16,7 +16,7 @@ const commonOptions = {
16
16
  target: 'node18',
17
17
  format: 'cjs',
18
18
  // External native modules that can't be bundled
19
- external: ['better-sqlite3', 'node-llama-cpp', '@lancedb/lancedb'],
19
+ external: ['better-sqlite3', 'node-llama-cpp'],
20
20
  logLevel: 'warning',
21
21
  // Add shebang for CLI executables
22
22
  banner: {
@@ -16,7 +16,7 @@ const commonOptions = {
16
16
  target: 'node18',
17
17
  format: 'cjs',
18
18
  // External native modules that can't be bundled
19
- external: ['better-sqlite3', 'node-llama-cpp', '@lancedb/lancedb'],
19
+ external: ['better-sqlite3', 'node-llama-cpp'],
20
20
  logLevel: 'warning',
21
21
  };
22
22