cgraphx 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (680) hide show
  1. package/dist/core/code/engine/cli/analyze-config.js +320 -0
  2. package/dist/core/code/engine/cli/analyze.js +1086 -0
  3. package/dist/core/code/engine/cli/cli-message.js +83 -0
  4. package/dist/core/code/engine/cli/detect-changes-format.js +58 -0
  5. package/dist/core/code/engine/cli/embedding-dims.js +43 -0
  6. package/dist/core/code/engine/cli/format-elapsed.js +12 -0
  7. package/dist/core/code/engine/cli/help-i18n.js +144 -0
  8. package/dist/core/code/engine/cli/i18n/en.js +110 -0
  9. package/dist/core/code/engine/cli/i18n/index.js +47 -0
  10. package/dist/core/code/engine/cli/i18n/resources.js +9 -0
  11. package/dist/core/code/engine/cli/i18n/zh-CN.js +110 -0
  12. package/dist/core/code/engine/cli/lazy-action.js +67 -0
  13. package/dist/core/code/engine/cli/optional-grammars.js +136 -0
  14. package/dist/core/code/engine/cli/resolve-invocation.js +76 -0
  15. package/dist/core/code/engine/cli/status.js +156 -0
  16. package/dist/core/code/engine/cli/tool.js +384 -0
  17. package/dist/core/code/engine/config/ignore-service.js +511 -0
  18. package/dist/core/code/engine/config/supported-languages.js +17 -0
  19. package/dist/core/code/engine/core/analysis-features.js +64 -0
  20. package/dist/core/code/engine/core/analyzer-identity.js +2171 -0
  21. package/dist/core/code/engine/core/git-staleness.js +180 -0
  22. package/dist/core/code/engine/core/graph/graph.js +180 -0
  23. package/dist/core/code/engine/core/graph/import-cycles.js +106 -0
  24. package/dist/core/code/engine/core/graph/types.js +2 -0
  25. package/dist/core/code/engine/core/index-freshness.js +12 -0
  26. package/dist/core/code/engine/core/ingestion/binding-accumulator.js +341 -0
  27. package/dist/core/code/engine/core/ingestion/call-extractors/configs/c-cpp.js +168 -0
  28. package/dist/core/code/engine/core/ingestion/call-extractors/configs/csharp.js +9 -0
  29. package/dist/core/code/engine/core/ingestion/call-extractors/configs/dart.js +8 -0
  30. package/dist/core/code/engine/core/ingestion/call-extractors/configs/go.js +8 -0
  31. package/dist/core/code/engine/core/ingestion/call-extractors/configs/jvm.js +54 -0
  32. package/dist/core/code/engine/core/ingestion/call-extractors/configs/php.js +8 -0
  33. package/dist/core/code/engine/core/ingestion/call-extractors/configs/python.js +8 -0
  34. package/dist/core/code/engine/core/ingestion/call-extractors/configs/ruby.js +8 -0
  35. package/dist/core/code/engine/core/ingestion/call-extractors/configs/rust.js +8 -0
  36. package/dist/core/code/engine/core/ingestion/call-extractors/configs/swift.js +8 -0
  37. package/dist/core/code/engine/core/ingestion/call-extractors/configs/typescript-javascript.js +11 -0
  38. package/dist/core/code/engine/core/ingestion/call-extractors/generic.js +62 -0
  39. package/dist/core/code/engine/core/ingestion/call-processor.js +503 -0
  40. package/dist/core/code/engine/core/ingestion/call-routing.js +98 -0
  41. package/dist/core/code/engine/core/ingestion/call-types.js +3 -0
  42. package/dist/core/code/engine/core/ingestion/cfg/callee-cell-format.js +45 -0
  43. package/dist/core/code/engine/core/ingestion/cfg/cfg-builder.js +202 -0
  44. package/dist/core/code/engine/core/ingestion/cfg/collect.js +81 -0
  45. package/dist/core/code/engine/core/ingestion/cfg/control-dependence.js +185 -0
  46. package/dist/core/code/engine/core/ingestion/cfg/control-flow-context.js +130 -0
  47. package/dist/core/code/engine/core/ingestion/cfg/emit.js +646 -0
  48. package/dist/core/code/engine/core/ingestion/cfg/post-dominators.js +182 -0
  49. package/dist/core/code/engine/core/ingestion/cfg/reaching-def-reason-codec.js +139 -0
  50. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs-graph.js +322 -0
  51. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs.js +792 -0
  52. package/dist/core/code/engine/core/ingestion/cfg/synthetic-escape.js +305 -0
  53. package/dist/core/code/engine/core/ingestion/cfg/traversal-result.js +6 -0
  54. package/dist/core/code/engine/core/ingestion/cfg/types.js +14 -0
  55. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp-harvest.js +545 -0
  56. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp.js +590 -0
  57. package/dist/core/code/engine/core/ingestion/cfg/visitors/call-site-harvest.js +356 -0
  58. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp-harvest.js +593 -0
  59. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp.js +871 -0
  60. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart-harvest.js +874 -0
  61. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart.js +840 -0
  62. package/dist/core/code/engine/core/ingestion/cfg/visitors/go-harvest.js +625 -0
  63. package/dist/core/code/engine/core/ingestion/cfg/visitors/go.js +642 -0
  64. package/dist/core/code/engine/core/ingestion/cfg/visitors/java-harvest.js +517 -0
  65. package/dist/core/code/engine/core/ingestion/cfg/visitors/java.js +816 -0
  66. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin-harvest.js +723 -0
  67. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin.js +813 -0
  68. package/dist/core/code/engine/core/ingestion/cfg/visitors/php-harvest.js +630 -0
  69. package/dist/core/code/engine/core/ingestion/cfg/visitors/php.js +725 -0
  70. package/dist/core/code/engine/core/ingestion/cfg/visitors/python-harvest.js +776 -0
  71. package/dist/core/code/engine/core/ingestion/cfg/visitors/python.js +562 -0
  72. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby-harvest.js +591 -0
  73. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby.js +760 -0
  74. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust-harvest.js +877 -0
  75. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust.js +562 -0
  76. package/dist/core/code/engine/core/ingestion/cfg/visitors/scope-tree-harvest.js +120 -0
  77. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift-harvest.js +683 -0
  78. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift.js +791 -0
  79. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript-harvest.js +1060 -0
  80. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript.js +587 -0
  81. package/dist/core/code/engine/core/ingestion/class-extractors/configs/c-cpp.js +77 -0
  82. package/dist/core/code/engine/core/ingestion/class-extractors/configs/csharp.js +24 -0
  83. package/dist/core/code/engine/core/ingestion/class-extractors/configs/dart.js +10 -0
  84. package/dist/core/code/engine/core/ingestion/class-extractors/configs/go.js +28 -0
  85. package/dist/core/code/engine/core/ingestion/class-extractors/configs/jvm.js +67 -0
  86. package/dist/core/code/engine/core/ingestion/class-extractors/configs/php.js +10 -0
  87. package/dist/core/code/engine/core/ingestion/class-extractors/configs/python.js +10 -0
  88. package/dist/core/code/engine/core/ingestion/class-extractors/configs/ruby.js +13 -0
  89. package/dist/core/code/engine/core/ingestion/class-extractors/configs/rust.js +10 -0
  90. package/dist/core/code/engine/core/ingestion/class-extractors/configs/swift.js +21 -0
  91. package/dist/core/code/engine/core/ingestion/class-extractors/configs/typescript-javascript.js +31 -0
  92. package/dist/core/code/engine/core/ingestion/class-extractors/generic.js +144 -0
  93. package/dist/core/code/engine/core/ingestion/class-types.js +2 -0
  94. package/dist/core/code/engine/core/ingestion/cluster-enricher.js +174 -0
  95. package/dist/core/code/engine/core/ingestion/community-processor.js +604 -0
  96. package/dist/core/code/engine/core/ingestion/constants.js +26 -0
  97. package/dist/core/code/engine/core/ingestion/cpp-ue-preprocessor.js +263 -0
  98. package/dist/core/code/engine/core/ingestion/csharp-namespace-gate.js +133 -0
  99. package/dist/core/code/engine/core/ingestion/di-extractors/index.js +38 -0
  100. package/dist/core/code/engine/core/ingestion/di-extractors/spring.js +310 -0
  101. package/dist/core/code/engine/core/ingestion/emit-references.js +244 -0
  102. package/dist/core/code/engine/core/ingestion/entry-point-scoring.js +201 -0
  103. package/dist/core/code/engine/core/ingestion/export-detection.js +244 -0
  104. package/dist/core/code/engine/core/ingestion/field-extractor.js +29 -0
  105. package/dist/core/code/engine/core/ingestion/field-extractors/configs/c-cpp.js +107 -0
  106. package/dist/core/code/engine/core/ingestion/field-extractors/configs/csharp.js +124 -0
  107. package/dist/core/code/engine/core/ingestion/field-extractors/configs/dart.js +99 -0
  108. package/dist/core/code/engine/core/ingestion/field-extractors/configs/go.js +102 -0
  109. package/dist/core/code/engine/core/ingestion/field-extractors/configs/helpers.js +198 -0
  110. package/dist/core/code/engine/core/ingestion/field-extractors/configs/jvm.js +172 -0
  111. package/dist/core/code/engine/core/ingestion/field-extractors/configs/php.js +67 -0
  112. package/dist/core/code/engine/core/ingestion/field-extractors/configs/python.js +94 -0
  113. package/dist/core/code/engine/core/ingestion/field-extractors/configs/ruby.js +79 -0
  114. package/dist/core/code/engine/core/ingestion/field-extractors/configs/rust.js +55 -0
  115. package/dist/core/code/engine/core/ingestion/field-extractors/configs/swift.js +93 -0
  116. package/dist/core/code/engine/core/ingestion/field-extractors/configs/typescript-javascript.js +59 -0
  117. package/dist/core/code/engine/core/ingestion/field-extractors/generic.js +147 -0
  118. package/dist/core/code/engine/core/ingestion/field-extractors/typescript.js +266 -0
  119. package/dist/core/code/engine/core/ingestion/field-types.js +3 -0
  120. package/dist/core/code/engine/core/ingestion/filesystem-walker.js +136 -0
  121. package/dist/core/code/engine/core/ingestion/finalize-orchestrator.js +159 -0
  122. package/dist/core/code/engine/core/ingestion/framework-detection.js +432 -0
  123. package/dist/core/code/engine/core/ingestion/frameworks/spring/analysis-features.js +38 -0
  124. package/dist/core/code/engine/core/ingestion/frameworks/spring/annotation-arguments.js +234 -0
  125. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop-candidates.js +88 -0
  126. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop.js +487 -0
  127. package/dist/core/code/engine/core/ingestion/frameworks/spring/auto-configuration.js +21 -0
  128. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-candidates.js +189 -0
  129. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-catalog.js +32 -0
  130. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-factories.js +73 -0
  131. package/dist/core/code/engine/core/ingestion/frameworks/spring/conditionals.js +323 -0
  132. package/dist/core/code/engine/core/ingestion/frameworks/spring/config-bindings.js +119 -0
  133. package/dist/core/code/engine/core/ingestion/frameworks/spring/di-metadata.js +385 -0
  134. package/dist/core/code/engine/core/ingestion/frameworks/spring/resource-injection.js +96 -0
  135. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/c-cpp.js +17 -0
  136. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/csharp.js +46 -0
  137. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/dart.js +59 -0
  138. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/go.js +30 -0
  139. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/jvm.js +73 -0
  140. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/php.js +19 -0
  141. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/python.js +45 -0
  142. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/ruby.js +20 -0
  143. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/rust.js +58 -0
  144. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/swift.js +94 -0
  145. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/typescript-javascript.js +26 -0
  146. package/dist/core/code/engine/core/ingestion/import-resolvers/csharp.js +128 -0
  147. package/dist/core/code/engine/core/ingestion/import-resolvers/go.js +50 -0
  148. package/dist/core/code/engine/core/ingestion/import-resolvers/jvm.js +112 -0
  149. package/dist/core/code/engine/core/ingestion/import-resolvers/php.js +80 -0
  150. package/dist/core/code/engine/core/ingestion/import-resolvers/python.js +75 -0
  151. package/dist/core/code/engine/core/ingestion/import-resolvers/resolver-factory.js +36 -0
  152. package/dist/core/code/engine/core/ingestion/import-resolvers/ruby.js +20 -0
  153. package/dist/core/code/engine/core/ingestion/import-resolvers/rust.js +79 -0
  154. package/dist/core/code/engine/core/ingestion/import-resolvers/standard.js +180 -0
  155. package/dist/core/code/engine/core/ingestion/import-resolvers/types.js +7 -0
  156. package/dist/core/code/engine/core/ingestion/import-resolvers/utils.js +153 -0
  157. package/dist/core/code/engine/core/ingestion/import-target-adapter.js +99 -0
  158. package/dist/core/code/engine/core/ingestion/language-config.js +391 -0
  159. package/dist/core/code/engine/core/ingestion/language-provider.js +25 -0
  160. package/dist/core/code/engine/core/ingestion/languages/c/arity-metadata.js +98 -0
  161. package/dist/core/code/engine/core/ingestion/languages/c/arity.js +21 -0
  162. package/dist/core/code/engine/core/ingestion/languages/c/capture-side-channel.js +69 -0
  163. package/dist/core/code/engine/core/ingestion/languages/c/captures.js +189 -0
  164. package/dist/core/code/engine/core/ingestion/languages/c/header-scan.js +58 -0
  165. package/dist/core/code/engine/core/ingestion/languages/c/import-decomposer.js +68 -0
  166. package/dist/core/code/engine/core/ingestion/languages/c/import-target.js +103 -0
  167. package/dist/core/code/engine/core/ingestion/languages/c/index.js +33 -0
  168. package/dist/core/code/engine/core/ingestion/languages/c/interpret.js +53 -0
  169. package/dist/core/code/engine/core/ingestion/languages/c/merge-bindings.js +26 -0
  170. package/dist/core/code/engine/core/ingestion/languages/c/query.js +210 -0
  171. package/dist/core/code/engine/core/ingestion/languages/c/scope-resolver.js +112 -0
  172. package/dist/core/code/engine/core/ingestion/languages/c/simple-hooks.js +24 -0
  173. package/dist/core/code/engine/core/ingestion/languages/c/static-linkage.js +109 -0
  174. package/dist/core/code/engine/core/ingestion/languages/c-cpp.js +506 -0
  175. package/dist/core/code/engine/core/ingestion/languages/cpp/adl.js +804 -0
  176. package/dist/core/code/engine/core/ingestion/languages/cpp/arity-metadata.js +258 -0
  177. package/dist/core/code/engine/core/ingestion/languages/cpp/arity.js +37 -0
  178. package/dist/core/code/engine/core/ingestion/languages/cpp/capture-side-channel.js +89 -0
  179. package/dist/core/code/engine/core/ingestion/languages/cpp/captures.js +1975 -0
  180. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-extractor.js +311 -0
  181. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-filter.js +210 -0
  182. package/dist/core/code/engine/core/ingestion/languages/cpp/conversion-rank.js +163 -0
  183. package/dist/core/code/engine/core/ingestion/languages/cpp/file-local-linkage.js +327 -0
  184. package/dist/core/code/engine/core/ingestion/languages/cpp/header-scan.js +53 -0
  185. package/dist/core/code/engine/core/ingestion/languages/cpp/import-decomposer.js +134 -0
  186. package/dist/core/code/engine/core/ingestion/languages/cpp/import-target.js +16 -0
  187. package/dist/core/code/engine/core/ingestion/languages/cpp/index.js +33 -0
  188. package/dist/core/code/engine/core/ingestion/languages/cpp/inline-namespaces.js +379 -0
  189. package/dist/core/code/engine/core/ingestion/languages/cpp/interpret.js +239 -0
  190. package/dist/core/code/engine/core/ingestion/languages/cpp/member-lookup.js +470 -0
  191. package/dist/core/code/engine/core/ingestion/languages/cpp/merge-bindings.js +32 -0
  192. package/dist/core/code/engine/core/ingestion/languages/cpp/query.js +763 -0
  193. package/dist/core/code/engine/core/ingestion/languages/cpp/range-bindings.js +230 -0
  194. package/dist/core/code/engine/core/ingestion/languages/cpp/scope-resolver.js +354 -0
  195. package/dist/core/code/engine/core/ingestion/languages/cpp/simple-hooks.js +67 -0
  196. package/dist/core/code/engine/core/ingestion/languages/cpp/two-phase-lookup.js +348 -0
  197. package/dist/core/code/engine/core/ingestion/languages/cpp/type-classifier.js +56 -0
  198. package/dist/core/code/engine/core/ingestion/languages/cpp/user-defined-conversions.js +128 -0
  199. package/dist/core/code/engine/core/ingestion/languages/csharp/accessor-unwrap.js +67 -0
  200. package/dist/core/code/engine/core/ingestion/languages/csharp/arity-metadata.js +49 -0
  201. package/dist/core/code/engine/core/ingestion/languages/csharp/arity.js +40 -0
  202. package/dist/core/code/engine/core/ingestion/languages/csharp/cache-stats.js +32 -0
  203. package/dist/core/code/engine/core/ingestion/languages/csharp/captures.js +557 -0
  204. package/dist/core/code/engine/core/ingestion/languages/csharp/import-decomposer.js +96 -0
  205. package/dist/core/code/engine/core/ingestion/languages/csharp/import-target.js +176 -0
  206. package/dist/core/code/engine/core/ingestion/languages/csharp/index.js +95 -0
  207. package/dist/core/code/engine/core/ingestion/languages/csharp/interpret.js +150 -0
  208. package/dist/core/code/engine/core/ingestion/languages/csharp/merge-bindings.js +58 -0
  209. package/dist/core/code/engine/core/ingestion/languages/csharp/namespace-siblings.js +708 -0
  210. package/dist/core/code/engine/core/ingestion/languages/csharp/qualified-type-names.js +62 -0
  211. package/dist/core/code/engine/core/ingestion/languages/csharp/query.js +578 -0
  212. package/dist/core/code/engine/core/ingestion/languages/csharp/receiver-binding.js +142 -0
  213. package/dist/core/code/engine/core/ingestion/languages/csharp/resolution-config.js +18 -0
  214. package/dist/core/code/engine/core/ingestion/languages/csharp/scope-resolver.js +84 -0
  215. package/dist/core/code/engine/core/ingestion/languages/csharp/simple-hooks.js +81 -0
  216. package/dist/core/code/engine/core/ingestion/languages/csharp.js +204 -0
  217. package/dist/core/code/engine/core/ingestion/languages/dart/arity-metadata.js +38 -0
  218. package/dist/core/code/engine/core/ingestion/languages/dart/arity.js +34 -0
  219. package/dist/core/code/engine/core/ingestion/languages/dart/built-ins.js +37 -0
  220. package/dist/core/code/engine/core/ingestion/languages/dart/cache-stats.js +30 -0
  221. package/dist/core/code/engine/core/ingestion/languages/dart/captures.js +1096 -0
  222. package/dist/core/code/engine/core/ingestion/languages/dart/expand-wildcards.js +34 -0
  223. package/dist/core/code/engine/core/ingestion/languages/dart/extension-type-preprocess.js +33 -0
  224. package/dist/core/code/engine/core/ingestion/languages/dart/import-target.js +68 -0
  225. package/dist/core/code/engine/core/ingestion/languages/dart/index.js +45 -0
  226. package/dist/core/code/engine/core/ingestion/languages/dart/interpret.js +101 -0
  227. package/dist/core/code/engine/core/ingestion/languages/dart/merge-bindings.js +42 -0
  228. package/dist/core/code/engine/core/ingestion/languages/dart/query.js +246 -0
  229. package/dist/core/code/engine/core/ingestion/languages/dart/receiver-binding.js +90 -0
  230. package/dist/core/code/engine/core/ingestion/languages/dart/scope-resolver.js +197 -0
  231. package/dist/core/code/engine/core/ingestion/languages/dart/signature-bindings.js +54 -0
  232. package/dist/core/code/engine/core/ingestion/languages/dart/simple-hooks.js +61 -0
  233. package/dist/core/code/engine/core/ingestion/languages/dart.js +138 -0
  234. package/dist/core/code/engine/core/ingestion/languages/go/arity-metadata.js +71 -0
  235. package/dist/core/code/engine/core/ingestion/languages/go/arity.js +17 -0
  236. package/dist/core/code/engine/core/ingestion/languages/go/cache-stats.js +21 -0
  237. package/dist/core/code/engine/core/ingestion/languages/go/captures.js +492 -0
  238. package/dist/core/code/engine/core/ingestion/languages/go/expand-wildcards.js +97 -0
  239. package/dist/core/code/engine/core/ingestion/languages/go/generic-type-parameters.js +146 -0
  240. package/dist/core/code/engine/core/ingestion/languages/go/import-decomposer.js +47 -0
  241. package/dist/core/code/engine/core/ingestion/languages/go/import-target.js +70 -0
  242. package/dist/core/code/engine/core/ingestion/languages/go/index.js +39 -0
  243. package/dist/core/code/engine/core/ingestion/languages/go/interface-impls.js +955 -0
  244. package/dist/core/code/engine/core/ingestion/languages/go/interpret.js +177 -0
  245. package/dist/core/code/engine/core/ingestion/languages/go/merge-bindings.js +21 -0
  246. package/dist/core/code/engine/core/ingestion/languages/go/method-owners.js +131 -0
  247. package/dist/core/code/engine/core/ingestion/languages/go/namespace-mirror.js +56 -0
  248. package/dist/core/code/engine/core/ingestion/languages/go/package-clause.js +79 -0
  249. package/dist/core/code/engine/core/ingestion/languages/go/package-siblings.js +83 -0
  250. package/dist/core/code/engine/core/ingestion/languages/go/query.js +298 -0
  251. package/dist/core/code/engine/core/ingestion/languages/go/range-binding.js +127 -0
  252. package/dist/core/code/engine/core/ingestion/languages/go/receiver-binding.js +24 -0
  253. package/dist/core/code/engine/core/ingestion/languages/go/scope-resolver.js +75 -0
  254. package/dist/core/code/engine/core/ingestion/languages/go/simple-hooks.js +31 -0
  255. package/dist/core/code/engine/core/ingestion/languages/go/type-binding.js +279 -0
  256. package/dist/core/code/engine/core/ingestion/languages/go.js +160 -0
  257. package/dist/core/code/engine/core/ingestion/languages/index.js +66 -0
  258. package/dist/core/code/engine/core/ingestion/languages/java/analysis-features.js +16 -0
  259. package/dist/core/code/engine/core/ingestion/languages/java/arity-metadata.js +43 -0
  260. package/dist/core/code/engine/core/ingestion/languages/java/arity.js +27 -0
  261. package/dist/core/code/engine/core/ingestion/languages/java/cache-stats.js +32 -0
  262. package/dist/core/code/engine/core/ingestion/languages/java/capture-side-channel.js +123 -0
  263. package/dist/core/code/engine/core/ingestion/languages/java/captures.js +791 -0
  264. package/dist/core/code/engine/core/ingestion/languages/java/import-decomposer.js +88 -0
  265. package/dist/core/code/engine/core/ingestion/languages/java/import-target.js +103 -0
  266. package/dist/core/code/engine/core/ingestion/languages/java/index.js +43 -0
  267. package/dist/core/code/engine/core/ingestion/languages/java/interpret.js +146 -0
  268. package/dist/core/code/engine/core/ingestion/languages/java/merge-bindings.js +43 -0
  269. package/dist/core/code/engine/core/ingestion/languages/java/package-facts.js +16 -0
  270. package/dist/core/code/engine/core/ingestion/languages/java/package-siblings.js +11 -0
  271. package/dist/core/code/engine/core/ingestion/languages/java/query.js +319 -0
  272. package/dist/core/code/engine/core/ingestion/languages/java/receiver-binding.js +98 -0
  273. package/dist/core/code/engine/core/ingestion/languages/java/scope-resolver.js +213 -0
  274. package/dist/core/code/engine/core/ingestion/languages/java/simple-hooks.js +39 -0
  275. package/dist/core/code/engine/core/ingestion/languages/java/spring-aop.js +53 -0
  276. package/dist/core/code/engine/core/ingestion/languages/java/spring-bean-metadata.js +11 -0
  277. package/dist/core/code/engine/core/ingestion/languages/java/spring-conditionals.js +52 -0
  278. package/dist/core/code/engine/core/ingestion/languages/java/spring-config-bindings.js +222 -0
  279. package/dist/core/code/engine/core/ingestion/languages/java/spring-di.js +165 -0
  280. package/dist/core/code/engine/core/ingestion/languages/java.js +192 -0
  281. package/dist/core/code/engine/core/ingestion/languages/javascript/arity.js +15 -0
  282. package/dist/core/code/engine/core/ingestion/languages/javascript/captures.js +1122 -0
  283. package/dist/core/code/engine/core/ingestion/languages/javascript/import-target.js +56 -0
  284. package/dist/core/code/engine/core/ingestion/languages/javascript/index.js +109 -0
  285. package/dist/core/code/engine/core/ingestion/languages/javascript/interpret.js +45 -0
  286. package/dist/core/code/engine/core/ingestion/languages/javascript/merge-bindings.js +21 -0
  287. package/dist/core/code/engine/core/ingestion/languages/javascript/query.js +659 -0
  288. package/dist/core/code/engine/core/ingestion/languages/javascript/scope-resolver.js +78 -0
  289. package/dist/core/code/engine/core/ingestion/languages/javascript/simple-hooks.js +44 -0
  290. package/dist/core/code/engine/core/ingestion/languages/jvm/package-facts.js +46 -0
  291. package/dist/core/code/engine/core/ingestion/languages/jvm/package-siblings.js +200 -0
  292. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity-metadata.js +23 -0
  293. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity.js +18 -0
  294. package/dist/core/code/engine/core/ingestion/languages/kotlin/cache-stats.js +21 -0
  295. package/dist/core/code/engine/core/ingestion/languages/kotlin/capture-side-channel.js +160 -0
  296. package/dist/core/code/engine/core/ingestion/languages/kotlin/captures.js +1262 -0
  297. package/dist/core/code/engine/core/ingestion/languages/kotlin/companion-scopes.js +72 -0
  298. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-decomposer.js +40 -0
  299. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-target.js +135 -0
  300. package/dist/core/code/engine/core/ingestion/languages/kotlin/index.js +26 -0
  301. package/dist/core/code/engine/core/ingestion/languages/kotlin/interpret.js +75 -0
  302. package/dist/core/code/engine/core/ingestion/languages/kotlin/merge-bindings.js +28 -0
  303. package/dist/core/code/engine/core/ingestion/languages/kotlin/owners.js +134 -0
  304. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-facts.js +16 -0
  305. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-siblings.js +11 -0
  306. package/dist/core/code/engine/core/ingestion/languages/kotlin/query.js +243 -0
  307. package/dist/core/code/engine/core/ingestion/languages/kotlin/receiver-binding.js +103 -0
  308. package/dist/core/code/engine/core/ingestion/languages/kotlin/scope-resolver.js +207 -0
  309. package/dist/core/code/engine/core/ingestion/languages/kotlin/simple-hooks.js +42 -0
  310. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-aop.js +68 -0
  311. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-bean-metadata.js +11 -0
  312. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-conditionals.js +53 -0
  313. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-di.js +304 -0
  314. package/dist/core/code/engine/core/ingestion/languages/kotlin.js +189 -0
  315. package/dist/core/code/engine/core/ingestion/languages/php/arity-metadata.js +66 -0
  316. package/dist/core/code/engine/core/ingestion/languages/php/arity.js +43 -0
  317. package/dist/core/code/engine/core/ingestion/languages/php/cache-stats.js +32 -0
  318. package/dist/core/code/engine/core/ingestion/languages/php/captures.js +1166 -0
  319. package/dist/core/code/engine/core/ingestion/languages/php/import-decomposer.js +238 -0
  320. package/dist/core/code/engine/core/ingestion/languages/php/import-target.js +213 -0
  321. package/dist/core/code/engine/core/ingestion/languages/php/index.js +85 -0
  322. package/dist/core/code/engine/core/ingestion/languages/php/interpret.js +256 -0
  323. package/dist/core/code/engine/core/ingestion/languages/php/merge-bindings.js +50 -0
  324. package/dist/core/code/engine/core/ingestion/languages/php/namespace-siblings.js +353 -0
  325. package/dist/core/code/engine/core/ingestion/languages/php/query.js +391 -0
  326. package/dist/core/code/engine/core/ingestion/languages/php/receiver-binding.js +135 -0
  327. package/dist/core/code/engine/core/ingestion/languages/php/scope-resolver.js +361 -0
  328. package/dist/core/code/engine/core/ingestion/languages/php/simple-hooks.js +116 -0
  329. package/dist/core/code/engine/core/ingestion/languages/php.js +302 -0
  330. package/dist/core/code/engine/core/ingestion/languages/python/arity-metadata.js +49 -0
  331. package/dist/core/code/engine/core/ingestion/languages/python/arity.js +41 -0
  332. package/dist/core/code/engine/core/ingestion/languages/python/cache-stats.js +34 -0
  333. package/dist/core/code/engine/core/ingestion/languages/python/captures.js +299 -0
  334. package/dist/core/code/engine/core/ingestion/languages/python/depends-references.js +68 -0
  335. package/dist/core/code/engine/core/ingestion/languages/python/import-decomposer.js +115 -0
  336. package/dist/core/code/engine/core/ingestion/languages/python/import-target.js +440 -0
  337. package/dist/core/code/engine/core/ingestion/languages/python/index-stats.js +30 -0
  338. package/dist/core/code/engine/core/ingestion/languages/python/index.js +96 -0
  339. package/dist/core/code/engine/core/ingestion/languages/python/interpret.js +430 -0
  340. package/dist/core/code/engine/core/ingestion/languages/python/merge-bindings.js +47 -0
  341. package/dist/core/code/engine/core/ingestion/languages/python/query.js +323 -0
  342. package/dist/core/code/engine/core/ingestion/languages/python/receiver-binding.js +310 -0
  343. package/dist/core/code/engine/core/ingestion/languages/python/scope-resolver.js +80 -0
  344. package/dist/core/code/engine/core/ingestion/languages/python/simple-hooks.js +53 -0
  345. package/dist/core/code/engine/core/ingestion/languages/python.js +140 -0
  346. package/dist/core/code/engine/core/ingestion/languages/ruby/arity.js +41 -0
  347. package/dist/core/code/engine/core/ingestion/languages/ruby/cache-stats.js +21 -0
  348. package/dist/core/code/engine/core/ingestion/languages/ruby/captures.js +864 -0
  349. package/dist/core/code/engine/core/ingestion/languages/ruby/import-target.js +88 -0
  350. package/dist/core/code/engine/core/ingestion/languages/ruby/index.js +29 -0
  351. package/dist/core/code/engine/core/ingestion/languages/ruby/interpret.js +115 -0
  352. package/dist/core/code/engine/core/ingestion/languages/ruby/merge-bindings.js +21 -0
  353. package/dist/core/code/engine/core/ingestion/languages/ruby/query.js +349 -0
  354. package/dist/core/code/engine/core/ingestion/languages/ruby/receiver-binding.js +70 -0
  355. package/dist/core/code/engine/core/ingestion/languages/ruby/scope-resolver.js +263 -0
  356. package/dist/core/code/engine/core/ingestion/languages/ruby/simple-hooks.js +68 -0
  357. package/dist/core/code/engine/core/ingestion/languages/ruby.js +215 -0
  358. package/dist/core/code/engine/core/ingestion/languages/rust/arity.js +16 -0
  359. package/dist/core/code/engine/core/ingestion/languages/rust/cache-stats.js +21 -0
  360. package/dist/core/code/engine/core/ingestion/languages/rust/captures.js +304 -0
  361. package/dist/core/code/engine/core/ingestion/languages/rust/import-decomposer.js +167 -0
  362. package/dist/core/code/engine/core/ingestion/languages/rust/import-target.js +108 -0
  363. package/dist/core/code/engine/core/ingestion/languages/rust/index.js +29 -0
  364. package/dist/core/code/engine/core/ingestion/languages/rust/interpret.js +201 -0
  365. package/dist/core/code/engine/core/ingestion/languages/rust/merge-bindings.js +21 -0
  366. package/dist/core/code/engine/core/ingestion/languages/rust/method-owners.js +76 -0
  367. package/dist/core/code/engine/core/ingestion/languages/rust/module-path.js +222 -0
  368. package/dist/core/code/engine/core/ingestion/languages/rust/qualified-call.js +482 -0
  369. package/dist/core/code/engine/core/ingestion/languages/rust/query.js +280 -0
  370. package/dist/core/code/engine/core/ingestion/languages/rust/range-binding.js +687 -0
  371. package/dist/core/code/engine/core/ingestion/languages/rust/receiver-binding.js +148 -0
  372. package/dist/core/code/engine/core/ingestion/languages/rust/scope-resolver.js +151 -0
  373. package/dist/core/code/engine/core/ingestion/languages/rust/simple-hooks.js +32 -0
  374. package/dist/core/code/engine/core/ingestion/languages/rust.js +183 -0
  375. package/dist/core/code/engine/core/ingestion/languages/swift/arity-metadata.js +44 -0
  376. package/dist/core/code/engine/core/ingestion/languages/swift/arity.js +45 -0
  377. package/dist/core/code/engine/core/ingestion/languages/swift/base-type.js +30 -0
  378. package/dist/core/code/engine/core/ingestion/languages/swift/cache-stats.js +32 -0
  379. package/dist/core/code/engine/core/ingestion/languages/swift/captures.js +594 -0
  380. package/dist/core/code/engine/core/ingestion/languages/swift/conditional-directive-preprocess.js +256 -0
  381. package/dist/core/code/engine/core/ingestion/languages/swift/implicit-imports.js +60 -0
  382. package/dist/core/code/engine/core/ingestion/languages/swift/import-decomposer.js +87 -0
  383. package/dist/core/code/engine/core/ingestion/languages/swift/import-target.js +84 -0
  384. package/dist/core/code/engine/core/ingestion/languages/swift/index.js +56 -0
  385. package/dist/core/code/engine/core/ingestion/languages/swift/interpret.js +93 -0
  386. package/dist/core/code/engine/core/ingestion/languages/swift/merge-bindings.js +51 -0
  387. package/dist/core/code/engine/core/ingestion/languages/swift/query.js +226 -0
  388. package/dist/core/code/engine/core/ingestion/languages/swift/receiver-binding.js +169 -0
  389. package/dist/core/code/engine/core/ingestion/languages/swift/scope-resolver.js +192 -0
  390. package/dist/core/code/engine/core/ingestion/languages/swift/sibling-type-bindings.js +68 -0
  391. package/dist/core/code/engine/core/ingestion/languages/swift/signature-bindings.js +69 -0
  392. package/dist/core/code/engine/core/ingestion/languages/swift/simple-hooks.js +65 -0
  393. package/dist/core/code/engine/core/ingestion/languages/swift/target-grouping.js +97 -0
  394. package/dist/core/code/engine/core/ingestion/languages/swift/target-siblings.js +74 -0
  395. package/dist/core/code/engine/core/ingestion/languages/swift.js +246 -0
  396. package/dist/core/code/engine/core/ingestion/languages/typescript/arity-metadata.js +106 -0
  397. package/dist/core/code/engine/core/ingestion/languages/typescript/arity.js +57 -0
  398. package/dist/core/code/engine/core/ingestion/languages/typescript/array-callback.js +58 -0
  399. package/dist/core/code/engine/core/ingestion/languages/typescript/cache-stats.js +34 -0
  400. package/dist/core/code/engine/core/ingestion/languages/typescript/captures.js +956 -0
  401. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-export-assignment.js +535 -0
  402. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-module-exports.js +196 -0
  403. package/dist/core/code/engine/core/ingestion/languages/typescript/import-decomposer.js +374 -0
  404. package/dist/core/code/engine/core/ingestion/languages/typescript/import-target.js +65 -0
  405. package/dist/core/code/engine/core/ingestion/languages/typescript/index.js +108 -0
  406. package/dist/core/code/engine/core/ingestion/languages/typescript/interpret.js +344 -0
  407. package/dist/core/code/engine/core/ingestion/languages/typescript/merge-bindings.js +161 -0
  408. package/dist/core/code/engine/core/ingestion/languages/typescript/nuxt-auto-imports.js +325 -0
  409. package/dist/core/code/engine/core/ingestion/languages/typescript/query.js +1328 -0
  410. package/dist/core/code/engine/core/ingestion/languages/typescript/receiver-binding.js +201 -0
  411. package/dist/core/code/engine/core/ingestion/languages/typescript/scope-resolver.js +293 -0
  412. package/dist/core/code/engine/core/ingestion/languages/typescript/simple-hooks.js +139 -0
  413. package/dist/core/code/engine/core/ingestion/languages/typescript.js +455 -0
  414. package/dist/core/code/engine/core/ingestion/languages/vue/captures.js +70 -0
  415. package/dist/core/code/engine/core/ingestion/languages/vue/import-target.js +61 -0
  416. package/dist/core/code/engine/core/ingestion/languages/vue/index.js +55 -0
  417. package/dist/core/code/engine/core/ingestion/languages/vue/scope-resolver.js +295 -0
  418. package/dist/core/code/engine/core/ingestion/languages/vue.js +96 -0
  419. package/dist/core/code/engine/core/ingestion/local-symbol-pruner.js +68 -0
  420. package/dist/core/code/engine/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
  421. package/dist/core/code/engine/core/ingestion/method-extractors/configs/csharp.js +290 -0
  422. package/dist/core/code/engine/core/ingestion/method-extractors/configs/dart.js +392 -0
  423. package/dist/core/code/engine/core/ingestion/method-extractors/configs/go.js +179 -0
  424. package/dist/core/code/engine/core/ingestion/method-extractors/configs/jvm.js +350 -0
  425. package/dist/core/code/engine/core/ingestion/method-extractors/configs/php.js +306 -0
  426. package/dist/core/code/engine/core/ingestion/method-extractors/configs/python.js +312 -0
  427. package/dist/core/code/engine/core/ingestion/method-extractors/configs/ruby.js +289 -0
  428. package/dist/core/code/engine/core/ingestion/method-extractors/configs/rust.js +198 -0
  429. package/dist/core/code/engine/core/ingestion/method-extractors/configs/swift.js +286 -0
  430. package/dist/core/code/engine/core/ingestion/method-extractors/configs/typescript-javascript.js +341 -0
  431. package/dist/core/code/engine/core/ingestion/method-extractors/generic.js +209 -0
  432. package/dist/core/code/engine/core/ingestion/method-types.js +3 -0
  433. package/dist/core/code/engine/core/ingestion/model/field-registry.js +41 -0
  434. package/dist/core/code/engine/core/ingestion/model/index.js +52 -0
  435. package/dist/core/code/engine/core/ingestion/model/method-registry.js +138 -0
  436. package/dist/core/code/engine/core/ingestion/model/owned-members-lookup.js +46 -0
  437. package/dist/core/code/engine/core/ingestion/model/registration-table.js +234 -0
  438. package/dist/core/code/engine/core/ingestion/model/resolve.js +183 -0
  439. package/dist/core/code/engine/core/ingestion/model/scope-resolution-indexes.js +43 -0
  440. package/dist/core/code/engine/core/ingestion/model/semantic-model.js +179 -0
  441. package/dist/core/code/engine/core/ingestion/model/symbol-table.js +216 -0
  442. package/dist/core/code/engine/core/ingestion/model/type-registry.js +84 -0
  443. package/dist/core/code/engine/core/ingestion/mro-processor.js +709 -0
  444. package/dist/core/code/engine/core/ingestion/parsing-processor.js +312 -0
  445. package/dist/core/code/engine/core/ingestion/pipeline-phases/communities.js +69 -0
  446. package/dist/core/code/engine/core/ingestion/pipeline-phases/cross-file.js +71 -0
  447. package/dist/core/code/engine/core/ingestion/pipeline-phases/di.js +338 -0
  448. package/dist/core/code/engine/core/ingestion/pipeline-phases/http-api-calls.js +312 -0
  449. package/dist/core/code/engine/core/ingestion/pipeline-phases/index.js +54 -0
  450. package/dist/core/code/engine/core/ingestion/pipeline-phases/mro.js +40 -0
  451. package/dist/core/code/engine/core/ingestion/pipeline-phases/orm.js +78 -0
  452. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse-impl.js +1286 -0
  453. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse.js +41 -0
  454. package/dist/core/code/engine/core/ingestion/pipeline-phases/processes.js +193 -0
  455. package/dist/core/code/engine/core/ingestion/pipeline-phases/prune-local-symbols.js +29 -0
  456. package/dist/core/code/engine/core/ingestion/pipeline-phases/registry.js +52 -0
  457. package/dist/core/code/engine/core/ingestion/pipeline-phases/routes.js +409 -0
  458. package/dist/core/code/engine/core/ingestion/pipeline-phases/rpc-edges.js +301 -0
  459. package/dist/core/code/engine/core/ingestion/pipeline-phases/runner.js +207 -0
  460. package/dist/core/code/engine/core/ingestion/pipeline-phases/scan.js +49 -0
  461. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-aop.js +442 -0
  462. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-auto-configuration.js +264 -0
  463. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-config.js +440 -0
  464. package/dist/core/code/engine/core/ingestion/pipeline-phases/structure.js +38 -0
  465. package/dist/core/code/engine/core/ingestion/pipeline-phases/tools.js +89 -0
  466. package/dist/core/code/engine/core/ingestion/pipeline-phases/types.js +40 -0
  467. package/dist/core/code/engine/core/ingestion/pipeline.js +152 -0
  468. package/dist/core/code/engine/core/ingestion/process-processor.js +325 -0
  469. package/dist/core/code/engine/core/ingestion/resolve-references.js +205 -0
  470. package/dist/core/code/engine/core/ingestion/route-extractors/constant-resolver.js +135 -0
  471. package/dist/core/code/engine/core/ingestion/route-extractors/django-root-discovery.js +221 -0
  472. package/dist/core/code/engine/core/ingestion/route-extractors/django.js +428 -0
  473. package/dist/core/code/engine/core/ingestion/route-extractors/expo.js +39 -0
  474. package/dist/core/code/engine/core/ingestion/route-extractors/fastapi-router-bindings.js +264 -0
  475. package/dist/core/code/engine/core/ingestion/route-extractors/laravel.js +501 -0
  476. package/dist/core/code/engine/core/ingestion/route-extractors/middleware.js +175 -0
  477. package/dist/core/code/engine/core/ingestion/route-extractors/nextjs.js +81 -0
  478. package/dist/core/code/engine/core/ingestion/route-extractors/php.js +25 -0
  479. package/dist/core/code/engine/core/ingestion/route-extractors/python-const-resolver.js +307 -0
  480. package/dist/core/code/engine/core/ingestion/route-extractors/response-shapes.js +299 -0
  481. package/dist/core/code/engine/core/ingestion/route-extractors/route-path.js +71 -0
  482. package/dist/core/code/engine/core/ingestion/route-extractors/spring-shared.js +310 -0
  483. package/dist/core/code/engine/core/ingestion/route-extractors/spring.js +441 -0
  484. package/dist/core/code/engine/core/ingestion/scope-extractor-bridge.js +60 -0
  485. package/dist/core/code/engine/core/ingestion/scope-extractor.js +1373 -0
  486. package/dist/core/code/engine/core/ingestion/scope-resolution/contract/scope-resolver.js +282 -0
  487. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +72 -0
  488. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/edges.js +194 -0
  489. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/ids.js +472 -0
  490. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +49 -0
  491. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +43 -0
  492. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +274 -0
  493. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +93 -0
  494. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/callable-value-flow.js +1240 -0
  495. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/compound-receiver.js +1174 -0
  496. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/free-call-fallback.js +873 -0
  497. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/imported-return-types.js +226 -0
  498. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/mro.js +107 -0
  499. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/overload-narrowing.js +441 -0
  500. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/property-dispatch.js +122 -0
  501. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1720 -0
  502. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/phase.js +395 -0
  503. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +208 -0
  504. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/registry.js +49 -0
  505. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/run.js +632 -0
  506. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +112 -0
  507. package/dist/core/code/engine/core/ingestion/scope-resolution/resolution-outcome.js +41 -0
  508. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/namespace-targets.js +81 -0
  509. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/walkers.js +1835 -0
  510. package/dist/core/code/engine/core/ingestion/scope-resolution/unresolved-receivers.js +242 -0
  511. package/dist/core/code/engine/core/ingestion/scope-resolution/utils/definition-id.js +22 -0
  512. package/dist/core/code/engine/core/ingestion/scope-resolution/workspace-index.js +151 -0
  513. package/dist/core/code/engine/core/ingestion/structure-processor.js +40 -0
  514. package/dist/core/code/engine/core/ingestion/tree-sitter-queries.js +2244 -0
  515. package/dist/core/code/engine/core/ingestion/ts-js-hoc-utils.js +115 -0
  516. package/dist/core/code/engine/core/ingestion/type-env.js +1136 -0
  517. package/dist/core/code/engine/core/ingestion/type-extractors/c-cpp.js +555 -0
  518. package/dist/core/code/engine/core/ingestion/type-extractors/csharp.js +570 -0
  519. package/dist/core/code/engine/core/ingestion/type-extractors/dart.js +372 -0
  520. package/dist/core/code/engine/core/ingestion/type-extractors/go.js +508 -0
  521. package/dist/core/code/engine/core/ingestion/type-extractors/jvm.js +875 -0
  522. package/dist/core/code/engine/core/ingestion/type-extractors/php.js +537 -0
  523. package/dist/core/code/engine/core/ingestion/type-extractors/python.js +477 -0
  524. package/dist/core/code/engine/core/ingestion/type-extractors/ruby.js +380 -0
  525. package/dist/core/code/engine/core/ingestion/type-extractors/rust.js +502 -0
  526. package/dist/core/code/engine/core/ingestion/type-extractors/shared.js +843 -0
  527. package/dist/core/code/engine/core/ingestion/type-extractors/swift.js +490 -0
  528. package/dist/core/code/engine/core/ingestion/type-extractors/types.js +2 -0
  529. package/dist/core/code/engine/core/ingestion/type-extractors/typescript.js +690 -0
  530. package/dist/core/code/engine/core/ingestion/utils/ast-helpers.js +1693 -0
  531. package/dist/core/code/engine/core/ingestion/utils/call-analysis.js +779 -0
  532. package/dist/core/code/engine/core/ingestion/utils/callable-flow-captures.js +932 -0
  533. package/dist/core/code/engine/core/ingestion/utils/callable-labels.js +49 -0
  534. package/dist/core/code/engine/core/ingestion/utils/deferred-resolution-profile.js +151 -0
  535. package/dist/core/code/engine/core/ingestion/utils/effective-ram.js +67 -0
  536. package/dist/core/code/engine/core/ingestion/utils/env.js +60 -0
  537. package/dist/core/code/engine/core/ingestion/utils/event-loop.js +9 -0
  538. package/dist/core/code/engine/core/ingestion/utils/graph-sort.js +103 -0
  539. package/dist/core/code/engine/core/ingestion/utils/heap-probe.js +45 -0
  540. package/dist/core/code/engine/core/ingestion/utils/heritage-marker.js +47 -0
  541. package/dist/core/code/engine/core/ingestion/utils/line-base.js +24 -0
  542. package/dist/core/code/engine/core/ingestion/utils/max-file-size.js +59 -0
  543. package/dist/core/code/engine/core/ingestion/utils/method-props.js +198 -0
  544. package/dist/core/code/engine/core/ingestion/utils/qualified-name.js +73 -0
  545. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-captures.js +60 -0
  546. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-codec.js +188 -0
  547. package/dist/core/code/engine/core/ingestion/utils/scope-tree-walk.js +36 -0
  548. package/dist/core/code/engine/core/ingestion/utils/symbol-labels.js +48 -0
  549. package/dist/core/code/engine/core/ingestion/utils/template-arguments.js +187 -0
  550. package/dist/core/code/engine/core/ingestion/utils/type-parameters.js +209 -0
  551. package/dist/core/code/engine/core/ingestion/utils/verbose.js +6 -0
  552. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/c-cpp.js +133 -0
  553. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/csharp.js +66 -0
  554. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/dart.js +111 -0
  555. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/go.js +153 -0
  556. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/jvm.js +145 -0
  557. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/php.js +61 -0
  558. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/python.js +104 -0
  559. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/ruby.js +55 -0
  560. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/rust.js +79 -0
  561. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/swift.js +91 -0
  562. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/typescript-javascript.js +86 -0
  563. package/dist/core/code/engine/core/ingestion/variable-extractors/generic.js +111 -0
  564. package/dist/core/code/engine/core/ingestion/variable-types.js +3 -0
  565. package/dist/core/code/engine/core/ingestion/vue-sfc-extractor.js +544 -0
  566. package/dist/core/code/engine/core/ingestion/workers/callable-id.js +122 -0
  567. package/dist/core/code/engine/core/ingestion/workers/clone-safety.js +470 -0
  568. package/dist/core/code/engine/core/ingestion/workers/parse-worker.js +2456 -0
  569. package/dist/core/code/engine/core/ingestion/workers/post-result.js +90 -0
  570. package/dist/core/code/engine/core/ingestion/workers/quarantine.js +41 -0
  571. package/dist/core/code/engine/core/ingestion/workers/result-merge.js +59 -0
  572. package/dist/core/code/engine/core/ingestion/workers/worker-pool.js +1725 -0
  573. package/dist/core/code/engine/core/ingestion/workspace-config.js +139 -0
  574. package/dist/core/code/engine/core/lbug/conn-lock.js +72 -0
  575. package/dist/core/code/engine/core/lbug/csv-generator.js +710 -0
  576. package/dist/core/code/engine/core/lbug/cypher-escape.js +24 -0
  577. package/dist/core/code/engine/core/lbug/extension-load-error.js +339 -0
  578. package/dist/core/code/engine/core/lbug/extension-loader.js +261 -0
  579. package/dist/core/code/engine/core/lbug/graph-emit-sink.js +584 -0
  580. package/dist/core/code/engine/core/lbug/lbug-adapter.js +2703 -0
  581. package/dist/core/code/engine/core/lbug/lbug-config.js +1029 -0
  582. package/dist/core/code/engine/core/lbug/native-check.js +435 -0
  583. package/dist/core/code/engine/core/lbug/pool-adapter.js +973 -0
  584. package/dist/core/code/engine/core/lbug/query-params.js +25 -0
  585. package/dist/core/code/engine/core/lbug/query-result-utils.js +31 -0
  586. package/dist/core/code/engine/core/lbug/rel-pair-routing.js +373 -0
  587. package/dist/core/code/engine/core/lbug/schema.js +771 -0
  588. package/dist/core/code/engine/core/lbug/shutdown-helpers.js +40 -0
  589. package/dist/core/code/engine/core/lbug/sidecar-recovery.js +716 -0
  590. package/dist/core/code/engine/core/lbug/stdio-capture.js +49 -0
  591. package/dist/core/code/engine/core/lbug/sync-csv-writer.js +115 -0
  592. package/dist/core/code/engine/core/lbug/wal-checkpoint-driver.js +215 -0
  593. package/dist/core/code/engine/core/lbug/wal-driver-state.js +28 -0
  594. package/dist/core/code/engine/core/logger.js +339 -0
  595. package/dist/core/code/engine/core/platform/capabilities.js +91 -0
  596. package/dist/core/code/engine/core/run-analyze.js +1098 -0
  597. package/dist/core/code/engine/core/tree-sitter/parser-loader.js +281 -0
  598. package/dist/core/code/engine/core/tree-sitter/safe-parse.js +258 -0
  599. package/dist/core/code/engine/core/tree-sitter/vendored-grammars.js +64 -0
  600. package/dist/core/code/engine/lib/utils.js +121 -0
  601. package/dist/core/code/engine/mcp/core/lbug-adapter.js +27 -0
  602. package/dist/core/code/engine/mcp/local/aop-metadata.js +230 -0
  603. package/dist/core/code/engine/mcp/local/bean-metadata.js +49 -0
  604. package/dist/core/code/engine/mcp/local/limits.js +15 -0
  605. package/dist/core/code/engine/mcp/local/line-display.js +6 -0
  606. package/dist/core/code/engine/mcp/local/local-backend.js +4142 -0
  607. package/dist/core/code/engine/storage/branch-index.js +72 -0
  608. package/dist/core/code/engine/storage/file-hash.js +95 -0
  609. package/dist/core/code/engine/storage/fs-atomic.js +34 -0
  610. package/dist/core/code/engine/storage/git.js +555 -0
  611. package/dist/core/code/engine/storage/index-lock.js +664 -0
  612. package/dist/core/code/engine/storage/parse-cache.js +650 -0
  613. package/dist/core/code/engine/storage/parsedfile-store.js +620 -0
  614. package/dist/core/code/engine/storage/repo-manager.js +1061 -0
  615. package/dist/core/code/engine/storage/scope-index-store.js +247 -0
  616. package/dist/core/code/engine/types/pipeline.js +2 -0
  617. package/dist/core/code/scripts/install-duckdb-extension.mjs +125 -0
  618. package/dist/core/code/scripts/resolve-analyze-cmd.cjs +346 -0
  619. package/dist/core/code/shared/graph/types.js +8 -0
  620. package/dist/core/code/shared/index.js +105 -0
  621. package/dist/core/code/shared/integrations/circuit-breaker.js +242 -0
  622. package/dist/core/code/shared/integrations/resilient-fetch.js +224 -0
  623. package/dist/core/code/shared/integrations/retry.js +70 -0
  624. package/dist/core/code/shared/integrations/understand-quickly.js +145 -0
  625. package/dist/core/code/shared/language-detection.js +162 -0
  626. package/dist/core/code/shared/languages.js +27 -0
  627. package/dist/core/code/shared/lbug/schema-constants.js +98 -0
  628. package/dist/core/code/shared/mro-strategy.js +2 -0
  629. package/dist/core/code/shared/pipeline.js +5 -0
  630. package/dist/core/code/shared/scope-resolution/callable-flow-site.js +11 -0
  631. package/dist/core/code/shared/scope-resolution/def-index.js +53 -0
  632. package/dist/core/code/shared/scope-resolution/evidence-weights.js +87 -0
  633. package/dist/core/code/shared/scope-resolution/finalize-algorithm.js +807 -0
  634. package/dist/core/code/shared/scope-resolution/language-classification.js +46 -0
  635. package/dist/core/code/shared/scope-resolution/method-dispatch-index.js +100 -0
  636. package/dist/core/code/shared/scope-resolution/module-scope-index.js +59 -0
  637. package/dist/core/code/shared/scope-resolution/origin-priority.js +23 -0
  638. package/dist/core/code/shared/scope-resolution/parsed-file.js +54 -0
  639. package/dist/core/code/shared/scope-resolution/position-index.js +136 -0
  640. package/dist/core/code/shared/scope-resolution/qualified-name-index.js +77 -0
  641. package/dist/core/code/shared/scope-resolution/reference-site.js +24 -0
  642. package/dist/core/code/shared/scope-resolution/registries/class-registry.js +32 -0
  643. package/dist/core/code/shared/scope-resolution/registries/context.js +52 -0
  644. package/dist/core/code/shared/scope-resolution/registries/evidence.js +152 -0
  645. package/dist/core/code/shared/scope-resolution/registries/field-registry.js +33 -0
  646. package/dist/core/code/shared/scope-resolution/registries/lookup-core.js +392 -0
  647. package/dist/core/code/shared/scope-resolution/registries/lookup-qualified.js +58 -0
  648. package/dist/core/code/shared/scope-resolution/registries/macro-registry.js +34 -0
  649. package/dist/core/code/shared/scope-resolution/registries/method-registry.js +34 -0
  650. package/dist/core/code/shared/scope-resolution/registries/tie-breaks.js +63 -0
  651. package/dist/core/code/shared/scope-resolution/resolve-type-ref.js +128 -0
  652. package/dist/core/code/shared/scope-resolution/scope-id.js +49 -0
  653. package/dist/core/code/shared/scope-resolution/scope-tree.js +225 -0
  654. package/dist/core/code/shared/scope-resolution/symbol-definition.js +12 -0
  655. package/dist/core/code/shared/scope-resolution/types.js +25 -0
  656. package/dist/core/code/shared/test-helpers.js +17 -0
  657. package/dist/core/code/vendor/leiden/index.cjs +355 -0
  658. package/dist/core/code/vendor/leiden/utils.cjs +419 -0
  659. package/dist/core/timeline/cli.d.ts.map +1 -1
  660. package/dist/core/timeline/cli.js +13 -6
  661. package/dist/core/timeline/cli.js.map +1 -1
  662. package/dist/core/timeline/debris.d.ts +20 -0
  663. package/dist/core/timeline/debris.d.ts.map +1 -0
  664. package/dist/core/timeline/debris.js +124 -0
  665. package/dist/core/timeline/debris.js.map +1 -0
  666. package/dist/core/timeline/hook-runner.d.ts.map +1 -1
  667. package/dist/core/timeline/hook-runner.js +3 -1
  668. package/dist/core/timeline/hook-runner.js.map +1 -1
  669. package/dist/core/timeline/hooks.d.ts.map +1 -1
  670. package/dist/core/timeline/hooks.js +13 -5
  671. package/dist/core/timeline/hooks.js.map +1 -1
  672. package/dist/core/timeline/installer.d.ts +2 -0
  673. package/dist/core/timeline/installer.d.ts.map +1 -1
  674. package/dist/core/timeline/installer.js +12 -0
  675. package/dist/core/timeline/installer.js.map +1 -1
  676. package/dist/core/timeline/project-root.d.ts +21 -0
  677. package/dist/core/timeline/project-root.d.ts.map +1 -0
  678. package/dist/core/timeline/project-root.js +83 -0
  679. package/dist/core/timeline/project-root.js.map +1 -0
  680. package/package.json +1 -1
