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
@@ -18,3 +18,17 @@
18
18
  * must not shift. The clamp guards degenerate inputs (line 0 / empty files).
19
19
  */
20
20
  export const toZeroBasedLine = (oneBasedLine) => Math.max(0, oneBasedLine - 1);
21
+ /**
22
+ * Convert a 0-based GraphNode `startLine`/`endLine` into the 1-based line space
23
+ * the CFG/PDG layer uses (`BasicBlock` ids and `functionStartLine` are built
24
+ * from `startPosition.row + 1`).
25
+ *
26
+ * This is the INTERNAL inverse of {@link toZeroBasedLine}, for joining graph
27
+ * rows against that layer. It is NOT the display converter: line numbers on
28
+ * their way out to a human or an LLM go through `mcp/local/line-display.ts`,
29
+ * which is documented as a response-boundary concern and passes `undefined`
30
+ * through. Here the arithmetic is the point, so the input must already be a
31
+ * number — a caller holding a possibly-absent value checks it first, exactly as
32
+ * the `typeof sym.startLine === 'number'` guards in `pdg-impact.ts` do.
33
+ */
34
+ export const toOneBasedLine = (zeroBasedLine) => zeroBasedLine + 1;
@@ -6,16 +6,39 @@ import { SupportedLanguages, type ParameterTypeClass } from '../../../_shared/in
6
6
  */
7
7
  export declare function arityForIdFromInfo(info: MethodInfo): number | undefined;
8
8
  /**
9
- * Compute a type-based discriminator suffix for same-arity overloads.
10
- * Returns `~type1,type2` when the current method collides with another method
11
- * in the same class that has the same name and arity but different parameter types.
12
- * Returns `''` when there is no collision or types are unavailable.
9
+ * Key for the per-class method map built by `getMethodInfo` (parse-worker).
10
+ *
11
+ * `name:line` is NOT unique. Two callables can start on the same line with the
12
+ * same name whenever one of them is SYNTHESIZED at a position that is not its
13
+ * own declaration: a Java record's implicit component accessor is minted at the
14
+ * component (`record P(int x, int y) { int x(int s) {…} }`), and a C# 12 primary
15
+ * constructor at the owner's `parameter_list`
16
+ * (`class Point(int x, int y) { public Point(int x) : this(x, 0) {} }`). Both are
17
+ * appended LAST by their extractor, so under a `name:line` key the synthesized
18
+ * entry silently destroyed the source-written method's MethodInfo and the two
19
+ * ids collapsed onto one node (#2936).
20
+ *
21
+ * `line` is 1-based and `column` is 0-based — deliberately, because this is a
22
+ * join key rather than a displayed location and both sides derive it from the
23
+ * same node. Do not "normalize" one half; the join is the only contract.
24
+ *
25
+ * The KEY is never parsed by any consumer — `buildCollisionGroups`,
26
+ * `typeTagForId` and `constTagForId` all iterate `.values()`. Keep it that way,
27
+ * and never insert one MethodInfo under two keys: those consumers would then
28
+ * count it twice and turn every singleton into a false collision group.
13
29
  */
30
+ export declare function methodInfoKey(name: string, line: number, column: number): string;
14
31
  /**
15
32
  * Build collision groups from a method map — groups methods by `name#arity`.
16
33
  * Call once per class, then pass to typeTagForId/constTagForId to avoid O(N²) scans.
17
34
  */
18
35
  export declare function buildCollisionGroups(methodMap: Map<string, MethodInfo>): Map<string, MethodInfo[]>;
36
+ /**
37
+ * Compute a type-based discriminator suffix for same-arity overloads.
38
+ * Returns `~type1,type2` when the current method collides with another method
39
+ * in the same class that has the same name and arity but different parameter types.
40
+ * Returns `''` when there is no collision or types are unavailable.
41
+ */
19
42
  export declare function typeTagForId(methodMap: Map<string, MethodInfo>, methodName: string, arity: number | undefined, currentInfo: MethodInfo, language?: SupportedLanguages,
20
43
  /** Pre-built collision groups from buildCollisionGroups(). Avoids O(N) scan per call. */
21
44
  collisionGroups?: Map<string, MethodInfo[]>): string;
@@ -13,11 +13,30 @@ export function arityForIdFromInfo(info) {
13
13
  return info.parameters.some((p) => p.isVariadic) ? undefined : info.parameters.length;
14
14
  }
