codevault 1.7.2 → 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.
- package/README.md +18 -5
- package/dist/chunking/semantic-chunker.d.ts.map +1 -1
- package/dist/chunking/semantic-chunker.js +20 -7
- package/dist/chunking/semantic-chunker.js.map +1 -1
- package/dist/cli/commands/index-cmd.d.ts +3 -0
- package/dist/cli/commands/index-cmd.d.ts.map +1 -0
- package/dist/cli/commands/index-cmd.js +118 -0
- package/dist/cli/commands/index-cmd.js.map +1 -0
- package/dist/cli/commands/info-cmd.d.ts +3 -0
- package/dist/cli/commands/info-cmd.d.ts.map +1 -0
- package/dist/cli/commands/info-cmd.js +47 -0
- package/dist/cli/commands/info-cmd.js.map +1 -0
- package/dist/cli/commands/mcp-cmd.d.ts +3 -0
- package/dist/cli/commands/mcp-cmd.d.ts.map +1 -0
- package/dist/cli/commands/mcp-cmd.js +33 -0
- package/dist/cli/commands/mcp-cmd.js.map +1 -0
- package/dist/cli/commands/search-cmd.d.ts +3 -0
- package/dist/cli/commands/search-cmd.d.ts.map +1 -0
- package/dist/cli/commands/search-cmd.js +52 -0
- package/dist/cli/commands/search-cmd.js.map +1 -0
- package/dist/cli/commands/search-with-code-cmd.d.ts +3 -0
- package/dist/cli/commands/search-with-code-cmd.d.ts.map +1 -0
- package/dist/cli/commands/search-with-code-cmd.js +74 -0
- package/dist/cli/commands/search-with-code-cmd.js.map +1 -0
- package/dist/cli/commands/update-cmd.d.ts +3 -0
- package/dist/cli/commands/update-cmd.d.ts.map +1 -0
- package/dist/cli/commands/update-cmd.js +24 -0
- package/dist/cli/commands/update-cmd.js.map +1 -0
- package/dist/cli/commands/watch-cmd.d.ts +3 -0
- package/dist/cli/commands/watch-cmd.d.ts.map +1 -0
- package/dist/cli/commands/watch-cmd.js +47 -0
- package/dist/cli/commands/watch-cmd.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +47 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -398
- package/dist/cli.js.map +1 -1
- package/dist/codemap/io.d.ts +1 -0
- package/dist/codemap/io.d.ts.map +1 -1
- package/dist/codemap/io.js.map +1 -1
- package/dist/config/constants.d.ts +11 -0
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +9 -0
- package/dist/config/constants.js.map +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +9 -2
- package/dist/config/loader.js.map +1 -1
- package/dist/core/IndexerEngine.d.ts +9 -17
- package/dist/core/IndexerEngine.d.ts.map +1 -1
- package/dist/core/IndexerEngine.js +72 -351
- package/dist/core/IndexerEngine.js.map +1 -1
- package/dist/core/SearchService.d.ts +13 -13
- package/dist/core/SearchService.d.ts.map +1 -1
- package/dist/core/SearchService.js +133 -325
- package/dist/core/SearchService.js.map +1 -1
- package/dist/core/batch-indexer.d.ts +5 -0
- package/dist/core/batch-indexer.d.ts.map +1 -1
- package/dist/core/batch-indexer.js +25 -27
- package/dist/core/batch-indexer.js.map +1 -1
- package/dist/core/indexer.d.ts +13 -0
- package/dist/core/indexer.d.ts.map +1 -1
- package/dist/core/indexer.js +13 -0
- package/dist/core/indexer.js.map +1 -1
- package/dist/core/indexing/FileProcessor.d.ts +42 -0
- package/dist/core/indexing/FileProcessor.d.ts.map +1 -0
- package/dist/core/indexing/FileProcessor.js +245 -0
- package/dist/core/indexing/FileProcessor.js.map +1 -0
- package/dist/core/indexing/IndexContext.d.ts +42 -0
- package/dist/core/indexing/IndexContext.d.ts.map +1 -0
- package/dist/core/indexing/IndexContext.js +133 -0
- package/dist/core/indexing/IndexContext.js.map +1 -0
- package/dist/core/indexing/IndexFinalizationStage.d.ts +39 -0
- package/dist/core/indexing/IndexFinalizationStage.d.ts.map +1 -0
- package/dist/core/indexing/IndexFinalizationStage.js +114 -0
- package/dist/core/indexing/IndexFinalizationStage.js.map +1 -0
- package/dist/core/indexing/IndexState.d.ts +50 -0
- package/dist/core/indexing/IndexState.d.ts.map +1 -0
- package/dist/core/indexing/IndexState.js +66 -0
- package/dist/core/indexing/IndexState.js.map +1 -0
- package/dist/core/indexing/chunk-pipeline.d.ts +39 -3
- package/dist/core/indexing/chunk-pipeline.d.ts.map +1 -1
- package/dist/core/indexing/chunk-pipeline.js +59 -24
- package/dist/core/indexing/chunk-pipeline.js.map +1 -1
- package/dist/core/search/CandidateRetriever.d.ts +51 -0
- package/dist/core/search/CandidateRetriever.d.ts.map +1 -0
- package/dist/core/search/CandidateRetriever.js +119 -0
- package/dist/core/search/CandidateRetriever.js.map +1 -0
- package/dist/core/search/HybridFusion.d.ts +89 -0
- package/dist/core/search/HybridFusion.d.ts.map +1 -0
- package/dist/core/search/HybridFusion.js +263 -0
- package/dist/core/search/HybridFusion.js.map +1 -0
- package/dist/core/search/ResultMapper.d.ts +31 -0
- package/dist/core/search/ResultMapper.d.ts.map +1 -0
- package/dist/core/search/ResultMapper.js +131 -0
- package/dist/core/search/ResultMapper.js.map +1 -0
- package/dist/core/search/SearchContextManager.d.ts +69 -0
- package/dist/core/search/SearchContextManager.d.ts.map +1 -0
- package/dist/core/search/SearchContextManager.js +139 -0
- package/dist/core/search/SearchContextManager.js.map +1 -0
- package/dist/core/search.d.ts +31 -0
- package/dist/core/search.d.ts.map +1 -1
- package/dist/core/search.js +33 -0
- package/dist/core/search.js.map +1 -1
- package/dist/core/types.d.ts +13 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/database/db.d.ts +36 -18
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +151 -24
- package/dist/database/db.js.map +1 -1
- package/dist/indexer/ChangeQueue.d.ts +67 -0
- package/dist/indexer/ChangeQueue.d.ts.map +1 -0
- package/dist/indexer/ChangeQueue.js +182 -0
- package/dist/indexer/ChangeQueue.js.map +1 -0
- package/dist/indexer/ProviderManager.d.ts +33 -0
- package/dist/indexer/ProviderManager.d.ts.map +1 -0
- package/dist/indexer/ProviderManager.js +75 -0
- package/dist/indexer/ProviderManager.js.map +1 -0
- package/dist/indexer/WatchService.d.ts +68 -0
- package/dist/indexer/WatchService.d.ts.map +1 -0
- package/dist/indexer/WatchService.js +155 -0
- package/dist/indexer/WatchService.js.map +1 -0
- package/dist/indexer/merkle.d.ts +5 -0
- package/dist/indexer/merkle.d.ts.map +1 -1
- package/dist/indexer/merkle.js +36 -12
- package/dist/indexer/merkle.js.map +1 -1
- package/dist/indexer/update.d.ts +14 -2
- package/dist/indexer/update.d.ts.map +1 -1
- package/dist/indexer/update.js +11 -0
- package/dist/indexer/update.js.map +1 -1
- package/dist/indexer/watch.d.ts +15 -20
- package/dist/indexer/watch.d.ts.map +1 -1
- package/dist/indexer/watch.js +14 -223
- package/dist/indexer/watch.js.map +1 -1
- package/dist/mcp/handlers/project.d.ts.map +1 -1
- package/dist/mcp/handlers/project.js +17 -1
- package/dist/mcp/handlers/project.js.map +1 -1
- package/dist/mcp-server.d.ts +6 -0
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +63 -2
- package/dist/mcp-server.js.map +1 -1
- package/dist/providers/base.d.ts +3 -0
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/base.js.map +1 -1
- package/dist/providers/index.d.ts +7 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +15 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/mock.d.ts +16 -0
- package/dist/providers/mock.d.ts.map +1 -0
- package/dist/providers/mock.js +46 -0
- package/dist/providers/mock.js.map +1 -0
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +4 -8
- package/dist/providers/openai.js.map +1 -1
- package/dist/ranking/api-reranker.d.ts.map +1 -1
- package/dist/ranking/api-reranker.js +9 -5
- package/dist/ranking/api-reranker.js.map +1 -1
- package/dist/search/bm25.d.ts.map +1 -1
- package/dist/search/bm25.js +21 -1
- package/dist/search/bm25.js.map +1 -1
- package/dist/search/scope.d.ts +1 -1
- package/dist/search/scope.d.ts.map +1 -1
- package/dist/search/scope.js +3 -3
- package/dist/search/scope.js.map +1 -1
- package/dist/storage/encrypted-chunks.d.ts +7 -1
- package/dist/storage/encrypted-chunks.d.ts.map +1 -1
- package/dist/storage/encrypted-chunks.js +187 -75
- package/dist/storage/encrypted-chunks.js.map +1 -1
- package/dist/symbols/extract.d.ts +2 -1
- package/dist/symbols/extract.d.ts.map +1 -1
- package/dist/symbols/extract.js +1 -1
- package/dist/symbols/extract.js.map +1 -1
- package/dist/symbols/graph.d.ts.map +1 -1
- package/dist/symbols/graph.js.map +1 -1
- package/dist/synthesis/conversational-synthesizer.d.ts.map +1 -1
- package/dist/synthesis/conversational-synthesizer.js +68 -76
- package/dist/synthesis/conversational-synthesizer.js.map +1 -1
- package/dist/synthesis/prompt-builder.d.ts +2 -0
- package/dist/synthesis/prompt-builder.d.ts.map +1 -1
- package/dist/synthesis/prompt-builder.js +80 -81
- package/dist/synthesis/prompt-builder.js.map +1 -1
- package/dist/synthesis/synthesizer.d.ts +11 -0
- package/dist/synthesis/synthesizer.d.ts.map +1 -1
- package/dist/synthesis/synthesizer.js +29 -1
- package/dist/synthesis/synthesizer.js.map +1 -1
- package/dist/tests/helpers/test-repo.d.ts +7 -0
- package/dist/tests/helpers/test-repo.d.ts.map +1 -0
- package/dist/tests/helpers/test-repo.js +21 -0
- package/dist/tests/helpers/test-repo.js.map +1 -0
- package/dist/tests/integration/index-search.integration.test.d.ts +2 -0
- package/dist/tests/integration/index-search.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/index-search.integration.test.js +163 -0
- package/dist/tests/integration/index-search.integration.test.js.map +1 -0
- package/dist/tests/simple-lru.test.js +22 -10
- package/dist/tests/simple-lru.test.js.map +1 -1
- package/dist/utils/cli-ui.d.ts.map +1 -1
- package/dist/utils/cli-ui.js +9 -3
- package/dist/utils/cli-ui.js.map +1 -1
- package/dist/utils/logger.d.ts +4 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/path-helpers.d.ts.map +1 -1
- package/dist/utils/path-helpers.js +17 -1
- package/dist/utils/path-helpers.js.map +1 -1
- package/dist/utils/scan-patterns.d.ts.map +1 -1
- package/dist/utils/scan-patterns.js +1 -2
- package/dist/utils/scan-patterns.js.map +1 -1
- package/dist/utils/simple-lru.d.ts +21 -2
- package/dist/utils/simple-lru.d.ts.map +1 -1
- package/dist/utils/simple-lru.js +126 -19
- package/dist/utils/simple-lru.js.map +1 -1
- package/package.json +13 -4
package/dist/database/db.js
CHANGED
|
@@ -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(
|
|
17
|
-
this.db.pragma(
|
|
18
|
-
this.db.pragma(
|
|
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,
|
|
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
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
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
|
-
|
|
288
|
-
|
|
289
|
-
|
|
414
|
+
return result;
|
|
415
|
+
});
|
|
416
|
+
return wrapped();
|
|
290
417
|
}
|
|
291
418
|
/**
|
|
292
419
|
* Close the database connection
|
package/dist/database/db.js.map
CHANGED
|
@@ -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"}
|