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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (870) hide show
  1. package/README.md +212 -22
  2. package/dist/_shared/graph/types.d.ts +27 -8
  3. package/dist/_shared/graph/types.d.ts.map +1 -1
  4. package/dist/_shared/index.d.ts +4 -3
  5. package/dist/_shared/index.d.ts.map +1 -1
  6. package/dist/_shared/index.js +1 -1
  7. package/dist/_shared/index.js.map +1 -1
  8. package/dist/_shared/integrations/circuit-breaker.d.ts.map +1 -1
  9. package/dist/_shared/integrations/circuit-breaker.js.map +1 -1
  10. package/dist/_shared/integrations/resilient-fetch.d.ts +19 -1
  11. package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
  12. package/dist/_shared/integrations/resilient-fetch.js +23 -10
  13. package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
  14. package/dist/_shared/language-detection.d.ts.map +1 -1
  15. package/dist/_shared/lbug/schema-constants.d.ts +2 -2
  16. package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
  17. package/dist/_shared/lbug/schema-constants.js +3 -0
  18. package/dist/_shared/lbug/schema-constants.js.map +1 -1
  19. package/dist/_shared/scope-resolution/callable-flow-site.d.ts +110 -0
  20. package/dist/_shared/scope-resolution/callable-flow-site.d.ts.map +1 -0
  21. package/dist/_shared/scope-resolution/callable-flow-site.js +11 -0
  22. package/dist/_shared/scope-resolution/callable-flow-site.js.map +1 -0
  23. package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
  24. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +6 -1
  25. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
  26. package/dist/_shared/scope-resolution/finalize-algorithm.js +316 -37
  27. package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
  28. package/dist/_shared/scope-resolution/parsed-file.d.ts +7 -0
  29. package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
  30. package/dist/_shared/scope-resolution/reference-site.d.ts +124 -1
  31. package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
  32. package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
  33. package/dist/_shared/scope-resolution/registries/lookup-core.d.ts.map +1 -1
  34. package/dist/_shared/scope-resolution/registries/lookup-core.js +58 -2
  35. package/dist/_shared/scope-resolution/registries/lookup-core.js.map +1 -1
  36. package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -1
  37. package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -1
  38. package/dist/_shared/scope-resolution/scope-tree.js.map +1 -1
  39. package/dist/_shared/scope-resolution/symbol-definition.d.ts +47 -0
  40. package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
  41. package/dist/_shared/scope-resolution/types.d.ts +297 -5
  42. package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
  43. package/dist/cli/ai-context.d.ts +10 -2
  44. package/dist/cli/ai-context.js +128 -61
  45. package/dist/cli/analyze-config.d.ts +1 -1
  46. package/dist/cli/analyze-options.d.ts +131 -0
  47. package/dist/cli/analyze-options.js +1 -0
  48. package/dist/cli/analyze.d.ts +25 -114
  49. package/dist/cli/analyze.js +194 -36
  50. package/dist/cli/cli-message.d.ts +1 -1
  51. package/dist/cli/detect-changes-format.js +19 -2
  52. package/dist/cli/doctor.d.ts +23 -0
  53. package/dist/cli/doctor.js +72 -9
  54. package/dist/cli/editor-targets.js +6 -0
  55. package/dist/cli/eval-server.d.ts +23 -1
  56. package/dist/cli/eval-server.js +128 -9
  57. package/dist/cli/format-symbol.d.ts +15 -0
  58. package/dist/cli/format-symbol.js +17 -0
  59. package/dist/cli/generated-skill.d.ts +17 -0
  60. package/dist/cli/generated-skill.js +1 -0
  61. package/dist/cli/group.js +23 -2
  62. package/dist/cli/help-i18n.js +3 -0
  63. package/dist/cli/i18n/en.d.ts +17 -8
  64. package/dist/cli/i18n/en.js +19 -8
  65. package/dist/cli/i18n/resources.d.ts +26 -8
  66. package/dist/cli/i18n/zh-CN.d.ts +9 -0
  67. package/dist/cli/i18n/zh-CN.js +17 -8
  68. package/dist/cli/index.js +16 -9
  69. package/dist/cli/lazy-action.d.ts +7 -0
  70. package/dist/cli/lazy-action.js +27 -0
  71. package/dist/cli/mcp.js +6 -3
  72. package/dist/cli/resolve-invocation.d.ts +7 -3
  73. package/dist/cli/resolve-invocation.js +7 -3
  74. package/dist/cli/setup.d.ts +8 -0
  75. package/dist/cli/setup.js +30 -7
  76. package/dist/cli/skill-gen.d.ts +1 -6
  77. package/dist/cli/skill-gen.js +88 -18
  78. package/dist/cli/standard-skills.d.ts +76 -0
  79. package/dist/cli/standard-skills.js +45 -0
  80. package/dist/cli/status.d.ts +4 -1
  81. package/dist/cli/status.js +57 -4
  82. package/dist/cli/tool.d.ts +1 -0
  83. package/dist/cli/tool.js +75 -7
  84. package/dist/cli/uninstall.js +7 -2
  85. package/dist/cli/wiki.d.ts +1 -0
  86. package/dist/cli/wiki.js +59 -10
  87. package/dist/config/ignore-service.d.ts +2 -0
  88. package/dist/config/ignore-service.js +31 -4
  89. package/dist/core/analysis-features.d.ts +21 -0
  90. package/dist/core/analysis-features.js +59 -0
  91. package/dist/core/analyzer-identity.d.ts +154 -0
  92. package/dist/core/analyzer-identity.js +2158 -0
  93. package/dist/core/augmentation/engine.js +95 -76
  94. package/dist/core/embedding-checkpoint.d.ts +143 -0
  95. package/dist/core/embedding-checkpoint.js +221 -0
  96. package/dist/core/embedding-count.d.ts +61 -0
  97. package/dist/core/embedding-count.js +69 -0
  98. package/dist/core/embeddings/ast-utils.js +9 -1
  99. package/dist/core/embeddings/embedder.d.ts +3 -2
  100. package/dist/core/embeddings/embedder.js +8 -5
  101. package/dist/core/embeddings/embedding-identity.d.ts +11 -0
  102. package/dist/core/embeddings/embedding-identity.js +24 -0
  103. package/dist/core/embeddings/embedding-pipeline.d.ts +24 -1
  104. package/dist/core/embeddings/embedding-pipeline.js +341 -19
  105. package/dist/core/embeddings/http-client.d.ts +10 -2
  106. package/dist/core/embeddings/http-client.js +282 -47
  107. package/dist/core/embeddings/node-module-compat.d.ts +4 -2
  108. package/dist/core/embeddings/node-module-compat.js +4 -2
  109. package/dist/core/embeddings/onnxruntime-common-resolver.js +5 -5
  110. package/dist/core/embeddings/onnxruntime-node-resolver.js +2 -2
  111. package/dist/core/embeddings/runtime-install.js +1 -1
  112. package/dist/core/git-staleness.js +1 -1
  113. package/dist/core/graph/graph.js +3 -0
  114. package/dist/core/graph/import-cycles.d.ts +194 -3
  115. package/dist/core/graph/import-cycles.js +522 -73
  116. package/dist/core/graph/types.d.ts +18 -0
  117. package/dist/core/group/bridge-db.js +5 -27
  118. package/dist/core/group/cross-impact.d.ts +21 -0
  119. package/dist/core/group/cross-impact.js +128 -15
  120. package/dist/core/group/cross-trace.js +27 -16
  121. package/dist/core/group/extractors/http-patterns/java.js +91 -14
  122. package/dist/core/group/extractors/http-patterns/node.js +19 -0
  123. package/dist/core/group/extractors/http-patterns/types.d.ts +8 -0
  124. package/dist/core/group/extractors/http-route-extractor.d.ts +1 -0
  125. package/dist/core/group/extractors/http-route-extractor.js +122 -48
  126. package/dist/core/group/extractors/include-extractor.js +20 -2
  127. package/dist/core/group/extractors/manifest-extractor.d.ts +1 -1
  128. package/dist/core/group/extractors/manifest-extractor.js +7 -7
  129. package/dist/core/group/service.js +10 -1
  130. package/dist/core/group/storage.js +2 -33
  131. package/dist/core/group/types.d.ts +18 -0
  132. package/dist/core/incremental/subgraph-extract.d.ts +9 -6
  133. package/dist/core/incremental/subgraph-extract.js +33 -10
  134. package/dist/core/index-freshness.d.ts +80 -0
  135. package/dist/core/index-freshness.js +120 -0
  136. package/dist/core/ingestion/call-processor.d.ts +13 -1
  137. package/dist/core/ingestion/call-processor.js +110 -3
  138. package/dist/core/ingestion/cfg/callee-cell-format.d.ts +42 -0
  139. package/dist/core/ingestion/cfg/callee-cell-format.js +42 -0
  140. package/dist/core/ingestion/cfg/emit.d.ts +8 -23
  141. package/dist/core/ingestion/cfg/emit.js +9 -23
  142. package/dist/core/ingestion/class-extractors/configs/go.js +10 -5
  143. package/dist/core/ingestion/class-extractors/configs/jvm.js +29 -0
  144. package/dist/core/ingestion/cluster-enricher.js +8 -4
  145. package/dist/core/ingestion/cobol/cobol-preprocessor.js +1 -1
  146. package/dist/core/ingestion/community-processor.d.ts +21 -3
  147. package/dist/core/ingestion/community-processor.js +88 -83
  148. package/dist/core/ingestion/di-extractors/index.d.ts +22 -34
  149. package/dist/core/ingestion/di-extractors/index.js +17 -18
  150. package/dist/core/ingestion/di-extractors/spring.d.ts +27 -5
  151. package/dist/core/ingestion/di-extractors/spring.js +87 -3
  152. package/dist/core/ingestion/di-extractors/types.d.ts +60 -0
  153. package/dist/core/ingestion/di-extractors/types.js +15 -0
  154. package/dist/core/ingestion/emit-references.js +4 -0
  155. package/dist/core/ingestion/filesystem-walker.js +16 -12
  156. package/dist/core/ingestion/finalize-orchestrator.js +1 -0
  157. package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +9 -0
  158. package/dist/core/ingestion/frameworks/spring/analysis-features.js +41 -0
  159. package/dist/core/ingestion/frameworks/spring/annotation-arguments.d.ts +13 -0
  160. package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +227 -0
  161. package/dist/core/ingestion/frameworks/spring/aop-candidates.d.ts +15 -0
  162. package/dist/core/ingestion/frameworks/spring/aop-candidates.js +85 -0
  163. package/dist/core/ingestion/frameworks/spring/aop.d.ts +118 -0
  164. package/dist/core/ingestion/frameworks/spring/aop.js +476 -0
  165. package/dist/core/ingestion/frameworks/spring/auto-configuration.d.ts +8 -0
  166. package/dist/core/ingestion/frameworks/spring/auto-configuration.js +16 -0
  167. package/dist/core/ingestion/frameworks/spring/bean-candidates.d.ts +30 -0
  168. package/dist/core/ingestion/frameworks/spring/bean-candidates.js +182 -0
  169. package/dist/core/ingestion/frameworks/spring/bean-catalog.d.ts +12 -0
  170. package/dist/core/ingestion/frameworks/spring/bean-catalog.js +27 -0
  171. package/dist/core/ingestion/frameworks/spring/bean-factories.d.ts +33 -0
  172. package/dist/core/ingestion/frameworks/spring/bean-factories.js +65 -0
  173. package/dist/core/ingestion/frameworks/spring/conditionals.d.ts +25 -0
  174. package/dist/core/ingestion/frameworks/spring/conditionals.js +319 -0
  175. package/dist/core/ingestion/frameworks/spring/config-bindings.d.ts +24 -0
  176. package/dist/core/ingestion/frameworks/spring/config-bindings.js +115 -0
  177. package/dist/core/ingestion/frameworks/spring/di-metadata.d.ts +48 -0
  178. package/dist/core/ingestion/frameworks/spring/di-metadata.js +379 -0
  179. package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +28 -0
  180. package/dist/core/ingestion/frameworks/spring/non-http-handlers.js +152 -0
  181. package/dist/core/ingestion/frameworks/spring/resource-injection.d.ts +5 -0
  182. package/dist/core/ingestion/frameworks/spring/resource-injection.js +91 -0
  183. package/dist/core/ingestion/import-resolvers/configs/csharp.js +5 -1
  184. package/dist/core/ingestion/import-resolvers/configs/swift.js +13 -0
  185. package/dist/core/ingestion/import-resolvers/csharp.d.ts +9 -1
  186. package/dist/core/ingestion/import-resolvers/csharp.js +234 -27
  187. package/dist/core/ingestion/import-resolvers/go.d.ts +11 -1
  188. package/dist/core/ingestion/import-resolvers/go.js +44 -17
  189. package/dist/core/ingestion/import-resolvers/jvm.d.ts +2 -2
  190. package/dist/core/ingestion/import-resolvers/node-workspace-packages.d.ts +90 -0
  191. package/dist/core/ingestion/import-resolvers/node-workspace-packages.js +428 -0
  192. package/dist/core/ingestion/import-resolvers/package-dir-index.d.ts +124 -0
  193. package/dist/core/ingestion/import-resolvers/package-dir-index.js +223 -0
  194. package/dist/core/ingestion/import-resolvers/pass-cache.d.ts +50 -0
  195. package/dist/core/ingestion/import-resolvers/pass-cache.js +60 -0
  196. package/dist/core/ingestion/import-resolvers/per-file-set.d.ts +71 -0
  197. package/dist/core/ingestion/import-resolvers/per-file-set.js +11 -0
  198. package/dist/core/ingestion/import-resolvers/php.d.ts +1 -1
  199. package/dist/core/ingestion/import-resolvers/php.js +27 -8
  200. package/dist/core/ingestion/import-resolvers/python-file-index.d.ts +201 -0
  201. package/dist/core/ingestion/import-resolvers/python-file-index.js +302 -0
  202. package/dist/core/ingestion/import-resolvers/python.js +25 -6
  203. package/dist/core/ingestion/import-resolvers/ruby.d.ts +1 -1
  204. package/dist/core/ingestion/import-resolvers/rust.d.ts +2 -2
  205. package/dist/core/ingestion/import-resolvers/standard.d.ts +1 -1
  206. package/dist/core/ingestion/import-resolvers/types.d.ts +1 -12
  207. package/dist/core/ingestion/import-resolvers/utils.d.ts +65 -6
  208. package/dist/core/ingestion/import-resolvers/utils.js +215 -36
  209. package/dist/core/ingestion/import-resolvers/workspace-file-index.d.ts +72 -0
  210. package/dist/core/ingestion/import-resolvers/workspace-file-index.js +58 -0
  211. package/dist/core/ingestion/language-config.d.ts +20 -1
  212. package/dist/core/ingestion/language-config.js +18 -23
  213. package/dist/core/ingestion/language-provider.d.ts +133 -7
  214. package/dist/core/ingestion/languages/c/captures.js +63 -0
  215. package/dist/core/ingestion/languages/c/import-target.js +12 -16
  216. package/dist/core/ingestion/languages/c/query.js +17 -0
  217. package/dist/core/ingestion/languages/c/scope-resolver.js +26 -19
  218. package/dist/core/ingestion/languages/c/static-linkage.js +12 -16
  219. package/dist/core/ingestion/languages/c-cpp.js +13 -0
  220. package/dist/core/ingestion/languages/cobol/captures.js +93 -0
  221. package/dist/core/ingestion/languages/cobol/scope-resolver.js +34 -20
  222. package/dist/core/ingestion/languages/cobol.js +13 -0
  223. package/dist/core/ingestion/languages/cpp/adl.d.ts +2 -2
  224. package/dist/core/ingestion/languages/cpp/adl.js +67 -44
  225. package/dist/core/ingestion/languages/cpp/captures.js +222 -3
  226. package/dist/core/ingestion/languages/cpp/file-local-linkage.js +11 -15
  227. package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +28 -8
  228. package/dist/core/ingestion/languages/cpp/inline-namespaces.js +242 -68
  229. package/dist/core/ingestion/languages/cpp/interpret.d.ts +2 -0
  230. package/dist/core/ingestion/languages/cpp/interpret.js +126 -6
  231. package/dist/core/ingestion/languages/cpp/query.js +106 -0
  232. package/dist/core/ingestion/languages/cpp/scope-resolver.js +62 -20
  233. package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +2 -15
  234. package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +18 -10
  235. package/dist/core/ingestion/languages/csharp/captures.js +44 -0
  236. package/dist/core/ingestion/languages/csharp/import-target.js +46 -72
  237. package/dist/core/ingestion/languages/csharp/namespace-siblings.js +5 -1
  238. package/dist/core/ingestion/languages/csharp/query.js +25 -5
  239. package/dist/core/ingestion/languages/csharp/scope-resolver.js +75 -2
  240. package/dist/core/ingestion/languages/dart/captures.d.ts +10 -0
  241. package/dist/core/ingestion/languages/dart/captures.js +686 -16
  242. package/dist/core/ingestion/languages/dart/extension-type-preprocess.d.ts +7 -0
  243. package/dist/core/ingestion/languages/dart/extension-type-preprocess.js +30 -0
  244. package/dist/core/ingestion/languages/dart/import-target.js +32 -9
  245. package/dist/core/ingestion/languages/dart/index.d.ts +1 -1
  246. package/dist/core/ingestion/languages/dart/index.js +1 -1
  247. package/dist/core/ingestion/languages/dart/query.js +98 -1
  248. package/dist/core/ingestion/languages/dart/scope-resolver.js +14 -3
  249. package/dist/core/ingestion/languages/dart/simple-hooks.js +9 -0
  250. package/dist/core/ingestion/languages/dart.js +8 -1
  251. package/dist/core/ingestion/languages/go/captures.js +142 -3
  252. package/dist/core/ingestion/languages/go/generic-type-parameters.d.ts +31 -0
  253. package/dist/core/ingestion/languages/go/generic-type-parameters.js +140 -0
  254. package/dist/core/ingestion/languages/go/import-target.d.ts +3 -10
  255. package/dist/core/ingestion/languages/go/import-target.js +34 -30
  256. package/dist/core/ingestion/languages/go/index.d.ts +1 -1
  257. package/dist/core/ingestion/languages/go/interface-impls.d.ts +9 -1
  258. package/dist/core/ingestion/languages/go/interface-impls.js +693 -87
  259. package/dist/core/ingestion/languages/go/interpret.d.ts +2 -0
  260. package/dist/core/ingestion/languages/go/interpret.js +22 -8
  261. package/dist/core/ingestion/languages/go/method-owners.js +31 -12
  262. package/dist/core/ingestion/languages/go/package-clause.d.ts +46 -0
  263. package/dist/core/ingestion/languages/go/package-clause.js +75 -0
  264. package/dist/core/ingestion/languages/go/package-siblings.js +7 -11
  265. package/dist/core/ingestion/languages/go/query.js +56 -3
  266. package/dist/core/ingestion/languages/go/scope-resolver.js +39 -0
  267. package/dist/core/ingestion/languages/go.js +9 -0
  268. package/dist/core/ingestion/languages/java/analysis-features.d.ts +7 -0
  269. package/dist/core/ingestion/languages/java/analysis-features.js +25 -0
  270. package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +38 -0
  271. package/dist/core/ingestion/languages/java/capture-side-channel.js +124 -0
  272. package/dist/core/ingestion/languages/java/captures.d.ts +4 -3
  273. package/dist/core/ingestion/languages/java/captures.js +321 -49
  274. package/dist/core/ingestion/languages/java/import-target.d.ts +49 -9
  275. package/dist/core/ingestion/languages/java/import-target.js +68 -88
  276. package/dist/core/ingestion/languages/java/interpret.js +3 -2
  277. package/dist/core/ingestion/languages/java/module-resolution.d.ts +62 -0
  278. package/dist/core/ingestion/languages/java/module-resolution.js +142 -0
  279. package/dist/core/ingestion/languages/java/package-facts.d.ts +5 -0
  280. package/dist/core/ingestion/languages/java/package-facts.js +9 -0
  281. package/dist/core/ingestion/languages/java/package-siblings.d.ts +3 -16
  282. package/dist/core/ingestion/languages/java/package-siblings.js +8 -147
  283. package/dist/core/ingestion/languages/java/query.js +39 -3
  284. package/dist/core/ingestion/languages/java/record-components.d.ts +14 -0
  285. package/dist/core/ingestion/languages/java/record-components.js +185 -0
  286. package/dist/core/ingestion/languages/java/scope-resolver.js +35 -2
  287. package/dist/core/ingestion/languages/java/spring-aop.d.ts +12 -0
  288. package/dist/core/ingestion/languages/java/spring-aop.js +49 -0
  289. package/dist/core/ingestion/languages/java/spring-bean-metadata.d.ts +2 -0
  290. package/dist/core/ingestion/languages/java/spring-bean-metadata.js +8 -0
  291. package/dist/core/ingestion/languages/java/spring-conditionals.d.ts +11 -0
  292. package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
  293. package/dist/core/ingestion/languages/java/spring-config-bindings.d.ts +23 -0
  294. package/dist/core/ingestion/languages/java/spring-config-bindings.js +215 -0
  295. package/dist/core/ingestion/languages/java/spring-di.d.ts +20 -0
  296. package/dist/core/ingestion/languages/java/spring-di.js +160 -0
  297. package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +7 -0
  298. package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +32 -0
  299. package/dist/core/ingestion/languages/java.js +76 -3
  300. package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
  301. package/dist/core/ingestion/languages/javascript/captures.js +278 -4
  302. package/dist/core/ingestion/languages/javascript/import-target.d.ts +17 -21
  303. package/dist/core/ingestion/languages/javascript/import-target.js +24 -41
  304. package/dist/core/ingestion/languages/javascript/index.d.ts +54 -5
  305. package/dist/core/ingestion/languages/javascript/index.js +54 -5
  306. package/dist/core/ingestion/languages/javascript/query.d.ts +1 -0
  307. package/dist/core/ingestion/languages/javascript/query.js +232 -5
  308. package/dist/core/ingestion/languages/javascript/scope-resolver.js +12 -0
  309. package/dist/core/ingestion/languages/javascript/simple-hooks.js +2 -1
  310. package/dist/core/ingestion/languages/jvm/package-facts.d.ts +35 -0
  311. package/dist/core/ingestion/languages/jvm/package-facts.js +40 -0
  312. package/dist/core/ingestion/languages/jvm/package-siblings.d.ts +14 -0
  313. package/dist/core/ingestion/languages/jvm/package-siblings.js +197 -0
  314. package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +40 -3
  315. package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +111 -8
  316. package/dist/core/ingestion/languages/kotlin/captures.js +112 -0
  317. package/dist/core/ingestion/languages/kotlin/import-target.d.ts +8 -1
  318. package/dist/core/ingestion/languages/kotlin/import-target.js +20 -123
  319. package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
  320. package/dist/core/ingestion/languages/kotlin/index.js +1 -0
  321. package/dist/core/ingestion/languages/kotlin/module-resolution.d.ts +22 -0
  322. package/dist/core/ingestion/languages/kotlin/module-resolution.js +108 -0
  323. package/dist/core/ingestion/languages/kotlin/package-facts.d.ts +5 -0
  324. package/dist/core/ingestion/languages/kotlin/package-facts.js +9 -0
  325. package/dist/core/ingestion/languages/kotlin/package-siblings.d.ts +4 -0
  326. package/dist/core/ingestion/languages/kotlin/package-siblings.js +8 -0
  327. package/dist/core/ingestion/languages/kotlin/query.js +47 -2
  328. package/dist/core/ingestion/languages/kotlin/scope-resolver.js +36 -3
  329. package/dist/core/ingestion/languages/kotlin/spring-aop.d.ts +12 -0
  330. package/dist/core/ingestion/languages/kotlin/spring-aop.js +64 -0
  331. package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.d.ts +2 -0
  332. package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.js +8 -0
  333. package/dist/core/ingestion/languages/kotlin/spring-conditionals.d.ts +12 -0
  334. package/dist/core/ingestion/languages/kotlin/spring-conditionals.js +49 -0
  335. package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +20 -0
  336. package/dist/core/ingestion/languages/kotlin/spring-di.js +299 -0
  337. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +10 -0
  338. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +41 -0
  339. package/dist/core/ingestion/languages/kotlin.js +5 -6
  340. package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
  341. package/dist/core/ingestion/languages/php/captures.js +359 -51
  342. package/dist/core/ingestion/languages/php/import-decomposer.js +12 -0
  343. package/dist/core/ingestion/languages/php/import-target.d.ts +2 -1
  344. package/dist/core/ingestion/languages/php/import-target.js +229 -7
  345. package/dist/core/ingestion/languages/php/interpret.js +10 -0
  346. package/dist/core/ingestion/languages/php/query.js +31 -0
  347. package/dist/core/ingestion/languages/php/scope-resolver.js +1 -1
  348. package/dist/core/ingestion/languages/python/arity-metadata.d.ts +1 -0
  349. package/dist/core/ingestion/languages/python/arity-metadata.js +1 -0
  350. package/dist/core/ingestion/languages/python/captures.d.ts +3 -4
  351. package/dist/core/ingestion/languages/python/captures.js +53 -5
  352. package/dist/core/ingestion/languages/python/import-decomposer.js +22 -1
  353. package/dist/core/ingestion/languages/python/import-target.d.ts +42 -1
  354. package/dist/core/ingestion/languages/python/import-target.js +277 -91
  355. package/dist/core/ingestion/languages/python/index.d.ts +1 -1
  356. package/dist/core/ingestion/languages/python/index.js +1 -1
  357. package/dist/core/ingestion/languages/python/interpret.d.ts +52 -0
  358. package/dist/core/ingestion/languages/python/interpret.js +249 -3
  359. package/dist/core/ingestion/languages/python/query.js +9 -0
  360. package/dist/core/ingestion/languages/python/receiver-binding.d.ts +17 -2
  361. package/dist/core/ingestion/languages/python/receiver-binding.js +192 -2
  362. package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
  363. package/dist/core/ingestion/languages/python/simple-hooks.d.ts +5 -5
  364. package/dist/core/ingestion/languages/python/simple-hooks.js +9 -5
  365. package/dist/core/ingestion/languages/ruby/captures.js +200 -0
  366. package/dist/core/ingestion/languages/ruby/import-target.js +7 -5
  367. package/dist/core/ingestion/languages/ruby/query.js +93 -0
  368. package/dist/core/ingestion/languages/ruby/scope-resolver.js +2 -0
  369. package/dist/core/ingestion/languages/ruby/simple-hooks.d.ts +1 -1
  370. package/dist/core/ingestion/languages/ruby/simple-hooks.js +22 -1
  371. package/dist/core/ingestion/languages/rust/captures.js +52 -1
  372. package/dist/core/ingestion/languages/rust/interpret.js +18 -0
  373. package/dist/core/ingestion/languages/rust/method-owners.js +11 -1
  374. package/dist/core/ingestion/languages/rust/module-path.d.ts +126 -0
  375. package/dist/core/ingestion/languages/rust/module-path.js +214 -0
  376. package/dist/core/ingestion/languages/rust/qualified-call.d.ts +41 -0
  377. package/dist/core/ingestion/languages/rust/qualified-call.js +481 -0
  378. package/dist/core/ingestion/languages/rust/query.js +48 -6
  379. package/dist/core/ingestion/languages/rust/range-binding.d.ts +1 -11
  380. package/dist/core/ingestion/languages/rust/range-binding.js +149 -63
  381. package/dist/core/ingestion/languages/rust/scope-resolver.js +21 -2
  382. package/dist/core/ingestion/languages/rust.js +17 -0
  383. package/dist/core/ingestion/languages/swift/captures.js +99 -3
  384. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.d.ts +48 -0
  385. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.js +253 -0
  386. package/dist/core/ingestion/languages/swift/import-target.js +4 -9
  387. package/dist/core/ingestion/languages/swift/query.js +17 -0
  388. package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +8 -0
  389. package/dist/core/ingestion/languages/swift/receiver-binding.js +6 -2
  390. package/dist/core/ingestion/languages/swift.js +2 -0
  391. package/dist/core/ingestion/languages/typescript/captures.d.ts +90 -1
  392. package/dist/core/ingestion/languages/typescript/captures.js +288 -5
  393. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.d.ts +134 -0
  394. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.js +523 -0
  395. package/dist/core/ingestion/languages/typescript/cjs-module-exports.d.ts +54 -0
  396. package/dist/core/ingestion/languages/typescript/cjs-module-exports.js +191 -0
  397. package/dist/core/ingestion/languages/typescript/file-candidates.d.ts +29 -0
  398. package/dist/core/ingestion/languages/typescript/file-candidates.js +70 -0
  399. package/dist/core/ingestion/languages/typescript/import-decomposer.d.ts +28 -1
  400. package/dist/core/ingestion/languages/typescript/import-decomposer.js +125 -10
  401. package/dist/core/ingestion/languages/typescript/import-target.d.ts +25 -37
  402. package/dist/core/ingestion/languages/typescript/import-target.js +24 -26
  403. package/dist/core/ingestion/languages/typescript/interpret.d.ts +21 -1
  404. package/dist/core/ingestion/languages/typescript/interpret.js +45 -5
  405. package/dist/core/ingestion/languages/typescript/module-resolution.d.ts +48 -0
  406. package/dist/core/ingestion/languages/typescript/module-resolution.js +171 -0
  407. package/dist/core/ingestion/languages/typescript/nuxt-auto-imports.js +2 -1
  408. package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
  409. package/dist/core/ingestion/languages/typescript/query.js +340 -14
  410. package/dist/core/ingestion/languages/typescript/receiver-binding.d.ts +17 -0
  411. package/dist/core/ingestion/languages/typescript/receiver-binding.js +27 -0
  412. package/dist/core/ingestion/languages/typescript/scope-resolver.js +27 -40
  413. package/dist/core/ingestion/languages/typescript/simple-hooks.d.ts +0 -10
  414. package/dist/core/ingestion/languages/typescript/simple-hooks.js +22 -22
  415. package/dist/core/ingestion/languages/typescript/tsconfig.d.ts +59 -0
  416. package/dist/core/ingestion/languages/typescript/tsconfig.js +291 -0
  417. package/dist/core/ingestion/languages/typescript.js +87 -1
  418. package/dist/core/ingestion/languages/vue/import-target.d.ts +6 -22
  419. package/dist/core/ingestion/languages/vue/import-target.js +11 -47
  420. package/dist/core/ingestion/languages/vue/scope-resolver.js +4 -2
  421. package/dist/core/ingestion/local-symbol-pruner.js +11 -11
  422. package/dist/core/ingestion/method-extractors/configs/csharp.js +1 -0
  423. package/dist/core/ingestion/method-extractors/generic.js +1 -0
  424. package/dist/core/ingestion/method-types.d.ts +16 -0
  425. package/dist/core/ingestion/parsing-processor.js +32 -1
  426. package/dist/core/ingestion/pipeline-phases/di.d.ts +8 -33
  427. package/dist/core/ingestion/pipeline-phases/di.js +275 -157
  428. package/dist/core/ingestion/pipeline-phases/index.d.ts +3 -0
  429. package/dist/core/ingestion/pipeline-phases/index.js +3 -0
  430. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
  431. package/dist/core/ingestion/pipeline-phases/parse-impl.js +158 -3
  432. package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
  433. package/dist/core/ingestion/pipeline-phases/processes.d.ts +11 -2
  434. package/dist/core/ingestion/pipeline-phases/processes.js +102 -7
  435. package/dist/core/ingestion/pipeline-phases/routes.js +56 -10
  436. package/dist/core/ingestion/pipeline-phases/spring-aop.d.ts +34 -0
  437. package/dist/core/ingestion/pipeline-phases/spring-aop.js +439 -0
  438. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +34 -0
  439. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +255 -0
  440. package/dist/core/ingestion/pipeline-phases/spring-config.d.ts +37 -0
  441. package/dist/core/ingestion/pipeline-phases/spring-config.js +433 -0
  442. package/dist/core/ingestion/pipeline-phases/types.d.ts +7 -0
  443. package/dist/core/ingestion/pipeline.d.ts +27 -3
  444. package/dist/core/ingestion/pipeline.js +62 -12
  445. package/dist/core/ingestion/process-processor.d.ts +109 -2
  446. package/dist/core/ingestion/process-processor.js +464 -52
  447. package/dist/core/ingestion/resolve-references.d.ts +6 -1
  448. package/dist/core/ingestion/resolve-references.js +78 -6
  449. package/dist/core/ingestion/route-extractors/data-route-table.d.ts +25 -0
  450. package/dist/core/ingestion/route-extractors/data-route-table.js +864 -0
  451. package/dist/core/ingestion/route-extractors/dispatch-guard.d.ts +96 -0
  452. package/dist/core/ingestion/route-extractors/dispatch-guard.js +1184 -0
  453. package/dist/core/ingestion/route-extractors/spring-shared.d.ts +11 -0
  454. package/dist/core/ingestion/route-extractors/spring-shared.js +89 -0
  455. package/dist/core/ingestion/route-extractors/spring.js +109 -24
  456. package/dist/core/ingestion/scope-extractor-bridge.js +9 -1
  457. package/dist/core/ingestion/scope-extractor.d.ts +22 -7
  458. package/dist/core/ingestion/scope-extractor.js +617 -59
  459. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +381 -22
  460. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
  461. package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +7 -7
  462. package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +8 -7
  463. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +15 -1
  464. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +53 -0
  465. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
  466. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +275 -41
  467. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +123 -0
  468. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +171 -17
  469. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +56 -1
  470. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +130 -32
  471. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +30 -1
  472. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +46 -3
  473. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +64 -0
  474. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +1233 -0
  475. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +107 -5
  476. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +590 -33
  477. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +19 -4
  478. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +160 -4
  479. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.d.ts +34 -0
  480. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.js +62 -0
  481. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +64 -0
  482. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +118 -0
  483. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +109 -8
  484. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +931 -92
  485. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.d.ts +58 -0
  486. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.js +458 -0
  487. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.d.ts +180 -0
  488. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.js +418 -0
  489. package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +34 -0
  490. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +82 -38
  491. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +61 -1
  492. package/dist/core/ingestion/scope-resolution/pipeline/run.js +384 -48
  493. package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +112 -2
  494. package/dist/core/ingestion/scope-resolution/resolution-outcome.js +38 -1
  495. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +25 -3
  496. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +36 -16
  497. package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +210 -9
  498. package/dist/core/ingestion/scope-resolution/scope/walkers.js +968 -56
  499. package/dist/core/ingestion/scope-resolution/summary-maps.d.ts +28 -0
  500. package/dist/core/ingestion/scope-resolution/summary-maps.js +50 -0
  501. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.d.ts +55 -0
  502. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.js +37 -0
  503. package/dist/core/ingestion/scope-resolution/unresolved-receivers.d.ts +109 -0
  504. package/dist/core/ingestion/scope-resolution/unresolved-receivers.js +204 -0
  505. package/dist/core/ingestion/scope-resolution/utils/definition-id.d.ts +13 -0
  506. package/dist/core/ingestion/scope-resolution/utils/definition-id.js +19 -0
  507. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.d.ts +171 -0
  508. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.js +218 -0
  509. package/dist/core/ingestion/scope-resolution/workspace-index-types.d.ts +34 -0
  510. package/dist/core/ingestion/scope-resolution/workspace-index-types.js +15 -0
  511. package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +7 -20
  512. package/dist/core/ingestion/taint/typescript-model.js +34 -2
  513. package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
  514. package/dist/core/ingestion/tree-sitter-queries.js +688 -5
  515. package/dist/core/ingestion/type-env.js +11 -7
  516. package/dist/core/ingestion/type-extractors/jvm.js +17 -2
  517. package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
  518. package/dist/core/ingestion/type-extractors/shared.js +16 -0
  519. package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
  520. package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
  521. package/dist/core/ingestion/type-extractors/typescript.js +26 -0
  522. package/dist/core/ingestion/utils/ast-helpers.d.ts +311 -14
  523. package/dist/core/ingestion/utils/ast-helpers.js +745 -48
  524. package/dist/core/ingestion/utils/call-analysis.d.ts +27 -22
  525. package/dist/core/ingestion/utils/call-analysis.js +202 -7
  526. package/dist/core/ingestion/utils/callable-flow-captures.d.ts +153 -0
  527. package/dist/core/ingestion/utils/callable-flow-captures.js +928 -0
  528. package/dist/core/ingestion/utils/callable-labels.d.ts +25 -0
  529. package/dist/core/ingestion/utils/callable-labels.js +31 -0
  530. package/dist/core/ingestion/utils/effective-ram.d.ts +40 -0
  531. package/dist/core/ingestion/utils/effective-ram.js +58 -0
  532. package/dist/core/ingestion/utils/line-base.d.ts +14 -0
  533. package/dist/core/ingestion/utils/line-base.js +14 -0
  534. package/dist/core/ingestion/utils/method-props.d.ts +27 -4
  535. package/dist/core/ingestion/utils/method-props.js +29 -4
  536. package/dist/core/ingestion/utils/receiver-chain-captures.d.ts +31 -0
  537. package/dist/core/ingestion/utils/receiver-chain-captures.js +57 -0
  538. package/dist/core/ingestion/utils/receiver-chain-codec.d.ts +89 -0
  539. package/dist/core/ingestion/utils/receiver-chain-codec.js +182 -0
  540. package/dist/core/ingestion/utils/scope-tree-walk.d.ts +22 -0
  541. package/dist/core/ingestion/utils/scope-tree-walk.js +33 -0
  542. package/dist/core/ingestion/utils/template-arguments.d.ts +96 -0
  543. package/dist/core/ingestion/utils/template-arguments.js +196 -0
  544. package/dist/core/ingestion/utils/type-parameters.d.ts +49 -0
  545. package/dist/core/ingestion/utils/type-parameters.js +206 -0
  546. package/dist/core/ingestion/workers/callable-id.d.ts +72 -0
  547. package/dist/core/ingestion/workers/callable-id.js +116 -0
  548. package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
  549. package/dist/core/ingestion/workers/parse-worker.js +409 -39
  550. package/dist/core/ingestion/workers/worker-pool.d.ts +34 -27
  551. package/dist/core/ingestion/workers/worker-pool.js +133 -25
  552. package/dist/core/lbug/csv-generator.d.ts +27 -0
  553. package/dist/core/lbug/csv-generator.js +80 -17
  554. package/dist/core/lbug/extension-load-error.d.ts +2 -2
  555. package/dist/core/lbug/extension-load-error.js +44 -27
  556. package/dist/core/lbug/extension-loader.d.ts +29 -0
  557. package/dist/core/lbug/extension-loader.js +32 -7
  558. package/dist/core/lbug/graph-emit-sink.d.ts +264 -0
  559. package/dist/core/lbug/graph-emit-sink.js +581 -0
  560. package/dist/core/lbug/lbug-adapter.d.ts +337 -3
  561. package/dist/core/lbug/lbug-adapter.js +772 -67
  562. package/dist/core/lbug/lbug-config.d.ts +93 -6
  563. package/dist/core/lbug/lbug-config.js +269 -9
  564. package/dist/core/lbug/native-check.d.ts +39 -0
  565. package/dist/core/lbug/native-check.js +323 -46
  566. package/dist/core/lbug/pdg-emit-sink.d.ts +13 -4
  567. package/dist/core/lbug/pdg-emit-sink.js +21 -111
  568. package/dist/core/lbug/pool-adapter.d.ts +23 -1
  569. package/dist/core/lbug/pool-adapter.js +115 -7
  570. package/dist/core/lbug/query-batch.d.ts +75 -0
  571. package/dist/core/lbug/query-batch.js +102 -0
  572. package/dist/core/lbug/rel-pair-routing.d.ts +160 -2
  573. package/dist/core/lbug/rel-pair-routing.js +228 -10
  574. package/dist/core/lbug/schema.d.ts +162 -3
  575. package/dist/core/lbug/schema.js +392 -157
  576. package/dist/core/lbug/sidecar-recovery.d.ts +1 -0
  577. package/dist/core/lbug/sidecar-recovery.js +1 -1
  578. package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
  579. package/dist/core/lbug/sync-csv-writer.js +108 -0
  580. package/dist/core/lbug/wal-checkpoint-driver.js +3 -0
  581. package/dist/core/platform/capabilities.d.ts +0 -1
  582. package/dist/core/platform/capabilities.js +12 -7
  583. package/dist/core/run-analyze.d.ts +150 -3
  584. package/dist/core/run-analyze.js +1562 -151
  585. package/dist/core/search/bm25-index.d.ts +11 -0
  586. package/dist/core/search/bm25-index.js +60 -26
  587. package/dist/core/search/fts-indexes.d.ts +167 -2
  588. package/dist/core/search/fts-indexes.js +264 -10
  589. package/dist/core/wiki/graph-queries.js +145 -112
  590. package/dist/core/wiki/llm-client.d.ts +37 -5
  591. package/dist/core/wiki/llm-client.js +88 -17
  592. package/dist/core/wiki/prompts.d.ts +19 -0
  593. package/dist/core/wiki/prompts.js +20 -1
  594. package/dist/lib/utils.d.ts +113 -0
  595. package/dist/lib/utils.js +185 -0
  596. package/dist/mcp/http-transport.d.ts +5 -0
  597. package/dist/mcp/http-transport.js +19 -5
  598. package/dist/mcp/local/aop-metadata.d.ts +77 -0
  599. package/dist/mcp/local/aop-metadata.js +227 -0
  600. package/dist/mcp/local/bean-metadata.d.ts +3 -0
  601. package/dist/mcp/local/bean-metadata.js +46 -0
  602. package/dist/mcp/local/local-backend.d.ts +167 -6
  603. package/dist/mcp/local/local-backend.js +1756 -405
  604. package/dist/mcp/local/path-predicate.d.ts +19 -0
  605. package/dist/mcp/local/path-predicate.js +21 -0
  606. package/dist/mcp/local/pdg-impact.d.ts +132 -10
  607. package/dist/mcp/local/pdg-impact.js +391 -98
  608. package/dist/mcp/output-budget.d.ts +5 -0
  609. package/dist/mcp/output-budget.js +52 -0
  610. package/dist/mcp/read-only-policy.d.ts +12 -0
  611. package/dist/mcp/read-only-policy.js +102 -0
  612. package/dist/mcp/repository-policy.d.ts +35 -0
  613. package/dist/mcp/repository-policy.js +333 -0
  614. package/dist/mcp/resources.js +34 -7
  615. package/dist/mcp/server.d.ts +5 -2
  616. package/dist/mcp/server.js +48 -18
  617. package/dist/mcp/tools.d.ts +8 -8
  618. package/dist/mcp/tools.js +91 -20
  619. package/dist/server/analyze-job.d.ts +40 -2
  620. package/dist/server/analyze-job.js +30 -2
  621. package/dist/server/analyze-launch.d.ts +1 -1
  622. package/dist/server/analyze-launch.js +79 -10
  623. package/dist/server/analyze-worker-core.d.ts +3 -2
  624. package/dist/server/analyze-worker-core.js +15 -3
  625. package/dist/server/analyze-worker-ipc.d.ts +1 -1
  626. package/dist/server/analyze-worker-ipc.js +4 -0
  627. package/dist/server/analyze-worker-protocol.d.ts +59 -0
  628. package/dist/server/analyze-worker-protocol.js +1 -0
  629. package/dist/server/analyze-worker.d.ts +1 -17
  630. package/dist/server/analyze-worker.js +29 -6
  631. package/dist/server/api.d.ts +2 -11
  632. package/dist/server/api.js +200 -155
  633. package/dist/server/embed-run-outcome.d.ts +89 -0
  634. package/dist/server/embed-run-outcome.js +88 -0
  635. package/dist/server/git-clone.js +6 -2
  636. package/dist/server/mcp-http.d.ts +1 -1
  637. package/dist/server/mcp-http.js +4 -2
  638. package/dist/server/middleware.d.ts +116 -9
  639. package/dist/server/middleware.js +291 -22
  640. package/dist/server/sse-progress.d.ts +41 -0
  641. package/dist/server/sse-progress.js +125 -0
  642. package/dist/server/upload-ingest.js +2 -1
  643. package/dist/server/validation.js +2 -1
  644. package/dist/storage/branch-index.d.ts +11 -6
  645. package/dist/storage/branch-index.js +15 -7
  646. package/dist/storage/file-hash.js +2 -2
  647. package/dist/storage/fs-atomic.d.ts +25 -0
  648. package/dist/storage/fs-atomic.js +42 -0
  649. package/dist/storage/git.d.ts +165 -0
  650. package/dist/storage/git.js +352 -3
  651. package/dist/storage/index-lock.d.ts +83 -0
  652. package/dist/storage/index-lock.js +654 -0
  653. package/dist/storage/parse-cache.js +482 -1
  654. package/dist/storage/parsedfile-store.d.ts +8 -0
  655. package/dist/storage/parsedfile-store.js +235 -1
  656. package/dist/storage/repo-manager.d.ts +29 -309
  657. package/dist/storage/repo-manager.js +187 -165
  658. package/dist/storage/repo-meta.d.ts +530 -0
  659. package/dist/storage/repo-meta.js +100 -0
  660. package/dist/types/pipeline.d.ts +37 -0
  661. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +1 -1
  662. package/hooks/claude/gitnexus-hook.cjs +1 -1
  663. package/hooks/claude/resolve-analyze-cmd.cjs +80 -13
  664. package/package.json +20 -12
  665. package/scripts/cross-platform-shard.ts +143 -0
  666. package/scripts/cross-platform-tests.ts +94 -0
  667. package/scripts/ensure-fts.ts +14 -3
  668. package/scripts/run-cross-platform.ts +36 -10
  669. package/scripts/sync-plugin-manifests.mjs +192 -0
  670. package/skills/gitnexus-cli.md +3 -3
  671. package/skills/gitnexus-debugging.md +37 -7
  672. package/skills/gitnexus-exploring.md +26 -4
  673. package/skills/gitnexus-impact-analysis.md +71 -10
  674. package/skills/gitnexus-lfg/README.md +55 -0
  675. package/skills/gitnexus-lfg/SKILL.md +86 -0
  676. package/skills/gitnexus-plan/README.md +147 -0
  677. package/skills/gitnexus-plan/SKILL.md +348 -0
  678. package/skills/gitnexus-plan/references/context-ledger.md +137 -0
  679. package/skills/gitnexus-plan/references/context-pack.md +126 -0
  680. package/skills/gitnexus-plan/references/evidence-provenance.md +309 -0
  681. package/skills/gitnexus-plan/references/pdg-slice.md +109 -0
  682. package/skills/gitnexus-plan/references/plan-template.md +201 -0
  683. package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +2366 -0
  684. package/skills/gitnexus-refactoring.md +48 -5
  685. package/skills/gitnexus-review/SKILL.md +279 -0
  686. package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +42 -0
  687. package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +39 -0
  688. package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +37 -0
  689. package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +40 -0
  690. package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +42 -0
  691. package/skills/gitnexus-review/ci-personas/ci-security-lens.md +39 -0
  692. package/skills/gitnexus-taint-analysis.md +13 -7
  693. package/skills/gitnexus-work/README.md +71 -0
  694. package/skills/gitnexus-work/SKILL.md +272 -0
  695. package/skills/gitnexus-work/references/evidence-provenance.md +309 -0
  696. package/skills/gitnexus-work/scripts/evidence-provenance.mjs +2366 -0
  697. package/vendor/leiden/utils.cjs +28 -1
  698. package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
  699. package/web/assets/__vite-browser-external-bMKyYQkO.js +1 -0
  700. package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
  701. package/web/assets/agent-DIzEQ1JJ.js +626 -0
  702. package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
  703. package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
  704. package/web/assets/blockDiagram-54WLDVWM-Dg_hrRWE.js +132 -0
  705. package/web/assets/{c4Diagram-Y2BXMSZH-DOXVs7-C.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +6 -6
  706. package/web/assets/chunk-224SPVON-B8gxtXpy.js +1 -0
  707. package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +127 -0
  708. package/web/assets/chunk-2SREHG4O-Dip42xOq.js +1 -0
  709. package/web/assets/chunk-4RFN2BYJ-DHHWuC-n.js +1 -0
  710. package/web/assets/chunk-66DQ2XMT-CM0xjFAN.js +1 -0
  711. package/web/assets/chunk-6BELYETK-ChsYtfHW.js +1 -0
  712. package/web/assets/chunk-6L755F7B-CMhLBxi2.js +1 -0
  713. package/web/assets/chunk-7CWYLC5S-DRgGkkpF.js +2 -0
  714. package/web/assets/chunk-A7VWPJGB-B4O3oQdQ.js +1 -0
  715. package/web/assets/chunk-BI6VK774-D0oaWk8V.js +1 -0
  716. package/web/assets/chunk-D6VWDJW2-BxcBdZ9c.js +2 -0
  717. package/web/assets/chunk-DMV4VAQV-Bn6WXDSX.js +4 -0
  718. package/web/assets/chunk-E5QJAATJ-dh-5CtIV.js +2 -0
  719. package/web/assets/chunk-EQFTRU2I-1ix7TzW9.js +2 -0
  720. package/web/assets/chunk-FWYVLQTC-BgDItRzJ.js +1 -0
  721. package/web/assets/chunk-HNC4WDU7-DoU3KnA7.js +1 -0
  722. package/web/assets/chunk-L5GCOVLC-CE2w8Nm_.js +161 -0
  723. package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +321 -0
  724. package/web/assets/chunk-LORZLZWG-B57uGw2N.js +88 -0
  725. package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +62 -0
  726. package/web/assets/chunk-NV3KIAZN-5yvcpMiu.js +1 -0
  727. package/web/assets/chunk-OIYT25JQ-CQ6KOZGX.js +1 -0
  728. package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +10 -0
  729. package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +156 -0
  730. package/web/assets/chunk-RRFMTAIC-CMN0wcYA.js +1 -0
  731. package/web/assets/{chunk-RLI5ZMPA-CkXZ0y0U.js → chunk-SATU7PGQ-B1zhgOvc.js} +1 -1
  732. package/web/assets/chunk-STOV2HOB-GnExfzIX.js +1 -0
  733. package/web/assets/chunk-SZD42YQK-ijyKKVr1.js +70 -0
  734. package/web/assets/chunk-TFPGFQPA-Dj6a-0pC.js +231 -0
  735. package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +2 -0
  736. package/web/assets/chunk-TZUXEDM2-B7p9AcTw.js +1 -0
  737. package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +1 -0
  738. package/web/assets/{chunk-6764PJDD-C7xxk063.js → chunk-VE5CLXGZ-C1vB7wpY.js} +1 -1
  739. package/web/assets/chunk-VJFVEZTB-CX66F2ep.js +206 -0
  740. package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +1 -0
  741. package/web/assets/chunk-WJBAP47W-BckNkuEN.js +1 -0
  742. package/web/assets/chunk-XNMVGMAZ-Cg_LnPtj.js +1 -0
  743. package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +1 -0
  744. package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +1 -0
  745. package/web/assets/{cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js → cose-bilkent-RZA4XIPR-BHpK4Crp.js} +1 -1
  746. package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +1 -0
  747. package/web/assets/cynefinDiagram-TR7LZUCG-C3Iar9lZ.js +62 -0
  748. package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +4 -0
  749. package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +30 -0
  750. package/web/assets/diagram-JCD7PQ7C-DC5-9FRr.js +24 -0
  751. package/web/assets/diagram-KFBZAVDW-Dfmf_4ti.js +3 -0
  752. package/web/assets/diagram-L7DVE3PN-GIRyVUtt.js +41 -0
  753. package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +24 -0
  754. package/web/assets/ebnfDiagram-DRHRQJWO-D8_CI4ZF.js +1 -0
  755. package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +85 -0
  756. package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +1 -0
  757. package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +1 -0
  758. package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +292 -0
  759. package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +1 -0
  760. package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +106 -0
  761. package/web/assets/{index-B4eB4dNZ.js → index-BBNl0qfX.js} +51 -51
  762. package/web/assets/index-CJDpyH-n.css +2 -0
  763. package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +1 -0
  764. package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +2 -0
  765. package/web/assets/{ishikawaDiagram-BNXS4ZKH-BLjivjXL.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +6 -6
  766. package/web/assets/{journeyDiagram-M6C3CM3L-Cetgs3NH.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +6 -6
  767. package/web/assets/{kanban-definition-75IXJCU3-DMlCaIpf.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +27 -27
  768. package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
  769. package/web/assets/{mindmap-definition-2TDM6QVE-B4GbXQBc.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +29 -29
  770. package/web/assets/node-Ct_zna8U.js +8 -0
  771. package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +1 -0
  772. package/web/assets/pegDiagram-YKIO5C6U-QGeQLEq2.js +1 -0
  773. package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +1 -0
  774. package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +39 -0
  775. package/web/assets/preload-helper-Czpn1I53.js +1 -0
  776. package/web/assets/{quadrantDiagram-VICAPDV7-B1TQnlm0.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +6 -6
  777. package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +1 -0
  778. package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +1 -0
  779. package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +1 -0
  780. package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +1 -0
  781. package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +1 -0
  782. package/web/assets/railroadDiagram-M77LTMSB-AXu4vxk_.js +1 -0
  783. package/web/assets/requirementDiagram-RASO5HTO-B-l8InpK.js +84 -0
  784. package/web/assets/sankeyDiagram-F32LOJ6L-Kd7zjJgX.js +40 -0
  785. package/web/assets/sdk-CzHHH8tD.js +37 -0
  786. package/web/assets/sequenceDiagram-URATNSBD-BlcdY9DS.js +162 -0
  787. package/web/assets/sizeCapture-5GORAGP4-BEqQzsxs.js +1 -0
  788. package/web/assets/src-C5sx_gMp.js +1 -0
  789. package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +1 -0
  790. package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +1 -0
  791. package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +2 -0
  792. package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +8 -0
  793. package/web/assets/timeline-definition-WJXWRH4I-DUfp1R3E.js +120 -0
  794. package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +1 -0
  795. package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +1 -0
  796. package/web/assets/vennDiagram-K3VCMQLI-Bj-FN-XS.js +34 -0
  797. package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +1 -0
  798. package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +78 -0
  799. package/web/assets/xychartDiagram-5VRUVLCW-CK_rbSWE.js +7 -0
  800. package/web/index.html +17 -15
  801. package/dist/core/ingestion/languages/python/index-stats.d.ts +0 -18
  802. package/dist/core/ingestion/languages/python/index-stats.js +0 -25
  803. package/skills/gitnexus-pr-review.md +0 -163
  804. package/web/assets/ProcessFlowModal-Dna7GkwO.js +0 -22
  805. package/web/assets/agent-DNYDy-KA.js +0 -660
  806. package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
  807. package/web/assets/architectureDiagram-UL44E2DR-BU5ZRITg.js +0 -36
  808. package/web/assets/blockDiagram-7IZFK4PR-Dut1BpTV.js +0 -132
  809. package/web/assets/chunk-2T2R6R2M-pkw2oXHH.js +0 -4
  810. package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +0 -1
  811. package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +0 -321
  812. package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +0 -159
  813. package/web/assets/chunk-67TQ5CYL-zxhDWgyF.js +0 -124
  814. package/web/assets/chunk-7J6CGLKN-AmkN8jJN.js +0 -10
  815. package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +0 -1
  816. package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +0 -1
  817. package/web/assets/chunk-INKRHTLW-D9BM9HWZ.js +0 -70
  818. package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
  819. package/web/assets/chunk-KGFNY3KK-tD2F6wxK.js +0 -62
  820. package/web/assets/chunk-KGYTTC2M-zm6n242I.js +0 -1
  821. package/web/assets/chunk-KNLZD3CH-BGlP6X9R.js +0 -1
  822. package/web/assets/chunk-LCXTWHL2-Ba9JK-6F.js +0 -231
  823. package/web/assets/chunk-LII3EMHJ-EGx-eBIu.js +0 -1
  824. package/web/assets/chunk-LRIF4GLE-C3_PqUBq.js +0 -1
  825. package/web/assets/chunk-QA3QBVWF-D4cSJBf6.js +0 -2
  826. package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
  827. package/web/assets/chunk-RG4AUYOV-OqBBMwuQ.js +0 -206
  828. package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
  829. package/web/assets/chunk-T2UQINTJ-BJusEiGe.js +0 -1
  830. package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +0 -1
  831. package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +0 -1
  832. package/web/assets/chunk-UY5QBCOK-BCpUlARQ.js +0 -1
  833. package/web/assets/chunk-VU6ZFW4Y-BeXVk45_.js +0 -2
  834. package/web/assets/chunk-ZXARS5L4-BI_qR2Nm.js +0 -1
  835. package/web/assets/classDiagram-KGZ6W3CR-D9zSIg0x.js +0 -1
  836. package/web/assets/classDiagram-v2-72OJOZXJ-D9zSIg0x.js +0 -1
  837. package/web/assets/dagre-ND4H6XIP-CpcV5kbl.js +0 -4
  838. package/web/assets/diagram-3NCE3AQN-6SMxBRpj.js +0 -43
  839. package/web/assets/diagram-GF46GFSD-BZEdNcRZ.js +0 -24
  840. package/web/assets/diagram-HNR7UZ2L-DxKW2a2Y.js +0 -3
  841. package/web/assets/diagram-QXG6HAR7-HfTHcXX_.js +0 -24
  842. package/web/assets/diagram-WEQXMOUZ-CyijUS8r.js +0 -10
  843. package/web/assets/erDiagram-L5TCEMPS-D0fvpWEX.js +0 -85
  844. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
  845. package/web/assets/flowDiagram-H6V6AXG4-Bvr9bbhk.js +0 -162
  846. package/web/assets/ganttDiagram-JCBTUEKG-TzODrLzv.js +0 -292
  847. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
  848. package/web/assets/gitGraphDiagram-S2ZK5IYY-ONQSwJIY.js +0 -106
  849. package/web/assets/index-CX_fADmQ.css +0 -2
  850. package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +0 -1
  851. package/web/assets/infoDiagram-3YFTVSEB-DIPVUIQ6.js +0 -2
  852. package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
  853. package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +0 -1
  854. package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +0 -1
  855. package/web/assets/pieDiagram-CU6KROY3-D3YC_xyg.js +0 -30
  856. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
  857. package/web/assets/requirementDiagram-JXO7QTGE-f8wczLQf.js +0 -84
  858. package/web/assets/sankeyDiagram-URQDO5SZ-BTxzG5j0.js +0 -40
  859. package/web/assets/sequenceDiagram-VS2MUI6T-DuamM-IR.js +0 -162
  860. package/web/assets/src-BNCXICdA.js +0 -1
  861. package/web/assets/stateDiagram-7D4R322I-Ch2pEUcw.js +0 -1
  862. package/web/assets/stateDiagram-v2-36443NZ5-7ANuoZLL.js +0 -1
  863. package/web/assets/timeline-definition-O6YCAMPW-07BR8R8G.js +0 -120
  864. package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +0 -1
  865. package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +0 -1
  866. package/web/assets/vennDiagram-MWXL3ELB-BQX2ossk.js +0 -34
  867. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
  868. package/web/assets/wardleyDiagram-CUQ6CDDI-CGIJBBiK.js +0 -78
  869. package/web/assets/xychartDiagram-N2JHSOCM-B3HNMuWp.js +0 -7
  870. /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
@@ -15,7 +15,7 @@
15
15
  * - propagatesReturnTypesAcrossImports (default true)
16
16
  * - fieldFallbackOnMethodLookup (default true — turn OFF for
17
17
  * statically-typed languages; the heuristic over-connects)
18
- * - unwrapCollectionAccessor — property-style collection views
18
+ * - elementTypeOf — container element type, by subscript or accessor
19
19
  * - collapseMemberCallsByCallerTarget — one edge per caller/target
20
20
  * - populateNamespaceSiblings — cross-file implicit visibility
21
21
  * - hoistTypeBindingsToModule — enable ONLY when method return
@@ -113,13 +113,24 @@
113
113
  * 3. Case 0.5 implicit-`this` chain walk — GATED: fires only for
114
114
  * languages that set `resolveThisViaEnclosingClass === true`;
115
115
  * it intercepts every bare-`this` call/read/write site ahead of
116
- * Case 4 and does NOT emit Case 4's interface-dispatch fan-out,
117
- * so enabling the toggle for a language changes that language's
118
- * `this` dispatch semantics (see the toggle's doc below)
116
+ * Case 4 and does NOT emit the interface-dispatch fan-out that
117
+ * Cases 0, 3b and 4 all perform (Case 0 gained it in #2829 and
118
+ * Case 3b in #2832, leaving 0.5 the only INSTANCE-receiver case
119
+ * that folds or walks to a receiver type without fanning out.
120
+ * Read that narrowly: Case 2 also walks an MRO and its binding
121
+ * admits `Interface`, but its receiver IS the type name, so the
122
+ * site is static dispatch and a fan-out would be wrong; Cases 3
123
+ * and 5 resolve by direct lookup rather than a fold or MRO walk,
124
+ * and no language is known to reach Case 3 with an Interface —
125
+ * every one that could strips the namespace qualifier first,
126
+ * sending it to Case 4), so enabling the toggle
127
+ * for a language changes that language's `this` dispatch
128
+ * semantics (see the toggle's doc below)
119
129
  * 4. Case 1 namespace-receiver
120
130
  * 5. Case 2 class-name receiver
121
131
  * 6. Case 3 dotted typeBinding for namespace prefix
122
- * 7. Case 3b chain-typebinding (compound resolver)
132
+ * 7. Case 3b chain-typebinding (compound resolver + interface-dispatch
133
+ * fan-out on an Interface fold, #2832)
123
134
  * 8. Case 4 simple typeBinding (MRO walk + findOwnedMember)
124
135
  * Reordering or merging cases changes resolution semantics. The
125
136
  * numbering is part of the contract — keep the comments.
@@ -267,13 +278,16 @@
267
278
  * Plan that introduced most of these invariants:
268
279
  * `docs/plans/2026-04-20-001-refactor-emit-pipeline-generalization-plan.md`.
269
280
  */
270
- import type { BindingRef, Callsite, ConstraintContext, ParsedFile, ReferenceSite, ScopeId, SupportedLanguages, SymbolDefinition } from '../../../../_shared/index.js';
281
+ import type { DecorationStripper } from '../scope/walkers.js';
282
+ import type { BindingRef, Callsite, ConstraintContext, ParsedFile, ParsedImport, ReferenceSite, ScopeId, SupportedLanguages, SymbolDefinition } from '../../../../_shared/index.js';
271
283
  import type { KnowledgeGraph } from '../../../graph/types.js';
272
284
  import type { GraphNodeLookup } from '../graph-bridge/node-lookup.js';
273
285
  import { LanguageProvider } from '../../language-provider.js';
274
286
  import { ScopeResolutionIndexes } from '../../model/scope-resolution-indexes.js';
275
287
  import type { SemanticModel } from '../../model/semantic-model.js';
276
288
  import type { ConversionRankFn } from '../passes/overload-narrowing.js';
289
+ import type { HeritageTypeArgumentSink } from '../utils/generic-instantiation.js';
290
+ import type { WorkspaceResolutionIndex } from '../workspace-index.js';
277
291
  /** A LinearizeStrategy receives the full ancestor map so C3-style
278
292
  * algorithms (which need to merge each parent's MRO) can implement
279
293
  * themselves. Python's depth-first first-seen only consumes
@@ -288,9 +302,59 @@ export type ReceiverMemberResolution = {
288
302
  readonly kind: 'ambiguous';
289
303
  readonly candidateIds: readonly string[];
290
304
  };
305
+ export interface ImportResolutionContext {
306
+ readonly parsedFiles: readonly ParsedFile[];
307
+ readonly parsedImport?: ParsedImport;
308
+ }
291
309
  /** Re-exported for ScopeResolver consumers — same shape as
292
310
  * `RegistryProviders.constraintCompatibility`'s third parameter. */
293
311
  export type { ConstraintContext } from '../../../../_shared/index.js';
312
+ /** How a container's element was reached in the source. */
313
+ export type ElementAccessRoute = {
314
+ readonly kind: 'index';
315
+ } | {
316
+ readonly kind: 'accessor';
317
+ readonly name: string;
318
+ };
319
+ /** One structurally-detected implementor plus the receiver form in which it
320
+ * satisfies the interface (see `detectInterfaceImplementations`). */
321
+ export interface StructuralImplementor {
322
+ readonly structDefId: string;
323
+ readonly receiverForm: 'value' | 'pointer';
324
+ }
325
+ /**
326
+ * One interface whose satisfaction check could not be COMPLETED for at least
327
+ * one candidate type — not one that was checked and came out negative.
328
+ *
329
+ * The distinction is the whole point (#2873): a detector that reports only
330
+ * positives makes "nobody implements this" and "we could not tell whether
331
+ * anybody implements this" byte-identical, and the second one silently becomes
332
+ * a confident zero in `impact`. Consumers must not turn these into edges; they
333
+ * exist so a query can say it is answering with a lower bound.
334
+ */
335
+ export interface UndecidedSatisfaction {
336
+ readonly interfaceDefId: string;
337
+ readonly interfaceName: string;
338
+ readonly filePath: string;
339
+ /** How many candidate types went unjudged for this interface. */
340
+ readonly undecidedCandidates: number;
341
+ /**
342
+ * The candidate types themselves, by name.
343
+ *
344
+ * Both sides are recorded because a query arrives from either one. Asking
345
+ * `impact` about the IMPLEMENTATION — the case #2873 reports — never touches
346
+ * the interface node at all: the walk starts at a method whose owner has no
347
+ * heritage edge precisely because the check was undecided, so an
348
+ * interface-keyed record alone would leave that query unhedged.
349
+ */
350
+ readonly candidateNames: readonly string[];
351
+ }
352
+ /** What `detectInterfaceImplementations` answers: the positives, plus the
353
+ * questions it could not answer. */
354
+ export interface StructuralImplementationResult {
355
+ readonly implementations: Map<string, readonly StructuralImplementor[]>;
356
+ readonly undecided: readonly UndecidedSatisfaction[];
357
+ }
294
358
  export interface ScopeResolver {
295
359
  /** Identity for telemetry + per-language flag check. */
296
360
  readonly language: SupportedLanguages;
@@ -320,8 +384,19 @@ export interface ScopeResolver {
320
384
  * orchestrator). TypeScript uses this to thread `tsconfig.json` path
321
385
  * aliases through to the standard resolver. Languages that don't
322
386
  * need any extra config ignore the parameter.
387
+ *
388
+ * `context.parsedFiles` is the complete, read-only language workspace. It is
389
+ * optional so resolvers that only need paths retain their existing shape.
390
+ * `context.parsedImport` is the exact import being finalized. PHP uses both
391
+ * when a PSR-4 import names a function instead of a file.
323
392
  */
324
- resolveImportTarget(targetRaw: string, fromFile: string, allFilePaths: ReadonlySet<string>, resolutionConfig?: unknown): string | readonly string[] | null;
393
+ resolveImportTarget(targetRaw: string, fromFile: string, allFilePaths: ReadonlySet<string>, resolutionConfig?: unknown, context?: ImportResolutionContext): string | readonly string[] | null;
394
+ /**
395
+ * Optionally reclassify an import as a namespace handle after target
396
+ * resolution proves the imported name is itself a module. Returning false
397
+ * retains ordinary named-binding behavior.
398
+ */
399
+ readonly isNamespaceImport?: (parsedImport: ParsedImport, targetFile: string, fromFile: string) => boolean;
325
400
  /**
326
401
  * Enumerate names visible through a wildcard import after the target
327
402
  * module scope has been linked. Languages that do not support
@@ -364,6 +439,21 @@ export interface ScopeResolver {
364
439
  * `(def, callsite)` and need an adapter at the wiring site.
365
440
  */
366
441
  arityCompatibility(callsite: Callsite, def: SymbolDefinition): ArityVerdict;
442
+ /**
443
+ * Add provider-specific callable value targets beyond the shared
444
+ * Function/Method/Constructor set. This is intentionally a predicate hook:
445
+ * shared flow analysis never branches on a language name or syntax kind.
446
+ */
447
+ readonly isCallableValueTarget?: (def: SymbolDefinition) => boolean;
448
+ /**
449
+ * Restrict this provider's scope-resolution graph mutations to callable-value
450
+ * CALLS edges. Providers with an existing structural edge pipeline can use
451
+ * the shared scope model and callable solver without duplicating their
452
+ * established CALLS, IMPORTS, heritage, or property-dispatch edges.
453
+ *
454
+ * Default: `all`.
455
+ */
456
+ readonly scopeResolutionEdgeMode?: 'all' | 'callable-flow-only';
367
457
  /**
368
458
  * Per-language constraint compatibility between a callsite and a
369
459
  * candidate `def` that carries `templateConstraints` metadata.
@@ -432,9 +522,19 @@ export interface ScopeResolver {
432
522
  * shape. Must be idempotent (the orchestrator may call it more than once
433
523
  * during re-resolution).
434
524
  *
525
+ * `recordTypeArguments` is the same sink `preEmitInheritanceEdges` writes to:
526
+ * the generic INSTANTIATION a heritage clause was written with, so
527
+ * interface-dispatch fan-out can refuse an implementor of an incompatible one
528
+ * (#2912). An implementation that emits an edge for a generic base
529
+ * (`impl Validator<String> for V`, `class V implements Validator<String>`)
530
+ * should call it with the same (source, target) graph ids it just used;
531
+ * anything not recorded reads as "unknown" and keeps the pre-#2912 fan-out.
532
+ * Ignoring it entirely is correct for a language whose heritage carries no
533
+ * type arguments (Ruby `include`).
534
+ *
435
535
  * Default: undefined (no extra heritage edges needed).
436
536
  */
437
- readonly emitHeritageEdges?: (graph: KnowledgeGraph, parsedFiles: readonly ParsedFile[], nodeLookup: GraphNodeLookup, scopes?: ScopeResolutionIndexes) => void;
537
+ readonly emitHeritageEdges?: (graph: KnowledgeGraph, parsedFiles: readonly ParsedFile[], nodeLookup: GraphNodeLookup, scopes?: ScopeResolutionIndexes, recordTypeArguments?: HeritageTypeArgumentSink) => void;
438
538
  /**
439
539
  * Optional hook to emit IMPORTS edges that no syntactic import
440
540
  * statement produces. Some languages grant files implicit visibility
@@ -555,6 +655,21 @@ export interface ScopeResolver {
555
655
  * and any text the simple `isSuperReceiver` hook also rejects.
556
656
  */
557
657
  readonly isSuperReceiverInContext?: (receiverText: string, callerScope: ScopeId, scopes: ScopeResolutionIndexes) => boolean;
658
+ /**
659
+ * Source-text retention policy for post-extraction hooks that receive a
660
+ * `fileContents` context (`populateWorkspaceOwners`,
661
+ * `populateNamespaceSiblings`, `populateRangeBindings`, and
662
+ * `emitPostResolutionEdges`).
663
+ *
664
+ * The default, `all-files`, preserves the existing contract: source text is
665
+ * loaded for every file before any of those hooks run. A resolver may choose
666
+ * `uncached-files` only when all of its hooks derive cached-file facts from
667
+ * `ParsedFile` / capture side-channels and tolerate an empty content string
668
+ * for pre-extracted files. This keeps the durable ParsedFile path at
669
+ * O(uncached source) memory without putting language checks in the shared
670
+ * pipeline.
671
+ */
672
+ readonly postExtractSourceTextPolicy?: 'all-files' | 'uncached-files';
558
673
  /**
559
674
  * Whether the orchestrator should run `propagateImportedReturnTypes`
560
675
  * after finalize. Default `true`. TypeScript with explicit type
@@ -571,19 +686,56 @@ export interface ScopeResolver {
571
686
  */
572
687
  readonly fieldFallbackOnMethodLookup?: boolean;
573
688
  /**
574
- * Unwrap a property-style collection accessor on a typed receiver
575
- * to its element type. Called by `resolveCompoundReceiverClass`
576
- * when walking dotted member-access chains of the form
577
- * `receiver.Accessor`. The provider returns the element type's
578
- * simple name, or `undefined` when the accessor doesn't unwrap —
579
- * in which case the regular field-walk resumes.
689
+ * Element type of a container, reached either by a subscript (`repos[0]`) or
690
+ * by a property-style collection view (`dict.Values`). Returns the element
691
+ * type's simple name, or `undefined` when the container does not unwrap by
692
+ * that route — in which case the caller resumes its normal walk.
693
+ *
694
+ * ONE hook for both routes, deliberately. They were previously two
695
+ * (`unwrapCollectionAccessor` for the property route, `unwrapCollectionElement`
696
+ * for the subscript route), which meant a language implementing one silently
697
+ * got nothing for the other: C# parsed `Dictionary<K,V>` for `.Values` but
698
+ * returned nothing for `list[0]`, and TypeScript did the reverse. Two entries
699
+ * answering one question, each accreting an implementation per language.
580
700
  *
581
- * Use this only for languages that expose collection views as
582
- * properties rather than method calls; languages whose collection
583
- * views are `.values()` / `.keys()` method calls leave this
584
- * undefined and let the normal call-expression branch handle them.
701
+ * `via` carries the route so a provider can distinguish them where it matters
702
+ * (a `Dictionary` yields its VALUE type by subscript but either type by
703
+ * accessor name); a provider that does not care can ignore it.
704
+ *
705
+ * Consulted ONLY where the source actually performed the access. It is NOT a
706
+ * general type-name normalizer: unwrapping a container at a bare class lookup
707
+ * would let `repos.find(x)` fold to `Repo.find`, because a container's member
708
+ * set is not its element's. For the same reason it is deliberately separate
709
+ * from `stripTypePreservingDecoration`: a pointer or a nullable leaves the
710
+ * member set unchanged and is safe to strip at the lookup; a container is not.
711
+ *
712
+ * ## The `index` route is REQUIRED, and `undefined` means "not a container"
713
+ *
714
+ * A language that leaves the `index` route unanswered gets NO index folding —
715
+ * the structural fold declines the step rather than passing the position
716
+ * through. That is not a default worth softening. `undefined` used to mean
717
+ * "fall back to identity", on the theory that a capture layer which already
718
+ * reduced the container (Go's `normalizeGoTypeName`, C#/TypeScript's
719
+ * `stripGeneric`) leaves nothing to unwrap. The theory holds for a container;
720
+ * it is false for an ordinary class the source happened to subscript, and
721
+ * `rawName` cannot tell those apart — `repos: User[]` and `grid: Grid` both
722
+ * arrive as a bare resolvable class name. Identity there typed `grid[0].run()`
723
+ * as `Grid.run` and `t[0].Render()` as `Table.Render`: a wrong owner, which
724
+ * this pipeline ranks strictly below a missing edge.
725
+ *
726
+ * The hook is therefore handed `TypeRef.declaredSpelling` — the annotation AS
727
+ * WRITTEN, retained by the scope extractor precisely because capture-time
728
+ * normalization destroys it — falling back to `rawName` only when nothing was
729
+ * normalized away. So a provider sees `User[]`, `List[User]`, `[]*User` or
730
+ * `Dictionary<string, User>`, never the post-reduction `User`, and answering
731
+ * `undefined` for a spelling it does not recognize as a container is an
732
+ * ANSWER, not an absence.
733
+ *
734
+ * Implementations may return a still-DECORATED element name (Go's `[]*User`
735
+ * yields `*User`): the index step looks the element up through
736
+ * `stripTypePreservingDecoration`, so the pointer resolves.
585
737
  */
586
- readonly unwrapCollectionAccessor?: (receiverType: string, accessor: string) => string | undefined;
738
+ readonly elementTypeOf?: (containerType: string, via: ElementAccessRoute) => string | undefined;
587
739
  /**
588
740
  * Collapse member-call CALLS edges by `(caller, target)` rather
589
741
  * than per-site. Default `false` — scope-resolution's contract
@@ -602,6 +754,23 @@ export interface ScopeResolver {
602
754
  * but is too loose as a default for strict module systems.
603
755
  */
604
756
  readonly allowGlobalFreeCallFallback?: boolean;
757
+ /**
758
+ * In this language every `Method` belongs to a class instance, so a
759
+ * FREE (receiver-less) call may resolve to a `Method` only when the
760
+ * caller's enclosing class chain — the class itself plus its MRO —
761
+ * contains the method's owner (#2550). Suppresses the finalize-bucket
762
+ * leak where an unqualified call matched any same-file method by bare
763
+ * name (`materializeBindings` flattens every declaration onto module
764
+ * scope). Java opts in; C# is the intended next adopter.
765
+ *
766
+ * NOT implemented via `LanguageProvider.builtInNames`: that mechanism
767
+ * has unrelated consumers (`parse-worker`'s call-site extraction gate
768
+ * suppresses member calls too; `type-env`'s return-type lookup) which
769
+ * assume a flagged name is never a real repository declaration —
770
+ * false for common method names like `run`/`get`/`compare` (verified
771
+ * regression).
772
+ */
773
+ readonly freeCallsRequireInstanceOwnership?: boolean;
605
774
  /**
606
775
  * When true, a constructor-form call `Type(...)` links to the Class def
607
776
  * itself rather than its explicit Constructor def. Default
@@ -611,6 +780,57 @@ export interface ScopeResolver {
611
780
  * Swift — opt in.
612
781
  */
613
782
  readonly constructorCallTargetsClass?: boolean;
783
+ /**
784
+ * How this language spells a construction expression, so the compound
785
+ * receiver resolver can type an INLINE constructor receiver — the
786
+ * `Service(db).do_work()` shape, where the receiver is the constructed
787
+ * value itself rather than a binding that holds it (#2708).
788
+ *
789
+ * The rule is the same in every language ("constructing a class yields
790
+ * an instance of that class"); only the surface syntax differs, so the
791
+ * syntax is declared here and the rule lives once in
792
+ * `resolveCompoundReceiverClass`:
793
+ *
794
+ * - `bare: true` — `Service(db).m()` (Python)
795
+ * - `keyword: 'new'` — `new Service(db).m()` (JS/TS, C#)
796
+ * - `selector: 'new'` — `Service.new.m()` (Ruby)
797
+ *
798
+ * Java is deliberately NOT wired even though it spells construction with
799
+ * `new`: its capture layer already rewrites an `object_creation_expression`
800
+ * receiver to the constructed type's simple name (#2564), so the raw
801
+ * `new Svc()` text never reaches this resolver and the declaration would be
802
+ * unreachable. Measured both ways — Java resolves the shape identically with
803
+ * and without it.
804
+ *
805
+ * Opting in is per-language ON PURPOSE rather than universal, for two
806
+ * reasons. Correctness: `bare` would mistype `stat(&st).field` in C,
807
+ * where a struct and a function may share a name and the free call is
808
+ * NOT a construction. Evidence: PHP, Swift, Dart and Kotlin already
809
+ * resolve this shape through their own capture-side paths (verified
810
+ * per language — the receiver typing here changed nothing for them),
811
+ * so they stay unwired rather than carrying a redundant declaration.
812
+ *
813
+ * Only affects receiver TYPING. Which node a construction call links
814
+ * to is a separate question, owned by `constructorCallTargetsClass`.
815
+ * Path-syntax constructors (Rust `Foo::new(x)`) are not covered — they
816
+ * are not member calls and never reach this resolver.
817
+ */
818
+ readonly constructionSyntax?: {
819
+ /** A free call naming a class constructs it: `Service(db)`. */
820
+ readonly bare?: boolean;
821
+ /** Prefix keyword form: `new Service(db)`. */
822
+ readonly keyword?: string;
823
+ /** Member-selector form on the class itself: `Service.new(db)`.
824
+ * Applies only when the receiver names the CLASS — `factory.new` is an
825
+ * ordinary call to a member named `new` on an instance and keeps normal
826
+ * member resolution. KNOWN LIMITATION: a class that OVERRIDES the
827
+ * selector at class level (Ruby `def self.new` returning some other
828
+ * type) is still read as construction, because the scope model records
829
+ * no staticness for a member, so `def new` and `def self.new` are
830
+ * indistinguishable here. Modelling that needs per-member staticness
831
+ * from the language provider first. */
832
+ readonly selector?: string;
833
+ };
614
834
  /**
615
835
  * Optional per-slot conversion-rank function for overload resolution.
616
836
  * When provided, `narrowOverloadCandidates` uses ranked scoring as a
@@ -644,6 +864,19 @@ export interface ScopeResolver {
644
864
  * Languages without file-local linkage semantics leave this undefined.
645
865
  */
646
866
  readonly isFileLocalDef?: (def: SymbolDefinition) => boolean;
867
+ /**
868
+ * Optional precise linkage predicate used when callable-value flow joins a
869
+ * declaration graph node (for example a C/C++ prototype in a caller file)
870
+ * to its out-of-file definition. Unlike `isFileLocalDef`, this hook MUST
871
+ * answer only language-level internal/file-local linkage. It must not fold
872
+ * in broader unqualified-name visibility rules such as namespace or member
873
+ * lookup: an explicit declaration already establishes caller visibility.
874
+ *
875
+ * C and C++ provide this hook for `static` free functions. Languages whose
876
+ * declaration/definition identity is already represented by imports or one
877
+ * graph node leave it undefined, disabling cross-file prototype joining.
878
+ */
879
+ readonly hasFileLocalCallableLinkage?: (def: SymbolDefinition) => boolean;
647
880
  /**
648
881
  * Optional predicate to identify members for which dispatch through
649
882
  * an instance receiver is **invalid at the language level** — i.e.
@@ -681,6 +914,24 @@ export interface ScopeResolver {
681
914
  * receiver class is a dispatch candidate).
682
915
  */
683
916
  readonly isStaticOnly?: (def: SymbolDefinition) => boolean;
917
+ /**
918
+ * Optional canonicalizer for a written GENERIC TYPE ARGUMENT, so two
919
+ * spellings of one type compare equal during interface-dispatch
920
+ * instantiation matching (#2912).
921
+ *
922
+ * The case it exists for is a language with predefined ALIASES: C# `string`
923
+ * and `String` are the same type, so `IValidator<string>` must still fan out
924
+ * to `class V : IValidator<String>`. Without the hook the two spellings look
925
+ * like two instantiations and the implementor is pruned — a missing edge,
926
+ * which is the failure direction #2912 is most concerned to avoid.
927
+ *
928
+ * Called ONLY on the two sides of one argument comparison, never on a name
929
+ * used for lookup, so it may map to whatever canonical form the language
930
+ * prefers (`string` → `String`, or the reverse) as long as it is consistent.
931
+ * Languages whose types have one spelling each leave it undefined and the
932
+ * comparison stays exact.
933
+ */
934
+ readonly normalizeTypeArgument?: (name: string) => string;
684
935
  /**
685
936
  * Optional predicate to gate free-call fallback emission by caller-side
686
937
  * visibility. When provided, `pickUniqueGlobalCallable` rejects candidates
@@ -734,6 +985,39 @@ export interface ScopeResolver {
734
985
  readonly startCol: number;
735
986
  };
736
987
  }, callerParsed: ParsedFile, scopes: ScopeResolutionIndexes, parsedFiles: readonly ParsedFile[]) => readonly SymbolDefinition[] | undefined;
988
+ /**
989
+ * Optional resolver for a module-qualified FREE call — a call written with
990
+ * an explicit path but no value receiver (Rust `tools::dispatch(...)`, where
991
+ * `tools` names a module, not a variable or a type).
992
+ *
993
+ * These sites are captured as free calls (`callForm === 'free'`) with the
994
+ * written path preserved in `site.rawQualifiedName`. Without this hook the
995
+ * qualifier is inert and the scope-chain walk resolves the bare tail name —
996
+ * which silently binds to a same-named definition in the CALLER's own file
997
+ * when one exists, producing a self-loop and dropping the real cross-module
998
+ * edge (#2730: `fn dispatch` in `sched.rs` calling `tools::dispatch`
999
+ * resolved to itself, so `impact` reported the central dispatcher as
1000
+ * risk LOW with 0 affected processes).
1001
+ *
1002
+ * `emitFreeCallFallback` invokes this BEFORE the implicit-`this` and
1003
+ * scope-chain lookups, so an explicit path outranks a lexical shadow.
1004
+ * Returning `undefined` (unqualified call, unknown module, or no such
1005
+ * member in the named module) falls through to the unchanged chain — the
1006
+ * hook is strictly additive and never removes an edge the prior tiers
1007
+ * would have produced.
1008
+ *
1009
+ * Languages whose qualified calls carry a value/type receiver (`x.foo()`,
1010
+ * `Type::foo()`) are served by the receiver-bound-calls pass and leave
1011
+ * this undefined.
1012
+ */
1013
+ readonly resolveQualifiedFreeCall?: (site: {
1014
+ readonly name: string;
1015
+ readonly rawQualifiedName?: string;
1016
+ /** Needed to locate the calling MODULE, not just the calling file — a
1017
+ * relative anchor (`super::`) is resolved against the module the call
1018
+ * sits in, which may be an inline `mod` block inside that file. */
1019
+ readonly inScope: ScopeId;
1020
+ }, callerParsed: ParsedFile, scopes: ScopeResolutionIndexes, workspaceIndex: WorkspaceResolutionIndex, allFilePaths: ReadonlySet<string>) => SymbolDefinition | undefined;
737
1021
  /**
738
1022
  * Optional resolver for qualified-receiver member calls where the
739
1023
  * receiver is a namespace (not a class) and ordinary scope-chain /
@@ -752,6 +1036,40 @@ export interface ScopeResolver {
752
1036
  * `undefined` to fall through to the remaining cases.
753
1037
  */
754
1038
  readonly resolveQualifiedReceiverMember?: (receiverName: string, memberName: string, callerScope: ScopeId, scopes: ScopeResolutionIndexes, parsedFiles: readonly ParsedFile[], callsite?: Callsite) => SymbolDefinition | 'ambiguous' | undefined;
1039
+ /**
1040
+ * Every receiver spelling under which a namespace import's target is
1041
+ * reachable, and the file each spelling names (#2826). Returning
1042
+ * `undefined` keeps the shared default: the local binding name alone,
1043
+ * mapped to the edge's own target file.
1044
+ *
1045
+ * Python needs this because one `import a.b.c` statement binds THREE
1046
+ * spellings at once — `a`, `a.b` and `a.b.c` — each naming a DIFFERENT
1047
+ * file (`a/__init__.py`, `a/b/__init__.py`, `a/b/c.py`), while
1048
+ * `ImportEdge` carries only the leaf. The default keyed `a` (its
1049
+ * `localName`) to the LEAF, so `a.helper()` resolved into `a/b/c.py`
1050
+ * whenever that module happened to export `helper` — a wrong edge — and
1051
+ * `a.b.mid()` resolved to nothing at all.
1052
+ *
1053
+ * Shared code cannot derive this. Swift's `import Foo.Bar` produces an
1054
+ * edge shape identical to Python's (`localName: 'Foo'`,
1055
+ * `targetExportedName: 'Foo.Bar'`), yet there the FIRST segment is the
1056
+ * resolved target and `Foo.Bar` names a nested TYPE; keying it would hand
1057
+ * `resolveConstructionExpressionClass` an authoritative namespace — that
1058
+ * branch deliberately does not fall through on a miss — and break
1059
+ * `Foo.Bar(x)` construction that resolves correctly today. And the
1060
+ * `__init__.py` convention that turns a dotted prefix into a file is
1061
+ * Python's alone.
1062
+ *
1063
+ * `moduleFileExists` reports whether a path is a module the workspace
1064
+ * actually parsed, so a provider can propose a prefix file and have it
1065
+ * dropped when absent (a PEP-420 namespace package has no `__init__.py`)
1066
+ * rather than minting a key to a file that is not there.
1067
+ */
1068
+ readonly namespaceReceiverPaths?: (edge: {
1069
+ readonly localName: string;
1070
+ readonly importPath: string;
1071
+ readonly targetFile: string;
1072
+ }, moduleFileExists: (filePath: string) => boolean) => readonly (readonly [spelling: string, targetFile: string])[] | undefined;
755
1073
  /**
756
1074
  * Optional language-specific member-lattice lookup. Runs for a resolved
757
1075
  * simple receiver type before the generic flattened-MRO walk. Languages
@@ -818,6 +1136,38 @@ export interface ScopeResolver {
818
1136
  * level bindings.
819
1137
  */
820
1138
  readonly hoistTypeBindingsToModule?: boolean;
1139
+ /**
1140
+ * Strip ONE layer of type-preserving decoration off a declared type name,
1141
+ * or return `undefined` when there is nothing left to strip.
1142
+ *
1143
+ * Exists because a declared type is stored as written. Go's
1144
+ * `synthesizeGoReceiverBinding` keeps `typeNode.text`, so a pointer-receiver
1145
+ * method binds its receiver to the literal `*Host` — which matches no class
1146
+ * binding, so receiver-chain resolution declines at the base and every
1147
+ * `h.field.method()` in the dominant Go idiom loses its `CALLS` edge (#2766).
1148
+ * The stored binding is deliberately left decorated (`method-owners.ts`
1149
+ * consumes `*T` vs `T` to model Go's value and pointer method sets), so the
1150
+ * normalization belongs at LOOKUP, never as a rewrite of the binding.
1151
+ *
1152
+ * TYPE-PRESERVING ONLY. Pointer, reference, `const`, nullable, borrow,
1153
+ * deref-transparent smart pointer and sigil all leave the member set
1154
+ * unchanged. A CONTAINER — array, slice, map, `Option` — does not: stripping
1155
+ * one here would type `repos: Repo[]` as `Repo` and let `repos.find(x)` fold
1156
+ * to `Repo.find`, a confident wrong edge the ambiguity gate cannot catch
1157
+ * because `Repo` binds uniquely. Containers are unwrapped only by an index
1158
+ * step that consumed a subscript.
1159
+ *
1160
+ * Consulted ONLY after every undecorated lookup has failed, and only by
1161
+ * receiver-chain base and step resolution — the shared class lookup keeps
1162
+ * exact-name behaviour for its other ~two dozen callers, several of which are
1163
+ * shaped `findClassBindingInScope(...) ?? otherResolver(...)` and would have
1164
+ * their fallback suppressed by a global widening.
1165
+ *
1166
+ * Leave undefined for languages whose declared types carry no type-preserving
1167
+ * decoration. Measured: only Go needs it for a receiver base; Rust, C#, Swift,
1168
+ * TypeScript and C++ need it for field types.
1169
+ */
1170
+ readonly stripTypePreservingDecoration?: DecorationStripper;
821
1171
  /**
822
1172
  * Whether the compound-receiver resolver should strip C-style cast
823
1173
  * expressions from receiver-position text before resolving it —
@@ -844,7 +1194,7 @@ export interface ScopeResolver {
844
1194
  *
845
1195
  * A second opting language must extend the classifier grammar or
846
1196
  * convert this toggle into a per-language classifier hook (the
847
- * `unwrapCollectionAccessor` pattern) — do not flip this flag for
1197
+ * `elementTypeOf` pattern) — do not flip this flag for
848
1198
  * another language as-is.
849
1199
  *
850
1200
  * Known non-goal: the compound-receiver options built from this
@@ -860,10 +1210,19 @@ export interface ScopeResolver {
860
1210
  * Languages like Go use structural typing — a struct satisfies an
861
1211
  * interface if its method set is a superset, without an explicit
862
1212
  * `implements` keyword. Runs after finalize, before resolution passes.
863
- * Returns: Map<interface_DefId, implementing_struct_DefId[]>.
1213
+ * Returns: Map<interface_DefId, StructuralImplementor[]>, where each entry
1214
+ * names the implementing type AND the form in which it implements.
1215
+ *
1216
+ * `receiverForm` is not a confidence signal — it is the language's own
1217
+ * distinction. In Go the method set of `T` and of `*T` differ (a
1218
+ * pointer-receiver method belongs only to `*T`), so `receiverForm: 'pointer'`
1219
+ * means the VALUE type does not implement the interface and only `*T` does.
1220
+ * `'value'` means both do. Consumers that only want blast radius can ignore
1221
+ * it; consumers reasoning about assignability must not.
1222
+ *
864
1223
  * Default: undefined (no structural interface detection).
865
1224
  */
866
- readonly detectInterfaceImplementations?: (parsedFiles: readonly ParsedFile[], indexes: ScopeResolutionIndexes, model: SemanticModel) => Map<string, string[]>;
1225
+ readonly detectInterfaceImplementations?: (parsedFiles: readonly ParsedFile[], indexes: ScopeResolutionIndexes, model: SemanticModel) => StructuralImplementationResult;
867
1226
  /**
868
1227
  * Optional: mirror typeBindings from namespace-import target modules
869
1228
  * into the importer's module scope. Languages like Go use namespace
@@ -15,7 +15,7 @@
15
15
  * - propagatesReturnTypesAcrossImports (default true)
16
16
  * - fieldFallbackOnMethodLookup (default true — turn OFF for
17
17
  * statically-typed languages; the heuristic over-connects)
18
- * - unwrapCollectionAccessor — property-style collection views
18
+ * - elementTypeOf — container element type, by subscript or accessor
19
19
  * - collapseMemberCallsByCallerTarget — one edge per caller/target
20
20
  * - populateNamespaceSiblings — cross-file implicit visibility
21
21
  * - hoistTypeBindingsToModule — enable ONLY when method return
@@ -113,13 +113,24 @@
113
113
  * 3. Case 0.5 implicit-`this` chain walk — GATED: fires only for
114
114
  * languages that set `resolveThisViaEnclosingClass === true`;
115
115
  * it intercepts every bare-`this` call/read/write site ahead of
116
- * Case 4 and does NOT emit Case 4's interface-dispatch fan-out,
117
- * so enabling the toggle for a language changes that language's
118
- * `this` dispatch semantics (see the toggle's doc below)
116
+ * Case 4 and does NOT emit the interface-dispatch fan-out that
117
+ * Cases 0, 3b and 4 all perform (Case 0 gained it in #2829 and
118
+ * Case 3b in #2832, leaving 0.5 the only INSTANCE-receiver case
119
+ * that folds or walks to a receiver type without fanning out.
120
+ * Read that narrowly: Case 2 also walks an MRO and its binding
121
+ * admits `Interface`, but its receiver IS the type name, so the
122
+ * site is static dispatch and a fan-out would be wrong; Cases 3
123
+ * and 5 resolve by direct lookup rather than a fold or MRO walk,
124
+ * and no language is known to reach Case 3 with an Interface —
125
+ * every one that could strips the namespace qualifier first,
126
+ * sending it to Case 4), so enabling the toggle
127
+ * for a language changes that language's `this` dispatch
128
+ * semantics (see the toggle's doc below)
119
129
  * 4. Case 1 namespace-receiver
120
130
  * 5. Case 2 class-name receiver
121
131
  * 6. Case 3 dotted typeBinding for namespace prefix
122
- * 7. Case 3b chain-typebinding (compound resolver)
132
+ * 7. Case 3b chain-typebinding (compound resolver + interface-dispatch
133
+ * fan-out on an Interface fold, #2832)
123
134
  * 8. Case 4 simple typeBinding (MRO walk + findOwnedMember)
124
135
  * Reordering or merging cases changes resolution semantics. The
125
136
  * numbering is part of the contract — keep the comments.
@@ -21,9 +21,9 @@
21
21
  * `(atRange.startLine, atRange.startCol)` is byte-equal to U1's `at` — no
22
22
  * normalization needed.
23
23
  *
24
- * Gating (R4): the concrete sink is created in `run.ts` only when
25
- * `input.pdg === true`; otherwise `undefined` is threaded through, so off-mode
26
- * does zero work and emits byte-identical output.
24
+ * Gating (R4): the concrete sink is created in `run.ts` when PDG is enabled OR
25
+ * always-on callable-flow facts need direct call targets for actual→formal
26
+ * propagation. The read-side CFG join remains strictly PDG-gated.
27
27
  *
28
28
  * Multi-target dispatch (R2/KTD8): one site → multiple emit calls → the `Set`
29
29
  * accumulates every resolved target. Capture is per-emit-call, so the
@@ -67,9 +67,9 @@ export interface CalleeIdMapView {
67
67
  /** The concrete accumulator: a write sink that also exposes the read view. */
68
68
  export interface CalleeIdAccumulator extends CalleeIdSink, CalleeIdMapView {
69
69
  }
70
+ export type CalleeIdCaptureFilter = (filePath: string, line: number, col: number) => boolean;
70
71
  /**
71
- * Create the concrete nested-`Map` accumulator. Call ONLY when
72
- * `input.pdg === true` (else thread `undefined` for byte-identity / zero
73
- * overhead — R4).
72
+ * Create the concrete nested-`Map` accumulator for PDG callee capture or
73
+ * callable-value-flow's direct-target index.
74
74
  */
75
- export declare function createCalleeIdAccumulator(): CalleeIdAccumulator;
75
+ export declare function createCalleeIdAccumulator(shouldCapture?: CalleeIdCaptureFilter): CalleeIdAccumulator;
@@ -21,9 +21,9 @@
21
21
  * `(atRange.startLine, atRange.startCol)` is byte-equal to U1's `at` — no
22
22
  * normalization needed.
23
23
  *
24
- * Gating (R4): the concrete sink is created in `run.ts` only when
25
- * `input.pdg === true`; otherwise `undefined` is threaded through, so off-mode
26
- * does zero work and emits byte-identical output.
24
+ * Gating (R4): the concrete sink is created in `run.ts` when PDG is enabled OR
25
+ * always-on callable-flow facts need direct call targets for actual→formal
26
+ * propagation. The read-side CFG join remains strictly PDG-gated.
27
27
  *
28
28
  * Multi-target dispatch (R2/KTD8): one site → multiple emit calls → the `Set`
29
29
  * accumulates every resolved target. Capture is per-emit-call, so the
@@ -36,14 +36,15 @@ export function calleeIdPosKey(line, col) {
36
36
  return `${line}:${col}`;
37
37
  }
38
38
  /**
39
- * Create the concrete nested-`Map` accumulator. Call ONLY when
40
- * `input.pdg === true` (else thread `undefined` for byte-identity / zero
41
- * overhead — R4).
39
+ * Create the concrete nested-`Map` accumulator for PDG callee capture or
40
+ * callable-value-flow's direct-target index.
42
41
  */
43
- export function createCalleeIdAccumulator() {
42
+ export function createCalleeIdAccumulator(shouldCapture) {
44
43
  const byFile = new Map();
45
44
  return {
46
45
  add(filePath, line, col, calleeId) {
46
+ if (shouldCapture?.(filePath, line, col) === false)
47
+ return;
47
48
  let byPos = byFile.get(filePath);
48
49
  if (byPos === undefined) {
49
50
  byPos = new Map();