15
15
  /**
16
- * Compute a type-based discriminator suffix for same-arity overloads.
17
- * Returns `~type1,type2` when the current method collides with another method
18
- * in the same class that has the same name and arity but different parameter types.
19
- * Returns `''` when there is no collision or types are unavailable.
16
+ * Key for the per-class method map built by `getMethodInfo` (parse-worker).
17
+ *
18
+ * `name:line` is NOT unique. Two callables can start on the same line with the
19
+ * same name whenever one of them is SYNTHESIZED at a position that is not its
20
+ * own declaration: a Java record's implicit component accessor is minted at the
21
+ * component (`record P(int x, int y) { int x(int s) {…} }`), and a C# 12 primary
22
+ * constructor at the owner's `parameter_list`
23
+ * (`class Point(int x, int y) { public Point(int x) : this(x, 0) {} }`). Both are
24
+ * appended LAST by their extractor, so under a `name:line` key the synthesized
25
+ * entry silently destroyed the source-written method's MethodInfo and the two
26
+ * ids collapsed onto one node (#2936).
27
+ *
28
+ * `line` is 1-based and `column` is 0-based — deliberately, because this is a
29
+ * join key rather than a displayed location and both sides derive it from the
30
+ * same node. Do not "normalize" one half; the join is the only contract.
31
+ *
32
+ * The KEY is never parsed by any consumer — `buildCollisionGroups`,
33
+ * `typeTagForId` and `constTagForId` all iterate `.values()`. Keep it that way,
34
+ * and never insert one MethodInfo under two keys: those consumers would then
35
+ * count it twice and turn every singleton into a false collision group.
20
36
  */
