gitnexus 1.6.10-rc.21 → 1.6.10-rc.211

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 (870) hide show
  1. package/README.md +212 -22
  2. package/dist/_shared/graph/types.d.ts +27 -8
  3. package/dist/_shared/graph/types.d.ts.map +1 -1
  4. package/dist/_shared/index.d.ts +4 -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 +19 -1
  11. package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
  12. package/dist/_shared/integrations/resilient-fetch.js +23 -10
  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/callable-flow-site.d.ts +110 -0
  20. package/dist/_shared/scope-resolution/callable-flow-site.d.ts.map +1 -0
  21. package/dist/_shared/scope-resolution/callable-flow-site.js +11 -0
  22. package/dist/_shared/scope-resolution/callable-flow-site.js.map +1 -0
  23. package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
  24. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +6 -1
  25. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
  26. package/dist/_shared/scope-resolution/finalize-algorithm.js +316 -37
  27. package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
  28. package/dist/_shared/scope-resolution/parsed-file.d.ts +7 -0
  29. package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
  30. package/dist/_shared/scope-resolution/reference-site.d.ts +124 -1
  31. package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
  32. package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
  33. package/dist/_shared/scope-resolution/registries/lookup-core.d.ts.map +1 -1
  34. package/dist/_shared/scope-resolution/registries/lookup-core.js +58 -2
  35. package/dist/_shared/scope-resolution/registries/lookup-core.js.map +1 -1
  36. package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -1
  37. package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -1
  38. package/dist/_shared/scope-resolution/scope-tree.js.map +1 -1
  39. package/dist/_shared/scope-resolution/symbol-definition.d.ts +47 -0
  40. package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
  41. package/dist/_shared/scope-resolution/types.d.ts +297 -5
  42. package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
  43. package/dist/cli/ai-context.d.ts +10 -2
  44. package/dist/cli/ai-context.js +128 -61
  45. package/dist/cli/analyze-config.d.ts +1 -1
  46. package/dist/cli/analyze-options.d.ts +131 -0
  47. package/dist/cli/analyze-options.js +1 -0
  48. package/dist/cli/analyze.d.ts +25 -114
  49. package/dist/cli/analyze.js +194 -36
  50. package/dist/cli/cli-message.d.ts +1 -1
  51. package/dist/cli/detect-changes-format.js +19 -2
  52. package/dist/cli/doctor.d.ts +23 -0
  53. package/dist/cli/doctor.js +72 -9
  54. package/dist/cli/editor-targets.js +6 -0
  55. package/dist/cli/eval-server.d.ts +23 -1
  56. package/dist/cli/eval-server.js +128 -9
  57. package/dist/cli/format-symbol.d.ts +15 -0
  58. package/dist/cli/format-symbol.js +17 -0
  59. package/dist/cli/generated-skill.d.ts +17 -0
  60. package/dist/cli/generated-skill.js +1 -0
  61. package/dist/cli/group.js +23 -2
  62. package/dist/cli/help-i18n.js +3 -0
  63. package/dist/cli/i18n/en.d.ts +17 -8
  64. package/dist/cli/i18n/en.js +19 -8
  65. package/dist/cli/i18n/resources.d.ts +26 -8
  66. package/dist/cli/i18n/zh-CN.d.ts +9 -0
  67. package/dist/cli/i18n/zh-CN.js +17 -8
  68. package/dist/cli/index.js +16 -9
  69. package/dist/cli/lazy-action.d.ts +7 -0
  70. package/dist/cli/lazy-action.js +27 -0
  71. package/dist/cli/mcp.js +6 -3
  72. package/dist/cli/resolve-invocation.d.ts +7 -3
  73. package/dist/cli/resolve-invocation.js +7 -3
  74. package/dist/cli/setup.d.ts +8 -0
  75. package/dist/cli/setup.js +30 -7
  76. package/dist/cli/skill-gen.d.ts +1 -6
  77. package/dist/cli/skill-gen.js +88 -18
  78. package/dist/cli/standard-skills.d.ts +76 -0
  79. package/dist/cli/standard-skills.js +45 -0
  80. package/dist/cli/status.d.ts +4 -1
  81. package/dist/cli/status.js +57 -4
  82. package/dist/cli/tool.d.ts +1 -0
  83. package/dist/cli/tool.js +75 -7
  84. package/dist/cli/uninstall.js +7 -2
  85. package/dist/cli/wiki.d.ts +1 -0
  86. package/dist/cli/wiki.js +59 -10
  87. package/dist/config/ignore-service.d.ts +2 -0
  88. package/dist/config/ignore-service.js +31 -4
  89. package/dist/core/analysis-features.d.ts +21 -0
  90. package/dist/core/analysis-features.js +59 -0
  91. package/dist/core/analyzer-identity.d.ts +154 -0
  92. package/dist/core/analyzer-identity.js +2158 -0
  93. package/dist/core/augmentation/engine.js +95 -76
  94. package/dist/core/embedding-checkpoint.d.ts +143 -0
  95. package/dist/core/embedding-checkpoint.js +221 -0
  96. package/dist/core/embedding-count.d.ts +61 -0
  97. package/dist/core/embedding-count.js +69 -0
  98. package/dist/core/embeddings/ast-utils.js +9 -1
  99. package/dist/core/embeddings/embedder.d.ts +3 -2
  100. package/dist/core/embeddings/embedder.js +8 -5
  101. package/dist/core/embeddings/embedding-identity.d.ts +11 -0
  102. package/dist/core/embeddings/embedding-identity.js +24 -0
  103. package/dist/core/embeddings/embedding-pipeline.d.ts +24 -1
  104. package/dist/core/embeddings/embedding-pipeline.js +341 -19
  105. package/dist/core/embeddings/http-client.d.ts +10 -2
  106. package/dist/core/embeddings/http-client.js +282 -47
  107. package/dist/core/embeddings/node-module-compat.d.ts +4 -2
  108. package/dist/core/embeddings/node-module-compat.js +4 -2
  109. package/dist/core/embeddings/onnxruntime-common-resolver.js +5 -5
  110. package/dist/core/embeddings/onnxruntime-node-resolver.js +2 -2
  111. package/dist/core/embeddings/runtime-install.js +1 -1
  112. package/dist/core/git-staleness.js +1 -1
  113. package/dist/core/graph/graph.js +3 -0
  114. package/dist/core/graph/import-cycles.d.ts +194 -3
  115. package/dist/core/graph/import-cycles.js +522 -73
  116. package/dist/core/graph/types.d.ts +18 -0
  117. package/dist/core/group/bridge-db.js +5 -27
  118. package/dist/core/group/cross-impact.d.ts +21 -0
  119. package/dist/core/group/cross-impact.js +128 -15
  120. package/dist/core/group/cross-trace.js +27 -16
  121. package/dist/core/group/extractors/http-patterns/java.js +91 -14
  122. package/dist/core/group/extractors/http-patterns/node.js +19 -0
  123. package/dist/core/group/extractors/http-patterns/types.d.ts +8 -0
  124. package/dist/core/group/extractors/http-route-extractor.d.ts +1 -0
  125. package/dist/core/group/extractors/http-route-extractor.js +122 -48
  126. package/dist/core/group/extractors/include-extractor.js +20 -2
  127. package/dist/core/group/extractors/manifest-extractor.d.ts +1 -1
  128. package/dist/core/group/extractors/manifest-extractor.js +7 -7
  129. package/dist/core/group/service.js +10 -1
  130. package/dist/core/group/storage.js +2 -33
  131. package/dist/core/group/types.d.ts +18 -0
  132. package/dist/core/incremental/subgraph-extract.d.ts +9 -6
  133. package/dist/core/incremental/subgraph-extract.js +33 -10
  134. package/dist/core/index-freshness.d.ts +80 -0
  135. package/dist/core/index-freshness.js +120 -0
  136. package/dist/core/ingestion/call-processor.d.ts +13 -1
  137. package/dist/core/ingestion/call-processor.js +110 -3
  138. package/dist/core/ingestion/cfg/callee-cell-format.d.ts +42 -0
  139. package/dist/core/ingestion/cfg/callee-cell-format.js +42 -0
  140. package/dist/core/ingestion/cfg/emit.d.ts +8 -23
  141. package/dist/core/ingestion/cfg/emit.js +9 -23
  142. package/dist/core/ingestion/class-extractors/configs/go.js +10 -5
  143. package/dist/core/ingestion/class-extractors/configs/jvm.js +29 -0
  144. package/dist/core/ingestion/cluster-enricher.js +8 -4
  145. package/dist/core/ingestion/cobol/cobol-preprocessor.js +1 -1
  146. package/dist/core/ingestion/community-processor.d.ts +21 -3
  147. package/dist/core/ingestion/community-processor.js +88 -83
  148. package/dist/core/ingestion/di-extractors/index.d.ts +22 -34
  149. package/dist/core/ingestion/di-extractors/index.js +17 -18
  150. package/dist/core/ingestion/di-extractors/spring.d.ts +27 -5
  151. package/dist/core/ingestion/di-extractors/spring.js +87 -3
  152. package/dist/core/ingestion/di-extractors/types.d.ts +60 -0
  153. package/dist/core/ingestion/di-extractors/types.js +15 -0
  154. package/dist/core/ingestion/emit-references.js +4 -0
  155. package/dist/core/ingestion/filesystem-walker.js +16 -12
  156. package/dist/core/ingestion/finalize-orchestrator.js +1 -0
  157. package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +9 -0
  158. package/dist/core/ingestion/frameworks/spring/analysis-features.js +41 -0
  159. package/dist/core/ingestion/frameworks/spring/annotation-arguments.d.ts +13 -0
  160. package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +227 -0
  161. package/dist/core/ingestion/frameworks/spring/aop-candidates.d.ts +15 -0
  162. package/dist/core/ingestion/frameworks/spring/aop-candidates.js +85 -0
  163. package/dist/core/ingestion/frameworks/spring/aop.d.ts +118 -0
  164. package/dist/core/ingestion/frameworks/spring/aop.js +476 -0
  165. package/dist/core/ingestion/frameworks/spring/auto-configuration.d.ts +8 -0
  166. package/dist/core/ingestion/frameworks/spring/auto-configuration.js +16 -0
  167. package/dist/core/ingestion/frameworks/spring/bean-candidates.d.ts +30 -0
  168. package/dist/core/ingestion/frameworks/spring/bean-candidates.js +182 -0
  169. package/dist/core/ingestion/frameworks/spring/bean-catalog.d.ts +12 -0
  170. package/dist/core/ingestion/frameworks/spring/bean-catalog.js +27 -0
  171. package/dist/core/ingestion/frameworks/spring/bean-factories.d.ts +33 -0
  172. package/dist/core/ingestion/frameworks/spring/bean-factories.js +65 -0
  173. package/dist/core/ingestion/frameworks/spring/conditionals.d.ts +25 -0
  174. package/dist/core/ingestion/frameworks/spring/conditionals.js +319 -0
  175. package/dist/core/ingestion/frameworks/spring/config-bindings.d.ts +24 -0
  176. package/dist/core/ingestion/frameworks/spring/config-bindings.js +115 -0
  177. package/dist/core/ingestion/frameworks/spring/di-metadata.d.ts +48 -0
  178. package/dist/core/ingestion/frameworks/spring/di-metadata.js +379 -0
  179. package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +28 -0
  180. package/dist/core/ingestion/frameworks/spring/non-http-handlers.js +152 -0
  181. package/dist/core/ingestion/frameworks/spring/resource-injection.d.ts +5 -0
  182. package/dist/core/ingestion/frameworks/spring/resource-injection.js +91 -0
  183. package/dist/core/ingestion/import-resolvers/configs/csharp.js +5 -1
  184. package/dist/core/ingestion/import-resolvers/configs/swift.js +13 -0
  185. package/dist/core/ingestion/import-resolvers/csharp.d.ts +9 -1
  186. package/dist/core/ingestion/import-resolvers/csharp.js +234 -27
  187. package/dist/core/ingestion/import-resolvers/go.d.ts +11 -1
  188. package/dist/core/ingestion/import-resolvers/go.js +44 -17
  189. package/dist/core/ingestion/import-resolvers/jvm.d.ts +2 -2
  190. package/dist/core/ingestion/import-resolvers/node-workspace-packages.d.ts +90 -0
  191. package/dist/core/ingestion/import-resolvers/node-workspace-packages.js +428 -0
  192. package/dist/core/ingestion/import-resolvers/package-dir-index.d.ts +124 -0
  193. package/dist/core/ingestion/import-resolvers/package-dir-index.js +223 -0
  194. package/dist/core/ingestion/import-resolvers/pass-cache.d.ts +50 -0
  195. package/dist/core/ingestion/import-resolvers/pass-cache.js +60 -0
  196. package/dist/core/ingestion/import-resolvers/per-file-set.d.ts +71 -0
  197. package/dist/core/ingestion/import-resolvers/per-file-set.js +11 -0
  198. package/dist/core/ingestion/import-resolvers/php.d.ts +1 -1
  199. package/dist/core/ingestion/import-resolvers/php.js +27 -8
  200. package/dist/core/ingestion/import-resolvers/python-file-index.d.ts +201 -0
  201. package/dist/core/ingestion/import-resolvers/python-file-index.js +302 -0
  202. package/dist/core/ingestion/import-resolvers/python.js +25 -6
  203. package/dist/core/ingestion/import-resolvers/ruby.d.ts +1 -1
  204. package/dist/core/ingestion/import-resolvers/rust.d.ts +2 -2
  205. package/dist/core/ingestion/import-resolvers/standard.d.ts +1 -1
  206. package/dist/core/ingestion/import-resolvers/types.d.ts +1 -12
  207. package/dist/core/ingestion/import-resolvers/utils.d.ts +65 -6
  208. package/dist/core/ingestion/import-resolvers/utils.js +215 -36
  209. package/dist/core/ingestion/import-resolvers/workspace-file-index.d.ts +72 -0
  210. package/dist/core/ingestion/import-resolvers/workspace-file-index.js +58 -0
  211. package/dist/core/ingestion/language-config.d.ts +20 -1
  212. package/dist/core/ingestion/language-config.js +18 -23
  213. package/dist/core/ingestion/language-provider.d.ts +133 -7
  214. package/dist/core/ingestion/languages/c/captures.js +63 -0
  215. package/dist/core/ingestion/languages/c/import-target.js +12 -16
  216. package/dist/core/ingestion/languages/c/query.js +17 -0
  217. package/dist/core/ingestion/languages/c/scope-resolver.js +26 -19
  218. package/dist/core/ingestion/languages/c/static-linkage.js +12 -16
  219. package/dist/core/ingestion/languages/c-cpp.js +13 -0
  220. package/dist/core/ingestion/languages/cobol/captures.js +93 -0
  221. package/dist/core/ingestion/languages/cobol/scope-resolver.js +34 -20
  222. package/dist/core/ingestion/languages/cobol.js +13 -0
  223. package/dist/core/ingestion/languages/cpp/adl.d.ts +2 -2
  224. package/dist/core/ingestion/languages/cpp/adl.js +67 -44
  225. package/dist/core/ingestion/languages/cpp/captures.js +222 -3
  226. package/dist/core/ingestion/languages/cpp/file-local-linkage.js +11 -15
  227. package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +28 -8
  228. package/dist/core/ingestion/languages/cpp/inline-namespaces.js +242 -68
  229. package/dist/core/ingestion/languages/cpp/interpret.d.ts +2 -0
  230. package/dist/core/ingestion/languages/cpp/interpret.js +126 -6
  231. package/dist/core/ingestion/languages/cpp/query.js +106 -0
  232. package/dist/core/ingestion/languages/cpp/scope-resolver.js +62 -20
  233. package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +2 -15
  234. package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +18 -10
  235. package/dist/core/ingestion/languages/csharp/captures.js +44 -0
  236. package/dist/core/ingestion/languages/csharp/import-target.js +46 -72
  237. package/dist/core/ingestion/languages/csharp/namespace-siblings.js +5 -1
  238. package/dist/core/ingestion/languages/csharp/query.js +25 -5
  239. package/dist/core/ingestion/languages/csharp/scope-resolver.js +75 -2
  240. package/dist/core/ingestion/languages/dart/captures.d.ts +10 -0
  241. package/dist/core/ingestion/languages/dart/captures.js +686 -16
  242. package/dist/core/ingestion/languages/dart/extension-type-preprocess.d.ts +7 -0
  243. package/dist/core/ingestion/languages/dart/extension-type-preprocess.js +30 -0
  244. package/dist/core/ingestion/languages/dart/import-target.js +32 -9
  245. package/dist/core/ingestion/languages/dart/index.d.ts +1 -1
  246. package/dist/core/ingestion/languages/dart/index.js +1 -1
  247. package/dist/core/ingestion/languages/dart/query.js +98 -1
  248. package/dist/core/ingestion/languages/dart/scope-resolver.js +14 -3
  249. package/dist/core/ingestion/languages/dart/simple-hooks.js +9 -0
  250. package/dist/core/ingestion/languages/dart.js +8 -1
  251. package/dist/core/ingestion/languages/go/captures.js +142 -3
  252. package/dist/core/ingestion/languages/go/generic-type-parameters.d.ts +31 -0
  253. package/dist/core/ingestion/languages/go/generic-type-parameters.js +140 -0
  254. package/dist/core/ingestion/languages/go/import-target.d.ts +3 -10
  255. package/dist/core/ingestion/languages/go/import-target.js +34 -30
  256. package/dist/core/ingestion/languages/go/index.d.ts +1 -1
  257. package/dist/core/ingestion/languages/go/interface-impls.d.ts +9 -1
  258. package/dist/core/ingestion/languages/go/interface-impls.js +693 -87
  259. package/dist/core/ingestion/languages/go/interpret.d.ts +2 -0
  260. package/dist/core/ingestion/languages/go/interpret.js +22 -8
  261. package/dist/core/ingestion/languages/go/method-owners.js +31 -12
  262. package/dist/core/ingestion/languages/go/package-clause.d.ts +46 -0
  263. package/dist/core/ingestion/languages/go/package-clause.js +75 -0
  264. package/dist/core/ingestion/languages/go/package-siblings.js +7 -11
  265. package/dist/core/ingestion/languages/go/query.js +56 -3
  266. package/dist/core/ingestion/languages/go/scope-resolver.js +39 -0
  267. package/dist/core/ingestion/languages/go.js +9 -0
  268. package/dist/core/ingestion/languages/java/analysis-features.d.ts +7 -0
  269. package/dist/core/ingestion/languages/java/analysis-features.js +25 -0
  270. package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +38 -0
  271. package/dist/core/ingestion/languages/java/capture-side-channel.js +124 -0
  272. package/dist/core/ingestion/languages/java/captures.d.ts +4 -3
  273. package/dist/core/ingestion/languages/java/captures.js +321 -49
  274. package/dist/core/ingestion/languages/java/import-target.d.ts +49 -9
  275. package/dist/core/ingestion/languages/java/import-target.js +68 -88
  276. package/dist/core/ingestion/languages/java/interpret.js +3 -2
  277. package/dist/core/ingestion/languages/java/module-resolution.d.ts +62 -0
  278. package/dist/core/ingestion/languages/java/module-resolution.js +142 -0
  279. package/dist/core/ingestion/languages/java/package-facts.d.ts +5 -0
  280. package/dist/core/ingestion/languages/java/package-facts.js +9 -0
  281. package/dist/core/ingestion/languages/java/package-siblings.d.ts +3 -16
  282. package/dist/core/ingestion/languages/java/package-siblings.js +8 -147
  283. package/dist/core/ingestion/languages/java/query.js +39 -3
  284. package/dist/core/ingestion/languages/java/record-components.d.ts +14 -0
  285. package/dist/core/ingestion/languages/java/record-components.js +185 -0
  286. package/dist/core/ingestion/languages/java/scope-resolver.js +35 -2
  287. package/dist/core/ingestion/languages/java/spring-aop.d.ts +12 -0
  288. package/dist/core/ingestion/languages/java/spring-aop.js +49 -0
  289. package/dist/core/ingestion/languages/java/spring-bean-metadata.d.ts +2 -0
  290. package/dist/core/ingestion/languages/java/spring-bean-metadata.js +8 -0
  291. package/dist/core/ingestion/languages/java/spring-conditionals.d.ts +11 -0
  292. package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
  293. package/dist/core/ingestion/languages/java/spring-config-bindings.d.ts +23 -0
  294. package/dist/core/ingestion/languages/java/spring-config-bindings.js +215 -0
  295. package/dist/core/ingestion/languages/java/spring-di.d.ts +20 -0
  296. package/dist/core/ingestion/languages/java/spring-di.js +160 -0
  297. package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +7 -0
  298. package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +32 -0
  299. package/dist/core/ingestion/languages/java.js +76 -3
  300. package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
  301. package/dist/core/ingestion/languages/javascript/captures.js +278 -4
  302. package/dist/core/ingestion/languages/javascript/import-target.d.ts +17 -21
  303. package/dist/core/ingestion/languages/javascript/import-target.js +24 -41
  304. package/dist/core/ingestion/languages/javascript/index.d.ts +54 -5
  305. package/dist/core/ingestion/languages/javascript/index.js +54 -5
  306. package/dist/core/ingestion/languages/javascript/query.d.ts +1 -0
  307. package/dist/core/ingestion/languages/javascript/query.js +232 -5
  308. package/dist/core/ingestion/languages/javascript/scope-resolver.js +12 -0
  309. package/dist/core/ingestion/languages/javascript/simple-hooks.js +2 -1
  310. package/dist/core/ingestion/languages/jvm/package-facts.d.ts +35 -0
  311. package/dist/core/ingestion/languages/jvm/package-facts.js +40 -0
  312. package/dist/core/ingestion/languages/jvm/package-siblings.d.ts +14 -0
  313. package/dist/core/ingestion/languages/jvm/package-siblings.js +197 -0
  314. package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +40 -3
  315. package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +111 -8
  316. package/dist/core/ingestion/languages/kotlin/captures.js +112 -0
  317. package/dist/core/ingestion/languages/kotlin/import-target.d.ts +8 -1
  318. package/dist/core/ingestion/languages/kotlin/import-target.js +20 -123
  319. package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
  320. package/dist/core/ingestion/languages/kotlin/index.js +1 -0
  321. package/dist/core/ingestion/languages/kotlin/module-resolution.d.ts +22 -0
  322. package/dist/core/ingestion/languages/kotlin/module-resolution.js +108 -0
  323. package/dist/core/ingestion/languages/kotlin/package-facts.d.ts +5 -0
  324. package/dist/core/ingestion/languages/kotlin/package-facts.js +9 -0
  325. package/dist/core/ingestion/languages/kotlin/package-siblings.d.ts +4 -0
  326. package/dist/core/ingestion/languages/kotlin/package-siblings.js +8 -0
  327. package/dist/core/ingestion/languages/kotlin/query.js +47 -2
  328. package/dist/core/ingestion/languages/kotlin/scope-resolver.js +36 -3
  329. package/dist/core/ingestion/languages/kotlin/spring-aop.d.ts +12 -0
  330. package/dist/core/ingestion/languages/kotlin/spring-aop.js +64 -0
  331. package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.d.ts +2 -0
  332. package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.js +8 -0
  333. package/dist/core/ingestion/languages/kotlin/spring-conditionals.d.ts +12 -0
  334. package/dist/core/ingestion/languages/kotlin/spring-conditionals.js +49 -0
  335. package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +20 -0
  336. package/dist/core/ingestion/languages/kotlin/spring-di.js +299 -0
  337. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +10 -0
  338. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +41 -0
  339. package/dist/core/ingestion/languages/kotlin.js +5 -6
  340. package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
  341. package/dist/core/ingestion/languages/php/captures.js +359 -51
  342. package/dist/core/ingestion/languages/php/import-decomposer.js +12 -0
  343. package/dist/core/ingestion/languages/php/import-target.d.ts +2 -1
  344. package/dist/core/ingestion/languages/php/import-target.js +229 -7
  345. package/dist/core/ingestion/languages/php/interpret.js +10 -0
  346. package/dist/core/ingestion/languages/php/query.js +31 -0
  347. package/dist/core/ingestion/languages/php/scope-resolver.js +1 -1
  348. package/dist/core/ingestion/languages/python/arity-metadata.d.ts +1 -0
  349. package/dist/core/ingestion/languages/python/arity-metadata.js +1 -0
  350. package/dist/core/ingestion/languages/python/captures.d.ts +3 -4
  351. package/dist/core/ingestion/languages/python/captures.js +53 -5
  352. package/dist/core/ingestion/languages/python/import-decomposer.js +22 -1
  353. package/dist/core/ingestion/languages/python/import-target.d.ts +42 -1
  354. package/dist/core/ingestion/languages/python/import-target.js +277 -91
  355. package/dist/core/ingestion/languages/python/index.d.ts +1 -1
  356. package/dist/core/ingestion/languages/python/index.js +1 -1
  357. package/dist/core/ingestion/languages/python/interpret.d.ts +52 -0
  358. package/dist/core/ingestion/languages/python/interpret.js +249 -3
  359. package/dist/core/ingestion/languages/python/query.js +9 -0
  360. package/dist/core/ingestion/languages/python/receiver-binding.d.ts +17 -2
  361. package/dist/core/ingestion/languages/python/receiver-binding.js +192 -2
  362. package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
  363. package/dist/core/ingestion/languages/python/simple-hooks.d.ts +5 -5
  364. package/dist/core/ingestion/languages/python/simple-hooks.js +9 -5
  365. package/dist/core/ingestion/languages/ruby/captures.js +200 -0
  366. package/dist/core/ingestion/languages/ruby/import-target.js +7 -5
  367. package/dist/core/ingestion/languages/ruby/query.js +93 -0
  368. package/dist/core/ingestion/languages/ruby/scope-resolver.js +2 -0
  369. package/dist/core/ingestion/languages/ruby/simple-hooks.d.ts +1 -1
  370. package/dist/core/ingestion/languages/ruby/simple-hooks.js +22 -1
  371. package/dist/core/ingestion/languages/rust/captures.js +52 -1
  372. package/dist/core/ingestion/languages/rust/interpret.js +18 -0
  373. package/dist/core/ingestion/languages/rust/method-owners.js +11 -1
  374. package/dist/core/ingestion/languages/rust/module-path.d.ts +126 -0
  375. package/dist/core/ingestion/languages/rust/module-path.js +214 -0
  376. package/dist/core/ingestion/languages/rust/qualified-call.d.ts +41 -0
  377. package/dist/core/ingestion/languages/rust/qualified-call.js +481 -0
  378. package/dist/core/ingestion/languages/rust/query.js +48 -6
  379. package/dist/core/ingestion/languages/rust/range-binding.d.ts +1 -11
  380. package/dist/core/ingestion/languages/rust/range-binding.js +149 -63
  381. package/dist/core/ingestion/languages/rust/scope-resolver.js +21 -2
  382. package/dist/core/ingestion/languages/rust.js +17 -0
  383. package/dist/core/ingestion/languages/swift/captures.js +99 -3
  384. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.d.ts +48 -0
  385. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.js +253 -0
  386. package/dist/core/ingestion/languages/swift/import-target.js +4 -9
  387. package/dist/core/ingestion/languages/swift/query.js +17 -0
  388. package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +8 -0
  389. package/dist/core/ingestion/languages/swift/receiver-binding.js +6 -2
  390. package/dist/core/ingestion/languages/swift.js +2 -0
  391. package/dist/core/ingestion/languages/typescript/captures.d.ts +90 -1
  392. package/dist/core/ingestion/languages/typescript/captures.js +288 -5
  393. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.d.ts +134 -0
  394. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.js +523 -0
  395. package/dist/core/ingestion/languages/typescript/cjs-module-exports.d.ts +54 -0
  396. package/dist/core/ingestion/languages/typescript/cjs-module-exports.js +191 -0
  397. package/dist/core/ingestion/languages/typescript/file-candidates.d.ts +29 -0
  398. package/dist/core/ingestion/languages/typescript/file-candidates.js +70 -0
  399. package/dist/core/ingestion/languages/typescript/import-decomposer.d.ts +28 -1
  400. package/dist/core/ingestion/languages/typescript/import-decomposer.js +125 -10
  401. package/dist/core/ingestion/languages/typescript/import-target.d.ts +25 -37
  402. package/dist/core/ingestion/languages/typescript/import-target.js +24 -26
  403. package/dist/core/ingestion/languages/typescript/interpret.d.ts +21 -1
  404. package/dist/core/ingestion/languages/typescript/interpret.js +45 -5
  405. package/dist/core/ingestion/languages/typescript/module-resolution.d.ts +48 -0
  406. package/dist/core/ingestion/languages/typescript/module-resolution.js +171 -0
  407. package/dist/core/ingestion/languages/typescript/nuxt-auto-imports.js +2 -1
  408. package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
  409. package/dist/core/ingestion/languages/typescript/query.js +340 -14
  410. package/dist/core/ingestion/languages/typescript/receiver-binding.d.ts +17 -0
  411. package/dist/core/ingestion/languages/typescript/receiver-binding.js +27 -0
  412. package/dist/core/ingestion/languages/typescript/scope-resolver.js +27 -40
  413. package/dist/core/ingestion/languages/typescript/simple-hooks.d.ts +0 -10
  414. package/dist/core/ingestion/languages/typescript/simple-hooks.js +22 -22
  415. package/dist/core/ingestion/languages/typescript/tsconfig.d.ts +59 -0
  416. package/dist/core/ingestion/languages/typescript/tsconfig.js +291 -0
  417. package/dist/core/ingestion/languages/typescript.js +87 -1
  418. package/dist/core/ingestion/languages/vue/import-target.d.ts +6 -22
  419. package/dist/core/ingestion/languages/vue/import-target.js +11 -47
  420. package/dist/core/ingestion/languages/vue/scope-resolver.js +4 -2
  421. package/dist/core/ingestion/local-symbol-pruner.js +11 -11
  422. package/dist/core/ingestion/method-extractors/configs/csharp.js +1 -0
  423. package/dist/core/ingestion/method-extractors/generic.js +1 -0
  424. package/dist/core/ingestion/method-types.d.ts +16 -0
  425. package/dist/core/ingestion/parsing-processor.js +32 -1
  426. package/dist/core/ingestion/pipeline-phases/di.d.ts +8 -33
  427. package/dist/core/ingestion/pipeline-phases/di.js +275 -157
  428. package/dist/core/ingestion/pipeline-phases/index.d.ts +3 -0
  429. package/dist/core/ingestion/pipeline-phases/index.js +3 -0
  430. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
  431. package/dist/core/ingestion/pipeline-phases/parse-impl.js +158 -3
  432. package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
  433. package/dist/core/ingestion/pipeline-phases/processes.d.ts +11 -2
  434. package/dist/core/ingestion/pipeline-phases/processes.js +102 -7
  435. package/dist/core/ingestion/pipeline-phases/routes.js +56 -10
  436. package/dist/core/ingestion/pipeline-phases/spring-aop.d.ts +34 -0
  437. package/dist/core/ingestion/pipeline-phases/spring-aop.js +439 -0
  438. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +34 -0
  439. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +255 -0
  440. package/dist/core/ingestion/pipeline-phases/spring-config.d.ts +37 -0
  441. package/dist/core/ingestion/pipeline-phases/spring-config.js +433 -0
  442. package/dist/core/ingestion/pipeline-phases/types.d.ts +7 -0
  443. package/dist/core/ingestion/pipeline.d.ts +27 -3
  444. package/dist/core/ingestion/pipeline.js +62 -12
  445. package/dist/core/ingestion/process-processor.d.ts +109 -2
  446. package/dist/core/ingestion/process-processor.js +464 -52
  447. package/dist/core/ingestion/resolve-references.d.ts +6 -1
  448. package/dist/core/ingestion/resolve-references.js +78 -6
  449. package/dist/core/ingestion/route-extractors/data-route-table.d.ts +25 -0
  450. package/dist/core/ingestion/route-extractors/data-route-table.js +864 -0
  451. package/dist/core/ingestion/route-extractors/dispatch-guard.d.ts +96 -0
  452. package/dist/core/ingestion/route-extractors/dispatch-guard.js +1184 -0
  453. package/dist/core/ingestion/route-extractors/spring-shared.d.ts +11 -0
  454. package/dist/core/ingestion/route-extractors/spring-shared.js +89 -0
  455. package/dist/core/ingestion/route-extractors/spring.js +109 -24
  456. package/dist/core/ingestion/scope-extractor-bridge.js +9 -1
  457. package/dist/core/ingestion/scope-extractor.d.ts +22 -7
  458. package/dist/core/ingestion/scope-extractor.js +617 -59
  459. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +381 -22
  460. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
  461. package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +7 -7
  462. package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +8 -7
  463. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +15 -1
  464. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +53 -0
  465. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
  466. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +275 -41
  467. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +123 -0
  468. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +171 -17
  469. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +56 -1
  470. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +130 -32
  471. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +30 -1
  472. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +46 -3
  473. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +64 -0
  474. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +1233 -0
  475. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +107 -5
  476. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +590 -33
  477. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +19 -4
  478. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +160 -4
  479. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.d.ts +34 -0
  480. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.js +62 -0
  481. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +64 -0
  482. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +118 -0
  483. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +109 -8
  484. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +931 -92
  485. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.d.ts +58 -0
  486. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.js +458 -0
  487. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.d.ts +180 -0
  488. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.js +418 -0
  489. package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +34 -0
  490. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +82 -38
  491. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +61 -1
  492. package/dist/core/ingestion/scope-resolution/pipeline/run.js +384 -48
  493. package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +112 -2
  494. package/dist/core/ingestion/scope-resolution/resolution-outcome.js +38 -1
  495. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +25 -3
  496. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +36 -16
  497. package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +210 -9
  498. package/dist/core/ingestion/scope-resolution/scope/walkers.js +968 -56
  499. package/dist/core/ingestion/scope-resolution/summary-maps.d.ts +28 -0
  500. package/dist/core/ingestion/scope-resolution/summary-maps.js +50 -0
  501. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.d.ts +55 -0
  502. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.js +37 -0
  503. package/dist/core/ingestion/scope-resolution/unresolved-receivers.d.ts +109 -0
  504. package/dist/core/ingestion/scope-resolution/unresolved-receivers.js +204 -0
  505. package/dist/core/ingestion/scope-resolution/utils/definition-id.d.ts +13 -0
  506. package/dist/core/ingestion/scope-resolution/utils/definition-id.js +19 -0
  507. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.d.ts +171 -0
  508. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.js +218 -0
  509. package/dist/core/ingestion/scope-resolution/workspace-index-types.d.ts +34 -0
  510. package/dist/core/ingestion/scope-resolution/workspace-index-types.js +15 -0
  511. package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +7 -20
  512. package/dist/core/ingestion/taint/typescript-model.js +34 -2
  513. package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
  514. package/dist/core/ingestion/tree-sitter-queries.js +688 -5
  515. package/dist/core/ingestion/type-env.js +11 -7
  516. package/dist/core/ingestion/type-extractors/jvm.js +17 -2
  517. package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
  518. package/dist/core/ingestion/type-extractors/shared.js +16 -0
  519. package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
  520. package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
  521. package/dist/core/ingestion/type-extractors/typescript.js +26 -0
  522. package/dist/core/ingestion/utils/ast-helpers.d.ts +311 -14
  523. package/dist/core/ingestion/utils/ast-helpers.js +745 -48
  524. package/dist/core/ingestion/utils/call-analysis.d.ts +27 -22
  525. package/dist/core/ingestion/utils/call-analysis.js +202 -7
  526. package/dist/core/ingestion/utils/callable-flow-captures.d.ts +153 -0
  527. package/dist/core/ingestion/utils/callable-flow-captures.js +928 -0
  528. package/dist/core/ingestion/utils/callable-labels.d.ts +25 -0
  529. package/dist/core/ingestion/utils/callable-labels.js +31 -0
  530. package/dist/core/ingestion/utils/effective-ram.d.ts +40 -0
  531. package/dist/core/ingestion/utils/effective-ram.js +58 -0
  532. package/dist/core/ingestion/utils/line-base.d.ts +14 -0
  533. package/dist/core/ingestion/utils/line-base.js +14 -0
  534. package/dist/core/ingestion/utils/method-props.d.ts +27 -4
  535. package/dist/core/ingestion/utils/method-props.js +29 -4
  536. package/dist/core/ingestion/utils/receiver-chain-captures.d.ts +31 -0
  537. package/dist/core/ingestion/utils/receiver-chain-captures.js +57 -0
  538. package/dist/core/ingestion/utils/receiver-chain-codec.d.ts +89 -0
  539. package/dist/core/ingestion/utils/receiver-chain-codec.js +182 -0
  540. package/dist/core/ingestion/utils/scope-tree-walk.d.ts +22 -0
  541. package/dist/core/ingestion/utils/scope-tree-walk.js +33 -0
  542. package/dist/core/ingestion/utils/template-arguments.d.ts +96 -0
  543. package/dist/core/ingestion/utils/template-arguments.js +196 -0
  544. package/dist/core/ingestion/utils/type-parameters.d.ts +49 -0
  545. package/dist/core/ingestion/utils/type-parameters.js +206 -0
  546. package/dist/core/ingestion/workers/callable-id.d.ts +72 -0
  547. package/dist/core/ingestion/workers/callable-id.js +116 -0
  548. package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
  549. package/dist/core/ingestion/workers/parse-worker.js +409 -39
  550. package/dist/core/ingestion/workers/worker-pool.d.ts +34 -27
  551. package/dist/core/ingestion/workers/worker-pool.js +133 -25
  552. package/dist/core/lbug/csv-generator.d.ts +27 -0
  553. package/dist/core/lbug/csv-generator.js +80 -17
  554. package/dist/core/lbug/extension-load-error.d.ts +2 -2
  555. package/dist/core/lbug/extension-load-error.js +44 -27
  556. package/dist/core/lbug/extension-loader.d.ts +29 -0
  557. package/dist/core/lbug/extension-loader.js +32 -7
  558. package/dist/core/lbug/graph-emit-sink.d.ts +264 -0
  559. package/dist/core/lbug/graph-emit-sink.js +581 -0
  560. package/dist/core/lbug/lbug-adapter.d.ts +337 -3
  561. package/dist/core/lbug/lbug-adapter.js +772 -67
  562. package/dist/core/lbug/lbug-config.d.ts +93 -6
  563. package/dist/core/lbug/lbug-config.js +269 -9
  564. package/dist/core/lbug/native-check.d.ts +39 -0
  565. package/dist/core/lbug/native-check.js +323 -46
  566. package/dist/core/lbug/pdg-emit-sink.d.ts +13 -4
  567. package/dist/core/lbug/pdg-emit-sink.js +21 -111
  568. package/dist/core/lbug/pool-adapter.d.ts +23 -1
  569. package/dist/core/lbug/pool-adapter.js +115 -7
  570. package/dist/core/lbug/query-batch.d.ts +75 -0
  571. package/dist/core/lbug/query-batch.js +102 -0
  572. package/dist/core/lbug/rel-pair-routing.d.ts +160 -2
  573. package/dist/core/lbug/rel-pair-routing.js +228 -10
  574. package/dist/core/lbug/schema.d.ts +162 -3
  575. package/dist/core/lbug/schema.js +392 -157
  576. package/dist/core/lbug/sidecar-recovery.d.ts +1 -0
  577. package/dist/core/lbug/sidecar-recovery.js +1 -1
  578. package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
  579. package/dist/core/lbug/sync-csv-writer.js +108 -0
  580. package/dist/core/lbug/wal-checkpoint-driver.js +3 -0
  581. package/dist/core/platform/capabilities.d.ts +0 -1
  582. package/dist/core/platform/capabilities.js +12 -7
  583. package/dist/core/run-analyze.d.ts +150 -3
  584. package/dist/core/run-analyze.js +1562 -151
  585. package/dist/core/search/bm25-index.d.ts +11 -0
  586. package/dist/core/search/bm25-index.js +60 -26
  587. package/dist/core/search/fts-indexes.d.ts +167 -2
  588. package/dist/core/search/fts-indexes.js +264 -10
  589. package/dist/core/wiki/graph-queries.js +145 -112
  590. package/dist/core/wiki/llm-client.d.ts +37 -5
  591. package/dist/core/wiki/llm-client.js +88 -17
  592. package/dist/core/wiki/prompts.d.ts +19 -0
  593. package/dist/core/wiki/prompts.js +20 -1
  594. package/dist/lib/utils.d.ts +113 -0
  595. package/dist/lib/utils.js +185 -0
  596. package/dist/mcp/http-transport.d.ts +5 -0
  597. package/dist/mcp/http-transport.js +19 -5
  598. package/dist/mcp/local/aop-metadata.d.ts +77 -0
  599. package/dist/mcp/local/aop-metadata.js +227 -0
  600. package/dist/mcp/local/bean-metadata.d.ts +3 -0
  601. package/dist/mcp/local/bean-metadata.js +46 -0
  602. package/dist/mcp/local/local-backend.d.ts +167 -6
  603. package/dist/mcp/local/local-backend.js +1756 -405
  604. package/dist/mcp/local/path-predicate.d.ts +19 -0
  605. package/dist/mcp/local/path-predicate.js +21 -0
  606. package/dist/mcp/local/pdg-impact.d.ts +132 -10
  607. package/dist/mcp/local/pdg-impact.js +391 -98
  608. package/dist/mcp/output-budget.d.ts +5 -0
  609. package/dist/mcp/output-budget.js +52 -0
  610. package/dist/mcp/read-only-policy.d.ts +12 -0
  611. package/dist/mcp/read-only-policy.js +102 -0
  612. package/dist/mcp/repository-policy.d.ts +35 -0
  613. package/dist/mcp/repository-policy.js +333 -0
  614. package/dist/mcp/resources.js +34 -7
  615. package/dist/mcp/server.d.ts +5 -2
  616. package/dist/mcp/server.js +48 -18
  617. package/dist/mcp/tools.d.ts +8 -8
  618. package/dist/mcp/tools.js +91 -20
  619. package/dist/server/analyze-job.d.ts +40 -2
  620. package/dist/server/analyze-job.js +30 -2
  621. package/dist/server/analyze-launch.d.ts +1 -1
  622. package/dist/server/analyze-launch.js +79 -10
  623. package/dist/server/analyze-worker-core.d.ts +3 -2
  624. package/dist/server/analyze-worker-core.js +15 -3
  625. package/dist/server/analyze-worker-ipc.d.ts +1 -1
  626. package/dist/server/analyze-worker-ipc.js +4 -0
  627. package/dist/server/analyze-worker-protocol.d.ts +59 -0
  628. package/dist/server/analyze-worker-protocol.js +1 -0
  629. package/dist/server/analyze-worker.d.ts +1 -17
  630. package/dist/server/analyze-worker.js +29 -6
  631. package/dist/server/api.d.ts +2 -11
  632. package/dist/server/api.js +200 -155
  633. package/dist/server/embed-run-outcome.d.ts +89 -0
  634. package/dist/server/embed-run-outcome.js +88 -0
  635. package/dist/server/git-clone.js +6 -2
  636. package/dist/server/mcp-http.d.ts +1 -1
  637. package/dist/server/mcp-http.js +4 -2
  638. package/dist/server/middleware.d.ts +116 -9
  639. package/dist/server/middleware.js +291 -22
  640. package/dist/server/sse-progress.d.ts +41 -0
  641. package/dist/server/sse-progress.js +125 -0
  642. package/dist/server/upload-ingest.js +2 -1
  643. package/dist/server/validation.js +2 -1
  644. package/dist/storage/branch-index.d.ts +11 -6
  645. package/dist/storage/branch-index.js +15 -7
  646. package/dist/storage/file-hash.js +2 -2
  647. package/dist/storage/fs-atomic.d.ts +25 -0
  648. package/dist/storage/fs-atomic.js +42 -0
  649. package/dist/storage/git.d.ts +165 -0
  650. package/dist/storage/git.js +352 -3
  651. package/dist/storage/index-lock.d.ts +83 -0
  652. package/dist/storage/index-lock.js +654 -0
  653. package/dist/storage/parse-cache.js +482 -1
  654. package/dist/storage/parsedfile-store.d.ts +8 -0
  655. package/dist/storage/parsedfile-store.js +235 -1
  656. package/dist/storage/repo-manager.d.ts +29 -309
  657. package/dist/storage/repo-manager.js +187 -165
  658. package/dist/storage/repo-meta.d.ts +530 -0
  659. package/dist/storage/repo-meta.js +100 -0
  660. package/dist/types/pipeline.d.ts +37 -0
  661. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +1 -1
  662. package/hooks/claude/gitnexus-hook.cjs +1 -1
  663. package/hooks/claude/resolve-analyze-cmd.cjs +80 -13
  664. package/package.json +20 -12
  665. package/scripts/cross-platform-shard.ts +143 -0
  666. package/scripts/cross-platform-tests.ts +94 -0
  667. package/scripts/ensure-fts.ts +14 -3
  668. package/scripts/run-cross-platform.ts +36 -10
  669. package/scripts/sync-plugin-manifests.mjs +192 -0
  670. package/skills/gitnexus-cli.md +3 -3
  671. package/skills/gitnexus-debugging.md +37 -7
  672. package/skills/gitnexus-exploring.md +26 -4
  673. package/skills/gitnexus-impact-analysis.md +71 -10
  674. package/skills/gitnexus-lfg/README.md +55 -0
  675. package/skills/gitnexus-lfg/SKILL.md +86 -0
  676. package/skills/gitnexus-plan/README.md +147 -0
  677. package/skills/gitnexus-plan/SKILL.md +348 -0
  678. package/skills/gitnexus-plan/references/context-ledger.md +137 -0
  679. package/skills/gitnexus-plan/references/context-pack.md +126 -0
  680. package/skills/gitnexus-plan/references/evidence-provenance.md +309 -0
  681. package/skills/gitnexus-plan/references/pdg-slice.md +109 -0
  682. package/skills/gitnexus-plan/references/plan-template.md +201 -0
  683. package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +2366 -0
  684. package/skills/gitnexus-refactoring.md +48 -5
  685. package/skills/gitnexus-review/SKILL.md +279 -0
  686. package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +42 -0
  687. package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +39 -0
  688. package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +37 -0
  689. package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +40 -0
  690. package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +42 -0
  691. package/skills/gitnexus-review/ci-personas/ci-security-lens.md +39 -0
  692. package/skills/gitnexus-taint-analysis.md +13 -7
  693. package/skills/gitnexus-work/README.md +71 -0
  694. package/skills/gitnexus-work/SKILL.md +272 -0
  695. package/skills/gitnexus-work/references/evidence-provenance.md +309 -0
  696. package/skills/gitnexus-work/scripts/evidence-provenance.mjs +2366 -0
  697. package/vendor/leiden/utils.cjs +28 -1
  698. package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
  699. package/web/assets/__vite-browser-external-bMKyYQkO.js +1 -0
  700. package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
  701. package/web/assets/agent-DIzEQ1JJ.js +626 -0
  702. package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
  703. package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
  704. package/web/assets/blockDiagram-54WLDVWM-Dg_hrRWE.js +132 -0
  705. package/web/assets/{c4Diagram-Y2BXMSZH-DOXVs7-C.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +6 -6
  706. package/web/assets/chunk-224SPVON-B8gxtXpy.js +1 -0
  707. package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +127 -0
  708. package/web/assets/chunk-2SREHG4O-Dip42xOq.js +1 -0
  709. package/web/assets/chunk-4RFN2BYJ-DHHWuC-n.js +1 -0
  710. package/web/assets/chunk-66DQ2XMT-CM0xjFAN.js +1 -0
  711. package/web/assets/chunk-6BELYETK-ChsYtfHW.js +1 -0
  712. package/web/assets/chunk-6L755F7B-CMhLBxi2.js +1 -0
  713. package/web/assets/chunk-7CWYLC5S-DRgGkkpF.js +2 -0
  714. package/web/assets/chunk-A7VWPJGB-B4O3oQdQ.js +1 -0
  715. package/web/assets/chunk-BI6VK774-D0oaWk8V.js +1 -0
  716. package/web/assets/chunk-D6VWDJW2-BxcBdZ9c.js +2 -0
  717. package/web/assets/chunk-DMV4VAQV-Bn6WXDSX.js +4 -0
  718. package/web/assets/chunk-E5QJAATJ-dh-5CtIV.js +2 -0
  719. package/web/assets/chunk-EQFTRU2I-1ix7TzW9.js +2 -0
  720. package/web/assets/chunk-FWYVLQTC-BgDItRzJ.js +1 -0
  721. package/web/assets/chunk-HNC4WDU7-DoU3KnA7.js +1 -0
  722. package/web/assets/chunk-L5GCOVLC-CE2w8Nm_.js +161 -0
  723. package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +321 -0
  724. package/web/assets/chunk-LORZLZWG-B57uGw2N.js +88 -0
  725. package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +62 -0
  726. package/web/assets/chunk-NV3KIAZN-5yvcpMiu.js +1 -0
  727. package/web/assets/chunk-OIYT25JQ-CQ6KOZGX.js +1 -0
  728. package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +10 -0
  729. package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +156 -0
  730. package/web/assets/chunk-RRFMTAIC-CMN0wcYA.js +1 -0
  731. package/web/assets/{chunk-RLI5ZMPA-CkXZ0y0U.js → chunk-SATU7PGQ-B1zhgOvc.js} +1 -1
  732. package/web/assets/chunk-STOV2HOB-GnExfzIX.js +1 -0
  733. package/web/assets/chunk-SZD42YQK-ijyKKVr1.js +70 -0
  734. package/web/assets/chunk-TFPGFQPA-Dj6a-0pC.js +231 -0
  735. package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +2 -0
  736. package/web/assets/chunk-TZUXEDM2-B7p9AcTw.js +1 -0
  737. package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +1 -0
  738. package/web/assets/{chunk-6764PJDD-C7xxk063.js → chunk-VE5CLXGZ-C1vB7wpY.js} +1 -1
  739. package/web/assets/chunk-VJFVEZTB-CX66F2ep.js +206 -0
  740. package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +1 -0
  741. package/web/assets/chunk-WJBAP47W-BckNkuEN.js +1 -0
  742. package/web/assets/chunk-XNMVGMAZ-Cg_LnPtj.js +1 -0
  743. package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +1 -0
  744. package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +1 -0
  745. package/web/assets/{cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js → cose-bilkent-RZA4XIPR-BHpK4Crp.js} +1 -1
  746. package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +1 -0
  747. package/web/assets/cynefinDiagram-TR7LZUCG-C3Iar9lZ.js +62 -0
  748. package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +4 -0
  749. package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +30 -0
  750. package/web/assets/diagram-JCD7PQ7C-DC5-9FRr.js +24 -0
  751. package/web/assets/diagram-KFBZAVDW-Dfmf_4ti.js +3 -0
  752. package/web/assets/diagram-L7DVE3PN-GIRyVUtt.js +41 -0
  753. package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +24 -0
  754. package/web/assets/ebnfDiagram-DRHRQJWO-D8_CI4ZF.js +1 -0
  755. package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +85 -0
  756. package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +1 -0
  757. package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +1 -0
  758. package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +292 -0
  759. package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +1 -0
  760. package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +106 -0
  761. package/web/assets/{index-B4eB4dNZ.js → index-BBNl0qfX.js} +51 -51
  762. package/web/assets/index-CJDpyH-n.css +2 -0
  763. package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +1 -0
  764. package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +2 -0
  765. package/web/assets/{ishikawaDiagram-BNXS4ZKH-BLjivjXL.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +6 -6
  766. package/web/assets/{journeyDiagram-M6C3CM3L-Cetgs3NH.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +6 -6
  767. package/web/assets/{kanban-definition-75IXJCU3-DMlCaIpf.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +27 -27
  768. package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
  769. package/web/assets/{mindmap-definition-2TDM6QVE-B4GbXQBc.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +29 -29
  770. package/web/assets/node-Ct_zna8U.js +8 -0
  771. package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +1 -0
  772. package/web/assets/pegDiagram-YKIO5C6U-QGeQLEq2.js +1 -0
  773. package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +1 -0
  774. package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +39 -0
  775. package/web/assets/preload-helper-Czpn1I53.js +1 -0
  776. package/web/assets/{quadrantDiagram-VICAPDV7-B1TQnlm0.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +6 -6
  777. package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +1 -0
  778. package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +1 -0
  779. package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +1 -0
  780. package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +1 -0
  781. package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +1 -0
  782. package/web/assets/railroadDiagram-M77LTMSB-AXu4vxk_.js +1 -0
  783. package/web/assets/requirementDiagram-RASO5HTO-B-l8InpK.js +84 -0
  784. package/web/assets/sankeyDiagram-F32LOJ6L-Kd7zjJgX.js +40 -0
  785. package/web/assets/sdk-CzHHH8tD.js +37 -0
  786. package/web/assets/sequenceDiagram-URATNSBD-BlcdY9DS.js +162 -0
  787. package/web/assets/sizeCapture-5GORAGP4-BEqQzsxs.js +1 -0
  788. package/web/assets/src-C5sx_gMp.js +1 -0
  789. package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +1 -0
  790. package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +1 -0
  791. package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +2 -0
  792. package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +8 -0
  793. package/web/assets/timeline-definition-WJXWRH4I-DUfp1R3E.js +120 -0
  794. package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +1 -0
  795. package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +1 -0
  796. package/web/assets/vennDiagram-K3VCMQLI-Bj-FN-XS.js +34 -0
  797. package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +1 -0
  798. package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +78 -0
  799. package/web/assets/xychartDiagram-5VRUVLCW-CK_rbSWE.js +7 -0
  800. package/web/index.html +17 -15
  801. package/dist/core/ingestion/languages/python/index-stats.d.ts +0 -18
  802. package/dist/core/ingestion/languages/python/index-stats.js +0 -25
  803. package/skills/gitnexus-pr-review.md +0 -163
  804. package/web/assets/ProcessFlowModal-Dna7GkwO.js +0 -22
  805. package/web/assets/agent-DNYDy-KA.js +0 -660
  806. package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
  807. package/web/assets/architectureDiagram-UL44E2DR-BU5ZRITg.js +0 -36
  808. package/web/assets/blockDiagram-7IZFK4PR-Dut1BpTV.js +0 -132
  809. package/web/assets/chunk-2T2R6R2M-pkw2oXHH.js +0 -4
  810. package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +0 -1
  811. package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +0 -321
  812. package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +0 -159
  813. package/web/assets/chunk-67TQ5CYL-zxhDWgyF.js +0 -124
  814. package/web/assets/chunk-7J6CGLKN-AmkN8jJN.js +0 -10
  815. package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +0 -1
  816. package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +0 -1
  817. package/web/assets/chunk-INKRHTLW-D9BM9HWZ.js +0 -70
  818. package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
  819. package/web/assets/chunk-KGFNY3KK-tD2F6wxK.js +0 -62
  820. package/web/assets/chunk-KGYTTC2M-zm6n242I.js +0 -1
  821. package/web/assets/chunk-KNLZD3CH-BGlP6X9R.js +0 -1
  822. package/web/assets/chunk-LCXTWHL2-Ba9JK-6F.js +0 -231
  823. package/web/assets/chunk-LII3EMHJ-EGx-eBIu.js +0 -1
  824. package/web/assets/chunk-LRIF4GLE-C3_PqUBq.js +0 -1
  825. package/web/assets/chunk-QA3QBVWF-D4cSJBf6.js +0 -2
  826. package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
  827. package/web/assets/chunk-RG4AUYOV-OqBBMwuQ.js +0 -206
  828. package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
  829. package/web/assets/chunk-T2UQINTJ-BJusEiGe.js +0 -1
  830. package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +0 -1
  831. package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +0 -1
  832. package/web/assets/chunk-UY5QBCOK-BCpUlARQ.js +0 -1
  833. package/web/assets/chunk-VU6ZFW4Y-BeXVk45_.js +0 -2
  834. package/web/assets/chunk-ZXARS5L4-BI_qR2Nm.js +0 -1
  835. package/web/assets/classDiagram-KGZ6W3CR-D9zSIg0x.js +0 -1
  836. package/web/assets/classDiagram-v2-72OJOZXJ-D9zSIg0x.js +0 -1
  837. package/web/assets/dagre-ND4H6XIP-CpcV5kbl.js +0 -4
  838. package/web/assets/diagram-3NCE3AQN-6SMxBRpj.js +0 -43
  839. package/web/assets/diagram-GF46GFSD-BZEdNcRZ.js +0 -24
  840. package/web/assets/diagram-HNR7UZ2L-DxKW2a2Y.js +0 -3
  841. package/web/assets/diagram-QXG6HAR7-HfTHcXX_.js +0 -24
  842. package/web/assets/diagram-WEQXMOUZ-CyijUS8r.js +0 -10
  843. package/web/assets/erDiagram-L5TCEMPS-D0fvpWEX.js +0 -85
  844. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
  845. package/web/assets/flowDiagram-H6V6AXG4-Bvr9bbhk.js +0 -162
  846. package/web/assets/ganttDiagram-JCBTUEKG-TzODrLzv.js +0 -292
  847. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
  848. package/web/assets/gitGraphDiagram-S2ZK5IYY-ONQSwJIY.js +0 -106
  849. package/web/assets/index-CX_fADmQ.css +0 -2
  850. package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +0 -1
  851. package/web/assets/infoDiagram-3YFTVSEB-DIPVUIQ6.js +0 -2
  852. package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
  853. package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +0 -1
  854. package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +0 -1
  855. package/web/assets/pieDiagram-CU6KROY3-D3YC_xyg.js +0 -30
  856. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
  857. package/web/assets/requirementDiagram-JXO7QTGE-f8wczLQf.js +0 -84
  858. package/web/assets/sankeyDiagram-URQDO5SZ-BTxzG5j0.js +0 -40
  859. package/web/assets/sequenceDiagram-VS2MUI6T-DuamM-IR.js +0 -162
  860. package/web/assets/src-BNCXICdA.js +0 -1
  861. package/web/assets/stateDiagram-7D4R322I-Ch2pEUcw.js +0 -1
  862. package/web/assets/stateDiagram-v2-36443NZ5-7ANuoZLL.js +0 -1
  863. package/web/assets/timeline-definition-O6YCAMPW-07BR8R8G.js +0 -120
  864. package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +0 -1
  865. package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +0 -1
  866. package/web/assets/vennDiagram-MWXL3ELB-BQX2ossk.js +0 -34
  867. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
  868. package/web/assets/wardleyDiagram-CUQ6CDDI-CGIJBBiK.js +0 -78
  869. package/web/assets/xychartDiagram-N2JHSOCM-B3HNMuWp.js +0 -7
  870. /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
@@ -30,25 +30,113 @@ import { computeDartArityMetadata } from './arity-metadata.js';
30
30
  import { synthesizeDartReceiverBinding } from './receiver-binding.js';
31
31
  import { synthesizeDartSignatureBindings } from './signature-bindings.js';
32
32
  import { getDartParser, getDartScopeQuery } from './query.js';
33
+ import { preprocessDartExtensionTypes } from './extension-type-preprocess.js';
33
34
  import { recordCacheHit, recordCacheMiss } from './cache-stats.js';
34
35
  import { getTreeSitterBufferSize } from '../../constants.js';
35
36
  import { parseSourceSafe } from '../../../tree-sitter/safe-parse.js';
36
37
  import { encodeMarker } from '../../utils/heritage-marker.js';
37
38
  import { DART_BUILT_INS } from './built-ins.js';
39
+ import { synthesizeCallableFlowCaptures } from '../../utils/callable-flow-captures.js';
40
+ import { synthesizeReceiverChainCapture } from '../../utils/receiver-chain-captures.js';
41
+ import { hasKeyword } from '../../field-extractors/configs/helpers.js';
42
+ /**
43
+ * `LanguageProvider.scopeOwnsReceivers` for Dart — the read side of
44
+ * `dartShadowedFieldsCapture`, which is where the full rationale lives.
45
+ *
46
+ * Reads the marker rather than re-deriving anything: the names were computed at
47
+ * capture time, where the AST is, and a `CaptureMatch` carries only
48
+ * name/range/text. Kept beside the emitter so the tag string has exactly one
49
+ * producer and one consumer, both in this file's line of sight.
50
+ */
51
+ export function dartScopeOwnsReceivers(match) {
52
+ const raw = match['@receiver-owner.shadowed-fields']?.text;
53
+ if (raw === undefined)
54
+ return undefined;
55
+ let parsed;
56
+ try {
57
+ parsed = JSON.parse(raw);
58
+ }
59
+ catch {
60
+ return undefined;
61
+ }
62
+ if (!Array.isArray(parsed))
63
+ return undefined;
64
+ const names = parsed.filter((name) => typeof name === 'string' && name.length > 0);
65
+ return names.length > 0 ? new Set(names) : undefined;
66
+ }
38
67
  const FUNCTION_DECL_TAGS = [
39
68
  '@declaration.function',
40
69
  '@declaration.method',
41
70
  '@declaration.constructor',
42
71
  ];
72
+ const DART_CALLABLE_CAPTURE_OPTIONS = {
73
+ functionNodeTypes: new Set(['function_signature', 'function_expression']),
74
+ callNodeTypes: new Set(['selector']),
75
+ parameterListNodeTypes: new Set(['formal_parameter_list', 'arguments']),
76
+ parameterNodeTypes: new Set(['formal_parameter']),
77
+ // `initialized_identifier` covers TOP-LEVEL `var` bindings and the second and
78
+ // later declarators of a multi-name local; `static_final_declaration` covers
79
+ // top-level `final`/`const`, which parse into a different list node entirely.
80
+ // Dart wraps only the FIRST local declarator in `initialized_variable_
81
+ // definition`, so without the other two a top-level `var f = (x) => x;`, a
82
+ // `final f = …`, and the `g` of `var f = …, g = …;` all emitted no flow
83
+ // captures at all and never resolved (#2693).
84
+ bindingNodeTypes: new Set([
85
+ 'initialized_variable_definition',
86
+ 'initialized_identifier',
87
+ 'static_final_declaration',
88
+ ]),
89
+ assignmentNodeTypes: new Set(['assignment_expression']),
90
+ identifierNodeTypes: new Set(['identifier', 'type_identifier']),
91
+ // `initialized_identifier` and `static_final_declaration` are FIELDLESS, so
92
+ // the shared field-based fallback (`left`/`name`/`value`/…) decomposes
93
+ // nothing and those bindings produced no flow facts at all — the same shape
94
+ // as Kotlin's fieldless `assignment` node. Positional: first named child is
95
+ // the bound name, last is the initializer.
96
+ // `initialized_variable_definition` carries real `name:` / `value:` fields,
97
+ // so it is left to the shared path by returning undefined.
98
+ extractAssignment: (node) => {
99
+ if (node.type !== 'initialized_identifier' && node.type !== 'static_final_declaration') {
100
+ return undefined;
101
+ }
102
+ const named = node.namedChildren.filter((child) => child !== null);
103
+ if (named.length < 2)
104
+ return undefined;
105
+ return { destination: named[0], source: named[named.length - 1] };
106
+ },
107
+ lexicalFunctionOwner: (node) => dartLexicalFunctionOwner(node),
108
+ isCallNode: (node) => node.namedChild(0)?.type === 'argument_part',
109
+ extractCallCallee: (node) => dartCallableCallee(node) ?? undefined,
110
+ callSiteNode: (node) => dartCallableCallee(node) ?? undefined,
111
+ callableProtocolMethods: new Set(['call']),
112
+ };
113
+ function dartLexicalFunctionOwner(input) {
114
+ let node = input;
115
+ while (node !== null) {
116
+ if (node.type === 'function_signature' || node.type === 'function_expression')
117
+ return node;
118
+ if (node.type === 'function_body') {
119
+ const signature = node.previousNamedSibling;
120
+ if (signature?.type === 'function_signature')
121
+ return signature;
122
+ }
123
+ node = node.parent;
124
+ }
125
+ return undefined;
126
+ }
43
127
  export function emitDartScopeCaptures(sourceText, _filePath, cachedTree) {
128
+ // Idempotent re-application: `extractParsedFile` already preprocesses, but
129
+ // direct emitter callers (benchmarks, capture goldens) must see the same
130
+ // program the pipeline does.
131
+ const parseText = preprocessDartExtensionTypes(sourceText);
44
132
  let tree;
45
133
  if (cachedTree !== undefined && cachedTree !== null) {
46
134
  tree = cachedTree;
47
135
  recordCacheHit();
48
136
  }
49
137
  else {
50
- tree = parseSourceSafe(getDartParser(), sourceText, undefined, {
51
- bufferSize: getTreeSitterBufferSize(sourceText),
138
+ tree = parseSourceSafe(getDartParser(), parseText, undefined, {
139
+ bufferSize: getTreeSitterBufferSize(parseText),
52
140
  });
53
141
  recordCacheMiss();
54
142
  }
@@ -61,6 +149,12 @@ export function emitDartScopeCaptures(sourceText, _filePath, cachedTree) {
61
149
  // `buildScopeTree` throw and the whole file get dropped. Dedup function-like
62
150
  // declarations by their statement node so each is emitted exactly once.
63
151
  const seenFnDeclNodes = new Set();
152
+ // Shared, per-file. Pass A (the receiver mask below) and Pass B
153
+ // (`emitDartFieldAssignmentBindings`) ask the SAME two questions of the same
154
+ // nodes — "what does this class declare as a field" and "what does this
155
+ // member body bind" — so the memo makes each answer cost one walk per node
156
+ // for the whole file instead of one per consumer.
157
+ const memo = { fieldsByClassBody: new Map(), shadowsByBody: new Map() };
64
158
  // ── Pass A: query-driven scopes / declarations / imports ────────────────
65
159
  for (const match of getDartScopeQuery().matches(root)) {
66
160
  const grouped = {};
@@ -81,9 +175,23 @@ export function emitDartScopeCaptures(sourceText, _filePath, cachedTree) {
81
175
  seenFnDeclNodes.add(declKey);
82
176
  const bodyNode = findFunctionBody(declNode);
83
177
  attachArityMetadata(grouped, declNode);
178
+ // Structural receiver chain for a call whose receiver is itself an
179
+ // expression, so resolution can type it by folding over structure
180
+ // instead of re-parsing the receiver's source text. Self-gating: a
181
+ // non-call match, an absent receiver, or a chain with no nameable base
182
+ // all leave `grouped` untouched.
183
+ synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
84
184
  out.push(grouped);
85
185
  if (bodyNode !== null) {
86
- out.push({ '@scope.function': spanCapture('@scope.function', declNode, bodyNode) });
186
+ // The READ-side half of the bare-name field discipline (#2807 review).
187
+ // Rides the SAME synthesized match as `@scope.function` so the mask
188
+ // lands on this member's Function scope; outside the `@scope.`
189
+ // namespace so `anchorCaptureFor` cannot mistake it for the anchor.
190
+ const mask = dartShadowedFieldsCapture(bodyNode, memo);
191
+ out.push({
192
+ '@scope.function': spanCapture('@scope.function', declNode, bodyNode),
193
+ ...(mask === undefined ? {} : { '@receiver-owner.shadowed-fields': mask }),
194
+ });
87
195
  for (const cm of synthesizeDartReceiverBinding(declNode, bodyNode))
88
196
  out.push(cm);
89
197
  }
@@ -101,6 +209,12 @@ export function emitDartScopeCaptures(sourceText, _filePath, cachedTree) {
101
209
  if (fieldType !== null) {
102
210
  grouped['@declaration.field-type'] = syntheticCapture('@declaration.field-type', propNode, fieldType);
103
211
  }
212
+ // Structural receiver chain for a call whose receiver is itself an
213
+ // expression, so resolution can type it by folding over structure
214
+ // instead of re-parsing the receiver's source text. Self-gating: a
215
+ // non-call match, an absent receiver, or a chain with no nameable base
216
+ // all leave `grouped` untouched.
217
+ synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
104
218
  out.push(grouped);
105
219
  if (fieldType !== null) {
106
220
  out.push({
@@ -109,8 +223,28 @@ export function emitDartScopeCaptures(sourceText, _filePath, cachedTree) {
109
223
  '@type-binding.type': syntheticCapture('@type-binding.type', propNode, fieldType),
110
224
  });
111
225
  }
226
+ else {
227
+ // No written type, so the field's type comes from the constructor its
228
+ // initializer calls (#2807). `constructor-inferred` is the weakest
229
+ // source, and the annotated branch above already returned, so an
230
+ // annotated field is untouched either way.
231
+ const callee = dartFieldConstructorCallee(nodeMap['@declaration.name']);
232
+ if (callee !== null) {
233
+ out.push({
234
+ '@type-binding.constructor': nodeToCapture('@type-binding.constructor', propNode),
235
+ '@type-binding.name': syntheticCapture('@type-binding.name', propNode, fieldName),
236
+ '@type-binding.type': syntheticCapture('@type-binding.type', propNode, callee.text),
237
+ });
238
+ }
239
+ }
112
240
  continue;
113
241
  }
242
+ // Structural receiver chain for a call whose receiver is itself an
243
+ // expression, so resolution can type it by folding over structure
244
+ // instead of re-parsing the receiver's source text. Self-gating: a
245
+ // non-call match, an absent receiver, or a chain with no nameable base
246
+ // all leave `grouped` untouched.
247
+ synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
114
248
  out.push(grouped);
115
249
  }
116
250
  // ── Pass B: tree-walked references, type inference, heritage ────────────
@@ -130,11 +264,28 @@ export function emitDartScopeCaptures(sourceText, _filePath, cachedTree) {
130
264
  }
131
265
  if (node.type === 'class_definition') {
132
266
  emitHeritage(node, out);
267
+ emitDartFieldAssignmentBindings(node, out, memo);
268
+ return;
269
+ }
270
+ if (node.type === 'extension_declaration') {
271
+ emitExtensionImplementsHeritage(node, out);
133
272
  return;
134
273
  }
135
274
  });
275
+ out.push(...synthesizeCallableFlowCaptures(root, DART_CALLABLE_CAPTURE_OPTIONS));
136
276
  return out;
137
277
  }
278
+ function dartCallableCallee(selector) {
279
+ if (selector.namedChild(0)?.type !== 'argument_part')
280
+ return null;
281
+ const previous = selector.previousNamedSibling;
282
+ if (previous?.type === 'identifier')
283
+ return previous;
284
+ if (previous?.type !== 'selector')
285
+ return null;
286
+ const inner = previous.namedChild(0);
287
+ return inner !== null && ASSIGNABLE_SELECTORS.has(inner.type) ? selectorName(inner) : null;
288
+ }
138
289
  // ─── Function scope synthesis ───────────────────────────────────────────────
139
290
  /**
140
291
  * The sibling `function_body` of a declaration, or null (abstract/bodyless).
@@ -149,6 +300,15 @@ export function emitDartScopeCaptures(sourceText, _filePath, cachedTree) {
149
300
  * nodes are unaffected.
150
301
  */
151
302
  function findFunctionBody(declNode) {
303
+ // A closure literal carries its body as a CHILD (function_expression_body),
304
+ // unlike a Dart declaration whose body is the next named SIBLING. Without
305
+ // this branch the caller synthesizes no @scope.function for a closure at all,
306
+ // so a closure binding has no scope to own its callable def and can never be
307
+ // a call SOURCE (#2699 S4 — this is why Dart alone showed zero child scopes).
308
+ if (declNode.type === 'function_expression') {
309
+ const body = declNode.namedChildren.find((c) => c.type === 'function_expression_body');
310
+ return body ?? null;
311
+ }
152
312
  const node = declNode.parent !== null && declNode.parent.type === 'method_signature'
153
313
  ? declNode.parent
154
314
  : declNode;
@@ -351,6 +511,22 @@ function emitCascadeReference(cascade, out) {
351
511
  });
352
512
  }
353
513
  // ─── Local-variable constructor / call-result type inference ────────────────
514
+ /**
515
+ * Is `node` the callee of a construction / free call written directly at this
516
+ * position — a bare identifier whose next named sibling is a `selector`
517
+ * carrying an `argument_part` (`Outer()`)?
518
+ *
519
+ * Dart has no `new` keyword, so a constructor call and a free call are the same
520
+ * shape; the resolver decides which by looking the name up. Anything else — a
521
+ * literal, a member call, an index — is NOT this shape and is left alone rather
522
+ * than guessed at.
523
+ */
524
+ function isDirectConstruction(node) {
525
+ if (node === null || node.type !== 'identifier')
526
+ return false;
527
+ const next = node.nextNamedSibling;
528
+ return next !== null && next.type === 'selector' && next.namedChild(0)?.type === 'argument_part';
529
+ }
354
530
  /** Find the callee identifier of a `var x = Callee(…)` / `await Callee(…)`
355
531
  * initializer (a direct free-call / constructor); returns null for member
356
532
  * calls or non-call values. */
@@ -359,11 +535,7 @@ function findDirectCallValue(initVarDef) {
359
535
  if (firstValue === null)
360
536
  return null;
361
537
  if (firstValue.type === 'identifier') {
362
- const next = firstValue.nextNamedSibling;
363
- if (next !== null && next.type === 'selector' && next.namedChild(0)?.type === 'argument_part') {
364
- return firstValue;
365
- }
366
- return null;
538
+ return isDirectConstruction(firstValue) ? firstValue : null;
367
539
  }
368
540
  if (firstValue.type === 'unary_expression' || firstValue.type === 'await_expression') {
369
541
  let aw = firstValue;
@@ -374,19 +546,37 @@ function findDirectCallValue(initVarDef) {
374
546
  aw = inner;
375
547
  }
376
548
  if (aw.type === 'await_expression') {
549
+ // `namedChild(0)` is the awaited callee; its next named sibling is
550
+ // `namedChild(1)`, so `isDirectConstruction` asks exactly the same
551
+ // question this branch used to spell out.
377
552
  const id = aw.namedChild(0);
378
- const sel = aw.namedChild(1);
379
- if (id !== null &&
380
- id.type === 'identifier' &&
381
- sel !== null &&
382
- sel.type === 'selector' &&
383
- sel.namedChild(0)?.type === 'argument_part') {
553
+ if (isDirectConstruction(id))
384
554
  return id;
385
- }
386
555
  }
387
556
  }
388
557
  return null;
389
558
  }
559
+ /**
560
+ * Callee identifier of a class field initialized by a direct constructor call —
561
+ * `var b = Outer();` / `final b = Outer();` — or `null` for anything else.
562
+ *
563
+ * Dart spells a class field as `declaration(<keyword>, initialized_identifier_list(
564
+ * initialized_identifier))`, NOT the `initialized_variable_definition` that
565
+ * `emitVarTypeBinding` handles — that is the LOCAL form. So an unannotated field
566
+ * had no type binding and could not act as a call receiver (#2807), even though
567
+ * its annotated twin resolved fine.
568
+ *
569
+ * Takes the field's own `@declaration.name` node, whose next named sibling IS
570
+ * the initializer — `initialized_identifier(<name> <value> …)`. Deliberately NOT
571
+ * a search down from the `@declaration.property` node: one `declaration` can
572
+ * hold SEVERAL declarators (`var a = X(), b = Y();`), which the query matches
573
+ * once each with the same property node, so a first-descendant search hands
574
+ * every declarator the FIRST one's initializer and types `b` as `X`.
575
+ */
576
+ function dartFieldConstructorCallee(nameNode) {
577
+ const value = nameNode.nextNamedSibling;
578
+ return isDirectConstruction(value) ? value : null;
579
+ }
390
580
  function emitVarTypeBinding(initVarDef, out) {
391
581
  const nameNode = initVarDef.childForFieldName('name');
392
582
  if (nameNode === null)
@@ -401,6 +591,422 @@ function emitVarTypeBinding(initVarDef, out) {
401
591
  });
402
592
  }
403
593
  // ─── Heritage ───────────────────────────────────────────────────────────────
594
+ /**
595
+ * Type an inference-typed field from a constructor call ASSIGNED to it —
596
+ * `var r; C() { r = Outer(); }` and `this.r = Outer();` (#2807).
597
+ *
598
+ * Dart is the one language here that writes a field with NO receiver prefix, so
599
+ * `r = Outer()` is syntactically identical to assigning a constructor-local. The
600
+ * discriminator is the class's own declared field set: a bare name binds only
601
+ * when the enclosing class declares it AND the enclosing member binds no name of
602
+ * its own that would shadow it (`collectDartBodyShadows` — parameters, locals,
603
+ * closure parameters, catch bindings, loop variables), which is exactly when
604
+ * Dart itself resolves `r` to the field. A `this.`-prefixed write is unambiguous
605
+ * and needs neither test.
606
+ *
607
+ * Emitted as `constructor-inferred`, the weakest source, so a field that also
608
+ * carries an annotation keeps it. The narrow `@type-binding.dart-field` marker
609
+ * rides the name node for `dartBindingScopeFor` to hoist on — the binding has to
610
+ * land on the Class scope, since the assignment sits inside a constructor's own
611
+ * Function scope where `typeOfMemberOnClass` never looks.
612
+ */
613
+ function emitDartFieldAssignmentBindings(classNode, out, memo) {
614
+ const body = findChild(classNode, 'class_body');
615
+ if (body === null)
616
+ return;
617
+ // `namedChildren` allocates a fresh wrapper array on every access
618
+ // (node-tree-sitter), and the loop below walks the same list — read it once.
619
+ const members = body.namedChildren;
620
+ const fields = dartClassFieldNames(body, memo);
621
+ if (fields.size === 0)
622
+ return;
623
+ for (const member of members) {
624
+ if (member === null || member.type !== 'function_body')
625
+ continue;
626
+ // A STATIC member's body can never write this class's INSTANCE fields.
627
+ // Dart's static scope holds only the class's static members, so a bare
628
+ // `z = Outer()` inside `static void make()` binds a LIBRARY-level `z` (or is
629
+ // a compile error) — never the same-named instance field. Binding it anyway
630
+ // did not merely add an edge: the write landed on the Class scope at the
631
+ // same `constructor-inferred` strength as the constructor's own, and the
632
+ // `>=` tie-break in `scope-extractor` let it DISPLACE the correct type, so
633
+ // `z.inner()` resolved to the wrong class (#2807 review). The instance
634
+ // static-vs-instance collision TypeScript and JavaScript allow cannot arise
635
+ // in Dart — one class may not declare a static and an instance member of the
636
+ // same name — so this is the only shape the defect takes here.
637
+ //
638
+ // Grammar: every class-member body is a `function_body` whose PREVIOUS named
639
+ // sibling is a `method_signature` (method, constructor, factory, getter,
640
+ // setter, operator, `async`), and `static` is an anonymous direct child of
641
+ // that signature, ahead of the inner `*_signature` node. Detection is the
642
+ // shared `hasKeyword` on child TEXT, never `child.type === 'static'`, which
643
+ // a grammar bump silently breaks — the same rule TypeScript's
644
+ // `isStaticMethodThis` follows.
645
+ //
646
+ // A body whose signature cannot be read at all (a null or unexpected
647
+ // previous sibling — parse recovery) DECLINES to bind: staticness is
648
+ // undecidable there, and a missed field type costs an edge while a wrong one
649
+ // destroys a correct binding.
650
+ const signature = member.previousNamedSibling;
651
+ if (signature === null || signature.type !== 'method_signature')
652
+ continue;
653
+ if (hasKeyword(signature, 'static'))
654
+ continue;
655
+ // Still lazy per assignment, but the memo is now FILE-wide and shared with
656
+ // Pass A's read-side mask, which asks the same question of the same body.
657
+ // The laziness that used to matter here (87-100% of eagerly built sets were
658
+ // discarded, ~15% of total Dart emission) no longer buys much for a class
659
+ // that declares fields — Pass A has already forced those bodies — so this
660
+ // reads the memo rather than paying a second walk. It still short-circuits
661
+ // for a body whose class declares no fields, since `fields.size === 0`
662
+ // returned above before either pass touched it.
663
+ //
664
+ // Not visible to `bench/scope-capture`, which is a RATIO gate — this work is
665
+ // linear, so a constant factor leaves the ratio at 1.0.
666
+ const shadowsOf = () => dartBodyShadows(member, memo);
667
+ walkNamedTree(member, (node) => {
668
+ if (node.type !== 'assignment_expression')
669
+ return;
670
+ const target = node.namedChild(0);
671
+ if (target === null || target.type !== 'assignable_expression')
672
+ return;
673
+ const first = target.namedChild(0);
674
+ if (first === null)
675
+ return;
676
+ let fieldNameNode = null;
677
+ if (first.type === 'identifier' && target.namedChildCount === 1) {
678
+ // Bare `r = …`: a field only when declared here and not shadowed. The
679
+ // `fields` test runs FIRST so the shadow set is only ever built for a
680
+ // name the class actually declares.
681
+ if (!fields.has(first.text) || shadowsOf().has(first.text))
682
+ return;
683
+ fieldNameNode = first;
684
+ }
685
+ else if (first.type === 'this') {
686
+ const selector = target.namedChild(1);
687
+ if (selector === null || selector.type !== 'unconditional_assignable_selector')
688
+ return;
689
+ const nameNode = selector.namedChild(0);
690
+ if (nameNode === null || nameNode.type !== 'identifier')
691
+ return;
692
+ fieldNameNode = nameNode;
693
+ }
694
+ else {
695
+ return;
696
+ }
697
+ if (fieldNameNode === null)
698
+ return;
699
+ // RHS must be a direct construction; anything else is left alone rather
700
+ // than guessed at.
701
+ const callee = node.namedChild(1);
702
+ if (!isDirectConstruction(callee))
703
+ return;
704
+ out.push({
705
+ '@type-binding.constructor': nodeToCapture('@type-binding.constructor', node),
706
+ '@type-binding.dart-field': syntheticCapture('@type-binding.dart-field', fieldNameNode, '1'),
707
+ '@type-binding.name': syntheticCapture('@type-binding.name', fieldNameNode, fieldNameNode.text),
708
+ '@type-binding.type': syntheticCapture('@type-binding.type', callee, callee.text),
709
+ });
710
+ });
711
+ }
712
+ }
713
+ const nodeSpanKey = (node) => `${node.startIndex}:${node.endIndex}`;
714
+ /**
715
+ * The names a `class_body` declares as INSTANCE-or-static fields, from
716
+ * `declaration(… initialized_identifier_list … initialized_identifier)` — the
717
+ * shape every stored Dart field takes, annotated or not.
718
+ */
719
+ function dartClassFieldNames(classBody, memo) {
720
+ const key = nodeSpanKey(classBody);
721
+ const cached = memo.fieldsByClassBody.get(key);
722
+ if (cached !== undefined)
723
+ return cached;
724
+ const fields = new Set();
725
+ for (const member of classBody.namedChildren) {
726
+ if (member === null || member.type !== 'declaration')
727
+ continue;
728
+ const list = findChild(member, 'initialized_identifier_list');
729
+ if (list === null)
730
+ continue;
731
+ for (const init of list.namedChildren) {
732
+ if (init === null || init.type !== 'initialized_identifier')
733
+ continue;
734
+ const nameNode = init.namedChild(0);
735
+ if (nameNode !== null && nameNode.type === 'identifier')
736
+ fields.add(nameNode.text);
737
+ }
738
+ }
739
+ memo.fieldsByClassBody.set(key, fields);
740
+ return fields;
741
+ }
742
+ function dartBodyShadows(bodyNode, memo) {
743
+ const key = nodeSpanKey(bodyNode);
744
+ const cached = memo.shadowsByBody.get(key);
745
+ if (cached !== undefined)
746
+ return cached;
747
+ const shadows = collectDartBodyShadows(bodyNode);
748
+ memo.shadowsByBody.set(key, shadows);
749
+ return shadows;
750
+ }
751
+ /**
752
+ * The READ half of the bare-name field discipline: the field names a member
753
+ * body REBINDS, published on that member's Function scope as
754
+ * `Scope.ownsReceivers` (#2701) so the receiver walk stops there instead of
755
+ * reaching the Class scope (#2807 review).
756
+ *
757
+ * `emitDartFieldAssignmentBindings` above declines to WRITE a binding for a name
758
+ * the body shadows, but the shadow set gated writes only. A bare-name READ of a
759
+ * shadowing binder the resolver cannot type — `for (final conn in xs) {
760
+ * conn.inner(); }`, where the element type of `xs` is not modelled — therefore
761
+ * walked straight past the local and hit the class field binding this same
762
+ * feature mints, resolving `conn.inner()` to the CONSTRUCTOR's type. That turns
763
+ * "no edge" into a WRONG edge, the one failure mode
764
+ * `scope-resolution/passes/compound-receiver.ts` says must never happen, and it
765
+ * was introduced by the write side rather than pre-existing: delete the
766
+ * constructor and the same read emits nothing.
767
+ *
768
+ * `ownsReceivers` is the right primitive because the walk consults
769
+ * `typeBindings` FIRST at every scope (`scope/walkers.ts`) and only then honours
770
+ * the mask. A shadow the resolver CAN type still wins — an annotated parameter
771
+ * `void probe(Beta conn)` keeps `Beta`, because
772
+ * `synthesizeDartSignatureBindings` anchors parameter bindings on this same
773
+ * body node, so they land on this same Function scope. The mask only fires
774
+ * where the alternative was a fabricated type.
775
+ *
776
+ * ── SCOPE OF THE MASK, AND ITS ACCEPTED COSTS ────────────────────────────────
777
+ *
778
+ * `shadows ∩ fields`, and nothing wider. Three consequences are taken knowingly
779
+ * rather than hidden:
780
+ *
781
+ * 1. NOT every locally bound name is masked — only ones the enclosing class
782
+ * also declares as a field. A library-level `var logger = Logger();`
783
+ * shadowed by a loop variable of the same name still resolves against the
784
+ * library binding and can still produce the wrong edge. That is the general
785
+ * form of the same defect and arguably the more correct fix, but it changes
786
+ * resolution for code this feature never touched; it is recorded here as a
787
+ * known limitation rather than implemented.
788
+ * 2. The mask is BODY-WIDE, exactly as `collectDartBodyShadows` is on the write
789
+ * side. A member that binds `conn` anywhere — a nested closure, one `case`
790
+ * arm — masks `conn` for the whole member, so a read of the genuine field
791
+ * elsewhere in that member loses its edge. Deliberate symmetry: the write
792
+ * side already declines body-wide, and losing an edge is the error this
793
+ * whole line of work chooses over inventing one.
794
+ * 3. `fields` is EVERY field the class declares, not only the ones the
795
+ * constructor-write feature types. An ANNOTATED field shadowed by a binder
796
+ * is masked too, so this reaches resolution that predates #2807 — and it is
797
+ * meant to: which name a body's bare read refers to is a fact about Dart, not
798
+ * about how the field acquired its type. `mixin` bodies are reached for the
799
+ * same reason (the grammar gives a mixin a `class_body` as well), even though
800
+ * `emitDartFieldAssignmentBindings` mints nothing for them. `extension`
801
+ * bodies are a different node (`extension_body`) and are left alone.
802
+ *
803
+ * Returns `undefined` — not an empty marker — when nothing is masked, so the
804
+ * emitted capture set is unchanged for every body that does not shadow a field.
805
+ * Names are sorted so the capture text (and every fingerprint over it) is
806
+ * order-stable.
807
+ */
808
+ function dartShadowedFieldsCapture(bodyNode, memo) {
809
+ // Only a CLASS-MEMBER body can shadow a field: `function_body` whose parent is
810
+ // the `class_body`. A closure's `function_expression_body` and a top-level
811
+ // function are both excluded, and neither needs the mask — a closure's binders
812
+ // are already in its enclosing member's body-wide shadow set, and the walk
813
+ // passes through the enclosing member's Function scope on its way out.
814
+ if (bodyNode.type !== 'function_body')
815
+ return undefined;
816
+ const classBody = bodyNode.parent;
817
+ if (classBody === null || classBody.type !== 'class_body')
818
+ return undefined;
819
+ const fields = dartClassFieldNames(classBody, memo);
820
+ if (fields.size === 0)
821
+ return undefined;
822
+ const shadows = dartBodyShadows(bodyNode, memo);
823
+ if (shadows.size === 0)
824
+ return undefined;
825
+ const masked = [];
826
+ for (const name of fields) {
827
+ if (shadows.has(name))
828
+ masked.push(name);
829
+ }
830
+ if (masked.length === 0)
831
+ return undefined;
832
+ masked.sort();
833
+ return syntheticCapture('@receiver-owner.shadowed-fields', bodyNode, JSON.stringify(masked));
834
+ }
835
+ /**
836
+ * Every name BOUND by one class-member body — the shadow set the bare-name
837
+ * branch of `emitDartFieldAssignmentBindings` tests against.
838
+ *
839
+ * A local `var` is only ONE of Dart's binders, and a bare `r = Outer()` writes
840
+ * whichever binder wins, so a set built from local declarations alone made a
841
+ * write to any OTHER binder look like a field write. `void reset(Alpha r) { r =
842
+ * Alpha(); }` in a class with a field `r` retyped the FIELD to `Alpha` —
843
+ * fabricating an edge and displacing the type the constructor had correctly
844
+ * given it. Formal parameters are the sharpest case because they are not even
845
+ * inside the body: `function_body` is a SIBLING of the `method_signature` that
846
+ * carries them, so no walk of the body can ever see one.
847
+ *
848
+ * Dart 3 patterns are the SAME defect a second time: `var (r, n) = …;`,
849
+ * `if (o case Beta r)`, `case Beta r:`, `for (var (r, _) in xs)`, list / map /
850
+ * object / rest / cast / null-check / null-assert patterns and pattern
851
+ * assignments all bind `r` through node types no earlier list named, so each of
852
+ * them let a write retype the field. `addDartBinderName` now enumerates the
853
+ * pattern family from the grammar rather than from reported shapes.
854
+ *
855
+ * Deliberately over-approximate in the shadow direction. The set is body-wide
856
+ * (a binder in a nested closure, a `case` arm or a collection-literal element
857
+ * shadows for the whole body), a parameter shape whose name cannot be read
858
+ * contributes nothing rather than being guessed at, and a bare name inside a
859
+ * pattern shadows whether it binds or merely references a constant. All err
860
+ * toward DECLINING to bind, which is the right error: a missed field type costs
861
+ * an edge, a wrong one produces an edge to the wrong class and destroys a
862
+ * correct binding — the failure mode this whole line of work exists to avoid
863
+ * (see `scope-resolution/passes/compound-receiver.ts`).
864
+ */
865
+ function collectDartBodyShadows(bodyNode) {
866
+ const shadows = new Set();
867
+ // The enclosing function's own formal parameters live OUTSIDE the body, on
868
+ // the `method_signature` sibling that precedes it — the shape every class
869
+ // member takes (method, constructor, factory, static, getter, setter,
870
+ // operator, `async`/`async*`).
871
+ const signature = bodyNode.previousNamedSibling;
872
+ if (signature !== null && signature.type === 'method_signature') {
873
+ walkNamedTree(signature, (n) => addDartBinderName(n, shadows));
874
+ }
875
+ walkNamedTree(bodyNode, (n) => addDartBinderName(n, shadows));
876
+ return shadows;
877
+ }
878
+ /**
879
+ * Record the name `node` binds, if it binds one.
880
+ *
881
+ * The `case` list is the whole point of this function and the reason it is
882
+ * separate: an INCOMPLETE list of binder forms is the exact defect this file has
883
+ * now shipped twice (formal parameters, then every Dart 3 pattern). It is
884
+ * enumerated against `vendor/tree-sitter-dart/grammar.js`, not against the
885
+ * shapes a bug report happened to carry.
886
+ */
887
+ function addDartBinderName(node, out) {
888
+ switch (node.type) {
889
+ // `var s;`, `final r = 1;`, and the FIRST declarator of `var a = 1, b = 2;`.
890
+ // `for_loop_parts` carries the for-IN variable on the same `name` field
891
+ // (`for (var r in xs)`); the C-style form instead nests a
892
+ // `local_variable_declaration` the walk reaches on its own.
893
+ case 'initialized_variable_definition':
894
+ case 'for_loop_parts': {
895
+ const nameNode = node.childForFieldName('name');
896
+ if (nameNode !== null)
897
+ out.add(nameNode.text);
898
+ return;
899
+ }
900
+ // Formal parameters — of the enclosing member, of a closure
901
+ // (`function_expression`), and of a nested `local_function_declaration`.
902
+ case 'formal_parameter': {
903
+ const name = dartParameterName(node);
904
+ if (name !== null)
905
+ out.add(name);
906
+ return;
907
+ }
908
+ // `on E catch (e, stack)` — every identifier in the list is a binding.
909
+ case 'catch_parameters': {
910
+ for (const child of node.namedChildren) {
911
+ if (child !== null && child.type === 'identifier')
912
+ out.add(child.text);
913
+ }
914
+ return;
915
+ }
916
+ // Second and later declarators of `var a = 1, b = 2;` — fieldless, so the
917
+ // name is the first named child. (A class field is this node type too, but
918
+ // only ever under `initialized_identifier_list`, which no body contains.)
919
+ case 'initialized_identifier': {
920
+ const first = node.namedChild(0);
921
+ if (first !== null && first.type === 'identifier')
922
+ out.add(first.text);
923
+ return;
924
+ }
925
+ // ── Dart 3 patterns ──────────────────────────────────────────────────────
926
+ //
927
+ // EVERY pattern node the grammar emits, and every one of them takes its
928
+ // DIRECT `identifier` children. The grammar rules that would carry a binder
929
+ // are `_pattern_field`, `_map_pattern_entry`, `_list_pattern_element`,
930
+ // `_parenthesized_pattern`, `_outer_pattern`, `_guarded_pattern` and the
931
+ // logical/relational tiers — ALL hidden (`_`-prefixed), so they emit no node
932
+ // of their own and inline their children onto whichever visible pattern node
933
+ // encloses them. Reading direct children is therefore what actually sees a
934
+ // binder; there is no field to ask for (`variable_pattern`,
935
+ // `pattern_variable_declaration` and `constant_pattern` declare none).
936
+ //
937
+ // The first two are where a binder truly lands, and are alone sufficient:
938
+ // `variable_pattern` — `Beta s` / `final s` / `var s`.
939
+ // `constant_pattern` — a BARE name (`(s, n)`, `[s, t]`, `{'k': s}`,
940
+ // `Point(:s)`, `...s`, `(s)`). Dart itself decides bare-name-binds-vs-
941
+ // references-a-constant from the enclosing `final`/`var`, and
942
+ // tree-sitter gives both the same node, so `case kLimit:` shadows too.
943
+ // Over-shadowing a constant reference costs an edge; the other
944
+ // direction fabricates one.
945
+ // The containers after them are DEFENCE, not routing — the walk reaches
946
+ // nested patterns on its own. They matter because the hidden `_pattern_field`
947
+ // already drops a NON-binder label identifier straight onto `record_pattern`
948
+ // / `object_pattern` (and a key onto `map_pattern`), which is proof that this
949
+ // grammar inlines identifiers onto containers. If a grammar revision ever
950
+ // inlines a real binder the same way, it is shadowed here on arrival instead
951
+ // of becoming the third instance of this bug.
952
+ //
953
+ // DELIBERATELY EXCLUDED — `pattern_variable_declaration`, `pattern_assignment`
954
+ // and `for_loop_parts` hold the pattern and the `=`/`in` RHS at the SAME
955
+ // child level (`var [s, t] = xs` → `identifier xs` is a direct child), so
956
+ // taking their direct identifiers would shadow the SOURCE expression's name,
957
+ // which binds nothing. Their pattern child is a case below. Also excluded:
958
+ // `type_identifier` (never an `identifier`, so `Beta` in `Beta s` and `Point`
959
+ // in `Point(…)` cannot be mistaken for binders), `qualified` inside a
960
+ // `constant_pattern` (`Colors.red` nests one level deeper — a qualified name
961
+ // is always a constant reference), and relational/equality operands
962
+ // (`case > kLimit`), which the hidden tier drops onto the enclosing
963
+ // STATEMENT rather than any pattern node.
964
+ case 'variable_pattern':
965
+ case 'constant_pattern':
966
+ case 'record_pattern':
967
+ case 'list_pattern':
968
+ case 'map_pattern':
969
+ case 'object_pattern':
970
+ case 'rest_pattern':
971
+ case 'cast_pattern':
972
+ case 'null_check_pattern':
973
+ case 'null_assert_pattern': {
974
+ for (const child of node.namedChildren) {
975
+ if (child !== null && child.type === 'identifier')
976
+ out.add(child.text);
977
+ }
978
+ return;
979
+ }
980
+ default:
981
+ return;
982
+ }
983
+ }
984
+ /** The name a `formal_parameter` binds, across every shape the grammar gives it. */
985
+ function dartParameterName(param) {
986
+ // `Alpha r`, `final Alpha r`, `void Function(int) r`, `{required Beta r}`,
987
+ // `[Delta r]` — all carry an explicit `name` field.
988
+ const named = param.childForFieldName('name');
989
+ if (named !== null)
990
+ return named.text;
991
+ const only = param.namedChild(0);
992
+ if (only === null)
993
+ return null;
994
+ // An untyped closure parameter (`(r) { … }`) is a bare identifier with no
995
+ // field to read it from.
996
+ if (only.type === 'identifier')
997
+ return only.text;
998
+ // `this.r` / `super.r` bind a parameter NAMED `r` that is initialized from
999
+ // the field — a later bare `r = …` writes that parameter, not the field, so
1000
+ // these shadow exactly like any other.
1001
+ if (only.type === 'constructor_param' || only.type === 'super_formal_parameter') {
1002
+ for (let i = only.namedChildCount - 1; i >= 0; i--) {
1003
+ const child = only.namedChild(i);
1004
+ if (child !== null && child.type === 'identifier')
1005
+ return child.text;
1006
+ }
1007
+ }
1008
+ return null;
1009
+ }
404
1010
  function emitHeritage(classNode, out) {
405
1011
  const nameNode = classNode.childForFieldName('name');
406
1012
  if (nameNode === null)
@@ -414,9 +1020,15 @@ function emitHeritage(classNode, out) {
414
1020
  for (let i = 0; i < superclass.namedChildCount; i++) {
415
1021
  const c = superclass.namedChild(i);
416
1022
  if (c !== null && c.type === 'type_identifier') {
1023
+ // `extends Base<User>` spells the arguments in a SIBLING node, so the
1024
+ // anchor's own text cannot carry them; the sub-tag does (#2912).
1025
+ const args = typeArgumentsAfter(superclass, i);
417
1026
  out.push({
418
1027
  '@reference.inherits': nodeToCapture('@reference.inherits', c),
419
1028
  '@reference.name': nodeToCapture('@reference.name', c),
1029
+ ...(args === null
1030
+ ? {}
1031
+ : { '@reference.type-arguments': nodeToCapture('@reference.type-arguments', args) }),
420
1032
  });
421
1033
  break;
422
1034
  }
@@ -434,12 +1046,70 @@ function emitHeritage(classNode, out) {
434
1046
  emitHeritageMarkers(interfaces, 'implements', className, out);
435
1047
  }
436
1048
  }
1049
+ function emitExtensionImplementsHeritage(extensionNode, out) {
1050
+ const nameNode = extensionNode.childForFieldName('name');
1051
+ if (nameNode === null)
1052
+ return;
1053
+ const bodyStart = extensionNode.text.indexOf('{');
1054
+ const header = bodyStart === -1 ? extensionNode.text : extensionNode.text.slice(0, bodyStart);
1055
+ const implementsIndex = header.indexOf('implements');
1056
+ if (implementsIndex === -1)
1057
+ return;
1058
+ const className = nameNode.text;
1059
+ const interfaces = header.slice(implementsIndex + 'implements'.length);
1060
+ for (const rawInterface of splitTopLevelCommaList(interfaces)) {
1061
+ const target = /^[ \t]*([A-Za-z_$][A-Za-z0-9_$]*)/.exec(rawInterface)?.[1];
1062
+ if (target === undefined)
1063
+ continue;
1064
+ const payload = encodeMarker('heritage', ['implements', target, className]);
1065
+ out.push({ '@import.heritage': syntheticCapture('@import.heritage', nameNode, payload) });
1066
+ }
1067
+ }
1068
+ function splitTopLevelCommaList(text) {
1069
+ const parts = [];
1070
+ let start = 0;
1071
+ let angleDepth = 0;
1072
+ for (let i = 0; i < text.length; i++) {
1073
+ const ch = text[i];
1074
+ if (ch === '<') {
1075
+ angleDepth++;
1076
+ continue;
1077
+ }
1078
+ if (ch === '>' && angleDepth > 0) {
1079
+ angleDepth--;
1080
+ continue;
1081
+ }
1082
+ if (ch === ',' && angleDepth === 0) {
1083
+ parts.push(text.slice(start, i));
1084
+ start = i + 1;
1085
+ }
1086
+ }
1087
+ parts.push(text.slice(start));
1088
+ return parts;
1089
+ }
437
1090
  function emitHeritageMarkers(container, kind, className, out) {
438
1091
  for (let i = 0; i < container.namedChildCount; i++) {
439
1092
  const c = container.namedChild(i);
440
1093
  if (c === null || c.type !== 'type_identifier')
441
1094
  continue;
442
- const payload = encodeMarker('heritage', [kind, c.text, className]);
1095
+ // `implements Validator<String>` / `with M<int>`: the arguments ride the
1096
+ // marker payload, because this heritage never becomes a reference SITE —
1097
+ // `emitDartHeritageEdges` reads the marker and emits the edge (#2912).
1098
+ // Dropped rather than encoded when the spelling contains the marker's own
1099
+ // ':' delimiter, which `encodeMarker` rejects outright; absence is the
1100
+ // fail-open value everywhere this is read.
1101
+ const args = typeArgumentsAfter(container, i)?.text;
1102
+ const fields = args === undefined || args.includes(':')
1103
+ ? [kind, c.text, className]
1104
+ : [kind, c.text, className, args];
1105
+ const payload = encodeMarker('heritage', fields);
443
1106
  out.push({ '@import.heritage': syntheticCapture('@import.heritage', c, payload) });
444
1107
  }
445
1108
  }
1109
+ /** The `type_arguments` node written immediately after `container`'s named
1110
+ * child at `index` — the arguments of the type that child names — or `null`
1111
+ * when that type was written without any. */
1112
+ function typeArgumentsAfter(container, index) {
1113
+ const next = container.namedChild(index + 1);
1114
+ return next !== null && next.type === 'type_arguments' ? next : null;
1115
+ }