contextpro-mcp 0.0.0-stage → 1.4.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 +416 -0
- package/INSTALL.md +128 -0
- package/INSTRUCTIONS.md +33 -0
- package/LICENSE +21 -0
- package/NOTICE +12 -0
- package/README.md +164 -2
- package/SECURITY.md +27 -0
- package/agent-guide.md +323 -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 +94 -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 +53 -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 +8 -0
- package/build/core/root-guard.d.ts.map +1 -0
- package/build/core/root-guard.js +53 -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 +599 -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 +349 -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 +26 -0
- package/docs/architecture.md +35 -0
- package/docs/configuration.md +178 -0
- package/docs/maintenance.md +77 -0
- package/package.json +80 -4
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// Framework-aware directory ignore policy for indexing.
|
|
2
|
+
//
|
|
3
|
+
// FEATURE: The walker honors a project's `.gitignore`, but that's not enough on
|
|
4
|
+
// its own — many repos have an absent or incomplete `.gitignore`, and some heavy
|
|
5
|
+
// build/cache dirs (e.g. `target`, `.next`, `__pycache__`) are not always listed.
|
|
6
|
+
// This is the SAFETY NET: a curated set of dependency / build / cache / tooling
|
|
7
|
+
// directories, across the major languages and frameworks, that should never be
|
|
8
|
+
// indexed regardless of `.gitignore`. Skipping them keeps the index small and the
|
|
9
|
+
// reindex fast (it's the difference between indexing your code and indexing all of
|
|
10
|
+
// node_modules + target + .venv).
|
|
11
|
+
//
|
|
12
|
+
// `.gitignore` is applied SEPARATELY by the walker; this set composes with it.
|
|
13
|
+
// Exact directory names to always skip (matched case-sensitively by basename).
|
|
14
|
+
export const ALWAYS_IGNORE_DIRS = new Set([
|
|
15
|
+
// Version control
|
|
16
|
+
".git", ".svn", ".hg", ".bzr", "CVS",
|
|
17
|
+
// JS/TS dependencies & package managers
|
|
18
|
+
"node_modules", "bower_components", ".pnp", ".yarn", ".pnpm-store",
|
|
19
|
+
// JS/TS build output & framework caches
|
|
20
|
+
// (bare "out" omitted — ambiguous; `.gitignore` handles it when it's build output)
|
|
21
|
+
"dist", "build", ".next", ".nuxt", ".svelte-kit", ".astro",
|
|
22
|
+
".vercel", ".netlify", ".docusaurus", ".vitepress", ".angular",
|
|
23
|
+
"storybook-static", ".storybook-out",
|
|
24
|
+
// JS/TS tooling caches
|
|
25
|
+
".cache", ".turbo", ".parcel-cache", ".vite", ".rollup.cache",
|
|
26
|
+
".eslintcache", ".rpt2_cache",
|
|
27
|
+
// Test / coverage (generated output only)
|
|
28
|
+
// NOTE: "__snapshots__" is intentionally NOT here — Jest `.snap` files are
|
|
29
|
+
// checked-in, source-controlled test expectations, not generated build output;
|
|
30
|
+
// agents need to read/update them.
|
|
31
|
+
"coverage", ".nyc_output", ".vscode-test", "playwright-report",
|
|
32
|
+
"test-results",
|
|
33
|
+
// Python (bare "env" omitted — ambiguous; ".venv"/"venv" are conventional)
|
|
34
|
+
"__pycache__", ".venv", "venv", ".tox", ".nox",
|
|
35
|
+
".mypy_cache", ".pytest_cache", ".ruff_cache", ".pytype",
|
|
36
|
+
".eggs", ".hypothesis", "site-packages", ".pyenv",
|
|
37
|
+
// JVM (Java / Kotlin / Scala / Gradle / Maven)
|
|
38
|
+
// NOTE: bare "bin"/"out" are intentionally NOT here — they're too often real
|
|
39
|
+
// source dirs; `.gitignore` covers them when they're genuinely build output.
|
|
40
|
+
"target", ".gradle", ".settings", ".metadata",
|
|
41
|
+
".idea", ".project", "out-tsc",
|
|
42
|
+
// Rust
|
|
43
|
+
// ("target" already covered above)
|
|
44
|
+
// Go
|
|
45
|
+
"vendor",
|
|
46
|
+
// Elixir / Erlang
|
|
47
|
+
"_build", ".elixir_ls",
|
|
48
|
+
// Dart / Flutter
|
|
49
|
+
".dart_tool", ".flutter-plugins", ".pub-cache",
|
|
50
|
+
// iOS / CocoaPods / Carthage
|
|
51
|
+
"Pods", "Carthage", "DerivedData", ".swiftpm",
|
|
52
|
+
// PHP (Composer "vendor" already covered)
|
|
53
|
+
// Ruby
|
|
54
|
+
".bundle",
|
|
55
|
+
// Infra / IaC
|
|
56
|
+
".terraform", ".serverless", "cdk.out",
|
|
57
|
+
// Editor / OS / misc
|
|
58
|
+
".DS_Store", ".vscode-test", ".history", ".vs",
|
|
59
|
+
".contextpro", ".contextplus",
|
|
60
|
+
]);
|
|
61
|
+
// Suffix patterns (glob-style `*.suffix`) matched against the basename. Kept small
|
|
62
|
+
// and specific so it can't accidentally swallow source directories.
|
|
63
|
+
// NOTE: `*.xcodeproj` / `*.xcworkspace` are intentionally NOT here — those bundles
|
|
64
|
+
// hold checked-in project configuration (project.pbxproj, workspace metadata) that
|
|
65
|
+
// agents need indexed, not generated build/cache content. `*.dSYM` (debug symbols)
|
|
66
|
+
// and `*.egg-info` (generated package metadata) are safe to skip.
|
|
67
|
+
const IGNORE_SUFFIXES = [
|
|
68
|
+
".egg-info",
|
|
69
|
+
".dSYM",
|
|
70
|
+
];
|
|
71
|
+
/**
|
|
72
|
+
* Whether a directory basename should always be skipped during indexing,
|
|
73
|
+
* independent of `.gitignore`. Matches exact names and a few suffix globs.
|
|
74
|
+
*/
|
|
75
|
+
export function isAlwaysIgnoredDir(name) {
|
|
76
|
+
if (ALWAYS_IGNORE_DIRS.has(name))
|
|
77
|
+
return true;
|
|
78
|
+
for (const suffix of IGNORE_SUFFIXES) {
|
|
79
|
+
if (name.endsWith(suffix) && name.length > suffix.length)
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=ignore-dirs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ignore-dirs.js","sourceRoot":"","sources":["../../src/core/ignore-dirs.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,EAAE;AACF,gFAAgF;AAChF,iFAAiF;AACjF,kFAAkF;AAClF,gFAAgF;AAChF,+EAA+E;AAC/E,kFAAkF;AAClF,mFAAmF;AACnF,kCAAkC;AAClC,EAAE;AACF,+EAA+E;AAE/E,+EAA+E;AAC/E,MAAM,CAAC,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC;IAC7D,kBAAkB;IAClB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK;IAEpC,wCAAwC;IACxC,cAAc,EAAE,kBAAkB,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;IAElE,wCAAwC;IACxC,mFAAmF;IACnF,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ;IAC1D,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU;IAC9D,kBAAkB,EAAE,gBAAgB;IAEpC,uBAAuB;IACvB,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe;IAC7D,cAAc,EAAE,aAAa;IAE7B,2CAA2C;IAC3C,2EAA2E;IAC3E,+EAA+E;IAC/E,mCAAmC;IACnC,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB;IAC9D,cAAc;IAEd,4EAA4E;IAC5E,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9C,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS;IACxD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,QAAQ;IAEjD,+CAA+C;IAC/C,6EAA6E;IAC7E,6EAA6E;IAC7E,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW;IAC7C,OAAO,EAAE,UAAU,EAAE,SAAS;IAE9B,OAAO;IACP,mCAAmC;IAEnC,KAAK;IACL,QAAQ;IAER,kBAAkB;IAClB,QAAQ,EAAE,YAAY;IAEtB,iBAAiB;IACjB,YAAY,EAAE,kBAAkB,EAAE,YAAY;IAE9C,6BAA6B;IAC7B,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU;IAE7C,0CAA0C;IAC1C,OAAO;IACP,SAAS;IAET,cAAc;IACd,YAAY,EAAE,aAAa,EAAE,SAAS;IAEtC,qBAAqB;IACrB,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK;IAC9C,aAAa,EAAE,cAAc;CAC9B,CAAC,CAAC;AAEH,mFAAmF;AACnF,oEAAoE;AACpE,mFAAmF;AACnF,mFAAmF;AACnF,mFAAmF;AACnF,kEAAkE;AAClE,MAAM,eAAe,GAAsB;IACzC,WAAW;IACX,OAAO;CACR,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;IACxE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface IndexFreshnessResult {
|
|
2
|
+
checked: boolean;
|
|
3
|
+
refreshed: boolean;
|
|
4
|
+
fullReindex: boolean;
|
|
5
|
+
staleCount: number;
|
|
6
|
+
waitedForIndexing: boolean;
|
|
7
|
+
durationMs: number;
|
|
8
|
+
warning: string | null;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Coalesce concurrent checks inside this process. Cross-process writers are
|
|
12
|
+
* coordinated by the SQLite compare-and-set lock in quickRefresh/reindex.
|
|
13
|
+
*/
|
|
14
|
+
export declare function ensureFreshIndex(rootDir: string): Promise<IndexFreshnessResult>;
|
|
15
|
+
//# sourceMappingURL=index-freshness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-freshness.d.ts","sourceRoot":"","sources":["../../src/core/index-freshness.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAuED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAarF"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// Shared pre-query freshness gate for structural code intelligence.
|
|
2
|
+
// FEATURE: Every graph reader observes current files without refresh stampedes.
|
|
3
|
+
import { resolve } from "path";
|
|
4
|
+
import { getDB } from "./db.js";
|
|
5
|
+
import { quickRefresh, reindex } from "../tools/reindex.js";
|
|
6
|
+
import { requestFreshness } from "./request-context.js";
|
|
7
|
+
import { sharedCompute } from "./local-daemon.js";
|
|
8
|
+
const refreshes = new Map();
|
|
9
|
+
function autoRefreshDisabled() {
|
|
10
|
+
const raw = (process.env.CONTEXTPRO_AUTO_REFRESH ?? process.env.CONTEXTPLUS_AUTO_REFRESH ?? "").trim().toLowerCase();
|
|
11
|
+
return raw === "0" || raw === "false" || raw === "no" || raw === "off";
|
|
12
|
+
}
|
|
13
|
+
async function runFreshnessCheck(rootDir) {
|
|
14
|
+
const shared = await sharedCompute("freshness", { rootDir });
|
|
15
|
+
if (shared)
|
|
16
|
+
return shared.value;
|
|
17
|
+
const startedAt = Date.now();
|
|
18
|
+
if (autoRefreshDisabled()) {
|
|
19
|
+
return {
|
|
20
|
+
checked: false,
|
|
21
|
+
refreshed: false,
|
|
22
|
+
fullReindex: false,
|
|
23
|
+
staleCount: 0,
|
|
24
|
+
waitedForIndexing: false,
|
|
25
|
+
durationMs: 0,
|
|
26
|
+
warning: "Automatic index refresh is disabled by CONTEXTPRO_AUTO_REFRESH.",
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
const quick = await quickRefresh(rootDir, { includeEmbeddings: false });
|
|
31
|
+
let refreshed = quick.refreshed;
|
|
32
|
+
let fullReindex = quick.fullReindex === true;
|
|
33
|
+
let warning = quick.indexingTimedOut
|
|
34
|
+
? "Index refresh timed out waiting for another process; serving the last complete index."
|
|
35
|
+
: null;
|
|
36
|
+
if (!quick.complete && !quick.indexingTimedOut) {
|
|
37
|
+
const db = await getDB(rootDir);
|
|
38
|
+
const generationBefore = db.getIndexGeneration();
|
|
39
|
+
await reindex({ rootDir, noEmbed: true, autoHubs: false });
|
|
40
|
+
refreshed = db.getIndexGeneration() > generationBefore;
|
|
41
|
+
fullReindex = refreshed;
|
|
42
|
+
const confirmation = await quickRefresh(rootDir, { includeEmbeddings: false });
|
|
43
|
+
refreshed = refreshed || confirmation.refreshed;
|
|
44
|
+
fullReindex = fullReindex || confirmation.fullReindex === true;
|
|
45
|
+
if (!confirmation.complete) {
|
|
46
|
+
warning = "A large source change was detected but the fallback reindex did not complete; serving the last complete index.";
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
checked: true,
|
|
51
|
+
refreshed,
|
|
52
|
+
fullReindex,
|
|
53
|
+
staleCount: quick.staleCount,
|
|
54
|
+
waitedForIndexing: quick.waitedForIndexing === true,
|
|
55
|
+
durationMs: Date.now() - startedAt,
|
|
56
|
+
warning,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
61
|
+
process.stderr.write(`[contextpro/freshness] refresh failed; serving last complete index: ${message}\n`);
|
|
62
|
+
return {
|
|
63
|
+
checked: true,
|
|
64
|
+
refreshed: false,
|
|
65
|
+
fullReindex: false,
|
|
66
|
+
staleCount: 0,
|
|
67
|
+
waitedForIndexing: false,
|
|
68
|
+
durationMs: Date.now() - startedAt,
|
|
69
|
+
warning: `Automatic index refresh failed: ${message}`,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Coalesce concurrent checks inside this process. Cross-process writers are
|
|
75
|
+
* coordinated by the SQLite compare-and-set lock in quickRefresh/reindex.
|
|
76
|
+
*/
|
|
77
|
+
export async function ensureFreshIndex(rootDir) {
|
|
78
|
+
const normalizedRoot = resolve(rootDir);
|
|
79
|
+
const request = requestFreshness();
|
|
80
|
+
const existing = request?.get(normalizedRoot) ?? refreshes.get(normalizedRoot);
|
|
81
|
+
if (existing) {
|
|
82
|
+
request?.set(normalizedRoot, existing);
|
|
83
|
+
return existing;
|
|
84
|
+
}
|
|
85
|
+
const pending = runFreshnessCheck(normalizedRoot);
|
|
86
|
+
refreshes.set(normalizedRoot, pending);
|
|
87
|
+
request?.set(normalizedRoot, pending);
|
|
88
|
+
try {
|
|
89
|
+
return await pending;
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
if (refreshes.get(normalizedRoot) === pending)
|
|
93
|
+
refreshes.delete(normalizedRoot);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=index-freshness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-freshness.js","sourceRoot":"","sources":["../../src/core/index-freshness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** Drop a root's stat cache (e.g. on worktree GC) so it can't leak memory. */
|
|
2
|
+
export declare function forgetReconcileStatCache(rootDir: string): void;
|
|
3
|
+
export interface ReconcileOptions {
|
|
4
|
+
/** Maximum number of drifted files to refresh in a single sweep. */
|
|
5
|
+
maxFiles?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface ReconcileResult {
|
|
8
|
+
/** Drifted files this sweep actually re-indexed (new + content-changed). */
|
|
9
|
+
refreshed: number;
|
|
10
|
+
/** Index entries pruned because the file no longer exists on disk. */
|
|
11
|
+
removed: number;
|
|
12
|
+
/** Total drifted files detected this sweep (may exceed `refreshed` when capped). */
|
|
13
|
+
drifted: number;
|
|
14
|
+
/** Drifted files left for a future sweep after the per-sweep cap was applied. */
|
|
15
|
+
pending: number;
|
|
16
|
+
/** `+path:name` / `-path:name` markers for symbols changed by the refresh. */
|
|
17
|
+
changedSymbols: string[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Diff the on-disk source tree against the index and heal the difference.
|
|
21
|
+
*
|
|
22
|
+
* Returns counts so a caller (the embedding tracker) can decide whether to sweep
|
|
23
|
+
* again sooner to drain a backlog. Reads file content only for the candidate set
|
|
24
|
+
* required to compute hashes; callers gate *how often* this runs (e.g. skip while
|
|
25
|
+
* idle) — this function always does the full diff when invoked.
|
|
26
|
+
*/
|
|
27
|
+
export declare function reconcileIndex(rootDir: string, options?: ReconcileOptions): Promise<ReconcileResult>;
|
|
28
|
+
//# sourceMappingURL=index-reconcile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-reconcile.d.ts","sourceRoot":"","sources":["../../src/core/index-reconcile.ts"],"names":[],"mappings":"AAiCA,8EAA8E;AAC9E,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9D;AAED,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AASD;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAwF1B"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// Self-healing index reconciliation — a periodic FS<->index diff that catches
|
|
2
|
+
// drift the FS-watch events miss.
|
|
3
|
+
//
|
|
4
|
+
// FEATURE: fs.watch is unreliable in practice — it does not recurse on Linux,
|
|
5
|
+
// drops events under heavy churn, and misses atomic renames and out-of-band git
|
|
6
|
+
// operations. A purely event-driven tracker therefore goes stale during a
|
|
7
|
+
// fast-moving session and forces a manual full reindex. This module reconciles
|
|
8
|
+
// the index against the real filesystem: new and content-drifted files are
|
|
9
|
+
// re-indexed through the same per-file structural pass the tracker already uses,
|
|
10
|
+
// and files deleted on disk are pruned. Work is capped per sweep so a large
|
|
11
|
+
// backlog drains over several cheap sweeps instead of one long stall.
|
|
12
|
+
import { readFile, stat } from "fs/promises";
|
|
13
|
+
import { getDB, hashContent } from "./db.js";
|
|
14
|
+
import { walkDirectory } from "./walker.js";
|
|
15
|
+
import { isSupportedFile } from "./parser.js";
|
|
16
|
+
import { resolveProjectPath } from "./path-guard.js";
|
|
17
|
+
import { refreshFilesStructural } from "../tools/reindex.js";
|
|
18
|
+
const fileStatCache = new Map();
|
|
19
|
+
function statCacheFor(rootDir) {
|
|
20
|
+
let m = fileStatCache.get(rootDir);
|
|
21
|
+
if (!m) {
|
|
22
|
+
m = new Map();
|
|
23
|
+
fileStatCache.set(rootDir, m);
|
|
24
|
+
}
|
|
25
|
+
return m;
|
|
26
|
+
}
|
|
27
|
+
/** Drop a root's stat cache (e.g. on worktree GC) so it can't leak memory. */
|
|
28
|
+
export function forgetReconcileStatCache(rootDir) {
|
|
29
|
+
fileStatCache.delete(rootDir);
|
|
30
|
+
}
|
|
31
|
+
const DEFAULT_MAX_FILES = 40;
|
|
32
|
+
function clampMaxFiles(value) {
|
|
33
|
+
if (!Number.isFinite(value) || (value ?? 0) <= 0)
|
|
34
|
+
return DEFAULT_MAX_FILES;
|
|
35
|
+
return Math.floor(value);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Diff the on-disk source tree against the index and heal the difference.
|
|
39
|
+
*
|
|
40
|
+
* Returns counts so a caller (the embedding tracker) can decide whether to sweep
|
|
41
|
+
* again sooner to drain a backlog. Reads file content only for the candidate set
|
|
42
|
+
* required to compute hashes; callers gate *how often* this runs (e.g. skip while
|
|
43
|
+
* idle) — this function always does the full diff when invoked.
|
|
44
|
+
*/
|
|
45
|
+
export async function reconcileIndex(rootDir, options = {}) {
|
|
46
|
+
const maxFiles = clampMaxFiles(options.maxFiles);
|
|
47
|
+
const db = await getDB(rootDir);
|
|
48
|
+
// Index side: path -> stored content hash.
|
|
49
|
+
const indexedHashes = new Map();
|
|
50
|
+
for (const file of db.getAllFiles()) {
|
|
51
|
+
if (isSupportedFile(file.path))
|
|
52
|
+
indexedHashes.set(file.path, file.content_hash);
|
|
53
|
+
}
|
|
54
|
+
// Filesystem side: every supported source file currently on disk.
|
|
55
|
+
const entries = await walkDirectory({ rootDir, depthLimit: 0 });
|
|
56
|
+
const diskPaths = new Set();
|
|
57
|
+
const drifted = [];
|
|
58
|
+
const statCache = statCacheFor(rootDir);
|
|
59
|
+
let scanned = 0;
|
|
60
|
+
for (const entry of entries) {
|
|
61
|
+
if (entry.isDirectory || !isSupportedFile(entry.path))
|
|
62
|
+
continue;
|
|
63
|
+
diskPaths.add(entry.relativePath);
|
|
64
|
+
// Yield to the event loop periodically so the sweep never feels hung.
|
|
65
|
+
if (++scanned % 64 === 0)
|
|
66
|
+
await new Promise((resolve) => setImmediate(resolve));
|
|
67
|
+
const indexedHash = indexedHashes.get(entry.relativePath);
|
|
68
|
+
if (indexedHash === undefined) {
|
|
69
|
+
// Brand-new file the index has never seen.
|
|
70
|
+
drifted.push(entry.relativePath);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
const fullPath = resolveProjectPath(rootDir, entry.relativePath, "reconcile file");
|
|
75
|
+
// CHEAP pre-filter: stat first. If mtime+size match what we last saw for an
|
|
76
|
+
// already-indexed file, its content can't have changed — skip the expensive
|
|
77
|
+
// readFile + sha256 entirely. This is what makes idle sweeps near-free.
|
|
78
|
+
const st = await stat(fullPath);
|
|
79
|
+
const prev = statCache.get(entry.relativePath);
|
|
80
|
+
if (prev && prev.mtimeMs === st.mtimeMs && prev.ctimeMs === st.ctimeMs
|
|
81
|
+
&& prev.size === st.size && prev.indexedHash === indexedHash) {
|
|
82
|
+
continue; // unchanged since last sweep — no hashing needed
|
|
83
|
+
}
|
|
84
|
+
// mtime/size changed (or first time we've seen it this session): hash to
|
|
85
|
+
// confirm a real content change before marking drift, then remember the stat.
|
|
86
|
+
const content = await readFile(fullPath, "utf-8");
|
|
87
|
+
if (hashContent(content) !== indexedHash) {
|
|
88
|
+
// A seen file is not necessarily reconciled: capped or failed refreshes
|
|
89
|
+
// must remain eligible next sweep even when its filesystem stat is stable.
|
|
90
|
+
statCache.delete(entry.relativePath);
|
|
91
|
+
drifted.push(entry.relativePath);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
statCache.set(entry.relativePath, { mtimeMs: st.mtimeMs, ctimeMs: st.ctimeMs, size: st.size, indexedHash });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// Unreadable (race with deletion / permissions) — let prune or the next
|
|
99
|
+
// sweep handle it rather than treating an error as drift.
|
|
100
|
+
statCache.delete(entry.relativePath);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Prune index entries whose files are gone from disk.
|
|
104
|
+
const removedPaths = db.getRemovedFiles(diskPaths).filter((path) => isSupportedFile(path));
|
|
105
|
+
for (const path of removedPaths)
|
|
106
|
+
statCache.delete(path);
|
|
107
|
+
// Refresh up to the per-sweep cap; the remainder is reported as pending so the
|
|
108
|
+
// tracker can schedule a prompt follow-up sweep.
|
|
109
|
+
const batch = drifted.slice(0, maxFiles);
|
|
110
|
+
let refreshed = 0;
|
|
111
|
+
let removed = 0;
|
|
112
|
+
let changedSymbols = [];
|
|
113
|
+
if (batch.length > 0 || removedPaths.length > 0) {
|
|
114
|
+
// Deletions use the same writer lock, generation, and cache invalidation as
|
|
115
|
+
// updates. The mutation rechecks existence after acquiring the lock.
|
|
116
|
+
const result = await refreshFilesStructural(rootDir, batch, { removedPaths });
|
|
117
|
+
refreshed = result.indexed;
|
|
118
|
+
removed = result.removed ?? 0;
|
|
119
|
+
changedSymbols = result.changedSymbols;
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
refreshed,
|
|
123
|
+
removed,
|
|
124
|
+
drifted: drifted.length,
|
|
125
|
+
pending: Math.max(0, drifted.length - refreshed),
|
|
126
|
+
changedSymbols,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=index-reconcile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-reconcile.js","sourceRoot":"","sources":["../../src/core/index-reconcile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function sharedCompute<T>(method: "freshness" | "references" | "reindex" | "quickRefresh" | "compiler" | "python", args: unknown): Promise<{
|
|
2
|
+
value: T;
|
|
3
|
+
} | undefined>;
|
|
4
|
+
export declare function daemonCommand(action: string): Promise<unknown>;
|
|
5
|
+
//# sourceMappingURL=local-daemon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-daemon.d.ts","sourceRoot":"","sources":["../../src/core/local-daemon.ts"],"names":[],"mappings":"AAuEA,wBAAsB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,cAAc,GAAG,UAAU,GAAG,QAAQ,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,CAAC,CAAA;CAAE,GAAG,SAAS,CAAC,CAOhL;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBpE"}
|