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.
Files changed (430) 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 +11 -0
  135. package/dist/core/ingestion/languages/c-cpp.js +6 -1
  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 +3 -0
  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 +23 -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/parse-worker.d.ts +13 -0
  238. package/dist/core/ingestion/workers/parse-worker.js +76 -17
  239. package/dist/core/ingestion/workers/worker-pool.d.ts +9 -40
  240. package/dist/core/ingestion/workers/worker-pool.js +15 -2
  241. package/dist/core/lbug/csv-generator.d.ts +51 -3
  242. package/dist/core/lbug/csv-generator.js +369 -255
  243. package/dist/core/lbug/lbug-adapter.d.ts +58 -18
  244. package/dist/core/lbug/lbug-adapter.js +346 -84
  245. package/dist/core/lbug/lbug-config.d.ts +19 -0
  246. package/dist/core/lbug/lbug-config.js +29 -0
  247. package/dist/core/lbug/pdg-emit-sink.d.ts +127 -0
  248. package/dist/core/lbug/pdg-emit-sink.js +358 -0
  249. package/dist/core/lbug/pool-adapter.d.ts +35 -0
  250. package/dist/core/lbug/pool-adapter.js +90 -1
  251. package/dist/core/lbug/rel-pair-routing.d.ts +54 -0
  252. package/dist/core/lbug/rel-pair-routing.js +140 -0
  253. package/dist/core/lbug/schema.d.ts +2 -2
  254. package/dist/core/lbug/schema.js +3 -0
  255. package/dist/core/logger.d.ts +0 -5
  256. package/dist/core/run-analyze.d.ts +96 -0
  257. package/dist/core/run-analyze.js +207 -3
  258. package/dist/core/tree-sitter/parser-loader.js +5 -4
  259. package/dist/core/tree-sitter/safe-parse.d.ts +0 -5
  260. package/dist/core/tree-sitter/vendored-grammars.d.ts +39 -0
  261. package/dist/core/tree-sitter/vendored-grammars.js +57 -0
  262. package/dist/core/wiki/generator.js +3 -1
  263. package/dist/core/wiki/graph-queries.d.ts +6 -0
  264. package/dist/core/wiki/graph-queries.js +9 -1
  265. package/dist/mcp/http-transport.d.ts +134 -0
  266. package/dist/mcp/http-transport.js +503 -0
  267. package/dist/mcp/local/local-backend.d.ts +110 -24
  268. package/dist/mcp/local/local-backend.js +1225 -19
  269. package/dist/mcp/local/pdg-impact.d.ts +384 -0
  270. package/dist/mcp/local/pdg-impact.js +1972 -0
  271. package/dist/mcp/resources.js +13 -1
  272. package/dist/mcp/tools.d.ts +12 -0
  273. package/dist/mcp/tools.js +214 -7
  274. package/dist/server/analyze-launch.d.ts +29 -0
  275. package/dist/server/analyze-launch.js +137 -0
  276. package/dist/server/analyze-upload.d.ts +33 -0
  277. package/dist/server/analyze-upload.js +123 -0
  278. package/dist/server/analyze-worker.d.ts +17 -1
  279. package/dist/server/api.d.ts +17 -0
  280. package/dist/server/api.js +132 -168
  281. package/dist/server/git-clone.d.ts +43 -2
  282. package/dist/server/git-clone.js +211 -16
  283. package/dist/server/mcp-http.d.ts +5 -6
  284. package/dist/server/mcp-http.js +9 -82
  285. package/dist/server/middleware.d.ts +40 -0
  286. package/dist/server/middleware.js +92 -0
  287. package/dist/server/private-ip.d.ts +1 -0
  288. package/dist/server/private-ip.js +15 -0
  289. package/dist/server/upload-ingest.d.ts +56 -0
  290. package/dist/server/upload-ingest.js +276 -0
  291. package/dist/server/upload-paths.d.ts +37 -0
  292. package/dist/server/upload-paths.js +57 -0
  293. package/dist/server/upload-sweep.d.ts +20 -0
  294. package/dist/server/upload-sweep.js +57 -0
  295. package/dist/storage/git.js +5 -8
  296. package/dist/storage/parse-cache.d.ts +22 -1
  297. package/dist/storage/parse-cache.js +41 -10
  298. package/dist/storage/repo-manager.d.ts +121 -10
  299. package/dist/storage/repo-manager.js +43 -5
  300. package/dist/types/pipeline.d.ts +9 -0
  301. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +110 -10
  302. package/hooks/claude/gitnexus-hook.cjs +110 -13
  303. package/hooks/claude/hook-db-lock-probe.cjs +513 -26
  304. package/package.json +8 -2
  305. package/scripts/assert-publish-grammar-coverage.cjs +31 -0
  306. package/scripts/build-tree-sitter-grammars.cjs +16 -10
  307. package/scripts/cross-platform-tests.ts +1 -0
  308. package/skills/gitnexus-debugging.md +16 -4
  309. package/skills/gitnexus-exploring.md +3 -3
  310. package/skills/gitnexus-guide.md +33 -0
  311. package/skills/gitnexus-pdg-query.md +89 -0
  312. package/skills/gitnexus-refactoring.md +1 -1
  313. package/skills/gitnexus-taint-analysis.md +178 -0
  314. package/vendor/tree-sitter-c/package.json +1 -1
  315. package/vendor/tree-sitter-dart/package.json +1 -1
  316. package/vendor/tree-sitter-kotlin/package.json +1 -1
  317. package/vendor/tree-sitter-proto/package.json +1 -1
  318. package/vendor/tree-sitter-swift/package.json +1 -1
  319. package/web/assets/{agent-CKPMqImC.js → agent-D3Xd7zZE.js} +123 -123
  320. package/web/assets/architecture-7EHR7CIX-6QZW5X65-DxJw65fT.js +1 -0
  321. package/web/assets/architectureDiagram-UL44E2DR-ChH9xW-N.js +36 -0
  322. package/web/assets/{blockDiagram-7IZFK4PR-B4niSLvR.js → blockDiagram-7IZFK4PR-BkWhpzWB.js} +1 -1
  323. package/web/assets/{c4Diagram-Y2BXMSZH-DIzEXalR.js → c4Diagram-Y2BXMSZH-DtBvpzWD.js} +1 -1
  324. package/web/assets/{chunk-3SSMPTDK-BzGeeheI.js → chunk-3SSMPTDK-B4_etUhr.js} +2 -2
  325. package/web/assets/{chunk-5IMINLNL-CnTLsXIV.js → chunk-5IMINLNL-DOdTeQri.js} +1 -1
  326. package/web/assets/{chunk-5VCL7Z4A-w1BCx98Z.js → chunk-5VCL7Z4A-CQ-2dYWj.js} +1 -1
  327. package/web/assets/chunk-6764PJDD-DpIS7hxD.js +1 -0
  328. package/web/assets/{chunk-67TQ5CYL-CChC2cAv.js → chunk-67TQ5CYL-4sNPJU1q.js} +3 -3
  329. package/web/assets/{chunk-7W6UQGC5-CgFyfZ6k.js → chunk-7W6UQGC5-KyEG0HQg.js} +1 -1
  330. package/web/assets/{chunk-AZZRMDJM-5E9ARdDQ.js → chunk-AZZRMDJM-y-xJBuMz.js} +1 -1
  331. package/web/assets/{chunk-INKRHTLW-ELpfuk9h.js → chunk-INKRHTLW-Nu4ri9P-.js} +1 -1
  332. package/web/assets/{chunk-JQRUD6KW-Dcq_Qnyy.js → chunk-JQRUD6KW-Dbva2Z17.js} +1 -1
  333. package/web/assets/{chunk-KGFNY3KK-W-VR57xb.js → chunk-KGFNY3KK-JGMJvKCK.js} +1 -1
  334. package/web/assets/chunk-KGYTTC2M-CWC_c3H9.js +161 -0
  335. package/web/assets/{chunk-KNLZD3CH-BuZBOcso.js → chunk-KNLZD3CH-BGlP6X9R.js} +1 -1
  336. package/web/assets/{chunk-KRXBNO2N-DH2NPM7I.js → chunk-KRXBNO2N-BW5o0KUN.js} +1 -1
  337. package/web/assets/{chunk-LCXTWHL2-Dfmux4m1.js → chunk-LCXTWHL2-zoomRtWX.js} +1 -1
  338. package/web/assets/{chunk-LII3EMHJ-3X33tCpU.js → chunk-LII3EMHJ-D-jm-dLa.js} +1 -1
  339. package/web/assets/{chunk-QA3QBVWF-D5Ha3GgB.js → chunk-QA3QBVWF-BgRW3SXd.js} +1 -1
  340. package/web/assets/{chunk-RG4AUYOV-CAkzcoRj.js → chunk-RG4AUYOV-DD0B2N2B.js} +1 -1
  341. package/web/assets/{chunk-T2UQINTJ-kGYG7ppP.js → chunk-T2UQINTJ-DSBqkzH7.js} +1 -1
  342. package/web/assets/chunk-T5OCTHI4-DdZvN-9i.js +1 -0
  343. package/web/assets/{chunk-UY5QBCOK-Du-c56gs.js → chunk-UY5QBCOK-DyF0vyGd.js} +1 -1
  344. package/web/assets/{chunk-W44A43WB-lrCpuupA.js → chunk-W44A43WB-JqMLIpR0.js} +1 -1
  345. package/web/assets/{chunk-ZXARS5L4-CSZRiyOf.js → chunk-ZXARS5L4-CxN8oiwI.js} +1 -1
  346. package/web/assets/classDiagram-KGZ6W3CR-DJm9BgF-.js +1 -0
  347. package/web/assets/classDiagram-v2-72OJOZXJ-DJm9BgF-.js +1 -0
  348. package/web/assets/{context-builder-_HS0v2ma.js → context-builder-BHiFUA8O.js} +10 -2
  349. package/web/assets/{cose-bilkent-UX7MHV2Q-BHv2bbtl.js → cose-bilkent-UX7MHV2Q-D71wNYRJ.js} +1 -1
  350. package/web/assets/dagre-ND4H6XIP-BIkxmhcu.js +4 -0
  351. package/web/assets/diagram-3NCE3AQN-BTa6iH0T.js +43 -0
  352. package/web/assets/diagram-GF46GFSD-DZDV0vBj.js +24 -0
  353. package/web/assets/{diagram-HNR7UZ2L-fUWreZzx.js → diagram-HNR7UZ2L-DFCfd5LI.js} +2 -2
  354. package/web/assets/diagram-QXG6HAR7-BzM--Jj0.js +24 -0
  355. package/web/assets/diagram-WEQXMOUZ-DFFwz0k4.js +10 -0
  356. package/web/assets/{erDiagram-L5TCEMPS-QN2eEP1e.js → erDiagram-L5TCEMPS-CfHMJJqo.js} +1 -1
  357. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-BQm9QzEa.js +1 -0
  358. package/web/assets/{flowDiagram-H6V6AXG4-CXbXImlN.js → flowDiagram-H6V6AXG4-Be805QiJ.js} +3 -3
  359. package/web/assets/{ganttDiagram-JCBTUEKG-BHQssTz6.js → ganttDiagram-JCBTUEKG-D3iL2Aet.js} +1 -1
  360. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-Cr_Bm2Nb.js +1 -0
  361. package/web/assets/gitGraphDiagram-S2ZK5IYY-CPIDgxGm.js +106 -0
  362. package/web/assets/index-BvYev1UJ.js +635 -0
  363. package/web/assets/index-_lgn7hs5.css +2 -0
  364. package/web/assets/info-J43DQDTF-KCYPFFUO-Cs4p2oyk.js +1 -0
  365. package/web/assets/infoDiagram-3YFTVSEB-Y7BKSoke.js +2 -0
  366. package/web/assets/{ishikawaDiagram-BNXS4ZKH-6LKOvBfp.js → ishikawaDiagram-BNXS4ZKH-CT4SHFuI.js} +1 -1
  367. package/web/assets/{journeyDiagram-M6C3CM3L-DNPYCpvq.js → journeyDiagram-M6C3CM3L-CvArszLo.js} +1 -1
  368. package/web/assets/{kanban-definition-75IXJCU3-DgDi9oJT.js → kanban-definition-75IXJCU3-C6yDxr7N.js} +3 -3
  369. package/web/assets/{katex-K3KEBU37-CrVLz8l7.js → katex-K3KEBU37-CTc5BslQ.js} +1 -1
  370. package/web/assets/{mindmap-definition-2TDM6QVE-CwR5sBB-.js → mindmap-definition-2TDM6QVE-BOc2WEne.js} +1 -1
  371. package/web/assets/packet-YPE3B663-LP52Z2RK-CKCrztD2.js +1 -0
  372. package/web/assets/pie-LRSECV5Y-TCRJHUBD-BB7pHqoD.js +1 -0
  373. package/web/assets/{pieDiagram-CU6KROY3-By8g6f6B.js → pieDiagram-CU6KROY3-Cvc0f_Pd.js} +1 -1
  374. package/web/assets/{quadrantDiagram-VICAPDV7-bAm6Hi_5.js → quadrantDiagram-VICAPDV7-yXSZ2lLz.js} +1 -1
  375. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DhoTOcuK.js +1 -0
  376. package/web/assets/{requirementDiagram-JXO7QTGE-7oDcJ1_J.js → requirementDiagram-JXO7QTGE-BRcZvHs4.js} +1 -1
  377. package/web/assets/{sankeyDiagram-URQDO5SZ-LFJz53u5.js → sankeyDiagram-URQDO5SZ-1qEjlFIB.js} +1 -1
  378. package/web/assets/{sequenceDiagram-VS2MUI6T-FySeKCUy.js → sequenceDiagram-VS2MUI6T-PcSCuvrB.js} +3 -3
  379. package/web/assets/stateDiagram-7D4R322I-D6qYSV1E.js +1 -0
  380. package/web/assets/stateDiagram-v2-36443NZ5-Bg-ImOSX.js +1 -0
  381. package/web/assets/{timeline-definition-O6YCAMPW-Ds2CnVZK.js → timeline-definition-O6YCAMPW-QWkh01xw.js} +1 -1
  382. package/web/assets/treeView-BLDUP644-QA4HXRO3-ODehyGKL.js +1 -0
  383. package/web/assets/treemap-LRROVOQU-LLAWBHMP-BfpgC-7o.js +1 -0
  384. package/web/assets/{vennDiagram-MWXL3ELB-DUIEwXWp.js → vennDiagram-MWXL3ELB-ak4DfwuM.js} +3 -3
  385. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-CNeL6VHE.js +1 -0
  386. package/web/assets/{wardleyDiagram-CUQ6CDDI-DEiFPQih.js → wardleyDiagram-CUQ6CDDI-CTzR4Loq.js} +1 -1
  387. package/web/assets/{xychartDiagram-N2JHSOCM-BUbayhST.js → xychartDiagram-N2JHSOCM-DA1BEaQz.js} +1 -1
  388. package/web/index.html +13 -15
  389. package/scripts/materialize-vendor-grammars.cjs +0 -97
  390. package/web/assets/architecture-7EHR7CIX-6QZW5X65-BETj2x4g.js +0 -1
  391. package/web/assets/architectureDiagram-UL44E2DR-D1EXI0zA.js +0 -36
  392. package/web/assets/chunk-2T2R6R2M-n6s9JZqv.js +0 -4
  393. package/web/assets/chunk-2UTLFMKG-CMBB1TMN.js +0 -1
  394. package/web/assets/chunk-4R4BOZG6-mKhL59ul.js +0 -159
  395. package/web/assets/chunk-6764PJDD-ChwMM2z4.js +0 -1
  396. package/web/assets/chunk-7J6CGLKN-DT-b53FT.js +0 -10
  397. package/web/assets/chunk-C62D2QBJ-CDAWj26E.js +0 -1
  398. package/web/assets/chunk-CEXFNPSA-D68Tk6ls.js +0 -1
  399. package/web/assets/chunk-CilyBKbf.js +0 -1
  400. package/web/assets/chunk-J5EP6P6S-DxWW0yvu.js +0 -1
  401. package/web/assets/chunk-KGYTTC2M-C6PHeuay.js +0 -1
  402. package/web/assets/chunk-RERM46MO-DQNbXtfw.js +0 -1
  403. package/web/assets/chunk-RKZBBQEN-BmTPLSyv.js +0 -1
  404. package/web/assets/chunk-RLI5ZMPA-DExu2DOK.js +0 -1
  405. package/web/assets/chunk-T5OCTHI4--9wWpVws.js +0 -1
  406. package/web/assets/chunk-UP6H54XL-DsKdC6jC.js +0 -1
  407. package/web/assets/chunk-UXSXWOXI-DR81EqLr.js +0 -1
  408. package/web/assets/classDiagram-KGZ6W3CR-Bv93af_b.js +0 -1
  409. package/web/assets/classDiagram-v2-72OJOZXJ-CLfEqHUa.js +0 -1
  410. package/web/assets/dagre-ND4H6XIP-DsIr9MOv.js +0 -4
  411. package/web/assets/diagram-3NCE3AQN-BqAtKUpW.js +0 -43
  412. package/web/assets/diagram-GF46GFSD-CaBG6n6o.js +0 -24
  413. package/web/assets/diagram-QXG6HAR7-CZ-O3rcV.js +0 -24
  414. package/web/assets/diagram-WEQXMOUZ-P4lSL4GH.js +0 -10
  415. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-B3myHUst.js +0 -1
  416. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DF3rtf4A.js +0 -1
  417. package/web/assets/gitGraphDiagram-S2ZK5IYY-CCwVLT__.js +0 -106
  418. package/web/assets/index-BKWA-m7o.css +0 -2
  419. package/web/assets/index-CG6q8eTs.js +0 -626
  420. package/web/assets/info-J43DQDTF-KCYPFFUO-R4XV_akJ.js +0 -1
  421. package/web/assets/infoDiagram-3YFTVSEB-DmLICZx1.js +0 -2
  422. package/web/assets/packet-YPE3B663-LP52Z2RK-CgQPdNZa.js +0 -1
  423. package/web/assets/pie-LRSECV5Y-TCRJHUBD-BzWOwc_c.js +0 -1
  424. package/web/assets/radar-GUYGQ44K-RDLRG3WG-B7KG0FN7.js +0 -1
  425. package/web/assets/stateDiagram-7D4R322I-CB2nABwH.js +0 -1
  426. package/web/assets/stateDiagram-v2-36443NZ5-COBGd2RL.js +0 -1
  427. package/web/assets/treeView-BLDUP644-QA4HXRO3-CRSxEwLO.js +0 -1
  428. package/web/assets/treemap-LRROVOQU-LLAWBHMP-a0PfKoVn.js +0 -1
  429. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-BKQ6e5mC.js +0 -1
  430. /package/web/assets/{chunk-AQ6EADP3-CCFje6lL.js → chunk-AQ6EADP3-CZhslHi-.js} +0 -0
