codesearch-mcp 0.2.3-alpha → 0.4.0-alpha
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/CHANGELOG.md +88 -5
- package/LICENSE +661 -21
- package/README.md +76 -40
- package/dist/app.js +17 -38
- package/dist/src/ast/CallExtractor.d.ts +8 -0
- package/dist/src/ast/CallExtractor.js +68 -0
- package/dist/src/ast/GraphqlNameExtractor.d.ts +22 -0
- package/dist/src/ast/GraphqlNameExtractor.js +240 -0
- package/dist/src/ast/ImportEdgeExtractor.d.ts +11 -0
- package/dist/src/ast/ImportEdgeExtractor.js +129 -0
- package/dist/src/ast/IndexedNodeResolver.d.ts +14 -0
- package/dist/src/ast/IndexedNodeResolver.js +217 -0
- package/dist/src/ast/MemberExtractor.d.ts +8 -0
- package/dist/src/ast/MemberExtractor.js +129 -0
- package/dist/src/ast/TopLevelSymbolExtractor.d.ts +5 -0
- package/dist/src/ast/TopLevelSymbolExtractor.js +86 -0
- package/dist/src/ast/graphql-grammar.d.ts +24 -0
- package/dist/src/ast/graphql-grammar.js +93 -0
- package/dist/src/ast/node-helpers.d.ts +11 -0
- package/dist/src/ast/node-helpers.js +55 -0
- package/dist/src/chunking/AstChunker.d.ts +12 -0
- package/dist/src/chunking/AstChunker.js +30 -0
- package/dist/src/chunking/CharacterChunkStrategy.d.ts +8 -0
- package/dist/src/chunking/CharacterChunkStrategy.js +15 -0
- package/dist/src/chunking/DeclarationChunkStrategy.d.ts +15 -0
- package/dist/src/chunking/DeclarationChunkStrategy.js +87 -0
- package/dist/src/chunking/FragmentMerger.d.ts +11 -0
- package/dist/src/chunking/FragmentMerger.js +61 -0
- package/dist/src/chunking/ImportOnlyFilter.d.ts +5 -0
- package/dist/src/chunking/ImportOnlyFilter.js +14 -0
- package/dist/src/chunking/LangchainTextSplitter.d.ts +21 -0
- package/dist/src/chunking/LangchainTextSplitter.js +133 -0
- package/dist/src/chunking/MinSizeSplitPolicy.d.ts +9 -0
- package/dist/src/chunking/MinSizeSplitPolicy.js +18 -0
- package/dist/src/chunking/RunPacker.d.ts +12 -0
- package/dist/src/chunking/RunPacker.js +84 -0
- package/dist/src/chunking/create-chunker.d.ts +3 -0
- package/dist/src/chunking/create-chunker.js +15 -0
- package/dist/src/chunking/interfaces.d.ts +27 -0
- package/dist/src/commands/ConfigCommand.js +1 -9
- package/dist/src/commands/EvalCommand.d.ts +10 -5
- package/dist/src/commands/EvalCommand.js +60 -149
- package/dist/src/commands/IndexCommand.d.ts +10 -4
- package/dist/src/commands/IndexCommand.js +52 -146
- package/dist/src/commands/McpCommand.d.ts +6 -3
- package/dist/src/commands/McpCommand.js +19 -20
- package/dist/src/commands/WebCommand.d.ts +9 -3
- package/dist/src/commands/WebCommand.js +17 -11
- package/dist/src/commands/eval/baseline-comparison.d.ts +6 -0
- package/dist/src/commands/eval/baseline-comparison.js +54 -0
- package/dist/src/commands/eval/eval-args.d.ts +6 -0
- package/dist/src/commands/eval/eval-args.js +71 -0
- package/dist/src/commands/eval/eval-corpora.d.ts +6 -0
- package/dist/src/commands/eval/eval-corpora.js +76 -0
- package/dist/src/commands/eval/eval-metadata.d.ts +17 -0
- package/dist/src/commands/eval/eval-metadata.js +75 -0
- package/dist/src/commands/eval/index-inspector.d.ts +3 -0
- package/dist/src/commands/eval/index-inspector.js +21 -0
- package/dist/src/commands/eval/staged-search.d.ts +3 -0
- package/dist/src/commands/eval/staged-search.js +20 -0
- package/dist/src/commands/eval/suite-loader.d.ts +8 -0
- package/dist/src/commands/eval/suite-loader.js +52 -0
- package/dist/src/commands/index/backend-probe.d.ts +2 -0
- package/dist/src/commands/index/backend-probe.js +15 -0
- package/dist/src/commands/index/embedding-setup.d.ts +3 -0
- package/dist/src/commands/index/embedding-setup.js +16 -0
- package/dist/src/commands/index/index-summary.d.ts +2 -0
- package/dist/src/commands/index/index-summary.js +22 -0
- package/dist/src/commands/index/legacy-ollama-guard.d.ts +3 -0
- package/dist/src/commands/index/legacy-ollama-guard.js +23 -0
- package/dist/src/commands/index/prune-step.d.ts +3 -0
- package/dist/src/commands/index/prune-step.js +22 -0
- package/dist/src/commands/index/scan-targets.d.ts +8 -0
- package/dist/src/commands/index/scan-targets.js +107 -0
- package/dist/src/config-error.d.ts +0 -4
- package/dist/src/config-error.js +0 -4
- package/dist/src/config-store.d.ts +1 -55
- package/dist/src/config-store.js +11 -73
- package/dist/src/config.d.ts +9 -18
- package/dist/src/config.js +36 -35
- package/dist/src/constants.d.ts +17 -28
- package/dist/src/constants.js +35 -29
- package/dist/src/container.d.ts +10 -2
- package/dist/src/container.js +19 -8
- package/dist/src/db/drizzle-types.d.ts +7 -0
- package/dist/src/db/drizzle-types.js +2 -0
- package/dist/src/db/index.d.ts +1 -0
- package/dist/src/db/schema-steps.d.ts +8 -0
- package/dist/src/db/schema-steps.js +105 -0
- package/dist/src/db/schema.d.ts +17 -0
- package/dist/src/db/schema.js +1 -6
- package/dist/src/declarations/DeclarationTree.d.ts +19 -0
- package/dist/src/declarations/DeclarationTree.js +66 -0
- package/dist/src/declarations/DeclarationTreeBuilder.d.ts +22 -0
- package/dist/src/declarations/DeclarationTreeBuilder.js +179 -0
- package/dist/src/declarations/SourceLines.d.ts +37 -0
- package/dist/src/declarations/SourceLines.js +415 -0
- package/dist/src/dependency-traversal.d.ts +0 -6
- package/dist/src/dependency-traversal.js +0 -6
- package/dist/src/enriched-prompt.d.ts +0 -6
- package/dist/src/enriched-prompt.js +0 -6
- package/dist/src/error-record.d.ts +12 -0
- package/dist/src/error-record.js +248 -0
- package/dist/src/eval-corpus.d.ts +16 -0
- package/dist/src/eval-corpus.js +169 -0
- package/dist/src/eval-results.d.ts +6 -3
- package/dist/src/eval-results.js +323 -26
- package/dist/src/eval-vector-index.d.ts +5 -0
- package/dist/src/eval-vector-index.js +60 -0
- package/dist/src/file-utils.d.ts +0 -5
- package/dist/src/file-utils.js +0 -5
- package/dist/src/graph.d.ts +0 -25
- package/dist/src/graph.js +0 -28
- package/dist/src/help.js +9 -1
- package/dist/src/hnsw-settings.d.ts +3 -0
- package/dist/src/hnsw-settings.js +24 -0
- package/dist/src/index-args.d.ts +13 -0
- package/dist/src/index-args.js +48 -0
- package/dist/src/indexing/AnalysisBatcher.d.ts +12 -0
- package/dist/src/indexing/AnalysisBatcher.js +28 -0
- package/dist/src/indexing/ChunkEmbedder.d.ts +24 -0
- package/dist/src/indexing/ChunkEmbedder.js +37 -0
- package/dist/src/indexing/ConsoleScanReporter.d.ts +10 -0
- package/dist/src/indexing/ConsoleScanReporter.js +73 -0
- package/dist/src/indexing/EmbeddingSchemaPreparer.d.ts +14 -0
- package/dist/src/indexing/EmbeddingSchemaPreparer.js +66 -0
- package/dist/src/indexing/FileIngestor.d.ts +22 -0
- package/dist/src/indexing/FileIngestor.js +116 -0
- package/dist/src/indexing/IndexStore.d.ts +24 -0
- package/dist/src/indexing/IndexStore.js +69 -0
- package/dist/src/indexing/StaleFilePruner.d.ts +8 -0
- package/dist/src/indexing/StaleFilePruner.js +55 -0
- package/dist/src/indexing/analysis-rows.d.ts +4 -0
- package/dist/src/indexing/analysis-rows.js +65 -0
- package/dist/src/indexing/project-notices.d.ts +2 -0
- package/dist/src/indexing/project-notices.js +63 -0
- package/dist/src/interfaces/IAstParser.d.ts +4 -40
- package/dist/src/interfaces/ICallGraph.d.ts +28 -0
- package/dist/src/interfaces/ICallGraph.js +2 -0
- package/dist/src/interfaces/IChunkSearch.d.ts +42 -0
- package/dist/src/interfaces/IChunkSearch.js +2 -0
- package/dist/src/interfaces/IChunker.d.ts +3 -12
- package/dist/src/interfaces/ICorpusInspector.d.ts +7 -0
- package/dist/src/interfaces/ICorpusInspector.js +2 -0
- package/dist/src/interfaces/IDatabase.d.ts +8 -24
- package/dist/src/interfaces/IDependencyGraph.d.ts +24 -0
- package/dist/src/interfaces/IDependencyGraph.js +2 -0
- package/dist/src/interfaces/IEmbedder.d.ts +0 -9
- package/dist/src/interfaces/IIndexIdentityGuard.d.ts +3 -0
- package/dist/src/interfaces/IIndexIdentityGuard.js +2 -0
- package/dist/src/interfaces/IIndexedNodeResolver.d.ts +10 -0
- package/dist/src/interfaces/IIndexedNodeResolver.js +2 -0
- package/dist/src/interfaces/ILogger.d.ts +1 -11
- package/dist/src/interfaces/IMcpReadiness.d.ts +12 -0
- package/dist/src/interfaces/IMcpReadiness.js +2 -0
- package/dist/src/interfaces/IMcpToolHandler.d.ts +0 -5
- package/dist/src/interfaces/IMonorepoResolver.d.ts +0 -22
- package/dist/src/interfaces/IProjectCatalog.d.ts +13 -0
- package/dist/src/interfaces/IProjectCatalog.js +2 -0
- package/dist/src/interfaces/IProjectDiscovery.d.ts +0 -17
- package/dist/src/interfaces/IProjectRoots.d.ts +3 -0
- package/dist/src/interfaces/IProjectRoots.js +2 -0
- package/dist/src/interfaces/IRetrievalEvaluator.d.ts +153 -12
- package/dist/src/interfaces/IScanReporter.d.ts +13 -0
- package/dist/src/interfaces/IScanReporter.js +2 -0
- package/dist/src/interfaces/ISymbolLookup.d.ts +49 -0
- package/dist/src/interfaces/ISymbolLookup.js +2 -0
- package/dist/src/interfaces/IToolPaths.d.ts +62 -0
- package/dist/src/interfaces/IToolPaths.js +2 -0
- package/dist/src/interfaces/IWorkspaceFiles.d.ts +28 -0
- package/dist/src/interfaces/IWorkspaceFiles.js +2 -0
- package/dist/src/interfaces/SymbolKind.d.ts +1 -0
- package/dist/src/interfaces/SymbolKind.js +2 -0
- package/dist/src/interfaces/index.d.ts +12 -1
- package/dist/src/interrupt.js +0 -2
- package/dist/src/owner-path.d.ts +9 -10
- package/dist/src/owner-path.js +11 -23
- package/dist/src/project-scope.d.ts +1 -12
- package/dist/src/project-scope.js +5 -12
- package/dist/src/project-selector.d.ts +0 -5
- package/dist/src/project-selector.js +0 -11
- package/dist/src/retrieval-eval.d.ts +15 -6
- package/dist/src/retrieval-eval.js +388 -59
- package/dist/src/search/CallGraph.d.ts +9 -0
- package/dist/src/search/CallGraph.js +84 -0
- package/dist/src/search/ChunkSearch.d.ts +23 -0
- package/dist/src/search/ChunkSearch.js +115 -0
- package/dist/src/search/DependencyGraph.d.ts +19 -0
- package/dist/src/search/DependencyGraph.js +180 -0
- package/dist/src/search/IndexIdentityGuard.d.ts +11 -0
- package/dist/src/search/IndexIdentityGuard.js +37 -0
- package/dist/src/search/ProjectCatalog.d.ts +11 -0
- package/dist/src/search/ProjectCatalog.js +38 -0
- package/dist/src/search/SymbolLookup.d.ts +24 -0
- package/dist/src/search/SymbolLookup.js +97 -0
- package/dist/src/search/chunks/CandidateFetcher.d.ts +19 -0
- package/dist/src/search/chunks/CandidateFetcher.js +40 -0
- package/dist/src/search/chunks/IterativeScanGate.d.ts +10 -0
- package/dist/src/search/chunks/IterativeScanGate.js +42 -0
- package/dist/src/search/chunks/RerankStage.d.ts +15 -0
- package/dist/src/search/chunks/RerankStage.js +42 -0
- package/dist/src/search/chunks/search-metrics.d.ts +18 -0
- package/dist/src/search/chunks/search-metrics.js +32 -0
- package/dist/src/search/chunks/search-plan.d.ts +18 -0
- package/dist/src/search/chunks/search-plan.js +19 -0
- package/dist/src/search/create-search-services.d.ts +26 -0
- package/dist/src/search/create-search-services.js +29 -0
- package/dist/src/search/index-paths.d.ts +1 -0
- package/dist/src/search/index-paths.js +5 -0
- package/dist/src/search/result-shaping.d.ts +4 -0
- package/dist/src/search/result-shaping.js +19 -0
- package/dist/src/search/symbol-sql.d.ts +13 -0
- package/dist/src/search/symbol-sql.js +66 -0
- package/dist/src/search/symbols/SymbolGrepFallback.d.ts +19 -0
- package/dist/src/search/symbols/SymbolGrepFallback.js +106 -0
- package/dist/src/search/symbols/SymbolIndexQuery.d.ts +14 -0
- package/dist/src/search/symbols/SymbolIndexQuery.js +52 -0
- package/dist/src/search/symbols/SymbolTextSearch.d.ts +13 -0
- package/dist/src/search/symbols/SymbolTextSearch.js +84 -0
- package/dist/src/search/symbols/TargetColumnGate.d.ts +7 -0
- package/dist/src/search/symbols/TargetColumnGate.js +23 -0
- package/dist/src/search/symbols/find-symbol-constants.d.ts +4 -0
- package/dist/src/search/symbols/find-symbol-constants.js +8 -0
- package/dist/src/search/symbols/grep-args.d.ts +3 -0
- package/dist/src/search/symbols/grep-args.js +7 -0
- package/dist/src/search/symbols/grep-patterns.d.ts +4 -0
- package/dist/src/search/symbols/grep-patterns.js +60 -0
- package/dist/src/services/AstParserService.d.ts +10 -106
- package/dist/src/services/AstParserService.js +37 -1068
- package/dist/src/services/DatabaseService.d.ts +10 -17
- package/dist/src/services/DatabaseService.js +71 -115
- package/dist/src/services/EmbedderFactory.d.ts +0 -4
- package/dist/src/services/EmbedderFactory.js +0 -5
- package/dist/src/services/IndexerService.d.ts +7 -26
- package/dist/src/services/IndexerService.js +38 -286
- package/dist/src/services/InfinityEmbedder.d.ts +0 -21
- package/dist/src/services/InfinityEmbedder.js +0 -15
- package/dist/src/services/LoggerService.d.ts +7 -5
- package/dist/src/services/LoggerService.js +37 -41
- package/dist/src/services/McpReadiness.d.ts +18 -0
- package/dist/src/services/McpReadiness.js +73 -0
- package/dist/src/services/McpServer.d.ts +50 -19
- package/dist/src/services/McpServer.js +132 -62
- package/dist/src/services/MonorepoAwareDiscoveryService.d.ts +1 -45
- package/dist/src/services/MonorepoAwareDiscoveryService.js +1 -51
- package/dist/src/services/NxMonorepoResolver.d.ts +0 -29
- package/dist/src/services/NxMonorepoResolver.js +5 -56
- package/dist/src/services/OpenAICompatibleEmbedder.d.ts +0 -6
- package/dist/src/services/OpenAICompatibleEmbedder.js +0 -14
- package/dist/src/services/ProjectDiscoveryService.d.ts +0 -4
- package/dist/src/services/ProjectDiscoveryService.js +0 -4
- package/dist/src/services/VoyageEmbedder.d.ts +0 -6
- package/dist/src/services/VoyageEmbedder.js +0 -6
- package/dist/src/services/WebServerService.d.ts +5 -56
- package/dist/src/services/WebServerService.js +25 -63
- package/dist/src/services/http-retry.d.ts +0 -7
- package/dist/src/services/http-retry.js +1 -10
- package/dist/src/services/infinity-provisioning.d.ts +0 -74
- package/dist/src/services/infinity-provisioning.js +5 -88
- package/dist/src/services/legacy-ollama-index.d.ts +0 -16
- package/dist/src/services/legacy-ollama-index.js +0 -23
- package/dist/src/services/reranker.d.ts +0 -9
- package/dist/src/services/reranker.js +46 -12
- package/dist/src/setup.d.ts +24 -24
- package/dist/src/setup.js +205 -103
- package/dist/src/symbol-name.d.ts +1 -12
- package/dist/src/symbol-name.js +16 -25
- package/dist/src/symbol-rows.d.ts +0 -14
- package/dist/src/symbol-rows.js +0 -14
- package/dist/src/tool-call-log.d.ts +2 -0
- package/dist/src/tool-call-log.js +24 -0
- package/dist/src/tools/FindSymbolTool.d.ts +17 -7
- package/dist/src/tools/FindSymbolTool.js +54 -35
- package/dist/src/tools/GetCallersTool.d.ts +16 -8
- package/dist/src/tools/GetCallersTool.js +65 -35
- package/dist/src/tools/GetDependenciesTool.d.ts +16 -8
- package/dist/src/tools/GetDependenciesTool.js +36 -29
- package/dist/src/tools/GetDependentsTool.d.ts +20 -8
- package/dist/src/tools/GetDependentsTool.js +48 -34
- package/dist/src/tools/ListFilesTool.d.ts +16 -8
- package/dist/src/tools/ListFilesTool.js +20 -26
- package/dist/src/tools/ListProjectsTool.d.ts +11 -7
- package/dist/src/tools/ListProjectsTool.js +13 -11
- package/dist/src/tools/McpTool.d.ts +17 -0
- package/dist/src/tools/McpTool.js +28 -0
- package/dist/src/tools/ReadFileRangeTool.d.ts +16 -8
- package/dist/src/tools/ReadFileRangeTool.js +23 -25
- package/dist/src/tools/ReadFileTool.d.ts +15 -8
- package/dist/src/tools/ReadFileTool.js +19 -24
- package/dist/src/tools/SearchCodebaseTool.d.ts +22 -10
- package/dist/src/tools/SearchCodebaseTool.js +71 -50
- package/dist/src/tools/format-helpers.d.ts +9 -9
- package/dist/src/tools/format-helpers.js +146 -28
- package/dist/src/tools/tool-args.d.ts +38 -0
- package/dist/src/tools/tool-args.js +95 -0
- package/dist/src/web/dashboard.d.ts +0 -8
- package/dist/src/web/dashboard.js +7 -10
- package/dist/src/workspace/GrepRunner.d.ts +15 -0
- package/dist/src/workspace/GrepRunner.js +104 -0
- package/dist/src/workspace/ProjectRoots.d.ts +22 -0
- package/dist/src/workspace/ProjectRoots.js +102 -0
- package/dist/src/workspace/ToolPaths.d.ts +31 -0
- package/dist/src/workspace/ToolPaths.js +312 -0
- package/dist/src/workspace/WorkspaceFiles.d.ts +19 -0
- package/dist/src/workspace/WorkspaceFiles.js +285 -0
- package/dist/src/workspace/fs-access.d.ts +9 -0
- package/dist/src/workspace/fs-access.js +47 -0
- package/dist/src/workspace/path-helpers.d.ts +3 -0
- package/dist/src/workspace/path-helpers.js +43 -0
- package/package.json +5 -4
- package/dist/src/interfaces/ISearcher.d.ts +0 -35
- package/dist/src/services/AstChunker.d.ts +0 -42
- package/dist/src/services/AstChunker.js +0 -158
- package/dist/src/services/SearcherService.d.ts +0 -342
- package/dist/src/services/SearcherService.js +0 -1199
- package/docs/web-dashboard.md +0 -206
- /package/dist/src/{interfaces/ISearcher.js → chunking/interfaces.js} +0 -0
|
@@ -1,9 +1,15 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { IndexerService } from '../services/IndexerService';
|
|
2
|
+
import type { Config } from '../config';
|
|
3
|
+
import type { IDatabase, IDependencyGraph, IEmbedder, IProjectDiscovery } from '../interfaces';
|
|
2
4
|
import type { ICommand } from './ICommand';
|
|
3
5
|
export declare class IndexCommand implements ICommand {
|
|
4
|
-
private
|
|
6
|
+
private db;
|
|
7
|
+
private embedder;
|
|
8
|
+
private indexer;
|
|
9
|
+
private dependencies;
|
|
10
|
+
private discovery;
|
|
11
|
+
private config;
|
|
5
12
|
private argv1;
|
|
6
|
-
constructor(
|
|
13
|
+
constructor(db: IDatabase, embedder: IEmbedder, indexer: IndexerService, dependencies: IDependencyGraph, discovery: IProjectDiscovery, config: Config, argv1: string);
|
|
7
14
|
execute(): Promise<void>;
|
|
8
|
-
private printSummary;
|
|
9
15
|
}
|
|
@@ -5,186 +5,92 @@ const interrupt_1 = require("../interrupt");
|
|
|
5
5
|
const project_selector_1 = require("../project-selector");
|
|
6
6
|
const graph_1 = require("../graph");
|
|
7
7
|
const MonorepoAwareDiscoveryService_1 = require("../services/MonorepoAwareDiscoveryService");
|
|
8
|
-
const project_scope_1 = require("../project-scope");
|
|
9
8
|
const file_utils_1 = require("../file-utils");
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
return next !== undefined && !next.startsWith('-') ? { present: true, name: next } : { present: true };
|
|
18
|
-
}
|
|
9
|
+
const index_args_1 = require("../index-args");
|
|
10
|
+
const scan_targets_1 = require("./index/scan-targets");
|
|
11
|
+
const legacy_ollama_guard_1 = require("./index/legacy-ollama-guard");
|
|
12
|
+
const embedding_setup_1 = require("./index/embedding-setup");
|
|
13
|
+
const prune_step_1 = require("./index/prune-step");
|
|
14
|
+
const backend_probe_1 = require("./index/backend-probe");
|
|
15
|
+
const index_summary_1 = require("./index/index-summary");
|
|
19
16
|
class IndexCommand {
|
|
20
|
-
|
|
17
|
+
db;
|
|
18
|
+
embedder;
|
|
19
|
+
indexer;
|
|
20
|
+
dependencies;
|
|
21
|
+
discovery;
|
|
22
|
+
config;
|
|
21
23
|
argv1;
|
|
22
|
-
constructor(
|
|
23
|
-
this.
|
|
24
|
+
constructor(db, embedder, indexer, dependencies, discovery, config, argv1) {
|
|
25
|
+
this.db = db;
|
|
26
|
+
this.embedder = embedder;
|
|
27
|
+
this.indexer = indexer;
|
|
28
|
+
this.dependencies = dependencies;
|
|
29
|
+
this.discovery = discovery;
|
|
30
|
+
this.config = config;
|
|
24
31
|
this.argv1 = argv1;
|
|
25
32
|
}
|
|
26
33
|
async execute() {
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
discovered = discovery.discover(config.workspaceRoot);
|
|
35
|
-
}
|
|
36
|
-
catch (err) {
|
|
37
|
-
console.error(`\n${err.message}`);
|
|
38
|
-
process.exitCode = 1;
|
|
34
|
+
const args = (0, index_args_1.parseIndexArgs)(process.argv.slice(this.argv1 === 'rag-index' ? 2 : 3));
|
|
35
|
+
const { force, forceSelect } = args;
|
|
36
|
+
const targets = await (0, scan_targets_1.resolveScanTargets)(this.discovery, this.config, args);
|
|
37
|
+
if (!targets)
|
|
38
|
+
return;
|
|
39
|
+
await this.db.initDbWithSchema();
|
|
40
|
+
if (!force && await (0, legacy_ollama_guard_1.refusesLegacyOllamaIndex)(this.db, this.config))
|
|
39
41
|
return;
|
|
40
|
-
}
|
|
41
|
-
// Resolve --project before any database or embedding work, so a bad name
|
|
42
|
-
// (or a cancelled no-name prompt) has zero side effects.
|
|
43
|
-
let scanTargets;
|
|
44
|
-
if (projectFlag.present) {
|
|
45
|
-
let name = projectFlag.name;
|
|
46
|
-
if (name === undefined) {
|
|
47
|
-
if (discovered.length === 0) {
|
|
48
|
-
console.error('\nNo projects available to select.');
|
|
49
|
-
process.exitCode = 1;
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
name = await (0, project_selector_1.selectSingleProject)(discovered);
|
|
53
|
-
if (name === undefined) {
|
|
54
|
-
process.exitCode = 1;
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
const { targets, notFound } = (0, project_scope_1.resolveProjectNames)([name], discovered);
|
|
59
|
-
if (notFound.length > 0) {
|
|
60
|
-
const available = (0, project_scope_1.listAvailableNames)(discovered).join(', ');
|
|
61
|
-
console.error(`\nProject '${notFound[0]}' not found. Available projects: ${available}`);
|
|
62
|
-
process.exitCode = 1;
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
scanTargets = targets;
|
|
66
|
-
}
|
|
67
|
-
await db.initDbWithSchema();
|
|
68
|
-
// A former Ollama installation the config layer cannot recognise (old
|
|
69
|
-
// defaults, no `embedding`/`ollama` block) is protected here: without an
|
|
70
|
-
// explicit `--reindex`, refuse to touch an index built by `ollama` (or a
|
|
71
|
-
// pre-`index_meta` install, which is indistinguishable from one) before
|
|
72
|
-
// any backend readiness check, Docker command, or schema work.
|
|
73
|
-
if (!force) {
|
|
74
|
-
let identity;
|
|
75
|
-
try {
|
|
76
|
-
identity = await (0, legacy_ollama_index_1.resolveIndexedIdentity)(db);
|
|
77
|
-
}
|
|
78
|
-
catch (err) {
|
|
79
|
-
console.error(`\n${err.message}`);
|
|
80
|
-
process.exitCode = 1;
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
if (identity?.provider === 'ollama') {
|
|
84
|
-
console.error(`\nThe existing index was built with ${identity.provider}/${identity.model}, but "ollama" is no ` +
|
|
85
|
-
`longer a supported embedding provider (configured: ${config.embedding.provider}/${config.embedding.model}). ` +
|
|
86
|
-
`Run \`rag-index --reindex\` to confirm rebuilding the index under the configured provider.`);
|
|
87
|
-
process.exitCode = 1;
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
42
|
let projects;
|
|
92
|
-
if (scanTargets) {
|
|
93
|
-
projects = scanTargets;
|
|
43
|
+
if (targets.scanTargets) {
|
|
44
|
+
projects = targets.scanTargets;
|
|
94
45
|
}
|
|
95
46
|
else {
|
|
96
|
-
const selected = await new project_selector_1.ProjectSelector(config.workspaceRoot).select(discovered, forceSelect);
|
|
47
|
+
const selected = await new project_selector_1.ProjectSelector(this.config.workspaceRoot).select(targets.discovered, forceSelect);
|
|
97
48
|
if (selected.length === 0)
|
|
98
49
|
return;
|
|
99
|
-
// Expand any selected nested-monorepo unit (e.g. an Nx repo) into its
|
|
100
|
-
// sub-projects; ordinary projects pass through unchanged.
|
|
101
50
|
projects = (0, MonorepoAwareDiscoveryService_1.toLeafProjects)(selected);
|
|
102
51
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
const fullLeafProjects = (0, MonorepoAwareDiscoveryService_1.toLeafProjects)(discovered);
|
|
106
|
-
// Ensure the local model is served (Infinity only — no-op for cloud), then
|
|
107
|
-
// resolve the active embedding dimension and reconcile it with index_meta
|
|
108
|
-
// (recreate code_chunk on a dimension change, clear rows on a model change)
|
|
109
|
-
// before scanning. A clear error here beats a mid-run vector width mismatch.
|
|
110
|
-
try {
|
|
111
|
-
await embedder.ensureModelAvailable?.();
|
|
112
|
-
const meta = await indexer.prepareEmbeddingSchema();
|
|
113
|
-
console.log(`Embedding: ${meta.provider} / ${meta.model} (${meta.dimensions} dims)`);
|
|
114
|
-
}
|
|
115
|
-
catch (err) {
|
|
116
|
-
console.error(`\nEmbedding setup failed: ${err.message}`);
|
|
117
|
-
process.exitCode = 1;
|
|
52
|
+
const fullLeafProjects = (0, MonorepoAwareDiscoveryService_1.toLeafProjects)(targets.discovered);
|
|
53
|
+
if (!await (0, embedding_setup_1.prepareEmbedding)(this.embedder, this.indexer))
|
|
118
54
|
return;
|
|
119
|
-
}
|
|
120
55
|
const controller = new AbortController();
|
|
121
56
|
const teardown = (0, interrupt_1.setupInterrupt)(controller);
|
|
122
57
|
try {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
if (!scanTargets) {
|
|
126
|
-
let pruneResult;
|
|
127
|
-
try {
|
|
128
|
-
pruneResult = await indexer.pruneProjects(projects.map(p => p.name));
|
|
129
|
-
}
|
|
130
|
-
catch (err) {
|
|
131
|
-
console.error(`\nPruning failed: ${err.message}`);
|
|
132
|
-
process.exitCode = 1;
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
const { removed, failed } = pruneResult;
|
|
136
|
-
for (const name of removed) {
|
|
137
|
-
console.log(`Removed project ${name} (not selected)`);
|
|
138
|
-
}
|
|
139
|
-
if (failed.length > 0) {
|
|
140
|
-
process.exitCode = 1;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
58
|
+
if (!targets.scanTargets && !await (0, prune_step_1.pruneUnselected)(this.indexer, projects))
|
|
59
|
+
return;
|
|
143
60
|
const filesPerProject = projects.map(p => (0, file_utils_1.collectFiles)(p.path, (0, file_utils_1.loadIgnore)(p.path), p.path));
|
|
144
61
|
const totalFiles = filesPerProject.reduce((sum, f) => sum + f.length, 0);
|
|
145
62
|
console.log(`\n${projects.length} projects — ${totalFiles} files total`);
|
|
146
63
|
if (force)
|
|
147
64
|
console.log('Reindex mode: all files will be re-indexed.');
|
|
148
|
-
const allStats = await indexer.scanProjects(projects, force, controller.signal, filesPerProject);
|
|
149
|
-
|
|
65
|
+
const allStats = await this.indexer.scanProjects(projects, force, controller.signal, filesPerProject);
|
|
66
|
+
const interrupted = controller.signal.aborted;
|
|
67
|
+
if (interrupted)
|
|
150
68
|
console.log('\nIndexing interrupted.');
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
69
|
+
(0, index_summary_1.printIndexSummary)(allStats);
|
|
70
|
+
const sum = (field) => allStats.reduce((total, s) => total + s[field], 0);
|
|
71
|
+
const failed = sum('failed');
|
|
72
|
+
const total = failed + sum('indexed') + sum('skipped');
|
|
73
|
+
if (failed > 0) {
|
|
74
|
+
console.error(`Indexing finished with ${failed} of ${total} file(s) failed.`);
|
|
75
|
+
}
|
|
76
|
+
if (!interrupted) {
|
|
156
77
|
try {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
(0, graph_1.generateProjectGraph)(fullLeafProjects, projectEdges, config.workspaceRoot);
|
|
78
|
+
const projectEdges = await this.dependencies.getProjectEdges();
|
|
79
|
+
(0, graph_1.generateProjectGraph)(fullLeafProjects, projectEdges, this.config.workspaceRoot);
|
|
160
80
|
}
|
|
161
81
|
catch (err) {
|
|
162
82
|
console.error(` ⚠ Could not build project graph: ${err.message}`);
|
|
163
83
|
}
|
|
164
84
|
}
|
|
85
|
+
if (failed > 0) {
|
|
86
|
+
const nothingUsable = sum('skipped') === 0 && sum('chunks') === 0;
|
|
87
|
+
const alreadyFailed = interrupted || !!process.exitCode || nothingUsable;
|
|
88
|
+
process.exitCode = alreadyFailed || !(await (0, backend_probe_1.isBackendAvailable)(this.db, this.embedder)) ? 1 : 2;
|
|
89
|
+
}
|
|
165
90
|
}
|
|
166
91
|
finally {
|
|
167
92
|
teardown();
|
|
168
93
|
}
|
|
169
94
|
}
|
|
170
|
-
printSummary(allStats) {
|
|
171
|
-
const cols = { name: 30, num: 8 };
|
|
172
|
-
const line = '─'.repeat(cols.name + cols.num * 5 + 5);
|
|
173
|
-
console.log('\n=== Indexing Summary ===');
|
|
174
|
-
console.log('Service'.padEnd(cols.name), 'Indexed'.padStart(cols.num), 'Skipped'.padStart(cols.num), 'Failed'.padStart(cols.num), 'Chunks'.padStart(cols.num), 'Time(s)'.padStart(cols.num));
|
|
175
|
-
console.log(line);
|
|
176
|
-
for (const s of allStats) {
|
|
177
|
-
console.log(s.serviceName.padEnd(cols.name), String(s.indexed).padStart(cols.num), String(s.skipped).padStart(cols.num), String(s.failed).padStart(cols.num), String(s.chunks).padStart(cols.num), String(s.elapsedSec).padStart(cols.num));
|
|
178
|
-
}
|
|
179
|
-
console.log(line);
|
|
180
|
-
const total = allStats.reduce((acc, s) => ({
|
|
181
|
-
indexed: acc.indexed + s.indexed,
|
|
182
|
-
skipped: acc.skipped + s.skipped,
|
|
183
|
-
failed: acc.failed + s.failed,
|
|
184
|
-
chunks: acc.chunks + s.chunks,
|
|
185
|
-
elapsedSec: acc.elapsedSec + s.elapsedSec,
|
|
186
|
-
}), { indexed: 0, skipped: 0, failed: 0, chunks: 0, elapsedSec: 0 });
|
|
187
|
-
console.log('TOTAL'.padEnd(cols.name), String(total.indexed).padStart(cols.num), String(total.skipped).padStart(cols.num), String(total.failed).padStart(cols.num), String(total.chunks).padStart(cols.num), String(total.elapsedSec.toFixed(1)).padStart(cols.num));
|
|
188
|
-
}
|
|
189
95
|
}
|
|
190
96
|
exports.IndexCommand = IndexCommand;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import type { Container } from '../container';
|
|
2
1
|
import type { ICommand } from './ICommand';
|
|
2
|
+
import type { IMcpReadiness, ILogger } from '../interfaces';
|
|
3
|
+
import type { McpServer } from '../services/McpServer';
|
|
3
4
|
export declare class McpCommand implements ICommand {
|
|
4
|
-
private
|
|
5
|
-
|
|
5
|
+
private readiness;
|
|
6
|
+
private mcp;
|
|
7
|
+
private logger;
|
|
8
|
+
constructor(readiness: IMcpReadiness, mcp: McpServer, logger: ILogger);
|
|
6
9
|
execute(): Promise<void>;
|
|
7
10
|
}
|
|
@@ -1,35 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.McpCommand = void 0;
|
|
4
|
+
const error_record_1 = require("../error-record");
|
|
4
5
|
class McpCommand {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
readiness;
|
|
7
|
+
mcp;
|
|
8
|
+
logger;
|
|
9
|
+
constructor(readiness, mcp, logger) {
|
|
10
|
+
this.readiness = readiness;
|
|
11
|
+
this.mcp = mcp;
|
|
12
|
+
this.logger = logger;
|
|
8
13
|
}
|
|
9
14
|
async execute() {
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
// Refuse to serve searches embedded into a foreign vector space — surface
|
|
15
|
-
// the mismatch through the existing startup-error plumbing so every tool
|
|
16
|
-
// call reports it clearly.
|
|
17
|
-
await searcher.assertIndexMatches();
|
|
18
|
-
}
|
|
19
|
-
catch (err) {
|
|
20
|
-
startupError = err instanceof Error ? err : new Error(String(err));
|
|
21
|
-
logger.error('McpCommand: startup check failed', { reason: startupError.message });
|
|
15
|
+
const check = await this.readiness.start();
|
|
16
|
+
if (!check.ok) {
|
|
17
|
+
this.logger.error('McpCommand: startup check failed', { err: check.err });
|
|
18
|
+
writeStartupCause(check.err);
|
|
22
19
|
}
|
|
23
20
|
try {
|
|
24
|
-
await mcp.start(
|
|
21
|
+
await this.mcp.start(check.ok ? undefined : check);
|
|
25
22
|
}
|
|
26
23
|
catch (err) {
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
this.logger.error('McpCommand: MCP server failed to start', { err });
|
|
25
|
+
writeStartupCause(err);
|
|
26
|
+
process.exitCode = 1;
|
|
29
27
|
return;
|
|
30
28
|
}
|
|
31
|
-
// server.connect() resolves immediately after setup; keep the process alive
|
|
32
|
-
// until the MCP client disconnects (stdin closes)
|
|
33
29
|
await new Promise(resolve => {
|
|
34
30
|
process.stdin.once('close', resolve);
|
|
35
31
|
process.stdin.once('end', resolve);
|
|
@@ -37,3 +33,6 @@ class McpCommand {
|
|
|
37
33
|
}
|
|
38
34
|
}
|
|
39
35
|
exports.McpCommand = McpCommand;
|
|
36
|
+
function writeStartupCause(err) {
|
|
37
|
+
process.stderr.write(`codesearch-mcp: ${(0, error_record_1.errorMessage)(err)}\n`);
|
|
38
|
+
}
|
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
import type { Container } from '../container';
|
|
2
1
|
import type { ICommand } from './ICommand';
|
|
2
|
+
import type { Config } from '../config';
|
|
3
|
+
import type { IDatabase, IDependencyGraph, IEmbedder, ILogger, IProjectCatalog } from '../interfaces';
|
|
3
4
|
export declare class WebCommand implements ICommand {
|
|
4
|
-
private
|
|
5
|
+
private db;
|
|
6
|
+
private embedder;
|
|
7
|
+
private catalog;
|
|
8
|
+
private dependencies;
|
|
9
|
+
private config;
|
|
10
|
+
private logger;
|
|
5
11
|
private readonly port;
|
|
6
|
-
constructor(
|
|
12
|
+
constructor(db: IDatabase, embedder: IEmbedder, catalog: IProjectCatalog, dependencies: IDependencyGraph, config: Config, logger: ILogger, args?: string[]);
|
|
7
13
|
execute(): Promise<void>;
|
|
8
14
|
}
|
|
@@ -4,37 +4,43 @@ exports.WebCommand = void 0;
|
|
|
4
4
|
const WebServerService_1 = require("../services/WebServerService");
|
|
5
5
|
const DEFAULT_PORT = 4319;
|
|
6
6
|
class WebCommand {
|
|
7
|
-
|
|
7
|
+
db;
|
|
8
|
+
embedder;
|
|
9
|
+
catalog;
|
|
10
|
+
dependencies;
|
|
11
|
+
config;
|
|
12
|
+
logger;
|
|
8
13
|
port;
|
|
9
|
-
constructor(
|
|
10
|
-
this.
|
|
14
|
+
constructor(db, embedder, catalog, dependencies, config, logger, args = []) {
|
|
15
|
+
this.db = db;
|
|
16
|
+
this.embedder = embedder;
|
|
17
|
+
this.catalog = catalog;
|
|
18
|
+
this.dependencies = dependencies;
|
|
19
|
+
this.config = config;
|
|
20
|
+
this.logger = logger;
|
|
11
21
|
this.port = parsePort(args) ?? DEFAULT_PORT;
|
|
12
22
|
}
|
|
13
23
|
async execute() {
|
|
14
|
-
const { db, searcher, config, logger, embedder } = this.container;
|
|
15
24
|
try {
|
|
16
|
-
await db.initDb();
|
|
25
|
+
await this.db.initDb();
|
|
17
26
|
}
|
|
18
27
|
catch (err) {
|
|
19
28
|
const reason = err instanceof Error ? err.message : String(err);
|
|
20
|
-
logger.error('WebCommand: database connection failed', {
|
|
29
|
+
this.logger.error('WebCommand: database connection failed', { err });
|
|
21
30
|
console.error(`Database connection failed: ${reason}`);
|
|
22
|
-
// Continue: config editing still works; project/graph tabs will error in-page.
|
|
23
31
|
}
|
|
24
|
-
const server = new WebServerService_1.WebServer(
|
|
32
|
+
const server = new WebServerService_1.WebServer(this.catalog, this.dependencies, this.config, this.logger, this.embedder);
|
|
25
33
|
const host = '127.0.0.1';
|
|
26
34
|
try {
|
|
27
35
|
await server.start(this.port, host);
|
|
28
36
|
}
|
|
29
37
|
catch (err) {
|
|
30
38
|
const reason = err instanceof Error ? err.message : String(err);
|
|
31
|
-
logger.error('WebCommand: server failed to start', {
|
|
39
|
+
this.logger.error('WebCommand: server failed to start', { err });
|
|
32
40
|
console.error(`Failed to start web server on ${host}:${this.port}: ${reason}`);
|
|
33
41
|
return;
|
|
34
42
|
}
|
|
35
43
|
console.log(`RAG dashboard: http://${host}:${this.port} (Ctrl+C to stop)`);
|
|
36
|
-
// Keep execute() pending until a shutdown signal, otherwise app.ts tears
|
|
37
|
-
// down the DB and exits immediately (mirrors McpCommand's keep-alive).
|
|
38
44
|
await new Promise(resolve => {
|
|
39
45
|
const shutdown = () => { void server.stop().then(resolve); };
|
|
40
46
|
process.once('SIGINT', shutdown);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { compare } from '../../retrieval-eval';
|
|
2
|
+
import type { EvalResultFile } from '../../interfaces/IRetrievalEvaluator';
|
|
3
|
+
export declare function compareWithBaseline(projectRoot: string, baselinePath: string, resultFile: EvalResultFile): {
|
|
4
|
+
baselinePath: string;
|
|
5
|
+
result: ReturnType<typeof compare>;
|
|
6
|
+
} | undefined;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.compareWithBaseline = compareWithBaseline;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const retrieval_eval_1 = require("../../retrieval-eval");
|
|
39
|
+
const eval_results_1 = require("../../eval-results");
|
|
40
|
+
function compareWithBaseline(projectRoot, baselinePath, resultFile) {
|
|
41
|
+
let comparison;
|
|
42
|
+
try {
|
|
43
|
+
const baseline = (0, eval_results_1.readResultFile)(path.resolve(projectRoot, baselinePath));
|
|
44
|
+
const cmp = (0, retrieval_eval_1.compare)(baseline, resultFile);
|
|
45
|
+
comparison = { baselinePath, result: cmp };
|
|
46
|
+
for (const line of (0, eval_results_1.renderComparison)(baselinePath, cmp))
|
|
47
|
+
console.log(line);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
console.error(`\nFailed to read baseline '${baselinePath}': ${err.message}`);
|
|
51
|
+
process.exitCode = 1;
|
|
52
|
+
}
|
|
53
|
+
return comparison;
|
|
54
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.parseEvalArgs = parseEvalArgs;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const DEFAULT_SUITE_DIR = path.join('benchmarks', 'eval');
|
|
39
|
+
function parseSuiteFlag(args) {
|
|
40
|
+
const i = args.indexOf('--suite');
|
|
41
|
+
if (i === -1)
|
|
42
|
+
return DEFAULT_SUITE_DIR;
|
|
43
|
+
const next = args[i + 1];
|
|
44
|
+
if (next === undefined || next.startsWith('-'))
|
|
45
|
+
throw new Error('--suite requires a path');
|
|
46
|
+
return next;
|
|
47
|
+
}
|
|
48
|
+
function parseBaselineFlag(args) {
|
|
49
|
+
const i = args.indexOf('--baseline');
|
|
50
|
+
if (i === -1)
|
|
51
|
+
return null;
|
|
52
|
+
const next = args[i + 1];
|
|
53
|
+
if (next === undefined || next.startsWith('-'))
|
|
54
|
+
throw new Error('--baseline requires a path');
|
|
55
|
+
return next;
|
|
56
|
+
}
|
|
57
|
+
function parseProjectFlag(args) {
|
|
58
|
+
const i = args.indexOf('--project');
|
|
59
|
+
if (i === -1)
|
|
60
|
+
return null;
|
|
61
|
+
const next = args[i + 1];
|
|
62
|
+
if (next === undefined || next.startsWith('-'))
|
|
63
|
+
throw new Error('--project requires a name');
|
|
64
|
+
return next;
|
|
65
|
+
}
|
|
66
|
+
function parseEvalArgs(args) {
|
|
67
|
+
const suitePath = parseSuiteFlag(args);
|
|
68
|
+
const baselinePath = parseBaselineFlag(args);
|
|
69
|
+
const projectFilter = parseProjectFlag(args);
|
|
70
|
+
return { suitePath, baselinePath, projectFilter };
|
|
71
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Config } from '../../config';
|
|
2
|
+
import type { IDatabase } from '../../interfaces';
|
|
3
|
+
import type { ICorpusInspector } from '../../interfaces/ICorpusInspector';
|
|
4
|
+
import type { CorpusRef, CorpusRecord } from '../../interfaces/IRetrievalEvaluator';
|
|
5
|
+
export declare function refusesMovedCorpus(runCorpora: CorpusRef[], config: Config, projectRoot: string, inspector: ICorpusInspector): Promise<boolean>;
|
|
6
|
+
export declare function recordCorpora(db: IDatabase, runCorpora: CorpusRef[], projectDirs: Map<string, string | null>): Promise<CorpusRecord[]>;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.refusesMovedCorpus = refusesMovedCorpus;
|
|
37
|
+
exports.recordCorpora = recordCorpora;
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const eval_corpus_1 = require("../../eval-corpus");
|
|
40
|
+
const retrieval_eval_1 = require("../../retrieval-eval");
|
|
41
|
+
const KEPT_CORPUS_DIR = path.join('benchmarks', 'corpus');
|
|
42
|
+
async function refusesMovedCorpus(runCorpora, config, projectRoot, inspector) {
|
|
43
|
+
let refused = false;
|
|
44
|
+
for (const corpus of runCorpora) {
|
|
45
|
+
let failures;
|
|
46
|
+
try {
|
|
47
|
+
failures = await (0, eval_corpus_1.checkCorpus)(corpus, path.join(config.workspaceRoot, corpus.root), path.join(projectRoot, KEPT_CORPUS_DIR, corpus.root), inspector);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
failures = [`cannot inspect the checkout: ${err.message}`];
|
|
51
|
+
}
|
|
52
|
+
if (failures.length === 0)
|
|
53
|
+
continue;
|
|
54
|
+
refused = true;
|
|
55
|
+
console.error(`\nCorpus ${corpus.root} does not match ${corpus.commit}:`);
|
|
56
|
+
for (const f of failures)
|
|
57
|
+
console.error(` - ${f}`);
|
|
58
|
+
}
|
|
59
|
+
if (refused) {
|
|
60
|
+
console.error('\nNo search was run and no result file was written.');
|
|
61
|
+
process.exitCode = 1;
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
async function recordCorpora(db, runCorpora, projectDirs) {
|
|
67
|
+
const corpusRecords = [];
|
|
68
|
+
for (const corpus of runCorpora) {
|
|
69
|
+
const projects = [...projectDirs].filter(([, dir]) => dir !== null && (0, retrieval_eval_1.isUnderRoot)(dir, corpus.root)).map(([name]) => name).sort();
|
|
70
|
+
const started = Date.now();
|
|
71
|
+
const record = { ...corpus, projects, ...(await (0, eval_corpus_1.fingerprintCorpus)(db, projects)) };
|
|
72
|
+
console.log(`Corpus ${corpus.root}: ${record.chunks} chunks in ${projects.length} project(s), fingerprint ${record.fingerprint} (${((Date.now() - started) / 1000).toFixed(1)}s)`);
|
|
73
|
+
corpusRecords.push(record);
|
|
74
|
+
}
|
|
75
|
+
return corpusRecords;
|
|
76
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Config } from '../../config';
|
|
2
|
+
import type { IndexMeta } from '../../interfaces/IDatabase';
|
|
3
|
+
import type { ResultMetadata, ObservedSearchParams, VectorIndexRecord, CorpusRecord } from '../../interfaces/IRetrievalEvaluator';
|
|
4
|
+
export declare function gitCommit(projectRoot: string): string;
|
|
5
|
+
export declare function hashContent(text: string): string;
|
|
6
|
+
export interface ResultMetadataInput {
|
|
7
|
+
suitePath: string;
|
|
8
|
+
rawContent: string;
|
|
9
|
+
config: Config;
|
|
10
|
+
indexMeta: IndexMeta | null;
|
|
11
|
+
observed: ObservedSearchParams;
|
|
12
|
+
vectorIndex: VectorIndexRecord;
|
|
13
|
+
corpusRecords: CorpusRecord[];
|
|
14
|
+
liveCases: number;
|
|
15
|
+
projectRoot: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function buildResultMetadata(input: ResultMetadataInput): ResultMetadata;
|