contextpro-mcp 0.0.0-stage → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +425 -0
- package/INSTALL.md +218 -0
- package/INSTRUCTIONS.md +33 -0
- package/LICENSE +21 -0
- package/NOTICE +12 -0
- package/README.md +89 -2
- package/SECURITY.md +29 -0
- package/agent-guide.md +354 -0
- package/agent-instructions.md +1 -0
- package/build/core/agent-setup.d.ts +5 -0
- package/build/core/agent-setup.d.ts.map +1 -0
- package/build/core/agent-setup.js +95 -0
- package/build/core/agent-setup.js.map +1 -0
- package/build/core/artifacts.d.ts +64 -0
- package/build/core/artifacts.d.ts.map +1 -0
- package/build/core/artifacts.js +370 -0
- package/build/core/artifacts.js.map +1 -0
- package/build/core/bounded-source.d.ts +15 -0
- package/build/core/bounded-source.d.ts.map +1 -0
- package/build/core/bounded-source.js +78 -0
- package/build/core/bounded-source.js.map +1 -0
- package/build/core/changed-since.d.ts +20 -0
- package/build/core/changed-since.d.ts.map +1 -0
- package/build/core/changed-since.js +43 -0
- package/build/core/changed-since.js.map +1 -0
- package/build/core/chat-model.d.ts +8 -0
- package/build/core/chat-model.d.ts.map +1 -0
- package/build/core/chat-model.js +135 -0
- package/build/core/chat-model.js.map +1 -0
- package/build/core/clustering.d.ts +6 -0
- package/build/core/clustering.d.ts.map +1 -0
- package/build/core/clustering.js +201 -0
- package/build/core/clustering.js.map +1 -0
- package/build/core/context-metadata.d.ts +50 -0
- package/build/core/context-metadata.d.ts.map +1 -0
- package/build/core/context-metadata.js +118 -0
- package/build/core/context-metadata.js.map +1 -0
- package/build/core/data-dir.d.ts +5 -0
- package/build/core/data-dir.d.ts.map +1 -0
- package/build/core/data-dir.js +61 -0
- package/build/core/data-dir.js.map +1 -0
- package/build/core/db-native.d.ts +28 -0
- package/build/core/db-native.d.ts.map +1 -0
- package/build/core/db-native.js +120 -0
- package/build/core/db-native.js.map +1 -0
- package/build/core/db.d.ts +294 -0
- package/build/core/db.d.ts.map +1 -0
- package/build/core/db.js +1047 -0
- package/build/core/db.js.map +1 -0
- package/build/core/doctor.d.ts +13 -0
- package/build/core/doctor.d.ts.map +1 -0
- package/build/core/doctor.js +55 -0
- package/build/core/doctor.js.map +1 -0
- package/build/core/efficiency.d.ts +16 -0
- package/build/core/efficiency.d.ts.map +1 -0
- package/build/core/efficiency.js +170 -0
- package/build/core/efficiency.js.map +1 -0
- package/build/core/embedding-tracker.d.ts +25 -0
- package/build/core/embedding-tracker.d.ts.map +1 -0
- package/build/core/embedding-tracker.js +228 -0
- package/build/core/embedding-tracker.js.map +1 -0
- package/build/core/embeddings.d.ts +90 -0
- package/build/core/embeddings.d.ts.map +1 -0
- package/build/core/embeddings.js +693 -0
- package/build/core/embeddings.js.map +1 -0
- package/build/core/evidence-state.d.ts +42 -0
- package/build/core/evidence-state.d.ts.map +1 -0
- package/build/core/evidence-state.js +153 -0
- package/build/core/evidence-state.js.map +1 -0
- package/build/core/extractor-stamp.d.ts +10 -0
- package/build/core/extractor-stamp.d.ts.map +1 -0
- package/build/core/extractor-stamp.js +51 -0
- package/build/core/extractor-stamp.js.map +1 -0
- package/build/core/feature-brief-cache.d.ts +37 -0
- package/build/core/feature-brief-cache.d.ts.map +1 -0
- package/build/core/feature-brief-cache.js +100 -0
- package/build/core/feature-brief-cache.js.map +1 -0
- package/build/core/file-fingerprint.d.ts +15 -0
- package/build/core/file-fingerprint.d.ts.map +1 -0
- package/build/core/file-fingerprint.js +24 -0
- package/build/core/file-fingerprint.js.map +1 -0
- package/build/core/graph-analytics.d.ts +46 -0
- package/build/core/graph-analytics.d.ts.map +1 -0
- package/build/core/graph-analytics.js +371 -0
- package/build/core/graph-analytics.js.map +1 -0
- package/build/core/hub.d.ts +23 -0
- package/build/core/hub.d.ts.map +1 -0
- package/build/core/hub.js +123 -0
- package/build/core/hub.js.map +1 -0
- package/build/core/ignore-dirs.d.ts +7 -0
- package/build/core/ignore-dirs.d.ts.map +1 -0
- package/build/core/ignore-dirs.js +84 -0
- package/build/core/ignore-dirs.js.map +1 -0
- package/build/core/index-freshness.d.ts +15 -0
- package/build/core/index-freshness.d.ts.map +1 -0
- package/build/core/index-freshness.js +96 -0
- package/build/core/index-freshness.js.map +1 -0
- package/build/core/index-reconcile.d.ts +28 -0
- package/build/core/index-reconcile.d.ts.map +1 -0
- package/build/core/index-reconcile.js +129 -0
- package/build/core/index-reconcile.js.map +1 -0
- package/build/core/local-daemon.d.ts +5 -0
- package/build/core/local-daemon.d.ts.map +1 -0
- package/build/core/local-daemon.js +282 -0
- package/build/core/local-daemon.js.map +1 -0
- package/build/core/memory-graph.d.ts +68 -0
- package/build/core/memory-graph.d.ts.map +1 -0
- package/build/core/memory-graph.js +152 -0
- package/build/core/memory-graph.js.map +1 -0
- package/build/core/native-repair.d.ts +12 -0
- package/build/core/native-repair.d.ts.map +1 -0
- package/build/core/native-repair.js +167 -0
- package/build/core/native-repair.js.map +1 -0
- package/build/core/native-runtime.d.ts +12 -0
- package/build/core/native-runtime.d.ts.map +1 -0
- package/build/core/native-runtime.js +38 -0
- package/build/core/native-runtime.js.map +1 -0
- package/build/core/pagerank.d.ts +29 -0
- package/build/core/pagerank.d.ts.map +1 -0
- package/build/core/pagerank.js +90 -0
- package/build/core/pagerank.js.map +1 -0
- package/build/core/parser-process.d.ts +21 -0
- package/build/core/parser-process.d.ts.map +1 -0
- package/build/core/parser-process.js +103 -0
- package/build/core/parser-process.js.map +1 -0
- package/build/core/parser-worker.d.ts +2 -0
- package/build/core/parser-worker.d.ts.map +1 -0
- package/build/core/parser-worker.js +17 -0
- package/build/core/parser-worker.js.map +1 -0
- package/build/core/parser.d.ts +66 -0
- package/build/core/parser.d.ts.map +1 -0
- package/build/core/parser.js +750 -0
- package/build/core/parser.js.map +1 -0
- package/build/core/path-guard.d.ts +6 -0
- package/build/core/path-guard.d.ts.map +1 -0
- package/build/core/path-guard.js +55 -0
- package/build/core/path-guard.js.map +1 -0
- package/build/core/process-lifecycle.d.ts +30 -0
- package/build/core/process-lifecycle.d.ts.map +1 -0
- package/build/core/process-lifecycle.js +129 -0
- package/build/core/process-lifecycle.js.map +1 -0
- package/build/core/project-config.d.ts +83 -0
- package/build/core/project-config.d.ts.map +1 -0
- package/build/core/project-config.js +302 -0
- package/build/core/project-config.js.map +1 -0
- package/build/core/project-graph.d.ts +69 -0
- package/build/core/project-graph.d.ts.map +1 -0
- package/build/core/project-graph.js +874 -0
- package/build/core/project-graph.js.map +1 -0
- package/build/core/provider-config.d.ts +15 -0
- package/build/core/provider-config.d.ts.map +1 -0
- package/build/core/provider-config.js +67 -0
- package/build/core/provider-config.js.map +1 -0
- package/build/core/provider-usage.d.ts +21 -0
- package/build/core/provider-usage.d.ts.map +1 -0
- package/build/core/provider-usage.js +52 -0
- package/build/core/provider-usage.js.map +1 -0
- package/build/core/python-language-server.d.ts +23 -0
- package/build/core/python-language-server.d.ts.map +1 -0
- package/build/core/python-language-server.js +217 -0
- package/build/core/python-language-server.js.map +1 -0
- package/build/core/python-runtime-identity.d.ts +3 -0
- package/build/core/python-runtime-identity.d.ts.map +1 -0
- package/build/core/python-runtime-identity.js +53 -0
- package/build/core/python-runtime-identity.js.map +1 -0
- package/build/core/reconcile-scheduler.d.ts +20 -0
- package/build/core/reconcile-scheduler.d.ts.map +1 -0
- package/build/core/reconcile-scheduler.js +58 -0
- package/build/core/reconcile-scheduler.js.map +1 -0
- package/build/core/request-context.d.ts +7 -0
- package/build/core/request-context.d.ts.map +1 -0
- package/build/core/request-context.js +17 -0
- package/build/core/request-context.js.map +1 -0
- package/build/core/request-root.d.ts +19 -0
- package/build/core/request-root.d.ts.map +1 -0
- package/build/core/request-root.js +26 -0
- package/build/core/request-root.js.map +1 -0
- package/build/core/root-guard.d.ts +9 -0
- package/build/core/root-guard.d.ts.map +1 -0
- package/build/core/root-guard.js +64 -0
- package/build/core/root-guard.js.map +1 -0
- package/build/core/roots-detect.d.ts +17 -0
- package/build/core/roots-detect.d.ts.map +1 -0
- package/build/core/roots-detect.js +63 -0
- package/build/core/roots-detect.js.map +1 -0
- package/build/core/runtime-session.d.ts +5 -0
- package/build/core/runtime-session.d.ts.map +1 -0
- package/build/core/runtime-session.js +10 -0
- package/build/core/runtime-session.js.map +1 -0
- package/build/core/scip-index.d.ts +71 -0
- package/build/core/scip-index.d.ts.map +1 -0
- package/build/core/scip-index.js +343 -0
- package/build/core/scip-index.js.map +1 -0
- package/build/core/semantic-diff.d.ts +32 -0
- package/build/core/semantic-diff.d.ts.map +1 -0
- package/build/core/semantic-diff.js +259 -0
- package/build/core/semantic-diff.js.map +1 -0
- package/build/core/source-context.d.ts +3 -0
- package/build/core/source-context.d.ts.map +1 -0
- package/build/core/source-context.js +86 -0
- package/build/core/source-context.js.map +1 -0
- package/build/core/source-mask.d.ts +8 -0
- package/build/core/source-mask.d.ts.map +1 -0
- package/build/core/source-mask.js +156 -0
- package/build/core/source-mask.js.map +1 -0
- package/build/core/source-mutation.d.ts +16 -0
- package/build/core/source-mutation.d.ts.map +1 -0
- package/build/core/source-mutation.js +193 -0
- package/build/core/source-mutation.js.map +1 -0
- package/build/core/sql-schema.d.ts +59 -0
- package/build/core/sql-schema.d.ts.map +1 -0
- package/build/core/sql-schema.js +218 -0
- package/build/core/sql-schema.js.map +1 -0
- package/build/core/startup-health.d.ts +40 -0
- package/build/core/startup-health.d.ts.map +1 -0
- package/build/core/startup-health.js +132 -0
- package/build/core/startup-health.js.map +1 -0
- package/build/core/team-ledger.d.ts +60 -0
- package/build/core/team-ledger.d.ts.map +1 -0
- package/build/core/team-ledger.js +171 -0
- package/build/core/team-ledger.js.map +1 -0
- package/build/core/test-impact.d.ts +23 -0
- package/build/core/test-impact.d.ts.map +1 -0
- package/build/core/test-impact.js +131 -0
- package/build/core/test-impact.js.map +1 -0
- package/build/core/tool-metrics.d.ts +29 -0
- package/build/core/tool-metrics.d.ts.map +1 -0
- package/build/core/tool-metrics.js +74 -0
- package/build/core/tool-metrics.js.map +1 -0
- package/build/core/tool-profile.d.ts +12 -0
- package/build/core/tool-profile.d.ts.map +1 -0
- package/build/core/tool-profile.js +102 -0
- package/build/core/tool-profile.js.map +1 -0
- package/build/core/tool-trace.d.ts +8 -0
- package/build/core/tool-trace.d.ts.map +1 -0
- package/build/core/tool-trace.js +70 -0
- package/build/core/tool-trace.js.map +1 -0
- package/build/core/tree-sitter-runtime.d.ts +20 -0
- package/build/core/tree-sitter-runtime.d.ts.map +1 -0
- package/build/core/tree-sitter-runtime.js +324 -0
- package/build/core/tree-sitter-runtime.js.map +1 -0
- package/build/core/tree-sitter.d.ts +6 -0
- package/build/core/tree-sitter.d.ts.map +1 -0
- package/build/core/tree-sitter.js +24 -0
- package/build/core/tree-sitter.js.map +1 -0
- package/build/core/typescript-reference-process.d.ts +30 -0
- package/build/core/typescript-reference-process.d.ts.map +1 -0
- package/build/core/typescript-reference-process.js +124 -0
- package/build/core/typescript-reference-process.js.map +1 -0
- package/build/core/typescript-reference-worker.d.ts +2 -0
- package/build/core/typescript-reference-worker.d.ts.map +1 -0
- package/build/core/typescript-reference-worker.js +14 -0
- package/build/core/typescript-reference-worker.js.map +1 -0
- package/build/core/typescript-references.d.ts +71 -0
- package/build/core/typescript-references.d.ts.map +1 -0
- package/build/core/typescript-references.js +392 -0
- package/build/core/typescript-references.js.map +1 -0
- package/build/core/typescript-skeleton.d.ts +5 -0
- package/build/core/typescript-skeleton.d.ts.map +1 -0
- package/build/core/typescript-skeleton.js +49 -0
- package/build/core/typescript-skeleton.js.map +1 -0
- package/build/core/walker.d.ts +16 -0
- package/build/core/walker.d.ts.map +1 -0
- package/build/core/walker.js +152 -0
- package/build/core/walker.js.map +1 -0
- package/build/core/workspace-router.d.ts +28 -0
- package/build/core/workspace-router.d.ts.map +1 -0
- package/build/core/workspace-router.js +93 -0
- package/build/core/workspace-router.js.map +1 -0
- package/build/core/worktree-gc.d.ts +16 -0
- package/build/core/worktree-gc.d.ts.map +1 -0
- package/build/core/worktree-gc.js +69 -0
- package/build/core/worktree-gc.js.map +1 -0
- package/build/core/worktree-overlay.d.ts +22 -0
- package/build/core/worktree-overlay.d.ts.map +1 -0
- package/build/core/worktree-overlay.js +84 -0
- package/build/core/worktree-overlay.js.map +1 -0
- package/build/core/worktree-root-guard.d.ts +8 -0
- package/build/core/worktree-root-guard.d.ts.map +1 -0
- package/build/core/worktree-root-guard.js +82 -0
- package/build/core/worktree-root-guard.js.map +1 -0
- package/build/core/worktree-seed.d.ts +14 -0
- package/build/core/worktree-seed.d.ts.map +1 -0
- package/build/core/worktree-seed.js +98 -0
- package/build/core/worktree-seed.js.map +1 -0
- package/build/git/shadow.d.ts +40 -0
- package/build/git/shadow.d.ts.map +1 -0
- package/build/git/shadow.js +298 -0
- package/build/git/shadow.js.map +1 -0
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +634 -0
- package/build/index.js.map +1 -0
- package/build/tools/agentic-context.d.ts +86 -0
- package/build/tools/agentic-context.d.ts.map +1 -0
- package/build/tools/agentic-context.js +1546 -0
- package/build/tools/agentic-context.js.map +1 -0
- package/build/tools/blast-radius.d.ts +24 -0
- package/build/tools/blast-radius.d.ts.map +1 -0
- package/build/tools/blast-radius.js +231 -0
- package/build/tools/blast-radius.js.map +1 -0
- package/build/tools/changed-since.d.ts +7 -0
- package/build/tools/changed-since.d.ts.map +1 -0
- package/build/tools/changed-since.js +68 -0
- package/build/tools/changed-since.js.map +1 -0
- package/build/tools/compiler-actions.d.ts +26 -0
- package/build/tools/compiler-actions.d.ts.map +1 -0
- package/build/tools/compiler-actions.js +121 -0
- package/build/tools/compiler-actions.js.map +1 -0
- package/build/tools/context-tree.d.ts +9 -0
- package/build/tools/context-tree.d.ts.map +1 -0
- package/build/tools/context-tree.js +131 -0
- package/build/tools/context-tree.js.map +1 -0
- package/build/tools/context.d.ts +37 -0
- package/build/tools/context.d.ts.map +1 -0
- package/build/tools/context.js +800 -0
- package/build/tools/context.js.map +1 -0
- package/build/tools/diff.d.ts +9 -0
- package/build/tools/diff.d.ts.map +1 -0
- package/build/tools/diff.js +176 -0
- package/build/tools/diff.js.map +1 -0
- package/build/tools/directory-prior.d.ts +16 -0
- package/build/tools/directory-prior.d.ts.map +1 -0
- package/build/tools/directory-prior.js +121 -0
- package/build/tools/directory-prior.js.map +1 -0
- package/build/tools/discovery-documents.d.ts +11 -0
- package/build/tools/discovery-documents.d.ts.map +1 -0
- package/build/tools/discovery-documents.js +71 -0
- package/build/tools/discovery-documents.js.map +1 -0
- package/build/tools/discovery-hints.d.ts +25 -0
- package/build/tools/discovery-hints.d.ts.map +1 -0
- package/build/tools/discovery-hints.js +329 -0
- package/build/tools/discovery-hints.js.map +1 -0
- package/build/tools/efficiency-report.d.ts +13 -0
- package/build/tools/efficiency-report.d.ts.map +1 -0
- package/build/tools/efficiency-report.js +78 -0
- package/build/tools/efficiency-report.js.map +1 -0
- package/build/tools/evidence-retrieval.d.ts +33 -0
- package/build/tools/evidence-retrieval.d.ts.map +1 -0
- package/build/tools/evidence-retrieval.js +200 -0
- package/build/tools/evidence-retrieval.js.map +1 -0
- package/build/tools/exact-references.d.ts +10 -0
- package/build/tools/exact-references.d.ts.map +1 -0
- package/build/tools/exact-references.js +351 -0
- package/build/tools/exact-references.js.map +1 -0
- package/build/tools/explain.d.ts +14 -0
- package/build/tools/explain.d.ts.map +1 -0
- package/build/tools/explain.js +370 -0
- package/build/tools/explain.js.map +1 -0
- package/build/tools/feature-brief.d.ts +7 -0
- package/build/tools/feature-brief.d.ts.map +1 -0
- package/build/tools/feature-brief.js +89 -0
- package/build/tools/feature-brief.js.map +1 -0
- package/build/tools/feature-hub.d.ts +15 -0
- package/build/tools/feature-hub.d.ts.map +1 -0
- package/build/tools/feature-hub.js +404 -0
- package/build/tools/feature-hub.js.map +1 -0
- package/build/tools/file-skeleton.d.ts +7 -0
- package/build/tools/file-skeleton.d.ts.map +1 -0
- package/build/tools/file-skeleton.js +190 -0
- package/build/tools/file-skeleton.js.map +1 -0
- package/build/tools/grep.d.ts +25 -0
- package/build/tools/grep.d.ts.map +1 -0
- package/build/tools/grep.js +341 -0
- package/build/tools/grep.js.map +1 -0
- package/build/tools/impact-delta.d.ts +7 -0
- package/build/tools/impact-delta.d.ts.map +1 -0
- package/build/tools/impact-delta.js +102 -0
- package/build/tools/impact-delta.js.map +1 -0
- package/build/tools/memory-tools.d.ts +69 -0
- package/build/tools/memory-tools.d.ts.map +1 -0
- package/build/tools/memory-tools.js +366 -0
- package/build/tools/memory-tools.js.map +1 -0
- package/build/tools/planning-helpers.d.ts +26 -0
- package/build/tools/planning-helpers.d.ts.map +1 -0
- package/build/tools/planning-helpers.js +269 -0
- package/build/tools/planning-helpers.js.map +1 -0
- package/build/tools/project-graph.d.ts +19 -0
- package/build/tools/project-graph.d.ts.map +1 -0
- package/build/tools/project-graph.js +259 -0
- package/build/tools/project-graph.js.map +1 -0
- package/build/tools/propose-commit.d.ts +9 -0
- package/build/tools/propose-commit.d.ts.map +1 -0
- package/build/tools/propose-commit.js +156 -0
- package/build/tools/propose-commit.js.map +1 -0
- package/build/tools/register-tools.d.ts +18 -0
- package/build/tools/register-tools.d.ts.map +1 -0
- package/build/tools/register-tools.js +1131 -0
- package/build/tools/register-tools.js.map +1 -0
- package/build/tools/reindex.d.ts +76 -0
- package/build/tools/reindex.d.ts.map +1 -0
- package/build/tools/reindex.js +871 -0
- package/build/tools/reindex.js.map +1 -0
- package/build/tools/related.d.ts +6 -0
- package/build/tools/related.d.ts.map +1 -0
- package/build/tools/related.js +143 -0
- package/build/tools/related.js.map +1 -0
- package/build/tools/repo-map.d.ts +59 -0
- package/build/tools/repo-map.d.ts.map +1 -0
- package/build/tools/repo-map.js +270 -0
- package/build/tools/repo-map.js.map +1 -0
- package/build/tools/resolve-symbol.d.ts +41 -0
- package/build/tools/resolve-symbol.d.ts.map +1 -0
- package/build/tools/resolve-symbol.js +250 -0
- package/build/tools/resolve-symbol.js.map +1 -0
- package/build/tools/retrieval-helpers.d.ts +35 -0
- package/build/tools/retrieval-helpers.d.ts.map +1 -0
- package/build/tools/retrieval-helpers.js +302 -0
- package/build/tools/retrieval-helpers.js.map +1 -0
- package/build/tools/scip-index.d.ts +12 -0
- package/build/tools/scip-index.d.ts.map +1 -0
- package/build/tools/scip-index.js +66 -0
- package/build/tools/scip-index.js.map +1 -0
- package/build/tools/scoped-discovery.d.ts +7 -0
- package/build/tools/scoped-discovery.d.ts.map +1 -0
- package/build/tools/scoped-discovery.js +89 -0
- package/build/tools/scoped-discovery.js.map +1 -0
- package/build/tools/search.d.ts +62 -0
- package/build/tools/search.d.ts.map +1 -0
- package/build/tools/search.js +419 -0
- package/build/tools/search.js.map +1 -0
- package/build/tools/semantic-diff.d.ts +7 -0
- package/build/tools/semantic-diff.d.ts.map +1 -0
- package/build/tools/semantic-diff.js +45 -0
- package/build/tools/semantic-diff.js.map +1 -0
- package/build/tools/semantic-identifiers.d.ts +51 -0
- package/build/tools/semantic-identifiers.d.ts.map +1 -0
- package/build/tools/semantic-identifiers.js +522 -0
- package/build/tools/semantic-identifiers.js.map +1 -0
- package/build/tools/semantic-navigate.d.ts +18 -0
- package/build/tools/semantic-navigate.d.ts.map +1 -0
- package/build/tools/semantic-navigate.js +413 -0
- package/build/tools/semantic-navigate.js.map +1 -0
- package/build/tools/semantic-search.d.ts +30 -0
- package/build/tools/semantic-search.d.ts.map +1 -0
- package/build/tools/semantic-search.js +466 -0
- package/build/tools/semantic-search.js.map +1 -0
- package/build/tools/sql-schema.d.ts +23 -0
- package/build/tools/sql-schema.d.ts.map +1 -0
- package/build/tools/sql-schema.js +155 -0
- package/build/tools/sql-schema.js.map +1 -0
- package/build/tools/static-analysis.d.ts +7 -0
- package/build/tools/static-analysis.d.ts.map +1 -0
- package/build/tools/static-analysis.js +331 -0
- package/build/tools/static-analysis.js.map +1 -0
- package/build/tools/status.d.ts +74 -0
- package/build/tools/status.d.ts.map +1 -0
- package/build/tools/status.js +227 -0
- package/build/tools/status.js.map +1 -0
- package/build/tools/symbolic-edit.d.ts +57 -0
- package/build/tools/symbolic-edit.d.ts.map +1 -0
- package/build/tools/symbolic-edit.js +500 -0
- package/build/tools/symbolic-edit.js.map +1 -0
- package/build/tools/test-impact.d.ts +7 -0
- package/build/tools/test-impact.d.ts.map +1 -0
- package/build/tools/test-impact.js +34 -0
- package/build/tools/test-impact.js.map +1 -0
- package/build/tools/test-map.d.ts +8 -0
- package/build/tools/test-map.d.ts.map +1 -0
- package/build/tools/test-map.js +75 -0
- package/build/tools/test-map.js.map +1 -0
- package/docs/README.md +35 -0
- package/docs/architecture.md +35 -0
- package/docs/configuration.md +207 -0
- package/docs/maintenance.md +77 -0
- package/package.json +80 -4
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
// Ollama-powered semantic search over file headers and symbol names
|
|
2
|
+
// Uses vector embeddings with cosine similarity for concept matching
|
|
3
|
+
import { walkDirectory } from "../core/walker.js";
|
|
4
|
+
import { analyzeContent, analyzeFile, flattenSymbols, isSupportedFile } from "../core/parser.js";
|
|
5
|
+
import { fetchEmbedding, searchTerms, matchesSearchConstraints, getEmbeddingBatchSize, deleteFileSearchEmbedding, SearchIndex, embeddingCacheIdentity, } from "../core/embeddings.js";
|
|
6
|
+
import { getDB } from "../core/db.js";
|
|
7
|
+
import { resolveProjectPath } from "../core/path-guard.js";
|
|
8
|
+
import { discoveryPathWeight, queryLiterals } from "./discovery-hints.js";
|
|
9
|
+
const FILE_SEARCH_SOURCE_TYPE = "file_search_cache";
|
|
10
|
+
import { readFile, stat } from "fs/promises";
|
|
11
|
+
import { extname } from "path";
|
|
12
|
+
const indexCache = new Map();
|
|
13
|
+
const INDEX_TTL_MS = 60000;
|
|
14
|
+
const TEXT_INDEX_EXTENSIONS = new Set([
|
|
15
|
+
".md",
|
|
16
|
+
".txt",
|
|
17
|
+
".json",
|
|
18
|
+
".jsonc",
|
|
19
|
+
".geojson",
|
|
20
|
+
".csv",
|
|
21
|
+
".tsv",
|
|
22
|
+
".ndjson",
|
|
23
|
+
".yaml",
|
|
24
|
+
".yml",
|
|
25
|
+
".toml",
|
|
26
|
+
".lock",
|
|
27
|
+
".env",
|
|
28
|
+
]);
|
|
29
|
+
const MAX_TEXT_DOC_CHARS = 4000;
|
|
30
|
+
const MAX_CODE_SEARCH_BODY_CHARS = 4000;
|
|
31
|
+
const DEFAULT_MAX_EMBED_FILE_SIZE = 50 * 1024;
|
|
32
|
+
export function applySearchPreset(options) {
|
|
33
|
+
const preset = options.preset ?? "balanced";
|
|
34
|
+
if (preset === "fast") {
|
|
35
|
+
return {
|
|
36
|
+
...options,
|
|
37
|
+
topK: options.topK ?? 5,
|
|
38
|
+
semanticWeight: options.semanticWeight ?? 0.55,
|
|
39
|
+
keywordWeight: options.keywordWeight ?? 0.45,
|
|
40
|
+
minCombinedScore: options.minCombinedScore ?? 0.05,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
if (preset === "exhaustive") {
|
|
44
|
+
return {
|
|
45
|
+
...options,
|
|
46
|
+
topK: options.topK ?? 20,
|
|
47
|
+
semanticWeight: options.semanticWeight ?? 0.62,
|
|
48
|
+
keywordWeight: options.keywordWeight ?? 0.38,
|
|
49
|
+
minCombinedScore: options.minCombinedScore ?? 0,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
if (preset === "semantic_only") {
|
|
53
|
+
return {
|
|
54
|
+
...options,
|
|
55
|
+
topK: options.topK ?? 5,
|
|
56
|
+
semanticWeight: options.semanticWeight ?? 1,
|
|
57
|
+
keywordWeight: options.keywordWeight ?? 0,
|
|
58
|
+
requireSemanticMatch: options.requireSemanticMatch ?? true,
|
|
59
|
+
fusion: options.fusion ?? "weighted",
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
if (preset === "keyword_only") {
|
|
63
|
+
return {
|
|
64
|
+
...options,
|
|
65
|
+
topK: options.topK ?? 5,
|
|
66
|
+
semanticWeight: 0,
|
|
67
|
+
keywordWeight: 1,
|
|
68
|
+
requireKeywordMatch: options.requireKeywordMatch ?? true,
|
|
69
|
+
fusion: options.fusion ?? "weighted",
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
...options,
|
|
74
|
+
topK: options.topK ?? 5,
|
|
75
|
+
semanticWeight: options.semanticWeight ?? 0.72,
|
|
76
|
+
keywordWeight: options.keywordWeight ?? 0.28,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function isTextIndexCandidate(filePath) {
|
|
80
|
+
return TEXT_INDEX_EXTENSIONS.has(extname(filePath).toLowerCase());
|
|
81
|
+
}
|
|
82
|
+
function toIntegerOr(value, fallback) {
|
|
83
|
+
if (!value)
|
|
84
|
+
return fallback;
|
|
85
|
+
const parsed = Number.parseInt(value, 10);
|
|
86
|
+
return Number.isFinite(parsed) ? parsed : fallback;
|
|
87
|
+
}
|
|
88
|
+
function getMaxEmbedFileSize() {
|
|
89
|
+
return Math.max(1024, toIntegerOr(process.env.CONTEXTPRO_MAX_EMBED_FILE_SIZE ?? process.env.CONTEXTPLUS_MAX_EMBED_FILE_SIZE, DEFAULT_MAX_EMBED_FILE_SIZE));
|
|
90
|
+
}
|
|
91
|
+
function extractPlainTextHeader(content) {
|
|
92
|
+
const lines = content.split("\n");
|
|
93
|
+
const headerLines = [];
|
|
94
|
+
for (const line of lines) {
|
|
95
|
+
const trimmed = line.trim();
|
|
96
|
+
if (!trimmed)
|
|
97
|
+
continue;
|
|
98
|
+
headerLines.push(trimmed.slice(0, 120));
|
|
99
|
+
if (headerLines.length >= 2)
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
return headerLines.join(" | ");
|
|
103
|
+
}
|
|
104
|
+
function buildCodeSearchBody(content) {
|
|
105
|
+
const selected = [];
|
|
106
|
+
let charBudget = 0;
|
|
107
|
+
for (const line of content.split("\n")) {
|
|
108
|
+
const trimmed = line.trim();
|
|
109
|
+
if (!trimmed)
|
|
110
|
+
continue;
|
|
111
|
+
if (trimmed.length < 3)
|
|
112
|
+
continue;
|
|
113
|
+
const isPureSyntax = /^[\}\)\]\;,]+$/.test(trimmed);
|
|
114
|
+
if (isPureSyntax)
|
|
115
|
+
continue;
|
|
116
|
+
const snippet = trimmed.slice(0, 180);
|
|
117
|
+
selected.push(snippet);
|
|
118
|
+
charBudget += snippet.length + 1;
|
|
119
|
+
if (charBudget >= MAX_CODE_SEARCH_BODY_CHARS)
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
const summary = selected.join("\n");
|
|
123
|
+
return (summary || content).slice(0, MAX_CODE_SEARCH_BODY_CHARS);
|
|
124
|
+
}
|
|
125
|
+
function hashContent(text) {
|
|
126
|
+
let h = 0;
|
|
127
|
+
for (let i = 0; i < text.length; i++)
|
|
128
|
+
h = ((h << 5) - h + text.charCodeAt(i)) | 0;
|
|
129
|
+
return h.toString(36);
|
|
130
|
+
}
|
|
131
|
+
function normalizeRelativePath(path) {
|
|
132
|
+
return path.replace(/\\/g, "/");
|
|
133
|
+
}
|
|
134
|
+
async function buildSearchDocumentForFile(rootDir, relativePath) {
|
|
135
|
+
const normalized = normalizeRelativePath(relativePath);
|
|
136
|
+
const fullPath = resolveProjectPath(rootDir, normalized, "search file");
|
|
137
|
+
if (isTextIndexCandidate(fullPath)) {
|
|
138
|
+
try {
|
|
139
|
+
if ((await stat(fullPath)).size > getMaxEmbedFileSize())
|
|
140
|
+
return null;
|
|
141
|
+
const raw = await readFile(fullPath, "utf-8");
|
|
142
|
+
const content = raw.slice(0, MAX_TEXT_DOC_CHARS);
|
|
143
|
+
return {
|
|
144
|
+
path: normalized,
|
|
145
|
+
header: extractPlainTextHeader(content),
|
|
146
|
+
symbols: [],
|
|
147
|
+
content,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (!isSupportedFile(fullPath))
|
|
155
|
+
return null;
|
|
156
|
+
try {
|
|
157
|
+
const analysis = await analyzeFile(fullPath);
|
|
158
|
+
const raw = await readFile(fullPath, "utf-8");
|
|
159
|
+
const flatSymbols = flattenSymbols(analysis.symbols);
|
|
160
|
+
return {
|
|
161
|
+
path: normalized,
|
|
162
|
+
header: analysis.header,
|
|
163
|
+
symbols: flatSymbols.map((s) => s.name),
|
|
164
|
+
symbolEntries: flatSymbols.map((s) => ({
|
|
165
|
+
name: s.name,
|
|
166
|
+
kind: s.kind,
|
|
167
|
+
line: s.line,
|
|
168
|
+
endLine: s.endLine,
|
|
169
|
+
signature: s.signature,
|
|
170
|
+
})),
|
|
171
|
+
content: `${flatSymbols.map((s) => s.signature).join(" ")}\n${buildCodeSearchBody(raw)}`,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
async function buildSearchDocumentFromIndexedFile(rootDir, file, symbols) {
|
|
179
|
+
let sourceBody = "";
|
|
180
|
+
try {
|
|
181
|
+
if ((await stat(resolveProjectPath(rootDir, file.path, "indexed file"))).size <= getMaxEmbedFileSize()) {
|
|
182
|
+
sourceBody = buildCodeSearchBody(await readFile(resolveProjectPath(rootDir, file.path, "indexed file"), "utf-8"));
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
catch { }
|
|
186
|
+
return {
|
|
187
|
+
path: normalizeRelativePath(file.path),
|
|
188
|
+
header: file.header ?? "",
|
|
189
|
+
symbols: symbols.map((symbol) => symbol.name),
|
|
190
|
+
symbolEntries: symbols.map((symbol) => ({
|
|
191
|
+
name: symbol.name,
|
|
192
|
+
kind: symbol.kind,
|
|
193
|
+
line: symbol.line_start,
|
|
194
|
+
endLine: symbol.line_end ?? undefined,
|
|
195
|
+
signature: symbol.signature ?? undefined,
|
|
196
|
+
})),
|
|
197
|
+
content: `${symbols.map((symbol) => symbol.signature ?? symbol.name).join(" ")}\n${sourceBody}`,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
async function buildSearchDocumentsFromDB(rootDir) {
|
|
201
|
+
const db = await getDB(rootDir);
|
|
202
|
+
const files = db.getAllFiles();
|
|
203
|
+
if (files.length === 0)
|
|
204
|
+
return [];
|
|
205
|
+
return Promise.all(files.map((file) => buildSearchDocumentFromIndexedFile(rootDir, file, db.getSymbolsByFile(file.id))));
|
|
206
|
+
}
|
|
207
|
+
async function buildIndex(rootDir, skipEmbeddings = false) {
|
|
208
|
+
const db = await getDB(rootDir);
|
|
209
|
+
const key = JSON.stringify([rootDir, db.getIndexGeneration(), skipEmbeddings, embeddingCacheIdentity(db)]);
|
|
210
|
+
const cached = indexCache.get(key);
|
|
211
|
+
if (cached && Date.now() - cached.at < INDEX_TTL_MS)
|
|
212
|
+
return cached.index;
|
|
213
|
+
let docs = await buildSearchDocumentsFromDB(rootDir);
|
|
214
|
+
if (docs.length === 0) {
|
|
215
|
+
const entries = await walkDirectory({ rootDir, depthLimit: 0 });
|
|
216
|
+
const files = entries.filter((e) => !e.isDirectory);
|
|
217
|
+
docs = [];
|
|
218
|
+
for (const file of files) {
|
|
219
|
+
const doc = await buildSearchDocumentForFile(rootDir, file.relativePath);
|
|
220
|
+
if (doc)
|
|
221
|
+
docs.push(doc);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
const index = new SearchIndex();
|
|
225
|
+
// Reads consume existing vectors. Missing/model-mismatched vectors must not
|
|
226
|
+
// turn an interactive lookup into an unbounded corpus embedding job.
|
|
227
|
+
await index.index(docs, rootDir, skipEmbeddings, true);
|
|
228
|
+
indexCache.set(key, { index, at: Date.now() });
|
|
229
|
+
while (indexCache.size > 8)
|
|
230
|
+
indexCache.delete(indexCache.keys().next().value);
|
|
231
|
+
return index;
|
|
232
|
+
}
|
|
233
|
+
function queryTerms(query) {
|
|
234
|
+
return searchTerms(query);
|
|
235
|
+
}
|
|
236
|
+
function rankSearchResults(query, results, topK) {
|
|
237
|
+
return results
|
|
238
|
+
.map(result => ({ ...result, score: result.score * discoveryPathWeight(query, result.path) }))
|
|
239
|
+
.sort((a, b) => b.score - a.score || b.semanticScore - a.semanticScore || b.keywordScore - a.keywordScore || a.path.localeCompare(b.path))
|
|
240
|
+
.slice(0, topK ?? 5);
|
|
241
|
+
}
|
|
242
|
+
async function fuseFtsMatches(rootDir, query, results, topK, options) {
|
|
243
|
+
if (options.requireSemanticMatch)
|
|
244
|
+
return results;
|
|
245
|
+
const db = await getDB(rootDir);
|
|
246
|
+
// FTS tokenization preserves compound identifiers. Splitting listOwnMedia
|
|
247
|
+
// into prose (list own media) rewards unrelated text over its actual callers.
|
|
248
|
+
const ftsQuery = query;
|
|
249
|
+
const candidateLimit = Math.max((topK ?? 5) * 4, 20);
|
|
250
|
+
const literalMatches = queryLiterals(query).flatMap(literal => db.searchFileText(literal, candidateLimit, true));
|
|
251
|
+
const literalPaths = new Set(literalMatches.map(match => match.path));
|
|
252
|
+
const ftsMatches = [...new Map([...literalMatches, ...db.searchFileText(ftsQuery, candidateLimit)].map(match => [match.path, match])).values()];
|
|
253
|
+
if (ftsMatches.length === 0)
|
|
254
|
+
return results;
|
|
255
|
+
const terms = queryTerms(query);
|
|
256
|
+
const byPath = new Map(results.map((result) => [result.path, result]));
|
|
257
|
+
const semanticAvailable = options.preset !== "keyword_only" && results.some((result) => result.semanticScore >= 15);
|
|
258
|
+
const lowSemanticScore = (semantic, keyword) => {
|
|
259
|
+
if (!semanticAvailable)
|
|
260
|
+
return keyword;
|
|
261
|
+
const ratio = Math.max(0, Math.min(1, semantic / 15));
|
|
262
|
+
return Math.round(keyword * (0.12 + 0.28 * ratio) * 100) / 100;
|
|
263
|
+
};
|
|
264
|
+
for (let i = 0; i < ftsMatches.length; i++) {
|
|
265
|
+
const match = ftsMatches[i];
|
|
266
|
+
const lexicalScore = literalPaths.has(match.path) ? 100 : Math.max(45, 100 - i * 6);
|
|
267
|
+
const existing = byPath.get(match.path);
|
|
268
|
+
if (existing) {
|
|
269
|
+
const semantic = existing.semanticScore;
|
|
270
|
+
const keyword = Math.max(existing.keywordScore, lexicalScore);
|
|
271
|
+
const boosted = semantic < 15
|
|
272
|
+
? lowSemanticScore(semantic, keyword)
|
|
273
|
+
: existing.score + (100 - existing.score) * 0.08 * (lexicalScore / 100);
|
|
274
|
+
byPath.set(match.path, {
|
|
275
|
+
...existing,
|
|
276
|
+
score: Math.round(boosted * 100) / 100,
|
|
277
|
+
keywordScore: keyword,
|
|
278
|
+
});
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
const file = db.getFile(match.path);
|
|
282
|
+
if (!file)
|
|
283
|
+
continue;
|
|
284
|
+
const symbols = db.getSymbolsByFile(file.id);
|
|
285
|
+
const matchedSymbols = symbols
|
|
286
|
+
.filter((symbol) => terms.some((term) => symbol.name.toLowerCase().includes(term) || (symbol.signature ?? "").toLowerCase().includes(term)))
|
|
287
|
+
.map((symbol) => symbol.name);
|
|
288
|
+
byPath.set(match.path, {
|
|
289
|
+
path: match.path,
|
|
290
|
+
score: lowSemanticScore(0, lexicalScore),
|
|
291
|
+
semanticScore: 0,
|
|
292
|
+
keywordScore: lexicalScore,
|
|
293
|
+
header: file.header ?? "",
|
|
294
|
+
matchedSymbols,
|
|
295
|
+
matchedSymbolLocations: symbols
|
|
296
|
+
.filter((symbol) => matchedSymbols.includes(symbol.name))
|
|
297
|
+
.map((symbol) => `${symbol.name}@L${symbol.line_start}${symbol.line_end && symbol.line_end > symbol.line_start ? `-L${symbol.line_end}` : ""}`),
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
return [...byPath.values()]
|
|
301
|
+
.filter((result) => !options.requireKeywordMatch || result.keywordScore > 0)
|
|
302
|
+
.filter((result) => options.minKeywordScore === undefined || result.keywordScore >= (options.minKeywordScore > 1 ? options.minKeywordScore : options.minKeywordScore * 100))
|
|
303
|
+
.filter((result) => options.minCombinedScore === undefined || result.score >= (options.minCombinedScore > 1 ? options.minCombinedScore : options.minCombinedScore * 100))
|
|
304
|
+
// Intent-aware ranking must run before truncation, otherwise locale copies
|
|
305
|
+
// and tests consume the candidate window before implementations compete.
|
|
306
|
+
.sort((a, b) => b.score - a.score || b.keywordScore - a.keywordScore || a.path.localeCompare(b.path));
|
|
307
|
+
}
|
|
308
|
+
const INLINE_CRUX_LINES = 8;
|
|
309
|
+
const INLINE_QUERY_STOPWORDS = new Set([
|
|
310
|
+
"the", "and", "for", "from", "that", "this", "with", "where", "what", "when", "how",
|
|
311
|
+
"are", "was", "were", "is", "to", "of", "in", "on", "a", "an", "it", "its", "be",
|
|
312
|
+
]);
|
|
313
|
+
function inlineQueryTerms(query) {
|
|
314
|
+
return queryTerms(query).filter((term) => term.length > 2 && !INLINE_QUERY_STOPWORDS.has(term));
|
|
315
|
+
}
|
|
316
|
+
function scoreLineForQuery(line, terms) {
|
|
317
|
+
const lower = line.toLowerCase();
|
|
318
|
+
return terms.reduce((score, term) => score + (lower.includes(term) ? 1 : 0), 0);
|
|
319
|
+
}
|
|
320
|
+
async function addInlineCode(rootDir, query, results, mode) {
|
|
321
|
+
if (mode === "off")
|
|
322
|
+
return results;
|
|
323
|
+
const terms = inlineQueryTerms(query);
|
|
324
|
+
return Promise.all(results.map(async (result) => {
|
|
325
|
+
try {
|
|
326
|
+
const fullPath = resolveProjectPath(rootDir, result.path, "search result");
|
|
327
|
+
const content = await readFile(fullPath, "utf-8");
|
|
328
|
+
const lines = content.split("\n");
|
|
329
|
+
const analysis = await analyzeContent(fullPath, content);
|
|
330
|
+
const symbols = flattenSymbols(analysis.symbols);
|
|
331
|
+
const matchedNames = new Set(result.matchedSymbols.map((name) => name.toLowerCase()));
|
|
332
|
+
const rankedSymbols = symbols
|
|
333
|
+
.map((symbol) => {
|
|
334
|
+
const start = Math.max(1, symbol.line);
|
|
335
|
+
const end = Math.min(lines.length, Math.max(start, symbol.endLine));
|
|
336
|
+
const bodyLines = lines.slice(start - 1, end);
|
|
337
|
+
const lineScores = bodyLines.map((line) => scoreLineForQuery(line, terms));
|
|
338
|
+
const bestRelativeLine = lineScores.reduce((best, score, index) => score > lineScores[best] ? index : best, 0);
|
|
339
|
+
const bodyText = bodyLines.join("\n").toLowerCase();
|
|
340
|
+
const bodyCoverage = terms.filter((term) => bodyText.includes(term)).length;
|
|
341
|
+
const identityCoverage = scoreLineForQuery(`${symbol.name} ${symbol.signature}`, terms);
|
|
342
|
+
const matchedBonus = matchedNames.has(symbol.name.toLowerCase()) ? 1 : 0;
|
|
343
|
+
const callableBonus = symbol.kind === "function" || symbol.kind === "method" ? 1 : 0;
|
|
344
|
+
// Favor a symbol whose own name/signature answers the query. Summing every matching
|
|
345
|
+
// line unfairly rewards large classes and modules simply because they contain more text.
|
|
346
|
+
const score = identityCoverage * 6 + bodyCoverage * 2 + lineScores[bestRelativeLine] * 2 + matchedBonus + callableBonus;
|
|
347
|
+
return { symbol, score, bestLine: start + bestRelativeLine };
|
|
348
|
+
})
|
|
349
|
+
.sort((left, right) => right.score - left.score || (left.symbol.endLine - left.symbol.line) - (right.symbol.endLine - right.symbol.line));
|
|
350
|
+
const selected = rankedSymbols[0]?.score > 0 ? rankedSymbols[0].symbol : undefined;
|
|
351
|
+
const scopeStart = selected?.line ?? 1;
|
|
352
|
+
const scopeEnd = selected?.endLine ?? lines.length;
|
|
353
|
+
const relevantLine = selected ? rankedSymbols[0].bestLine : 1;
|
|
354
|
+
let startLine = scopeStart;
|
|
355
|
+
let endLine = scopeEnd;
|
|
356
|
+
if (mode === "crux") {
|
|
357
|
+
startLine = Math.max(scopeStart, relevantLine - Math.floor(INLINE_CRUX_LINES / 2));
|
|
358
|
+
endLine = Math.min(scopeEnd, startLine + INLINE_CRUX_LINES - 1);
|
|
359
|
+
startLine = Math.max(scopeStart, endLine - INLINE_CRUX_LINES + 1);
|
|
360
|
+
}
|
|
361
|
+
return {
|
|
362
|
+
...result,
|
|
363
|
+
inlineCode: {
|
|
364
|
+
mode,
|
|
365
|
+
startLine,
|
|
366
|
+
endLine,
|
|
367
|
+
symbol: selected?.name,
|
|
368
|
+
text: lines.slice(startLine - 1, endLine).join("\n"),
|
|
369
|
+
},
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
catch {
|
|
373
|
+
return result;
|
|
374
|
+
}
|
|
375
|
+
}));
|
|
376
|
+
}
|
|
377
|
+
export async function semanticCodeSearchResults(options) {
|
|
378
|
+
const resolvedOptions = applySearchPreset(options);
|
|
379
|
+
const index = await buildIndex(options.rootDir, resolvedOptions.semanticWeight === 0);
|
|
380
|
+
const searchOptions = {
|
|
381
|
+
topK: resolvedOptions.topK,
|
|
382
|
+
semanticWeight: resolvedOptions.semanticWeight,
|
|
383
|
+
keywordWeight: resolvedOptions.keywordWeight,
|
|
384
|
+
minSemanticScore: resolvedOptions.minSemanticScore,
|
|
385
|
+
minKeywordScore: resolvedOptions.minKeywordScore,
|
|
386
|
+
minCombinedScore: resolvedOptions.minCombinedScore,
|
|
387
|
+
requireKeywordMatch: resolvedOptions.requireKeywordMatch,
|
|
388
|
+
requireSemanticMatch: resolvedOptions.requireSemanticMatch,
|
|
389
|
+
fusion: resolvedOptions.fusion,
|
|
390
|
+
};
|
|
391
|
+
const rawResults = await index.search(options.query, { ...searchOptions, topK: Math.max((searchOptions.topK ?? 5) * 4, 20) });
|
|
392
|
+
const fusedResults = await fuseFtsMatches(options.rootDir, options.query, rawResults, Math.max((searchOptions.topK ?? 5) * 2, 10), resolvedOptions);
|
|
393
|
+
const rankedResults = rankSearchResults(options.query, fusedResults, fusedResults.length)
|
|
394
|
+
.filter((result) => matchesSearchConstraints(result, resolvedOptions))
|
|
395
|
+
.slice(0, searchOptions.topK ?? 5);
|
|
396
|
+
const results = await addInlineCode(options.rootDir, options.query, rankedResults, options.inlineCode ?? "off");
|
|
397
|
+
return {
|
|
398
|
+
query: options.query,
|
|
399
|
+
results,
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
export function formatSemanticCodeSearchData({ query, results }) {
|
|
403
|
+
if (results.length === 0)
|
|
404
|
+
return "No matching files found for the given query.";
|
|
405
|
+
const lines = [`Top ${results.length} hybrid matches for: "${query}"\n`];
|
|
406
|
+
for (let i = 0; i < results.length; i++) {
|
|
407
|
+
const r = results[i];
|
|
408
|
+
lines.push(`${i + 1}. ${r.path} (${r.score}% total)`);
|
|
409
|
+
lines.push(` Semantic: ${r.semanticScore}% | Keyword: ${r.keywordScore}%`);
|
|
410
|
+
if (r.header)
|
|
411
|
+
lines.push(` Header: ${r.header}`);
|
|
412
|
+
if (r.matchedSymbols.length > 0)
|
|
413
|
+
lines.push(` Matched symbols: ${r.matchedSymbols.join(", ")}`);
|
|
414
|
+
if (r.matchedSymbolLocations.length > 0)
|
|
415
|
+
lines.push(` Definition lines: ${r.matchedSymbolLocations.join(", ")}`);
|
|
416
|
+
if (r.inlineCode) {
|
|
417
|
+
const symbol = r.inlineCode.symbol ? `, ${r.inlineCode.symbol}` : "";
|
|
418
|
+
lines.push(` Code (${r.inlineCode.mode}${symbol}, L${r.inlineCode.startLine}-L${r.inlineCode.endLine}):`);
|
|
419
|
+
lines.push("```", r.inlineCode.text, "```");
|
|
420
|
+
}
|
|
421
|
+
lines.push("");
|
|
422
|
+
}
|
|
423
|
+
return lines.join("\n");
|
|
424
|
+
}
|
|
425
|
+
export async function semanticCodeSearch(options) {
|
|
426
|
+
return formatSemanticCodeSearchData(await semanticCodeSearchResults({ ...options, inlineCode: options.inlineCode ?? "crux" }));
|
|
427
|
+
}
|
|
428
|
+
export function invalidateSearchCache() {
|
|
429
|
+
indexCache.clear();
|
|
430
|
+
}
|
|
431
|
+
export async function refreshFileSearchEmbeddings(options) {
|
|
432
|
+
const uniquePaths = Array.from(new Set(options.relativePaths.map(normalizeRelativePath).filter(Boolean)));
|
|
433
|
+
if (uniquePaths.length === 0)
|
|
434
|
+
return 0;
|
|
435
|
+
const db = await getDB(options.rootDir);
|
|
436
|
+
const existing = db.getEmbeddingsByType(FILE_SEARCH_SOURCE_TYPE);
|
|
437
|
+
const existingMap = new Map(existing.map((r) => [r.sourceId, r.contentHash]));
|
|
438
|
+
const pending = [];
|
|
439
|
+
for (const relativePath of uniquePaths) {
|
|
440
|
+
const doc = await buildSearchDocumentForFile(options.rootDir, relativePath);
|
|
441
|
+
if (!doc) {
|
|
442
|
+
await deleteFileSearchEmbedding(options.rootDir, relativePath);
|
|
443
|
+
continue;
|
|
444
|
+
}
|
|
445
|
+
const text = `${doc.header} ${doc.symbols.join(" ")} ${doc.content}`;
|
|
446
|
+
const hash = hashContent(text);
|
|
447
|
+
if (existingMap.get(relativePath) === hash)
|
|
448
|
+
continue;
|
|
449
|
+
pending.push({ path: relativePath, hash, text });
|
|
450
|
+
}
|
|
451
|
+
if (pending.length > 0) {
|
|
452
|
+
const batchSize = getEmbeddingBatchSize();
|
|
453
|
+
const entries = [];
|
|
454
|
+
for (let i = 0; i < pending.length; i += batchSize) {
|
|
455
|
+
const batch = pending.slice(i, i + batchSize);
|
|
456
|
+
const vectors = await fetchEmbedding(batch.map((entry) => entry.text));
|
|
457
|
+
for (let j = 0; j < batch.length; j++) {
|
|
458
|
+
entries.push({ sourceId: batch[j].path, vector: vectors[j], hash: batch[j].hash });
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
db.upsertEmbeddingsBatch(FILE_SEARCH_SOURCE_TYPE, entries);
|
|
462
|
+
}
|
|
463
|
+
invalidateSearchCache();
|
|
464
|
+
return pending.length;
|
|
465
|
+
}
|
|
466
|
+
//# sourceMappingURL=semantic-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-search.js","sourceRoot":"","sources":["../../src/tools/semantic-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type SqlSchema, type SqlTable, type SqlPolicy, type SqlFunction } from "../core/sql-schema.js";
|
|
2
|
+
export interface SqlSchemaOptions {
|
|
3
|
+
rootDir: string;
|
|
4
|
+
/** Restrict to a subtree (default: scan the whole repo for .sql files). */
|
|
5
|
+
targetPath?: string;
|
|
6
|
+
/** Filter to a single table / policy table / function name (case-insensitive). */
|
|
7
|
+
name?: string;
|
|
8
|
+
format?: "text" | "json";
|
|
9
|
+
}
|
|
10
|
+
export interface AggregatedSchema {
|
|
11
|
+
tables: SqlTable[];
|
|
12
|
+
policies: SqlPolicy[];
|
|
13
|
+
functions: SqlFunction[];
|
|
14
|
+
filesScanned: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Merge per-file schemas into one project view. Later migrations win for tables of
|
|
18
|
+
* the same name (a later CREATE/ALTER reflects the current shape), and RLS-enabled
|
|
19
|
+
* is sticky (once enabled in any migration it stays enabled).
|
|
20
|
+
*/
|
|
21
|
+
export declare function aggregateSchemas(schemas: SqlSchema[]): AggregatedSchema;
|
|
22
|
+
export declare function getSqlSchema(options: SqlSchemaOptions): Promise<string>;
|
|
23
|
+
//# sourceMappingURL=sql-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-schema.d.ts","sourceRoot":"","sources":["../../src/tools/sql-schema.ts"],"names":[],"mappings":"AAOA,OAAO,EAAmC,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzI,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAsBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAiDvE;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAc7E"}
|