@robthepcguy/rag-vault 1.5.3 → 1.6.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.
Files changed (141) hide show
  1. package/README.md +86 -14
  2. package/dist/bin/install-skills.d.ts.map +1 -0
  3. package/dist/bin/install-skills.js +16 -17
  4. package/dist/bin/install-skills.js.map +1 -0
  5. package/dist/chunker/index.d.ts.map +1 -0
  6. package/dist/chunker/index.js +1 -5
  7. package/dist/chunker/index.js.map +1 -0
  8. package/dist/chunker/semantic-chunker.d.ts.map +1 -0
  9. package/dist/chunker/semantic-chunker.js +9 -13
  10. package/dist/chunker/semantic-chunker.js.map +1 -0
  11. package/dist/chunker/sentence-splitter.d.ts.map +1 -0
  12. package/dist/chunker/sentence-splitter.js +1 -4
  13. package/dist/chunker/sentence-splitter.js.map +1 -0
  14. package/dist/embedder/index.d.ts +10 -0
  15. package/dist/embedder/index.d.ts.map +1 -0
  16. package/dist/embedder/index.js +58 -32
  17. package/dist/embedder/index.js.map +1 -0
  18. package/dist/errors/index.d.ts.map +1 -0
  19. package/dist/errors/index.js +10 -17
  20. package/dist/errors/index.js.map +1 -0
  21. package/dist/explainability/index.d.ts.map +1 -0
  22. package/dist/explainability/index.js +1 -5
  23. package/dist/explainability/index.js.map +1 -0
  24. package/dist/explainability/keywords.d.ts.map +1 -0
  25. package/dist/explainability/keywords.js +1 -4
  26. package/dist/explainability/keywords.js.map +1 -0
  27. package/dist/flywheel/feedback.d.ts.map +1 -0
  28. package/dist/flywheel/feedback.js +15 -19
  29. package/dist/flywheel/feedback.js.map +1 -0
  30. package/dist/flywheel/index.d.ts.map +1 -0
  31. package/dist/flywheel/index.js +1 -5
  32. package/dist/flywheel/index.js.map +1 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +86 -64
  35. package/dist/index.js.map +1 -0
  36. package/dist/parser/html-parser.d.ts.map +1 -0
  37. package/dist/parser/html-parser.js +7 -13
  38. package/dist/parser/html-parser.js.map +1 -0
  39. package/dist/parser/index.d.ts.map +1 -0
  40. package/dist/parser/index.js +44 -52
  41. package/dist/parser/index.js.map +1 -0
  42. package/dist/parser/pdf-filter.d.ts.map +1 -0
  43. package/dist/parser/pdf-filter.js +10 -16
  44. package/dist/parser/pdf-filter.js.map +1 -0
  45. package/dist/query/index.d.ts.map +1 -0
  46. package/dist/query/index.js +1 -8
  47. package/dist/query/index.js.map +1 -0
  48. package/dist/query/parser.d.ts.map +1 -0
  49. package/dist/query/parser.js +5 -12
  50. package/dist/query/parser.js.map +1 -0
  51. package/dist/server/index.d.ts +6 -0
  52. package/dist/server/index.d.ts.map +1 -0
  53. package/dist/server/index.js +106 -95
  54. package/dist/server/index.js.map +1 -0
  55. package/dist/server/raw-data-utils.d.ts.map +1 -0
  56. package/dist/server/raw-data-utils.js +21 -33
  57. package/dist/server/raw-data-utils.js.map +1 -0
  58. package/dist/server/remote-transport.d.ts +31 -0
  59. package/dist/server/remote-transport.d.ts.map +1 -0
  60. package/dist/server/remote-transport.js +177 -0
  61. package/dist/server/remote-transport.js.map +1 -0
  62. package/dist/server/schemas.d.ts.map +1 -0
  63. package/dist/server/schemas.js +35 -38
  64. package/dist/server/schemas.js.map +1 -0
  65. package/dist/utils/config-parsers.d.ts.map +1 -0
  66. package/dist/utils/config-parsers.js +3 -8
  67. package/dist/utils/config-parsers.js.map +1 -0
  68. package/dist/utils/config.d.ts.map +1 -0
  69. package/dist/utils/config.js +12 -19
  70. package/dist/utils/config.js.map +1 -0
  71. package/dist/utils/embedding-device-cli.d.ts +12 -0
  72. package/dist/utils/embedding-device-cli.d.ts.map +1 -0
  73. package/dist/utils/embedding-device-cli.js +61 -0
  74. package/dist/utils/embedding-device-cli.js.map +1 -0
  75. package/dist/utils/file-utils.d.ts.map +1 -0
  76. package/dist/utils/file-utils.js +12 -18
  77. package/dist/utils/file-utils.js.map +1 -0
  78. package/dist/utils/math.d.ts.map +1 -0
  79. package/dist/utils/math.js +2 -6
  80. package/dist/utils/math.js.map +1 -0
  81. package/dist/utils/process-handlers.d.ts.map +1 -0
  82. package/dist/utils/process-handlers.js +5 -10
  83. package/dist/utils/process-handlers.js.map +1 -0
  84. package/dist/vectordb/index.d.ts.map +1 -0
  85. package/dist/vectordb/index.js +39 -45
  86. package/dist/vectordb/index.js.map +1 -0
  87. package/dist/web/api-routes.d.ts.map +1 -0
  88. package/dist/web/api-routes.js +41 -47
  89. package/dist/web/api-routes.js.map +1 -0
  90. package/dist/web/config-routes.d.ts.map +1 -0
  91. package/dist/web/config-routes.js +30 -33
  92. package/dist/web/config-routes.js.map +1 -0
  93. package/dist/web/database-manager.d.ts.map +1 -0
  94. package/dist/web/database-manager.js +67 -72
  95. package/dist/web/database-manager.js.map +1 -0
  96. package/dist/web/http-server.d.ts.map +1 -0
  97. package/dist/web/http-server.js +45 -86
  98. package/dist/web/http-server.js.map +1 -0
  99. package/dist/web/index.d.ts.map +1 -0
  100. package/dist/web/index.js +20 -58
  101. package/dist/web/index.js.map +1 -0
  102. package/dist/web/middleware/async-handler.d.ts.map +1 -0
  103. package/dist/web/middleware/async-handler.js +1 -4
  104. package/dist/web/middleware/async-handler.js.map +1 -0
  105. package/dist/web/middleware/auth.d.ts.map +1 -0
  106. package/dist/web/middleware/auth.js +3 -6
  107. package/dist/web/middleware/auth.js.map +1 -0
  108. package/dist/web/middleware/error-handler.d.ts.map +1 -0
  109. package/dist/web/middleware/error-handler.js +4 -8
  110. package/dist/web/middleware/error-handler.js.map +1 -0
  111. package/dist/web/middleware/index.d.ts.map +1 -0
  112. package/dist/web/middleware/index.js +5 -17
  113. package/dist/web/middleware/index.js.map +1 -0
  114. package/dist/web/middleware/rate-limit.d.ts.map +1 -0
  115. package/dist/web/middleware/rate-limit.js +3 -8
  116. package/dist/web/middleware/rate-limit.js.map +1 -0
  117. package/dist/web/middleware/request-logger.d.ts.map +1 -0
  118. package/dist/web/middleware/request-logger.js +2 -6
  119. package/dist/web/middleware/request-logger.js.map +1 -0
  120. package/dist/web/types.d.ts.map +1 -0
  121. package/dist/web/types.js +1 -2
  122. package/dist/web/types.js.map +1 -0
  123. package/package.json +31 -35
  124. package/web-ui/dist/assets/CollectionsPage-BDmEfv3V.js +1 -0
  125. package/web-ui/dist/assets/FilesPage-pG9HmpgQ.js +1 -0
  126. package/web-ui/dist/assets/ReaderPage-CwMN03NU.js +28 -0
  127. package/web-ui/dist/assets/ReaderSettingsContext-CkSjqsRh.js +1 -0
  128. package/web-ui/dist/assets/SearchPage-DAltjnLL.js +1 -0
  129. package/web-ui/dist/assets/SettingsPage-C6J5BITP.js +1 -0
  130. package/web-ui/dist/assets/StatusPage-powRGmW3.js +1 -0
  131. package/web-ui/dist/assets/UploadPage-eyfSjL4u.js +8 -0
  132. package/web-ui/dist/assets/format-DOJ3IkRX.js +1 -0
  133. package/web-ui/dist/assets/index-BpwaiuGL.css +1 -0
  134. package/web-ui/dist/assets/index-D068MV_o.js +6 -0
  135. package/web-ui/dist/assets/link-indexer.worker-DGXNsXmZ.js +1 -0
  136. package/web-ui/dist/assets/motion-CKwJwI3J.js +9 -0
  137. package/web-ui/dist/assets/query-DPt-uCb6.js +1 -0
  138. package/web-ui/dist/assets/vendor-C2QPsZ3S.js +10 -0
  139. package/web-ui/dist/index.html +7 -2
  140. package/web-ui/dist/assets/index-SBHxoAwi.js +0 -120
  141. package/web-ui/dist/assets/index-ej8i4PGl.css +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-routes.d.ts","sourceRoot":"","sources":["../../src/web/api-routes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAA;AAKxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAgDhD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,gBAAgB,EAAE,SAAS,GAAG,cAAc,GAAG,MAAM,CAqTpF"}
