codesearch-mcp 0.3.0-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 +59 -6
- package/LICENSE +661 -21
- package/README.md +33 -17
- package/dist/app.js +13 -20
- 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/commands/EvalCommand.d.ts +7 -3
- package/dist/src/commands/EvalCommand.js +36 -158
- package/dist/src/commands/IndexCommand.d.ts +10 -4
- package/dist/src/commands/IndexCommand.js +52 -124
- package/dist/src/commands/McpCommand.d.ts +6 -3
- package/dist/src/commands/McpCommand.js +19 -14
- package/dist/src/commands/WebCommand.d.ts +9 -3
- package/dist/src/commands/WebCommand.js +17 -8
- 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-store.d.ts +0 -1
- package/dist/src/config-store.js +3 -4
- package/dist/src/config.d.ts +1 -1
- package/dist/src/config.js +1 -1
- package/dist/src/constants.d.ts +15 -0
- package/dist/src/constants.js +34 -6
- package/dist/src/container.d.ts +4 -2
- package/dist/src/container.js +7 -5
- package/dist/src/db/drizzle-types.d.ts +7 -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/declarations/DeclarationTree.d.ts +1 -1
- package/dist/src/eval-results.js +16 -2
- package/dist/src/eval-vector-index.d.ts +5 -0
- package/dist/src/eval-vector-index.js +60 -0
- package/dist/src/help.js +9 -1
- 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 +2 -1
- 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/IDatabase.d.ts +6 -2
- package/dist/src/interfaces/IDependencyGraph.d.ts +24 -0
- package/dist/src/interfaces/IDependencyGraph.js +2 -0
- 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/IMcpReadiness.d.ts +12 -0
- package/dist/src/interfaces/IMcpReadiness.js +2 -0
- package/dist/src/interfaces/IProjectCatalog.d.ts +13 -0
- package/dist/src/interfaces/IProjectCatalog.js +2 -0
- package/dist/src/interfaces/IProjectRoots.d.ts +3 -0
- package/dist/src/interfaces/IProjectRoots.js +2 -0
- package/dist/src/interfaces/IRetrievalEvaluator.d.ts +21 -2
- 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/project-scope.d.ts +1 -0
- package/dist/src/project-scope.js +5 -0
- package/dist/src/retrieval-eval.d.ts +2 -1
- package/dist/src/retrieval-eval.js +45 -2
- 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/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 +8 -44
- package/dist/src/services/AstParserService.js +19 -938
- package/dist/src/services/DatabaseService.d.ts +8 -10
- package/dist/src/services/DatabaseService.js +29 -86
- package/dist/src/services/IndexerService.d.ts +7 -10
- package/dist/src/services/IndexerService.js +36 -255
- package/dist/src/services/McpReadiness.d.ts +18 -0
- package/dist/src/services/McpReadiness.js +73 -0
- package/dist/src/services/McpServer.d.ts +32 -9
- package/dist/src/services/McpServer.js +78 -41
- package/dist/src/services/WebServerService.d.ts +4 -3
- package/dist/src/services/WebServerService.js +16 -8
- package/dist/src/setup.d.ts +16 -4
- package/dist/src/setup.js +115 -40
- package/dist/src/symbol-name.d.ts +1 -0
- package/dist/src/symbol-name.js +16 -12
- 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 +35 -28
- package/dist/src/tools/GetDependentsTool.d.ts +20 -8
- package/dist/src/tools/GetDependentsTool.js +47 -33
- 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 +69 -51
- package/dist/src/tools/format-helpers.d.ts +9 -3
- package/dist/src/tools/format-helpers.js +59 -14
- package/dist/src/tools/tool-args.d.ts +38 -0
- package/dist/src/tools/tool-args.js +95 -0
- 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 +4 -3
- package/dist/src/interfaces/ISearcher.d.ts +0 -46
- package/dist/src/services/SearcherService.d.ts +0 -235
- package/dist/src/services/SearcherService.js +0 -1118
- /package/dist/src/{interfaces/ISearcher.js → db/drizzle-types.js} +0 -0
|
@@ -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,27 +1,29 @@
|
|
|
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
|
-
await searcher.assertIndexMatches();
|
|
15
|
-
}
|
|
16
|
-
catch (err) {
|
|
17
|
-
startupError = err instanceof Error ? err : new Error(String(err));
|
|
18
|
-
logger.error('McpCommand: startup check failed', { err: startupError });
|
|
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);
|
|
19
19
|
}
|
|
20
20
|
try {
|
|
21
|
-
await mcp.start(
|
|
21
|
+
await this.mcp.start(check.ok ? undefined : check);
|
|
22
22
|
}
|
|
23
23
|
catch (err) {
|
|
24
|
-
logger.error('McpCommand: MCP server failed to start', { err });
|
|
24
|
+
this.logger.error('McpCommand: MCP server failed to start', { err });
|
|
25
|
+
writeStartupCause(err);
|
|
26
|
+
process.exitCode = 1;
|
|
25
27
|
return;
|
|
26
28
|
}
|
|
27
29
|
await new Promise(resolve => {
|
|
@@ -31,3 +33,6 @@ class McpCommand {
|
|
|
31
33
|
}
|
|
32
34
|
}
|
|
33
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,30 +4,39 @@ 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', { err });
|
|
29
|
+
this.logger.error('WebCommand: database connection failed', { err });
|
|
21
30
|
console.error(`Database connection failed: ${reason}`);
|
|
22
31
|
}
|
|
23
|
-
const server = new WebServerService_1.WebServer(
|
|
32
|
+
const server = new WebServerService_1.WebServer(this.catalog, this.dependencies, this.config, this.logger, this.embedder);
|
|
24
33
|
const host = '127.0.0.1';
|
|
25
34
|
try {
|
|
26
35
|
await server.start(this.port, host);
|
|
27
36
|
}
|
|
28
37
|
catch (err) {
|
|
29
38
|
const reason = err instanceof Error ? err.message : String(err);
|
|
30
|
-
logger.error('WebCommand: server failed to start', { err });
|
|
39
|
+
this.logger.error('WebCommand: server failed to start', { err });
|
|
31
40
|
console.error(`Failed to start web server on ${host}:${this.port}: ${reason}`);
|
|
32
41
|
return;
|
|
33
42
|
}
|
|
@@ -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;
|
|
@@ -0,0 +1,75 @@
|
|
|
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.gitCommit = gitCommit;
|
|
37
|
+
exports.hashContent = hashContent;
|
|
38
|
+
exports.buildResultMetadata = buildResultMetadata;
|
|
39
|
+
const crypto = __importStar(require("crypto"));
|
|
40
|
+
const child_process_1 = require("child_process");
|
|
41
|
+
function gitCommit(projectRoot) {
|
|
42
|
+
try {
|
|
43
|
+
return (0, child_process_1.execFileSync)('git', ['rev-parse', 'HEAD'], { cwd: projectRoot, encoding: 'utf-8' }).trim();
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return 'unknown';
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function hashContent(text) {
|
|
50
|
+
return crypto.createHash('sha256').update(text).digest('hex').slice(0, 16);
|
|
51
|
+
}
|
|
52
|
+
function buildResultMetadata(input) {
|
|
53
|
+
const { suitePath, rawContent, config, indexMeta, observed, vectorIndex, corpusRecords, liveCases, projectRoot } = input;
|
|
54
|
+
return {
|
|
55
|
+
suitePath,
|
|
56
|
+
suiteHash: hashContent(rawContent),
|
|
57
|
+
embeddingProvider: config.embedding.provider,
|
|
58
|
+
embeddingModel: config.embedding.model,
|
|
59
|
+
rerankerModel: config.reranker.enabled ? config.reranker.model : null,
|
|
60
|
+
indexMeta: indexMeta ? { provider: indexMeta.provider, model: indexMeta.model, dimensions: indexMeta.dimensions } : null,
|
|
61
|
+
gitCommit: gitCommit(projectRoot),
|
|
62
|
+
timestamp: new Date().toISOString(),
|
|
63
|
+
conditions: {
|
|
64
|
+
thresholds: observed.thresholds,
|
|
65
|
+
overfetch: config.reranker.overfetch,
|
|
66
|
+
candidateFloor: config.reranker.candidateFloor,
|
|
67
|
+
fetchLimit: observed.fetchLimit,
|
|
68
|
+
efSearch: observed.efSearch,
|
|
69
|
+
iterativeScan: observed.iterativeScan,
|
|
70
|
+
},
|
|
71
|
+
vectorIndex,
|
|
72
|
+
corpora: corpusRecords,
|
|
73
|
+
liveCases,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createIndexInspector = createIndexInspector;
|
|
4
|
+
function createIndexInspector(db, projectDirs) {
|
|
5
|
+
const knownFilesCache = new Map();
|
|
6
|
+
return {
|
|
7
|
+
async isFileIndexed(project, file) {
|
|
8
|
+
if (!knownFilesCache.has(project))
|
|
9
|
+
knownFilesCache.set(project, db.listKnownFiles(project));
|
|
10
|
+
const files = await knownFilesCache.get(project);
|
|
11
|
+
return files.includes(file);
|
|
12
|
+
},
|
|
13
|
+
async ownerPathsOfFile(project, file) {
|
|
14
|
+
const rows = await db.query(`SELECT DISTINCT "ownerPath" FROM code_chunk WHERE "serviceName" = $1 AND "filePath" = $2 AND "ownerPath" IS NOT NULL`, [project, file]);
|
|
15
|
+
return rows.map(r => r.ownerPath);
|
|
16
|
+
},
|
|
17
|
+
async projectDir(project) {
|
|
18
|
+
return projectDirs.get(project) ?? null;
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createStagedSearch = createStagedSearch;
|
|
4
|
+
const toHits = (rows) => rows.map(r => ({ filePath: r.filePath, ownerPath: r.ownerPath ?? null }));
|
|
5
|
+
function createStagedSearch(chunks) {
|
|
6
|
+
return async (query, limit, project, threshold) => {
|
|
7
|
+
const prepared = await chunks.prepareQuery(query);
|
|
8
|
+
const r = await chunks.searchChunksWithStages(prepared.query, limit, project, threshold, undefined, limit);
|
|
9
|
+
return {
|
|
10
|
+
pool: toHits(r.pool),
|
|
11
|
+
stages: r.stages.reranked
|
|
12
|
+
? { vector: toHits(r.stages.vector), reranked: toHits(r.stages.reranked) }
|
|
13
|
+
: { vector: toHits(r.stages.vector) },
|
|
14
|
+
rerankFailed: r.rerankFailed,
|
|
15
|
+
fetchLimit: r.fetchLimit,
|
|
16
|
+
indexParams: r.indexParams,
|
|
17
|
+
threshold: r.threshold,
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { EvalSuite, CorpusRef } from '../../interfaces/IRetrievalEvaluator';
|
|
2
|
+
export interface LoadedSuite {
|
|
3
|
+
suite: EvalSuite;
|
|
4
|
+
corpora: CorpusRef[];
|
|
5
|
+
rawContent: string;
|
|
6
|
+
label: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function loadSuite(projectRoot: string, suitePath: string): LoadedSuite;
|
|
@@ -0,0 +1,52 @@
|
|
|
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.loadSuite = loadSuite;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const retrieval_eval_1 = require("../../retrieval-eval");
|
|
40
|
+
function loadSuite(projectRoot, suitePath) {
|
|
41
|
+
const resolved = path.resolve(projectRoot, suitePath);
|
|
42
|
+
const stat = fs.statSync(resolved);
|
|
43
|
+
if (stat.isDirectory()) {
|
|
44
|
+
const files = fs.readdirSync(resolved).filter(f => f.endsWith('.json')).sort();
|
|
45
|
+
const parts = files.map(f => fs.readFileSync(path.join(resolved, f), 'utf-8'));
|
|
46
|
+
const suites = parts.map(text => (0, retrieval_eval_1.parseSuite)(JSON.parse(text)));
|
|
47
|
+
return { suite: (0, retrieval_eval_1.mergeSuites)(suites), corpora: (0, retrieval_eval_1.corporaOf)(suites), rawContent: parts.join('\n'), label: 'all' };
|
|
48
|
+
}
|
|
49
|
+
const text = fs.readFileSync(resolved, 'utf-8');
|
|
50
|
+
const suite = (0, retrieval_eval_1.parseSuite)(JSON.parse(text));
|
|
51
|
+
return { suite, corpora: (0, retrieval_eval_1.corporaOf)([suite]), rawContent: text, label: path.basename(resolved, '.json') };
|
|
52
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isBackendAvailable = isBackendAvailable;
|
|
4
|
+
const error_record_1 = require("../../error-record");
|
|
5
|
+
async function isBackendAvailable(db, embedder) {
|
|
6
|
+
try {
|
|
7
|
+
await db.query('SELECT 1');
|
|
8
|
+
await embedder.embed('probe', 'document');
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
catch (err) {
|
|
12
|
+
console.error(`Indexing backend unavailable: ${(0, error_record_1.rootCauseMessage)(err).replace(/\s*[\r\n]+\s*/g, ' ')}`);
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.prepareEmbedding = prepareEmbedding;
|
|
4
|
+
async function prepareEmbedding(embedder, indexer) {
|
|
5
|
+
try {
|
|
6
|
+
await embedder.ensureModelAvailable?.();
|
|
7
|
+
const meta = await indexer.prepareEmbeddingSchema();
|
|
8
|
+
console.log(`Embedding: ${meta.provider} / ${meta.model} (${meta.dimensions} dims)`);
|
|
9
|
+
}
|
|
10
|
+
catch (err) {
|
|
11
|
+
console.error(`\nEmbedding setup failed: ${err.message}`);
|
|
12
|
+
process.exitCode = 1;
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.printIndexSummary = printIndexSummary;
|
|
4
|
+
function printIndexSummary(allStats) {
|
|
5
|
+
const cols = { name: 30, num: 8 };
|
|
6
|
+
const line = '─'.repeat(cols.name + cols.num * 5 + 5);
|
|
7
|
+
console.log('\n=== Indexing Summary ===');
|
|
8
|
+
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));
|
|
9
|
+
console.log(line);
|
|
10
|
+
for (const s of allStats) {
|
|
11
|
+
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));
|
|
12
|
+
}
|
|
13
|
+
console.log(line);
|
|
14
|
+
const total = allStats.reduce((acc, s) => ({
|
|
15
|
+
indexed: acc.indexed + s.indexed,
|
|
16
|
+
skipped: acc.skipped + s.skipped,
|
|
17
|
+
failed: acc.failed + s.failed,
|
|
18
|
+
chunks: acc.chunks + s.chunks,
|
|
19
|
+
elapsedSec: acc.elapsedSec + s.elapsedSec,
|
|
20
|
+
}), { indexed: 0, skipped: 0, failed: 0, chunks: 0, elapsedSec: 0 });
|
|
21
|
+
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));
|
|
22
|
+
}
|