codevault 1.7.3 → 1.7.5
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 +21 -8
- package/dist/chunking/semantic-chunker.js.map +1 -1
- package/dist/chunking/token-counter.js +3 -3
- package/dist/chunking/token-counter.js.map +1 -1
- package/dist/cli/commands/chat-cmd.js +2 -1
- package/dist/cli/commands/chat-cmd.js.map +1 -1
- package/dist/cli/commands/config-cmd.js +4 -4
- package/dist/cli/commands/config-cmd.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/interactive-config.js +1 -1
- package/dist/cli/commands/interactive-config.js.map +1 -1
- 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 +48 -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 -347
- 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 +22 -23
- 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/metadata.js +2 -2
- package/dist/core/metadata.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 +37 -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 +67 -8
- 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 +3 -3
- 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 +81 -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 +30 -2
- 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 +10 -4
- package/dist/utils/cli-ui.js.map +1 -1
- package/dist/utils/logger.d.ts +6 -3
- 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/rate-limiter.js +2 -2
- package/dist/utils/rate-limiter.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 | Promise<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,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7F,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"}
|