@@ -1,29 +1,23 @@
1
- "use strict";
2
1
  // REST API routes for web frontend
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.createApiRouter = createApiRouter;
8
- const node_path_1 = __importDefault(require("node:path"));
9
- const express_1 = require("express");
10
- const index_js_1 = require("../errors/index.js");
11
- const index_js_2 = require("../explainability/index.js");
12
- const index_js_3 = require("../flywheel/index.js");
13
- const index_js_4 = require("./middleware/index.js");
2
+ import path from 'node:path';
3
+ import { Router as createRouter } from 'express';
4
+ import { RAGError, ValidationError } from '../errors/index.js';
5
+ import { explainChunkSimilarity } from '../explainability/index.js';
6
+ import { getFeedbackStore } from '../flywheel/index.js';
7
+ import { asyncHandler } from './middleware/index.js';
14
8
  /**
15
9
  * Extract text from a RAG server response with proper bounds checking
16
10
  * @throws RAGError if the response format is invalid
17
11
  */
18
12
  function extractResultText(result) {
19
13
  if (!result.content || !Array.isArray(result.content) || result.content.length === 0) {
20
- throw new index_js_1.RAGError('Malformed server response: missing content array', {
14
+ throw new RAGError('Malformed server response: missing content array', {
21
15
  statusCode: 500,
22
16
  });
23
17
  }
24
18
  const firstContent = result.content[0];
25
19
  if (!firstContent || typeof firstContent.text !== 'string') {
26
- throw new index_js_1.RAGError('Malformed server response: missing text in content', {
20
+ throw new RAGError('Malformed server response: missing text in content', {
27
21
  statusCode: 500,
28
22
  });
29
23
  }
@@ -33,8 +27,8 @@ function extractResultText(result) {
33
27
  * Create API router with all endpoints
34
28
  * @param serverOrAccessor - RAGServer instance or accessor function
35
29
  */
36
- function createApiRouter(serverOrAccessor) {
37
- const router = (0, express_1.Router)();
30
+ export function createApiRouter(serverOrAccessor) {
31
+ const router = createRouter();
38
32
  // Helper to get server (supports both direct instance and accessor function)
39
33
  const getServer = () => {
40
34
  if (typeof serverOrAccessor === 'function') {
@@ -43,10 +37,10 @@ function createApiRouter(serverOrAccessor) {
43
37
  return serverOrAccessor;
44
38
  };
45
39
  // POST /api/v1/search - Search documents
46
- router.post('/search', (0, index_js_4.asyncHandler)(async (req, res) => {
40
+ router.post('/search', asyncHandler(async (req, res) => {
47
41
  const { query, limit } = req.body;
48
42
  if (!query || typeof query !== 'string') {
49
- throw new index_js_1.ValidationError('Query is required and must be a string');
43
+ throw new ValidationError('Query is required and must be a string');
50
44
  }
51
45
  const queryInput = { query };
52
46
  if (limit !== undefined) {
@@ -58,27 +52,27 @@ function createApiRouter(serverOrAccessor) {
58
52
  res.json({ results: data });
59
53
  }));
60
54
  // POST /api/v1/files/upload - Upload files (multipart)
61
- router.post('/files/upload', (0, index_js_4.asyncHandler)(async (req, res) => {
55
+ router.post('/files/upload', asyncHandler(async (req, res) => {
62
56
  // File is attached by multer middleware
63
57
  const file = req.file;
64
58
  if (!file) {
65
- throw new index_js_1.ValidationError('No file uploaded');
59
+ throw new ValidationError('No file uploaded');
66
60
  }
67
61
  // Use the uploaded file path (convert to absolute)
68
62
  const server = getServer();
69
- const absolutePath = node_path_1.default.resolve(file.path);
63
+ const absolutePath = path.resolve(file.path);
70
64
  const result = await server.handleIngestFile({ filePath: absolutePath });
71
65
  const data = JSON.parse(extractResultText(result));
72
66
  res.json(data);
73
67
  }));
74
68
  // POST /api/v1/data - Ingest content strings
75
- router.post('/data', (0, index_js_4.asyncHandler)(async (req, res) => {
69
+ router.post('/data', asyncHandler(async (req, res) => {
76
70
  const { content, metadata } = req.body;
77
71
  if (!content || typeof content !== 'string') {
78
- throw new index_js_1.ValidationError('Content is required and must be a string');
72
+ throw new ValidationError('Content is required and must be a string');
79
73
  }
80
74
  if (!metadata || !metadata.source || !metadata.format) {
81
- throw new index_js_1.ValidationError('Metadata with source and format is required');
75
+ throw new ValidationError('Metadata with source and format is required');
82
76
  }
83
77
  const server = getServer();
84
78
  const result = await server.handleIngestData({ content, metadata });
@@ -86,17 +80,17 @@ function createApiRouter(serverOrAccessor) {
86
80
  res.json(data);
87
81
  }));
88
82
  // GET /api/v1/files - List ingested files
89
- router.get('/files', (0, index_js_4.asyncHandler)(async (_req, res) => {
83
+ router.get('/files', asyncHandler(async (_req, res) => {
90
84
  const server = getServer();
91
85
  const result = await server.handleListFiles();
92
86
  const data = JSON.parse(extractResultText(result));
93
87
  res.json({ files: data });
94
88
  }));
95
89
  // DELETE /api/v1/files - Delete file/source
96
- router.delete('/files', (0, index_js_4.asyncHandler)(async (req, res) => {
90
+ router.delete('/files', asyncHandler(async (req, res) => {
97
91
  const { filePath, source } = req.body;
98
92
  if (!filePath && !source) {
99
- throw new index_js_1.ValidationError('Either filePath or source is required');
93
+ throw new ValidationError('Either filePath or source is required');
100
94
  }
101
95
  const deleteInput = {};
102
96
  if (filePath !== undefined) {
@@ -111,7 +105,7 @@ function createApiRouter(serverOrAccessor) {
111
105
  res.json(data);
112
106
  }));
113
107
  // GET /api/v1/status - System status
114
- router.get('/status', (0, index_js_4.asyncHandler)(async (_req, res) => {
108
+ router.get('/status', asyncHandler(async (_req, res) => {
115
109
  const server = getServer();
116
110
  const result = await server.handleStatus();
117
111
  const data = JSON.parse(extractResultText(result));
@@ -128,10 +122,10 @@ function createApiRouter(serverOrAccessor) {
128
122
  // Reader Feature Endpoints
129
123
  // ============================================
130
124
  // GET /api/v1/documents/chunks - Get all chunks for a document
131
- router.get('/documents/chunks', (0, index_js_4.asyncHandler)(async (req, res) => {
125
+ router.get('/documents/chunks', asyncHandler(async (req, res) => {
132
126
  const filePath = req.query['filePath'];
133
127
  if (!filePath || typeof filePath !== 'string') {
134
- throw new index_js_1.ValidationError('filePath query parameter is required');
128
+ throw new ValidationError('filePath query parameter is required');
135
129
  }
136
130
  const server = getServer();
137
131
  const result = await server.handleGetDocumentChunks(filePath);
@@ -139,25 +133,25 @@ function createApiRouter(serverOrAccessor) {
139
133
  res.json({ chunks: data });
140
134
  }));
141
135
  // GET /api/v1/chunks/related - Get related chunks for a specific chunk
142
- router.get('/chunks/related', (0, index_js_4.asyncHandler)(async (req, res) => {
136
+ router.get('/chunks/related', asyncHandler(async (req, res) => {
143
137
  const filePath = req.query['filePath'];
144
138
  const chunkIndexStr = req.query['chunkIndex'];
145
139
  const limitStr = req.query['limit'];
146
140
  const excludeSameDocStr = req.query['excludeSameDoc'];
147
141
  const includeExplanationStr = req.query['includeExplanation'];
148
142
  if (!filePath || typeof filePath !== 'string') {
149
- throw new index_js_1.ValidationError('filePath query parameter is required');
143
+ throw new ValidationError('filePath query parameter is required');
150
144
  }
151
145
  if (!chunkIndexStr) {
152
- throw new index_js_1.ValidationError('chunkIndex query parameter is required');
146
+ throw new ValidationError('chunkIndex query parameter is required');
153
147
  }
154
148
  const chunkIndex = Number.parseInt(chunkIndexStr, 10);
155
149
  if (Number.isNaN(chunkIndex) || chunkIndex < 0) {
156
- throw new index_js_1.ValidationError('chunkIndex must be a non-negative integer');
150
+ throw new ValidationError('chunkIndex must be a non-negative integer');
157
151
  }
158
152
  const limit = limitStr ? Number.parseInt(limitStr, 10) : undefined;
159
153
  if (limit !== undefined && (Number.isNaN(limit) || limit < 1 || limit > 20)) {
160
- throw new index_js_1.ValidationError('limit must be between 1 and 20');
154
+ throw new ValidationError('limit must be between 1 and 20');
161
155
  }
162
156
  const excludeSameDocument = excludeSameDocStr !== 'false';
163
157
  const includeExplanation = includeExplanationStr === 'true';
@@ -173,7 +167,7 @@ function createApiRouter(serverOrAccessor) {
173
167
  const sourceText = sourceChunk?.text || '';
174
168
  const dataWithExplanation = data.map((chunk) => ({
175
169
  ...chunk,
176
- explanation: (0, index_js_2.explainChunkSimilarity)(sourceText, chunk.text, chunk.filePath === filePath, chunk.score),
170
+ explanation: explainChunkSimilarity(sourceText, chunk.text, chunk.filePath === filePath, chunk.score),
177
171
  }));
178
172
  res.json({ related: dataWithExplanation });
179
173
  }
@@ -182,22 +176,22 @@ function createApiRouter(serverOrAccessor) {
182
176
  }
183
177
  }));
184
178
  // POST /api/v1/chunks/batch-related - Batch get related chunks
185
- router.post('/chunks/batch-related', (0, index_js_4.asyncHandler)(async (req, res) => {
179
+ router.post('/chunks/batch-related', asyncHandler(async (req, res) => {
186
180
  const { chunks, limit } = req.body;
187
181
  if (!chunks || !Array.isArray(chunks) || chunks.length === 0) {
188
- throw new index_js_1.ValidationError('chunks array is required and must not be empty');
182
+ throw new ValidationError('chunks array is required and must not be empty');
189
183
  }
190
184
  // Validate each chunk
191
185
  for (const chunk of chunks) {
192
186
  if (!chunk.filePath || typeof chunk.filePath !== 'string') {
193
- throw new index_js_1.ValidationError('Each chunk must have a filePath string');
187
+ throw new ValidationError('Each chunk must have a filePath string');
194
188
  }
195
189
  if (typeof chunk.chunkIndex !== 'number' || chunk.chunkIndex < 0) {
196
- throw new index_js_1.ValidationError('Each chunk must have a non-negative chunkIndex');
190
+ throw new ValidationError('Each chunk must have a non-negative chunkIndex');
197
191
  }
198
192
  }
199
193
  if (limit !== undefined && (typeof limit !== 'number' || limit < 1 || limit > 20)) {
200
- throw new index_js_1.ValidationError('limit must be between 1 and 20');
194
+ throw new ValidationError('limit must be between 1 and 20');
201
195
  }
202
196
  const server = getServer();
203
197
  const result = await server.handleBatchFindRelatedChunks(chunks, limit);
@@ -205,22 +199,22 @@ function createApiRouter(serverOrAccessor) {
205
199
  res.json({ results: data });
206
200
  }));
207
201
  // POST /api/v1/feedback - Record a feedback event
208
- router.post('/feedback', (0, index_js_4.asyncHandler)(async (req, res) => {
202
+ router.post('/feedback', asyncHandler(async (req, res) => {
209
203
  const { type, source, target } = req.body;
210
204
  // Validate event type
211
205
  const validTypes = ['pin', 'unpin', 'dismiss_inferred', 'click_related'];
212
206
  if (!type || !validTypes.includes(type)) {
213
- throw new index_js_1.ValidationError(`type must be one of: ${validTypes.join(', ')}`);
207
+ throw new ValidationError(`type must be one of: ${validTypes.join(', ')}`);
214
208
  }
215
209
  // Validate source
216
210
  if (!source || typeof source.filePath !== 'string' || typeof source.chunkIndex !== 'number') {
217
- throw new index_js_1.ValidationError('source must have filePath (string) and chunkIndex (number)');
211
+ throw new ValidationError('source must have filePath (string) and chunkIndex (number)');
218
212
  }
219
213
  // Validate target
220
214
  if (!target || typeof target.filePath !== 'string' || typeof target.chunkIndex !== 'number') {
221
- throw new index_js_1.ValidationError('target must have filePath (string) and chunkIndex (number)');
215
+ throw new ValidationError('target must have filePath (string) and chunkIndex (number)');
222
216
  }
223
- const feedbackStore = (0, index_js_3.getFeedbackStore)();
217
+ const feedbackStore = getFeedbackStore();
224
218
  feedbackStore.recordEvent({
225
219
  type,
226
220
  source,
@@ -231,7 +225,7 @@ function createApiRouter(serverOrAccessor) {
231
225
  }));
232
226
  // GET /api/v1/feedback/stats - Get feedback statistics
233
227
  router.get('/feedback/stats', (_req, res) => {
234
- const feedbackStore = (0, index_js_3.getFeedbackStore)();
228
+ const feedbackStore = getFeedbackStore();
235
229
  const stats = feedbackStore.getStats();
236
230
  res.json(stats);
237
231
  });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-routes.js","sourceRoot":"","sources":["../../src/web/api-routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-routes.d.ts","sourceRoot":"","sources":["../../src/web/config-routes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAA;AAGxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AA4D5D;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,eAAe,GAAG,MAAM,CA4MrE"}
@@ -1,132 +1,129 @@
1
- "use strict";
2
1
  // REST API routes for database configuration
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.createConfigRouter = createConfigRouter;
5
- const express_1 = require("express");
6
- const index_js_1 = require("../errors/index.js");
7
- const index_js_2 = require("./middleware/index.js");
2
+ import { Router as createRouter } from 'express';
3
+ import { ValidationError } from '../errors/index.js';
4
+ import { asyncHandler } from './middleware/index.js';
8
5
  /**
9
6
  * Create config API router with all endpoints
10
7
  */
11
- function createConfigRouter(dbManager) {
12
- const router = (0, express_1.Router)();
8
+ export function createConfigRouter(dbManager) {
9
+ const router = createRouter();
13
10
  // GET /api/v1/config/current - Get current database configuration
14
- router.get('/current', (0, index_js_2.asyncHandler)(async (_req, res) => {
11
+ router.get('/current', asyncHandler(async (_req, res) => {
15
12
  const config = await dbManager.getCurrentConfig();
16
13
  res.json(config);
17
14
  }));
18
15
  // GET /api/v1/config/databases - List recent databases
19
- router.get('/databases', (0, index_js_2.asyncHandler)(async (_req, res) => {
16
+ router.get('/databases', asyncHandler(async (_req, res) => {
20
17
  const databases = await dbManager.getRecentDatabases();
21
18
  res.json({ databases });
22
19
  }));
23
20
  // POST /api/v1/config/databases/switch - Switch to different database
24
- router.post('/databases/switch', (0, index_js_2.asyncHandler)(async (req, res) => {
21
+ router.post('/databases/switch', asyncHandler(async (req, res) => {
25
22
  const { dbPath } = req.body;
26
23
  if (!dbPath || typeof dbPath !== 'string') {
27
- throw new index_js_1.ValidationError('dbPath is required and must be a string');
24
+ throw new ValidationError('dbPath is required and must be a string');
28
25
  }
29
26
  await dbManager.switchDatabase(dbPath);
30
27
  const config = await dbManager.getCurrentConfig();
31
28
  res.json({ success: true, config });
32
29
  }));
33
30
  // POST /api/v1/config/databases/create - Create new database
34
- router.post('/databases/create', (0, index_js_2.asyncHandler)(async (req, res) => {
31
+ router.post('/databases/create', asyncHandler(async (req, res) => {
35
32
  const { dbPath, name, modelName } = req.body;
36
33
  if (!dbPath || typeof dbPath !== 'string') {
37
- throw new index_js_1.ValidationError('dbPath is required and must be a string');
34
+ throw new ValidationError('dbPath is required and must be a string');
38
35
  }
39
36
  await dbManager.createDatabase({ dbPath, name, modelName });
40
37
  const config = await dbManager.getCurrentConfig();
41
38
  res.json({ success: true, config });
42
39
  }));
43
40
  // POST /api/v1/config/databases/scan - Scan directory for databases
44
- router.post('/databases/scan', (0, index_js_2.asyncHandler)(async (req, res) => {
41
+ router.post('/databases/scan', asyncHandler(async (req, res) => {
45
42
  const { scanPath } = req.body;
46
43
  if (!scanPath || typeof scanPath !== 'string') {
47
- throw new index_js_1.ValidationError('scanPath is required and must be a string');
44
+ throw new ValidationError('scanPath is required and must be a string');
48
45
  }
49
46
  const databases = await dbManager.scanForDatabases(scanPath);
50
47
  res.json({ databases });
51
48
  }));
52
49
  // DELETE /api/v1/config/databases - Delete a database
53
- router.delete('/databases', (0, index_js_2.asyncHandler)(async (req, res) => {
50
+ router.delete('/databases', asyncHandler(async (req, res) => {
54
51
  const { dbPath, deleteFiles } = req.body;
55
52
  if (!dbPath || typeof dbPath !== 'string') {
56
- throw new index_js_1.ValidationError('dbPath is required and must be a string');
53
+ throw new ValidationError('dbPath is required and must be a string');
57
54
  }
58
55
  await dbManager.deleteDatabase(dbPath, deleteFiles ?? false);
59
56
  const databases = await dbManager.getRecentDatabases();
60
57
  res.json({ success: true, databases });
61
58
  }));
62
59
  // GET /api/v1/config/allowed-roots - List all effective allowed roots
63
- router.get('/allowed-roots', (0, index_js_2.asyncHandler)(async (_req, res) => {
60
+ router.get('/allowed-roots', asyncHandler(async (_req, res) => {
64
61
  const info = await dbManager.getAllowedRootsInfo();
65
62
  res.json(info);
66
63
  }));
67
64
  // POST /api/v1/config/allowed-roots - Add a new allowed root
68
- router.post('/allowed-roots', (0, index_js_2.asyncHandler)(async (req, res) => {
65
+ router.post('/allowed-roots', asyncHandler(async (req, res) => {
69
66
  const { path: rootPath } = req.body;
70
67
  if (!rootPath || typeof rootPath !== 'string') {
71
- throw new index_js_1.ValidationError('path is required and must be a string');
68
+ throw new ValidationError('path is required and must be a string');
72
69
  }
73
70
  await dbManager.addUserAllowedRoot(rootPath);
74
71
  const info = await dbManager.getAllowedRootsInfo();
75
72
  res.json({ success: true, ...info });
76
73
  }));
77
74
  // DELETE /api/v1/config/allowed-roots - Remove an allowed root
78
- router.delete('/allowed-roots', (0, index_js_2.asyncHandler)(async (req, res) => {
75
+ router.delete('/allowed-roots', asyncHandler(async (req, res) => {
79
76
  const { path: rootPath } = req.body;
80
77
  if (!rootPath || typeof rootPath !== 'string') {
81
- throw new index_js_1.ValidationError('path is required and must be a string');
78
+ throw new ValidationError('path is required and must be a string');
82
79
  }
83
80
  await dbManager.removeUserAllowedRoot(rootPath);
84
81
  const info = await dbManager.getAllowedRootsInfo();
85
82
  res.json({ success: true, ...info });
86
83
  }));
87
84
  // GET /api/v1/config/browse - List directory contents for folder browser
88
- router.get('/browse', (0, index_js_2.asyncHandler)(async (req, res) => {
85
+ router.get('/browse', asyncHandler(async (req, res) => {
89
86
  const dirPath = req.query['path'];
90
87
  const showHidden = req.query['showHidden'] === 'true';
91
88
  if (!dirPath || typeof dirPath !== 'string') {
92
- throw new index_js_1.ValidationError('path query parameter is required');
89
+ throw new ValidationError('path query parameter is required');
93
90
  }
94
91
  const entries = await dbManager.listDirectory(dirPath, showHidden);
95
92
  res.json({ entries, path: dirPath });
96
93
  }));
97
94
  // GET /api/v1/config/models - List available embedding models
98
- router.get('/models', (0, index_js_2.asyncHandler)(async (_req, res) => {
95
+ router.get('/models', asyncHandler(async (_req, res) => {
99
96
  const models = dbManager.getAvailableModels();
100
97
  res.json({ models });
101
98
  }));
102
99
  // GET /api/v1/config/export - Export configuration as JSON
103
- router.get('/export', (0, index_js_2.asyncHandler)(async (_req, res) => {
100
+ router.get('/export', asyncHandler(async (_req, res) => {
104
101
  const config = await dbManager.exportConfig();
105
102
  res.json(config);
106
103
  }));
107
104
  // POST /api/v1/config/import - Import configuration from JSON
108
- router.post('/import', (0, index_js_2.asyncHandler)(async (req, res) => {
105
+ router.post('/import', asyncHandler(async (req, res) => {
109
106
  const { config } = req.body;
110
107
  if (!config || typeof config !== 'object') {
111
- throw new index_js_1.ValidationError('config is required and must be an object');
108
+ throw new ValidationError('config is required and must be an object');
112
109
  }
113
110
  await dbManager.importConfig(config);
114
111
  const info = await dbManager.getAllowedRootsInfo();
115
112
  res.json({ success: true, ...info });
116
113
  }));
117
114
  // GET /api/v1/config/hybrid-weight - Get current hybrid search weight
118
- router.get('/hybrid-weight', (0, index_js_2.asyncHandler)(async (_req, res) => {
115
+ router.get('/hybrid-weight', asyncHandler(async (_req, res) => {
119
116
  const weight = dbManager.getHybridWeight();
120
117
  res.json({ weight });
121
118
  }));
122
119
  // PUT /api/v1/config/hybrid-weight - Set hybrid search weight
123
- router.put('/hybrid-weight', (0, index_js_2.asyncHandler)(async (req, res) => {
120
+ router.put('/hybrid-weight', asyncHandler(async (req, res) => {
124
121
  const { weight } = req.body;
125
122
  if (typeof weight !== 'number') {
126
- throw new index_js_1.ValidationError('weight is required and must be a number');
123
+ throw new ValidationError('weight is required and must be a number');
127
124
  }
128
125
  if (weight < 0 || weight > 1) {
129
- throw new index_js_1.ValidationError('weight must be between 0.0 and 1.0');
126
+ throw new ValidationError('weight must be between 0.0 and 1.0');
130
127
  }
131
128
  dbManager.setHybridWeight(weight);
132
129
  res.json({ success: true, weight });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-routes.js","sourceRoot":"","sources":["../../src/web/config-routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-manager.d.ts","sourceRoot":"","sources":["../../src/web/database-manager.ts"],"names":[],"mappings":"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"}