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.
- 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 -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/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
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import chokidar from 'chokidar';
|
|
2
|
+
export interface WatchServiceOptions {
|
|
3
|
+
repoPath?: string;
|
|
4
|
+
provider?: string;
|
|
5
|
+
debounceMs?: number;
|
|
6
|
+
onBatch?: ((event: {
|
|
7
|
+
changed: string[];
|
|
8
|
+
deleted: string[];
|
|
9
|
+
}) => void) | null;
|
|
10
|
+
logger?: Console;
|
|
11
|
+
encrypt?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface WatchController {
|
|
14
|
+
watcher: ReturnType<typeof chokidar.watch>;
|
|
15
|
+
ready: Promise<void>;
|
|
16
|
+
close: () => Promise<void>;
|
|
17
|
+
flush: () => Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* WatchService manages file system watching and coordinates with the change queue
|
|
21
|
+
* and provider manager to keep the index up-to-date.
|
|
22
|
+
*/
|
|
23
|
+
export declare class WatchService {
|
|
24
|
+
private options;
|
|
25
|
+
private watcher;
|
|
26
|
+
private changeQueue;
|
|
27
|
+
private providerManager;
|
|
28
|
+
private supportedExtensions;
|
|
29
|
+
private ready;
|
|
30
|
+
private root;
|
|
31
|
+
constructor(options?: WatchServiceOptions);
|
|
32
|
+
/**
|
|
33
|
+
* Attach chokidar event handlers
|
|
34
|
+
*/
|
|
35
|
+
private attachEventHandlers;
|
|
36
|
+
/**
|
|
37
|
+
* Handle file system events
|
|
38
|
+
*/
|
|
39
|
+
private handleFileEvent;
|
|
40
|
+
/**
|
|
41
|
+
* Handle watcher errors
|
|
42
|
+
*/
|
|
43
|
+
private handleError;
|
|
44
|
+
/**
|
|
45
|
+
* Wait for watcher to be ready
|
|
46
|
+
*/
|
|
47
|
+
waitForReady(): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Flush all pending changes
|
|
50
|
+
*/
|
|
51
|
+
flush(): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Close the watcher and clean up resources
|
|
54
|
+
*/
|
|
55
|
+
close(): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Get a controller object (for backward compatibility)
|
|
58
|
+
*/
|
|
59
|
+
getController(): WatchController;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Start watching a repository and automatically batch index changes.
|
|
63
|
+
*
|
|
64
|
+
* @param options - Watch configuration (repoPath, provider, debounceMs, encryption)
|
|
65
|
+
* @returns Controller with handles for `ready`, `flush`, and `close`
|
|
66
|
+
*/
|
|
67
|
+
export declare function startWatch(options?: WatchServiceOptions): WatchController;
|
|
68
|
+
//# sourceMappingURL=WatchService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WatchService.d.ts","sourceRoot":"","sources":["../../src/indexer/WatchService.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAqBhC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,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,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3C,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,YAAY;IAQX,OAAO,CAAC,OAAO;IAP3B,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,mBAAmB,CAAc;IACzC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,IAAI,CAAS;gBAED,OAAO,GAAE,mBAAwB;IA0DrD;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAgBvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B;;OAEG;IACH,aAAa,IAAI,eAAe;CAQjC;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,mBAAwB,GAAG,eAAe,CAG7E"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import chokidar from 'chokidar';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { toPosixPath } from './merkle.js';
|
|
4
|
+
import { getSupportedLanguageExtensions } from '../languages/rules.js';
|
|
5
|
+
import { resolveProviderContext } from '../config/resolver.js';
|
|
6
|
+
import { WATCHER_CONSTANTS } from '../config/constants.js';
|
|
7
|
+
import { ChangeQueue } from './ChangeQueue.js';
|
|
8
|
+
import { ProviderManager } from './ProviderManager.js';
|
|
9
|
+
const DEFAULT_DEBOUNCE_MS = WATCHER_CONSTANTS.DEFAULT_DEBOUNCE_MS;
|
|
10
|
+
const IGNORED_GLOBS = [
|
|
11
|
+
'**/node_modules/**',
|
|
12
|
+
'**/.git/**',
|
|
13
|
+
'**/.codevault/**',
|
|
14
|
+
'**/dist/**',
|
|
15
|
+
'**/build/**',
|
|
16
|
+
'**/tmp/**',
|
|
17
|
+
'**/.tmp/**',
|
|
18
|
+
'**/vendor/**'
|
|
19
|
+
];
|
|
20
|
+
/**
|
|
21
|
+
* WatchService manages file system watching and coordinates with the change queue
|
|
22
|
+
* and provider manager to keep the index up-to-date.
|
|
23
|
+
*/
|
|
24
|
+
export class WatchService {
|
|
25
|
+
options;
|
|
26
|
+
watcher;
|
|
27
|
+
changeQueue;
|
|
28
|
+
providerManager;
|
|
29
|
+
supportedExtensions;
|
|
30
|
+
ready;
|
|
31
|
+
root;
|
|
32
|
+
constructor(options = {}) {
|
|
33
|
+
this.options = options;
|
|
34
|
+
this.root = path.resolve(options.repoPath || '.');
|
|
35
|
+
// Setup supported file extensions
|
|
36
|
+
this.supportedExtensions = new Set((getSupportedLanguageExtensions() || []).map(ext => ext.toLowerCase()));
|
|
37
|
+
// Calculate effective debounce
|
|
38
|
+
const debounceMs = options.debounceMs ?? DEFAULT_DEBOUNCE_MS;
|
|
39
|
+
const effectiveDebounce = Number.isFinite(Number.parseInt(String(debounceMs), 10))
|
|
40
|
+
? Math.max(Number.parseInt(String(debounceMs), 10), WATCHER_CONSTANTS.MIN_DEBOUNCE_MS)
|
|
41
|
+
: DEFAULT_DEBOUNCE_MS;
|
|
42
|
+
// Initialize provider manager
|
|
43
|
+
const providerContext = resolveProviderContext(this.root);
|
|
44
|
+
this.providerManager = new ProviderManager(options.provider || 'auto', providerContext.embedding, options.logger || console);
|
|
45
|
+
// Initialize change queue
|
|
46
|
+
this.changeQueue = new ChangeQueue({
|
|
47
|
+
repoPath: this.root,
|
|
48
|
+
provider: options.provider || 'auto',
|
|
49
|
+
debounceMs: effectiveDebounce,
|
|
50
|
+
encrypt: options.encrypt,
|
|
51
|
+
logger: options.logger || console,
|
|
52
|
+
onBatch: options.onBatch,
|
|
53
|
+
providerGetter: () => this.providerManager.getProviderSafe()
|
|
54
|
+
});
|
|
55
|
+
// Setup file watcher
|
|
56
|
+
const watchPatterns = this.supportedExtensions.size > 0
|
|
57
|
+
? Array.from(this.supportedExtensions).map(ext => `**/*${ext}`)
|
|
58
|
+
: ['**/*'];
|
|
59
|
+
this.watcher = chokidar.watch(watchPatterns, {
|
|
60
|
+
cwd: this.root,
|
|
61
|
+
ignoreInitial: true,
|
|
62
|
+
ignored: IGNORED_GLOBS,
|
|
63
|
+
awaitWriteFinish: {
|
|
64
|
+
stabilityThreshold: Math.max(effectiveDebounce, WATCHER_CONSTANTS.STABILITY_THRESHOLD_MS),
|
|
65
|
+
pollInterval: WATCHER_CONSTANTS.POLL_INTERVAL_MS
|
|
66
|
+
},
|
|
67
|
+
persistent: true
|
|
68
|
+
});
|
|
69
|
+
// Setup ready promise
|
|
70
|
+
this.ready = new Promise(resolve => {
|
|
71
|
+
this.watcher.once('ready', resolve);
|
|
72
|
+
});
|
|
73
|
+
// Attach event handlers
|
|
74
|
+
this.attachEventHandlers();
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Attach chokidar event handlers
|
|
78
|
+
*/
|
|
79
|
+
attachEventHandlers() {
|
|
80
|
+
this.watcher.on('add', file => this.handleFileEvent('add', file));
|
|
81
|
+
this.watcher.on('change', file => this.handleFileEvent('change', file));
|
|
82
|
+
this.watcher.on('unlink', file => this.handleFileEvent('unlink', file));
|
|
83
|
+
this.watcher.on('error', error => this.handleError(error));
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Handle file system events
|
|
87
|
+
*/
|
|
88
|
+
handleFileEvent(type, filePath) {
|
|
89
|
+
const normalized = toPosixPath(filePath);
|
|
90
|
+
if (!normalized) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
// Check if file extension is supported
|
|
94
|
+
const ext = path.extname(normalized).toLowerCase();
|
|
95
|
+
if (this.supportedExtensions.size > 0 && !this.supportedExtensions.has(ext)) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
// Enqueue the change
|
|
99
|
+
this.changeQueue.enqueue(type, normalized);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Handle watcher errors
|
|
103
|
+
*/
|
|
104
|
+
handleError(error) {
|
|
105
|
+
const logger = this.options.logger || console;
|
|
106
|
+
if (logger && typeof logger.error === 'function') {
|
|
107
|
+
logger.error('CodeVault watch error:', error);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Wait for watcher to be ready
|
|
112
|
+
*/
|
|
113
|
+
async waitForReady() {
|
|
114
|
+
await this.ready;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Flush all pending changes
|
|
118
|
+
*/
|
|
119
|
+
async flush() {
|
|
120
|
+
await this.changeQueue.drain();
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Close the watcher and clean up resources
|
|
124
|
+
*/
|
|
125
|
+
async close() {
|
|
126
|
+
// Cancel any pending flushes
|
|
127
|
+
this.changeQueue.cancel();
|
|
128
|
+
// Clean up provider
|
|
129
|
+
this.providerManager.cleanup();
|
|
130
|
+
// Close the watcher
|
|
131
|
+
await this.watcher.close();
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get a controller object (for backward compatibility)
|
|
135
|
+
*/
|
|
136
|
+
getController() {
|
|
137
|
+
return {
|
|
138
|
+
watcher: this.watcher,
|
|
139
|
+
ready: this.ready,
|
|
140
|
+
close: () => this.close(),
|
|
141
|
+
flush: () => this.flush()
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Start watching a repository and automatically batch index changes.
|
|
147
|
+
*
|
|
148
|
+
* @param options - Watch configuration (repoPath, provider, debounceMs, encryption)
|
|
149
|
+
* @returns Controller with handles for `ready`, `flush`, and `close`
|
|
150
|
+
*/
|
|
151
|
+
export function startWatch(options = {}) {
|
|
152
|
+
const service = new WatchService(options);
|
|
153
|
+
return service.getController();
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=WatchService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WatchService.js","sourceRoot":"","sources":["../../src/indexer/WatchService.ts"],"names":[],"mappings":"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"}
|
package/dist/indexer/merkle.d.ts
CHANGED
|
@@ -7,6 +7,11 @@ export type MerkleTree = Record<string, MerkleEntry>;
|
|
|
7
7
|
export declare function loadMerkle(basePath?: string): MerkleTree;
|
|
8
8
|
export declare function saveMerkle(basePath?: string, merkle?: MerkleTree): void;
|
|
9
9
|
export declare function toPosixPath(relativePath: string | null): string | null;
|
|
10
|
+
export declare function validatePathSafety(basePath: string, targetPath: string): {
|
|
11
|
+
safe: boolean;
|
|
12
|
+
normalized: string | null;
|
|
13
|
+
reason?: string;
|
|
14
|
+
};
|
|
10
15
|
export declare function normalizeToProjectPath(basePath?: string, filePath?: string): string | null;
|
|
11
16
|
export declare function removeMerkleEntry(merkle: MerkleTree, relativePath: string): boolean;
|
|
12
17
|
export declare function cloneMerkle(merkle: MerkleTree): MerkleTree;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merkle.d.ts","sourceRoot":"","sources":["../../src/indexer/merkle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"merkle.d.ts","sourceRoot":"","sources":["../../src/indexer/merkle.ts"],"names":[],"mappings":"AAoBA,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAa7E;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAErD,wBAAgB,UAAU,CAAC,QAAQ,SAAM,GAAG,UAAU,CAcrD;AAED,wBAAgB,UAAU,CAAC,QAAQ,SAAM,EAAE,MAAM,GAAE,UAAe,GAAG,IAAI,CAOxE;AAED,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAKtE;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAgC/D;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,SAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOvF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAWnF;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAE1D"}
|
package/dist/indexer/merkle.js
CHANGED
|
@@ -10,11 +10,8 @@ async function getHasher() {
|
|
|
10
10
|
}
|
|
11
11
|
return hasherPromise;
|
|
12
12
|
}
|
|
13
|
-
function ensureObject(value) {
|
|
14
|
-
|
|
15
|
-
return {};
|
|
16
|
-
}
|
|
17
|
-
return value;
|
|
13
|
+
function ensureObject(value, fallback = {}) {
|
|
14
|
+
return value && typeof value === 'object' ? value : fallback;
|
|
18
15
|
}
|
|
19
16
|
export async function computeFastHash(input) {
|
|
20
17
|
const hasher = await getHasher();
|
|
@@ -58,17 +55,44 @@ export function toPosixPath(relativePath) {
|
|
|
58
55
|
}
|
|
59
56
|
return relativePath.split(path.sep).join('/');
|
|
60
57
|
}
|
|
58
|
+
export function validatePathSafety(basePath, targetPath) {
|
|
59
|
+
try {
|
|
60
|
+
const absBase = fs.realpathSync(basePath);
|
|
61
|
+
const absTarget = path.resolve(absBase, targetPath);
|
|
62
|
+
const relative = path.relative(absBase, absTarget);
|
|
63
|
+
if (relative === '') {
|
|
64
|
+
return { safe: true, normalized: toPosixPath(relative) };
|
|
65
|
+
}
|
|
66
|
+
if (relative.startsWith('..') || path.isAbsolute(relative)) {
|
|
67
|
+
return { safe: false, normalized: null, reason: 'path_outside_base' };
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
const realTarget = fs.realpathSync(absTarget);
|
|
71
|
+
const realRelative = path.relative(absBase, realTarget);
|
|
72
|
+
if (realRelative.startsWith('..') || path.isAbsolute(realRelative)) {
|
|
73
|
+
return { safe: false, normalized: null, reason: 'symlink_escape' };
|
|
74
|
+
}
|
|
75
|
+
return { safe: true, normalized: toPosixPath(realRelative) };
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// Target may not exist yet; rely on original relative path
|
|
79
|
+
return { safe: true, normalized: toPosixPath(relative) };
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
return {
|
|
84
|
+
safe: false,
|
|
85
|
+
normalized: null,
|
|
86
|
+
reason: error.message
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
61
90
|
export function normalizeToProjectPath(basePath = '.', filePath) {
|
|
62
91
|
if (typeof filePath !== 'string' || filePath.length === 0) {
|
|
63
92
|
return null;
|
|
64
93
|
}
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
const relative = path.relative(absoluteBase, absoluteFile);
|
|
68
|
-
if (!relative || relative.startsWith('..')) {
|
|
69
|
-
return null;
|
|
70
|
-
}
|
|
71
|
-
return toPosixPath(relative);
|
|
94
|
+
const result = validatePathSafety(basePath, filePath);
|
|
95
|
+
return result.safe ? result.normalized : null;
|
|
72
96
|
}
|
|
73
97
|
export function removeMerkleEntry(merkle, relativePath) {
|
|
74
98
|
if (!merkle || typeof merkle !== 'object') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merkle.js","sourceRoot":"","sources":["../../src/indexer/merkle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"merkle.js","sourceRoot":"","sources":["../../src/indexer/merkle.ts"],"names":[],"mappings":"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"}
|
package/dist/indexer/update.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { EmbeddingProvider } from '../providers/base.js';
|
|
2
|
+
import type { ProgressEvent, IndexError } from '../core/types.js';
|
|
2
3
|
export interface UpdateIndexOptions {
|
|
3
4
|
repoPath?: string;
|
|
4
5
|
provider?: string;
|
|
5
6
|
changedFiles?: string[];
|
|
6
7
|
deletedFiles?: string[];
|
|
7
|
-
onProgress?: ((event:
|
|
8
|
+
onProgress?: ((event: ProgressEvent) => void) | null;
|
|
8
9
|
embeddingProvider?: EmbeddingProvider | null;
|
|
9
10
|
encrypt?: string;
|
|
10
11
|
}
|
|
@@ -13,7 +14,18 @@ export interface UpdateIndexResult {
|
|
|
13
14
|
processedChunks: number;
|
|
14
15
|
totalChunks: number;
|
|
15
16
|
provider: string;
|
|
16
|
-
errors:
|
|
17
|
+
errors: IndexError[];
|
|
17
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Incrementally update the index for a repository by processing changed/deleted files.
|
|
21
|
+
*
|
|
22
|
+
* @param repoPath - Project root containing `.codevault` artifacts
|
|
23
|
+
* @param provider - Embedding provider name ('auto' uses config/defaults)
|
|
24
|
+
* @param changedFiles - Relative paths to re-index; if empty and no deletes, returns early
|
|
25
|
+
* @param deletedFiles - Relative paths whose artifacts should be removed
|
|
26
|
+
* @param onProgress - Optional progress callback for UI/CLI integrations
|
|
27
|
+
* @param embeddingProvider - Optional initialized provider instance (reuses watch provider)
|
|
28
|
+
* @param encrypt - Optional encryption mode override ('on' | 'off')
|
|
29
|
+
*/
|
|
18
30
|
export declare function updateIndex({ repoPath, provider, changedFiles, deletedFiles, onProgress, embeddingProvider, encrypt }?: UpdateIndexOptions): Promise<UpdateIndexResult>;
|
|
19
31
|
//# sourceMappingURL=update.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/indexer/update.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/indexer/update.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAmBlE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACrD,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAAC,EAChC,QAAc,EACd,QAAiB,EACjB,YAAiB,EACjB,YAAiB,EACjB,UAAiB,EACjB,iBAAwB,EACxB,OAAmB,EACpB,GAAE,kBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwBtD"}
|
package/dist/indexer/update.js
CHANGED
|
@@ -14,6 +14,17 @@ function normalizeList(basePath, values = []) {
|
|
|
14
14
|
}
|
|
15
15
|
return Array.from(normalized);
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Incrementally update the index for a repository by processing changed/deleted files.
|
|
19
|
+
*
|
|
20
|
+
* @param repoPath - Project root containing `.codevault` artifacts
|
|
21
|
+
* @param provider - Embedding provider name ('auto' uses config/defaults)
|
|
22
|
+
* @param changedFiles - Relative paths to re-index; if empty and no deletes, returns early
|
|
23
|
+
* @param deletedFiles - Relative paths whose artifacts should be removed
|
|
24
|
+
* @param onProgress - Optional progress callback for UI/CLI integrations
|
|
25
|
+
* @param embeddingProvider - Optional initialized provider instance (reuses watch provider)
|
|
26
|
+
* @param encrypt - Optional encryption mode override ('on' | 'off')
|
|
27
|
+
*/
|
|
17
28
|
export async function updateIndex({ repoPath = '.', provider = 'auto', changedFiles = [], deletedFiles = [], onProgress = null, embeddingProvider = null, encrypt = undefined } = {}) {
|
|
18
29
|
const root = path.resolve(repoPath);
|
|
19
30
|
const normalizedChanged = normalizeList(root, changedFiles);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/indexer/update.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/indexer/update.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIlD,SAAS,aAAa,CAAC,QAAgB,EAAE,SAAmB,EAAE;IAC5D,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACzD,IAAI,QAAQ,EAAE,CAAC;YACb,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChC,CAAC;AAoBD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAChC,QAAQ,GAAG,GAAG,EACd,QAAQ,GAAG,MAAM,EACjB,YAAY,GAAG,EAAE,EACjB,YAAY,GAAG,EAAE,EACjB,UAAU,GAAG,IAAI,EACjB,iBAAiB,GAAG,IAAI,EACxB,OAAO,GAAG,SAAS,KACG,EAAE;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC5D,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAE5D,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrE,OAAO;YACL,OAAO,EAAE,IAAI;YACb,eAAe,EAAE,CAAC;YAClB,WAAW,EAAE,CAAC;YACd,QAAQ;YACR,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC;QAClB,QAAQ,EAAE,IAAI;QACd,QAAQ;QACR,UAAU;QACV,YAAY,EAAE,iBAAiB;QAC/B,YAAY,EAAE,iBAAiB;QAC/B,yBAAyB,EAAE,iBAAiB;QAC5C,WAAW,EAAE,OAAO;KACrB,CAAC,CAAC;AACL,CAAC"}
|
package/dist/indexer/watch.d.ts
CHANGED
|
@@ -1,21 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
close: () => Promise<void>;
|
|
17
|
-
flush: () => Promise<void>;
|
|
18
|
-
}
|
|
19
|
-
export declare function startWatch({ repoPath, provider, debounceMs, onBatch, logger, encrypt }?: WatchOptions): WatchController;
|
|
20
|
-
export {};
|
|
1
|
+
/**
|
|
2
|
+
* Watch Service - File system watching with debounced index updates
|
|
3
|
+
*
|
|
4
|
+
* This module provides backward-compatible exports while delegating to the
|
|
5
|
+
* refactored WatchService, ChangeQueue, and ProviderManager classes.
|
|
6
|
+
*
|
|
7
|
+
* The refactored architecture separates concerns:
|
|
8
|
+
* - WatchService: Orchestrates file watching and event handling
|
|
9
|
+
* - ChangeQueue: Manages debouncing and race-condition-free flushing
|
|
10
|
+
* - ProviderManager: Handles embedding provider lifecycle
|
|
11
|
+
*/
|
|
12
|
+
export { startWatch, WatchService } from './WatchService.js';
|
|
13
|
+
export type { WatchServiceOptions as WatchOptions, WatchController } from './WatchService.js';
|
|
14
|
+
export { ChangeQueue } from './ChangeQueue.js';
|
|
15
|
+
export { ProviderManager } from './ProviderManager.js';
|
|
21
16
|
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/indexer/watch.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/indexer/watch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7D,YAAY,EAAE,mBAAmB,IAAI,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC9F,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
|