gitnexus 1.6.8-rc.9 → 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 +11 -0
- package/dist/core/ingestion/languages/c-cpp.js +6 -1
- 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 +3 -0
- 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 +23 -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/parse-worker.d.ts +13 -0
- package/dist/core/ingestion/workers/parse-worker.js +76 -17
- package/dist/core/ingestion/workers/worker-pool.d.ts +9 -40
- package/dist/core/ingestion/workers/worker-pool.js +15 -2
- 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.d.ts +17 -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 +41 -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,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cfg/emit.ts (issue #2081, M1) — serialized side-channel → graph.
|
|
3
|
+
*
|
|
4
|
+
* Pure helper: given a file's per-function CFGs (off `ParsedFile.cfgSideChannel`,
|
|
5
|
+
* produced by the worker in U3), emit one persisted `BasicBlock` node per block
|
|
6
|
+
* and one `CFG` edge per edge into the {@link KnowledgeGraph}. Invoked from
|
|
7
|
+
* scope-resolution (run.ts Phase 4) while the disk-backed ParsedFile store is
|
|
8
|
+
* still live — the only window where the worker-built CFGs are loaded (KTD1/
|
|
9
|
+
* KTD5). Default (`--pdg` off) runs never call this, so the emitted graph stays
|
|
10
|
+
* byte-identical to a pre-#2081 run.
|
|
11
|
+
*
|
|
12
|
+
* BasicBlock id: `BasicBlock:<filePath>:<functionStartLine>:<functionStartColumn>:<blockIndex>`
|
|
13
|
+
* (KTD3). The function start line+column segments disambiguate blocks across
|
|
14
|
+
* multiple functions in one file — including same-line functions — since each
|
|
15
|
+
* function's block indices restart at 0; blocks carry no `name` (the
|
|
16
|
+
* BasicBlock table has no such column). The edge KIND
|
|
17
|
+
* (`seq`/`cond-true`/…) rides in the relationship `reason` — CFG edges are
|
|
18
|
+
* values of the single `CodeRelation` table's `type` column (`'CFG'`), so the
|
|
19
|
+
* kind cannot be its own edge type and is queried via `reason`.
|
|
20
|
+
*/
|
|
21
|
+
import type { KnowledgeGraph } from '../../graph/types.js';
|
|
22
|
+
import { type ReachingDefsSolver } from './reaching-defs.js';
|
|
23
|
+
import type { BasicBlockData, BindingEntry, FunctionCfg } from './types.js';
|
|
24
|
+
/**
|
|
25
|
+
* Reserved token placed in `BasicBlock.callees` when a statement's call sites
|
|
26
|
+
* were truncated at {@link DEFAULT_PDG_MAX_SITES_PER_STATEMENT}: the recorded
|
|
27
|
+
* callee list is then INCOMPLETE, so over-cap callees are absent. `*` is not a
|
|
28
|
+
* valid identifier leaf, so it cannot collide with a real callee name. The
|
|
29
|
+
* impact bridge treats a slice containing this sentinel as "callees unknown" and
|
|
30
|
+
* keeps reach callgraph-equal (proven), rather than falsely labeling an
|
|
31
|
+
* absent-but-real callee `unproven-bridge`.
|
|
32
|
+
*/
|
|
33
|
+
export declare const CALLEES_TRUNCATED_SENTINEL = "*";
|
|
34
|
+
/**
|
|
35
|
+
* Inner separator for the `BasicBlock.calleeIds` cell (resolved callee symbol
|
|
36
|
+
* ids). A TAB is used — NOT a space — because resolved ids embed `filePath` and
|
|
37
|
+
* C++ overload shape tags with multi-word primitive types (e.g. `unsigned char`,
|
|
38
|
+
* `long double`), so an id can legitimately contain a space; a space-joined cell
|
|
39
|
+
* then fragments on read and silently drops inter-procedural reach to that
|
|
40
|
+
* callee (#2227 tri-review). A tab cannot appear in a tree-sitter-derived id
|
|
41
|
+
* token (paths/identifiers/type tokens are tab-free) and round-trips intact
|
|
42
|
+
* through `escapeCSVField` (tab is in its preserved set) and the RFC-4180 COPY
|
|
43
|
+
* reader (every cell is quoted). Producer ({@link calleeIdsOfBlock}) and
|
|
44
|
+
* consumer (`splitCalleeIds`) import this single constant so they cannot drift.
|
|
45
|
+
* The sibling `callees` (leaf-name) cell stays space-joined — leaf names are
|
|
46
|
+
* bare identifiers and never contain a space.
|
|
47
|
+
*/
|
|
48
|
+
export declare const CALLEE_ID_SEP = "\t";
|
|
49
|
+
/**
|
|
50
|
+
* Default per-function CFG edge cap. A pathological generated function could
|
|
51
|
+
* otherwise emit an unbounded edge set; the cap bounds graph growth and is
|
|
52
|
+
* overridable via `--pdg` options. `0` (in options) means no cap (unlimited
|
|
53
|
+
* — see the `cap` mapping in {@link emitFileCfgs}); `undefined` means this
|
|
54
|
+
* default.
|
|
55
|
+
*/
|
|
56
|
+
export declare const DEFAULT_MAX_CFG_EDGES_PER_FUNCTION = 5000;
|
|
57
|
+
/**
|
|
58
|
+
* Default per-function REACHING_DEF edge cap (#2082 M2 KTD9). 4000 mirrors
|
|
59
|
+
* Joern's per-method `maxNumberOfDefinitions` — the closest production prior
|
|
60
|
+
* art — but truncates-and-warns instead of silently skipping the function.
|
|
61
|
+
* Counts (defBlock, useBlock, binding) DEDUPED edges, not statement-level
|
|
62
|
+
* facts. `0` ⇒ unlimited; `undefined` ⇒ this default.
|
|
63
|
+
*/
|
|
64
|
+
export declare const DEFAULT_PDG_MAX_REACHING_DEF_EDGES_PER_FUNCTION = 4000;
|
|
65
|
+
/**
|
|
66
|
+
* Default per-function CDG edge cap (#2085 M5). CDG edge count is bounded by
|
|
67
|
+
* (blocks × control-nesting-depth) — comparable to the CFG edge count — so it
|
|
68
|
+
* reuses the CFG default of 5000. Counts DEDUPED (controller, dependent, label)
|
|
69
|
+
* edges (the pure {@link computeControlDependence} already dedups). `0` ⇒
|
|
70
|
+
* unlimited; `undefined` ⇒ this default. Folded into the `RepoMeta.pdg` stamp
|
|
71
|
+
* (U5) so introducing CDG forces a full writeback for pre-CDG `--pdg` indexes.
|
|
72
|
+
*/
|
|
73
|
+
export declare const DEFAULT_PDG_MAX_CDG_EDGES_PER_FUNCTION = 5000;
|
|
74
|
+
/**
|
|
75
|
+
* Heap-safety ceiling on {@link computeControlDependence}'s pre-dedup
|
|
76
|
+
* materialization (#2188 review). The walk is O(edges × post-dom depth), and its
|
|
77
|
+
* `out` IS the deduped-edge quantity the per-function cap trims — so, UNLIKE
|
|
78
|
+
* REACHING_DEF's facts ceiling, this is deliberately NOT derived from the
|
|
79
|
+
* runtime edge cap (doing so would pre-truncate the very set the cap reports on,
|
|
80
|
+
* losing the exact dropped count). A fixed, generous multiple of the default
|
|
81
|
+
* edge cap: far above any real function — a catastrophe backstop only. When hit,
|
|
82
|
+
* the per-function cap reporting plus the `truncated` flag keep it observable
|
|
83
|
+
* (never a silent drop).
|
|
84
|
+
*/
|
|
85
|
+
export declare const DEFAULT_PDG_MAX_CDG_MATERIALIZATION_PER_FUNCTION: number;
|
|
86
|
+
/**
|
|
87
|
+
* Env flag that additionally emits diagnostic `POST_DOMINATE` edges
|
|
88
|
+
* (block → its immediate post-dominator) alongside CDG (#2085 M5 KTD8). Off in
|
|
89
|
+
* every normal `--pdg` run — these are for inspecting the post-dom tree, not a
|
|
90
|
+
* queryable product surface. Accepts `1`/`true` (case-insensitive).
|
|
91
|
+
*/
|
|
92
|
+
export declare const POST_DOMINATE_DEBUG_ENV = "GITNEXUS_PDG_EMIT_POST_DOMINATE";
|
|
93
|
+
/**
|
|
94
|
+
* Fact-materialization headroom over the edge cap (#2082 M2 U3/F3): facts are
|
|
95
|
+
* O(defs×uses) BY SPEC in merge-heavy code, and the edge cap alone bounds the
|
|
96
|
+
* GRAPH, not the per-function memory spike of materializing facts before
|
|
97
|
+
* dedup. {@link emitFileReachingDefs} hands `edgeCap × this` to
|
|
98
|
+
* `computeReachingDefs` as `maxFacts` (unlimited when the edge cap is 0) —
|
|
99
|
+
* single source of truth; the DEFAULT constant below is derived, never the
|
|
100
|
+
* mechanism.
|
|
101
|
+
*/
|
|
102
|
+
export declare const REACHING_DEF_FACTS_PER_EDGE_CAP = 4;
|
|
103
|
+
/** Derived emit-path fact limit at the default edge cap (bench/doc anchor). */
|
|
104
|
+
export declare const DEFAULT_PDG_MAX_REACHING_DEF_FACTS_PER_FUNCTION: number;
|
|
105
|
+
/**
|
|
106
|
+
* Fixpoint-iteration budget for {@link computeReachingDefs}, as a multiple of
|
|
107
|
+
* the function's block count ({@link emitFileReachingDefs} passes
|
|
108
|
+
* `blocks.length × this` as `maxBlockVisits`). Iterative reaching-defs on a
|
|
109
|
+
* reducible CFG converges in O(loop-nesting-depth) passes, so a worklist
|
|
110
|
+
* re-visits each block a small multiple of times for real code; this budget
|
|
111
|
+
* tolerates a nesting depth far beyond any hand-written function (real code is
|
|
112
|
+
* ≤ ~15 deep) while truncating the pathological deep nest that otherwise drives
|
|
113
|
+
* the solver to O(blocks²) — measured at seconds + GB on a machine-generated
|
|
114
|
+
* 2000-line all-loops function whose fact count stays linear (so `maxFacts`
|
|
115
|
+
* never fires). Truncation degrades to a sound empty REACHING_DEF for that one
|
|
116
|
+
* function (status `truncated`), never wrong facts.
|
|
117
|
+
*
|
|
118
|
+
* As of #2201 this ceiling is an adversarial-only backstop that effectively
|
|
119
|
+
* never fires on real code: the production solver auto-selects the SSA-sparse
|
|
120
|
+
* path for the looping functions that would breach it, and the SSA path has no
|
|
121
|
+
* fixpoint iteration (it answers reaching queries from the def-use graph in one
|
|
122
|
+
* pass) so it computes the full facts where the dense worklist would have
|
|
123
|
+
* truncated. The budget is still consulted on the dense fallback path (small /
|
|
124
|
+
* loop-free functions, and throw-edge / unreachable-block functions the SSA path
|
|
125
|
+
* does not model). WTO / loop-aware iteration ordering was benchmarked and
|
|
126
|
+
* rejected (0% faster — the cost was dense-set propagation, not visitation
|
|
127
|
+
* order); SSA-sparse was the real fix. See reaching-defs.ts.
|
|
128
|
+
*/
|
|
129
|
+
export declare const DEFAULT_PDG_MAX_REACHING_DEF_BLOCK_REVISITS = 64;
|
|
130
|
+
export interface CfgEmitResult {
|
|
131
|
+
blocks: number;
|
|
132
|
+
edges: number;
|
|
133
|
+
/** Edges dropped because a function's edge count exceeded the cap. */
|
|
134
|
+
droppedEdges: number;
|
|
135
|
+
/** Number of functions that hit the cap. */
|
|
136
|
+
cappedFunctions: number;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* The single BasicBlock id template (module doc). Exported for the M3 taint
|
|
140
|
+
* emit path (taint/emit.ts), whose TAINTED/SANITIZES edges must address the
|
|
141
|
+
* SAME persisted block nodes — a re-derived copy of this template would
|
|
142
|
+
* silently dangle the moment either drifted.
|
|
143
|
+
*/
|
|
144
|
+
export declare const basicBlockId: (filePath: string, functionStartLine: number, functionStartColumn: number, blockIndex: number) => string;
|
|
145
|
+
/**
|
|
146
|
+
* Whether an untrusted `cfgSideChannel` element is safe to feed to
|
|
147
|
+
* {@link emitFileCfgs}. Deliberately NOT full FunctionCfg validation — it
|
|
148
|
+
* checks exactly the fields whose corruption is SILENT given emit's
|
|
149
|
+
* mechanics: {@link basicBlockId} string-templates every id-anchor value
|
|
150
|
+
* (filePath, function start line/column, block index, edge endpoints) and
|
|
151
|
+
* the graph's addNode/addRelationship are no-throw Map inserts. Unchecked,
|
|
152
|
+
* a missing anchor field cross-wires same-`undefined`-id blocks across
|
|
153
|
+
* functions (addNode is first-writer-wins), and an edge endpoint that
|
|
154
|
+
* matches no block index becomes a dangling `BasicBlock:…:<n>` edge that
|
|
155
|
+
* detonates much later at DB bulk-load instead of throwing here — so
|
|
156
|
+
* endpoints are checked for MEMBERSHIP in the block-index set, not just
|
|
157
|
+
* integer-ness. Lives in this module so the guard evolves with the id
|
|
158
|
+
* templating it defends (#2099 F4; M2 fields that join the id path must
|
|
159
|
+
* join this check).
|
|
160
|
+
*/
|
|
161
|
+
export declare const isEmitSafeCfg: (cfg: FunctionCfg | undefined | null) => cfg is FunctionCfg;
|
|
162
|
+
/**
|
|
163
|
+
* Whether a structurally-valid CFG's M2 statement facts are safe to feed to
|
|
164
|
+
* the reaching-defs solver + REACHING_DEF id templating (#2082 U1/U4): the
|
|
165
|
+
* binding table's name/declLine/declColumn template into edge ids, and
|
|
166
|
+
* statement def/use indices must stay IN RANGE of the table (an escaping
|
|
167
|
+
* index would fabricate `undefined`-keyed ids). Deliberately SEPARATE from
|
|
168
|
+
* {@link isEmitSafeCfg}: malformed facts must cost only the function's
|
|
169
|
+
* REACHING_DEF projection — degrading to M1 behavior (CFG emitted, no facts)
|
|
170
|
+
* — never the BasicBlock/CFG layer itself.
|
|
171
|
+
*/
|
|
172
|
+
export declare const hasEmitSafeFacts: (cfg: FunctionCfg) => boolean;
|
|
173
|
+
/**
|
|
174
|
+
* Emit BasicBlock nodes + CFG edges for every function CFG in `cfgs`.
|
|
175
|
+
*
|
|
176
|
+
* `maxEdgesPerFunction` caps edges per function. On overflow we stop emitting
|
|
177
|
+
* that function's remaining edges and call `onWarn` naming the dropped count —
|
|
178
|
+
* no silent truncation (KTD6/R6). Block nodes are always fully emitted (their
|
|
179
|
+
* count is bounded by the function's statement count); only edges are capped.
|
|
180
|
+
*/
|
|
181
|
+
/**
|
|
182
|
+
* Space-joined, sorted, de-duplicated leaf callee names invoked directly in a
|
|
183
|
+
* block (`call`/`new` sites; the leaf of a dotted path — `child_process.exec` ⇒
|
|
184
|
+
* `exec`). This is the persisted substrate for statement-precise inter-procedural
|
|
185
|
+
* impact: a callee reached from a function is "proven" to be impacted by a
|
|
186
|
+
* changed statement iff its name appears in the callees of a block in that
|
|
187
|
+
* statement's dependence slice. `sites` is harvested only for TS/JS under `--pdg`
|
|
188
|
+
* (and absent on synthetic ENTRY/EXIT), so the field is empty elsewhere and the
|
|
189
|
+
* bridge degrades to the prior (callgraph-equal) behavior. Space-joined because
|
|
190
|
+
* leaf names are identifiers (no spaces) and the field is itself one CSV cell.
|
|
191
|
+
*/
|
|
192
|
+
export declare function calleesOfBlock(block: BasicBlockData): string;
|
|
193
|
+
/**
|
|
194
|
+
* Tab-joined ({@link CALLEE_ID_SEP}), sorted, de-duplicated RESOLVED callee symbol ids invoked
|
|
195
|
+
* directly in a block — the SOUND parallel to {@link calleesOfBlock}'s leaf
|
|
196
|
+
* names (#2227 follow-up plan U3, KTD1/KTD2/KTD7). Each block site's call-site
|
|
197
|
+
* anchor `at` (U1) is joined by EXACT position to the per-file resolved-id map
|
|
198
|
+
* `fileMap` (U2's `(line,col) → Set<calleeId>`), so a callee reached from a
|
|
199
|
+
* function is proven impacted by a changed statement iff its resolved id — not
|
|
200
|
+
* just its leaf NAME — appears in a slice block's `calleeIds`. This eliminates
|
|
201
|
+
* the same-leaf-name collision (false-proven) and import-alias (false-unproven)
|
|
202
|
+
* the name predicate suffers on overloading languages.
|
|
203
|
+
*
|
|
204
|
+
* The site partitioning is inherited verbatim from {@link calleesOfBlock}: the
|
|
205
|
+
* SAME `member-read`-skip and the SAME per-statement site cap (R7) — a capped
|
|
206
|
+
* statement adds {@link CALLEES_TRUNCATED_SENTINEL} so the bridge keeps the
|
|
207
|
+
* block callee-unknown for ids too (callgraph-equal rather than under-proving).
|
|
208
|
+
* Because `at` is the SAME anchor the CALLS resolution keyed `atRange` on
|
|
209
|
+
* (KTD7), the join lands on exactly the sites the name harvest partitioned,
|
|
210
|
+
* including the nested-function exclusion (so a single-line inline closure's
|
|
211
|
+
* inner call never leaks its id into the outer block).
|
|
212
|
+
*
|
|
213
|
+
* `fileMap` is the resolved-id map for THIS file (`calleeIdAccumulator.get(
|
|
214
|
+
* filePath)` in run.ts). Absent (pdg off, or a file with no captured CALLS) ⇒
|
|
215
|
+
* `''` — the bridge then degrades to the leaf-name fallback (R3). A site whose
|
|
216
|
+
* `at` is absent (pre-U1 channel) or whose position is not in the map
|
|
217
|
+
* contributes no id (graceful, never throws).
|
|
218
|
+
*/
|
|
219
|
+
export declare function calleeIdsOfBlock(block: BasicBlockData, fileMap: ReadonlyMap<string, ReadonlySet<string>> | undefined): string;
|
|
220
|
+
export declare function emitFileCfgs(graph: KnowledgeGraph, cfgs: readonly FunctionCfg[], maxEdgesPerFunction?: number, onWarn?: (message: string) => void, calleeIdMap?: ReadonlyMap<string, ReadonlySet<string>>): CfgEmitResult;
|
|
221
|
+
export interface ReachingDefEmitResult {
|
|
222
|
+
/** Deduped (defBlock, useBlock, binding) edges persisted. */
|
|
223
|
+
edges: number;
|
|
224
|
+
/** Deduped edges dropped by the per-function edge cap. */
|
|
225
|
+
droppedEdges: number;
|
|
226
|
+
cappedFunctions: number;
|
|
227
|
+
/** Functions whose FACT materialization hit the solver's maxFacts limit. */
|
|
228
|
+
truncatedFunctions: number;
|
|
229
|
+
/** Functions whose facts failed {@link hasEmitSafeFacts} (CFG kept, facts skipped). */
|
|
230
|
+
malformedFactFunctions: number;
|
|
231
|
+
/** Total statement-level facts the solver produced (pre-dedup telemetry). */
|
|
232
|
+
facts: number;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Stable identity for a binding inside edge ids (#2082 M2 KTD3/KTD9):
|
|
236
|
+
* `name:declLine:declCol` for declared bindings, `name@module` for synthetic
|
|
237
|
+
* ones. Distinct same-name bindings never share a key; identifier characters
|
|
238
|
+
* cannot contain the id separators. Exported for the M3 taint emit path —
|
|
239
|
+
* TAINTED/SANITIZES ids key bindings with the same discipline.
|
|
240
|
+
*/
|
|
241
|
+
export declare const bindingKey: (b: BindingEntry) => string;
|
|
242
|
+
/**
|
|
243
|
+
* Compute reaching definitions per function and persist the bounded
|
|
244
|
+
* REACHING_DEF projection (#2082 M2 U4).
|
|
245
|
+
*
|
|
246
|
+
* Facts are DEDUPED to (defBlock, useBlock, binding) before budgeting — the
|
|
247
|
+
* persisted columns (`from,to,type,confidence,reason,step`; relationship ids
|
|
248
|
+
* are in-memory-only, the CodeRelation table has no id column) cannot
|
|
249
|
+
* distinguish finer rows, so statement-indexed ids would only manufacture
|
|
250
|
+
* byte-identical duplicate rows that burn budget. Statement granularity lives
|
|
251
|
+
* in the in-memory {@link computeReachingDefs} result, which the M3 taint
|
|
252
|
+
* engine recomputes on demand — the budget here governs only this projection
|
|
253
|
+
* and can never drop a taint fact.
|
|
254
|
+
*
|
|
255
|
+
* R7 (no silent truncation) covers BOTH layers: the per-function edge cap AND
|
|
256
|
+
* the solver's fact-materialization limit (which can fire without the edge
|
|
257
|
+
* cap ever being reached, since dedup is many-to-one) each produce one
|
|
258
|
+
* unconditional `onWarn`. The edge-cap warn names the top bindings by fact
|
|
259
|
+
* count — overflow is almost always one variable, which is exactly the datum
|
|
260
|
+
* M3 tuning wants.
|
|
261
|
+
*/
|
|
262
|
+
export declare function emitFileReachingDefs(graph: KnowledgeGraph, cfgs: readonly FunctionCfg[], maxEdgesPerFunction?: number, onWarn?: (message: string) => void, solve?: ReachingDefsSolver): ReachingDefEmitResult;
|
|
263
|
+
export interface CdgEmitResult {
|
|
264
|
+
/** Deduped (controller, dependent, label) CDG edges persisted. */
|
|
265
|
+
edges: number;
|
|
266
|
+
/** CDG edges dropped by the per-function edge cap. */
|
|
267
|
+
droppedEdges: number;
|
|
268
|
+
/** Functions that hit the CDG edge cap. */
|
|
269
|
+
cappedFunctions: number;
|
|
270
|
+
/** Diagnostic POST_DOMINATE edges emitted (0 unless the debug env is set). */
|
|
271
|
+
postDominateEdges: number;
|
|
272
|
+
/**
|
|
273
|
+
* Functions skipped because EXIT was not reachable from every entry-reachable
|
|
274
|
+
* block — post-dominance would be unsound (#2188 review). CFG/REACHING_DEF for
|
|
275
|
+
* those functions are kept; only their CDG projection is omitted.
|
|
276
|
+
*/
|
|
277
|
+
skippedUnsoundFunctions: number;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Compute control dependence per function and persist the bounded CDG
|
|
281
|
+
* projection (#2085 M5 U4). Mirrors {@link emitFileReachingDefs}: the pure
|
|
282
|
+
* {@link computeControlDependence} already dedups to (controller, dependent,
|
|
283
|
+
* label), so the per-function cap applies to deduped edges and overflow logs
|
|
284
|
+
* one unconditional `onWarn` naming the dropped count — no silent truncation
|
|
285
|
+
* (R6/R7). The branch label ('T'|'F') rides the `reason` column (KTD3),
|
|
286
|
+
* mirroring how CFG stores its edge kind.
|
|
287
|
+
*
|
|
288
|
+
* When {@link POST_DOMINATE_DEBUG_ENV} is set, also emits diagnostic
|
|
289
|
+
* `POST_DOMINATE` edges (block → its immediate post-dominator). These are NOT
|
|
290
|
+
* capped or counted against the CDG budget — they exist only for inspecting the
|
|
291
|
+
* post-dom tree and never appear in a normal run.
|
|
292
|
+
*/
|
|
293
|
+
export declare function emitFileCdg(graph: KnowledgeGraph, cfgs: readonly FunctionCfg[], maxEdgesPerFunction?: number, onWarn?: (message: string) => void): CdgEmitResult;
|