@@ -11,7 +11,7 @@ import Go from 'tree-sitter-go';
11
11
  import Rust from 'tree-sitter-rust';
12
12
  import PHP from 'tree-sitter-php';
13
13
  import Ruby from 'tree-sitter-ruby';
14
- import { createRequire } from 'node:module';
14
+ import { requireVendoredGrammar } from '../../tree-sitter/vendored-grammars.js';
15
15
  import { SupportedLanguages } from '../../../_shared/index.js';
16
16
  import { getProvider } from '../languages/index.js';
17
17
  import { getTreeSitterBufferSize, getTreeSitterContentByteLength, TREE_SITTER_MAX_BUFFER, } from '../constants.js';
@@ -20,8 +20,8 @@ import { parseSourceSafe } from '../../tree-sitter/safe-parse.js';
20
20
  import { postResultCloneSafe } from './post-result.js';
21
21
  import { mergeResult } from './result-merge.js';
22
22
  // ── Worker grammar loading — enforcement boundary (#2091/#2093, #2101) ───────
23
- // The worker maintains its own grammar table (the guarded `_require`s below +
24
- // `languageMap`) and intentionally does NOT consult the runtime
23
+ // The worker maintains its own grammar table (the guarded vendored-grammar
24
+ // loads below + `languageMap`) and intentionally does NOT consult the runtime
25
25
  // `GITNEXUS_SKIP_OPTIONAL_GRAMMARS` opt-out. It does not need to: the MAIN
