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
package/docs/web-dashboard.md
DELETED
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
# Web dashboard (`rag-web`)
|
|
2
|
-
|
|
3
|
-
A local web UI for configuring and inspecting the RAG server. It provides a
|
|
4
|
-
schema-driven config editor, an overview of indexed projects, and an interactive
|
|
5
|
-
project-dependency graph — all served from a small built-in HTTP server with no
|
|
6
|
-
external framework and no new dependencies (`node:http`).
|
|
7
|
-
|
|
8
|
-
The dashboard is a thin presentation layer over primitives that already exist:
|
|
9
|
-
config I/O and validation (`src/config-store.ts`), project data
|
|
10
|
-
(`SearcherService.listProjects`), and the graph builder (`src/graph.ts`). It adds
|
|
11
|
-
no business logic of its own beyond request routing and a password-preservation
|
|
12
|
-
merge.
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## Running
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
rag-web # http://127.0.0.1:4319
|
|
20
|
-
rag-web --port 8080 # custom port
|
|
21
|
-
npm run start:web # dev mode (ts-node, no build)
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
If the `rag-web` binary is not on your `PATH`, either run it from the project
|
|
25
|
-
(`node dist/app.js web`) or register it once with `npm link`.
|
|
26
|
-
|
|
27
|
-
Keep the terminal open — the server runs until you press `Ctrl+C`. The browser
|
|
28
|
-
can only reach the dashboard while the process is alive.
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## Security model
|
|
33
|
-
|
|
34
|
-
- **Binds to `127.0.0.1` only.** The server is never exposed on the network;
|
|
35
|
-
it is a single-user local dev tool, so there is no authentication.
|
|
36
|
-
- **The DB password is never sent to the browser.** `GET /api/config` returns it
|
|
37
|
-
masked as `********`. On save, if the field is still the mask, the stored
|
|
38
|
-
password is preserved (`mergeConfigForSave`); a genuinely changed value is
|
|
39
|
-
written through.
|
|
40
|
-
- **No arbitrary file serving.** Only the known routes below respond; there is no
|
|
41
|
-
static file handler, so no path-traversal surface.
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
## Requirements & failure modes
|
|
46
|
-
|
|
47
|
-
- Requires a valid `config.json` — `rag-web` goes through the normal container
|
|
48
|
-
bootstrap and `workspaceRoot` guard. To repair a broken config, use
|
|
49
|
-
`rag-config edit` (CLI) instead.
|
|
50
|
-
- A failed **DB** connection is non-fatal: the config editor still works; the
|
|
51
|
-
Projects and Graph tabs show an in-page error.
|
|
52
|
-
- A failed **embedding backend** connection only affects model suggestions (see
|
|
53
|
-
*Field options*); everything else works.
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
## UI tabs
|
|
58
|
-
|
|
59
|
-
### Config
|
|
60
|
-
A form generated from the config JSON Schema (`buildJsonSchema()` — the same
|
|
61
|
-
schema that powers editor autocomplete on `config.json`). Fields are grouped by
|
|
62
|
-
section and typed automatically:
|
|
63
|
-
|
|
64
|
-
| Schema shape | Rendered as |
|
|
65
|
-
|---|---|
|
|
66
|
-
| `boolean` | checkbox |
|
|
67
|
-
| `enum` (e.g. `logging.level`) | `<select>` |
|
|
68
|
-
| `integer` / `number` | number input (with sensible `min`/`max`/`step`) |
|
|
69
|
-
| `string` | text input |
|
|
70
|
-
| field in `/api/field-options`, `strict` | `<select>` limited to the list |
|
|
71
|
-
| field in `/api/field-options`, non-strict | text input + `<datalist>` (combobox) |
|
|
72
|
-
|
|
73
|
-
Two affordances make the effective configuration obvious:
|
|
74
|
-
|
|
75
|
-
- **Defaults.** Any key left unset shows `↪ using default: <value>` (amber) and
|
|
76
|
-
the applied value as the input placeholder. A key that *is* set shows a muted
|
|
77
|
-
`default: <value>` for reference. Source: `GET /api/defaults`
|
|
78
|
-
(`CONFIG_DEFAULTS`).
|
|
79
|
-
- **Field options.** Fields whose valid values are constrained get a dropdown
|
|
80
|
-
instead of free text. Source: `GET /api/field-options`. See below.
|
|
81
|
-
|
|
82
|
-
Saving validates through `parseConfig` and, on failure, shows the validation
|
|
83
|
-
message and highlights the offending fields; on success the config is written
|
|
84
|
-
(with the `$schema` reference preserved) and the form reloads.
|
|
85
|
-
|
|
86
|
-
### Projects
|
|
87
|
-
Cards for each indexed project from `SearcherService.listProjects()` — name,
|
|
88
|
-
chunk count, and any `.ragmeta.json` metadata (stack, description, relations).
|
|
89
|
-
|
|
90
|
-
### Graph
|
|
91
|
-
The **full standalone graph page embedded in an `<iframe>`** (`src="/graph"`),
|
|
92
|
-
loaded lazily on first open. `GET /graph` serves the exact same HTML as the
|
|
93
|
-
generated `project-graph.html` (`buildHtml()` in `src/graph.ts`), so the whole
|
|
94
|
-
sidebar comes for free: the node-color legend, the edge-type filter buttons, and
|
|
95
|
-
the project toggle list, plus hover highlighting and auto-fit. The dashboard
|
|
96
|
-
does **not** re-implement vis-network — reusing one page keeps the two graph
|
|
97
|
-
views identical. `GET /api/graph` still returns the raw `{ nodes, edges }` JSON
|
|
98
|
-
(`buildGraphData()`) for programmatic use.
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
## Field options (model dropdowns)
|
|
103
|
-
|
|
104
|
-
Some settings have a constrained set of valid values, so the form offers a list
|
|
105
|
-
rather than free text. `GET /api/field-options` returns
|
|
106
|
-
`{ [dottedKey]: { values: string[], strict: boolean } }`:
|
|
107
|
-
|
|
108
|
-
- **`embedding.model`, `reranker.model` — non-strict.** `embedding.model`
|
|
109
|
-
suggests `MODEL_REGISTRY` (`src/constants.ts`) entries plus any model the
|
|
110
|
-
backend currently serves; `reranker.model` suggests only served models. Both
|
|
111
|
-
allow free text — a model outside the registry still works (its dimension is
|
|
112
|
-
probed at index time). Served models come from `IEmbedder.listModels()`,
|
|
113
|
-
implemented only by `InfinityEmbedder` (2-second-limited `/models` listing);
|
|
114
|
-
if the backend is unreachable, or the provider doesn't implement `listModels`
|
|
115
|
-
(`openai-compatible`, `voyage`), the served-model list is empty and the field
|
|
116
|
-
degrades to registry suggestions only (or plain text for `reranker.model`).
|
|
117
|
-
|
|
118
|
-
A strict `<select>` preserves an unknown current value as an extra option, so
|
|
119
|
-
saving never silently drops a value that isn't in the list.
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
## HTTP API
|
|
124
|
-
|
|
125
|
-
All routes are served from `127.0.0.1:<port>`.
|
|
126
|
-
|
|
127
|
-
| Method | Path | Response |
|
|
128
|
-
|---|---|---|
|
|
129
|
-
| `GET` | `/` | Dashboard HTML (self-contained) |
|
|
130
|
-
| `GET` | `/api/schema` | JSON Schema of the config (`buildJsonSchema()`) |
|
|
131
|
-
| `GET` | `/api/defaults` | `CONFIG_DEFAULTS` — dotted key → default value |
|
|
132
|
-
| `GET` | `/api/field-options` | dotted key → `{ values, strict }` |
|
|
133
|
-
| `GET` | `/api/config` | Current config, `db.password` masked |
|
|
134
|
-
| `PUT` | `/api/config` | Save. Body = config JSON. `200 {ok:true, backend:{action,message}}` or `400 {error}`. For `embedding.provider: infinity`, `backend.action` reports whether the Infinity container needed a background recreate (`started`/`already-running`/`not-needed`/`manual-required`/`failed`) — see *Infinity backend recreate* below |
|
|
135
|
-
| `GET` | `/api/backend-status` | `{ state, message, startedAt, finishedAt }` — progress of the most recent background Infinity recreate this server process started |
|
|
136
|
-
| `GET` | `/api/projects` | `SearcherService.listProjects()` |
|
|
137
|
-
| `GET` | `/api/graph` | `{ nodes, edges }` JSON (`buildGraphData()`) |
|
|
138
|
-
| `GET` | `/graph` | Full interactive graph page (`buildHtml()`), embedded by the Graph tab's iframe |
|
|
139
|
-
|
|
140
|
-
---
|
|
141
|
-
|
|
142
|
-
## Infinity backend recreate
|
|
143
|
-
|
|
144
|
-
When a save's `embedding.provider` is `infinity`, the server computes the
|
|
145
|
-
required model set from the **saved** config (freshly re-read from disk, not
|
|
146
|
-
the embedder the process started with) and compares it against what the
|
|
147
|
-
backend currently serves. If a managed container needs to be started or
|
|
148
|
-
recreated to serve the new set, that runs as an in-process background task —
|
|
149
|
-
the `PUT` responds immediately (`action: "started"`) without waiting for it.
|
|
150
|
-
Poll `GET /api/backend-status` for progress (`state: "recreating"` →
|
|
151
|
-
`"ready"`/`"failed"`). Only one `docker compose` run is active at a time; a
|
|
152
|
-
save that arrives while a recreate is already in flight for a managed backend
|
|
153
|
-
responds `already-running`, and at most one follow-up run applies the latest
|
|
154
|
-
such save once the in-flight one finishes. An external (unmanaged) backend
|
|
155
|
-
missing a required model never triggers Docker — the response's `message`
|
|
156
|
-
carries manual `--model-id`/launch instructions instead.
|
|
157
|
-
|
|
158
|
-
---
|
|
159
|
-
|
|
160
|
-
## Architecture
|
|
161
|
-
|
|
162
|
-
| File | Responsibility |
|
|
163
|
-
|---|---|
|
|
164
|
-
| `src/commands/WebCommand.ts` | CLI entry. `db.initDb()`, starts the server, keeps `execute()` pending until `SIGINT`/`SIGTERM` (mirrors `McpCommand`), then `server.stop()`. Parses `--port` (default `4319`). |
|
|
165
|
-
| `src/services/WebServerService.ts` | `WebServer(searcher, config, logger, embedder, deps?)` — `node:http` server, routing, the API handlers, and the background Infinity recreate + `/api/backend-status` state. Exports the pure `mergeConfigForSave()` and the `FieldOption` type. |
|
|
166
|
-
| `src/services/infinity-provisioning.ts` | The readiness/recreate primitive the background task delegates to (shared with `InfinityEmbedder` and `rag-setup`) — classification, compose-file rewrite, `docker compose` invocation, readiness polling. |
|
|
167
|
-
| `src/web/dashboard.ts` | `renderDashboardHtml()` — the entire page (HTML + CSS + JS) as one self-contained string, mirroring `graph.ts:buildHtml`. |
|
|
168
|
-
|
|
169
|
-
Reused primitives (no duplication):
|
|
170
|
-
|
|
171
|
-
- `readConfigJson` / `parseConfig` / `writeConfigJson` / `buildJsonSchema` /
|
|
172
|
-
`CONFIG_DEFAULTS` — `src/config-store.ts`
|
|
173
|
-
- `buildGraphData` — `src/graph.ts`
|
|
174
|
-
- `listProjects` — `src/services/SearcherService.ts`
|
|
175
|
-
- `MODEL_REGISTRY` — `src/constants.ts`
|
|
176
|
-
- `evaluateBackend` / `ensureModelSetServed` / `requiredModelSet` — `src/services/infinity-provisioning.ts`
|
|
177
|
-
|
|
178
|
-
Wiring: `app.ts` detects the `web` mode and dispatches
|
|
179
|
-
`new WebCommand(container, effectiveArgs)`. The command uses the shared
|
|
180
|
-
`Container` services (`db`, `searcher`, `config`, `logger`) — no container
|
|
181
|
-
changes were needed.
|
|
182
|
-
|
|
183
|
-
---
|
|
184
|
-
|
|
185
|
-
## Extending
|
|
186
|
-
|
|
187
|
-
- **Constrain another field to a list** — add an entry to `fieldOptions()` in
|
|
188
|
-
`WebServerService.ts` (`{ values, strict }`). The form renders it automatically
|
|
189
|
-
(strict → dropdown, non-strict → combobox).
|
|
190
|
-
- **Add a tab / endpoint** — add a route in `WebServer.handle`, a fetch + render
|
|
191
|
-
in `dashboard.ts`, and a tab button. Keep handlers thin — delegate to a service.
|
|
192
|
-
- **Actions (e.g. trigger reindex)** — deferred by design. This is heavier (a
|
|
193
|
-
long-running process with live progress, likely via SSE, plus concurrency
|
|
194
|
-
control) and belongs in its own change rather than the read/config-edit shell.
|
|
195
|
-
|
|
196
|
-
---
|
|
197
|
-
|
|
198
|
-
## Keep in sync
|
|
199
|
-
|
|
200
|
-
- `CONFIG_DEFAULTS` (`config-store.ts`) is the **single source of truth** for
|
|
201
|
-
built-in defaults: `resolvedSchema` in `config.ts` references it in its
|
|
202
|
-
`.default(...)` calls, so the runtime default and the dashboard-displayed
|
|
203
|
-
default cannot diverge — no manual sync needed. (A unit test still asserts
|
|
204
|
-
every key is a valid config key.)
|
|
205
|
-
- `MODEL_REGISTRY` (`constants.ts`) is advisory, not exhaustive — a model
|
|
206
|
-
outside it still works via the runtime dimension probe at index time.
|
|
File without changes
|