@robthepcguy/rag-vault 1.0.1 → 1.1.1

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.
Files changed (73) hide show
  1. package/README.md +441 -421
  2. package/dist/errors/index.d.ts +2 -6
  3. package/dist/errors/index.d.ts.map +1 -1
  4. package/dist/errors/index.js +8 -16
  5. package/dist/errors/index.js.map +1 -1
  6. package/dist/explainability/index.d.ts +2 -0
  7. package/dist/explainability/index.d.ts.map +1 -0
  8. package/dist/explainability/index.js +8 -0
  9. package/dist/explainability/index.js.map +1 -0
  10. package/dist/explainability/keywords.d.ts +18 -0
  11. package/dist/explainability/keywords.d.ts.map +1 -0
  12. package/dist/explainability/keywords.js +237 -0
  13. package/dist/explainability/keywords.js.map +1 -0
  14. package/dist/flywheel/feedback.d.ts +105 -0
  15. package/dist/flywheel/feedback.d.ts.map +1 -0
  16. package/dist/flywheel/feedback.js +219 -0
  17. package/dist/flywheel/feedback.js.map +1 -0
  18. package/dist/flywheel/index.d.ts +2 -0
  19. package/dist/flywheel/index.d.ts.map +1 -0
  20. package/dist/flywheel/index.js +9 -0
  21. package/dist/flywheel/index.js.map +1 -0
  22. package/dist/index.js +1 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/server/index.d.ts +40 -0
  25. package/dist/server/index.d.ts.map +1 -1
  26. package/dist/server/index.js +113 -0
  27. package/dist/server/index.js.map +1 -1
  28. package/dist/server/raw-data-utils.d.ts.map +1 -1
  29. package/dist/server/raw-data-utils.js.map +1 -1
  30. package/dist/utils/config.d.ts +15 -0
  31. package/dist/utils/config.d.ts.map +1 -1
  32. package/dist/utils/config.js +84 -0
  33. package/dist/utils/config.js.map +1 -1
  34. package/dist/utils/math.d.ts +0 -7
  35. package/dist/utils/math.d.ts.map +1 -1
  36. package/dist/utils/math.js +0 -14
  37. package/dist/utils/math.js.map +1 -1
  38. package/dist/vectordb/index.d.ts +57 -2
  39. package/dist/vectordb/index.d.ts.map +1 -1
  40. package/dist/vectordb/index.js +255 -33
  41. package/dist/vectordb/index.js.map +1 -1
  42. package/dist/web/api-routes.d.ts.map +1 -1
  43. package/dist/web/api-routes.js +120 -7
  44. package/dist/web/api-routes.js.map +1 -1
  45. package/dist/web/config-routes.d.ts.map +1 -1
  46. package/dist/web/config-routes.js +84 -2
  47. package/dist/web/config-routes.js.map +1 -1
  48. package/dist/web/database-manager.d.ts +119 -1
  49. package/dist/web/database-manager.d.ts.map +1 -1
  50. package/dist/web/database-manager.js +339 -51
  51. package/dist/web/database-manager.js.map +1 -1
  52. package/dist/web/http-server.d.ts.map +1 -1
  53. package/dist/web/http-server.js +12 -2
  54. package/dist/web/http-server.js.map +1 -1
  55. package/dist/web/index.js +4 -1
  56. package/dist/web/index.js.map +1 -1
  57. package/dist/web/middleware/error-handler.d.ts +0 -16
  58. package/dist/web/middleware/error-handler.d.ts.map +1 -1
  59. package/dist/web/middleware/error-handler.js +0 -18
  60. package/dist/web/middleware/error-handler.js.map +1 -1
  61. package/dist/web/middleware/request-logger.d.ts +2 -1
  62. package/dist/web/middleware/request-logger.d.ts.map +1 -1
  63. package/package.json +129 -136
  64. package/skills/rag-vault/SKILL.md +111 -111
  65. package/web-ui/dist/assets/index-BcRp9-z9.js +120 -0
  66. package/web-ui/dist/assets/index-ej8i4PGl.css +1 -0
  67. package/web-ui/dist/index.html +2 -2
  68. package/dist/utils/logger.d.ts +0 -36
  69. package/dist/utils/logger.d.ts.map +0 -1
  70. package/dist/utils/logger.js +0 -64
  71. package/dist/utils/logger.js.map +0 -1
  72. package/web-ui/dist/assets/index-0kBxUnZc.css +0 -1
  73. package/web-ui/dist/assets/index-CaUT0xZD.js +0 -59
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.DatabaseManager = void 0;
7
+ exports.DatabaseManager = exports.AVAILABLE_MODELS = void 0;
8
8
  const node_fs_1 = require("node:fs");