26
26
  // THREAD's `parseableScanned` filter (pipeline-phases/parse-impl.ts, gated on
27
27
  // `parser-loader.isLanguageAvailable`, which honors the runtime opt-out and a
@@ -32,33 +32,29 @@ import { mergeResult } from './result-merge.js';
32
32
  // `isLanguageAvailable` must re-introduce the gate here. (The cleaner end-state
33
33
  // — routing this table through `parser-loader.getLanguageGrammar` so there is
34
34
  // one loader — is the deferred Tier-1 consolidation.)
35
- // tree-sitter-swift is an optionalDependency may not be installed
36
- const _require = createRequire(import.meta.url);
35
+ // Swift/Dart/Kotlin/C are vendored grammars loaded from `vendor/` by absolute
36
+ // path (NEVER copied into node_modules — see vendored-grammars.ts / #2111). Each
37
+ // may be absent on a platform without a prebuild or a toolchain-less /
38
+ // `--ignore-scripts` install, so every load is guarded so a missing binding
39
+ // cannot crash the worker at module-load (#2091/#2093, #2116).
37
40
  let Swift = null;
38
41
  try {
39
- Swift = _require('tree-sitter-swift');
42
+ Swift = requireVendoredGrammar('tree-sitter-swift');
40
43
  }
41
44
  catch { }
