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,632 @@
1
+ "use strict";
2
+ /**
3
+ * `runScopeResolution` — generic registry-primary resolution
4
+ * orchestrator.
5
+ *
6
+ * ParsedFile[] (one per file via `extractParsedFile`)
7
+ * │ finalizeScopeModel( + provider hooks adapted to FinalizeHooks)
8
+ * ▼
9
+ * ScopeResolutionIndexes
10
+ * │ resolveReferenceSites
11
+ * ▼
12
+ * ReferenceIndex
13
+ * │ emitReceiverBoundCalls (FIRST — see Contract Invariant I1)
14
+ * │ emitFreeCallFallback (THEN)
15
+ * │ emitReferencesViaLookup (LAST — uses handledSites)
16
+ * │ emitImportEdges
17
+ * ▼
18
+ * KnowledgeGraph
19
+ *
20
+ * Per-language entry points (e.g. `runPythonScopeResolution` in
21
+ * `languages/python/scope-resolver.ts`) construct an `ScopeResolver` and
22
+ * delegate here.
23
+ *
24
+ * Plan: `docs/plans/2026-04-20-001-refactor-emit-pipeline-generalization-plan.md`.
25
+ */
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.runScopeResolution = runScopeResolution;
28
+ const utils_js_1 = require("../../../../lib/utils.js");
29
+ const owned_members_lookup_js_1 = require("../../model/owned-members-lookup.js");
30
+ const reconcile_ownership_js_1 = require("./reconcile-ownership.js");
31
+ const validate_bindings_immutability_js_1 = require("./validate-bindings-immutability.js");
32
+ const scope_extractor_bridge_js_1 = require("../../scope-extractor-bridge.js");
33
+ const finalize_orchestrator_js_1 = require("../../finalize-orchestrator.js");
34
+ const resolve_references_js_1 = require("../../resolve-references.js");
35
+ const node_lookup_js_1 = require("../graph-bridge/node-lookup.js");
36
+ const ids_js_1 = require("../graph-bridge/ids.js");
37
+ const method_dispatch_js_1 = require("../graph-bridge/method-dispatch.js");
38
+ const imported_return_types_js_1 = require("../passes/imported-return-types.js");
39
+ const receiver_bound_calls_js_1 = require("../passes/receiver-bound-calls.js");
40
+ const free_call_fallback_js_1 = require("../passes/free-call-fallback.js");
41
+ const property_dispatch_js_1 = require("../passes/property-dispatch.js");
42
+ const references_to_edges_js_1 = require("../graph-bridge/references-to-edges.js");
43
+ const callee_id_sink_js_1 = require("../graph-bridge/callee-id-sink.js");
44
+ const imports_to_edges_js_1 = require("../graph-bridge/imports-to-edges.js");
45
+ const callable_value_flow_js_1 = require("../passes/callable-value-flow.js");
46
+ const walkers_js_1 = require("../scope/walkers.js");
47
+ const workspace_index_js_1 = require("../workspace-index.js");
48
+ const heap_probe_js_1 = require("../../utils/heap-probe.js");
49
+ const env_js_1 = require("../../utils/env.js");
50
+ const scope_index_store_js_1 = require("../../../../storage/scope-index-store.js");
51
+ const parsedfile_store_js_1 = require("../../../../storage/parsedfile-store.js");
52
+ const logger_js_1 = require("../../../logger.js");
53
+ /**
54
+ * Emit one class-owned inheritance edge directly (the inheritance pre-pass is
55
+ * the authoritative emitter — see `preEmitInheritanceEdges`). Encapsulates the
56
+ * dual dedup contract so the two sets' joint semantics live in one place:
57
+ * - `existing` — coarse per-`(caller, target, type)` gate, seeded from the
58
+ * graph (so this pass is a no-op when the legacy path already emitted it).
59
+ * - `seen` — per-site key shared with the generic edge bridge so the two
60
+ * passes never double-emit the same resolution.
61
+ * The `dedupKey` and `rel:` id shape match `tryEmitEdge` exactly, so graph
62
+ * output stays byte-identical. The caller is the enclosing class (NOT the
63
+ * method/constructor `resolveCallerGraphId` would prefer — that broke MRO for
64
+ * C# 12 primary constructors, #1951); the edge type is pre-discriminated.
65
+ */
66
+ function emitInheritanceEdgeDirect(graph, seen, existing, callerGraphId, targetGraphId, edgeType, site) {
67
+ const edgeKey = `${edgeType}:${callerGraphId}->${targetGraphId}`;
68
+ const dedupKey = `${edgeKey}:${site.atRange.startLine}:${site.atRange.startCol}`;
69
+ if (existing.has(edgeKey) || seen.has(dedupKey))
70
+ return;
71
+ seen.add(dedupKey);
72
+ existing.add(edgeKey);
73
+ graph.addRelationship({
74
+ id: `rel:${dedupKey}`,
75
+ sourceId: callerGraphId,
76
+ targetId: targetGraphId,
77
+ type: edgeType,
78
+ confidence: 0.85,
79
+ reason: 'scope-resolution: inherits',
80
+ });
81
+ }
82
+ /**
83
+ * Resolve inheritance reference sites early and pre-emit their EXTENDS edges
84
+ * before MRO construction. This lets template-base captures contribute to the
85
+ * graph in time for `buildMro`, while `handledSites` prevents the generic
86
+ * reference-edge bridge from re-emitting the same sites later.
87
+ *
88
+ * @returns Site keys to seed the downstream handled-site skip set.
89
+ */
90
+ function preEmitInheritanceEdges(graph, scopes, nodeLookup) {
91
+ const handledSites = new Set();
92
+ const seen = new Set();
93
+ // Tracks inheritance edges emitted during this pass so the structural
94
+ // interface-implementation pass (emitDetectedInterfaceImplementations) and
95
+ // repeated `inherits` sites don't double-emit. Starts empty: this pre-pass is
96
+ // the authoritative inheritance emitter — no EXTENDS/IMPLEMENTS edges exist in
97
+ // the graph before it runs (the legacy heritage path was removed in #942).
98
+ const existing = new Set();
99
+ for (const site of scopes.referenceSites) {
100
+ if (site.kind !== 'inherits')
101
+ continue;
102
+ const scope = scopes.scopeTree.getScope(site.inScope);
103
+ const siteKey = scope?.filePath !== undefined
104
+ ? `${scope.filePath}:${site.atRange.startLine}:${site.atRange.startCol}`
105
+ : undefined;
106
+ if (siteKey !== undefined) {
107
+ // Intentionally suppress every `inherits` site from the generic
108
+ // reference bridge, even when this pre-pass can't emit an EXTENDS
109
+ // edge. The shared bridge resolves the source via
110
+ // `resolveCallerGraphId`, which can degrade class-heritage sites into
111
+ // method-owned EXTENDS edges once methods exist on the class. This
112
+ // pre-pass is the authoritative inheritance emitter and pins the source
113
+ // to the enclosing class (via the `callerGraphId` override below), so
114
+ // suppression keeps `buildMro` and the final graph class-owned.
115
+ handledSites.add(siteKey);
116
+ }
117
+ // Resolve the deriving (caller) class first and reuse it as the enclosing
118
+ // context for qualified-base resolution — avoids a second findEnclosingClassDef
119
+ // walk per qualified site (#1982 perf). Both need the same enclosing class.
120
+ const callerClass = (0, walkers_js_1.findEnclosingClassDef)(site.inScope, scopes);
121
+ if (callerClass === undefined)
122
+ continue;
123
+ const targetDef = (0, walkers_js_1.resolveInheritanceBaseInScope)(site.inScope, site.name, scopes, site.rawQualifiedName, callerClass);
124
+ if (targetDef === undefined)
125
+ continue;
126
+ const callerGraphId = (0, ids_js_1.resolveDefGraphId)(callerClass.filePath, callerClass, nodeLookup);
127
+ const targetGraphId = (0, ids_js_1.resolveDefGraphId)(targetDef.filePath, targetDef, nodeLookup);
128
+ if (callerGraphId === undefined || targetGraphId === undefined)
129
+ continue;
130
+ // Discriminate EXTENDS vs IMPLEMENTS by the resolved target's symbol kind:
131
+ // conforming to an interface OR mixing in a trait/protocol is IMPLEMENTS,
132
+ // deriving from a class-like is EXTENDS. The discriminator is purely
133
+ // symbol-kind-driven (no language is named here, per AGENTS.md): a base that
134
+ // resolves to neither an Interface nor a Trait symbol always takes the
135
+ // EXTENDS branch, so such languages are unchanged.
136
+ const edgeType = targetDef.type === 'Interface' || targetDef.type === 'Trait' ? 'IMPLEMENTS' : 'EXTENDS';
137
+ emitInheritanceEdgeDirect(graph, seen, existing, callerGraphId, targetGraphId, edgeType, site);
138
+ }
139
+ return handledSites;
140
+ }
141
+ /**
142
+ * Emit language-inferred structural interface implementations before MRO and
143
+ * interface dispatch are built. Languages such as Go do not declare
144
+ * `implements` explicitly, so their resolver can infer defId-level interface
145
+ * satisfaction from parsed files and this bridge converts those defIds to
146
+ * graph node ids.
147
+ *
148
+ * Existing explicit IMPLEMENTS edges win: the local `existing` set prevents
149
+ * duplicate structural edges and keeps this hook language-neutral. The reason
150
+ * string carries the provider language (`go-structural-implements`) so callers
151
+ * can distinguish inferred edges from source-declared heritage.
152
+ */
153
+ function emitDetectedInterfaceImplementations(graph, parsedFiles, nodeLookup, provider, indexes, model) {
154
+ if (provider.detectInterfaceImplementations === undefined)
155
+ return 0;
156
+ const graphIdByDefId = new Map();
157
+ for (const parsed of parsedFiles) {
158
+ for (const def of parsed.localDefs) {
159
+ if (def.type !== 'Class' && def.type !== 'Struct' && def.type !== 'Interface')
160
+ continue;
161
+ const graphId = (0, ids_js_1.resolveDefGraphId)(parsed.filePath, def, nodeLookup);
162
+ if (graphId !== undefined)
163
+ graphIdByDefId.set(def.nodeId, graphId);
164
+ }
165
+ }
166
+ const existing = new Set();
167
+ for (const rel of graph.iterRelationshipsByType('IMPLEMENTS')) {
168
+ existing.add(`${rel.sourceId}->${rel.targetId}`);
169
+ }
170
+ let emitted = 0;
171
+ const detected = provider.detectInterfaceImplementations(parsedFiles, indexes, model);
172
+ for (const [interfaceDefId, implementorDefIds] of detected) {
173
+ const targetId = graphIdByDefId.get(interfaceDefId);
174
+ if (targetId === undefined)
175
+ continue;
176
+ for (const implementor of implementorDefIds) {
177
+ const sourceId = graphIdByDefId.get(implementor.structDefId);
178
+ if (sourceId === undefined)
179
+ continue;
180
+ const edgeKey = `${sourceId}->${targetId}`;
181
+ if (existing.has(edgeKey))
182
+ continue;
183
+ existing.add(edgeKey);
184
+ graph.addRelationship({
185
+ id: (0, utils_js_1.generateId)('IMPLEMENTS', edgeKey),
186
+ sourceId,
187
+ targetId,
188
+ type: 'IMPLEMENTS',
189
+ confidence: 0.85,
190
+ // The receiver form rides in `reason` because relationships carry no
191
+ // arbitrary properties — adding one would change the relation DDL and
192
+ // move SCHEMA_FINGERPRINT, forcing a full re-analyze for a fact that a
193
+ // string already expresses. `-pointer` means ONLY the pointer type
194
+ // implements: `var x I = T{}` is invalid, `var x I = &T{}` is fine.
195
+ // The unsuffixed form is unchanged from before, so a consumer matching
196
+ // the old string keeps seeing exactly the value-form implementors.
197
+ reason: implementor.receiverForm === 'pointer'
198
+ ? `${provider.language}-structural-implements-pointer`
199
+ : `${provider.language}-structural-implements`,
200
+ });
201
+ emitted++;
202
+ }
203
+ }
204
+ return emitted;
205
+ }
206
+ function runScopeResolution(input, provider) {
207
+ const { graph, files } = input;
208
+ const callableFlowOnly = provider.scopeResolutionEdgeMode === 'callable-flow-only';
209
+ const onWarn = input.onWarn ?? (() => { });
210
+ const resolutionOutcomes = [];
211
+ const recordResolutionOutcome = (outcome) => {
212
+ resolutionOutcomes.push(outcome);
213
+ input.recordResolutionOutcome?.(outcome);
214
+ };
215
+ const PROF = process.env.PROF_SCOPE_RESOLUTION === '1';
216
+ const tStart = PROF ? process.hrtime.bigint() : 0n;
217
+ let fileContents;
218
+ const getFileContents = () => {
219
+ if (fileContents === undefined) {
220
+ fileContents = new Map();
221
+ for (const f of files)
222
+ fileContents.set(f.path, f.content);
223
+ }
224
+ return fileContents;
225
+ };
226
+ // ── Phase 1: extract each file → ParsedFile ────────────────────────────
227
+ const parsedFiles = [];
228
+ let filesSkipped = 0;
229
+ const treeCache = input.treeCache;
230
+ const preExtracted = input.preExtractedParsedFiles;
231
+ let preExtractedHits = 0;
232
+ const progressInterval = files.length > 0 ? Math.max(1, Math.floor(files.length / 50)) : 1;
233
+ input.onProgress?.('extracting', 0, files.length);
234
+ (0, heap_probe_js_1.logHeapProbe)('sr-extract-start', `lang=${provider.language} files=${files.length}`);
235
+ for (let fileIdx = 0; fileIdx < files.length; fileIdx++) {
236
+ const file = files[fileIdx];
237
+ let parsed;
238
+ // Fast path: a worker (during the parse phase) already produced a
239
+ // ParsedFile for this file via `extractParsedFile`. Reuse it
240
+ // directly — skips a tree-sitter re-parse on the main thread.
241
+ let reusedPreExtracted = false;
242
+ if (preExtracted !== undefined) {
243
+ parsed = preExtracted.get(file.path);
244
+ if (parsed !== undefined) {
245
+ preExtractedHits++;
246
+ reusedPreExtracted = true;
247
+ }
248
+ }
249
+ if (parsed === undefined) {
250
+ const cachedTree = treeCache?.get(file.path);
251
+ parsed = (0, scope_extractor_bridge_js_1.extractParsedFile)(provider.languageProvider, file.content, file.path, onWarn, cachedTree);
252
+ if (parsed === undefined) {
253
+ filesSkipped++;
254
+ continue;
255
+ }
256
+ }
257
+ // Worker-boundary restore: a pre-extracted ParsedFile was produced by
258
+ // `extractParsedFile` running INSIDE a worker, so any capture-time
259
+ // module-level side-channel state (`emitScopeCaptures` side effects that
260
+ // are NOT serialized onto the ParsedFile's scopes/defs — C++ ADL/namespace
261
+ // marks) was populated in the worker process and is missing here. The
262
+ // worker stashed a plain-data snapshot on `parsed.captureSideChannel` (via
263
+ // `collectCaptureSideChannel`); write it back into the module maps now,
264
+ // BEFORE populateOwners consumes the resolved ranges. NO re-parse — that is
265
+ // the #1983 fix. The fresh-extract leg above already populated those marks
266
+ // in this process, so it skips the restore. See
267
+ // `ScopeResolver.applyCaptureSideChannel`.
268
+ if (reusedPreExtracted && provider.applyCaptureSideChannel !== undefined) {
269
+ provider.applyCaptureSideChannel(parsed);
270
+ }
271
+ provider.populateOwners(parsed);
272
+ parsedFiles.push(parsed);
273
+ if ((fileIdx + 1) % progressInterval === 0 || fileIdx === files.length - 1) {
274
+ input.onProgress?.('extracting', fileIdx + 1, files.length);
275
+ (0, heap_probe_js_1.logHeapProbe)('sr-extract-progress', `lang=${provider.language} idx=${fileIdx + 1}/${files.length} parsedFiles=${parsedFiles.length} preExtractedHits=${preExtractedHits}`);
276
+ }
277
+ }
278
+ if (PROF && preExtracted !== undefined) {
279
+ logger_js_1.logger.warn(`[scope-resolution prof] pre-extracted hits: ${preExtractedHits}/${files.length}`);
280
+ }
281
+ (0, heap_probe_js_1.logHeapProbe)('sr-extract-end', `lang=${provider.language} parsedFiles=${parsedFiles.length} preExtractedHits=${preExtractedHits} skipped=${filesSkipped}`);
282
+ provider.populateWorkspaceOwners?.(parsedFiles, { fileContents: getFileContents() });
283
+ // A callable-flow-only provider has no reason to build the whole-graph
284
+ // lookup or finalize ordinary references when none of its files emitted a
285
+ // callable fact. This keeps the opt-in path proportional to source scanning
286
+ // for repositories that use the provider but no first-class callables.
287
+ if (callableFlowOnly &&
288
+ !parsedFiles.some((parsed) => (parsed.callableFlowSites?.length ?? 0) > 0)) {
289
+ return {
290
+ filesProcessed: parsedFiles.length,
291
+ filesSkipped,
292
+ importsEmitted: 0,
293
+ resolve: { sitesProcessed: 0, referencesEmitted: 0, unresolved: 0 },
294
+ referenceEdgesEmitted: 0,
295
+ referenceSkipped: 0,
296
+ propertyDispatchSkippedKeys: 0,
297
+ resolutionOutcomes,
298
+ };
299
+ }
300
+ // Reconcile scope-resolution's ownership view into the SemanticModel.
301
+ // See `reconcile-ownership.ts` for the full rationale (Contract
302
+ // Invariant I9). Debug-mode validator runs immediately after to
303
+ // catch drift between `parsed.localDefs` and the registries.
304
+ //
305
+ // PHASE BOUNDARY: `input.model` is `MutableSemanticModel` up to this
306
+ // point (write phase: reconciliation). After this line no further
307
+ // writes are expected — downstream passes consume `readonlyModel`
308
+ // (narrowed to `SemanticModel`) so accidental writes would surface
309
+ // as type errors.
310
+ (0, reconcile_ownership_js_1.reconcileOwnership)(parsedFiles, input.model);
311
+ (0, reconcile_ownership_js_1.validateOwnershipParity)(parsedFiles, input.model, onWarn);
312
+ const readonlyModel = input.model;
313
+ if (parsedFiles.length === 0) {
314
+ return {
315
+ filesProcessed: 0,
316
+ filesSkipped,
317
+ importsEmitted: 0,
318
+ resolve: { sitesProcessed: 0, referencesEmitted: 0, unresolved: 0 },
319
+ referenceEdgesEmitted: 0,
320
+ referenceSkipped: 0,
321
+ propertyDispatchSkippedKeys: 0,
322
+ resolutionOutcomes,
323
+ };
324
+ }
325
+ const tExtract = PROF ? process.hrtime.bigint() : 0n;
326
+ // ── Phase 2: finalize → ScopeResolutionIndexes ─────────────────────────
327
+ input.onProgress?.('analyzing types', files.length, files.length);
328
+ const allFilePaths = new Set(parsedFiles.map((f) => f.filePath));
329
+ (0, heap_probe_js_1.logHeapProbe)('sr-pre-nodeLookup', `lang=${provider.language}`);
330
+ const nodeLookup = input.prebuiltNodeLookup ?? (0, node_lookup_js_1.buildGraphNodeLookup)(graph);
331
+ (0, heap_probe_js_1.logHeapProbe)('sr-post-nodeLookup', `lang=${provider.language}`);
332
+ const resolutionConfig = input.resolutionConfig;
333
+ const finalized = (0, finalize_orchestrator_js_1.finalizeScopeModel)(parsedFiles, {
334
+ hooks: {
335
+ resolveImportTarget: (targetRaw, fromFile, _workspaceIndex, parsedImport) => provider.resolveImportTarget(targetRaw, fromFile, allFilePaths, resolutionConfig, {
336
+ parsedFiles,
337
+ parsedImport,
338
+ }),
339
+ isNamespaceImport: (parsedImport, targetFile, fromFile) => provider.isNamespaceImport?.(parsedImport, targetFile, fromFile) ?? false,
340
+ expandsWildcardTo: (targetModuleScope) => provider.expandsWildcardTo?.(targetModuleScope, parsedFiles) ?? [],
341
+ mergeBindings: (existing, incoming, scopeId) => provider.mergeBindings(existing, incoming, scopeId),
342
+ },
343
+ });
344
+ (0, heap_probe_js_1.logHeapProbe)('sr-post-finalize', `lang=${provider.language}`);
345
+ const preEmittedInheritanceSites = callableFlowOnly
346
+ ? new Set()
347
+ : preEmitInheritanceEdges(graph, finalized, nodeLookup);
348
+ // Call-based heritage hook (e.g., Ruby include/extend/prepend) — emits
349
+ // IMPLEMENTS edges that `preEmitInheritanceEdges` cannot produce because
350
+ // the heritage declarations are syntactic method calls, not grammar-level
351
+ // heritage clauses. Must run BEFORE `buildMro` so MRO construction sees
352
+ // the freshly-emitted IMPLEMENTS edges.
353
+ if (!callableFlowOnly) {
354
+ provider.emitHeritageEdges?.(graph, parsedFiles, nodeLookup, finalized);
355
+ }
356
+ // Implicit IMPORTS-edge hook — for languages whose files have compiler-
357
+ // implicit cross-file visibility (no syntactic import statement). The
358
+ // finalized-ImportEdge pipeline (`emitImportEdges`) cannot produce these
359
+ // because there is no `ImportEdge` to materialize. Idempotent.
360
+ if (!callableFlowOnly) {
361
+ provider.emitImplicitImportEdges?.(graph, parsedFiles, nodeLookup, resolutionConfig);
362
+ }
363
+ // Rebuild the node lookup after heritage-edge emission. Languages like
364
+ // Ruby create Property graph nodes inside `emitHeritageEdges`; those
365
+ // nodes must be visible to downstream passes (`emitReceiverBoundCalls`
366
+ // resolves write-access targets via `resolveDefGraphId` which consults
367
+ // `nodeLookup`). Without this rebuild, Property nodes added by the
368
+ // heritage hook are invisible and ACCESSES edges silently fail to emit.
369
+ const postHeritageNodeLookup = !callableFlowOnly && provider.emitHeritageEdges !== undefined
370
+ ? (0, node_lookup_js_1.buildGraphNodeLookup)(graph)
371
+ : nodeLookup;
372
+ if (!callableFlowOnly) {
373
+ emitDetectedInterfaceImplementations(graph, parsedFiles, postHeritageNodeLookup, provider, finalized, readonlyModel);
374
+ }
375
+ const mroByClassDefId = provider.buildMro(graph, parsedFiles, postHeritageNodeLookup);
376
+ const extendsOnlyMroByClassDefId = provider.buildExtendsOnlyMro?.(graph, parsedFiles, postHeritageNodeLookup);
377
+ // Replace the empty MethodDispatchIndex that finalizeScopeModel
378
+ // builds by design with the populated one derived from the
379
+ // language's MRO. Spread produces a fresh `ScopeResolutionIndexes`
380
+ // instead of mutating the finalized result through an `as` cast —
381
+ // downstream passes get an object whose readonly guarantees match
382
+ // the type system.
383
+ const indexes = {
384
+ ...finalized,
385
+ methodDispatch: (0, method_dispatch_js_1.buildPopulatedMethodDispatch)(mroByClassDefId, extendsOnlyMroByClassDefId),
386
+ };
387
+ // Build the workspace resolution index ONCE — scope-valued lookups
388
+ // (`classScopeByDefId`, `moduleScopeByFile`) that `SemanticModel`
389
+ // cannot carry. Must run AFTER `populateOwners` (so owned defs are
390
+ // attributed correctly) and AFTER finalize (so module-scope
391
+ // bindings are available).
392
+ // Pass the scopeTree so the index's class/module Scope lookups are id-backed
393
+ // views that delegate to it (out-of-core scope index) — the index pins no Scope objects, so the
394
+ // disk seal can reclaim them. Byte-identical: the view returns the same Scope
395
+ // the resident tree holds (or a value-identical revived one in disk mode).
396
+ const workspaceIndex = (0, workspace_index_js_1.buildWorkspaceResolutionIndex)(parsedFiles, indexes.scopeTree);
397
+ (0, heap_probe_js_1.logHeapProbe)('sr-post-workspaceIndex', `lang=${provider.language}`);
398
+ // Cross-file implicit-namespace visibility (C#). Must run before
399
+ // propagateImportedReturnTypes so the latter pass sees siblings'
400
+ // class bindings when chasing return-type chains across files.
401
+ // The hook writes to `bindingAugmentations` only; finalized
402
+ // `indexes.bindings` remains immutable post-finalize (I8).
403
+ if (provider.populateNamespaceSiblings !== undefined) {
404
+ provider.populateNamespaceSiblings(parsedFiles, indexes, {
405
+ fileContents: getFileContents(),
406
+ treeCache,
407
+ resolutionConfig,
408
+ });
409
+ }
410
+ const tFinalize = PROF ? process.hrtime.bigint() : 0n;
411
+ // Cross-package namespace typeBinding mirroring. Runs before
412
+ // propagateImportedReturnTypes so the SCC-ordered pass sees the
413
+ // mirrored bindings.
414
+ if (provider.mirrorNamespaceTypeBindings !== undefined) {
415
+ provider.mirrorNamespaceTypeBindings(parsedFiles, indexes, workspaceIndex, resolutionConfig);
416
+ }
417
+ // Cross-file return-type propagation (Contract Invariant I3 timing:
418
+ // after finalize, before resolve). Split-timed separately so the
419
+ // SCC-ordered pass's cost is observable (PR #1050 made this O(files)
420
+ // with chain-follow per importer; quadratic regressions show up
421
+ // here, not in finalize).
422
+ if (provider.propagatesReturnTypesAcrossImports !== false) {
423
+ (0, imported_return_types_js_1.propagateImportedReturnTypes)(parsedFiles, indexes, workspaceIndex);
424
+ }
425
+ const tRangeBindStart = PROF ? process.hrtime.bigint() : 0n;
426
+ if (provider.populateRangeBindings !== undefined) {
427
+ provider.populateRangeBindings(parsedFiles, indexes, {
428
+ fileContents: getFileContents(),
429
+ treeCache,
430
+ });
431
+ }
432
+ const tPropagate = PROF ? process.hrtime.bigint() : 0n;
433
+ // Opt-in I8 invariant guard. Runs once after all post-finalize hooks
434
+ // (`populateNamespaceSiblings`, `propagateImportedReturnTypes`) have
435
+ // had a chance to drift, so a single sweep covers the full
436
+ // post-finalize surface visible to `resolveReferenceSites`. No-op in
437
+ // default CLI runs; enabled by NODE_ENV=development or
438
+ // VALIDATE_SEMANTIC_MODEL=1.
439
+ (0, validate_bindings_immutability_js_1.validateBindingsImmutability)(indexes, onWarn);
440
+ // ── Phase 3: resolve references via Registry.lookup ────────────────────
441
+ input.onProgress?.('resolving references', files.length, files.length);
442
+ const registryProviders = {
443
+ arityCompatibility: provider.arityCompatibility,
444
+ };
445
+ const { referenceIndex, stats: resolveStats } = (0, resolve_references_js_1.resolveReferenceSites)({
446
+ scopes: indexes,
447
+ providers: registryProviders,
448
+ ownedMembersByOwner: (ownerDefId, memberName) => (0, owned_members_lookup_js_1.lookupOwnedMembersByOwner)(readonlyModel, ownerDefId, memberName),
449
+ });
450
+ const tResolve = PROF ? process.hrtime.bigint() : 0n;
451
+ (0, heap_probe_js_1.logHeapProbe)('sr-post-resolve', `lang=${provider.language}`);
452
+ // ── Out-of-core scope seal boundary ─────────────────────────────────────
453
+ // Pass-A (finalize + propagate + resolve) is done; all whole-language reads
454
+ // of `Scope.bindings` are behind us. Emit reaches scopes ONLY via
455
+ // `scopeTree.getScope` (a point lookup), so seal the TransitionalScopeTree to
456
+ // disk now and drop the resident scopes. The scopes are pinned from THREE
457
+ // sides: (1) the model's frozen `scopeTree` — released by `seal()` nulling its
458
+ // resident backing from the inside; (2) `input.preExtractedParsedFiles` (held
459
+ // by the caller for its own post-run release) — released here since run.ts is
460
+ // its last reader after extract; (3) this function's `parsedFiles` — replaced
461
+ // by a scope-stripped copy that keeps only what emit reads (referenceSites /
462
+ // filePath / localDefs). All three released → the heavy payload is collectible.
463
+ let emitParsedFiles = parsedFiles;
464
+ if (input.scopeIndexStorePath !== undefined &&
465
+ (0, env_js_1.parseTruthyEnv)(process.env.CGRAPH_DISK_SCOPE_INDEX) &&
466
+ indexes.scopeTree instanceof scope_index_store_js_1.TransitionalScopeTree) {
467
+ (0, heap_probe_js_1.logHeapProbe)('sr-seal-pre', `lang=${provider.language}`);
468
+ indexes.scopeTree.seal(input.scopeIndexStorePath);
469
+ emitParsedFiles = parsedFiles.map((p) => ({ ...p, scopes: [] }));
470
+ parsedFiles.length = 0;
471
+ if (preExtracted !== undefined)
472
+ preExtracted.clear();
473
+ (0, parsedfile_store_js_1.forceGc)();
474
+ (0, heap_probe_js_1.logHeapProbe)('sr-seal-post', `lang=${provider.language}`);
475
+ }
476
+ // ── Phase 4: emit graph edges (LOAD-BEARING ORDER — see I1) ────────────
477
+ input.onProgress?.('linking symbols', files.length, files.length);
478
+ const handledSites = new Set(preEmittedInheritanceSites);
479
+ const deferredIndirectSites = (0, callable_value_flow_js_1.collectDeferredIndirectSites)(emitParsedFiles, indexes);
480
+ const callableArgumentSites = new Set();
481
+ if (deferredIndirectSites.size > 0) {
482
+ for (const parsed of emitParsedFiles) {
483
+ for (const site of parsed.callableFlowSites ?? []) {
484
+ if (site.kind === 'argument') {
485
+ callableArgumentSites.add((0, callable_value_flow_js_1.callableFlowSiteKey)(parsed.filePath, site.callSite));
486
+ }
487
+ }
488
+ }
489
+ }
490
+ // Resolved-callee-id accumulator (#2227 U2 + callable-value-flow). Created
491
+ // when indirect-call facts need direct targets for actual→formal propagation.
492
+ // Populated below at every CALLS emit path before dedup.
493
+ const calleeIdAccumulator = deferredIndirectSites.size > 0
494
+ ? (0, callee_id_sink_js_1.createCalleeIdAccumulator)((filePath, line, col) => callableArgumentSites.has(`${filePath}:${line}:${col}`))
495
+ : undefined;
496
+ const receiverBound = callableFlowOnly
497
+ ? {
498
+ emitted: 0,
499
+ dispatchFanoutSkipped: 0,
500
+ dispatchFanoutSkippedNames: [],
501
+ }
502
+ : (0, receiver_bound_calls_js_1.emitReceiverBoundCalls)(graph, indexes, emitParsedFiles, postHeritageNodeLookup, handledSites, provider, workspaceIndex, readonlyModel, {
503
+ recordResolutionOutcome,
504
+ calleeIdSink: calleeIdAccumulator,
505
+ // The pass's only source of positive EXTERNAL evidence for a dropped
506
+ // receiver (`console.log`, `fetch(...)`). Same hook, same spelling as
507
+ // the `emitFreeCallFallback` wiring below.
508
+ isBuiltInName: provider.languageProvider.isBuiltInName,
509
+ });
510
+ const receiverExtras = receiverBound.emitted;
511
+ if (receiverBound.dispatchFanoutSkipped > 0) {
512
+ // Never drop dispatch coverage silently (#2829) — same contract as the
513
+ // property-dispatch cap below. An interface member over the cap loses real
514
+ // implementors, so `impact()` on those implementations under-reports; an
515
+ // operator has to be able to see WHICH member lost them.
516
+ logger_js_1.logger.warn({
517
+ lang: provider.language,
518
+ dispatchFanoutSkipped: receiverBound.dispatchFanoutSkipped,
519
+ dispatchFanoutSkippedNames: receiverBound.dispatchFanoutSkippedNames,
520
+ fanoutCap: receiver_bound_calls_js_1.MAX_INTERFACE_DISPATCH_FANOUT,
521
+ }, 'interface-dispatch: members over the fan-out cap dropped implementors (their CALLS edges were not emitted)');
522
+ }
523
+ const unresolvedReceiverExtras = !callableFlowOnly && provider.emitUnresolvedReceiverEdges !== undefined
524
+ ? provider.emitUnresolvedReceiverEdges(graph, indexes, emitParsedFiles, postHeritageNodeLookup, handledSites, readonlyModel)
525
+ : 0;
526
+ const freeCallExtras = callableFlowOnly
527
+ ? 0
528
+ : (0, free_call_fallback_js_1.emitFreeCallFallback)(graph, indexes, emitParsedFiles, postHeritageNodeLookup, referenceIndex, handledSites, readonlyModel, workspaceIndex, {
529
+ allowGlobalFallback: provider.allowGlobalFreeCallFallback === true,
530
+ constructorCallTargetsClass: provider.constructorCallTargetsClass === true,
531
+ isFileLocalDef: provider.isFileLocalDef,
532
+ isBuiltInName: provider.languageProvider.isBuiltInName,
533
+ freeCallsRequireInstanceOwnership: provider.freeCallsRequireInstanceOwnership === true,
534
+ isCallableVisibleFromCaller: provider.isCallableVisibleFromCaller,
535
+ resolveAdlCandidates: provider.resolveAdlCandidates,
536
+ resolveQualifiedFreeCall: provider.resolveQualifiedFreeCall,
537
+ conversionRankFn: provider.conversionRankFn,
538
+ conversionOnlyArgTypePrefixes: provider.conversionOnlyArgTypePrefixes,
539
+ constraintCompatibility: provider.constraintCompatibility,
540
+ recordResolutionOutcome,
541
+ calleeIdSink: calleeIdAccumulator,
542
+ skipSites: deferredIndirectSites,
543
+ });
544
+ const referenceSkipSites = new Set(handledSites);
545
+ for (const key of deferredIndirectSites)
546
+ referenceSkipSites.add(key);
547
+ const { emitted, skipped } = callableFlowOnly
548
+ ? { emitted: 0, skipped: 0 }
549
+ : (0, references_to_edges_js_1.emitReferencesViaLookup)(graph, indexes, referenceIndex, postHeritageNodeLookup, referenceSkipSites, calleeIdAccumulator);
550
+ // value-ref registrations (#2437): USES edges at the registration sites
551
+ // plus field-based dispatch — synthesized CALLS from member-call sites to
552
+ // functions registered under the same property key. This runs after the
553
+ // ordinary precise passes but before callable-value-flow: property-dispatched
554
+ // wrapper calls must populate the callee accumulator before actual→formal
555
+ // propagation. `graph.addRelationship` remains first-write-wins, so precise
556
+ // edges already emitted for a site retain ownership.
557
+ const propertyDispatch = callableFlowOnly
558
+ ? { usesEmitted: 0, callsEmitted: 0, skippedKeys: 0, skippedKeyNames: [] }
559
+ : (0, property_dispatch_js_1.emitPropertyDispatchCalls)(graph, indexes, emitParsedFiles, postHeritageNodeLookup, calleeIdAccumulator);
560
+ if (propertyDispatch.skippedKeys > 0) {
561
+ // Never drop dispatch coverage silently: a hook table larger than the
562
+ // fan-out cap means member calls through those keys get no synthesized
563
+ // CALLS — the #2437 false-safe gap reappears for exactly those keys.
564
+ logger_js_1.logger.warn({
565
+ lang: provider.language,
566
+ skippedKeys: propertyDispatch.skippedKeys,
567
+ skippedKeyNames: propertyDispatch.skippedKeyNames,
568
+ fanoutCap: property_dispatch_js_1.MAX_PROPERTY_DISPATCH_FANOUT,
569
+ }, 'property-dispatch: keys over the fan-out cap were dropped (no CALLS synthesized for them)');
570
+ }
571
+ const callableValueFlow = calleeIdAccumulator === undefined
572
+ ? {
573
+ emitted: 0,
574
+ resolvedInvokes: 0,
575
+ ambiguousInvokes: 0,
576
+ unmatchedInvokes: 0,
577
+ iterations: 0,
578
+ }
579
+ : (0, callable_value_flow_js_1.emitCallableValueFlow)({
580
+ graph,
581
+ scopes: indexes,
582
+ parsedFiles: emitParsedFiles,
583
+ nodeLookup: postHeritageNodeLookup,
584
+ calleeIds: calleeIdAccumulator,
585
+ language: provider.language,
586
+ collapseByCallerTarget: provider.collapseMemberCallsByCallerTarget === true,
587
+ isCallableValueTarget: provider.isCallableValueTarget,
588
+ hasFileLocalCallableLinkage: provider.hasFileLocalCallableLinkage,
589
+ onWarn: (warning) => logger_js_1.logger.warn(warning, 'callable-value-flow: candidate set exceeded the cap; no partial CALLS emitted'),
590
+ });
591
+ const importsEmitted = callableFlowOnly
592
+ ? 0
593
+ : (0, imports_to_edges_js_1.emitImportEdges)(graph, indexes.imports, indexes.scopeTree, provider.importEdgeReason);
594
+ // Language-specific supplementary edges (e.g. Vue template-derived
595
+ // BINDS_EVENT_HANDLER / EMITS_EVENT / CALLS / ACCESSES edges).
596
+ // Runs last so the full graph — including import edges — is visible.
597
+ if (!callableFlowOnly && provider.emitPostResolutionEdges !== undefined) {
598
+ provider.emitPostResolutionEdges(graph, emitParsedFiles, postHeritageNodeLookup, indexes, {
599
+ fileContents: getFileContents(),
600
+ resolutionConfig,
601
+ });
602
+ }
603
+ if (PROF) {
604
+ const tEnd = process.hrtime.bigint();
605
+ const ns = (a, b) => Number(b - a) / 1_000_000;
606
+ logger_js_1.logger.warn(`[scope-resolution prof] extract=${ns(tStart, tExtract).toFixed(0)}ms` +
607
+ ` finalize=${ns(tExtract, tFinalize).toFixed(0)}ms` +
608
+ ` propagate=${ns(tFinalize, tPropagate).toFixed(0)}ms` +
609
+ ` rangeBind=${ns(tRangeBindStart, tPropagate).toFixed(1)}ms` +
610
+ ` resolve=${ns(tPropagate, tResolve).toFixed(0)}ms` +
611
+ ` emit=${ns(tResolve, tEnd).toFixed(0)}ms` +
612
+ ` total=${ns(tStart, tEnd).toFixed(0)}ms` +
613
+ ` (${parsedFiles.length} files)`);
614
+ }
615
+ (0, heap_probe_js_1.logHeapProbe)('sr-end', `lang=${provider.language} parsedFiles=${parsedFiles.length}`);
616
+ return {
617
+ filesProcessed: parsedFiles.length,
618
+ filesSkipped,
619
+ importsEmitted,
620
+ resolve: resolveStats,
621
+ referenceEdgesEmitted: emitted +
622
+ receiverExtras +
623
+ unresolvedReceiverExtras +
624
+ freeCallExtras +
625
+ callableValueFlow.emitted +
626
+ propertyDispatch.usesEmitted +
627
+ propertyDispatch.callsEmitted,
628
+ referenceSkipped: skipped,
629
+ propertyDispatchSkippedKeys: propertyDispatch.skippedKeys,
630
+ resolutionOutcomes,
631
+ };
632
+ }