@@ -0,0 +1,440 @@
1
+ "use strict";
2
+ /**
3
+ * Adapter from `(ParsedImport, WorkspaceIndex)` → concrete file path.
4
+ *
5
+ * Delegates to the existing `resolvePythonImportInternal` (PEP-328
6
+ * relative resolution + standard suffix matching). The `WorkspaceIndex`
7
+ * is opaque at this layer; consumers wire a `PythonResolveContext`
8
+ * shape carrying `fromFile` + `allFilePaths`.
9
+ *
10
+ * Returning `null` lets the finalize algorithm mark the edge as
11
+ * `linkStatus: 'unresolved'`.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.resolvePythonImportTarget = resolvePythonImportTarget;
15
+ exports.isPythonImportedModule = isPythonImportedModule;
16
+ exports.pythonNamespaceReceiverPaths = pythonNamespaceReceiverPaths;
17
+ const python_js_1 = require("../../import-resolvers/python.js");
18
+ const index_stats_js_1 = require("./index-stats.js");
19
+ function resolvePythonImportTarget(parsedImport, workspaceIndex) {
20
+ // WorkspaceIndex is `unknown` in the shared contract (Ring 1
21
+ // placeholder). The scope-resolution orchestrator hands us a
22
+ // PythonResolveContext-shaped object; narrow structurally rather
23
+ // than via a cast chain so unexpected shapes return null cleanly.
24
+ const ctx = workspaceIndex;
25
+ // Duck-type the set rather than `instanceof Set`: `allFilePaths` is typed
26
+ // `ReadonlySet<string>` and the chain only ever calls `.has()` + iterates, so
27
+ // any set-like is valid. An `instanceof Set` check would reject a legitimate
28
+ // non-`Set` `ReadonlySet` implementation and silently return null for every
29
+ // import (PR #1918 tri-review P2).
30
+ const allFilePaths = ctx?.allFilePaths;
31
+ if (ctx === undefined ||
32
+ typeof ctx.fromFile !== 'string' ||
33
+ typeof allFilePaths?.has !== 'function' ||
34
+ typeof allFilePaths?.[Symbol.iterator] !== 'function') {
35
+ return null;
36
+ }
37
+ if (parsedImport.kind === 'dynamic-unresolved')
38
+ return null;
39
+ if (parsedImport.targetRaw === null || parsedImport.targetRaw === '')
40
+ return null;
41
+ const submoduleTarget = pythonImportedSubmoduleTarget(parsedImport);
42
+ if (submoduleTarget !== null &&
43
+ (parsedImport.kind === 'named' || parsedImport.kind === 'alias')) {
44
+ // Python's IMPORT_FROM first reads an attribute already exported by the
45
+ // package and only loads a same-named submodule when that attribute is
46
+ // absent. Preserve that precedence when parsed workspace facts are
47
+ // available; the flag suppresses this submodule probe in the recursive
48
+ // base-package lookup.
49
+ const packageTarget = resolvePythonImportTarget({ ...parsedImport, targetIncludesImportedName: true }, workspaceIndex);
50
+ if (packageTarget !== null &&
51
+ pythonFileExportsName(packageTarget, parsedImport.importedName, ctx.parsedFiles)) {
52
+ return packageTarget;
53
+ }
54
+ const submodule = resolvePythonImportTarget({
55
+ kind: 'namespace',
56
+ localName: parsedImport.localName,
57
+ importedName: parsedImport.importedName,
58
+ targetRaw: submoduleTarget,
59
+ }, workspaceIndex);
60
+ if (submodule !== null)
61
+ return submodule;
62
+ if (packageTarget !== null)
63
+ return packageTarget;
64
+ }
65
+ // PEP-328 relative + single-segment proximity bare imports.
66
+ const internal = (0, python_js_1.resolvePythonImportInternal)(ctx.fromFile, parsedImport.targetRaw, ctx.allFilePaths);
67
+ if (internal !== null)
68
+ return internal;
69
+ // PEP-328: unresolved relative imports must NOT fall through to suffix
70
+ // matching. Mirrors `pythonImportStrategy` in `configs/python.ts`.
71
+ if (parsedImport.targetRaw.startsWith('.'))
72
+ return null;
73
+ // External dotted imports like `django.apps` must not fall through to
74
+ // generic suffix matching when the repo has unrelated local files such
75
+ // as `accounts/apps.py`. Mirrors `pythonImportStrategy`'s
76
+ // `hasRepoCandidate` check: only suffix-match if the leading segment
77
+ // looks like a local package/module somewhere in-repo.
78
+ const pathLike = parsedImport.targetRaw.replace(/\./g, '/');
79
+ if (pathLike.includes('/')) {
80
+ const [leadingSegment] = pathLike.split('/').filter(Boolean);
81
+ if (!leadingSegment || !hasRepoCandidate(leadingSegment, ctx.allFilePaths, ctx.fromFile)) {
82
+ return null;
83
+ }
84
+ }
85
+ // Multi-segment absolute resolve: try exact paths first, then ancestor
86
+ // walk (mirrors the single-segment ancestor walk in
87
+ // `resolvePythonImportInternal`), then a suffix match in nested repos.
88
+ // Using direct `Set.has` + `endsWith` instead of `suffixResolve`'s shared
89
+ // helper because that helper requires a pre-built `SuffixIndex` to
90
+ // disambiguate ties — without one it falls back to an O(files) scan that
91
+ // silently picks the wrong file when the last segment collides across
92
+ // directories (e.g. `accounts.models` matching `billing/models.py` when
93
+ // both files exist).
94
+ return resolveAbsoluteFromFiles(pathLike, ctx.allFilePaths, ctx.fromFile);
95
+ }
96
+ function pythonFileExportsName(targetFile, importedName, parsedFiles) {
97
+ if (parsedFiles === undefined)
98
+ return false;
99
+ const parsed = parsedFiles.find((file) => file.filePath === targetFile);
100
+ if (parsed === undefined)
101
+ return false;
102
+ return parsed.localDefs.some((def) => {
103
+ const qualifiedName = def.qualifiedName;
104
+ if (qualifiedName === undefined || qualifiedName.length === 0)
105
+ return false;
106
+ const dot = qualifiedName.lastIndexOf('.');
107
+ return (dot === -1 ? qualifiedName : qualifiedName.slice(dot + 1)) === importedName;
108
+ });
109
+ }
110
+ /**
111
+ * Resolve `package/sub/module` style paths (already dot-flattened) to a
112
+ * concrete file in `allFilePaths`. Tries the exact path first, then walks
113
+ * ancestors of `fromFile` looking for `<ancestor>/<pathLike>.py` (or
114
+ * `__init__.py`), then falls back to a suffix match for nested layouts.
115
+ * Returns the original (un-normalized) path from the set.
116
+ *
117
+ * Precedence order:
118
+ * 1. Workspace-root direct hit (`<pathLike>.py`, `<pathLike>/__init__.py`).
119
+ * 2. Closest-ancestor match walking up from the importer's directory.
120
+ * 3. Suffix fallback (deterministic: fewest path segments, then
121
+ * lexicographic on the normalized path).
122
+ *
123
+ * Root wins over ancestor by construction — if both `services/sync.py` and
124
+ * `backend/services/sync.py` exist, `backend/routers/cron.py`'s
125
+ * `from services.sync import X` resolves to the root file. This mirrors
126
+ * Python's `sys.path` semantics where the project root is searched first.
127
+ *
128
+ * The ancestor walk mirrors the single-segment behavior in
129
+ * `resolvePythonImportInternal`. For `from services.sync import X` in
130
+ * `backend/routers/cron.py`, walk up: `backend/routers/services/sync.py` →
131
+ * `backend/services/sync.py` ✓.
132
+ */
133
+ function resolveAbsoluteFromFiles(pathLike, allFilePaths, fromFile) {
134
+ const directFile = `${pathLike}.py`;
135
+ const directPkg = `${pathLike}/__init__.py`;
136
+ // Direct hit at workspace root.
137
+ if (allFilePaths.has(directFile))
138
+ return directFile;
139
+ if (allFilePaths.has(directPkg))
140
+ return directPkg;
141
+ // Ancestor walk — match the single-segment resolver's behavior at
142
+ // multi-segment granularity. Closest match wins. Stop at `i > 0` because
143
+ // `i === 0` would re-check the workspace-root candidates already covered
144
+ // by the direct check above.
145
+ const importerDir = fromFile.replace(/\\/g, '/').split('/').slice(0, -1).join('/');
146
+ if (importerDir) {
147
+ const dirParts = importerDir.split('/').filter(Boolean);
148
+ for (let i = dirParts.length; i > 0; i--) {
149
+ const ancestor = dirParts.slice(0, i).join('/');
150
+ const prefix = `${ancestor}/`;
151
+ const candidateFile = `${prefix}${directFile}`;
152
+ const candidatePkg = `${prefix}${directPkg}`;
153
+ if (allFilePaths.has(candidateFile))
154
+ return candidateFile;
155
+ if (allFilePaths.has(candidatePkg))
156
+ return candidatePkg;
157
+ }
158
+ }
159
+ // Suffix-match fallback (preserved for monorepo/nested-repo layouts
160
+ // that don't share a directory ancestor with the importer).
161
+ //
162
+ // Tie-break order when multiple files match the same suffix:
163
+ // 1. Fewest path segments (shorter, more canonical paths win — `lib/x.py`
164
+ // beats `tooling/extras/x.py`).
165
+ // 2. Lexicographic order over the normalized path (final stable
166
+ // tiebreak independent of file-set insertion order).
167
+ //
168
+ // Without an explicit tie-break the previous implementation returned
169
+ // the first match in `Set` iteration order, which depended on file
170
+ // ingestion order and produced non-deterministic edges across runs in
171
+ // multi-directory collision repos.
172
+ const suffixFile = `/${directFile}`;
173
+ const suffixPkg = `/${directPkg}`;
174
+ // Indexed suffix gather. A file matching `…/<pathLike>.py` has basename
175
+ // `<lastSeg>.py`; one matching `…/<pathLike>/__init__.py` has basename
176
+ // `__init__.py`. Look up only those basename buckets and confirm the full
177
+ // suffix, instead of scanning every file (the O(imports x files) hotpath).
178
+ // The candidate SET is identical to the old full scan, and the tie-break
179
+ // sort below fully determines the result, so output is unchanged. The
180
+ // shared buildSuffixIndex is deliberately NOT used: it keeps only one
181
+ // path per suffix (longest wins) and so cannot reproduce this exact
182
+ // fewest-segments-then-lexicographic tie-break across all candidates.
183
+ const index = getPythonFileIndex(allFilePaths);
184
+ const lastSeg = pathLike.slice(pathLike.lastIndexOf('/') + 1);
185
+ const matches = [];
186
+ for (const cand of index.byBasename.get(`${lastSeg}.py`) ?? []) {
187
+ if (cand.norm.endsWith(suffixFile))
188
+ matches.push(cand);
189
+ }
190
+ // Package form: only `__init__.py` files whose parent dir is named `<lastSeg>`
191
+ // can match `…/<lastSeg>/__init__.py` — look them up by parent key (P2b) and
192
+ // confirm the full suffix. Same final candidate set as the old `__init__.py`
193
+ // scan, just without iterating unrelated packages.
194
+ for (const cand of index.byInitParent.get(`${lastSeg}/__init__.py`) ?? []) {
195
+ if (cand.norm.endsWith(suffixPkg))
196
+ matches.push(cand);
197
+ }
198
+ if (matches.length === 0)
199
+ return null;
200
+ if (matches.length === 1)
201
+ return matches[0].raw;
202
+ matches.sort((a, b) => {
203
+ const aDepth = a.norm.split('/').length;
204
+ const bDepth = b.norm.split('/').length;
205
+ if (aDepth !== bDepth)
206
+ return aDepth - bDepth;
207
+ if (a.norm < b.norm)
208
+ return -1;
209
+ if (a.norm > b.norm)
210
+ return 1;
211
+ return 0;
212
+ });
213
+ return matches[0].raw;
214
+ }
215
+ /**
216
+ * Does the repo contain a module/package named `leadingSegment` somewhere
217
+ * the importer can plausibly reach?
218
+ *
219
+ * Used to guard against false-positive suffix matches on external dotted
220
+ * imports (e.g. `django.apps` matching a local `accounts/apps.py`).
221
+ *
222
+ * Checks, in order:
223
+ * 1. `SEGMENT.py` root file or `SEGMENT/__init__.py` regular package.
224
+ * 2. Any `SEGMENT/...py` file at the workspace root (namespace package).
225
+ * 3. Any `<importer-ancestor>/SEGMENT/...py` file (nested namespace
226
+ * package the importer could reach via an ancestor walk, e.g.
227
+ * `backend/services/sync.py` from `backend/routers/cron.py`).
228
+ *
229
+ * The nested case is bounded to the importer's own ancestors so a
230
+ * vendored copy of an external package (e.g. `vendor/django/urls.py`)
231
+ * does not gate-pass external imports like `from django.urls import path`
232
+ * issued from `app/main.py`. Files inside the vendored tree itself
233
+ * (importer under `vendor/django/...`) still resolve correctly because
234
+ * the ancestor walk includes their own parents.
235
+ */
236
+ function hasRepoCandidate(leadingSegment, allFilePaths, fromFile) {
237
+ const prefix = `${leadingSegment}/`;
238
+ const rootFile = `${leadingSegment}.py`;
239
+ const initFile = `${leadingSegment}/__init__.py`;
240
+ // Build importer-ancestor prefixes: for `backend/routers/cron.py`,
241
+ // produces `["backend/routers/services/", "backend/services/"]` for
242
+ // segment `services` (closest first, root excluded — covered above).
243
+ const importerDir = fromFile.replace(/\\/g, '/').split('/').slice(0, -1).join('/');
244
+ const dirParts = importerDir ? importerDir.split('/').filter(Boolean) : [];
245
+ const ancestorPrefixes = [];
246
+ for (let i = dirParts.length; i > 0; i--) {
247
+ ancestorPrefixes.push(`${dirParts.slice(0, i).join('/')}/${leadingSegment}/`);
248
+ }
249
+ // Indexed equivalents of the old O(files) scan:
250
+ // (1) `f === rootFile || f === initFile` -> normalized-path membership.
251
+ // (2) `f.startsWith(`${seg}/`) && f.endsWith('.py')` -> some .py file lives
252
+ // under directory `${seg}/`, i.e. `${seg}/` is a known .py dir prefix.
253
+ // (3) ancestor namespace case -> `${ancestor}/${seg}/` is a known .py dir
254
+ // prefix.
255
+ const index = getPythonFileIndex(allFilePaths);
256
+ if (index.normSet.has(rootFile) || index.normSet.has(initFile))
257
+ return true;
258
+ if (index.dirPrefixes.has(prefix))
259
+ return true;
260
+ for (const ap of ancestorPrefixes) {
261
+ if (index.dirPrefixes.has(ap))
262
+ return true;
263
+ }
264
+ return false;
265
+ }
266
+ const PYTHON_FILE_INDEX_CACHE = new WeakMap();
267
+ function getPythonFileIndex(allFilePaths) {
268
+ const cached = PYTHON_FILE_INDEX_CACHE.get(allFilePaths);
269
+ if (cached !== undefined)
270
+ return cached;
271
+ // Cache miss: materialize a fresh index. Counted so a test can assert this
272
+ // happens once per run, not once per import (PR #1918 review P1 guard).
273
+ (0, index_stats_js_1.recordPythonFileIndexBuild)();
274
+ const normSet = new Set();
275
+ const byBasename = new Map();
276
+ const byInitParent = new Map();
277
+ const dirPrefixes = new Set();
278
+ for (const raw of allFilePaths) {
279
+ const norm = raw.replace(/\\/g, '/');
280
+ // Python import resolution only ever queries `.py` paths: module `<seg>.py`
281
+ // and package `<seg>/__init__.py` membership (normSet), `<lastSeg>.py` /
282
+ // `__init__.py` basename buckets (byBasename), and `.py` directory prefixes
283
+ // (dirPrefixes). Non-`.py` files can never match any of those, so skip them
284
+ // — they were dead weight in every structure on polyglot monorepos
285
+ // (PR #1918 review P3b; dirPrefixes was already `.py`-gated).
286
+ if (!norm.endsWith('.py'))
287
+ continue;
288
+ normSet.add(norm);
289
+ const lastSlash = norm.lastIndexOf('/');
290
+ const base = lastSlash >= 0 ? norm.slice(lastSlash + 1) : norm;
291
+ let bucket = byBasename.get(base);
292
+ if (bucket === undefined) {
293
+ bucket = [];
294
+ byBasename.set(base, bucket);
295
+ }
296
+ bucket.push({ raw, norm });
297
+ // Package files also get a parent-keyed bucket so a `pkg.sub` lookup hits
298
+ // only `…/sub/__init__.py` candidates, not every `__init__.py` (P2b).
299
+ if (base === '__init__.py' && lastSlash >= 0) {
300
+ const dir = norm.slice(0, lastSlash);
301
+ const parentSlash = dir.lastIndexOf('/');
302
+ const parentName = parentSlash >= 0 ? dir.slice(parentSlash + 1) : dir;
303
+ if (parentName) {
304
+ const initKey = `${parentName}/__init__.py`;
305
+ let ib = byInitParent.get(initKey);
306
+ if (ib === undefined) {
307
+ ib = [];
308
+ byInitParent.set(initKey, ib);
309
+ }
310
+ ib.push({ raw, norm });
311
+ }
312
+ }
313
+ // Directory prefixes: every slash-terminated prefix of the path (every
314
+ // index just past a '/', up to and including the file's own directory).
315
+ // Scanning the FULL normalized path — including any leading '/' for
316
+ // absolute paths — makes `dirPrefixes.has(X)` match exactly when the old
317
+ // gate's `f.startsWith(X)` (X always ends in '/') matched. The previous
318
+ // split+`filter(Boolean)` dropped the leading empty component, so an
319
+ // absolute file `/repo/svc/x.py` yielded `repo/svc/` (no leading slash) and
320
+ // gate-passed where `"/repo/svc/x.py".startsWith("repo/svc/")` is false
321
+ // (PR #1918 review P3a). For relative paths the set is identical.
322
+ for (let i = 0; i <= lastSlash; i++) {
323
+ if (norm[i] === '/')
324
+ dirPrefixes.add(norm.slice(0, i + 1));
325
+ }
326
+ }
327
+ const index = { normSet, byBasename, byInitParent, dirPrefixes };
328
+ PYTHON_FILE_INDEX_CACHE.set(allFilePaths, index);
329
+ return index;
330
+ }
331
+ function pythonImportedSubmoduleTarget(parsedImport) {
332
+ if (parsedImport.kind !== 'named' && parsedImport.kind !== 'alias')
333
+ return null;
334
+ if (parsedImport.targetIncludesImportedName === true)
335
+ return null;
336
+ const separator = parsedImport.targetRaw.endsWith('.') ? '' : '.';
337
+ return parsedImport.targetRaw + separator + parsedImport.importedName;
338
+ }
339
+ /**
340
+ * A named Python import is a namespace handle only when its resolved file is
341
+ * the concrete submodule formed by appending the imported name. This keeps
342
+ * ordinary symbol imports on the named-binding path.
343
+ */
344
+ function isPythonImportedModule(parsedImport, targetFile, fromFile) {
345
+ const submoduleTarget = pythonImportedSubmoduleTarget(parsedImport);
346
+ if (submoduleTarget === null)
347
+ return false;
348
+ const normalizedTarget = targetFile.replace(/\\/g, '/');
349
+ let pathLike;
350
+ if (submoduleTarget.startsWith('.')) {
351
+ const match = submoduleTarget.match(/^(\.+)(.*)$/);
352
+ if (match === null)
353
+ return false;
354
+ const ascend = match[1].length - 1;
355
+ const base = fromFile.replace(/\\/g, '/').split('/').slice(0, -1);
356
+ if (ascend > base.length)
357
+ return false;
358
+ const relativeParts = match[2].split('.').filter(Boolean);
359
+ pathLike = [...base.slice(0, base.length - ascend), ...relativeParts].join('/');
360
+ }
361
+ else {
362
+ pathLike = submoduleTarget.replace(/\./g, '/');
363
+ }
364
+ const moduleFile = pathLike + '.py';
365
+ const packageFile = pathLike + '/__init__.py';
366
+ return (normalizedTarget === moduleFile ||
367
+ normalizedTarget === packageFile ||
368
+ normalizedTarget.endsWith('/' + moduleFile) ||
369
+ normalizedTarget.endsWith('/' + packageFile));
370
+ }
371
+ /**
372
+ * The receiver spellings `import a.b.c` makes callable, and the file each one
373
+ * names (#2826).
374
+ *
375
+ * `import a.b.c` binds ONE name — `a` — but makes three attribute paths
376
+ * reachable, and they name three different files:
377
+ *
378
+ * a → a/__init__.py
379
+ * a.b → a/b/__init__.py
380
+ * a.b.c → a/b/c.py (the edge's own target)
381
+ *
382
+ * The shared default keyed `a` to the LEAF, which is wrong in both directions:
383
+ * `a.helper()` resolved into `a/b/c.py` whenever that module happened to export
384
+ * `helper`, and `a.b.mid()` resolved to nothing.
385
+ *
386
+ * Returns `undefined` — meaning "use the shared default" — for every spelling
387
+ * where the bound name is not the path's root:
388
+ * - `import single` — no dotted path to expand;
389
+ * - `import a.b as x` — binds only `x`; writing `a.b.f()` there is a
390
+ * NameError, so `a.b` must NOT become a key;
391
+ * - `from pkg import db` — reclassified to a namespace edge whose
392
+ * importPath is the bare name `db`.
393
+ *
394
+ * Prefix files are proposed, not asserted: `moduleFileExists` drops any that
395
+ * the workspace did not parse, so a PEP-420 namespace package (no
396
+ * `__init__.py`) contributes no key rather than one pointing at a missing file.
397
+ */
398
+ function pythonNamespaceReceiverPaths(edge, moduleFileExists) {
399
+ const segments = edge.importPath.split('.');
400
+ if (segments.length < 2)
401
+ return undefined;
402
+ if (segments[0] !== edge.localName)
403
+ return undefined;
404
+ const out = [[edge.importPath, edge.targetFile]];
405
+ // Anchor the prefix packages on the RESOLVED leaf, never on the import
406
+ // spelling. `resolvePythonImportTarget` resolves off-root in two of its three
407
+ // tiers (suffix match and ancestor-relative), so `import utils.db` can land on
408
+ // `libs/common/utils/db.py`. Building `utils/__init__.py` from the spelling
409
+ // would then name a DIFFERENT package that merely shares the root segment —
410
+ // a wrong edge — and in a `src/` layout it would match nothing at all,
411
+ // silently making prefix keying inert for the most common Python layout.
412
+ //
413
+ // Walking back from the leaf also inherits that path's own separator, so no
414
+ // POSIX-vs-Windows probing is needed: workspace paths are not normalized at
415
+ // ingestion, and `moduleScopeByFile` is keyed by the raw `ParsedFile.filePath`.
416
+ const dirs = edge.targetFile.split('/').slice(0, -1);
417
+ // The import's leading segments name the leaf's innermost directories.
418
+ const offset = dirs.length - (segments.length - 1);
419
+ if (offset < 0)
420
+ return out;
421
+ for (let i = 1; i < segments.length; i++) {
422
+ const spelling = segments.slice(0, i).join('.');
423
+ const packageFile = dirs.slice(0, offset + i).join('/') + '/__init__.py';
424
+ // Package FIRST, then the leaf as a fallback — order is the whole point.
425
+ //
426
+ // `findExportedDef` only accepts a binding whose `origin === 'local'`, and
427
+ // the canonical package re-exports (`from .b.c import helper` in
428
+ // `__init__.py`) produce an IMPORT binding. Keying the prefix at the
429
+ // package alone therefore loses `a.helper()` entirely for the most common
430
+ // package shape — the fixtures here all define members locally in
431
+ // `__init__.py`, which is precisely the one layout where that mistake is
432
+ // invisible. Keeping the leaf behind the package restores that resolution
433
+ // while still letting a real definition in `__init__.py` win over a
434
+ // same-named decoy deeper in the package.
435
+ if (moduleFileExists(packageFile))
436
+ out.push([spelling, packageFile]);
437
+ out.push([spelling, edge.targetFile]);
438
+ }
439
+ return out;
440
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ /**
3
+ * Build counter for the per-file-set Python import-resolution index
4
+ * (`getPythonFileIndex` in `import-target.ts`).
5
+ *
6
+ * A "build" is a `WeakMap` cache MISS that materializes a fresh
7
+ * `PythonFileIndex` (O(files)). Unlike `cache-stats.ts` (which gates its
8
+ * counters behind `PROF_SCOPE_RESOLUTION` because they sit on the per-capture
9
+ * hot path), this counter is always live: an index build happens at most once
10
+ * per resolution run, so the single increment is negligible and an unconditional
11
+ * counter avoids env-var load-order fragility in tests.
12
+ *
13
+ * Used by `test/integration/python-import-index-reuse.test.ts` to assert the
14
+ * index is reused across imports (built once per run) rather than rebuilt per
15
+ * import — the regression guard for PR #1918 review finding P1.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.recordPythonFileIndexBuild = recordPythonFileIndexBuild;
19
+ exports.getPythonFileIndexBuildCount = getPythonFileIndexBuildCount;
20
+ exports.resetPythonFileIndexBuildCount = resetPythonFileIndexBuildCount;
21
+ let INDEX_BUILDS = 0;
22
+ function recordPythonFileIndexBuild() {
23
+ INDEX_BUILDS++;
24
+ }
25
+ function getPythonFileIndexBuildCount() {
26
+ return INDEX_BUILDS;
27
+ }
28
+ function resetPythonFileIndexBuildCount() {
29
+ INDEX_BUILDS = 0;
30
+ }
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ /**
3
+ * Python scope-resolution hooks (RFC #909 Ring 3, RFC §5).
4
+ *
5
+ * Public API barrel. Consumers should import from this file rather than
6
+ * the individual modules — that keeps the per-hook organization an
7
+ * implementation detail we can refactor without touching the provider
8
+ * wiring.
9
+ *
10
+ * Module layout (each file is a single concern):
11
+ *
12
+ * - `query.ts` — tree-sitter query string + lazy parser/query singletons
13
+ * - `ast-utils.ts` — generic `SyntaxNode` helpers
14
+ * - `import-decomposer.ts` — `import a, b` / `from m import x, y` → one match per name
15
+ * - `receiver-binding.ts` — synthesize `self`/`cls` type bindings on methods
16
+ * - `captures.ts` — `emitPythonScopeCaptures` (top-level orchestrator)
17
+ * - `cache-stats.ts` — PROF_SCOPE_RESOLUTION cache hit/miss counters
18
+ * - `interpret.ts` — capture-match → `ParsedImport` / `ParsedTypeBinding`
19
+ * - `merge-bindings.ts` — Python LEGB precedence
20
+ * - `arity.ts` — Python arity check (`*args`, `**kwargs`, defaults)
21
+ * - `import-target.ts` — `(ParsedImport, WorkspaceIndex) → file path` adapter
22
+ * - `simple-hooks.ts` — small/no-op hooks made explicit
23
+ *
24
+ * ## Known limitations
25
+ *
26
+ * The Python registry-primary path intentionally does NOT resolve the
27
+ * following. Each is a conscious trade-off at migration time; lifting any
28
+ * of them is tracked as a separate follow-up rather than silently
29
+ * "maybe-resolving" and emitting low-confidence edges.
30
+ *
31
+ * 1. **Dynamic attribute access** — `getattr(obj, 'name')` and
32
+ * `setattr` bind at runtime. We emit no edge; the call site
33
+ * surfaces as an unresolved reference.
34
+ * 2. **Dynamic imports** — `importlib.import_module(...)` and
35
+ * `__import__(...)` are not followed. Static `import x` and
36
+ * `from m import x` are fully resolved.
37
+ * 3. **Metaclass-driven dispatch** — C3 linearization drives MRO
38
+ * (see `mro-processor.ts`), but method resolution that depends
39
+ * on `__getattribute__` overrides or metaclass `__call__`
40
+ * remains unresolved.
41
+ * 4. **Union / Optional type hints** — `def f(x: Union[A, B])` or
42
+ * `x: Optional[A]`: `arity.ts` validates parameter count only;
43
+ * receiver-binding and field-type resolution pick the first arm
44
+ * and emit a single edge rather than branching. `List[T]` /
45
+ * `Dict[K, V]` strip the outer generic for receiver typing (see
46
+ * `interpret.ts`).
47
+ * 5. **Decorators that rewrite signatures** — `@dataclass`,
48
+ * `@property`, `@classmethod`, `@staticmethod` are recognized
49
+ * by `receiver-binding.ts`. Arbitrary decorators (e.g.
50
+ * `functools.wraps`, custom retry wrappers) preserve the wrapped
51
+ * function's declared signature; a decorator that returns a
52
+ * different callable is followed only through the declared
53
+ * return type.
54
+ * 6. **`typing.TYPE_CHECKING`-guarded imports** — treated like any
55
+ * other `import` for reference resolution. We do not distinguish
56
+ * runtime-visible from type-checker-only imports; this is
57
+ * intentional (type-only imports are still structurally valid
58
+ * type references).
59
+ * 7. **`*args` / `**kwargs` type flow-through** — `arity.ts`
60
+ * accepts any call count when a variadic is present, but no
61
+ * type information flows through the variadic into the callee
62
+ * body. Receiver-binding still works for explicit parameters.
63
+ * 8. **`super()` outside a method with a literal class binding** —
64
+ * resolved for the standard `class Child(Parent): def m(self):
65
+ * super().m()` pattern. Zero-arg `super()` inside a nested
66
+ * function, a `functools.wraps`-rewrapped method, or a call
67
+ * site where the enclosing class can't be statically determined
68
+ * is left unresolved.
69
+ *
70
+ * The `test/integration/resolvers/python.test.ts` resolver suite is the
71
+ * authoritative signal for which of these matter in practice; it runs in
72
+ * the standard CI test workflow, so a regression blocks the merge.
73
+ */
74
+ Object.defineProperty(exports, "__esModule", { value: true });
75
+ exports.pythonReceiverBinding = exports.pythonImportOwningScope = exports.pythonFunctionDefinitionLabel = exports.pythonBindingScopeFor = exports.resolvePythonImportTarget = exports.pythonNamespaceReceiverPaths = exports.isPythonImportedModule = exports.pythonArityCompatibility = exports.pythonMergeBindings = exports.interpretPythonTypeBinding = exports.interpretPythonImport = exports.resetPythonCaptureCacheStats = exports.getPythonCaptureCacheStats = exports.emitPythonScopeCaptures = void 0;
76
+ var captures_js_1 = require("./captures.js");
77
+ Object.defineProperty(exports, "emitPythonScopeCaptures", { enumerable: true, get: function () { return captures_js_1.emitPythonScopeCaptures; } });
78
+ var cache_stats_js_1 = require("./cache-stats.js");
79
+ Object.defineProperty(exports, "getPythonCaptureCacheStats", { enumerable: true, get: function () { return cache_stats_js_1.getPythonCaptureCacheStats; } });
80
+ Object.defineProperty(exports, "resetPythonCaptureCacheStats", { enumerable: true, get: function () { return cache_stats_js_1.resetPythonCaptureCacheStats; } });
81
+ var interpret_js_1 = require("./interpret.js");
82
+ Object.defineProperty(exports, "interpretPythonImport", { enumerable: true, get: function () { return interpret_js_1.interpretPythonImport; } });
83
+ Object.defineProperty(exports, "interpretPythonTypeBinding", { enumerable: true, get: function () { return interpret_js_1.interpretPythonTypeBinding; } });
84
+ var merge_bindings_js_1 = require("./merge-bindings.js");
85
+ Object.defineProperty(exports, "pythonMergeBindings", { enumerable: true, get: function () { return merge_bindings_js_1.pythonMergeBindings; } });
86
+ var arity_js_1 = require("./arity.js");
87
+ Object.defineProperty(exports, "pythonArityCompatibility", { enumerable: true, get: function () { return arity_js_1.pythonArityCompatibility; } });
88
+ var import_target_js_1 = require("./import-target.js");
89
+ Object.defineProperty(exports, "isPythonImportedModule", { enumerable: true, get: function () { return import_target_js_1.isPythonImportedModule; } });
90
+ Object.defineProperty(exports, "pythonNamespaceReceiverPaths", { enumerable: true, get: function () { return import_target_js_1.pythonNamespaceReceiverPaths; } });
91
+ Object.defineProperty(exports, "resolvePythonImportTarget", { enumerable: true, get: function () { return import_target_js_1.resolvePythonImportTarget; } });
92
+ var simple_hooks_js_1 = require("./simple-hooks.js");
93
+ Object.defineProperty(exports, "pythonBindingScopeFor", { enumerable: true, get: function () { return simple_hooks_js_1.pythonBindingScopeFor; } });
94
+ Object.defineProperty(exports, "pythonFunctionDefinitionLabel", { enumerable: true, get: function () { return simple_hooks_js_1.pythonFunctionDefinitionLabel; } });
95
+ Object.defineProperty(exports, "pythonImportOwningScope", { enumerable: true, get: function () { return simple_hooks_js_1.pythonImportOwningScope; } });
96
+ Object.defineProperty(exports, "pythonReceiverBinding", { enumerable: true, get: function () { return simple_hooks_js_1.pythonReceiverBinding; } });