42
- // tree-sitter-dart is an optionalDependency — may not be installed
43
45
  let Dart = null;
44
46
  try {
45
- Dart = _require('tree-sitter-dart');
47
+ Dart = requireVendoredGrammar('tree-sitter-dart');
46
48
  }
47
49
  catch { }
48
- // tree-sitter-kotlin is an optionalDependency — may not be installed
49
50
  let Kotlin = null;
50
51
  try {
51
- Kotlin = _require('tree-sitter-kotlin');
52
+ Kotlin = requireVendoredGrammar('tree-sitter-kotlin');
52
53
  }
53
54
  catch { }
54
- // tree-sitter-c is now vendored prebuild-only (#2116) and may be absent on a
55
- // toolchain-less / `--ignore-scripts` install. Guard it like Swift/Dart/Kotlin so
56
- // a missing binding cannot crash the worker at module-load (#2091/#2093); the
57
- // main-thread `isLanguageAvailable` filter keeps C files from being dispatched
58
- // here when the entry is absent.
59
55
  let C = null;
60
56
  try {
61
- C = _require('tree-sitter-c');
57
+ C = requireVendoredGrammar('tree-sitter-c');
62
58
  }
63
59
  catch { }
64
60
  import { getLanguageFromFilename } from '../../../_shared/index.js';
