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.
Files changed (439) hide show
  1. package/README.md +3 -3
  2. package/dist/_shared/graph/types.d.ts +31 -1
  3. package/dist/_shared/graph/types.d.ts.map +1 -1
  4. package/dist/_shared/language-detection.d.ts.map +1 -1
  5. package/dist/_shared/language-detection.js +11 -1
  6. package/dist/_shared/language-detection.js.map +1 -1
  7. package/dist/_shared/lbug/schema-constants.d.ts +1 -1
  8. package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
  9. package/dist/_shared/lbug/schema-constants.js +6 -0
  10. package/dist/_shared/lbug/schema-constants.js.map +1 -1
  11. package/dist/_shared/scope-resolution/parsed-file.d.ts +21 -0
  12. package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
  13. package/dist/_shared/scope-resolution/symbol-definition.d.ts +6 -0
  14. package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
  15. package/dist/cli/ai-context.d.ts +31 -1
  16. package/dist/cli/ai-context.js +18 -16
  17. package/dist/cli/analyze-config.js +11 -0
  18. package/dist/cli/analyze.d.ts +14 -0
  19. package/dist/cli/analyze.js +98 -0
  20. package/dist/cli/embedding-dims.d.ts +33 -0
  21. package/dist/cli/embedding-dims.js +39 -0
  22. package/dist/cli/eval-server.d.ts +8 -0
  23. package/dist/cli/eval-server.js +242 -2
  24. package/dist/cli/help-i18n.js +19 -0
  25. package/dist/cli/i18n/en.d.ts +15 -1
  26. package/dist/cli/i18n/en.js +15 -1
  27. package/dist/cli/i18n/resources.d.ts +29 -1
  28. package/dist/cli/i18n/zh-CN.d.ts +14 -0
  29. package/dist/cli/i18n/zh-CN.js +15 -1
  30. package/dist/cli/index.js +89 -1
  31. package/dist/cli/mcp.d.ts +6 -1
  32. package/dist/cli/mcp.js +26 -1
  33. package/dist/cli/optional-grammars.d.ts +6 -8
  34. package/dist/cli/optional-grammars.js +8 -11
  35. package/dist/cli/setup.d.ts +3 -1
  36. package/dist/cli/setup.js +67 -17
  37. package/dist/cli/skill-gen.js +2 -1
  38. package/dist/cli/tool.d.ts +19 -1
  39. package/dist/cli/tool.js +96 -3
  40. package/dist/core/embeddings/hf-env.d.ts +0 -66
  41. package/dist/core/embeddings/http-client.d.ts +7 -0
  42. package/dist/core/embeddings/http-client.js +5 -3
  43. package/dist/core/embeddings/server-mapping.d.ts +1 -1
  44. package/dist/core/embeddings/server-mapping.js +7 -3
  45. package/dist/core/graph/import-cycles.d.ts +10 -0
  46. package/dist/core/graph/import-cycles.js +103 -0
  47. package/dist/core/group/cross-impact.d.ts +2 -1
  48. package/dist/core/group/cross-impact.js +5 -1
  49. package/dist/core/group/extractors/grpc-patterns/proto.js +10 -6
  50. package/dist/core/group/extractors/http-patterns/kotlin.js +7 -7
  51. package/dist/core/group/extractors/http-route-extractor.d.ts +24 -0
  52. package/dist/core/group/extractors/http-route-extractor.js +22 -4
  53. package/dist/core/group/extractors/include-extractor.js +22 -13
  54. package/dist/core/group/sync.d.ts +27 -1
  55. package/dist/core/group/sync.js +0 -0
  56. package/dist/core/incremental/subgraph-extract.js +18 -1
  57. package/dist/core/ingestion/cfg/cfg-builder.d.ts +114 -0
  58. package/dist/core/ingestion/cfg/cfg-builder.js +196 -0
  59. package/dist/core/ingestion/cfg/collect.d.ts +51 -0
  60. package/dist/core/ingestion/cfg/collect.js +77 -0
  61. package/dist/core/ingestion/cfg/control-dependence.d.ts +58 -0
  62. package/dist/core/ingestion/cfg/control-dependence.js +182 -0
  63. package/dist/core/ingestion/cfg/control-flow-context.d.ts +106 -0
  64. package/dist/core/ingestion/cfg/control-flow-context.js +124 -0
  65. package/dist/core/ingestion/cfg/emit.d.ts +293 -0
  66. package/dist/core/ingestion/cfg/emit.js +646 -0
  67. package/dist/core/ingestion/cfg/post-dominators.d.ts +79 -0
  68. package/dist/core/ingestion/cfg/post-dominators.js +176 -0
  69. package/dist/core/ingestion/cfg/reaching-def-reason-codec.d.ts +106 -0
  70. package/dist/core/ingestion/cfg/reaching-def-reason-codec.js +133 -0
  71. package/dist/core/ingestion/cfg/reaching-defs-graph.d.ts +18 -0
  72. package/dist/core/ingestion/cfg/reaching-defs-graph.js +312 -0
  73. package/dist/core/ingestion/cfg/reaching-defs.d.ts +162 -0
  74. package/dist/core/ingestion/cfg/reaching-defs.js +785 -0
  75. package/dist/core/ingestion/cfg/synthetic-escape.d.ts +124 -0
  76. package/dist/core/ingestion/cfg/synthetic-escape.js +300 -0
  77. package/dist/core/ingestion/cfg/traversal-result.d.ts +20 -0
  78. package/dist/core/ingestion/cfg/traversal-result.js +2 -0
  79. package/dist/core/ingestion/cfg/types.d.ts +274 -0
  80. package/dist/core/ingestion/cfg/types.js +13 -0
  81. package/dist/core/ingestion/cfg/visitors/c-cpp-harvest.d.ts +111 -0
  82. package/dist/core/ingestion/cfg/visitors/c-cpp-harvest.js +541 -0
  83. package/dist/core/ingestion/cfg/visitors/c-cpp.d.ts +74 -0
  84. package/dist/core/ingestion/cfg/visitors/c-cpp.js +584 -0
  85. package/dist/core/ingestion/cfg/visitors/call-site-harvest.d.ts +195 -0
  86. package/dist/core/ingestion/cfg/visitors/call-site-harvest.js +350 -0
  87. package/dist/core/ingestion/cfg/visitors/csharp-harvest.d.ts +124 -0
  88. package/dist/core/ingestion/cfg/visitors/csharp-harvest.js +589 -0
  89. package/dist/core/ingestion/cfg/visitors/csharp.d.ts +87 -0
  90. package/dist/core/ingestion/cfg/visitors/csharp.js +867 -0
  91. package/dist/core/ingestion/cfg/visitors/dart-harvest.d.ts +278 -0
  92. package/dist/core/ingestion/cfg/visitors/dart-harvest.js +870 -0
  93. package/dist/core/ingestion/cfg/visitors/dart.d.ts +119 -0
  94. package/dist/core/ingestion/cfg/visitors/dart.js +836 -0
  95. package/dist/core/ingestion/cfg/visitors/go-harvest.d.ts +160 -0
  96. package/dist/core/ingestion/cfg/visitors/go-harvest.js +621 -0
  97. package/dist/core/ingestion/cfg/visitors/go.d.ts +108 -0
  98. package/dist/core/ingestion/cfg/visitors/go.js +638 -0
  99. package/dist/core/ingestion/cfg/visitors/java-harvest.d.ts +108 -0
  100. package/dist/core/ingestion/cfg/visitors/java-harvest.js +513 -0
  101. package/dist/core/ingestion/cfg/visitors/java.d.ts +101 -0
  102. package/dist/core/ingestion/cfg/visitors/java.js +812 -0
  103. package/dist/core/ingestion/cfg/visitors/kotlin-harvest.d.ts +253 -0
  104. package/dist/core/ingestion/cfg/visitors/kotlin-harvest.js +719 -0
  105. package/dist/core/ingestion/cfg/visitors/kotlin.d.ts +121 -0
  106. package/dist/core/ingestion/cfg/visitors/kotlin.js +809 -0
  107. package/dist/core/ingestion/cfg/visitors/php-harvest.d.ts +172 -0
  108. package/dist/core/ingestion/cfg/visitors/php-harvest.js +626 -0
  109. package/dist/core/ingestion/cfg/visitors/php.d.ts +96 -0
  110. package/dist/core/ingestion/cfg/visitors/php.js +721 -0
  111. package/dist/core/ingestion/cfg/visitors/python-harvest.d.ts +212 -0
  112. package/dist/core/ingestion/cfg/visitors/python-harvest.js +739 -0
  113. package/dist/core/ingestion/cfg/visitors/python.d.ts +103 -0
  114. package/dist/core/ingestion/cfg/visitors/python.js +558 -0
  115. package/dist/core/ingestion/cfg/visitors/ruby-harvest.d.ts +223 -0
  116. package/dist/core/ingestion/cfg/visitors/ruby-harvest.js +587 -0
  117. package/dist/core/ingestion/cfg/visitors/ruby.d.ts +112 -0
  118. package/dist/core/ingestion/cfg/visitors/ruby.js +756 -0
  119. package/dist/core/ingestion/cfg/visitors/rust-harvest.d.ts +324 -0
  120. package/dist/core/ingestion/cfg/visitors/rust-harvest.js +873 -0
  121. package/dist/core/ingestion/cfg/visitors/rust.d.ts +95 -0
  122. package/dist/core/ingestion/cfg/visitors/rust.js +558 -0
  123. package/dist/core/ingestion/cfg/visitors/scope-tree-harvest.d.ts +87 -0
  124. package/dist/core/ingestion/cfg/visitors/scope-tree-harvest.js +116 -0
  125. package/dist/core/ingestion/cfg/visitors/swift-harvest.d.ts +255 -0
  126. package/dist/core/ingestion/cfg/visitors/swift-harvest.js +679 -0
  127. package/dist/core/ingestion/cfg/visitors/swift.d.ts +116 -0
  128. package/dist/core/ingestion/cfg/visitors/swift.js +787 -0
  129. package/dist/core/ingestion/cfg/visitors/typescript-harvest.d.ts +149 -0
  130. package/dist/core/ingestion/cfg/visitors/typescript-harvest.js +1056 -0
  131. package/dist/core/ingestion/cfg/visitors/typescript.d.ts +66 -0
  132. package/dist/core/ingestion/cfg/visitors/typescript.js +583 -0
  133. package/dist/core/ingestion/import-resolvers/utils.js +2 -0
  134. package/dist/core/ingestion/language-provider.d.ts +23 -2
  135. package/dist/core/ingestion/languages/c-cpp.js +17 -5
  136. package/dist/core/ingestion/languages/cobol.js +4 -0
  137. package/dist/core/ingestion/languages/cpp/arity-metadata.js +41 -2
  138. package/dist/core/ingestion/languages/cpp/captures.js +50 -1
  139. package/dist/core/ingestion/languages/cpp/conversion-rank.d.ts +2 -0
  140. package/dist/core/ingestion/languages/cpp/conversion-rank.js +89 -0
  141. package/dist/core/ingestion/languages/cpp/header-scan.d.ts +1 -1
  142. package/dist/core/ingestion/languages/cpp/header-scan.js +2 -2
  143. package/dist/core/ingestion/languages/cpp/inline-namespaces.js +7 -2
  144. package/dist/core/ingestion/languages/cpp/member-lookup.js +2 -1
  145. package/dist/core/ingestion/languages/cpp/query.js +23 -0
  146. package/dist/core/ingestion/languages/cpp/scope-resolver.js +2 -1
  147. package/dist/core/ingestion/languages/csharp.js +2 -0
  148. package/dist/core/ingestion/languages/dart.js +2 -0
  149. package/dist/core/ingestion/languages/go.js +2 -0
  150. package/dist/core/ingestion/languages/java.js +3 -0
  151. package/dist/core/ingestion/languages/kotlin/query.js +3 -2
  152. package/dist/core/ingestion/languages/kotlin.js +8 -1
  153. package/dist/core/ingestion/languages/php.js +2 -0
  154. package/dist/core/ingestion/languages/python.js +2 -0
  155. package/dist/core/ingestion/languages/ruby.js +2 -0
  156. package/dist/core/ingestion/languages/rust.js +2 -0
  157. package/dist/core/ingestion/languages/swift.js +2 -0
  158. package/dist/core/ingestion/languages/typescript.js +5 -0
  159. package/dist/core/ingestion/languages/vue.js +6 -0
  160. package/dist/core/ingestion/method-extractors/configs/c-cpp.js +6 -13
  161. package/dist/core/ingestion/method-extractors/generic.js +1 -0
  162. package/dist/core/ingestion/method-types.d.ts +2 -0
  163. package/dist/core/ingestion/model/symbol-table.d.ts +1 -0
  164. package/dist/core/ingestion/model/symbol-table.js +1 -0
  165. package/dist/core/ingestion/mro-processor.js +109 -0
  166. package/dist/core/ingestion/parsing-processor.js +44 -0
  167. package/dist/core/ingestion/pipeline-phases/call-summaries.d.ts +26 -0
  168. package/dist/core/ingestion/pipeline-phases/call-summaries.js +46 -0
  169. package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
  170. package/dist/core/ingestion/pipeline-phases/index.js +2 -0
  171. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +0 -21
  172. package/dist/core/ingestion/pipeline-phases/parse-impl.js +18 -1
  173. package/dist/core/ingestion/pipeline-phases/routes.d.ts +10 -0
  174. package/dist/core/ingestion/pipeline-phases/routes.js +30 -1
  175. package/dist/core/ingestion/pipeline-phases/taint-summaries.d.ts +30 -0
  176. package/dist/core/ingestion/pipeline-phases/taint-summaries.js +81 -0
  177. package/dist/core/ingestion/pipeline.d.ts +92 -10
  178. package/dist/core/ingestion/pipeline.js +11 -2
  179. package/dist/core/ingestion/scope-extractor.js +12 -2
  180. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +9 -0
  181. package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +75 -0
  182. package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +67 -0
  183. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +12 -2
  184. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +14 -2
  185. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +6 -1
  186. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +13 -1
  187. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +9 -1
  188. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +28 -2
  189. package/dist/core/ingestion/scope-resolution/passes/overload-narrowing.d.ts +4 -0
  190. package/dist/core/ingestion/scope-resolution/passes/overload-narrowing.js +9 -0
  191. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +6 -1
  192. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +174 -40
  193. package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +24 -0
  194. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +276 -190
  195. package/dist/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +43 -3
  196. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +75 -0
  197. package/dist/core/ingestion/scope-resolution/pipeline/run.js +349 -1
  198. package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +1 -1
  199. package/dist/core/ingestion/taint/call-summary-codec.d.ts +75 -0
  200. package/dist/core/ingestion/taint/call-summary-codec.js +128 -0
  201. package/dist/core/ingestion/taint/call-summary-emit.d.ts +43 -0
  202. package/dist/core/ingestion/taint/call-summary-emit.js +70 -0
  203. package/dist/core/ingestion/taint/call-summary-harvest.d.ts +77 -0
  204. package/dist/core/ingestion/taint/call-summary-harvest.js +179 -0
  205. package/dist/core/ingestion/taint/call-summary-model.d.ts +47 -0
  206. package/dist/core/ingestion/taint/call-summary-model.js +25 -0
  207. package/dist/core/ingestion/taint/emit.d.ts +125 -0
  208. package/dist/core/ingestion/taint/emit.js +208 -0
  209. package/dist/core/ingestion/taint/interproc-emit.d.ts +50 -0
  210. package/dist/core/ingestion/taint/interproc-emit.js +88 -0
  211. package/dist/core/ingestion/taint/interproc-solver.d.ts +110 -0
  212. package/dist/core/ingestion/taint/interproc-solver.js +312 -0
  213. package/dist/core/ingestion/taint/match.d.ts +153 -0
  214. package/dist/core/ingestion/taint/match.js +278 -0
  215. package/dist/core/ingestion/taint/path-codec.d.ts +134 -0
  216. package/dist/core/ingestion/taint/path-codec.js +190 -0
  217. package/dist/core/ingestion/taint/propagate.d.ts +216 -0
  218. package/dist/core/ingestion/taint/propagate.js +659 -0
  219. package/dist/core/ingestion/taint/site-safety.d.ts +29 -0
  220. package/dist/core/ingestion/taint/site-safety.js +98 -0
  221. package/dist/core/ingestion/taint/source-sink-config.d.ts +107 -23
  222. package/dist/core/ingestion/taint/source-sink-config.js +35 -12
  223. package/dist/core/ingestion/taint/source-sink-registry.d.ts +6 -4
  224. package/dist/core/ingestion/taint/source-sink-registry.js +6 -4
  225. package/dist/core/ingestion/taint/summary-harvest-driver.d.ts +80 -0
  226. package/dist/core/ingestion/taint/summary-harvest-driver.js +179 -0
  227. package/dist/core/ingestion/taint/summary-harvest.d.ts +89 -0
  228. package/dist/core/ingestion/taint/summary-harvest.js +537 -0
  229. package/dist/core/ingestion/taint/summary-model.d.ts +200 -0
  230. package/dist/core/ingestion/taint/summary-model.js +86 -0
  231. package/dist/core/ingestion/taint/typescript-model.d.ts +38 -0
  232. package/dist/core/ingestion/taint/typescript-model.js +102 -0
  233. package/dist/core/ingestion/type-extractors/c-cpp.js +21 -0
  234. package/dist/core/ingestion/utils/env.d.ts +7 -0
  235. package/dist/core/ingestion/utils/env.js +12 -0
  236. package/dist/core/ingestion/utils/method-props.js +1 -0
  237. package/dist/core/ingestion/workers/clone-safety.d.ts +109 -0
  238. package/dist/core/ingestion/workers/clone-safety.js +465 -0
  239. package/dist/core/ingestion/workers/parse-worker.d.ts +23 -0
  240. package/dist/core/ingestion/workers/parse-worker.js +81 -53
  241. package/dist/core/ingestion/workers/post-result.d.ts +22 -0
  242. package/dist/core/ingestion/workers/post-result.js +87 -0
  243. package/dist/core/ingestion/workers/result-merge.d.ts +20 -0
  244. package/dist/core/ingestion/workers/result-merge.js +43 -0
  245. package/dist/core/ingestion/workers/worker-pool.d.ts +15 -40
  246. package/dist/core/ingestion/workers/worker-pool.js +43 -16
  247. package/dist/core/lbug/csv-generator.d.ts +51 -3
  248. package/dist/core/lbug/csv-generator.js +369 -255
  249. package/dist/core/lbug/lbug-adapter.d.ts +58 -18
  250. package/dist/core/lbug/lbug-adapter.js +346 -84
  251. package/dist/core/lbug/lbug-config.d.ts +19 -0
  252. package/dist/core/lbug/lbug-config.js +29 -0
  253. package/dist/core/lbug/pdg-emit-sink.d.ts +127 -0
  254. package/dist/core/lbug/pdg-emit-sink.js +358 -0
  255. package/dist/core/lbug/pool-adapter.d.ts +35 -0
  256. package/dist/core/lbug/pool-adapter.js +90 -1
  257. package/dist/core/lbug/rel-pair-routing.d.ts +54 -0
  258. package/dist/core/lbug/rel-pair-routing.js +140 -0
  259. package/dist/core/lbug/schema.d.ts +2 -2
  260. package/dist/core/lbug/schema.js +3 -0
  261. package/dist/core/logger.d.ts +0 -5
  262. package/dist/core/run-analyze.d.ts +96 -0
  263. package/dist/core/run-analyze.js +207 -3
  264. package/dist/core/tree-sitter/parser-loader.js +5 -4
  265. package/dist/core/tree-sitter/safe-parse.d.ts +0 -5
  266. package/dist/core/tree-sitter/vendored-grammars.d.ts +39 -0
  267. package/dist/core/tree-sitter/vendored-grammars.js +57 -0
  268. package/dist/core/wiki/generator.js +3 -1
  269. package/dist/core/wiki/graph-queries.d.ts +6 -0
  270. package/dist/core/wiki/graph-queries.js +9 -1
  271. package/dist/mcp/http-transport.d.ts +134 -0
  272. package/dist/mcp/http-transport.js +503 -0
  273. package/dist/mcp/local/local-backend.d.ts +110 -24
  274. package/dist/mcp/local/local-backend.js +1225 -19
  275. package/dist/mcp/local/pdg-impact.d.ts +384 -0
  276. package/dist/mcp/local/pdg-impact.js +1972 -0
  277. package/dist/mcp/resources.js +13 -1
  278. package/dist/mcp/tools.d.ts +12 -0
  279. package/dist/mcp/tools.js +214 -7
  280. package/dist/server/analyze-launch.d.ts +29 -0
  281. package/dist/server/analyze-launch.js +137 -0
  282. package/dist/server/analyze-upload.d.ts +33 -0
  283. package/dist/server/analyze-upload.js +123 -0
  284. package/dist/server/analyze-worker-ipc.d.ts +58 -0
  285. package/dist/server/analyze-worker-ipc.js +16 -0
  286. package/dist/server/analyze-worker.d.ts +17 -1
  287. package/dist/server/analyze-worker.js +7 -1
  288. package/dist/server/api.d.ts +17 -0
  289. package/dist/server/api.js +132 -168
  290. package/dist/server/git-clone.d.ts +43 -2
  291. package/dist/server/git-clone.js +211 -16
  292. package/dist/server/mcp-http.d.ts +5 -6
  293. package/dist/server/mcp-http.js +9 -82
  294. package/dist/server/middleware.d.ts +40 -0
  295. package/dist/server/middleware.js +92 -0
  296. package/dist/server/private-ip.d.ts +1 -0
  297. package/dist/server/private-ip.js +15 -0
  298. package/dist/server/upload-ingest.d.ts +56 -0
  299. package/dist/server/upload-ingest.js +276 -0
  300. package/dist/server/upload-paths.d.ts +37 -0
  301. package/dist/server/upload-paths.js +57 -0
  302. package/dist/server/upload-sweep.d.ts +20 -0
  303. package/dist/server/upload-sweep.js +57 -0
  304. package/dist/storage/git.js +5 -8
  305. package/dist/storage/parse-cache.d.ts +22 -1
  306. package/dist/storage/parse-cache.js +44 -10
  307. package/dist/storage/repo-manager.d.ts +121 -10
  308. package/dist/storage/repo-manager.js +43 -5
  309. package/dist/types/pipeline.d.ts +9 -0
  310. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +110 -10
  311. package/hooks/claude/gitnexus-hook.cjs +110 -13
  312. package/hooks/claude/hook-db-lock-probe.cjs +513 -26
  313. package/package.json +8 -2
  314. package/scripts/assert-publish-grammar-coverage.cjs +31 -0
  315. package/scripts/build-tree-sitter-grammars.cjs +16 -10
  316. package/scripts/cross-platform-tests.ts +1 -0
  317. package/skills/gitnexus-debugging.md +16 -4
  318. package/skills/gitnexus-exploring.md +3 -3
  319. package/skills/gitnexus-guide.md +33 -0
  320. package/skills/gitnexus-pdg-query.md +89 -0
  321. package/skills/gitnexus-refactoring.md +1 -1
  322. package/skills/gitnexus-taint-analysis.md +178 -0
  323. package/vendor/tree-sitter-c/package.json +1 -1
  324. package/vendor/tree-sitter-dart/package.json +1 -1
  325. package/vendor/tree-sitter-kotlin/package.json +1 -1
  326. package/vendor/tree-sitter-proto/package.json +1 -1
  327. package/vendor/tree-sitter-swift/package.json +1 -1
  328. package/web/assets/{agent-CKPMqImC.js → agent-D3Xd7zZE.js} +123 -123
  329. package/web/assets/architecture-7EHR7CIX-6QZW5X65-DxJw65fT.js +1 -0
  330. package/web/assets/architectureDiagram-UL44E2DR-ChH9xW-N.js +36 -0
  331. package/web/assets/{blockDiagram-7IZFK4PR-B4niSLvR.js → blockDiagram-7IZFK4PR-BkWhpzWB.js} +1 -1
  332. package/web/assets/{c4Diagram-Y2BXMSZH-DIzEXalR.js → c4Diagram-Y2BXMSZH-DtBvpzWD.js} +1 -1
  333. package/web/assets/{chunk-3SSMPTDK-BzGeeheI.js → chunk-3SSMPTDK-B4_etUhr.js} +2 -2
  334. package/web/assets/{chunk-5IMINLNL-CnTLsXIV.js → chunk-5IMINLNL-DOdTeQri.js} +1 -1
  335. package/web/assets/{chunk-5VCL7Z4A-w1BCx98Z.js → chunk-5VCL7Z4A-CQ-2dYWj.js} +1 -1
  336. package/web/assets/chunk-6764PJDD-DpIS7hxD.js +1 -0
  337. package/web/assets/{chunk-67TQ5CYL-CChC2cAv.js → chunk-67TQ5CYL-4sNPJU1q.js} +3 -3
  338. package/web/assets/{chunk-7W6UQGC5-CgFyfZ6k.js → chunk-7W6UQGC5-KyEG0HQg.js} +1 -1
  339. package/web/assets/{chunk-AZZRMDJM-5E9ARdDQ.js → chunk-AZZRMDJM-y-xJBuMz.js} +1 -1
  340. package/web/assets/{chunk-INKRHTLW-ELpfuk9h.js → chunk-INKRHTLW-Nu4ri9P-.js} +1 -1
  341. package/web/assets/{chunk-JQRUD6KW-Dcq_Qnyy.js → chunk-JQRUD6KW-Dbva2Z17.js} +1 -1
  342. package/web/assets/{chunk-KGFNY3KK-W-VR57xb.js → chunk-KGFNY3KK-JGMJvKCK.js} +1 -1
  343. package/web/assets/chunk-KGYTTC2M-CWC_c3H9.js +161 -0
  344. package/web/assets/{chunk-KNLZD3CH-BuZBOcso.js → chunk-KNLZD3CH-BGlP6X9R.js} +1 -1
  345. package/web/assets/{chunk-KRXBNO2N-DH2NPM7I.js → chunk-KRXBNO2N-BW5o0KUN.js} +1 -1
  346. package/web/assets/{chunk-LCXTWHL2-Dfmux4m1.js → chunk-LCXTWHL2-zoomRtWX.js} +1 -1
  347. package/web/assets/{chunk-LII3EMHJ-3X33tCpU.js → chunk-LII3EMHJ-D-jm-dLa.js} +1 -1
  348. package/web/assets/{chunk-QA3QBVWF-D5Ha3GgB.js → chunk-QA3QBVWF-BgRW3SXd.js} +1 -1
  349. package/web/assets/{chunk-RG4AUYOV-CAkzcoRj.js → chunk-RG4AUYOV-DD0B2N2B.js} +1 -1
  350. package/web/assets/{chunk-T2UQINTJ-kGYG7ppP.js → chunk-T2UQINTJ-DSBqkzH7.js} +1 -1
  351. package/web/assets/chunk-T5OCTHI4-DdZvN-9i.js +1 -0
  352. package/web/assets/{chunk-UY5QBCOK-Du-c56gs.js → chunk-UY5QBCOK-DyF0vyGd.js} +1 -1
  353. package/web/assets/{chunk-W44A43WB-lrCpuupA.js → chunk-W44A43WB-JqMLIpR0.js} +1 -1
  354. package/web/assets/{chunk-ZXARS5L4-CSZRiyOf.js → chunk-ZXARS5L4-CxN8oiwI.js} +1 -1
  355. package/web/assets/classDiagram-KGZ6W3CR-DJm9BgF-.js +1 -0
  356. package/web/assets/classDiagram-v2-72OJOZXJ-DJm9BgF-.js +1 -0
  357. package/web/assets/{context-builder-_HS0v2ma.js → context-builder-BHiFUA8O.js} +10 -2
  358. package/web/assets/{cose-bilkent-UX7MHV2Q-BHv2bbtl.js → cose-bilkent-UX7MHV2Q-D71wNYRJ.js} +1 -1
  359. package/web/assets/dagre-ND4H6XIP-BIkxmhcu.js +4 -0
  360. package/web/assets/diagram-3NCE3AQN-BTa6iH0T.js +43 -0
  361. package/web/assets/diagram-GF46GFSD-DZDV0vBj.js +24 -0
  362. package/web/assets/{diagram-HNR7UZ2L-fUWreZzx.js → diagram-HNR7UZ2L-DFCfd5LI.js} +2 -2
  363. package/web/assets/diagram-QXG6HAR7-BzM--Jj0.js +24 -0
  364. package/web/assets/diagram-WEQXMOUZ-DFFwz0k4.js +10 -0
  365. package/web/assets/{erDiagram-L5TCEMPS-QN2eEP1e.js → erDiagram-L5TCEMPS-CfHMJJqo.js} +1 -1
  366. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-BQm9QzEa.js +1 -0
  367. package/web/assets/{flowDiagram-H6V6AXG4-CXbXImlN.js → flowDiagram-H6V6AXG4-Be805QiJ.js} +3 -3
  368. package/web/assets/{ganttDiagram-JCBTUEKG-BHQssTz6.js → ganttDiagram-JCBTUEKG-D3iL2Aet.js} +1 -1
  369. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-Cr_Bm2Nb.js +1 -0
  370. package/web/assets/gitGraphDiagram-S2ZK5IYY-CPIDgxGm.js +106 -0
  371. package/web/assets/index-BvYev1UJ.js +635 -0
  372. package/web/assets/index-_lgn7hs5.css +2 -0
  373. package/web/assets/info-J43DQDTF-KCYPFFUO-Cs4p2oyk.js +1 -0
  374. package/web/assets/infoDiagram-3YFTVSEB-Y7BKSoke.js +2 -0
  375. package/web/assets/{ishikawaDiagram-BNXS4ZKH-6LKOvBfp.js → ishikawaDiagram-BNXS4ZKH-CT4SHFuI.js} +1 -1
  376. package/web/assets/{journeyDiagram-M6C3CM3L-DNPYCpvq.js → journeyDiagram-M6C3CM3L-CvArszLo.js} +1 -1
  377. package/web/assets/{kanban-definition-75IXJCU3-DgDi9oJT.js → kanban-definition-75IXJCU3-C6yDxr7N.js} +3 -3
  378. package/web/assets/{katex-K3KEBU37-CrVLz8l7.js → katex-K3KEBU37-CTc5BslQ.js} +1 -1
  379. package/web/assets/{mindmap-definition-2TDM6QVE-CwR5sBB-.js → mindmap-definition-2TDM6QVE-BOc2WEne.js} +1 -1
  380. package/web/assets/packet-YPE3B663-LP52Z2RK-CKCrztD2.js +1 -0
  381. package/web/assets/pie-LRSECV5Y-TCRJHUBD-BB7pHqoD.js +1 -0
  382. package/web/assets/{pieDiagram-CU6KROY3-By8g6f6B.js → pieDiagram-CU6KROY3-Cvc0f_Pd.js} +1 -1
  383. package/web/assets/{quadrantDiagram-VICAPDV7-bAm6Hi_5.js → quadrantDiagram-VICAPDV7-yXSZ2lLz.js} +1 -1
  384. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DhoTOcuK.js +1 -0
  385. package/web/assets/{requirementDiagram-JXO7QTGE-7oDcJ1_J.js → requirementDiagram-JXO7QTGE-BRcZvHs4.js} +1 -1
  386. package/web/assets/{sankeyDiagram-URQDO5SZ-LFJz53u5.js → sankeyDiagram-URQDO5SZ-1qEjlFIB.js} +1 -1
  387. package/web/assets/{sequenceDiagram-VS2MUI6T-FySeKCUy.js → sequenceDiagram-VS2MUI6T-PcSCuvrB.js} +3 -3
  388. package/web/assets/stateDiagram-7D4R322I-D6qYSV1E.js +1 -0
  389. package/web/assets/stateDiagram-v2-36443NZ5-Bg-ImOSX.js +1 -0
  390. package/web/assets/{timeline-definition-O6YCAMPW-Ds2CnVZK.js → timeline-definition-O6YCAMPW-QWkh01xw.js} +1 -1
  391. package/web/assets/treeView-BLDUP644-QA4HXRO3-ODehyGKL.js +1 -0
  392. package/web/assets/treemap-LRROVOQU-LLAWBHMP-BfpgC-7o.js +1 -0
  393. package/web/assets/{vennDiagram-MWXL3ELB-DUIEwXWp.js → vennDiagram-MWXL3ELB-ak4DfwuM.js} +3 -3
  394. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-CNeL6VHE.js +1 -0
  395. package/web/assets/{wardleyDiagram-CUQ6CDDI-DEiFPQih.js → wardleyDiagram-CUQ6CDDI-CTzR4Loq.js} +1 -1
  396. package/web/assets/{xychartDiagram-N2JHSOCM-BUbayhST.js → xychartDiagram-N2JHSOCM-DA1BEaQz.js} +1 -1
  397. package/web/index.html +13 -15
  398. package/scripts/materialize-vendor-grammars.cjs +0 -97
  399. package/web/assets/architecture-7EHR7CIX-6QZW5X65-BETj2x4g.js +0 -1
  400. package/web/assets/architectureDiagram-UL44E2DR-D1EXI0zA.js +0 -36
  401. package/web/assets/chunk-2T2R6R2M-n6s9JZqv.js +0 -4
  402. package/web/assets/chunk-2UTLFMKG-CMBB1TMN.js +0 -1
  403. package/web/assets/chunk-4R4BOZG6-mKhL59ul.js +0 -159
  404. package/web/assets/chunk-6764PJDD-ChwMM2z4.js +0 -1
  405. package/web/assets/chunk-7J6CGLKN-DT-b53FT.js +0 -10
  406. package/web/assets/chunk-C62D2QBJ-CDAWj26E.js +0 -1
  407. package/web/assets/chunk-CEXFNPSA-D68Tk6ls.js +0 -1
  408. package/web/assets/chunk-CilyBKbf.js +0 -1
  409. package/web/assets/chunk-J5EP6P6S-DxWW0yvu.js +0 -1
  410. package/web/assets/chunk-KGYTTC2M-C6PHeuay.js +0 -1
  411. package/web/assets/chunk-RERM46MO-DQNbXtfw.js +0 -1
  412. package/web/assets/chunk-RKZBBQEN-BmTPLSyv.js +0 -1
  413. package/web/assets/chunk-RLI5ZMPA-DExu2DOK.js +0 -1
  414. package/web/assets/chunk-T5OCTHI4--9wWpVws.js +0 -1
  415. package/web/assets/chunk-UP6H54XL-DsKdC6jC.js +0 -1
  416. package/web/assets/chunk-UXSXWOXI-DR81EqLr.js +0 -1
  417. package/web/assets/classDiagram-KGZ6W3CR-Bv93af_b.js +0 -1
  418. package/web/assets/classDiagram-v2-72OJOZXJ-CLfEqHUa.js +0 -1
  419. package/web/assets/dagre-ND4H6XIP-DsIr9MOv.js +0 -4
  420. package/web/assets/diagram-3NCE3AQN-BqAtKUpW.js +0 -43
  421. package/web/assets/diagram-GF46GFSD-CaBG6n6o.js +0 -24
  422. package/web/assets/diagram-QXG6HAR7-CZ-O3rcV.js +0 -24
  423. package/web/assets/diagram-WEQXMOUZ-P4lSL4GH.js +0 -10
  424. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-B3myHUst.js +0 -1
  425. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DF3rtf4A.js +0 -1
  426. package/web/assets/gitGraphDiagram-S2ZK5IYY-CCwVLT__.js +0 -106
  427. package/web/assets/index-BKWA-m7o.css +0 -2
  428. package/web/assets/index-CG6q8eTs.js +0 -626
  429. package/web/assets/info-J43DQDTF-KCYPFFUO-R4XV_akJ.js +0 -1
  430. package/web/assets/infoDiagram-3YFTVSEB-DmLICZx1.js +0 -2
  431. package/web/assets/packet-YPE3B663-LP52Z2RK-CgQPdNZa.js +0 -1
  432. package/web/assets/pie-LRSECV5Y-TCRJHUBD-BzWOwc_c.js +0 -1
  433. package/web/assets/radar-GUYGQ44K-RDLRG3WG-B7KG0FN7.js +0 -1
  434. package/web/assets/stateDiagram-7D4R322I-CB2nABwH.js +0 -1
  435. package/web/assets/stateDiagram-v2-36443NZ5-COBGd2RL.js +0 -1
  436. package/web/assets/treeView-BLDUP644-QA4HXRO3-CRSxEwLO.js +0 -1
  437. package/web/assets/treemap-LRROVOQU-LLAWBHMP-a0PfKoVn.js +0 -1
  438. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-BKQ6e5mC.js +0 -1
  439. /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 {};