arceus-s 1.6.4

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 (1231) hide show
  1. package/README.md +395 -0
  2. package/dist/_shared/graph/types.d.ts +81 -0
  3. package/dist/_shared/graph/types.d.ts.map +1 -0
  4. package/dist/_shared/graph/types.js +8 -0
  5. package/dist/_shared/graph/types.js.map +1 -0
  6. package/dist/_shared/index.d.ts +63 -0
  7. package/dist/_shared/index.d.ts.map +1 -0
  8. package/dist/_shared/index.js +48 -0
  9. package/dist/_shared/index.js.map +1 -0
  10. package/dist/_shared/integrations/circuit-breaker.d.ts +183 -0
  11. package/dist/_shared/integrations/circuit-breaker.d.ts.map +1 -0
  12. package/dist/_shared/integrations/circuit-breaker.js +236 -0
  13. package/dist/_shared/integrations/circuit-breaker.js.map +1 -0
  14. package/dist/_shared/integrations/resilient-fetch.d.ts +99 -0
  15. package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -0
  16. package/dist/_shared/integrations/resilient-fetch.js +204 -0
  17. package/dist/_shared/integrations/resilient-fetch.js.map +1 -0
  18. package/dist/_shared/integrations/retry.d.ts +60 -0
  19. package/dist/_shared/integrations/retry.d.ts.map +1 -0
  20. package/dist/_shared/integrations/retry.js +67 -0
  21. package/dist/_shared/integrations/retry.js.map +1 -0
  22. package/dist/_shared/integrations/understand-quickly.d.ts +77 -0
  23. package/dist/_shared/integrations/understand-quickly.d.ts.map +1 -0
  24. package/dist/_shared/integrations/understand-quickly.js +176 -0
  25. package/dist/_shared/integrations/understand-quickly.js.map +1 -0
  26. package/dist/_shared/language-detection.d.ts +23 -0
  27. package/dist/_shared/language-detection.d.ts.map +1 -0
  28. package/dist/_shared/language-detection.js +139 -0
  29. package/dist/_shared/language-detection.js.map +1 -0
  30. package/dist/_shared/languages.d.ts +26 -0
  31. package/dist/_shared/languages.d.ts.map +1 -0
  32. package/dist/_shared/languages.js +27 -0
  33. package/dist/_shared/languages.js.map +1 -0
  34. package/dist/_shared/lbug/schema-constants.d.ts +16 -0
  35. package/dist/_shared/lbug/schema-constants.d.ts.map +1 -0
  36. package/dist/_shared/lbug/schema-constants.js +67 -0
  37. package/dist/_shared/lbug/schema-constants.js.map +1 -0
  38. package/dist/_shared/mro-strategy.d.ts +41 -0
  39. package/dist/_shared/mro-strategy.d.ts.map +1 -0
  40. package/dist/_shared/mro-strategy.js +2 -0
  41. package/dist/_shared/mro-strategy.js.map +1 -0
  42. package/dist/_shared/pipeline.d.ts +16 -0
  43. package/dist/_shared/pipeline.d.ts.map +1 -0
  44. package/dist/_shared/pipeline.js +5 -0
  45. package/dist/_shared/pipeline.js.map +1 -0
  46. package/dist/_shared/scope-resolution/def-index.d.ts +36 -0
  47. package/dist/_shared/scope-resolution/def-index.d.ts.map +1 -0
  48. package/dist/_shared/scope-resolution/def-index.js +51 -0
  49. package/dist/_shared/scope-resolution/def-index.js.map +1 -0
  50. package/dist/_shared/scope-resolution/evidence-weights.d.ts +69 -0
  51. package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -0
  52. package/dist/_shared/scope-resolution/evidence-weights.js +84 -0
  53. package/dist/_shared/scope-resolution/evidence-weights.js.map +1 -0
  54. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +149 -0
  55. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -0
  56. package/dist/_shared/scope-resolution/finalize-algorithm.js +795 -0
  57. package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -0
  58. package/dist/_shared/scope-resolution/language-classification.d.ts +26 -0
  59. package/dist/_shared/scope-resolution/language-classification.d.ts.map +1 -0
  60. package/dist/_shared/scope-resolution/language-classification.js +44 -0
  61. package/dist/_shared/scope-resolution/language-classification.js.map +1 -0
  62. package/dist/_shared/scope-resolution/method-dispatch-index.d.ts +106 -0
  63. package/dist/_shared/scope-resolution/method-dispatch-index.d.ts.map +1 -0
  64. package/dist/_shared/scope-resolution/method-dispatch-index.js +98 -0
  65. package/dist/_shared/scope-resolution/method-dispatch-index.js.map +1 -0
  66. package/dist/_shared/scope-resolution/module-scope-index.d.ts +46 -0
  67. package/dist/_shared/scope-resolution/module-scope-index.d.ts.map +1 -0
  68. package/dist/_shared/scope-resolution/module-scope-index.js +58 -0
  69. package/dist/_shared/scope-resolution/module-scope-index.js.map +1 -0
  70. package/dist/_shared/scope-resolution/origin-priority.d.ts +14 -0
  71. package/dist/_shared/scope-resolution/origin-priority.d.ts.map +1 -0
  72. package/dist/_shared/scope-resolution/origin-priority.js +21 -0
  73. package/dist/_shared/scope-resolution/origin-priority.js.map +1 -0
  74. package/dist/_shared/scope-resolution/parsed-file.d.ts +76 -0
  75. package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -0
  76. package/dist/_shared/scope-resolution/parsed-file.js +54 -0
  77. package/dist/_shared/scope-resolution/parsed-file.js.map +1 -0
  78. package/dist/_shared/scope-resolution/position-index.d.ts +62 -0
  79. package/dist/_shared/scope-resolution/position-index.d.ts.map +1 -0
  80. package/dist/_shared/scope-resolution/position-index.js +134 -0
  81. package/dist/_shared/scope-resolution/position-index.js.map +1 -0
  82. package/dist/_shared/scope-resolution/qualified-name-index.d.ts +44 -0
  83. package/dist/_shared/scope-resolution/qualified-name-index.d.ts.map +1 -0
  84. package/dist/_shared/scope-resolution/qualified-name-index.js +75 -0
  85. package/dist/_shared/scope-resolution/qualified-name-index.js.map +1 -0
  86. package/dist/_shared/scope-resolution/reference-site.d.ts +75 -0
  87. package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -0
  88. package/dist/_shared/scope-resolution/reference-site.js +24 -0
  89. package/dist/_shared/scope-resolution/reference-site.js.map +1 -0
  90. package/dist/_shared/scope-resolution/registries/class-registry.d.ts +27 -0
  91. package/dist/_shared/scope-resolution/registries/class-registry.d.ts.map +1 -0
  92. package/dist/_shared/scope-resolution/registries/class-registry.js +30 -0
  93. package/dist/_shared/scope-resolution/registries/class-registry.js.map +1 -0
  94. package/dist/_shared/scope-resolution/registries/context.d.ts +69 -0
  95. package/dist/_shared/scope-resolution/registries/context.d.ts.map +1 -0
  96. package/dist/_shared/scope-resolution/registries/context.js +44 -0
  97. package/dist/_shared/scope-resolution/registries/context.js.map +1 -0
  98. package/dist/_shared/scope-resolution/registries/evidence.d.ts +56 -0
  99. package/dist/_shared/scope-resolution/registries/evidence.d.ts.map +1 -0
  100. package/dist/_shared/scope-resolution/registries/evidence.js +150 -0
  101. package/dist/_shared/scope-resolution/registries/evidence.js.map +1 -0
  102. package/dist/_shared/scope-resolution/registries/field-registry.d.ts +26 -0
  103. package/dist/_shared/scope-resolution/registries/field-registry.d.ts.map +1 -0
  104. package/dist/_shared/scope-resolution/registries/field-registry.js +31 -0
  105. package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -0
  106. package/dist/_shared/scope-resolution/registries/lookup-core.d.ts +81 -0
  107. package/dist/_shared/scope-resolution/registries/lookup-core.d.ts.map +1 -0
  108. package/dist/_shared/scope-resolution/registries/lookup-core.js +349 -0
  109. package/dist/_shared/scope-resolution/registries/lookup-core.js.map +1 -0
  110. package/dist/_shared/scope-resolution/registries/lookup-qualified.d.ts +33 -0
  111. package/dist/_shared/scope-resolution/registries/lookup-qualified.d.ts.map +1 -0
  112. package/dist/_shared/scope-resolution/registries/lookup-qualified.js +56 -0
  113. package/dist/_shared/scope-resolution/registries/lookup-qualified.js.map +1 -0
  114. package/dist/_shared/scope-resolution/registries/method-registry.d.ts +36 -0
  115. package/dist/_shared/scope-resolution/registries/method-registry.d.ts.map +1 -0
  116. package/dist/_shared/scope-resolution/registries/method-registry.js +32 -0
  117. package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -0
  118. package/dist/_shared/scope-resolution/registries/tie-breaks.d.ts +43 -0
  119. package/dist/_shared/scope-resolution/registries/tie-breaks.d.ts.map +1 -0
  120. package/dist/_shared/scope-resolution/registries/tie-breaks.js +60 -0
  121. package/dist/_shared/scope-resolution/registries/tie-breaks.js.map +1 -0
  122. package/dist/_shared/scope-resolution/resolve-type-ref.d.ts +53 -0
  123. package/dist/_shared/scope-resolution/resolve-type-ref.d.ts.map +1 -0
  124. package/dist/_shared/scope-resolution/resolve-type-ref.js +126 -0
  125. package/dist/_shared/scope-resolution/resolve-type-ref.js.map +1 -0
  126. package/dist/_shared/scope-resolution/scope-id.d.ts +43 -0
  127. package/dist/_shared/scope-resolution/scope-id.d.ts.map +1 -0
  128. package/dist/_shared/scope-resolution/scope-id.js +46 -0
  129. package/dist/_shared/scope-resolution/scope-id.js.map +1 -0
  130. package/dist/_shared/scope-resolution/scope-tree.d.ts +83 -0
  131. package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -0
  132. package/dist/_shared/scope-resolution/scope-tree.js +220 -0
  133. package/dist/_shared/scope-resolution/scope-tree.js.map +1 -0
  134. package/dist/_shared/scope-resolution/shadow/aggregate.d.ts +63 -0
  135. package/dist/_shared/scope-resolution/shadow/aggregate.d.ts.map +1 -0
  136. package/dist/_shared/scope-resolution/shadow/aggregate.js +122 -0
  137. package/dist/_shared/scope-resolution/shadow/aggregate.js.map +1 -0
  138. package/dist/_shared/scope-resolution/shadow/diff.d.ts +59 -0
  139. package/dist/_shared/scope-resolution/shadow/diff.d.ts.map +1 -0
  140. package/dist/_shared/scope-resolution/shadow/diff.js +79 -0
  141. package/dist/_shared/scope-resolution/shadow/diff.js.map +1 -0
  142. package/dist/_shared/scope-resolution/symbol-definition.d.ts +34 -0
  143. package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -0
  144. package/dist/_shared/scope-resolution/symbol-definition.js +12 -0
  145. package/dist/_shared/scope-resolution/symbol-definition.js.map +1 -0
  146. package/dist/_shared/scope-resolution/types.d.ts +400 -0
  147. package/dist/_shared/scope-resolution/types.d.ts.map +1 -0
  148. package/dist/_shared/scope-resolution/types.js +25 -0
  149. package/dist/_shared/scope-resolution/types.js.map +1 -0
  150. package/dist/_shared/test-helpers.d.ts +13 -0
  151. package/dist/_shared/test-helpers.d.ts.map +1 -0
  152. package/dist/_shared/test-helpers.js +13 -0
  153. package/dist/_shared/test-helpers.js.map +1 -0
  154. package/dist/cli/ai-context.d.ts +28 -0
  155. package/dist/cli/ai-context.js +289 -0
  156. package/dist/cli/analyze.d.ts +80 -0
  157. package/dist/cli/analyze.js +525 -0
  158. package/dist/cli/augment.d.ts +13 -0
  159. package/dist/cli/augment.js +33 -0
  160. package/dist/cli/clean.d.ts +10 -0
  161. package/dist/cli/clean.js +79 -0
  162. package/dist/cli/cli-message.d.ts +16 -0
  163. package/dist/cli/cli-message.js +71 -0
  164. package/dist/cli/doctor.d.ts +1 -0
  165. package/dist/cli/doctor.js +31 -0
  166. package/dist/cli/eval-server.d.ts +37 -0
  167. package/dist/cli/eval-server.js +423 -0
  168. package/dist/cli/group.d.ts +1 -0
  169. package/dist/cli/group.js +323 -0
  170. package/dist/cli/index-repo.d.ts +15 -0
  171. package/dist/cli/index-repo.js +120 -0
  172. package/dist/cli/index.d.ts +2 -0
  173. package/dist/cli/index.js +492 -0
  174. package/dist/cli/lazy-action.d.ts +6 -0
  175. package/dist/cli/lazy-action.js +18 -0
  176. package/dist/cli/list.d.ts +6 -0
  177. package/dist/cli/list.js +40 -0
  178. package/dist/cli/mcp.d.ts +29 -0
  179. package/dist/cli/mcp.js +73 -0
  180. package/dist/cli/optional-grammars.d.ts +47 -0
  181. package/dist/cli/optional-grammars.js +87 -0
  182. package/dist/cli/publish.d.ts +29 -0
  183. package/dist/cli/publish.js +174 -0
  184. package/dist/cli/remove.d.ts +30 -0
  185. package/dist/cli/remove.js +102 -0
  186. package/dist/cli/serve.d.ts +4 -0
  187. package/dist/cli/serve.js +55 -0
  188. package/dist/cli/setup.d.ts +8 -0
  189. package/dist/cli/setup.js +642 -0
  190. package/dist/cli/skill-gen.d.ts +26 -0
  191. package/dist/cli/skill-gen.js +555 -0
  192. package/dist/cli/status.d.ts +6 -0
  193. package/dist/cli/status.js +36 -0
  194. package/dist/cli/tool.d.ts +43 -0
  195. package/dist/cli/tool.js +169 -0
  196. package/dist/cli/wiki.d.ts +23 -0
  197. package/dist/cli/wiki.js +616 -0
  198. package/dist/config/ignore-service.d.ts +35 -0
  199. package/dist/config/ignore-service.js +439 -0
  200. package/dist/config/supported-languages.d.ts +13 -0
  201. package/dist/config/supported-languages.js +13 -0
  202. package/dist/core/augmentation/engine.d.ts +26 -0
  203. package/dist/core/augmentation/engine.js +272 -0
  204. package/dist/core/embedding-mode.d.ts +51 -0
  205. package/dist/core/embedding-mode.js +48 -0
  206. package/dist/core/embeddings/ast-utils.d.ts +22 -0
  207. package/dist/core/embeddings/ast-utils.js +106 -0
  208. package/dist/core/embeddings/character-chunk.d.ts +12 -0
  209. package/dist/core/embeddings/character-chunk.js +43 -0
  210. package/dist/core/embeddings/chunker.d.ts +14 -0
  211. package/dist/core/embeddings/chunker.js +239 -0
  212. package/dist/core/embeddings/config.d.ts +2 -0
  213. package/dist/core/embeddings/config.js +36 -0
  214. package/dist/core/embeddings/embedder.d.ts +65 -0
  215. package/dist/core/embeddings/embedder.js +349 -0
  216. package/dist/core/embeddings/embedding-pipeline.d.ts +68 -0
  217. package/dist/core/embeddings/embedding-pipeline.js +552 -0
  218. package/dist/core/embeddings/exact-search.d.ts +15 -0
  219. package/dist/core/embeddings/exact-search.js +27 -0
  220. package/dist/core/embeddings/hf-env.d.ts +135 -0
  221. package/dist/core/embeddings/hf-env.js +232 -0
  222. package/dist/core/embeddings/http-client.d.ts +37 -0
  223. package/dist/core/embeddings/http-client.js +199 -0
  224. package/dist/core/embeddings/index.d.ts +10 -0
  225. package/dist/core/embeddings/index.js +10 -0
  226. package/dist/core/embeddings/line-index.d.ts +7 -0
  227. package/dist/core/embeddings/line-index.js +42 -0
  228. package/dist/core/embeddings/server-mapping.d.ts +15 -0
  229. package/dist/core/embeddings/server-mapping.js +33 -0
  230. package/dist/core/embeddings/structural-extractor.d.ts +15 -0
  231. package/dist/core/embeddings/structural-extractor.js +58 -0
  232. package/dist/core/embeddings/text-generator.d.ts +31 -0
  233. package/dist/core/embeddings/text-generator.js +208 -0
  234. package/dist/core/embeddings/types.d.ts +211 -0
  235. package/dist/core/embeddings/types.js +202 -0
  236. package/dist/core/git-staleness.d.ts +37 -0
  237. package/dist/core/git-staleness.js +167 -0
  238. package/dist/core/graph/graph.d.ts +2 -0
  239. package/dist/core/graph/graph.js +173 -0
  240. package/dist/core/graph/types.d.ts +36 -0
  241. package/dist/core/graph/types.js +1 -0
  242. package/dist/core/group/bridge-db.d.ts +82 -0
  243. package/dist/core/group/bridge-db.js +609 -0
  244. package/dist/core/group/bridge-schema.d.ts +27 -0
  245. package/dist/core/group/bridge-schema.js +55 -0
  246. package/dist/core/group/config-parser.d.ts +7 -0
  247. package/dist/core/group/config-parser.js +122 -0
  248. package/dist/core/group/contract-extractor.d.ts +7 -0
  249. package/dist/core/group/contract-extractor.js +1 -0
  250. package/dist/core/group/cross-impact.d.ts +85 -0
  251. package/dist/core/group/cross-impact.js +515 -0
  252. package/dist/core/group/extractors/elixir-workspace-extractor.d.ts +15 -0
  253. package/dist/core/group/extractors/elixir-workspace-extractor.js +204 -0
  254. package/dist/core/group/extractors/fs-utils.d.ts +10 -0
  255. package/dist/core/group/extractors/fs-utils.js +24 -0
  256. package/dist/core/group/extractors/go-workspace-extractor.d.ts +14 -0
  257. package/dist/core/group/extractors/go-workspace-extractor.js +217 -0
  258. package/dist/core/group/extractors/grpc-extractor.d.ts +25 -0
  259. package/dist/core/group/extractors/grpc-extractor.js +414 -0
  260. package/dist/core/group/extractors/grpc-patterns/go.d.ts +2 -0
  261. package/dist/core/group/extractors/grpc-patterns/go.js +97 -0
  262. package/dist/core/group/extractors/grpc-patterns/index.d.ts +19 -0
  263. package/dist/core/group/extractors/grpc-patterns/index.js +46 -0
  264. package/dist/core/group/extractors/grpc-patterns/java.d.ts +2 -0
  265. package/dist/core/group/extractors/grpc-patterns/java.js +173 -0
  266. package/dist/core/group/extractors/grpc-patterns/node.d.ts +4 -0
  267. package/dist/core/group/extractors/grpc-patterns/node.js +290 -0
  268. package/dist/core/group/extractors/grpc-patterns/proto.d.ts +9 -0
  269. package/dist/core/group/extractors/grpc-patterns/proto.js +134 -0
  270. package/dist/core/group/extractors/grpc-patterns/python.d.ts +2 -0
  271. package/dist/core/group/extractors/grpc-patterns/python.js +67 -0
  272. package/dist/core/group/extractors/grpc-patterns/types.d.ts +50 -0
  273. package/dist/core/group/extractors/grpc-patterns/types.js +1 -0
  274. package/dist/core/group/extractors/http-patterns/go.d.ts +2 -0
  275. package/dist/core/group/extractors/http-patterns/go.js +215 -0
  276. package/dist/core/group/extractors/http-patterns/index.d.ts +17 -0
  277. package/dist/core/group/extractors/http-patterns/index.js +44 -0
  278. package/dist/core/group/extractors/http-patterns/java.d.ts +2 -0
  279. package/dist/core/group/extractors/http-patterns/java.js +253 -0
  280. package/dist/core/group/extractors/http-patterns/node.d.ts +4 -0
  281. package/dist/core/group/extractors/http-patterns/node.js +484 -0
  282. package/dist/core/group/extractors/http-patterns/php.d.ts +2 -0
  283. package/dist/core/group/extractors/http-patterns/php.js +178 -0
  284. package/dist/core/group/extractors/http-patterns/python.d.ts +2 -0
  285. package/dist/core/group/extractors/http-patterns/python.js +308 -0
  286. package/dist/core/group/extractors/http-patterns/types.d.ts +61 -0
  287. package/dist/core/group/extractors/http-patterns/types.js +1 -0
  288. package/dist/core/group/extractors/http-route-extractor.d.ts +21 -0
  289. package/dist/core/group/extractors/http-route-extractor.js +430 -0
  290. package/dist/core/group/extractors/include-extractor.d.ts +39 -0
  291. package/dist/core/group/extractors/include-extractor.js +566 -0
  292. package/dist/core/group/extractors/java-workspace-extractor.d.ts +16 -0
  293. package/dist/core/group/extractors/java-workspace-extractor.js +204 -0
  294. package/dist/core/group/extractors/manifest-extractor.d.ts +54 -0
  295. package/dist/core/group/extractors/manifest-extractor.js +320 -0
  296. package/dist/core/group/extractors/node-workspace-extractor.d.ts +14 -0
  297. package/dist/core/group/extractors/node-workspace-extractor.js +207 -0
  298. package/dist/core/group/extractors/python-workspace-extractor.d.ts +15 -0
  299. package/dist/core/group/extractors/python-workspace-extractor.js +205 -0
  300. package/dist/core/group/extractors/rust-workspace-extractor.d.ts +44 -0
  301. package/dist/core/group/extractors/rust-workspace-extractor.js +240 -0
  302. package/dist/core/group/extractors/thrift-extractor.d.ts +22 -0
  303. package/dist/core/group/extractors/thrift-extractor.js +283 -0
  304. package/dist/core/group/extractors/thrift-patterns/index.d.ts +4 -0
  305. package/dist/core/group/extractors/thrift-patterns/index.js +10 -0
  306. package/dist/core/group/extractors/thrift-patterns/java.d.ts +2 -0
  307. package/dist/core/group/extractors/thrift-patterns/java.js +220 -0
  308. package/dist/core/group/extractors/thrift-patterns/types.d.ts +17 -0
  309. package/dist/core/group/extractors/thrift-patterns/types.js +1 -0
  310. package/dist/core/group/extractors/topic-extractor.d.ts +8 -0
  311. package/dist/core/group/extractors/topic-extractor.js +97 -0
  312. package/dist/core/group/extractors/topic-patterns/go.d.ts +2 -0
  313. package/dist/core/group/extractors/topic-patterns/go.js +120 -0
  314. package/dist/core/group/extractors/topic-patterns/index.d.ts +14 -0
  315. package/dist/core/group/extractors/topic-patterns/index.js +38 -0
  316. package/dist/core/group/extractors/topic-patterns/java.d.ts +2 -0
  317. package/dist/core/group/extractors/topic-patterns/java.js +80 -0
  318. package/dist/core/group/extractors/topic-patterns/node.d.ts +4 -0
  319. package/dist/core/group/extractors/topic-patterns/node.js +155 -0
  320. package/dist/core/group/extractors/topic-patterns/python.d.ts +2 -0
  321. package/dist/core/group/extractors/topic-patterns/python.js +116 -0
  322. package/dist/core/group/extractors/topic-patterns/types.d.ts +25 -0
  323. package/dist/core/group/extractors/topic-patterns/types.js +10 -0
  324. package/dist/core/group/extractors/tree-sitter-scanner.d.ts +113 -0
  325. package/dist/core/group/extractors/tree-sitter-scanner.js +95 -0
  326. package/dist/core/group/extractors/workspace-extractor.d.ts +13 -0
  327. package/dist/core/group/extractors/workspace-extractor.js +65 -0
  328. package/dist/core/group/group-path-utils.d.ts +17 -0
  329. package/dist/core/group/group-path-utils.js +40 -0
  330. package/dist/core/group/matching.d.ts +13 -0
  331. package/dist/core/group/matching.js +284 -0
  332. package/dist/core/group/normalization.d.ts +3 -0
  333. package/dist/core/group/normalization.js +115 -0
  334. package/dist/core/group/resolve-at-member.d.ts +10 -0
  335. package/dist/core/group/resolve-at-member.js +31 -0
  336. package/dist/core/group/service-boundary-detector.d.ts +8 -0
  337. package/dist/core/group/service-boundary-detector.js +155 -0
  338. package/dist/core/group/service.d.ts +56 -0
  339. package/dist/core/group/service.js +395 -0
  340. package/dist/core/group/storage.d.ts +9 -0
  341. package/dist/core/group/storage.js +157 -0
  342. package/dist/core/group/sync.d.ts +21 -0
  343. package/dist/core/group/sync.js +267 -0
  344. package/dist/core/group/types.d.ts +181 -0
  345. package/dist/core/group/types.js +1 -0
  346. package/dist/core/incremental/shadow-candidates.d.ts +44 -0
  347. package/dist/core/incremental/shadow-candidates.js +74 -0
  348. package/dist/core/incremental/subgraph-extract.d.ts +64 -0
  349. package/dist/core/incremental/subgraph-extract.js +111 -0
  350. package/dist/core/ingestion/ast-cache.d.ts +26 -0
  351. package/dist/core/ingestion/ast-cache.js +48 -0
  352. package/dist/core/ingestion/binding-accumulator.d.ts +212 -0
  353. package/dist/core/ingestion/binding-accumulator.js +336 -0
  354. package/dist/core/ingestion/call-extractors/configs/c-cpp.d.ts +3 -0
  355. package/dist/core/ingestion/call-extractors/configs/c-cpp.js +8 -0
  356. package/dist/core/ingestion/call-extractors/configs/csharp.d.ts +2 -0
  357. package/dist/core/ingestion/call-extractors/configs/csharp.js +6 -0
  358. package/dist/core/ingestion/call-extractors/configs/dart.d.ts +2 -0
  359. package/dist/core/ingestion/call-extractors/configs/dart.js +5 -0
  360. package/dist/core/ingestion/call-extractors/configs/go.d.ts +2 -0
  361. package/dist/core/ingestion/call-extractors/configs/go.js +5 -0
  362. package/dist/core/ingestion/call-extractors/configs/jvm.d.ts +3 -0
  363. package/dist/core/ingestion/call-extractors/configs/jvm.js +51 -0
  364. package/dist/core/ingestion/call-extractors/configs/php.d.ts +2 -0
  365. package/dist/core/ingestion/call-extractors/configs/php.js +5 -0
  366. package/dist/core/ingestion/call-extractors/configs/python.d.ts +2 -0
  367. package/dist/core/ingestion/call-extractors/configs/python.js +5 -0
  368. package/dist/core/ingestion/call-extractors/configs/ruby.d.ts +2 -0
  369. package/dist/core/ingestion/call-extractors/configs/ruby.js +5 -0
  370. package/dist/core/ingestion/call-extractors/configs/rust.d.ts +2 -0
  371. package/dist/core/ingestion/call-extractors/configs/rust.js +5 -0
  372. package/dist/core/ingestion/call-extractors/configs/swift.d.ts +2 -0
  373. package/dist/core/ingestion/call-extractors/configs/swift.js +5 -0
  374. package/dist/core/ingestion/call-extractors/configs/typescript-javascript.d.ts +3 -0
  375. package/dist/core/ingestion/call-extractors/configs/typescript-javascript.js +8 -0
  376. package/dist/core/ingestion/call-extractors/generic.d.ts +5 -0
  377. package/dist/core/ingestion/call-extractors/generic.js +59 -0
  378. package/dist/core/ingestion/call-processor.d.ts +235 -0
  379. package/dist/core/ingestion/call-processor.js +2754 -0
  380. package/dist/core/ingestion/call-routing.d.ts +55 -0
  381. package/dist/core/ingestion/call-routing.js +95 -0
  382. package/dist/core/ingestion/call-types.d.ts +135 -0
  383. package/dist/core/ingestion/call-types.js +2 -0
  384. package/dist/core/ingestion/class-extractors/configs/c-cpp.d.ts +3 -0
  385. package/dist/core/ingestion/class-extractors/configs/c-cpp.js +11 -0
  386. package/dist/core/ingestion/class-extractors/configs/csharp.d.ts +2 -0
  387. package/dist/core/ingestion/class-extractors/configs/csharp.js +21 -0
  388. package/dist/core/ingestion/class-extractors/configs/dart.d.ts +2 -0
  389. package/dist/core/ingestion/class-extractors/configs/dart.js +7 -0
  390. package/dist/core/ingestion/class-extractors/configs/go.d.ts +2 -0
  391. package/dist/core/ingestion/class-extractors/configs/go.js +20 -0
  392. package/dist/core/ingestion/class-extractors/configs/jvm.d.ts +3 -0
  393. package/dist/core/ingestion/class-extractors/configs/jvm.js +35 -0
  394. package/dist/core/ingestion/class-extractors/configs/php.d.ts +2 -0
  395. package/dist/core/ingestion/class-extractors/configs/php.js +7 -0
  396. package/dist/core/ingestion/class-extractors/configs/python.d.ts +2 -0
  397. package/dist/core/ingestion/class-extractors/configs/python.js +7 -0
  398. package/dist/core/ingestion/class-extractors/configs/ruby.d.ts +2 -0
  399. package/dist/core/ingestion/class-extractors/configs/ruby.js +7 -0
  400. package/dist/core/ingestion/class-extractors/configs/rust.d.ts +2 -0
  401. package/dist/core/ingestion/class-extractors/configs/rust.js +7 -0
  402. package/dist/core/ingestion/class-extractors/configs/swift.d.ts +2 -0
  403. package/dist/core/ingestion/class-extractors/configs/swift.js +18 -0
  404. package/dist/core/ingestion/class-extractors/configs/typescript-javascript.d.ts +4 -0
  405. package/dist/core/ingestion/class-extractors/configs/typescript-javascript.js +28 -0
  406. package/dist/core/ingestion/class-extractors/generic.d.ts +2 -0
  407. package/dist/core/ingestion/class-extractors/generic.js +135 -0
  408. package/dist/core/ingestion/class-types.d.ts +34 -0
  409. package/dist/core/ingestion/class-types.js +1 -0
  410. package/dist/core/ingestion/cluster-enricher.d.ts +38 -0
  411. package/dist/core/ingestion/cluster-enricher.js +169 -0
  412. package/dist/core/ingestion/cobol/cobol-copy-expander.d.ts +57 -0
  413. package/dist/core/ingestion/cobol/cobol-copy-expander.js +376 -0
  414. package/dist/core/ingestion/cobol/cobol-preprocessor.d.ts +212 -0
  415. package/dist/core/ingestion/cobol/cobol-preprocessor.js +1727 -0
  416. package/dist/core/ingestion/cobol/jcl-parser.d.ts +68 -0
  417. package/dist/core/ingestion/cobol/jcl-parser.js +217 -0
  418. package/dist/core/ingestion/cobol/jcl-processor.d.ts +33 -0
  419. package/dist/core/ingestion/cobol/jcl-processor.js +229 -0
  420. package/dist/core/ingestion/cobol-processor.d.ts +54 -0
  421. package/dist/core/ingestion/cobol-processor.js +1232 -0
  422. package/dist/core/ingestion/community-processor.d.ts +39 -0
  423. package/dist/core/ingestion/community-processor.js +336 -0
  424. package/dist/core/ingestion/constants.d.ts +17 -0
  425. package/dist/core/ingestion/constants.js +21 -0
  426. package/dist/core/ingestion/cpp-ue-preprocessor.d.ts +12 -0
  427. package/dist/core/ingestion/cpp-ue-preprocessor.js +260 -0
  428. package/dist/core/ingestion/emit-references.d.ts +88 -0
  429. package/dist/core/ingestion/emit-references.js +229 -0
  430. package/dist/core/ingestion/entry-point-scoring.d.ts +40 -0
  431. package/dist/core/ingestion/entry-point-scoring.js +196 -0
  432. package/dist/core/ingestion/export-detection.d.ts +57 -0
  433. package/dist/core/ingestion/export-detection.js +233 -0
  434. package/dist/core/ingestion/field-extractor.d.ts +29 -0
  435. package/dist/core/ingestion/field-extractor.js +25 -0
  436. package/dist/core/ingestion/field-extractors/configs/c-cpp.d.ts +3 -0
  437. package/dist/core/ingestion/field-extractors/configs/c-cpp.js +104 -0
  438. package/dist/core/ingestion/field-extractors/configs/csharp.d.ts +8 -0
  439. package/dist/core/ingestion/field-extractors/configs/csharp.js +121 -0
  440. package/dist/core/ingestion/field-extractors/configs/dart.d.ts +8 -0
  441. package/dist/core/ingestion/field-extractors/configs/dart.js +78 -0
  442. package/dist/core/ingestion/field-extractors/configs/go.d.ts +11 -0
  443. package/dist/core/ingestion/field-extractors/configs/go.js +60 -0
  444. package/dist/core/ingestion/field-extractors/configs/helpers.d.ts +53 -0
  445. package/dist/core/ingestion/field-extractors/configs/helpers.js +158 -0
  446. package/dist/core/ingestion/field-extractors/configs/jvm.d.ts +3 -0
  447. package/dist/core/ingestion/field-extractors/configs/jvm.js +118 -0
  448. package/dist/core/ingestion/field-extractors/configs/php.d.ts +8 -0
  449. package/dist/core/ingestion/field-extractors/configs/php.js +65 -0
  450. package/dist/core/ingestion/field-extractors/configs/python.d.ts +12 -0
  451. package/dist/core/ingestion/field-extractors/configs/python.js +91 -0
  452. package/dist/core/ingestion/field-extractors/configs/ruby.d.ts +16 -0
  453. package/dist/core/ingestion/field-extractors/configs/ruby.js +76 -0
  454. package/dist/core/ingestion/field-extractors/configs/rust.d.ts +9 -0
  455. package/dist/core/ingestion/field-extractors/configs/rust.js +52 -0
  456. package/dist/core/ingestion/field-extractors/configs/swift.d.ts +8 -0
  457. package/dist/core/ingestion/field-extractors/configs/swift.js +65 -0
  458. package/dist/core/ingestion/field-extractors/configs/typescript-javascript.d.ts +3 -0
  459. package/dist/core/ingestion/field-extractors/configs/typescript-javascript.js +56 -0
  460. package/dist/core/ingestion/field-extractors/generic.d.ts +49 -0
  461. package/dist/core/ingestion/field-extractors/generic.js +117 -0
  462. package/dist/core/ingestion/field-extractors/typescript.d.ts +77 -0
  463. package/dist/core/ingestion/field-extractors/typescript.js +291 -0
  464. package/dist/core/ingestion/field-types.d.ts +61 -0
  465. package/dist/core/ingestion/field-types.js +2 -0
  466. package/dist/core/ingestion/filesystem-walker.d.ts +28 -0
  467. package/dist/core/ingestion/filesystem-walker.js +92 -0
  468. package/dist/core/ingestion/finalize-orchestrator.d.ts +63 -0
  469. package/dist/core/ingestion/finalize-orchestrator.js +142 -0
  470. package/dist/core/ingestion/framework-detection.d.ts +30 -0
  471. package/dist/core/ingestion/framework-detection.js +428 -0
  472. package/dist/core/ingestion/heritage-extractors/configs/go.d.ts +13 -0
  473. package/dist/core/ingestion/heritage-extractors/configs/go.js +20 -0
  474. package/dist/core/ingestion/heritage-extractors/configs/ruby.d.ts +18 -0
  475. package/dist/core/ingestion/heritage-extractors/configs/ruby.js +65 -0
  476. package/dist/core/ingestion/heritage-extractors/generic.d.ts +23 -0
  477. package/dist/core/ingestion/heritage-extractors/generic.js +47 -0
  478. package/dist/core/ingestion/heritage-processor.d.ts +54 -0
  479. package/dist/core/ingestion/heritage-processor.js +367 -0
  480. package/dist/core/ingestion/heritage-types.d.ts +73 -0
  481. package/dist/core/ingestion/heritage-types.js +2 -0
  482. package/dist/core/ingestion/import-processor.d.ts +23 -0
  483. package/dist/core/ingestion/import-processor.js +377 -0
  484. package/dist/core/ingestion/import-resolvers/configs/c-cpp.d.ts +7 -0
  485. package/dist/core/ingestion/import-resolvers/configs/c-cpp.js +14 -0
  486. package/dist/core/ingestion/import-resolvers/configs/csharp.d.ts +8 -0
  487. package/dist/core/ingestion/import-resolvers/configs/csharp.js +27 -0
  488. package/dist/core/ingestion/import-resolvers/configs/dart.d.ts +17 -0
  489. package/dist/core/ingestion/import-resolvers/configs/dart.js +54 -0
  490. package/dist/core/ingestion/import-resolvers/configs/go.d.ts +8 -0
  491. package/dist/core/ingestion/import-resolvers/configs/go.js +26 -0
  492. package/dist/core/ingestion/import-resolvers/configs/jvm.d.ts +13 -0
  493. package/dist/core/ingestion/import-resolvers/configs/jvm.js +68 -0
  494. package/dist/core/ingestion/import-resolvers/configs/php.d.ts +8 -0
  495. package/dist/core/ingestion/import-resolvers/configs/php.js +15 -0
  496. package/dist/core/ingestion/import-resolvers/configs/python.d.ts +12 -0
  497. package/dist/core/ingestion/import-resolvers/configs/python.js +41 -0
  498. package/dist/core/ingestion/import-resolvers/configs/ruby.d.ts +8 -0
  499. package/dist/core/ingestion/import-resolvers/configs/ruby.js +16 -0
  500. package/dist/core/ingestion/import-resolvers/configs/rust.d.ts +8 -0
  501. package/dist/core/ingestion/import-resolvers/configs/rust.js +54 -0
  502. package/dist/core/ingestion/import-resolvers/configs/swift.d.ts +8 -0
  503. package/dist/core/ingestion/import-resolvers/configs/swift.js +29 -0
  504. package/dist/core/ingestion/import-resolvers/configs/typescript-javascript.d.ts +9 -0
  505. package/dist/core/ingestion/import-resolvers/configs/typescript-javascript.js +23 -0
  506. package/dist/core/ingestion/import-resolvers/csharp.d.ts +18 -0
  507. package/dist/core/ingestion/import-resolvers/csharp.js +115 -0
  508. package/dist/core/ingestion/import-resolvers/go.d.ts +17 -0
  509. package/dist/core/ingestion/import-resolvers/go.js +46 -0
  510. package/dist/core/ingestion/import-resolvers/jvm.d.ts +27 -0
  511. package/dist/core/ingestion/import-resolvers/jvm.js +106 -0
  512. package/dist/core/ingestion/import-resolvers/php.d.ts +24 -0
  513. package/dist/core/ingestion/import-resolvers/php.js +77 -0
  514. package/dist/core/ingestion/import-resolvers/python.d.ts +22 -0
  515. package/dist/core/ingestion/import-resolvers/python.js +72 -0
  516. package/dist/core/ingestion/import-resolvers/resolver-factory.d.ts +24 -0
  517. package/dist/core/ingestion/import-resolvers/resolver-factory.js +33 -0
  518. package/dist/core/ingestion/import-resolvers/ruby.d.ts +14 -0
  519. package/dist/core/ingestion/import-resolvers/ruby.js +17 -0
  520. package/dist/core/ingestion/import-resolvers/rust.d.ts +17 -0
  521. package/dist/core/ingestion/import-resolvers/rust.js +75 -0
  522. package/dist/core/ingestion/import-resolvers/standard.d.ts +35 -0
  523. package/dist/core/ingestion/import-resolvers/standard.js +168 -0
  524. package/dist/core/ingestion/import-resolvers/types.d.ts +68 -0
  525. package/dist/core/ingestion/import-resolvers/types.js +6 -0
  526. package/dist/core/ingestion/import-resolvers/utils.d.ts +35 -0
  527. package/dist/core/ingestion/import-resolvers/utils.js +153 -0
  528. package/dist/core/ingestion/import-target-adapter.d.ts +73 -0
  529. package/dist/core/ingestion/import-target-adapter.js +95 -0
  530. package/dist/core/ingestion/language-config.d.ts +52 -0
  531. package/dist/core/ingestion/language-config.js +182 -0
  532. package/dist/core/ingestion/language-provider.d.ts +465 -0
  533. package/dist/core/ingestion/language-provider.js +24 -0
  534. package/dist/core/ingestion/languages/c/arity-metadata.d.ts +14 -0
  535. package/dist/core/ingestion/languages/c/arity-metadata.js +94 -0
  536. package/dist/core/ingestion/languages/c/arity.d.ts +6 -0
  537. package/dist/core/ingestion/languages/c/arity.js +18 -0
  538. package/dist/core/ingestion/languages/c/captures.d.ts +2 -0
  539. package/dist/core/ingestion/languages/c/captures.js +105 -0
  540. package/dist/core/ingestion/languages/c/header-scan.d.ts +7 -0
  541. package/dist/core/ingestion/languages/c/header-scan.js +55 -0
  542. package/dist/core/ingestion/languages/c/import-decomposer.d.ts +8 -0
  543. package/dist/core/ingestion/languages/c/import-decomposer.js +50 -0
  544. package/dist/core/ingestion/languages/c/import-target.d.ts +14 -0
  545. package/dist/core/ingestion/languages/c/import-target.js +57 -0
  546. package/dist/core/ingestion/languages/c/index.d.ts +11 -0
  547. package/dist/core/ingestion/languages/c/index.js +11 -0
  548. package/dist/core/ingestion/languages/c/interpret.d.ts +14 -0
  549. package/dist/core/ingestion/languages/c/interpret.js +48 -0
  550. package/dist/core/ingestion/languages/c/merge-bindings.d.ts +7 -0
  551. package/dist/core/ingestion/languages/c/merge-bindings.js +23 -0
  552. package/dist/core/ingestion/languages/c/query.d.ts +3 -0
  553. package/dist/core/ingestion/languages/c/query.js +161 -0
  554. package/dist/core/ingestion/languages/c/scope-resolver.d.ts +13 -0
  555. package/dist/core/ingestion/languages/c/scope-resolver.js +60 -0
  556. package/dist/core/ingestion/languages/c/simple-hooks.d.ts +14 -0
  557. package/dist/core/ingestion/languages/c/simple-hooks.js +19 -0
  558. package/dist/core/ingestion/languages/c/static-linkage.d.ts +13 -0
  559. package/dist/core/ingestion/languages/c/static-linkage.js +57 -0
  560. package/dist/core/ingestion/languages/c-cpp.d.ts +12 -0
  561. package/dist/core/ingestion/languages/c-cpp.js +411 -0
  562. package/dist/core/ingestion/languages/cobol.d.ts +1 -0
  563. package/dist/core/ingestion/languages/cobol.js +28 -0
  564. package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +21 -0
  565. package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +56 -0
  566. package/dist/core/ingestion/languages/csharp/arity-metadata.d.ts +26 -0
  567. package/dist/core/ingestion/languages/csharp/arity-metadata.js +46 -0
  568. package/dist/core/ingestion/languages/csharp/arity.d.ts +23 -0
  569. package/dist/core/ingestion/languages/csharp/arity.js +37 -0
  570. package/dist/core/ingestion/languages/csharp/cache-stats.d.ts +15 -0
  571. package/dist/core/ingestion/languages/csharp/cache-stats.js +26 -0
  572. package/dist/core/ingestion/languages/csharp/captures.d.ts +19 -0
  573. package/dist/core/ingestion/languages/csharp/captures.js +346 -0
  574. package/dist/core/ingestion/languages/csharp/import-decomposer.d.ts +19 -0
  575. package/dist/core/ingestion/languages/csharp/import-decomposer.js +93 -0
  576. package/dist/core/ingestion/languages/csharp/import-target.d.ts +25 -0
  577. package/dist/core/ingestion/languages/csharp/import-target.js +123 -0
  578. package/dist/core/ingestion/languages/csharp/index.d.ts +82 -0
  579. package/dist/core/ingestion/languages/csharp/index.js +82 -0
  580. package/dist/core/ingestion/languages/csharp/interpret.d.ts +15 -0
  581. package/dist/core/ingestion/languages/csharp/interpret.js +132 -0
  582. package/dist/core/ingestion/languages/csharp/merge-bindings.d.ts +27 -0
  583. package/dist/core/ingestion/languages/csharp/merge-bindings.js +55 -0
  584. package/dist/core/ingestion/languages/csharp/namespace-siblings.d.ts +51 -0
  585. package/dist/core/ingestion/languages/csharp/namespace-siblings.js +387 -0
  586. package/dist/core/ingestion/languages/csharp/query.d.ts +35 -0
  587. package/dist/core/ingestion/languages/csharp/query.js +521 -0
  588. package/dist/core/ingestion/languages/csharp/receiver-binding.d.ts +31 -0
  589. package/dist/core/ingestion/languages/csharp/receiver-binding.js +135 -0
  590. package/dist/core/ingestion/languages/csharp/scope-resolver.d.ts +10 -0
  591. package/dist/core/ingestion/languages/csharp/scope-resolver.js +63 -0
  592. package/dist/core/ingestion/languages/csharp/simple-hooks.d.ts +53 -0
  593. package/dist/core/ingestion/languages/csharp/simple-hooks.js +76 -0
  594. package/dist/core/ingestion/languages/csharp.d.ts +8 -0
  595. package/dist/core/ingestion/languages/csharp.js +201 -0
  596. package/dist/core/ingestion/languages/dart.d.ts +12 -0
  597. package/dist/core/ingestion/languages/dart.js +138 -0
  598. package/dist/core/ingestion/languages/go/arity-metadata.d.ts +8 -0
  599. package/dist/core/ingestion/languages/go/arity-metadata.js +37 -0
  600. package/dist/core/ingestion/languages/go/arity.d.ts +2 -0
  601. package/dist/core/ingestion/languages/go/arity.js +14 -0
  602. package/dist/core/ingestion/languages/go/cache-stats.d.ts +7 -0
  603. package/dist/core/ingestion/languages/go/cache-stats.js +15 -0
  604. package/dist/core/ingestion/languages/go/captures.d.ts +2 -0
  605. package/dist/core/ingestion/languages/go/captures.js +129 -0
  606. package/dist/core/ingestion/languages/go/expand-wildcards.d.ts +15 -0
  607. package/dist/core/ingestion/languages/go/expand-wildcards.js +93 -0
  608. package/dist/core/ingestion/languages/go/import-decomposer.d.ts +3 -0
  609. package/dist/core/ingestion/languages/go/import-decomposer.js +44 -0
  610. package/dist/core/ingestion/languages/go/import-target.d.ts +21 -0
  611. package/dist/core/ingestion/languages/go/import-target.js +67 -0
  612. package/dist/core/ingestion/languages/go/index.d.ts +17 -0
  613. package/dist/core/ingestion/languages/go/index.js +17 -0
  614. package/dist/core/ingestion/languages/go/interface-impls.d.ts +4 -0
  615. package/dist/core/ingestion/languages/go/interface-impls.js +72 -0
  616. package/dist/core/ingestion/languages/go/interpret.d.ts +11 -0
  617. package/dist/core/ingestion/languages/go/interpret.js +146 -0
  618. package/dist/core/ingestion/languages/go/merge-bindings.d.ts +2 -0
  619. package/dist/core/ingestion/languages/go/merge-bindings.js +18 -0
  620. package/dist/core/ingestion/languages/go/method-owners.d.ts +17 -0
  621. package/dist/core/ingestion/languages/go/method-owners.js +96 -0
  622. package/dist/core/ingestion/languages/go/namespace-mirror.d.ts +15 -0
  623. package/dist/core/ingestion/languages/go/namespace-mirror.js +53 -0
  624. package/dist/core/ingestion/languages/go/package-siblings.d.ts +11 -0
  625. package/dist/core/ingestion/languages/go/package-siblings.js +84 -0
  626. package/dist/core/ingestion/languages/go/query.d.ts +3 -0
  627. package/dist/core/ingestion/languages/go/query.js +207 -0
  628. package/dist/core/ingestion/languages/go/range-binding.d.ts +8 -0
  629. package/dist/core/ingestion/languages/go/range-binding.js +109 -0
  630. package/dist/core/ingestion/languages/go/receiver-binding.d.ts +3 -0
  631. package/dist/core/ingestion/languages/go/receiver-binding.js +21 -0
  632. package/dist/core/ingestion/languages/go/scope-resolver.d.ts +2 -0
  633. package/dist/core/ingestion/languages/go/scope-resolver.js +33 -0
  634. package/dist/core/ingestion/languages/go/simple-hooks.d.ts +4 -0
  635. package/dist/core/ingestion/languages/go/simple-hooks.js +21 -0
  636. package/dist/core/ingestion/languages/go/type-binding.d.ts +3 -0
  637. package/dist/core/ingestion/languages/go/type-binding.js +237 -0
  638. package/dist/core/ingestion/languages/go.d.ts +11 -0
  639. package/dist/core/ingestion/languages/go.js +94 -0
  640. package/dist/core/ingestion/languages/index.d.ts +39 -0
  641. package/dist/core/ingestion/languages/index.js +64 -0
  642. package/dist/core/ingestion/languages/java/arity-metadata.d.ts +18 -0
  643. package/dist/core/ingestion/languages/java/arity-metadata.js +40 -0
  644. package/dist/core/ingestion/languages/java/arity.d.ts +10 -0
  645. package/dist/core/ingestion/languages/java/arity.js +24 -0
  646. package/dist/core/ingestion/languages/java/cache-stats.d.ts +15 -0
  647. package/dist/core/ingestion/languages/java/cache-stats.js +26 -0
  648. package/dist/core/ingestion/languages/java/captures.d.ts +17 -0
  649. package/dist/core/ingestion/languages/java/captures.js +187 -0
  650. package/dist/core/ingestion/languages/java/import-decomposer.d.ts +18 -0
  651. package/dist/core/ingestion/languages/java/import-decomposer.js +85 -0
  652. package/dist/core/ingestion/languages/java/import-target.d.ts +17 -0
  653. package/dist/core/ingestion/languages/java/import-target.js +100 -0
  654. package/dist/core/ingestion/languages/java/index.d.ts +29 -0
  655. package/dist/core/ingestion/languages/java/index.js +29 -0
  656. package/dist/core/ingestion/languages/java/interpret.d.ts +13 -0
  657. package/dist/core/ingestion/languages/java/interpret.js +131 -0
  658. package/dist/core/ingestion/languages/java/merge-bindings.d.ts +12 -0
  659. package/dist/core/ingestion/languages/java/merge-bindings.js +40 -0
  660. package/dist/core/ingestion/languages/java/query.d.ts +30 -0
  661. package/dist/core/ingestion/languages/java/query.js +192 -0
  662. package/dist/core/ingestion/languages/java/receiver-binding.d.ts +11 -0
  663. package/dist/core/ingestion/languages/java/receiver-binding.js +95 -0
  664. package/dist/core/ingestion/languages/java/scope-resolver.d.ts +50 -0
  665. package/dist/core/ingestion/languages/java/scope-resolver.js +74 -0
  666. package/dist/core/ingestion/languages/java/simple-hooks.d.ts +13 -0
  667. package/dist/core/ingestion/languages/java/simple-hooks.js +34 -0
  668. package/dist/core/ingestion/languages/java.d.ts +9 -0
  669. package/dist/core/ingestion/languages/java.js +76 -0
  670. package/dist/core/ingestion/languages/kotlin.d.ts +9 -0
  671. package/dist/core/ingestion/languages/kotlin.js +164 -0
  672. package/dist/core/ingestion/languages/php/arity-metadata.d.ts +28 -0
  673. package/dist/core/ingestion/languages/php/arity-metadata.js +63 -0
  674. package/dist/core/ingestion/languages/php/arity.d.ts +25 -0
  675. package/dist/core/ingestion/languages/php/arity.js +40 -0
  676. package/dist/core/ingestion/languages/php/cache-stats.d.ts +15 -0
  677. package/dist/core/ingestion/languages/php/cache-stats.js +26 -0
  678. package/dist/core/ingestion/languages/php/captures.d.ts +34 -0
  679. package/dist/core/ingestion/languages/php/captures.js +739 -0
  680. package/dist/core/ingestion/languages/php/import-decomposer.d.ts +28 -0
  681. package/dist/core/ingestion/languages/php/import-decomposer.js +265 -0
  682. package/dist/core/ingestion/languages/php/import-target.d.ts +47 -0
  683. package/dist/core/ingestion/languages/php/import-target.js +100 -0
  684. package/dist/core/ingestion/languages/php/index.d.ts +68 -0
  685. package/dist/core/ingestion/languages/php/index.js +72 -0
  686. package/dist/core/ingestion/languages/php/interpret.d.ts +36 -0
  687. package/dist/core/ingestion/languages/php/interpret.js +241 -0
  688. package/dist/core/ingestion/languages/php/merge-bindings.d.ts +19 -0
  689. package/dist/core/ingestion/languages/php/merge-bindings.js +47 -0
  690. package/dist/core/ingestion/languages/php/namespace-siblings.d.ts +51 -0
  691. package/dist/core/ingestion/languages/php/namespace-siblings.js +288 -0
  692. package/dist/core/ingestion/languages/php/query.d.ts +32 -0
  693. package/dist/core/ingestion/languages/php/query.js +326 -0
  694. package/dist/core/ingestion/languages/php/receiver-binding.d.ts +36 -0
  695. package/dist/core/ingestion/languages/php/receiver-binding.js +128 -0
  696. package/dist/core/ingestion/languages/php/scope-resolver.d.ts +23 -0
  697. package/dist/core/ingestion/languages/php/scope-resolver.js +358 -0
  698. package/dist/core/ingestion/languages/php/simple-hooks.d.ts +42 -0
  699. package/dist/core/ingestion/languages/php/simple-hooks.js +111 -0
  700. package/dist/core/ingestion/languages/php.d.ts +1 -0
  701. package/dist/core/ingestion/languages/php.js +290 -0
  702. package/dist/core/ingestion/languages/python/arity-metadata.d.ts +24 -0
  703. package/dist/core/ingestion/languages/python/arity-metadata.js +45 -0
  704. package/dist/core/ingestion/languages/python/arity.d.ts +22 -0
  705. package/dist/core/ingestion/languages/python/arity.js +38 -0
  706. package/dist/core/ingestion/languages/python/cache-stats.d.ts +17 -0
  707. package/dist/core/ingestion/languages/python/cache-stats.js +28 -0
  708. package/dist/core/ingestion/languages/python/captures.d.ts +19 -0
  709. package/dist/core/ingestion/languages/python/captures.js +130 -0
  710. package/dist/core/ingestion/languages/python/import-decomposer.d.ts +15 -0
  711. package/dist/core/ingestion/languages/python/import-decomposer.js +112 -0
  712. package/dist/core/ingestion/languages/python/import-target.d.ts +21 -0
  713. package/dist/core/ingestion/languages/python/import-target.js +195 -0
  714. package/dist/core/ingestion/languages/python/index.d.ts +80 -0
  715. package/dist/core/ingestion/languages/python/index.js +80 -0
  716. package/dist/core/ingestion/languages/python/interpret.d.ts +15 -0
  717. package/dist/core/ingestion/languages/python/interpret.js +191 -0
  718. package/dist/core/ingestion/languages/python/merge-bindings.d.ts +16 -0
  719. package/dist/core/ingestion/languages/python/merge-bindings.js +44 -0
  720. package/dist/core/ingestion/languages/python/query.d.ts +9 -0
  721. package/dist/core/ingestion/languages/python/query.js +267 -0
  722. package/dist/core/ingestion/languages/python/receiver-binding.d.ts +21 -0
  723. package/dist/core/ingestion/languages/python/receiver-binding.js +116 -0
  724. package/dist/core/ingestion/languages/python/scope-resolver.d.ts +16 -0
  725. package/dist/core/ingestion/languages/python/scope-resolver.js +53 -0
  726. package/dist/core/ingestion/languages/python/simple-hooks.d.ts +25 -0
  727. package/dist/core/ingestion/languages/python/simple-hooks.js +43 -0
  728. package/dist/core/ingestion/languages/python.d.ts +12 -0
  729. package/dist/core/ingestion/languages/python.js +133 -0
  730. package/dist/core/ingestion/languages/ruby.d.ts +9 -0
  731. package/dist/core/ingestion/languages/ruby.js +235 -0
  732. package/dist/core/ingestion/languages/rust.d.ts +12 -0
  733. package/dist/core/ingestion/languages/rust.js +167 -0
  734. package/dist/core/ingestion/languages/swift.d.ts +12 -0
  735. package/dist/core/ingestion/languages/swift.js +312 -0
  736. package/dist/core/ingestion/languages/typescript/arity-metadata.d.ts +59 -0
  737. package/dist/core/ingestion/languages/typescript/arity-metadata.js +103 -0
  738. package/dist/core/ingestion/languages/typescript/arity.d.ts +37 -0
  739. package/dist/core/ingestion/languages/typescript/arity.js +54 -0
  740. package/dist/core/ingestion/languages/typescript/cache-stats.d.ts +17 -0
  741. package/dist/core/ingestion/languages/typescript/cache-stats.js +28 -0
  742. package/dist/core/ingestion/languages/typescript/captures.d.ts +28 -0
  743. package/dist/core/ingestion/languages/typescript/captures.js +474 -0
  744. package/dist/core/ingestion/languages/typescript/import-decomposer.d.ts +49 -0
  745. package/dist/core/ingestion/languages/typescript/import-decomposer.js +371 -0
  746. package/dist/core/ingestion/languages/typescript/import-target.d.ts +50 -0
  747. package/dist/core/ingestion/languages/typescript/import-target.js +61 -0
  748. package/dist/core/ingestion/languages/typescript/index.d.ts +94 -0
  749. package/dist/core/ingestion/languages/typescript/index.js +94 -0
  750. package/dist/core/ingestion/languages/typescript/interpret.d.ts +35 -0
  751. package/dist/core/ingestion/languages/typescript/interpret.js +317 -0
  752. package/dist/core/ingestion/languages/typescript/merge-bindings.d.ts +62 -0
  753. package/dist/core/ingestion/languages/typescript/merge-bindings.js +158 -0
  754. package/dist/core/ingestion/languages/typescript/query.d.ts +84 -0
  755. package/dist/core/ingestion/languages/typescript/query.js +978 -0
  756. package/dist/core/ingestion/languages/typescript/receiver-binding.d.ts +59 -0
  757. package/dist/core/ingestion/languages/typescript/receiver-binding.js +171 -0
  758. package/dist/core/ingestion/languages/typescript/scope-resolver.d.ts +16 -0
  759. package/dist/core/ingestion/languages/typescript/scope-resolver.js +113 -0
  760. package/dist/core/ingestion/languages/typescript/simple-hooks.d.ts +71 -0
  761. package/dist/core/ingestion/languages/typescript/simple-hooks.js +131 -0
  762. package/dist/core/ingestion/languages/typescript.d.ts +11 -0
  763. package/dist/core/ingestion/languages/typescript.js +324 -0
  764. package/dist/core/ingestion/languages/vue.d.ts +13 -0
  765. package/dist/core/ingestion/languages/vue.js +79 -0
  766. package/dist/core/ingestion/markdown-processor.d.ts +17 -0
  767. package/dist/core/ingestion/markdown-processor.js +124 -0
  768. package/dist/core/ingestion/method-extractors/configs/c-cpp.d.ts +3 -0
  769. package/dist/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
  770. package/dist/core/ingestion/method-extractors/configs/csharp.d.ts +2 -0
  771. package/dist/core/ingestion/method-extractors/configs/csharp.js +287 -0
  772. package/dist/core/ingestion/method-extractors/configs/dart.d.ts +2 -0
  773. package/dist/core/ingestion/method-extractors/configs/dart.js +376 -0
  774. package/dist/core/ingestion/method-extractors/configs/go.d.ts +2 -0
  775. package/dist/core/ingestion/method-extractors/configs/go.js +176 -0
  776. package/dist/core/ingestion/method-extractors/configs/jvm.d.ts +3 -0
  777. package/dist/core/ingestion/method-extractors/configs/jvm.js +336 -0
  778. package/dist/core/ingestion/method-extractors/configs/php.d.ts +2 -0
  779. package/dist/core/ingestion/method-extractors/configs/php.js +304 -0
  780. package/dist/core/ingestion/method-extractors/configs/python.d.ts +2 -0
  781. package/dist/core/ingestion/method-extractors/configs/python.js +309 -0
  782. package/dist/core/ingestion/method-extractors/configs/ruby.d.ts +2 -0
  783. package/dist/core/ingestion/method-extractors/configs/ruby.js +286 -0
  784. package/dist/core/ingestion/method-extractors/configs/rust.d.ts +2 -0
  785. package/dist/core/ingestion/method-extractors/configs/rust.js +195 -0
  786. package/dist/core/ingestion/method-extractors/configs/swift.d.ts +2 -0
  787. package/dist/core/ingestion/method-extractors/configs/swift.js +276 -0
  788. package/dist/core/ingestion/method-extractors/configs/typescript-javascript.d.ts +3 -0
  789. package/dist/core/ingestion/method-extractors/configs/typescript-javascript.js +338 -0
  790. package/dist/core/ingestion/method-extractors/generic.d.ts +11 -0
  791. package/dist/core/ingestion/method-extractors/generic.js +205 -0
  792. package/dist/core/ingestion/method-types.d.ts +90 -0
  793. package/dist/core/ingestion/method-types.js +2 -0
  794. package/dist/core/ingestion/model/field-registry.d.ts +18 -0
  795. package/dist/core/ingestion/model/field-registry.js +22 -0
  796. package/dist/core/ingestion/model/heritage-map.d.ts +105 -0
  797. package/dist/core/ingestion/model/heritage-map.js +260 -0
  798. package/dist/core/ingestion/model/index.d.ts +20 -0
  799. package/dist/core/ingestion/model/index.js +43 -0
  800. package/dist/core/ingestion/model/method-registry.d.ts +71 -0
  801. package/dist/core/ingestion/model/method-registry.js +134 -0
  802. package/dist/core/ingestion/model/registration-table.d.ts +138 -0
  803. package/dist/core/ingestion/model/registration-table.js +224 -0
  804. package/dist/core/ingestion/model/resolution-context.d.ts +93 -0
  805. package/dist/core/ingestion/model/resolution-context.js +337 -0
  806. package/dist/core/ingestion/model/resolve.d.ts +61 -0
  807. package/dist/core/ingestion/model/resolve.js +401 -0
  808. package/dist/core/ingestion/model/scope-resolution-indexes.d.ts +72 -0
  809. package/dist/core/ingestion/model/scope-resolution-indexes.js +42 -0
  810. package/dist/core/ingestion/model/semantic-model.d.ts +150 -0
  811. package/dist/core/ingestion/model/semantic-model.js +175 -0
  812. package/dist/core/ingestion/model/symbol-table.d.ts +200 -0
  813. package/dist/core/ingestion/model/symbol-table.js +206 -0
  814. package/dist/core/ingestion/model/type-registry.d.ts +39 -0
  815. package/dist/core/ingestion/model/type-registry.js +62 -0
  816. package/dist/core/ingestion/mro-processor.d.ts +46 -0
  817. package/dist/core/ingestion/mro-processor.js +597 -0
  818. package/dist/core/ingestion/named-bindings/csharp.d.ts +3 -0
  819. package/dist/core/ingestion/named-bindings/csharp.js +37 -0
  820. package/dist/core/ingestion/named-bindings/java.d.ts +3 -0
  821. package/dist/core/ingestion/named-bindings/java.js +29 -0
  822. package/dist/core/ingestion/named-bindings/kotlin.d.ts +3 -0
  823. package/dist/core/ingestion/named-bindings/kotlin.js +36 -0
  824. package/dist/core/ingestion/named-bindings/php.d.ts +3 -0
  825. package/dist/core/ingestion/named-bindings/php.js +61 -0
  826. package/dist/core/ingestion/named-bindings/python.d.ts +3 -0
  827. package/dist/core/ingestion/named-bindings/python.js +49 -0
  828. package/dist/core/ingestion/named-bindings/rust.d.ts +3 -0
  829. package/dist/core/ingestion/named-bindings/rust.js +66 -0
  830. package/dist/core/ingestion/named-bindings/types.d.ts +16 -0
  831. package/dist/core/ingestion/named-bindings/types.js +6 -0
  832. package/dist/core/ingestion/named-bindings/typescript.d.ts +3 -0
  833. package/dist/core/ingestion/named-bindings/typescript.js +58 -0
  834. package/dist/core/ingestion/parsing-processor.d.ts +60 -0
  835. package/dist/core/ingestion/parsing-processor.js +627 -0
  836. package/dist/core/ingestion/pipeline-phases/cobol.d.ts +16 -0
  837. package/dist/core/ingestion/pipeline-phases/cobol.js +46 -0
  838. package/dist/core/ingestion/pipeline-phases/communities.d.ts +16 -0
  839. package/dist/core/ingestion/pipeline-phases/communities.js +63 -0
  840. package/dist/core/ingestion/pipeline-phases/cross-file-impl.d.ts +17 -0
  841. package/dist/core/ingestion/pipeline-phases/cross-file-impl.js +157 -0
  842. package/dist/core/ingestion/pipeline-phases/cross-file.d.ts +37 -0
  843. package/dist/core/ingestion/pipeline-phases/cross-file.js +64 -0
  844. package/dist/core/ingestion/pipeline-phases/index.d.ts +22 -0
  845. package/dist/core/ingestion/pipeline-phases/index.js +23 -0
  846. package/dist/core/ingestion/pipeline-phases/markdown.d.ts +17 -0
  847. package/dist/core/ingestion/pipeline-phases/markdown.js +34 -0
  848. package/dist/core/ingestion/pipeline-phases/mro.d.ts +18 -0
  849. package/dist/core/ingestion/pipeline-phases/mro.js +37 -0
  850. package/dist/core/ingestion/pipeline-phases/orm-extraction.d.ts +22 -0
  851. package/dist/core/ingestion/pipeline-phases/orm-extraction.js +92 -0
  852. package/dist/core/ingestion/pipeline-phases/orm.d.ts +15 -0
  853. package/dist/core/ingestion/pipeline-phases/orm.js +75 -0
  854. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +63 -0
  855. package/dist/core/ingestion/pipeline-phases/parse-impl.js +567 -0
  856. package/dist/core/ingestion/pipeline-phases/parse.d.ts +88 -0
  857. package/dist/core/ingestion/pipeline-phases/parse.js +33 -0
  858. package/dist/core/ingestion/pipeline-phases/processes.d.ts +16 -0
  859. package/dist/core/ingestion/pipeline-phases/processes.js +149 -0
  860. package/dist/core/ingestion/pipeline-phases/routes.d.ts +21 -0
  861. package/dist/core/ingestion/pipeline-phases/routes.js +244 -0
  862. package/dist/core/ingestion/pipeline-phases/runner.d.ts +22 -0
  863. package/dist/core/ingestion/pipeline-phases/runner.js +204 -0
  864. package/dist/core/ingestion/pipeline-phases/scan.d.ts +21 -0
  865. package/dist/core/ingestion/pipeline-phases/scan.js +46 -0
  866. package/dist/core/ingestion/pipeline-phases/structure.d.ts +27 -0
  867. package/dist/core/ingestion/pipeline-phases/structure.js +35 -0
  868. package/dist/core/ingestion/pipeline-phases/tools.d.ts +21 -0
  869. package/dist/core/ingestion/pipeline-phases/tools.js +86 -0
  870. package/dist/core/ingestion/pipeline-phases/types.d.ts +79 -0
  871. package/dist/core/ingestion/pipeline-phases/types.js +37 -0
  872. package/dist/core/ingestion/pipeline-phases/wildcard-synthesis.d.ts +70 -0
  873. package/dist/core/ingestion/pipeline-phases/wildcard-synthesis.js +312 -0
  874. package/dist/core/ingestion/pipeline.d.ts +49 -0
  875. package/dist/core/ingestion/pipeline.js +89 -0
  876. package/dist/core/ingestion/process-processor.d.ts +51 -0
  877. package/dist/core/ingestion/process-processor.js +318 -0
  878. package/dist/core/ingestion/registry-primary-flag.d.ts +88 -0
  879. package/dist/core/ingestion/registry-primary-flag.js +117 -0
  880. package/dist/core/ingestion/resolve-references.d.ts +63 -0
  881. package/dist/core/ingestion/resolve-references.js +175 -0
  882. package/dist/core/ingestion/route-extractors/expo.d.ts +1 -0
  883. package/dist/core/ingestion/route-extractors/expo.js +36 -0
  884. package/dist/core/ingestion/route-extractors/middleware.d.ts +47 -0
  885. package/dist/core/ingestion/route-extractors/middleware.js +167 -0
  886. package/dist/core/ingestion/route-extractors/nextjs.d.ts +3 -0
  887. package/dist/core/ingestion/route-extractors/nextjs.js +76 -0
  888. package/dist/core/ingestion/route-extractors/php.d.ts +7 -0
  889. package/dist/core/ingestion/route-extractors/php.js +22 -0
  890. package/dist/core/ingestion/route-extractors/response-shapes.d.ts +20 -0
  891. package/dist/core/ingestion/route-extractors/response-shapes.js +294 -0
  892. package/dist/core/ingestion/scope-extractor-bridge.d.ts +35 -0
  893. package/dist/core/ingestion/scope-extractor-bridge.js +49 -0
  894. package/dist/core/ingestion/scope-extractor.d.ts +86 -0
  895. package/dist/core/ingestion/scope-extractor.js +772 -0
  896. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +558 -0
  897. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +250 -0
  898. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +43 -0
  899. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +79 -0
  900. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +57 -0
  901. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +142 -0
  902. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +17 -0
  903. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +46 -0
  904. package/dist/core/ingestion/scope-resolution/graph-bridge/method-dispatch.d.ts +19 -0
  905. package/dist/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +40 -0
  906. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +37 -0
  907. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +118 -0
  908. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +38 -0
  909. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +73 -0
  910. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +42 -0
  911. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +467 -0
  912. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +53 -0
  913. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +251 -0
  914. package/dist/core/ingestion/scope-resolution/passes/imported-return-types.d.ts +75 -0
  915. package/dist/core/ingestion/scope-resolution/passes/imported-return-types.js +202 -0
  916. package/dist/core/ingestion/scope-resolution/passes/mro.d.ts +42 -0
  917. package/dist/core/ingestion/scope-resolution/passes/mro.js +102 -0
  918. package/dist/core/ingestion/scope-resolution/passes/overload-narrowing.d.ts +30 -0
  919. package/dist/core/ingestion/scope-resolution/passes/overload-narrowing.js +81 -0
  920. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +46 -0
  921. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +377 -0
  922. package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +47 -0
  923. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +152 -0
  924. package/dist/core/ingestion/scope-resolution/pipeline/reconcile-ownership.d.ts +68 -0
  925. package/dist/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +125 -0
  926. package/dist/core/ingestion/scope-resolution/pipeline/registry.d.ts +17 -0
  927. package/dist/core/ingestion/scope-resolution/pipeline/registry.js +31 -0
  928. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +91 -0
  929. package/dist/core/ingestion/scope-resolution/pipeline/run.js +218 -0
  930. package/dist/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.d.ts +39 -0
  931. package/dist/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +65 -0
  932. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +36 -0
  933. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +58 -0
  934. package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +170 -0
  935. package/dist/core/ingestion/scope-resolution/scope/walkers.js +447 -0
  936. package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +52 -0
  937. package/dist/core/ingestion/scope-resolution/workspace-index.js +61 -0
  938. package/dist/core/ingestion/shadow-harness.d.ts +113 -0
  939. package/dist/core/ingestion/shadow-harness.js +148 -0
  940. package/dist/core/ingestion/structure-processor.d.ts +2 -0
  941. package/dist/core/ingestion/structure-processor.js +36 -0
  942. package/dist/core/ingestion/tree-sitter-queries.d.ts +16 -0
  943. package/dist/core/ingestion/tree-sitter-queries.js +1497 -0
  944. package/dist/core/ingestion/type-env.d.ts +86 -0
  945. package/dist/core/ingestion/type-env.js +1129 -0
  946. package/dist/core/ingestion/type-extractors/c-cpp.d.ts +7 -0
  947. package/dist/core/ingestion/type-extractors/c-cpp.js +532 -0
  948. package/dist/core/ingestion/type-extractors/csharp.d.ts +2 -0
  949. package/dist/core/ingestion/type-extractors/csharp.js +583 -0
  950. package/dist/core/ingestion/type-extractors/dart.d.ts +15 -0
  951. package/dist/core/ingestion/type-extractors/dart.js +369 -0
  952. package/dist/core/ingestion/type-extractors/go.d.ts +2 -0
  953. package/dist/core/ingestion/type-extractors/go.js +513 -0
  954. package/dist/core/ingestion/type-extractors/jvm.d.ts +3 -0
  955. package/dist/core/ingestion/type-extractors/jvm.js +856 -0
  956. package/dist/core/ingestion/type-extractors/php.d.ts +2 -0
  957. package/dist/core/ingestion/type-extractors/php.js +534 -0
  958. package/dist/core/ingestion/type-extractors/python.d.ts +2 -0
  959. package/dist/core/ingestion/type-extractors/python.js +474 -0
  960. package/dist/core/ingestion/type-extractors/ruby.d.ts +2 -0
  961. package/dist/core/ingestion/type-extractors/ruby.js +377 -0
  962. package/dist/core/ingestion/type-extractors/rust.d.ts +2 -0
  963. package/dist/core/ingestion/type-extractors/rust.js +515 -0
  964. package/dist/core/ingestion/type-extractors/shared.d.ts +131 -0
  965. package/dist/core/ingestion/type-extractors/shared.js +796 -0
  966. package/dist/core/ingestion/type-extractors/swift.d.ts +2 -0
  967. package/dist/core/ingestion/type-extractors/swift.js +487 -0
  968. package/dist/core/ingestion/type-extractors/types.d.ts +172 -0
  969. package/dist/core/ingestion/type-extractors/types.js +1 -0
  970. package/dist/core/ingestion/type-extractors/typescript.d.ts +2 -0
  971. package/dist/core/ingestion/type-extractors/typescript.js +661 -0
  972. package/dist/core/ingestion/utils/ast-helpers.d.ts +102 -0
  973. package/dist/core/ingestion/utils/ast-helpers.js +561 -0
  974. package/dist/core/ingestion/utils/call-analysis.d.ts +75 -0
  975. package/dist/core/ingestion/utils/call-analysis.js +574 -0
  976. package/dist/core/ingestion/utils/env.d.ts +20 -0
  977. package/dist/core/ingestion/utils/env.js +24 -0
  978. package/dist/core/ingestion/utils/event-loop.d.ts +5 -0
  979. package/dist/core/ingestion/utils/event-loop.js +5 -0
  980. package/dist/core/ingestion/utils/graph-sort.d.ts +58 -0
  981. package/dist/core/ingestion/utils/graph-sort.js +100 -0
  982. package/dist/core/ingestion/utils/max-file-size.d.ts +20 -0
  983. package/dist/core/ingestion/utils/max-file-size.js +53 -0
  984. package/dist/core/ingestion/utils/method-props.d.ts +32 -0
  985. package/dist/core/ingestion/utils/method-props.js +147 -0
  986. package/dist/core/ingestion/utils/ruby-self-call.d.ts +52 -0
  987. package/dist/core/ingestion/utils/ruby-self-call.js +59 -0
  988. package/dist/core/ingestion/utils/verbose.d.ts +1 -0
  989. package/dist/core/ingestion/utils/verbose.js +7 -0
  990. package/dist/core/ingestion/variable-extractors/configs/c-cpp.d.ts +3 -0
  991. package/dist/core/ingestion/variable-extractors/configs/c-cpp.js +81 -0
  992. package/dist/core/ingestion/variable-extractors/configs/csharp.d.ts +9 -0
  993. package/dist/core/ingestion/variable-extractors/configs/csharp.js +63 -0
  994. package/dist/core/ingestion/variable-extractors/configs/dart.d.ts +2 -0
  995. package/dist/core/ingestion/variable-extractors/configs/dart.js +94 -0
  996. package/dist/core/ingestion/variable-extractors/configs/go.d.ts +2 -0
  997. package/dist/core/ingestion/variable-extractors/configs/go.js +83 -0
  998. package/dist/core/ingestion/variable-extractors/configs/jvm.d.ts +18 -0
  999. package/dist/core/ingestion/variable-extractors/configs/jvm.js +115 -0
  1000. package/dist/core/ingestion/variable-extractors/configs/php.d.ts +14 -0
  1001. package/dist/core/ingestion/variable-extractors/configs/php.js +58 -0
  1002. package/dist/core/ingestion/variable-extractors/configs/python.d.ts +2 -0
  1003. package/dist/core/ingestion/variable-extractors/configs/python.js +101 -0
  1004. package/dist/core/ingestion/variable-extractors/configs/ruby.d.ts +11 -0
  1005. package/dist/core/ingestion/variable-extractors/configs/ruby.js +52 -0
  1006. package/dist/core/ingestion/variable-extractors/configs/rust.d.ts +2 -0
  1007. package/dist/core/ingestion/variable-extractors/configs/rust.js +76 -0
  1008. package/dist/core/ingestion/variable-extractors/configs/swift.d.ts +2 -0
  1009. package/dist/core/ingestion/variable-extractors/configs/swift.js +88 -0
  1010. package/dist/core/ingestion/variable-extractors/configs/typescript-javascript.d.ts +3 -0
  1011. package/dist/core/ingestion/variable-extractors/configs/typescript-javascript.js +83 -0
  1012. package/dist/core/ingestion/variable-extractors/generic.d.ts +5 -0
  1013. package/dist/core/ingestion/variable-extractors/generic.js +80 -0
  1014. package/dist/core/ingestion/variable-types.d.ts +82 -0
  1015. package/dist/core/ingestion/variable-types.js +2 -0
  1016. package/dist/core/ingestion/vue-sfc-extractor.d.ts +44 -0
  1017. package/dist/core/ingestion/vue-sfc-extractor.js +111 -0
  1018. package/dist/core/ingestion/workers/parse-worker.d.ts +199 -0
  1019. package/dist/core/ingestion/workers/parse-worker.js +1940 -0
  1020. package/dist/core/ingestion/workers/worker-pool.d.ts +23 -0
  1021. package/dist/core/ingestion/workers/worker-pool.js +380 -0
  1022. package/dist/core/lbug/csv-generator.d.ts +33 -0
  1023. package/dist/core/lbug/csv-generator.js +463 -0
  1024. package/dist/core/lbug/extension-loader.d.ts +86 -0
  1025. package/dist/core/lbug/extension-loader.js +186 -0
  1026. package/dist/core/lbug/lbug-adapter.d.ts +243 -0
  1027. package/dist/core/lbug/lbug-adapter.js +1377 -0
  1028. package/dist/core/lbug/lbug-config.d.ts +102 -0
  1029. package/dist/core/lbug/lbug-config.js +303 -0
  1030. package/dist/core/lbug/pool-adapter.d.ts +90 -0
  1031. package/dist/core/lbug/pool-adapter.js +592 -0
  1032. package/dist/core/lbug/schema.d.ts +62 -0
  1033. package/dist/core/lbug/schema.js +495 -0
  1034. package/dist/core/logger.d.ts +125 -0
  1035. package/dist/core/logger.js +323 -0
  1036. package/dist/core/platform/capabilities.d.ts +24 -0
  1037. package/dist/core/platform/capabilities.js +54 -0
  1038. package/dist/core/run-analyze.d.ts +92 -0
  1039. package/dist/core/run-analyze.js +672 -0
  1040. package/dist/core/search/bm25-index.d.ts +29 -0
  1041. package/dist/core/search/bm25-index.js +118 -0
  1042. package/dist/core/search/fts-indexes.d.ts +1 -0
  1043. package/dist/core/search/fts-indexes.js +7 -0
  1044. package/dist/core/search/fts-schema.d.ts +6 -0
  1045. package/dist/core/search/fts-schema.js +7 -0
  1046. package/dist/core/search/hybrid-search.d.ts +53 -0
  1047. package/dist/core/search/hybrid-search.js +136 -0
  1048. package/dist/core/search/phase-timer.d.ts +72 -0
  1049. package/dist/core/search/phase-timer.js +106 -0
  1050. package/dist/core/tree-sitter/parser-loader.d.ts +8 -0
  1051. package/dist/core/tree-sitter/parser-loader.js +189 -0
  1052. package/dist/core/tree-sitter/safe-parse.d.ts +6 -0
  1053. package/dist/core/tree-sitter/safe-parse.js +32 -0
  1054. package/dist/core/wiki/cursor-client.d.ts +31 -0
  1055. package/dist/core/wiki/cursor-client.js +123 -0
  1056. package/dist/core/wiki/generator.d.ts +129 -0
  1057. package/dist/core/wiki/generator.js +899 -0
  1058. package/dist/core/wiki/graph-queries.d.ts +84 -0
  1059. package/dist/core/wiki/graph-queries.js +244 -0
  1060. package/dist/core/wiki/html-viewer.d.ts +10 -0
  1061. package/dist/core/wiki/html-viewer.js +304 -0
  1062. package/dist/core/wiki/llm-client.d.ts +83 -0
  1063. package/dist/core/wiki/llm-client.js +267 -0
  1064. package/dist/core/wiki/mermaid-sanitizer.d.ts +2 -0
  1065. package/dist/core/wiki/mermaid-sanitizer.js +100 -0
  1066. package/dist/core/wiki/prompts.d.ts +53 -0
  1067. package/dist/core/wiki/prompts.js +181 -0
  1068. package/dist/lib/utils.d.ts +1 -0
  1069. package/dist/lib/utils.js +3 -0
  1070. package/dist/mcp/compatible-stdio-transport.d.ts +25 -0
  1071. package/dist/mcp/compatible-stdio-transport.js +206 -0
  1072. package/dist/mcp/core/embedder.d.ts +27 -0
  1073. package/dist/mcp/core/embedder.js +145 -0
  1074. package/dist/mcp/core/lbug-adapter.d.ts +11 -0
  1075. package/dist/mcp/core/lbug-adapter.js +11 -0
  1076. package/dist/mcp/local/local-backend.d.ts +356 -0
  1077. package/dist/mcp/local/local-backend.js +3251 -0
  1078. package/dist/mcp/resources.d.ts +62 -0
  1079. package/dist/mcp/resources.js +512 -0
  1080. package/dist/mcp/server.d.ts +23 -0
  1081. package/dist/mcp/server.js +314 -0
  1082. package/dist/mcp/staleness.d.ts +5 -0
  1083. package/dist/mcp/staleness.js +4 -0
  1084. package/dist/mcp/stdio-capture.d.ts +40 -0
  1085. package/dist/mcp/stdio-capture.js +53 -0
  1086. package/dist/mcp/stdio-context.d.ts +47 -0
  1087. package/dist/mcp/stdio-context.js +145 -0
  1088. package/dist/mcp/tools.d.ts +29 -0
  1089. package/dist/mcp/tools.js +506 -0
  1090. package/dist/server/analyze-job.d.ts +55 -0
  1091. package/dist/server/analyze-job.js +150 -0
  1092. package/dist/server/analyze-worker.d.ts +13 -0
  1093. package/dist/server/analyze-worker.js +59 -0
  1094. package/dist/server/api.d.ts +72 -0
  1095. package/dist/server/api.js +1638 -0
  1096. package/dist/server/git-clone.d.ts +99 -0
  1097. package/dist/server/git-clone.js +397 -0
  1098. package/dist/server/mcp-http.d.ts +13 -0
  1099. package/dist/server/mcp-http.js +101 -0
  1100. package/dist/server/validation.d.ts +98 -0
  1101. package/dist/server/validation.js +142 -0
  1102. package/dist/storage/file-hash.d.ts +47 -0
  1103. package/dist/storage/file-hash.js +86 -0
  1104. package/dist/storage/git.d.ts +148 -0
  1105. package/dist/storage/git.js +346 -0
  1106. package/dist/storage/parse-cache.d.ts +67 -0
  1107. package/dist/storage/parse-cache.js +182 -0
  1108. package/dist/storage/repo-manager.d.ts +467 -0
  1109. package/dist/storage/repo-manager.js +804 -0
  1110. package/dist/types/pipeline.d.ts +18 -0
  1111. package/dist/types/pipeline.js +1 -0
  1112. package/hooks/claude/arc-hook.cjs +334 -0
  1113. package/hooks/claude/hook-lock.cjs +119 -0
  1114. package/hooks/claude/pre-tool-use.sh +79 -0
  1115. package/hooks/claude/session-start.sh +42 -0
  1116. package/package.json +122 -0
  1117. package/scripts/bench-scope-resolution.ts +134 -0
  1118. package/scripts/build-tree-sitter-dart.cjs +53 -0
  1119. package/scripts/build-tree-sitter-proto.cjs +93 -0
  1120. package/scripts/build.js +99 -0
  1121. package/scripts/ci-list-migrated-languages.ts +24 -0
  1122. package/scripts/install-duckdb-extension.mjs +48 -0
  1123. package/skills/arc-cli.md +83 -0
  1124. package/skills/arc-debugging.md +89 -0
  1125. package/skills/arc-exploring.md +78 -0
  1126. package/skills/arc-guide.md +64 -0
  1127. package/skills/arc-impact-analysis.md +97 -0
  1128. package/skills/arc-pr-review.md +163 -0
  1129. package/skills/arc-refactoring.md +121 -0
  1130. package/vendor/leiden/index.cjs +355 -0
  1131. package/vendor/leiden/utils.cjs +392 -0
  1132. package/vendor/tree-sitter-dart/README.md +18 -0
  1133. package/vendor/tree-sitter-dart/binding.gyp +31 -0
  1134. package/vendor/tree-sitter-dart/bindings/node/binding.cc +20 -0
  1135. package/vendor/tree-sitter-dart/bindings/node/index.d.ts +28 -0
  1136. package/vendor/tree-sitter-dart/bindings/node/index.js +7 -0
  1137. package/vendor/tree-sitter-dart/grammar.js +2895 -0
  1138. package/vendor/tree-sitter-dart/package.json +18 -0
  1139. package/vendor/tree-sitter-dart/queries/highlights.scm +246 -0
  1140. package/vendor/tree-sitter-dart/queries/tags.scm +92 -0
  1141. package/vendor/tree-sitter-dart/queries/test.scm +1 -0
  1142. package/vendor/tree-sitter-dart/src/grammar.json +12459 -0
  1143. package/vendor/tree-sitter-dart/src/node-types.json +15055 -0
  1144. package/vendor/tree-sitter-dart/src/parser.c +196127 -0
  1145. package/vendor/tree-sitter-dart/src/scanner.c +130 -0
  1146. package/vendor/tree-sitter-dart/src/tree_sitter/alloc.h +54 -0
  1147. package/vendor/tree-sitter-dart/src/tree_sitter/array.h +290 -0
  1148. package/vendor/tree-sitter-dart/src/tree_sitter/parser.h +265 -0
  1149. package/vendor/tree-sitter-proto/binding.gyp +30 -0
  1150. package/vendor/tree-sitter-proto/bindings/node/binding.cc +20 -0
  1151. package/vendor/tree-sitter-proto/bindings/node/index.d.ts +28 -0
  1152. package/vendor/tree-sitter-proto/bindings/node/index.js +7 -0
  1153. package/vendor/tree-sitter-proto/package.json +12 -0
  1154. package/vendor/tree-sitter-proto/src/node-types.json +1145 -0
  1155. package/vendor/tree-sitter-proto/src/parser.c +10149 -0
  1156. package/vendor/tree-sitter-proto/src/tree_sitter/alloc.h +54 -0
  1157. package/vendor/tree-sitter-proto/src/tree_sitter/array.h +291 -0
  1158. package/vendor/tree-sitter-proto/src/tree_sitter/parser.h +266 -0
  1159. package/vendor/tree-sitter-swift/LICENSE +21 -0
  1160. package/vendor/tree-sitter-swift/README.md +139 -0
  1161. package/vendor/tree-sitter-swift/bindings/node/index.d.ts +28 -0
  1162. package/vendor/tree-sitter-swift/bindings/node/index.js +7 -0
  1163. package/vendor/tree-sitter-swift/package.json +28 -0
  1164. package/vendor/tree-sitter-swift/prebuilds/darwin-arm64/tree-sitter-swift.node +0 -0
  1165. package/vendor/tree-sitter-swift/prebuilds/darwin-x64/tree-sitter-swift.node +0 -0
  1166. package/vendor/tree-sitter-swift/prebuilds/linux-arm64/tree-sitter-swift.node +0 -0
  1167. package/vendor/tree-sitter-swift/prebuilds/linux-x64/tree-sitter-swift.node +0 -0
  1168. package/vendor/tree-sitter-swift/prebuilds/win32-arm64/tree-sitter-swift.node +0 -0
  1169. package/vendor/tree-sitter-swift/prebuilds/win32-x64/tree-sitter-swift.node +0 -0
  1170. package/vendor/tree-sitter-swift/src/node-types.json +30694 -0
  1171. package/web/assets/__vite-browser-external-CLwMvL_q.js +1 -0
  1172. package/web/assets/agent-DaYmiVrk.js +601 -0
  1173. package/web/assets/architecture-7EHR7CIX-6QZW5X65-aGTGQQQG.js +1 -0
  1174. package/web/assets/architectureDiagram-UL44E2DR-613o-OfM.js +36 -0
  1175. package/web/assets/blockDiagram-7IZFK4PR-BBJRt4vF.js +132 -0
  1176. package/web/assets/c4Diagram-Y2BXMSZH-BhR2CErx.js +10 -0
  1177. package/web/assets/chunk-3SSMPTDK-DWfEAoKy.js +321 -0
  1178. package/web/assets/chunk-6764PJDD-NOXEgi3n.js +1 -0
  1179. package/web/assets/chunk-AZZRMDJM-DVvcxwI7.js +15 -0
  1180. package/web/assets/chunk-JQRUD6KW-CQgkrimK.js +1 -0
  1181. package/web/assets/chunk-KGYTTC2M-DxOdSoAJ.js +161 -0
  1182. package/web/assets/chunk-KRXBNO2N-BlnQTnxv.js +1 -0
  1183. package/web/assets/chunk-LCXTWHL2-Dhf_u-1F.js +231 -0
  1184. package/web/assets/chunk-LII3EMHJ-Cb3HLCZX.js +1 -0
  1185. package/web/assets/chunk-RG4AUYOV-DLCfNede.js +206 -0
  1186. package/web/assets/chunk-T5OCTHI4-B0CGAG7q.js +1 -0
  1187. package/web/assets/chunk-W44A43WB-ZyrAMwtT.js +1 -0
  1188. package/web/assets/chunk-ZXARS5L4-B0TJPmj5.js +1 -0
  1189. package/web/assets/classDiagram-KGZ6W3CR-CvSnsfJD.js +1 -0
  1190. package/web/assets/classDiagram-v2-72OJOZXJ-CvSnsfJD.js +1 -0
  1191. package/web/assets/context-builder-BREgwful.js +15 -0
  1192. package/web/assets/cose-bilkent-UX7MHV2Q-BsPIaeag.js +1 -0
  1193. package/web/assets/dagre-ND4H6XIP-CV4l9vOZ.js +4 -0
  1194. package/web/assets/diagram-3NCE3AQN-9kSzEbS8.js +43 -0
  1195. package/web/assets/diagram-GF46GFSD-qRvqbex6.js +24 -0
  1196. package/web/assets/diagram-HNR7UZ2L-Dj_ye4Ua.js +3 -0
  1197. package/web/assets/diagram-QXG6HAR7-COwBV6B0.js +24 -0
  1198. package/web/assets/diagram-WEQXMOUZ-C9xjn5dU.js +10 -0
  1199. package/web/assets/erDiagram-L5TCEMPS-fRp0t1Yd.js +85 -0
  1200. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-BR0Ygfrw.js +1 -0
  1201. package/web/assets/flowDiagram-H6V6AXG4-Ccr8FDLD.js +162 -0
  1202. package/web/assets/ganttDiagram-JCBTUEKG-DfBPqAGN.js +292 -0
  1203. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-CYihBz6Z.js +1 -0
  1204. package/web/assets/gitGraphDiagram-S2ZK5IYY-CHvG_UQ0.js +106 -0
  1205. package/web/assets/index-B7cw1L6-.css +2 -0
  1206. package/web/assets/index-CJJQgfSH.js +886 -0
  1207. package/web/assets/info-J43DQDTF-KCYPFFUO-BmmoeX4D.js +1 -0
  1208. package/web/assets/infoDiagram-3YFTVSEB-C7cMy-GP.js +2 -0
  1209. package/web/assets/ishikawaDiagram-BNXS4ZKH-C80yCPYi.js +70 -0
  1210. package/web/assets/journeyDiagram-M6C3CM3L-BHxH1zjE.js +139 -0
  1211. package/web/assets/kanban-definition-75IXJCU3-DNZo1hOE.js +89 -0
  1212. package/web/assets/katex-K3KEBU37-CbyuvTf1.js +261 -0
  1213. package/web/assets/mindmap-definition-2TDM6QVE-Dpgl3Elt.js +96 -0
  1214. package/web/assets/packet-YPE3B663-LP52Z2RK-7JAqDnUy.js +1 -0
  1215. package/web/assets/pie-LRSECV5Y-TCRJHUBD-Bv9vE7io.js +1 -0
  1216. package/web/assets/pieDiagram-CU6KROY3-BW0mr0ek.js +30 -0
  1217. package/web/assets/quadrantDiagram-VICAPDV7-C1dCMBbk.js +7 -0
  1218. package/web/assets/radar-GUYGQ44K-RDLRG3WG-dtZpcOZd.js +1 -0
  1219. package/web/assets/requirementDiagram-JXO7QTGE-Dyqqny4j.js +84 -0
  1220. package/web/assets/sankeyDiagram-URQDO5SZ-B3FGr5SL.js +40 -0
  1221. package/web/assets/sequenceDiagram-VS2MUI6T-B4LlGP9C.js +162 -0
  1222. package/web/assets/stateDiagram-7D4R322I-V9F-klBP.js +1 -0
  1223. package/web/assets/stateDiagram-v2-36443NZ5-CKDYYzqR.js +1 -0
  1224. package/web/assets/timeline-definition-O6YCAMPW-CX2WjkZA.js +120 -0
  1225. package/web/assets/treeView-BLDUP644-QA4HXRO3-BQaKTdhr.js +1 -0
  1226. package/web/assets/treemap-LRROVOQU-LLAWBHMP-Bqlxdyrq.js +1 -0
  1227. package/web/assets/vennDiagram-MWXL3ELB-BxZPYqOF.js +34 -0
  1228. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-dofeprUr.js +1 -0
  1229. package/web/assets/wardleyDiagram-CUQ6CDDI-BLdJJYkV.js +78 -0
  1230. package/web/assets/xychartDiagram-N2JHSOCM-DqDgigLa.js +7 -0
  1231. package/web/index.html +19 -0
