cgraphx 2.0.1 → 2.0.3

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 (701) hide show
  1. package/dist/.claude-template/FLOW-MAP.md +7 -5
  2. package/dist/.claude-template/commands/end.md +1 -1
  3. package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +2 -1
  4. package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +4 -2
  5. package/dist/.claude-template/skills/cgraphx-guide/how-to-use.md +5 -2
  6. package/dist/.claude-template/skills/iboc-check/SKILL.md +116 -0
  7. package/dist/.claude-template/skills/iboc-check/filler-prompt.md +75 -0
  8. package/dist/.claude-template/skills/implementation/SKILL.md +7 -0
  9. package/dist/.claude-template/skills/init-project-guides/SKILL.md +1 -1
  10. package/dist/.claude-template/skills/run-api-test/references/db-verification.md +2 -2
  11. package/dist/.claude-template/skills/subagent-implement/SKILL.md +3 -2
  12. package/dist/.claude-template/skills/write-api/assets/template-request.bru +3 -3
  13. package/dist/.claude-template/skills/write-api/references/bru-format.md +6 -6
  14. package/dist/.claude-template/skills/write-delivery-guide/SKILL.md +97 -0
  15. package/dist/.claude-template/skills/write-delivery-guide/template-change-type.md +120 -0
  16. package/dist/.claude-template/skills/write-delivery-guide/template-multi-role-flow.md +148 -0
  17. package/dist/.claude-template/skills/write-unit-test-code/SKILL.md +23 -6
  18. package/dist/core/code/engine/cli/analyze-config.js +320 -0
  19. package/dist/core/code/engine/cli/analyze.js +1086 -0
  20. package/dist/core/code/engine/cli/cli-message.js +83 -0
  21. package/dist/core/code/engine/cli/detect-changes-format.js +58 -0
  22. package/dist/core/code/engine/cli/embedding-dims.js +43 -0
  23. package/dist/core/code/engine/cli/format-elapsed.js +12 -0
  24. package/dist/core/code/engine/cli/help-i18n.js +144 -0
  25. package/dist/core/code/engine/cli/i18n/en.js +110 -0
  26. package/dist/core/code/engine/cli/i18n/index.js +47 -0
  27. package/dist/core/code/engine/cli/i18n/resources.js +9 -0
  28. package/dist/core/code/engine/cli/i18n/zh-CN.js +110 -0
  29. package/dist/core/code/engine/cli/lazy-action.js +67 -0
  30. package/dist/core/code/engine/cli/optional-grammars.js +136 -0
  31. package/dist/core/code/engine/cli/resolve-invocation.js +76 -0
  32. package/dist/core/code/engine/cli/status.js +156 -0
  33. package/dist/core/code/engine/cli/tool.js +384 -0
  34. package/dist/core/code/engine/config/ignore-service.js +511 -0
  35. package/dist/core/code/engine/config/supported-languages.js +17 -0
  36. package/dist/core/code/engine/core/analysis-features.js +64 -0
  37. package/dist/core/code/engine/core/analyzer-identity.js +2171 -0
  38. package/dist/core/code/engine/core/git-staleness.js +180 -0
  39. package/dist/core/code/engine/core/graph/graph.js +180 -0
  40. package/dist/core/code/engine/core/graph/import-cycles.js +106 -0
  41. package/dist/core/code/engine/core/graph/types.js +2 -0
  42. package/dist/core/code/engine/core/index-freshness.js +12 -0
  43. package/dist/core/code/engine/core/ingestion/binding-accumulator.js +341 -0
  44. package/dist/core/code/engine/core/ingestion/call-extractors/configs/c-cpp.js +168 -0
  45. package/dist/core/code/engine/core/ingestion/call-extractors/configs/csharp.js +9 -0
  46. package/dist/core/code/engine/core/ingestion/call-extractors/configs/dart.js +8 -0
  47. package/dist/core/code/engine/core/ingestion/call-extractors/configs/go.js +8 -0
  48. package/dist/core/code/engine/core/ingestion/call-extractors/configs/jvm.js +54 -0
  49. package/dist/core/code/engine/core/ingestion/call-extractors/configs/php.js +8 -0
  50. package/dist/core/code/engine/core/ingestion/call-extractors/configs/python.js +8 -0
  51. package/dist/core/code/engine/core/ingestion/call-extractors/configs/ruby.js +8 -0
  52. package/dist/core/code/engine/core/ingestion/call-extractors/configs/rust.js +8 -0
  53. package/dist/core/code/engine/core/ingestion/call-extractors/configs/swift.js +8 -0
  54. package/dist/core/code/engine/core/ingestion/call-extractors/configs/typescript-javascript.js +11 -0
  55. package/dist/core/code/engine/core/ingestion/call-extractors/generic.js +62 -0
  56. package/dist/core/code/engine/core/ingestion/call-processor.js +503 -0
  57. package/dist/core/code/engine/core/ingestion/call-routing.js +98 -0
  58. package/dist/core/code/engine/core/ingestion/call-types.js +3 -0
  59. package/dist/core/code/engine/core/ingestion/cfg/callee-cell-format.js +45 -0
  60. package/dist/core/code/engine/core/ingestion/cfg/cfg-builder.js +202 -0
  61. package/dist/core/code/engine/core/ingestion/cfg/collect.js +81 -0
  62. package/dist/core/code/engine/core/ingestion/cfg/control-dependence.js +185 -0
  63. package/dist/core/code/engine/core/ingestion/cfg/control-flow-context.js +130 -0
  64. package/dist/core/code/engine/core/ingestion/cfg/emit.js +646 -0
  65. package/dist/core/code/engine/core/ingestion/cfg/post-dominators.js +182 -0
  66. package/dist/core/code/engine/core/ingestion/cfg/reaching-def-reason-codec.js +139 -0
  67. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs-graph.js +322 -0
  68. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs.js +792 -0
  69. package/dist/core/code/engine/core/ingestion/cfg/synthetic-escape.js +305 -0
  70. package/dist/core/code/engine/core/ingestion/cfg/traversal-result.js +6 -0
  71. package/dist/core/code/engine/core/ingestion/cfg/types.js +14 -0
  72. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp-harvest.js +545 -0
  73. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp.js +590 -0
  74. package/dist/core/code/engine/core/ingestion/cfg/visitors/call-site-harvest.js +356 -0
  75. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp-harvest.js +593 -0
  76. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp.js +871 -0
  77. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart-harvest.js +874 -0
  78. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart.js +840 -0
  79. package/dist/core/code/engine/core/ingestion/cfg/visitors/go-harvest.js +625 -0
  80. package/dist/core/code/engine/core/ingestion/cfg/visitors/go.js +642 -0
  81. package/dist/core/code/engine/core/ingestion/cfg/visitors/java-harvest.js +517 -0
  82. package/dist/core/code/engine/core/ingestion/cfg/visitors/java.js +816 -0
  83. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin-harvest.js +723 -0
  84. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin.js +813 -0
  85. package/dist/core/code/engine/core/ingestion/cfg/visitors/php-harvest.js +630 -0
  86. package/dist/core/code/engine/core/ingestion/cfg/visitors/php.js +725 -0
  87. package/dist/core/code/engine/core/ingestion/cfg/visitors/python-harvest.js +776 -0
  88. package/dist/core/code/engine/core/ingestion/cfg/visitors/python.js +562 -0
  89. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby-harvest.js +591 -0
  90. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby.js +760 -0
  91. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust-harvest.js +877 -0
  92. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust.js +562 -0
  93. package/dist/core/code/engine/core/ingestion/cfg/visitors/scope-tree-harvest.js +120 -0
  94. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift-harvest.js +683 -0
  95. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift.js +791 -0
  96. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript-harvest.js +1060 -0
  97. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript.js +587 -0
  98. package/dist/core/code/engine/core/ingestion/class-extractors/configs/c-cpp.js +77 -0
  99. package/dist/core/code/engine/core/ingestion/class-extractors/configs/csharp.js +24 -0
  100. package/dist/core/code/engine/core/ingestion/class-extractors/configs/dart.js +10 -0
  101. package/dist/core/code/engine/core/ingestion/class-extractors/configs/go.js +28 -0
  102. package/dist/core/code/engine/core/ingestion/class-extractors/configs/jvm.js +67 -0
  103. package/dist/core/code/engine/core/ingestion/class-extractors/configs/php.js +10 -0
  104. package/dist/core/code/engine/core/ingestion/class-extractors/configs/python.js +10 -0
  105. package/dist/core/code/engine/core/ingestion/class-extractors/configs/ruby.js +13 -0
  106. package/dist/core/code/engine/core/ingestion/class-extractors/configs/rust.js +10 -0
  107. package/dist/core/code/engine/core/ingestion/class-extractors/configs/swift.js +21 -0
  108. package/dist/core/code/engine/core/ingestion/class-extractors/configs/typescript-javascript.js +31 -0
  109. package/dist/core/code/engine/core/ingestion/class-extractors/generic.js +144 -0
  110. package/dist/core/code/engine/core/ingestion/class-types.js +2 -0
  111. package/dist/core/code/engine/core/ingestion/cluster-enricher.js +174 -0
  112. package/dist/core/code/engine/core/ingestion/community-processor.js +604 -0
  113. package/dist/core/code/engine/core/ingestion/constants.js +26 -0
  114. package/dist/core/code/engine/core/ingestion/cpp-ue-preprocessor.js +263 -0
  115. package/dist/core/code/engine/core/ingestion/csharp-namespace-gate.js +133 -0
  116. package/dist/core/code/engine/core/ingestion/di-extractors/index.js +38 -0
  117. package/dist/core/code/engine/core/ingestion/di-extractors/spring.js +310 -0
  118. package/dist/core/code/engine/core/ingestion/emit-references.js +244 -0
  119. package/dist/core/code/engine/core/ingestion/entry-point-scoring.js +201 -0
  120. package/dist/core/code/engine/core/ingestion/export-detection.js +244 -0
  121. package/dist/core/code/engine/core/ingestion/field-extractor.js +29 -0
  122. package/dist/core/code/engine/core/ingestion/field-extractors/configs/c-cpp.js +107 -0
  123. package/dist/core/code/engine/core/ingestion/field-extractors/configs/csharp.js +124 -0
  124. package/dist/core/code/engine/core/ingestion/field-extractors/configs/dart.js +99 -0
  125. package/dist/core/code/engine/core/ingestion/field-extractors/configs/go.js +102 -0
  126. package/dist/core/code/engine/core/ingestion/field-extractors/configs/helpers.js +198 -0
  127. package/dist/core/code/engine/core/ingestion/field-extractors/configs/jvm.js +172 -0
  128. package/dist/core/code/engine/core/ingestion/field-extractors/configs/php.js +67 -0
  129. package/dist/core/code/engine/core/ingestion/field-extractors/configs/python.js +94 -0
  130. package/dist/core/code/engine/core/ingestion/field-extractors/configs/ruby.js +79 -0
  131. package/dist/core/code/engine/core/ingestion/field-extractors/configs/rust.js +55 -0
  132. package/dist/core/code/engine/core/ingestion/field-extractors/configs/swift.js +93 -0
  133. package/dist/core/code/engine/core/ingestion/field-extractors/configs/typescript-javascript.js +59 -0
  134. package/dist/core/code/engine/core/ingestion/field-extractors/generic.js +147 -0
  135. package/dist/core/code/engine/core/ingestion/field-extractors/typescript.js +266 -0
  136. package/dist/core/code/engine/core/ingestion/field-types.js +3 -0
  137. package/dist/core/code/engine/core/ingestion/filesystem-walker.js +136 -0
  138. package/dist/core/code/engine/core/ingestion/finalize-orchestrator.js +159 -0
  139. package/dist/core/code/engine/core/ingestion/framework-detection.js +432 -0
  140. package/dist/core/code/engine/core/ingestion/frameworks/spring/analysis-features.js +38 -0
  141. package/dist/core/code/engine/core/ingestion/frameworks/spring/annotation-arguments.js +234 -0
  142. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop-candidates.js +88 -0
  143. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop.js +487 -0
  144. package/dist/core/code/engine/core/ingestion/frameworks/spring/auto-configuration.js +21 -0
  145. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-candidates.js +189 -0
  146. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-catalog.js +32 -0
  147. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-factories.js +73 -0
  148. package/dist/core/code/engine/core/ingestion/frameworks/spring/conditionals.js +323 -0
  149. package/dist/core/code/engine/core/ingestion/frameworks/spring/config-bindings.js +119 -0
  150. package/dist/core/code/engine/core/ingestion/frameworks/spring/di-metadata.js +385 -0
  151. package/dist/core/code/engine/core/ingestion/frameworks/spring/resource-injection.js +96 -0
  152. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/c-cpp.js +17 -0
  153. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/csharp.js +46 -0
  154. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/dart.js +59 -0
  155. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/go.js +30 -0
  156. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/jvm.js +73 -0
  157. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/php.js +19 -0
  158. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/python.js +45 -0
  159. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/ruby.js +20 -0
  160. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/rust.js +58 -0
  161. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/swift.js +94 -0
  162. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/typescript-javascript.js +26 -0
  163. package/dist/core/code/engine/core/ingestion/import-resolvers/csharp.js +128 -0
  164. package/dist/core/code/engine/core/ingestion/import-resolvers/go.js +50 -0
  165. package/dist/core/code/engine/core/ingestion/import-resolvers/jvm.js +112 -0
  166. package/dist/core/code/engine/core/ingestion/import-resolvers/php.js +80 -0
  167. package/dist/core/code/engine/core/ingestion/import-resolvers/python.js +75 -0
  168. package/dist/core/code/engine/core/ingestion/import-resolvers/resolver-factory.js +36 -0
  169. package/dist/core/code/engine/core/ingestion/import-resolvers/ruby.js +20 -0
  170. package/dist/core/code/engine/core/ingestion/import-resolvers/rust.js +79 -0
  171. package/dist/core/code/engine/core/ingestion/import-resolvers/standard.js +180 -0
  172. package/dist/core/code/engine/core/ingestion/import-resolvers/types.js +7 -0
  173. package/dist/core/code/engine/core/ingestion/import-resolvers/utils.js +153 -0
  174. package/dist/core/code/engine/core/ingestion/import-target-adapter.js +99 -0
  175. package/dist/core/code/engine/core/ingestion/language-config.js +391 -0
  176. package/dist/core/code/engine/core/ingestion/language-provider.js +25 -0
  177. package/dist/core/code/engine/core/ingestion/languages/c/arity-metadata.js +98 -0
  178. package/dist/core/code/engine/core/ingestion/languages/c/arity.js +21 -0
  179. package/dist/core/code/engine/core/ingestion/languages/c/capture-side-channel.js +69 -0
  180. package/dist/core/code/engine/core/ingestion/languages/c/captures.js +189 -0
  181. package/dist/core/code/engine/core/ingestion/languages/c/header-scan.js +58 -0
  182. package/dist/core/code/engine/core/ingestion/languages/c/import-decomposer.js +68 -0
  183. package/dist/core/code/engine/core/ingestion/languages/c/import-target.js +103 -0
  184. package/dist/core/code/engine/core/ingestion/languages/c/index.js +33 -0
  185. package/dist/core/code/engine/core/ingestion/languages/c/interpret.js +53 -0
  186. package/dist/core/code/engine/core/ingestion/languages/c/merge-bindings.js +26 -0
  187. package/dist/core/code/engine/core/ingestion/languages/c/query.js +210 -0
  188. package/dist/core/code/engine/core/ingestion/languages/c/scope-resolver.js +112 -0
  189. package/dist/core/code/engine/core/ingestion/languages/c/simple-hooks.js +24 -0
  190. package/dist/core/code/engine/core/ingestion/languages/c/static-linkage.js +109 -0
  191. package/dist/core/code/engine/core/ingestion/languages/c-cpp.js +506 -0
  192. package/dist/core/code/engine/core/ingestion/languages/cpp/adl.js +804 -0
  193. package/dist/core/code/engine/core/ingestion/languages/cpp/arity-metadata.js +258 -0
  194. package/dist/core/code/engine/core/ingestion/languages/cpp/arity.js +37 -0
  195. package/dist/core/code/engine/core/ingestion/languages/cpp/capture-side-channel.js +89 -0
  196. package/dist/core/code/engine/core/ingestion/languages/cpp/captures.js +1975 -0
  197. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-extractor.js +311 -0
  198. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-filter.js +210 -0
  199. package/dist/core/code/engine/core/ingestion/languages/cpp/conversion-rank.js +163 -0
  200. package/dist/core/code/engine/core/ingestion/languages/cpp/file-local-linkage.js +327 -0
  201. package/dist/core/code/engine/core/ingestion/languages/cpp/header-scan.js +53 -0
  202. package/dist/core/code/engine/core/ingestion/languages/cpp/import-decomposer.js +134 -0
  203. package/dist/core/code/engine/core/ingestion/languages/cpp/import-target.js +16 -0
  204. package/dist/core/code/engine/core/ingestion/languages/cpp/index.js +33 -0
  205. package/dist/core/code/engine/core/ingestion/languages/cpp/inline-namespaces.js +379 -0
  206. package/dist/core/code/engine/core/ingestion/languages/cpp/interpret.js +239 -0
  207. package/dist/core/code/engine/core/ingestion/languages/cpp/member-lookup.js +470 -0
  208. package/dist/core/code/engine/core/ingestion/languages/cpp/merge-bindings.js +32 -0
  209. package/dist/core/code/engine/core/ingestion/languages/cpp/query.js +763 -0
  210. package/dist/core/code/engine/core/ingestion/languages/cpp/range-bindings.js +230 -0
  211. package/dist/core/code/engine/core/ingestion/languages/cpp/scope-resolver.js +354 -0
  212. package/dist/core/code/engine/core/ingestion/languages/cpp/simple-hooks.js +67 -0
  213. package/dist/core/code/engine/core/ingestion/languages/cpp/two-phase-lookup.js +348 -0
  214. package/dist/core/code/engine/core/ingestion/languages/cpp/type-classifier.js +56 -0
  215. package/dist/core/code/engine/core/ingestion/languages/cpp/user-defined-conversions.js +128 -0
  216. package/dist/core/code/engine/core/ingestion/languages/csharp/accessor-unwrap.js +67 -0
  217. package/dist/core/code/engine/core/ingestion/languages/csharp/arity-metadata.js +49 -0
  218. package/dist/core/code/engine/core/ingestion/languages/csharp/arity.js +40 -0
  219. package/dist/core/code/engine/core/ingestion/languages/csharp/cache-stats.js +32 -0
  220. package/dist/core/code/engine/core/ingestion/languages/csharp/captures.js +557 -0
  221. package/dist/core/code/engine/core/ingestion/languages/csharp/import-decomposer.js +96 -0
  222. package/dist/core/code/engine/core/ingestion/languages/csharp/import-target.js +176 -0
  223. package/dist/core/code/engine/core/ingestion/languages/csharp/index.js +95 -0
  224. package/dist/core/code/engine/core/ingestion/languages/csharp/interpret.js +150 -0
  225. package/dist/core/code/engine/core/ingestion/languages/csharp/merge-bindings.js +58 -0
  226. package/dist/core/code/engine/core/ingestion/languages/csharp/namespace-siblings.js +708 -0
  227. package/dist/core/code/engine/core/ingestion/languages/csharp/qualified-type-names.js +62 -0
  228. package/dist/core/code/engine/core/ingestion/languages/csharp/query.js +578 -0
  229. package/dist/core/code/engine/core/ingestion/languages/csharp/receiver-binding.js +142 -0
  230. package/dist/core/code/engine/core/ingestion/languages/csharp/resolution-config.js +18 -0
  231. package/dist/core/code/engine/core/ingestion/languages/csharp/scope-resolver.js +84 -0
  232. package/dist/core/code/engine/core/ingestion/languages/csharp/simple-hooks.js +81 -0
  233. package/dist/core/code/engine/core/ingestion/languages/csharp.js +204 -0
  234. package/dist/core/code/engine/core/ingestion/languages/dart/arity-metadata.js +38 -0
  235. package/dist/core/code/engine/core/ingestion/languages/dart/arity.js +34 -0
  236. package/dist/core/code/engine/core/ingestion/languages/dart/built-ins.js +37 -0
  237. package/dist/core/code/engine/core/ingestion/languages/dart/cache-stats.js +30 -0
  238. package/dist/core/code/engine/core/ingestion/languages/dart/captures.js +1096 -0
  239. package/dist/core/code/engine/core/ingestion/languages/dart/expand-wildcards.js +34 -0
  240. package/dist/core/code/engine/core/ingestion/languages/dart/extension-type-preprocess.js +33 -0
  241. package/dist/core/code/engine/core/ingestion/languages/dart/import-target.js +68 -0
  242. package/dist/core/code/engine/core/ingestion/languages/dart/index.js +45 -0
  243. package/dist/core/code/engine/core/ingestion/languages/dart/interpret.js +101 -0
  244. package/dist/core/code/engine/core/ingestion/languages/dart/merge-bindings.js +42 -0
  245. package/dist/core/code/engine/core/ingestion/languages/dart/query.js +246 -0
  246. package/dist/core/code/engine/core/ingestion/languages/dart/receiver-binding.js +90 -0
  247. package/dist/core/code/engine/core/ingestion/languages/dart/scope-resolver.js +197 -0
  248. package/dist/core/code/engine/core/ingestion/languages/dart/signature-bindings.js +54 -0
  249. package/dist/core/code/engine/core/ingestion/languages/dart/simple-hooks.js +61 -0
  250. package/dist/core/code/engine/core/ingestion/languages/dart.js +138 -0
  251. package/dist/core/code/engine/core/ingestion/languages/go/arity-metadata.js +71 -0
  252. package/dist/core/code/engine/core/ingestion/languages/go/arity.js +17 -0
  253. package/dist/core/code/engine/core/ingestion/languages/go/cache-stats.js +21 -0
  254. package/dist/core/code/engine/core/ingestion/languages/go/captures.js +492 -0
  255. package/dist/core/code/engine/core/ingestion/languages/go/expand-wildcards.js +97 -0
  256. package/dist/core/code/engine/core/ingestion/languages/go/generic-type-parameters.js +146 -0
  257. package/dist/core/code/engine/core/ingestion/languages/go/import-decomposer.js +47 -0
  258. package/dist/core/code/engine/core/ingestion/languages/go/import-target.js +70 -0
  259. package/dist/core/code/engine/core/ingestion/languages/go/index.js +39 -0
  260. package/dist/core/code/engine/core/ingestion/languages/go/interface-impls.js +955 -0
  261. package/dist/core/code/engine/core/ingestion/languages/go/interpret.js +177 -0
  262. package/dist/core/code/engine/core/ingestion/languages/go/merge-bindings.js +21 -0
  263. package/dist/core/code/engine/core/ingestion/languages/go/method-owners.js +131 -0
  264. package/dist/core/code/engine/core/ingestion/languages/go/namespace-mirror.js +56 -0
  265. package/dist/core/code/engine/core/ingestion/languages/go/package-clause.js +79 -0
  266. package/dist/core/code/engine/core/ingestion/languages/go/package-siblings.js +83 -0
  267. package/dist/core/code/engine/core/ingestion/languages/go/query.js +298 -0
  268. package/dist/core/code/engine/core/ingestion/languages/go/range-binding.js +127 -0
  269. package/dist/core/code/engine/core/ingestion/languages/go/receiver-binding.js +24 -0
  270. package/dist/core/code/engine/core/ingestion/languages/go/scope-resolver.js +75 -0
  271. package/dist/core/code/engine/core/ingestion/languages/go/simple-hooks.js +31 -0
  272. package/dist/core/code/engine/core/ingestion/languages/go/type-binding.js +279 -0
  273. package/dist/core/code/engine/core/ingestion/languages/go.js +160 -0
  274. package/dist/core/code/engine/core/ingestion/languages/index.js +66 -0
  275. package/dist/core/code/engine/core/ingestion/languages/java/analysis-features.js +16 -0
  276. package/dist/core/code/engine/core/ingestion/languages/java/arity-metadata.js +43 -0
  277. package/dist/core/code/engine/core/ingestion/languages/java/arity.js +27 -0
  278. package/dist/core/code/engine/core/ingestion/languages/java/cache-stats.js +32 -0
  279. package/dist/core/code/engine/core/ingestion/languages/java/capture-side-channel.js +123 -0
  280. package/dist/core/code/engine/core/ingestion/languages/java/captures.js +791 -0
  281. package/dist/core/code/engine/core/ingestion/languages/java/import-decomposer.js +88 -0
  282. package/dist/core/code/engine/core/ingestion/languages/java/import-target.js +103 -0
  283. package/dist/core/code/engine/core/ingestion/languages/java/index.js +43 -0
  284. package/dist/core/code/engine/core/ingestion/languages/java/interpret.js +146 -0
  285. package/dist/core/code/engine/core/ingestion/languages/java/merge-bindings.js +43 -0
  286. package/dist/core/code/engine/core/ingestion/languages/java/package-facts.js +16 -0
  287. package/dist/core/code/engine/core/ingestion/languages/java/package-siblings.js +11 -0
  288. package/dist/core/code/engine/core/ingestion/languages/java/query.js +319 -0
  289. package/dist/core/code/engine/core/ingestion/languages/java/receiver-binding.js +98 -0
  290. package/dist/core/code/engine/core/ingestion/languages/java/scope-resolver.js +213 -0
  291. package/dist/core/code/engine/core/ingestion/languages/java/simple-hooks.js +39 -0
  292. package/dist/core/code/engine/core/ingestion/languages/java/spring-aop.js +53 -0
  293. package/dist/core/code/engine/core/ingestion/languages/java/spring-bean-metadata.js +11 -0
  294. package/dist/core/code/engine/core/ingestion/languages/java/spring-conditionals.js +52 -0
  295. package/dist/core/code/engine/core/ingestion/languages/java/spring-config-bindings.js +222 -0
  296. package/dist/core/code/engine/core/ingestion/languages/java/spring-di.js +165 -0
  297. package/dist/core/code/engine/core/ingestion/languages/java.js +192 -0
  298. package/dist/core/code/engine/core/ingestion/languages/javascript/arity.js +15 -0
  299. package/dist/core/code/engine/core/ingestion/languages/javascript/captures.js +1122 -0
  300. package/dist/core/code/engine/core/ingestion/languages/javascript/import-target.js +56 -0
  301. package/dist/core/code/engine/core/ingestion/languages/javascript/index.js +109 -0
  302. package/dist/core/code/engine/core/ingestion/languages/javascript/interpret.js +45 -0
  303. package/dist/core/code/engine/core/ingestion/languages/javascript/merge-bindings.js +21 -0
  304. package/dist/core/code/engine/core/ingestion/languages/javascript/query.js +659 -0
  305. package/dist/core/code/engine/core/ingestion/languages/javascript/scope-resolver.js +78 -0
  306. package/dist/core/code/engine/core/ingestion/languages/javascript/simple-hooks.js +44 -0
  307. package/dist/core/code/engine/core/ingestion/languages/jvm/package-facts.js +46 -0
  308. package/dist/core/code/engine/core/ingestion/languages/jvm/package-siblings.js +200 -0
  309. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity-metadata.js +23 -0
  310. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity.js +18 -0
  311. package/dist/core/code/engine/core/ingestion/languages/kotlin/cache-stats.js +21 -0
  312. package/dist/core/code/engine/core/ingestion/languages/kotlin/capture-side-channel.js +160 -0
  313. package/dist/core/code/engine/core/ingestion/languages/kotlin/captures.js +1262 -0
  314. package/dist/core/code/engine/core/ingestion/languages/kotlin/companion-scopes.js +72 -0
  315. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-decomposer.js +40 -0
  316. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-target.js +135 -0
  317. package/dist/core/code/engine/core/ingestion/languages/kotlin/index.js +26 -0
  318. package/dist/core/code/engine/core/ingestion/languages/kotlin/interpret.js +75 -0
  319. package/dist/core/code/engine/core/ingestion/languages/kotlin/merge-bindings.js +28 -0
  320. package/dist/core/code/engine/core/ingestion/languages/kotlin/owners.js +134 -0
  321. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-facts.js +16 -0
  322. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-siblings.js +11 -0
  323. package/dist/core/code/engine/core/ingestion/languages/kotlin/query.js +243 -0
  324. package/dist/core/code/engine/core/ingestion/languages/kotlin/receiver-binding.js +103 -0
  325. package/dist/core/code/engine/core/ingestion/languages/kotlin/scope-resolver.js +207 -0
  326. package/dist/core/code/engine/core/ingestion/languages/kotlin/simple-hooks.js +42 -0
  327. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-aop.js +68 -0
  328. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-bean-metadata.js +11 -0
  329. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-conditionals.js +53 -0
  330. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-di.js +304 -0
  331. package/dist/core/code/engine/core/ingestion/languages/kotlin.js +189 -0
  332. package/dist/core/code/engine/core/ingestion/languages/php/arity-metadata.js +66 -0
  333. package/dist/core/code/engine/core/ingestion/languages/php/arity.js +43 -0
  334. package/dist/core/code/engine/core/ingestion/languages/php/cache-stats.js +32 -0
  335. package/dist/core/code/engine/core/ingestion/languages/php/captures.js +1166 -0
  336. package/dist/core/code/engine/core/ingestion/languages/php/import-decomposer.js +238 -0
  337. package/dist/core/code/engine/core/ingestion/languages/php/import-target.js +213 -0
  338. package/dist/core/code/engine/core/ingestion/languages/php/index.js +85 -0
  339. package/dist/core/code/engine/core/ingestion/languages/php/interpret.js +256 -0
  340. package/dist/core/code/engine/core/ingestion/languages/php/merge-bindings.js +50 -0
  341. package/dist/core/code/engine/core/ingestion/languages/php/namespace-siblings.js +353 -0
  342. package/dist/core/code/engine/core/ingestion/languages/php/query.js +391 -0
  343. package/dist/core/code/engine/core/ingestion/languages/php/receiver-binding.js +135 -0
  344. package/dist/core/code/engine/core/ingestion/languages/php/scope-resolver.js +361 -0
  345. package/dist/core/code/engine/core/ingestion/languages/php/simple-hooks.js +116 -0
  346. package/dist/core/code/engine/core/ingestion/languages/php.js +302 -0
  347. package/dist/core/code/engine/core/ingestion/languages/python/arity-metadata.js +49 -0
  348. package/dist/core/code/engine/core/ingestion/languages/python/arity.js +41 -0
  349. package/dist/core/code/engine/core/ingestion/languages/python/cache-stats.js +34 -0
  350. package/dist/core/code/engine/core/ingestion/languages/python/captures.js +299 -0
  351. package/dist/core/code/engine/core/ingestion/languages/python/depends-references.js +68 -0
  352. package/dist/core/code/engine/core/ingestion/languages/python/import-decomposer.js +115 -0
  353. package/dist/core/code/engine/core/ingestion/languages/python/import-target.js +440 -0
  354. package/dist/core/code/engine/core/ingestion/languages/python/index-stats.js +30 -0
  355. package/dist/core/code/engine/core/ingestion/languages/python/index.js +96 -0
  356. package/dist/core/code/engine/core/ingestion/languages/python/interpret.js +430 -0
  357. package/dist/core/code/engine/core/ingestion/languages/python/merge-bindings.js +47 -0
  358. package/dist/core/code/engine/core/ingestion/languages/python/query.js +323 -0
  359. package/dist/core/code/engine/core/ingestion/languages/python/receiver-binding.js +310 -0
  360. package/dist/core/code/engine/core/ingestion/languages/python/scope-resolver.js +80 -0
  361. package/dist/core/code/engine/core/ingestion/languages/python/simple-hooks.js +53 -0
  362. package/dist/core/code/engine/core/ingestion/languages/python.js +140 -0
  363. package/dist/core/code/engine/core/ingestion/languages/ruby/arity.js +41 -0
  364. package/dist/core/code/engine/core/ingestion/languages/ruby/cache-stats.js +21 -0
  365. package/dist/core/code/engine/core/ingestion/languages/ruby/captures.js +864 -0
  366. package/dist/core/code/engine/core/ingestion/languages/ruby/import-target.js +88 -0
  367. package/dist/core/code/engine/core/ingestion/languages/ruby/index.js +29 -0
  368. package/dist/core/code/engine/core/ingestion/languages/ruby/interpret.js +115 -0
  369. package/dist/core/code/engine/core/ingestion/languages/ruby/merge-bindings.js +21 -0
  370. package/dist/core/code/engine/core/ingestion/languages/ruby/query.js +349 -0
  371. package/dist/core/code/engine/core/ingestion/languages/ruby/receiver-binding.js +70 -0
  372. package/dist/core/code/engine/core/ingestion/languages/ruby/scope-resolver.js +263 -0
  373. package/dist/core/code/engine/core/ingestion/languages/ruby/simple-hooks.js +68 -0
  374. package/dist/core/code/engine/core/ingestion/languages/ruby.js +215 -0
  375. package/dist/core/code/engine/core/ingestion/languages/rust/arity.js +16 -0
  376. package/dist/core/code/engine/core/ingestion/languages/rust/cache-stats.js +21 -0
  377. package/dist/core/code/engine/core/ingestion/languages/rust/captures.js +304 -0
  378. package/dist/core/code/engine/core/ingestion/languages/rust/import-decomposer.js +167 -0
  379. package/dist/core/code/engine/core/ingestion/languages/rust/import-target.js +108 -0
  380. package/dist/core/code/engine/core/ingestion/languages/rust/index.js +29 -0
  381. package/dist/core/code/engine/core/ingestion/languages/rust/interpret.js +201 -0
  382. package/dist/core/code/engine/core/ingestion/languages/rust/merge-bindings.js +21 -0
  383. package/dist/core/code/engine/core/ingestion/languages/rust/method-owners.js +76 -0
  384. package/dist/core/code/engine/core/ingestion/languages/rust/module-path.js +222 -0
  385. package/dist/core/code/engine/core/ingestion/languages/rust/qualified-call.js +482 -0
  386. package/dist/core/code/engine/core/ingestion/languages/rust/query.js +280 -0
  387. package/dist/core/code/engine/core/ingestion/languages/rust/range-binding.js +687 -0
  388. package/dist/core/code/engine/core/ingestion/languages/rust/receiver-binding.js +148 -0
  389. package/dist/core/code/engine/core/ingestion/languages/rust/scope-resolver.js +151 -0
  390. package/dist/core/code/engine/core/ingestion/languages/rust/simple-hooks.js +32 -0
  391. package/dist/core/code/engine/core/ingestion/languages/rust.js +183 -0
  392. package/dist/core/code/engine/core/ingestion/languages/swift/arity-metadata.js +44 -0
  393. package/dist/core/code/engine/core/ingestion/languages/swift/arity.js +45 -0
  394. package/dist/core/code/engine/core/ingestion/languages/swift/base-type.js +30 -0
  395. package/dist/core/code/engine/core/ingestion/languages/swift/cache-stats.js +32 -0
  396. package/dist/core/code/engine/core/ingestion/languages/swift/captures.js +594 -0
  397. package/dist/core/code/engine/core/ingestion/languages/swift/conditional-directive-preprocess.js +256 -0
  398. package/dist/core/code/engine/core/ingestion/languages/swift/implicit-imports.js +60 -0
  399. package/dist/core/code/engine/core/ingestion/languages/swift/import-decomposer.js +87 -0
  400. package/dist/core/code/engine/core/ingestion/languages/swift/import-target.js +84 -0
  401. package/dist/core/code/engine/core/ingestion/languages/swift/index.js +56 -0
  402. package/dist/core/code/engine/core/ingestion/languages/swift/interpret.js +93 -0
  403. package/dist/core/code/engine/core/ingestion/languages/swift/merge-bindings.js +51 -0
  404. package/dist/core/code/engine/core/ingestion/languages/swift/query.js +226 -0
  405. package/dist/core/code/engine/core/ingestion/languages/swift/receiver-binding.js +169 -0
  406. package/dist/core/code/engine/core/ingestion/languages/swift/scope-resolver.js +192 -0
  407. package/dist/core/code/engine/core/ingestion/languages/swift/sibling-type-bindings.js +68 -0
  408. package/dist/core/code/engine/core/ingestion/languages/swift/signature-bindings.js +69 -0
  409. package/dist/core/code/engine/core/ingestion/languages/swift/simple-hooks.js +65 -0
  410. package/dist/core/code/engine/core/ingestion/languages/swift/target-grouping.js +97 -0
  411. package/dist/core/code/engine/core/ingestion/languages/swift/target-siblings.js +74 -0
  412. package/dist/core/code/engine/core/ingestion/languages/swift.js +246 -0
  413. package/dist/core/code/engine/core/ingestion/languages/typescript/arity-metadata.js +106 -0
  414. package/dist/core/code/engine/core/ingestion/languages/typescript/arity.js +57 -0
  415. package/dist/core/code/engine/core/ingestion/languages/typescript/array-callback.js +58 -0
  416. package/dist/core/code/engine/core/ingestion/languages/typescript/cache-stats.js +34 -0
  417. package/dist/core/code/engine/core/ingestion/languages/typescript/captures.js +956 -0
  418. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-export-assignment.js +535 -0
  419. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-module-exports.js +196 -0
  420. package/dist/core/code/engine/core/ingestion/languages/typescript/import-decomposer.js +374 -0
  421. package/dist/core/code/engine/core/ingestion/languages/typescript/import-target.js +65 -0
  422. package/dist/core/code/engine/core/ingestion/languages/typescript/index.js +108 -0
  423. package/dist/core/code/engine/core/ingestion/languages/typescript/interpret.js +344 -0
  424. package/dist/core/code/engine/core/ingestion/languages/typescript/merge-bindings.js +161 -0
  425. package/dist/core/code/engine/core/ingestion/languages/typescript/nuxt-auto-imports.js +325 -0
  426. package/dist/core/code/engine/core/ingestion/languages/typescript/query.js +1328 -0
  427. package/dist/core/code/engine/core/ingestion/languages/typescript/receiver-binding.js +201 -0
  428. package/dist/core/code/engine/core/ingestion/languages/typescript/scope-resolver.js +293 -0
  429. package/dist/core/code/engine/core/ingestion/languages/typescript/simple-hooks.js +139 -0
  430. package/dist/core/code/engine/core/ingestion/languages/typescript.js +455 -0
  431. package/dist/core/code/engine/core/ingestion/languages/vue/captures.js +70 -0
  432. package/dist/core/code/engine/core/ingestion/languages/vue/import-target.js +61 -0
  433. package/dist/core/code/engine/core/ingestion/languages/vue/index.js +55 -0
  434. package/dist/core/code/engine/core/ingestion/languages/vue/scope-resolver.js +295 -0
  435. package/dist/core/code/engine/core/ingestion/languages/vue.js +96 -0
  436. package/dist/core/code/engine/core/ingestion/local-symbol-pruner.js +68 -0
  437. package/dist/core/code/engine/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
  438. package/dist/core/code/engine/core/ingestion/method-extractors/configs/csharp.js +290 -0
  439. package/dist/core/code/engine/core/ingestion/method-extractors/configs/dart.js +392 -0
  440. package/dist/core/code/engine/core/ingestion/method-extractors/configs/go.js +179 -0
  441. package/dist/core/code/engine/core/ingestion/method-extractors/configs/jvm.js +350 -0
  442. package/dist/core/code/engine/core/ingestion/method-extractors/configs/php.js +306 -0
  443. package/dist/core/code/engine/core/ingestion/method-extractors/configs/python.js +312 -0
  444. package/dist/core/code/engine/core/ingestion/method-extractors/configs/ruby.js +289 -0
  445. package/dist/core/code/engine/core/ingestion/method-extractors/configs/rust.js +198 -0
  446. package/dist/core/code/engine/core/ingestion/method-extractors/configs/swift.js +286 -0
  447. package/dist/core/code/engine/core/ingestion/method-extractors/configs/typescript-javascript.js +341 -0
  448. package/dist/core/code/engine/core/ingestion/method-extractors/generic.js +209 -0
  449. package/dist/core/code/engine/core/ingestion/method-types.js +3 -0
  450. package/dist/core/code/engine/core/ingestion/model/field-registry.js +41 -0
  451. package/dist/core/code/engine/core/ingestion/model/index.js +52 -0
  452. package/dist/core/code/engine/core/ingestion/model/method-registry.js +138 -0
  453. package/dist/core/code/engine/core/ingestion/model/owned-members-lookup.js +46 -0
  454. package/dist/core/code/engine/core/ingestion/model/registration-table.js +234 -0
  455. package/dist/core/code/engine/core/ingestion/model/resolve.js +183 -0
  456. package/dist/core/code/engine/core/ingestion/model/scope-resolution-indexes.js +43 -0
  457. package/dist/core/code/engine/core/ingestion/model/semantic-model.js +179 -0
  458. package/dist/core/code/engine/core/ingestion/model/symbol-table.js +216 -0
  459. package/dist/core/code/engine/core/ingestion/model/type-registry.js +84 -0
  460. package/dist/core/code/engine/core/ingestion/mro-processor.js +709 -0
  461. package/dist/core/code/engine/core/ingestion/parsing-processor.js +312 -0
  462. package/dist/core/code/engine/core/ingestion/pipeline-phases/communities.js +69 -0
  463. package/dist/core/code/engine/core/ingestion/pipeline-phases/cross-file.js +71 -0
  464. package/dist/core/code/engine/core/ingestion/pipeline-phases/di.js +338 -0
  465. package/dist/core/code/engine/core/ingestion/pipeline-phases/http-api-calls.js +312 -0
  466. package/dist/core/code/engine/core/ingestion/pipeline-phases/index.js +54 -0
  467. package/dist/core/code/engine/core/ingestion/pipeline-phases/mro.js +40 -0
  468. package/dist/core/code/engine/core/ingestion/pipeline-phases/orm.js +78 -0
  469. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse-impl.js +1286 -0
  470. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse.js +41 -0
  471. package/dist/core/code/engine/core/ingestion/pipeline-phases/processes.js +193 -0
  472. package/dist/core/code/engine/core/ingestion/pipeline-phases/prune-local-symbols.js +29 -0
  473. package/dist/core/code/engine/core/ingestion/pipeline-phases/registry.js +52 -0
  474. package/dist/core/code/engine/core/ingestion/pipeline-phases/routes.js +409 -0
  475. package/dist/core/code/engine/core/ingestion/pipeline-phases/rpc-edges.js +301 -0
  476. package/dist/core/code/engine/core/ingestion/pipeline-phases/runner.js +207 -0
  477. package/dist/core/code/engine/core/ingestion/pipeline-phases/scan.js +49 -0
  478. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-aop.js +442 -0
  479. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-auto-configuration.js +264 -0
  480. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-config.js +440 -0
  481. package/dist/core/code/engine/core/ingestion/pipeline-phases/structure.js +38 -0
  482. package/dist/core/code/engine/core/ingestion/pipeline-phases/tools.js +89 -0
  483. package/dist/core/code/engine/core/ingestion/pipeline-phases/types.js +40 -0
  484. package/dist/core/code/engine/core/ingestion/pipeline.js +152 -0
  485. package/dist/core/code/engine/core/ingestion/process-processor.js +325 -0
  486. package/dist/core/code/engine/core/ingestion/resolve-references.js +205 -0
  487. package/dist/core/code/engine/core/ingestion/route-extractors/constant-resolver.js +135 -0
  488. package/dist/core/code/engine/core/ingestion/route-extractors/django-root-discovery.js +221 -0
  489. package/dist/core/code/engine/core/ingestion/route-extractors/django.js +428 -0
  490. package/dist/core/code/engine/core/ingestion/route-extractors/expo.js +39 -0
  491. package/dist/core/code/engine/core/ingestion/route-extractors/fastapi-router-bindings.js +264 -0
  492. package/dist/core/code/engine/core/ingestion/route-extractors/laravel.js +501 -0
  493. package/dist/core/code/engine/core/ingestion/route-extractors/middleware.js +175 -0
  494. package/dist/core/code/engine/core/ingestion/route-extractors/nextjs.js +81 -0
  495. package/dist/core/code/engine/core/ingestion/route-extractors/php.js +25 -0
  496. package/dist/core/code/engine/core/ingestion/route-extractors/python-const-resolver.js +307 -0
  497. package/dist/core/code/engine/core/ingestion/route-extractors/response-shapes.js +299 -0
  498. package/dist/core/code/engine/core/ingestion/route-extractors/route-path.js +71 -0
  499. package/dist/core/code/engine/core/ingestion/route-extractors/spring-shared.js +310 -0
  500. package/dist/core/code/engine/core/ingestion/route-extractors/spring.js +441 -0
  501. package/dist/core/code/engine/core/ingestion/scope-extractor-bridge.js +60 -0
  502. package/dist/core/code/engine/core/ingestion/scope-extractor.js +1373 -0
  503. package/dist/core/code/engine/core/ingestion/scope-resolution/contract/scope-resolver.js +282 -0
  504. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +72 -0
  505. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/edges.js +194 -0
  506. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/ids.js +472 -0
  507. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +49 -0
  508. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +43 -0
  509. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +274 -0
  510. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +93 -0
  511. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/callable-value-flow.js +1240 -0
  512. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/compound-receiver.js +1174 -0
  513. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/free-call-fallback.js +873 -0
  514. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/imported-return-types.js +226 -0
  515. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/mro.js +107 -0
  516. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/overload-narrowing.js +441 -0
  517. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/property-dispatch.js +122 -0
  518. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1720 -0
  519. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/phase.js +395 -0
  520. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +208 -0
  521. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/registry.js +49 -0
  522. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/run.js +632 -0
  523. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +112 -0
  524. package/dist/core/code/engine/core/ingestion/scope-resolution/resolution-outcome.js +41 -0
  525. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/namespace-targets.js +81 -0
  526. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/walkers.js +1835 -0
  527. package/dist/core/code/engine/core/ingestion/scope-resolution/unresolved-receivers.js +242 -0
  528. package/dist/core/code/engine/core/ingestion/scope-resolution/utils/definition-id.js +22 -0
  529. package/dist/core/code/engine/core/ingestion/scope-resolution/workspace-index.js +151 -0
  530. package/dist/core/code/engine/core/ingestion/structure-processor.js +40 -0
  531. package/dist/core/code/engine/core/ingestion/tree-sitter-queries.js +2244 -0
  532. package/dist/core/code/engine/core/ingestion/ts-js-hoc-utils.js +115 -0
  533. package/dist/core/code/engine/core/ingestion/type-env.js +1136 -0
  534. package/dist/core/code/engine/core/ingestion/type-extractors/c-cpp.js +555 -0
  535. package/dist/core/code/engine/core/ingestion/type-extractors/csharp.js +570 -0
  536. package/dist/core/code/engine/core/ingestion/type-extractors/dart.js +372 -0
  537. package/dist/core/code/engine/core/ingestion/type-extractors/go.js +508 -0
  538. package/dist/core/code/engine/core/ingestion/type-extractors/jvm.js +875 -0
  539. package/dist/core/code/engine/core/ingestion/type-extractors/php.js +537 -0
  540. package/dist/core/code/engine/core/ingestion/type-extractors/python.js +477 -0
  541. package/dist/core/code/engine/core/ingestion/type-extractors/ruby.js +380 -0
  542. package/dist/core/code/engine/core/ingestion/type-extractors/rust.js +502 -0
  543. package/dist/core/code/engine/core/ingestion/type-extractors/shared.js +843 -0
  544. package/dist/core/code/engine/core/ingestion/type-extractors/swift.js +490 -0
  545. package/dist/core/code/engine/core/ingestion/type-extractors/types.js +2 -0
  546. package/dist/core/code/engine/core/ingestion/type-extractors/typescript.js +690 -0
  547. package/dist/core/code/engine/core/ingestion/utils/ast-helpers.js +1693 -0
  548. package/dist/core/code/engine/core/ingestion/utils/call-analysis.js +779 -0
  549. package/dist/core/code/engine/core/ingestion/utils/callable-flow-captures.js +932 -0
  550. package/dist/core/code/engine/core/ingestion/utils/callable-labels.js +49 -0
  551. package/dist/core/code/engine/core/ingestion/utils/deferred-resolution-profile.js +151 -0
  552. package/dist/core/code/engine/core/ingestion/utils/effective-ram.js +67 -0
  553. package/dist/core/code/engine/core/ingestion/utils/env.js +60 -0
  554. package/dist/core/code/engine/core/ingestion/utils/event-loop.js +9 -0
  555. package/dist/core/code/engine/core/ingestion/utils/graph-sort.js +103 -0
  556. package/dist/core/code/engine/core/ingestion/utils/heap-probe.js +45 -0
  557. package/dist/core/code/engine/core/ingestion/utils/heritage-marker.js +47 -0
  558. package/dist/core/code/engine/core/ingestion/utils/line-base.js +24 -0
  559. package/dist/core/code/engine/core/ingestion/utils/max-file-size.js +59 -0
  560. package/dist/core/code/engine/core/ingestion/utils/method-props.js +198 -0
  561. package/dist/core/code/engine/core/ingestion/utils/qualified-name.js +73 -0
  562. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-captures.js +60 -0
  563. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-codec.js +188 -0
  564. package/dist/core/code/engine/core/ingestion/utils/scope-tree-walk.js +36 -0
  565. package/dist/core/code/engine/core/ingestion/utils/symbol-labels.js +48 -0
  566. package/dist/core/code/engine/core/ingestion/utils/template-arguments.js +187 -0
  567. package/dist/core/code/engine/core/ingestion/utils/type-parameters.js +209 -0
  568. package/dist/core/code/engine/core/ingestion/utils/verbose.js +6 -0
  569. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/c-cpp.js +133 -0
  570. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/csharp.js +66 -0
  571. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/dart.js +111 -0
  572. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/go.js +153 -0
  573. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/jvm.js +145 -0
  574. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/php.js +61 -0
  575. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/python.js +104 -0
  576. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/ruby.js +55 -0
  577. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/rust.js +79 -0
  578. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/swift.js +91 -0
  579. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/typescript-javascript.js +86 -0
  580. package/dist/core/code/engine/core/ingestion/variable-extractors/generic.js +111 -0
  581. package/dist/core/code/engine/core/ingestion/variable-types.js +3 -0
  582. package/dist/core/code/engine/core/ingestion/vue-sfc-extractor.js +544 -0
  583. package/dist/core/code/engine/core/ingestion/workers/callable-id.js +122 -0
  584. package/dist/core/code/engine/core/ingestion/workers/clone-safety.js +470 -0
  585. package/dist/core/code/engine/core/ingestion/workers/parse-worker.js +2456 -0
  586. package/dist/core/code/engine/core/ingestion/workers/post-result.js +90 -0
  587. package/dist/core/code/engine/core/ingestion/workers/quarantine.js +41 -0
  588. package/dist/core/code/engine/core/ingestion/workers/result-merge.js +59 -0
  589. package/dist/core/code/engine/core/ingestion/workers/worker-pool.js +1725 -0
  590. package/dist/core/code/engine/core/ingestion/workspace-config.js +139 -0
  591. package/dist/core/code/engine/core/lbug/conn-lock.js +72 -0
  592. package/dist/core/code/engine/core/lbug/csv-generator.js +710 -0
  593. package/dist/core/code/engine/core/lbug/cypher-escape.js +24 -0
  594. package/dist/core/code/engine/core/lbug/extension-load-error.js +339 -0
  595. package/dist/core/code/engine/core/lbug/extension-loader.js +261 -0
  596. package/dist/core/code/engine/core/lbug/graph-emit-sink.js +584 -0
  597. package/dist/core/code/engine/core/lbug/lbug-adapter.js +2703 -0
  598. package/dist/core/code/engine/core/lbug/lbug-config.js +1029 -0
  599. package/dist/core/code/engine/core/lbug/native-check.js +435 -0
  600. package/dist/core/code/engine/core/lbug/pool-adapter.js +973 -0
  601. package/dist/core/code/engine/core/lbug/query-params.js +25 -0
  602. package/dist/core/code/engine/core/lbug/query-result-utils.js +31 -0
  603. package/dist/core/code/engine/core/lbug/rel-pair-routing.js +373 -0
  604. package/dist/core/code/engine/core/lbug/schema.js +771 -0
  605. package/dist/core/code/engine/core/lbug/shutdown-helpers.js +40 -0
  606. package/dist/core/code/engine/core/lbug/sidecar-recovery.js +716 -0
  607. package/dist/core/code/engine/core/lbug/stdio-capture.js +49 -0
  608. package/dist/core/code/engine/core/lbug/sync-csv-writer.js +115 -0
  609. package/dist/core/code/engine/core/lbug/wal-checkpoint-driver.js +215 -0
  610. package/dist/core/code/engine/core/lbug/wal-driver-state.js +28 -0
  611. package/dist/core/code/engine/core/logger.js +339 -0
  612. package/dist/core/code/engine/core/platform/capabilities.js +91 -0
  613. package/dist/core/code/engine/core/run-analyze.js +1098 -0
  614. package/dist/core/code/engine/core/tree-sitter/parser-loader.js +281 -0
  615. package/dist/core/code/engine/core/tree-sitter/safe-parse.js +258 -0
  616. package/dist/core/code/engine/core/tree-sitter/vendored-grammars.js +64 -0
  617. package/dist/core/code/engine/lib/utils.js +121 -0
  618. package/dist/core/code/engine/mcp/core/lbug-adapter.js +27 -0
  619. package/dist/core/code/engine/mcp/local/aop-metadata.js +230 -0
  620. package/dist/core/code/engine/mcp/local/bean-metadata.js +49 -0
  621. package/dist/core/code/engine/mcp/local/limits.js +15 -0
  622. package/dist/core/code/engine/mcp/local/line-display.js +6 -0
  623. package/dist/core/code/engine/mcp/local/local-backend.js +4142 -0
  624. package/dist/core/code/engine/storage/branch-index.js +72 -0
  625. package/dist/core/code/engine/storage/file-hash.js +95 -0
  626. package/dist/core/code/engine/storage/fs-atomic.js +34 -0
  627. package/dist/core/code/engine/storage/git.js +555 -0
  628. package/dist/core/code/engine/storage/index-lock.js +664 -0
  629. package/dist/core/code/engine/storage/parse-cache.js +650 -0
  630. package/dist/core/code/engine/storage/parsedfile-store.js +620 -0
  631. package/dist/core/code/engine/storage/repo-manager.js +1061 -0
  632. package/dist/core/code/engine/storage/scope-index-store.js +247 -0
  633. package/dist/core/code/engine/types/pipeline.js +2 -0
  634. package/dist/core/code/scripts/install-duckdb-extension.mjs +125 -0
  635. package/dist/core/code/scripts/resolve-analyze-cmd.cjs +346 -0
  636. package/dist/core/code/shared/graph/types.js +8 -0
  637. package/dist/core/code/shared/index.js +105 -0
  638. package/dist/core/code/shared/integrations/circuit-breaker.js +242 -0
  639. package/dist/core/code/shared/integrations/resilient-fetch.js +224 -0
  640. package/dist/core/code/shared/integrations/retry.js +70 -0
  641. package/dist/core/code/shared/integrations/understand-quickly.js +145 -0
  642. package/dist/core/code/shared/language-detection.js +162 -0
  643. package/dist/core/code/shared/languages.js +27 -0
  644. package/dist/core/code/shared/lbug/schema-constants.js +98 -0
  645. package/dist/core/code/shared/mro-strategy.js +2 -0
  646. package/dist/core/code/shared/pipeline.js +5 -0
  647. package/dist/core/code/shared/scope-resolution/callable-flow-site.js +11 -0
  648. package/dist/core/code/shared/scope-resolution/def-index.js +53 -0
  649. package/dist/core/code/shared/scope-resolution/evidence-weights.js +87 -0
  650. package/dist/core/code/shared/scope-resolution/finalize-algorithm.js +807 -0
  651. package/dist/core/code/shared/scope-resolution/language-classification.js +46 -0
  652. package/dist/core/code/shared/scope-resolution/method-dispatch-index.js +100 -0
  653. package/dist/core/code/shared/scope-resolution/module-scope-index.js +59 -0
  654. package/dist/core/code/shared/scope-resolution/origin-priority.js +23 -0
  655. package/dist/core/code/shared/scope-resolution/parsed-file.js +54 -0
  656. package/dist/core/code/shared/scope-resolution/position-index.js +136 -0
  657. package/dist/core/code/shared/scope-resolution/qualified-name-index.js +77 -0
  658. package/dist/core/code/shared/scope-resolution/reference-site.js +24 -0
  659. package/dist/core/code/shared/scope-resolution/registries/class-registry.js +32 -0
  660. package/dist/core/code/shared/scope-resolution/registries/context.js +52 -0
  661. package/dist/core/code/shared/scope-resolution/registries/evidence.js +152 -0
  662. package/dist/core/code/shared/scope-resolution/registries/field-registry.js +33 -0
  663. package/dist/core/code/shared/scope-resolution/registries/lookup-core.js +392 -0
  664. package/dist/core/code/shared/scope-resolution/registries/lookup-qualified.js +58 -0
  665. package/dist/core/code/shared/scope-resolution/registries/macro-registry.js +34 -0
  666. package/dist/core/code/shared/scope-resolution/registries/method-registry.js +34 -0
  667. package/dist/core/code/shared/scope-resolution/registries/tie-breaks.js +63 -0
  668. package/dist/core/code/shared/scope-resolution/resolve-type-ref.js +128 -0
  669. package/dist/core/code/shared/scope-resolution/scope-id.js +49 -0
  670. package/dist/core/code/shared/scope-resolution/scope-tree.js +225 -0
  671. package/dist/core/code/shared/scope-resolution/symbol-definition.js +12 -0
  672. package/dist/core/code/shared/scope-resolution/types.js +25 -0
  673. package/dist/core/code/shared/test-helpers.js +17 -0
  674. package/dist/core/code/vendor/leiden/index.cjs +355 -0
  675. package/dist/core/code/vendor/leiden/utils.cjs +419 -0
  676. package/dist/core/features/scanner.d.ts +2 -0
  677. package/dist/core/features/scanner.d.ts.map +1 -1
  678. package/dist/core/features/scanner.js +27 -6
  679. package/dist/core/features/scanner.js.map +1 -1
  680. package/dist/core/timeline/cli.d.ts.map +1 -1
  681. package/dist/core/timeline/cli.js +13 -6
  682. package/dist/core/timeline/cli.js.map +1 -1
  683. package/dist/core/timeline/debris.d.ts +20 -0
  684. package/dist/core/timeline/debris.d.ts.map +1 -0
  685. package/dist/core/timeline/debris.js +124 -0
  686. package/dist/core/timeline/debris.js.map +1 -0
  687. package/dist/core/timeline/hook-runner.d.ts.map +1 -1
  688. package/dist/core/timeline/hook-runner.js +3 -1
  689. package/dist/core/timeline/hook-runner.js.map +1 -1
  690. package/dist/core/timeline/hooks.d.ts.map +1 -1
  691. package/dist/core/timeline/hooks.js +13 -5
  692. package/dist/core/timeline/hooks.js.map +1 -1
  693. package/dist/core/timeline/installer.d.ts +2 -0
  694. package/dist/core/timeline/installer.d.ts.map +1 -1
  695. package/dist/core/timeline/installer.js +12 -0
  696. package/dist/core/timeline/installer.js.map +1 -1
  697. package/dist/core/timeline/project-root.d.ts +21 -0
  698. package/dist/core/timeline/project-root.d.ts.map +1 -0
  699. package/dist/core/timeline/project-root.js +83 -0
  700. package/dist/core/timeline/project-root.js.map +1 -0
  701. package/package.json +1 -1
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ /**
3
+ * Wire format of the `BasicBlock.callees` / `BasicBlock.calleeIds` cells.
4
+ *
5
+ * A LEAF module on purpose: it declares two string constants and imports
6
+ * nothing. `cfg/emit.ts` produces those cells and `mcp/local/pdg-impact.ts`
7
+ * parses them, but `emit.ts` is analyze-only and drags the whole CFG closure
8
+ * (reaching-defs, control-dependence, post-dominators, synthetic-escape,
9
+ * call-site-harvest) behind it — 8 modules evaluated at every MCP server start
10
+ * just to read two strings, since ESM evaluates a module to import any binding
11
+ * from it (#2802 review). Splitting the format constants out deletes that cost
12
+ * rather than deferring it, which is the same bar #2802 held its own proposals
13
+ * to.
14
+ *
15
+ * `emit.ts` RE-EXPORTS both names, so every existing importer keeps working and
16
+ * the producer/consumer pair still resolves to one definition — the drift this
17
+ * shared constant exists to prevent stays impossible.
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.CALLEE_ID_SEP = exports.CALLEES_TRUNCATED_SENTINEL = void 0;
21
+ /**
22
+ * Reserved token placed in `BasicBlock.callees` when a statement's call sites
23
+ * were truncated at the per-statement site cap: the recorded callee list is then
24
+ * INCOMPLETE, so over-cap callees are absent. `*` is not a valid identifier
25
+ * leaf, so it cannot collide with a real callee name. The impact bridge treats a
26
+ * slice containing this sentinel as "callees unknown" and keeps reach
27
+ * callgraph-equal (proven), rather than falsely labeling an absent-but-real
28
+ * callee `unproven-bridge`.
29
+ */
30
+ exports.CALLEES_TRUNCATED_SENTINEL = '*';
31
+ /**
32
+ * Inner separator for the `BasicBlock.calleeIds` cell (resolved callee symbol
33
+ * ids). A TAB is used — NOT a space — because resolved ids embed `filePath` and
34
+ * C++ overload shape tags with multi-word primitive types (e.g. `unsigned char`,
35
+ * `long double`), so an id can legitimately contain a space; a space-joined cell
36
+ * then fragments on read and silently drops inter-procedural reach to that
37
+ * callee (#2227 tri-review). A tab cannot appear in a tree-sitter-derived id
38
+ * token (paths/identifiers/type tokens are tab-free) and round-trips intact
39
+ * through `escapeCSVField` (tab is in its preserved set) and the RFC-4180 COPY
40
+ * reader (every cell is quoted). Producer (`calleeIdsOfBlock`) and consumer
41
+ * (`splitCalleeIds`) both resolve to this single constant so they cannot drift.
42
+ * The sibling `callees` (leaf-name) cell stays space-joined — leaf names are
43
+ * bare identifiers and never contain a space.
44
+ */
45
+ exports.CALLEE_ID_SEP = '\t';
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reachableBlocks = exports.CfgBuilder = exports.CfgNestingDepthError = exports.MAX_CFG_NESTING_DEPTH = void 0;
4
+ /**
5
+ * Hard ceiling on CFG recursive-descent scope-entry depth (#2195). A language
6
+ * `CfgVisitor` wraps each nested block scope in {@link CfgBuilder.withNesting} (its
7
+ * `visitBody` / `visitSeq` choke points), so the live count tracks scope entries,
8
+ * not statement width. NOTE the count is ~2× LEXICAL nesting for block-bodied
9
+ * constructs (visitBody → visitSeq both enter), so the effective lexical ceiling
10
+ * is ~250 levels for block bodies (~500 for single-statement bodies / bare
11
+ * blocks). Real source nests ≤ ~50 deep, so this fires only on machine-generated
12
+ * / adversarial input. Both effective ceilings sit far below the engine's native
13
+ * stack limit (~1.2k+ nesting even on the raised worker `stackSizeMb`), so the
14
+ * bail is a DETERMINISTIC, language-independent {@link CfgNestingDepthError}
15
+ * rather than a nondeterministic `RangeError` thrown somewhere mid-walk.
16
+ */
17
+ exports.MAX_CFG_NESTING_DEPTH = 500;
18
+ /**
19
+ * Thrown by the visitor nesting-depth guard ({@link CfgBuilder.enterNesting})
20
+ * when lexical nesting exceeds {@link MAX_CFG_NESTING_DEPTH}. `collectFunctionCfgs`
21
+ * catches it and counts the function under `skipped.tooDeeplyNested`, isolating
22
+ * the bail to one function instead of risking a worker-wide stack overflow.
23
+ */
24
+ class CfgNestingDepthError extends Error {
25
+ limit;
26
+ constructor(limit) {
27
+ super(`CFG nesting depth exceeded ${limit}`);
28
+ this.limit = limit;
29
+ this.name = 'CfgNestingDepthError';
30
+ }
31
+ }
32
+ exports.CfgNestingDepthError = CfgNestingDepthError;
33
+ class CfgBuilder {
34
+ filePath;
35
+ functionStartLine;
36
+ functionEndLine;
37
+ functionStartColumn;
38
+ blocks = [];
39
+ edges = [];
40
+ edgeKeys = new Set();
41
+ /** Live recursive-descent nesting depth — see {@link enterNesting}. */
42
+ nesting = 0;
43
+ entryIndex;
44
+ exitIndex;
45
+ constructor(filePath, functionStartLine, functionEndLine,
46
+ /** Start column of the owning function — disambiguates same-line functions
47
+ * in the BasicBlock ids (see {@link FunctionCfg.functionStartColumn}).
48
+ * Defaults to 0 for hand-built test CFGs that don't model columns. */
49
+ functionStartColumn = 0) {
50
+ this.filePath = filePath;
51
+ this.functionStartLine = functionStartLine;
52
+ this.functionEndLine = functionEndLine;
53
+ this.functionStartColumn = functionStartColumn;
54
+ this.entryIndex = this.newBlock(functionStartLine, functionStartLine, '', 'entry');
55
+ this.exitIndex = this.newBlock(functionEndLine, functionEndLine, '', 'exit');
56
+ }
57
+ /** Create a block and return its index. */
58
+ newBlock(startLine, endLine, text, kind = 'normal', facts) {
59
+ this.blocks.push({
60
+ startLine,
61
+ endLine,
62
+ textParts: text ? [text] : [],
63
+ kind,
64
+ statements: facts ? [facts] : [],
65
+ });
66
+ return this.blocks.length - 1;
67
+ }
68
+ /** Add a single edge (idempotent on from+to+kind). */
69
+ edge(from, to, kind) {
70
+ const key = `${from}->${to}:${kind}`;
71
+ if (this.edgeKeys.has(key))
72
+ return;
73
+ this.edgeKeys.add(key);
74
+ this.edges.push({ from, to, kind });
75
+ }
76
+ /** Wire a set of dangling exits to a single target block with one kind. */
77
+ connect(exits, to, kind = 'seq') {
78
+ for (const from of exits)
79
+ this.edge(from, to, kind);
80
+ }
81
+ /** Extend a block's end line as more statements accrue to it. */
82
+ extendBlock(index, endLine, appendText, facts) {
83
+ const b = this.blocks[index];
84
+ if (!b)
85
+ return;
86
+ if (endLine > b.endLine)
87
+ b.endLine = endLine;
88
+ if (appendText)
89
+ b.textParts.push(appendText);
90
+ if (facts)
91
+ b.statements.push(facts);
92
+ }
93
+ /**
94
+ * Attach a facts-only statement record to a block WITHOUT touching its text
95
+ * or line span (#2082 M2 U1) — bench fingerprints and CFG snapshots include
96
+ * block text, so harvesting must never perturb it (ENTRY-block param defs
97
+ * are the canonical use; records that must precede a walked body get their
98
+ * own facts-only block instead, see the catch-param handling in visitTry).
99
+ */
100
+ attachFacts(index, facts) {
101
+ const b = this.blocks[index];
102
+ if (!b)
103
+ return;
104
+ b.statements.push(facts);
105
+ }
106
+ get blockCount() {
107
+ return this.blocks.length;
108
+ }
109
+ /**
110
+ * Run `fn` inside ONE nested block scope (#2195) — the single choke every
111
+ * visitor's `visitBody` / `visitSeq` funnels through. Enters on the way in and
112
+ * exits in a `finally`, so the live depth is balanced on every return AND every
113
+ * throw and the enter/exit can never drift out of pair (the reason this is one
114
+ * helper, not 24 hand-paired call sites). Throws {@link CfgNestingDepthError}
115
+ * when nesting exceeds {@link MAX_CFG_NESTING_DEPTH} — a proactive, deterministic
116
+ * bail before the native stack can overflow on a pathologically nested function.
117
+ *
118
+ * A block-bodied construct passes through BOTH visitBody and visitSeq, so it
119
+ * costs TWO scopes per lexical level: the effective structural ceiling is
120
+ * ~MAX_CFG_NESTING_DEPTH/2 (~250) lexical levels for block bodies (~500 for
121
+ * single-statement bodies / bare blocks, which hit only one of the two). Still
122
+ * an order of magnitude below the native limit and far above real code (≤ ~50).
123
+ */
124
+ withNesting(fn) {
125
+ this.enterNesting();
126
+ try {
127
+ return fn();
128
+ }
129
+ finally {
130
+ this.exitNesting();
131
+ }
132
+ }
133
+ /**
134
+ * Increment the nesting counter, throwing {@link CfgNestingDepthError} past the
135
+ * cap. Prefer {@link withNesting}, which pairs the exit in a `finally`; this is
136
+ * exposed for direct depth-accounting tests only.
137
+ */
138
+ enterNesting() {
139
+ if (++this.nesting > exports.MAX_CFG_NESTING_DEPTH)
140
+ throw new CfgNestingDepthError(exports.MAX_CFG_NESTING_DEPTH);
141
+ }
142
+ /** Decrement the nesting counter — the partner of {@link enterNesting}. */
143
+ exitNesting() {
144
+ this.nesting--;
145
+ }
146
+ /** Produce the serializable CFG. Caller is responsible for having wired the
147
+ * function's dangling exits to {@link exitIndex} before calling.
148
+ *
149
+ * Pass `bindings` (the function's binding table, possibly empty) to emit
150
+ * statement facts (#2082 M2 U1) — every block then carries a `statements`
151
+ * array. Omit it (hand-built test CFGs, pre-M2 producers) and both fields
152
+ * are absent, which the reaching-defs solver reports as `no-facts`. */
153
+ finish(bindings) {
154
+ const withFacts = bindings !== undefined;
155
+ return {
156
+ filePath: this.filePath,
157
+ functionStartLine: this.functionStartLine,
158
+ functionEndLine: this.functionEndLine,
159
+ functionStartColumn: this.functionStartColumn,
160
+ entryIndex: this.entryIndex,
161
+ exitIndex: this.exitIndex,
162
+ blocks: this.blocks.map((b, index) => ({
163
+ index,
164
+ startLine: b.startLine,
165
+ endLine: b.endLine,
166
+ text: b.textParts.join('\n'),
167
+ kind: b.kind,
168
+ ...(withFacts ? { statements: b.statements } : {}),
169
+ })),
170
+ edges: [...this.edges],
171
+ ...(withFacts ? { bindings } : {}),
172
+ };
173
+ }
174
+ }
175
+ exports.CfgBuilder = CfgBuilder;
176
+ /**
177
+ * Block indices reachable from `entryIndex` by following edges. Backs the
178
+ * reachability property tests (R9) over hand-built and visitor-produced CFGs.
179
+ */
180
+ const reachableBlocks = (cfg) => {
181
+ const adj = new Map();
182
+ for (const e of cfg.edges) {
183
+ const list = adj.get(e.from);
184
+ if (list)
185
+ list.push(e.to);
186
+ else
187
+ adj.set(e.from, [e.to]);
188
+ }
189
+ const seen = new Set([cfg.entryIndex]);
190
+ const stack = [cfg.entryIndex];
191
+ while (stack.length) {
192
+ const n = stack.pop();
193
+ for (const next of adj.get(n) ?? []) {
194
+ if (!seen.has(next)) {
195
+ seen.add(next);
196
+ stack.push(next);
197
+ }
198
+ }
199
+ }
200
+ return seen;
201
+ };
202
+ exports.reachableBlocks = reachableBlocks;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_PDG_MAX_FUNCTION_LINES = void 0;
4
+ exports.collectFunctionCfgs = collectFunctionCfgs;
5
+ const cfg_builder_js_1 = require("./cfg-builder.js");
6
+ /**
7
+ * Default per-function source-line cap used by the worker when the `--pdg` run
8
+ * does not specify `pdgMaxFunctionLines`. A function longer than this (almost
9
+ * always minified/generated code) is skipped rather than walked — its CFG is
10
+ * both expensive and low-value. Overridable via `PipelineOptions.pdgMaxFunctionLines`.
11
+ */
12
+ exports.DEFAULT_PDG_MAX_FUNCTION_LINES = 2000;
13
+ /**
14
+ * Convert a CFG built from an EXTRACTED sub-document's AST (script-relative
15
+ * tree-sitter rows) into the enclosing file's coordinates by adding `offset` to
16
+ * every source-line field. Needed for embedded scripts — a Vue SFC `<script>`
17
+ * block parses at row 0 but lives at `lineOffset` in the `.vue` file, and every
18
+ * other worker-emitted graph node is already file-relative; without this, the
19
+ * CFG's `functionStartLine` would never join its Function/Method graph node
20
+ * (inter-procedural taint silently resolves nothing) and BasicBlock source
21
+ * lines would point at the wrong `.vue` line. A 0 offset returns the input
22
+ * unchanged (the common case: `.ts`/`.js`/etc. parse at the file root), keeping
23
+ * non-embedded languages byte-identical. Synthetic bindings keep `declLine` 0.
24
+ */
25
+ function shiftCfgLines(cfg, offset) {
26
+ if (offset === 0)
27
+ return cfg;
28
+ return {
29
+ ...cfg,
30
+ functionStartLine: cfg.functionStartLine + offset,
31
+ functionEndLine: cfg.functionEndLine + offset,
32
+ blocks: cfg.blocks.map((b) => ({
33
+ ...b,
34
+ startLine: b.startLine + offset,
35
+ endLine: b.endLine + offset,
36
+ statements: b.statements?.map((s) => ({ ...s, line: s.line + offset })),
37
+ })),
38
+ bindings: cfg.bindings?.map((bd) => bd.declLine > 0 ? { ...bd, declLine: bd.declLine + offset } : bd),
39
+ };
40
+ }
41
+ function collectFunctionCfgs(root, visitor, filePath, maxFunctionLines = 0, lineOffset = 0) {
42
+ const cfgs = [];
43
+ let tooManyLines = 0;
44
+ let tooDeeplyNested = 0;
45
+ let buildError = 0;
46
+ const stack = [root];
47
+ while (stack.length) {
48
+ const node = stack.pop();
49
+ if (visitor.isFunction(node)) {
50
+ const lines = node.endPosition.row - node.startPosition.row + 1;
51
+ if (maxFunctionLines > 0 && lines > maxFunctionLines) {
52
+ tooManyLines++;
53
+ }
54
+ else {
55
+ // Isolate the per-function build: a proactive deep-nesting bail
56
+ // (CfgNestingDepthError) or any other visitor throw is counted and
57
+ // skipped HERE, so it can't escape to the worker's language-group catch
58
+ // and silently drop every remaining function's CFG (#2195).
59
+ try {
60
+ const cfg = visitor.buildFunctionCfg(node, filePath);
61
+ if (cfg)
62
+ cfgs.push(shiftCfgLines(cfg, lineOffset));
63
+ }
64
+ catch (err) {
65
+ if (err instanceof cfg_builder_js_1.CfgNestingDepthError)
66
+ tooDeeplyNested++;
67
+ else
68
+ buildError++;
69
+ }
70
+ }
71
+ }
72
+ // Descend regardless (a skipped mega-function may still contain small
73
+ // nested functions that are worth a CFG of their own).
74
+ for (let i = node.namedChildCount - 1; i >= 0; i--) {
75
+ const child = node.namedChild(i);
76
+ if (child)
77
+ stack.push(child);
78
+ }
79
+ }
80
+ return { cfgs, skipped: { tooManyLines, tooDeeplyNested, buildError } };
81
+ }
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.computeControlDependence = computeControlDependence;
4
+ /**
5
+ * Control dependence (#2085 M5 U3) — Ferrante, Ottenstein & Warren §3.1.1
6
+ * semantics. A block `dependent` is control-dependent on a branch block
7
+ * `controller` when `controller` decides whether `dependent` executes: formally,
8
+ * there is a CFG edge `controller → B` such that `dependent` post-dominates `B`
9
+ * but does NOT strictly post-dominate `controller`.
10
+ *
11
+ * Construction — the reverse-CFG dominance-frontier formulation (Cytron,
12
+ * Ferrante, Rosen, Wegman & Zadeck 1991): control dependence IS the dominance
13
+ * frontier of the reverse CFG, so `A ∈ PDF(X)` (the post-dominance frontier)
14
+ * ⟺ `X` is control-dependent on `A`. The PDF is computed bottom-up over the
15
+ * post-dom tree (`PDF_local` from a node's CFG predecessors + `PDF_up` from its
16
+ * post-dom-tree children) in O(N + E + output) — each up-step is charged to a
17
+ * distinct emitted edge, NOT re-walked per CFG edge as the original §3.1.1
18
+ * up-walk did (which was Θ(N²) on a deep post-dom chain). The two formulations
19
+ * enumerate the IDENTICAL full `(controller, dependent, label)` set (verified
20
+ * byte-identical on 3203 CFGs + ~1M-case differential fuzz); LLVM, Joern and WALA
21
+ * use the reverse-DF form. (Only the rare TRUNCATED prefix — when a function
22
+ * exceeds `maxEdges` — differs from the old prefix: it is now a sorted
23
+ * deterministic prefix rather than CFG-edge-iteration order. Both are valid,
24
+ * deterministic subsets; the full untruncated output is unchanged.)
25
+ * The branch SENSE ('T' | 'F') of the controlling edge becomes the edge label
26
+ * (KTD4 / KTD3 — it rides the persisted relation's `reason` column).
27
+ *
28
+ * PURE AND DETERMINISTIC (mirrors post-dominators.ts / reaching-defs.ts): no
29
+ * graph, no logger, importable outside the worker; output is deduped per
30
+ * (controller, dependent, label) and sorted, so snapshot tests and
31
+ * content-derived edge ids are stable. The loop header legitimately appears as
32
+ * control-dependent on ITSELF (`controller === dependent`) — the loop predicate
33
+ * gates its own re-execution; this is standard PDG behavior, not a bug.
34
+ */
35
+ const post_dominators_js_1 = require("./post-dominators.js");
36
+ function buildArmSenses(cfg) {
37
+ const n = cfg.blocks.length;
38
+ const senses = Array.from({ length: n }, () => ({
39
+ hasTrueArm: false,
40
+ hasFalseArm: false,
41
+ }));
42
+ for (const e of cfg.edges) {
43
+ if (e.from < 0 || e.from >= n)
44
+ continue;
45
+ if (e.kind === 'cond-true' || e.kind === 'switch-case')
46
+ senses[e.from].hasTrueArm = true;
47
+ else if (e.kind === 'cond-false')
48
+ senses[e.from].hasFalseArm = true;
49
+ }
50
+ return senses;
51
+ }
52
+ /**
53
+ * The CDG label ('T'|'F') for a control-dependence edge, given the controlling
54
+ * block's arm senses. An explicitly-sensed edge is taken at face value; an
55
+ * ambiguous fall-through edge (`seq`/`loop-back`/`fallthrough`/jump) is the
56
+ * COMPLEMENT of the controller's explicit sibling arm. Per-case `switch` value
57
+ * labels are deferred to #2086 — every `switch-case` is 'T' in M5.
58
+ */
59
+ function labelFor(kind, controller) {
60
+ if (kind === 'cond-true' || kind === 'switch-case')
61
+ return 'T';
62
+ if (kind === 'cond-false')
63
+ return 'F';
64
+ // Ambiguous structural kind: take the complement of the controller's explicit
65
+ // arm. A block with a true arm reaches here via its false fall-through; a
66
+ // do/while bottom-test (false arm = cond-false) reaches here via its true
67
+ // loop-back. With neither explicit arm (a degenerate / exit-unreachable
68
+ // region — see #2188 F2, where the dependence itself is unsound) the sense is
69
+ // indeterminate; default 'F' since fall-through is the common case.
70
+ if (controller.hasTrueArm)
71
+ return 'F';
72
+ if (controller.hasFalseArm)
73
+ return 'T';
74
+ return 'F';
75
+ }
76
+ /**
77
+ * Compute control-dependence edges for one function's CFG. `postDom` may be
78
+ * supplied to reuse an already-built tree; otherwise it is computed. See the
79
+ * module doc for the purity/determinism contract.
80
+ */
81
+ function computeControlDependence(cfg, postDom,
82
+ // Output-size ceiling, mirroring computeReachingDefs' `maxFacts` (#2188 review).
83
+ // The reverse-DF set is the bounded (controller, dependent, label) dependence
84
+ // relation, so peak working set ≈ output here (no pre-dedup spike like the old
85
+ // up-walk) — this caps the final edge COUNT, not transient memory. `0` ⇒
86
+ // unbounded. On overflow `edges` is a deterministic SORTED prefix and
87
+ // `truncated` is set — never a silent drop. (The sorted prefix is the prefix
88
+ // CONTENTS may differ from the old up-walk's CFG-edge-iteration prefix at the
89
+ // cap boundary; the FULL untruncated set is byte-identical — see the module doc.)
90
+ maxEdges = 0) {
91
+ const tree = postDom ?? (0, post_dominators_js_1.computePostDominators)(cfg);
92
+ const { ipdom } = tree;
93
+ const n = cfg.blocks.length;
94
+ const armSenses = buildArmSenses(cfg);
95
+ const cap = maxEdges > 0 ? maxEdges : Infinity;
96
+ // Reverse-CFG post-dominance frontier (Cytron, Ferrante, Rosen, Wegman,
97
+ // Zadeck 1991): control dependence IS the dominance frontier of the reverse
98
+ // CFG. `A ∈ PDF(X)` ⟺ X is control-dependent on A, so emit (controller=A,
99
+ // dependent=X). Computing the PDF bottom-up over the post-dom tree charges
100
+ // each up-step to a DISTINCT emitted entry — O(N+E+output) — instead of the
101
+ // old Ferrante up-walk that re-climbs the ipdom chain per CFG edge (Θ(N²) on
102
+ // a deep post-dom chain). Output is the identical (controller, dependent,
103
+ // label) set (verified byte-identical on 3203 CFGs across all languages +
104
+ // fuzz) and 1-2 orders of magnitude faster. LLVM (ReverseIDFCalculator),
105
+ // Joern (CdgPass) and WALA use the same formulation.
106
+ const children = Array.from({ length: n }, () => []);
107
+ const inEdges = Array.from({ length: n }, () => []);
108
+ for (let b = 0; b < n; b++) {
109
+ const ip = ipdom[b];
110
+ if (ip !== post_dominators_js_1.NO_IPDOM && ip >= 0 && ip < n)
111
+ children[ip].push(b);
112
+ }
113
+ for (const e of cfg.edges) {
114
+ if (e.from < 0 || e.from >= n || e.to < 0 || e.to >= n)
115
+ continue;
116
+ inEdges[e.to].push({ from: e.from, kind: e.kind });
117
+ }
118
+ // Post-dom-tree post-order (children before parents). Iterative — the post-dom
119
+ // forest can itself be chain-deep. Roots are the NO_IPDOM nodes (EXIT, plus
120
+ // any exit-unreachable region per #2188 F2). The reverse of a root-first DFS
121
+ // visits every parent AFTER all its descendants.
122
+ const dfs = [];
123
+ for (let r = 0; r < n; r++)
124
+ if (ipdom[r] === post_dominators_js_1.NO_IPDOM)
125
+ dfs.push(r);
126
+ const preorder = [];
127
+ while (dfs.length) {
128
+ const x = dfs.pop();
129
+ preorder.push(x);
130
+ for (const c of children[x])
131
+ dfs.push(c);
132
+ }
133
+ const order = preorder.reverse();
134
+ // PDF[X]: controller A → the label SET with which A controls X. A set (not one
135
+ // label) because a controller can reach X via opposite-sense arms (goto-
136
+ // cycles) — the old (a, cur, label) dedup kept both rows.
137
+ const pdf = Array.from({ length: n }, () => new Map());
138
+ const add = (x, a, label) => {
139
+ const set = pdf[x].get(a);
140
+ if (set)
141
+ set.add(label);
142
+ else
143
+ pdf[x].set(a, new Set([label]));
144
+ };
145
+ for (const x of order) {
146
+ // PDF_local: a CFG-predecessor A of X that X does not (immediately) post-
147
+ // dominate. `A !== X && ipdom[A] !== X` is exactly the production
148
+ // `!postDominates(X, A)` for one edge A→X (postDominates(X,A) ⟺ ipdom[A]===X),
149
+ // and it excludes self-edges + NO_IPDOM regions. Sense is read from the
150
+ // CONTROLLER's arms (seq/loop-back fall-through false arms would otherwise
151
+ // mislabel as 'T' — #2188 F1).
152
+ for (const { from: a, kind } of inEdges[x]) {
153
+ if (a !== x && ipdom[a] !== x)
154
+ add(x, a, labelFor(kind, armSenses[a]));
155
+ }
156
+ // PDF_up: inherit each post-dom child's frontier controller (with its label
157
+ // set) when X does not post-dominate it.
158
+ for (const z of children[x]) {
159
+ for (const [a, labels] of pdf[z]) {
160
+ if (ipdom[a] !== x)
161
+ for (const l of labels)
162
+ add(x, a, l);
163
+ }
164
+ }
165
+ }
166
+ const out = [];
167
+ for (const x of order) {
168
+ for (const [a, labels] of pdf[x]) {
169
+ for (const label of labels)
170
+ out.push({ controllerBlock: a, dependentBlock: x, label });
171
+ }
172
+ }
173
+ out.sort((x, y) => x.controllerBlock - y.controllerBlock ||
174
+ x.dependentBlock - y.dependentBlock ||
175
+ (x.label < y.label ? -1 : x.label > y.label ? 1 : 0));
176
+ // `maxEdges` is a heap-safety backstop applied to the SORTED set (the DF makes
177
+ // overflow far rarer than the old per-edge walk). Deterministic prefix, never
178
+ // a silent drop; mirrors computeReachingDefs' `truncated`.
179
+ let truncated = false;
180
+ if (cap !== Infinity && out.length > cap) {
181
+ truncated = true;
182
+ out.length = cap;
183
+ }
184
+ return { edges: out, truncated };
185
+ }
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ControlFlowContext = void 0;
4
+ exports.wireJumpThroughFinalizers = wireJumpThroughFinalizers;
5
+ exports.drainFinalizerPending = drainFinalizerPending;
6
+ class ControlFlowContext {
7
+ stack = [];
8
+ pushLoop(continueTo, breakTo, labels = []) {
9
+ this.stack.push({ kind: 'loop', continueTo, breakTo, labels });
10
+ }
11
+ pushSwitch(breakTo, labels = []) {
12
+ this.stack.push({ kind: 'switch', breakTo, labels });
13
+ }
14
+ /** Push a labeled non-loop statement's break-target frame. */
15
+ pushLabeledBlock(breakTo, labels) {
16
+ this.stack.push({ kind: 'block', breakTo, labels });
17
+ }
18
+ /**
19
+ * Push a finalizer frame and return it — the owning `visitTry` keeps the
20
+ * reference to wire {@link FinalizerFrame.pending} after popping it.
21
+ */
22
+ pushFinalizer(entry) {
23
+ const frame = { kind: 'finalizer', entry, pending: [] };
24
+ this.stack.push(frame);
25
+ return frame;
26
+ }
27
+ pop() {
28
+ this.stack.pop();
29
+ }
30
+ /**
31
+ * Resolve a `break`: the nearest enclosing loop/switch frame (or, with a
32
+ * label, the nearest frame carrying that label) plus every finalizer frame
33
+ * stacked ABOVE it — i.e. exactly the finallys the jump crosses, innermost
34
+ * first. Returns `undefined` if there is no valid target (malformed input or
35
+ * an unmodeled label) — the caller falls back to its conservative routing and
36
+ * threads nothing.
37
+ */
38
+ resolveBreak(label) {
39
+ return this.resolve((f) => label === undefined
40
+ ? f.kind !== 'block' // an unlabeled break never targets a labeled block
41
+ : f.labels.includes(label));
42
+ }
43
+ /** Resolve a `continue`: like {@link resolveBreak} but only loop frames match. */
44
+ resolveContinue(label) {
45
+ return this.resolve((f) => f.kind === 'loop' && (label === undefined || f.labels.includes(label)), (f) => f.continueTo);
46
+ }
47
+ /**
48
+ * Resolve a Java `yield e` (switch-EXPRESSION arm exit): the nearest enclosing
49
+ * SWITCH frame's exit, threading the finalizers stacked above it. Unlike a
50
+ * `break`, a `yield` ALWAYS targets the switch — never an intervening loop — so
51
+ * it cannot match a loop frame (a `yield` inside a loop inside a switch arm
52
+ * still exits the whole switch). Returns `undefined` when there is no enclosing
53
+ * switch (malformed input); the caller falls back to its conservative routing.
54
+ */
55
+ resolveYield() {
56
+ return this.resolve((f) => f.kind === 'switch');
57
+ }
58
+ /** Every active finalizer, innermost first — what a `return` must cross. */
59
+ finalizersForReturn() {
60
+ const fins = [];
61
+ for (let i = this.stack.length - 1; i >= 0; i--) {
62
+ const f = this.stack[i];
63
+ if (f.kind === 'finalizer')
64
+ fins.push(f);
65
+ }
66
+ return fins;
67
+ }
68
+ /**
69
+ * Target block for a `break` (no finalizer info) — see {@link resolveBreak}.
70
+ * Prefer `resolveBreak` + {@link wireJumpThroughFinalizers} in visitors: a
71
+ * target-only lookup silently loses finalizer threading (the M2 soundness
72
+ * fix). Kept for target-shape assertions in tests.
73
+ */
74
+ breakTarget(label) {
75
+ return this.resolveBreak(label)?.target;
76
+ }
77
+ /** Target block for a `continue` — same caveat as {@link breakTarget}. */
78
+ continueTarget(label) {
79
+ return this.resolveContinue(label)?.target;
80
+ }
81
+ resolve(matches, targetOf = (f) => f.breakTo) {
82
+ const crossed = [];
83
+ for (let i = this.stack.length - 1; i >= 0; i--) {
84
+ const f = this.stack[i];
85
+ if (f.kind === 'finalizer') {
86
+ crossed.push(f);
87
+ continue;
88
+ }
89
+ if (matches(f))
90
+ return { target: targetOf(f), finalizers: crossed };
91
+ }
92
+ return undefined;
93
+ }
94
+ }
95
+ exports.ControlFlowContext = ControlFlowContext;
96
+ /**
97
+ * Wire a jump from `from` to `target`, routing through the finallys it
98
+ * crosses (innermost first). The first leg keeps the bare jump `kind`
99
+ * (preserving the "kind ⟹ source-block terminator" invariant in types.ts);
100
+ * each finally's completion leg is registered as pending on its frame with the
101
+ * matching `finally-*` kind and wired by the owning try via
102
+ * {@link drainFinalizerPending} once the finally's exits are known.
103
+ *
104
+ * Language-agnostic on purpose (#2082 M2): the threading protocol encodes
105
+ * three subtle invariants every future language visitor needs identically —
106
+ * keeping it here means a new visitor cannot drift on any of them.
107
+ */
108
+ function wireJumpThroughFinalizers(builder, from, finalizers, target, kind) {
109
+ if (finalizers.length === 0) {
110
+ builder.edge(from, target, kind);
111
+ return;
112
+ }
113
+ const completionKind = `finally-${kind}`;
114
+ builder.edge(from, finalizers[0].entry, kind);
115
+ for (let i = 0; i < finalizers.length; i++) {
116
+ const to = i + 1 < finalizers.length ? finalizers[i + 1].entry : target;
117
+ finalizers[i].pending.push({ to, kind: completionKind });
118
+ }
119
+ }
120
+ /**
121
+ * Wire a popped finalizer frame's pending completion legs from the finally's
122
+ * exit blocks. A finally that itself always jumps (`finally { return 2; }`)
123
+ * has no exits — its pending legs wire nowhere, matching JS's
124
+ * finally-override semantics.
125
+ */
126
+ function drainFinalizerPending(builder, frame, finallyExits) {
127
+ for (const p of frame.pending) {
128
+ builder.connect(finallyExits, p.to, p.kind);
129
+ }
130
+ }