9
9
  const promises_1 = require("node:fs/promises");
10
10
  const node_os_1 = require("node:os");
@@ -17,6 +17,8 @@ const schemas_js_1 = require("../server/schemas.js");
17
17
  const CONFIG_DIR = node_path_1.default.join((0, node_os_1.homedir)(), '.rag-vault');
18
18
  /** Recent databases file path */
19
19
  const RECENT_DBS_FILE = node_path_1.default.join(CONFIG_DIR, 'recent-dbs.json');
20
+ /** User-added allowed roots file path */
21
+ const ALLOWED_ROOTS_FILE = node_path_1.default.join(CONFIG_DIR, 'allowed-roots.json');
20
22
  /** LanceDB directory name (indicator of a valid database) */
21
23
  const LANCEDB_DIR_NAME = 'chunks.lance';
22
24
  /** Maximum number of recent databases to track */
@@ -25,7 +27,7 @@ const MAX_RECENT_DATABASES = 10;
25
27
  * Get allowed scan roots from environment variable or default to home directory
26
28
  * ALLOWED_SCAN_ROOTS: comma-separated list of absolute paths
27
29
  */
28
- function getAllowedScanRoots() {
30
+ function getEnvAllowedScanRoots() {
29
31
  const envRoots = process.env['ALLOWED_SCAN_ROOTS'];
30
32
  if (envRoots) {
31
33
  return envRoots.split(',').map((p) => node_path_1.default.resolve(p.trim()));
@@ -34,12 +36,39 @@ function getAllowedScanRoots() {
34
36
  return [(0, node_os_1.homedir)()];
35
37
  }
36
38
  /**
37
- * Validate that a path is within allowed scan roots (prevents path traversal)
38
- * @param targetPath - Path to validate (will be resolved and normalized)
39
- * @returns true if path is within allowed roots
39
+ * Read user-added allowed roots from config file
40
+ * Note: This is async to avoid blocking the event loop
40
41
  */
41
- function isPathWithinAllowedRoots(targetPath) {
42
- const allowedRoots = getAllowedScanRoots();
42
+ async function readUserAllowedRoots() {
43
+ if (!(0, node_fs_1.existsSync)(ALLOWED_ROOTS_FILE)) {
44
+ return [];
45
+ }
46
+ try {
47
+ const content = JSON.parse(await (0, promises_1.readFile)(ALLOWED_ROOTS_FILE, 'utf-8'));
48
+ if (Array.isArray(content.roots)) {
49
+ return content.roots.map((p) => node_path_1.default.resolve(p));
50
+ }
51
+ return [];
52
+ }
53
+ catch {
54
+ return [];
55
+ }
56
+ }
57
+ /**
58
+ * Write user-added allowed roots to config file
59
+ * Note: This is async to avoid blocking the event loop
60
+ */
61
+ async function writeUserAllowedRoots(roots) {
62
+ const dir = node_path_1.default.dirname(ALLOWED_ROOTS_FILE);
63
+ if (!(0, node_fs_1.existsSync)(dir)) {
64
+ await (0, promises_1.mkdir)(dir, { recursive: true });
65
+ }
66
+ await (0, promises_1.writeFile)(ALLOWED_ROOTS_FILE, JSON.stringify({ roots }, null, 2), 'utf-8');
67
+ }
68
+ /**
69
+ * Check if a path is within a set of allowed roots
70
+ */
71
+ function isPathWithinRoots(targetPath, allowedRoots) {
43
72
  let resolvedPath;
44
73
  try {
45
74
  // Resolve to absolute path and resolve symlinks
@@ -69,6 +98,47 @@ function expandTilde(filePath) {
69
98
  }
70
99
  return filePath;
71
100
  }
101
+ /**
102
+ * Preset embedding models
103
+ */
104
+ exports.AVAILABLE_MODELS = [
105
+ {
106
+ id: 'Xenova/all-MiniLM-L6-v2',
107
+ name: 'all-MiniLM-L6-v2',
108
+ description: 'Fast, general-purpose model (384 dimensions)',
109
+ isDefault: true,
110
+ },
111
+ {
112
+ id: 'Xenova/all-mpnet-base-v2',
113
+ name: 'all-mpnet-base-v2',
114
+ description: 'Higher quality, slower (768 dimensions)',
115
+ isDefault: false,
116
+ },
117
+ {
118
+ id: 'Xenova/bge-small-en-v1.5',
119
+ name: 'bge-small-en-v1.5',
120
+ description: 'Optimized for retrieval (384 dimensions)',
121
+ isDefault: false,
122
+ },
123
+ {
124
+ id: 'onnx-community/embeddinggemma-300m-ONNX',
125
+ name: 'embeddinggemma-300M',
126
+ description: 'High-quality multilingual (300M params, 100+ languages)',
127
+ isDefault: false,
128
+ },
129
+ {
130
+ id: 'sentence-transformers/allenai-specter',
131
+ name: 'allenai-specter',
132
+ description: 'Optimized for scientific papers and citations',
133
+ isDefault: false,
134
+ },
135
+ {
136
+ id: 'jinaai/jina-embeddings-v2-base-code',
137
+ name: 'jina-code-v2',
138
+ description: 'Optimized for code and technical documentation',
139
+ isDefault: false,
140
+ },
141
+ ];
72
142
  // ============================================
73
143
  // DatabaseManager Class
74
144
  // ============================================
@@ -94,15 +164,20 @@ class DatabaseManager {
94
164
  */
95
165
  async initialize(dbPath) {
96
166
  await this.ensureConfigDir();
167
+ // Look up stored model name from recent databases
168
+ const recentDbs = await this.getRecentDatabases();
169
+ const storedEntry = recentDbs.find((db) => db.path === dbPath);
170
+ const effectiveModelName = storedEntry?.modelName || this.baseConfig.modelName;
97
171
  const config = {
98
172
  ...this.baseConfig,
99
173
  dbPath,
174
+ modelName: effectiveModelName,
100
175
  };
101
176
  this.currentServer = this.serverFactory(config);
102
177
  this.currentConfig = config;
103
178
  await this.currentServer.initialize();
104
- // Add to recent databases
105
- await this.addToRecent(dbPath, this.baseConfig.modelName);
179
+ // Add to recent databases with the model name
180
+ await this.addToRecent(dbPath, effectiveModelName);
106
181
  }
107
182
  /**
108
183
  * Get current RAG server instance
@@ -162,8 +237,12 @@ class DatabaseManager {
162
237
  if (!(0, node_fs_1.existsSync)(lanceDbPath)) {
163
238
  throw new Error(`Invalid database: ${resolvedPath} (missing LanceDB data)`);
164
239
  }
240
+ // Look up stored model name from recent databases
241
+ const recentDbs = await this.getRecentDatabases();
242
+ const storedEntry = recentDbs.find((db) => db.path === resolvedPath);
243
+ const modelName = storedEntry?.modelName;
165
244
  // Set promise atomically before any async operations
166
- this.switchPromise = this.performSwitch(resolvedPath).finally(() => {
245
+ this.switchPromise = this.performSwitch(resolvedPath, modelName).finally(() => {
167
246
  this.switchPromise = null;
168
247
  });
169
248
  return this.switchPromise;
@@ -171,22 +250,25 @@ class DatabaseManager {
171
250
  /**
172
251
  * Internal method to perform the actual database switch
173
252
  */
174
- async performSwitch(resolvedPath) {
253
+ async performSwitch(resolvedPath, modelName) {
175
254
  // Close current server
176
255
  if (this.currentServer) {
177
256
  await this.currentServer.close();
178
257
  }
179
- // Create new server with new path
258
+ // Use stored model name if available, otherwise fall back to baseConfig
259
+ const effectiveModelName = modelName || this.baseConfig.modelName;
260
+ // Create new server with new path and correct model
180
261
  const config = {
181
262
  ...this.baseConfig,
182
263
  dbPath: resolvedPath,
264
+ modelName: effectiveModelName,
183
265
  };
184
266
  this.currentServer = this.serverFactory(config);
185
267
  this.currentConfig = config;
186
268
  await this.currentServer.initialize();
187
- // Update recent databases
188
- await this.addToRecent(resolvedPath, this.baseConfig.modelName);
189
- console.log(`Switched to database: ${resolvedPath}`);
269
+ // Update recent databases with the model name
270
+ await this.addToRecent(resolvedPath, effectiveModelName);
271
+ console.log(`Switched to database: ${resolvedPath} (model: ${effectiveModelName})`);
190
272
  }
191
273
  /**
192
274
  * Create a new database
@@ -205,19 +287,19 @@ class DatabaseManager {
205
287
  await (0, promises_1.mkdir)(resolvedPath, { recursive: true });
206
288
  // Switch to the new database (it will be empty initially)
207
289
  // The VectorStore will create the table on first data insertion
208
- await this.switchToNewDatabase(resolvedPath);
290
+ await this.switchToNewDatabase(resolvedPath, options.modelName);
209
291
  }
210
292
  /**
211
293
  * Switch to a new (possibly empty) database
212
294
  *
213
295
  * Uses promise-based mutex to prevent race conditions from concurrent switch attempts.
214
296
  */
215
- async switchToNewDatabase(newDbPath) {
297
+ async switchToNewDatabase(newDbPath, modelName) {
216
298
  if (this.switchPromise) {
217
299
  throw new Error('Database switch already in progress');
218
300
  }
219
301
  // Set promise atomically before any async operations
220
- this.switchPromise = this.performSwitchToNew(newDbPath).finally(() => {
302
+ this.switchPromise = this.performSwitchToNew(newDbPath, modelName).finally(() => {
221
303
  this.switchPromise = null;
222
304
  });
223
305
  return this.switchPromise;
@@ -225,19 +307,22 @@ class DatabaseManager {
225
307
  /**
226
308
  * Internal method to perform the actual switch to a new database
227
309
  */
228
- async performSwitchToNew(newDbPath) {
310
+ async performSwitchToNew(newDbPath, modelName) {
229
311
  if (this.currentServer) {
230
312
  await this.currentServer.close();
231
313
  }
314
+ // Use provided modelName or fall back to baseConfig
315
+ const effectiveModelName = modelName || this.baseConfig.modelName;
232
316
  const config = {
233
317
  ...this.baseConfig,
234
318
  dbPath: newDbPath,
319
+ modelName: effectiveModelName,
235
320
  };
236
321
  this.currentServer = this.serverFactory(config);
237
322
  this.currentConfig = config;
238
323
  await this.currentServer.initialize();
239
- await this.addToRecent(newDbPath, this.baseConfig.modelName);
240
- console.log(`Created and switched to database: ${newDbPath}`);
324
+ await this.addToRecent(newDbPath, effectiveModelName);
325
+ console.log(`Created and switched to database: ${newDbPath} (model: ${effectiveModelName})`);
241
326
  }
242
327
  /**
243
328
  * Get list of recent databases
@@ -278,21 +363,124 @@ class DatabaseManager {
278
363
  return [];
279
364
  }
280
365
  }
366
+ /**
367
+ * Get the base directory (dbPath directory)
368
+ */
369
+ getBaseDir() {
370
+ return this.currentConfig ? node_path_1.default.dirname(this.currentConfig.dbPath) : (0, node_os_1.homedir)();
371
+ }
372
+ /**
373
+ * Get all effective allowed roots (env + baseDir + user-added)
374
+ */
375
+ async getEffectiveAllowedRoots() {
376
+ const envRoots = getEnvAllowedScanRoots();
377
+ const userRoots = await readUserAllowedRoots();
378
+ const baseDir = this.getBaseDir();
379
+ // Combine all sources and deduplicate
380
+ const allRoots = new Set([...envRoots, baseDir, ...userRoots]);
381
+ return Array.from(allRoots);
382
+ }
383
+ /**
384
+ * Check if a path is within allowed roots
385
+ */
386
+ async isPathAllowed(targetPath) {
387
+ const allowedRoots = await this.getEffectiveAllowedRoots();
388
+ return isPathWithinRoots(targetPath, allowedRoots);
389
+ }
390
+ /**
391
+ * Get allowed roots info for API response
392
+ */
393
+ async getAllowedRootsInfo() {
394
+ const [roots, userRoots] = await Promise.all([
395
+ this.getEffectiveAllowedRoots(),
396
+ readUserAllowedRoots(),
397
+ ]);
398
+ return {
399
+ roots,
400
+ baseDir: this.getBaseDir(),
401
+ envRoots: getEnvAllowedScanRoots(),
402
+ userRoots,
403
+ };
404
+ }
405
+ /**
406
+ * Add a user-allowed root
407
+ */
408
+ async addUserAllowedRoot(rootPath) {
409
+ const resolved = node_path_1.default.resolve(expandTilde(rootPath));
410
+ if (!(0, node_fs_1.existsSync)(resolved)) {
411
+ throw new Error(`Path does not exist: ${resolved}`);
412
+ }
413
+ const roots = await readUserAllowedRoots();
414
+ if (!roots.includes(resolved)) {
415
+ roots.push(resolved);
416
+ await writeUserAllowedRoots(roots);
417
+ }
418
+ }
419
+ /**
420
+ * Remove a user-allowed root
421
+ */
422
+ async removeUserAllowedRoot(rootPath) {
423
+ const resolved = node_path_1.default.resolve(expandTilde(rootPath));
424
+ const roots = await readUserAllowedRoots();
425
+ const filtered = roots.filter((r) => r !== resolved);
426
+ await writeUserAllowedRoots(filtered);
427
+ }
428
+ /**
429
+ * List directory contents for folder browser
430
+ * @param dirPath - The directory path to list
431
+ * @param showHidden - Whether to include hidden files (starting with .)
432
+ */
433
+ async listDirectory(dirPath, showHidden = false) {
434
+ const resolved = node_path_1.default.resolve(expandTilde(dirPath));
435
+ // Allow browsing root directories and paths within allowed roots
436
+ // For security, we still allow browsing but the user can only add paths as allowed roots
437
+ if (!(0, node_fs_1.existsSync)(resolved)) {
438
+ throw new Error(`Directory does not exist: ${resolved}`);
439
+ }
440
+ const dirStat = await (0, promises_1.stat)(resolved);
441
+ if (!dirStat.isDirectory()) {
442
+ throw new Error(`Path is not a directory: ${resolved}`);
443
+ }
444
+ const entries = await (0, promises_1.readdir)(resolved, { withFileTypes: true });
445
+ const results = [];
446
+ for (const entry of entries) {
447
+ // Skip hidden files/directories unless showHidden is true
448
+ if (!showHidden && entry.name.startsWith('.'))
449
+ continue;
450
+ results.push({
451
+ name: entry.name,
452
+ path: node_path_1.default.join(resolved, entry.name),
453
+ isDirectory: entry.isDirectory(),
454
+ });
455
+ }
456
+ // Sort: directories first, then alphabetically
457
+ results.sort((a, b) => {
458
+ if (a.isDirectory && !b.isDirectory)
459
+ return -1;
460
+ if (!a.isDirectory && b.isDirectory)
461
+ return 1;
462
+ return a.name.localeCompare(b.name);
463
+ });
464
+ return results;
465
+ }
281
466
  /**
282
467
  * Scan a directory for LanceDB databases
283
468
  *
284
469
  * Security: Only scans within allowed roots (ALLOWED_SCAN_ROOTS env var or home directory)
285
470
  * to prevent path traversal attacks.
471
+ *
472
+ * @param scanPath - The path to scan
473
+ * @param maxDepth - Maximum depth to scan (default 2)
286
474
  */
287
- async scanForDatabases(scanPath) {
475
+ async scanForDatabases(scanPath, maxDepth = 2) {
288
476
  // Expand tilde to home directory
289
477
  const resolvedPath = expandTilde(scanPath);
290
478
  // Security: Validate path is within allowed roots
291
- if (!isPathWithinAllowedRoots(resolvedPath)) {
292
- const allowedRoots = getAllowedScanRoots();
479
+ if (!(await this.isPathAllowed(resolvedPath))) {
480
+ const allowedRoots = await this.getEffectiveAllowedRoots();
293
481
  throw new Error(`Scan path "${resolvedPath}" is outside allowed roots. ` +
294
482
  `Allowed: ${allowedRoots.join(', ')}. ` +
295
- `Set ALLOWED_SCAN_ROOTS environment variable to allow additional paths.`);
483
+ `Add this path to allowed roots or set ALLOWED_SCAN_ROOTS environment variable.`);
296
484
  }
297
485
  const results = [];
298
486
  const recentDbs = await this.getRecentDatabases();
@@ -304,36 +492,100 @@ class DatabaseManager {
304
492
  if (!scanStat.isDirectory()) {
305
493
  throw new Error(`Scan path is not a directory: ${resolvedPath}`);
306
494
  }
307
- // Check if resolvedPath itself is a database
308
- const lanceDbPath = node_path_1.default.join(resolvedPath, LANCEDB_DIR_NAME);
309
- if ((0, node_fs_1.existsSync)(lanceDbPath)) {
310
- results.push({
311
- path: resolvedPath,
312
- name: this.getNameFromPath(resolvedPath),
313
- isKnown: knownPaths.has(resolvedPath),
314
- });
315
- }
316
- // Scan subdirectories (one level deep)
317
- try {
318
- const entries = await (0, promises_1.readdir)(resolvedPath, { withFileTypes: true });
319
- for (const entry of entries) {
320
- if (!entry.isDirectory())
321
- continue;
322
- const subPath = node_path_1.default.join(resolvedPath, entry.name);
323
- const subLanceDbPath = node_path_1.default.join(subPath, LANCEDB_DIR_NAME);
324
- if ((0, node_fs_1.existsSync)(subLanceDbPath)) {
325
- results.push({
326
- path: subPath,
327
- name: this.getNameFromPath(subPath),
328
- isKnown: knownPaths.has(subPath),
329
- });
495
+ // Recursive scan function with depth tracking
496
+ const scanDirectory = async (dirPath, currentDepth) => {
497
+ // Check if this directory is a database
498
+ const lanceDbPath = node_path_1.default.join(dirPath, LANCEDB_DIR_NAME);
499
+ if ((0, node_fs_1.existsSync)(lanceDbPath)) {
500
+ results.push({
501
+ path: dirPath,
502
+ name: this.getNameFromPath(dirPath),
503
+ isKnown: knownPaths.has(dirPath),
504
+ });
505
+ // Don't scan subdirectories of a database
506
+ return;
507
+ }
508
+ // Stop if we've reached max depth
509
+ if (currentDepth >= maxDepth)
510
+ return;
511
+ try {
512
+ const entries = await (0, promises_1.readdir)(dirPath, { withFileTypes: true });
513
+ for (const entry of entries) {
514
+ if (!entry.isDirectory())
515
+ continue;
516
+ // Skip hidden directories
517
+ if (entry.name.startsWith('.'))
518
+ continue;
519
+ const subPath = node_path_1.default.join(dirPath, entry.name);
520
+ await scanDirectory(subPath, currentDepth + 1);
330
521
  }
331
522
  }
523
+ catch (error) {
524
+ // Ignore permission errors on individual directories
525
+ console.error(`Failed to scan directory ${dirPath}:`, error);
526
+ }
527
+ };
528
+ await scanDirectory(resolvedPath, 0);
529
+ return results;
530
+ }
531
+ /**
532
+ * Get available embedding models
533
+ */
534
+ getAvailableModels() {
535
+ return exports.AVAILABLE_MODELS;
536
+ }
537
+ /**
538
+ * Export configuration (allowed roots)
539
+ */
540
+ async exportConfig() {
541
+ return {
542
+ version: 1,
543
+ exportedAt: new Date().toISOString(),
544
+ allowedRoots: await readUserAllowedRoots(),
545
+ };
546
+ }
547
+ /**
548
+ * Import configuration (allowed roots)
549
+ */
550
+ async importConfig(config) {
551
+ if (config.version !== 1) {
552
+ throw new Error(`Unsupported config version: ${config.version}`);
332
553
  }
333
- catch (error) {
334
- console.error(`Failed to scan directory ${resolvedPath}:`, error);
554
+ if (!Array.isArray(config.allowedRoots)) {
555
+ throw new Error('Invalid config: allowedRoots must be an array');
335
556
  }
336
- return results;
557
+ // Validate each path exists before importing
558
+ const validRoots = [];
559
+ for (const root of config.allowedRoots) {
560
+ const resolved = node_path_1.default.resolve(expandTilde(root));
561
+ if ((0, node_fs_1.existsSync)(resolved)) {
562
+ validRoots.push(resolved);
563
+ }
564
+ else {
565
+ console.warn(`Skipping non-existent root during import: ${resolved}`);
566
+ }
567
+ }
568
+ await writeUserAllowedRoots(validRoots);
569
+ }
570
+ /**
571
+ * Get the current hybrid search weight
572
+ * @returns Value between 0.0 (vector-only) and 1.0 (max keyword boost)
573
+ */
574
+ getHybridWeight() {
575
+ if (!this.currentServer) {
576
+ return 0.6; // Default value
577
+ }
578
+ return this.currentServer.getHybridWeight();
579
+ }
580
+ /**
581
+ * Set the hybrid search weight at runtime
582
+ * @param weight - Value between 0.0 (vector-only) and 1.0 (max keyword boost)
583
+ */
584
+ setHybridWeight(weight) {
585
+ if (!this.currentServer) {
586
+ throw new Error('DatabaseManager not initialized. Call initialize() first.');
587
+ }
588
+ this.currentServer.setHybridWeight(weight);
337
589
  }
338
590
  /**
339
591
  * Add a database to recent list
@@ -356,6 +608,42 @@ class DatabaseManager {
356
608
  };
357
609
  await (0, promises_1.writeFile)(RECENT_DBS_FILE, JSON.stringify(fileContent, null, 2), 'utf-8');
358
610
  }
611
+ /**
612
+ * Remove a database from the recent list
613
+ */
614
+ async removeFromRecent(dbPath) {
615
+ const databases = await this.getRecentDatabases();
616
+ const filtered = databases.filter((db) => db.path !== dbPath);
617
+ const fileContent = {
618
+ version: 1,
619
+ databases: filtered,
620
+ };
621
+ await (0, promises_1.writeFile)(RECENT_DBS_FILE, JSON.stringify(fileContent, null, 2), 'utf-8');
622
+ }
623
+ /**
624
+ * Delete a database (removes from recent list and optionally deletes files)
625
+ *
626
+ * @param dbPath - Path to the database to delete
627
+ * @param deleteFiles - If true, also delete the database files from disk
628
+ */
629
+ async deleteDatabase(dbPath, deleteFiles = false) {
630
+ const resolvedPath = expandTilde(dbPath);
631
+ // Cannot delete the currently active database
632
+ if (this.currentConfig && this.currentConfig.dbPath === resolvedPath) {
633
+ throw new Error('Cannot delete the currently active database. Switch to another database first.');
634
+ }
635
+ // Remove from recent databases list
636
+ await this.removeFromRecent(resolvedPath);
637
+ // Optionally delete files from disk
638
+ if (deleteFiles) {
639
+ const lanceDbPath = node_path_1.default.join(resolvedPath, LANCEDB_DIR_NAME);
640
+ if ((0, node_fs_1.existsSync)(lanceDbPath)) {
641
+ await (0, promises_1.rm)(lanceDbPath, { recursive: true, force: true });
642
+ console.log(`Deleted database files: ${lanceDbPath}`);
643
+ }
644
+ }
645
+ console.log(`Removed database from recent list: ${resolvedPath}`);
646
+ }
359
647
  /**
360
648
  * Derive a human-readable name from a path
361
649
  */
@@ -1 +1 @@
1
- {"version":3,"file":"database-manager.js","sourceRoot":"","sources":["../../src/web/database-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database-manager.js","sourceRoot":"","sources":["../../src/web/database-manager.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../../src/web/http-server.ts"],"names":[],"mappings":"AAQA,OAAgB,EAAE,KAAK,OAAO,EAAkD,MAAM,SAAS,CAAA;AAI/F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAGnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAiE5D,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAA;IACjB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,OAAO,CAAC,CAElB;AAkOD;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOrE"}
1
+ {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../../src/web/http-server.ts"],"names":[],"mappings":"AAQA,OAAgB,EAAE,KAAK,OAAO,EAAkD,MAAM,SAAS,CAAA;AAI/F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAGnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAoE5D,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAA;IACjB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,OAAO,CAAC,CAElB;AA4OD;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOrE"}
@@ -69,6 +69,8 @@ const DEFAULT_CORS_ORIGINS = [
69
69
  const FILE_SIZE_LIMIT_BYTES = 100 * 1024 * 1024;
70
70
  /** Default request timeout (30 seconds) */
71
71
  const DEFAULT_REQUEST_TIMEOUT_MS = 30000;
72
+ /** Upload/ingest timeout (5 minutes - embedding models can be slow) */
73
+ const UPLOAD_TIMEOUT_MS = 300000;
72
74
  /** Minimum allowed request timeout (1 second) */
73
75
  const MIN_REQUEST_TIMEOUT_MS = 1000;
74
76
  /**
@@ -138,12 +140,19 @@ async function validateFileContent(filePath) {
138
140
  return false;
139
141
  }
140
142
  }
143
+ /** Routes that need longer timeout (upload/ingest with slow embedding models) */
144
+ const LONG_TIMEOUT_ROUTES = ['/v1/files/upload', '/v1/data'];
141
145
  /**
142
146
  * Request timeout middleware
143
147
  * Aborts requests that take longer than the specified timeout
148
+ * Uses longer timeout for upload/ingest routes (embedding can be slow)
144
149
  */
145
- function requestTimeout(timeoutMs) {
146
- return (_req, res, next) => {
150
+ function requestTimeout(defaultTimeoutMs) {
151
+ return (req, res, next) => {
152
+ // Use longer timeout for upload/ingest routes (req.path is relative to mount point)
153
+ const timeoutMs = LONG_TIMEOUT_ROUTES.some((route) => req.path.startsWith(route))
154
+ ? UPLOAD_TIMEOUT_MS
155
+ : defaultTimeoutMs;
147
156
  const timeoutId = setTimeout(() => {
148
157
  if (!res.headersSent) {
149
158
  res.status(503).json({
@@ -189,6 +198,7 @@ async function createHttpServerInternal(serverAccessor, config, configRouter) {
189
198
  // Response compression
190
199
  app.use((0, compression_1.default)());
191
200
  // Request timeout for API routes (configurable via REQUEST_TIMEOUT_MS env var)
201
+ // Upload/ingest routes automatically get longer timeout (5 min) for slow embedding models
192
202
  app.use('/api', requestTimeout(getRequestTimeoutMs()));
193
203
  // CORS configuration
194
204
  // CORS_ORIGINS env var: comma-separated list of allowed origins, or "*" for all