@@ -0,0 +1,1129 @@
1
+ import { FUNCTION_NODE_TYPES, CLASS_CONTAINER_TYPES, genericFuncName, } from './utils/ast-helpers.js';
2
+ import { CALL_EXPRESSION_TYPES } from './utils/call-analysis.js';
3
+ import { TYPED_PARAMETER_TYPES } from './type-extractors/shared.js';
4
+ import { getProvider } from './languages/index.js';
5
+ import { extractSimpleTypeName, extractVarName, stripNullable, extractReturnTypeName, } from './type-extractors/shared.js';
6
+ import { logger } from '../logger.js';
7
+ /** File-level scope key */
8
+ const FILE_SCOPE = '';
9
+ /** Shared empty map for files with no file-scope bindings. */
10
+ /**
11
+ * Create a fresh empty Map for the "no file-scope bindings" fallback.
12
+ *
13
+ * **Why not a shared sentinel**: we previously used a module-level
14
+ * `const EMPTY_FILE_SCOPE = new Map()` typed as `ReadonlyMap` and shared
15
+ * across every TypeEnv instance. That was a latent singleton-poisoning
16
+ * footgun: any caller that did `(fileScope() as Map).set(...)` — or any
17
+ * future refactor that widened the return type — would silently corrupt
18
+ * every subsequent "empty" return for the process lifetime. A Proxy
19
+ * wrapper was considered but broke Map's internal-slot methods (`.size`,
20
+ * iteration protocol). Allocating a fresh empty Map per call is a few
21
+ * bytes per file — immediately GC'd, no measurable cost even at 10k files
22
+ * — and eliminates the shared-mutation hazard entirely.
23
+ */
24
+ const emptyFileScope = () => new Map();
25
+ /** Fallback for languages where class names aren't in a 'name' field (e.g. Kotlin uses type_identifier). */
26
+ const findTypeIdentifierChild = (node) => {
27
+ for (let i = 0; i < node.childCount; i++) {
28
+ const child = node.child(i);
29
+ if (child && child.type === 'type_identifier')
30
+ return child;
31
+ }
32
+ return null;
33
+ };
34
+ /** AST node types that represent mutually exclusive branch containers for pattern bindings.
35
+ * Includes both multi-arm pattern-match branches AND if-statement bodies for null-check narrowing. */
36
+ const NARROWING_BRANCH_TYPES = new Set([
37
+ 'when_entry', // Kotlin when
38
+ 'switch_block_label', // Java switch (enhanced)
39
+ 'if_statement', // TS/JS, Java, C/C++
40
+ 'if_expression', // Kotlin (if is an expression)
41
+ 'statement_block', // TS/JS: { ... } body of if
42
+ 'control_structure_body', // Kotlin: body of if
43
+ ]);
44
+ /** Walk up the AST from a pattern node to find the enclosing branch container. */
45
+ const findNarrowingBranchScope = (node) => {
46
+ let current = node.parent;
47
+ while (current) {
48
+ if (NARROWING_BRANCH_TYPES.has(current.type))
49
+ return current;
50
+ if (FUNCTION_NODE_TYPES.has(current.type))
51
+ return undefined;
52
+ current = current.parent;
53
+ }
54
+ return undefined;
55
+ };
56
+ /** Bare nullable keywords that fastStripNullable must reject. */
57
+ const FAST_NULLABLE_KEYWORDS = new Set(['null', 'undefined', 'void', 'None', 'nil']);
58
+ /**
59
+ * Fast-path nullable check: 90%+ of type names are simple identifiers (e.g. "User")
60
+ * that don't need the full stripNullable parse. Only call stripNullable when the
61
+ * string contains nullable markers ('|' for union types, '?' for nullable suffix).
62
+ */
63
+ const fastStripNullable = (typeName) => {
64
+ if (FAST_NULLABLE_KEYWORDS.has(typeName))
65
+ return undefined;
66
+ return typeName.indexOf('|') === -1 && typeName.indexOf('?') === -1
67
+ ? typeName
68
+ : stripNullable(typeName);
69
+ };
70
+ /** Implementation of the lookup logic — shared between TypeEnvironment and the legacy export. */
71
+ const lookupInEnv = (env, varName, callNode, patternOverrides, enclosingFunctionFinder, extractFunctionNameHook) => {
72
+ // Self/this receiver: resolve to enclosing class name via AST walk
73
+ if (varName === 'self' || varName === 'this' || varName === '$this') {
74
+ return findEnclosingClassName(callNode);
75
+ }
76
+ // Super/base/parent receiver: resolve to the parent class name via AST walk.
77
+ // Walks up to the enclosing class, then extracts the superclass from its heritage node.
78
+ if (varName === 'super' || varName === 'base' || varName === 'parent') {
79
+ return findEnclosingParentClassName(callNode);
80
+ }
81
+ // Determine the enclosing function scope for the call
82
+ const scopeKey = findEnclosingScopeKey(callNode, enclosingFunctionFinder, extractFunctionNameHook);
83
+ // Check position-indexed pattern overrides first (e.g., Kotlin when/is smart casts).
84
+ // These take priority over flat scopeEnv because they represent per-branch narrowing.
85
+ if (scopeKey && patternOverrides) {
86
+ const varOverrides = patternOverrides.get(scopeKey)?.get(varName);
87
+ if (varOverrides) {
88
+ const pos = callNode.startIndex;
89
+ for (const override of varOverrides) {
90
+ if (pos >= override.rangeStart && pos <= override.rangeEnd) {
91
+ return fastStripNullable(override.typeName);
92
+ }
93
+ }
94
+ }
95
+ }
96
+ // Try function-local scope first
97
+ if (scopeKey) {
98
+ const scopeEnv = env.get(scopeKey);
99
+ if (scopeEnv) {
100
+ const result = scopeEnv.get(varName);
101
+ if (result)
102
+ return fastStripNullable(result);
103
+ }
104
+ }
105
+ // Fall back to file-level scope
106
+ const fileEnv = env.get(FILE_SCOPE);
107
+ const raw = fileEnv?.get(varName);
108
+ return raw ? fastStripNullable(raw) : undefined;
109
+ };
110
+ /** Per-file memoization caches for expensive parent-walk functions.
111
+ * Cleared at the start of each buildTypeEnv call (one call per file). */
112
+ const enclosingClassNameCache = new Map();
113
+ const enclosingParentClassNameCache = new Map();
114
+ /**
115
+ * Walk up the AST from a node to find the enclosing class/module name.
116
+ * Used to resolve `self`/`this` receivers to their containing type.
117
+ * Memoized per-file: cache is cleared at buildTypeEnv entry.
118
+ */
119
+ const findEnclosingClassName = (node) => {
120
+ if (enclosingClassNameCache.has(node))
121
+ return enclosingClassNameCache.get(node);
122
+ let current = node.parent;
123
+ while (current) {
124
+ if (CLASS_CONTAINER_TYPES.has(current.type)) {
125
+ const nameNode = current.childForFieldName('name') ?? findTypeIdentifierChild(current);
126
+ if (nameNode) {
127
+ enclosingClassNameCache.set(node, nameNode.text);
128
+ return nameNode.text;
129
+ }
130
+ }
131
+ current = current.parent;
132
+ }
133
+ enclosingClassNameCache.set(node, undefined);
134
+ return undefined;
135
+ };
136
+ /** Keywords that refer to the current instance across languages. */
137
+ const THIS_RECEIVERS = new Set(['this', 'self', '$this', 'Me']);
138
+ /**
139
+ * If a pending assignment's receiver is this/self/$this/Me, substitute the
140
+ * enclosing class name. Returns the item unchanged for non-receiver kinds
141
+ * or when the receiver is not a this-keyword. Properties are readonly in the
142
+ * discriminated union, so a new object is returned when substitution occurs.
143
+ */
144
+ const substituteThisReceiver = (item, node) => {
145
+ if (item.kind !== 'fieldAccess' && item.kind !== 'methodCallResult')
146
+ return item;
147
+ if (!THIS_RECEIVERS.has(item.receiver))
148
+ return item;
149
+ const className = findEnclosingClassName(node);
150
+ if (!className)
151
+ return item;
152
+ return { ...item, receiver: className };
153
+ };
154
+ /**
155
+ * Walk up the AST to find the enclosing class, then extract its parent class name
156
+ * from the heritage/superclass AST node. Used to resolve `super`/`base`/`parent`.
157
+ *
158
+ * Supported patterns per tree-sitter grammar:
159
+ * - Java/Ruby: `superclass` field → type_identifier/constant
160
+ * - Python: `superclasses` field → argument_list → first identifier
161
+ * - TypeScript/JS: unnamed `class_heritage` child → `extends_clause` → identifier
162
+ * - C#: unnamed `base_list` child → first identifier
163
+ * - PHP: unnamed `base_clause` child → name
164
+ * - Kotlin: unnamed `delegation_specifier` child → constructor_invocation → user_type → type_identifier
165
+ * - C++: unnamed `base_class_clause` child → type_identifier
166
+ * - Swift: unnamed `inheritance_specifier` child → user_type → type_identifier
167
+ */
168
+ const findEnclosingParentClassName = (node) => {
169
+ if (enclosingParentClassNameCache.has(node))
170
+ return enclosingParentClassNameCache.get(node);
171
+ let current = node.parent;
172
+ while (current) {
173
+ if (CLASS_CONTAINER_TYPES.has(current.type)) {
174
+ const result = extractParentClassFromNode(current);
175
+ enclosingParentClassNameCache.set(node, result);
176
+ return result;
177
+ }
178
+ current = current.parent;
179
+ }
180
+ enclosingParentClassNameCache.set(node, undefined);
181
+ return undefined;
182
+ };
183
+ /** Extract the parent/superclass name from a class declaration AST node. */
184
+ const extractParentClassFromNode = (classNode) => {
185
+ // 1. Named fields: Java (superclass), Ruby (superclass), Python (superclasses)
186
+ const superclassNode = classNode.childForFieldName('superclass');
187
+ if (superclassNode) {
188
+ // Java: superclass > type_identifier or generic_type, Ruby: superclass > constant
189
+ const inner = superclassNode.childForFieldName('type') ?? superclassNode.firstNamedChild ?? superclassNode;
190
+ return extractSimpleTypeName(inner) ?? inner.text;
191
+ }
192
+ const superclassesNode = classNode.childForFieldName('superclasses');
193
+ if (superclassesNode) {
194
+ // Python: argument_list with identifiers or attribute nodes (e.g. models.Model)
195
+ const first = superclassesNode.firstNamedChild;
196
+ if (first)
197
+ return extractSimpleTypeName(first) ?? first.text;
198
+ }
199
+ // 2. Unnamed children: walk class node's children looking for heritage nodes
200
+ for (let i = 0; i < classNode.childCount; i++) {
201
+ const child = classNode.child(i);
202
+ if (!child)
203
+ continue;
204
+ switch (child.type) {
205
+ // TypeScript: class_heritage > extends_clause > type_identifier
206
+ // JavaScript: class_heritage > identifier (no extends_clause wrapper)
207
+ case 'class_heritage': {
208
+ for (let j = 0; j < child.childCount; j++) {
209
+ const clause = child.child(j);
210
+ if (clause?.type === 'extends_clause') {
211
+ const typeNode = clause.firstNamedChild;
212
+ if (typeNode)
213
+ return extractSimpleTypeName(typeNode) ?? typeNode.text;
214
+ }
215
+ // JS: direct identifier child (no extends_clause wrapper)
216
+ if (clause?.type === 'identifier' || clause?.type === 'type_identifier') {
217
+ return clause.text;
218
+ }
219
+ }
220
+ break;
221
+ }
222
+ // C#: base_list > identifier or generic_name > identifier
223
+ case 'base_list': {
224
+ const first = child.firstNamedChild;
225
+ if (first) {
226
+ // generic_name wraps the identifier: BaseClass<T>
227
+ if (first.type === 'generic_name') {
228
+ const inner = first.childForFieldName('name') ?? first.firstNamedChild;
229
+ if (inner)
230
+ return inner.text;
231
+ }
232
+ return first.text;
233
+ }
234
+ break;
235
+ }
236
+ // PHP: base_clause > name
237
+ case 'base_clause': {
238
+ const name = child.firstNamedChild;
239
+ if (name)
240
+ return name.text;
241
+ break;
242
+ }
243
+ // C++: base_class_clause > type_identifier (with optional access_specifier before it)
244
+ case 'base_class_clause': {
245
+ for (let j = 0; j < child.childCount; j++) {
246
+ const inner = child.child(j);
247
+ if (inner?.type === 'type_identifier')
248
+ return inner.text;
249
+ }
250
+ break;
251
+ }
252
+ // Kotlin: delegation_specifier > constructor_invocation > user_type > type_identifier
253
+ case 'delegation_specifier': {
254
+ const delegate = child.firstNamedChild;
255
+ if (delegate?.type === 'constructor_invocation') {
256
+ const userType = delegate.firstNamedChild;
257
+ if (userType?.type === 'user_type') {
258
+ const typeId = userType.firstNamedChild;
259
+ if (typeId)
260
+ return typeId.text;
261
+ }
262
+ }
263
+ // Also handle plain user_type (interface conformance without parentheses)
264
+ if (delegate?.type === 'user_type') {
265
+ const typeId = delegate.firstNamedChild;
266
+ if (typeId)
267
+ return typeId.text;
268
+ }
269
+ break;
270
+ }
271
+ // Swift: inheritance_specifier > user_type > type_identifier
272
+ case 'inheritance_specifier': {
273
+ const userType = child.childForFieldName('inherits_from') ?? child.firstNamedChild;
274
+ if (userType?.type === 'user_type') {
275
+ const typeId = userType.firstNamedChild;
276
+ if (typeId)
277
+ return typeId.text;
278
+ }
279
+ break;
280
+ }
281
+ }
282
+ }
283
+ return undefined;
284
+ };
285
+ /** Find the enclosing function name for scope lookup.
286
+ * When an `enclosingFunctionFinder` hook is provided (from the language provider),
287
+ * it is consulted for each ancestor before the default FUNCTION_NODE_TYPES check.
288
+ * This handles languages like Dart where the function body is a sibling of the
289
+ * signature instead of a child. */
290
+ const findEnclosingScopeKey = (node, enclosingFunctionFinder, extractFunctionNameHook) => {
291
+ let current = node.parent;
292
+ while (current) {
293
+ if (FUNCTION_NODE_TYPES.has(current.type)) {
294
+ const funcName = extractFunctionNameHook?.(current)?.funcName ?? genericFuncName(current);
295
+ if (funcName)
296
+ return `${funcName}@${current.startIndex}`;
297
+ }
298
+ // Language-specific hook (e.g., Dart function_body → sibling function_signature)
299
+ if (enclosingFunctionFinder) {
300
+ const result = enclosingFunctionFinder(current);
301
+ if (result) {
302
+ const sigNode = current.previousSibling;
303
+ const startIdx = sigNode?.startIndex ?? current.startIndex;
304
+ return `${result.funcName}@${startIdx}`;
305
+ }
306
+ }
307
+ current = current.parent;
308
+ }
309
+ return undefined;
310
+ };
311
+ /**
312
+ * Create a lookup that checks both local AST class names AND the SymbolTable's
313
+ * global index. This allows extractInitializer functions to distinguish
314
+ * constructor calls from function calls (e.g. Kotlin `User()` vs `getUser()`)
315
+ * using cross-file type information when available.
316
+ *
317
+ * Only `.has()` is exposed — the SymbolTable doesn't support iteration.
318
+ * Results are memoized to avoid redundant class-index scans across declarations.
319
+ */
320
+ const createClassNameLookup = (localNames, model) => {
321
+ if (!model)
322
+ return localNames;
323
+ const memo = new Map();
324
+ return {
325
+ has(name) {
326
+ if (localNames.has(name))
327
+ return true;
328
+ const cached = memo.get(name);
329
+ if (cached !== undefined)
330
+ return cached;
331
+ const result = model.types
332
+ .lookupClassByName(name)
333
+ .some((def) => def.type === 'Class' || def.type === 'Enum' || def.type === 'Struct');
334
+ memo.set(name, result);
335
+ return result;
336
+ },
337
+ };
338
+ };
339
+ /**
340
+ * Build a TypeEnvironment from a tree-sitter AST for a given language.
341
+ * Single-pass: collects class/struct names, type bindings, AND constructor
342
+ * bindings that couldn't be resolved locally — all in one AST walk.
343
+ *
344
+ * When a symbolTable is provided (call-processor path), class names from across
345
+ * the project are available for constructor inference in languages like Kotlin
346
+ * where constructors are syntactically identical to function calls.
347
+ */
348
+ /**
349
+ * Node types whose subtrees can NEVER contain type-relevant descendants
350
+ * (declarations, parameters, for-loops, class definitions, pattern bindings).
351
+ * Conservative leaf-only set — verified safe across all 12 supported language grammars.
352
+ * IMPORTANT: Do NOT add expression containers (arguments, binary_expression, etc.) —
353
+ * they can contain arrow functions with typed parameters.
354
+ */
355
+ const SKIP_SUBTREE_TYPES = new Set([
356
+ // Plain string literals (NOT template_string — it contains interpolated expressions
357
+ // that can hold arrow functions with typed parameters, e.g. `${(x: T) => x}`)
358
+ 'string',
359
+ 'string_literal',
360
+ 'string_content',
361
+ 'string_fragment',
362
+ 'heredoc_body',
363
+ // Comments
364
+ 'comment',
365
+ 'line_comment',
366
+ 'block_comment',
367
+ // Numeric/boolean/null literals
368
+ 'number',
369
+ 'integer_literal',
370
+ 'float_literal',
371
+ 'true',
372
+ 'false',
373
+ 'null',
374
+ // Regex
375
+ 'regex',
376
+ 'regex_pattern',
377
+ ]);
378
+ const CLASS_LIKE_TYPES = new Set(['Class', 'Struct', 'Interface']);
379
+ const lookupClassDefsByName = (model, name, allowedTypes = CLASS_LIKE_TYPES) => model.types.lookupClassByName(name).filter((d) => allowedTypes.has(d.type));
380
+ /** Memoize class definition lookups during fixpoint iteration.
381
+ * SymbolTable is immutable during type resolution, so results never change.
382
+ * Eliminates redundant array allocations + filter scans across iterations. */
383
+ const createClassDefCache = (model) => {
384
+ const cache = new Map();
385
+ return (typeName) => {
386
+ let result = cache.get(typeName);
387
+ if (result === undefined) {
388
+ result = model ? lookupClassDefsByName(model, typeName) : [];
389
+ cache.set(typeName, result);
390
+ }
391
+ return result;
392
+ };
393
+ };
394
+ /** AST node types representing constructor expressions across languages.
395
+ * Note: C# also has `implicit_object_creation_expression` (`new()` with type
396
+ * inference) which is NOT captured — the type is inferred, not explicit.
397
+ * Kotlin constructors use `call_expression` (no `new` keyword) — not detected. */
398
+ const CONSTRUCTOR_EXPR_TYPES = new Set([
399
+ 'new_expression', // TS/JS/C++: new Dog()
400
+ 'object_creation_expression', // Java/C#: new Dog()
401
+ ]);
402
+ /** Extract the constructor class name from a declaration node's initializer.
403
+ * Searches for new_expression / object_creation_expression in the node's subtree.
404
+ * Returns the class name or undefined if no constructor is found.
405
+ * Depth-limited to 5 to avoid expensive traversals. */
406
+ const extractConstructorTypeName = (node, depth = 0) => {
407
+ if (depth > 5)
408
+ return undefined;
409
+ if (CONSTRUCTOR_EXPR_TYPES.has(node.type)) {
410
+ // Java/C#: object_creation_expression has 'type' field
411
+ const typeField = node.childForFieldName('type');
412
+ if (typeField)
413
+ return extractSimpleTypeName(typeField);
414
+ // TS/JS: new_expression has 'constructor' field (but tree-sitter often just has identifier child)
415
+ const ctorField = node.childForFieldName('constructor');
416
+ if (ctorField)
417
+ return extractSimpleTypeName(ctorField);
418
+ // Fallback: first named child is often the class identifier
419
+ if (node.firstNamedChild)
420
+ return extractSimpleTypeName(node.firstNamedChild);
421
+ }
422
+ for (let i = 0; i < node.namedChildCount; i++) {
423
+ const child = node.namedChild(i);
424
+ if (!child)
425
+ continue;
426
+ // Don't descend into nested functions/classes or call expressions (prevents
427
+ // finding constructor args inside method calls, e.g. processAll(new Dog()))
428
+ if (FUNCTION_NODE_TYPES.has(child.type) ||
429
+ CLASS_CONTAINER_TYPES.has(child.type) ||
430
+ CALL_EXPRESSION_TYPES.has(child.type))
431
+ continue;
432
+ const result = extractConstructorTypeName(child, depth + 1);
433
+ if (result)
434
+ return result;
435
+ }
436
+ return undefined;
437
+ };
438
+ /** Max depth for MRO parent chain walking. Real-world inheritance rarely exceeds 3-4 levels. */
439
+ const MAX_MRO_DEPTH = 5;
440
+ /** Check if `child` is a subclass of `parent` using the parentMap.
441
+ * BFS up from child, depth-limited (5), cycle-safe. */
442
+ export const isSubclassOf = (child, parent, parentMap) => {
443
+ if (!parentMap || child === parent)
444
+ return false;
445
+ const visited = new Set([child]);
446
+ let current = [child];
447
+ for (let depth = 0; depth < MAX_MRO_DEPTH && current.length > 0; depth++) {
448
+ const next = [];
449
+ for (const cls of current) {
450
+ const parents = parentMap.get(cls);
451
+ if (!parents)
452
+ continue;
453
+ for (const p of parents) {
454
+ if (p === parent)
455
+ return true;
456
+ if (!visited.has(p)) {
457
+ visited.add(p);
458
+ next.push(p);
459
+ }
460
+ }
461
+ }
462
+ current = next;
463
+ }
464
+ return false;
465
+ };
466
+ /** Walk up the parent class chain to find a field or method on an ancestor.
467
+ * BFS-like traversal with depth limit and cycle detection. First match wins.
468
+ * Used by resolveFieldType and resolveMethodReturnType when direct lookup fails. */
469
+ const walkParentChain = (typeName, parentMap, getClassDefs, lookupOnClass) => {
470
+ if (!parentMap)
471
+ return undefined;
472
+ const visited = new Set([typeName]);
473
+ let current = [typeName];
474
+ for (let depth = 0; depth < MAX_MRO_DEPTH && current.length > 0; depth++) {
475
+ const next = [];
476
+ for (const cls of current) {
477
+ const parents = parentMap.get(cls);
478
+ if (!parents)
479
+ continue;
480
+ for (const parent of parents) {
481
+ if (visited.has(parent))
482
+ continue;
483
+ visited.add(parent);
484
+ const parentDefs = getClassDefs(parent);
485
+ if (parentDefs.length === 1) {
486
+ const result = lookupOnClass(parentDefs[0].nodeId);
487
+ if (result !== undefined)
488
+ return result;
489
+ }
490
+ next.push(parent);
491
+ }
492
+ }
493
+ current = next;
494
+ }
495
+ return undefined;
496
+ };
497
+ /** Resolve a field's declared type given a receiver variable and field name.
498
+ * Uses SymbolTable to find the class nodeId for the receiver's type, then
499
+ * looks up the field via the eagerly-populated fieldByOwner index.
500
+ * Falls back to MRO parent chain walking if direct lookup fails (Phase 11A). */
501
+ const resolveFieldType = (receiver, field, scopeEnv, model, getClassDefs, parentMap) => {
502
+ if (!model)
503
+ return undefined;
504
+ const receiverType = scopeEnv.get(receiver);
505
+ if (!receiverType)
506
+ return undefined;
507
+ const lookup = getClassDefs ?? ((name) => lookupClassDefsByName(model, name));
508
+ const classDefs = lookup(receiverType);
509
+ if (classDefs.length !== 1)
510
+ return undefined;
511
+ // Direct lookup first
512
+ const fieldDef = model.fields.lookupFieldByOwner(classDefs[0].nodeId, field);
513
+ if (fieldDef?.declaredType)
514
+ return extractReturnTypeName(fieldDef.declaredType);
515
+ // MRO parent chain walking on miss
516
+ const inherited = walkParentChain(receiverType, parentMap, lookup, (nodeId) => {
517
+ const f = model.fields.lookupFieldByOwner(nodeId, field);
518
+ return f?.declaredType ? extractReturnTypeName(f.declaredType) : undefined;
519
+ });
520
+ return inherited;
521
+ };
522
+ /** Resolve a method's return type given a receiver variable and method name.
523
+ * Uses SymbolTable to find class nodeIds for the receiver's type, then
524
+ * looks up the method via owner-scoped lookupMethodByOwner.
525
+ * Falls back to MRO parent chain walking if direct lookup fails (Phase 11A). */
526
+ const resolveMethodReturnType = (receiver, method, scopeEnv, model, getClassDefs, parentMap) => {
527
+ if (!model)
528
+ return undefined;
529
+ let receiverType = scopeEnv.get(receiver);
530
+ // When substituteThisReceiver replaced $this/self with the enclosing class name,
531
+ // the receiver IS the type — look it up directly as a class name.
532
+ if (!receiverType) {
533
+ const lookup = getClassDefs ?? ((name) => lookupClassDefsByName(model, name));
534
+ if (lookup(receiver).length > 0)
535
+ receiverType = receiver;
536
+ }
537
+ if (!receiverType)
538
+ return undefined;
539
+ const lookup = getClassDefs ?? ((name) => lookupClassDefsByName(model, name));
540
+ const classDefs = lookup(receiverType);
541
+ if (classDefs.length === 0)
542
+ return undefined;
543
+ // Direct lookup first
544
+ const directMethodLookups = classDefs.map((d) => ({
545
+ classDef: d,
546
+ methodDef: model.methods.lookupMethodByOwner(d.nodeId, method),
547
+ }));
548
+ const hasAmbiguousDirectLookup = directMethodLookups.some(({ classDef, methodDef }) => {
549
+ if (methodDef)
550
+ return false;
551
+ return model.symbols
552
+ .lookupExactAll(classDef.filePath, method)
553
+ .some((d) => d.ownerId === classDef.nodeId);
554
+ });
555
+ if (hasAmbiguousDirectLookup)
556
+ return undefined;
557
+ const methods = directMethodLookups
558
+ .map(({ methodDef }) => methodDef)
559
+ .filter((d) => d !== undefined);
560
+ if (methods.length === 1 && methods[0].returnType) {
561
+ return extractReturnTypeName(methods[0].returnType);
562
+ }
563
+ // MRO parent chain walking on miss
564
+ if (methods.length === 0) {
565
+ const inherited = walkParentChain(receiverType, parentMap, lookup, (nodeId) => {
566
+ const parentMethod = model.methods.lookupMethodByOwner(nodeId, method);
567
+ if (!parentMethod?.returnType)
568
+ return undefined;
569
+ return extractReturnTypeName(parentMethod.returnType);
570
+ });
571
+ return inherited;
572
+ }
573
+ return undefined;
574
+ };
575
+ /**
576
+ * Unified fixpoint propagation: iterate over ALL pending items (copy, callResult,
577
+ * fieldAccess, methodCallResult) until no new bindings are produced.
578
+ * Handles arbitrary-depth mixed chains:
579
+ * const user = getUser(); // callResult → User
580
+ * const addr = user.address; // fieldAccess → Address (depends on user)
581
+ * const city = addr.getCity(); // methodCallResult → City (depends on addr)
582
+ * const alias = city; // copy → City (depends on city)
583
+ * Data flow: SymbolTable (immutable) + scopeEnv → resolve → scopeEnv.
584
+ * Termination: finite entries, each bound at most once (first-writer-wins), max 10 iterations.
585
+ */
586
+ const MAX_FIXPOINT_ITERATIONS = 10;
587
+ const resolveFixpointBindings = (pendingItems, env, returnTypeLookup, model, parentMap) => {
588
+ if (pendingItems.length === 0)
589
+ return;
590
+ const getClassDefs = createClassDefCache(model);
591
+ const resolved = new Set();
592
+ for (let iter = 0; iter < MAX_FIXPOINT_ITERATIONS; iter++) {
593
+ let changed = false;
594
+ for (let i = 0; i < pendingItems.length; i++) {
595
+ if (resolved.has(i))
596
+ continue;
597
+ const item = pendingItems[i];
598
+ const scopeEnv = env.get(item.scope);
599
+ if (!scopeEnv || scopeEnv.has(item.lhs)) {
600
+ resolved.add(i);
601
+ continue;
602
+ }
603
+ let typeName;
604
+ switch (item.kind) {
605
+ case 'callResult':
606
+ // Phase 9: Prefer FQN lookup when available for higher precision
607
+ typeName = item.calleeFqn
608
+ ? returnTypeLookup.lookupReturnType(item.calleeFqn)
609
+ : returnTypeLookup.lookupReturnType(item.callee);
610
+ break;
611
+ case 'copy':
612
+ typeName = scopeEnv.get(item.rhs) ?? env.get(FILE_SCOPE)?.get(item.rhs);
613
+ break;
614
+ case 'fieldAccess':
615
+ typeName = resolveFieldType(item.receiver, item.field, scopeEnv, model, getClassDefs, parentMap);
616
+ break;
617
+ case 'methodCallResult':
618
+ typeName = resolveMethodReturnType(item.receiver, item.method, scopeEnv, model, getClassDefs, parentMap);
619
+ break;
620
+ default: {
621
+ // Exhaustive check: TypeScript will error here if a new PendingAssignment
622
+ // kind is added without handling it in the switch.
623
+ const _exhaustive = item;
624
+ break;
625
+ }
626
+ }
627
+ if (typeName) {
628
+ scopeEnv.set(item.lhs, typeName);
629
+ resolved.add(i);
630
+ changed = true;
631
+ }
632
+ }
633
+ if (!changed)
634
+ break;
635
+ if (iter === MAX_FIXPOINT_ITERATIONS - 1 && process.env.ARC_DEBUG) {
636
+ const unresolved = pendingItems.length - resolved.size;
637
+ if (unresolved > 0) {
638
+ logger.warn(`[type-env] fixpoint hit iteration cap (${MAX_FIXPOINT_ITERATIONS}), ${unresolved} items unresolved`);
639
+ }
640
+ }
641
+ }
642
+ };
643
+ /** Seed cross-file type bindings into the file scope.
644
+ * MUST be called AFTER walk() completes so that local declarations
645
+ * (Tier 0/1) always take precedence over imported bindings (first-writer-wins). */
646
+ function seedImportedBindings(env, importedBindings) {
647
+ let fileEnv = env.get(FILE_SCOPE);
648
+ if (!fileEnv) {
649
+ fileEnv = new Map();
650
+ env.set(FILE_SCOPE, fileEnv);
651
+ }
652
+ for (const [name, type] of importedBindings) {
653
+ if (!fileEnv.has(name)) {
654
+ fileEnv.set(name, type);
655
+ }
656
+ }
657
+ }
658
+ export const buildTypeEnv = (tree, language, options) => {
659
+ // Clear per-file memoization caches from the previous file.
660
+ enclosingClassNameCache.clear();
661
+ enclosingParentClassNameCache.clear();
662
+ const model = options?.model;
663
+ const parentMap = options?.parentMap;
664
+ const extractFuncNameHook = options?.extractFunctionName;
665
+ const env = new Map();
666
+ let flushed = false;
667
+ const patternOverrides = new Map();
668
+ // Phase P: maps `scope\0varName` → constructor type when a declaration has BOTH
669
+ // a base type annotation AND a more specific constructor initializer.
670
+ // e.g., `Animal a = new Dog()` → constructorTypeMap.set('func@42\0a', 'Dog')
671
+ const constructorTypeMap = new Map();
672
+ const localClassNames = new Set();
673
+ const classNames = createClassNameLookup(localClassNames, model);
674
+ const provider = getProvider(language);
675
+ const config = provider.typeConfig;
676
+ const bindings = [];
677
+ // Build ReturnTypeLookup: SymbolTable is authoritative when it has an unambiguous match.
678
+ // Cross-file importedReturnTypes are consulted ONLY when SymbolTable has 0 matches.
679
+ // Ambiguous (2+) → undefined, no cross-file fallback (conservative, local-first principle).
680
+ // Post-A4 Unit 4: callableByName no longer holds Method/Constructor, so
681
+ // for-loop binding inference must also consult methodsByName to find
682
+ // return types on class methods (e.g. `user.getItems()` iteration).
683
+ // Take `model` as an explicit argument so the non-null precondition
684
+ // is visible at the type level. Callers must enter these via an
685
+ // `if (model)` guard on their side and pass the narrowed reference.
686
+ const getCallableUnionCount = (m, callee) => {
687
+ return (m.symbols.lookupCallableByName(callee).length + m.methods.lookupMethodByName(callee).length);
688
+ };
689
+ const getFirstCallable = (m, callee) => {
690
+ const free = m.symbols.lookupCallableByName(callee);
691
+ if (free.length > 0)
692
+ return free[0];
693
+ const methods = m.methods.lookupMethodByName(callee);
694
+ return methods.length > 0 ? methods[0] : undefined;
695
+ };
696
+ const returnTypeLookup = {
697
+ lookupReturnType(callee) {
698
+ // SymbolTable is authoritative when it has an unambiguous match
699
+ if (model) {
700
+ if (provider.isBuiltInName(callee))
701
+ return undefined;
702
+ const count = getCallableUnionCount(model, callee);
703
+ if (count === 1) {
704
+ const rawReturn = getFirstCallable(model, callee)?.returnType;
705
+ if (rawReturn)
706
+ return extractReturnTypeName(rawReturn);
707
+ }
708
+ // Ambiguous (2+) → return undefined (conservative, no cross-file fallback)
709
+ if (count > 1)
710
+ return undefined;
711
+ }
712
+ // No match (0 results or no symbolTable) → fall back to cross-file
713
+ return options?.importedReturnTypes?.get(callee);
714
+ },
715
+ lookupRawReturnType(callee) {
716
+ if (model) {
717
+ if (provider.isBuiltInName(callee))
718
+ return undefined;
719
+ const count = getCallableUnionCount(model, callee);
720
+ if (count === 1)
721
+ return getFirstCallable(model, callee)?.returnType;
722
+ // Ambiguous (2+) → return undefined (conservative, no cross-file fallback)
723
+ if (count > 1)
724
+ return undefined;
725
+ }
726
+ // Cross-file fallback uses importedRawReturnTypes (raw declared types, e.g., 'User[]')
727
+ // NOT importedReturnTypes (which contains processed/simple types via extractReturnTypeName)
728
+ return options?.importedRawReturnTypes?.get(callee);
729
+ },
730
+ };
731
+ // Pre-compute combined set of node types that need extractTypeBinding.
732
+ // Single Set.has() replaces 3 separate checks per node in walk().
733
+ const interestingNodeTypes = new Set();
734
+ TYPED_PARAMETER_TYPES.forEach((t) => interestingNodeTypes.add(t));
735
+ config.declarationNodeTypes.forEach((t) => interestingNodeTypes.add(t));
736
+ config.forLoopNodeTypes?.forEach((t) => interestingNodeTypes.add(t));
737
+ // Tier 2: unified fixpoint propagation — collects copy, callResult, fieldAccess, and
738
+ // methodCallResult items during walk(), then iterates until no new bindings are produced.
739
+ // Handles arbitrary-depth mixed chains: callResult → fieldAccess → methodCallResult → copy.
740
+ const pendingItems = [];
741
+ // For-loop nodes whose iterable was unresolved at walk-time. Replayed after the fixpoint
742
+ // resolves the iterable's type, bridging the walk-time/fixpoint gap (Phase 10 / ex-9B).
743
+ const pendingForLoops = [];
744
+ // Maps `scope\0varName` → the type annotation AST node from the original declaration.
745
+ // Allows pattern extractors to navigate back to the declaration's generic type arguments
746
+ // (e.g., to extract T from Result<T, E> for `if let Ok(x) = res`).
747
+ // NOTE: This is a SUPERSET of scopeEnv — entries exist even when extractSimpleTypeName
748
+ // returns undefined for container types (User[], []User, List[User]). This is intentional:
749
+ // for-loop Strategy 1 needs the raw AST type node for exactly those container types.
750
+ const declarationTypeNodes = new Map();
751
+ /**
752
+ * Try to extract a (variableName → typeName) binding from a single AST node.
753
+ *
754
+ * Resolution tiers (first match wins):
755
+ * - Tier 0: explicit type annotations via extractDeclaration / extractForLoopBinding
756
+ * - Tier 1: constructor-call inference via extractInitializer (fallback)
757
+ *
758
+ * Side effect: populates declarationTypeNodes for variables that have an explicit
759
+ * type annotation field on the declaration node. This allows pattern extractors to
760
+ * retrieve generic type arguments from the original declaration (e.g., extracting T
761
+ * from Result<T, E> for `if let Ok(x) = res`).
762
+ */
763
+ const extractTypeBinding = (node, scopeEnv, scope) => {
764
+ // This guard eliminates 90%+ of calls before any language dispatch.
765
+ if (TYPED_PARAMETER_TYPES.has(node.type)) {
766
+ // Capture the raw type annotation BEFORE extractParameter.
767
+ // Most languages use 'name' field; Rust uses 'pattern'; TS uses 'pattern' for some param types.
768
+ // Kotlin `parameter` nodes use positional children instead of named fields,
769
+ // so we fall back to scanning children by type when childForFieldName returns null.
770
+ const typeNode = node.childForFieldName('type');
771
+ if (typeNode) {
772
+ const nameNode = node.childForFieldName('name') ??
773
+ node.childForFieldName('pattern') ??
774
+ // Python typed_parameter: name is a positional child (identifier), not a named field
775
+ (node.firstNamedChild?.type === 'identifier' ? node.firstNamedChild : null);
776
+ if (nameNode) {
777
+ const varName = extractVarName(nameNode);
778
+ if (varName && !declarationTypeNodes.has(`${scope}\0${varName}`)) {
779
+ declarationTypeNodes.set(`${scope}\0${varName}`, typeNode);
780
+ }
781
+ }
782
+ }
783
+ else {
784
+ // Fallback: positional children (Kotlin `parameter` → simple_identifier + user_type)
785
+ let fallbackName = null;
786
+ let fallbackType = null;
787
+ for (let i = 0; i < node.namedChildCount; i++) {
788
+ const child = node.namedChild(i);
789
+ if (!child)
790
+ continue;
791
+ if (!fallbackName &&
792
+ (child.type === 'simple_identifier' || child.type === 'identifier')) {
793
+ fallbackName = child;
794
+ }
795
+ if (!fallbackType &&
796
+ (child.type === 'user_type' ||
797
+ child.type === 'type_identifier' ||
798
+ child.type === 'generic_type' ||
799
+ child.type === 'parameterized_type' ||
800
+ child.type === 'nullable_type')) {
801
+ fallbackType = child;
802
+ }
803
+ }
804
+ if (fallbackName && fallbackType) {
805
+ const varName = extractVarName(fallbackName);
806
+ if (varName && !declarationTypeNodes.has(`${scope}\0${varName}`)) {
807
+ declarationTypeNodes.set(`${scope}\0${varName}`, fallbackType);
808
+ }
809
+ }
810
+ }
811
+ config.extractParameter(node, scopeEnv);
812
+ return;
813
+ }
814
+ // For-each loop variable bindings (Java/C#/Kotlin): explicit element types in the AST.
815
+ // Checked before declarationNodeTypes — loop variables are not declarations.
816
+ if (config.forLoopNodeTypes?.has(node.type)) {
817
+ if (config.extractForLoopBinding) {
818
+ const sizeBefore = scopeEnv.size;
819
+ const forLoopCtx = {
820
+ scopeEnv,
821
+ declarationTypeNodes,
822
+ scope,
823
+ returnTypeLookup,
824
+ };
825
+ config.extractForLoopBinding(node, forLoopCtx);
826
+ // If no new binding was produced, the iterable's type may not yet be resolved.
827
+ // Store for post-fixpoint replay (Phase 10 / ex-9B loop-fixpoint bridge).
828
+ if (scopeEnv.size === sizeBefore) {
829
+ pendingForLoops.push({ node, scope });
830
+ }
831
+ }
832
+ return;
833
+ }
834
+ if (config.declarationNodeTypes.has(node.type)) {
835
+ // Capture the raw type annotation AST node BEFORE extractDeclaration.
836
+ // This decouples type node capture from scopeEnv success — container types
837
+ // (User[], []User, List[User]) that fail extractSimpleTypeName still get
838
+ // their AST type node recorded for Strategy 1 for-loop resolution.
839
+ //
840
+ // Prefer language-specific locator when provided (keeps buildTypeEnv generic),
841
+ // then fall back to a small set of safe, cross-grammar heuristics.
842
+ let typeNode = config.getDeclarationTypeNode?.(node) ?? node.childForFieldName('type') ?? null;
843
+ // Fallback: some grammars wrap type annotations in a `type_annotation` child
844
+ // instead of exposing a named `type` field on the declaration node.
845
+ if (!typeNode) {
846
+ for (let i = 0; i < node.namedChildCount; i++) {
847
+ const c = node.namedChild(i);
848
+ if (c?.type === 'type_annotation') {
849
+ typeNode = c.firstNamedChild ?? c;
850
+ break;
851
+ }
852
+ }
853
+ }
854
+ if (typeNode) {
855
+ const nameNode = node.childForFieldName('name') ??
856
+ node.childForFieldName('left') ??
857
+ node.childForFieldName('pattern');
858
+ if (nameNode) {
859
+ const varName = extractVarName(nameNode);
860
+ if (varName && !declarationTypeNodes.has(`${scope}\0${varName}`)) {
861
+ declarationTypeNodes.set(`${scope}\0${varName}`, typeNode);
862
+ }
863
+ }
864
+ }
865
+ // Run the language-specific declaration extractor (may or may not add to scopeEnv).
866
+ const sizeBefore = typeNode ? scopeEnv.size : -1;
867
+ config.extractDeclaration(node, scopeEnv);
868
+ // Fallback: for multi-declarator languages (TS, C#, Java) where the type field
869
+ // is on variable_declarator children, capture newly-added keys.
870
+ // Map preserves insertion order, so new keys are always at the end —
871
+ // skip the first sizeBefore entries to find only newly-added variables.
872
+ if (sizeBefore >= 0 && scopeEnv.size > sizeBefore) {
873
+ let skip = sizeBefore;
874
+ for (const varName of scopeEnv.keys()) {
875
+ if (skip > 0) {
876
+ skip--;
877
+ continue;
878
+ }
879
+ if (!declarationTypeNodes.has(`${scope}\0${varName}`)) {
880
+ declarationTypeNodes.set(`${scope}\0${varName}`, typeNode);
881
+ }
882
+ }
883
+ }
884
+ // Tier 1: constructor-call inference as fallback.
885
+ // Always called when available — each language's extractInitializer
886
+ // internally skips declarators that already have explicit annotations,
887
+ // so this handles mixed cases like `const a: A = x, b = new B()`.
888
+ if (config.extractInitializer) {
889
+ config.extractInitializer(node, scopeEnv, classNames);
890
+ }
891
+ // Phase P: detect constructor-visible virtual dispatch.
892
+ // When a declaration has BOTH a type annotation AND a constructor initializer,
893
+ // record the constructor type for receiver override at call resolution time.
894
+ // e.g., `Animal a = new Dog()` → constructorTypeMap.set('scope\0a', 'Dog')
895
+ if (sizeBefore >= 0 && scopeEnv.size > sizeBefore) {
896
+ let ctorSkip = sizeBefore;
897
+ for (const varName of scopeEnv.keys()) {
898
+ if (ctorSkip > 0) {
899
+ ctorSkip--;
900
+ continue;
901
+ }
902
+ const declaredType = scopeEnv.get(varName);
903
+ if (!declaredType)
904
+ continue;
905
+ const ctorType = extractConstructorTypeName(node) ?? config.detectConstructorType?.(node, classNames);
906
+ if (!ctorType || ctorType === declaredType)
907
+ continue;
908
+ // Unwrap wrapper types (e.g., C++ shared_ptr<Animal> → Animal) for an
909
+ // accurate isSubclassOf comparison. Language-specific via config hook.
910
+ const declTypeNode = declarationTypeNodes.get(`${scope}\0${varName}`);
911
+ const effectiveDeclaredType = declTypeNode && config.unwrapDeclaredType
912
+ ? (config.unwrapDeclaredType(declaredType, declTypeNode) ?? declaredType)
913
+ : declaredType;
914
+ if (ctorType !== effectiveDeclaredType) {
915
+ constructorTypeMap.set(`${scope}\0${varName}`, ctorType);
916
+ }
917
+ }
918
+ }
919
+ }
920
+ };
921
+ const stack = [
922
+ { node: tree.rootNode, scope: FILE_SCOPE },
923
+ ];
924
+ const processNode = (node, currentScope) => {
925
+ // Fast skip: subtrees that can never contain type-relevant nodes (leaf-like literals).
926
+ if (SKIP_SUBTREE_TYPES.has(node.type))
927
+ return;
928
+ // Collect class/struct names as we encounter them (used by extractInitializer
929
+ // to distinguish constructor calls from function calls, e.g. C++ `User()` vs `getUser()`)
930
+ // Currently only C++ uses this locally; other languages rely on the SymbolTable path.
931
+ if (CLASS_CONTAINER_TYPES.has(node.type)) {
932
+ // Most languages use 'name' field; Kotlin uses a type_identifier child instead
933
+ const nameNode = node.childForFieldName('name') ?? findTypeIdentifierChild(node);
934
+ if (nameNode)
935
+ localClassNames.add(nameNode.text);
936
+ }
937
+ // Detect scope boundaries (function/method definitions)
938
+ let scope = currentScope;
939
+ if (FUNCTION_NODE_TYPES.has(node.type)) {
940
+ const funcName = extractFuncNameHook?.(node)?.funcName ?? genericFuncName(node);
941
+ if (funcName)
942
+ scope = `${funcName}@${node.startIndex}`;
943
+ }
944
+ // Only create scope map and call extractTypeBinding for interesting node types.
945
+ // Single Set.has() replaces 3 separate checks inside extractTypeBinding.
946
+ if (interestingNodeTypes.has(node.type)) {
947
+ if (!env.has(scope))
948
+ env.set(scope, new Map());
949
+ const scopeEnv = env.get(scope);
950
+ extractTypeBinding(node, scopeEnv, scope);
951
+ }
952
+ // Pattern binding extraction: handles constructs that introduce NEW typed variables
953
+ // via pattern matching (e.g. `if let Some(x) = opt`, `x instanceof T t`)
954
+ // or narrow existing variables within a branch (null-check narrowing).
955
+ // Runs after Tier 0/1 so scopeEnv already contains the source variable's type.
956
+ // Conservative: extractor returns undefined when source type is unknown.
957
+ if (config.extractPatternBinding &&
958
+ (!config.patternBindingNodeTypes || config.patternBindingNodeTypes.has(node.type))) {
959
+ // Ensure scopeEnv exists for pattern binding reads/writes
960
+ if (!env.has(scope))
961
+ env.set(scope, new Map());
962
+ const scopeEnv = env.get(scope);
963
+ const patternBinding = config.extractPatternBinding(node, scopeEnv, declarationTypeNodes, scope);
964
+ if (patternBinding) {
965
+ if (patternBinding.narrowingRange) {
966
+ // Explicit narrowing range (null-check narrowing): always store in patternOverrides
967
+ // using the extractor-provided range (typically the if-body block).
968
+ if (!patternOverrides.has(scope))
969
+ patternOverrides.set(scope, new Map());
970
+ const varMap = patternOverrides.get(scope);
971
+ if (!varMap.has(patternBinding.varName))
972
+ varMap.set(patternBinding.varName, []);
973
+ varMap.get(patternBinding.varName).push({
974
+ rangeStart: patternBinding.narrowingRange.startIndex,
975
+ rangeEnd: patternBinding.narrowingRange.endIndex,
976
+ typeName: patternBinding.typeName,
977
+ });
978
+ }
979
+ else if (config.allowPatternBindingOverwrite) {
980
+ // Position-indexed: store per-branch binding for smart-cast narrowing.
981
+ // Each when arm / switch case gets its own type for the variable,
982
+ // preventing cross-arm contamination (e.g., Kotlin when/is).
983
+ const branchNode = findNarrowingBranchScope(node);
984
+ if (branchNode) {
985
+ if (!patternOverrides.has(scope))
986
+ patternOverrides.set(scope, new Map());
987
+ const varMap = patternOverrides.get(scope);
988
+ if (!varMap.has(patternBinding.varName))
989
+ varMap.set(patternBinding.varName, []);
990
+ varMap.get(patternBinding.varName).push({
991
+ rangeStart: branchNode.startIndex,
992
+ rangeEnd: branchNode.endIndex,
993
+ typeName: patternBinding.typeName,
994
+ });
995
+ }
996
+ // Also store in flat scopeEnv as fallback (last arm wins — same as before
997
+ // for code that doesn't use position-indexed lookup).
998
+ scopeEnv.set(patternBinding.varName, patternBinding.typeName);
999
+ }
1000
+ else if (!scopeEnv.has(patternBinding.varName)) {
1001
+ // First-writer-wins for languages without smart-cast overwrite (Java instanceof, etc.)
1002
+ scopeEnv.set(patternBinding.varName, patternBinding.typeName);
1003
+ }
1004
+ }
1005
+ }
1006
+ // Tier 2: collect plain-identifier RHS assignments for post-walk propagation.
1007
+ // Delegates to per-language extractPendingAssignment — AST shapes differ widely
1008
+ // (JS uses variable_declarator/name/value, Rust uses let_declaration/pattern/value,
1009
+ // Python uses assignment/left/right, Go uses short_var_declaration/expression_list).
1010
+ // May return a single item or an array (for destructuring: N fieldAccess items).
1011
+ if (config.extractPendingAssignment && config.declarationNodeTypes.has(node.type)) {
1012
+ // scopeEnv is guaranteed to exist here because declarationNodeTypes is a subset
1013
+ // of interestingNodeTypes, so extractTypeBinding already created the scope map above.
1014
+ const scopeEnv = env.get(scope);
1015
+ if (scopeEnv) {
1016
+ const pending = config.extractPendingAssignment(node, scopeEnv);
1017
+ if (pending) {
1018
+ const items = Array.isArray(pending) ? pending : [pending];
1019
+ for (const item of items) {
1020
+ // Substitute this/self/$this/Me receivers with enclosing class name
1021
+ const resolved = substituteThisReceiver(item, node);
1022
+ pendingItems.push({ scope, ...resolved });
1023
+ }
1024
+ }
1025
+ }
1026
+ }
1027
+ // Scan for constructor bindings that couldn't be resolved locally.
1028
+ // Only collect if TypeEnv didn't already resolve this binding.
1029
+ if (config.scanConstructorBinding) {
1030
+ const result = config.scanConstructorBinding(node);
1031
+ if (result) {
1032
+ const scopeEnv = env.get(scope);
1033
+ if (!scopeEnv?.has(result.varName)) {
1034
+ bindings.push({ scope, ...result });
1035
+ }
1036
+ }
1037
+ }
1038
+ // Push children onto stack (reverse order so first child is processed first)
1039
+ for (let i = node.childCount - 1; i >= 0; i--) {
1040
+ const child = node.child(i);
1041
+ if (child)
1042
+ stack.push({ node: child, scope });
1043
+ }
1044
+ };
1045
+ // Iterative traversal using explicit stack instead of recursion
1046
+ // to avoid "Maximum call stack size exceeded" on large files (2000+ lines)
1047
+ while (stack.length > 0) {
1048
+ const { node, scope } = stack.pop();
1049
+ processNode(node, scope);
1050
+ }
1051
+ // Phase 14: Seed cross-file bindings from upstream files AFTER walk
1052
+ // (local declarations from walk() take precedence — first-writer-wins)
1053
+ if (options?.importedBindings && options.importedBindings.size > 0) {
1054
+ seedImportedBindings(env, options.importedBindings);
1055
+ }
1056
+ resolveFixpointBindings(pendingItems, env, returnTypeLookup, model, parentMap);
1057
+ // Post-fixpoint for-loop replay (Phase 10 / ex-9B loop-fixpoint bridge):
1058
+ // For-loop nodes whose iterables were unresolved at walk-time may now be
1059
+ // resolvable because the fixpoint bound the iterable's type.
1060
+ // Example: `const users = getUsers(); for (const u of users) { u.save(); }`
1061
+ // - walk-time: users untyped → u unresolved
1062
+ // - fixpoint: users → User[]
1063
+ // - replay: users now typed → u → User
1064
+ if (pendingForLoops.length > 0 && config.extractForLoopBinding) {
1065
+ for (const { node, scope } of pendingForLoops) {
1066
+ if (!env.has(scope))
1067
+ env.set(scope, new Map());
1068
+ const scopeEnv = env.get(scope);
1069
+ config.extractForLoopBinding(node, {
1070
+ scopeEnv,
1071
+ declarationTypeNodes,
1072
+ scope,
1073
+ returnTypeLookup,
1074
+ });
1075
+ }
1076
+ // Re-run the main fixpoint to resolve items that depended on loop variables.
1077
+ // Only needed if replay actually produced new bindings.
1078
+ const unresolvedBefore = pendingItems.filter((item) => {
1079
+ const scopeEnv = env.get(item.scope);
1080
+ return scopeEnv && !scopeEnv.has(item.lhs);
1081
+ });
1082
+ if (unresolvedBefore.length > 0) {
1083
+ resolveFixpointBindings(unresolvedBefore, env, returnTypeLookup, model);
1084
+ }
1085
+ }
1086
+ return {
1087
+ lookup: (varName, callNode) => lookupInEnv(env, varName, callNode, patternOverrides, options?.enclosingFunctionFinder, extractFuncNameHook),
1088
+ constructorBindings: bindings,
1089
+ fileScope: () => env.get(FILE_SCOPE) ?? emptyFileScope(),
1090
+ allScopes: () => env,
1091
+ constructorTypeMap,
1092
+ flush(filePath, accumulator) {
1093
+ if (flushed) {
1094
+ throw new Error(`[TypeEnvironment] flush called twice for ${filePath} — flush is single-use`);
1095
+ }
1096
+ // Narrow flush() to iterate only the FILE_SCOPE entry, mirroring the
1097
+ // worker-path narrowing in parse-worker.ts (commit 803631fe). Before
1098
+ // this change, both execution paths had the same asymmetry bug: the
1099
+ // worker path was fixed but the sequential path (this code) still
1100
+ // wrote function-scope entries into long-lived accumulator storage
1101
+ // that no consumer reads until Phase 9 lands.
1102
+ //
1103
+ // Phase 9 reversion: when a downstream consumer of function-scope
1104
+ // bindings exists, restore the nested iteration:
1105
+ //
1106
+ // for (const [scope, scopeMap] of env) {
1107
+ // for (const [varName, typeName] of scopeMap) {
1108
+ // entries.push({ scope, varName, typeName });
1109
+ // }
1110
+ // }
1111
+ //
1112
+ // See BindingAccumulator class JSDoc and FileScopeBindings JSDoc in
1113
+ // parse-worker.ts for the full reversion checklist.
1114
+ const fileScope = env.get(FILE_SCOPE) ?? emptyFileScope();
1115
+ const entries = [];
1116
+ for (const [varName, typeName] of fileScope) {
1117
+ entries.push({ scope: '', varName, typeName });
1118
+ }
1119
+ if (entries.length > 0) {
1120
+ accumulator.appendFile(filePath, entries);
1121
+ }
1122
+ // Mark the env as flushed AFTER the successful append. If appendFile
1123
+ // throws (e.g., accumulator is already finalized due to a lifecycle
1124
+ // ordering bug), the caller can catch and retry — the single-use
1125
+ // guard now tracks "data was written", not "flush was attempted".
1126
+ flushed = true;
1127
+ },
1128
+ };
1129
+ };