codevault 1.7.3 → 1.7.4

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 (215) hide show
  1. package/README.md +18 -5
  2. package/dist/chunking/semantic-chunker.d.ts.map +1 -1
  3. package/dist/chunking/semantic-chunker.js +20 -7
  4. package/dist/chunking/semantic-chunker.js.map +1 -1
  5. package/dist/cli/commands/index-cmd.d.ts +3 -0
  6. package/dist/cli/commands/index-cmd.d.ts.map +1 -0
  7. package/dist/cli/commands/index-cmd.js +118 -0
  8. package/dist/cli/commands/index-cmd.js.map +1 -0
  9. package/dist/cli/commands/info-cmd.d.ts +3 -0
  10. package/dist/cli/commands/info-cmd.d.ts.map +1 -0
  11. package/dist/cli/commands/info-cmd.js +47 -0
  12. package/dist/cli/commands/info-cmd.js.map +1 -0
  13. package/dist/cli/commands/mcp-cmd.d.ts +3 -0
  14. package/dist/cli/commands/mcp-cmd.d.ts.map +1 -0
  15. package/dist/cli/commands/mcp-cmd.js +33 -0
  16. package/dist/cli/commands/mcp-cmd.js.map +1 -0
  17. package/dist/cli/commands/search-cmd.d.ts +3 -0
  18. package/dist/cli/commands/search-cmd.d.ts.map +1 -0
  19. package/dist/cli/commands/search-cmd.js +52 -0
  20. package/dist/cli/commands/search-cmd.js.map +1 -0
  21. package/dist/cli/commands/search-with-code-cmd.d.ts +3 -0
  22. package/dist/cli/commands/search-with-code-cmd.d.ts.map +1 -0
  23. package/dist/cli/commands/search-with-code-cmd.js +74 -0
  24. package/dist/cli/commands/search-with-code-cmd.js.map +1 -0
  25. package/dist/cli/commands/update-cmd.d.ts +3 -0
  26. package/dist/cli/commands/update-cmd.d.ts.map +1 -0
  27. package/dist/cli/commands/update-cmd.js +24 -0
  28. package/dist/cli/commands/update-cmd.js.map +1 -0
  29. package/dist/cli/commands/watch-cmd.d.ts +3 -0
  30. package/dist/cli/commands/watch-cmd.d.ts.map +1 -0
  31. package/dist/cli/commands/watch-cmd.js +47 -0
  32. package/dist/cli/commands/watch-cmd.js.map +1 -0
  33. package/dist/cli/index.d.ts +3 -0
  34. package/dist/cli/index.d.ts.map +1 -0
  35. package/dist/cli/index.js +47 -0
  36. package/dist/cli/index.js.map +1 -0
  37. package/dist/cli.d.ts +1 -1
  38. package/dist/cli.d.ts.map +1 -1
  39. package/dist/cli.js +4 -398
  40. package/dist/cli.js.map +1 -1
  41. package/dist/codemap/io.d.ts +1 -0
  42. package/dist/codemap/io.d.ts.map +1 -1
  43. package/dist/codemap/io.js.map +1 -1
  44. package/dist/config/constants.d.ts +11 -0
  45. package/dist/config/constants.d.ts.map +1 -1
  46. package/dist/config/constants.js +9 -0
  47. package/dist/config/constants.js.map +1 -1
  48. package/dist/config/loader.d.ts.map +1 -1
  49. package/dist/config/loader.js +9 -2
  50. package/dist/config/loader.js.map +1 -1
  51. package/dist/core/IndexerEngine.d.ts +9 -17
  52. package/dist/core/IndexerEngine.d.ts.map +1 -1
  53. package/dist/core/IndexerEngine.js +72 -347
  54. package/dist/core/IndexerEngine.js.map +1 -1
  55. package/dist/core/SearchService.d.ts +13 -13
  56. package/dist/core/SearchService.d.ts.map +1 -1
  57. package/dist/core/SearchService.js +133 -325
  58. package/dist/core/SearchService.js.map +1 -1
  59. package/dist/core/batch-indexer.d.ts +5 -0
  60. package/dist/core/batch-indexer.d.ts.map +1 -1
  61. package/dist/core/batch-indexer.js +22 -23
  62. package/dist/core/batch-indexer.js.map +1 -1
  63. package/dist/core/indexer.d.ts +13 -0
  64. package/dist/core/indexer.d.ts.map +1 -1
  65. package/dist/core/indexer.js +13 -0
  66. package/dist/core/indexer.js.map +1 -1
  67. package/dist/core/indexing/FileProcessor.d.ts +42 -0
  68. package/dist/core/indexing/FileProcessor.d.ts.map +1 -0
  69. package/dist/core/indexing/FileProcessor.js +245 -0
  70. package/dist/core/indexing/FileProcessor.js.map +1 -0
  71. package/dist/core/indexing/IndexContext.d.ts +42 -0
  72. package/dist/core/indexing/IndexContext.d.ts.map +1 -0
  73. package/dist/core/indexing/IndexContext.js +133 -0
  74. package/dist/core/indexing/IndexContext.js.map +1 -0
  75. package/dist/core/indexing/IndexFinalizationStage.d.ts +39 -0
  76. package/dist/core/indexing/IndexFinalizationStage.d.ts.map +1 -0
  77. package/dist/core/indexing/IndexFinalizationStage.js +114 -0
  78. package/dist/core/indexing/IndexFinalizationStage.js.map +1 -0
  79. package/dist/core/indexing/IndexState.d.ts +50 -0
  80. package/dist/core/indexing/IndexState.d.ts.map +1 -0
  81. package/dist/core/indexing/IndexState.js +66 -0
  82. package/dist/core/indexing/IndexState.js.map +1 -0
  83. package/dist/core/indexing/chunk-pipeline.d.ts +39 -3
  84. package/dist/core/indexing/chunk-pipeline.d.ts.map +1 -1
  85. package/dist/core/indexing/chunk-pipeline.js +59 -24
  86. package/dist/core/indexing/chunk-pipeline.js.map +1 -1
  87. package/dist/core/search/CandidateRetriever.d.ts +51 -0
  88. package/dist/core/search/CandidateRetriever.d.ts.map +1 -0
  89. package/dist/core/search/CandidateRetriever.js +119 -0
  90. package/dist/core/search/CandidateRetriever.js.map +1 -0
  91. package/dist/core/search/HybridFusion.d.ts +89 -0
  92. package/dist/core/search/HybridFusion.d.ts.map +1 -0
  93. package/dist/core/search/HybridFusion.js +263 -0
  94. package/dist/core/search/HybridFusion.js.map +1 -0
  95. package/dist/core/search/ResultMapper.d.ts +31 -0
  96. package/dist/core/search/ResultMapper.d.ts.map +1 -0
  97. package/dist/core/search/ResultMapper.js +131 -0
  98. package/dist/core/search/ResultMapper.js.map +1 -0
  99. package/dist/core/search/SearchContextManager.d.ts +69 -0
  100. package/dist/core/search/SearchContextManager.d.ts.map +1 -0
  101. package/dist/core/search/SearchContextManager.js +139 -0
  102. package/dist/core/search/SearchContextManager.js.map +1 -0
  103. package/dist/core/search.d.ts +31 -0
  104. package/dist/core/search.d.ts.map +1 -1
  105. package/dist/core/search.js +33 -0
  106. package/dist/core/search.js.map +1 -1
  107. package/dist/core/types.d.ts +13 -0
  108. package/dist/core/types.d.ts.map +1 -1
  109. package/dist/database/db.d.ts +36 -18
  110. package/dist/database/db.d.ts.map +1 -1
  111. package/dist/database/db.js +151 -24
  112. package/dist/database/db.js.map +1 -1
  113. package/dist/indexer/ChangeQueue.d.ts +67 -0
  114. package/dist/indexer/ChangeQueue.d.ts.map +1 -0
  115. package/dist/indexer/ChangeQueue.js +182 -0
  116. package/dist/indexer/ChangeQueue.js.map +1 -0
  117. package/dist/indexer/ProviderManager.d.ts +33 -0
  118. package/dist/indexer/ProviderManager.d.ts.map +1 -0
  119. package/dist/indexer/ProviderManager.js +75 -0
  120. package/dist/indexer/ProviderManager.js.map +1 -0
  121. package/dist/indexer/WatchService.d.ts +68 -0
  122. package/dist/indexer/WatchService.d.ts.map +1 -0
  123. package/dist/indexer/WatchService.js +155 -0
  124. package/dist/indexer/WatchService.js.map +1 -0
  125. package/dist/indexer/merkle.d.ts +5 -0
  126. package/dist/indexer/merkle.d.ts.map +1 -1
  127. package/dist/indexer/merkle.js +36 -12
  128. package/dist/indexer/merkle.js.map +1 -1
  129. package/dist/indexer/update.d.ts +14 -2
  130. package/dist/indexer/update.d.ts.map +1 -1
  131. package/dist/indexer/update.js +11 -0
  132. package/dist/indexer/update.js.map +1 -1
  133. package/dist/indexer/watch.d.ts +15 -20
  134. package/dist/indexer/watch.d.ts.map +1 -1
  135. package/dist/indexer/watch.js +14 -223
  136. package/dist/indexer/watch.js.map +1 -1
  137. package/dist/mcp/handlers/project.d.ts.map +1 -1
  138. package/dist/mcp/handlers/project.js +17 -1
  139. package/dist/mcp/handlers/project.js.map +1 -1
  140. package/dist/mcp-server.d.ts +6 -0
  141. package/dist/mcp-server.d.ts.map +1 -1
  142. package/dist/mcp-server.js +63 -2
  143. package/dist/mcp-server.js.map +1 -1
  144. package/dist/providers/base.d.ts +3 -0
  145. package/dist/providers/base.d.ts.map +1 -1
  146. package/dist/providers/base.js.map +1 -1
  147. package/dist/providers/index.d.ts +7 -0
  148. package/dist/providers/index.d.ts.map +1 -1
  149. package/dist/providers/index.js +15 -0
  150. package/dist/providers/index.js.map +1 -1
  151. package/dist/providers/mock.d.ts +16 -0
  152. package/dist/providers/mock.d.ts.map +1 -0
  153. package/dist/providers/mock.js +46 -0
  154. package/dist/providers/mock.js.map +1 -0
  155. package/dist/providers/openai.d.ts.map +1 -1
  156. package/dist/providers/openai.js +4 -8
  157. package/dist/providers/openai.js.map +1 -1
  158. package/dist/ranking/api-reranker.d.ts.map +1 -1
  159. package/dist/ranking/api-reranker.js +9 -5
  160. package/dist/ranking/api-reranker.js.map +1 -1
  161. package/dist/search/bm25.d.ts.map +1 -1
  162. package/dist/search/bm25.js +21 -1
  163. package/dist/search/bm25.js.map +1 -1
  164. package/dist/search/scope.d.ts +1 -1
  165. package/dist/search/scope.d.ts.map +1 -1
  166. package/dist/search/scope.js +3 -3
  167. package/dist/search/scope.js.map +1 -1
  168. package/dist/storage/encrypted-chunks.d.ts +7 -1
  169. package/dist/storage/encrypted-chunks.d.ts.map +1 -1
  170. package/dist/storage/encrypted-chunks.js +187 -75
  171. package/dist/storage/encrypted-chunks.js.map +1 -1
  172. package/dist/symbols/extract.d.ts +2 -1
  173. package/dist/symbols/extract.d.ts.map +1 -1
  174. package/dist/symbols/extract.js +1 -1
  175. package/dist/symbols/extract.js.map +1 -1
  176. package/dist/symbols/graph.d.ts.map +1 -1
  177. package/dist/symbols/graph.js.map +1 -1
  178. package/dist/synthesis/conversational-synthesizer.d.ts.map +1 -1
  179. package/dist/synthesis/conversational-synthesizer.js +68 -76
  180. package/dist/synthesis/conversational-synthesizer.js.map +1 -1
  181. package/dist/synthesis/prompt-builder.d.ts +2 -0
  182. package/dist/synthesis/prompt-builder.d.ts.map +1 -1
  183. package/dist/synthesis/prompt-builder.js +80 -81
  184. package/dist/synthesis/prompt-builder.js.map +1 -1
  185. package/dist/synthesis/synthesizer.d.ts +11 -0
  186. package/dist/synthesis/synthesizer.d.ts.map +1 -1
  187. package/dist/synthesis/synthesizer.js +29 -1
  188. package/dist/synthesis/synthesizer.js.map +1 -1
  189. package/dist/tests/helpers/test-repo.d.ts +7 -0
  190. package/dist/tests/helpers/test-repo.d.ts.map +1 -0
  191. package/dist/tests/helpers/test-repo.js +21 -0
  192. package/dist/tests/helpers/test-repo.js.map +1 -0
  193. package/dist/tests/integration/index-search.integration.test.d.ts +2 -0
  194. package/dist/tests/integration/index-search.integration.test.d.ts.map +1 -0
  195. package/dist/tests/integration/index-search.integration.test.js +163 -0
  196. package/dist/tests/integration/index-search.integration.test.js.map +1 -0
  197. package/dist/tests/simple-lru.test.js +22 -10
  198. package/dist/tests/simple-lru.test.js.map +1 -1
  199. package/dist/utils/cli-ui.d.ts.map +1 -1
  200. package/dist/utils/cli-ui.js +9 -3
  201. package/dist/utils/cli-ui.js.map +1 -1
  202. package/dist/utils/logger.d.ts +4 -1
  203. package/dist/utils/logger.d.ts.map +1 -1
  204. package/dist/utils/logger.js.map +1 -1
  205. package/dist/utils/path-helpers.d.ts.map +1 -1
  206. package/dist/utils/path-helpers.js +17 -1
  207. package/dist/utils/path-helpers.js.map +1 -1
  208. package/dist/utils/scan-patterns.d.ts.map +1 -1
  209. package/dist/utils/scan-patterns.js +1 -2
  210. package/dist/utils/scan-patterns.js.map +1 -1
  211. package/dist/utils/simple-lru.d.ts +21 -2
  212. package/dist/utils/simple-lru.d.ts.map +1 -1
  213. package/dist/utils/simple-lru.js +126 -19
  214. package/dist/utils/simple-lru.js.map +1 -1
  215. package/package.json +13 -4
