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,167 @@
|
|
|
1
|
+
// Recover native dependencies in a private ABI/version cache without changing shared node_modules.
|
|
2
|
+
import { execFile } from "child_process";
|
|
3
|
+
import { access, mkdir, mkdtemp, open, readFile, realpath, rename, rm, stat, unlink, writeFile } from "fs/promises";
|
|
4
|
+
import { delimiter, dirname, join, resolve } from "path";
|
|
5
|
+
import { fileURLToPath } from "url";
|
|
6
|
+
import { promisify } from "util";
|
|
7
|
+
import { getNativeRuntime } from "./native-runtime.js";
|
|
8
|
+
const execFileAsync = promisify(execFile);
|
|
9
|
+
const attemptedRepairKeys = new Set();
|
|
10
|
+
const activeRepairs = new Map();
|
|
11
|
+
export function getContextPlusPackageRoot() {
|
|
12
|
+
return resolve(dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
13
|
+
}
|
|
14
|
+
export function isNativeAutoRepairEnabled() {
|
|
15
|
+
const raw = (process.env.CONTEXTPRO_NATIVE_AUTO_REPAIR ?? process.env.CONTEXTPLUS_NATIVE_AUTO_REPAIR ?? "true").trim().toLowerCase();
|
|
16
|
+
return ["1", "true", "on", "yes"].includes(raw);
|
|
17
|
+
}
|
|
18
|
+
export function isRepairableNativeError(code) {
|
|
19
|
+
return code === "native_module_missing" || code === "native_module_abi_mismatch" || code === "native_module_error";
|
|
20
|
+
}
|
|
21
|
+
async function runCommand(root, label, command, args) {
|
|
22
|
+
// Pin lifecycle scripts to the host runtime too. Inherited Electron/node-gyp
|
|
23
|
+
// targeting variables must not produce another host's ABI in this cache.
|
|
24
|
+
const env = { ...process.env, PATH: [dirname(process.execPath), process.env.PATH ?? ""].join(delimiter) };
|
|
25
|
+
for (const key of Object.keys(env)) {
|
|
26
|
+
if (/^npm_config_(target|runtime|arch|target_arch|platform|target_platform|disturl|dist_url|nodedir)$/i.test(key))
|
|
27
|
+
delete env[key];
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
const { stdout, stderr } = await execFileAsync(command, args, { cwd: root, env, timeout: 180_000, maxBuffer: 8 * 1024 * 1024 });
|
|
31
|
+
return { label, command: [command, ...args].join(" "), success: true, output: [stdout, stderr].filter(Boolean).join("\n").trim() };
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
const failure = error;
|
|
35
|
+
return { label, command: [command, ...args].join(" "), success: false, output: [failure.stdout, failure.stderr, failure.message].filter(Boolean).join("\n").trim() };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async function resolveNpmCli() {
|
|
39
|
+
const candidates = [
|
|
40
|
+
join(dirname(process.execPath), "../lib/node_modules/npm/bin/npm-cli.js"),
|
|
41
|
+
join(dirname(process.execPath), "node_modules/npm/bin/npm-cli.js"),
|
|
42
|
+
...(process.env.PATH ?? "").split(delimiter).filter(Boolean).map((path) => join(path, "npm")),
|
|
43
|
+
];
|
|
44
|
+
for (const candidate of candidates) {
|
|
45
|
+
try {
|
|
46
|
+
const path = await realpath(candidate);
|
|
47
|
+
if (path.endsWith(".js")) {
|
|
48
|
+
await access(path);
|
|
49
|
+
return path;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch { /* Try the next installation. */ }
|
|
53
|
+
}
|
|
54
|
+
throw new Error(`Cannot locate npm-cli.js. Install npm, then run ContextPro doctor --fix with ${process.execPath}.`);
|
|
55
|
+
}
|
|
56
|
+
async function validateRuntime(directory) {
|
|
57
|
+
return runCommand(directory, "verify-isolated-native-deps", process.execPath, ["-e", `
|
|
58
|
+
const Database = require('./node_modules/better-sqlite3');
|
|
59
|
+
const vec = require('./node_modules/sqlite-vec');
|
|
60
|
+
const db = new Database(':memory:');
|
|
61
|
+
try { vec.load(db); db.prepare('SELECT vec_version()').get(); } finally { db.close(); }
|
|
62
|
+
`]);
|
|
63
|
+
}
|
|
64
|
+
async function withRepairLock(directory, fn) {
|
|
65
|
+
await mkdir(dirname(directory), { recursive: true });
|
|
66
|
+
const lock = `${directory}.lock`;
|
|
67
|
+
const deadline = Date.now() + 240_000;
|
|
68
|
+
while (true) {
|
|
69
|
+
let handle;
|
|
70
|
+
try {
|
|
71
|
+
handle = await open(lock, "wx", 0o600);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
if (error.code !== "EEXIST")
|
|
75
|
+
throw error;
|
|
76
|
+
try {
|
|
77
|
+
const owner = JSON.parse(await readFile(lock, "utf8"));
|
|
78
|
+
if (Number.isInteger(owner.pid) && owner.pid > 0) {
|
|
79
|
+
try {
|
|
80
|
+
process.kill(owner.pid, 0);
|
|
81
|
+
}
|
|
82
|
+
catch (pidError) {
|
|
83
|
+
if (pidError.code === "ESRCH")
|
|
84
|
+
await unlink(lock).catch(() => undefined);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch { // Give a newly created lock time to receive its owner metadata.
|
|
89
|
+
const info = await stat(lock).catch(() => null);
|
|
90
|
+
if (info && Date.now() - info.mtimeMs > 240_000)
|
|
91
|
+
await unlink(lock).catch(() => undefined);
|
|
92
|
+
}
|
|
93
|
+
if (Date.now() >= deadline)
|
|
94
|
+
throw new Error(`Timed out waiting for native runtime repair: ${directory}`);
|
|
95
|
+
await new Promise((done) => setTimeout(done, 100));
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
await handle.writeFile(JSON.stringify({ pid: process.pid }));
|
|
100
|
+
return await fn();
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
await handle.close();
|
|
104
|
+
await unlink(lock).catch(() => undefined);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
export async function repairNativeDependencies(rootDir, _issueCode) {
|
|
109
|
+
const runtime = getNativeRuntime(rootDir);
|
|
110
|
+
return withRepairLock(runtime.directory, async () => {
|
|
111
|
+
// Another process may have completed the same ABI repair while we waited.
|
|
112
|
+
const existing = await validateRuntime(runtime.directory);
|
|
113
|
+
if (existing.success)
|
|
114
|
+
return [existing];
|
|
115
|
+
const actions = [];
|
|
116
|
+
const staging = await mkdtemp(`${runtime.directory}.staging-`);
|
|
117
|
+
try {
|
|
118
|
+
await writeFile(join(staging, "package.json"), JSON.stringify({ name: "contextpro-native-runtime", version: "1.0.0", private: true, dependencies: runtime.dependencies }));
|
|
119
|
+
const npmCli = await resolveNpmCli();
|
|
120
|
+
actions.push(await runCommand(staging, "install-isolated-native-deps", process.execPath, [npmCli, "install", "--foreground-scripts", "--no-audit", "--no-fund", "--package-lock=false"]));
|
|
121
|
+
if (!actions.at(-1)?.success)
|
|
122
|
+
return actions;
|
|
123
|
+
actions.push(await validateRuntime(staging));
|
|
124
|
+
if (!actions.at(-1)?.success)
|
|
125
|
+
return actions;
|
|
126
|
+
await rm(runtime.directory, { recursive: true, force: true });
|
|
127
|
+
await rename(staging, runtime.directory);
|
|
128
|
+
return actions;
|
|
129
|
+
}
|
|
130
|
+
finally {
|
|
131
|
+
await rm(staging, { recursive: true, force: true });
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
export async function attemptNativeAutoRepair(issueCode, rootDir = getContextPlusPackageRoot()) {
|
|
136
|
+
if (!isNativeAutoRepairEnabled() || !isRepairableNativeError(issueCode))
|
|
137
|
+
return false;
|
|
138
|
+
const key = getNativeRuntime(rootDir).directory;
|
|
139
|
+
const active = activeRepairs.get(key);
|
|
140
|
+
if (active)
|
|
141
|
+
return active;
|
|
142
|
+
if (attemptedRepairKeys.has(key))
|
|
143
|
+
return false;
|
|
144
|
+
attemptedRepairKeys.add(key);
|
|
145
|
+
if (attemptedRepairKeys.size > 200)
|
|
146
|
+
attemptedRepairKeys.delete(attemptedRepairKeys.values().next().value);
|
|
147
|
+
const repair = (async () => {
|
|
148
|
+
process.stderr.write(`[contextpro/native-repair] preparing isolated SQLite runtime for Node ${process.version} (ABI ${process.versions.modules})\n`);
|
|
149
|
+
try {
|
|
150
|
+
const actions = await repairNativeDependencies(rootDir, issueCode);
|
|
151
|
+
const ok = actions.at(-1)?.success === true;
|
|
152
|
+
if (!ok)
|
|
153
|
+
process.stderr.write(`[contextpro/native-repair] failed: ${actions.at(-1)?.output.slice(-2000)}\n`);
|
|
154
|
+
return ok;
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
process.stderr.write(`[contextpro/native-repair] failed: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
finally {
|
|
161
|
+
activeRepairs.delete(key);
|
|
162
|
+
}
|
|
163
|
+
})();
|
|
164
|
+
activeRepairs.set(key, repair);
|
|
165
|
+
return repair;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=native-repair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-repair.js","sourceRoot":"","sources":["../../src/core/native-repair.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface NativeRuntimeIdentity {
|
|
2
|
+
abi: string;
|
|
3
|
+
platform: string;
|
|
4
|
+
arch: string;
|
|
5
|
+
libc: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function nativeRuntimeIdentity(): NativeRuntimeIdentity;
|
|
8
|
+
export declare function getNativeRuntime(rootDir: string, identity?: NativeRuntimeIdentity): {
|
|
9
|
+
directory: string;
|
|
10
|
+
dependencies: Record<string, string>;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=native-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-runtime.d.ts","sourceRoot":"","sources":["../../src/core/native-runtime.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,qBAAqB,IAAI,qBAAqB,CAQ7D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,wBAA0B,GAAG;IACrF,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzD,CAiBA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// Native dependencies live in a versioned, ABI-specific user cache, never rebuilt in place.
|
|
2
|
+
import { createHash } from "crypto";
|
|
3
|
+
import { readFileSync } from "fs";
|
|
4
|
+
import { createRequire } from "module";
|
|
5
|
+
import { homedir } from "os";
|
|
6
|
+
import { join, resolve } from "path";
|
|
7
|
+
export function nativeRuntimeIdentity() {
|
|
8
|
+
const header = process.platform === "linux" ? process.report?.getReport()?.header : undefined;
|
|
9
|
+
return {
|
|
10
|
+
abi: process.versions.modules ?? "unknown",
|
|
11
|
+
platform: process.platform,
|
|
12
|
+
arch: process.arch,
|
|
13
|
+
libc: process.platform === "linux" ? (header?.glibcVersionRuntime ? "glibc" : "musl") : "none",
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export function getNativeRuntime(rootDir, identity = nativeRuntimeIdentity()) {
|
|
17
|
+
const root = resolve(rootDir);
|
|
18
|
+
const requireFromRoot = createRequire(join(root, "package.json"));
|
|
19
|
+
const pkg = JSON.parse(readFileSync(join(root, "package.json"), "utf8"));
|
|
20
|
+
const dependencies = {};
|
|
21
|
+
for (const name of ["better-sqlite3", "sqlite-vec"]) {
|
|
22
|
+
let version;
|
|
23
|
+
try {
|
|
24
|
+
version = requireFromRoot(`${name}/package.json`).version;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
version = String(pkg.dependencies?.[name] ?? "").replace(/^[~^]/, "");
|
|
28
|
+
}
|
|
29
|
+
if (!/^\d+\.\d+\.\d+(?:-[\w.-]+)?$/.test(version)) {
|
|
30
|
+
throw new Error(`Cannot determine an exact ${name} version for isolated native repair.`);
|
|
31
|
+
}
|
|
32
|
+
dependencies[name] = version;
|
|
33
|
+
}
|
|
34
|
+
const key = createHash("sha256").update(JSON.stringify({ identity, dependencies })).digest("hex").slice(0, 24);
|
|
35
|
+
const base = process.env.CONTEXTPRO_NATIVE_CACHE_DIR || join(homedir(), ".cache", "contextpro", "native");
|
|
36
|
+
return { directory: join(resolve(base), `v1-${key}`), dependencies };
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=native-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-runtime.js","sourceRoot":"","sources":["../../src/core/native-runtime.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AASrC,MAAM,UAAU,qBAAqB;IACnC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAoD,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACjJ,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,IAAI,SAAS;QAC1C,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;KAC/F,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,QAAQ,GAAG,qBAAqB,EAAE;IAGlF,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,eAAe,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,MAAM,YAAY,GAA2B,EAAE,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,EAAE,CAAC;QACpD,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YAAC,OAAO,GAAG,eAAe,CAAC,GAAG,IAAI,eAAe,CAAC,CAAC,OAAO,CAAC;QAAC,CAAC;QAClE,MAAM,CAAC;YAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAAC,CAAC;QAChF,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,sCAAsC,CAAC,CAAC;QAC3F,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;IAC/B,CAAC;IACD,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/G,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC1G,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface PageRankOptions {
|
|
2
|
+
/** Damping factor (probability of following an edge). Standard 0.85. */
|
|
3
|
+
damping?: number;
|
|
4
|
+
/** Max power-iterations before giving up. */
|
|
5
|
+
maxIterations?: number;
|
|
6
|
+
/** L1 convergence threshold across one iteration. */
|
|
7
|
+
tolerance?: number;
|
|
8
|
+
/**
|
|
9
|
+
* Nodes to bias rank toward (the "teleport" set). When provided, random jumps
|
|
10
|
+
* land only on these nodes instead of uniformly — pulling rank into the subtree
|
|
11
|
+
* the agent cares about (e.g. files under a target path).
|
|
12
|
+
*
|
|
13
|
+
* A plain `Set` gives every member equal teleport weight (the original behavior).
|
|
14
|
+
* A `Map<string, number>` gives each member its own relative weight, so callers
|
|
15
|
+
* can mirror Aider's repo-map trick: files explicitly in-focus for the current
|
|
16
|
+
* task get teleported to far more often than files merely inside a target
|
|
17
|
+
* subtree, without needing two separate personalization passes.
|
|
18
|
+
*/
|
|
19
|
+
personalization?: Set<string> | Map<string, number>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Compute PageRank for `nodes` given directed `edges` ([from, to]).
|
|
23
|
+
*
|
|
24
|
+
* Returns a map node → rank, with ranks summing to ~1. Edges referencing nodes
|
|
25
|
+
* not in `nodes` are ignored. Dangling nodes (no out-edges) redistribute their
|
|
26
|
+
* mass uniformly across the teleport set, so the total stays normalized.
|
|
27
|
+
*/
|
|
28
|
+
export declare function computePageRank(nodes: readonly string[], edges: ReadonlyArray<readonly [string, string]>, options?: PageRankOptions): Map<string, number>;
|
|
29
|
+
//# sourceMappingURL=pagerank.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagerank.d.ts","sourceRoot":"","sources":["../../src/core/pagerank.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;OAUG;IACH,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrD;AAMD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC/C,OAAO,GAAE,eAAoB,GAC5B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAsErB"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// PageRank over the file import graph — transitive importance for ranking.
|
|
2
|
+
//
|
|
3
|
+
// FEATURE: Local degree counts ("how many files import me") miss transitive
|
|
4
|
+
// importance: a file imported by a few *important* files matters more than one
|
|
5
|
+
// imported by many leaf files. PageRank captures that — it's the algorithm behind
|
|
6
|
+
// Aider's repo map. We run it over the import graph (edge source→target means
|
|
7
|
+
// "source imports target", so rank flows toward heavily-depended-on modules) and
|
|
8
|
+
// support a personalization vector so a query/target subtree pulls rank toward it.
|
|
9
|
+
//
|
|
10
|
+
// Pure and dependency-free (no DB, no graph lib) so it stays unit-testable.
|
|
11
|
+
const DEFAULT_DAMPING = 0.85;
|
|
12
|
+
const DEFAULT_MAX_ITERATIONS = 100;
|
|
13
|
+
const DEFAULT_TOLERANCE = 1e-6;
|
|
14
|
+
/**
|
|
15
|
+
* Compute PageRank for `nodes` given directed `edges` ([from, to]).
|
|
16
|
+
*
|
|
17
|
+
* Returns a map node → rank, with ranks summing to ~1. Edges referencing nodes
|
|
18
|
+
* not in `nodes` are ignored. Dangling nodes (no out-edges) redistribute their
|
|
19
|
+
* mass uniformly across the teleport set, so the total stays normalized.
|
|
20
|
+
*/
|
|
21
|
+
export function computePageRank(nodes, edges, options = {}) {
|
|
22
|
+
const damping = options.damping ?? DEFAULT_DAMPING;
|
|
23
|
+
const maxIterations = options.maxIterations ?? DEFAULT_MAX_ITERATIONS;
|
|
24
|
+
const tolerance = options.tolerance ?? DEFAULT_TOLERANCE;
|
|
25
|
+
const n = nodes.length;
|
|
26
|
+
const ranks = new Map();
|
|
27
|
+
if (n === 0)
|
|
28
|
+
return ranks;
|
|
29
|
+
const index = new Map();
|
|
30
|
+
nodes.forEach((node, i) => index.set(node, i));
|
|
31
|
+
// Build adjacency (only edges whose endpoints both exist).
|
|
32
|
+
const outLinks = Array.from({ length: n }, () => []);
|
|
33
|
+
for (const [from, to] of edges) {
|
|
34
|
+
const fromIdx = index.get(from);
|
|
35
|
+
const toIdx = index.get(to);
|
|
36
|
+
if (fromIdx === undefined || toIdx === undefined)
|
|
37
|
+
continue;
|
|
38
|
+
outLinks[fromIdx].push(toIdx);
|
|
39
|
+
}
|
|
40
|
+
// Teleport distribution: uniform, or restricted to (optionally weighted) personalization nodes.
|
|
41
|
+
const teleport = new Float64Array(n);
|
|
42
|
+
const weightedEntries = options.personalization instanceof Map
|
|
43
|
+
? [...options.personalization.entries()]
|
|
44
|
+
: options.personalization
|
|
45
|
+
? [...options.personalization].map((node) => [node, 1])
|
|
46
|
+
: [];
|
|
47
|
+
const personalWeights = weightedEntries
|
|
48
|
+
.map(([node, weight]) => [index.get(node), weight])
|
|
49
|
+
.filter((entry) => entry[0] !== undefined && entry[1] > 0);
|
|
50
|
+
const totalWeight = personalWeights.reduce((sum, [, weight]) => sum + weight, 0);
|
|
51
|
+
if (totalWeight > 0) {
|
|
52
|
+
for (const [i, weight] of personalWeights)
|
|
53
|
+
teleport[i] += weight / totalWeight;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
teleport.fill(1 / n);
|
|
57
|
+
}
|
|
58
|
+
let rank = new Float64Array(n).fill(1 / n);
|
|
59
|
+
for (let iter = 0; iter < maxIterations; iter++) {
|
|
60
|
+
const next = new Float64Array(n);
|
|
61
|
+
// Mass from dangling nodes (no out-edges) is redistributed via the teleport
|
|
62
|
+
// distribution so rank is conserved.
|
|
63
|
+
let danglingMass = 0;
|
|
64
|
+
for (let i = 0; i < n; i++) {
|
|
65
|
+
if (outLinks[i].length === 0)
|
|
66
|
+
danglingMass += rank[i];
|
|
67
|
+
}
|
|
68
|
+
for (let i = 0; i < n; i++) {
|
|
69
|
+
// Teleport component + redistributed dangling mass.
|
|
70
|
+
next[i] = (1 - damping) * teleport[i] + damping * danglingMass * teleport[i];
|
|
71
|
+
}
|
|
72
|
+
for (let i = 0; i < n; i++) {
|
|
73
|
+
const links = outLinks[i];
|
|
74
|
+
if (links.length === 0)
|
|
75
|
+
continue;
|
|
76
|
+
const contribution = (damping * rank[i]) / links.length;
|
|
77
|
+
for (const j of links)
|
|
78
|
+
next[j] += contribution;
|
|
79
|
+
}
|
|
80
|
+
let delta = 0;
|
|
81
|
+
for (let i = 0; i < n; i++)
|
|
82
|
+
delta += Math.abs(next[i] - rank[i]);
|
|
83
|
+
rank = next;
|
|
84
|
+
if (delta < tolerance)
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
nodes.forEach((node, i) => ranks.set(node, rank[i]));
|
|
88
|
+
return ranks;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=pagerank.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagerank.js","sourceRoot":"","sources":["../../src/core/pagerank.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** One bounded, reusable parser process per server. No source is written to disk. */
|
|
2
|
+
export declare class IsolatedParser {
|
|
3
|
+
private options;
|
|
4
|
+
private child;
|
|
5
|
+
private active;
|
|
6
|
+
private queue;
|
|
7
|
+
private timer;
|
|
8
|
+
private nextId;
|
|
9
|
+
private retryAfter;
|
|
10
|
+
private closed;
|
|
11
|
+
constructor(options?: {
|
|
12
|
+
worker?: URL;
|
|
13
|
+
timeoutMs?: number;
|
|
14
|
+
cooldownMs?: number;
|
|
15
|
+
});
|
|
16
|
+
request(operation: "parse" | "validate", content: string, ext: string): Promise<unknown>;
|
|
17
|
+
close(): void;
|
|
18
|
+
private fail;
|
|
19
|
+
private dispatch;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=parser-process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-process.d.ts","sourceRoot":"","sources":["../../src/core/parser-process.ts"],"names":[],"mappings":"AAWA,qFAAqF;AACrF,qBAAa,cAAc;IASb,OAAO,CAAC,OAAO;IAR3B,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,MAAM,CAAS;gBAEH,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,GAAG,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO;IAE3F,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUxF,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,IAAI;IAaZ,OAAO,CAAC,QAAQ;CAuCjB"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { fork } from "node:child_process";
|
|
2
|
+
/** One bounded, reusable parser process per server. No source is written to disk. */
|
|
3
|
+
export class IsolatedParser {
|
|
4
|
+
options;
|
|
5
|
+
child = null;
|
|
6
|
+
active = null;
|
|
7
|
+
queue = [];
|
|
8
|
+
timer = null;
|
|
9
|
+
nextId = 0;
|
|
10
|
+
retryAfter = 0;
|
|
11
|
+
closed = false;
|
|
12
|
+
constructor(options = {}) {
|
|
13
|
+
this.options = options;
|
|
14
|
+
}
|
|
15
|
+
request(operation, content, ext) {
|
|
16
|
+
if (this.closed)
|
|
17
|
+
return Promise.reject(new Error("Parser process is closed."));
|
|
18
|
+
if (Date.now() < this.retryAfter)
|
|
19
|
+
return Promise.reject(new Error("Parser is recovering; structural fallback is available. Retry syntax validation shortly."));
|
|
20
|
+
if (Buffer.byteLength(content) > 8_000_000 || this.queue.length >= 128)
|
|
21
|
+
return Promise.reject(new Error("Parser request exceeds source or queue capacity."));
|
|
22
|
+
return new Promise((resolve, reject) => {
|
|
23
|
+
this.queue.push({ id: ++this.nextId, operation, content, ext, resolve, reject });
|
|
24
|
+
this.dispatch();
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
close() {
|
|
28
|
+
this.closed = true;
|
|
29
|
+
this.fail(new Error("Parser process closed."), false);
|
|
30
|
+
}
|
|
31
|
+
fail(error, warn = true) {
|
|
32
|
+
if (this.timer)
|
|
33
|
+
clearTimeout(this.timer);
|
|
34
|
+
this.timer = null;
|
|
35
|
+
const child = this.child;
|
|
36
|
+
this.child = null;
|
|
37
|
+
child?.kill("SIGKILL");
|
|
38
|
+
this.active?.reject(error);
|
|
39
|
+
this.active = null;
|
|
40
|
+
for (const request of this.queue.splice(0))
|
|
41
|
+
request.reject(error);
|
|
42
|
+
this.retryAfter = Date.now() + (this.options.cooldownMs ?? 5000);
|
|
43
|
+
if (warn)
|
|
44
|
+
process.stderr.write(`[contextpro/parser] ${error.message}; MCP remains available; structural reads can fall back.\n`);
|
|
45
|
+
}
|
|
46
|
+
dispatch() {
|
|
47
|
+
if (this.active || !this.queue.length || this.closed)
|
|
48
|
+
return;
|
|
49
|
+
try {
|
|
50
|
+
if (!this.child) {
|
|
51
|
+
// Configure before V8 starts. Liftoff avoids the optimizing WASM compiler
|
|
52
|
+
// implicated in the crash; isolation contains fatal failures regardless.
|
|
53
|
+
const child = fork(this.options.worker ?? new URL("./parser-worker.js", import.meta.url), [], {
|
|
54
|
+
execArgv: ["--liftoff-only", "--no-wasm-tier-up", "--max-old-space-size=512"],
|
|
55
|
+
stdio: ["ignore", "ignore", "inherit", "ipc"], serialization: "advanced",
|
|
56
|
+
});
|
|
57
|
+
this.child = child;
|
|
58
|
+
child.on("error", error => { if (this.child === child)
|
|
59
|
+
this.fail(error); });
|
|
60
|
+
child.on("exit", (code, signal) => {
|
|
61
|
+
if (this.child === child)
|
|
62
|
+
this.fail(new Error(`Parser worker exited (${signal ?? code})`));
|
|
63
|
+
});
|
|
64
|
+
child.on("message", (message) => {
|
|
65
|
+
if (this.child !== child || !message || typeof message !== "object")
|
|
66
|
+
return;
|
|
67
|
+
const value = message;
|
|
68
|
+
if (!this.active || value.id !== this.active.id)
|
|
69
|
+
return;
|
|
70
|
+
if (this.timer)
|
|
71
|
+
clearTimeout(this.timer);
|
|
72
|
+
this.timer = null;
|
|
73
|
+
const request = this.active;
|
|
74
|
+
this.active = null;
|
|
75
|
+
if (value.error)
|
|
76
|
+
request.reject(new Error(value.error));
|
|
77
|
+
else
|
|
78
|
+
request.resolve(value.result);
|
|
79
|
+
if (this.queue.length)
|
|
80
|
+
this.dispatch();
|
|
81
|
+
else {
|
|
82
|
+
child.unref();
|
|
83
|
+
child.channel?.unref();
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
const request = this.queue.shift();
|
|
88
|
+
this.active = request;
|
|
89
|
+
const child = this.child;
|
|
90
|
+
child.ref();
|
|
91
|
+
child.channel?.ref();
|
|
92
|
+
this.timer = setTimeout(() => this.fail(new Error("Parser request timed out")), this.options.timeoutMs ?? 15000);
|
|
93
|
+
child.send({ id: request.id, operation: request.operation, content: request.content, ext: request.ext }, error => {
|
|
94
|
+
if (error && this.child === child)
|
|
95
|
+
this.fail(error);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
this.fail(error instanceof Error ? error : new Error(String(error)));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=parser-process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-process.js","sourceRoot":"","sources":["../../src/core/parser-process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-worker.d.ts","sourceRoot":"","sources":["../../src/core/parser-worker.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { parseWithTreeSitter, validateSyntax } from "./tree-sitter-runtime.js";
|
|
2
|
+
process.on("disconnect", () => process.exit(0));
|
|
3
|
+
process.on("message", async (message) => {
|
|
4
|
+
try {
|
|
5
|
+
const result = message.operation === "parse"
|
|
6
|
+
? await parseWithTreeSitter(message.content, message.ext)
|
|
7
|
+
: message.operation === "validate" ? await validateSyntax(message.content, message.ext)
|
|
8
|
+
: null;
|
|
9
|
+
if (process.connected)
|
|
10
|
+
process.send?.({ id: message.id, result });
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
if (process.connected)
|
|
14
|
+
process.send?.({ id: message.id, error: error instanceof Error ? error.message : String(error) });
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=parser-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-worker.js","sourceRoot":"","sources":["../../src/core/parser-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/E,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,OAAwE,EAAE,EAAE;IACvG,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,KAAK,OAAO;YAC1C,CAAC,CAAC,MAAM,mBAAmB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC;YACzD,CAAC,CAAC,OAAO,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC;gBACvF,CAAC,CAAC,IAAI,CAAC;QACT,IAAI,OAAO,CAAC,SAAS;YAAE,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,SAAS;YAAE,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3H,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export declare enum SymbolKind {
|
|
2
|
+
Function = "function",
|
|
3
|
+
Class = "class",
|
|
4
|
+
Method = "method",
|
|
5
|
+
Enum = "enum",
|
|
6
|
+
Interface = "interface",
|
|
7
|
+
Struct = "struct",
|
|
8
|
+
Type = "type",
|
|
9
|
+
Trait = "trait",
|
|
10
|
+
Const = "const",
|
|
11
|
+
Variable = "variable",
|
|
12
|
+
Export = "export"
|
|
13
|
+
}
|
|
14
|
+
export interface CodeSymbol {
|
|
15
|
+
name: string;
|
|
16
|
+
kind: SymbolKind;
|
|
17
|
+
line: number;
|
|
18
|
+
endLine: number;
|
|
19
|
+
signature: string;
|
|
20
|
+
children: CodeSymbol[];
|
|
21
|
+
/** Exact UTF-16 offsets in the original source, when supplied by a structural parser. */
|
|
22
|
+
startIndex?: number;
|
|
23
|
+
endIndex?: number;
|
|
24
|
+
/** Multiple declared bindings share this span; destructive edits must refuse it. */
|
|
25
|
+
sharedDeclaration?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface SymbolLocation {
|
|
28
|
+
name: string;
|
|
29
|
+
kind: SymbolKind;
|
|
30
|
+
line: number;
|
|
31
|
+
endLine: number;
|
|
32
|
+
signature: string;
|
|
33
|
+
parentName?: string;
|
|
34
|
+
/** Index into the same flattened array of this symbol's parent, if nested. Always < this entry's own index. */
|
|
35
|
+
parentIndex?: number;
|
|
36
|
+
}
|
|
37
|
+
export interface FileAnalysis {
|
|
38
|
+
path: string;
|
|
39
|
+
header: string;
|
|
40
|
+
symbols: CodeSymbol[];
|
|
41
|
+
lineCount: number;
|
|
42
|
+
}
|
|
43
|
+
export declare function analyzeFile(filePath: string): Promise<FileAnalysis>;
|
|
44
|
+
/**
|
|
45
|
+
* Analyze already-loaded source text under a logical path. Same logic as
|
|
46
|
+
* analyzeFile but without touching disk — lets callers parse content that isn't a
|
|
47
|
+
* working-tree file (e.g. an old git blob for semantic_diff).
|
|
48
|
+
*/
|
|
49
|
+
export declare function analyzeContent(filePath: string, raw: string): Promise<FileAnalysis>;
|
|
50
|
+
export declare function formatSymbol(sym: CodeSymbol, indent?: number): string;
|
|
51
|
+
export declare function isSupportedFile(filePath: string): boolean;
|
|
52
|
+
export interface ImportDeclaration {
|
|
53
|
+
source: string;
|
|
54
|
+
specifiers: string[];
|
|
55
|
+
type: "static" | "dynamic" | "re-export";
|
|
56
|
+
line: number;
|
|
57
|
+
}
|
|
58
|
+
export declare function extractImports(content: string, filePath: string): ImportDeclaration[];
|
|
59
|
+
export interface CallSite {
|
|
60
|
+
callee: string;
|
|
61
|
+
line: number;
|
|
62
|
+
context: string;
|
|
63
|
+
}
|
|
64
|
+
export declare function extractCallSites(content: string, filePath?: string): CallSite[];
|
|
65
|
+
export declare function flattenSymbols(symbols: CodeSymbol[], parentName?: string, parentIndex?: number, out?: SymbolLocation[]): SymbolLocation[];
|
|
66
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"AASA,oBAAY,UAAU;IACpB,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+GAA+G;IAC/G,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAubD,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAGzE;AA6BD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAoEzF;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM,CAcxE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIzD;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;CACd;AA8BD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAgFrF;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAiBD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CA4B/E;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,UAAU,EAAE,EACrB,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,GAAG,GAAE,cAAc,EAAO,GACzB,cAAc,EAAE,CAiBlB"}
|