gitnexus 1.6.10-rc.99 → 1.6.10

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 (775) hide show
  1. package/README.md +177 -18
  2. package/dist/_shared/graph/types.d.ts +21 -2
  3. package/dist/_shared/graph/types.d.ts.map +1 -1
  4. package/dist/_shared/index.d.ts +3 -3
  5. package/dist/_shared/index.d.ts.map +1 -1
  6. package/dist/_shared/index.js +1 -1
  7. package/dist/_shared/index.js.map +1 -1
  8. package/dist/_shared/integrations/circuit-breaker.d.ts.map +1 -1
  9. package/dist/_shared/integrations/circuit-breaker.js.map +1 -1
  10. package/dist/_shared/integrations/resilient-fetch.d.ts +16 -0
  11. package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
  12. package/dist/_shared/integrations/resilient-fetch.js +19 -7
  13. package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
  14. package/dist/_shared/language-detection.d.ts.map +1 -1
  15. package/dist/_shared/lbug/schema-constants.d.ts +2 -2
  16. package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
  17. package/dist/_shared/lbug/schema-constants.js +3 -0
  18. package/dist/_shared/lbug/schema-constants.js.map +1 -1
  19. package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
  20. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +5 -0
  21. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
  22. package/dist/_shared/scope-resolution/finalize-algorithm.js +315 -36
  23. package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
  24. package/dist/_shared/scope-resolution/reference-site.d.ts +115 -0
  25. package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
  26. package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
  27. package/dist/_shared/scope-resolution/registries/lookup-core.d.ts.map +1 -1
  28. package/dist/_shared/scope-resolution/registries/lookup-core.js +58 -2
  29. package/dist/_shared/scope-resolution/registries/lookup-core.js.map +1 -1
  30. package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -1
  31. package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -1
  32. package/dist/_shared/scope-resolution/scope-tree.js.map +1 -1
  33. package/dist/_shared/scope-resolution/symbol-definition.d.ts +47 -0
  34. package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
  35. package/dist/_shared/scope-resolution/types.d.ts +278 -3
  36. package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
  37. package/dist/cli/ai-context.d.ts +3 -2
  38. package/dist/cli/ai-context.js +71 -16
  39. package/dist/cli/analyze-config.d.ts +1 -1
  40. package/dist/cli/analyze-options.d.ts +131 -0
  41. package/dist/cli/analyze-options.js +1 -0
  42. package/dist/cli/analyze.d.ts +21 -113
  43. package/dist/cli/analyze.js +172 -29
  44. package/dist/cli/cli-message.d.ts +1 -1
  45. package/dist/cli/detect-changes-format.js +19 -2
  46. package/dist/cli/doctor.d.ts +12 -0
  47. package/dist/cli/doctor.js +32 -5
  48. package/dist/cli/editor-targets.js +6 -0
  49. package/dist/cli/eval-server.js +2 -1
  50. package/dist/cli/format-symbol.d.ts +15 -0
  51. package/dist/cli/format-symbol.js +17 -0
  52. package/dist/cli/generated-skill.d.ts +17 -0
  53. package/dist/cli/generated-skill.js +1 -0
  54. package/dist/cli/group.js +229 -21
  55. package/dist/cli/help-i18n.js +1 -2
  56. package/dist/cli/i18n/en.d.ts +11 -9
  57. package/dist/cli/i18n/en.js +13 -9
  58. package/dist/cli/i18n/resources.d.ts +15 -11
  59. package/dist/cli/i18n/zh-CN.d.ts +4 -2
  60. package/dist/cli/i18n/zh-CN.js +11 -9
  61. package/dist/cli/index.js +8 -4
  62. package/dist/cli/resolve-invocation.d.ts +7 -3
  63. package/dist/cli/resolve-invocation.js +7 -3
  64. package/dist/cli/setup.js +4 -3
  65. package/dist/cli/skill-gen.d.ts +1 -6
  66. package/dist/cli/tool.d.ts +1 -0
  67. package/dist/cli/tool.js +74 -17
  68. package/dist/cli/wiki.js +53 -10
  69. package/dist/config/ignore-service.d.ts +2 -0
  70. package/dist/config/ignore-service.js +54 -13
  71. package/dist/core/analyzer-identity.d.ts +80 -0
  72. package/dist/core/analyzer-identity.js +364 -26
  73. package/dist/core/augmentation/engine.js +86 -71
  74. package/dist/core/embedding-checkpoint.d.ts +143 -0
  75. package/dist/core/embedding-checkpoint.js +221 -0
  76. package/dist/core/embedding-count.d.ts +61 -0
  77. package/dist/core/embedding-count.js +69 -0
  78. package/dist/core/embeddings/ast-utils.js +9 -1
  79. package/dist/core/embeddings/embedding-pipeline.d.ts +8 -0
  80. package/dist/core/embeddings/embedding-pipeline.js +253 -14
  81. package/dist/core/embeddings/http-client.d.ts +5 -0
  82. package/dist/core/embeddings/http-client.js +142 -27
  83. package/dist/core/graph/graph.js +3 -0
  84. package/dist/core/graph/import-cycles.d.ts +194 -3
  85. package/dist/core/graph/import-cycles.js +522 -73
  86. package/dist/core/graph/types.d.ts +18 -0
  87. package/dist/core/group/bridge-db.d.ts +204 -1
  88. package/dist/core/group/bridge-db.js +401 -28
  89. package/dist/core/group/completeness.d.ts +130 -0
  90. package/dist/core/group/completeness.js +83 -0
  91. package/dist/core/group/config-parser.js +0 -5
  92. package/dist/core/group/cross-impact.d.ts +46 -1
  93. package/dist/core/group/cross-impact.js +220 -19
  94. package/dist/core/group/cross-trace.d.ts +32 -11
  95. package/dist/core/group/cross-trace.js +114 -20
  96. package/dist/core/group/extractors/http-patterns/java.js +278 -22
  97. package/dist/core/group/extractors/http-patterns/node.js +332 -216
  98. package/dist/core/group/extractors/http-patterns/types.d.ts +8 -0
  99. package/dist/core/group/extractors/http-route-extractor.d.ts +1 -0
  100. package/dist/core/group/extractors/http-route-extractor.js +122 -48
  101. package/dist/core/group/extractors/include-extractor.js +20 -2
  102. package/dist/core/group/extractors/manifest-extractor.d.ts +1 -1
  103. package/dist/core/group/extractors/manifest-extractor.js +7 -7
  104. package/dist/core/group/extractors/python-workspace-extractor.js +5 -2
  105. package/dist/core/group/group-lock.d.ts +31 -0
  106. package/dist/core/group/group-lock.js +166 -0
  107. package/dist/core/group/service.js +297 -16
  108. package/dist/core/group/storage.d.ts +3 -0
  109. package/dist/core/group/storage.js +7 -39
  110. package/dist/core/group/sync.d.ts +49 -3
  111. package/dist/core/group/sync.js +0 -0
  112. package/dist/core/group/types.d.ts +183 -8
  113. package/dist/core/group/types.js +28 -1
  114. package/dist/core/incremental/subgraph-extract.d.ts +9 -6
  115. package/dist/core/incremental/subgraph-extract.js +33 -10
  116. package/dist/core/index-freshness.d.ts +77 -2
  117. package/dist/core/index-freshness.js +109 -2
  118. package/dist/core/ingestion/call-processor.d.ts +13 -1
  119. package/dist/core/ingestion/call-processor.js +110 -3
  120. package/dist/core/ingestion/cfg/callee-cell-format.d.ts +42 -0
  121. package/dist/core/ingestion/cfg/callee-cell-format.js +42 -0
  122. package/dist/core/ingestion/cfg/emit.d.ts +8 -23
  123. package/dist/core/ingestion/cfg/emit.js +9 -23
  124. package/dist/core/ingestion/class-extractors/configs/go.js +10 -5
  125. package/dist/core/ingestion/cluster-enricher.js +8 -4
  126. package/dist/core/ingestion/community-processor.d.ts +21 -3
  127. package/dist/core/ingestion/community-processor.js +81 -82
  128. package/dist/core/ingestion/di-extractors/index.d.ts +9 -33
  129. package/dist/core/ingestion/di-extractors/spring.d.ts +1 -1
  130. package/dist/core/ingestion/di-extractors/spring.js +8 -1
  131. package/dist/core/ingestion/di-extractors/types.d.ts +60 -0
  132. package/dist/core/ingestion/di-extractors/types.js +15 -0
  133. package/dist/core/ingestion/filesystem-walker.js +30 -14
  134. package/dist/core/ingestion/finalize-orchestrator.js +1 -0
  135. package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +6 -0
  136. package/dist/core/ingestion/frameworks/spring/analysis-features.js +35 -1
  137. package/dist/core/ingestion/frameworks/spring/annotation-arguments.d.ts +13 -0
  138. package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +227 -0
  139. package/dist/core/ingestion/frameworks/spring/aop-candidates.d.ts +15 -0
  140. package/dist/core/ingestion/frameworks/spring/aop-candidates.js +85 -0
  141. package/dist/core/ingestion/frameworks/spring/aop.d.ts +118 -0
  142. package/dist/core/ingestion/frameworks/spring/aop.js +476 -0
  143. package/dist/core/ingestion/frameworks/spring/auto-configuration.d.ts +8 -0
  144. package/dist/core/ingestion/frameworks/spring/auto-configuration.js +16 -0
  145. package/dist/core/ingestion/frameworks/spring/bean-catalog.js +1 -0
  146. package/dist/core/ingestion/frameworks/spring/bean-factories.d.ts +33 -0
  147. package/dist/core/ingestion/frameworks/spring/bean-factories.js +65 -0
  148. package/dist/core/ingestion/frameworks/spring/conditionals.d.ts +25 -0
  149. package/dist/core/ingestion/frameworks/spring/conditionals.js +319 -0
  150. package/dist/core/ingestion/frameworks/spring/di-metadata.d.ts +3 -0
  151. package/dist/core/ingestion/frameworks/spring/di-metadata.js +162 -13
  152. package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +28 -0
  153. package/dist/core/ingestion/frameworks/spring/non-http-handlers.js +152 -0
  154. package/dist/core/ingestion/frameworks/spring/resource-injection.d.ts +5 -0
  155. package/dist/core/ingestion/frameworks/spring/resource-injection.js +91 -0
  156. package/dist/core/ingestion/import-resolvers/configs/csharp.js +5 -1
  157. package/dist/core/ingestion/import-resolvers/configs/swift.js +13 -0
  158. package/dist/core/ingestion/import-resolvers/csharp.d.ts +9 -1
  159. package/dist/core/ingestion/import-resolvers/csharp.js +234 -27
  160. package/dist/core/ingestion/import-resolvers/go.d.ts +11 -1
  161. package/dist/core/ingestion/import-resolvers/go.js +44 -17
  162. package/dist/core/ingestion/import-resolvers/jvm.d.ts +2 -2
  163. package/dist/core/ingestion/import-resolvers/node-workspace-packages.d.ts +90 -0
  164. package/dist/core/ingestion/import-resolvers/node-workspace-packages.js +429 -0
  165. package/dist/core/ingestion/import-resolvers/package-dir-index.d.ts +124 -0
  166. package/dist/core/ingestion/import-resolvers/package-dir-index.js +223 -0
  167. package/dist/core/ingestion/import-resolvers/pass-cache.d.ts +50 -0
  168. package/dist/core/ingestion/import-resolvers/pass-cache.js +60 -0
  169. package/dist/core/ingestion/import-resolvers/per-file-set.d.ts +71 -0
  170. package/dist/core/ingestion/import-resolvers/per-file-set.js +11 -0
  171. package/dist/core/ingestion/import-resolvers/php.d.ts +1 -1
  172. package/dist/core/ingestion/import-resolvers/php.js +65 -19
  173. package/dist/core/ingestion/import-resolvers/python-file-index.d.ts +201 -0
  174. package/dist/core/ingestion/import-resolvers/python-file-index.js +302 -0
  175. package/dist/core/ingestion/import-resolvers/python.js +25 -6
  176. package/dist/core/ingestion/import-resolvers/ruby.d.ts +1 -1
  177. package/dist/core/ingestion/import-resolvers/rust.d.ts +2 -2
  178. package/dist/core/ingestion/import-resolvers/standard.d.ts +1 -1
  179. package/dist/core/ingestion/import-resolvers/types.d.ts +1 -12
  180. package/dist/core/ingestion/import-resolvers/utils.d.ts +65 -6
  181. package/dist/core/ingestion/import-resolvers/utils.js +215 -36
  182. package/dist/core/ingestion/import-resolvers/workspace-file-index.d.ts +72 -0
  183. package/dist/core/ingestion/import-resolvers/workspace-file-index.js +58 -0
  184. package/dist/core/ingestion/language-config.d.ts +29 -1
  185. package/dist/core/ingestion/language-config.js +110 -35
  186. package/dist/core/ingestion/language-provider.d.ts +209 -7
  187. package/dist/core/ingestion/language-provider.js +37 -0
  188. package/dist/core/ingestion/languages/c/captures.js +7 -0
  189. package/dist/core/ingestion/languages/c/import-target.js +12 -16
  190. package/dist/core/ingestion/languages/c/scope-resolver.js +20 -19
  191. package/dist/core/ingestion/languages/c/static-linkage.js +12 -16
  192. package/dist/core/ingestion/languages/c-cpp.js +13 -0
  193. package/dist/core/ingestion/languages/cobol/scope-resolver.js +27 -20
  194. package/dist/core/ingestion/languages/cobol.js +13 -0
  195. package/dist/core/ingestion/languages/cpp/adl.d.ts +2 -2
  196. package/dist/core/ingestion/languages/cpp/adl.js +67 -44
  197. package/dist/core/ingestion/languages/cpp/captures.js +14 -2
  198. package/dist/core/ingestion/languages/cpp/file-local-linkage.js +11 -15
  199. package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +28 -8
  200. package/dist/core/ingestion/languages/cpp/inline-namespaces.js +242 -68
  201. package/dist/core/ingestion/languages/cpp/interpret.d.ts +2 -0
  202. package/dist/core/ingestion/languages/cpp/interpret.js +126 -6
  203. package/dist/core/ingestion/languages/cpp/query.js +106 -0
  204. package/dist/core/ingestion/languages/cpp/scope-resolver.js +48 -20
  205. package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +2 -15
  206. package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +18 -10
  207. package/dist/core/ingestion/languages/csharp/captures.js +19 -0
  208. package/dist/core/ingestion/languages/csharp/import-target.js +46 -72
  209. package/dist/core/ingestion/languages/csharp/namespace-siblings.js +5 -1
  210. package/dist/core/ingestion/languages/csharp/query.js +25 -5
  211. package/dist/core/ingestion/languages/csharp/scope-resolver.js +75 -2
  212. package/dist/core/ingestion/languages/dart/captures.d.ts +10 -0
  213. package/dist/core/ingestion/languages/dart/captures.js +598 -16
  214. package/dist/core/ingestion/languages/dart/import-target.js +32 -9
  215. package/dist/core/ingestion/languages/dart/index.d.ts +1 -1
  216. package/dist/core/ingestion/languages/dart/index.js +1 -1
  217. package/dist/core/ingestion/languages/dart/query.js +98 -1
  218. package/dist/core/ingestion/languages/dart/scope-resolver.js +14 -3
  219. package/dist/core/ingestion/languages/dart/simple-hooks.js +9 -0
  220. package/dist/core/ingestion/languages/dart.js +6 -1
  221. package/dist/core/ingestion/languages/go/captures.js +108 -3
  222. package/dist/core/ingestion/languages/go/generic-type-parameters.d.ts +31 -0
  223. package/dist/core/ingestion/languages/go/generic-type-parameters.js +140 -0
  224. package/dist/core/ingestion/languages/go/import-target.d.ts +3 -10
  225. package/dist/core/ingestion/languages/go/import-target.js +34 -30
  226. package/dist/core/ingestion/languages/go/index.d.ts +1 -1
  227. package/dist/core/ingestion/languages/go/interface-impls.d.ts +9 -1
  228. package/dist/core/ingestion/languages/go/interface-impls.js +693 -87
  229. package/dist/core/ingestion/languages/go/interpret.d.ts +2 -0
  230. package/dist/core/ingestion/languages/go/interpret.js +22 -8
  231. package/dist/core/ingestion/languages/go/method-owners.js +31 -12
  232. package/dist/core/ingestion/languages/go/package-clause.d.ts +46 -0
  233. package/dist/core/ingestion/languages/go/package-clause.js +75 -0
  234. package/dist/core/ingestion/languages/go/package-siblings.js +7 -11
  235. package/dist/core/ingestion/languages/go/query.js +56 -3
  236. package/dist/core/ingestion/languages/go/scope-resolver.js +39 -0
  237. package/dist/core/ingestion/languages/go.js +9 -0
  238. package/dist/core/ingestion/languages/java/analysis-features.d.ts +4 -0
  239. package/dist/core/ingestion/languages/java/analysis-features.js +12 -0
  240. package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +12 -0
  241. package/dist/core/ingestion/languages/java/capture-side-channel.js +48 -0
  242. package/dist/core/ingestion/languages/java/captures.js +77 -32
  243. package/dist/core/ingestion/languages/java/import-target.d.ts +49 -9
  244. package/dist/core/ingestion/languages/java/import-target.js +68 -88
  245. package/dist/core/ingestion/languages/java/interpret.js +3 -2
  246. package/dist/core/ingestion/languages/java/module-resolution.d.ts +62 -0
  247. package/dist/core/ingestion/languages/java/module-resolution.js +142 -0
  248. package/dist/core/ingestion/languages/java/query.js +15 -3
  249. package/dist/core/ingestion/languages/java/record-components.d.ts +14 -0
  250. package/dist/core/ingestion/languages/java/record-components.js +185 -0
  251. package/dist/core/ingestion/languages/java/scope-resolver.js +10 -2
  252. package/dist/core/ingestion/languages/java/spring-aop.d.ts +12 -0
  253. package/dist/core/ingestion/languages/java/spring-aop.js +49 -0
  254. package/dist/core/ingestion/languages/java/spring-conditionals.d.ts +11 -0
  255. package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
  256. package/dist/core/ingestion/languages/java/spring-di.d.ts +4 -1
  257. package/dist/core/ingestion/languages/java/spring-di.js +41 -9
  258. package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +7 -0
  259. package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +32 -0
  260. package/dist/core/ingestion/languages/java.js +94 -3
  261. package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
  262. package/dist/core/ingestion/languages/javascript/captures.js +262 -4
  263. package/dist/core/ingestion/languages/javascript/import-target.d.ts +17 -21
  264. package/dist/core/ingestion/languages/javascript/import-target.js +24 -41
  265. package/dist/core/ingestion/languages/javascript/index.d.ts +54 -5
  266. package/dist/core/ingestion/languages/javascript/index.js +54 -5
  267. package/dist/core/ingestion/languages/javascript/query.d.ts +1 -0
  268. package/dist/core/ingestion/languages/javascript/query.js +211 -5
  269. package/dist/core/ingestion/languages/javascript/scope-resolver.js +12 -0
  270. package/dist/core/ingestion/languages/javascript/simple-hooks.js +2 -1
  271. package/dist/core/ingestion/languages/jvm/package-siblings.js +77 -9
  272. package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +15 -0
  273. package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +48 -0
  274. package/dist/core/ingestion/languages/kotlin/captures.js +43 -1
  275. package/dist/core/ingestion/languages/kotlin/import-target.d.ts +8 -1
  276. package/dist/core/ingestion/languages/kotlin/import-target.js +20 -123
  277. package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
  278. package/dist/core/ingestion/languages/kotlin/index.js +1 -0
  279. package/dist/core/ingestion/languages/kotlin/module-resolution.d.ts +22 -0
  280. package/dist/core/ingestion/languages/kotlin/module-resolution.js +108 -0
  281. package/dist/core/ingestion/languages/kotlin/query.js +28 -2
  282. package/dist/core/ingestion/languages/kotlin/scope-resolver.js +23 -2
  283. package/dist/core/ingestion/languages/kotlin/spring-aop.d.ts +12 -0
  284. package/dist/core/ingestion/languages/kotlin/spring-aop.js +64 -0
  285. package/dist/core/ingestion/languages/kotlin/spring-conditionals.d.ts +12 -0
  286. package/dist/core/ingestion/languages/kotlin/spring-conditionals.js +49 -0
  287. package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +2 -0
  288. package/dist/core/ingestion/languages/kotlin/spring-di.js +60 -11
  289. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +10 -0
  290. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +41 -0
  291. package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
  292. package/dist/core/ingestion/languages/php/captures.js +319 -51
  293. package/dist/core/ingestion/languages/php/import-target.d.ts +3 -4
  294. package/dist/core/ingestion/languages/php/import-target.js +192 -62
  295. package/dist/core/ingestion/languages/php/query.js +31 -0
  296. package/dist/core/ingestion/languages/python/arity-metadata.d.ts +1 -0
  297. package/dist/core/ingestion/languages/python/arity-metadata.js +1 -0
  298. package/dist/core/ingestion/languages/python/captures.js +29 -0
  299. package/dist/core/ingestion/languages/python/import-decomposer.js +22 -1
  300. package/dist/core/ingestion/languages/python/import-target.d.ts +42 -1
  301. package/dist/core/ingestion/languages/python/import-target.js +277 -91
  302. package/dist/core/ingestion/languages/python/index.d.ts +1 -1
  303. package/dist/core/ingestion/languages/python/index.js +1 -1
  304. package/dist/core/ingestion/languages/python/interpret.d.ts +52 -0
  305. package/dist/core/ingestion/languages/python/interpret.js +249 -7
  306. package/dist/core/ingestion/languages/python/query.js +9 -0
  307. package/dist/core/ingestion/languages/python/receiver-binding.d.ts +8 -6
  308. package/dist/core/ingestion/languages/python/receiver-binding.js +108 -12
  309. package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
  310. package/dist/core/ingestion/languages/python/simple-hooks.js +2 -8
  311. package/dist/core/ingestion/languages/python.js +13 -0
  312. package/dist/core/ingestion/languages/ruby/captures.js +158 -0
  313. package/dist/core/ingestion/languages/ruby/import-target.js +7 -5
  314. package/dist/core/ingestion/languages/ruby/query.js +93 -0
  315. package/dist/core/ingestion/languages/ruby/scope-resolver.js +2 -0
  316. package/dist/core/ingestion/languages/ruby/simple-hooks.d.ts +1 -1
  317. package/dist/core/ingestion/languages/ruby/simple-hooks.js +22 -1
  318. package/dist/core/ingestion/languages/rust/captures.js +39 -1
  319. package/dist/core/ingestion/languages/rust/method-owners.js +11 -1
  320. package/dist/core/ingestion/languages/rust/module-path.d.ts +126 -0
  321. package/dist/core/ingestion/languages/rust/module-path.js +214 -0
  322. package/dist/core/ingestion/languages/rust/qualified-call.d.ts +41 -0
  323. package/dist/core/ingestion/languages/rust/qualified-call.js +481 -0
  324. package/dist/core/ingestion/languages/rust/query.js +39 -6
  325. package/dist/core/ingestion/languages/rust/scope-resolver.js +21 -2
  326. package/dist/core/ingestion/languages/rust.js +17 -0
  327. package/dist/core/ingestion/languages/swift/captures.js +87 -3
  328. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.d.ts +48 -0
  329. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.js +253 -0
  330. package/dist/core/ingestion/languages/swift/import-target.js +4 -9
  331. package/dist/core/ingestion/languages/swift/query.js +17 -0
  332. package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +8 -0
  333. package/dist/core/ingestion/languages/swift/receiver-binding.js +6 -2
  334. package/dist/core/ingestion/languages/swift.js +2 -0
  335. package/dist/core/ingestion/languages/typescript/captures.d.ts +90 -1
  336. package/dist/core/ingestion/languages/typescript/captures.js +267 -5
  337. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.d.ts +134 -0
  338. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.js +523 -0
  339. package/dist/core/ingestion/languages/typescript/cjs-module-exports.d.ts +54 -0
  340. package/dist/core/ingestion/languages/typescript/cjs-module-exports.js +191 -0
  341. package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.d.ts +7 -0
  342. package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.js +92 -0
  343. package/dist/core/ingestion/languages/typescript/file-candidates.d.ts +29 -0
  344. package/dist/core/ingestion/languages/typescript/file-candidates.js +70 -0
  345. package/dist/core/ingestion/languages/typescript/import-decomposer.d.ts +28 -1
  346. package/dist/core/ingestion/languages/typescript/import-decomposer.js +125 -10
  347. package/dist/core/ingestion/languages/typescript/import-target.d.ts +25 -37
  348. package/dist/core/ingestion/languages/typescript/import-target.js +24 -26
  349. package/dist/core/ingestion/languages/typescript/interpret.d.ts +21 -1
  350. package/dist/core/ingestion/languages/typescript/interpret.js +45 -5
  351. package/dist/core/ingestion/languages/typescript/module-resolution.d.ts +48 -0
  352. package/dist/core/ingestion/languages/typescript/module-resolution.js +171 -0
  353. package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
  354. package/dist/core/ingestion/languages/typescript/query.js +303 -14
  355. package/dist/core/ingestion/languages/typescript/receiver-binding.d.ts +17 -0
  356. package/dist/core/ingestion/languages/typescript/receiver-binding.js +27 -0
  357. package/dist/core/ingestion/languages/typescript/scope-resolver.js +27 -40
  358. package/dist/core/ingestion/languages/typescript/simple-hooks.d.ts +0 -10
  359. package/dist/core/ingestion/languages/typescript/simple-hooks.js +22 -22
  360. package/dist/core/ingestion/languages/typescript/tsconfig.d.ts +59 -0
  361. package/dist/core/ingestion/languages/typescript/tsconfig.js +292 -0
  362. package/dist/core/ingestion/languages/typescript.js +93 -2
  363. package/dist/core/ingestion/languages/vue/import-target.d.ts +6 -22
  364. package/dist/core/ingestion/languages/vue/import-target.js +11 -47
  365. package/dist/core/ingestion/languages/vue/scope-resolver.js +4 -2
  366. package/dist/core/ingestion/local-symbol-pruner.js +11 -11
  367. package/dist/core/ingestion/method-extractors/configs/csharp.js +1 -0
  368. package/dist/core/ingestion/method-extractors/generic.js +1 -0
  369. package/dist/core/ingestion/method-types.d.ts +16 -0
  370. package/dist/core/ingestion/pipeline-phases/di.d.ts +1 -1
  371. package/dist/core/ingestion/pipeline-phases/di.js +136 -21
  372. package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
  373. package/dist/core/ingestion/pipeline-phases/index.js +2 -0
  374. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
  375. package/dist/core/ingestion/pipeline-phases/parse-impl.js +154 -4
  376. package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
  377. package/dist/core/ingestion/pipeline-phases/processes.d.ts +3 -2
  378. package/dist/core/ingestion/pipeline-phases/processes.js +91 -6
  379. package/dist/core/ingestion/pipeline-phases/routes.js +116 -25
  380. package/dist/core/ingestion/pipeline-phases/spring-aop.d.ts +34 -0
  381. package/dist/core/ingestion/pipeline-phases/spring-aop.js +439 -0
  382. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +34 -0
  383. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +255 -0
  384. package/dist/core/ingestion/pipeline-phases/types.d.ts +7 -0
  385. package/dist/core/ingestion/pipeline.d.ts +26 -2
  386. package/dist/core/ingestion/pipeline.js +60 -11
  387. package/dist/core/ingestion/process-processor.d.ts +109 -2
  388. package/dist/core/ingestion/process-processor.js +464 -52
  389. package/dist/core/ingestion/resolve-references.d.ts +6 -1
  390. package/dist/core/ingestion/resolve-references.js +66 -6
  391. package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +8 -2
  392. package/dist/core/ingestion/route-extractors/constant-resolver.js +11 -7
  393. package/dist/core/ingestion/route-extractors/data-route-table.d.ts +40 -0
  394. package/dist/core/ingestion/route-extractors/data-route-table.js +876 -0
  395. package/dist/core/ingestion/route-extractors/dispatch-guard.d.ts +96 -0
  396. package/dist/core/ingestion/route-extractors/dispatch-guard.js +1184 -0
  397. package/dist/core/ingestion/route-extractors/java-const-resolver.d.ts +114 -0
  398. package/dist/core/ingestion/route-extractors/java-const-resolver.js +569 -0
  399. package/dist/core/ingestion/route-extractors/js-const-resolver.d.ts +192 -0
  400. package/dist/core/ingestion/route-extractors/js-const-resolver.js +1033 -0
  401. package/dist/core/ingestion/route-extractors/nest.d.ts +53 -0
  402. package/dist/core/ingestion/route-extractors/nest.js +523 -0
  403. package/dist/core/ingestion/route-extractors/spring-shared.d.ts +11 -0
  404. package/dist/core/ingestion/route-extractors/spring-shared.js +89 -0
  405. package/dist/core/ingestion/route-extractors/spring.js +214 -29
  406. package/dist/core/ingestion/scope-extractor-bridge.js +9 -1
  407. package/dist/core/ingestion/scope-extractor.d.ts +22 -7
  408. package/dist/core/ingestion/scope-extractor.js +309 -15
  409. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +311 -21
  410. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
  411. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +12 -0
  412. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +47 -0
  413. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
  414. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +280 -42
  415. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +123 -0
  416. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +171 -17
  417. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +58 -1
  418. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +137 -34
  419. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +30 -1
  420. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +39 -1
  421. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +18 -1
  422. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +113 -18
  423. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +107 -5
  424. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +590 -33
  425. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +3 -0
  426. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +101 -41
  427. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.d.ts +34 -0
  428. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.js +62 -0
  429. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +5 -1
  430. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +8 -1
  431. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +105 -5
  432. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +931 -92
  433. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.d.ts +58 -0
  434. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.js +458 -0
  435. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.d.ts +180 -0
  436. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.js +418 -0
  437. package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +29 -0
  438. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +57 -0
  439. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +55 -1
  440. package/dist/core/ingestion/scope-resolution/pipeline/run.js +241 -19
  441. package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +112 -2
  442. package/dist/core/ingestion/scope-resolution/resolution-outcome.js +38 -1
  443. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +25 -3
  444. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +36 -16
  445. package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +210 -9
  446. package/dist/core/ingestion/scope-resolution/scope/walkers.js +905 -22
  447. package/dist/core/ingestion/scope-resolution/summary-maps.d.ts +28 -0
  448. package/dist/core/ingestion/scope-resolution/summary-maps.js +50 -0
  449. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.d.ts +55 -0
  450. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.js +37 -0
  451. package/dist/core/ingestion/scope-resolution/unresolved-receivers.d.ts +109 -0
  452. package/dist/core/ingestion/scope-resolution/unresolved-receivers.js +204 -0
  453. package/dist/core/ingestion/scope-resolution/utils/definition-id.d.ts +13 -0
  454. package/dist/core/ingestion/scope-resolution/utils/definition-id.js +19 -0
  455. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.d.ts +171 -0
  456. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.js +218 -0
  457. package/dist/core/ingestion/scope-resolution/workspace-index-types.d.ts +34 -0
  458. package/dist/core/ingestion/scope-resolution/workspace-index-types.js +15 -0
  459. package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +7 -20
  460. package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
  461. package/dist/core/ingestion/tree-sitter-queries.js +678 -4
  462. package/dist/core/ingestion/type-env.js +11 -7
  463. package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
  464. package/dist/core/ingestion/type-extractors/shared.js +16 -0
  465. package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
  466. package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
  467. package/dist/core/ingestion/type-extractors/typescript.js +26 -0
  468. package/dist/core/ingestion/utils/ast-helpers.d.ts +297 -15
  469. package/dist/core/ingestion/utils/ast-helpers.js +578 -46
  470. package/dist/core/ingestion/utils/call-analysis.d.ts +27 -22
  471. package/dist/core/ingestion/utils/call-analysis.js +202 -7
  472. package/dist/core/ingestion/utils/callable-flow-captures.d.ts +59 -0
  473. package/dist/core/ingestion/utils/callable-flow-captures.js +51 -1
  474. package/dist/core/ingestion/utils/callable-labels.d.ts +25 -0
  475. package/dist/core/ingestion/utils/callable-labels.js +31 -0
  476. package/dist/core/ingestion/utils/effective-ram.d.ts +40 -0
  477. package/dist/core/ingestion/utils/effective-ram.js +58 -0
  478. package/dist/core/ingestion/utils/line-base.d.ts +14 -0
  479. package/dist/core/ingestion/utils/line-base.js +14 -0
  480. package/dist/core/ingestion/utils/method-props.d.ts +27 -4
  481. package/dist/core/ingestion/utils/method-props.js +29 -4
  482. package/dist/core/ingestion/utils/receiver-chain-captures.d.ts +31 -0
  483. package/dist/core/ingestion/utils/receiver-chain-captures.js +57 -0
  484. package/dist/core/ingestion/utils/receiver-chain-codec.d.ts +89 -0
  485. package/dist/core/ingestion/utils/receiver-chain-codec.js +182 -0
  486. package/dist/core/ingestion/utils/scope-tree-walk.d.ts +22 -0
  487. package/dist/core/ingestion/utils/scope-tree-walk.js +33 -0
  488. package/dist/core/ingestion/utils/template-arguments.d.ts +96 -0
  489. package/dist/core/ingestion/utils/template-arguments.js +196 -0
  490. package/dist/core/ingestion/utils/type-parameters.d.ts +49 -0
  491. package/dist/core/ingestion/utils/type-parameters.js +206 -0
  492. package/dist/core/ingestion/workers/callable-id.d.ts +80 -0
  493. package/dist/core/ingestion/workers/callable-id.js +125 -0
  494. package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
  495. package/dist/core/ingestion/workers/parse-worker.js +493 -54
  496. package/dist/core/ingestion/workers/worker-pool.d.ts +20 -27
  497. package/dist/core/ingestion/workers/worker-pool.js +91 -3
  498. package/dist/core/lbug/csv-generator.d.ts +27 -0
  499. package/dist/core/lbug/csv-generator.js +72 -17
  500. package/dist/core/lbug/extension-load-error.js +13 -2
  501. package/dist/core/lbug/extension-loader.d.ts +29 -0
  502. package/dist/core/lbug/extension-loader.js +31 -6
  503. package/dist/core/lbug/graph-emit-sink.d.ts +264 -0
  504. package/dist/core/lbug/graph-emit-sink.js +581 -0
  505. package/dist/core/lbug/lbug-adapter.d.ts +290 -11
  506. package/dist/core/lbug/lbug-adapter.js +652 -69
  507. package/dist/core/lbug/native-check.d.ts +21 -0
  508. package/dist/core/lbug/native-check.js +248 -32
  509. package/dist/core/lbug/pdg-emit-sink.d.ts +13 -4
  510. package/dist/core/lbug/pdg-emit-sink.js +21 -111
  511. package/dist/core/lbug/pool-adapter.d.ts +9 -0
  512. package/dist/core/lbug/pool-adapter.js +164 -14
  513. package/dist/core/lbug/query-batch.d.ts +75 -0
  514. package/dist/core/lbug/query-batch.js +102 -0
  515. package/dist/core/lbug/rel-pair-routing.d.ts +160 -2
  516. package/dist/core/lbug/rel-pair-routing.js +228 -10
  517. package/dist/core/lbug/schema.d.ts +163 -4
  518. package/dist/core/lbug/schema.js +404 -159
  519. package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
  520. package/dist/core/lbug/sync-csv-writer.js +108 -0
  521. package/dist/core/run-analyze.d.ts +147 -0
  522. package/dist/core/run-analyze.js +1215 -179
  523. package/dist/core/search/bm25-index.d.ts +11 -0
  524. package/dist/core/search/bm25-index.js +60 -26
  525. package/dist/core/search/fts-indexes.d.ts +150 -9
  526. package/dist/core/search/fts-indexes.js +241 -23
  527. package/dist/core/wiki/graph-queries.js +145 -112
  528. package/dist/core/wiki/llm-client.d.ts +29 -3
  529. package/dist/core/wiki/llm-client.js +47 -12
  530. package/dist/core/wiki/prompts.d.ts +19 -0
  531. package/dist/core/wiki/prompts.js +20 -1
  532. package/dist/lib/utils.d.ts +113 -0
  533. package/dist/lib/utils.js +185 -0
  534. package/dist/mcp/local/aop-metadata.d.ts +77 -0
  535. package/dist/mcp/local/aop-metadata.js +227 -0
  536. package/dist/mcp/local/bean-metadata.d.ts +2 -1
  537. package/dist/mcp/local/bean-metadata.js +22 -1
  538. package/dist/mcp/local/convex-metadata.d.ts +8 -0
  539. package/dist/mcp/local/convex-metadata.js +45 -0
  540. package/dist/mcp/local/local-backend.d.ts +174 -11
  541. package/dist/mcp/local/local-backend.js +1678 -331
  542. package/dist/mcp/local/path-predicate.d.ts +19 -0
  543. package/dist/mcp/local/path-predicate.js +21 -0
  544. package/dist/mcp/local/pdg-impact.d.ts +132 -10
  545. package/dist/mcp/local/pdg-impact.js +391 -98
  546. package/dist/mcp/repository-policy.d.ts +1 -0
  547. package/dist/mcp/repository-policy.js +5 -0
  548. package/dist/mcp/resources.js +26 -4
  549. package/dist/mcp/server.js +23 -13
  550. package/dist/mcp/tools.d.ts +8 -0
  551. package/dist/mcp/tools.js +76 -23
  552. package/dist/server/analyze-job.d.ts +37 -2
  553. package/dist/server/analyze-job.js +13 -2
  554. package/dist/server/analyze-launch.d.ts +1 -1
  555. package/dist/server/analyze-launch.js +79 -10
  556. package/dist/server/analyze-worker-core.d.ts +1 -1
  557. package/dist/server/analyze-worker-core.js +10 -1
  558. package/dist/server/analyze-worker-ipc.d.ts +1 -1
  559. package/dist/server/analyze-worker-ipc.js +4 -0
  560. package/dist/server/analyze-worker-protocol.d.ts +59 -0
  561. package/dist/server/analyze-worker-protocol.js +1 -0
  562. package/dist/server/analyze-worker.d.ts +1 -17
  563. package/dist/server/api.d.ts +2 -11
  564. package/dist/server/api.js +164 -163
  565. package/dist/server/embed-run-outcome.d.ts +89 -0
  566. package/dist/server/embed-run-outcome.js +88 -0
  567. package/dist/server/git-clone.js +6 -2
  568. package/dist/server/middleware.d.ts +116 -9
  569. package/dist/server/middleware.js +291 -22
  570. package/dist/server/sse-progress.d.ts +41 -0
  571. package/dist/server/sse-progress.js +125 -0
  572. package/dist/storage/branch-index.d.ts +11 -6
  573. package/dist/storage/branch-index.js +15 -7
  574. package/dist/storage/file-hash.js +2 -2
  575. package/dist/storage/fs-atomic.d.ts +25 -0
  576. package/dist/storage/fs-atomic.js +42 -0
  577. package/dist/storage/git.d.ts +131 -0
  578. package/dist/storage/git.js +236 -2
  579. package/dist/storage/index-lock.d.ts +102 -0
  580. package/dist/storage/index-lock.js +660 -0
  581. package/dist/storage/parse-cache.js +588 -6
  582. package/dist/storage/parsedfile-store.js +76 -6
  583. package/dist/storage/repo-manager.d.ts +54 -441
  584. package/dist/storage/repo-manager.js +312 -221
  585. package/dist/storage/repo-meta.d.ts +530 -0
  586. package/dist/storage/repo-meta.js +100 -0
  587. package/dist/types/pipeline.d.ts +37 -0
  588. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +1 -1
  589. package/hooks/claude/gitnexus-hook.cjs +1 -1
  590. package/hooks/claude/resolve-analyze-cmd.cjs +80 -13
  591. package/package.json +11 -2
  592. package/scripts/cross-platform-shard.ts +153 -0
  593. package/scripts/cross-platform-tests.ts +122 -0
  594. package/scripts/run-cross-platform.ts +16 -5
  595. package/skills/gitnexus-cli.md +3 -3
  596. package/skills/gitnexus-debugging.md +37 -7
  597. package/skills/gitnexus-exploring.md +26 -4
  598. package/skills/gitnexus-impact-analysis.md +71 -10
  599. package/skills/gitnexus-plan/README.md +11 -6
  600. package/skills/gitnexus-plan/references/evidence-provenance.md +49 -12
  601. package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +654 -372
  602. package/skills/gitnexus-refactoring.md +48 -5
  603. package/skills/gitnexus-review/SKILL.md +12 -6
  604. package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +1 -1
  605. package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +1 -1
  606. package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +1 -1
  607. package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +1 -1
  608. package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +1 -1
  609. package/skills/gitnexus-review/ci-personas/ci-security-lens.md +1 -1
  610. package/skills/gitnexus-taint-analysis.md +13 -7
  611. package/skills/gitnexus-work/SKILL.md +4 -1
  612. package/skills/gitnexus-work/references/evidence-provenance.md +49 -12
  613. package/skills/gitnexus-work/scripts/evidence-provenance.mjs +654 -372
  614. package/vendor/leiden/utils.cjs +28 -1
  615. package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
  616. package/web/assets/{__vite-browser-external-bMKyYQkO.js → __vite-browser-external-COxE8F0G.js} +1 -1
  617. package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
  618. package/web/assets/agent-Dr4l5EOp.js +662 -0
  619. package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
  620. package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
  621. package/web/assets/{blockDiagram-7IZFK4PR-DBefcjof.js → blockDiagram-54WLDVWM-Dg_hrRWE.js} +4 -4
  622. package/web/assets/{c4Diagram-Y2BXMSZH-EjWnjEJl.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +2 -2
  623. package/web/assets/chunk-224SPVON-B8gxtXpy.js +1 -0
  624. package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +127 -0
  625. package/web/assets/chunk-2SREHG4O-Dip42xOq.js +1 -0
  626. package/web/assets/chunk-4RFN2BYJ-DHHWuC-n.js +1 -0
  627. package/web/assets/chunk-66DQ2XMT-CM0xjFAN.js +1 -0
  628. package/web/assets/chunk-6BELYETK-ChsYtfHW.js +1 -0
  629. package/web/assets/{chunk-LII3EMHJ-BL6lKJ_P.js → chunk-6L755F7B-CMhLBxi2.js} +1 -1
  630. package/web/assets/{chunk-QA3QBVWF-DVXPOIxe.js → chunk-7CWYLC5S-DRgGkkpF.js} +1 -1
  631. package/web/assets/{chunk-ZXARS5L4-C3v-4Fsw.js → chunk-A7VWPJGB-B4O3oQdQ.js} +1 -1
  632. package/web/assets/chunk-BI6VK774-D0oaWk8V.js +1 -0
  633. package/web/assets/chunk-D6VWDJW2-BxcBdZ9c.js +2 -0
  634. package/web/assets/chunk-DMV4VAQV-Bn6WXDSX.js +4 -0
  635. package/web/assets/chunk-E5QJAATJ-dh-5CtIV.js +2 -0
  636. package/web/assets/chunk-EQFTRU2I-1ix7TzW9.js +2 -0
  637. package/web/assets/chunk-FWYVLQTC-BgDItRzJ.js +1 -0
  638. package/web/assets/chunk-HNC4WDU7-DoU3KnA7.js +1 -0
  639. package/web/assets/chunk-L5GCOVLC-CE2w8Nm_.js +161 -0
  640. package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +321 -0
  641. package/web/assets/chunk-LORZLZWG-B57uGw2N.js +88 -0
  642. package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +62 -0
  643. package/web/assets/chunk-NV3KIAZN-5yvcpMiu.js +1 -0
  644. package/web/assets/chunk-OIYT25JQ-CQ6KOZGX.js +1 -0
  645. package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +10 -0
  646. package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +156 -0
  647. package/web/assets/chunk-RRFMTAIC-CMN0wcYA.js +1 -0
  648. package/web/assets/{chunk-RLI5ZMPA-CkXZ0y0U.js → chunk-SATU7PGQ-B1zhgOvc.js} +1 -1
  649. package/web/assets/chunk-STOV2HOB-GnExfzIX.js +1 -0
  650. package/web/assets/{chunk-INKRHTLW-Ckl3_KkO.js → chunk-SZD42YQK-ijyKKVr1.js} +21 -21
  651. package/web/assets/{chunk-LCXTWHL2-C162wE5z.js → chunk-TFPGFQPA-Dj6a-0pC.js} +3 -3
  652. package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +2 -0
  653. package/web/assets/chunk-TZUXEDM2-B7p9AcTw.js +1 -0
  654. package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +1 -0
  655. package/web/assets/{chunk-6764PJDD-C7xxk063.js → chunk-VE5CLXGZ-C1vB7wpY.js} +1 -1
  656. package/web/assets/{chunk-RG4AUYOV-ZNgyLFq6.js → chunk-VJFVEZTB-CX66F2ep.js} +3 -3
  657. package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +1 -0
  658. package/web/assets/chunk-WJBAP47W-BckNkuEN.js +1 -0
  659. package/web/assets/chunk-XNMVGMAZ-Cg_LnPtj.js +1 -0
  660. package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +1 -0
  661. package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +1 -0
  662. package/web/assets/{cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js → cose-bilkent-RZA4XIPR-BHpK4Crp.js} +1 -1
  663. package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +1 -0
  664. package/web/assets/cynefinDiagram-TR7LZUCG-C3Iar9lZ.js +62 -0
  665. package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +4 -0
  666. package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +30 -0
  667. package/web/assets/diagram-JCD7PQ7C-DC5-9FRr.js +24 -0
  668. package/web/assets/{diagram-HNR7UZ2L-DVRltWbL.js → diagram-KFBZAVDW-Dfmf_4ti.js} +3 -3
  669. package/web/assets/diagram-L7DVE3PN-GIRyVUtt.js +41 -0
  670. package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +24 -0
  671. package/web/assets/ebnfDiagram-DRHRQJWO-D8_CI4ZF.js +1 -0
  672. package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +85 -0
  673. package/web/assets/error-D9MtuG9s.js +1 -0
  674. package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +1 -0
  675. package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +1 -0
  676. package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +292 -0
  677. package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +1 -0
  678. package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +106 -0
  679. package/web/assets/{index-D7mTFcvQ.js → index-2zdvEdzg.js} +51 -51
  680. package/web/assets/index-CJDpyH-n.css +2 -0
  681. package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +1 -0
  682. package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +2 -0
  683. package/web/assets/{ishikawaDiagram-BNXS4ZKH-XpjJRU9h.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +2 -2
  684. package/web/assets/{journeyDiagram-M6C3CM3L-C6wjooas.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +3 -3
  685. package/web/assets/{kanban-definition-75IXJCU3-5_UVY79g.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +6 -6
  686. package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
  687. package/web/assets/{mindmap-definition-2TDM6QVE-8xDLzk2e.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +5 -5
  688. package/web/assets/node.browser-U-KyT5AW.js +1 -0
  689. package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +1 -0
  690. package/web/assets/pegDiagram-YKIO5C6U-QGeQLEq2.js +1 -0
  691. package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +1 -0
  692. package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +39 -0
  693. package/web/assets/{quadrantDiagram-VICAPDV7-DR54jOeR.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +3 -3
  694. package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +1 -0
  695. package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +1 -0
  696. package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +1 -0
  697. package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +1 -0
  698. package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +1 -0
  699. package/web/assets/railroadDiagram-M77LTMSB-AXu4vxk_.js +1 -0
  700. package/web/assets/{requirementDiagram-JXO7QTGE-PEkg7sKC.js → requirementDiagram-RASO5HTO-B-l8InpK.js} +4 -4
  701. package/web/assets/{sankeyDiagram-URQDO5SZ-DDWEtjcs.js → sankeyDiagram-F32LOJ6L-Kd7zjJgX.js} +3 -3
  702. package/web/assets/{sequenceDiagram-VS2MUI6T-Bv-uwANx.js → sequenceDiagram-URATNSBD-BlcdY9DS.js} +7 -7
  703. package/web/assets/sizeCapture-5GORAGP4-BEqQzsxs.js +1 -0
  704. package/web/assets/src-C5sx_gMp.js +1 -0
  705. package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +1 -0
  706. package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +1 -0
  707. package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +2 -0
  708. package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +8 -0
  709. package/web/assets/{timeline-definition-O6YCAMPW-Qmsuo7qS.js → timeline-definition-WJXWRH4I-DUfp1R3E.js} +3 -3
  710. package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +1 -0
  711. package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +1 -0
  712. package/web/assets/vennDiagram-K3VCMQLI-Bj-FN-XS.js +34 -0
  713. package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +1 -0
  714. package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +78 -0
  715. package/web/assets/xychartDiagram-5VRUVLCW-CK_rbSWE.js +7 -0
  716. package/web/index.html +16 -15
  717. package/dist/core/ingestion/languages/python/index-stats.d.ts +0 -18
  718. package/dist/core/ingestion/languages/python/index-stats.js +0 -25
  719. package/web/assets/ProcessFlowModal-CwkpVkv-.js +0 -22
  720. package/web/assets/agent-Ds-lkZjX.js +0 -626
  721. package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
  722. package/web/assets/architectureDiagram-UL44E2DR-CmG3uPWf.js +0 -36
  723. package/web/assets/chunk-2T2R6R2M-Bb6Sy3_j.js +0 -4
  724. package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +0 -1
  725. package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +0 -321
  726. package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +0 -159
  727. package/web/assets/chunk-67TQ5CYL-CA7OhIEf.js +0 -124
  728. package/web/assets/chunk-7J6CGLKN-BlKwgXKs.js +0 -10
  729. package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +0 -1
  730. package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +0 -1
  731. package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
  732. package/web/assets/chunk-KGFNY3KK-BZeP-55u.js +0 -62
  733. package/web/assets/chunk-KGYTTC2M-zm6n242I.js +0 -1
  734. package/web/assets/chunk-KNLZD3CH-BGlP6X9R.js +0 -1
  735. package/web/assets/chunk-LRIF4GLE-n59lhprL.js +0 -1
  736. package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
  737. package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
  738. package/web/assets/chunk-T2UQINTJ-BEyXhZWe.js +0 -1
  739. package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +0 -1
  740. package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +0 -1
  741. package/web/assets/chunk-UY5QBCOK-ByqTVLvh.js +0 -1
  742. package/web/assets/chunk-VU6ZFW4Y-BLeasdkU.js +0 -2
  743. package/web/assets/classDiagram-KGZ6W3CR-olpO3fMe.js +0 -1
  744. package/web/assets/classDiagram-v2-72OJOZXJ-olpO3fMe.js +0 -1
  745. package/web/assets/dagre-ND4H6XIP-CY4iIF7v.js +0 -4
  746. package/web/assets/diagram-3NCE3AQN-CO6QpzEE.js +0 -43
  747. package/web/assets/diagram-GF46GFSD-B2atbzmU.js +0 -24
  748. package/web/assets/diagram-QXG6HAR7-DR6AHD2h.js +0 -24
  749. package/web/assets/diagram-WEQXMOUZ-DkpoMwTL.js +0 -10
  750. package/web/assets/erDiagram-L5TCEMPS-n8g_90bc.js +0 -85
  751. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
  752. package/web/assets/flowDiagram-H6V6AXG4-SGMDiCkB.js +0 -162
  753. package/web/assets/ganttDiagram-JCBTUEKG-Cb3UBqRS.js +0 -292
  754. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
  755. package/web/assets/gitGraphDiagram-S2ZK5IYY-Bs9CR7tq.js +0 -106
  756. package/web/assets/index-CX_fADmQ.css +0 -2
  757. package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +0 -1
  758. package/web/assets/infoDiagram-3YFTVSEB-T368on4D.js +0 -2
  759. package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
  760. package/web/assets/node-Ct_zna8U.js +0 -8
  761. package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +0 -1
  762. package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +0 -1
  763. package/web/assets/pieDiagram-CU6KROY3-Bv4LpAbr.js +0 -30
  764. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
  765. package/web/assets/sdk-CzHHH8tD.js +0 -37
  766. package/web/assets/src-Cv1eWg0o.js +0 -1
  767. package/web/assets/stateDiagram-7D4R322I-DVNjmkEq.js +0 -1
  768. package/web/assets/stateDiagram-v2-36443NZ5-CyN4Fh7_.js +0 -1
  769. package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +0 -1
  770. package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +0 -1
  771. package/web/assets/vennDiagram-MWXL3ELB-BD1iK1SX.js +0 -34
  772. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
  773. package/web/assets/wardleyDiagram-CUQ6CDDI-D6TzLVob.js +0 -78
  774. package/web/assets/xychartDiagram-N2JHSOCM-CoZ_Tits.js +0 -7
  775. /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
@@ -1,4 +1,3 @@
1
- import type { ImportConfigs } from './import-resolvers/types.js';
2
1
  /** TypeScript path alias config parsed from tsconfig.json */
3
2
  export interface TsconfigPaths {
4
3
  /** Map of alias prefix -> target prefix (e.g., "@/" -> "src/") */
@@ -15,10 +14,19 @@ export interface GoModuleConfig {
15
14
  export interface ComposerConfig {
16
15
  /** Map of namespace prefix -> directory (e.g., "App\\" -> "app/") */
17
16
  psr4: Map<string, string>;
17
+ /** Production `autoload.psr-4` prefixes that may gate external namespaces.
18
+ * Absent on legacy/manual configs, where every mapping remains authoritative. */
19
+ authoritativePsr4?: ReadonlySet<string>;
20
+ /** True when Composer also declares an autoload mechanism this resolver does not model. */
21
+ hasUnmodeledAutoload?: boolean;
18
22
  /** PSR-4 entries sorted by namespace length descending (longest match wins).
19
23
  * Cached once at config load time to avoid re-sorting on every import. */
20
24
  psr4Sorted?: readonly [string, string][];
21
25
  }
26
+ /** Parse one Composer manifest without performing I/O. */
27
+ export declare function parseComposerConfig(value: unknown, baseDir?: string): ComposerConfig | null;
28
+ /** Merge package-local Composer manifests into one repository-relative config. */
29
+ export declare function mergeComposerConfigs(configs: readonly ComposerConfig[]): ComposerConfig | null;
22
30
  /** C# project config parsed from .csproj files */
23
31
  export interface CSharpProjectConfig {
24
32
  /** Root namespace from <RootNamespace> or assembly name (default: project directory name) */
@@ -85,5 +93,25 @@ export declare function loadComposerConfig(repoRoot: string): Promise<ComposerCo
85
93
  */
86
94
  export declare function scanCSharpProject(repoRoot: string): Promise<CSharpProjectScan>;
87
95
  export declare function loadSwiftPackageConfig(repoRoot: string): Promise<SwiftPackageConfig | null>;
96
+ /**
97
+ * Bundled language-specific configs loaded once per ingestion run — the
98
+ * result of {@link loadImportConfigs}, and every field's type is declared
99
+ * above in this module.
100
+ *
101
+ * It lives here rather than in `import-resolvers/types.ts` (its consumer, via
102
+ * `ResolveCtx`) so the dependency runs one way: the import-resolver types
103
+ * import this bundle, and this module imports nothing from them. Homing the
104
+ * producer's result type with the producer also keeps `import-resolvers/
105
+ * types.ts` free of per-language names.
106
+ */
107
+ export interface ImportConfigs {
108
+ tsconfigPaths: TsconfigPaths | null;
109
+ goModule: GoModuleConfig | null;
110
+ composerConfig: ComposerConfig | null;
111
+ swiftPackageConfig: SwiftPackageConfig | null;
112
+ csharpConfigs: CSharpProjectConfig[];
113
+ /** In-repo namespace evidence gating C# suffix-fallback resolution (#1881). */
114
+ csharpNamespaces?: CSharpNamespaceEvidence;
115
+ }
88
116
  /** Load all language-specific configs once for an ingestion run. */
89
117
  export declare function loadImportConfigs(repoRoot: string): Promise<ImportConfigs>;
@@ -3,7 +3,95 @@ import { createReadStream } from 'fs';
3
3
  import { createInterface } from 'readline';
4
4
  import path from 'path';
5
5
  import { isDev } from './utils/env.js';
6
+ import { mapConcurrent } from '../../lib/utils.js';
6
7
  import { logger } from '../logger.js';
8
+ function normalizeComposerDirectory(baseDir, directory) {
9
+ const normalizedBase = baseDir.replace(/\\/g, '/').replace(/^\.\//, '').replace(/\/+$/, '');
10
+ const normalizedDirectory = directory
11
+ .replace(/\\/g, '/')
12
+ .replace(/^(?:\.\/)+/, '')
13
+ .replace(/\/+$/, '');
14
+ if (normalizedBase === '')
15
+ return normalizedDirectory;
16
+ if (normalizedDirectory === '')
17
+ return normalizedBase;
18
+ return path.posix.normalize(`${normalizedBase}/${normalizedDirectory}`);
19
+ }
20
+ /** Parse one Composer manifest without performing I/O. */
21
+ export function parseComposerConfig(value, baseDir = '') {
22
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
23
+ return null;
24
+ const composer = value;
25
+ const autoload = composer.autoload;
26
+ const autoloadDev = composer['autoload-dev'];
27
+ if (autoload === undefined && autoloadDev === undefined)
28
+ return null;
29
+ const psr4 = new Map();
30
+ const authoritativePsr4 = new Set();
31
+ let hasUnmodeledAutoload = false;
32
+ const addSection = (sectionValue, authoritative) => {
33
+ if (typeof sectionValue !== 'object' || sectionValue === null || Array.isArray(sectionValue)) {
34
+ return;
35
+ }
36
+ const section = sectionValue;
37
+ if ('psr-0' in section || 'classmap' in section)
38
+ hasUnmodeledAutoload = true;
39
+ const rawPsr4 = section['psr-4'];
40
+ if (typeof rawPsr4 !== 'object' || rawPsr4 === null || Array.isArray(rawPsr4))
41
+ return;
42
+ for (const [namespace, directories] of Object.entries(rawPsr4)) {
43
+ const stringDirectories = Array.isArray(directories)
44
+ ? directories.filter((entry) => typeof entry === 'string')
45
+ : typeof directories === 'string'
46
+ ? [directories]
47
+ : [];
48
+ if (stringDirectories.length === 0)
49
+ continue;
50
+ if (stringDirectories.length > 1)
51
+ hasUnmodeledAutoload = true;
52
+ const normalizedNamespace = namespace.replace(/\\+$/, '');
53
+ const normalizedDirectory = normalizeComposerDirectory(baseDir, stringDirectories[0]);
54
+ const existing = psr4.get(normalizedNamespace);
55
+ if (existing !== undefined && existing !== normalizedDirectory) {
56
+ hasUnmodeledAutoload = true;
57
+ continue;
58
+ }
59
+ if (existing === undefined)
60
+ psr4.set(normalizedNamespace, normalizedDirectory);
61
+ if (authoritative)
62
+ authoritativePsr4.add(normalizedNamespace);
63
+ }
64
+ };
65
+ // Production mappings win duplicate prefixes. Development mappings remain
66
+ // usable for test code but do not establish authority for the external gate.
67
+ addSection(autoload, true);
68
+ addSection(autoloadDev, false);
69
+ return { psr4, authoritativePsr4, hasUnmodeledAutoload };
70
+ }
71
+ /** Merge package-local Composer manifests into one repository-relative config. */
72
+ export function mergeComposerConfigs(configs) {
73
+ if (configs.length === 0)
74
+ return null;
75
+ const psr4 = new Map();
76
+ const authoritativePsr4 = new Set();
77
+ let hasUnmodeledAutoload = false;
78
+ for (const config of configs) {
79
+ hasUnmodeledAutoload ||= config.hasUnmodeledAutoload === true;
80
+ for (const [namespace, directory] of config.psr4) {
81
+ const existing = psr4.get(namespace);
82
+ if (existing !== undefined && existing !== directory) {
83
+ hasUnmodeledAutoload = true;
84
+ continue;
85
+ }
86
+ if (existing === undefined)
87
+ psr4.set(namespace, directory);
88
+ }
89
+ for (const namespace of config.authoritativePsr4 ?? config.psr4.keys()) {
90
+ authoritativePsr4.add(namespace);
91
+ }
92
+ }
93
+ return { psr4, authoritativePsr4, hasUnmodeledAutoload };
94
+ }
7
95
  /** Project the one-pass {@link CSharpProjectScan} into the
8
96
  * {@link CSharpNamespaceEvidence} both import-resolution legs thread to the
9
97
  * #1881 gate — one shape, two carriers (`ImportConfigs.csharpNamespaces` for
@@ -84,20 +172,13 @@ export async function loadComposerConfig(repoRoot) {
84
172
  try {
85
173
  const composerPath = path.join(repoRoot, 'composer.json');
86
174
  const raw = await fs.readFile(composerPath, 'utf-8');
87
- const composer = JSON.parse(raw);
88
- const psr4Raw = composer.autoload?.['psr-4'] ?? {};
89
- const psr4Dev = composer['autoload-dev']?.['psr-4'] ?? {};
90
- const merged = { ...psr4Raw, ...psr4Dev };
91
- const psr4 = new Map();
92
- for (const [ns, dir] of Object.entries(merged)) {
93
- const nsNorm = ns.replace(/\\+$/, '');
94
- const dirNorm = dir.replace(/\\/g, '/').replace(/\/+$/, '');
95
- psr4.set(nsNorm, dirNorm);
96
- }
175
+ const config = parseComposerConfig(JSON.parse(raw));
176
+ if (config === null)
177
+ return null;
97
178
  if (isDev) {
98
- logger.info(`📦 Loaded ${psr4.size} PSR-4 mappings from composer.json`);
179
+ logger.info(`📦 Loaded ${config.psr4.size} PSR-4 mappings from composer.json`);
99
180
  }
100
- return { psr4 };
181
+ return config;
101
182
  }
102
183
  catch {
103
184
  return null;
@@ -197,28 +278,25 @@ export async function scanCSharpProject(repoRoot) {
197
278
  csNames.push(entry.name);
198
279
  }
199
280
  }
200
- for (let i = 0; i < csprojNames.length; i += CSHARP_SCAN_READ_CONCURRENCY) {
201
- const batch = csprojNames.slice(i, i + CSHARP_SCAN_READ_CONCURRENCY);
202
- const settled = await Promise.allSettled(batch.map((name) => readCsprojConfig(path.join(dir, name), name, repoRoot, dir)));
203
- for (const r of settled) {
204
- const config = r.status === 'fulfilled' ? r.value : null;
205
- if (config) {
206
- configs.push(config);
207
- rootNamespaces.add(config.rootNamespace);
208
- }
281
+ // `mapConcurrent` runs the same bounded waves and degrades per item
282
+ // (a rejection becomes `undefined`), so entry order is still preserved.
283
+ const csprojResults = await mapConcurrent(csprojNames, (name) => readCsprojConfig(path.join(dir, name), name, repoRoot, dir), { concurrency: CSHARP_SCAN_READ_CONCURRENCY });
284
+ for (const config of csprojResults) {
285
+ if (config) {
286
+ configs.push(config);
287
+ rootNamespaces.add(config.rootNamespace);
209
288
  }
210
289
  }
211
- for (let i = 0; i < csNames.length; i += CSHARP_SCAN_READ_CONCURRENCY) {
212
- const batch = csNames.slice(i, i + CSHARP_SCAN_READ_CONCURRENCY);
213
- const settled = await Promise.allSettled(batch.map((name) => collectDeclaredNamespaces(path.join(dir, name), declaredNamespaces, rootNamespaces)));
214
- // A `.cs` that was unreadable (or whose read/scan unexpectedly rejected)
215
- // leaves its namespaces uncollected → mark truncated to fail the #1881
216
- // gate OPEN rather than wrongly suppress an import. The scan streams each
217
- // file, so file size no longer trips truncation.
218
- for (const r of settled) {
219
- if (r.status !== 'fulfilled' || r.value === 'truncated')
220
- truncated = true;
221
- }
290
+ const csResults = await mapConcurrent(csNames, (name) => collectDeclaredNamespaces(path.join(dir, name), declaredNamespaces, rootNamespaces), { concurrency: CSHARP_SCAN_READ_CONCURRENCY });
291
+ // A `.cs` that was unreadable (or whose read/scan unexpectedly rejected)
292
+ // leaves its namespaces uncollected → mark truncated to fail the #1881
293
+ // gate OPEN rather than wrongly suppress an import. The scan streams each
294
+ // file, so file size no longer trips truncation. A rejected read arrives
295
+ // here as `undefined`, which is `!== 'ok'` just like the old
296
+ // `r.status !== 'fulfilled'` arm.
297
+ for (const r of csResults) {
298
+ if (r !== 'ok')
299
+ truncated = true;
222
300
  }
223
301
  }
224
302
  if (truncated) {
@@ -362,9 +440,6 @@ export async function loadSwiftPackageConfig(repoRoot) {
362
440
  }
363
441
  return null;
364
442
  }
365
- // ============================================================================
366
- // BUNDLED CONFIG LOADER
367
- // ============================================================================
368
443
  /** Load all language-specific configs once for an ingestion run. */
369
444
  export async function loadImportConfigs(repoRoot) {
370
445
  const csharpScan = await scanCSharpProject(repoRoot);
@@ -23,10 +23,25 @@ import type { CfgVisitor } from './cfg/types.js';
23
23
  import type { NodeLabel } from '../../_shared/index.js';
24
24
  import type { ExtractedRoute } from './route-extractors/laravel.js';
25
25
  import type { SharedSpringType } from './route-extractors/spring-shared.js';
26
+ import type { ModuleConstants, Operand, RepoConstants } from './route-extractors/constant-resolver.js';
26
27
  import type Parser from 'tree-sitter';
27
28
  import type { ExtractedDecoratorRoute } from './workers/parse-worker.js';
28
29
  /** Tree-sitter query captures: capture name → AST node (or undefined if not captured). */
29
30
  export type CaptureMap = Record<string, SyntaxNode | undefined>;
31
+ export interface DefinitionPropertiesContext {
32
+ readonly nodeLabel: NodeLabel;
33
+ readonly nodeName: string;
34
+ readonly definitionNode: SyntaxNode;
35
+ readonly parsedImports: readonly ParsedImport[];
36
+ readonly isExported: boolean;
37
+ }
38
+ export type DefinitionPropertiesExtractor = (context: DefinitionPropertiesContext) => Readonly<Record<string, unknown>> | undefined;
39
+ /** Run optional provider enrichment without allowing one hook failure to drop
40
+ * the rest of the worker's language batch. */
41
+ export declare function runDefinitionPropertiesExtractor(extractor: DefinitionPropertiesExtractor, context: DefinitionPropertiesContext, onError: (error: unknown) => void): Readonly<Record<string, unknown>> | undefined;
42
+ /** Provider metadata is additive; graph identity and source-location fields
43
+ * supplied by the worker remain authoritative. */
44
+ export declare function mergeCanonicalDefinitionProperties<TCanonical extends Readonly<Record<string, unknown>>>(providerProperties: Readonly<Record<string, unknown>>, canonicalProperties: TCanonical): Record<string, unknown> & TCanonical;
30
45
  /** Configuration for AST-based framework detection patterns. */
31
46
  export interface AstFrameworkPatternConfig {
32
47
  framework: string;
@@ -39,6 +54,18 @@ export interface AstFrameworkPatternConfig {
39
54
  * Required fields must be explicitly set; optional fields have defaults
40
55
  * applied by defineLanguage().
41
56
  */
57
+ /**
58
+ * Should the parse worker run {@link LanguageProviderConfig.extractModuleConstants}
59
+ * on this file?
60
+ *
61
+ * Exported so the DECISION is testable without booting a worker. It encodes the
62
+ * one rule that is easy to get backwards: a provider that declares no
63
+ * `moduleConstantHeuristic` harvests unconditionally. Writing the gate as
64
+ * `provider.moduleConstantHeuristic?.(content)` reads `undefined` as "skip" and
65
+ * silently disables the hook for every provider without a heuristic — which is
66
+ * exactly how Python's already-shipped harvest was turned off (#2391/#2980).
67
+ */
68
+ export declare function shouldHarvestModuleConstants(provider: Pick<LanguageProvider, 'extractModuleConstants' | 'moduleConstantHeuristic'>, content: string): boolean;
42
69
  interface LanguageProviderConfig {
43
70
  readonly id: SupportedLanguages;
44
71
  /** File extensions that map to this language (e.g., ['.ts', '.tsx']) */
@@ -83,9 +110,17 @@ interface LanguageProviderConfig {
83
110
  * The current C++ UE-macro preprocessor relies on the practical fact that
84
111
  * UE reflection macros and module-export tokens are ASCII-only.
85
112
  *
86
- * Must be a pure function — same input always yields the same output. Called
87
- * once per file, on every code path that re-parses (parsing-processor, import
88
- * processor, heritage processor, call processor, parse worker).
113
+ * Must be a pure function — same input always yields the same output, and
114
+ * re-applying it to its own output changes nothing.
115
+ *
116
+ * Applied by the parse worker (`parse-worker.ts`), by `extractParsedFile`
117
+ * (`scope-extractor-bridge.ts`) on the parse-cache-miss path, and by the
118
+ * embedding parse (`embeddings/ast-utils.ts`, which does not go through the
119
+ * bridge). Any *new* path that re-parses a file must apply it too, or the two
120
+ * halves of the pipeline analyze different programs — and note the set is not
121
+ * closed today: language-owned re-parse helpers reached through other
122
+ * provider hooks (e.g. `populateRangeBindings`) still see raw text.
123
+ * `test/unit/preprocess-source-parity.test.ts` pins the bridge equivalence.
89
124
  *
90
125
  * Default: undefined (no preprocessing — `file.content` is parsed verbatim).
91
126
  */
@@ -163,6 +198,16 @@ interface LanguageProviderConfig {
163
198
  * (e.g., 'Method' for Kotlin), or defaultLabel to keep as-is.
164
199
  * Default: undefined (standard label assignment). */
165
200
  readonly labelOverride?: (functionNode: SyntaxNode, defaultLabel: NodeLabel) => NodeLabel | null;
201
+ /**
202
+ * Suppress a definition query match after its default label is known.
203
+ * Languages use this for syntax that represents an implicit declaration
204
+ * unless an explicit declaration with the same semantics is present.
205
+ *
206
+ * `defaultLabel` is supplied so an implementation can scope itself to one
207
+ * kind of definition; implementations whose capture map alone decides the
208
+ * question may ignore it.
209
+ */
210
+ readonly shouldSkipDefinitionCapture?: (captureMap: CaptureMap, defaultLabel: NodeLabel) => boolean;
166
211
  /** MRO strategy for multiple inheritance resolution.
167
212
  * Default: 'first-wins'. */
168
213
  readonly mroStrategy?: MroStrategy;
@@ -184,6 +229,10 @@ interface LanguageProviderConfig {
184
229
  * constant, and static declarations. Produces VariableInfo with type, visibility,
185
230
  * isConst, isStatic, isMutable metadata. Default: undefined (no variable extraction). */
186
231
  readonly variableExtractor?: VariableExtractor;
232
+ /** Add language-owned, structured properties to a definition node. Values
233
+ * cross the worker boundary and must therefore be structured-clone-safe.
234
+ * Shared ingestion code treats these properties as opaque. */
235
+ readonly definitionPropertiesExtractor?: DefinitionPropertiesExtractor;
187
236
  /** Class/type extractor for deriving canonical qualified names for class-like symbols.
188
237
  * Uses the same provider-driven strategy pattern as method/field extraction so
189
238
  * namespace/package/module rules stay language-specific. */
@@ -217,14 +266,22 @@ interface LanguageProviderConfig {
217
266
  * Default: undefined (no route extraction). */
218
267
  readonly extractRoutes?: (tree: Parser.Tree, filePath: string, reader: (relativePath: string) => string | null, parser?: Parser | null) => ExtractedRoute[];
219
268
  /**
220
- * Extract decorator-style route annotations from a parsed file.
269
+ * Extract routes that a parsed file declares in its own AST.
221
270
  *
222
271
  * When defined, the parse worker calls this after per-file capture processing
223
- * to extract framework route definitions that require AST-level analysis beyond
272
+ * to extract route definitions that require AST-level analysis beyond
224
273
  * generic `@decorator` captures (e.g., Java Spring class-level prefix joining,
225
274
  * multi-class handling). The returned routes are appended to `decoratorRoutes`.
226
275
  *
227
- * Default: undefined (no language-specific decorator route extraction).
276
+ * Decorators are the common case and the reason for the name, but not the only
277
+ * shape: JS/TS uses this hook for hand-rolled dispatch guards
278
+ * (`route-extractors/dispatch-guard.ts`), where a raw `node:http` server
279
+ * declares a route by comparing the request path to a literal. Anything that
280
+ * yields a `(path, verb, handler)` triple from one file's AST belongs here —
281
+ * set `ExtractedDecoratorRoute.source` when the provenance is not a decorator,
282
+ * so the `HANDLES_ROUTE` edge does not claim one.
283
+ *
284
+ * Default: undefined (no language-specific route extraction).
228
285
  */
229
286
  readonly extractDecoratorRoutes?: (tree: Parser.Tree, filePath: string, lineOffset: number) => ExtractedDecoratorRoute[];
230
287
  /**
@@ -240,6 +297,51 @@ interface LanguageProviderConfig {
240
297
  * Default: undefined (no interface-inheritance route resolution).
241
298
  */
242
299
  readonly extractRouteInheritanceTypes?: (tree: Parser.Tree, filePath: string) => SharedSpringType[];
300
+ /**
301
+ * Harvest this file's module-level string constants (#2391 core, #2980 Java
302
+ * parity) into the language-agnostic {@link ModuleConstants} shape, so the
303
+ * parse phase can resolve non-literal decorator route paths cross-file.
304
+ *
305
+ * The worker calls this when BOTH hold:
306
+ * - the provider declares no `moduleConstantHeuristic`, or the one it
307
+ * declares matched — syntax-driven, e.g. a `static final String` field or
308
+ * a constants-bearing import; NEVER a class-name pattern like
309
+ * `*Constants`, which silently drops route constants living in classes
310
+ * named e.g. `ApiPaths`/`Routes`, and
311
+ * - the extraction yields something resolvable (a literal, an expression, or
312
+ * an import binding), keeping the aggregate bounded on large repos.
313
+ *
314
+ * Default: undefined (no constant harvest; non-literal route paths of this
315
+ * language floor to skip).
316
+ */
317
+ readonly extractModuleConstants?: (tree: Parser.Tree) => ModuleConstants;
318
+ /**
319
+ * Cheap content heuristic deciding whether the worker should run
320
+ * {@link extractModuleConstants} on a file. Guards the harvest cost on huge
321
+ * repos: files that cannot contribute (no constant-bearing syntax) are not
322
+ * walked. Must be syntax-driven (field/import shape), not identifier
323
+ * pattern-matching on class names.
324
+ *
325
+ * Default: undefined — harvest EVERY file of this language. A gate is opt-in
326
+ * because getting it wrong silently drops routes that already resolve, and a
327
+ * missed gate only costs time. Declare one only where the cost bites (Java's
328
+ * Maven monorepos) and only after checking it against every shape
329
+ * {@link extractModuleConstants} accepts.
330
+ */
331
+ readonly moduleConstantHeuristic?: (content: string) => boolean;
332
+ /**
333
+ * Fold one file's non-literal route-path operand list
334
+ * (`routePathExpr`/`routePathOperands` of an `ExtractedDecoratorRoute`)
335
+ * against the repo-wide, file-path-keyed constant map, or null when it cannot
336
+ * be fully folded (skip floor — never a phantom path). Languages whose
337
+ * qualified refs resolve through class imports (`Outer.CONST`,
338
+ * `com.example.ApiPaths.USERS`) need this hook because the shared fold has no
339
+ * notion of qualified names; Python's bare-name refs use the shared default.
340
+ *
341
+ * Default: undefined (the parse phase falls back to the shared
342
+ * language-agnostic operand fold).
343
+ */
344
+ readonly foldRoutePathOperands?: (filePath: string, operands: readonly Operand[], repo: RepoConstants) => string | null;
243
345
  /** Built-in/stdlib names that should be filtered from the call graph for this language.
244
346
  * Default: undefined (no language-specific filtering). */
245
347
  readonly builtInNames?: ReadonlySet<string>;
@@ -339,6 +441,93 @@ interface LanguageProviderConfig {
339
441
  * Required when `emitScopeCaptures` is implemented.
340
442
  */
341
443
  readonly interpretImport?: (captures: CaptureMatch) => ParsedImport | null;
444
+ /**
445
+ * Do this language's imports EXECUTE at the point in the program where they
446
+ * are written?
447
+ *
448
+ * The scope extractor marks an import `runsOnlyWhenCalled` when the statement
449
+ * sits inside a `Function` scope (Pass 3): where imports are executed
450
+ * statements, one written in a function body runs only when that function is
451
+ * called — Python's `def f(): from x import Y`, Ruby's
452
+ * `def f; require 'x'; end`, a CommonJS `require()` in a body (which
453
+ * `javascript/captures.ts` does capture, via its own AST walk). That rule is
454
+ * about EXECUTION. It says nothing true about a language whose "import" is
455
+ * not an executed statement at all, and in such a language moving one into a
456
+ * function body defers exactly nothing.
457
+ *
458
+ * "Where written" is about execution time, not textual placement: a
459
+ * `#include` is spliced precisely where it is written and still answers
460
+ * `false`, because splicing is not running.
461
+ *
462
+ * **The failure directions are not symmetric, which is why the default is
463
+ * what it is.** Answering `false` for a language that really does execute
464
+ * its imports un-defers a deliberately lazy one, and `check --cycles`
465
+ * reports a cycle its author broke on purpose — wrong, but visible on screen
466
+ * and arguable by whoever reads it. Answering `true` for a language that
467
+ * does not SUPPRESSES a cycle that is entirely real: nobody sees it, so
468
+ * nobody can argue with it. Getting this wrong in the `true` direction hides
469
+ * a true cycle, and that is the failure that matters.
470
+ *
471
+ * Absent — the default — reads as `true`, so every provider that does not
472
+ * name this keeps today's behaviour exactly. The flag never ADDS deferral;
473
+ * declaring `false` only WITHHOLDS it.
474
+ *
475
+ * Declared `false` by, and only by:
476
+ *
477
+ * - **C and C++** — `#include` is a preprocessor directive. The header's
478
+ * text is spliced in before a line of the program runs, wherever the
479
+ * directive sits, and C permits one inside a function body. C++'s only
480
+ * other Pass-3 import form, `using ns::name` / `using namespace ns`, is
481
+ * compile-time name lookup, is legal in a function body too, and defers
482
+ * no more than an `#include` does.
483
+ * - **Rust** — `use` is a compile-time path alias, not a statement that
484
+ * runs. `fn f() { use crate::m::X; }` is legal, and putting the `use`
485
+ * there changes only where the name is VISIBLE, never when anything
486
+ * happens; Rust has no module-initialization order in the JS/Python
487
+ * sense and permits intra-crate module cycles outright. It is the
488
+ * structural twin of C++'s `using ns::name`. `rust/query.ts` captures
489
+ * `(use_declaration)` and nothing else, so this covers the whole
490
+ * surface. (The claim here is the narrow one: POSITION does not defer a
491
+ * Rust import. Whether a Rust `use` can create an initialization
492
+ * dependency *at all* is a larger and separate question, and this flag
493
+ * deliberately does not answer it.)
494
+ * - **COBOL** — `COPY` is a pure textual splice performed by the copybook
495
+ * preprocessor, the `#include` case exactly. Latent today: the COBOL
496
+ * `@scope.function` capture covers a single line (`cobol/captures.ts`
497
+ * ranges sections and paragraphs `line → line`), so a `COPY` on any
498
+ * later line never resolves inside one and Pass 3 has nothing to mark.
499
+ * Declared anyway, so that giving those anchors their true multi-line
500
+ * ranges cannot silently start suppressing real copybook cycles.
501
+ *
502
+ * Per-provider rather than per-import, and that is sufficient — the question
503
+ * this answers is narrower than "do this language's imports execute". It is
504
+ * only ever asked of an import that resolved INSIDE A FUNCTION SCOPE, so the
505
+ * real domain is: *can a function-local import in this language be
506
+ * non-executing?* No supported language has two forms that are both
507
+ * function-local and disagree. C++ has two forms, `#include` and
508
+ * `using ns::name`; both can appear in a body and both are compile-time.
509
+ *
510
+ * PHP is the case that looks like a counterexample and is not. It does mix —
511
+ * `use Foo\Bar;` aliases at compile time while `require` executes — but
512
+ * `use` cannot appear in a function body at all (`php/query.ts` records this
513
+ * twice: "`namespace_use_declaration` is an import only at top level / inside
514
+ * namespace scope"), so it never reaches this flag. Absent is therefore
515
+ * PERMANENTLY correct for PHP, including the day `require` is captured: a
516
+ * `require` in a body will correctly defer, and a `use` still cannot get
517
+ * here. Do not read PHP as a reason to build a per-`ParsedImport`
518
+ * classification hook — it would cost a provider call per import on the
519
+ * extractor's hot path, and `ParsedImport.kind` does not discriminate the
520
+ * thing being asked anyway.
521
+ *
522
+ * A capability on the provider rather than a language check in
523
+ * `scope-extractor.ts`: shared `core/ingestion/` pipeline code must not name
524
+ * languages (AGENTS.md), and "imports here are not executed statements" is a
525
+ * property of the language, not of the walk.
526
+ *
527
+ * Default: undefined, read as `true` (imports execute where they are
528
+ * written; position defers them).
529
+ */
530
+ readonly importsExecuteWhereWritten?: boolean;
342
531
  /**
343
532
  * What is the implicit receiver on a Function scope? For instance methods
344
533
  * this is `self`/`this`; for standalone functions it is `null`. Consulted
@@ -367,6 +556,19 @@ interface LanguageProviderConfig {
367
556
  * suffix — `@scope.function` → `'Function'`, etc.).
368
557
  */
369
558
  readonly resolveScopeKind?: (captures: CaptureMatch) => ScopeKind | null;
559
+ /**
560
+ * Report the receiver names this scope BINDS rather than inherits — see
561
+ * `Scope.ownsReceivers` (#2701).
562
+ *
563
+ * Called once per `@scope.*` capture during scope-tree construction.
564
+ * Return the shared frozen set for a scope that starts a fresh receiver
565
+ * (a JS/TS ordinary `function`, whose `this` is bound at call time), and
566
+ * `undefined` for one that inherits it (an arrow function, and every
567
+ * closure form in languages that capture the receiver lexically).
568
+ *
569
+ * Default: undefined everywhere — the receiver walk is unchanged.
570
+ */
571
+ readonly scopeOwnsReceivers?: (captures: CaptureMatch) => ReadonlySet<string> | undefined;
370
572
  /**
371
573
  * Override where a declaration's name becomes visible. By default the name
372
574
  * is bound in the innermost enclosing scope; return a different `ScopeId`
@@ -396,7 +598,7 @@ interface LanguageProviderConfig {
396
598
  * Required when `emitScopeCaptures` is implemented. Ring 2 PKG #922
397
599
  * provides the adapter that bridges today's resolver shape to this hook.
398
600
  */
399
- readonly resolveImportTarget?: (parsedImport: ParsedImport, workspaceIndex: WorkspaceIndex) => string | null;
601
+ readonly resolveImportTarget?: (parsedImport: ParsedImport, workspaceIndex: WorkspaceIndex) => string | readonly string[] | null;
400
602
  /**
401
603
  * Enumerate the exported names of a file — used by the finalize algorithm
402
604
  * to expand `import * from M` into individual `BindingRef`s with
@@ -8,6 +8,43 @@
8
8
  * The providers table in `languages/index.ts` uses `satisfies Record<SupportedLanguages, LanguageProvider>`
9
9
  * so adding a language to the enum without creating a provider is a compiler error.
10
10
  */
11
+ /** Run optional provider enrichment without allowing one hook failure to drop
12
+ * the rest of the worker's language batch. */
13
+ export function runDefinitionPropertiesExtractor(extractor, context, onError) {
14
+ try {
15
+ return extractor(context);
16
+ }
17
+ catch (error) {
18
+ onError(error);
19
+ return undefined;
20
+ }
21
+ }
22
+ /** Provider metadata is additive; graph identity and source-location fields
23
+ * supplied by the worker remain authoritative. */
24
+ export function mergeCanonicalDefinitionProperties(providerProperties, canonicalProperties) {
25
+ return { ...providerProperties, ...canonicalProperties };
26
+ }
27
+ /**
28
+ * Everything a language needs to provide.
29
+ * Required fields must be explicitly set; optional fields have defaults
30
+ * applied by defineLanguage().
31
+ */
32
+ /**
33
+ * Should the parse worker run {@link LanguageProviderConfig.extractModuleConstants}
34
+ * on this file?
35
+ *
36
+ * Exported so the DECISION is testable without booting a worker. It encodes the
37
+ * one rule that is easy to get backwards: a provider that declares no
38
+ * `moduleConstantHeuristic` harvests unconditionally. Writing the gate as
39
+ * `provider.moduleConstantHeuristic?.(content)` reads `undefined` as "skip" and
40
+ * silently disables the hook for every provider without a heuristic — which is
41
+ * exactly how Python's already-shipped harvest was turned off (#2391/#2980).
42
+ */
43
+ export function shouldHarvestModuleConstants(provider, content) {
44
+ if (!provider.extractModuleConstants)
45
+ return false;
46
+ return !provider.moduleConstantHeuristic || provider.moduleConstantHeuristic(content);
47
+ }
11
48
  const DEFAULTS = {
12
49
  mroStrategy: 'first-wins',
13
50
  };
@@ -5,6 +5,7 @@ import { parseSourceSafe } from '../../../tree-sitter/safe-parse.js';
5
5
  import { splitCInclude } from './import-decomposer.js';
6
6
  import { computeCDeclarationArity, computeCCallArity } from './arity-metadata.js';
7
7
  import { markStaticName } from './static-linkage.js';
8
+ import { synthesizeReceiverChainCapture } from '../../utils/receiver-chain-captures.js';
8
9
  import { synthesizeCallableFlowCaptures, } from '../../utils/callable-flow-captures.js';
9
10
  const C_CALLABLE_CAPTURE_OPTIONS = {
10
11
  functionNodeTypes: new Set(['function_definition']),
@@ -118,6 +119,12 @@ export function emitCScopeCaptures(sourceText, filePath, cachedTree) {
118
119
  grouped['@reference.arity'] = syntheticCapture('@reference.arity', callNode, String(computeCCallArity(callNode)));
119
120
  }
120
121
  }
122
+ // Structural receiver chain for a call whose receiver is itself an
123
+ // expression, so resolution can type it by folding over structure
124
+ // instead of re-parsing the receiver's source text. Self-gating: a
125
+ // non-call match, an absent receiver, or a chain with no nameable base
126
+ // all leave `grouped` untouched.
127
+ synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
121
128
  out.push(grouped);
122
129
  }
123
130
  out.push(...synthesizeCallableFlowCaptures(tree.rootNode, C_CALLABLE_CAPTURE_OPTIONS));
@@ -1,4 +1,5 @@
1
1
  import { dirname, join } from 'path';
2
+ import { perFileSet } from '../../import-resolvers/per-file-set.js';
2
3
  /**
3
4
  * Per-pass memo: workspace paths bucketed by basename (last path segment),
4
5
  * keyed on the `allFilePaths` set identity.
@@ -15,25 +16,20 @@ import { dirname, join } from 'path';
15
16
  * `WeakMap`-keyed so it is reclaimed with the pass (no cross-pass staleness).
16
17
  * Shared by C and C++ (`resolveCppImportTarget` delegates here).
17
18
  */
18
- const suffixIndexByPaths = new WeakMap();
19
- function suffixIndex(allFilePaths) {
20
- let index = suffixIndexByPaths.get(allFilePaths);
21
- if (index === undefined) {
22
- index = new Map();
23
- for (const original of allFilePaths) {
24
- const normalized = original.replace(/\\/g, '/');
25
- const basename = normalized.slice(normalized.lastIndexOf('/') + 1);
26
- let bucket = index.get(basename);
27
- if (bucket === undefined) {
28
- bucket = [];
29
- index.set(basename, bucket);
30
- }
31
- bucket.push({ original, normalized, depth: normalized.split('/').length });
19
+ const suffixIndex = perFileSet((allFilePaths) => {
20
+ const index = new Map();
21
+ for (const original of allFilePaths) {
22
+ const normalized = original.replace(/\\/g, '/');
23
+ const basename = normalized.slice(normalized.lastIndexOf('/') + 1);
24
+ let bucket = index.get(basename);
25
+ if (bucket === undefined) {
26
+ bucket = [];
27
+ index.set(basename, bucket);
32
28
  }
33
- suffixIndexByPaths.set(allFilePaths, index);
29
+ bucket.push({ original, normalized, depth: normalized.split('/').length });
34
30
  }
35
31
  return index;
36
- }
32
+ });
37
33
  /**
38
34
  * Resolve a C #include path to a file in the workspace.
39
35
  *