gitnexus 1.6.10-rc.99 → 1.6.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (775) hide show
  1. package/README.md +177 -18
  2. package/dist/_shared/graph/types.d.ts +21 -2
  3. package/dist/_shared/graph/types.d.ts.map +1 -1
  4. package/dist/_shared/index.d.ts +3 -3
  5. package/dist/_shared/index.d.ts.map +1 -1
  6. package/dist/_shared/index.js +1 -1
  7. package/dist/_shared/index.js.map +1 -1
  8. package/dist/_shared/integrations/circuit-breaker.d.ts.map +1 -1
  9. package/dist/_shared/integrations/circuit-breaker.js.map +1 -1
  10. package/dist/_shared/integrations/resilient-fetch.d.ts +16 -0
  11. package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
  12. package/dist/_shared/integrations/resilient-fetch.js +19 -7
  13. package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
  14. package/dist/_shared/language-detection.d.ts.map +1 -1
  15. package/dist/_shared/lbug/schema-constants.d.ts +2 -2
  16. package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
  17. package/dist/_shared/lbug/schema-constants.js +3 -0
  18. package/dist/_shared/lbug/schema-constants.js.map +1 -1
  19. package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
  20. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +5 -0
  21. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
  22. package/dist/_shared/scope-resolution/finalize-algorithm.js +315 -36
  23. package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
  24. package/dist/_shared/scope-resolution/reference-site.d.ts +115 -0
  25. package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
  26. package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
  27. package/dist/_shared/scope-resolution/registries/lookup-core.d.ts.map +1 -1
  28. package/dist/_shared/scope-resolution/registries/lookup-core.js +58 -2
  29. package/dist/_shared/scope-resolution/registries/lookup-core.js.map +1 -1
  30. package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -1
  31. package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -1
  32. package/dist/_shared/scope-resolution/scope-tree.js.map +1 -1
  33. package/dist/_shared/scope-resolution/symbol-definition.d.ts +47 -0
  34. package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
  35. package/dist/_shared/scope-resolution/types.d.ts +278 -3
  36. package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
  37. package/dist/cli/ai-context.d.ts +3 -2
  38. package/dist/cli/ai-context.js +71 -16
  39. package/dist/cli/analyze-config.d.ts +1 -1
  40. package/dist/cli/analyze-options.d.ts +131 -0
  41. package/dist/cli/analyze-options.js +1 -0
  42. package/dist/cli/analyze.d.ts +21 -113
  43. package/dist/cli/analyze.js +172 -29
  44. package/dist/cli/cli-message.d.ts +1 -1
  45. package/dist/cli/detect-changes-format.js +19 -2
  46. package/dist/cli/doctor.d.ts +12 -0
  47. package/dist/cli/doctor.js +32 -5
  48. package/dist/cli/editor-targets.js +6 -0
  49. package/dist/cli/eval-server.js +2 -1
  50. package/dist/cli/format-symbol.d.ts +15 -0
  51. package/dist/cli/format-symbol.js +17 -0
  52. package/dist/cli/generated-skill.d.ts +17 -0
  53. package/dist/cli/generated-skill.js +1 -0
  54. package/dist/cli/group.js +229 -21
  55. package/dist/cli/help-i18n.js +1 -2
  56. package/dist/cli/i18n/en.d.ts +11 -9
  57. package/dist/cli/i18n/en.js +13 -9
  58. package/dist/cli/i18n/resources.d.ts +15 -11
  59. package/dist/cli/i18n/zh-CN.d.ts +4 -2
  60. package/dist/cli/i18n/zh-CN.js +11 -9
  61. package/dist/cli/index.js +8 -4
  62. package/dist/cli/resolve-invocation.d.ts +7 -3
  63. package/dist/cli/resolve-invocation.js +7 -3
  64. package/dist/cli/setup.js +4 -3
  65. package/dist/cli/skill-gen.d.ts +1 -6
  66. package/dist/cli/tool.d.ts +1 -0
  67. package/dist/cli/tool.js +74 -17
  68. package/dist/cli/wiki.js +53 -10
  69. package/dist/config/ignore-service.d.ts +2 -0
  70. package/dist/config/ignore-service.js +54 -13
  71. package/dist/core/analyzer-identity.d.ts +80 -0
  72. package/dist/core/analyzer-identity.js +364 -26
  73. package/dist/core/augmentation/engine.js +86 -71
  74. package/dist/core/embedding-checkpoint.d.ts +143 -0
  75. package/dist/core/embedding-checkpoint.js +221 -0
  76. package/dist/core/embedding-count.d.ts +61 -0
  77. package/dist/core/embedding-count.js +69 -0
  78. package/dist/core/embeddings/ast-utils.js +9 -1
  79. package/dist/core/embeddings/embedding-pipeline.d.ts +8 -0
  80. package/dist/core/embeddings/embedding-pipeline.js +253 -14
  81. package/dist/core/embeddings/http-client.d.ts +5 -0
  82. package/dist/core/embeddings/http-client.js +142 -27
  83. package/dist/core/graph/graph.js +3 -0
  84. package/dist/core/graph/import-cycles.d.ts +194 -3
  85. package/dist/core/graph/import-cycles.js +522 -73
  86. package/dist/core/graph/types.d.ts +18 -0
  87. package/dist/core/group/bridge-db.d.ts +204 -1
  88. package/dist/core/group/bridge-db.js +401 -28
  89. package/dist/core/group/completeness.d.ts +130 -0
  90. package/dist/core/group/completeness.js +83 -0
  91. package/dist/core/group/config-parser.js +0 -5
  92. package/dist/core/group/cross-impact.d.ts +46 -1
  93. package/dist/core/group/cross-impact.js +220 -19
  94. package/dist/core/group/cross-trace.d.ts +32 -11
  95. package/dist/core/group/cross-trace.js +114 -20
  96. package/dist/core/group/extractors/http-patterns/java.js +278 -22
  97. package/dist/core/group/extractors/http-patterns/node.js +332 -216
  98. package/dist/core/group/extractors/http-patterns/types.d.ts +8 -0
  99. package/dist/core/group/extractors/http-route-extractor.d.ts +1 -0
  100. package/dist/core/group/extractors/http-route-extractor.js +122 -48
  101. package/dist/core/group/extractors/include-extractor.js +20 -2
  102. package/dist/core/group/extractors/manifest-extractor.d.ts +1 -1
  103. package/dist/core/group/extractors/manifest-extractor.js +7 -7
  104. package/dist/core/group/extractors/python-workspace-extractor.js +5 -2
  105. package/dist/core/group/group-lock.d.ts +31 -0
  106. package/dist/core/group/group-lock.js +166 -0
  107. package/dist/core/group/service.js +297 -16
  108. package/dist/core/group/storage.d.ts +3 -0
  109. package/dist/core/group/storage.js +7 -39
  110. package/dist/core/group/sync.d.ts +49 -3
  111. package/dist/core/group/sync.js +0 -0
  112. package/dist/core/group/types.d.ts +183 -8
  113. package/dist/core/group/types.js +28 -1
  114. package/dist/core/incremental/subgraph-extract.d.ts +9 -6
  115. package/dist/core/incremental/subgraph-extract.js +33 -10
  116. package/dist/core/index-freshness.d.ts +77 -2
  117. package/dist/core/index-freshness.js +109 -2
  118. package/dist/core/ingestion/call-processor.d.ts +13 -1
  119. package/dist/core/ingestion/call-processor.js +110 -3
  120. package/dist/core/ingestion/cfg/callee-cell-format.d.ts +42 -0
  121. package/dist/core/ingestion/cfg/callee-cell-format.js +42 -0
  122. package/dist/core/ingestion/cfg/emit.d.ts +8 -23
  123. package/dist/core/ingestion/cfg/emit.js +9 -23
  124. package/dist/core/ingestion/class-extractors/configs/go.js +10 -5
  125. package/dist/core/ingestion/cluster-enricher.js +8 -4
  126. package/dist/core/ingestion/community-processor.d.ts +21 -3
  127. package/dist/core/ingestion/community-processor.js +81 -82
  128. package/dist/core/ingestion/di-extractors/index.d.ts +9 -33
  129. package/dist/core/ingestion/di-extractors/spring.d.ts +1 -1
  130. package/dist/core/ingestion/di-extractors/spring.js +8 -1
  131. package/dist/core/ingestion/di-extractors/types.d.ts +60 -0
  132. package/dist/core/ingestion/di-extractors/types.js +15 -0
  133. package/dist/core/ingestion/filesystem-walker.js +30 -14
  134. package/dist/core/ingestion/finalize-orchestrator.js +1 -0
  135. package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +6 -0
  136. package/dist/core/ingestion/frameworks/spring/analysis-features.js +35 -1
  137. package/dist/core/ingestion/frameworks/spring/annotation-arguments.d.ts +13 -0
  138. package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +227 -0
  139. package/dist/core/ingestion/frameworks/spring/aop-candidates.d.ts +15 -0
  140. package/dist/core/ingestion/frameworks/spring/aop-candidates.js +85 -0
  141. package/dist/core/ingestion/frameworks/spring/aop.d.ts +118 -0
  142. package/dist/core/ingestion/frameworks/spring/aop.js +476 -0
  143. package/dist/core/ingestion/frameworks/spring/auto-configuration.d.ts +8 -0
  144. package/dist/core/ingestion/frameworks/spring/auto-configuration.js +16 -0
  145. package/dist/core/ingestion/frameworks/spring/bean-catalog.js +1 -0
  146. package/dist/core/ingestion/frameworks/spring/bean-factories.d.ts +33 -0
  147. package/dist/core/ingestion/frameworks/spring/bean-factories.js +65 -0
  148. package/dist/core/ingestion/frameworks/spring/conditionals.d.ts +25 -0
  149. package/dist/core/ingestion/frameworks/spring/conditionals.js +319 -0
  150. package/dist/core/ingestion/frameworks/spring/di-metadata.d.ts +3 -0
  151. package/dist/core/ingestion/frameworks/spring/di-metadata.js +162 -13
  152. package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +28 -0
  153. package/dist/core/ingestion/frameworks/spring/non-http-handlers.js +152 -0
  154. package/dist/core/ingestion/frameworks/spring/resource-injection.d.ts +5 -0
  155. package/dist/core/ingestion/frameworks/spring/resource-injection.js +91 -0
  156. package/dist/core/ingestion/import-resolvers/configs/csharp.js +5 -1
  157. package/dist/core/ingestion/import-resolvers/configs/swift.js +13 -0
  158. package/dist/core/ingestion/import-resolvers/csharp.d.ts +9 -1
  159. package/dist/core/ingestion/import-resolvers/csharp.js +234 -27
  160. package/dist/core/ingestion/import-resolvers/go.d.ts +11 -1
  161. package/dist/core/ingestion/import-resolvers/go.js +44 -17
  162. package/dist/core/ingestion/import-resolvers/jvm.d.ts +2 -2
  163. package/dist/core/ingestion/import-resolvers/node-workspace-packages.d.ts +90 -0
  164. package/dist/core/ingestion/import-resolvers/node-workspace-packages.js +429 -0
  165. package/dist/core/ingestion/import-resolvers/package-dir-index.d.ts +124 -0
  166. package/dist/core/ingestion/import-resolvers/package-dir-index.js +223 -0
  167. package/dist/core/ingestion/import-resolvers/pass-cache.d.ts +50 -0
  168. package/dist/core/ingestion/import-resolvers/pass-cache.js +60 -0
  169. package/dist/core/ingestion/import-resolvers/per-file-set.d.ts +71 -0
  170. package/dist/core/ingestion/import-resolvers/per-file-set.js +11 -0
  171. package/dist/core/ingestion/import-resolvers/php.d.ts +1 -1
  172. package/dist/core/ingestion/import-resolvers/php.js +65 -19
  173. package/dist/core/ingestion/import-resolvers/python-file-index.d.ts +201 -0
  174. package/dist/core/ingestion/import-resolvers/python-file-index.js +302 -0
  175. package/dist/core/ingestion/import-resolvers/python.js +25 -6
  176. package/dist/core/ingestion/import-resolvers/ruby.d.ts +1 -1
  177. package/dist/core/ingestion/import-resolvers/rust.d.ts +2 -2
  178. package/dist/core/ingestion/import-resolvers/standard.d.ts +1 -1
  179. package/dist/core/ingestion/import-resolvers/types.d.ts +1 -12
  180. package/dist/core/ingestion/import-resolvers/utils.d.ts +65 -6
  181. package/dist/core/ingestion/import-resolvers/utils.js +215 -36
  182. package/dist/core/ingestion/import-resolvers/workspace-file-index.d.ts +72 -0
  183. package/dist/core/ingestion/import-resolvers/workspace-file-index.js +58 -0
  184. package/dist/core/ingestion/language-config.d.ts +29 -1
  185. package/dist/core/ingestion/language-config.js +110 -35
  186. package/dist/core/ingestion/language-provider.d.ts +209 -7
  187. package/dist/core/ingestion/language-provider.js +37 -0
  188. package/dist/core/ingestion/languages/c/captures.js +7 -0
  189. package/dist/core/ingestion/languages/c/import-target.js +12 -16
  190. package/dist/core/ingestion/languages/c/scope-resolver.js +20 -19
  191. package/dist/core/ingestion/languages/c/static-linkage.js +12 -16
  192. package/dist/core/ingestion/languages/c-cpp.js +13 -0
  193. package/dist/core/ingestion/languages/cobol/scope-resolver.js +27 -20
  194. package/dist/core/ingestion/languages/cobol.js +13 -0
  195. package/dist/core/ingestion/languages/cpp/adl.d.ts +2 -2
  196. package/dist/core/ingestion/languages/cpp/adl.js +67 -44
  197. package/dist/core/ingestion/languages/cpp/captures.js +14 -2
  198. package/dist/core/ingestion/languages/cpp/file-local-linkage.js +11 -15
  199. package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +28 -8
  200. package/dist/core/ingestion/languages/cpp/inline-namespaces.js +242 -68
  201. package/dist/core/ingestion/languages/cpp/interpret.d.ts +2 -0
  202. package/dist/core/ingestion/languages/cpp/interpret.js +126 -6
  203. package/dist/core/ingestion/languages/cpp/query.js +106 -0
  204. package/dist/core/ingestion/languages/cpp/scope-resolver.js +48 -20
  205. package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +2 -15
  206. package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +18 -10
  207. package/dist/core/ingestion/languages/csharp/captures.js +19 -0
  208. package/dist/core/ingestion/languages/csharp/import-target.js +46 -72
  209. package/dist/core/ingestion/languages/csharp/namespace-siblings.js +5 -1
  210. package/dist/core/ingestion/languages/csharp/query.js +25 -5
  211. package/dist/core/ingestion/languages/csharp/scope-resolver.js +75 -2
  212. package/dist/core/ingestion/languages/dart/captures.d.ts +10 -0
  213. package/dist/core/ingestion/languages/dart/captures.js +598 -16
  214. package/dist/core/ingestion/languages/dart/import-target.js +32 -9
  215. package/dist/core/ingestion/languages/dart/index.d.ts +1 -1
  216. package/dist/core/ingestion/languages/dart/index.js +1 -1
  217. package/dist/core/ingestion/languages/dart/query.js +98 -1
  218. package/dist/core/ingestion/languages/dart/scope-resolver.js +14 -3
  219. package/dist/core/ingestion/languages/dart/simple-hooks.js +9 -0
  220. package/dist/core/ingestion/languages/dart.js +6 -1
  221. package/dist/core/ingestion/languages/go/captures.js +108 -3
  222. package/dist/core/ingestion/languages/go/generic-type-parameters.d.ts +31 -0
  223. package/dist/core/ingestion/languages/go/generic-type-parameters.js +140 -0
  224. package/dist/core/ingestion/languages/go/import-target.d.ts +3 -10
  225. package/dist/core/ingestion/languages/go/import-target.js +34 -30
  226. package/dist/core/ingestion/languages/go/index.d.ts +1 -1
  227. package/dist/core/ingestion/languages/go/interface-impls.d.ts +9 -1
  228. package/dist/core/ingestion/languages/go/interface-impls.js +693 -87
  229. package/dist/core/ingestion/languages/go/interpret.d.ts +2 -0
  230. package/dist/core/ingestion/languages/go/interpret.js +22 -8
  231. package/dist/core/ingestion/languages/go/method-owners.js +31 -12
  232. package/dist/core/ingestion/languages/go/package-clause.d.ts +46 -0
  233. package/dist/core/ingestion/languages/go/package-clause.js +75 -0
  234. package/dist/core/ingestion/languages/go/package-siblings.js +7 -11
  235. package/dist/core/ingestion/languages/go/query.js +56 -3
  236. package/dist/core/ingestion/languages/go/scope-resolver.js +39 -0
  237. package/dist/core/ingestion/languages/go.js +9 -0
  238. package/dist/core/ingestion/languages/java/analysis-features.d.ts +4 -0
  239. package/dist/core/ingestion/languages/java/analysis-features.js +12 -0
  240. package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +12 -0
  241. package/dist/core/ingestion/languages/java/capture-side-channel.js +48 -0
  242. package/dist/core/ingestion/languages/java/captures.js +77 -32
  243. package/dist/core/ingestion/languages/java/import-target.d.ts +49 -9
  244. package/dist/core/ingestion/languages/java/import-target.js +68 -88
  245. package/dist/core/ingestion/languages/java/interpret.js +3 -2
  246. package/dist/core/ingestion/languages/java/module-resolution.d.ts +62 -0
  247. package/dist/core/ingestion/languages/java/module-resolution.js +142 -0
  248. package/dist/core/ingestion/languages/java/query.js +15 -3
  249. package/dist/core/ingestion/languages/java/record-components.d.ts +14 -0
  250. package/dist/core/ingestion/languages/java/record-components.js +185 -0
  251. package/dist/core/ingestion/languages/java/scope-resolver.js +10 -2
  252. package/dist/core/ingestion/languages/java/spring-aop.d.ts +12 -0
  253. package/dist/core/ingestion/languages/java/spring-aop.js +49 -0
  254. package/dist/core/ingestion/languages/java/spring-conditionals.d.ts +11 -0
  255. package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
  256. package/dist/core/ingestion/languages/java/spring-di.d.ts +4 -1
  257. package/dist/core/ingestion/languages/java/spring-di.js +41 -9
  258. package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +7 -0
  259. package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +32 -0
  260. package/dist/core/ingestion/languages/java.js +94 -3
  261. package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
  262. package/dist/core/ingestion/languages/javascript/captures.js +262 -4
  263. package/dist/core/ingestion/languages/javascript/import-target.d.ts +17 -21
  264. package/dist/core/ingestion/languages/javascript/import-target.js +24 -41
  265. package/dist/core/ingestion/languages/javascript/index.d.ts +54 -5
  266. package/dist/core/ingestion/languages/javascript/index.js +54 -5
  267. package/dist/core/ingestion/languages/javascript/query.d.ts +1 -0
  268. package/dist/core/ingestion/languages/javascript/query.js +211 -5
  269. package/dist/core/ingestion/languages/javascript/scope-resolver.js +12 -0
  270. package/dist/core/ingestion/languages/javascript/simple-hooks.js +2 -1
  271. package/dist/core/ingestion/languages/jvm/package-siblings.js +77 -9
  272. package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +15 -0
  273. package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +48 -0
  274. package/dist/core/ingestion/languages/kotlin/captures.js +43 -1
  275. package/dist/core/ingestion/languages/kotlin/import-target.d.ts +8 -1
  276. package/dist/core/ingestion/languages/kotlin/import-target.js +20 -123
  277. package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
  278. package/dist/core/ingestion/languages/kotlin/index.js +1 -0
  279. package/dist/core/ingestion/languages/kotlin/module-resolution.d.ts +22 -0
  280. package/dist/core/ingestion/languages/kotlin/module-resolution.js +108 -0
  281. package/dist/core/ingestion/languages/kotlin/query.js +28 -2
  282. package/dist/core/ingestion/languages/kotlin/scope-resolver.js +23 -2
  283. package/dist/core/ingestion/languages/kotlin/spring-aop.d.ts +12 -0
  284. package/dist/core/ingestion/languages/kotlin/spring-aop.js +64 -0
  285. package/dist/core/ingestion/languages/kotlin/spring-conditionals.d.ts +12 -0
  286. package/dist/core/ingestion/languages/kotlin/spring-conditionals.js +49 -0
  287. package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +2 -0
  288. package/dist/core/ingestion/languages/kotlin/spring-di.js +60 -11
  289. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +10 -0
  290. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +41 -0
  291. package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
  292. package/dist/core/ingestion/languages/php/captures.js +319 -51
  293. package/dist/core/ingestion/languages/php/import-target.d.ts +3 -4
  294. package/dist/core/ingestion/languages/php/import-target.js +192 -62
  295. package/dist/core/ingestion/languages/php/query.js +31 -0
  296. package/dist/core/ingestion/languages/python/arity-metadata.d.ts +1 -0
  297. package/dist/core/ingestion/languages/python/arity-metadata.js +1 -0
  298. package/dist/core/ingestion/languages/python/captures.js +29 -0
  299. package/dist/core/ingestion/languages/python/import-decomposer.js +22 -1
  300. package/dist/core/ingestion/languages/python/import-target.d.ts +42 -1
  301. package/dist/core/ingestion/languages/python/import-target.js +277 -91
  302. package/dist/core/ingestion/languages/python/index.d.ts +1 -1
  303. package/dist/core/ingestion/languages/python/index.js +1 -1
  304. package/dist/core/ingestion/languages/python/interpret.d.ts +52 -0
  305. package/dist/core/ingestion/languages/python/interpret.js +249 -7
  306. package/dist/core/ingestion/languages/python/query.js +9 -0
  307. package/dist/core/ingestion/languages/python/receiver-binding.d.ts +8 -6
  308. package/dist/core/ingestion/languages/python/receiver-binding.js +108 -12
  309. package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
  310. package/dist/core/ingestion/languages/python/simple-hooks.js +2 -8
  311. package/dist/core/ingestion/languages/python.js +13 -0
  312. package/dist/core/ingestion/languages/ruby/captures.js +158 -0
  313. package/dist/core/ingestion/languages/ruby/import-target.js +7 -5
  314. package/dist/core/ingestion/languages/ruby/query.js +93 -0
  315. package/dist/core/ingestion/languages/ruby/scope-resolver.js +2 -0
  316. package/dist/core/ingestion/languages/ruby/simple-hooks.d.ts +1 -1
  317. package/dist/core/ingestion/languages/ruby/simple-hooks.js +22 -1
  318. package/dist/core/ingestion/languages/rust/captures.js +39 -1
  319. package/dist/core/ingestion/languages/rust/method-owners.js +11 -1
  320. package/dist/core/ingestion/languages/rust/module-path.d.ts +126 -0
  321. package/dist/core/ingestion/languages/rust/module-path.js +214 -0
  322. package/dist/core/ingestion/languages/rust/qualified-call.d.ts +41 -0
  323. package/dist/core/ingestion/languages/rust/qualified-call.js +481 -0
  324. package/dist/core/ingestion/languages/rust/query.js +39 -6
  325. package/dist/core/ingestion/languages/rust/scope-resolver.js +21 -2
  326. package/dist/core/ingestion/languages/rust.js +17 -0
  327. package/dist/core/ingestion/languages/swift/captures.js +87 -3
  328. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.d.ts +48 -0
  329. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.js +253 -0
  330. package/dist/core/ingestion/languages/swift/import-target.js +4 -9
  331. package/dist/core/ingestion/languages/swift/query.js +17 -0
  332. package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +8 -0
  333. package/dist/core/ingestion/languages/swift/receiver-binding.js +6 -2
  334. package/dist/core/ingestion/languages/swift.js +2 -0
  335. package/dist/core/ingestion/languages/typescript/captures.d.ts +90 -1
  336. package/dist/core/ingestion/languages/typescript/captures.js +267 -5
  337. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.d.ts +134 -0
  338. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.js +523 -0
  339. package/dist/core/ingestion/languages/typescript/cjs-module-exports.d.ts +54 -0
  340. package/dist/core/ingestion/languages/typescript/cjs-module-exports.js +191 -0
  341. package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.d.ts +7 -0
  342. package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.js +92 -0
  343. package/dist/core/ingestion/languages/typescript/file-candidates.d.ts +29 -0
  344. package/dist/core/ingestion/languages/typescript/file-candidates.js +70 -0
  345. package/dist/core/ingestion/languages/typescript/import-decomposer.d.ts +28 -1
  346. package/dist/core/ingestion/languages/typescript/import-decomposer.js +125 -10
  347. package/dist/core/ingestion/languages/typescript/import-target.d.ts +25 -37
  348. package/dist/core/ingestion/languages/typescript/import-target.js +24 -26
  349. package/dist/core/ingestion/languages/typescript/interpret.d.ts +21 -1
  350. package/dist/core/ingestion/languages/typescript/interpret.js +45 -5
  351. package/dist/core/ingestion/languages/typescript/module-resolution.d.ts +48 -0
  352. package/dist/core/ingestion/languages/typescript/module-resolution.js +171 -0
  353. package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
  354. package/dist/core/ingestion/languages/typescript/query.js +303 -14
  355. package/dist/core/ingestion/languages/typescript/receiver-binding.d.ts +17 -0
  356. package/dist/core/ingestion/languages/typescript/receiver-binding.js +27 -0
  357. package/dist/core/ingestion/languages/typescript/scope-resolver.js +27 -40
  358. package/dist/core/ingestion/languages/typescript/simple-hooks.d.ts +0 -10
  359. package/dist/core/ingestion/languages/typescript/simple-hooks.js +22 -22
  360. package/dist/core/ingestion/languages/typescript/tsconfig.d.ts +59 -0
  361. package/dist/core/ingestion/languages/typescript/tsconfig.js +292 -0
  362. package/dist/core/ingestion/languages/typescript.js +93 -2
  363. package/dist/core/ingestion/languages/vue/import-target.d.ts +6 -22
  364. package/dist/core/ingestion/languages/vue/import-target.js +11 -47
  365. package/dist/core/ingestion/languages/vue/scope-resolver.js +4 -2
  366. package/dist/core/ingestion/local-symbol-pruner.js +11 -11
  367. package/dist/core/ingestion/method-extractors/configs/csharp.js +1 -0
  368. package/dist/core/ingestion/method-extractors/generic.js +1 -0
  369. package/dist/core/ingestion/method-types.d.ts +16 -0
  370. package/dist/core/ingestion/pipeline-phases/di.d.ts +1 -1
  371. package/dist/core/ingestion/pipeline-phases/di.js +136 -21
  372. package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
  373. package/dist/core/ingestion/pipeline-phases/index.js +2 -0
  374. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
  375. package/dist/core/ingestion/pipeline-phases/parse-impl.js +154 -4
  376. package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
  377. package/dist/core/ingestion/pipeline-phases/processes.d.ts +3 -2
  378. package/dist/core/ingestion/pipeline-phases/processes.js +91 -6
  379. package/dist/core/ingestion/pipeline-phases/routes.js +116 -25
  380. package/dist/core/ingestion/pipeline-phases/spring-aop.d.ts +34 -0
  381. package/dist/core/ingestion/pipeline-phases/spring-aop.js +439 -0
  382. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +34 -0
  383. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +255 -0
  384. package/dist/core/ingestion/pipeline-phases/types.d.ts +7 -0
  385. package/dist/core/ingestion/pipeline.d.ts +26 -2
  386. package/dist/core/ingestion/pipeline.js +60 -11
  387. package/dist/core/ingestion/process-processor.d.ts +109 -2
  388. package/dist/core/ingestion/process-processor.js +464 -52
  389. package/dist/core/ingestion/resolve-references.d.ts +6 -1
  390. package/dist/core/ingestion/resolve-references.js +66 -6
  391. package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +8 -2
  392. package/dist/core/ingestion/route-extractors/constant-resolver.js +11 -7
  393. package/dist/core/ingestion/route-extractors/data-route-table.d.ts +40 -0
  394. package/dist/core/ingestion/route-extractors/data-route-table.js +876 -0
  395. package/dist/core/ingestion/route-extractors/dispatch-guard.d.ts +96 -0
  396. package/dist/core/ingestion/route-extractors/dispatch-guard.js +1184 -0
  397. package/dist/core/ingestion/route-extractors/java-const-resolver.d.ts +114 -0
  398. package/dist/core/ingestion/route-extractors/java-const-resolver.js +569 -0
  399. package/dist/core/ingestion/route-extractors/js-const-resolver.d.ts +192 -0
  400. package/dist/core/ingestion/route-extractors/js-const-resolver.js +1033 -0
  401. package/dist/core/ingestion/route-extractors/nest.d.ts +53 -0
  402. package/dist/core/ingestion/route-extractors/nest.js +523 -0
  403. package/dist/core/ingestion/route-extractors/spring-shared.d.ts +11 -0
  404. package/dist/core/ingestion/route-extractors/spring-shared.js +89 -0
  405. package/dist/core/ingestion/route-extractors/spring.js +214 -29
  406. package/dist/core/ingestion/scope-extractor-bridge.js +9 -1
  407. package/dist/core/ingestion/scope-extractor.d.ts +22 -7
  408. package/dist/core/ingestion/scope-extractor.js +309 -15
  409. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +311 -21
  410. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
  411. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +12 -0
  412. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +47 -0
  413. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
  414. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +280 -42
  415. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +123 -0
  416. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +171 -17
  417. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +58 -1
  418. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +137 -34
  419. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +30 -1
  420. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +39 -1
  421. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +18 -1
  422. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +113 -18
  423. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +107 -5
  424. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +590 -33
  425. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +3 -0
  426. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +101 -41
  427. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.d.ts +34 -0
  428. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.js +62 -0
  429. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +5 -1
  430. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +8 -1
  431. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +105 -5
  432. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +931 -92
  433. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.d.ts +58 -0
  434. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.js +458 -0
  435. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.d.ts +180 -0
  436. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.js +418 -0
  437. package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +29 -0
  438. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +57 -0
  439. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +55 -1
  440. package/dist/core/ingestion/scope-resolution/pipeline/run.js +241 -19
  441. package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +112 -2
  442. package/dist/core/ingestion/scope-resolution/resolution-outcome.js +38 -1
  443. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +25 -3
  444. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +36 -16
  445. package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +210 -9
  446. package/dist/core/ingestion/scope-resolution/scope/walkers.js +905 -22
  447. package/dist/core/ingestion/scope-resolution/summary-maps.d.ts +28 -0
  448. package/dist/core/ingestion/scope-resolution/summary-maps.js +50 -0
  449. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.d.ts +55 -0
  450. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.js +37 -0
  451. package/dist/core/ingestion/scope-resolution/unresolved-receivers.d.ts +109 -0
  452. package/dist/core/ingestion/scope-resolution/unresolved-receivers.js +204 -0
  453. package/dist/core/ingestion/scope-resolution/utils/definition-id.d.ts +13 -0
  454. package/dist/core/ingestion/scope-resolution/utils/definition-id.js +19 -0
  455. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.d.ts +171 -0
  456. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.js +218 -0
  457. package/dist/core/ingestion/scope-resolution/workspace-index-types.d.ts +34 -0
  458. package/dist/core/ingestion/scope-resolution/workspace-index-types.js +15 -0
  459. package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +7 -20
  460. package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
  461. package/dist/core/ingestion/tree-sitter-queries.js +678 -4
  462. package/dist/core/ingestion/type-env.js +11 -7
  463. package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
  464. package/dist/core/ingestion/type-extractors/shared.js +16 -0
  465. package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
  466. package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
  467. package/dist/core/ingestion/type-extractors/typescript.js +26 -0
  468. package/dist/core/ingestion/utils/ast-helpers.d.ts +297 -15
  469. package/dist/core/ingestion/utils/ast-helpers.js +578 -46
  470. package/dist/core/ingestion/utils/call-analysis.d.ts +27 -22
  471. package/dist/core/ingestion/utils/call-analysis.js +202 -7
  472. package/dist/core/ingestion/utils/callable-flow-captures.d.ts +59 -0
  473. package/dist/core/ingestion/utils/callable-flow-captures.js +51 -1
  474. package/dist/core/ingestion/utils/callable-labels.d.ts +25 -0
  475. package/dist/core/ingestion/utils/callable-labels.js +31 -0
  476. package/dist/core/ingestion/utils/effective-ram.d.ts +40 -0
  477. package/dist/core/ingestion/utils/effective-ram.js +58 -0
  478. package/dist/core/ingestion/utils/line-base.d.ts +14 -0
  479. package/dist/core/ingestion/utils/line-base.js +14 -0
  480. package/dist/core/ingestion/utils/method-props.d.ts +27 -4
  481. package/dist/core/ingestion/utils/method-props.js +29 -4
  482. package/dist/core/ingestion/utils/receiver-chain-captures.d.ts +31 -0
  483. package/dist/core/ingestion/utils/receiver-chain-captures.js +57 -0
  484. package/dist/core/ingestion/utils/receiver-chain-codec.d.ts +89 -0
  485. package/dist/core/ingestion/utils/receiver-chain-codec.js +182 -0
  486. package/dist/core/ingestion/utils/scope-tree-walk.d.ts +22 -0
  487. package/dist/core/ingestion/utils/scope-tree-walk.js +33 -0
  488. package/dist/core/ingestion/utils/template-arguments.d.ts +96 -0
  489. package/dist/core/ingestion/utils/template-arguments.js +196 -0
  490. package/dist/core/ingestion/utils/type-parameters.d.ts +49 -0
  491. package/dist/core/ingestion/utils/type-parameters.js +206 -0
  492. package/dist/core/ingestion/workers/callable-id.d.ts +80 -0
  493. package/dist/core/ingestion/workers/callable-id.js +125 -0
  494. package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
  495. package/dist/core/ingestion/workers/parse-worker.js +493 -54
  496. package/dist/core/ingestion/workers/worker-pool.d.ts +20 -27
  497. package/dist/core/ingestion/workers/worker-pool.js +91 -3
  498. package/dist/core/lbug/csv-generator.d.ts +27 -0
  499. package/dist/core/lbug/csv-generator.js +72 -17
  500. package/dist/core/lbug/extension-load-error.js +13 -2
  501. package/dist/core/lbug/extension-loader.d.ts +29 -0
  502. package/dist/core/lbug/extension-loader.js +31 -6
  503. package/dist/core/lbug/graph-emit-sink.d.ts +264 -0
  504. package/dist/core/lbug/graph-emit-sink.js +581 -0
  505. package/dist/core/lbug/lbug-adapter.d.ts +290 -11
  506. package/dist/core/lbug/lbug-adapter.js +652 -69
  507. package/dist/core/lbug/native-check.d.ts +21 -0
  508. package/dist/core/lbug/native-check.js +248 -32
  509. package/dist/core/lbug/pdg-emit-sink.d.ts +13 -4
  510. package/dist/core/lbug/pdg-emit-sink.js +21 -111
  511. package/dist/core/lbug/pool-adapter.d.ts +9 -0
  512. package/dist/core/lbug/pool-adapter.js +164 -14
  513. package/dist/core/lbug/query-batch.d.ts +75 -0
  514. package/dist/core/lbug/query-batch.js +102 -0
  515. package/dist/core/lbug/rel-pair-routing.d.ts +160 -2
  516. package/dist/core/lbug/rel-pair-routing.js +228 -10
  517. package/dist/core/lbug/schema.d.ts +163 -4
  518. package/dist/core/lbug/schema.js +404 -159
  519. package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
  520. package/dist/core/lbug/sync-csv-writer.js +108 -0
  521. package/dist/core/run-analyze.d.ts +147 -0
  522. package/dist/core/run-analyze.js +1215 -179
  523. package/dist/core/search/bm25-index.d.ts +11 -0
  524. package/dist/core/search/bm25-index.js +60 -26
  525. package/dist/core/search/fts-indexes.d.ts +150 -9
  526. package/dist/core/search/fts-indexes.js +241 -23
  527. package/dist/core/wiki/graph-queries.js +145 -112
  528. package/dist/core/wiki/llm-client.d.ts +29 -3
  529. package/dist/core/wiki/llm-client.js +47 -12
  530. package/dist/core/wiki/prompts.d.ts +19 -0
  531. package/dist/core/wiki/prompts.js +20 -1
  532. package/dist/lib/utils.d.ts +113 -0
  533. package/dist/lib/utils.js +185 -0
  534. package/dist/mcp/local/aop-metadata.d.ts +77 -0
  535. package/dist/mcp/local/aop-metadata.js +227 -0
  536. package/dist/mcp/local/bean-metadata.d.ts +2 -1
  537. package/dist/mcp/local/bean-metadata.js +22 -1
  538. package/dist/mcp/local/convex-metadata.d.ts +8 -0
  539. package/dist/mcp/local/convex-metadata.js +45 -0
  540. package/dist/mcp/local/local-backend.d.ts +174 -11
  541. package/dist/mcp/local/local-backend.js +1678 -331
  542. package/dist/mcp/local/path-predicate.d.ts +19 -0
  543. package/dist/mcp/local/path-predicate.js +21 -0
  544. package/dist/mcp/local/pdg-impact.d.ts +132 -10
  545. package/dist/mcp/local/pdg-impact.js +391 -98
  546. package/dist/mcp/repository-policy.d.ts +1 -0
  547. package/dist/mcp/repository-policy.js +5 -0
  548. package/dist/mcp/resources.js +26 -4
  549. package/dist/mcp/server.js +23 -13
  550. package/dist/mcp/tools.d.ts +8 -0
  551. package/dist/mcp/tools.js +76 -23
  552. package/dist/server/analyze-job.d.ts +37 -2
  553. package/dist/server/analyze-job.js +13 -2
  554. package/dist/server/analyze-launch.d.ts +1 -1
  555. package/dist/server/analyze-launch.js +79 -10
  556. package/dist/server/analyze-worker-core.d.ts +1 -1
  557. package/dist/server/analyze-worker-core.js +10 -1
  558. package/dist/server/analyze-worker-ipc.d.ts +1 -1
  559. package/dist/server/analyze-worker-ipc.js +4 -0
  560. package/dist/server/analyze-worker-protocol.d.ts +59 -0
  561. package/dist/server/analyze-worker-protocol.js +1 -0
  562. package/dist/server/analyze-worker.d.ts +1 -17
  563. package/dist/server/api.d.ts +2 -11
  564. package/dist/server/api.js +164 -163
  565. package/dist/server/embed-run-outcome.d.ts +89 -0
  566. package/dist/server/embed-run-outcome.js +88 -0
  567. package/dist/server/git-clone.js +6 -2
  568. package/dist/server/middleware.d.ts +116 -9
  569. package/dist/server/middleware.js +291 -22
  570. package/dist/server/sse-progress.d.ts +41 -0
  571. package/dist/server/sse-progress.js +125 -0
  572. package/dist/storage/branch-index.d.ts +11 -6
  573. package/dist/storage/branch-index.js +15 -7
  574. package/dist/storage/file-hash.js +2 -2
  575. package/dist/storage/fs-atomic.d.ts +25 -0
  576. package/dist/storage/fs-atomic.js +42 -0
  577. package/dist/storage/git.d.ts +131 -0
  578. package/dist/storage/git.js +236 -2
  579. package/dist/storage/index-lock.d.ts +102 -0
  580. package/dist/storage/index-lock.js +660 -0
  581. package/dist/storage/parse-cache.js +588 -6
  582. package/dist/storage/parsedfile-store.js +76 -6
  583. package/dist/storage/repo-manager.d.ts +54 -441
  584. package/dist/storage/repo-manager.js +312 -221
  585. package/dist/storage/repo-meta.d.ts +530 -0
  586. package/dist/storage/repo-meta.js +100 -0
  587. package/dist/types/pipeline.d.ts +37 -0
  588. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +1 -1
  589. package/hooks/claude/gitnexus-hook.cjs +1 -1
  590. package/hooks/claude/resolve-analyze-cmd.cjs +80 -13
  591. package/package.json +11 -2
  592. package/scripts/cross-platform-shard.ts +153 -0
  593. package/scripts/cross-platform-tests.ts +122 -0
  594. package/scripts/run-cross-platform.ts +16 -5
  595. package/skills/gitnexus-cli.md +3 -3
  596. package/skills/gitnexus-debugging.md +37 -7
  597. package/skills/gitnexus-exploring.md +26 -4
  598. package/skills/gitnexus-impact-analysis.md +71 -10
  599. package/skills/gitnexus-plan/README.md +11 -6
  600. package/skills/gitnexus-plan/references/evidence-provenance.md +49 -12
  601. package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +654 -372
  602. package/skills/gitnexus-refactoring.md +48 -5
  603. package/skills/gitnexus-review/SKILL.md +12 -6
  604. package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +1 -1
  605. package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +1 -1
  606. package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +1 -1
  607. package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +1 -1
  608. package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +1 -1
  609. package/skills/gitnexus-review/ci-personas/ci-security-lens.md +1 -1
  610. package/skills/gitnexus-taint-analysis.md +13 -7
  611. package/skills/gitnexus-work/SKILL.md +4 -1
  612. package/skills/gitnexus-work/references/evidence-provenance.md +49 -12
  613. package/skills/gitnexus-work/scripts/evidence-provenance.mjs +654 -372
  614. package/vendor/leiden/utils.cjs +28 -1
  615. package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
  616. package/web/assets/{__vite-browser-external-bMKyYQkO.js → __vite-browser-external-COxE8F0G.js} +1 -1
  617. package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
  618. package/web/assets/agent-Dr4l5EOp.js +662 -0
  619. package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
  620. package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
  621. package/web/assets/{blockDiagram-7IZFK4PR-DBefcjof.js → blockDiagram-54WLDVWM-Dg_hrRWE.js} +4 -4
  622. package/web/assets/{c4Diagram-Y2BXMSZH-EjWnjEJl.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +2 -2
  623. package/web/assets/chunk-224SPVON-B8gxtXpy.js +1 -0
  624. package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +127 -0
  625. package/web/assets/chunk-2SREHG4O-Dip42xOq.js +1 -0
  626. package/web/assets/chunk-4RFN2BYJ-DHHWuC-n.js +1 -0
  627. package/web/assets/chunk-66DQ2XMT-CM0xjFAN.js +1 -0
  628. package/web/assets/chunk-6BELYETK-ChsYtfHW.js +1 -0
  629. package/web/assets/{chunk-LII3EMHJ-BL6lKJ_P.js → chunk-6L755F7B-CMhLBxi2.js} +1 -1
  630. package/web/assets/{chunk-QA3QBVWF-DVXPOIxe.js → chunk-7CWYLC5S-DRgGkkpF.js} +1 -1
  631. package/web/assets/{chunk-ZXARS5L4-C3v-4Fsw.js → chunk-A7VWPJGB-B4O3oQdQ.js} +1 -1
  632. package/web/assets/chunk-BI6VK774-D0oaWk8V.js +1 -0
  633. package/web/assets/chunk-D6VWDJW2-BxcBdZ9c.js +2 -0
  634. package/web/assets/chunk-DMV4VAQV-Bn6WXDSX.js +4 -0
  635. package/web/assets/chunk-E5QJAATJ-dh-5CtIV.js +2 -0
  636. package/web/assets/chunk-EQFTRU2I-1ix7TzW9.js +2 -0
  637. package/web/assets/chunk-FWYVLQTC-BgDItRzJ.js +1 -0
  638. package/web/assets/chunk-HNC4WDU7-DoU3KnA7.js +1 -0
  639. package/web/assets/chunk-L5GCOVLC-CE2w8Nm_.js +161 -0
  640. package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +321 -0
  641. package/web/assets/chunk-LORZLZWG-B57uGw2N.js +88 -0
  642. package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +62 -0
  643. package/web/assets/chunk-NV3KIAZN-5yvcpMiu.js +1 -0
  644. package/web/assets/chunk-OIYT25JQ-CQ6KOZGX.js +1 -0
  645. package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +10 -0
  646. package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +156 -0
  647. package/web/assets/chunk-RRFMTAIC-CMN0wcYA.js +1 -0
  648. package/web/assets/{chunk-RLI5ZMPA-CkXZ0y0U.js → chunk-SATU7PGQ-B1zhgOvc.js} +1 -1
  649. package/web/assets/chunk-STOV2HOB-GnExfzIX.js +1 -0
  650. package/web/assets/{chunk-INKRHTLW-Ckl3_KkO.js → chunk-SZD42YQK-ijyKKVr1.js} +21 -21
  651. package/web/assets/{chunk-LCXTWHL2-C162wE5z.js → chunk-TFPGFQPA-Dj6a-0pC.js} +3 -3
  652. package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +2 -0
  653. package/web/assets/chunk-TZUXEDM2-B7p9AcTw.js +1 -0
  654. package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +1 -0
  655. package/web/assets/{chunk-6764PJDD-C7xxk063.js → chunk-VE5CLXGZ-C1vB7wpY.js} +1 -1
  656. package/web/assets/{chunk-RG4AUYOV-ZNgyLFq6.js → chunk-VJFVEZTB-CX66F2ep.js} +3 -3
  657. package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +1 -0
  658. package/web/assets/chunk-WJBAP47W-BckNkuEN.js +1 -0
  659. package/web/assets/chunk-XNMVGMAZ-Cg_LnPtj.js +1 -0
  660. package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +1 -0
  661. package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +1 -0
  662. package/web/assets/{cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js → cose-bilkent-RZA4XIPR-BHpK4Crp.js} +1 -1
  663. package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +1 -0
  664. package/web/assets/cynefinDiagram-TR7LZUCG-C3Iar9lZ.js +62 -0
  665. package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +4 -0
  666. package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +30 -0
  667. package/web/assets/diagram-JCD7PQ7C-DC5-9FRr.js +24 -0
  668. package/web/assets/{diagram-HNR7UZ2L-DVRltWbL.js → diagram-KFBZAVDW-Dfmf_4ti.js} +3 -3
  669. package/web/assets/diagram-L7DVE3PN-GIRyVUtt.js +41 -0
  670. package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +24 -0
  671. package/web/assets/ebnfDiagram-DRHRQJWO-D8_CI4ZF.js +1 -0
  672. package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +85 -0
  673. package/web/assets/error-D9MtuG9s.js +1 -0
  674. package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +1 -0
  675. package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +1 -0
  676. package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +292 -0
  677. package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +1 -0
  678. package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +106 -0
  679. package/web/assets/{index-D7mTFcvQ.js → index-2zdvEdzg.js} +51 -51
  680. package/web/assets/index-CJDpyH-n.css +2 -0
  681. package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +1 -0
  682. package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +2 -0
  683. package/web/assets/{ishikawaDiagram-BNXS4ZKH-XpjJRU9h.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +2 -2
  684. package/web/assets/{journeyDiagram-M6C3CM3L-C6wjooas.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +3 -3
  685. package/web/assets/{kanban-definition-75IXJCU3-5_UVY79g.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +6 -6
  686. package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
  687. package/web/assets/{mindmap-definition-2TDM6QVE-8xDLzk2e.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +5 -5
  688. package/web/assets/node.browser-U-KyT5AW.js +1 -0
  689. package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +1 -0
  690. package/web/assets/pegDiagram-YKIO5C6U-QGeQLEq2.js +1 -0
  691. package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +1 -0
  692. package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +39 -0
  693. package/web/assets/{quadrantDiagram-VICAPDV7-DR54jOeR.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +3 -3
  694. package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +1 -0
  695. package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +1 -0
  696. package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +1 -0
  697. package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +1 -0
  698. package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +1 -0
  699. package/web/assets/railroadDiagram-M77LTMSB-AXu4vxk_.js +1 -0
  700. package/web/assets/{requirementDiagram-JXO7QTGE-PEkg7sKC.js → requirementDiagram-RASO5HTO-B-l8InpK.js} +4 -4
  701. package/web/assets/{sankeyDiagram-URQDO5SZ-DDWEtjcs.js → sankeyDiagram-F32LOJ6L-Kd7zjJgX.js} +3 -3
  702. package/web/assets/{sequenceDiagram-VS2MUI6T-Bv-uwANx.js → sequenceDiagram-URATNSBD-BlcdY9DS.js} +7 -7
  703. package/web/assets/sizeCapture-5GORAGP4-BEqQzsxs.js +1 -0
  704. package/web/assets/src-C5sx_gMp.js +1 -0
  705. package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +1 -0
  706. package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +1 -0
  707. package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +2 -0
  708. package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +8 -0
  709. package/web/assets/{timeline-definition-O6YCAMPW-Qmsuo7qS.js → timeline-definition-WJXWRH4I-DUfp1R3E.js} +3 -3
  710. package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +1 -0
  711. package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +1 -0
  712. package/web/assets/vennDiagram-K3VCMQLI-Bj-FN-XS.js +34 -0
  713. package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +1 -0
  714. package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +78 -0
  715. package/web/assets/xychartDiagram-5VRUVLCW-CK_rbSWE.js +7 -0
  716. package/web/index.html +16 -15
  717. package/dist/core/ingestion/languages/python/index-stats.d.ts +0 -18
  718. package/dist/core/ingestion/languages/python/index-stats.js +0 -25
  719. package/web/assets/ProcessFlowModal-CwkpVkv-.js +0 -22
  720. package/web/assets/agent-Ds-lkZjX.js +0 -626
  721. package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
  722. package/web/assets/architectureDiagram-UL44E2DR-CmG3uPWf.js +0 -36
  723. package/web/assets/chunk-2T2R6R2M-Bb6Sy3_j.js +0 -4
  724. package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +0 -1
  725. package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +0 -321
  726. package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +0 -159
  727. package/web/assets/chunk-67TQ5CYL-CA7OhIEf.js +0 -124
  728. package/web/assets/chunk-7J6CGLKN-BlKwgXKs.js +0 -10
  729. package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +0 -1
  730. package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +0 -1
  731. package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
  732. package/web/assets/chunk-KGFNY3KK-BZeP-55u.js +0 -62
  733. package/web/assets/chunk-KGYTTC2M-zm6n242I.js +0 -1
  734. package/web/assets/chunk-KNLZD3CH-BGlP6X9R.js +0 -1
  735. package/web/assets/chunk-LRIF4GLE-n59lhprL.js +0 -1
  736. package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
  737. package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
  738. package/web/assets/chunk-T2UQINTJ-BEyXhZWe.js +0 -1
  739. package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +0 -1
  740. package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +0 -1
  741. package/web/assets/chunk-UY5QBCOK-ByqTVLvh.js +0 -1
  742. package/web/assets/chunk-VU6ZFW4Y-BLeasdkU.js +0 -2
  743. package/web/assets/classDiagram-KGZ6W3CR-olpO3fMe.js +0 -1
  744. package/web/assets/classDiagram-v2-72OJOZXJ-olpO3fMe.js +0 -1
  745. package/web/assets/dagre-ND4H6XIP-CY4iIF7v.js +0 -4
  746. package/web/assets/diagram-3NCE3AQN-CO6QpzEE.js +0 -43
  747. package/web/assets/diagram-GF46GFSD-B2atbzmU.js +0 -24
  748. package/web/assets/diagram-QXG6HAR7-DR6AHD2h.js +0 -24
  749. package/web/assets/diagram-WEQXMOUZ-DkpoMwTL.js +0 -10
  750. package/web/assets/erDiagram-L5TCEMPS-n8g_90bc.js +0 -85
  751. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
  752. package/web/assets/flowDiagram-H6V6AXG4-SGMDiCkB.js +0 -162
  753. package/web/assets/ganttDiagram-JCBTUEKG-Cb3UBqRS.js +0 -292
  754. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
  755. package/web/assets/gitGraphDiagram-S2ZK5IYY-Bs9CR7tq.js +0 -106
  756. package/web/assets/index-CX_fADmQ.css +0 -2
  757. package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +0 -1
  758. package/web/assets/infoDiagram-3YFTVSEB-T368on4D.js +0 -2
  759. package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
  760. package/web/assets/node-Ct_zna8U.js +0 -8
  761. package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +0 -1
  762. package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +0 -1
  763. package/web/assets/pieDiagram-CU6KROY3-Bv4LpAbr.js +0 -30
  764. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
  765. package/web/assets/sdk-CzHHH8tD.js +0 -37
  766. package/web/assets/src-Cv1eWg0o.js +0 -1
  767. package/web/assets/stateDiagram-7D4R322I-DVNjmkEq.js +0 -1
  768. package/web/assets/stateDiagram-v2-36443NZ5-CyN4Fh7_.js +0 -1
  769. package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +0 -1
  770. package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +0 -1
  771. package/web/assets/vennDiagram-MWXL3ELB-BD1iK1SX.js +0 -34
  772. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
  773. package/web/assets/wardleyDiagram-CUQ6CDDI-D6TzLVob.js +0 -78
  774. package/web/assets/xychartDiagram-N2JHSOCM-CoZ_Tits.js +0 -7
  775. /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
@@ -17,10 +17,11 @@
17
17
  * migrate.
18
18
  */
19
19
  import { generateId } from '../../../../lib/utils.js';
20
- import { qualifiedKey, simpleKey } from '../graph-bridge/node-lookup.js';
21
- import { isOverloadableCallable } from '../../utils/callable-labels.js';
20
+ import { AMBIGUOUS_POSITION, exactPositionKey, localNameKey, positionKey, qualifiedKey, simpleKey, } from '../graph-bridge/node-lookup.js';
21
+ import { isOverloadableCallable, isPositionQualifiedLocalLabel, } from '../../utils/callable-labels.js';
22
22
  import { templateConstraintsIdTag } from '../../utils/template-arguments.js';
23
23
  import { parameterShapeIdTag } from '../../utils/method-props.js';
24
+ import { definitionIdPosition } from '../utils/definition-id.js';
24
25
  /**
25
26
  * Labels that may legitimately ANCHOR a CALLS/ACCESSES edge as the
26
27
  * source ("caller"). A Variable / Property can be the TARGET of an
@@ -40,15 +41,22 @@ import { parameterShapeIdTag } from '../../utils/method-props.js';
40
41
  * restricted to function/class-likes, those calls correctly fall
41
42
  * through to the File-node fallback at the bottom of the walk.
42
43
  */
44
+ export const CALLER_ANCHOR_LABELS = new Set([
45
+ 'Function',
46
+ 'Method',
47
+ 'Constructor',
48
+ 'Module',
49
+ 'Class',
50
+ 'Interface',
51
+ 'Struct',
52
+ 'Enum',
53
+ // Record is class-like executable context for declaration initializers.
54
+ // Without this anchor, calls from Java static-field / C# property initializers
55
+ // fall through to File even though the canonical Record node is linkable.
56
+ 'Record',
57
+ ]);
43
58
  function isCallerAnchorLabel(label) {
44
- return (label === 'Function' ||
45
- label === 'Method' ||
46
- label === 'Constructor' ||
47
- label === 'Module' ||
48
- label === 'Class' ||
49
- label === 'Interface' ||
50
- label === 'Struct' ||
51
- label === 'Enum');
59
+ return CALLER_ANCHOR_LABELS.has(label);
52
60
  }
53
61
  function rangeContainsPoint(range, at) {
54
62
  if (at.startLine < range.startLine || at.startLine > range.endLine)
@@ -59,21 +67,64 @@ function rangeContainsPoint(range, at) {
59
67
  return false;
60
68
  return true;
61
69
  }
70
+ /**
71
+ * Adapter over the canonical {@link isOverloadableCallable} — deliberately NOT a
72
+ * second spelling of the label set. An earlier revision of this file inlined
73
+ * `Function | Method | Constructor` here, which recreated the exact twin-list
74
+ * drift this PR adds a guard test for elsewhere.
75
+ */
76
+ const isCallableDef = (d) => isOverloadableCallable(d.type);
77
+ /**
78
+ * True when `range` is the body of `def` itself — the scope's start position
79
+ * equals the def's declaration position.
80
+ *
81
+ * Safe to compare directly: `scope-extractor.ts` builds a def id as
82
+ * `def:<filePath>#<startLine>:<startCol>:<type>:<name>` from the same `Range`
83
+ * a scope carries, so both sides share one coordinate base and need no
84
+ * conversion. (Do not "fix" this against the 1-based reading in
85
+ * `defStartLine`'s docblock — what matters here is that the two sides agree
86
+ * with each other, not which base they use.)
87
+ */
88
+ function scopeIsCallableBody(range, def) {
89
+ const position = definitionIdPosition(def.nodeId, def.filePath);
90
+ if (position === undefined)
91
+ return false;
92
+ return position.line === range.startLine && position.column === range.startCol;
93
+ }
62
94
  /** Pick the callable that owns `atRange` when multiple overloads share a class scope. */
63
95
  function pickCallerCallableDef(scope, scopes, atRange) {
64
96
  if (atRange !== undefined) {
65
97
  for (const childId of scopes.scopeTree.getChildren(scope.id)) {
66
98
  const child = scopes.scopeTree.getScope(childId);
67
- if (child === undefined || child.kind !== 'Function')
99
+ if (child === undefined)
68
100
  continue;
69
101
  if (!rangeContainsPoint(child.range, atRange))
70
102
  continue;
71
- const childCallable = child.ownedDefs.find((d) => d.type === 'Function' || d.type === 'Method' || d.type === 'Constructor');
72
- if (childCallable !== undefined)
73
- return childCallable;
103
+ const childCallable = child.ownedDefs.find(isCallableDef);
104
+ if (childCallable === undefined)
105
+ continue;
106
+ if (child.kind === 'Function')
107
+ return { def: childCallable, fromChildScope: true };
108
+ // A Block-kind scope is a callable boundary ONLY when the scope IS that
109
+ // callable's own body. Kotlin `lambda_literal` and Ruby `do_block`/`block`
110
+ // are @scope.block deliberately (#1757 smart casts), so the kind gate
111
+ // alone would never let a closure there become a call SOURCE (#2699).
112
+ //
113
+ // But relaxing the gate to accept ANY Block owning a callable is wrong:
114
+ // a nested `fun foo()` declared inside a block is owned by that block, so
115
+ // a call made at BLOCK level — outside foo — would be misattributed to
116
+ // foo. The alignment test discriminates them. For a closure the
117
+ // declaration and the scope sit on the SAME node (the anchor discipline
118
+ // documented in javascript/query.ts), so their start positions match; for
119
+ // a nested function the block starts at `{` and the def starts at the
120
+ // declaration, so they do not.
121
+ if (child.kind === 'Block' && scopeIsCallableBody(child.range, childCallable)) {
122
+ return { def: childCallable, fromChildScope: true };
123
+ }
74
124
  }
75
125
  }
76
- return scope.ownedDefs.find((d) => d.type === 'Function' || d.type === 'Method' || d.type === 'Constructor');
126
+ const own = scope.ownedDefs.find(isCallableDef);
127
+ return own === undefined ? undefined : { def: own, fromChildScope: false };
77
128
  }
78
129
  /**
79
130
  * Look up a `SymbolDefinition` in the graph node lookup.
@@ -92,11 +143,191 @@ function pickCallerCallableDef(scope, scopes, atRange) {
92
143
  * resolution working for languages that don't yet synthesize
93
144
  * qualifiers).
94
145
  */
146
+ /**
147
+ * Trailing segment of a dotted qualified name (`Outer.inner` -> `inner`),
148
+ * with any function-local `@line:col` identity suffix stripped
149
+ * (`run.pick@5:10` -> `pick`).
150
+ *
151
+ * The graph node's `name` property is the bare source name, so the position
152
+ * key must compare against that — the position it carries is already the
153
+ * disambiguator, and leaving the suffix on would make every local miss.
154
+ */
155
+ function simpleNameOf(qualifiedName) {
156
+ const dot = qualifiedName.lastIndexOf('.');
157
+ const tail = dot === -1 ? qualifiedName : qualifiedName.slice(dot + 1);
158
+ return tail.replace(LOCAL_IDENTITY_SUFFIX, '');
159
+ }
160
+ /**
161
+ * The function-local identity marker appended by `localIdentity` (`name@row:col`).
162
+ * Shared so the stripper above and the fail-closed guard in
163
+ * `resolveCallerGraphId` cannot disagree about what counts as a local.
164
+ */
165
+ const LOCAL_IDENTITY_SUFFIX = /@\d+:\d+$/;
166
+ /**
167
+ * The OTHER callable label the same construct may be registered under.
168
+ *
169
+ * A def and its graph node describe one construct, but they do not always agree
170
+ * on its LABEL: some structure phases emit a type's methods as `Function` nodes
171
+ * while the scope extractor derives `Method` from the `@declaration.method`
172
+ * anchor. Every key `resolveDefGraphId` builds is label-scoped, so such a pair
173
+ * misses ALL of them and lands on the label-agnostic, first-write-wins
174
+ * `simpleKey` at the bottom (#2807 follow-up, measured in Swift).
175
+ *
176
+ * ONE definition, consulted by all three key families — position, local-name
177
+ * guard, qualified — because they are not independent: leaving it out of the
178
+ * position key makes the fail-closed guard beside it UNREACHABLE for exactly the
179
+ * split the qualified retry serves, so the retry inherits a case the guard was
180
+ * written to stop (a function-local aliased onto a same-named class method).
181
+ * What each family may do with it differs and is documented at each site.
182
+ */
183
+ function siblingCallableLabel(label) {
184
+ if (label === 'Method')
185
+ return 'Function';
186
+ if (label === 'Function')
187
+ return 'Method';
188
+ return undefined;
189
+ }
95
190
  export function resolveDefGraphId(filePath, def, nodeLookup) {
96
191
  const qn = def.qualifiedName;
97
192
  if (qn === undefined || qn.length === 0)
98
193
  return undefined;
99
194
  if (def.type !== undefined) {
195
+ // ONE binding for all three key families — see `siblingCallableLabel`, which
196
+ // documents why they cannot be given independent answers. What each family
197
+ // is allowed to DO with it still differs, and is documented at each site.
198
+ const siblingLabel = siblingCallableLabel(def.type);
199
+ // Position key FIRST (#2699). A def and its graph node are the same
200
+ // construct, so they share a source line — the only evidence that
201
+ // separates a function-local declaration from a same-named file-level one
202
+ // without either side having to model the scope chain. Node ids are
203
+ // 0-based, def ids 1-based. An `AMBIGUOUS_POSITION` tombstone (two
204
+ // callables on one line) falls through to the name-based keys below.
205
+ //
206
+ // For a closure binding the two query channels still anchor on different
207
+ // AST nodes (outer wrapper vs inner callable), but the graph node's
208
+ // `startLine` follows the initializer (#2735) so this join matches even
209
+ // when the binding is split across lines.
210
+ const definitionPosition = definitionIdPosition(def.nodeId, filePath);
211
+ const line = definitionPosition?.line;
212
+ if (line !== undefined && isPositionQualifiedLocalLabel(def.type)) {
213
+ const simple = simpleNameOf(qn);
214
+ if (definitionPosition !== undefined) {
215
+ const exactHit = nodeLookup.get(exactPositionKey(filePath, def.type, definitionPosition.line - 1, definitionPosition.column));
216
+ if (exactHit !== undefined && exactHit !== AMBIGUOUS_POSITION)
217
+ return exactHit;
218
+ if (exactHit === undefined && siblingLabel !== undefined) {
219
+ const siblingExactHit = nodeLookup.get(exactPositionKey(filePath, siblingLabel, definitionPosition.line - 1, definitionPosition.column));
220
+ if (siblingExactHit !== undefined && siblingExactHit !== AMBIGUOUS_POSITION) {
221
+ return siblingExactHit;
222
+ }
223
+ }
224
+ }
225
+ const posHit = nodeLookup.get(positionKey(filePath, def.type, line - 1, simple));
226
+ if (posHit !== undefined && posHit !== AMBIGUOUS_POSITION)
227
+ return posHit;
228
+ // Retry under the sibling callable label when the def's OWN label
229
+ // registered NOTHING here — see `siblingCallableLabel`. Both keys in this
230
+ // block are label-scoped, so under a split the position join misses and
231
+ // the guard below cannot fire, and the def falls through to the qualified
232
+ // retry that ends on the class method of the same name: a function-local
233
+ // `func helper` inside `Host.run` was aliased onto `Host.helper`, taking
234
+ // its calls with it, even at a different arity.
235
+ //
236
+ // Deliberately NOT dot-gated the way the qualified retry is: this key is
237
+ // not a name. `(file, line, simple name)` identifies one declaration by
238
+ // itself — that is why `positionKey` needs no qualifier at all — so
239
+ // crossing the two callable labels here cannot alias a top-level `save`
240
+ // onto a class's `save` the way a bare NAME would.
241
+ //
242
+ // Gated on `posHit === undefined` so an `AMBIGUOUS_POSITION` tombstone
243
+ // keeps meaning ambiguous: two callables already claim this line under the
244
+ // def's own label, and relabelling must not resolve by picking a third.
245
+ if (posHit === undefined && siblingLabel !== undefined) {
246
+ const siblingPosHit = nodeLookup.get(positionKey(filePath, siblingLabel, line - 1, simple));
247
+ if (siblingPosHit !== undefined && siblingPosHit !== AMBIGUOUS_POSITION) {
248
+ return siblingPosHit;
249
+ }
250
+ }
251
+ // FAIL CLOSED when a function-local of this name exists in the file (#2699
252
+ // follow-up). Falling through to the name keys would end at the label-agnostic,
253
+ // first-write-wins `simpleKey` below and alias this def onto whichever same-named
254
+ // callable was registered first — reproducibly minting a FALSE edge. A missing
255
+ // edge is the correct failure direction for a graph whose consumers include
256
+ // `impact`; a fabricated caller is not. Gated on `localNameKey` so this ONLY
257
+ // fires where the collision is real — a file with no such local keeps its
258
+ // previous fallback behaviour, which is what preserves legitimate anchor
259
+ // differences such as a Vue SFC's `lineOffset`.
260
+ //
261
+ // Multi-line closure bindings are NOT this case anymore (#2735): their graph
262
+ // `startLine` follows the initializer, so the position key above hits.
263
+ if (nodeLookup.get(localNameKey(filePath, def.type, simple)) !== undefined) {
264
+ return undefined;
265
+ }
266
+ // Same guard under the sibling label: a local the structure phase
267
+ // registered as `Function` must still stop a `Method`-labelled def of that
268
+ // name from reaching `simpleKey`, or the split re-opens the fabricated
269
+ // edge this guard exists to close. Unlike the position retry above this
270
+ // arm is NOT conditioned on the own-label lookup missing — it only ever
271
+ // returns `undefined`, and a missing edge is the correct failure
272
+ // direction; declining to check would be the risky choice, not this.
273
+ if (siblingLabel !== undefined &&
274
+ nodeLookup.get(localNameKey(filePath, siblingLabel, simple)) !== undefined) {
275
+ return undefined;
276
+ }
277
+ }
278
+ // Name forms to try for every keyed lookup below, most specific first.
279
+ //
280
+ // #1982/#2742: some scope-extractors qualify a def by its enclosing CLASS
281
+ // chain (`A.Inner`) or leave it a bare tail, while the structure-phase node is
282
+ // keyed by the full path (`NS.A.Inner`, or a Rust `mod` chain). The
283
+ // namespace-prefixed form is therefore the more specific one and must be tried
284
+ // first — the bare form happily matches a same-named item at a DIFFERENT
285
+ // namespace depth in the same file and returns it before any retry is reached
286
+ // (#2742: a call into `mod inner { fn dispatch }` bound to the crate-root
287
+ // `fn dispatch` and rendered as a self-loop).
288
+ //
289
+ // Applied to the TAGGED keys too, not just the plain one. Previously only the
290
+ // plain key had the prefixed retry, so for a namespace/mod-qualified def every
291
+ // tagged key — constraints, parameter types, parameter shape, arity, template
292
+ // arguments — composed from the bare tail and simply missed the node
293
+ // `node-lookup.ts` had registered under the qualified name. Those keys exist to
294
+ // separate overloads, so leaving them dead meant a mod-scoped overload set
295
+ // depended on whichever later key happened to catch it.
296
+ const defType = def.type;
297
+ const nsPrefix = def.namespacePrefix;
298
+ const nameForms = nsPrefix !== undefined && nsPrefix.length > 0 ? [`${nsPrefix}.${qn}`, qn] : [qn];
299
+ // The label split described on `siblingCallableLabel` also kills every key
300
+ // above: they are all label-scoped, so a split pair misses all of them and
301
+ // lands on the label-agnostic simple key at the bottom of this function —
302
+ // which is first-write-wins, so two same-named methods in ONE file both
303
+ // resolved to whichever was registered first. That silently misattributed
304
+ // every call in the second method's body to the first (#2807 follow-up;
305
+ // measured in Swift, where `class A { func run }` + `class B { func run }`
306
+ // gave A.run both bodies' edges and B.run none).
307
+ //
308
+ // Crossing the two callable labels is sound HERE only for a name that
309
+ // carries its owner: `A.run` names exactly one construct whatever the
310
+ // label, while a bare `run` is precisely the aliasing the label was added
311
+ // to prevent (a top-level `save` vs a class's `save`). Hence the dot gate —
312
+ // it keeps the original guarantee intact for unqualified names. The
313
+ // position key above needs no such gate because it is not a name.
314
+ const lookupTagged = (tag) => {
315
+ for (const form of nameForms) {
316
+ const hit = nodeLookup.get(qualifiedKey(filePath, defType, `${form}${tag}`));
317
+ if (hit !== undefined)
318
+ return hit;
319
+ }
320
+ if (siblingLabel === undefined)
321
+ return undefined;
322
+ for (const form of nameForms) {
323
+ if (!form.includes('.'))
324
+ continue;
325
+ const hit = nodeLookup.get(qualifiedKey(filePath, siblingLabel, `${form}${tag}`));
326
+ if (hit !== undefined)
327
+ return hit;
328
+ }
329
+ return undefined;
330
+ };
100
331
  // SFINAE / `requires`-clause disambiguation (issue #1579) — try the
101
332
  // constraint-fingerprinted key FIRST. Two function-template overloads
102
333
  // with identical `parameterTypes` but mutually-exclusive SFINAE
@@ -105,8 +336,7 @@ export function resolveDefGraphId(filePath, def, nodeLookup) {
105
336
  // share the latter.
106
337
  if ((def.type === 'Function' || def.type === 'Method') &&
107
338
  def.templateConstraints !== undefined) {
108
- const cKey = qualifiedKey(filePath, def.type, `${qn}${templateConstraintsIdTag(def.templateConstraints)}`);
109
- const cHit = nodeLookup.get(cKey);
339
+ const cHit = lookupTagged(templateConstraintsIdTag(def.templateConstraints));
110
340
  if (cHit !== undefined)
111
341
  return cHit;
112
342
  }
@@ -115,8 +345,7 @@ export function resolveDefGraphId(filePath, def, nodeLookup) {
115
345
  def.parameterTypeClasses !== undefined) {
116
346
  const shapeTag = parameterShapeIdTag(def.parameterTypes, def.parameterTypeClasses);
117
347
  if (shapeTag !== '') {
118
- const shapeKey = qualifiedKey(filePath, def.type, `${qn}${shapeTag}`);
119
- const shapeHit = nodeLookup.get(shapeKey);
348
+ const shapeHit = lookupTagged(shapeTag);
120
349
  if (shapeHit !== undefined)
121
350
  return shapeHit;
122
351
  }
@@ -131,8 +360,7 @@ export function resolveDefGraphId(filePath, def, nodeLookup) {
131
360
  if (isOverloadableCallable(def.type) &&
132
361
  def.parameterTypes !== undefined &&
133
362
  def.parameterTypes.length > 0) {
134
- const pKey = qualifiedKey(filePath, def.type, `${qn}~${def.parameterTypes.join(',')}`);
135
- const pHit = nodeLookup.get(pKey);
363
+ const pHit = lookupTagged(`~${def.parameterTypes.join(',')}`);
136
364
  if (pHit !== undefined)
137
365
  return pHit;
138
366
  }
@@ -141,8 +369,7 @@ export function resolveDefGraphId(filePath, def, nodeLookup) {
141
369
  // zero-arg overload (no parameterTypes) that would otherwise collapse onto a
142
370
  // sibling overload via the source-order-dependent qualified key.
143
371
  if (isOverloadableCallable(def.type) && def.parameterCount !== undefined) {
144
- const aKey = qualifiedKey(filePath, def.type, `${qn}#${def.parameterCount}`);
145
- const aHit = nodeLookup.get(aKey);
372
+ const aHit = lookupTagged(`#${def.parameterCount}`);
146
373
  if (aHit !== undefined)
147
374
  return aHit;
148
375
  }
@@ -153,26 +380,13 @@ export function resolveDefGraphId(filePath, def, nodeLookup) {
153
380
  def.type === 'Record') &&
154
381
  def.templateArguments !== undefined &&
155
382
  def.templateArguments.length > 0) {
156
- const tKey = qualifiedKey(filePath, def.type, `${qn}~${def.templateArguments.join(',')}`);
157
- const tHit = nodeLookup.get(tKey);
383
+ const tHit = lookupTagged(`~${def.templateArguments.join(',')}`);
158
384
  if (tHit !== undefined)
159
385
  return tHit;
160
386
  }
161
- const qualifiedHit = nodeLookup.get(qualifiedKey(filePath, def.type, qn));
387
+ const qualifiedHit = lookupTagged('');
162
388
  if (qualifiedHit !== undefined)
163
389
  return qualifiedHit;
164
- // #1982: some scope-extractors qualify a type by its enclosing CLASS chain
165
- // (`A.Inner`) but drop the enclosing NAMESPACE, while the structure-phase
166
- // node is keyed by the full path (`NS.A.Inner`). Retry with the
167
- // namespace-prefixed key (tagged by `tagNamespacePrefixes`) BEFORE the
168
- // simple-name fallback, so same-tail nested bases don't collapse across
169
- // sibling namespace members via `simpleKey`.
170
- const nsPrefix = def.namespacePrefix;
171
- if (nsPrefix !== undefined && nsPrefix.length > 0) {
172
- const nsHit = nodeLookup.get(qualifiedKey(filePath, def.type, `${nsPrefix}.${qn}`));
173
- if (nsHit !== undefined)
174
- return nsHit;
175
- }
176
390
  }
177
391
  const simpleName = qn.lastIndexOf('.') === -1 ? qn : qn.slice(qn.lastIndexOf('.') + 1);
178
392
  return nodeLookup.get(simpleKey(filePath, simpleName));
@@ -187,7 +401,7 @@ export function simpleQualifiedName(def) {
187
401
  }
188
402
  /**
189
403
  * Walk the scope chain from `startScope` upward looking for the first
190
- * scope whose `ownedDefs` contains a Function/Method/Class — that's
404
+ * scope whose `ownedDefs` contains a callable or class-like anchor — that's
191
405
  * our caller anchor. Translate via `nodeLookup` to the graph-node ID.
192
406
  *
193
407
  * Module-level references (e.g. Python `u = models.User()` at top
@@ -209,13 +423,37 @@ export function resolveCallerGraphId(startScope, scopes, nodeLookup, atRange) {
209
423
  break;
210
424
  lastFilePath = scope.filePath;
211
425
  // Prefer Function/Method/Constructor anchors; fall back to
212
- // Class/Interface/Struct/Enum. Variable/Property are NOT valid
426
+ // Class/Interface/Struct/Enum/Record. Variable/Property are NOT valid
213
427
  // caller anchors — see `isCallerAnchorLabel` for why.
214
- const fnDef = pickCallerCallableDef(scope, scopes, atRange);
215
- if (fnDef !== undefined) {
428
+ const picked = pickCallerCallableDef(scope, scopes, atRange);
429
+ if (picked !== undefined) {
430
+ const fnDef = picked.def;
216
431
  const id = resolveDefGraphId(fnDef.filePath, fnDef, nodeLookup);
217
432
  if (id !== undefined)
218
433
  return id;
434
+ // FAIL CLOSED at a FUNCTION-LOCAL boundary (#2699 review P1-1).
435
+ //
436
+ // `fnDef` is the callable that genuinely owns this call site. When its
437
+ // graph node cannot be named, climbing to the parent scope does not
438
+ // degrade gracefully — it ATTRIBUTES THE CALL TO A FUNCTION THAT DOES NOT
439
+ // MAKE IT. Measured before this guard, a closure whose literal starts on
440
+ // the line after its binding
441
+ // $multi =
442
+ // function ($x) { return target($x); };
443
+ // emitted `outer -> target` while the real `outer.$multi` node sat with no
444
+ // outgoing edges: a CALLS edge present nowhere in the source, which is the
445
+ // exact defect class #2699 exists to remove.
446
+ //
447
+ // Restricted to defs carrying the function-local `@line:col` identity,
448
+ // because that is precisely the set whose position join can miss (the two
449
+ // query channels anchor on different nodes by design). For every other
450
+ // callable the historical climb is preserved, so this cannot silently
451
+ // delete edges outside the local-identity path.
452
+ // The scope we are standing in OWNS this call site and we have identified
453
+ // its callable — we simply cannot name that callable's graph node. Climbing
454
+ // to an ancestor here does not degrade gracefully: it credits the call to a
455
+ // function that does not make it. Fail closed instead.
456
+ return undefined;
219
457
  }
220
458
  const classDef = scope.ownedDefs.find((d) => isCallerAnchorLabel(d.type));
221
459
  if (classDef !== undefined) {
@@ -10,8 +10,131 @@
10
10
  * single function. The `reason` defaults to
11
11
  * `'scope-resolution: import'`; provider may override if downstream
12
12
  * filters on reason.
13
+ *
14
+ * ## Non-initializing imports carry a distinct `reason`
15
+ *
16
+ * A pair reached ONLY by imports that cannot run at module-initialization time
17
+ * still gets an edge — it is a real dependency, and impact/trace must see it —
18
+ * but it cannot participate in the kind of cycle `check --cycles` exists to
19
+ * find. There are two such kinds, and they are NOT the same fact:
20
+ *
21
+ * - **deferred** — the import exists at runtime, just later. `import('./m')`
22
+ * and a function-local `import` both really load the module; what they do
23
+ * not do is load it while the importing module is still initializing.
24
+ * Deferring is in fact the standard idiom for BREAKING an init cycle, and
25
+ * this repository uses it that way on purpose in both spellings:
26
+ * `core/group/service.ts` does `await import('./cross-impact.js')`, and
27
+ * `eval/workflow_bench/proposer_sandbox.py` puts a plain `import` inside a
28
+ * function under the comment "Kept lazy to avoid a module cycle".
29
+ * - **type-only** — the import does not exist at runtime AT ALL. `tsc` deletes
30
+ * `import type { X } from './m'`; the emitted JavaScript contains no
31
+ * reference to `./m`. Nothing was made later; the dependency is compile-time
32
+ * only. Eight of the ten false cycles this repository reports are this.
33
+ *
34
+ * Reporting either as an init cycle flags the fix as the bug. They get separate
35
+ * suffixes rather than one shared "not really an import" tag because the two
36
+ * answers to "does this edge exist when the program runs?" are opposite, and a
37
+ * reader of the graph — or the next filter written against `reason` — needs to
38
+ * be able to tell them apart.
39
+ *
40
+ * Three signals, because no one of them covers the others. All three ride the
41
+ * EDGE — this function reads properties and never walks the scope tree for
42
+ * them, for the reason spelled out under "Why nothing here is derived from the
43
+ * scope tree" below:
44
+ *
45
+ * - `ImportEdge.kind === 'dynamic-resolved'` — TS/JS `import()`.
46
+ * - `ImportEdge.runsOnlyWhenCalled` — the import sits inside a function body
47
+ * AND this language's imports execute where they are written: Python's
48
+ * `def f(): from x import Y`, Ruby's `def f; require 'x'; end`, a CommonJS
49
+ * `require()` in a body. Nothing marks those as dynamic, because
50
+ * syntactically they are ordinary imports; what defers them is WHERE they
51
+ * sit, so `scope-extractor.ts` decides it in Pass 3 and it is carried down
52
+ * — `ParsedImport` → `finalize-algorithm.ts` → the edge. A language whose
53
+ * imports do not execute never gets the tag no matter where one sits (Rust
54
+ * `use`, C/C++ `#include`; see
55
+ * `LanguageProvider.importsExecuteWhereWritten`).
56
+ * - `ImportEdge.typeOnly` — TypeScript `import type` / `import { type X }`.
57
+ * Neither of the other two sees it: the kind is the ordinary `named` /
58
+ * `alias`, and the statement sits at module top level like any other. Only
59
+ * the `type` keyword says it, so it is carried from the syntax down —
60
+ * `typescript/import-decomposer.ts` → `interpret.ts` → `finalize-algorithm.ts`.
61
+ *
62
+ * ## Why nothing here is derived from the scope tree
63
+ *
64
+ * `scopeTree` is used for exactly one thing: turning the map's key into the
65
+ * source `filePath`. It is NOT a place to ask where an import was written.
66
+ * `finalize-algorithm.ts:295` publishes every file's finalized edges as
67
+ * `linkedByScope.set(file.moduleScope, …)`, so the `imports` map this function
68
+ * receives holds one bucket per FILE, keyed by that file's `Module` scope —
69
+ * never by the scope an import was actually written in. A walk from such a key
70
+ * looking for an enclosing `Function` starts at a `Module` and answers `false`
71
+ * every time, for every import in the tree.
72
+ *
73
+ * That walk was here, and it never fired once. It looked correct in unit tests
74
+ * only because they hand-built `new Map([['fn', …]])`, a shape the pipeline
75
+ * cannot produce. Position now arrives as `runsOnlyWhenCalled`, decided where
76
+ * the position is still known.
77
+ *
78
+ * Tagging the reason is enough for the check query, which already filters
79
+ * non-runtime edges that way (`markdown-link`, Swift implicit module
80
+ * visibility) — no change to the persisted RELATION schema, no new property on
81
+ * the emitted `CodeRelation`. (`typeOnly` and `runsOnlyWhenCalled` are fields
82
+ * on the in-memory `ImportEdge`, which is never persisted; they end here.)
83
+ *
84
+ * ponytail: reason-string tagging rather than a typed relation property,
85
+ * because the one consumer already filters on `reason` and a property would
86
+ * touch the relation schema. If a second consumer ever needs to branch on this,
87
+ * promote it to a real field then.
88
+ *
89
+ * ## Precedence: the strongest runtime presence in a pair wins
90
+ *
91
+ * Emission dedupes by `(sourceFile, targetFile)`, so one edge has to speak for
92
+ * every import that reaches the pair. Rank them by how much of the dependency
93
+ * survives to run time — initializing > deferred > erased — and let the
94
+ * strongest win: the ranks ascend as presence weakens, so the pair keeps the
95
+ * LOWEST rank it sees ({@link PRESENCE_INITIALIZES} is 0). Inverting that
96
+ * comparison is the one mutation here that hides a real cycle rather than
97
+ * inventing a false one, which is why the suite pins it directly.
98
+ *
99
+ * - Any initializing import wins outright. One top-level `import { f }` beside
100
+ * an `await import()` and a dozen `import type`s is a real init dependency;
101
+ * reporting the pair as deferred or erased would HIDE a true cycle.
102
+ * - Deferred beats type-only. A pair with a function-local import plus some
103
+ * `import type`s does load the target at run time, so `(deferred)` is the
104
+ * honest label; `(type-only)` would claim the module never loads.
105
+ * - The two deferred signals rank the same. `import()` and a function-local
106
+ * import are the same claim about the emitted program — it loads, later —
107
+ * so a pair reached only by them is `(deferred)` either way.
108
+ *
109
+ * That also settles the mixed statement `import { type X, Y } from './m'`
110
+ * without the decomposer aggregating anything: `X` is erased, `Y` is not, and
111
+ * `Y` carries the pair. A statement is type-only exactly when every specifier
112
+ * it decomposes to is.
113
+ *
114
+ * Pairs are collected before anything is emitted so the ranking sees every
115
+ * contributing edge rather than whichever one arrived first. Insertion order
116
+ * into the map is first-seen order, so emission order is byte-identical to the
117
+ * single-pass form this replaced.
13
118
  */
14
119
  import type { ImportEdge, ScopeId } from '../../../../_shared/index.js';
15
120
  import type { KnowledgeGraph } from '../../../graph/types.js';
16
121
  import type { ScopeResolutionIndexes } from '../../model/scope-resolution-indexes.js';
122
+ /**
123
+ * Reason suffix for a pair reachable only through imports that run later —
124
+ * `import()` and function-local imports.
125
+ *
126
+ * `check --cycles` matches this EXACTLY, so a provider that overrides the base
127
+ * reason keeps its deferred edges filterable — the suffix travels with it.
128
+ */
129
+ export declare const DEFERRED_IMPORT_REASON_SUFFIX = " (deferred)";
130
+ /**
131
+ * Reason suffix for a pair reachable only through imports the compiler erases —
132
+ * TypeScript `import type` / `import { type X }`.
133
+ *
134
+ * A second suffix rather than a reuse of {@link DEFERRED_IMPORT_REASON_SUFFIX}:
135
+ * both are excluded from the cycle query, but "runs later" and "never runs" are
136
+ * opposite answers about the emitted program, and the reason string is the only
137
+ * place the graph records which one this pair is.
138
+ */
139
+ export declare const TYPE_ONLY_IMPORT_REASON_SUFFIX = " (type-only)";
17
140
  export declare function emitImportEdges(graph: KnowledgeGraph, imports: ReadonlyMap<ScopeId, readonly ImportEdge[]>, scopeTree: ScopeResolutionIndexes['scopeTree'], reason?: string): number;