cgraphx 2.0.2 → 2.0.6

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 (754) hide show
  1. package/dist/.claude-template/FLOW-MAP.md +13 -3
  2. package/dist/.claude-template/agents/task-history.md +186 -0
  3. package/dist/.claude-template/commands/end.md +1 -0
  4. package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +5 -3
  5. package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +8 -8
  6. package/dist/.claude-template/skills/cgraphx-guide/how-to-use.md +8 -8
  7. package/dist/.claude-template/skills/clarify-requirements/SKILL.md +13 -9
  8. package/dist/.claude-template/skills/db-query/SKILL.md +19 -2
  9. package/dist/.claude-template/skills/iboc-check/SKILL.md +51 -23
  10. package/dist/.claude-template/skills/iboc-check/filler-prompt.md +3 -4
  11. package/dist/.claude-template/skills/run-api-test/SKILL.md +15 -15
  12. package/dist/.claude-template/skills/run-api-test/assets/{template-test-report.md → template-/346/216/245/345/217/243/346/265/213/350/257/225/346/212/245/345/221/212.md} +4 -4
  13. package/dist/.claude-template/skills/run-api-test/references/bru-run.md +1 -1
  14. package/dist/.claude-template/skills/run-api-test/references/db-verification.md +2 -2
  15. package/dist/.claude-template/skills/run-api-test/references/report-format.md +6 -6
  16. package/dist/.claude-template/skills/run-api-test/references/service-readiness.md +1 -1
  17. package/dist/.claude-template/skills/run-api-test/references/test-scope.md +6 -6
  18. package/dist/.claude-template/skills/run-ui-test/SKILL.md +186 -0
  19. package/dist/.claude-template/skills/run-ui-test/references/report-format.md +77 -0
  20. package/dist/.claude-template/skills/subagent-implement/SKILL.md +3 -2
  21. package/dist/.claude-template/skills/write-api/SKILL.md +18 -18
  22. package/dist/.claude-template/skills/write-api/assets/{template-api-spec.md → template-/346/216/245/345/217/243/346/265/213/350/257/225-spec.md} +1 -1
  23. package/dist/.claude-template/skills/write-api/references/{api-spec-format.md → /346/216/245/345/217/243/346/265/213/350/257/225-spec-format.md} +3 -3
  24. package/dist/.claude-template/skills/write-plan/SKILL.md +4 -2
  25. package/dist/.claude-template/skills/write-ui-test/SKILL.md +125 -0
  26. package/dist/.claude-template/skills/write-ui-test/references//347/224/250/344/276/213/350/247/204/346/240/274-format.md +94 -0
  27. package/dist/core/code/engine/cli/analyze-config.js +320 -0
  28. package/dist/core/code/engine/cli/analyze.js +1086 -0
  29. package/dist/core/code/engine/cli/cli-message.js +83 -0
  30. package/dist/core/code/engine/cli/detect-changes-format.js +58 -0
  31. package/dist/core/code/engine/cli/embedding-dims.js +43 -0
  32. package/dist/core/code/engine/cli/format-elapsed.js +12 -0
  33. package/dist/core/code/engine/cli/help-i18n.js +144 -0
  34. package/dist/core/code/engine/cli/i18n/en.js +110 -0
  35. package/dist/core/code/engine/cli/i18n/index.js +47 -0
  36. package/dist/core/code/engine/cli/i18n/resources.js +9 -0
  37. package/dist/core/code/engine/cli/i18n/zh-CN.js +110 -0
  38. package/dist/core/code/engine/cli/lazy-action.js +67 -0
  39. package/dist/core/code/engine/cli/optional-grammars.js +136 -0
  40. package/dist/core/code/engine/cli/resolve-invocation.js +76 -0
  41. package/dist/core/code/engine/cli/status.js +156 -0
  42. package/dist/core/code/engine/cli/tool.js +384 -0
  43. package/dist/core/code/engine/config/ignore-service.js +511 -0
  44. package/dist/core/code/engine/config/supported-languages.js +17 -0
  45. package/dist/core/code/engine/core/analysis-features.js +64 -0
  46. package/dist/core/code/engine/core/analyzer-identity.js +2171 -0
  47. package/dist/core/code/engine/core/git-staleness.js +180 -0
  48. package/dist/core/code/engine/core/graph/graph.js +180 -0
  49. package/dist/core/code/engine/core/graph/import-cycles.js +106 -0
  50. package/dist/core/code/engine/core/graph/types.js +2 -0
  51. package/dist/core/code/engine/core/index-freshness.js +12 -0
  52. package/dist/core/code/engine/core/ingestion/binding-accumulator.js +341 -0
  53. package/dist/core/code/engine/core/ingestion/call-extractors/configs/c-cpp.js +168 -0
  54. package/dist/core/code/engine/core/ingestion/call-extractors/configs/csharp.js +9 -0
  55. package/dist/core/code/engine/core/ingestion/call-extractors/configs/dart.js +8 -0
  56. package/dist/core/code/engine/core/ingestion/call-extractors/configs/go.js +8 -0
  57. package/dist/core/code/engine/core/ingestion/call-extractors/configs/jvm.js +54 -0
  58. package/dist/core/code/engine/core/ingestion/call-extractors/configs/php.js +8 -0
  59. package/dist/core/code/engine/core/ingestion/call-extractors/configs/python.js +8 -0
  60. package/dist/core/code/engine/core/ingestion/call-extractors/configs/ruby.js +8 -0
  61. package/dist/core/code/engine/core/ingestion/call-extractors/configs/rust.js +8 -0
  62. package/dist/core/code/engine/core/ingestion/call-extractors/configs/swift.js +8 -0
  63. package/dist/core/code/engine/core/ingestion/call-extractors/configs/typescript-javascript.js +11 -0
  64. package/dist/core/code/engine/core/ingestion/call-extractors/generic.js +62 -0
  65. package/dist/core/code/engine/core/ingestion/call-processor.js +503 -0
  66. package/dist/core/code/engine/core/ingestion/call-routing.js +98 -0
  67. package/dist/core/code/engine/core/ingestion/call-types.js +3 -0
  68. package/dist/core/code/engine/core/ingestion/cfg/callee-cell-format.js +45 -0
  69. package/dist/core/code/engine/core/ingestion/cfg/cfg-builder.js +202 -0
  70. package/dist/core/code/engine/core/ingestion/cfg/collect.js +81 -0
  71. package/dist/core/code/engine/core/ingestion/cfg/control-dependence.js +185 -0
  72. package/dist/core/code/engine/core/ingestion/cfg/control-flow-context.js +130 -0
  73. package/dist/core/code/engine/core/ingestion/cfg/emit.js +646 -0
  74. package/dist/core/code/engine/core/ingestion/cfg/post-dominators.js +182 -0
  75. package/dist/core/code/engine/core/ingestion/cfg/reaching-def-reason-codec.js +139 -0
  76. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs-graph.js +322 -0
  77. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs.js +792 -0
  78. package/dist/core/code/engine/core/ingestion/cfg/synthetic-escape.js +305 -0
  79. package/dist/core/code/engine/core/ingestion/cfg/traversal-result.js +6 -0
  80. package/dist/core/code/engine/core/ingestion/cfg/types.js +14 -0
  81. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp-harvest.js +545 -0
  82. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp.js +590 -0
  83. package/dist/core/code/engine/core/ingestion/cfg/visitors/call-site-harvest.js +356 -0
  84. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp-harvest.js +593 -0
  85. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp.js +871 -0
  86. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart-harvest.js +874 -0
  87. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart.js +840 -0
  88. package/dist/core/code/engine/core/ingestion/cfg/visitors/go-harvest.js +625 -0
  89. package/dist/core/code/engine/core/ingestion/cfg/visitors/go.js +642 -0
  90. package/dist/core/code/engine/core/ingestion/cfg/visitors/java-harvest.js +517 -0
  91. package/dist/core/code/engine/core/ingestion/cfg/visitors/java.js +816 -0
  92. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin-harvest.js +723 -0
  93. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin.js +813 -0
  94. package/dist/core/code/engine/core/ingestion/cfg/visitors/php-harvest.js +630 -0
  95. package/dist/core/code/engine/core/ingestion/cfg/visitors/php.js +725 -0
  96. package/dist/core/code/engine/core/ingestion/cfg/visitors/python-harvest.js +776 -0
  97. package/dist/core/code/engine/core/ingestion/cfg/visitors/python.js +562 -0
  98. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby-harvest.js +591 -0
  99. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby.js +760 -0
  100. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust-harvest.js +877 -0
  101. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust.js +562 -0
  102. package/dist/core/code/engine/core/ingestion/cfg/visitors/scope-tree-harvest.js +120 -0
  103. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift-harvest.js +683 -0
  104. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift.js +791 -0
  105. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript-harvest.js +1060 -0
  106. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript.js +587 -0
  107. package/dist/core/code/engine/core/ingestion/class-extractors/configs/c-cpp.js +77 -0
  108. package/dist/core/code/engine/core/ingestion/class-extractors/configs/csharp.js +24 -0
  109. package/dist/core/code/engine/core/ingestion/class-extractors/configs/dart.js +10 -0
  110. package/dist/core/code/engine/core/ingestion/class-extractors/configs/go.js +28 -0
  111. package/dist/core/code/engine/core/ingestion/class-extractors/configs/jvm.js +67 -0
  112. package/dist/core/code/engine/core/ingestion/class-extractors/configs/php.js +10 -0
  113. package/dist/core/code/engine/core/ingestion/class-extractors/configs/python.js +10 -0
  114. package/dist/core/code/engine/core/ingestion/class-extractors/configs/ruby.js +13 -0
  115. package/dist/core/code/engine/core/ingestion/class-extractors/configs/rust.js +10 -0
  116. package/dist/core/code/engine/core/ingestion/class-extractors/configs/swift.js +21 -0
  117. package/dist/core/code/engine/core/ingestion/class-extractors/configs/typescript-javascript.js +31 -0
  118. package/dist/core/code/engine/core/ingestion/class-extractors/generic.js +144 -0
  119. package/dist/core/code/engine/core/ingestion/class-types.js +2 -0
  120. package/dist/core/code/engine/core/ingestion/cluster-enricher.js +174 -0
  121. package/dist/core/code/engine/core/ingestion/community-processor.js +604 -0
  122. package/dist/core/code/engine/core/ingestion/constants.js +26 -0
  123. package/dist/core/code/engine/core/ingestion/cpp-ue-preprocessor.js +263 -0
  124. package/dist/core/code/engine/core/ingestion/csharp-namespace-gate.js +133 -0
  125. package/dist/core/code/engine/core/ingestion/di-extractors/index.js +38 -0
  126. package/dist/core/code/engine/core/ingestion/di-extractors/spring.js +310 -0
  127. package/dist/core/code/engine/core/ingestion/emit-references.js +244 -0
  128. package/dist/core/code/engine/core/ingestion/entry-point-scoring.js +201 -0
  129. package/dist/core/code/engine/core/ingestion/export-detection.js +244 -0
  130. package/dist/core/code/engine/core/ingestion/field-extractor.js +29 -0
  131. package/dist/core/code/engine/core/ingestion/field-extractors/configs/c-cpp.js +107 -0
  132. package/dist/core/code/engine/core/ingestion/field-extractors/configs/csharp.js +124 -0
  133. package/dist/core/code/engine/core/ingestion/field-extractors/configs/dart.js +99 -0
  134. package/dist/core/code/engine/core/ingestion/field-extractors/configs/go.js +102 -0
  135. package/dist/core/code/engine/core/ingestion/field-extractors/configs/helpers.js +198 -0
  136. package/dist/core/code/engine/core/ingestion/field-extractors/configs/jvm.js +172 -0
  137. package/dist/core/code/engine/core/ingestion/field-extractors/configs/php.js +67 -0
  138. package/dist/core/code/engine/core/ingestion/field-extractors/configs/python.js +94 -0
  139. package/dist/core/code/engine/core/ingestion/field-extractors/configs/ruby.js +79 -0
  140. package/dist/core/code/engine/core/ingestion/field-extractors/configs/rust.js +55 -0
  141. package/dist/core/code/engine/core/ingestion/field-extractors/configs/swift.js +93 -0
  142. package/dist/core/code/engine/core/ingestion/field-extractors/configs/typescript-javascript.js +59 -0
  143. package/dist/core/code/engine/core/ingestion/field-extractors/generic.js +147 -0
  144. package/dist/core/code/engine/core/ingestion/field-extractors/typescript.js +266 -0
  145. package/dist/core/code/engine/core/ingestion/field-types.js +3 -0
  146. package/dist/core/code/engine/core/ingestion/filesystem-walker.js +136 -0
  147. package/dist/core/code/engine/core/ingestion/finalize-orchestrator.js +159 -0
  148. package/dist/core/code/engine/core/ingestion/framework-detection.js +432 -0
  149. package/dist/core/code/engine/core/ingestion/frameworks/spring/analysis-features.js +38 -0
  150. package/dist/core/code/engine/core/ingestion/frameworks/spring/annotation-arguments.js +234 -0
  151. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop-candidates.js +88 -0
  152. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop.js +487 -0
  153. package/dist/core/code/engine/core/ingestion/frameworks/spring/auto-configuration.js +21 -0
  154. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-candidates.js +189 -0
  155. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-catalog.js +32 -0
  156. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-factories.js +73 -0
  157. package/dist/core/code/engine/core/ingestion/frameworks/spring/conditionals.js +323 -0
  158. package/dist/core/code/engine/core/ingestion/frameworks/spring/config-bindings.js +119 -0
  159. package/dist/core/code/engine/core/ingestion/frameworks/spring/di-metadata.js +385 -0
  160. package/dist/core/code/engine/core/ingestion/frameworks/spring/resource-injection.js +96 -0
  161. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/c-cpp.js +17 -0
  162. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/csharp.js +46 -0
  163. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/dart.js +59 -0
  164. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/go.js +30 -0
  165. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/jvm.js +73 -0
  166. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/php.js +19 -0
  167. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/python.js +45 -0
  168. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/ruby.js +20 -0
  169. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/rust.js +58 -0
  170. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/swift.js +94 -0
  171. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/typescript-javascript.js +26 -0
  172. package/dist/core/code/engine/core/ingestion/import-resolvers/csharp.js +128 -0
  173. package/dist/core/code/engine/core/ingestion/import-resolvers/go.js +50 -0
  174. package/dist/core/code/engine/core/ingestion/import-resolvers/jvm.js +112 -0
  175. package/dist/core/code/engine/core/ingestion/import-resolvers/php.js +80 -0
  176. package/dist/core/code/engine/core/ingestion/import-resolvers/python.js +75 -0
  177. package/dist/core/code/engine/core/ingestion/import-resolvers/resolver-factory.js +36 -0
  178. package/dist/core/code/engine/core/ingestion/import-resolvers/ruby.js +20 -0
  179. package/dist/core/code/engine/core/ingestion/import-resolvers/rust.js +79 -0
  180. package/dist/core/code/engine/core/ingestion/import-resolvers/standard.js +180 -0
  181. package/dist/core/code/engine/core/ingestion/import-resolvers/types.js +7 -0
  182. package/dist/core/code/engine/core/ingestion/import-resolvers/utils.js +153 -0
  183. package/dist/core/code/engine/core/ingestion/import-target-adapter.js +99 -0
  184. package/dist/core/code/engine/core/ingestion/language-config.js +391 -0
  185. package/dist/core/code/engine/core/ingestion/language-provider.js +25 -0
  186. package/dist/core/code/engine/core/ingestion/languages/c/arity-metadata.js +98 -0
  187. package/dist/core/code/engine/core/ingestion/languages/c/arity.js +21 -0
  188. package/dist/core/code/engine/core/ingestion/languages/c/capture-side-channel.js +69 -0
  189. package/dist/core/code/engine/core/ingestion/languages/c/captures.js +189 -0
  190. package/dist/core/code/engine/core/ingestion/languages/c/header-scan.js +58 -0
  191. package/dist/core/code/engine/core/ingestion/languages/c/import-decomposer.js +68 -0
  192. package/dist/core/code/engine/core/ingestion/languages/c/import-target.js +103 -0
  193. package/dist/core/code/engine/core/ingestion/languages/c/index.js +33 -0
  194. package/dist/core/code/engine/core/ingestion/languages/c/interpret.js +53 -0
  195. package/dist/core/code/engine/core/ingestion/languages/c/merge-bindings.js +26 -0
  196. package/dist/core/code/engine/core/ingestion/languages/c/query.js +210 -0
  197. package/dist/core/code/engine/core/ingestion/languages/c/scope-resolver.js +112 -0
  198. package/dist/core/code/engine/core/ingestion/languages/c/simple-hooks.js +24 -0
  199. package/dist/core/code/engine/core/ingestion/languages/c/static-linkage.js +109 -0
  200. package/dist/core/code/engine/core/ingestion/languages/c-cpp.js +506 -0
  201. package/dist/core/code/engine/core/ingestion/languages/cpp/adl.js +804 -0
  202. package/dist/core/code/engine/core/ingestion/languages/cpp/arity-metadata.js +258 -0
  203. package/dist/core/code/engine/core/ingestion/languages/cpp/arity.js +37 -0
  204. package/dist/core/code/engine/core/ingestion/languages/cpp/capture-side-channel.js +89 -0
  205. package/dist/core/code/engine/core/ingestion/languages/cpp/captures.js +1975 -0
  206. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-extractor.js +311 -0
  207. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-filter.js +210 -0
  208. package/dist/core/code/engine/core/ingestion/languages/cpp/conversion-rank.js +163 -0
  209. package/dist/core/code/engine/core/ingestion/languages/cpp/file-local-linkage.js +327 -0
  210. package/dist/core/code/engine/core/ingestion/languages/cpp/header-scan.js +53 -0
  211. package/dist/core/code/engine/core/ingestion/languages/cpp/import-decomposer.js +134 -0
  212. package/dist/core/code/engine/core/ingestion/languages/cpp/import-target.js +16 -0
  213. package/dist/core/code/engine/core/ingestion/languages/cpp/index.js +33 -0
  214. package/dist/core/code/engine/core/ingestion/languages/cpp/inline-namespaces.js +379 -0
  215. package/dist/core/code/engine/core/ingestion/languages/cpp/interpret.js +239 -0
  216. package/dist/core/code/engine/core/ingestion/languages/cpp/member-lookup.js +470 -0
  217. package/dist/core/code/engine/core/ingestion/languages/cpp/merge-bindings.js +32 -0
  218. package/dist/core/code/engine/core/ingestion/languages/cpp/query.js +763 -0
  219. package/dist/core/code/engine/core/ingestion/languages/cpp/range-bindings.js +230 -0
  220. package/dist/core/code/engine/core/ingestion/languages/cpp/scope-resolver.js +354 -0
  221. package/dist/core/code/engine/core/ingestion/languages/cpp/simple-hooks.js +67 -0
  222. package/dist/core/code/engine/core/ingestion/languages/cpp/two-phase-lookup.js +348 -0
  223. package/dist/core/code/engine/core/ingestion/languages/cpp/type-classifier.js +56 -0
  224. package/dist/core/code/engine/core/ingestion/languages/cpp/user-defined-conversions.js +128 -0
  225. package/dist/core/code/engine/core/ingestion/languages/csharp/accessor-unwrap.js +67 -0
  226. package/dist/core/code/engine/core/ingestion/languages/csharp/arity-metadata.js +49 -0
  227. package/dist/core/code/engine/core/ingestion/languages/csharp/arity.js +40 -0
  228. package/dist/core/code/engine/core/ingestion/languages/csharp/cache-stats.js +32 -0
  229. package/dist/core/code/engine/core/ingestion/languages/csharp/captures.js +557 -0
  230. package/dist/core/code/engine/core/ingestion/languages/csharp/import-decomposer.js +96 -0
  231. package/dist/core/code/engine/core/ingestion/languages/csharp/import-target.js +176 -0
  232. package/dist/core/code/engine/core/ingestion/languages/csharp/index.js +95 -0
  233. package/dist/core/code/engine/core/ingestion/languages/csharp/interpret.js +150 -0
  234. package/dist/core/code/engine/core/ingestion/languages/csharp/merge-bindings.js +58 -0
  235. package/dist/core/code/engine/core/ingestion/languages/csharp/namespace-siblings.js +708 -0
  236. package/dist/core/code/engine/core/ingestion/languages/csharp/qualified-type-names.js +62 -0
  237. package/dist/core/code/engine/core/ingestion/languages/csharp/query.js +578 -0
  238. package/dist/core/code/engine/core/ingestion/languages/csharp/receiver-binding.js +142 -0
  239. package/dist/core/code/engine/core/ingestion/languages/csharp/resolution-config.js +18 -0
  240. package/dist/core/code/engine/core/ingestion/languages/csharp/scope-resolver.js +84 -0
  241. package/dist/core/code/engine/core/ingestion/languages/csharp/simple-hooks.js +81 -0
  242. package/dist/core/code/engine/core/ingestion/languages/csharp.js +204 -0
  243. package/dist/core/code/engine/core/ingestion/languages/dart/arity-metadata.js +38 -0
  244. package/dist/core/code/engine/core/ingestion/languages/dart/arity.js +34 -0
  245. package/dist/core/code/engine/core/ingestion/languages/dart/built-ins.js +37 -0
  246. package/dist/core/code/engine/core/ingestion/languages/dart/cache-stats.js +30 -0
  247. package/dist/core/code/engine/core/ingestion/languages/dart/captures.js +1096 -0
  248. package/dist/core/code/engine/core/ingestion/languages/dart/expand-wildcards.js +34 -0
  249. package/dist/core/code/engine/core/ingestion/languages/dart/extension-type-preprocess.js +33 -0
  250. package/dist/core/code/engine/core/ingestion/languages/dart/import-target.js +68 -0
  251. package/dist/core/code/engine/core/ingestion/languages/dart/index.js +45 -0
  252. package/dist/core/code/engine/core/ingestion/languages/dart/interpret.js +101 -0
  253. package/dist/core/code/engine/core/ingestion/languages/dart/merge-bindings.js +42 -0
  254. package/dist/core/code/engine/core/ingestion/languages/dart/query.js +246 -0
  255. package/dist/core/code/engine/core/ingestion/languages/dart/receiver-binding.js +90 -0
  256. package/dist/core/code/engine/core/ingestion/languages/dart/scope-resolver.js +197 -0
  257. package/dist/core/code/engine/core/ingestion/languages/dart/signature-bindings.js +54 -0
  258. package/dist/core/code/engine/core/ingestion/languages/dart/simple-hooks.js +61 -0
  259. package/dist/core/code/engine/core/ingestion/languages/dart.js +138 -0
  260. package/dist/core/code/engine/core/ingestion/languages/go/arity-metadata.js +71 -0
  261. package/dist/core/code/engine/core/ingestion/languages/go/arity.js +17 -0
  262. package/dist/core/code/engine/core/ingestion/languages/go/cache-stats.js +21 -0
  263. package/dist/core/code/engine/core/ingestion/languages/go/captures.js +492 -0
  264. package/dist/core/code/engine/core/ingestion/languages/go/expand-wildcards.js +97 -0
  265. package/dist/core/code/engine/core/ingestion/languages/go/generic-type-parameters.js +146 -0
  266. package/dist/core/code/engine/core/ingestion/languages/go/import-decomposer.js +47 -0
  267. package/dist/core/code/engine/core/ingestion/languages/go/import-target.js +70 -0
  268. package/dist/core/code/engine/core/ingestion/languages/go/index.js +39 -0
  269. package/dist/core/code/engine/core/ingestion/languages/go/interface-impls.js +955 -0
  270. package/dist/core/code/engine/core/ingestion/languages/go/interpret.js +177 -0
  271. package/dist/core/code/engine/core/ingestion/languages/go/merge-bindings.js +21 -0
  272. package/dist/core/code/engine/core/ingestion/languages/go/method-owners.js +131 -0
  273. package/dist/core/code/engine/core/ingestion/languages/go/namespace-mirror.js +56 -0
  274. package/dist/core/code/engine/core/ingestion/languages/go/package-clause.js +79 -0
  275. package/dist/core/code/engine/core/ingestion/languages/go/package-siblings.js +83 -0
  276. package/dist/core/code/engine/core/ingestion/languages/go/query.js +298 -0
  277. package/dist/core/code/engine/core/ingestion/languages/go/range-binding.js +127 -0
  278. package/dist/core/code/engine/core/ingestion/languages/go/receiver-binding.js +24 -0
  279. package/dist/core/code/engine/core/ingestion/languages/go/scope-resolver.js +75 -0
  280. package/dist/core/code/engine/core/ingestion/languages/go/simple-hooks.js +31 -0
  281. package/dist/core/code/engine/core/ingestion/languages/go/type-binding.js +279 -0
  282. package/dist/core/code/engine/core/ingestion/languages/go.js +160 -0
  283. package/dist/core/code/engine/core/ingestion/languages/index.js +66 -0
  284. package/dist/core/code/engine/core/ingestion/languages/java/analysis-features.js +16 -0
  285. package/dist/core/code/engine/core/ingestion/languages/java/arity-metadata.js +43 -0
  286. package/dist/core/code/engine/core/ingestion/languages/java/arity.js +27 -0
  287. package/dist/core/code/engine/core/ingestion/languages/java/cache-stats.js +32 -0
  288. package/dist/core/code/engine/core/ingestion/languages/java/capture-side-channel.js +123 -0
  289. package/dist/core/code/engine/core/ingestion/languages/java/captures.js +791 -0
  290. package/dist/core/code/engine/core/ingestion/languages/java/import-decomposer.js +88 -0
  291. package/dist/core/code/engine/core/ingestion/languages/java/import-target.js +103 -0
  292. package/dist/core/code/engine/core/ingestion/languages/java/index.js +43 -0
  293. package/dist/core/code/engine/core/ingestion/languages/java/interpret.js +146 -0
  294. package/dist/core/code/engine/core/ingestion/languages/java/merge-bindings.js +43 -0
  295. package/dist/core/code/engine/core/ingestion/languages/java/package-facts.js +16 -0
  296. package/dist/core/code/engine/core/ingestion/languages/java/package-siblings.js +11 -0
  297. package/dist/core/code/engine/core/ingestion/languages/java/query.js +319 -0
  298. package/dist/core/code/engine/core/ingestion/languages/java/receiver-binding.js +98 -0
  299. package/dist/core/code/engine/core/ingestion/languages/java/scope-resolver.js +213 -0
  300. package/dist/core/code/engine/core/ingestion/languages/java/simple-hooks.js +39 -0
  301. package/dist/core/code/engine/core/ingestion/languages/java/spring-aop.js +53 -0
  302. package/dist/core/code/engine/core/ingestion/languages/java/spring-bean-metadata.js +11 -0
  303. package/dist/core/code/engine/core/ingestion/languages/java/spring-conditionals.js +52 -0
  304. package/dist/core/code/engine/core/ingestion/languages/java/spring-config-bindings.js +222 -0
  305. package/dist/core/code/engine/core/ingestion/languages/java/spring-di.js +165 -0
  306. package/dist/core/code/engine/core/ingestion/languages/java.js +192 -0
  307. package/dist/core/code/engine/core/ingestion/languages/javascript/arity.js +15 -0
  308. package/dist/core/code/engine/core/ingestion/languages/javascript/captures.js +1122 -0
  309. package/dist/core/code/engine/core/ingestion/languages/javascript/import-target.js +56 -0
  310. package/dist/core/code/engine/core/ingestion/languages/javascript/index.js +109 -0
  311. package/dist/core/code/engine/core/ingestion/languages/javascript/interpret.js +45 -0
  312. package/dist/core/code/engine/core/ingestion/languages/javascript/merge-bindings.js +21 -0
  313. package/dist/core/code/engine/core/ingestion/languages/javascript/query.js +659 -0
  314. package/dist/core/code/engine/core/ingestion/languages/javascript/scope-resolver.js +78 -0
  315. package/dist/core/code/engine/core/ingestion/languages/javascript/simple-hooks.js +44 -0
  316. package/dist/core/code/engine/core/ingestion/languages/jvm/package-facts.js +46 -0
  317. package/dist/core/code/engine/core/ingestion/languages/jvm/package-siblings.js +200 -0
  318. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity-metadata.js +23 -0
  319. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity.js +18 -0
  320. package/dist/core/code/engine/core/ingestion/languages/kotlin/cache-stats.js +21 -0
  321. package/dist/core/code/engine/core/ingestion/languages/kotlin/capture-side-channel.js +160 -0
  322. package/dist/core/code/engine/core/ingestion/languages/kotlin/captures.js +1262 -0
  323. package/dist/core/code/engine/core/ingestion/languages/kotlin/companion-scopes.js +72 -0
  324. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-decomposer.js +40 -0
  325. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-target.js +135 -0
  326. package/dist/core/code/engine/core/ingestion/languages/kotlin/index.js +26 -0
  327. package/dist/core/code/engine/core/ingestion/languages/kotlin/interpret.js +75 -0
  328. package/dist/core/code/engine/core/ingestion/languages/kotlin/merge-bindings.js +28 -0
  329. package/dist/core/code/engine/core/ingestion/languages/kotlin/owners.js +134 -0
  330. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-facts.js +16 -0
  331. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-siblings.js +11 -0
  332. package/dist/core/code/engine/core/ingestion/languages/kotlin/query.js +243 -0
  333. package/dist/core/code/engine/core/ingestion/languages/kotlin/receiver-binding.js +103 -0
  334. package/dist/core/code/engine/core/ingestion/languages/kotlin/scope-resolver.js +207 -0
  335. package/dist/core/code/engine/core/ingestion/languages/kotlin/simple-hooks.js +42 -0
  336. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-aop.js +68 -0
  337. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-bean-metadata.js +11 -0
  338. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-conditionals.js +53 -0
  339. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-di.js +304 -0
  340. package/dist/core/code/engine/core/ingestion/languages/kotlin.js +189 -0
  341. package/dist/core/code/engine/core/ingestion/languages/php/arity-metadata.js +66 -0
  342. package/dist/core/code/engine/core/ingestion/languages/php/arity.js +43 -0
  343. package/dist/core/code/engine/core/ingestion/languages/php/cache-stats.js +32 -0
  344. package/dist/core/code/engine/core/ingestion/languages/php/captures.js +1166 -0
  345. package/dist/core/code/engine/core/ingestion/languages/php/import-decomposer.js +238 -0
  346. package/dist/core/code/engine/core/ingestion/languages/php/import-target.js +213 -0
  347. package/dist/core/code/engine/core/ingestion/languages/php/index.js +85 -0
  348. package/dist/core/code/engine/core/ingestion/languages/php/interpret.js +256 -0
  349. package/dist/core/code/engine/core/ingestion/languages/php/merge-bindings.js +50 -0
  350. package/dist/core/code/engine/core/ingestion/languages/php/namespace-siblings.js +353 -0
  351. package/dist/core/code/engine/core/ingestion/languages/php/query.js +391 -0
  352. package/dist/core/code/engine/core/ingestion/languages/php/receiver-binding.js +135 -0
  353. package/dist/core/code/engine/core/ingestion/languages/php/scope-resolver.js +361 -0
  354. package/dist/core/code/engine/core/ingestion/languages/php/simple-hooks.js +116 -0
  355. package/dist/core/code/engine/core/ingestion/languages/php.js +302 -0
  356. package/dist/core/code/engine/core/ingestion/languages/python/arity-metadata.js +49 -0
  357. package/dist/core/code/engine/core/ingestion/languages/python/arity.js +41 -0
  358. package/dist/core/code/engine/core/ingestion/languages/python/cache-stats.js +34 -0
  359. package/dist/core/code/engine/core/ingestion/languages/python/captures.js +299 -0
  360. package/dist/core/code/engine/core/ingestion/languages/python/depends-references.js +68 -0
  361. package/dist/core/code/engine/core/ingestion/languages/python/import-decomposer.js +115 -0
  362. package/dist/core/code/engine/core/ingestion/languages/python/import-target.js +440 -0
  363. package/dist/core/code/engine/core/ingestion/languages/python/index-stats.js +30 -0
  364. package/dist/core/code/engine/core/ingestion/languages/python/index.js +96 -0
  365. package/dist/core/code/engine/core/ingestion/languages/python/interpret.js +430 -0
  366. package/dist/core/code/engine/core/ingestion/languages/python/merge-bindings.js +47 -0
  367. package/dist/core/code/engine/core/ingestion/languages/python/query.js +323 -0
  368. package/dist/core/code/engine/core/ingestion/languages/python/receiver-binding.js +310 -0
  369. package/dist/core/code/engine/core/ingestion/languages/python/scope-resolver.js +80 -0
  370. package/dist/core/code/engine/core/ingestion/languages/python/simple-hooks.js +53 -0
  371. package/dist/core/code/engine/core/ingestion/languages/python.js +140 -0
  372. package/dist/core/code/engine/core/ingestion/languages/ruby/arity.js +41 -0
  373. package/dist/core/code/engine/core/ingestion/languages/ruby/cache-stats.js +21 -0
  374. package/dist/core/code/engine/core/ingestion/languages/ruby/captures.js +864 -0
  375. package/dist/core/code/engine/core/ingestion/languages/ruby/import-target.js +88 -0
  376. package/dist/core/code/engine/core/ingestion/languages/ruby/index.js +29 -0
  377. package/dist/core/code/engine/core/ingestion/languages/ruby/interpret.js +115 -0
  378. package/dist/core/code/engine/core/ingestion/languages/ruby/merge-bindings.js +21 -0
  379. package/dist/core/code/engine/core/ingestion/languages/ruby/query.js +349 -0
  380. package/dist/core/code/engine/core/ingestion/languages/ruby/receiver-binding.js +70 -0
  381. package/dist/core/code/engine/core/ingestion/languages/ruby/scope-resolver.js +263 -0
  382. package/dist/core/code/engine/core/ingestion/languages/ruby/simple-hooks.js +68 -0
  383. package/dist/core/code/engine/core/ingestion/languages/ruby.js +215 -0
  384. package/dist/core/code/engine/core/ingestion/languages/rust/arity.js +16 -0
  385. package/dist/core/code/engine/core/ingestion/languages/rust/cache-stats.js +21 -0
  386. package/dist/core/code/engine/core/ingestion/languages/rust/captures.js +304 -0
  387. package/dist/core/code/engine/core/ingestion/languages/rust/import-decomposer.js +167 -0
  388. package/dist/core/code/engine/core/ingestion/languages/rust/import-target.js +108 -0
  389. package/dist/core/code/engine/core/ingestion/languages/rust/index.js +29 -0
  390. package/dist/core/code/engine/core/ingestion/languages/rust/interpret.js +201 -0
  391. package/dist/core/code/engine/core/ingestion/languages/rust/merge-bindings.js +21 -0
  392. package/dist/core/code/engine/core/ingestion/languages/rust/method-owners.js +76 -0
  393. package/dist/core/code/engine/core/ingestion/languages/rust/module-path.js +222 -0
  394. package/dist/core/code/engine/core/ingestion/languages/rust/qualified-call.js +482 -0
  395. package/dist/core/code/engine/core/ingestion/languages/rust/query.js +280 -0
  396. package/dist/core/code/engine/core/ingestion/languages/rust/range-binding.js +687 -0
  397. package/dist/core/code/engine/core/ingestion/languages/rust/receiver-binding.js +148 -0
  398. package/dist/core/code/engine/core/ingestion/languages/rust/scope-resolver.js +151 -0
  399. package/dist/core/code/engine/core/ingestion/languages/rust/simple-hooks.js +32 -0
  400. package/dist/core/code/engine/core/ingestion/languages/rust.js +183 -0
  401. package/dist/core/code/engine/core/ingestion/languages/swift/arity-metadata.js +44 -0
  402. package/dist/core/code/engine/core/ingestion/languages/swift/arity.js +45 -0
  403. package/dist/core/code/engine/core/ingestion/languages/swift/base-type.js +30 -0
  404. package/dist/core/code/engine/core/ingestion/languages/swift/cache-stats.js +32 -0
  405. package/dist/core/code/engine/core/ingestion/languages/swift/captures.js +594 -0
  406. package/dist/core/code/engine/core/ingestion/languages/swift/conditional-directive-preprocess.js +256 -0
  407. package/dist/core/code/engine/core/ingestion/languages/swift/implicit-imports.js +60 -0
  408. package/dist/core/code/engine/core/ingestion/languages/swift/import-decomposer.js +87 -0
  409. package/dist/core/code/engine/core/ingestion/languages/swift/import-target.js +84 -0
  410. package/dist/core/code/engine/core/ingestion/languages/swift/index.js +56 -0
  411. package/dist/core/code/engine/core/ingestion/languages/swift/interpret.js +93 -0
  412. package/dist/core/code/engine/core/ingestion/languages/swift/merge-bindings.js +51 -0
  413. package/dist/core/code/engine/core/ingestion/languages/swift/query.js +226 -0
  414. package/dist/core/code/engine/core/ingestion/languages/swift/receiver-binding.js +169 -0
  415. package/dist/core/code/engine/core/ingestion/languages/swift/scope-resolver.js +192 -0
  416. package/dist/core/code/engine/core/ingestion/languages/swift/sibling-type-bindings.js +68 -0
  417. package/dist/core/code/engine/core/ingestion/languages/swift/signature-bindings.js +69 -0
  418. package/dist/core/code/engine/core/ingestion/languages/swift/simple-hooks.js +65 -0
  419. package/dist/core/code/engine/core/ingestion/languages/swift/target-grouping.js +97 -0
  420. package/dist/core/code/engine/core/ingestion/languages/swift/target-siblings.js +74 -0
  421. package/dist/core/code/engine/core/ingestion/languages/swift.js +246 -0
  422. package/dist/core/code/engine/core/ingestion/languages/typescript/arity-metadata.js +106 -0
  423. package/dist/core/code/engine/core/ingestion/languages/typescript/arity.js +57 -0
  424. package/dist/core/code/engine/core/ingestion/languages/typescript/array-callback.js +58 -0
  425. package/dist/core/code/engine/core/ingestion/languages/typescript/cache-stats.js +34 -0
  426. package/dist/core/code/engine/core/ingestion/languages/typescript/captures.js +956 -0
  427. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-export-assignment.js +535 -0
  428. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-module-exports.js +196 -0
  429. package/dist/core/code/engine/core/ingestion/languages/typescript/import-decomposer.js +374 -0
  430. package/dist/core/code/engine/core/ingestion/languages/typescript/import-target.js +65 -0
  431. package/dist/core/code/engine/core/ingestion/languages/typescript/index.js +108 -0
  432. package/dist/core/code/engine/core/ingestion/languages/typescript/interpret.js +344 -0
  433. package/dist/core/code/engine/core/ingestion/languages/typescript/merge-bindings.js +161 -0
  434. package/dist/core/code/engine/core/ingestion/languages/typescript/nuxt-auto-imports.js +325 -0
  435. package/dist/core/code/engine/core/ingestion/languages/typescript/query.js +1328 -0
  436. package/dist/core/code/engine/core/ingestion/languages/typescript/receiver-binding.js +201 -0
  437. package/dist/core/code/engine/core/ingestion/languages/typescript/scope-resolver.js +293 -0
  438. package/dist/core/code/engine/core/ingestion/languages/typescript/simple-hooks.js +139 -0
  439. package/dist/core/code/engine/core/ingestion/languages/typescript.js +455 -0
  440. package/dist/core/code/engine/core/ingestion/languages/vue/captures.js +70 -0
  441. package/dist/core/code/engine/core/ingestion/languages/vue/import-target.js +61 -0
  442. package/dist/core/code/engine/core/ingestion/languages/vue/index.js +55 -0
  443. package/dist/core/code/engine/core/ingestion/languages/vue/scope-resolver.js +295 -0
  444. package/dist/core/code/engine/core/ingestion/languages/vue.js +96 -0
  445. package/dist/core/code/engine/core/ingestion/local-symbol-pruner.js +68 -0
  446. package/dist/core/code/engine/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
  447. package/dist/core/code/engine/core/ingestion/method-extractors/configs/csharp.js +290 -0
  448. package/dist/core/code/engine/core/ingestion/method-extractors/configs/dart.js +392 -0
  449. package/dist/core/code/engine/core/ingestion/method-extractors/configs/go.js +179 -0
  450. package/dist/core/code/engine/core/ingestion/method-extractors/configs/jvm.js +350 -0
  451. package/dist/core/code/engine/core/ingestion/method-extractors/configs/php.js +306 -0
  452. package/dist/core/code/engine/core/ingestion/method-extractors/configs/python.js +312 -0
  453. package/dist/core/code/engine/core/ingestion/method-extractors/configs/ruby.js +289 -0
  454. package/dist/core/code/engine/core/ingestion/method-extractors/configs/rust.js +198 -0
  455. package/dist/core/code/engine/core/ingestion/method-extractors/configs/swift.js +286 -0
  456. package/dist/core/code/engine/core/ingestion/method-extractors/configs/typescript-javascript.js +341 -0
  457. package/dist/core/code/engine/core/ingestion/method-extractors/generic.js +209 -0
  458. package/dist/core/code/engine/core/ingestion/method-types.js +3 -0
  459. package/dist/core/code/engine/core/ingestion/model/field-registry.js +41 -0
  460. package/dist/core/code/engine/core/ingestion/model/index.js +52 -0
  461. package/dist/core/code/engine/core/ingestion/model/method-registry.js +138 -0
  462. package/dist/core/code/engine/core/ingestion/model/owned-members-lookup.js +46 -0
  463. package/dist/core/code/engine/core/ingestion/model/registration-table.js +234 -0
  464. package/dist/core/code/engine/core/ingestion/model/resolve.js +183 -0
  465. package/dist/core/code/engine/core/ingestion/model/scope-resolution-indexes.js +43 -0
  466. package/dist/core/code/engine/core/ingestion/model/semantic-model.js +179 -0
  467. package/dist/core/code/engine/core/ingestion/model/symbol-table.js +216 -0
  468. package/dist/core/code/engine/core/ingestion/model/type-registry.js +84 -0
  469. package/dist/core/code/engine/core/ingestion/mro-processor.js +709 -0
  470. package/dist/core/code/engine/core/ingestion/parsing-processor.js +312 -0
  471. package/dist/core/code/engine/core/ingestion/pipeline-phases/communities.js +69 -0
  472. package/dist/core/code/engine/core/ingestion/pipeline-phases/cross-file.js +71 -0
  473. package/dist/core/code/engine/core/ingestion/pipeline-phases/di.js +338 -0
  474. package/dist/core/code/engine/core/ingestion/pipeline-phases/http-api-calls.js +312 -0
  475. package/dist/core/code/engine/core/ingestion/pipeline-phases/index.js +54 -0
  476. package/dist/core/code/engine/core/ingestion/pipeline-phases/mro.js +40 -0
  477. package/dist/core/code/engine/core/ingestion/pipeline-phases/orm.js +78 -0
  478. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse-impl.js +1286 -0
  479. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse.js +41 -0
  480. package/dist/core/code/engine/core/ingestion/pipeline-phases/processes.js +193 -0
  481. package/dist/core/code/engine/core/ingestion/pipeline-phases/prune-local-symbols.js +29 -0
  482. package/dist/core/code/engine/core/ingestion/pipeline-phases/registry.js +52 -0
  483. package/dist/core/code/engine/core/ingestion/pipeline-phases/routes.js +409 -0
  484. package/dist/core/code/engine/core/ingestion/pipeline-phases/rpc-edges.js +301 -0
  485. package/dist/core/code/engine/core/ingestion/pipeline-phases/runner.js +207 -0
  486. package/dist/core/code/engine/core/ingestion/pipeline-phases/scan.js +49 -0
  487. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-aop.js +442 -0
  488. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-auto-configuration.js +264 -0
  489. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-config.js +440 -0
  490. package/dist/core/code/engine/core/ingestion/pipeline-phases/structure.js +38 -0
  491. package/dist/core/code/engine/core/ingestion/pipeline-phases/tools.js +89 -0
  492. package/dist/core/code/engine/core/ingestion/pipeline-phases/types.js +40 -0
  493. package/dist/core/code/engine/core/ingestion/pipeline.js +152 -0
  494. package/dist/core/code/engine/core/ingestion/process-processor.js +325 -0
  495. package/dist/core/code/engine/core/ingestion/resolve-references.js +205 -0
  496. package/dist/core/code/engine/core/ingestion/route-extractors/constant-resolver.js +135 -0
  497. package/dist/core/code/engine/core/ingestion/route-extractors/django-root-discovery.js +221 -0
  498. package/dist/core/code/engine/core/ingestion/route-extractors/django.js +428 -0
  499. package/dist/core/code/engine/core/ingestion/route-extractors/expo.js +39 -0
  500. package/dist/core/code/engine/core/ingestion/route-extractors/fastapi-router-bindings.js +264 -0
  501. package/dist/core/code/engine/core/ingestion/route-extractors/laravel.js +501 -0
  502. package/dist/core/code/engine/core/ingestion/route-extractors/middleware.js +175 -0
  503. package/dist/core/code/engine/core/ingestion/route-extractors/nextjs.js +81 -0
  504. package/dist/core/code/engine/core/ingestion/route-extractors/php.js +25 -0
  505. package/dist/core/code/engine/core/ingestion/route-extractors/python-const-resolver.js +307 -0
  506. package/dist/core/code/engine/core/ingestion/route-extractors/response-shapes.js +299 -0
  507. package/dist/core/code/engine/core/ingestion/route-extractors/route-path.js +71 -0
  508. package/dist/core/code/engine/core/ingestion/route-extractors/spring-shared.js +310 -0
  509. package/dist/core/code/engine/core/ingestion/route-extractors/spring.js +441 -0
  510. package/dist/core/code/engine/core/ingestion/scope-extractor-bridge.js +60 -0
  511. package/dist/core/code/engine/core/ingestion/scope-extractor.js +1373 -0
  512. package/dist/core/code/engine/core/ingestion/scope-resolution/contract/scope-resolver.js +282 -0
  513. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +72 -0
  514. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/edges.js +194 -0
  515. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/ids.js +472 -0
  516. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +49 -0
  517. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +43 -0
  518. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +274 -0
  519. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +93 -0
  520. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/callable-value-flow.js +1240 -0
  521. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/compound-receiver.js +1174 -0
  522. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/free-call-fallback.js +873 -0
  523. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/imported-return-types.js +226 -0
  524. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/mro.js +107 -0
  525. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/overload-narrowing.js +441 -0
  526. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/property-dispatch.js +122 -0
  527. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1720 -0
  528. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/phase.js +395 -0
  529. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +208 -0
  530. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/registry.js +49 -0
  531. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/run.js +632 -0
  532. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +112 -0
  533. package/dist/core/code/engine/core/ingestion/scope-resolution/resolution-outcome.js +41 -0
  534. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/namespace-targets.js +81 -0
  535. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/walkers.js +1835 -0
  536. package/dist/core/code/engine/core/ingestion/scope-resolution/unresolved-receivers.js +242 -0
  537. package/dist/core/code/engine/core/ingestion/scope-resolution/utils/definition-id.js +22 -0
  538. package/dist/core/code/engine/core/ingestion/scope-resolution/workspace-index.js +151 -0
  539. package/dist/core/code/engine/core/ingestion/structure-processor.js +40 -0
  540. package/dist/core/code/engine/core/ingestion/tree-sitter-queries.js +2244 -0
  541. package/dist/core/code/engine/core/ingestion/ts-js-hoc-utils.js +115 -0
  542. package/dist/core/code/engine/core/ingestion/type-env.js +1136 -0
  543. package/dist/core/code/engine/core/ingestion/type-extractors/c-cpp.js +555 -0
  544. package/dist/core/code/engine/core/ingestion/type-extractors/csharp.js +570 -0
  545. package/dist/core/code/engine/core/ingestion/type-extractors/dart.js +372 -0
  546. package/dist/core/code/engine/core/ingestion/type-extractors/go.js +508 -0
  547. package/dist/core/code/engine/core/ingestion/type-extractors/jvm.js +875 -0
  548. package/dist/core/code/engine/core/ingestion/type-extractors/php.js +537 -0
  549. package/dist/core/code/engine/core/ingestion/type-extractors/python.js +477 -0
  550. package/dist/core/code/engine/core/ingestion/type-extractors/ruby.js +380 -0
  551. package/dist/core/code/engine/core/ingestion/type-extractors/rust.js +502 -0
  552. package/dist/core/code/engine/core/ingestion/type-extractors/shared.js +843 -0
  553. package/dist/core/code/engine/core/ingestion/type-extractors/swift.js +490 -0
  554. package/dist/core/code/engine/core/ingestion/type-extractors/types.js +2 -0
  555. package/dist/core/code/engine/core/ingestion/type-extractors/typescript.js +690 -0
  556. package/dist/core/code/engine/core/ingestion/utils/ast-helpers.js +1693 -0
  557. package/dist/core/code/engine/core/ingestion/utils/call-analysis.js +779 -0
  558. package/dist/core/code/engine/core/ingestion/utils/callable-flow-captures.js +932 -0
  559. package/dist/core/code/engine/core/ingestion/utils/callable-labels.js +49 -0
  560. package/dist/core/code/engine/core/ingestion/utils/deferred-resolution-profile.js +151 -0
  561. package/dist/core/code/engine/core/ingestion/utils/effective-ram.js +67 -0
  562. package/dist/core/code/engine/core/ingestion/utils/env.js +60 -0
  563. package/dist/core/code/engine/core/ingestion/utils/event-loop.js +9 -0
  564. package/dist/core/code/engine/core/ingestion/utils/graph-sort.js +103 -0
  565. package/dist/core/code/engine/core/ingestion/utils/heap-probe.js +45 -0
  566. package/dist/core/code/engine/core/ingestion/utils/heritage-marker.js +47 -0
  567. package/dist/core/code/engine/core/ingestion/utils/line-base.js +24 -0
  568. package/dist/core/code/engine/core/ingestion/utils/max-file-size.js +59 -0
  569. package/dist/core/code/engine/core/ingestion/utils/method-props.js +198 -0
  570. package/dist/core/code/engine/core/ingestion/utils/qualified-name.js +73 -0
  571. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-captures.js +60 -0
  572. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-codec.js +188 -0
  573. package/dist/core/code/engine/core/ingestion/utils/scope-tree-walk.js +36 -0
  574. package/dist/core/code/engine/core/ingestion/utils/symbol-labels.js +48 -0
  575. package/dist/core/code/engine/core/ingestion/utils/template-arguments.js +187 -0
  576. package/dist/core/code/engine/core/ingestion/utils/type-parameters.js +209 -0
  577. package/dist/core/code/engine/core/ingestion/utils/verbose.js +6 -0
  578. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/c-cpp.js +133 -0
  579. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/csharp.js +66 -0
  580. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/dart.js +111 -0
  581. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/go.js +153 -0
  582. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/jvm.js +145 -0
  583. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/php.js +61 -0
  584. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/python.js +104 -0
  585. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/ruby.js +55 -0
  586. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/rust.js +79 -0
  587. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/swift.js +91 -0
  588. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/typescript-javascript.js +86 -0
  589. package/dist/core/code/engine/core/ingestion/variable-extractors/generic.js +111 -0
  590. package/dist/core/code/engine/core/ingestion/variable-types.js +3 -0
  591. package/dist/core/code/engine/core/ingestion/vue-sfc-extractor.js +544 -0
  592. package/dist/core/code/engine/core/ingestion/workers/callable-id.js +122 -0
  593. package/dist/core/code/engine/core/ingestion/workers/clone-safety.js +470 -0
  594. package/dist/core/code/engine/core/ingestion/workers/parse-worker.js +2456 -0
  595. package/dist/core/code/engine/core/ingestion/workers/post-result.js +90 -0
  596. package/dist/core/code/engine/core/ingestion/workers/quarantine.js +41 -0
  597. package/dist/core/code/engine/core/ingestion/workers/result-merge.js +59 -0
  598. package/dist/core/code/engine/core/ingestion/workers/worker-pool.js +1725 -0
  599. package/dist/core/code/engine/core/ingestion/workspace-config.js +139 -0
  600. package/dist/core/code/engine/core/lbug/conn-lock.js +72 -0
  601. package/dist/core/code/engine/core/lbug/csv-generator.js +710 -0
  602. package/dist/core/code/engine/core/lbug/cypher-escape.js +24 -0
  603. package/dist/core/code/engine/core/lbug/extension-load-error.js +339 -0
  604. package/dist/core/code/engine/core/lbug/extension-loader.js +261 -0
  605. package/dist/core/code/engine/core/lbug/graph-emit-sink.js +584 -0
  606. package/dist/core/code/engine/core/lbug/lbug-adapter.js +2703 -0
  607. package/dist/core/code/engine/core/lbug/lbug-config.js +1029 -0
  608. package/dist/core/code/engine/core/lbug/native-check.js +435 -0
  609. package/dist/core/code/engine/core/lbug/pool-adapter.js +973 -0
  610. package/dist/core/code/engine/core/lbug/query-params.js +25 -0
  611. package/dist/core/code/engine/core/lbug/query-result-utils.js +31 -0
  612. package/dist/core/code/engine/core/lbug/rel-pair-routing.js +373 -0
  613. package/dist/core/code/engine/core/lbug/schema.js +771 -0
  614. package/dist/core/code/engine/core/lbug/shutdown-helpers.js +40 -0
  615. package/dist/core/code/engine/core/lbug/sidecar-recovery.js +716 -0
  616. package/dist/core/code/engine/core/lbug/stdio-capture.js +49 -0
  617. package/dist/core/code/engine/core/lbug/sync-csv-writer.js +115 -0
  618. package/dist/core/code/engine/core/lbug/wal-checkpoint-driver.js +215 -0
  619. package/dist/core/code/engine/core/lbug/wal-driver-state.js +28 -0
  620. package/dist/core/code/engine/core/logger.js +339 -0
  621. package/dist/core/code/engine/core/platform/capabilities.js +91 -0
  622. package/dist/core/code/engine/core/run-analyze.js +1098 -0
  623. package/dist/core/code/engine/core/tree-sitter/parser-loader.js +281 -0
  624. package/dist/core/code/engine/core/tree-sitter/safe-parse.js +258 -0
  625. package/dist/core/code/engine/core/tree-sitter/vendored-grammars.js +64 -0
  626. package/dist/core/code/engine/lib/utils.js +121 -0
  627. package/dist/core/code/engine/mcp/core/lbug-adapter.js +27 -0
  628. package/dist/core/code/engine/mcp/local/aop-metadata.js +230 -0
  629. package/dist/core/code/engine/mcp/local/bean-metadata.js +49 -0
  630. package/dist/core/code/engine/mcp/local/limits.js +15 -0
  631. package/dist/core/code/engine/mcp/local/line-display.js +6 -0
  632. package/dist/core/code/engine/mcp/local/local-backend.js +4142 -0
  633. package/dist/core/code/engine/storage/branch-index.js +72 -0
  634. package/dist/core/code/engine/storage/file-hash.js +95 -0
  635. package/dist/core/code/engine/storage/fs-atomic.js +34 -0
  636. package/dist/core/code/engine/storage/git.js +555 -0
  637. package/dist/core/code/engine/storage/index-lock.js +664 -0
  638. package/dist/core/code/engine/storage/parse-cache.js +650 -0
  639. package/dist/core/code/engine/storage/parsedfile-store.js +620 -0
  640. package/dist/core/code/engine/storage/repo-manager.js +1061 -0
  641. package/dist/core/code/engine/storage/scope-index-store.js +247 -0
  642. package/dist/core/code/engine/types/pipeline.js +2 -0
  643. package/dist/core/code/scripts/install-duckdb-extension.mjs +125 -0
  644. package/dist/core/code/scripts/resolve-analyze-cmd.cjs +346 -0
  645. package/dist/core/code/shared/graph/types.js +8 -0
  646. package/dist/core/code/shared/index.js +105 -0
  647. package/dist/core/code/shared/integrations/circuit-breaker.js +242 -0
  648. package/dist/core/code/shared/integrations/resilient-fetch.js +224 -0
  649. package/dist/core/code/shared/integrations/retry.js +70 -0
  650. package/dist/core/code/shared/integrations/understand-quickly.js +145 -0
  651. package/dist/core/code/shared/language-detection.js +162 -0
  652. package/dist/core/code/shared/languages.js +27 -0
  653. package/dist/core/code/shared/lbug/schema-constants.js +98 -0
  654. package/dist/core/code/shared/mro-strategy.js +2 -0
  655. package/dist/core/code/shared/pipeline.js +5 -0
  656. package/dist/core/code/shared/scope-resolution/callable-flow-site.js +11 -0
  657. package/dist/core/code/shared/scope-resolution/def-index.js +53 -0
  658. package/dist/core/code/shared/scope-resolution/evidence-weights.js +87 -0
  659. package/dist/core/code/shared/scope-resolution/finalize-algorithm.js +807 -0
  660. package/dist/core/code/shared/scope-resolution/language-classification.js +46 -0
  661. package/dist/core/code/shared/scope-resolution/method-dispatch-index.js +100 -0
  662. package/dist/core/code/shared/scope-resolution/module-scope-index.js +59 -0
  663. package/dist/core/code/shared/scope-resolution/origin-priority.js +23 -0
  664. package/dist/core/code/shared/scope-resolution/parsed-file.js +54 -0
  665. package/dist/core/code/shared/scope-resolution/position-index.js +136 -0
  666. package/dist/core/code/shared/scope-resolution/qualified-name-index.js +77 -0
  667. package/dist/core/code/shared/scope-resolution/reference-site.js +24 -0
  668. package/dist/core/code/shared/scope-resolution/registries/class-registry.js +32 -0
  669. package/dist/core/code/shared/scope-resolution/registries/context.js +52 -0
  670. package/dist/core/code/shared/scope-resolution/registries/evidence.js +152 -0
  671. package/dist/core/code/shared/scope-resolution/registries/field-registry.js +33 -0
  672. package/dist/core/code/shared/scope-resolution/registries/lookup-core.js +392 -0
  673. package/dist/core/code/shared/scope-resolution/registries/lookup-qualified.js +58 -0
  674. package/dist/core/code/shared/scope-resolution/registries/macro-registry.js +34 -0
  675. package/dist/core/code/shared/scope-resolution/registries/method-registry.js +34 -0
  676. package/dist/core/code/shared/scope-resolution/registries/tie-breaks.js +63 -0
  677. package/dist/core/code/shared/scope-resolution/resolve-type-ref.js +128 -0
  678. package/dist/core/code/shared/scope-resolution/scope-id.js +49 -0
  679. package/dist/core/code/shared/scope-resolution/scope-tree.js +225 -0
  680. package/dist/core/code/shared/scope-resolution/symbol-definition.js +12 -0
  681. package/dist/core/code/shared/scope-resolution/types.js +25 -0
  682. package/dist/core/code/shared/test-helpers.js +17 -0
  683. package/dist/core/code/vendor/leiden/index.cjs +355 -0
  684. package/dist/core/code/vendor/leiden/utils.cjs +419 -0
  685. package/dist/core/dbquery/cli.d.ts.map +1 -1
  686. package/dist/core/dbquery/cli.js +5 -4
  687. package/dist/core/dbquery/cli.js.map +1 -1
  688. package/dist/core/dbquery/config.d.ts.map +1 -1
  689. package/dist/core/dbquery/config.js +39 -3
  690. package/dist/core/dbquery/config.js.map +1 -1
  691. package/dist/core/dbquery/drivers/http.d.ts +23 -0
  692. package/dist/core/dbquery/drivers/http.d.ts.map +1 -0
  693. package/dist/core/dbquery/drivers/http.js +125 -0
  694. package/dist/core/dbquery/drivers/http.js.map +1 -0
  695. package/dist/core/dbquery/drivers/mysql.js +1 -1
  696. package/dist/core/dbquery/drivers/mysql.js.map +1 -1
  697. package/dist/core/dbquery/drivers/postgres.js +1 -1
  698. package/dist/core/dbquery/drivers/postgres.js.map +1 -1
  699. package/dist/core/dbquery/executor.d.ts.map +1 -1
  700. package/dist/core/dbquery/executor.js +46 -12
  701. package/dist/core/dbquery/executor.js.map +1 -1
  702. package/dist/core/dbquery/format.d.ts.map +1 -1
  703. package/dist/core/dbquery/format.js +2 -1
  704. package/dist/core/dbquery/format.js.map +1 -1
  705. package/dist/core/dbquery/init.d.ts.map +1 -1
  706. package/dist/core/dbquery/init.js +7 -0
  707. package/dist/core/dbquery/init.js.map +1 -1
  708. package/dist/core/dbquery/types.d.ts +55 -7
  709. package/dist/core/dbquery/types.d.ts.map +1 -1
  710. package/dist/core/directory.d.ts +17 -0
  711. package/dist/core/directory.d.ts.map +1 -1
  712. package/dist/core/directory.js +37 -0
  713. package/dist/core/directory.js.map +1 -1
  714. package/dist/core/features/cli.d.ts.map +1 -1
  715. package/dist/core/features/cli.js +3 -2
  716. package/dist/core/features/cli.js.map +1 -1
  717. package/dist/core/features/scanner.d.ts +1 -1
  718. package/dist/core/features/scanner.d.ts.map +1 -1
  719. package/dist/core/features/scanner.js +20 -4
  720. package/dist/core/features/scanner.js.map +1 -1
  721. package/dist/core/markdown/cli.d.ts.map +1 -1
  722. package/dist/core/markdown/cli.js +9 -8
  723. package/dist/core/markdown/cli.js.map +1 -1
  724. package/dist/core/timeline/cli.d.ts.map +1 -1
  725. package/dist/core/timeline/cli.js +13 -6
  726. package/dist/core/timeline/cli.js.map +1 -1
  727. package/dist/core/timeline/debris.d.ts +20 -0
  728. package/dist/core/timeline/debris.d.ts.map +1 -0
  729. package/dist/core/timeline/debris.js +124 -0
  730. package/dist/core/timeline/debris.js.map +1 -0
  731. package/dist/core/timeline/hook-runner.d.ts.map +1 -1
  732. package/dist/core/timeline/hook-runner.js +3 -1
  733. package/dist/core/timeline/hook-runner.js.map +1 -1
  734. package/dist/core/timeline/hooks.d.ts.map +1 -1
  735. package/dist/core/timeline/hooks.js +13 -5
  736. package/dist/core/timeline/hooks.js.map +1 -1
  737. package/dist/core/timeline/installer.d.ts +2 -0
  738. package/dist/core/timeline/installer.d.ts.map +1 -1
  739. package/dist/core/timeline/installer.js +12 -0
  740. package/dist/core/timeline/installer.js.map +1 -1
  741. package/dist/core/timeline/project-root.d.ts +21 -0
  742. package/dist/core/timeline/project-root.d.ts.map +1 -0
  743. package/dist/core/timeline/project-root.js +83 -0
  744. package/dist/core/timeline/project-root.js.map +1 -0
  745. package/dist/web/register.d.ts.map +1 -1
  746. package/dist/web/register.js +2 -1
  747. package/dist/web/register.js.map +1 -1
  748. package/package.json +1 -1
  749. package/dist/.claude-template/.cgraphx/timeline-current-turn.json +0 -1
  750. package/dist/.claude-template/skills/.cgraphx/timeline-current-turn.json +0 -1
  751. package/dist/.claude-template/skills/handdrawn-deck/.cgraphx/timeline-current-turn.json +0 -1
  752. package/dist/.claude-template/skills/handdrawn-deck/references/.cgraphx/timeline-current-turn.json +0 -1
  753. package/dist/.claude-template/skills/handdrawn-sketch-engine/.cgraphx/timeline-current-turn.json +0 -1
  754. /package/dist/.claude-template/skills/run-api-test/assets/{template-test-verify.jsonl → template-/346/216/245/345/217/243/346/265/213/350/257/225/351/252/214/350/257/201.jsonl"} +0 -0
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ /**
3
+ * Pipeline orchestrator — dependency-ordered ingestion pipeline.
4
+ *
5
+ * The pipeline is composed of named phases with explicit dependencies.
6
+ * Each phase is defined in its own file under `pipeline-phases/`.
7
+ * The runner in `pipeline-phases/runner.ts` executes phases in
8
+ * topological order, passing typed outputs from upstream phases as
9
+ * inputs to downstream phases.
10
+ *
11
+ * To add a new phase:
12
+ * 1. Create a new file in `pipeline-phases/` following the pattern
13
+ * 2. Export it from `pipeline-phases/index.ts`
14
+ * 3. Add it to the `ALL_PHASES` array below
15
+ *
16
+ * See ARCHITECTURE.md for the full phase dependency diagram.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.runPipelineFromRepo = void 0;
20
+ exports.buildPhaseList = buildPhaseList;
21
+ const graph_js_1 = require("../graph/graph.js");
22
+ const graph_emit_sink_js_1 = require("../lbug/graph-emit-sink.js");
23
+ const index_js_1 = require("./pipeline-phases/index.js");
24
+ // ── Phase registry ─────────────────────────────────────────────────────────
25
+ /**
26
+ * All pipeline phases with their dependency relationships.
27
+ *
28
+ * Phase dependency graph:
29
+ *
30
+ * scan → structure → springConfig → parse → [routes, tools, rpcEdges, httpApiCalls, orm]
31
+ * → crossFile → scopeResolution → [springAutoConfiguration, springAop] → pruneLocalSymbols
32
+ * → mro → springAopInheritance → di → communities → processes
33
+ *
34
+ * rpcEdges (deps: parse) and httpApiCalls (deps: parse, rpcEdges) are the
35
+ * cross-service contract phases (spec §5.4, §6): they emit RCALLS /
36
+ * HTTP_CALLS edges and ExternalService nodes from workspace-config annotations.
37
+ *
38
+ * To add a new phase: create a file in pipeline-phases/, export the phase
39
+ * object, and `.register()` it at the appropriate position below. Opt-in
40
+ * phases pass an `enabledWhen` predicate (issue #2080 phase-registry seam) —
41
+ * the legacy `if (!skipGraphPhases)` guard is now expressed that way on the
42
+ * five graph phases, with no change in behaviour.
43
+ */
44
+ function buildPhaseList(options) {
45
+ return (new index_js_1.PhaseRegistry()
46
+ .register(index_js_1.scanPhase)
47
+ .register(index_js_1.structurePhase)
48
+ .register(index_js_1.springConfigPhase)
49
+ .register(index_js_1.parsePhase)
50
+ .register(index_js_1.routesPhase)
51
+ .register(index_js_1.toolsPhase)
52
+ .register(index_js_1.rpcEdgesPhase)
53
+ .register(index_js_1.httpApiCallsPhase)
54
+ .register(index_js_1.ormPhase)
55
+ .register(index_js_1.crossFilePhase)
56
+ .register(index_js_1.scopeResolutionPhase)
57
+ .register(index_js_1.springAutoConfigurationPhase)
58
+ .register(index_js_1.springAopPhase)
59
+ .register(index_js_1.pruneLocalSymbolsPhase)
60
+ .register(index_js_1.mroPhase, { enabledWhen: (o) => !o.skipGraphPhases })
61
+ .register(index_js_1.springAopInheritancePhase, { enabledWhen: (o) => !o.skipGraphPhases })
62
+ .register(index_js_1.diPhase, { enabledWhen: (o) => !o.skipGraphPhases })
63
+ .register(index_js_1.communitiesPhase, { enabledWhen: (o) => !o.skipGraphPhases })
64
+ .register(index_js_1.processesPhase, { enabledWhen: (o) => !o.skipGraphPhases })
65
+ .build(options ?? {}));
66
+ }
67
+ // ── Pipeline orchestrator ─────────────────────────────────────────────────
68
+ const runPipelineFromRepo = async (repoPath, onProgress, options) => {
69
+ const graph = (0, graph_js_1.createKnowledgeGraph)();
70
+ const pipelineStart = Date.now();
71
+ // Streamed structural emit (#2680). The sink is a write-routing façade over
72
+ // `graph`; it streams nothing until `beginStreaming()` fires at the parse
73
+ // boundary.
74
+ //
75
+ // A missing `graphEmitCsvDir` is a caller bug, not a reason to quietly skip
76
+ // streaming: this is on by default, so a programmatic host that builds its own
77
+ // `PipelineOptions` (eval-server, the MCP daemon, a test) would otherwise ask
78
+ // for streaming, silently not get it, and still see a successful run. Fail
79
+ // loudly instead — the whole point of the surrounding work is that a degraded
80
+ // outcome must never look like a clean one.
81
+ let graphEmitSink;
82
+ if (options?.streamGraphEmit === true) {
83
+ if (options.graphEmitCsvDir === undefined) {
84
+ throw new Error('streamGraphEmit was requested but graphEmitCsvDir is missing. The caller owns ' +
85
+ 'storage-path resolution (see resolveNativeSafeStorageDir in run-analyze.ts); ' +
86
+ 'pass the directory, or leave streamGraphEmit unset to run without streaming.');
87
+ }
88
+ graphEmitSink = new graph_emit_sink_js_1.GraphEmitSink(graph, options.graphEmitCsvDir);
89
+ }
90
+ const phases = buildPhaseList(options);
91
+ let graphEmitManifest;
92
+ let results;
93
+ try {
94
+ results = await (0, index_js_1.runPipeline)(phases, {
95
+ repoPath,
96
+ graph: graphEmitSink ?? graph,
97
+ onProgress,
98
+ options,
99
+ pipelineStart,
100
+ graphEmit: graphEmitSink,
101
+ });
102
+ graphEmitManifest = graphEmitSink?.finalize();
103
+ }
104
+ finally {
105
+ // Release per-pair fds when the pipeline threw before finalize ran.
106
+ graphEmitSink?.close();
107
+ }
108
+ // Extract final results for the PipelineResult contract
109
+ const { totalFiles, usedWorkerPool } = (0, index_js_1.getPhaseOutput)(results, 'parse');
110
+ let communityResult;
111
+ let processResult;
112
+ const scopeResolutionOutput = (0, index_js_1.getPhaseOutput)(results, 'scopeResolution');
113
+ const resolutionOutcomes = scopeResolutionOutput.resolutionOutcomes;
114
+ // Presence check, not `!skipGraphPhases`: phases can now be filtered out by
115
+ // any `enabledWhen` predicate (streamGraphEmit disables communities/processes
116
+ // too), and `getPhaseOutput` THROWS on a phase that was never resolved. Keying
117
+ // off the options flag alone made every filtered-out combination crash here
118
+ // rather than return undefined results.
119
+ if (results.has('communities') && results.has('processes')) {
120
+ communityResult = (0, index_js_1.getPhaseOutput)(results, 'communities').communityResult;
121
+ processResult = (0, index_js_1.getPhaseOutput)(results, 'processes').processResult;
122
+ }
123
+ onProgress({
124
+ phase: 'complete',
125
+ percent: 100,
126
+ message: communityResult && processResult
127
+ ? `Graph complete! ${communityResult.stats.totalCommunities} communities, ${processResult.stats.totalProcesses} processes detected.`
128
+ : 'Graph complete! (graph phases skipped)',
129
+ stats: {
130
+ filesProcessed: totalFiles,
131
+ totalFiles,
132
+ nodesCreated: graph.nodeCount,
133
+ },
134
+ });
135
+ return {
136
+ // The RAW graph, deliberately — NOT `graphEmitSink`. Phases above received
137
+ // the sink so their reads are complete, but `loadGraphToLbug` feeds this to
138
+ // `streamAllCSVsToDisk`, and the sink's complete iterator would then emit
139
+ // every streamed edge a SECOND time on top of the per-pair CSVs the sink
140
+ // already wrote and the manifest already COPYs. Returning the sink here
141
+ // silently doubles every streamed relationship in the persisted graph.
142
+ graph,
143
+ repoPath,
144
+ totalFileCount: totalFiles,
145
+ graphEmitManifest,
146
+ communityResult,
147
+ processResult,
148
+ resolutionOutcomes,
149
+ usedWorkerPool,
150
+ };
151
+ };
152
+ exports.runPipelineFromRepo = runPipelineFromRepo;
@@ -0,0 +1,325 @@
1
+ "use strict";
2
+ /**
3
+ * Process Detection Processor
4
+ *
5
+ * Detects execution flows (Processes) in the code graph by:
6
+ * 1. Finding entry points (functions with no internal callers)
7
+ * 2. Tracing forward via CALLS edges (BFS)
8
+ * 3. Grouping and deduplicating similar paths
9
+ * 4. Labeling with heuristic names
10
+ *
11
+ * Processes help agents understand how features work through the codebase.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.processProcesses = void 0;
15
+ const entry_point_scoring_js_1 = require("./entry-point-scoring.js");
16
+ const index_js_1 = require("../../../shared/index.js");
17
+ const env_js_1 = require("./utils/env.js");
18
+ const logger_js_1 = require("../logger.js");
19
+ const DEFAULT_CONFIG = {
20
+ maxTraceDepth: 10,
21
+ maxBranching: 4,
22
+ maxProcesses: 75,
23
+ minSteps: 3, // 3+ steps = genuine multi-hop flow (2-step is just "A calls B")
24
+ };
25
+ // ============================================================================
26
+ // MAIN PROCESSOR
27
+ // ============================================================================
28
+ /**
29
+ * Detect processes (execution flows) in the knowledge graph
30
+ *
31
+ * This runs AFTER community detection, using CALLS edges to trace flows.
32
+ */
33
+ const processProcesses = async (knowledgeGraph, memberships, onProgress, config = {}) => {
34
+ const cfg = { ...DEFAULT_CONFIG, ...config };
35
+ onProgress?.('Finding entry points...', 0);
36
+ // Build lookup maps
37
+ const membershipMap = new Map();
38
+ memberships.forEach((m) => membershipMap.set(m.nodeId, m.communityId));
39
+ const callsEdges = buildCallsGraph(knowledgeGraph);
40
+ const reverseCallsEdges = buildReverseCallsGraph(knowledgeGraph);
41
+ const nodeMap = new Map();
42
+ for (const n of knowledgeGraph.iterNodes())
43
+ nodeMap.set(n.id, n);
44
+ // Step 1: Find entry points (functions that call others but have few callers)
45
+ const entryPoints = findEntryPoints(knowledgeGraph, reverseCallsEdges, callsEdges);
46
+ onProgress?.(`Found ${entryPoints.length} entry points, tracing flows...`, 20);
47
+ onProgress?.(`Found ${entryPoints.length} entry points, tracing flows...`, 20);
48
+ // Step 2: Trace processes from each entry point
49
+ const allTraces = [];
50
+ for (let i = 0; i < entryPoints.length && allTraces.length < cfg.maxProcesses * 2; i++) {
51
+ const entryId = entryPoints[i];
52
+ const traces = traceFromEntryPoint(entryId, callsEdges, cfg);
53
+ // Filter out traces that are too short
54
+ traces.filter((t) => t.length >= cfg.minSteps).forEach((t) => allTraces.push(t));
55
+ if (i % 10 === 0) {
56
+ onProgress?.(`Tracing entry point ${i + 1}/${entryPoints.length}...`, 20 + (i / entryPoints.length) * 40);
57
+ }
58
+ }
59
+ onProgress?.(`Found ${allTraces.length} traces, deduplicating...`, 60);
60
+ // Step 3: Deduplicate similar traces (subset removal)
61
+ const uniqueTraces = deduplicateTraces(allTraces);
62
+ // Step 3b: Deduplicate by entry+terminal pair (keep longest path per pair)
63
+ const endpointDeduped = deduplicateByEndpoints(uniqueTraces);
64
+ onProgress?.(`Deduped ${uniqueTraces.length} → ${endpointDeduped.length} unique endpoint pairs`, 70);
65
+ // Step 4: Limit to max processes (prioritize longer traces)
66
+ const limitedTraces = endpointDeduped
67
+ .sort((a, b) => b.length - a.length)
68
+ .slice(0, cfg.maxProcesses);
69
+ onProgress?.(`Creating ${limitedTraces.length} process nodes...`, 80);
70
+ // Step 5: Create process nodes
71
+ const processes = [];
72
+ const steps = [];
73
+ limitedTraces.forEach((trace, idx) => {
74
+ const entryPointId = trace[0];
75
+ const terminalId = trace[trace.length - 1];
76
+ // Get communities touched
77
+ const communitiesSet = new Set();
78
+ trace.forEach((nodeId) => {
79
+ const comm = membershipMap.get(nodeId);
80
+ if (comm)
81
+ communitiesSet.add(comm);
82
+ });
83
+ const communities = Array.from(communitiesSet);
84
+ // Determine process type
85
+ const processType = communities.length > 1 ? 'cross_community' : 'intra_community';
86
+ // Generate label
87
+ const entryNode = nodeMap.get(entryPointId);
88
+ const terminalNode = nodeMap.get(terminalId);
89
+ const entryName = entryNode?.properties.name || 'Unknown';
90
+ const terminalName = terminalNode?.properties.name || 'Unknown';
91
+ const heuristicLabel = `${capitalize(entryName)} → ${capitalize(terminalName)}`;
92
+ const processId = `proc_${idx}_${sanitizeId(entryName)}`;
93
+ processes.push({
94
+ id: processId,
95
+ label: heuristicLabel,
96
+ heuristicLabel,
97
+ processType,
98
+ stepCount: trace.length,
99
+ communities,
100
+ entryPointId,
101
+ terminalId,
102
+ trace,
103
+ });
104
+ // Create step relationships
105
+ trace.forEach((nodeId, stepIdx) => {
106
+ steps.push({
107
+ nodeId,
108
+ processId,
109
+ step: stepIdx + 1, // 1-indexed
110
+ });
111
+ });
112
+ });
113
+ onProgress?.('Process detection complete!', 100);
114
+ // Calculate stats
115
+ const crossCommunityCount = processes.filter((p) => p.processType === 'cross_community').length;
116
+ const avgStepCount = processes.length > 0
117
+ ? processes.reduce((sum, p) => sum + p.stepCount, 0) / processes.length
118
+ : 0;
119
+ return {
120
+ processes,
121
+ steps,
122
+ stats: {
123
+ totalProcesses: processes.length,
124
+ crossCommunityCount,
125
+ avgStepCount: Math.round(avgStepCount * 10) / 10,
126
+ entryPointsFound: entryPoints.length,
127
+ },
128
+ };
129
+ };
130
+ exports.processProcesses = processProcesses;
131
+ /**
132
+ * Minimum edge confidence for process tracing.
133
+ * Filters out ambiguous fuzzy-global matches (0.3) that cause
134
+ * traces to jump across unrelated code areas.
135
+ */
136
+ const MIN_TRACE_CONFIDENCE = 0.5;
137
+ const buildCallsGraph = (graph) => {
138
+ const adj = new Map();
139
+ // Field-wise scan (#2680) — whole-graph walk, four fields, no object needed.
140
+ graph.forEachRelationshipFields((sourceId, targetId, type, confidence) => {
141
+ if (type !== 'CALLS' || confidence < MIN_TRACE_CONFIDENCE)
142
+ return;
143
+ const existing = adj.get(sourceId);
144
+ if (existing === undefined)
145
+ adj.set(sourceId, [targetId]);
146
+ else
147
+ existing.push(targetId);
148
+ });
149
+ return adj;
150
+ };
151
+ const buildReverseCallsGraph = (graph) => {
152
+ const adj = new Map();
153
+ graph.forEachRelationshipFields((sourceId, targetId, type, confidence) => {
154
+ if (type !== 'CALLS' || confidence < MIN_TRACE_CONFIDENCE)
155
+ return;
156
+ const existing = adj.get(targetId);
157
+ if (existing === undefined)
158
+ adj.set(targetId, [sourceId]);
159
+ else
160
+ existing.push(sourceId);
161
+ });
162
+ return adj;
163
+ };
164
+ /**
165
+ * Find functions/methods that are good entry points for tracing.
166
+ *
167
+ * Entry points are scored based on:
168
+ * 1. Call ratio (calls many, called by few)
169
+ * 2. Export status (exported/public functions rank higher)
170
+ * 3. Name patterns (handle*, on*, *Controller, etc.)
171
+ *
172
+ * Test files are excluded entirely.
173
+ */
174
+ const findEntryPoints = (graph, reverseCallsEdges, callsEdges) => {
175
+ const symbolTypes = new Set(['Function', 'Method']);
176
+ const entryPointCandidates = [];
177
+ for (const node of graph.iterNodes()) {
178
+ if (!symbolTypes.has(node.label))
179
+ continue;
180
+ const filePath = node.properties.filePath || '';
181
+ // Skip test files entirely
182
+ if ((0, entry_point_scoring_js_1.isTestFile)(filePath))
183
+ continue;
184
+ const callers = reverseCallsEdges.get(node.id) || [];
185
+ const callees = callsEdges.get(node.id) || [];
186
+ // Must have at least 1 outgoing call to trace forward
187
+ if (callees.length === 0)
188
+ continue;
189
+ // Calculate entry point score using new scoring system
190
+ const { score: baseScore, reasons } = (0, entry_point_scoring_js_1.calculateEntryPointScore)(node.properties.name, (node.properties.language ?? index_js_1.SupportedLanguages.JavaScript), node.properties.isExported ?? false, callers.length, callees.length, filePath);
191
+ let score = baseScore;
192
+ const astFrameworkMultiplier = node.properties.astFrameworkMultiplier ?? 1.0;
193
+ if (astFrameworkMultiplier > 1.0) {
194
+ score *= astFrameworkMultiplier;
195
+ reasons.push(`framework-ast:${node.properties.astFrameworkReason || 'decorator'}`);
196
+ }
197
+ if (score > 0) {
198
+ entryPointCandidates.push({ id: node.id, score, reasons });
199
+ }
200
+ }
201
+ // Sort by score descending and return top candidates
202
+ const sorted = entryPointCandidates.sort((a, b) => b.score - a.score);
203
+ // DEBUG: Log top candidates with new scoring details
204
+ if (sorted.length > 0 && env_js_1.isDev) {
205
+ logger_js_1.logger.info(`[Process] Top 10 entry point candidates (new scoring):`);
206
+ sorted.slice(0, 10).forEach((c, i) => {
207
+ const node = graph.getNode(c.id);
208
+ const exported = node?.properties.isExported ? '✓' : '✗';
209
+ const shortPath = node?.properties.filePath?.split('/').slice(-2).join('/') || '';
210
+ logger_js_1.logger.info(` ${i + 1}. ${node?.properties.name} [exported:${exported}] (${shortPath})`);
211
+ logger_js_1.logger.info(` score: ${c.score.toFixed(2)} = [${c.reasons.join(' × ')}]`);
212
+ });
213
+ }
214
+ return sorted
215
+ .slice(0, 200) // Limit to prevent explosion
216
+ .map((c) => c.id);
217
+ };
218
+ // ============================================================================
219
+ // HELPER: Trace from entry point (BFS)
220
+ // ============================================================================
221
+ /**
222
+ * Trace forward from an entry point using BFS.
223
+ * Returns all distinct paths up to maxDepth.
224
+ */
225
+ const traceFromEntryPoint = (entryId, callsEdges, config) => {
226
+ const traces = [];
227
+ // BFS with path tracking
228
+ // Each queue item: [currentNodeId, pathSoFar]
229
+ const queue = [[entryId, [entryId]]];
230
+ while (queue.length > 0 && traces.length < config.maxBranching * 3) {
231
+ const [currentId, path] = queue.shift();
232
+ // Get outgoing calls
233
+ const callees = callsEdges.get(currentId) || [];
234
+ if (callees.length === 0) {
235
+ // Terminal node - this is a complete trace
236
+ if (path.length >= config.minSteps) {
237
+ traces.push([...path]);
238
+ }
239
+ }
240
+ else if (path.length >= config.maxTraceDepth) {
241
+ // Max depth reached - save what we have
242
+ if (path.length >= config.minSteps) {
243
+ traces.push([...path]);
244
+ }
245
+ }
246
+ else {
247
+ // Continue tracing - limit branching
248
+ const limitedCallees = callees.slice(0, config.maxBranching);
249
+ let addedBranch = false;
250
+ for (const calleeId of limitedCallees) {
251
+ // Avoid cycles
252
+ if (!path.includes(calleeId)) {
253
+ queue.push([calleeId, [...path, calleeId]]);
254
+ addedBranch = true;
255
+ }
256
+ }
257
+ // If all branches were cycles, save current path as terminal
258
+ if (!addedBranch && path.length >= config.minSteps) {
259
+ traces.push([...path]);
260
+ }
261
+ }
262
+ }
263
+ return traces;
264
+ };
265
+ // ============================================================================
266
+ // HELPER: Deduplicate traces
267
+ // ============================================================================
268
+ /**
269
+ * Merge traces that are subsets of other traces.
270
+ * Keep longer traces, remove redundant shorter ones.
271
+ */
272
+ const deduplicateTraces = (traces) => {
273
+ if (traces.length === 0)
274
+ return [];
275
+ // Sort by length descending
276
+ const sorted = [...traces].sort((a, b) => b.length - a.length);
277
+ const unique = [];
278
+ for (const trace of sorted) {
279
+ // Check if this trace is a subset of any already-added trace
280
+ const traceKey = trace.join('->');
281
+ const isSubset = unique.some((existing) => {
282
+ const existingKey = existing.join('->');
283
+ return existingKey.includes(traceKey);
284
+ });
285
+ if (!isSubset) {
286
+ unique.push(trace);
287
+ }
288
+ }
289
+ return unique;
290
+ };
291
+ // ============================================================================
292
+ // HELPER: Deduplicate by entry+terminal endpoints
293
+ // ============================================================================
294
+ /**
295
+ * Keep only the longest trace per unique entry→terminal pair.
296
+ * Multiple paths between the same two endpoints are redundant for agents.
297
+ */
298
+ const deduplicateByEndpoints = (traces) => {
299
+ if (traces.length === 0)
300
+ return [];
301
+ const byEndpoints = new Map();
302
+ // Sort longest first so the first seen per key is the longest
303
+ const sorted = [...traces].sort((a, b) => b.length - a.length);
304
+ for (const trace of sorted) {
305
+ const key = `${trace[0]}::${trace[trace.length - 1]}`;
306
+ if (!byEndpoints.has(key)) {
307
+ byEndpoints.set(key, trace);
308
+ }
309
+ }
310
+ return Array.from(byEndpoints.values());
311
+ };
312
+ // ============================================================================
313
+ // HELPER: String utilities
314
+ // ============================================================================
315
+ const capitalize = (s) => {
316
+ if (!s)
317
+ return s;
318
+ return s.charAt(0).toUpperCase() + s.slice(1);
319
+ };
320
+ const sanitizeId = (s) => {
321
+ return s
322
+ .replace(/[^a-zA-Z0-9]/g, '_')
323
+ .substring(0, 20)
324
+ .toLowerCase();
325
+ };
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ /**
3
+ * `resolveReferenceSites` — drain `ReferenceSite[]` from a finalized
4
+ * `ScopeResolutionIndexes` into a `ReferenceIndex` by routing each site
5
+ * through the appropriate scope-aware `Registry.lookup` (RFC §3.2 Phase 4).
6
+ *
7
+ * This is the missing producer that `emit-references.ts` (#925) was
8
+ * waiting on. The two together form the registry-primary resolution
9
+ * pipeline:
10
+ *
11
+ * ScopeResolutionIndexes.referenceSites
12
+ * │ resolveReferenceSites
13
+ * ▼
14
+ * ReferenceIndex
15
+ * │ emitReferencesToGraph
16
+ * ▼
17
+ * graph: CALLS / ACCESSES / INHERITS / USES edges
18
+ *
19
+ * ## What this module does
20
+ *
21
+ * - For each `ReferenceSite`, picks the registry by `kind`:
22
+ * · `call` / `inherits` → MethodRegistry / ClassRegistry (call-form aware)
23
+ * · `read` / `write` → FieldRegistry (falls through to MethodRegistry for free names)
24
+ * · `type-reference` → ClassRegistry
25
+ * · `import-use` → all three (best-effort name-lookup)
26
+ * - Calls `Registry.lookup` with the site's `inScope`, optional
27
+ * explicit receiver, and arity.
28
+ * - Takes the top-ranked `Resolution` (best by confidence + tie-break
29
+ * cascade); folds it into a `Reference` record and bins by source scope.
30
+ *
31
+ * ## What this module does NOT do
32
+ *
33
+ * - No AST walks. The `ReferenceSite[]` is already extracted.
34
+ * - No language switches. Per-language behavior flows through
35
+ * `RegistryProviders.arityCompatibility` (see `RegistryContext`).
36
+ * - No multi-candidate fan-out. We pick `[0]` per RFC §4.3 ("one-shot
37
+ * answer"). The full ranked list is preserved in the per-site
38
+ * resolution but not emitted as multiple edges; callers that want
39
+ * branch-on-ambiguity behavior should consume the registries directly.
40
+ */
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.FIELD_KINDS = exports.METHOD_KINDS = exports.CLASS_KINDS = void 0;
43
+ exports.resolveReferenceSites = resolveReferenceSites;
44
+ const index_js_1 = require("../../../shared/index.js");
45
+ Object.defineProperty(exports, "CLASS_KINDS", { enumerable: true, get: function () { return index_js_1.CLASS_KINDS; } });
46
+ Object.defineProperty(exports, "FIELD_KINDS", { enumerable: true, get: function () { return index_js_1.FIELD_KINDS; } });
47
+ Object.defineProperty(exports, "METHOD_KINDS", { enumerable: true, get: function () { return index_js_1.METHOD_KINDS; } });
48
+ /**
49
+ * Resolve every `ReferenceSite` in `scopes.referenceSites` against the
50
+ * matching registry and produce a `ReferenceIndex` keyed by source scope
51
+ * + target def.
52
+ */
53
+ function resolveReferenceSites(input) {
54
+ const { scopes } = input;
55
+ const providers = input.providers ?? {};
56
+ const ctx = {
57
+ scopes: scopes.scopeTree,
58
+ defs: scopes.defs,
59
+ qualifiedNames: scopes.qualifiedNames,
60
+ moduleScopes: scopes.moduleScopes,
61
+ ownedMembersByOwner: input.ownedMembersByOwner,
62
+ methodDispatch: scopes.methodDispatch,
63
+ providers,
64
+ };
65
+ const classRegistry = (0, index_js_1.buildClassRegistry)(ctx);
66
+ const methodRegistry = (0, index_js_1.buildMethodRegistry)(ctx);
67
+ const fieldRegistry = (0, index_js_1.buildFieldRegistry)(ctx);
68
+ const macroRegistry = (0, index_js_1.buildMacroRegistry)(ctx);
69
+ // bySourceScope is the canonical index; byTargetDef is derived from it.
70
+ const bySourceScope = new Map();
71
+ const byTargetDef = new Map();
72
+ let sitesProcessed = 0;
73
+ let referencesEmitted = 0;
74
+ let unresolved = 0;
75
+ for (const site of scopes.referenceSites) {
76
+ // value-ref sites resolve post-finalize (imports live in finalized
77
+ // bindings the registries can't see — same reason free calls need
78
+ // `emitFreeCallFallback`). `emitPropertyDispatchCalls` owns their
79
+ // resolution and emission entirely (#2437).
80
+ if (site.kind === 'value-ref')
81
+ continue;
82
+ sitesProcessed++;
83
+ const resolutions = lookupForSite(site, classRegistry, methodRegistry, fieldRegistry, macroRegistry);
84
+ if (resolutions.length === 0) {
85
+ unresolved++;
86
+ continue;
87
+ }
88
+ const top = resolutions[0];
89
+ const ref = buildReference(site, top);
90
+ referencesEmitted++;
91
+ let bySource = bySourceScope.get(site.inScope);
92
+ if (bySource === undefined) {
93
+ bySource = [];
94
+ bySourceScope.set(site.inScope, bySource);
95
+ }
96
+ bySource.push(ref);
97
+ let byTarget = byTargetDef.get(top.def.nodeId);
98
+ if (byTarget === undefined) {
99
+ byTarget = [];
100
+ byTargetDef.set(top.def.nodeId, byTarget);
101
+ }
102
+ byTarget.push(ref);
103
+ }
104
+ // Freeze inner arrays so consumers don't accidentally mutate.
105
+ const frozenBySource = new Map();
106
+ for (const [k, v] of bySourceScope)
107
+ frozenBySource.set(k, Object.freeze([...v]));
108
+ const frozenByTarget = new Map();
109
+ for (const [k, v] of byTargetDef)
110
+ frozenByTarget.set(k, Object.freeze([...v]));
111
+ return {
112
+ referenceIndex: { bySourceScope: frozenBySource, byTargetDef: frozenByTarget },
113
+ stats: { sitesProcessed, referencesEmitted, unresolved },
114
+ };
115
+ }
116
+ // ─── Internal ───────────────────────────────────────────────────────────────
117
+ /**
118
+ * Pick the right registry for the site's `kind` and call `lookup`.
119
+ *
120
+ * The kind→registry mapping mirrors `mapKindToType` in `emit-references.ts`:
121
+ *
122
+ * | site.kind | primary registry | acceptedKinds source |
123
+ * |------------------|-------------------|------------------------------|
124
+ * | `call` | MethodRegistry | METHOD_KINDS (Method/Func/Ctor)
125
+ * | `inherits` | ClassRegistry | CLASS_KINDS |
126
+ * | `type-reference` | ClassRegistry | CLASS_KINDS |
127
+ * | `read`/`write` | FieldRegistry | FIELD_KINDS |
128
+ * | `import-use` | tiered fallback | METHOD ∪ CLASS ∪ FIELD |
129
+ * | `value-ref` | (skipped here) | post-finalize walker in `emitPropertyDispatchCalls` |
130
+ * | `macro` | MacroRegistry | MACRO_KINDS (`Macro` only) |
131
+ *
132
+ * `macro` has its own single-kind registry so a macro invocation
133
+ * (`log!(…)`) resolves ONLY to a `macro_rules! log` definition and never
134
+ * to a same-named free function — macros and functions are disjoint
135
+ * namespaces (the false-`CALLS`-edge class flagged in the #1934 review).
136
+ *
137
+ * `import-use` doesn't have a single registry — the imported name might
138
+ * be a class, a function, or a constant. Try each in priority order and
139
+ * return the first non-empty result. Provenance still flows through the
140
+ * scope's `bindings` (Step 1 lexical hit), so the lookup is correct
141
+ * regardless of which registry surfaces the def.
142
+ */
143
+ function lookupForSite(site, classRegistry, methodRegistry, fieldRegistry, macroRegistry) {
144
+ switch (site.kind) {
145
+ case 'call': {
146
+ const opts = {
147
+ ...(site.arity !== undefined ? { callsite: { arity: site.arity } } : {}),
148
+ ...(site.explicitReceiver !== undefined ? { explicitReceiver: site.explicitReceiver } : {}),
149
+ };
150
+ return methodRegistry.lookup(site.name, site.inScope, opts);
151
+ }
152
+ case 'inherits':
153
+ case 'type-reference': {
154
+ return classRegistry.lookup(site.name, site.inScope);
155
+ }
156
+ case 'read':
157
+ case 'write': {
158
+ // Try field first; fall through to method then class so bare-name
159
+ // reads of a function (e.g. `cb = save`) still resolve.
160
+ const fieldOpts = {
161
+ ...(site.explicitReceiver !== undefined ? { explicitReceiver: site.explicitReceiver } : {}),
162
+ };
163
+ const fieldHits = fieldRegistry.lookup(site.name, site.inScope, fieldOpts);
164
+ if (fieldHits.length > 0)
165
+ return fieldHits;
166
+ const methodHits = methodRegistry.lookup(site.name, site.inScope);
167
+ if (methodHits.length > 0)
168
+ return methodHits;
169
+ return classRegistry.lookup(site.name, site.inScope);
170
+ }
171
+ case 'import-use': {
172
+ // Try class, method, then field. The lexical-hit Step 1 in
173
+ // `lookupCore` handles the actual binding lookup; the choice of
174
+ // registry only narrows `acceptedKinds`.
175
+ const classHits = classRegistry.lookup(site.name, site.inScope);
176
+ if (classHits.length > 0)
177
+ return classHits;
178
+ const methodHits = methodRegistry.lookup(site.name, site.inScope);
179
+ if (methodHits.length > 0)
180
+ return methodHits;
181
+ return fieldRegistry.lookup(site.name, site.inScope);
182
+ }
183
+ case 'value-ref': {
184
+ // Unreachable — filtered before lookup (post-finalize resolution in
185
+ // `emitPropertyDispatchCalls`, #2437). Kept for switch exhaustiveness.
186
+ return [];
187
+ }
188
+ case 'macro': {
189
+ // Macro-only namespace: resolves against `Macro`-labeled defs, never
190
+ // functions. No receiver, no arity — see `MacroRegistry`.
191
+ return macroRegistry.lookup(site.name, site.inScope);
192
+ }
193
+ }
194
+ }
195
+ /** Compose a `Reference` record from a site + its top resolution. */
196
+ function buildReference(site, top) {
197
+ return {
198
+ fromScope: site.inScope,
199
+ toDef: top.def.nodeId,
200
+ atRange: site.atRange,
201
+ kind: site.kind,
202
+ confidence: top.confidence,
203
+ evidence: top.evidence,
204
+ };
205
+ }