37
+ export function methodInfoKey(name, line, column) {
38
+ return `${name}:${line}:${column}`;
39
+ }
21
40
  /**
22
41
  * Build collision groups from a method map — groups methods by `name#arity`.
23
42
  * Call once per class, then pass to typeTagForId/constTagForId to avoid O(N²) scans.
@@ -37,6 +56,12 @@ export function buildCollisionGroups(methodMap) {
37
56
  }
38
57
  return groups;
39
58
  }
59
+ /**
60
+ * Compute a type-based discriminator suffix for same-arity overloads.
61
+ * Returns `~type1,type2` when the current method collides with another method
62
+ * in the same class that has the same name and arity but different parameter types.
63
+ * Returns `''` when there is no collision or types are unavailable.
64
+ */
40
65
  export function typeTagForId(methodMap, methodName, arity, currentInfo, language,
41
66
  /** Pre-built collision groups from buildCollisionGroups(). Avoids O(N) scan per call. */
42
67
  collisionGroups) {
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Synthesize `@reference.receiver-chain` for a call match whose receiver is
3
+ * itself an expression.
4
+ *
5
+ * Shared across every language emitter, and deliberately language-free (AGENTS.md
6
+ * R6): the call gate reads the `@reference.call.*` tag vocabulary, which is
7
+ * shared by every language's `.scm` query, rather than a per-language tag list.
8
+ *
9
+ * Lives in the emitter layer rather than the query because a `.scm` pattern
10
+ * cannot call `extractMixedChain`, and the receiver capture originates in
11
+ * several patterns per language.
12
+ */
13
+ import type { Capture } from '../../../_shared/index.js';
14
+ import type { SyntaxNode } from './ast-helpers.js';
15
+ /**
16
+ * Add `@reference.receiver-chain` to `grouped` when the match is a call whose
17
+ * receiver decodes to a chain over a nameable base. Mutates `grouped` in place
18
+ * and returns nothing — mirroring how the other synthesized captures are added.
19
+ *
20
+ * Gated on the call tags: without that gate this fires on read, write and JSX
21
+ * receivers too, which pay the AST walk and the persisted bytes for a field no
22
+ * call-site resolver reads.
23
+ *
24
+ * A chain is minted ONLY when the walk reached a nameable base.
25
+ * `extractMixedChain` reports `baseReceiverName: undefined` whenever it stopped
26
+ * early — at `MAX_CHAIN_DEPTH`, or because a step could not be read — and what it
27
+ * collected then is a partial chain missing exactly the head that decides the
28
+ * final type. Encoding that would turn a receiver we cannot type into one we type
29
+ * WRONGLY, so those fall through to the resolver's existing text cascade.
30
+ */
31
+ export declare function synthesizeReceiverChainCapture(grouped: Record<string, Capture>, receiverNode: SyntaxNode | undefined | null): void;
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Synthesize `@reference.receiver-chain` for a call match whose receiver is
3
+ * itself an expression.
4
+ *
5
+ * Shared across every language emitter, and deliberately language-free (AGENTS.md
6
+ * R6): the call gate reads the `@reference.call.*` tag vocabulary, which is
7
+ * shared by every language's `.scm` query, rather than a per-language tag list.
8
+ *
9
+ * Lives in the emitter layer rather than the query because a `.scm` pattern
10
+ * cannot call `extractMixedChain`, and the receiver capture originates in
11
+ * several patterns per language.
12
+ */
13
+ import { syntheticCapture } from './ast-helpers.js';
14
+ import { extractMixedChain } from './call-analysis.js';
15
+ import { encodeReceiverChain } from './receiver-chain-codec.js';
16
+ /** Tag prefix marking a match as a CALL. `@reference.callable` is deliberately
17
+ * excluded by the trailing dot — it marks a callable VALUE, not a call site. */
18
+ const CALL_TAG_PREFIX = '@reference.call.';
19
+ /** Does this match represent a call? */
20
+ function isCallMatch(grouped) {
21
+ for (const tag of Object.keys(grouped)) {
22
+ if (tag.startsWith(CALL_TAG_PREFIX))
23
+ return true;
24
+ }
25
+ return false;
26
+ }
27
+ /**
28
+ * Add `@reference.receiver-chain` to `grouped` when the match is a call whose
29
+ * receiver decodes to a chain over a nameable base. Mutates `grouped` in place
30
+ * and returns nothing — mirroring how the other synthesized captures are added.
31
+ *
32
+ * Gated on the call tags: without that gate this fires on read, write and JSX
33
+ * receivers too, which pay the AST walk and the persisted bytes for a field no
34
+ * call-site resolver reads.
35
+ *
36
+ * A chain is minted ONLY when the walk reached a nameable base.
37
+ * `extractMixedChain` reports `baseReceiverName: undefined` whenever it stopped
38
+ * early — at `MAX_CHAIN_DEPTH`, or because a step could not be read — and what it
39
+ * collected then is a partial chain missing exactly the head that decides the
40
+ * final type. Encoding that would turn a receiver we cannot type into one we type
41
+ * WRONGLY, so those fall through to the resolver's existing text cascade.
42
+ */
43
+ export function synthesizeReceiverChainCapture(grouped, receiverNode) {
44
+ if (receiverNode === undefined || receiverNode === null)
45
+ return;
46
+ if (grouped['@reference.receiver-chain'] !== undefined)
47
+ return;
48
+ if (!isCallMatch(grouped))
49
+ return;
50
+ const extracted = extractMixedChain(receiverNode);
51
+ if (extracted === undefined || extracted.baseReceiverName === undefined)
52
+ return;
53
+ const encoded = encodeReceiverChain(extracted.baseReceiverName, extracted.chain);
54
+ if (encoded === undefined)
55
+ return;
56
+ grouped['@reference.receiver-chain'] = syntheticCapture('@reference.receiver-chain', receiverNode, encoded);
57
+ }
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Receiver-chain codec.
3
+ *
4
+ * THE one encoder/decoder for the compact receiver chain carried on
5
+ * `ReferenceSite.receiverChain`: the capture emitters write it, the
6
+ * scope-resolution fold reads it, and the durable ParsedFile store validates
7
+ * it. Two hand-rolled copies of a wire format drift — every side MUST import
8
+ * from here. (`taint/path-codec.ts` is the in-repo precedent for both the
9
+ * discipline and the shape.)
10
+ *
11
+ * ## Why a string rather than `MixedChainStep[]`
12
+ *
13
+ * `makeInterningReviver` (parsedfile-store.ts) interns strings, but it
14
+ * re-shares OBJECTS only when they carry `nodeId` + `filePath`. A
15
+ * `MixedChainStep` has neither, so an object encoding leaves every step object
16
+ * and every chain array as a distinct allocation on every warm load, while a
17
+ * string collapses to one interned instance per distinct chain.
18
+ *
19
+ * ## Wire format (version `2`)
20
+ *
21
+ * ```
22
+ * 2|<base>|<step>|<step>…[|~]
23
+ * ```
24
+ *
25
+ * - One-character version prefix, then the BASE receiver name, then ordered
26
+ * base-first steps.
27
+ * - Each step is a one-character kind sigil followed by the member name:
28
+ * `c` = call (`getUser()`), `f` = field (`address`). The sigil is the first
29
+ * character of the segment and the name follows immediately, so a member
30
+ * whose name begins with `c` or `f` needs no escaping (`ccount` decodes as a
31
+ * call to `count`).
32
+ * - `a` = await and `i` = index are NAME-FREE and encode as a BARE sigil: an
33
+ * awaited call's name already lives on its `c` step, and a subscript's key is
34
+ * a value rather than an identifier the resolver could look up. The decoder
35
+ * rejects any trailing characters after `a` or `i`, which is what keeps an
36
+ * accidentally empty-name `c` or `f` segment refusing instead of decoding as
37
+ * one of these.
38
+ * - A trailing `|~` segment is the TRUNCATION MARKER. NOTE: no current producer
39
+ * mints one. `extractMixedChain` signals "stopped early" by returning
40
+ * `baseReceiverName: undefined`, and the encoder requires a base, so a
41
+ * truncated chain is unrepresentable rather than merely unused. The marker and
42
+ * the decoder/fold guards are kept as a forward-compatible contract: a future
43
+ * producer that CAN report a partial chain must set it, and the fold already
44
+ * refuses such chains. Read the `truncated` field as "reserved", not "live". the chain hit
45
+ * `MAX_CHAIN_DEPTH` and what is encoded is a base-side PREFIX of the real
46
+ * chain. A consumer MUST treat a truncated chain as unusable for typing —
47
+ * the missing tail is exactly what determines the final type — but never as
48
+ * an error.
49
+ *
50
+ * `|` and `~` cannot appear in an identifier in any supported language, so the
51
+ * format needs no escaping and a malformed payload cannot silently decode as a
52
+ * different valid chain.
53
+ *
54
+ * For `svc.getUser().address.save()`, the receiver of `save` encodes as
55
+ * `2|svc|cgetUser|faddress` — 23 bytes. For `(await svc.getUserAsync()).save()`
56
+ * it is `2|svc|cgetUserAsync|a`.
57
+ */
58
+ import type { MixedChainStep } from '../../../_shared/index.js';
59
+ /** Hard cap on the encoded payload. `MAX_CHAIN_DEPTH` already bounds the step
60
+ * COUNT; this bounds the total bytes so a pathological identifier cannot grow
61
+ * a shard without limit. Generous against real identifiers — the encoding for
62
+ * a full-depth chain of 30-character names is still under 130 bytes. */
63
+ export declare const MAX_RECEIVER_CHAIN_BYTES = 512;
64
+ export interface DecodedReceiverChain {
65
+ readonly baseReceiverName: string;
66
+ readonly steps: readonly MixedChainStep[];
67
+ /** The encoded chain is a base-side prefix — the real chain was longer.
68
+ * Typing off a truncated chain would type off the wrong member. */
69
+ readonly truncated: boolean;
70
+ }
71
+ /**
72
+ * Encode a chain, or `undefined` when it cannot be represented — an empty
73
+ * chain (nothing to fold), an unencodable name, or a payload over the byte
74
+ * cap. Refusing to mint is deliberate: a half-encoded chain would be decoded
75
+ * as a complete-but-different one.
76
+ */
77
+ export declare function encodeReceiverChain(baseReceiverName: string, steps: readonly MixedChainStep[], options?: {
78
+ readonly truncated?: boolean;
79
+ }): string | undefined;
80
+ /**
81
+ * Decode a payload, or `undefined` when it is not a well-formed chain. Total
82
+ * function: every malformed input returns `undefined` rather than throwing,
83
+ * because the two callers that matter — the extractor and the untrusted store
84
+ * boundary — are both on paths where a throw would cost the whole file.
85
+ */
86
+ export declare function decodeReceiverChain(value: unknown): DecodedReceiverChain | undefined;
87
+ /** Whether a persisted value is a chain this build can use. The store boundary
88
+ * wants the predicate, not the decoded value. */
89
+ export declare function isValidReceiverChain(value: unknown): value is string;
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Receiver-chain codec.
3
+ *
4
+ * THE one encoder/decoder for the compact receiver chain carried on
5
+ * `ReferenceSite.receiverChain`: the capture emitters write it, the
6
+ * scope-resolution fold reads it, and the durable ParsedFile store validates
7
+ * it. Two hand-rolled copies of a wire format drift — every side MUST import
8
+ * from here. (`taint/path-codec.ts` is the in-repo precedent for both the
9
+ * discipline and the shape.)
10
+ *
11
+ * ## Why a string rather than `MixedChainStep[]`
12
+ *
13
+ * `makeInterningReviver` (parsedfile-store.ts) interns strings, but it
14
+ * re-shares OBJECTS only when they carry `nodeId` + `filePath`. A
15
+ * `MixedChainStep` has neither, so an object encoding leaves every step object
16
+ * and every chain array as a distinct allocation on every warm load, while a
17
+ * string collapses to one interned instance per distinct chain.
18
+ *
19
+ * ## Wire format (version `2`)
20
+ *
21
+ * ```
22
+ * 2|<base>|<step>|<step>…[|~]
23
+ * ```
24
+ *
25
+ * - One-character version prefix, then the BASE receiver name, then ordered
26
+ * base-first steps.
27
+ * - Each step is a one-character kind sigil followed by the member name:
28
+ * `c` = call (`getUser()`), `f` = field (`address`). The sigil is the first
29
+ * character of the segment and the name follows immediately, so a member
30
+ * whose name begins with `c` or `f` needs no escaping (`ccount` decodes as a
31
+ * call to `count`).
32
+ * - `a` = await and `i` = index are NAME-FREE and encode as a BARE sigil: an
33
+ * awaited call's name already lives on its `c` step, and a subscript's key is
34
+ * a value rather than an identifier the resolver could look up. The decoder
35
+ * rejects any trailing characters after `a` or `i`, which is what keeps an
36
+ * accidentally empty-name `c` or `f` segment refusing instead of decoding as
37
+ * one of these.
38
+ * - A trailing `|~` segment is the TRUNCATION MARKER. NOTE: no current producer
39
+ * mints one. `extractMixedChain` signals "stopped early" by returning
40
+ * `baseReceiverName: undefined`, and the encoder requires a base, so a
41
+ * truncated chain is unrepresentable rather than merely unused. The marker and
42
+ * the decoder/fold guards are kept as a forward-compatible contract: a future
43
+ * producer that CAN report a partial chain must set it, and the fold already
44
+ * refuses such chains. Read the `truncated` field as "reserved", not "live". the chain hit
45
+ * `MAX_CHAIN_DEPTH` and what is encoded is a base-side PREFIX of the real
46
+ * chain. A consumer MUST treat a truncated chain as unusable for typing —
47
+ * the missing tail is exactly what determines the final type — but never as
48
+ * an error.
49
+ *
50
+ * `|` and `~` cannot appear in an identifier in any supported language, so the
51
+ * format needs no escaping and a malformed payload cannot silently decode as a
52
+ * different valid chain.
53
+ *
54
+ * For `svc.getUser().address.save()`, the receiver of `save` encodes as
55
+ * `2|svc|cgetUser|faddress` — 23 bytes. For `(await svc.getUserAsync()).save()`
56
+ * it is `2|svc|cgetUserAsync|a`.
57
+ */
58
+ import { MAX_CHAIN_DEPTH } from './call-analysis.js';
59
+ /** Wire version. Bumped 1 → 2 when the name-free `await` and `index` step kinds
60
+ * were added: a v1 decoder reading a v2 payload must REFUSE, not decode the
61
+ * prefix it happens to understand, because a chain missing its await or index
62
+ * hop decodes cleanly as a different, shorter chain and would type the receiver
63
+ * against the wrong member. */
64
+ const VERSION = '2';
65
+ const SEPARATOR = '|';
66
+ const TRUNCATED = '~';
67
+ /** Sigil per step kind. ONE table, and both directions derive from it — the
68
+ * decoder used to hand-write `sigil === 'c' ? 'call' : 'field'` and its own
69
+ * await/index comparison, which meant the decoder was exactly the side that
70
+ * could drift from the table claiming to prevent drift. */
71
+ const SIGIL_BY_KIND = {
72
+ call: 'c',
73
+ field: 'f',
74
+ await: 'a',
75
+ index: 'i',
76
+ };
77
+ /** Kinds that encode as a BARE sigil, because they have no member name to
78
+ * carry. Derived from the step union rather than listed twice. */
79
+ const NAME_FREE_KINDS = new Set(['await', 'index']);
80
+ const KIND_BY_SIGIL = new Map(Object.entries(SIGIL_BY_KIND).map(([kind, sigil]) => [sigil, kind]));
81
+ /** Hard cap on the encoded payload. `MAX_CHAIN_DEPTH` already bounds the step
82
+ * COUNT; this bounds the total bytes so a pathological identifier cannot grow
83
+ * a shard without limit. Generous against real identifiers — the encoding for
84
+ * a full-depth chain of 30-character names is still under 130 bytes. */
85
+ export const MAX_RECEIVER_CHAIN_BYTES = 512;
86
+ /** A segment is safe when it contains no structural character. Identifiers in
87
+ * every supported language satisfy this; anything that does not is a payload
88
+ * we refuse to mint rather than escape. */
89
+ function isEncodableSegment(value) {
90
+ // `\s` does NOT match zero-width characters (U+200B ZWS, U+200C/D ZWNJ/ZWJ,
91
+ // U+200E/F LRM/RLM, U+FEFF BOM). An identifier carrying one is a trojan-source
92
+ // vector: it would encode and persist cleanly, then match no binding at
93
+ // resolution time — a silent, unexplained miss. Refuse to mint instead.
94
+ return (value.length > 0 &&
95
+ !value.includes(SEPARATOR) &&
96
+ !value.includes(TRUNCATED) &&
97
+ !/[\s\u200B-\u200F\u2028\u2029\uFEFF]/.test(value));
98
+ }
99
+ /**
100
+ * Encode a chain, or `undefined` when it cannot be represented — an empty
101
+ * chain (nothing to fold), an unencodable name, or a payload over the byte
102
+ * cap. Refusing to mint is deliberate: a half-encoded chain would be decoded
103
+ * as a complete-but-different one.
104
+ */
105
+ export function encodeReceiverChain(baseReceiverName, steps, options) {
106
+ if (steps.length === 0 || steps.length > MAX_CHAIN_DEPTH)
107
+ return undefined;
108
+ if (!isEncodableSegment(baseReceiverName))
109
+ return undefined;
110
+ const parts = [VERSION, baseReceiverName];
111
+ for (const step of steps) {
112
+ // Name-free kinds encode as a bare sigil. They are exempt from the
113
+ // non-empty-name guard because they HAVE no name to check — not because the
114
+ // guard is relaxed: an empty-name `call` or `field` is still refused below.
115
+ if (NAME_FREE_KINDS.has(step.kind)) {
116
+ parts.push(SIGIL_BY_KIND[step.kind]);
117
+ continue;
118
+ }
119
+ if (!isEncodableSegment(step.name))
120
+ return undefined;
121
+ parts.push(`${SIGIL_BY_KIND[step.kind]}${step.name}`);
122
+ }
123
+ if (options?.truncated === true)
124
+ parts.push(TRUNCATED);
125
+ const encoded = parts.join(SEPARATOR);
126
+ return encoded.length > MAX_RECEIVER_CHAIN_BYTES ? undefined : encoded;
127
+ }
128
+ /**
129
+ * Decode a payload, or `undefined` when it is not a well-formed chain. Total
130
+ * function: every malformed input returns `undefined` rather than throwing,
131
+ * because the two callers that matter — the extractor and the untrusted store
132
+ * boundary — are both on paths where a throw would cost the whole file.
133
+ */
134
+ export function decodeReceiverChain(value) {
135
+ if (typeof value !== 'string')
136
+ return undefined;
137
+ if (value.length === 0 || value.length > MAX_RECEIVER_CHAIN_BYTES)
138
+ return undefined;
139
+ const parts = value.split(SEPARATOR);
140
+ if (parts.length < 3)
141
+ return undefined; // version + base + at least one step
142
+ if (parts[0] !== VERSION)
143
+ return undefined;
144
+ // `parts.length < 3` above already proves this element exists.
145
+ const baseReceiverName = parts[1];
146
+ if (!isEncodableSegment(baseReceiverName))
147
+ return undefined;
148
+ let stepParts = parts.slice(2);
149
+ const truncated = stepParts[stepParts.length - 1] === TRUNCATED;
150
+ if (truncated)
151
+ stepParts = stepParts.slice(0, -1);
152
+ if (stepParts.length === 0 || stepParts.length > MAX_CHAIN_DEPTH)
153
+ return undefined;
154
+ const steps = [];
155
+ for (const part of stepParts) {
156
+ const sigil = part[0];
157
+ const name = part.slice(1);
158
+ // Name-free kinds must be EXACTLY their sigil. Rejecting a trailing tail is
159
+ // what keeps an accidentally empty-name call or field from decoding as one
160
+ // of these: `c` alone stays malformed, it does not become an await.
161
+ const kind = sigil === undefined ? undefined : KIND_BY_SIGIL.get(sigil);
162
+ if (kind === undefined)
163
+ return undefined;
164
+ if (NAME_FREE_KINDS.has(kind)) {
165
+ // Must be EXACTLY the sigil. Rejecting a trailing tail is what keeps an
166
+ // accidentally empty-name call or field from decoding as one of these.
167
+ if (name.length > 0)
168
+ return undefined;
169
+ steps.push({ kind: kind });
170
+ continue;
171
+ }
172
+ if (!isEncodableSegment(name))
173
+ return undefined;
174
+ steps.push({ kind: kind, name });
175
+ }
176
+ return { baseReceiverName, steps, truncated };
177
+ }
178
+ /** Whether a persisted value is a chain this build can use. The store boundary
179
+ * wants the predicate, not the decoded value. */
180
+ export function isValidReceiverChain(value) {
181
+ return decodeReceiverChain(value) !== undefined;
182
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Scope-tree walking primitives shared by the providers' `bindingScopeFor`
3
+ * hooks.
4
+ *
5
+ * Language-neutral: parameterised over `ScopeKind` — the shared scope
6
+ * vocabulary — and names no language, so it belongs in the core pipeline
7
+ * rather than in any one provider (AGENTS.md § shared pipeline code).
8
+ */
9
+ import type { Scope, ScopeId, ScopeTree } from '../../../_shared/index.js';
10
+ /**
11
+ * Walk up the scope chain to find the first scope whose `kind` matches
12
+ * any of `kinds`. Returns the matching scope's id or `null` when no
13
+ * ancestor matches (e.g., a return type binding emitted outside any
14
+ * Module scope — shouldn't happen in well-formed input).
15
+ *
16
+ * Every provider that hoists a binding out of the scope it was captured in
17
+ * needs exactly this walk: a field typed from a constructor call in a method
18
+ * body belongs on the enclosing Class, a `var` on the enclosing Function or
19
+ * Module, a method return type on the Module. Which `kind` to stop at is the
20
+ * only per-language part, and that is the parameter.
21
+ */
22
+ export declare function walkToScope(from: Scope, tree: ScopeTree, ...kinds: readonly Scope['kind'][]): ScopeId | null;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Scope-tree walking primitives shared by the providers' `bindingScopeFor`
3
+ * hooks.
4
+ *
5
+ * Language-neutral: parameterised over `ScopeKind` — the shared scope
6
+ * vocabulary — and names no language, so it belongs in the core pipeline
7
+ * rather than in any one provider (AGENTS.md § shared pipeline code).
8
+ */
9
+ /**
10
+ * Walk up the scope chain to find the first scope whose `kind` matches
11
+ * any of `kinds`. Returns the matching scope's id or `null` when no
12
+ * ancestor matches (e.g., a return type binding emitted outside any
13
+ * Module scope — shouldn't happen in well-formed input).
14
+ *
15
+ * Every provider that hoists a binding out of the scope it was captured in
16
+ * needs exactly this walk: a field typed from a constructor call in a method
17
+ * body belongs on the enclosing Class, a `var` on the enclosing Function or
18
+ * Module, a method return type on the Module. Which `kind` to stop at is the
19
+ * only per-language part, and that is the parameter.
20
+ */
21
+ export function walkToScope(from, tree, ...kinds) {
22
+ let cur = from;
23
+ const kindSet = new Set(kinds);
24
+ while (cur !== undefined) {
25
+ if (kindSet.has(cur.kind))
26
+ return cur.id;
27
+ const parentId = cur.parent ?? null;
28
+ if (parentId === null)
29
+ break;
30
+ cur = tree.getScope(parentId);
31
+ }
32
+ return null;
33
+ }
@@ -1,3 +1,4 @@
1
+ import type { TypeRef } from '../../../_shared/index.js';
1
2
  /**
2
3
  * Parse top-level generic/template arguments from a type-like string.
3
4
  *
@@ -7,6 +8,43 @@
7
8
  * - `List<T*>` -> ['T*']
8
9
  */
9
10
  export declare function extractTemplateArguments(text: string): string[] | undefined;
11
+ /**
12
+ * The type ARGUMENTS a reference applies to its base, read from the reference's
13
+ * own source spelling: `IValidator<string>` → `['string']`, `Base[User]` →
14
+ * `['User']`, `Repository` → `undefined`.
15
+ *
16
+ * The inverse direction of {@link erasedTypeApplication}, which rebuilds the
17
+ * `Base<Args>` SPELLING so a lookup can stay grounded; this returns the
18
+ * ARGUMENTS so a consumer that has already resolved the base can ask which
19
+ * instantiation it was (#2912).
20
+ *
21
+ * Both bracket families count, because both spell type application in a
22
+ * heritage position — `class C : IValidator<string>` and Go's `struct { Base[int] }`
23
+ * / Python's `class C(Base[User])`. What is NOT accepted is anything that fails
24
+ * to be exactly one balanced, non-empty list closing at the very end:
25
+ *
26
+ * - `Base(args)` — a C# primary-constructor base, not an application.
27
+ * - `Foo[]` — an empty list is an array spelling, not arguments.
28
+ * - `(Int) -> Unit` — a Kotlin function type, whose `>` closes nothing.
29
+ *
30
+ * Declining is the safe outcome for all of them: absence reads as "unknown"
31
+ * and every consumer of this fails open on it.
32
+ */
33
+ export declare function typeApplicationArguments(spelling: string): string[] | undefined;
34
+ /**
35
+ * Index of the `(` that matches the trailing `)` of `text`, or -1 when the text
36
+ * does not end in a balanced call suffix.
37
+ *
38
+ * Shared for the same reason as {@link balancedTailList}: this scan is fiddly
39
+ * enough that two copies would be free to disagree, and it has two unrelated
40
+ * readers — splitting a receiver chain at its call, and stripping a base's
41
+ * constructor invocation off a heritage spelling.
42
+ */
43
+ export declare function matchingOpenParen(text: string): number;
44
+ /** Drop a balanced `(...)` that ENDS the text — the argument list of a base's
45
+ * constructor invocation, as in `record R : Base<int>(x)` or Kotlin
46
+ * `class C : Bar<Int>()`. Anything else is returned unchanged. */
47
+ export declare function stripTrailingCallSuffix(text: string): string;
10
48
  export declare function stripTemplateArguments(text: string): string;
11
49
  export declare function templateArgumentsIdTag(templateArguments?: readonly string[]): string;
12
50
  /**
@@ -28,3 +66,61 @@ export declare function constraintsHash(jsonText: string): string;
28
66
  * Returns empty string when the payload is absent so callers can
29
67
  * string-concatenate unconditionally. */
30
68
  export declare function templateConstraintsIdTag(payload: unknown): string;
69
+ /**
70
+ * The type APPLICATION a type reference was reduced from — `Mapped[User]`,
71
+ * `Repo<User>` — restored to the `Base<Args>` spelling, or `undefined` when
72
+ * this reference is not that shape.
73
+ *
74
+ * ── WHY A LOOKUP MUST NOT BE HANDED THE REDUCED NAME ─────────────────────────
75
+ *
76
+ * `rawName` is post-normalization (see its docstring on `TypeRef`), and several
77
+ * providers reduce a type application to its BASE NAME at capture time —
78
+ * `Mapped[User]` → `Mapped`, `Repo<User>` → `Repo`. That erasure is what lets
79
+ * one declaration answer for every instantiation of it, and it is also the
80
+ * widest step any lookup in this pipeline takes: reaching a declaration by NAME
81
+ * ALONE binds whatever the workspace happens to declare under that name. A
82
+ * third-party `Mapped[User]` beside an unrelated workspace `class Mapped` is
83
+ * then a confident WRONG edge, which is strictly worse than the missing one it
84
+ * replaced.
85
+ *
86
+ * `resolveClassBindingForName` already owns the rule for this — it admits an
87
+ * erased base name only on grounds that connect the site to the declaration
88
+ * (the scope chain binds the name; the declaration is in the same file; the
89
+ * index proves the name is a template family; the file has no cross-file class
90
+ * channel to be absent from). But that route is entered on the SPELLING: a name
91
+ * carrying its arguments takes it, a name already reduced to its base cannot,
92
+ * because nothing distinguishes it from an ordinary class name. So a provider
93
+ * that reduces at capture time sends its receivers down the ungrounded route by
94
+ * construction, whatever the shared lookup does.
95
+ *
96
+ * Restoring the application from `declaredSpelling` — which keeps the
97
+ * annotation exactly as written whenever normalization changed it — puts those
98
+ * receivers back on the grounded route. Restoring rather than reimplementing
99
+ * the grounding here is deliberate: the rule is one rule, and a second copy of
100
+ * it in this file would be free to drift from the one in `scope/walkers.ts`
101
+ * that every other caller uses. (Its predicate is not exported; the exported
102
+ * entry point is the spelling.)
103
+ *
104
+ * ── WHAT COUNTS AS AN APPLICATION ────────────────────────────────────────────
105
+ *
106
+ * `rawName` must be the base the spelling APPLIES arguments to, and the
107
+ * argument list must be the whole of the rest of the spelling — one list,
108
+ * balanced, non-empty. Everything else is left exactly as it resolves today,
109
+ * because a transform that is not certain is a worse failure than no transform:
110
+ *
111
+ * - `User[]` — an array whose ELEMENT the capture layer already reduced to
112
+ * `User`. The position is the element, not an application of `User`, and
113
+ * the empty list is what says so.
114
+ * - `User[][]` — likewise, and it closes its first list before the end.
115
+ * - `std::vector<Item>` reduced to `vector<Item>` — the spelling does not
116
+ * start with the reduced name, so nothing was erased that this can restore.
117
+ * - `Repo<User>?`, `Map<String, (Int) -> Unit>` — trailing decoration and an
118
+ * argument list that does not close where it must. Declining leaves the
119
+ * pre-existing behaviour, which is what "no transform" has to mean.
120
+ *
121
+ * The rebuilt spelling uses ANGLE brackets because that is the spelling
122
+ * `resolveClassBindingForName`'s contract is written against; the punctuation a
123
+ * language spells type application with is not otherwise meaningful here, and
124
+ * nothing downstream reads this string except that lookup.
125
+ */
126
+ export declare function erasedTypeApplication(typeRef: TypeRef): string | undefined;