@@ -2,22 +2,94 @@ import Database from 'better-sqlite3';
2
2
  import fs from 'fs';
3
3
  import path from 'path';
4
4
  import { log } from '../utils/logger.js';
5
+ const DB_SCHEMA_VERSION = 2;
6
+ const DB_PRAGMA_DEFAULTS = {
7
+ cacheSize: (() => {
8
+ const parsed = Number(process.env.CODEVAULT_DB_CACHE_SIZE ?? '-16000'); // ~16MB
9
+ return Number.isFinite(parsed) ? parsed : -16000;
10
+ })(),
11
+ mmapSize: (() => {
12
+ const parsed = Number(process.env.CODEVAULT_DB_MMAP_SIZE ?? '268435456'); // 256MB
13
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : 268435456;
14
+ })(),
15
+ tempStore: (() => {
16
+ const raw = (process.env.CODEVAULT_DB_TEMP_STORE || 'MEMORY').toString().toUpperCase();
17
+ return raw === 'FILE' ? 'FILE' : 'MEMORY';
18
+ })()
19
+ };
20
+ function encodeEmbedding(embedding) {
21
+ const buffer = Buffer.allocUnsafe(embedding.length * 4);
22
+ for (let i = 0; i < embedding.length; i++) {
23
+ buffer.writeFloatLE(Number(embedding[i]) || 0, i * 4);
24
+ }
25
+ return buffer;
26
+ }
27
+ function tryParseJsonEmbedding(buffer) {
28
+ if (!buffer || buffer.length === 0) {
29
+ return null;
30
+ }
31
+ // Fast reject for binary buffers
32
+ const firstByte = buffer[0];
33
+ const isLikelyJson = firstByte === 91 || // '['
34
+ firstByte === 123 || // '{'
35
+ firstByte === 45 || // '-'
36
+ (firstByte >= 48 && firstByte <= 57); // digits
37
+ if (!isLikelyJson) {
38
+ return null;
39
+ }
40
+ try {
41
+ const parsed = JSON.parse(buffer.toString('utf8'));
42
+ if (!Array.isArray(parsed)) {
43
+ return null;
44
+ }
45
+ const vector = new Float32Array(parsed.length);
46
+ for (let i = 0; i < parsed.length; i++) {
47
+ vector[i] = Number(parsed[i]) || 0;
48
+ }
49
+ return vector;
50
+ }
51
+ catch {
52
+ return null;
53
+ }
54
+ }
55
+ export function decodeEmbedding(buffer, dimensions) {
56
+ const jsonEmbedding = tryParseJsonEmbedding(buffer);
57
+ if (jsonEmbedding) {
58
+ return jsonEmbedding;
59
+ }
60
+ if (!buffer || buffer.length < 4 || buffer.length % 4 !== 0) {
61
+ return new Float32Array();
62
+ }
63
+ const length = buffer.length / 4;
64
+ const targetLength = typeof dimensions === 'number' && dimensions > 0
65
+ ? Math.min(dimensions, length)
66
+ : length;
67
+ return new Float32Array(buffer.buffer, buffer.byteOffset, targetLength);
68
+ }
69
+ /**
70
+ * Thin wrapper around better-sqlite3 with prepared statements tuned for CodeVault.
71
+ *
72
+ * Provides chunk CRUD, intention tracking, query pattern stats, and ensures schema
73
+ * creation/migrations. Call `close()` when finished to avoid leaking file handles.
74
+ */
5
75
  export class CodeVaultDatabase {
6
76
  db;
7
77
  insertChunkStmt;
8
78
  getChunksStmt;
9
79
  deleteChunksStmt = null;
80
+ insertManyStmt = null;
10
81
  constructor(dbPath) {
11
82
  this.db = new Database(dbPath);
12
83
  // Enable WAL mode for better concurrency
13
84
  this.db.pragma('journal_mode = WAL');
14
85
  // Optimize for performance
15
86
  this.db.pragma('synchronous = NORMAL');
16
- this.db.pragma('cache_size = -64000'); // 64MB cache
17
- this.db.pragma('temp_store = MEMORY');
18
- this.db.pragma('mmap_size = 30000000000'); // 30GB mmap
87
+ this.db.pragma(`cache_size = ${DB_PRAGMA_DEFAULTS.cacheSize}`);
88
+ this.db.pragma(`temp_store = ${DB_PRAGMA_DEFAULTS.tempStore}`);
89
+ this.db.pragma(`mmap_size = ${DB_PRAGMA_DEFAULTS.mmapSize}`);
19
90
  // Check if tables exist and create if needed
20
91
  this.ensureTablesExist();
92
+ this.migrateLegacyEmbeddings();
21
93
  }
22
94
  /**
23
95
  * Ensure database tables exist and prepare statements
@@ -102,15 +174,78 @@ export class CodeVaultDatabase {
102
174
  this.db.exec(sql);
103
175
  }
104
176
  }
177
+ /**
178
+ * Migrate legacy JSON embeddings to binary Float32 buffers
179
+ */
180
+ migrateLegacyEmbeddings() {
181
+ try {
182
+ const userVersion = this.db.pragma('user_version', { simple: true });
183
+ if (userVersion >= DB_SCHEMA_VERSION) {
184
+ return;
185
+ }
186
+ const selectStmt = this.db.prepare(`
187
+ SELECT id, embedding, embedding_dimensions
188
+ FROM code_chunks
189
+ `);
190
+ const updateStmt = this.db.prepare(`
191
+ UPDATE code_chunks
192
+ SET embedding = ?
193
+ WHERE id = ?
194
+ `);
195
+ const migrate = this.db.transaction(() => {
196
+ let converted = 0;
197
+ for (const row of selectStmt.iterate()) {
198
+ const parsed = tryParseJsonEmbedding(row.embedding);
199
+ if (!parsed)
200
+ continue;
201
+ const encoded = encodeEmbedding(parsed);
202
+ updateStmt.run(encoded, row.id);
203
+ converted++;
204
+ }
205
+ if (converted > 0) {
206
+ log.info('Migrated legacy JSON embeddings to binary', { converted });
207
+ }
208
+ else {
209
+ log.debug('No legacy embeddings found for migration');
210
+ }
211
+ });
212
+ migrate();
213
+ this.db.pragma(`user_version = ${DB_SCHEMA_VERSION}`);
214
+ }
215
+ catch (error) {
216
+ log.error('Failed to migrate embeddings to binary', error);
217
+ throw error;
218
+ }
219
+ }
105
220
  insertChunk(params) {
106
221
  try {
107
- this.insertChunkStmt.run(params.id, params.file_path, params.symbol, params.sha, params.lang, params.chunk_type, Buffer.from(JSON.stringify(params.embedding)), params.embedding_provider, params.embedding_dimensions, JSON.stringify(params.codevault_tags), params.codevault_intent, params.codevault_description, params.doc_comments, JSON.stringify(params.variables_used), JSON.stringify(params.context_info));
222
+ this.insertChunkStmt.run(params.id, params.file_path, params.symbol, params.sha, params.lang, params.chunk_type, encodeEmbedding(params.embedding), params.embedding_provider, params.embedding_dimensions, JSON.stringify(params.codevault_tags), params.codevault_intent, params.codevault_description, params.doc_comments, JSON.stringify(params.variables_used), JSON.stringify(params.context_info));
108
223
  }
109
224
  catch (error) {
110
225
  log.error('Failed to insert chunk', error, { chunkId: params.id });
111
226
  throw error;
112
227
  }
113
228
  }
229
+ insertChunks(chunks) {
230
+ if (!Array.isArray(chunks) || chunks.length === 0) {
231
+ return;
232
+ }
233
+ if (!this.insertManyStmt) {
234
+ const insertMany = this.db.transaction((batch) => {
235
+ for (const chunk of batch) {
236
+ this.insertChunkStmt.run(chunk.id, chunk.file_path, chunk.symbol, chunk.sha, chunk.lang, chunk.chunk_type, encodeEmbedding(chunk.embedding), chunk.embedding_provider, chunk.embedding_dimensions, JSON.stringify(chunk.codevault_tags), chunk.codevault_intent, chunk.codevault_description, chunk.doc_comments, JSON.stringify(chunk.variables_used), JSON.stringify(chunk.context_info));
237
+ }
238
+ });
239
+ this.insertManyStmt = insertMany;
240
+ }
241
+ try {
242
+ this.insertManyStmt(chunks);
243
+ }
244
+ catch (error) {
245
+ log.error('Failed to insert chunk batch', error, { count: chunks.length });
246
+ throw error;
247
+ }
248
+ }
114
249
  buildDeleteStatement(count) {
115
250
  const placeholders = Array.from({ length: count }, () => '?').join(', ');
116
251
  return this.db.prepare(`DELETE FROM code_chunks WHERE id IN (${placeholders})`);
@@ -266,27 +401,19 @@ export class CodeVaultDatabase {
266
401
  * Note: better-sqlite3 transactions MUST be synchronous
267
402
  * If you need async operations, use beginTransaction/commit/rollback manually
268
403
  */
269
- async transaction(fn) {
270
- try {
271
- // Start transaction
272
- this.db.prepare('BEGIN TRANSACTION').run();
273
- // Execute function (can be async)
274
- const result = await fn();
275
- // Commit if successful
276
- this.db.prepare('COMMIT').run();
277
- return result;
278
- }
279
- catch (error) {
280
- // Rollback on error
281
- try {
282
- this.db.prepare('ROLLBACK').run();
283
- }
284
- catch (rollbackError) {
285
- log.error('Failed to rollback transaction', rollbackError);
404
+ /**
405
+ * Execute a synchronous function within a database transaction.
406
+ * better-sqlite3 transactions must be synchronous; do async work before/after.
407
+ */
408
+ transaction(fn) {
409
+ const wrapped = this.db.transaction(() => {
410
+ const result = fn();
411
+ if (result && typeof result.then === 'function') {
412
+ throw new Error('better-sqlite3 transactions must be synchronous; avoid returning a Promise.');
286
413
  }
287
- log.error('Transaction failed and was rolled back', error);
288
- throw error;
289
- }
414
+ return result;
415
+ });
416
+ return wrapped();
290
417
  }
291
418
  /**
292
419
  * Close the database connection
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { EmbeddingProvider } from '../providers/base.js';
2
+ export interface ChangeQueueOptions {
3
+ repoPath: string;
4
+ provider: string;
5
+ debounceMs: number;
6
+ encrypt?: string;
7
+ logger?: Console;
8
+ onBatch?: ((event: {
9
+ changed: string[];
10
+ deleted: string[];
11
+ }) => void) | null;
12
+ providerGetter?: () => Promise<EmbeddingProvider | null>;
13
+ }
14
+ /**
15
+ * Manages a queue of file changes with debouncing and race-condition-free flushing.
16
+ * Ensures changes are batched and indexed atomically.
17
+ */
18
+ export declare class ChangeQueue {
19
+ private options;
20
+ private pendingChanges;
21
+ private pendingDeletes;
22
+ private timer;
23
+ private flushPromise;
24
+ private processing;
25
+ constructor(options: ChangeQueueOptions);
26
+ /**
27
+ * Add a file change to the queue
28
+ */
29
+ enqueue(type: 'add' | 'change' | 'unlink', filePath: string): void;
30
+ /**
31
+ * Schedule a debounced flush
32
+ */
33
+ private scheduleFlush;
34
+ /**
35
+ * Flush pending changes (race-condition safe)
36
+ */
37
+ flush(): Promise<void>;
38
+ /**
39
+ * Execute the actual flush operation
40
+ */
41
+ private executeFlush;
42
+ /**
43
+ * Wait for any in-progress processing to complete
44
+ */
45
+ private waitForProcessing;
46
+ /**
47
+ * Drain all pending changes (for shutdown).
48
+ * Ensures all queued changes are flushed before returning.
49
+ */
50
+ drain(): Promise<void>;
51
+ /**
52
+ * Cancel any pending flush (for cleanup)
53
+ */
54
+ cancel(): void;
55
+ /**
56
+ * Check if there are pending changes
57
+ */
58
+ hasPending(): boolean;
59
+ /**
60
+ * Get count of pending changes
61
+ */
62
+ getPendingCount(): {
63
+ changes: number;
64
+ deletes: number;
65
+ };
66
+ }
67
+ //# sourceMappingURL=ChangeQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangeQueue.d.ts","sourceRoot":"","sources":["../../src/indexer/ChangeQueue.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7E,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;CAC1D;AAED;;;GAGG;AACH,qBAAa,WAAW;IAOV,OAAO,CAAC,OAAO;IAN3B,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,UAAU,CAAS;gBAEP,OAAO,EAAE,kBAAkB;IAE/C;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAYlE;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B5B;;OAEG;YACW,YAAY;IAyC1B;;OAEG;YACW,iBAAiB;IAM/B;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyC5B;;OAEG;IACH,MAAM,IAAI,IAAI;IAOd;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,eAAe,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAMxD"}
@@ -0,0 +1,182 @@
1
+ import { updateIndex } from './update.js';
2
+ import { WATCHER_CONSTANTS } from '../config/constants.js';
3
+ /**
4
+ * Manages a queue of file changes with debouncing and race-condition-free flushing.
5
+ * Ensures changes are batched and indexed atomically.
6
+ */
7
+ export class ChangeQueue {
8
+ options;
9
+ pendingChanges = new Set();
10
+ pendingDeletes = new Set();
11
+ timer = null;
12
+ flushPromise = null;
13
+ processing = false;
14
+ constructor(options) {
15
+ this.options = options;
16
+ }
17
+ /**
18
+ * Add a file change to the queue
19
+ */
20
+ enqueue(type, filePath) {
21
+ if (type === 'unlink') {
22
+ this.pendingDeletes.add(filePath);
23
+ this.pendingChanges.delete(filePath);
24
+ }
25
+ else {
26
+ this.pendingChanges.add(filePath);
27
+ this.pendingDeletes.delete(filePath);
28
+ }
29
+ this.scheduleFlush();
30
+ }
31
+ /**
32
+ * Schedule a debounced flush
33
+ */
34
+ scheduleFlush() {
35
+ if (this.timer) {
36
+ clearTimeout(this.timer);
37
+ }
38
+ this.timer = setTimeout(() => {
39
+ this.timer = null;
40
+ void this.flush();
41
+ }, this.options.debounceMs);
42
+ }
43
+ /**
44
+ * Flush pending changes (race-condition safe)
45
+ */
46
+ async flush() {
47
+ // Prevent race condition: if flush is already in progress, wait for it
48
+ if (this.flushPromise) {
49
+ await this.flushPromise;
50
+ // After waiting, check if new changes accumulated and reschedule
51
+ if (this.pendingChanges.size > 0 || this.pendingDeletes.size > 0) {
52
+ this.scheduleFlush();
53
+ }
54
+ return;
55
+ }
56
+ // Nothing to flush
57
+ if (this.pendingChanges.size === 0 && this.pendingDeletes.size === 0) {
58
+ return;
59
+ }
60
+ // Atomically capture and clear pending changes
61
+ const changed = Array.from(this.pendingChanges);
62
+ const deleted = Array.from(this.pendingDeletes);
63
+ this.pendingChanges.clear();
64
+ this.pendingDeletes.clear();
65
+ this.processing = true;
66
+ // Create promise that tracks this flush operation
67
+ this.flushPromise = this.executeFlush(changed, deleted);
68
+ await this.flushPromise;
69
+ }
70
+ /**
71
+ * Execute the actual flush operation
72
+ */
73
+ async executeFlush(changed, deleted) {
74
+ try {
75
+ // Get provider if provider getter is available
76
+ let embeddingProviderOverride = null;
77
+ if (this.options.providerGetter) {
78
+ embeddingProviderOverride = await this.options.providerGetter();
79
+ }
80
+ // Update the index
81
+ await updateIndex({
82
+ repoPath: this.options.repoPath,
83
+ provider: this.options.provider,
84
+ changedFiles: changed,
85
+ deletedFiles: deleted,
86
+ embeddingProvider: embeddingProviderOverride,
87
+ encrypt: this.options.encrypt
88
+ });
89
+ // Notify callback or log
90
+ if (typeof this.options.onBatch === 'function') {
91
+ await this.options.onBatch({ changed, deleted });
92
+ }
93
+ else if (this.options.logger && typeof this.options.logger.log === 'function') {
94
+ this.options.logger.log(`CodeVault watch: indexed ${changed.length} changed / ${deleted.length} deleted files`);
95
+ }
96
+ }
97
+ catch (error) {
98
+ if (this.options.logger && typeof this.options.logger.error === 'function') {
99
+ this.options.logger.error('CodeVault watch update failed:', error);
100
+ }
101
+ }
102
+ finally {
103
+ this.processing = false;
104
+ this.flushPromise = null;
105
+ // Check if new changes came in during processing
106
+ if (this.pendingChanges.size > 0 || this.pendingDeletes.size > 0) {
107
+ this.scheduleFlush();
108
+ }
109
+ }
110
+ }
111
+ /**
112
+ * Wait for any in-progress processing to complete
113
+ */
114
+ async waitForProcessing() {
115
+ while (this.processing) {
116
+ await new Promise(resolve => setTimeout(resolve, 10));
117
+ }
118
+ }
119
+ /**
120
+ * Drain all pending changes (for shutdown).
121
+ * Ensures all queued changes are flushed before returning.
122
+ */
123
+ async drain() {
124
+ const settleDelay = Math.min(this.options.debounceMs, WATCHER_CONSTANTS.SETTLE_DELAY_MS);
125
+ // Cancel any pending timer
126
+ if (this.timer) {
127
+ clearTimeout(this.timer);
128
+ this.timer = null;
129
+ }
130
+ // First flush
131
+ await this.flush();
132
+ await this.waitForProcessing();
133
+ // Check if more changes accumulated, flush again if needed
134
+ if (this.pendingChanges.size > 0 || this.pendingDeletes.size > 0 || this.timer) {
135
+ if (this.timer) {
136
+ clearTimeout(this.timer);
137
+ this.timer = null;
138
+ }
139
+ await this.flush();
140
+ await this.waitForProcessing();
141
+ return;
142
+ }
143
+ // Wait settle period for any last-minute changes
144
+ if (settleDelay > 0) {
145
+ await new Promise(resolve => setTimeout(resolve, settleDelay));
146
+ }
147
+ // Final check and flush
148
+ if (this.timer) {
149
+ clearTimeout(this.timer);
150
+ this.timer = null;
151
+ }
152
+ if (this.pendingChanges.size > 0 || this.pendingDeletes.size > 0) {
153
+ await this.flush();
154
+ await this.waitForProcessing();
155
+ }
156
+ }
157
+ /**
158
+ * Cancel any pending flush (for cleanup)
159
+ */
160
+ cancel() {
161
+ if (this.timer) {
162
+ clearTimeout(this.timer);
163
+ this.timer = null;
164
+ }
165
+ }
166
+ /**
167
+ * Check if there are pending changes
168
+ */
169
+ hasPending() {
170
+ return this.pendingChanges.size > 0 || this.pendingDeletes.size > 0;
171
+ }
172
+ /**
173
+ * Get count of pending changes
174
+ */
175
+ getPendingCount() {
176
+ return {
177
+ changes: this.pendingChanges.size,
178
+ deletes: this.pendingDeletes.size
179
+ };
180
+ }
181
+ }
182
+ //# sourceMappingURL=ChangeQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangeQueue.js","sourceRoot":"","sources":["../../src/indexer/ChangeQueue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { type EmbeddingProvider } from '../providers/index.js';
2
+ import type { EmbeddingOptions } from '../config/resolver.js';
3
+ /**
4
+ * Manages the lifecycle of embedding providers for the watch service.
5
+ * Ensures providers are initialized once and reused across updates.
6
+ */
7
+ export declare class ProviderManager {
8
+ private providerName;
9
+ private providerContext;
10
+ private logger;
11
+ private providerInstance;
12
+ private initPromise;
13
+ private initErrorLogged;
14
+ constructor(providerName: string, providerContext: EmbeddingOptions, logger?: Console);
15
+ /**
16
+ * Get or create the embedding provider instance.
17
+ * Handles concurrent initialization requests safely.
18
+ */
19
+ getProvider(): Promise<EmbeddingProvider>;
20
+ /**
21
+ * Initialize the embedding provider
22
+ */
23
+ private initializeProvider;
24
+ /**
25
+ * Attempt to get provider, logging errors but not throwing
26
+ */
27
+ getProviderSafe(): Promise<EmbeddingProvider | null>;
28
+ /**
29
+ * Clean up provider resources
30
+ */
31
+ cleanup(): void;
32
+ }
33
+ //# sourceMappingURL=ProviderManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProviderManager.d.ts","sourceRoot":"","sources":["../../src/indexer/ProviderManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;GAGG;AACH,qBAAa,eAAe;IAMxB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,MAAM;IAPhB,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,OAAO,CAAC,WAAW,CAA2C;IAC9D,OAAO,CAAC,eAAe,CAAS;gBAGtB,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,gBAAgB,EACjC,MAAM,GAAE,OAAiB;IAGnC;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAoB/C;;OAEG;YACW,kBAAkB;IAWhC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAY1D;;OAEG;IACH,OAAO,IAAI,IAAI;CAKhB"}
@@ -0,0 +1,75 @@
1
+ import { createEmbeddingProvider } from '../providers/index.js';
2
+ /**
3
+ * Manages the lifecycle of embedding providers for the watch service.
4
+ * Ensures providers are initialized once and reused across updates.
5
+ */
6
+ export class ProviderManager {
7
+ providerName;
8
+ providerContext;
9
+ logger;
10
+ providerInstance = null;
11
+ initPromise = null;
12
+ initErrorLogged = false;
13
+ constructor(providerName, providerContext, logger = console) {
14
+ this.providerName = providerName;
15
+ this.providerContext = providerContext;
16
+ this.logger = logger;
17
+ }
18
+ /**
19
+ * Get or create the embedding provider instance.
20
+ * Handles concurrent initialization requests safely.
21
+ */
22
+ async getProvider() {
23
+ if (this.providerInstance) {
24
+ return this.providerInstance;
25
+ }
26
+ // If initialization is already in progress, wait for it
27
+ if (!this.initPromise) {
28
+ this.initPromise = this.initializeProvider();
29
+ }
30
+ try {
31
+ return await this.initPromise;
32
+ }
33
+ catch (error) {
34
+ // Reset on error so next attempt can retry
35
+ this.initPromise = null;
36
+ this.providerInstance = null;
37
+ throw error;
38
+ }
39
+ }
40
+ /**
41
+ * Initialize the embedding provider
42
+ */
43
+ async initializeProvider() {
44
+ const instance = createEmbeddingProvider(this.providerName, this.providerContext);
45
+ if (instance.init) {
46
+ await instance.init();
47
+ }
48
+ this.providerInstance = instance;
49
+ return instance;
50
+ }
51
+ /**
52
+ * Attempt to get provider, logging errors but not throwing
53
+ */
54
+ async getProviderSafe() {
55
+ try {
56
+ return await this.getProvider();
57
+ }
58
+ catch (error) {
59
+ if (!this.initErrorLogged && typeof this.logger.error === 'function') {
60
+ this.logger.error('CodeVault watch provider initialization failed:', error);
61
+ this.initErrorLogged = true;
62
+ }
63
+ return null;
64
+ }
65
+ }
66
+ /**
67
+ * Clean up provider resources
68
+ */
69
+ cleanup() {
70
+ this.providerInstance = null;
71
+ this.initPromise = null;
72
+ this.initErrorLogged = false;
73
+ }
74
+ }
75
+ //# sourceMappingURL=ProviderManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProviderManager.js","sourceRoot":"","sources":["../../src/indexer/ProviderManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAA0B,MAAM,uBAAuB,CAAC;AAGxF;;;GAGG;AACH,MAAM,OAAO,eAAe;IAMhB;IACA;IACA;IAPF,gBAAgB,GAA6B,IAAI,CAAC;IAClD,WAAW,GAAsC,IAAI,CAAC;IACtD,eAAe,GAAG,KAAK,CAAC;IAEhC,YACU,YAAoB,EACpB,eAAiC,EACjC,SAAkB,OAAO;QAFzB,iBAAY,GAAZ,YAAY,CAAQ;QACpB,oBAAe,GAAf,eAAe,CAAkB;QACjC,WAAM,GAAN,MAAM,CAAmB;IAChC,CAAC;IAEJ;;;OAGG;IACH,KAAK,CAAC,WAAW;QACf,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,gBAAgB,CAAC;QAC/B,CAAC;QAED,wDAAwD;QACxD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,2CAA2C;YAC3C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB;QAC9B,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAElF,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;gBACrE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,EAAE,KAAK,CAAC,CAAC;gBAC5E,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC9B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAC/B,CAAC;CACF"}