@code-rag/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +19 -0
- package/dist/auth/audit-log.d.ts +35 -0
- package/dist/auth/audit-log.js +110 -0
- package/dist/auth/audit-log.js.map +1 -0
- package/dist/auth/audit-log.test.d.ts +1 -0
- package/dist/auth/audit-log.test.js +261 -0
- package/dist/auth/audit-log.test.js.map +1 -0
- package/dist/auth/index.d.ts +6 -0
- package/dist/auth/index.js +5 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oidc-provider.d.ts +49 -0
- package/dist/auth/oidc-provider.js +358 -0
- package/dist/auth/oidc-provider.js.map +1 -0
- package/dist/auth/oidc-provider.test.d.ts +1 -0
- package/dist/auth/oidc-provider.test.js +520 -0
- package/dist/auth/oidc-provider.test.js.map +1 -0
- package/dist/auth/rbac.d.ts +29 -0
- package/dist/auth/rbac.js +75 -0
- package/dist/auth/rbac.js.map +1 -0
- package/dist/auth/rbac.test.d.ts +1 -0
- package/dist/auth/rbac.test.js +224 -0
- package/dist/auth/rbac.test.js.map +1 -0
- package/dist/auth/saml-provider.d.ts +51 -0
- package/dist/auth/saml-provider.js +355 -0
- package/dist/auth/saml-provider.js.map +1 -0
- package/dist/auth/saml-provider.test.d.ts +1 -0
- package/dist/auth/saml-provider.test.js +422 -0
- package/dist/auth/saml-provider.test.js.map +1 -0
- package/dist/auth/types.d.ts +81 -0
- package/dist/auth/types.js +11 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/auth/types.test.d.ts +1 -0
- package/dist/auth/types.test.js +147 -0
- package/dist/auth/types.test.js.map +1 -0
- package/dist/backlog/ab-reference-scanner.d.ts +10 -0
- package/dist/backlog/ab-reference-scanner.js +22 -0
- package/dist/backlog/ab-reference-scanner.js.map +1 -0
- package/dist/backlog/ab-reference-scanner.test.d.ts +1 -0
- package/dist/backlog/ab-reference-scanner.test.js +83 -0
- package/dist/backlog/ab-reference-scanner.test.js.map +1 -0
- package/dist/backlog/azure-devops-provider.d.ts +59 -0
- package/dist/backlog/azure-devops-provider.js +283 -0
- package/dist/backlog/azure-devops-provider.js.map +1 -0
- package/dist/backlog/backlog-provider.d.ts +13 -0
- package/dist/backlog/backlog-provider.js +6 -0
- package/dist/backlog/backlog-provider.js.map +1 -0
- package/dist/backlog/backlog-provider.test.d.ts +1 -0
- package/dist/backlog/backlog-provider.test.js +426 -0
- package/dist/backlog/backlog-provider.test.js.map +1 -0
- package/dist/backlog/clickup-provider.d.ts +55 -0
- package/dist/backlog/clickup-provider.js +301 -0
- package/dist/backlog/clickup-provider.js.map +1 -0
- package/dist/backlog/clickup-provider.test.d.ts +1 -0
- package/dist/backlog/clickup-provider.test.js +426 -0
- package/dist/backlog/clickup-provider.test.js.map +1 -0
- package/dist/backlog/clickup-reference-scanner.d.ts +10 -0
- package/dist/backlog/clickup-reference-scanner.js +32 -0
- package/dist/backlog/clickup-reference-scanner.js.map +1 -0
- package/dist/backlog/clickup-reference-scanner.test.d.ts +1 -0
- package/dist/backlog/clickup-reference-scanner.test.js +92 -0
- package/dist/backlog/clickup-reference-scanner.test.js.map +1 -0
- package/dist/backlog/code-linker.d.ts +63 -0
- package/dist/backlog/code-linker.js +90 -0
- package/dist/backlog/code-linker.js.map +1 -0
- package/dist/backlog/code-linker.test.d.ts +1 -0
- package/dist/backlog/code-linker.test.js +325 -0
- package/dist/backlog/code-linker.test.js.map +1 -0
- package/dist/backlog/index.d.ts +14 -0
- package/dist/backlog/index.js +8 -0
- package/dist/backlog/index.js.map +1 -0
- package/dist/backlog/jira-provider.d.ts +60 -0
- package/dist/backlog/jira-provider.js +272 -0
- package/dist/backlog/jira-provider.js.map +1 -0
- package/dist/backlog/jira-provider.test.d.ts +1 -0
- package/dist/backlog/jira-provider.test.js +449 -0
- package/dist/backlog/jira-provider.test.js.map +1 -0
- package/dist/backlog/jira-reference-scanner.d.ts +11 -0
- package/dist/backlog/jira-reference-scanner.js +26 -0
- package/dist/backlog/jira-reference-scanner.js.map +1 -0
- package/dist/backlog/jira-reference-scanner.test.d.ts +1 -0
- package/dist/backlog/jira-reference-scanner.test.js +127 -0
- package/dist/backlog/jira-reference-scanner.test.js.map +1 -0
- package/dist/backlog/types.d.ts +22 -0
- package/dist/backlog/types.js +1 -0
- package/dist/backlog/types.js.map +1 -0
- package/dist/chunker/ast-chunker.d.ts +45 -0
- package/dist/chunker/ast-chunker.js +292 -0
- package/dist/chunker/ast-chunker.js.map +1 -0
- package/dist/chunker/ast-chunker.test.d.ts +1 -0
- package/dist/chunker/ast-chunker.test.js +391 -0
- package/dist/chunker/ast-chunker.test.js.map +1 -0
- package/dist/chunker/chunker.d.ts +8 -0
- package/dist/chunker/chunker.js +1 -0
- package/dist/chunker/chunker.js.map +1 -0
- package/dist/chunker/index.d.ts +3 -0
- package/dist/chunker/index.js +2 -0
- package/dist/chunker/index.js.map +1 -0
- package/dist/config/config-parser.d.ts +15 -0
- package/dist/config/config-parser.js +283 -0
- package/dist/config/config-parser.js.map +1 -0
- package/dist/config/config-parser.test.d.ts +1 -0
- package/dist/config/config-parser.test.js +699 -0
- package/dist/config/config-parser.test.js.map +1 -0
- package/dist/docs/confluence-provider.d.ts +121 -0
- package/dist/docs/confluence-provider.js +459 -0
- package/dist/docs/confluence-provider.js.map +1 -0
- package/dist/docs/confluence-provider.test.d.ts +1 -0
- package/dist/docs/confluence-provider.test.js +765 -0
- package/dist/docs/confluence-provider.test.js.map +1 -0
- package/dist/docs/index.d.ts +4 -0
- package/dist/docs/index.js +2 -0
- package/dist/docs/index.js.map +1 -0
- package/dist/docs/sharepoint-provider.d.ts +150 -0
- package/dist/docs/sharepoint-provider.js +637 -0
- package/dist/docs/sharepoint-provider.js.map +1 -0
- package/dist/docs/sharepoint-provider.test.d.ts +1 -0
- package/dist/docs/sharepoint-provider.test.js +873 -0
- package/dist/docs/sharepoint-provider.test.js.map +1 -0
- package/dist/embedding/bm25-index.d.ts +12 -0
- package/dist/embedding/bm25-index.js +89 -0
- package/dist/embedding/bm25-index.js.map +1 -0
- package/dist/embedding/bm25-index.test.d.ts +1 -0
- package/dist/embedding/bm25-index.test.js +289 -0
- package/dist/embedding/bm25-index.test.js.map +1 -0
- package/dist/embedding/hybrid-search.d.ts +13 -0
- package/dist/embedding/hybrid-search.js +124 -0
- package/dist/embedding/hybrid-search.js.map +1 -0
- package/dist/embedding/hybrid-search.test.d.ts +1 -0
- package/dist/embedding/hybrid-search.test.js +266 -0
- package/dist/embedding/hybrid-search.test.js.map +1 -0
- package/dist/embedding/index.d.ts +11 -0
- package/dist/embedding/index.js +7 -0
- package/dist/embedding/index.js.map +1 -0
- package/dist/embedding/lancedb-store.d.ts +21 -0
- package/dist/embedding/lancedb-store.js +172 -0
- package/dist/embedding/lancedb-store.js.map +1 -0
- package/dist/embedding/lancedb-store.test.d.ts +1 -0
- package/dist/embedding/lancedb-store.test.js +268 -0
- package/dist/embedding/lancedb-store.test.js.map +1 -0
- package/dist/embedding/model-lifecycle-manager.d.ts +83 -0
- package/dist/embedding/model-lifecycle-manager.js +419 -0
- package/dist/embedding/model-lifecycle-manager.js.map +1 -0
- package/dist/embedding/model-lifecycle-manager.test.d.ts +1 -0
- package/dist/embedding/model-lifecycle-manager.test.js +642 -0
- package/dist/embedding/model-lifecycle-manager.test.js.map +1 -0
- package/dist/embedding/ollama-embedding-provider.d.ts +16 -0
- package/dist/embedding/ollama-embedding-provider.js +74 -0
- package/dist/embedding/ollama-embedding-provider.js.map +1 -0
- package/dist/embedding/ollama-embedding-provider.test.d.ts +1 -0
- package/dist/embedding/ollama-embedding-provider.test.js +198 -0
- package/dist/embedding/ollama-embedding-provider.test.js.map +1 -0
- package/dist/embedding/openai-compatible-embedding-provider.d.ts +19 -0
- package/dist/embedding/openai-compatible-embedding-provider.js +108 -0
- package/dist/embedding/openai-compatible-embedding-provider.js.map +1 -0
- package/dist/embedding/openai-compatible-embedding-provider.test.d.ts +1 -0
- package/dist/embedding/openai-compatible-embedding-provider.test.js +456 -0
- package/dist/embedding/openai-compatible-embedding-provider.test.js.map +1 -0
- package/dist/embedding/qdrant-store.d.ts +28 -0
- package/dist/embedding/qdrant-store.js +174 -0
- package/dist/embedding/qdrant-store.js.map +1 -0
- package/dist/embedding/qdrant-store.test.d.ts +1 -0
- package/dist/embedding/qdrant-store.test.js +359 -0
- package/dist/embedding/qdrant-store.test.js.map +1 -0
- package/dist/enrichment/index.d.ts +4 -0
- package/dist/enrichment/index.js +2 -0
- package/dist/enrichment/index.js.map +1 -0
- package/dist/enrichment/nl-enricher.d.ts +16 -0
- package/dist/enrichment/nl-enricher.js +47 -0
- package/dist/enrichment/nl-enricher.js.map +1 -0
- package/dist/enrichment/nl-enricher.test.d.ts +1 -0
- package/dist/enrichment/nl-enricher.test.js +154 -0
- package/dist/enrichment/nl-enricher.test.js.map +1 -0
- package/dist/enrichment/ollama-client.d.ts +18 -0
- package/dist/enrichment/ollama-client.js +55 -0
- package/dist/enrichment/ollama-client.js.map +1 -0
- package/dist/enrichment/ollama-client.test.d.ts +1 -0
- package/dist/enrichment/ollama-client.test.js +129 -0
- package/dist/enrichment/ollama-client.test.js.map +1 -0
- package/dist/git/git-client.d.ts +22 -0
- package/dist/git/git-client.js +6 -0
- package/dist/git/git-client.js.map +1 -0
- package/dist/git/git-client.test.d.ts +1 -0
- package/dist/git/git-client.test.js +200 -0
- package/dist/git/git-client.test.js.map +1 -0
- package/dist/git/ignore-filter.d.ts +2 -0
- package/dist/git/ignore-filter.js +31 -0
- package/dist/git/ignore-filter.js.map +1 -0
- package/dist/git/ignore-filter.test.d.ts +1 -0
- package/dist/git/ignore-filter.test.js +87 -0
- package/dist/git/ignore-filter.test.js.map +1 -0
- package/dist/git/index.d.ts +4 -0
- package/dist/git/index.js +3 -0
- package/dist/git/index.js.map +1 -0
- package/dist/git/simple-git-client.d.ts +12 -0
- package/dist/git/simple-git-client.js +138 -0
- package/dist/git/simple-git-client.js.map +1 -0
- package/dist/graph/cross-repo-resolver.d.ts +50 -0
- package/dist/graph/cross-repo-resolver.js +315 -0
- package/dist/graph/cross-repo-resolver.js.map +1 -0
- package/dist/graph/cross-repo-resolver.test.d.ts +1 -0
- package/dist/graph/cross-repo-resolver.test.js +548 -0
- package/dist/graph/cross-repo-resolver.test.js.map +1 -0
- package/dist/graph/dependency-graph.d.ts +44 -0
- package/dist/graph/dependency-graph.js +108 -0
- package/dist/graph/dependency-graph.js.map +1 -0
- package/dist/graph/dependency-graph.test.d.ts +1 -0
- package/dist/graph/dependency-graph.test.js +276 -0
- package/dist/graph/dependency-graph.test.js.map +1 -0
- package/dist/graph/graph-builder.d.ts +11 -0
- package/dist/graph/graph-builder.js +113 -0
- package/dist/graph/graph-builder.js.map +1 -0
- package/dist/graph/graph-builder.test.d.ts +1 -0
- package/dist/graph/graph-builder.test.js +178 -0
- package/dist/graph/graph-builder.test.js.map +1 -0
- package/dist/graph/import-resolver.d.ts +11 -0
- package/dist/graph/import-resolver.js +199 -0
- package/dist/graph/import-resolver.js.map +1 -0
- package/dist/graph/import-resolver.test.d.ts +1 -0
- package/dist/graph/import-resolver.test.js +282 -0
- package/dist/graph/import-resolver.test.js.map +1 -0
- package/dist/graph/index.d.ts +7 -0
- package/dist/graph/index.js +4 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer/file-scanner.d.ts +34 -0
- package/dist/indexer/file-scanner.js +69 -0
- package/dist/indexer/file-scanner.js.map +1 -0
- package/dist/indexer/file-scanner.test.d.ts +1 -0
- package/dist/indexer/file-scanner.test.js +110 -0
- package/dist/indexer/file-scanner.test.js.map +1 -0
- package/dist/indexer/file-watcher.d.ts +79 -0
- package/dist/indexer/file-watcher.js +148 -0
- package/dist/indexer/incremental-indexer.d.ts +67 -0
- package/dist/indexer/incremental-indexer.js +142 -0
- package/dist/indexer/incremental-indexer.js.map +1 -0
- package/dist/indexer/incremental-indexer.test.d.ts +1 -0
- package/dist/indexer/incremental-indexer.test.js +266 -0
- package/dist/indexer/incremental-indexer.test.js.map +1 -0
- package/dist/indexer/index-check.d.ts +22 -0
- package/dist/indexer/index-check.js +74 -0
- package/dist/indexer/index-check.js.map +1 -0
- package/dist/indexer/index-check.test.d.ts +1 -0
- package/dist/indexer/index-check.test.js +100 -0
- package/dist/indexer/index-check.test.js.map +1 -0
- package/dist/indexer/index-state.d.ts +61 -0
- package/dist/indexer/index-state.js +82 -0
- package/dist/indexer/index-state.js.map +1 -0
- package/dist/indexer/index-state.test.d.ts +1 -0
- package/dist/indexer/index-state.test.js +140 -0
- package/dist/indexer/index-state.test.js.map +1 -0
- package/dist/indexer/index.d.ts +12 -0
- package/dist/indexer/index.js +6 -0
- package/dist/indexer/index.js.map +1 -0
- package/dist/indexer/multi-repo-indexer.d.ts +63 -0
- package/dist/indexer/multi-repo-indexer.js +144 -0
- package/dist/indexer/multi-repo-indexer.js.map +1 -0
- package/dist/indexer/multi-repo-indexer.test.d.ts +1 -0
- package/dist/indexer/multi-repo-indexer.test.js +238 -0
- package/dist/indexer/multi-repo-indexer.test.js.map +1 -0
- package/dist/parser/index.d.ts +4 -0
- package/dist/parser/index.js +3 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/language-registry.d.ts +46 -0
- package/dist/parser/language-registry.js +219 -0
- package/dist/parser/language-registry.js.map +1 -0
- package/dist/parser/language-registry.test.d.ts +1 -0
- package/dist/parser/language-registry.test.js +225 -0
- package/dist/parser/language-registry.test.js.map +1 -0
- package/dist/parser/markdown-parser.d.ts +124 -0
- package/dist/parser/markdown-parser.js +487 -0
- package/dist/parser/markdown-parser.js.map +1 -0
- package/dist/parser/markdown-parser.test.d.ts +1 -0
- package/dist/parser/markdown-parser.test.js +600 -0
- package/dist/parser/markdown-parser.test.js.map +1 -0
- package/dist/parser/tree-sitter-parser.d.ts +32 -0
- package/dist/parser/tree-sitter-parser.js +146 -0
- package/dist/parser/tree-sitter-parser.js.map +1 -0
- package/dist/retrieval/context-expander.d.ts +51 -0
- package/dist/retrieval/context-expander.js +218 -0
- package/dist/retrieval/context-expander.js.map +1 -0
- package/dist/retrieval/context-expander.test.d.ts +1 -0
- package/dist/retrieval/context-expander.test.js +339 -0
- package/dist/retrieval/context-expander.test.js.map +1 -0
- package/dist/retrieval/cross-encoder-reranker.d.ts +16 -0
- package/dist/retrieval/cross-encoder-reranker.js +90 -0
- package/dist/retrieval/cross-encoder-reranker.js.map +1 -0
- package/dist/retrieval/cross-encoder-reranker.test.d.ts +1 -0
- package/dist/retrieval/cross-encoder-reranker.test.js +305 -0
- package/dist/retrieval/cross-encoder-reranker.test.js.map +1 -0
- package/dist/retrieval/index.d.ts +8 -0
- package/dist/retrieval/index.js +4 -0
- package/dist/retrieval/index.js.map +1 -0
- package/dist/retrieval/query-analyzer.d.ts +29 -0
- package/dist/retrieval/query-analyzer.js +238 -0
- package/dist/retrieval/query-analyzer.js.map +1 -0
- package/dist/retrieval/query-analyzer.test.d.ts +1 -0
- package/dist/retrieval/query-analyzer.test.js +236 -0
- package/dist/retrieval/query-analyzer.test.js.map +1 -0
- package/dist/retrieval/token-budget.d.ts +51 -0
- package/dist/retrieval/token-budget.js +141 -0
- package/dist/retrieval/token-budget.js.map +1 -0
- package/dist/retrieval/token-budget.test.d.ts +1 -0
- package/dist/retrieval/token-budget.test.js +404 -0
- package/dist/retrieval/token-budget.test.js.map +1 -0
- package/dist/storage/azure-blob-provider.d.ts +19 -0
- package/dist/storage/azure-blob-provider.js +199 -0
- package/dist/storage/azure-blob-provider.js.map +1 -0
- package/dist/storage/azure-blob-provider.test.d.ts +1 -0
- package/dist/storage/azure-blob-provider.test.js +250 -0
- package/dist/storage/azure-blob-provider.test.js.map +1 -0
- package/dist/storage/gcs-provider.d.ts +22 -0
- package/dist/storage/gcs-provider.js +241 -0
- package/dist/storage/gcs-provider.js.map +1 -0
- package/dist/storage/gcs-provider.test.d.ts +1 -0
- package/dist/storage/gcs-provider.test.js +299 -0
- package/dist/storage/gcs-provider.test.js.map +1 -0
- package/dist/storage/index.d.ts +5 -0
- package/dist/storage/index.js +4 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/s3-provider.d.ts +21 -0
- package/dist/storage/s3-provider.js +220 -0
- package/dist/storage/s3-provider.js.map +1 -0
- package/dist/storage/s3-provider.test.d.ts +1 -0
- package/dist/storage/s3-provider.test.js +329 -0
- package/dist/storage/s3-provider.test.js.map +1 -0
- package/dist/storage/types.d.ts +65 -0
- package/dist/storage/types.js +12 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/types/chunk.d.ts +32 -0
- package/dist/types/chunk.js +1 -0
- package/dist/types/chunk.js.map +1 -0
- package/dist/types/config.d.ts +71 -0
- package/dist/types/config.js +1 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/provider.d.ts +54 -0
- package/dist/types/provider.js +36 -0
- package/dist/types/provider.js.map +1 -0
- package/dist/types/search.d.ts +27 -0
- package/dist/types/search.js +1 -0
- package/dist/types/search.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { IgnoreFilter } from '../git/ignore-filter.js';
|
|
2
|
+
/**
|
|
3
|
+
* Events emitted by the FileWatcher.
|
|
4
|
+
*/
|
|
5
|
+
export interface FileWatcherEvents {
|
|
6
|
+
/** Emitted when a debounced batch of changed file paths is ready. */
|
|
7
|
+
change: (changedPaths: readonly string[]) => void;
|
|
8
|
+
/** Emitted when the watcher encounters an error. */
|
|
9
|
+
error: (error: Error) => void;
|
|
10
|
+
/** Emitted when the initial scan is complete and the watcher is ready. */
|
|
11
|
+
ready: () => void;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Configuration for the FileWatcher.
|
|
15
|
+
*/
|
|
16
|
+
export interface FileWatcherConfig {
|
|
17
|
+
/** Root directory to watch. */
|
|
18
|
+
readonly rootDir: string;
|
|
19
|
+
/** Ignore filter function (from createIgnoreFilter). */
|
|
20
|
+
readonly ignoreFilter: IgnoreFilter;
|
|
21
|
+
/** Debounce window in milliseconds (default: 2000). */
|
|
22
|
+
readonly debounceMs?: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Watches a project directory for file changes and emits debounced
|
|
26
|
+
* batches of changed file paths, respecting .gitignore and .coderag.yaml
|
|
27
|
+
* ignore patterns.
|
|
28
|
+
*
|
|
29
|
+
* Uses chokidar for cross-platform file watching with robust event handling.
|
|
30
|
+
*/
|
|
31
|
+
export declare class FileWatcher {
|
|
32
|
+
private readonly config;
|
|
33
|
+
private readonly debounceMs;
|
|
34
|
+
private readonly emitter;
|
|
35
|
+
private watcher;
|
|
36
|
+
private pendingChanges;
|
|
37
|
+
private debounceTimer;
|
|
38
|
+
private isRunning;
|
|
39
|
+
constructor(config: FileWatcherConfig);
|
|
40
|
+
/**
|
|
41
|
+
* Register an event listener.
|
|
42
|
+
*/
|
|
43
|
+
on<K extends keyof FileWatcherEvents>(event: K, listener: FileWatcherEvents[K]): this;
|
|
44
|
+
/**
|
|
45
|
+
* Remove an event listener.
|
|
46
|
+
*/
|
|
47
|
+
off<K extends keyof FileWatcherEvents>(event: K, listener: FileWatcherEvents[K]): this;
|
|
48
|
+
/**
|
|
49
|
+
* Start watching the root directory for file changes.
|
|
50
|
+
* Resolves when the initial scan is complete and the watcher is ready.
|
|
51
|
+
*/
|
|
52
|
+
start(): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Stop watching and clean up resources.
|
|
55
|
+
*/
|
|
56
|
+
stop(): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Check whether the watcher is currently running.
|
|
59
|
+
*/
|
|
60
|
+
getIsRunning(): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Get the number of pending (not yet flushed) changes.
|
|
63
|
+
*/
|
|
64
|
+
getPendingCount(): number;
|
|
65
|
+
/**
|
|
66
|
+
* Determine whether a file path should be ignored.
|
|
67
|
+
* Converts absolute paths to relative paths for the ignore filter.
|
|
68
|
+
*/
|
|
69
|
+
private shouldIgnore;
|
|
70
|
+
/**
|
|
71
|
+
* Handle a file change event by adding it to the pending set
|
|
72
|
+
* and resetting the debounce timer.
|
|
73
|
+
*/
|
|
74
|
+
private handleChange;
|
|
75
|
+
/**
|
|
76
|
+
* Emit all pending changes as a single batch and clear the pending set.
|
|
77
|
+
*/
|
|
78
|
+
private flushChanges;
|
|
79
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { watch } from 'chokidar';
|
|
2
|
+
import { relative } from 'node:path';
|
|
3
|
+
import { EventEmitter } from 'node:events';
|
|
4
|
+
/**
|
|
5
|
+
* Debounce window in milliseconds.
|
|
6
|
+
* Rapid changes within this window are batched into a single event.
|
|
7
|
+
*/
|
|
8
|
+
const DEFAULT_DEBOUNCE_MS = 2_000;
|
|
9
|
+
/**
|
|
10
|
+
* Watches a project directory for file changes and emits debounced
|
|
11
|
+
* batches of changed file paths, respecting .gitignore and .coderag.yaml
|
|
12
|
+
* ignore patterns.
|
|
13
|
+
*
|
|
14
|
+
* Uses chokidar for cross-platform file watching with robust event handling.
|
|
15
|
+
*/
|
|
16
|
+
export class FileWatcher {
|
|
17
|
+
config;
|
|
18
|
+
debounceMs;
|
|
19
|
+
emitter;
|
|
20
|
+
watcher = null;
|
|
21
|
+
pendingChanges = new Set();
|
|
22
|
+
debounceTimer = null;
|
|
23
|
+
isRunning = false;
|
|
24
|
+
constructor(config) {
|
|
25
|
+
this.config = config;
|
|
26
|
+
this.debounceMs = config.debounceMs ?? DEFAULT_DEBOUNCE_MS;
|
|
27
|
+
this.emitter = new EventEmitter();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Register an event listener.
|
|
31
|
+
*/
|
|
32
|
+
on(event, listener) {
|
|
33
|
+
this.emitter.on(event, listener);
|
|
34
|
+
return this;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Remove an event listener.
|
|
38
|
+
*/
|
|
39
|
+
off(event, listener) {
|
|
40
|
+
this.emitter.off(event, listener);
|
|
41
|
+
return this;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Start watching the root directory for file changes.
|
|
45
|
+
* Resolves when the initial scan is complete and the watcher is ready.
|
|
46
|
+
*/
|
|
47
|
+
async start() {
|
|
48
|
+
if (this.isRunning) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
this.isRunning = true;
|
|
52
|
+
const watcher = watch(this.config.rootDir, {
|
|
53
|
+
persistent: true,
|
|
54
|
+
ignoreInitial: true,
|
|
55
|
+
awaitWriteFinish: {
|
|
56
|
+
stabilityThreshold: 300,
|
|
57
|
+
pollInterval: 100,
|
|
58
|
+
},
|
|
59
|
+
ignored: (filePath) => this.shouldIgnore(filePath),
|
|
60
|
+
});
|
|
61
|
+
this.watcher = watcher;
|
|
62
|
+
watcher.on('add', (filePath) => this.handleChange(filePath));
|
|
63
|
+
watcher.on('change', (filePath) => this.handleChange(filePath));
|
|
64
|
+
watcher.on('unlink', (filePath) => this.handleChange(filePath));
|
|
65
|
+
watcher.on('error', (error) => {
|
|
66
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
67
|
+
this.emitter.emit('error', err);
|
|
68
|
+
});
|
|
69
|
+
return new Promise((resolve) => {
|
|
70
|
+
watcher.on('ready', () => {
|
|
71
|
+
this.emitter.emit('ready');
|
|
72
|
+
resolve();
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Stop watching and clean up resources.
|
|
78
|
+
*/
|
|
79
|
+
async stop() {
|
|
80
|
+
if (!this.isRunning) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
this.isRunning = false;
|
|
84
|
+
if (this.debounceTimer !== null) {
|
|
85
|
+
clearTimeout(this.debounceTimer);
|
|
86
|
+
this.debounceTimer = null;
|
|
87
|
+
}
|
|
88
|
+
// Flush any pending changes before stopping
|
|
89
|
+
if (this.pendingChanges.size > 0) {
|
|
90
|
+
this.flushChanges();
|
|
91
|
+
}
|
|
92
|
+
if (this.watcher) {
|
|
93
|
+
await this.watcher.close();
|
|
94
|
+
this.watcher = null;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Check whether the watcher is currently running.
|
|
99
|
+
*/
|
|
100
|
+
getIsRunning() {
|
|
101
|
+
return this.isRunning;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get the number of pending (not yet flushed) changes.
|
|
105
|
+
*/
|
|
106
|
+
getPendingCount() {
|
|
107
|
+
return this.pendingChanges.size;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Determine whether a file path should be ignored.
|
|
111
|
+
* Converts absolute paths to relative paths for the ignore filter.
|
|
112
|
+
*/
|
|
113
|
+
shouldIgnore(filePath) {
|
|
114
|
+
const relativePath = relative(this.config.rootDir, filePath);
|
|
115
|
+
// Always ignore .git directory
|
|
116
|
+
if (relativePath.startsWith('.git/') || relativePath === '.git') {
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
return this.config.ignoreFilter(relativePath);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Handle a file change event by adding it to the pending set
|
|
123
|
+
* and resetting the debounce timer.
|
|
124
|
+
*/
|
|
125
|
+
handleChange(filePath) {
|
|
126
|
+
const relativePath = relative(this.config.rootDir, filePath);
|
|
127
|
+
this.pendingChanges.add(relativePath);
|
|
128
|
+
// Reset debounce timer
|
|
129
|
+
if (this.debounceTimer !== null) {
|
|
130
|
+
clearTimeout(this.debounceTimer);
|
|
131
|
+
}
|
|
132
|
+
this.debounceTimer = setTimeout(() => {
|
|
133
|
+
this.flushChanges();
|
|
134
|
+
}, this.debounceMs);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Emit all pending changes as a single batch and clear the pending set.
|
|
138
|
+
*/
|
|
139
|
+
flushChanges() {
|
|
140
|
+
if (this.pendingChanges.size === 0) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const changedPaths = [...this.pendingChanges];
|
|
144
|
+
this.pendingChanges = new Set();
|
|
145
|
+
this.debounceTimer = null;
|
|
146
|
+
this.emitter.emit('change', changedPaths);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { type Result } from 'neverthrow';
|
|
2
|
+
import type { GitClient } from '../git/git-client.js';
|
|
3
|
+
import { IndexState } from './index-state.js';
|
|
4
|
+
/**
|
|
5
|
+
* Configuration for the IncrementalIndexer.
|
|
6
|
+
*/
|
|
7
|
+
export interface IndexerConfig {
|
|
8
|
+
/** Root directory of the project to index. */
|
|
9
|
+
rootDir: string;
|
|
10
|
+
/** Maximum tokens per chunk (passed through to chunker). */
|
|
11
|
+
maxTokensPerChunk: number;
|
|
12
|
+
/** Maximum number of files to process concurrently. */
|
|
13
|
+
concurrency: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The set of file changes detected between the current filesystem state
|
|
17
|
+
* and the previously indexed state.
|
|
18
|
+
*/
|
|
19
|
+
export interface ChangeSet {
|
|
20
|
+
added: string[];
|
|
21
|
+
modified: string[];
|
|
22
|
+
deleted: string[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Summary of an indexing run.
|
|
26
|
+
*/
|
|
27
|
+
export interface IndexerResult {
|
|
28
|
+
added: string[];
|
|
29
|
+
modified: string[];
|
|
30
|
+
deleted: string[];
|
|
31
|
+
unchanged: string[];
|
|
32
|
+
totalChunks: number;
|
|
33
|
+
duration: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Error type for indexer operations.
|
|
37
|
+
*/
|
|
38
|
+
export declare class IndexerError extends Error {
|
|
39
|
+
constructor(message: string);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Orchestrates incremental re-indexing by detecting which files have changed
|
|
43
|
+
* since the last indexing run and processing only those files.
|
|
44
|
+
*
|
|
45
|
+
* Current scope: detect changes, scan files, compute hashes, and update state.
|
|
46
|
+
* Embedding and storage integration is planned for Sprint 2.
|
|
47
|
+
*/
|
|
48
|
+
export declare class IncrementalIndexer {
|
|
49
|
+
private readonly config;
|
|
50
|
+
private readonly gitClient;
|
|
51
|
+
private readonly state;
|
|
52
|
+
constructor(config: IndexerConfig, gitClient: GitClient, state: IndexState);
|
|
53
|
+
/**
|
|
54
|
+
* Detect which files have been added, modified, or deleted since the last
|
|
55
|
+
* indexing run by comparing the current filesystem state against IndexState.
|
|
56
|
+
*/
|
|
57
|
+
detectChanges(): Promise<Result<ChangeSet, IndexerError>>;
|
|
58
|
+
/**
|
|
59
|
+
* Process a set of changes: read file contents, compute hashes,
|
|
60
|
+
* generate placeholder chunk IDs, and update the index state.
|
|
61
|
+
*
|
|
62
|
+
* Note: actual parsing and chunking via TreeSitterParser + ASTChunker
|
|
63
|
+
* will be integrated in Sprint 2. For now, this tracks state and
|
|
64
|
+
* produces a simple per-file chunk placeholder.
|
|
65
|
+
*/
|
|
66
|
+
reindex(changes: ChangeSet): Promise<Result<IndexerResult, IndexerError>>;
|
|
67
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { ok, err } from 'neverthrow';
|
|
2
|
+
import { computeFileHash } from './index-state.js';
|
|
3
|
+
import { FileScanner } from './file-scanner.js';
|
|
4
|
+
/**
|
|
5
|
+
* Error type for indexer operations.
|
|
6
|
+
*/
|
|
7
|
+
export class IndexerError extends Error {
|
|
8
|
+
constructor(message) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.name = 'IndexerError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Orchestrates incremental re-indexing by detecting which files have changed
|
|
15
|
+
* since the last indexing run and processing only those files.
|
|
16
|
+
*
|
|
17
|
+
* Current scope: detect changes, scan files, compute hashes, and update state.
|
|
18
|
+
* Embedding and storage integration is planned for Sprint 2.
|
|
19
|
+
*/
|
|
20
|
+
export class IncrementalIndexer {
|
|
21
|
+
config;
|
|
22
|
+
gitClient;
|
|
23
|
+
state;
|
|
24
|
+
constructor(config, gitClient, state) {
|
|
25
|
+
this.config = config;
|
|
26
|
+
this.gitClient = gitClient;
|
|
27
|
+
this.state = state;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Detect which files have been added, modified, or deleted since the last
|
|
31
|
+
* indexing run by comparing the current filesystem state against IndexState.
|
|
32
|
+
*/
|
|
33
|
+
async detectChanges() {
|
|
34
|
+
try {
|
|
35
|
+
// Validate that root directory is a git repo
|
|
36
|
+
const repoCheck = await this.gitClient.isGitRepo(this.config.rootDir);
|
|
37
|
+
if (repoCheck.isErr()) {
|
|
38
|
+
return err(new IndexerError(`Git check failed: ${repoCheck.error.message}`));
|
|
39
|
+
}
|
|
40
|
+
const scanner = new FileScanner(this.config.rootDir, () => false);
|
|
41
|
+
const scanResult = await scanner.scanFiles();
|
|
42
|
+
if (scanResult.isErr()) {
|
|
43
|
+
return err(new IndexerError(`Scan failed: ${scanResult.error.message}`));
|
|
44
|
+
}
|
|
45
|
+
const scannedFiles = scanResult.value;
|
|
46
|
+
const currentFilePaths = new Set(scannedFiles.map((f) => f.filePath));
|
|
47
|
+
const previousFilePaths = new Set(this.state.getAllFiles());
|
|
48
|
+
const added = [];
|
|
49
|
+
const modified = [];
|
|
50
|
+
const deleted = [];
|
|
51
|
+
// Check scanned files against index state
|
|
52
|
+
for (const file of scannedFiles) {
|
|
53
|
+
if (!previousFilePaths.has(file.filePath)) {
|
|
54
|
+
added.push(file.filePath);
|
|
55
|
+
}
|
|
56
|
+
else if (this.state.isDirty(file.filePath, file.contentHash)) {
|
|
57
|
+
modified.push(file.filePath);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Check for deleted files
|
|
61
|
+
for (const filePath of previousFilePaths) {
|
|
62
|
+
if (!currentFilePaths.has(filePath)) {
|
|
63
|
+
deleted.push(filePath);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return ok({ added, modified, deleted });
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
70
|
+
return err(new IndexerError(`Failed to detect changes: ${message}`));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Process a set of changes: read file contents, compute hashes,
|
|
75
|
+
* generate placeholder chunk IDs, and update the index state.
|
|
76
|
+
*
|
|
77
|
+
* Note: actual parsing and chunking via TreeSitterParser + ASTChunker
|
|
78
|
+
* will be integrated in Sprint 2. For now, this tracks state and
|
|
79
|
+
* produces a simple per-file chunk placeholder.
|
|
80
|
+
*/
|
|
81
|
+
async reindex(changes) {
|
|
82
|
+
const startTime = Date.now();
|
|
83
|
+
try {
|
|
84
|
+
const unchanged = this.state
|
|
85
|
+
.getAllFiles()
|
|
86
|
+
.filter((f) => !changes.added.includes(f) &&
|
|
87
|
+
!changes.modified.includes(f) &&
|
|
88
|
+
!changes.deleted.includes(f));
|
|
89
|
+
// Process added and modified files
|
|
90
|
+
const filesToProcess = [...changes.added, ...changes.modified];
|
|
91
|
+
let totalChunks = 0;
|
|
92
|
+
// Count existing chunks from unchanged files
|
|
93
|
+
for (const filePath of unchanged) {
|
|
94
|
+
const fileState = this.state.getFileState(filePath);
|
|
95
|
+
if (fileState) {
|
|
96
|
+
totalChunks += fileState.chunkIds.length;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Read and index changed files
|
|
100
|
+
const scanner = new FileScanner(this.config.rootDir, () => false);
|
|
101
|
+
const scanResult = await scanner.scanFiles();
|
|
102
|
+
if (scanResult.isErr()) {
|
|
103
|
+
return err(new IndexerError(`Scan failed during reindex: ${scanResult.error.message}`));
|
|
104
|
+
}
|
|
105
|
+
const scannedByPath = new Map(scanResult.value.map((f) => [f.filePath, f]));
|
|
106
|
+
for (const filePath of filesToProcess) {
|
|
107
|
+
const scanned = scannedByPath.get(filePath);
|
|
108
|
+
if (scanned === undefined) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
// Generate a placeholder chunk ID for this file.
|
|
112
|
+
// Full parsing + chunking integration will replace this in Sprint 2.
|
|
113
|
+
const chunkId = computeFileHash(`${filePath}:${scanned.contentHash}`);
|
|
114
|
+
const chunkIds = [chunkId];
|
|
115
|
+
this.state.setFileState(filePath, {
|
|
116
|
+
filePath,
|
|
117
|
+
contentHash: scanned.contentHash,
|
|
118
|
+
lastIndexedAt: new Date(),
|
|
119
|
+
chunkIds,
|
|
120
|
+
});
|
|
121
|
+
totalChunks += chunkIds.length;
|
|
122
|
+
}
|
|
123
|
+
// Remove deleted files from state
|
|
124
|
+
for (const filePath of changes.deleted) {
|
|
125
|
+
this.state.removeFile(filePath);
|
|
126
|
+
}
|
|
127
|
+
const duration = Date.now() - startTime;
|
|
128
|
+
return ok({
|
|
129
|
+
added: changes.added,
|
|
130
|
+
modified: changes.modified,
|
|
131
|
+
deleted: changes.deleted,
|
|
132
|
+
unchanged,
|
|
133
|
+
totalChunks,
|
|
134
|
+
duration,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
139
|
+
return err(new IndexerError(`Failed to reindex: ${message}`));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incremental-indexer.js","sourceRoot":"","sources":["../../src/indexer/incremental-indexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|