@@ -73,6 +69,7 @@ import { extractTemplateArguments, templateArgumentsIdTag, templateConstraintsId
73
69
  import { extractParsedFile } from '../scope-extractor-bridge.js';
74
70
  import { persistParsedFileShardSync, persistDurableParsedFileShardSync, } from '../../../storage/parsedfile-store.js';
75
71
  import { extractLaravelRoutes } from '../route-extractors/laravel.js';
72
+ import { collectFunctionCfgs, DEFAULT_PDG_MAX_FUNCTION_LINES, } from '../cfg/collect.js';
76
73
  import { logger } from '../../logger.js';
77
74
  // ── ParsedFile store (#1983 parallel serialization) ─────────────────────────
78
75
  // Read ONCE at worker init from `workerData` (immutable for the run, inherited
@@ -90,6 +87,17 @@ const PARSED_FILE_STORE_STORAGE_PATH = workerData?.parsedFileStoreStoragePath;
90
87
  // restores them without re-parsing. `undefined` ⇒ no durable write.
91
88
  const DURABLE_PARSED_FILE_STORAGE_PATH = workerData?.durableParsedFileStoragePath;
92
89
  let shardSeq = 0;
90
+ // ── PDG/CFG opt-in (#2081 M1) ───────────────────────────────────────────────
91
+ // Read ONCE at worker init from `workerData` (the worker never sees
92
+ // PipelineOptions — config arrives via the pool factory's `workerData`, see
93
+ // KTD7 / U5). When `pdg` is set, the worker builds a per-function control-flow
94
+ // graph from the tree-sitter AST (where it lives) and serializes it onto
95
+ // `ParsedFile.cfgSideChannel`. Off ⇒ no CFG work and no field — the default for
96
+ // every run today. `pdgMaxFunctionLines` bounds per-function CFG cost
97
+ // (0/undefined ⇒ no cap; see collectFunctionCfgs).
98
+ const PDG_ENABLED = workerData?.pdg === true;
99
+ const PDG_MAX_FUNCTION_LINES = workerData?.pdgMaxFunctionLines ??
100
+ DEFAULT_PDG_MAX_FUNCTION_LINES;
93
101
  // ── Bootstrap-stage diagnostics (#1741) ────────────────────────────────────
94
102
  // When GITNEXUS_WORKER_BOOTSTRAP=1 (or --verbose sets GITNEXUS_VERBOSE), each
95
103
  // worker reports its startup stage timings to stderr — which the pool tees
@@ -503,6 +511,7 @@ const processBatch = (files, onProgress) => {
503
511
  fileScopeBindings: [],
504
512
  parsedFiles: [],
505
513
  skippedLanguages: {},
514
+ cfgSkipped: {},
506
515
  fileCount: 0,
507
516
  };
508
517
  // Group by language to minimize setLanguage calls
@@ -837,7 +846,52 @@ const processFileGroup = (files, language, queryString, result, onFileProcessed)
837
846
  // copy — scopes/defs are carried by reference) to attach the field rather
838
847
  // than mutate the frozen object.
839
848
  const sideChannel = provider.collectCaptureSideChannel?.(file.path);
840
- result.parsedFiles.push(sideChannel !== undefined ? { ...parsedFile, captureSideChannel: sideChannel } : parsedFile);
849
+ let withChannels = sideChannel !== undefined ? { ...parsedFile, captureSideChannel: sideChannel } : parsedFile;
850
+ // CFG side-channel (#2081 M1): build the per-function control-flow graph
851
+ // here, where the tree-sitter AST is still in hand, and attach it as plain
852
+ // serializable data. Only on a --pdg run and only for languages with a
853
+ // cfgVisitor (TS/JS in M1). The same disk-store/warm-cache machinery that
854
+ // carries captureSideChannel carries this — its coherence rests on the
855
+ // SCHEMA_BUMP + the pdg-folded chunk-hash key (see parse-cache.ts).
856
+ if (PDG_ENABLED && provider.cfgVisitor) {
857
+ // Isolate the CFG build per file: a throw here (an unexpected tree-sitter
858
+ // node shape) must NOT propagate — it would escape processFileGroup to the
859
+ // language-group catch, which treats any throw as "parser unavailable" and
860
+ // silently drops EVERY remaining file in the group. Skip CFG for this one
861
+ // file; parsing + scope resolution proceed unaffected (CFG is a
862
+ // strictly-additive opt-in). collectFunctionCfgs ALSO isolates per
863
+ // FUNCTION now (#2195) — a deep-nesting bail or a single malformed function
864
+ // is counted in `skipped` and skipped, not allowed to lose the whole file.
865
+ try {
866
+ const { cfgs, skipped } = collectFunctionCfgs(tree.rootNode, provider.cfgVisitor, file.path, PDG_MAX_FUNCTION_LINES,
867
+ // Embedded scripts (Vue SFC <script>) parse at row 0 but live at
868
+ // `lineOffset` in the file — shift the CFG into file coordinates so
869
+ // it joins its graph node and BasicBlock lines map to source.
870
+ lineOffset);
871
+ if (cfgs.length)
872
+ withChannels = { ...withChannels, cfgSideChannel: cfgs };
873
+ // Surface per-function CFG skips per-language (#2195): merged + logged
874
+ // in mergeChunkResults. Only accumulate when something was skipped so
875
+ // the common (nothing-skipped) case stays a no-op.
876
+ if (skipped.tooManyLines || skipped.tooDeeplyNested || skipped.buildError) {
877
+ const agg = (result.cfgSkipped ??= {});
878
+ const prev = agg[language] ?? { tooManyLines: 0, tooDeeplyNested: 0, buildError: 0 };
879
+ agg[language] = {
880
+ tooManyLines: prev.tooManyLines + skipped.tooManyLines,
881
+ tooDeeplyNested: prev.tooDeeplyNested + skipped.tooDeeplyNested,
882
+ buildError: prev.buildError + skipped.buildError,
883
+ };
884
+ }
885
+ }
886
+ catch (err) {
887
+ const message = `CFG build failed for ${file.path}: ${err instanceof Error ? err.message : String(err)}`;
888
+ if (parentPort)
889
+ parentPort.postMessage({ type: 'warning', message });
890
+ else
891
+ logger.warn(message);
892
+ }
893
+ }
894
+ result.parsedFiles.push(withChannels);
841
895
  }
