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
@@ -83,9 +83,17 @@ interface LanguageProviderConfig {
83
83
  * The current C++ UE-macro preprocessor relies on the practical fact that
84
84
  * UE reflection macros and module-export tokens are ASCII-only.
85
85
  *
86
- * Must be a pure function — same input always yields the same output. Called
87
- * once per file, on every code path that re-parses (parsing-processor, import
88
- * processor, heritage processor, call processor, parse worker).
86
+ * Must be a pure function — same input always yields the same output, and
87
+ * re-applying it to its own output changes nothing.
88
+ *
89
+ * Applied by the parse worker (`parse-worker.ts`), by `extractParsedFile`
90
+ * (`scope-extractor-bridge.ts`) on the parse-cache-miss path, and by the
91
+ * embedding parse (`embeddings/ast-utils.ts`, which does not go through the
92
+ * bridge). Any *new* path that re-parses a file must apply it too, or the two
93
+ * halves of the pipeline analyze different programs — and note the set is not
94
+ * closed today: language-owned re-parse helpers reached through other
95
+ * provider hooks (e.g. `populateRangeBindings`) still see raw text.
96
+ * `test/unit/preprocess-source-parity.test.ts` pins the bridge equivalence.
89
97
  *
90
98
  * Default: undefined (no preprocessing — `file.content` is parsed verbatim).
91
99
  */
@@ -163,6 +171,16 @@ interface LanguageProviderConfig {
163
171
  * (e.g., 'Method' for Kotlin), or defaultLabel to keep as-is.
164
172
  * Default: undefined (standard label assignment). */
165
173
  readonly labelOverride?: (functionNode: SyntaxNode, defaultLabel: NodeLabel) => NodeLabel | null;
174
+ /**
175
+ * Suppress a definition query match after its default label is known.
176
+ * Languages use this for syntax that represents an implicit declaration
177
+ * unless an explicit declaration with the same semantics is present.
178
+ *
179
+ * `defaultLabel` is supplied so an implementation can scope itself to one
180
+ * kind of definition; implementations whose capture map alone decides the
181
+ * question may ignore it.
182
+ */
183
+ readonly shouldSkipDefinitionCapture?: (captureMap: CaptureMap, defaultLabel: NodeLabel) => boolean;
166
184
  /** MRO strategy for multiple inheritance resolution.
167
185
  * Default: 'first-wins'. */
168
186
  readonly mroStrategy?: MroStrategy;
@@ -217,14 +235,22 @@ interface LanguageProviderConfig {
217
235
  * Default: undefined (no route extraction). */
218
236
  readonly extractRoutes?: (tree: Parser.Tree, filePath: string, reader: (relativePath: string) => string | null, parser?: Parser | null) => ExtractedRoute[];
219
237
  /**
220
- * Extract decorator-style route annotations from a parsed file.
238
+ * Extract routes that a parsed file declares in its own AST.
221
239
  *
222
240
  * When defined, the parse worker calls this after per-file capture processing
223
- * to extract framework route definitions that require AST-level analysis beyond
241
+ * to extract route definitions that require AST-level analysis beyond
224
242
  * generic `@decorator` captures (e.g., Java Spring class-level prefix joining,
225
243
  * multi-class handling). The returned routes are appended to `decoratorRoutes`.
226
244
  *
227
- * Default: undefined (no language-specific decorator route extraction).
245
+ * Decorators are the common case and the reason for the name, but not the only
246
+ * shape: JS/TS uses this hook for hand-rolled dispatch guards
247
+ * (`route-extractors/dispatch-guard.ts`), where a raw `node:http` server
248
+ * declares a route by comparing the request path to a literal. Anything that
249
+ * yields a `(path, verb, handler)` triple from one file's AST belongs here —
250
+ * set `ExtractedDecoratorRoute.source` when the provenance is not a decorator,
251
+ * so the `HANDLES_ROUTE` edge does not claim one.
252
+ *
253
+ * Default: undefined (no language-specific route extraction).
228
254
  */
229
255
  readonly extractDecoratorRoutes?: (tree: Parser.Tree, filePath: string, lineOffset: number) => ExtractedDecoratorRoute[];
230
256
  /**
@@ -339,6 +365,93 @@ interface LanguageProviderConfig {
339
365
  * Required when `emitScopeCaptures` is implemented.
340
366
  */
341
367
  readonly interpretImport?: (captures: CaptureMatch) => ParsedImport | null;
368
+ /**
369
+ * Do this language's imports EXECUTE at the point in the program where they
370
+ * are written?
371
+ *
372
+ * The scope extractor marks an import `runsOnlyWhenCalled` when the statement
373
+ * sits inside a `Function` scope (Pass 3): where imports are executed
374
+ * statements, one written in a function body runs only when that function is
375
+ * called — Python's `def f(): from x import Y`, Ruby's
376
+ * `def f; require 'x'; end`, a CommonJS `require()` in a body (which
377
+ * `javascript/captures.ts` does capture, via its own AST walk). That rule is
378
+ * about EXECUTION. It says nothing true about a language whose "import" is
379
+ * not an executed statement at all, and in such a language moving one into a
380
+ * function body defers exactly nothing.
381
+ *
382
+ * "Where written" is about execution time, not textual placement: a
383
+ * `#include` is spliced precisely where it is written and still answers
384
+ * `false`, because splicing is not running.
385
+ *
386
+ * **The failure directions are not symmetric, which is why the default is
387
+ * what it is.** Answering `false` for a language that really does execute
388
+ * its imports un-defers a deliberately lazy one, and `check --cycles`
389
+ * reports a cycle its author broke on purpose — wrong, but visible on screen
390
+ * and arguable by whoever reads it. Answering `true` for a language that
391
+ * does not SUPPRESSES a cycle that is entirely real: nobody sees it, so
392
+ * nobody can argue with it. Getting this wrong in the `true` direction hides
393
+ * a true cycle, and that is the failure that matters.
394
+ *
395
+ * Absent — the default — reads as `true`, so every provider that does not
396
+ * name this keeps today's behaviour exactly. The flag never ADDS deferral;
397
+ * declaring `false` only WITHHOLDS it.
398
+ *
399
+ * Declared `false` by, and only by:
400
+ *
401
+ * - **C and C++** — `#include` is a preprocessor directive. The header's
402
+ * text is spliced in before a line of the program runs, wherever the
403
+ * directive sits, and C permits one inside a function body. C++'s only
404
+ * other Pass-3 import form, `using ns::name` / `using namespace ns`, is
405
+ * compile-time name lookup, is legal in a function body too, and defers
406
+ * no more than an `#include` does.
407
+ * - **Rust** — `use` is a compile-time path alias, not a statement that
408
+ * runs. `fn f() { use crate::m::X; }` is legal, and putting the `use`
409
+ * there changes only where the name is VISIBLE, never when anything
410
+ * happens; Rust has no module-initialization order in the JS/Python
411
+ * sense and permits intra-crate module cycles outright. It is the
412
+ * structural twin of C++'s `using ns::name`. `rust/query.ts` captures
413
+ * `(use_declaration)` and nothing else, so this covers the whole
414
+ * surface. (The claim here is the narrow one: POSITION does not defer a
415
+ * Rust import. Whether a Rust `use` can create an initialization
416
+ * dependency *at all* is a larger and separate question, and this flag
417
+ * deliberately does not answer it.)
418
+ * - **COBOL** — `COPY` is a pure textual splice performed by the copybook
419
+ * preprocessor, the `#include` case exactly. Latent today: the COBOL
420
+ * `@scope.function` capture covers a single line (`cobol/captures.ts`
421
+ * ranges sections and paragraphs `line → line`), so a `COPY` on any
422
+ * later line never resolves inside one and Pass 3 has nothing to mark.
423
+ * Declared anyway, so that giving those anchors their true multi-line
424
+ * ranges cannot silently start suppressing real copybook cycles.
425
+ *
426
+ * Per-provider rather than per-import, and that is sufficient — the question
427
+ * this answers is narrower than "do this language's imports execute". It is
428
+ * only ever asked of an import that resolved INSIDE A FUNCTION SCOPE, so the
429
+ * real domain is: *can a function-local import in this language be
430
+ * non-executing?* No supported language has two forms that are both
431
+ * function-local and disagree. C++ has two forms, `#include` and
432
+ * `using ns::name`; both can appear in a body and both are compile-time.
433
+ *
434
+ * PHP is the case that looks like a counterexample and is not. It does mix —
435
+ * `use Foo\Bar;` aliases at compile time while `require` executes — but
436
+ * `use` cannot appear in a function body at all (`php/query.ts` records this
437
+ * twice: "`namespace_use_declaration` is an import only at top level / inside
438
+ * namespace scope"), so it never reaches this flag. Absent is therefore
439
+ * PERMANENTLY correct for PHP, including the day `require` is captured: a
440
+ * `require` in a body will correctly defer, and a `use` still cannot get
441
+ * here. Do not read PHP as a reason to build a per-`ParsedImport`
442
+ * classification hook — it would cost a provider call per import on the
443
+ * extractor's hot path, and `ParsedImport.kind` does not discriminate the
444
+ * thing being asked anyway.
445
+ *
446
+ * A capability on the provider rather than a language check in
447
+ * `scope-extractor.ts`: shared `core/ingestion/` pipeline code must not name
448
+ * languages (AGENTS.md), and "imports here are not executed statements" is a
449
+ * property of the language, not of the walk.
450
+ *
451
+ * Default: undefined, read as `true` (imports execute where they are
452
+ * written; position defers them).
453
+ */
454
+ readonly importsExecuteWhereWritten?: boolean;
342
455
  /**
343
456
  * What is the implicit receiver on a Function scope? For instance methods
344
457
  * this is `self`/`this`; for standalone functions it is `null`. Consulted
@@ -367,6 +480,19 @@ interface LanguageProviderConfig {
367
480
  * suffix — `@scope.function` → `'Function'`, etc.).
368
481
  */
369
482
  readonly resolveScopeKind?: (captures: CaptureMatch) => ScopeKind | null;
483
+ /**
484
+ * Report the receiver names this scope BINDS rather than inherits — see
485
+ * `Scope.ownsReceivers` (#2701).
486
+ *
487
+ * Called once per `@scope.*` capture during scope-tree construction.
488
+ * Return the shared frozen set for a scope that starts a fresh receiver
489
+ * (a JS/TS ordinary `function`, whose `this` is bound at call time), and
490
+ * `undefined` for one that inherits it (an arrow function, and every
491
+ * closure form in languages that capture the receiver lexically).
492
+ *
493
+ * Default: undefined everywhere — the receiver walk is unchanged.
494
+ */
495
+ readonly scopeOwnsReceivers?: (captures: CaptureMatch) => ReadonlySet<string> | undefined;
370
496
  /**
371
497
  * Override where a declaration's name becomes visible. By default the name
372
498
  * is bound in the innermost enclosing scope; return a different `ScopeId`
@@ -396,7 +522,7 @@ interface LanguageProviderConfig {
396
522
  * Required when `emitScopeCaptures` is implemented. Ring 2 PKG #922
397
523
  * provides the adapter that bridges today's resolver shape to this hook.
398
524
  */
399
- readonly resolveImportTarget?: (parsedImport: ParsedImport, workspaceIndex: WorkspaceIndex) => string | null;
525
+ readonly resolveImportTarget?: (parsedImport: ParsedImport, workspaceIndex: WorkspaceIndex) => string | readonly string[] | null;
400
526
  /**
401
527
  * Enumerate the exported names of a file — used by the finalize algorithm
402
528
  * to expand `import * from M` into individual `BindingRef`s with
@@ -5,6 +5,21 @@ import { parseSourceSafe } from '../../../tree-sitter/safe-parse.js';
5
5
  import { splitCInclude } from './import-decomposer.js';
6
6
  import { computeCDeclarationArity, computeCCallArity } from './arity-metadata.js';
7
7
  import { markStaticName } from './static-linkage.js';
8
+ import { synthesizeReceiverChainCapture } from '../../utils/receiver-chain-captures.js';
9
+ import { synthesizeCallableFlowCaptures, } from '../../utils/callable-flow-captures.js';
10
+ const C_CALLABLE_CAPTURE_OPTIONS = {
11
+ functionNodeTypes: new Set(['function_definition']),
12
+ callNodeTypes: new Set(['call_expression']),
13
+ parameterListNodeTypes: new Set(['parameter_list', 'argument_list']),
14
+ parameterNodeTypes: new Set(['parameter_declaration']),
15
+ bindingNodeTypes: new Set(['init_declarator']),
16
+ assignmentNodeTypes: new Set(['assignment_expression']),
17
+ identifierNodeTypes: new Set(['identifier', 'field_identifier', 'type_identifier']),
18
+ callableSignatureDeclarationNodeTypes: new Set(['declaration', 'parameter_declaration']),
19
+ emitCanonicalInvokeReference: true,
20
+ parameterPassingMode: (parameter) => containsNodeType(parameter, 'pointer_declarator') ? 'pointer' : 'value',
21
+ expectedSignature: (container, destination) => functionDeclaratorSignature(destination) ?? functionDeclaratorSignature(container),
22
+ };
8
23
  export function emitCScopeCaptures(sourceText, filePath, cachedTree) {
9
24
  let tree = cachedTree;
10
25
  if (tree === undefined) {
@@ -104,10 +119,58 @@ export function emitCScopeCaptures(sourceText, filePath, cachedTree) {
104
119
  grouped['@reference.arity'] = syntheticCapture('@reference.arity', callNode, String(computeCCallArity(callNode)));
105
120
  }
106
121
  }
122
+ // Structural receiver chain for a call whose receiver is itself an
123
+ // expression, so resolution can type it by folding over structure
124
+ // instead of re-parsing the receiver's source text. Self-gating: a
125
+ // non-call match, an absent receiver, or a chain with no nameable base
126
+ // all leave `grouped` untouched.
127
+ synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
107
128
  out.push(grouped);
108
129
  }
130
+ out.push(...synthesizeCallableFlowCaptures(tree.rootNode, C_CALLABLE_CAPTURE_OPTIONS));
109
131
  return out;
110
132
  }
133
+ function functionDeclaratorSignature(node) {
134
+ const declarator = findDescendantOfType(node, 'function_declarator');
135
+ const parameters = declarator?.childForFieldName('parameters');
136
+ if (parameters === null || parameters === undefined)
137
+ return undefined;
138
+ const parameterNodes = parameters.namedChildren.filter((child) => child !== null && child.type === 'parameter_declaration');
139
+ // tree-sitter-c materializes `...` as a NAMED `variadic_parameter` node —
140
+ // the anonymous-token checks never matched, so variadic signatures were
141
+ // emitted with a wrong fixed arity (#2522 review). Keep the token checks
142
+ // for grammar variants that expose `...` as an anonymous literal.
143
+ const hasEllipsis = parameters.children.some((child) => child.type === 'variadic_parameter' ||
144
+ child.type === '...' ||
145
+ (!child.isNamed && child.text === '...'));
146
+ const isVoidOnly = parameterNodes.length === 1 &&
147
+ parameterNodes[0].namedChildCount === 1 &&
148
+ parameterNodes[0].firstNamedChild?.text === 'void';
149
+ if (isVoidOnly)
150
+ return { parameterCount: 0, parameterTypes: [] };
151
+ const parameterTypes = parameterNodes.map((parameter) => parameter.childForFieldName('type')?.text ?? 'unknown');
152
+ if (hasEllipsis)
153
+ parameterTypes.push('...');
154
+ return {
155
+ ...(hasEllipsis ? {} : { parameterCount: parameterNodes.length }),
156
+ parameterTypes,
157
+ };
158
+ }
159
+ function containsNodeType(root, type) {
160
+ return findDescendantOfType(root, type) !== null;
161
+ }
162
+ function findDescendantOfType(root, type) {
163
+ const stack = [root];
164
+ while (stack.length > 0) {
165
+ const node = stack.pop();
166
+ if (node.type === type)
167
+ return node;
168
+ for (const child of node.namedChildren)
169
+ if (child !== null)
170
+ stack.push(child);
171
+ }
172
+ return null;
173
+ }
111
174
  /**
112
175
  * Check if a C function_definition or declaration has `static` storage class.
113
176
  * Walks direct children for a `storage_class_specifier` node with text `static`.
@@ -1,4 +1,5 @@
1
1
  import { dirname, join } from 'path';
2
+ import { perFileSet } from '../../import-resolvers/per-file-set.js';
2
3
  /**
3
4
  * Per-pass memo: workspace paths bucketed by basename (last path segment),
4
5
  * keyed on the `allFilePaths` set identity.
@@ -15,25 +16,20 @@ import { dirname, join } from 'path';
15
16
  * `WeakMap`-keyed so it is reclaimed with the pass (no cross-pass staleness).
16
17
  * Shared by C and C++ (`resolveCppImportTarget` delegates here).
17
18
  */
18
- const suffixIndexByPaths = new WeakMap();
19
- function suffixIndex(allFilePaths) {
20
- let index = suffixIndexByPaths.get(allFilePaths);
21
- if (index === undefined) {
22
- index = new Map();
23
- for (const original of allFilePaths) {
24
- const normalized = original.replace(/\\/g, '/');
25
- const basename = normalized.slice(normalized.lastIndexOf('/') + 1);
26
- let bucket = index.get(basename);
27
- if (bucket === undefined) {
28
- bucket = [];
29
- index.set(basename, bucket);
30
- }
31
- bucket.push({ original, normalized, depth: normalized.split('/').length });
19
+ const suffixIndex = perFileSet((allFilePaths) => {
20
+ const index = new Map();
21
+ for (const original of allFilePaths) {
22
+ const normalized = original.replace(/\\/g, '/');
23
+ const basename = normalized.slice(normalized.lastIndexOf('/') + 1);
24
+ let bucket = index.get(basename);
25
+ if (bucket === undefined) {
26
+ bucket = [];
27
+ index.set(basename, bucket);
32
28
  }
33
- suffixIndexByPaths.set(allFilePaths, index);
29
+ bucket.push({ original, normalized, depth: normalized.split('/').length });
34
30
  }
35
31
  return index;
36
- }
32
+ });
37
33
  /**
38
34
  * Resolve a C #include path to a file in the workspace.
39
35
  *
@@ -117,6 +117,23 @@ const C_SCOPE_QUERY = `
117
117
  declarator: (pointer_declarator
118
118
  declarator: (identifier) @declaration.name)) @declaration.variable
119
119
 
120
+ ;; Declarations — function-pointer variables (\`void (*fp)(int);\`), with and
121
+ ;; without initializer. Without these the file-scope pointer has no scope-tree
122
+ ;; binding, so callable-flow cells written in one function and read in another
123
+ ;; canonicalize to different keys and never join (#2522 review, H1).
124
+ (declaration
125
+ declarator: (function_declarator
126
+ declarator: (parenthesized_declarator
127
+ (pointer_declarator
128
+ declarator: (identifier) @declaration.name)))) @declaration.variable
129
+
130
+ (declaration
131
+ declarator: (init_declarator
132
+ declarator: (function_declarator
133
+ declarator: (parenthesized_declarator
134
+ (pointer_declarator
135
+ declarator: (identifier) @declaration.name))))) @declaration.variable
136
+
120
137
  ;; Declarations — macro definitions
121
138
  (preproc_def
122
139
  name: (identifier) @declaration.name) @declaration.macro
@@ -6,6 +6,7 @@ import { cArityCompatibility, cMergeBindings, resolveCImportTarget } from './ind
6
6
  import { scanHeaderFiles } from './header-scan.js';
7
7
  import { expandCWildcardNames, isStaticName, clearStaticNames } from './static-linkage.js';
8
8
  import { applyCStaticLinkageSideChannel } from './capture-side-channel.js';
9
+ import { perFileSet } from '../../import-resolvers/per-file-set.js';
9
10
  /**
10
11
  * Per-pass memo of the augmented `#include`-resolution file set
11
12
  * (`allFilePaths` ∪ header `.h` paths), keyed on the two stable source sets.
@@ -16,25 +17,25 @@ import { applyCStaticLinkageSideChannel } from './capture-side-channel.js';
16
17
  * handing it a new set identity each time. Both `allFilePaths` (built once in
17
18
  * scope-resolution `run.ts`) and the header set (`loadResolutionConfig`
18
19
  * result) are stable per pass, so the union is built once and reused.
19
- * `WeakMap`-keyed → reclaimed with the pass (no cross-pass staleness).
20
+ * Reclaimed with the pass (no cross-pass staleness).
21
+ *
22
+ * Two inputs, so two levels of `perFileSet` composed rather than a second
23
+ * primitive: the outer memo's value is the inner memo, and a function is an
24
+ * object, which is all `T extends object` asks for.
25
+ *
26
+ * The MEMO stays private to this file even though the C++ resolver's twin is
27
+ * byte-identical. The augmented set's IDENTITY is load-bearing downstream —
28
+ * C++ delegates to `resolveCImportTarget`, whose `suffixIndex` memo is keyed on
29
+ * exactly this set — so one memo shared across the two languages would hand
30
+ * each the other's index. Same builder-shared/memo-separate rule as
31
+ * `import-resolvers/pass-cache.ts`.
20
32
  */
21
- const augmentedPathsByPass = new WeakMap();
22
- function augmentedFilePaths(allFilePaths, headerPaths) {
23
- let byHeaders = augmentedPathsByPass.get(allFilePaths);
24
- if (byHeaders === undefined) {
25
- byHeaders = new WeakMap();
26
- augmentedPathsByPass.set(allFilePaths, byHeaders);
27
- }
28
- let augmented = byHeaders.get(headerPaths);
29
- if (augmented === undefined) {
30
- const set = new Set(allFilePaths);
31
- for (const h of headerPaths)
32
- set.add(h);
33
- augmented = set;
34
- byHeaders.set(headerPaths, augmented);
35
- }
36
- return augmented;
37
- }
33
+ const augmentedFilePathsFor = perFileSet((allFilePaths) => perFileSet((headerPaths) => {
34
+ const set = new Set(allFilePaths);
35
+ for (const h of headerPaths)
36
+ set.add(h);
37
+ return set;
38
+ }));
38
39
  /**
39
40
  * C `ScopeResolver` registered in `SCOPE_RESOLVERS` and consumed by
40
41
  * the generic `runScopeResolution` orchestrator (RFC #909 Ring 3).
@@ -78,7 +79,7 @@ export const cScopeResolver = {
78
79
  // targets .h files classified as C++ in language detection.
79
80
  const headerPaths = resolutionConfig;
80
81
  if (headerPaths !== undefined && headerPaths.size > 0) {
81
- return resolveCImportTarget(targetRaw, fromFile, augmentedFilePaths(allFilePaths, headerPaths));
82
+ return resolveCImportTarget(targetRaw, fromFile, augmentedFilePathsFor(allFilePaths)(headerPaths));
82
83
  }
83
84
  return resolveCImportTarget(targetRaw, fromFile, allFilePaths);
84
85
  },
@@ -100,4 +101,10 @@ export const cScopeResolver = {
100
101
  const simple = def.qualifiedName?.split('.').pop() ?? def.qualifiedName ?? '';
101
102
  return isStaticName(def.filePath, simple);
102
103
  },
104
+ // Precise linkage-only variant used to associate a visible prototype with
105
+ // its implementation during callable-value actual-to-formal propagation.
106
+ hasFileLocalCallableLinkage: (def) => {
107
+ const simple = def.qualifiedName?.split('.').pop() ?? def.qualifiedName ?? '';
108
+ return isStaticName(def.filePath, simple);
109
+ },
103
110
  };
@@ -1,3 +1,4 @@
1
+ import { perFileSet } from '../../import-resolvers/per-file-set.js';
1
2
  /**
2
3
  * Per-file set of function names declared with `static` storage class.
3
4
  * Populated during `emitCScopeCaptures` and consumed by `expandCWildcardNames`
@@ -52,27 +53,22 @@ export function clearStaticNames() {
52
53
  * thousands of resolved includes) that is ~10^10+ comparisons on a single
53
54
  * thread — the dominant term in the scope-resolution finalize grind.
54
55
  *
55
- * Building the lookup once collapses it to O(R_include + F). `WeakMap`-keyed
56
- * on the array so the index is reclaimed with the pass — no cross-pass
56
+ * Building the lookup once collapses it to O(R_include + F). `perFileSet` keys
57
+ * on the array identity so the index is reclaimed with the pass — no cross-pass
57
58
  * staleness (mirrors the {@link clearStaticNames} discipline for server-mode
58
59
  * / multi-repo reuse), and a fresh array transparently rebuilds.
59
60
  */
60
- const moduleScopeIndexByPass = new WeakMap();
61
- function moduleScopeIndex(parsedFiles) {
62
- let index = moduleScopeIndexByPass.get(parsedFiles);
63
- if (index === undefined) {
64
- index = new Map();
65
- // First-wins to preserve `Array.find` semantics (returns the first match).
66
- // `moduleScope` is unique per file in practice, so collisions are absent;
67
- // the guard only formalises identical behaviour to the prior `.find`.
68
- for (const p of parsedFiles) {
69
- if (!index.has(p.moduleScope))
70
- index.set(p.moduleScope, p);
71
- }
72
- moduleScopeIndexByPass.set(parsedFiles, index);
61
+ const moduleScopeIndex = perFileSet((parsedFiles) => {
62
+ const index = new Map();
63
+ // First-wins to preserve `Array.find` semantics (returns the first match).
64
+ // `moduleScope` is unique per file in practice, so collisions are absent;
65
+ // the guard only formalises identical behaviour to the prior `.find`.
66
+ for (const p of parsedFiles) {
67
+ if (!index.has(p.moduleScope))
68
+ index.set(p.moduleScope, p);
73
69
  }
74
70
  return index;
75
- }
71
+ });
76
72
  /**
77
73
  * Return the names visible through a C wildcard import (`#include`).
78
74
  * All module-scope defs from the target file are visible EXCEPT those
@@ -369,6 +369,13 @@ export const cProvider = defineLanguage({
369
369
  // than a DataCloneError at the worker boundary (#2143).
370
370
  collectCaptureSideChannel: (filePath) => assertCloneable(collectCStaticLinkageSideChannel(filePath)),
371
371
  interpretImport: interpretCImport,
372
+ // `#include` is a preprocessor directive, not a statement that runs. The
373
+ // header text is spliced in before the program starts, wherever the directive
374
+ // sits — and C allows it inside a function body. Without this the central
375
+ // Pass-3 position rule would mark such an include `runsOnlyWhenCalled` and
376
+ // `check --cycles` would silently drop an include cycle that is entirely
377
+ // real. See `LanguageProvider.importsExecuteWhereWritten`.
378
+ importsExecuteWhereWritten: false,
372
379
  interpretTypeBinding: interpretCTypeBinding,
373
380
  bindingScopeFor: cBindingScopeFor,
374
381
  importOwningScope: cImportOwningScope,
@@ -447,6 +454,12 @@ export const cppProvider = defineLanguage({
447
454
  // re-parse (#1983). See `cpp/capture-side-channel.ts`.
448
455
  collectCaptureSideChannel: (filePath) => assertCloneable(collectCppCaptureSideChannel(filePath)),
449
456
  interpretImport: interpretCppImport,
457
+ // Same as C — `cpp/query.ts` emits `@import.statement` for `preproc_include`
458
+ // too. It holds for C++'s whole import surface: the only other form Pass 3
459
+ // sees is `@import.using-decl` (`using ns::name` / `using namespace ns`),
460
+ // which is a compile-time name-lookup declaration and executes no more than
461
+ // an `#include` does. See the note on `cProvider`.
462
+ importsExecuteWhereWritten: false,
450
463
  interpretTypeBinding: interpretCppTypeBinding,
451
464
  bindingScopeFor: cppBindingScopeFor,
452
465
  importOwningScope: cppImportOwningScope,
@@ -44,6 +44,20 @@ export function emitCobolScopeCaptures(sourceText, _filePath, _cachedTree) {
44
44
  // Run the regex tagger on the preprocessed source
45
45
  const extracted = extractCobolSymbolsWithRegex(cleaned, _filePath);
46
46
  const out = [];
47
+ const procedurePointers = new Set(extracted.dataItems
48
+ .filter((item) => /(?:PROCEDURE|FUNCTION)-POINTER/.test(item.usage?.toUpperCase() ?? ''))
49
+ .map((item) => item.name.toUpperCase()));
50
+ // Fallback for declarations the clause parser missed. Scan CLEANED lines —
51
+ // on raw fixed-format sources the sequence number (cols 1-6) satisfied
52
+ // `\d+` and the LEVEL NUMBER got captured as the name, so the set never
53
+ // contained the real pointer name and the whole feature no-op'd (#2522
54
+ // review, H3). COBOL data names must contain a letter, so `[A-Z]` first
55
+ // rejects level numbers.
56
+ for (const line of cleaned.split(/\r?\n/)) {
57
+ const declaration = line.match(/^\s*\d{1,2}\s+([A-Z][A-Z0-9-]*).*\b(?:PROCEDURE|FUNCTION)-POINTER\b/i);
58
+ if (declaration !== null)
59
+ procedurePointers.add(declaration[1].toUpperCase());
60
+ }
47
61
  // ── 1. PROGRAM-ID → @scope.module ───────────────────────────────────
48
62
  // The primary program name (first PROGRAM-ID encountered)
49
63
  if (extracted.programName) {
@@ -208,6 +222,85 @@ export function emitCobolScopeCaptures(sourceText, _filePath, _cachedTree) {
208
222
  if (m !== null)
209
223
  out.push(m);
210
224
  }
225
+ // ── 9. Procedure-pointer value flow ────────────────────────────────
226
+ // ISO COBOL exposes callable values through USAGE PROCEDURE-POINTER,
227
+ // SET ... TO ENTRY, and dynamic CALL data-items. The regex provider emits
228
+ // the same normalized facts as AST-backed providers so shared ingestion
229
+ // remains language-agnostic.
230
+ for (const program of extracted.programs) {
231
+ for (let index = 0; index < (program.procedureUsing?.length ?? 0); index++) {
232
+ const parameter = program.procedureUsing[index];
233
+ const ownerRange = rangeOf(program.startLine, 0, program.endLine, 0);
234
+ out.push({
235
+ '@callable-flow.formal': capture('@callable-flow.formal', ownerRange, program.name),
236
+ '@callable-flow.owner': capture('@callable-flow.owner', ownerRange, program.name),
237
+ '@callable-flow.binding': capture('@callable-flow.binding', rangeOf(program.startLine, 0, program.startLine, parameter.length), parameter),
238
+ '@callable-flow.parameter-index': capture('@callable-flow.parameter-index', ownerRange, String(index)),
239
+ '@callable-flow.passing-mode': capture('@callable-flow.passing-mode', ownerRange, 'reference'),
240
+ });
241
+ }
242
+ }
243
+ for (let index = 0; index < lines.length; index++) {
244
+ const line = lines[index];
245
+ // Comment lines must not seed flows — a commented-out SET produced a
246
+ // live seed and a false CALLS edge from dead code (#2522 review, M1).
247
+ // Fixed format marks comments with '*'/'/' in indicator column 7; free
248
+ // format uses '*>' (also valid inline, so strip the tail).
249
+ if (line[6] === '*' || line[6] === '/')
250
+ continue;
251
+ const code = line.split('*>')[0];
252
+ const lineNumber = index + 1;
253
+ const lineRange = rangeOf(lineNumber, 0, lineNumber, endColFrom(line));
254
+ const entry = code.match(/\bSET\s+([A-Z0-9][A-Z0-9-]*)\s+TO\s+ENTRY\s+(?:"([^"]+)"|'([^']+)')/i);
255
+ if (entry !== null) {
256
+ const destination = entry[1];
257
+ const target = entry[2] ?? entry[3];
258
+ if (procedurePointers.has(destination.toUpperCase())) {
259
+ out.push({
260
+ '@callable-flow.seed': capture('@callable-flow.seed', lineRange, line),
261
+ '@callable-flow.destination': capture('@callable-flow.destination', lineRange, destination),
262
+ '@callable-flow.target': capture('@callable-flow.target', lineRange, target),
263
+ '@callable-flow.target-name': capture('@callable-flow.target-name', lineRange, target),
264
+ });
265
+ }
266
+ continue;
267
+ }
268
+ const copy = code.match(/\bSET\s+([A-Z0-9][A-Z0-9-]*)\s+TO\s+([A-Z0-9][A-Z0-9-]*)\b/i);
269
+ if (copy !== null &&
270
+ procedurePointers.has(copy[1].toUpperCase()) &&
271
+ procedurePointers.has(copy[2].toUpperCase())) {
272
+ out.push({
273
+ '@callable-flow.copy': capture('@callable-flow.copy', lineRange, line),
274
+ '@callable-flow.destination': capture('@callable-flow.destination', lineRange, copy[1]),
275
+ '@callable-flow.source': capture('@callable-flow.source', lineRange, copy[2]),
276
+ });
277
+ }
278
+ }
279
+ for (const call of extracted.calls) {
280
+ const line = lines[call.line - 1] ?? '';
281
+ const lineRange = rangeOf(call.line, 0, call.line, endColFrom(line));
282
+ for (let index = 0; index < (call.parameters?.length ?? 0); index++) {
283
+ const parameter = call.parameters[index];
284
+ out.push({
285
+ '@callable-flow.argument': capture('@callable-flow.argument', lineRange, line),
286
+ '@callable-flow.source': capture('@callable-flow.source', lineRange, parameter),
287
+ '@callable-flow.parameter-index': capture('@callable-flow.parameter-index', lineRange, String(index)),
288
+ ...(!call.isQuoted && procedurePointers.has(call.target.toUpperCase())
289
+ ? {}
290
+ : {
291
+ '@callable-flow.direct-callee-name': capture('@callable-flow.direct-callee-name', lineRange, call.target),
292
+ }),
293
+ });
294
+ }
295
+ if (!call.isQuoted && procedurePointers.has(call.target.toUpperCase())) {
296
+ out.push({
297
+ '@callable-flow.invoke': capture('@callable-flow.invoke', lineRange, line),
298
+ '@callable-flow.callee': capture('@callable-flow.callee', lineRange, call.target),
299
+ '@callable-flow.invocation-kind': capture('@callable-flow.invocation-kind', lineRange, 'indirect'),
300
+ '@callable-flow.arity': capture('@callable-flow.arity', lineRange, String(call.parameters?.length ?? 0)),
301
+ });
302
+ }
303
+ }
211
304
  return out;
212
305
  }
213
306
  // ---------------------------------------------------------------------------