gitnexus 1.6.8-rc.8 → 1.6.8
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/README.md +3 -3
- package/dist/_shared/graph/types.d.ts +31 -1
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/language-detection.d.ts.map +1 -1
- package/dist/_shared/language-detection.js +11 -1
- package/dist/_shared/language-detection.js.map +1 -1
- package/dist/_shared/lbug/schema-constants.d.ts +1 -1
- package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
- package/dist/_shared/lbug/schema-constants.js +6 -0
- package/dist/_shared/lbug/schema-constants.js.map +1 -1
- package/dist/_shared/scope-resolution/parsed-file.d.ts +21 -0
- package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/symbol-definition.d.ts +6 -0
- package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +31 -1
- package/dist/cli/ai-context.js +18 -16
- package/dist/cli/analyze-config.js +11 -0
- package/dist/cli/analyze.d.ts +14 -0
- package/dist/cli/analyze.js +98 -0
- package/dist/cli/embedding-dims.d.ts +33 -0
- package/dist/cli/embedding-dims.js +39 -0
- package/dist/cli/eval-server.d.ts +8 -0
- package/dist/cli/eval-server.js +242 -2
- package/dist/cli/help-i18n.js +19 -0
- package/dist/cli/i18n/en.d.ts +15 -1
- package/dist/cli/i18n/en.js +15 -1
- package/dist/cli/i18n/resources.d.ts +29 -1
- package/dist/cli/i18n/zh-CN.d.ts +14 -0
- package/dist/cli/i18n/zh-CN.js +15 -1
- package/dist/cli/index.js +89 -1
- package/dist/cli/mcp.d.ts +6 -1
- package/dist/cli/mcp.js +26 -1
- package/dist/cli/optional-grammars.d.ts +6 -8
- package/dist/cli/optional-grammars.js +8 -11
- package/dist/cli/setup.d.ts +3 -1
- package/dist/cli/setup.js +67 -17
- package/dist/cli/skill-gen.js +2 -1
- package/dist/cli/tool.d.ts +19 -1
- package/dist/cli/tool.js +96 -3
- package/dist/core/embeddings/hf-env.d.ts +0 -66
- package/dist/core/embeddings/http-client.d.ts +7 -0
- package/dist/core/embeddings/http-client.js +5 -3
- package/dist/core/embeddings/server-mapping.d.ts +1 -1
- package/dist/core/embeddings/server-mapping.js +7 -3
- package/dist/core/graph/import-cycles.d.ts +10 -0
- package/dist/core/graph/import-cycles.js +103 -0
- package/dist/core/group/cross-impact.d.ts +2 -1
- package/dist/core/group/cross-impact.js +5 -1
- package/dist/core/group/extractors/grpc-patterns/proto.js +10 -6
- package/dist/core/group/extractors/http-patterns/kotlin.js +7 -7
- package/dist/core/group/extractors/http-route-extractor.d.ts +24 -0
- package/dist/core/group/extractors/http-route-extractor.js +22 -4
- package/dist/core/group/extractors/include-extractor.js +22 -13
- package/dist/core/group/sync.d.ts +27 -1
- package/dist/core/group/sync.js +0 -0
- package/dist/core/incremental/subgraph-extract.js +18 -1
- package/dist/core/ingestion/cfg/cfg-builder.d.ts +114 -0
- package/dist/core/ingestion/cfg/cfg-builder.js +196 -0
- package/dist/core/ingestion/cfg/collect.d.ts +51 -0
- package/dist/core/ingestion/cfg/collect.js +77 -0
- package/dist/core/ingestion/cfg/control-dependence.d.ts +58 -0
- package/dist/core/ingestion/cfg/control-dependence.js +182 -0
- package/dist/core/ingestion/cfg/control-flow-context.d.ts +106 -0
- package/dist/core/ingestion/cfg/control-flow-context.js +124 -0
- package/dist/core/ingestion/cfg/emit.d.ts +293 -0
- package/dist/core/ingestion/cfg/emit.js +646 -0
- package/dist/core/ingestion/cfg/post-dominators.d.ts +79 -0
- package/dist/core/ingestion/cfg/post-dominators.js +176 -0
- package/dist/core/ingestion/cfg/reaching-def-reason-codec.d.ts +106 -0
- package/dist/core/ingestion/cfg/reaching-def-reason-codec.js +133 -0
- package/dist/core/ingestion/cfg/reaching-defs-graph.d.ts +18 -0
- package/dist/core/ingestion/cfg/reaching-defs-graph.js +312 -0
- package/dist/core/ingestion/cfg/reaching-defs.d.ts +162 -0
- package/dist/core/ingestion/cfg/reaching-defs.js +785 -0
- package/dist/core/ingestion/cfg/synthetic-escape.d.ts +124 -0
- package/dist/core/ingestion/cfg/synthetic-escape.js +300 -0
- package/dist/core/ingestion/cfg/traversal-result.d.ts +20 -0
- package/dist/core/ingestion/cfg/traversal-result.js +2 -0
- package/dist/core/ingestion/cfg/types.d.ts +274 -0
- package/dist/core/ingestion/cfg/types.js +13 -0
- package/dist/core/ingestion/cfg/visitors/c-cpp-harvest.d.ts +111 -0
- package/dist/core/ingestion/cfg/visitors/c-cpp-harvest.js +541 -0
- package/dist/core/ingestion/cfg/visitors/c-cpp.d.ts +74 -0
- package/dist/core/ingestion/cfg/visitors/c-cpp.js +584 -0
- package/dist/core/ingestion/cfg/visitors/call-site-harvest.d.ts +195 -0
- package/dist/core/ingestion/cfg/visitors/call-site-harvest.js +350 -0
- package/dist/core/ingestion/cfg/visitors/csharp-harvest.d.ts +124 -0
- package/dist/core/ingestion/cfg/visitors/csharp-harvest.js +589 -0
- package/dist/core/ingestion/cfg/visitors/csharp.d.ts +87 -0
- package/dist/core/ingestion/cfg/visitors/csharp.js +867 -0
- package/dist/core/ingestion/cfg/visitors/dart-harvest.d.ts +278 -0
- package/dist/core/ingestion/cfg/visitors/dart-harvest.js +870 -0
- package/dist/core/ingestion/cfg/visitors/dart.d.ts +119 -0
- package/dist/core/ingestion/cfg/visitors/dart.js +836 -0
- package/dist/core/ingestion/cfg/visitors/go-harvest.d.ts +160 -0
- package/dist/core/ingestion/cfg/visitors/go-harvest.js +621 -0
- package/dist/core/ingestion/cfg/visitors/go.d.ts +108 -0
- package/dist/core/ingestion/cfg/visitors/go.js +638 -0
- package/dist/core/ingestion/cfg/visitors/java-harvest.d.ts +108 -0
- package/dist/core/ingestion/cfg/visitors/java-harvest.js +513 -0
- package/dist/core/ingestion/cfg/visitors/java.d.ts +101 -0
- package/dist/core/ingestion/cfg/visitors/java.js +812 -0
- package/dist/core/ingestion/cfg/visitors/kotlin-harvest.d.ts +253 -0
- package/dist/core/ingestion/cfg/visitors/kotlin-harvest.js +719 -0
- package/dist/core/ingestion/cfg/visitors/kotlin.d.ts +121 -0
- package/dist/core/ingestion/cfg/visitors/kotlin.js +809 -0
- package/dist/core/ingestion/cfg/visitors/php-harvest.d.ts +172 -0
- package/dist/core/ingestion/cfg/visitors/php-harvest.js +626 -0
- package/dist/core/ingestion/cfg/visitors/php.d.ts +96 -0
- package/dist/core/ingestion/cfg/visitors/php.js +721 -0
- package/dist/core/ingestion/cfg/visitors/python-harvest.d.ts +212 -0
- package/dist/core/ingestion/cfg/visitors/python-harvest.js +739 -0
- package/dist/core/ingestion/cfg/visitors/python.d.ts +103 -0
- package/dist/core/ingestion/cfg/visitors/python.js +558 -0
- package/dist/core/ingestion/cfg/visitors/ruby-harvest.d.ts +223 -0
- package/dist/core/ingestion/cfg/visitors/ruby-harvest.js +587 -0
- package/dist/core/ingestion/cfg/visitors/ruby.d.ts +112 -0
- package/dist/core/ingestion/cfg/visitors/ruby.js +756 -0
- package/dist/core/ingestion/cfg/visitors/rust-harvest.d.ts +324 -0
- package/dist/core/ingestion/cfg/visitors/rust-harvest.js +873 -0
- package/dist/core/ingestion/cfg/visitors/rust.d.ts +95 -0
- package/dist/core/ingestion/cfg/visitors/rust.js +558 -0
- package/dist/core/ingestion/cfg/visitors/scope-tree-harvest.d.ts +87 -0
- package/dist/core/ingestion/cfg/visitors/scope-tree-harvest.js +116 -0
- package/dist/core/ingestion/cfg/visitors/swift-harvest.d.ts +255 -0
- package/dist/core/ingestion/cfg/visitors/swift-harvest.js +679 -0
- package/dist/core/ingestion/cfg/visitors/swift.d.ts +116 -0
- package/dist/core/ingestion/cfg/visitors/swift.js +787 -0
- package/dist/core/ingestion/cfg/visitors/typescript-harvest.d.ts +149 -0
- package/dist/core/ingestion/cfg/visitors/typescript-harvest.js +1056 -0
- package/dist/core/ingestion/cfg/visitors/typescript.d.ts +66 -0
- package/dist/core/ingestion/cfg/visitors/typescript.js +583 -0
- package/dist/core/ingestion/import-resolvers/utils.js +2 -0
- package/dist/core/ingestion/language-provider.d.ts +23 -2
- package/dist/core/ingestion/languages/c-cpp.js +17 -5
- package/dist/core/ingestion/languages/cobol.js +4 -0
- package/dist/core/ingestion/languages/cpp/arity-metadata.js +41 -2
- package/dist/core/ingestion/languages/cpp/captures.js +50 -1
- package/dist/core/ingestion/languages/cpp/conversion-rank.d.ts +2 -0
- package/dist/core/ingestion/languages/cpp/conversion-rank.js +89 -0
- package/dist/core/ingestion/languages/cpp/header-scan.d.ts +1 -1
- package/dist/core/ingestion/languages/cpp/header-scan.js +2 -2
- package/dist/core/ingestion/languages/cpp/inline-namespaces.js +7 -2
- package/dist/core/ingestion/languages/cpp/member-lookup.js +2 -1
- package/dist/core/ingestion/languages/cpp/query.js +23 -0
- package/dist/core/ingestion/languages/cpp/scope-resolver.js +2 -1
- package/dist/core/ingestion/languages/csharp.js +2 -0
- package/dist/core/ingestion/languages/dart.js +2 -0
- package/dist/core/ingestion/languages/go.js +2 -0
- package/dist/core/ingestion/languages/java.js +3 -0
- package/dist/core/ingestion/languages/kotlin/query.js +3 -2
- package/dist/core/ingestion/languages/kotlin.js +8 -1
- package/dist/core/ingestion/languages/php.js +2 -0
- package/dist/core/ingestion/languages/python.js +2 -0
- package/dist/core/ingestion/languages/ruby.js +2 -0
- package/dist/core/ingestion/languages/rust.js +2 -0
- package/dist/core/ingestion/languages/swift.js +2 -0
- package/dist/core/ingestion/languages/typescript.js +5 -0
- package/dist/core/ingestion/languages/vue.js +6 -0
- package/dist/core/ingestion/method-extractors/configs/c-cpp.js +6 -13
- package/dist/core/ingestion/method-extractors/generic.js +1 -0
- package/dist/core/ingestion/method-types.d.ts +2 -0
- package/dist/core/ingestion/model/symbol-table.d.ts +1 -0
- package/dist/core/ingestion/model/symbol-table.js +1 -0
- package/dist/core/ingestion/mro-processor.js +109 -0
- package/dist/core/ingestion/parsing-processor.js +44 -0
- package/dist/core/ingestion/pipeline-phases/call-summaries.d.ts +26 -0
- package/dist/core/ingestion/pipeline-phases/call-summaries.js +46 -0
- package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
- package/dist/core/ingestion/pipeline-phases/index.js +2 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +0 -21
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +18 -1
- package/dist/core/ingestion/pipeline-phases/routes.d.ts +10 -0
- package/dist/core/ingestion/pipeline-phases/routes.js +30 -1
- package/dist/core/ingestion/pipeline-phases/taint-summaries.d.ts +30 -0
- package/dist/core/ingestion/pipeline-phases/taint-summaries.js +81 -0
- package/dist/core/ingestion/pipeline.d.ts +92 -10
- package/dist/core/ingestion/pipeline.js +11 -2
- package/dist/core/ingestion/scope-extractor.js +12 -2
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +9 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +75 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +67 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +12 -2
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +14 -2
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +6 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +13 -1
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +9 -1
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +28 -2
- package/dist/core/ingestion/scope-resolution/passes/overload-narrowing.d.ts +4 -0
- package/dist/core/ingestion/scope-resolution/passes/overload-narrowing.js +9 -0
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +6 -1
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +174 -40
- package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +24 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +276 -190
- package/dist/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +43 -3
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +75 -0
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +349 -1
- package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +1 -1
- package/dist/core/ingestion/taint/call-summary-codec.d.ts +75 -0
- package/dist/core/ingestion/taint/call-summary-codec.js +128 -0
- package/dist/core/ingestion/taint/call-summary-emit.d.ts +43 -0
- package/dist/core/ingestion/taint/call-summary-emit.js +70 -0
- package/dist/core/ingestion/taint/call-summary-harvest.d.ts +77 -0
- package/dist/core/ingestion/taint/call-summary-harvest.js +179 -0
- package/dist/core/ingestion/taint/call-summary-model.d.ts +47 -0
- package/dist/core/ingestion/taint/call-summary-model.js +25 -0
- package/dist/core/ingestion/taint/emit.d.ts +125 -0
- package/dist/core/ingestion/taint/emit.js +208 -0
- package/dist/core/ingestion/taint/interproc-emit.d.ts +50 -0
- package/dist/core/ingestion/taint/interproc-emit.js +88 -0
- package/dist/core/ingestion/taint/interproc-solver.d.ts +110 -0
- package/dist/core/ingestion/taint/interproc-solver.js +312 -0
- package/dist/core/ingestion/taint/match.d.ts +153 -0
- package/dist/core/ingestion/taint/match.js +278 -0
- package/dist/core/ingestion/taint/path-codec.d.ts +134 -0
- package/dist/core/ingestion/taint/path-codec.js +190 -0
- package/dist/core/ingestion/taint/propagate.d.ts +216 -0
- package/dist/core/ingestion/taint/propagate.js +659 -0
- package/dist/core/ingestion/taint/site-safety.d.ts +29 -0
- package/dist/core/ingestion/taint/site-safety.js +98 -0
- package/dist/core/ingestion/taint/source-sink-config.d.ts +107 -23
- package/dist/core/ingestion/taint/source-sink-config.js +35 -12
- package/dist/core/ingestion/taint/source-sink-registry.d.ts +6 -4
- package/dist/core/ingestion/taint/source-sink-registry.js +6 -4
- package/dist/core/ingestion/taint/summary-harvest-driver.d.ts +80 -0
- package/dist/core/ingestion/taint/summary-harvest-driver.js +179 -0
- package/dist/core/ingestion/taint/summary-harvest.d.ts +89 -0
- package/dist/core/ingestion/taint/summary-harvest.js +537 -0
- package/dist/core/ingestion/taint/summary-model.d.ts +200 -0
- package/dist/core/ingestion/taint/summary-model.js +86 -0
- package/dist/core/ingestion/taint/typescript-model.d.ts +38 -0
- package/dist/core/ingestion/taint/typescript-model.js +102 -0
- package/dist/core/ingestion/type-extractors/c-cpp.js +21 -0
- package/dist/core/ingestion/utils/env.d.ts +7 -0
- package/dist/core/ingestion/utils/env.js +12 -0
- package/dist/core/ingestion/utils/method-props.js +1 -0
- package/dist/core/ingestion/workers/clone-safety.d.ts +109 -0
- package/dist/core/ingestion/workers/clone-safety.js +465 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +23 -0
- package/dist/core/ingestion/workers/parse-worker.js +81 -53
- package/dist/core/ingestion/workers/post-result.d.ts +22 -0
- package/dist/core/ingestion/workers/post-result.js +87 -0
- package/dist/core/ingestion/workers/result-merge.d.ts +20 -0
- package/dist/core/ingestion/workers/result-merge.js +43 -0
- package/dist/core/ingestion/workers/worker-pool.d.ts +15 -40
- package/dist/core/ingestion/workers/worker-pool.js +43 -16
- package/dist/core/lbug/csv-generator.d.ts +51 -3
- package/dist/core/lbug/csv-generator.js +369 -255
- package/dist/core/lbug/lbug-adapter.d.ts +58 -18
- package/dist/core/lbug/lbug-adapter.js +346 -84
- package/dist/core/lbug/lbug-config.d.ts +19 -0
- package/dist/core/lbug/lbug-config.js +29 -0
- package/dist/core/lbug/pdg-emit-sink.d.ts +127 -0
- package/dist/core/lbug/pdg-emit-sink.js +358 -0
- package/dist/core/lbug/pool-adapter.d.ts +35 -0
- package/dist/core/lbug/pool-adapter.js +90 -1
- package/dist/core/lbug/rel-pair-routing.d.ts +54 -0
- package/dist/core/lbug/rel-pair-routing.js +140 -0
- package/dist/core/lbug/schema.d.ts +2 -2
- package/dist/core/lbug/schema.js +3 -0
- package/dist/core/logger.d.ts +0 -5
- package/dist/core/run-analyze.d.ts +96 -0
- package/dist/core/run-analyze.js +207 -3
- package/dist/core/tree-sitter/parser-loader.js +5 -4
- package/dist/core/tree-sitter/safe-parse.d.ts +0 -5
- package/dist/core/tree-sitter/vendored-grammars.d.ts +39 -0
- package/dist/core/tree-sitter/vendored-grammars.js +57 -0
- package/dist/core/wiki/generator.js +3 -1
- package/dist/core/wiki/graph-queries.d.ts +6 -0
- package/dist/core/wiki/graph-queries.js +9 -1
- package/dist/mcp/http-transport.d.ts +134 -0
- package/dist/mcp/http-transport.js +503 -0
- package/dist/mcp/local/local-backend.d.ts +110 -24
- package/dist/mcp/local/local-backend.js +1225 -19
- package/dist/mcp/local/pdg-impact.d.ts +384 -0
- package/dist/mcp/local/pdg-impact.js +1972 -0
- package/dist/mcp/resources.js +13 -1
- package/dist/mcp/tools.d.ts +12 -0
- package/dist/mcp/tools.js +214 -7
- package/dist/server/analyze-launch.d.ts +29 -0
- package/dist/server/analyze-launch.js +137 -0
- package/dist/server/analyze-upload.d.ts +33 -0
- package/dist/server/analyze-upload.js +123 -0
- package/dist/server/analyze-worker-ipc.d.ts +58 -0
- package/dist/server/analyze-worker-ipc.js +16 -0
- package/dist/server/analyze-worker.d.ts +17 -1
- package/dist/server/analyze-worker.js +7 -1
- package/dist/server/api.d.ts +17 -0
- package/dist/server/api.js +132 -168
- package/dist/server/git-clone.d.ts +43 -2
- package/dist/server/git-clone.js +211 -16
- package/dist/server/mcp-http.d.ts +5 -6
- package/dist/server/mcp-http.js +9 -82
- package/dist/server/middleware.d.ts +40 -0
- package/dist/server/middleware.js +92 -0
- package/dist/server/private-ip.d.ts +1 -0
- package/dist/server/private-ip.js +15 -0
- package/dist/server/upload-ingest.d.ts +56 -0
- package/dist/server/upload-ingest.js +276 -0
- package/dist/server/upload-paths.d.ts +37 -0
- package/dist/server/upload-paths.js +57 -0
- package/dist/server/upload-sweep.d.ts +20 -0
- package/dist/server/upload-sweep.js +57 -0
- package/dist/storage/git.js +5 -8
- package/dist/storage/parse-cache.d.ts +22 -1
- package/dist/storage/parse-cache.js +44 -10
- package/dist/storage/repo-manager.d.ts +121 -10
- package/dist/storage/repo-manager.js +43 -5
- package/dist/types/pipeline.d.ts +9 -0
- package/hooks/antigravity/gitnexus-antigravity-hook.cjs +110 -10
- package/hooks/claude/gitnexus-hook.cjs +110 -13
- package/hooks/claude/hook-db-lock-probe.cjs +513 -26
- package/package.json +8 -2
- package/scripts/assert-publish-grammar-coverage.cjs +31 -0
- package/scripts/build-tree-sitter-grammars.cjs +16 -10
- package/scripts/cross-platform-tests.ts +1 -0
- package/skills/gitnexus-debugging.md +16 -4
- package/skills/gitnexus-exploring.md +3 -3
- package/skills/gitnexus-guide.md +33 -0
- package/skills/gitnexus-pdg-query.md +89 -0
- package/skills/gitnexus-refactoring.md +1 -1
- package/skills/gitnexus-taint-analysis.md +178 -0
- package/vendor/tree-sitter-c/package.json +1 -1
- package/vendor/tree-sitter-dart/package.json +1 -1
- package/vendor/tree-sitter-kotlin/package.json +1 -1
- package/vendor/tree-sitter-proto/package.json +1 -1
- package/vendor/tree-sitter-swift/package.json +1 -1
- package/web/assets/{agent-CKPMqImC.js → agent-D3Xd7zZE.js} +123 -123
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-DxJw65fT.js +1 -0
- package/web/assets/architectureDiagram-UL44E2DR-ChH9xW-N.js +36 -0
- package/web/assets/{blockDiagram-7IZFK4PR-B4niSLvR.js → blockDiagram-7IZFK4PR-BkWhpzWB.js} +1 -1
- package/web/assets/{c4Diagram-Y2BXMSZH-DIzEXalR.js → c4Diagram-Y2BXMSZH-DtBvpzWD.js} +1 -1
- package/web/assets/{chunk-3SSMPTDK-BzGeeheI.js → chunk-3SSMPTDK-B4_etUhr.js} +2 -2
- package/web/assets/{chunk-5IMINLNL-CnTLsXIV.js → chunk-5IMINLNL-DOdTeQri.js} +1 -1
- package/web/assets/{chunk-5VCL7Z4A-w1BCx98Z.js → chunk-5VCL7Z4A-CQ-2dYWj.js} +1 -1
- package/web/assets/chunk-6764PJDD-DpIS7hxD.js +1 -0
- package/web/assets/{chunk-67TQ5CYL-CChC2cAv.js → chunk-67TQ5CYL-4sNPJU1q.js} +3 -3
- package/web/assets/{chunk-7W6UQGC5-CgFyfZ6k.js → chunk-7W6UQGC5-KyEG0HQg.js} +1 -1
- package/web/assets/{chunk-AZZRMDJM-5E9ARdDQ.js → chunk-AZZRMDJM-y-xJBuMz.js} +1 -1
- package/web/assets/{chunk-INKRHTLW-ELpfuk9h.js → chunk-INKRHTLW-Nu4ri9P-.js} +1 -1
- package/web/assets/{chunk-JQRUD6KW-Dcq_Qnyy.js → chunk-JQRUD6KW-Dbva2Z17.js} +1 -1
- package/web/assets/{chunk-KGFNY3KK-W-VR57xb.js → chunk-KGFNY3KK-JGMJvKCK.js} +1 -1
- package/web/assets/chunk-KGYTTC2M-CWC_c3H9.js +161 -0
- package/web/assets/{chunk-KNLZD3CH-BuZBOcso.js → chunk-KNLZD3CH-BGlP6X9R.js} +1 -1
- package/web/assets/{chunk-KRXBNO2N-DH2NPM7I.js → chunk-KRXBNO2N-BW5o0KUN.js} +1 -1
- package/web/assets/{chunk-LCXTWHL2-Dfmux4m1.js → chunk-LCXTWHL2-zoomRtWX.js} +1 -1
- package/web/assets/{chunk-LII3EMHJ-3X33tCpU.js → chunk-LII3EMHJ-D-jm-dLa.js} +1 -1
- package/web/assets/{chunk-QA3QBVWF-D5Ha3GgB.js → chunk-QA3QBVWF-BgRW3SXd.js} +1 -1
- package/web/assets/{chunk-RG4AUYOV-CAkzcoRj.js → chunk-RG4AUYOV-DD0B2N2B.js} +1 -1
- package/web/assets/{chunk-T2UQINTJ-kGYG7ppP.js → chunk-T2UQINTJ-DSBqkzH7.js} +1 -1
- package/web/assets/chunk-T5OCTHI4-DdZvN-9i.js +1 -0
- package/web/assets/{chunk-UY5QBCOK-Du-c56gs.js → chunk-UY5QBCOK-DyF0vyGd.js} +1 -1
- package/web/assets/{chunk-W44A43WB-lrCpuupA.js → chunk-W44A43WB-JqMLIpR0.js} +1 -1
- package/web/assets/{chunk-ZXARS5L4-CSZRiyOf.js → chunk-ZXARS5L4-CxN8oiwI.js} +1 -1
- package/web/assets/classDiagram-KGZ6W3CR-DJm9BgF-.js +1 -0
- package/web/assets/classDiagram-v2-72OJOZXJ-DJm9BgF-.js +1 -0
- package/web/assets/{context-builder-_HS0v2ma.js → context-builder-BHiFUA8O.js} +10 -2
- package/web/assets/{cose-bilkent-UX7MHV2Q-BHv2bbtl.js → cose-bilkent-UX7MHV2Q-D71wNYRJ.js} +1 -1
- package/web/assets/dagre-ND4H6XIP-BIkxmhcu.js +4 -0
- package/web/assets/diagram-3NCE3AQN-BTa6iH0T.js +43 -0
- package/web/assets/diagram-GF46GFSD-DZDV0vBj.js +24 -0
- package/web/assets/{diagram-HNR7UZ2L-fUWreZzx.js → diagram-HNR7UZ2L-DFCfd5LI.js} +2 -2
- package/web/assets/diagram-QXG6HAR7-BzM--Jj0.js +24 -0
- package/web/assets/diagram-WEQXMOUZ-DFFwz0k4.js +10 -0
- package/web/assets/{erDiagram-L5TCEMPS-QN2eEP1e.js → erDiagram-L5TCEMPS-CfHMJJqo.js} +1 -1
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-BQm9QzEa.js +1 -0
- package/web/assets/{flowDiagram-H6V6AXG4-CXbXImlN.js → flowDiagram-H6V6AXG4-Be805QiJ.js} +3 -3
- package/web/assets/{ganttDiagram-JCBTUEKG-BHQssTz6.js → ganttDiagram-JCBTUEKG-D3iL2Aet.js} +1 -1
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-Cr_Bm2Nb.js +1 -0
- package/web/assets/gitGraphDiagram-S2ZK5IYY-CPIDgxGm.js +106 -0
- package/web/assets/index-BvYev1UJ.js +635 -0
- package/web/assets/index-_lgn7hs5.css +2 -0
- package/web/assets/info-J43DQDTF-KCYPFFUO-Cs4p2oyk.js +1 -0
- package/web/assets/infoDiagram-3YFTVSEB-Y7BKSoke.js +2 -0
- package/web/assets/{ishikawaDiagram-BNXS4ZKH-6LKOvBfp.js → ishikawaDiagram-BNXS4ZKH-CT4SHFuI.js} +1 -1
- package/web/assets/{journeyDiagram-M6C3CM3L-DNPYCpvq.js → journeyDiagram-M6C3CM3L-CvArszLo.js} +1 -1
- package/web/assets/{kanban-definition-75IXJCU3-DgDi9oJT.js → kanban-definition-75IXJCU3-C6yDxr7N.js} +3 -3
- package/web/assets/{katex-K3KEBU37-CrVLz8l7.js → katex-K3KEBU37-CTc5BslQ.js} +1 -1
- package/web/assets/{mindmap-definition-2TDM6QVE-CwR5sBB-.js → mindmap-definition-2TDM6QVE-BOc2WEne.js} +1 -1
- package/web/assets/packet-YPE3B663-LP52Z2RK-CKCrztD2.js +1 -0
- package/web/assets/pie-LRSECV5Y-TCRJHUBD-BB7pHqoD.js +1 -0
- package/web/assets/{pieDiagram-CU6KROY3-By8g6f6B.js → pieDiagram-CU6KROY3-Cvc0f_Pd.js} +1 -1
- package/web/assets/{quadrantDiagram-VICAPDV7-bAm6Hi_5.js → quadrantDiagram-VICAPDV7-yXSZ2lLz.js} +1 -1
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DhoTOcuK.js +1 -0
- package/web/assets/{requirementDiagram-JXO7QTGE-7oDcJ1_J.js → requirementDiagram-JXO7QTGE-BRcZvHs4.js} +1 -1
- package/web/assets/{sankeyDiagram-URQDO5SZ-LFJz53u5.js → sankeyDiagram-URQDO5SZ-1qEjlFIB.js} +1 -1
- package/web/assets/{sequenceDiagram-VS2MUI6T-FySeKCUy.js → sequenceDiagram-VS2MUI6T-PcSCuvrB.js} +3 -3
- package/web/assets/stateDiagram-7D4R322I-D6qYSV1E.js +1 -0
- package/web/assets/stateDiagram-v2-36443NZ5-Bg-ImOSX.js +1 -0
- package/web/assets/{timeline-definition-O6YCAMPW-Ds2CnVZK.js → timeline-definition-O6YCAMPW-QWkh01xw.js} +1 -1
- package/web/assets/treeView-BLDUP644-QA4HXRO3-ODehyGKL.js +1 -0
- package/web/assets/treemap-LRROVOQU-LLAWBHMP-BfpgC-7o.js +1 -0
- package/web/assets/{vennDiagram-MWXL3ELB-DUIEwXWp.js → vennDiagram-MWXL3ELB-ak4DfwuM.js} +3 -3
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-CNeL6VHE.js +1 -0
- package/web/assets/{wardleyDiagram-CUQ6CDDI-DEiFPQih.js → wardleyDiagram-CUQ6CDDI-CTzR4Loq.js} +1 -1
- package/web/assets/{xychartDiagram-N2JHSOCM-BUbayhST.js → xychartDiagram-N2JHSOCM-DA1BEaQz.js} +1 -1
- package/web/index.html +13 -15
- package/scripts/materialize-vendor-grammars.cjs +0 -97
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-BETj2x4g.js +0 -1
- package/web/assets/architectureDiagram-UL44E2DR-D1EXI0zA.js +0 -36
- package/web/assets/chunk-2T2R6R2M-n6s9JZqv.js +0 -4
- package/web/assets/chunk-2UTLFMKG-CMBB1TMN.js +0 -1
- package/web/assets/chunk-4R4BOZG6-mKhL59ul.js +0 -159
- package/web/assets/chunk-6764PJDD-ChwMM2z4.js +0 -1
- package/web/assets/chunk-7J6CGLKN-DT-b53FT.js +0 -10
- package/web/assets/chunk-C62D2QBJ-CDAWj26E.js +0 -1
- package/web/assets/chunk-CEXFNPSA-D68Tk6ls.js +0 -1
- package/web/assets/chunk-CilyBKbf.js +0 -1
- package/web/assets/chunk-J5EP6P6S-DxWW0yvu.js +0 -1
- package/web/assets/chunk-KGYTTC2M-C6PHeuay.js +0 -1
- package/web/assets/chunk-RERM46MO-DQNbXtfw.js +0 -1
- package/web/assets/chunk-RKZBBQEN-BmTPLSyv.js +0 -1
- package/web/assets/chunk-RLI5ZMPA-DExu2DOK.js +0 -1
- package/web/assets/chunk-T5OCTHI4--9wWpVws.js +0 -1
- package/web/assets/chunk-UP6H54XL-DsKdC6jC.js +0 -1
- package/web/assets/chunk-UXSXWOXI-DR81EqLr.js +0 -1
- package/web/assets/classDiagram-KGZ6W3CR-Bv93af_b.js +0 -1
- package/web/assets/classDiagram-v2-72OJOZXJ-CLfEqHUa.js +0 -1
- package/web/assets/dagre-ND4H6XIP-DsIr9MOv.js +0 -4
- package/web/assets/diagram-3NCE3AQN-BqAtKUpW.js +0 -43
- package/web/assets/diagram-GF46GFSD-CaBG6n6o.js +0 -24
- package/web/assets/diagram-QXG6HAR7-CZ-O3rcV.js +0 -24
- package/web/assets/diagram-WEQXMOUZ-P4lSL4GH.js +0 -10
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-B3myHUst.js +0 -1
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DF3rtf4A.js +0 -1
- package/web/assets/gitGraphDiagram-S2ZK5IYY-CCwVLT__.js +0 -106
- package/web/assets/index-BKWA-m7o.css +0 -2
- package/web/assets/index-CG6q8eTs.js +0 -626
- package/web/assets/info-J43DQDTF-KCYPFFUO-R4XV_akJ.js +0 -1
- package/web/assets/infoDiagram-3YFTVSEB-DmLICZx1.js +0 -2
- package/web/assets/packet-YPE3B663-LP52Z2RK-CgQPdNZa.js +0 -1
- package/web/assets/pie-LRSECV5Y-TCRJHUBD-BzWOwc_c.js +0 -1
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-B7KG0FN7.js +0 -1
- package/web/assets/stateDiagram-7D4R322I-CB2nABwH.js +0 -1
- package/web/assets/stateDiagram-v2-36443NZ5-COBGd2RL.js +0 -1
- package/web/assets/treeView-BLDUP644-QA4HXRO3-CRSxEwLO.js +0 -1
- package/web/assets/treemap-LRROVOQU-LLAWBHMP-a0PfKoVn.js +0 -1
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-BKQ6e5mC.js +0 -1
- /package/web/assets/{chunk-AQ6EADP3-CCFje6lL.js → chunk-AQ6EADP3-CZhslHi-.js} +0 -0
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PDG-backed impact helpers.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `local-backend.ts` so LocalBackend owns dispatch/repo lifecycle
|
|
5
|
+
* while this module owns the PDG layer probe, statement traversal, block
|
|
6
|
+
* projection, and result assembly contract.
|
|
7
|
+
*/
|
|
8
|
+
import type { executeParameterized } from '../../core/lbug/pool-adapter.js';
|
|
9
|
+
import { loadMeta } from '../../storage/repo-manager.js';
|
|
10
|
+
/**
|
|
11
|
+
* Parse the `<fnLine>` segment out of a `BasicBlock` id (1-based function start
|
|
12
|
+
* line). The id template is
|
|
13
|
+
* `BasicBlock:<filePath>:<fnLine>:<fnCol>:<blockIdx>`
|
|
14
|
+
* and `<filePath>` may itself contain `':'` (a Windows drive letter), so the
|
|
15
|
+
* segments are taken from the RIGHT: `<blockIdx>` is last, `<fnCol>` second-last,
|
|
16
|
+
* `<fnLine>` third-last. Extracted from the `_pdgQueryImpl` closure (#2086) into
|
|
17
|
+
* a shared module-scope helper so the PDG impact traversal (U3/U4) reuses the
|
|
18
|
+
* exact same parse — the `pdg_query` read path is byte-identical to before.
|
|
19
|
+
*/
|
|
20
|
+
export declare function fnLineOf(id: string): number;
|
|
21
|
+
/**
|
|
22
|
+
* Split a tab-joined ({@link CALLEE_ID_SEP}) `BasicBlock.calleeIds` cell into its resolved callee
|
|
23
|
+
* symbol ids, dropping the truncation sentinel (a capped block carries the
|
|
24
|
+
* sentinel to mark an incomplete call-site list; it is NOT a resolved symbol id
|
|
25
|
+
* and must never enter a `has(realId)` set). Empty/whitespace cells yield no ids.
|
|
26
|
+
*
|
|
27
|
+
* Extracted here (U1) so the two callers — `LocalBackend.calleeIdsOfBlocks` (the
|
|
28
|
+
* statement-precise bridge key) and the inter-procedural descent's
|
|
29
|
+
* `calleeIdsFromCalleeRows` — cannot diverge on the split-and-drop-sentinel
|
|
30
|
+
* logic. Both consume rows of `BasicBlock.calleeIds`; this is the single source.
|
|
31
|
+
*/
|
|
32
|
+
export declare function splitCalleeIds(raw: unknown): string[];
|
|
33
|
+
/**
|
|
34
|
+
* Contract version of the mode:'pdg' impact result shape. A stable discriminator
|
|
35
|
+
* for external MCP/agent consumers — distinct from the DB INCREMENTAL_SCHEMA_VERSION.
|
|
36
|
+
* Bump on any breaking change to the PDG result fields.
|
|
37
|
+
*/
|
|
38
|
+
export declare const PDG_RESULT_VERSION: 1;
|
|
39
|
+
/** A reachable dependence block resolved to its source statement. */
|
|
40
|
+
export interface PdgStatement {
|
|
41
|
+
/** 1-based source line where the statement's block starts. */
|
|
42
|
+
line: number;
|
|
43
|
+
/** Repo-relative file path (parsed from the block id). */
|
|
44
|
+
filePath: string;
|
|
45
|
+
/** The statement's source text (BasicBlock.text), trimmed. */
|
|
46
|
+
text: string;
|
|
47
|
+
/**
|
|
48
|
+
* Whether the statement belongs to the criterion's OWN function (`'intra'`)
|
|
49
|
+
* or was reached across a call boundary (`'inter'`). A block is `'intra'`
|
|
50
|
+
* iff its owning-fn file AND 1-based owning-fn start line both match the
|
|
51
|
+
* criterion's — `fnFileOf(id) === criterionFile && fnLineOf(id) === ownerFnLine`.
|
|
52
|
+
* Projection-only tag (FU-A): NOT persisted, NOT a schema field. The bench
|
|
53
|
+
* intra axis scopes to `'intra'` statements so U1's cross-function reach
|
|
54
|
+
* stops being counted as intra-axis false positives; existing consumers
|
|
55
|
+
* ignore it.
|
|
56
|
+
*/
|
|
57
|
+
scope: 'intra' | 'inter';
|
|
58
|
+
}
|
|
59
|
+
export interface PdgImpactTarget {
|
|
60
|
+
name: string;
|
|
61
|
+
id?: string;
|
|
62
|
+
type?: string;
|
|
63
|
+
filePath?: string;
|
|
64
|
+
}
|
|
65
|
+
export interface PdgImpactParityFields {
|
|
66
|
+
byDepth: Record<number, unknown[]>;
|
|
67
|
+
byDepthCounts: Record<number, number>;
|
|
68
|
+
summary: {
|
|
69
|
+
direct: number;
|
|
70
|
+
processes_affected: number;
|
|
71
|
+
modules_affected: number;
|
|
72
|
+
};
|
|
73
|
+
affected_processes: unknown[];
|
|
74
|
+
affected_modules: unknown[];
|
|
75
|
+
}
|
|
76
|
+
export type PdgImpactEvidence = 'local-dependence' | 'owner-projection' | 'callgraph-bridge' | 'unproven-bridge' | 'degraded';
|
|
77
|
+
export interface PdgImpactEvidenceSummary {
|
|
78
|
+
statements?: PdgImpactEvidence;
|
|
79
|
+
localSymbols?: PdgImpactEvidence;
|
|
80
|
+
interprocedural?: PdgImpactEvidence;
|
|
81
|
+
localSymbolCount?: number;
|
|
82
|
+
unresolvedBlockCount?: number;
|
|
83
|
+
ambiguousProjectionCount?: number;
|
|
84
|
+
interproceduralEvidenceCounts?: Partial<Record<PdgImpactEvidence, number>>;
|
|
85
|
+
}
|
|
86
|
+
export interface PdgInterproceduralImpact {
|
|
87
|
+
engine: 'symbol-graph';
|
|
88
|
+
evidence: Extract<PdgImpactEvidence, 'callgraph-bridge' | 'unproven-bridge'>;
|
|
89
|
+
impactedCount: number;
|
|
90
|
+
byDepthCounts: Record<number, number>;
|
|
91
|
+
byDepth: Record<number, unknown[]>;
|
|
92
|
+
evidenceCounts?: Partial<Record<PdgImpactEvidence, number>>;
|
|
93
|
+
/**
|
|
94
|
+
* Statement-precise (proven) subset of `byDepth` — additive. Tighter than
|
|
95
|
+
* `byDepth` for a line-seeded downstream slice (drops `unproven-bridge`
|
|
96
|
+
* symbols not invoked from the dependence slice), equal to it otherwise.
|
|
97
|
+
* `statementPrecision` = |proven| / |reach| (null when there is no reach).
|
|
98
|
+
*/
|
|
99
|
+
statementPreciseByDepth?: Record<number, unknown[]>;
|
|
100
|
+
statementPreciseByDepthCounts?: Record<number, number>;
|
|
101
|
+
statementPreciseImpactedCount?: number;
|
|
102
|
+
statementPrecision?: number | null;
|
|
103
|
+
partial: boolean;
|
|
104
|
+
}
|
|
105
|
+
export interface PdgImpactBaseResult extends PdgImpactParityFields {
|
|
106
|
+
mode: 'pdg';
|
|
107
|
+
/** Contract version of the mode:'pdg' impact result shape; bump on any breaking change to the PDG result fields. */
|
|
108
|
+
pdgResultVersion: 1;
|
|
109
|
+
target: PdgImpactTarget;
|
|
110
|
+
direction: 'upstream' | 'downstream';
|
|
111
|
+
impactedCount: number;
|
|
112
|
+
risk: 'UNKNOWN';
|
|
113
|
+
note?: string;
|
|
114
|
+
partial?: boolean;
|
|
115
|
+
interproceduralByDepth?: Record<number, unknown[]>;
|
|
116
|
+
interproceduralByDepthCounts?: Record<number, number>;
|
|
117
|
+
interproceduralEpistemic?: string;
|
|
118
|
+
interproceduralBoundaries?: unknown[];
|
|
119
|
+
interproceduralError?: string;
|
|
120
|
+
pdgInterprocedural?: PdgInterproceduralImpact;
|
|
121
|
+
pdgEvidence?: PdgImpactEvidenceSummary;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Slice-result fields shared verbatim by {@link PdgImpactSuccessResult} and
|
|
125
|
+
* {@link PdgImpactEmptyResult}. Those two differ ONLY in their `epistemic`
|
|
126
|
+
* discriminant (and the narrowed `target`, which must be re-declared on each to
|
|
127
|
+
* override `PdgImpactBaseResult.target`), so every other slice field lives here
|
|
128
|
+
* to keep the two in lockstep — a new slice field is added once, not twice.
|
|
129
|
+
*/
|
|
130
|
+
export interface PdgImpactSliceFields {
|
|
131
|
+
reachableBlocks: string[];
|
|
132
|
+
/**
|
|
133
|
+
* INTRA-procedural reachable subset of `reachableBlocks` (the statement slice
|
|
134
|
+
* BEFORE the U1 inter-procedural descent expanded it). The callgraph bridge
|
|
135
|
+
* keys its "first-hop proven" set on this, NOT the interproc-expanded
|
|
136
|
+
* `reachableBlocks` superset, so statementPrecision keeps its first-hop meaning
|
|
137
|
+
* (FIX 6). Equals `reachableBlocks` when no hop crossed; empty for the
|
|
138
|
+
* no-body / no-block-at-line empty returns.
|
|
139
|
+
*/
|
|
140
|
+
intraReachableBlocks: string[];
|
|
141
|
+
/** The criterion's own seed blocks (changed statement / whole-symbol body). */
|
|
142
|
+
seedBlocks: string[];
|
|
143
|
+
blockCount: number;
|
|
144
|
+
affectedStatements: PdgStatement[];
|
|
145
|
+
affectedStatementCount: number;
|
|
146
|
+
depthReached: number;
|
|
147
|
+
unresolvedBlockCount: number;
|
|
148
|
+
ambiguousProjectionCount: number;
|
|
149
|
+
criterionLine?: number;
|
|
150
|
+
truncated?: boolean;
|
|
151
|
+
truncatedBy?: 'depth' | 'limit';
|
|
152
|
+
truncatedByReasons?: readonly ('depth' | 'limit')[];
|
|
153
|
+
}
|
|
154
|
+
export interface PdgImpactSuccessResult extends PdgImpactBaseResult, PdgImpactSliceFields {
|
|
155
|
+
target: Required<PdgImpactTarget>;
|
|
156
|
+
epistemic: 'pdg-intra-procedural';
|
|
157
|
+
}
|
|
158
|
+
export interface PdgImpactEmptyResult extends PdgImpactBaseResult, PdgImpactSliceFields {
|
|
159
|
+
target: Required<PdgImpactTarget>;
|
|
160
|
+
epistemic: 'no-pdg-body' | 'pdg-no-block-at-line' | 'pdg-intra-procedural';
|
|
161
|
+
}
|
|
162
|
+
export type PdgDegradedLayerState = Exclude<PdgLayerStatus['state'], 'ready'>;
|
|
163
|
+
export type PdgDegradedLayerStatus = PdgLayerStatus & {
|
|
164
|
+
state: PdgDegradedLayerState;
|
|
165
|
+
};
|
|
166
|
+
export interface PdgImpactDegradedResult extends PdgImpactBaseResult {
|
|
167
|
+
pdgLayer: PdgDegradedLayerState;
|
|
168
|
+
missingSubLayer?: PdgSubLayer;
|
|
169
|
+
probeError?: string;
|
|
170
|
+
recoverySuggestion?: string;
|
|
171
|
+
}
|
|
172
|
+
export interface PdgImpactErrorResult {
|
|
173
|
+
mode?: 'pdg';
|
|
174
|
+
/** Contract version of the mode:'pdg' impact result shape; bump on any breaking change to the PDG result fields. */
|
|
175
|
+
pdgResultVersion: 1;
|
|
176
|
+
error: string;
|
|
177
|
+
target: PdgImpactTarget;
|
|
178
|
+
direction: 'upstream' | 'downstream';
|
|
179
|
+
impactedCount: 0;
|
|
180
|
+
risk: 'UNKNOWN';
|
|
181
|
+
suggestion?: string;
|
|
182
|
+
recoverySuggestion?: string;
|
|
183
|
+
}
|
|
184
|
+
export type PdgImpactResult = PdgImpactSuccessResult | PdgImpactEmptyResult | PdgImpactDegradedResult | PdgImpactErrorResult;
|
|
185
|
+
export declare function makePdgImpactErrorResult(input: {
|
|
186
|
+
error: string;
|
|
187
|
+
target: PdgImpactTarget;
|
|
188
|
+
direction: 'upstream' | 'downstream';
|
|
189
|
+
mode?: 'pdg';
|
|
190
|
+
suggestion?: string;
|
|
191
|
+
recoverySuggestion?: string;
|
|
192
|
+
}): PdgImpactErrorResult;
|
|
193
|
+
export declare function isPdgDegradedLayerStatus(layer: PdgLayerStatus): layer is PdgDegradedLayerStatus;
|
|
194
|
+
export declare function makePdgLayerDegradedResult(input: {
|
|
195
|
+
mode: 'pdg';
|
|
196
|
+
target: PdgImpactTarget;
|
|
197
|
+
direction: 'upstream' | 'downstream';
|
|
198
|
+
layer: PdgDegradedLayerStatus;
|
|
199
|
+
}): PdgImpactDegradedResult;
|
|
200
|
+
/** The two impact engines (KTD1). `'callgraph'` is the default/established path. */
|
|
201
|
+
export type ImpactMode = 'callgraph' | 'pdg';
|
|
202
|
+
/**
|
|
203
|
+
* Validate the `impact` `mode` param (KTD5 — backend hard-gate).
|
|
204
|
+
*
|
|
205
|
+
* The MCP JSON-schema `enum` is advisory only (server.ts forwards args
|
|
206
|
+
* unvalidated and `callTool` is reachable directly), so this backend check is
|
|
207
|
+
* the real boundary — mirroring `_pdgQueryImpl`'s `mode` enum validation. A
|
|
208
|
+
* typo'd mode silently running callgraph is exactly the silent fallback this
|
|
209
|
+
* forbids (it would make the accuracy harness compare callgraph-vs-callgraph
|
|
210
|
+
* and report perfect parity).
|
|
211
|
+
*
|
|
212
|
+
* Absent / `undefined` / `'callgraph'` all resolve to `'callgraph'` (the
|
|
213
|
+
* unchanged default path). `'pdg'` is valid. Anything else — `'PDG'`, `'pgd'`,
|
|
214
|
+
* `''`, or a non-string (`0`, `null`, …) — returns a structured `{ error }`,
|
|
215
|
+
* never a callgraph result.
|
|
216
|
+
*/
|
|
217
|
+
export declare function validateImpactMode(rawMode: unknown): {
|
|
218
|
+
mode: ImpactMode;
|
|
219
|
+
} | {
|
|
220
|
+
error: string;
|
|
221
|
+
};
|
|
222
|
+
/** The two independently-stamped PDG sub-layers (KTD7). */
|
|
223
|
+
export type PdgSubLayer = 'CDG' | 'REACHING_DEF';
|
|
224
|
+
/**
|
|
225
|
+
* Four-state PDG-layer presence/degradation status (KTD7).
|
|
226
|
+
*
|
|
227
|
+
* - `'no-layer'` — `meta.pdg` is absent: this repo was never analyzed
|
|
228
|
+
* with `--pdg` (definitive; established with NO DB scan).
|
|
229
|
+
* - `'sub-layer-missing'`— exactly one of the two independently-stamped caps
|
|
230
|
+
* (`maxCdgEdgesPerFunction` / `maxReachingDefEdgesPerFunction`)
|
|
231
|
+
* is present. `impact`'s PDG mode needs BOTH, so a
|
|
232
|
+
* partial layer must not be reported as complete; the
|
|
233
|
+
* missing one is named in `missingSubLayer`.
|
|
234
|
+
* - `'ready'` — both caps present: the layer is fully stamped.
|
|
235
|
+
* - `'unknown'` — meta is unreadable (e.g. a seeded test DB with no
|
|
236
|
+
* `meta.json`). One bounded `LIMIT 1` probe distinguishes
|
|
237
|
+
* a genuinely edge-free index from a missing one; either
|
|
238
|
+
* way the conclusion is inconclusive (a missing layer is
|
|
239
|
+
* indistinguishable from an all-linear one — #2188).
|
|
240
|
+
*/
|
|
241
|
+
export interface PdgLayerStatus {
|
|
242
|
+
state: 'no-layer' | 'sub-layer-missing' | 'ready' | 'unknown';
|
|
243
|
+
/** Set only for `'sub-layer-missing'` — the cap that was NOT stamped. */
|
|
244
|
+
missingSubLayer?: PdgSubLayer;
|
|
245
|
+
/** Human-readable guidance for the degraded states (absent for `'ready'`). */
|
|
246
|
+
note?: string;
|
|
247
|
+
/** Set when an unknown-state probe failed before it could inspect PDG rows. */
|
|
248
|
+
probeError?: string;
|
|
249
|
+
/** Optional operator-facing recovery hint for probe failures. */
|
|
250
|
+
recoverySuggestion?: string;
|
|
251
|
+
/**
|
|
252
|
+
* FU-C return-value-ascent layer presence (read from `meta.pdg.hasCallSummary`).
|
|
253
|
+
* `true` ⇒ CALL_SUMMARY edges exist, so return-value ascent is active. `false`
|
|
254
|
+
* ⇒ a PRE-FU-C (v3) `--pdg` index — the intra slice is unaffected, but the
|
|
255
|
+
* result should NOTE "no return-value ascent (re-index for CALL_SUMMARY)".
|
|
256
|
+
* Meaningful only for the meta-readable states (`'ready'` / `'sub-layer-missing'`
|
|
257
|
+
* / `'no-layer'`); `undefined` for `'unknown'` (meta unreadable). Deliberately
|
|
258
|
+
* NOT part of the `'ready'` gate — a v3 index is still `'ready'` for the slice.
|
|
259
|
+
*/
|
|
260
|
+
hasCallSummary?: boolean;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Project the both-caps PDG meta read down to the single mode-relevant cap that
|
|
264
|
+
* `_pdgQueryImpl` keys on (`controls` → CDG, `flows` → REACHING_DEF), preserving
|
|
265
|
+
* its established tri-state `boolean | undefined` contract byte-for-byte
|
|
266
|
+
* (Feasibility Issue 4):
|
|
267
|
+
* - `false` — meta readable and the relevant cap absent → definitive
|
|
268
|
+
* no-layer (short-circuits before any DB scan).
|
|
269
|
+
* - `true` — meta readable and the relevant cap present → proceed.
|
|
270
|
+
* - `undefined` — meta unreadable → defer to the post-anchored-query probe.
|
|
271
|
+
*
|
|
272
|
+
* `_pdgQueryImpl` needs only ONE cap, so it collapses the both-caps read here
|
|
273
|
+
* rather than consuming `pdgLayerStatus` directly (whose `'unknown'` state does
|
|
274
|
+
* an upfront global probe — wrong timing/order for the anchored-query path).
|
|
275
|
+
*/
|
|
276
|
+
export declare function pdgStampForMode(lbugPath: string, mode: 'controls' | 'flows', loadMetaFn?: typeof loadMeta): Promise<boolean | undefined>;
|
|
277
|
+
/**
|
|
278
|
+
* PDG-layer presence/degradation check for the `impact` PDG mode (KTD7).
|
|
279
|
+
*
|
|
280
|
+
* Returns the four distinct states WITHOUT scanning the DB except for the single
|
|
281
|
+
* bounded `LIMIT 1` probe the `'unknown'` (meta-unreadable) case requires. The
|
|
282
|
+
* caller (`_impactImpl` PDG branch, and the accuracy harness) surfaces a
|
|
283
|
+
* distinct signal per state so a missing `--pdg` layer / partial layer is never
|
|
284
|
+
* silently misread as a confident empty blast radius. Impact needs BOTH the CDG
|
|
285
|
+
* and the REACHING_DEF sub-layer, so a partial stamp degrades, not proceeds.
|
|
286
|
+
*/
|
|
287
|
+
export declare function pdgLayerStatus(deps: {
|
|
288
|
+
lbugPath: string;
|
|
289
|
+
executeParameterized: typeof executeParameterized;
|
|
290
|
+
loadMetaFn?: typeof loadMeta;
|
|
291
|
+
}): Promise<PdgLayerStatus>;
|
|
292
|
+
export interface RunPdgImpactDeps {
|
|
293
|
+
repo: {
|
|
294
|
+
lbugPath: string;
|
|
295
|
+
};
|
|
296
|
+
sym: {
|
|
297
|
+
id: string;
|
|
298
|
+
name: string;
|
|
299
|
+
filePath: string;
|
|
300
|
+
startLine?: number;
|
|
301
|
+
endLine?: number;
|
|
302
|
+
};
|
|
303
|
+
symType: string;
|
|
304
|
+
direction: 'upstream' | 'downstream';
|
|
305
|
+
maxDepth: number;
|
|
306
|
+
limit: number;
|
|
307
|
+
/** Statement anchor (1-based source line). */
|
|
308
|
+
line?: number;
|
|
309
|
+
executeParameterized: typeof executeParameterized;
|
|
310
|
+
/**
|
|
311
|
+
* Whether this index carries the FU-C `CALL_SUMMARY` return-value-ascent layer
|
|
312
|
+
* (from `meta.pdg.hasCallSummary`, read by the caller's `pdgLayerStatus`).
|
|
313
|
+
* `false`/`undefined` ⇒ a PRE-FU-C (v3) `--pdg` index: the intra slice is
|
|
314
|
+
* served unchanged, but the result `note` flags "no return-value ascent
|
|
315
|
+
* (re-index for CALL_SUMMARY)". Defaults to a sound `false` (no false ascent
|
|
316
|
+
* claim) when the caller omits it.
|
|
317
|
+
*/
|
|
318
|
+
callSummaryAvailable?: boolean;
|
|
319
|
+
}
|
|
320
|
+
export declare function runImpactPDG(deps: RunPdgImpactDeps): Promise<PdgImpactResult>;
|
|
321
|
+
type PdgBridgeEvidence = Extract<PdgImpactEvidence, 'callgraph-bridge' | 'unproven-bridge'>;
|
|
322
|
+
export interface PdgBridgeEvidenceInfo {
|
|
323
|
+
evidence: PdgBridgeEvidence;
|
|
324
|
+
basis: string;
|
|
325
|
+
}
|
|
326
|
+
export interface PdgBridgeOptions {
|
|
327
|
+
/**
|
|
328
|
+
* Leaf callee names invoked in the criterion's dependence-slice blocks
|
|
329
|
+
* (`BasicBlock.callees`). A first-hop callee is "proven" statement-precise iff
|
|
330
|
+
* its name is in this set — i.e. it is actually called from a statement the
|
|
331
|
+
* changed line reaches, not merely somewhere in the whole function. Empty/absent
|
|
332
|
+
* ⇒ no statement slice to discriminate (upstream or whole-symbol) ⇒ the symbol
|
|
333
|
+
* graph is used as a compatibility bridge (all callgraph-bridge), preserving
|
|
334
|
+
* callgraph reach.
|
|
335
|
+
*
|
|
336
|
+
* REQUIRED (co-populated with {@link sliceCalleeIds}): `local-backend` builds
|
|
337
|
+
* the bridge by reading BOTH cells from the same slice blocks, so a missing
|
|
338
|
+
* key is an EMPTY set, never `undefined`. Keeping both non-optional is what
|
|
339
|
+
* lets the capped-block sentinel guard below read `sliceCalleeNames` directly
|
|
340
|
+
* (the cap is name-agnostic — a capped block always carries the sentinel here).
|
|
341
|
+
*/
|
|
342
|
+
sliceCalleeNames: ReadonlySet<string>;
|
|
343
|
+
/**
|
|
344
|
+
* Resolved callee symbol ids invoked in the criterion's dependence-slice blocks
|
|
345
|
+
* (`BasicBlock.calleeIds`). This is the SOUND primary key: a first-hop callee is
|
|
346
|
+
* "proven" statement-precise iff its resolved symbol id is in this set, which
|
|
347
|
+
* eliminates same-leaf-name collision (false-positive) and import-alias/rename
|
|
348
|
+
* (false-negative) — failure modes the name set cannot distinguish. Empty/absent
|
|
349
|
+
* ⇒ no captured ids (pre-v3 index / upstream / whole-symbol) ⇒ fall back to the
|
|
350
|
+
* leaf-name match (`sliceCalleeNames`). REQUIRED (co-populated with
|
|
351
|
+
* {@link sliceCalleeNames}) — an empty set means "no ids", never `undefined`.
|
|
352
|
+
*/
|
|
353
|
+
sliceCalleeIds: ReadonlySet<string>;
|
|
354
|
+
}
|
|
355
|
+
export declare function pdgBridgeEvidenceForImpact(input: {
|
|
356
|
+
bridge: PdgBridgeOptions;
|
|
357
|
+
depth: number;
|
|
358
|
+
calleeName: unknown;
|
|
359
|
+
calleeId?: unknown;
|
|
360
|
+
inherited?: PdgBridgeEvidenceInfo;
|
|
361
|
+
}): PdgBridgeEvidenceInfo;
|
|
362
|
+
/**
|
|
363
|
+
* Pick the stronger of two bridge-evidence verdicts for the same reached symbol.
|
|
364
|
+
* `callgraph-bridge` (proven) beats `unproven-bridge`, so a node reachable from
|
|
365
|
+
* multiple parents is proven if ANY parent proves it. This makes the
|
|
366
|
+
* proven/unproven label order-independent of DB row iteration — a diamond-reached
|
|
367
|
+
* symbol gets the same label regardless of which parent the BFS visits first
|
|
368
|
+
* (PR #2227 tri-review, P3).
|
|
369
|
+
*/
|
|
370
|
+
export declare function betterBridgeEvidence(existing: PdgBridgeEvidenceInfo | undefined, candidate: PdgBridgeEvidenceInfo): PdgBridgeEvidenceInfo;
|
|
371
|
+
/**
|
|
372
|
+
* Compose `mode:'pdg'` into one user-facing impact result:
|
|
373
|
+
*
|
|
374
|
+
* - `affectedStatements` / `reachableBlocks` stay owned by the persisted PDG
|
|
375
|
+
* layer (CDG + REACHING_DEF), preserving the statement-level intra result.
|
|
376
|
+
* - `interproceduralByDepth` / `pdgInterprocedural` expose the symbol reach;
|
|
377
|
+
* `byDepth` stays as the compatibility symbol bucket so existing consumers
|
|
378
|
+
* still see one PDG result shape.
|
|
379
|
+
*
|
|
380
|
+
* The callgraph option remains available as the comparator/default path; this
|
|
381
|
+
* helper only changes the `pdg` result contract from intra-only to unified.
|
|
382
|
+
*/
|
|
383
|
+
export declare function composeUnifiedPdgImpactResult(pdgResult: PdgImpactResult, interproceduralResult: any | null, interproceduralError?: unknown): PdgImpactResult;
|
|
384
|
+
export {};
|