842
896
  // Build per-file type environment + constructor bindings in a single AST walk.
843
897
  // The legacy heritage pre-pass that seeded a file-local parentMap for
@@ -1677,6 +1731,9 @@ const processFileGroup = (files, language, queryString, result, onFileProcessed)
1677
1731
  isReadonly: methodProps.isReadonly,
1678
1732
  isAbstract: methodProps.isAbstract,
1679
1733
  isFinal: methodProps.isFinal,
1734
+ ...(methodProps.isDeleted !== undefined
1735
+ ? { isDeleted: methodProps.isDeleted }
1736
+ : {}),
1680
1737
  ...(methodProps.isVirtual !== undefined
1681
1738
  ? { isVirtual: methodProps.isVirtual }
1682
1739
  : {}),
@@ -1792,6 +1849,7 @@ let accumulated = {
1792
1849
  fileScopeBindings: [],
1793
1850
  parsedFiles: [],
1794
1851
  skippedLanguages: {},
1852
+ cfgSkipped: {},
1795
1853
  fileCount: 0,
1796
1854
  };
1797
1855
  let cumulativeProcessed = 0;
@@ -1910,6 +1968,7 @@ parentPort.on('message', (msg) => {
1910
1968
  fileScopeBindings: [],
1911
1969
  parsedFiles: [],
1912
1970
  skippedLanguages: {},
1971
+ cfgSkipped: {},
1913
1972
  fileCount: 0,
1914
1973
  };
1915
1974
  cumulativeProcessed = 0;
@@ -1,30 +1,4 @@
1
1
  import { Worker } from 'node:worker_threads';
2
- /**
3
- * Build the sub-batch dispatch payload + transferList.
4
- *
5
- * For the parse-worker shape `{path, content: string}[]`, encodes each
6
- * file's content as a `Uint8Array` via `TextEncoder` so the underlying
7
- * `ArrayBuffer` can be transferred zero-copy. For any other input
8
- * shape, the items array is passed through verbatim (no transfer).
9
- *
10
- * @internal Exported for the unit test suite
11
- * (`test/unit/worker-pool-transferlist.test.ts`) so the
12
- * Uint8Array-per-content allocation contract can be pinned without
13
- * spinning up a real worker_threads.
14
- */
15
- export declare function buildDispatchMessage<T>(items: readonly T[]): {
16
- message: {
17
- type: 'sub-batch';
18
- files: Array<{
19
- path: string;
20
- content: Uint8Array;
21
- }>;
22
- } | {
23
- type: 'sub-batch';
24
- files: readonly T[];
25
- };
26
- transferList?: ArrayBuffer[];
27
- };
28
2
  export interface WorkerPool {
29
3
  /**
30
4
  * Dispatch items across workers. Items are split into bounded jobs, each job
@@ -152,6 +126,15 @@ export interface WorkerPoolOptions {
152
126
  * `undefined` ⇒ no durable write.
153
127
  */
154
128
  durableParsedFileStoragePath?: string;
129
+ /**
130
+ * CFG/PDG opt-in (#2081 M1). Baked into every spawned worker's `workerData`
131
+ * (like the store paths above); when `true`, workers build a per-function
132
+ * control-flow graph from the tree-sitter AST and attach it to
133
+ * `ParsedFile.cfgSideChannel`. `undefined`/`false` ⇒ no CFG work.
134
+ */
135
+ pdg?: boolean;
136
+ /** Per-function source-line cap for worker-side CFG construction (0 ⇒ no cap). */
137
+ pdgMaxFunctionLines?: number;
155
138
  }
156
139
  export declare class WorkerPoolDispatchError extends Error {
157
140
  /**
@@ -201,20 +184,6 @@ export declare class WorkerPoolInitializationError extends WorkerPoolDispatchErr
201
184
  export declare class WorkerPoolDisabledError extends Error {
202
185
  constructor(message: string);
203
186
  }
204
- /**
205
- * Normalize a worker crash message into a stable signature so two instances of
206
- * the SAME deterministic crash compare equal while unrelated crashes don't.
207
- * Strips hex addresses, digit runs (pids / line numbers / timestamps) and
208
- * absolute paths. Best-effort by design: the deterministic classification's
209
- * correctness rests on the STRUCTURAL signal (zero workers ever ready + startup
210
- * budget exhausted), so an imperfect signature only changes how fast the
211
- * short-circuit fires, never whether the pool ultimately fails fast. Even a
212
- * stderr-less crash normalizes its "exited with code N" message to a stable
213
- * key, so the empty-stderr timing case still groups.
214
- *
215
- * @internal Exported for unit tests; production callers are in this module.
216
- */
217
- export declare function crashSignature(message: string): string;
218
187
  interface ResolvedWorkerPoolOptions {
219
188
  subBatchSize: number;
220
189
  subBatchMaxBytes: number;
@@ -550,13 +550,26 @@ export const createWorkerPool = (workerUrl, poolSize, options) => {
550
550
  // signature is unchanged so the zero-arg test factories keep working.
551
551
  const parsedFileStoreStoragePath = options?.parsedFileStoreStoragePath;
552
552
  const durableParsedFileStoragePath = options?.durableParsedFileStoragePath;
553
- const workerStoreData = parsedFileStoreStoragePath || durableParsedFileStoragePath
554
- ? { parsedFileStoreStoragePath, durableParsedFileStoragePath }
553
+ // CFG/PDG opt-in (#2081 M1) — carried in workerData alongside the store paths.
554
+ const pdg = options?.pdg === true;
555
+ const pdgMaxFunctionLines = options?.pdgMaxFunctionLines;
556
+ const workerStoreData = parsedFileStoreStoragePath || durableParsedFileStoragePath || pdg
557
+ ? { parsedFileStoreStoragePath, durableParsedFileStoragePath, pdg, pdgMaxFunctionLines }
555
558
  : undefined;
556
559
  const spawnWorker = options?.workerFactory ??
557
560
  ((url) => new Worker(url, {
558
561
  stderr: true,
559
562
  workerData: workerStoreData,
563
+ // The CFG visitors build per-function control-flow graphs by RECURSIVE
564
+ // descent over the tree-sitter AST, so deeply-nested source overflows
565
+ // the worker thread's call stack. A worker's stack is governed by
566
+ // `resourceLimits.stackSizeMb` (Node default 4 MB) — the main process's
567
+ // `--stack-size` flag does NOT propagate to worker threads — so raise it
568
+ // here. This pushes the overflow threshold from ~1.5k to several-k
569
+ // nesting levels (far beyond any hand-written code); a deeper machine-
570
+ // generated nest is still caught per-function (buildFunctionCfg's R4
571
+ // try/catch) and only that function's PDG is skipped, never a crash.
572
+ resourceLimits: { stackSizeMb: 16 },
560
573
  }));
561
574
  /** Spawn + wire stderr capture in one step (used by all spawn sites). */
562
575
  const spawnAndCapture = (url) => {
@@ -11,23 +11,71 @@
11
11
  * - Double quotes within fields are escaped by doubling them ("")
12
12
  * - All fields are consistently quoted for safety with code content
13
13
  */
14
+ import type { GraphNode, GraphRelationship } from '../../_shared/index.js';
14
15
  import { KnowledgeGraph } from '../graph/types.js';
15
16
  import { NodeTableName } from './schema.js';
16
17
  export declare const sanitizeUTF8: (str: string) => string;
17
18
  export declare const escapeCSVField: (value: string | number | undefined | null) => string;
18
19
  export declare const escapeCSVNumber: (value: number | undefined | null, defaultValue?: number) => string;
19
20
  export declare const isBinaryContent: (content: string) => boolean;
21
+ /** Canonical relationship CSV header — shared by the emit pass and the
22
+ * `splitRelCsvByLabelPair` differential oracle. */
23
+ export declare const REL_CSV_HEADER = "from,to,type,confidence,reason,step";
24
+ /** Build the escaped CSV row (no trailing newline) for one relationship.
25
+ * Single source of the relationship row bytes — used by the emit pass and by
26
+ * the byte-identity differential test that feeds the legacy split oracle. */
27
+ export declare const buildRelRow: (rel: GraphRelationship) => string;
28
+ /** Canonical BasicBlock node CSV header — taint/PDG substrate (issue #2080).
29
+ * No `name` column; blocks are identified by id + source span. Shared by the
30
+ * whole-graph emit pass and the streaming PDG emit sink (issue #2202) so the
31
+ * two paths produce byte-identical BasicBlock rows by construction. */
32
+ export declare const BASICBLOCK_CSV_HEADER = "id,filePath,startLine,endLine,text,callees,calleeIds";
33
+ /** Build the escaped CSV row (no trailing newline) for one BasicBlock node.
34
+ * Single source of the BasicBlock row bytes — used by `streamAllCSVsToDisk`
35
+ * and by the streaming `PdgEmitSink` (issue #2202). `callees` is a comma-free
36
+ * (space-joined) list of the leaf callee names invoked in the block — the
37
+ * statement-precise inter-procedural reach substrate (the field is itself a CSV
38
+ * cell, so the inner separator must NOT be a comma). `calleeIds` is the SOUND
39
+ * parallel to `callees`: the space-joined RESOLVED callee symbol ids for the
40
+ * block (#2227 follow-up), likewise a comma-free cell. */
41
+ export declare const buildBasicBlockRow: (node: GraphNode) => string;
20
42
  export interface StreamedCSVResult {
21
43
  nodeFiles: Map<NodeTableName, {
22
44
  csvPath: string;
23
45
  rows: number;
24
46
  }>;
25
- relCsvPath: string;
26
- relRows: number;
47
+ /** pairKey (`From|To`) → per-FROM→TO-label-pair CSV file. */
48
+ relsByPair: Map<string, {
49
+ csvPath: string;
50
+ rows: number;
51
+ }>;
52
+ /** Header line shared by every per-pair file. */
53
+ relHeader: string;
54
+ /** Edges skipped because an endpoint label is not a valid node table. */
55
+ skippedRels: number;
56
+ /** Edges routed to a per-pair file. */
57
+ totalValidRels: number;
27
58
  }
28
59
  /**
29
60
  * Stream all CSV data directly to disk files.
30
61
  * Iterates graph nodes exactly ONCE — routes each node to the right writer.
31
62
  * File contents are lazy-read from disk with a generous LRU cache.
63
+ *
64
+ * `onNodePhaseComplete` (optional, #2203 parallelism leg): fired exactly once,
65
+ * right after every node CSV is fully flushed to disk and BEFORE the
66
+ * relationship pass starts writing any `rel_*.csv`. It receives the finished
67
+ * node-file manifest so the caller can begin `COPY`-ing nodes while this
68
+ * function keeps generating relationship CSVs (the only single-writer-safe
69
+ * overlap — node `COPY` ‖ relationship emit). It is intentionally NOT awaited:
70
+ * the relationship pass proceeds concurrently with whatever the caller
71
+ * schedules. A synchronous throw from the callback is allowed and propagates out
72
+ * of this function (rejecting the returned promise) — it is raised before the
73
+ * relationship pass begins, so no `rel_*.csv` is written; `loadGraphToLbug` uses
74
+ * this to surface its PDG-manifest collision guard. The callback must NOT, however,
75
+ * schedule un-awaited async work that can reject unobserved. Absent ⇒ today's
76
+ * behavior, byte-for-byte.
32
77
  */
33
- export declare const streamAllCSVsToDisk: (graph: KnowledgeGraph, repoPath: string, csvDir: string) => Promise<StreamedCSVResult>;
78
+ export declare const streamAllCSVsToDisk: (graph: KnowledgeGraph, repoPath: string, csvDir: string, onNodePhaseComplete?: (nodeFiles: Map<NodeTableName, {
79
+ csvPath: string;
80
+ rows: number;
81
+ }>) => void) => Promise<StreamedCSVResult>;