gitnexus 1.6.9 → 1.6.10-aptos.0

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 (539) hide show
  1. package/README.md +211 -53
  2. package/dist/_shared/graph/types.d.ts +67 -3
  3. package/dist/_shared/graph/types.d.ts.map +1 -1
  4. package/dist/_shared/index.d.ts +1 -0
  5. package/dist/_shared/index.d.ts.map +1 -1
  6. package/dist/_shared/index.js.map +1 -1
  7. package/dist/_shared/integrations/resilient-fetch.d.ts +3 -1
  8. package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
  9. package/dist/_shared/integrations/resilient-fetch.js +4 -3
  10. package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
  11. package/dist/_shared/language-detection.d.ts.map +1 -1
  12. package/dist/_shared/language-detection.js +2 -0
  13. package/dist/_shared/language-detection.js.map +1 -1
  14. package/dist/_shared/languages.d.ts +2 -0
  15. package/dist/_shared/languages.d.ts.map +1 -1
  16. package/dist/_shared/languages.js +2 -0
  17. package/dist/_shared/languages.js.map +1 -1
  18. package/dist/_shared/lbug/schema-constants.d.ts +2 -2
  19. package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
  20. package/dist/_shared/lbug/schema-constants.js +8 -0
  21. package/dist/_shared/lbug/schema-constants.js.map +1 -1
  22. package/dist/_shared/pipeline.d.ts +1 -1
  23. package/dist/_shared/pipeline.d.ts.map +1 -1
  24. package/dist/_shared/scope-resolution/callable-flow-site.d.ts +110 -0
  25. package/dist/_shared/scope-resolution/callable-flow-site.d.ts.map +1 -0
  26. package/dist/_shared/scope-resolution/callable-flow-site.js +11 -0
  27. package/dist/_shared/scope-resolution/callable-flow-site.js.map +1 -0
  28. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +1 -1
  29. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
  30. package/dist/_shared/scope-resolution/finalize-algorithm.js +1 -1
  31. package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
  32. package/dist/_shared/scope-resolution/language-classification.d.ts.map +1 -1
  33. package/dist/_shared/scope-resolution/language-classification.js +1 -0
  34. package/dist/_shared/scope-resolution/language-classification.js.map +1 -1
  35. package/dist/_shared/scope-resolution/parsed-file.d.ts +7 -0
  36. package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
  37. package/dist/_shared/scope-resolution/reference-site.d.ts +9 -1
  38. package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
  39. package/dist/_shared/scope-resolution/types.d.ts +20 -3
  40. package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
  41. package/dist/cli/ai-context.d.ts +1 -1
  42. package/dist/cli/ai-context.js +25 -44
  43. package/dist/cli/analyze.d.ts +5 -2
  44. package/dist/cli/analyze.js +197 -11
  45. package/dist/cli/clean.js +17 -3
  46. package/dist/cli/cli-message.d.ts +1 -1
  47. package/dist/cli/doctor.d.ts +18 -0
  48. package/dist/cli/doctor.js +96 -5
  49. package/dist/cli/editor-targets.d.ts +17 -2
  50. package/dist/cli/editor-targets.js +44 -0
  51. package/dist/cli/embeddings.d.ts +12 -0
  52. package/dist/cli/embeddings.js +49 -0
  53. package/dist/cli/eval-server.d.ts +23 -1
  54. package/dist/cli/eval-server.js +126 -8
  55. package/dist/cli/help-i18n.js +6 -0
  56. package/dist/cli/i18n/en.d.ts +18 -8
  57. package/dist/cli/i18n/en.js +18 -8
  58. package/dist/cli/i18n/resources.d.ts +28 -8
  59. package/dist/cli/i18n/zh-CN.d.ts +10 -0
  60. package/dist/cli/i18n/zh-CN.js +18 -8
  61. package/dist/cli/index.js +21 -7
  62. package/dist/cli/lazy-action.d.ts +7 -0
  63. package/dist/cli/lazy-action.js +27 -0
  64. package/dist/cli/mcp.js +6 -3
  65. package/dist/cli/move-availability.d.ts +5 -0
  66. package/dist/cli/move-availability.js +11 -0
  67. package/dist/cli/setup.d.ts +8 -0
  68. package/dist/cli/setup.js +230 -32
  69. package/dist/cli/skill-gen.js +38 -18
  70. package/dist/cli/standard-skills.d.ts +76 -0
  71. package/dist/cli/standard-skills.js +45 -0
  72. package/dist/cli/status.d.ts +4 -1
  73. package/dist/cli/status.js +57 -4
  74. package/dist/cli/tool.js +11 -0
  75. package/dist/cli/uninstall.js +77 -18
  76. package/dist/cli/wiki.d.ts +1 -0
  77. package/dist/cli/wiki.js +7 -1
  78. package/dist/config/ignore-service.d.ts +2 -0
  79. package/dist/config/ignore-service.js +27 -0
  80. package/dist/core/analysis-features.d.ts +21 -0
  81. package/dist/core/analysis-features.js +59 -0
  82. package/dist/core/analyzer-identity.d.ts +74 -0
  83. package/dist/core/analyzer-identity.js +1820 -0
  84. package/dist/core/augmentation/engine.js +13 -8
  85. package/dist/core/embeddings/embedder.d.ts +3 -2
  86. package/dist/core/embeddings/embedder.js +24 -7
  87. package/dist/core/embeddings/embedding-identity.d.ts +11 -0
  88. package/dist/core/embeddings/embedding-identity.js +24 -0
  89. package/dist/core/embeddings/embedding-pipeline.d.ts +36 -1
  90. package/dist/core/embeddings/embedding-pipeline.js +100 -9
  91. package/dist/core/embeddings/http-client.d.ts +33 -3
  92. package/dist/core/embeddings/http-client.js +237 -25
  93. package/dist/core/embeddings/node-module-compat.d.ts +25 -0
  94. package/dist/core/embeddings/node-module-compat.js +25 -0
  95. package/dist/core/embeddings/onnxruntime-common-resolver.js +8 -5
  96. package/dist/core/embeddings/onnxruntime-node-resolver.js +33 -7
  97. package/dist/core/embeddings/runtime-install.d.ts +119 -0
  98. package/dist/core/embeddings/runtime-install.js +372 -0
  99. package/dist/core/embeddings/runtime-support.d.ts +48 -17
  100. package/dist/core/embeddings/runtime-support.js +96 -0
  101. package/dist/core/git-staleness.js +1 -1
  102. package/dist/core/group/bridge-db.js +2 -0
  103. package/dist/core/group/extractors/http-patterns/python.js +246 -108
  104. package/dist/core/group/extractors/manifest-extractor.js +4 -0
  105. package/dist/core/incremental/escalation-gate.d.ts +38 -0
  106. package/dist/core/incremental/escalation-gate.js +48 -0
  107. package/dist/core/incremental/shadow-candidates.d.ts +3 -3
  108. package/dist/core/incremental/shadow-candidates.js +3 -3
  109. package/dist/core/incremental/subgraph-extract.d.ts +2 -2
  110. package/dist/core/incremental/subgraph-extract.js +2 -2
  111. package/dist/core/index-freshness.d.ts +5 -0
  112. package/dist/core/index-freshness.js +13 -0
  113. package/dist/core/ingestion/class-extractors/configs/jvm.js +29 -0
  114. package/dist/core/ingestion/cobol/cobol-preprocessor.js +1 -1
  115. package/dist/core/ingestion/cobol/jcl-processor.js +9 -8
  116. package/dist/core/ingestion/cobol-processor.js +27 -26
  117. package/dist/core/ingestion/community-processor.d.ts +51 -1
  118. package/dist/core/ingestion/community-processor.js +323 -64
  119. package/dist/core/ingestion/emit-references.js +7 -2
  120. package/dist/core/ingestion/filesystem-walker.js +4 -0
  121. package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +3 -0
  122. package/dist/core/ingestion/frameworks/spring/analysis-features.js +7 -0
  123. package/dist/core/ingestion/frameworks/spring/bean-candidates.d.ts +30 -0
  124. package/dist/core/ingestion/frameworks/spring/bean-candidates.js +182 -0
  125. package/dist/core/ingestion/frameworks/spring/bean-catalog.d.ts +12 -0
  126. package/dist/core/ingestion/frameworks/spring/bean-catalog.js +26 -0
  127. package/dist/core/ingestion/frameworks/spring/config-bindings.d.ts +24 -0
  128. package/dist/core/ingestion/frameworks/spring/config-bindings.js +115 -0
  129. package/dist/core/ingestion/languages/c/captures.js +56 -0
  130. package/dist/core/ingestion/languages/c/query.js +17 -0
  131. package/dist/core/ingestion/languages/c/scope-resolver.js +6 -0
  132. package/dist/core/ingestion/languages/cobol/captures.js +93 -0
  133. package/dist/core/ingestion/languages/cobol/scope-resolver.js +7 -0
  134. package/dist/core/ingestion/languages/cpp/captures.js +365 -75
  135. package/dist/core/ingestion/languages/cpp/scope-resolver.js +14 -0
  136. package/dist/core/ingestion/languages/csharp/captures.js +25 -0
  137. package/dist/core/ingestion/languages/dart/captures.js +90 -2
  138. package/dist/core/ingestion/languages/dart/extension-type-preprocess.d.ts +7 -0
  139. package/dist/core/ingestion/languages/dart/extension-type-preprocess.js +30 -0
  140. package/dist/core/ingestion/languages/dart.js +2 -0
  141. package/dist/core/ingestion/languages/go/captures.js +34 -0
  142. package/dist/core/ingestion/languages/index.d.ts +1 -0
  143. package/dist/core/ingestion/languages/index.js +2 -0
  144. package/dist/core/ingestion/languages/java/analysis-features.d.ts +3 -0
  145. package/dist/core/ingestion/languages/java/analysis-features.js +13 -0
  146. package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +22 -0
  147. package/dist/core/ingestion/languages/java/capture-side-channel.js +58 -0
  148. package/dist/core/ingestion/languages/java/captures.d.ts +4 -3
  149. package/dist/core/ingestion/languages/java/captures.js +193 -17
  150. package/dist/core/ingestion/languages/java/package-facts.d.ts +5 -0
  151. package/dist/core/ingestion/languages/java/package-facts.js +9 -0
  152. package/dist/core/ingestion/languages/java/package-siblings.d.ts +3 -16
  153. package/dist/core/ingestion/languages/java/package-siblings.js +8 -147
  154. package/dist/core/ingestion/languages/java/query.js +23 -0
  155. package/dist/core/ingestion/languages/java/scope-resolver.js +23 -0
  156. package/dist/core/ingestion/languages/java/spring-bean-metadata.d.ts +2 -0
  157. package/dist/core/ingestion/languages/java/spring-bean-metadata.js +8 -0
  158. package/dist/core/ingestion/languages/java/spring-config-bindings.d.ts +23 -0
  159. package/dist/core/ingestion/languages/java/spring-config-bindings.js +215 -0
  160. package/dist/core/ingestion/languages/java.js +3 -0
  161. package/dist/core/ingestion/languages/javascript/captures.js +16 -0
  162. package/dist/core/ingestion/languages/javascript/query.js +21 -0
  163. package/dist/core/ingestion/languages/jvm/package-facts.d.ts +35 -0
  164. package/dist/core/ingestion/languages/jvm/package-facts.js +40 -0
  165. package/dist/core/ingestion/languages/jvm/package-siblings.d.ts +14 -0
  166. package/dist/core/ingestion/languages/jvm/package-siblings.js +129 -0
  167. package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +17 -3
  168. package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +42 -8
  169. package/dist/core/ingestion/languages/kotlin/captures.js +59 -0
  170. package/dist/core/ingestion/languages/kotlin/package-facts.d.ts +5 -0
  171. package/dist/core/ingestion/languages/kotlin/package-facts.js +9 -0
  172. package/dist/core/ingestion/languages/kotlin/package-siblings.d.ts +4 -0
  173. package/dist/core/ingestion/languages/kotlin/package-siblings.js +8 -0
  174. package/dist/core/ingestion/languages/kotlin/query.js +19 -0
  175. package/dist/core/ingestion/languages/kotlin/scope-resolver.js +9 -1
  176. package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.d.ts +2 -0
  177. package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.js +8 -0
  178. package/dist/core/ingestion/languages/kotlin.js +5 -6
  179. package/dist/core/ingestion/languages/move.d.ts +1 -0
  180. package/dist/core/ingestion/languages/move.js +27 -0
  181. package/dist/core/ingestion/languages/php/captures.js +40 -0
  182. package/dist/core/ingestion/languages/php/import-decomposer.js +12 -0
  183. package/dist/core/ingestion/languages/php/import-target.d.ts +2 -1
  184. package/dist/core/ingestion/languages/php/import-target.js +110 -2
  185. package/dist/core/ingestion/languages/php/interpret.js +10 -0
  186. package/dist/core/ingestion/languages/php/scope-resolver.js +1 -1
  187. package/dist/core/ingestion/languages/python/captures.d.ts +3 -4
  188. package/dist/core/ingestion/languages/python/captures.js +24 -5
  189. package/dist/core/ingestion/languages/python/interpret.js +4 -0
  190. package/dist/core/ingestion/languages/python/receiver-binding.d.ts +15 -2
  191. package/dist/core/ingestion/languages/python/receiver-binding.js +96 -2
  192. package/dist/core/ingestion/languages/python/simple-hooks.d.ts +5 -5
  193. package/dist/core/ingestion/languages/python/simple-hooks.js +15 -5
  194. package/dist/core/ingestion/languages/ruby/captures.js +42 -0
  195. package/dist/core/ingestion/languages/rust/captures.js +13 -0
  196. package/dist/core/ingestion/languages/rust/interpret.js +18 -0
  197. package/dist/core/ingestion/languages/rust/query.js +9 -0
  198. package/dist/core/ingestion/languages/rust/range-binding.js +6 -2
  199. package/dist/core/ingestion/languages/swift/captures.js +12 -0
  200. package/dist/core/ingestion/languages/typescript/captures.js +21 -0
  201. package/dist/core/ingestion/languages/typescript/nuxt-auto-imports.js +2 -1
  202. package/dist/core/ingestion/languages/typescript/query.js +37 -0
  203. package/dist/core/ingestion/markdown-processor.js +3 -2
  204. package/dist/core/ingestion/model/registration-table.js +1 -0
  205. package/dist/core/ingestion/parsing-processor.d.ts +3 -1
  206. package/dist/core/ingestion/parsing-processor.js +36 -1
  207. package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
  208. package/dist/core/ingestion/pipeline-phases/index.js +2 -0
  209. package/dist/core/ingestion/pipeline-phases/parse-impl.js +56 -2
  210. package/dist/core/ingestion/pipeline-phases/parse.d.ts +0 -2
  211. package/dist/core/ingestion/pipeline-phases/parse.js +12 -3
  212. package/dist/core/ingestion/pipeline-phases/processes.d.ts +8 -0
  213. package/dist/core/ingestion/pipeline-phases/processes.js +11 -1
  214. package/dist/core/ingestion/pipeline-phases/spring-config.d.ts +37 -0
  215. package/dist/core/ingestion/pipeline-phases/spring-config.js +433 -0
  216. package/dist/core/ingestion/pipeline-phases/standalone-ingest.d.ts +10 -0
  217. package/dist/core/ingestion/pipeline-phases/standalone-ingest.js +6 -0
  218. package/dist/core/ingestion/pipeline.d.ts +4 -2
  219. package/dist/core/ingestion/pipeline.js +5 -2
  220. package/dist/core/ingestion/resolve-references.js +12 -0
  221. package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +83 -0
  222. package/dist/core/ingestion/route-extractors/constant-resolver.js +131 -0
  223. package/dist/core/ingestion/route-extractors/python-const-resolver.d.ts +75 -0
  224. package/dist/core/ingestion/route-extractors/python-const-resolver.js +299 -0
  225. package/dist/core/ingestion/scope-extractor.js +306 -43
  226. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +71 -2
  227. package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +7 -7
  228. package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +8 -7
  229. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +3 -1
  230. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +6 -0
  231. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +1 -0
  232. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +4 -1
  233. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +7 -2
  234. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +47 -0
  235. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +1138 -0
  236. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +16 -4
  237. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +97 -1
  238. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +60 -0
  239. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +111 -0
  240. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +4 -3
  241. package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +5 -0
  242. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +25 -38
  243. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +6 -0
  244. package/dist/core/ingestion/scope-resolution/pipeline/run.js +147 -35
  245. package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +1 -1
  246. package/dist/core/ingestion/scope-resolution/scope/walkers.js +73 -44
  247. package/dist/core/ingestion/taint/typescript-model.js +34 -2
  248. package/dist/core/ingestion/tree-sitter-queries.d.ts +2 -2
  249. package/dist/core/ingestion/tree-sitter-queries.js +23 -2
  250. package/dist/core/ingestion/type-extractors/jvm.js +17 -2
  251. package/dist/core/ingestion/utils/ast-helpers.d.ts +1 -0
  252. package/dist/core/ingestion/utils/ast-helpers.js +153 -2
  253. package/dist/core/ingestion/utils/callable-flow-captures.d.ts +94 -0
  254. package/dist/core/ingestion/utils/callable-flow-captures.js +878 -0
  255. package/dist/core/ingestion/utils/line-base.d.ts +20 -0
  256. package/dist/core/ingestion/utils/line-base.js +20 -0
  257. package/dist/core/ingestion/utils/symbol-labels.d.ts +21 -0
  258. package/dist/core/ingestion/utils/symbol-labels.js +45 -0
  259. package/dist/core/ingestion/workers/parse-worker.d.ts +34 -0
  260. package/dist/core/ingestion/workers/parse-worker.js +40 -5
  261. package/dist/core/ingestion/workers/result-merge.js +4 -0
  262. package/dist/core/ingestion/workers/worker-pool.d.ts +28 -0
  263. package/dist/core/ingestion/workers/worker-pool.js +128 -28
  264. package/dist/core/lbug/csv-generator.d.ts +15 -0
  265. package/dist/core/lbug/csv-generator.js +124 -27
  266. package/dist/core/lbug/cypher-escape.d.ts +20 -0
  267. package/dist/core/lbug/cypher-escape.js +20 -0
  268. package/dist/core/lbug/extension-load-error.d.ts +67 -0
  269. package/dist/core/lbug/extension-load-error.js +326 -0
  270. package/dist/core/lbug/extension-loader.d.ts +17 -2
  271. package/dist/core/lbug/extension-loader.js +38 -13
  272. package/dist/core/lbug/lbug-adapter.d.ts +203 -2
  273. package/dist/core/lbug/lbug-adapter.js +527 -86
  274. package/dist/core/lbug/lbug-config.d.ts +56 -2
  275. package/dist/core/lbug/lbug-config.js +267 -7
  276. package/dist/core/lbug/move-columns.d.ts +7 -0
  277. package/dist/core/lbug/move-columns.js +86 -0
  278. package/dist/core/lbug/native-check.d.ts +40 -0
  279. package/dist/core/lbug/native-check.js +90 -0
  280. package/dist/core/lbug/node-table-layout.d.ts +29 -0
  281. package/dist/core/lbug/node-table-layout.js +119 -0
  282. package/dist/core/lbug/pool-adapter.d.ts +23 -1
  283. package/dist/core/lbug/pool-adapter.js +115 -8
  284. package/dist/core/lbug/schema.d.ts +4 -3
  285. package/dist/core/lbug/schema.js +16 -16
  286. package/dist/core/lbug/sidecar-recovery.d.ts +172 -0
  287. package/dist/core/lbug/sidecar-recovery.js +418 -16
  288. package/dist/core/lbug/wal-checkpoint-driver.js +3 -0
  289. package/dist/core/move/artifact-download.d.ts +19 -0
  290. package/dist/core/move/artifact-download.js +179 -0
  291. package/dist/core/move/compiler-facts.d.ts +120 -0
  292. package/dist/core/move/compiler-facts.js +9 -0
  293. package/dist/core/move/consistency.d.ts +28 -0
  294. package/dist/core/move/consistency.js +98 -0
  295. package/dist/core/move/constants.d.ts +98 -0
  296. package/dist/core/move/constants.js +136 -0
  297. package/dist/core/move/discovery.d.ts +10 -0
  298. package/dist/core/move/discovery.js +22 -0
  299. package/dist/core/move/entry-points.d.ts +14 -0
  300. package/dist/core/move/entry-points.js +40 -0
  301. package/dist/core/move/facts-mapper.d.ts +75 -0
  302. package/dist/core/move/facts-mapper.js +534 -0
  303. package/dist/core/move/install-lock.d.ts +14 -0
  304. package/dist/core/move/install-lock.js +102 -0
  305. package/dist/core/move/install.d.ts +39 -0
  306. package/dist/core/move/install.js +391 -0
  307. package/dist/core/move/mcp-client.d.ts +115 -0
  308. package/dist/core/move/mcp-client.js +436 -0
  309. package/dist/core/move/move-ingest.d.ts +49 -0
  310. package/dist/core/move/move-ingest.js +320 -0
  311. package/dist/core/move/provision.d.ts +19 -0
  312. package/dist/core/move/provision.js +91 -0
  313. package/dist/core/move/release.d.ts +6 -0
  314. package/dist/core/move/release.js +10 -0
  315. package/dist/core/move/symbol-id.d.ts +35 -0
  316. package/dist/core/move/symbol-id.js +65 -0
  317. package/dist/core/move/type-parser.d.ts +11 -0
  318. package/dist/core/move/type-parser.js +38 -0
  319. package/dist/core/platform/capabilities.d.ts +0 -1
  320. package/dist/core/platform/capabilities.js +39 -8
  321. package/dist/core/run-analyze.d.ts +3 -3
  322. package/dist/core/run-analyze.js +1001 -184
  323. package/dist/core/search/fts-indexes.d.ts +31 -0
  324. package/dist/core/search/fts-indexes.js +73 -0
  325. package/dist/core/search/fts-schema.js +2 -0
  326. package/dist/core/tree-sitter/safe-parse.d.ts +8 -3
  327. package/dist/core/tree-sitter/safe-parse.js +21 -7
  328. package/dist/core/wiki/graph-queries.js +6 -5
  329. package/dist/core/wiki/llm-client.d.ts +8 -2
  330. package/dist/core/wiki/llm-client.js +41 -5
  331. package/dist/mcp/core/embedder.js +16 -2
  332. package/dist/mcp/http-transport.d.ts +5 -0
  333. package/dist/mcp/http-transport.js +19 -5
  334. package/dist/mcp/local/bean-metadata.d.ts +2 -0
  335. package/dist/mcp/local/bean-metadata.js +25 -0
  336. package/dist/mcp/local/line-display.d.ts +22 -0
  337. package/dist/mcp/local/line-display.js +3 -0
  338. package/dist/mcp/local/local-backend.d.ts +19 -1
  339. package/dist/mcp/local/local-backend.js +402 -155
  340. package/dist/mcp/local/pdg-impact.d.ts +5 -3
  341. package/dist/mcp/local/pdg-impact.js +5 -2
  342. package/dist/mcp/output-budget.d.ts +5 -0
  343. package/dist/mcp/output-budget.js +52 -0
  344. package/dist/mcp/read-only-policy.d.ts +12 -0
  345. package/dist/mcp/read-only-policy.js +102 -0
  346. package/dist/mcp/repository-policy.d.ts +34 -0
  347. package/dist/mcp/repository-policy.js +328 -0
  348. package/dist/mcp/resources.js +32 -5
  349. package/dist/mcp/server.d.ts +5 -2
  350. package/dist/mcp/server.js +29 -9
  351. package/dist/mcp/tools.d.ts +0 -8
  352. package/dist/mcp/tools.js +102 -5
  353. package/dist/server/analyze-job.d.ts +3 -0
  354. package/dist/server/analyze-job.js +17 -0
  355. package/dist/server/analyze-launch.d.ts +6 -0
  356. package/dist/server/analyze-launch.js +82 -6
  357. package/dist/server/analyze-worker-core.d.ts +2 -1
  358. package/dist/server/analyze-worker-core.js +5 -2
  359. package/dist/server/analyze-worker.js +29 -6
  360. package/dist/server/api.d.ts +30 -0
  361. package/dist/server/api.js +120 -34
  362. package/dist/server/mcp-http.d.ts +1 -1
  363. package/dist/server/mcp-http.js +4 -2
  364. package/dist/server/upload-ingest.js +2 -1
  365. package/dist/server/validation.js +2 -1
  366. package/dist/storage/git.d.ts +31 -0
  367. package/dist/storage/git.js +111 -1
  368. package/dist/storage/parse-cache.js +7 -1
  369. package/dist/storage/parsedfile-store.d.ts +8 -0
  370. package/dist/storage/parsedfile-store.js +165 -1
  371. package/dist/storage/repo-manager.d.ts +194 -2
  372. package/dist/storage/repo-manager.js +56 -1
  373. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +50 -3
  374. package/hooks/claude/gitnexus-hook.cjs +59 -9
  375. package/hooks/claude/pre-tool-use.sh +0 -0
  376. package/hooks/claude/session-start.sh +0 -0
  377. package/package.json +21 -15
  378. package/scripts/cross-platform-tests.ts +56 -0
  379. package/scripts/ensure-fts.ts +43 -0
  380. package/scripts/install-duckdb-extension.mjs +85 -24
  381. package/scripts/run-cross-platform.ts +61 -6
  382. package/scripts/shard-arg.ts +30 -0
  383. package/scripts/sync-plugin-manifests.mjs +192 -0
  384. package/skills/gitnexus-lfg/README.md +55 -0
  385. package/skills/gitnexus-lfg/SKILL.md +86 -0
  386. package/skills/gitnexus-plan/README.md +142 -0
  387. package/skills/gitnexus-plan/SKILL.md +348 -0
  388. package/skills/gitnexus-plan/references/context-ledger.md +137 -0
  389. package/skills/gitnexus-plan/references/context-pack.md +126 -0
  390. package/skills/gitnexus-plan/references/evidence-provenance.md +272 -0
  391. package/skills/gitnexus-plan/references/pdg-slice.md +109 -0
  392. package/skills/gitnexus-plan/references/plan-template.md +201 -0
  393. package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +2084 -0
  394. package/skills/gitnexus-review/SKILL.md +273 -0
  395. package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +42 -0
  396. package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +39 -0
  397. package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +37 -0
  398. package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +40 -0
  399. package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +42 -0
  400. package/skills/gitnexus-review/ci-personas/ci-security-lens.md +39 -0
  401. package/skills/gitnexus-work/README.md +71 -0
  402. package/skills/gitnexus-work/SKILL.md +269 -0
  403. package/skills/gitnexus-work/references/evidence-provenance.md +272 -0
  404. package/skills/gitnexus-work/scripts/evidence-provenance.mjs +2084 -0
  405. package/web/assets/ProcessFlowModal-B_bfBySy.js +22 -0
  406. package/web/assets/__vite-browser-external-bMKyYQkO.js +1 -0
  407. package/web/assets/agent-Bqxn-abU.js +626 -0
  408. package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +1 -0
  409. package/web/assets/architectureDiagram-UL44E2DR-CmG3uPWf.js +36 -0
  410. package/web/assets/{blockDiagram-7IZFK4PR-BkWhpzWB.js → blockDiagram-7IZFK4PR-DBefcjof.js} +7 -7
  411. package/web/assets/{c4Diagram-Y2BXMSZH-DtBvpzWD.js → c4Diagram-Y2BXMSZH-EjWnjEJl.js} +6 -6
  412. package/web/assets/chunk-2T2R6R2M-Bb6Sy3_j.js +4 -0
  413. package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +1 -0
  414. package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +321 -0
  415. package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +159 -0
  416. package/web/assets/{chunk-6764PJDD-DpIS7hxD.js → chunk-6764PJDD-C7xxk063.js} +1 -1
  417. package/web/assets/chunk-67TQ5CYL-CA7OhIEf.js +124 -0
  418. package/web/assets/chunk-7FYTHRHK-CsmYIswB.js +32 -0
  419. package/web/assets/chunk-7J6CGLKN-BlKwgXKs.js +10 -0
  420. package/web/assets/chunk-7W6UQGC5-pyKGssV3.js +1 -0
  421. package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +1 -0
  422. package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +1 -0
  423. package/web/assets/{chunk-INKRHTLW-Nu4ri9P-.js → chunk-INKRHTLW-Ckl3_KkO.js} +13 -13
  424. package/web/assets/chunk-J5EP6P6S-L19oz55R.js +1 -0
  425. package/web/assets/{chunk-KGFNY3KK-JGMJvKCK.js → chunk-KGFNY3KK-BZeP-55u.js} +17 -17
  426. package/web/assets/chunk-KGYTTC2M-zm6n242I.js +1 -0
  427. package/web/assets/{chunk-KRXBNO2N-BW5o0KUN.js → chunk-KRXBNO2N-C-UNuKKf.js} +1 -1
  428. package/web/assets/{chunk-LCXTWHL2-CfLLCywY.js → chunk-LCXTWHL2-C162wE5z.js} +5 -5
  429. package/web/assets/chunk-LII3EMHJ-BL6lKJ_P.js +1 -0
  430. package/web/assets/chunk-LRIF4GLE-n59lhprL.js +1 -0
  431. package/web/assets/chunk-QA3QBVWF-DVXPOIxe.js +2 -0
  432. package/web/assets/chunk-RERM46MO-B5dAdWpP.js +1 -0
  433. package/web/assets/chunk-RG4AUYOV-ZNgyLFq6.js +206 -0
  434. package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +1 -0
  435. package/web/assets/chunk-RLI5ZMPA-CkXZ0y0U.js +1 -0
  436. package/web/assets/chunk-T2UQINTJ-BEyXhZWe.js +1 -0
  437. package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +1 -0
  438. package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +1 -0
  439. package/web/assets/chunk-UY5QBCOK-ByqTVLvh.js +1 -0
  440. package/web/assets/chunk-VU6ZFW4Y-BLeasdkU.js +2 -0
  441. package/web/assets/{chunk-W44A43WB-JqMLIpR0.js → chunk-W44A43WB-BN8EQc_u.js} +1 -1
  442. package/web/assets/chunk-ZXARS5L4-C3v-4Fsw.js +1 -0
  443. package/web/assets/classDiagram-KGZ6W3CR-olpO3fMe.js +1 -0
  444. package/web/assets/classDiagram-v2-72OJOZXJ-olpO3fMe.js +1 -0
  445. package/web/assets/cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js +1 -0
  446. package/web/assets/dagre-ND4H6XIP-CY4iIF7v.js +4 -0
  447. package/web/assets/diagram-3NCE3AQN-CO6QpzEE.js +43 -0
  448. package/web/assets/diagram-GF46GFSD-B2atbzmU.js +24 -0
  449. package/web/assets/diagram-HNR7UZ2L-DVRltWbL.js +3 -0
  450. package/web/assets/diagram-QXG6HAR7-DR6AHD2h.js +24 -0
  451. package/web/assets/diagram-WEQXMOUZ-DkpoMwTL.js +10 -0
  452. package/web/assets/erDiagram-L5TCEMPS-n8g_90bc.js +85 -0
  453. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +1 -0
  454. package/web/assets/flowDiagram-H6V6AXG4-SGMDiCkB.js +162 -0
  455. package/web/assets/ganttDiagram-JCBTUEKG-Cb3UBqRS.js +292 -0
  456. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +1 -0
  457. package/web/assets/gitGraphDiagram-S2ZK5IYY-Bs9CR7tq.js +106 -0
  458. package/web/assets/index-CX_fADmQ.css +2 -0
  459. package/web/assets/index-D1Z3dGGz.js +575 -0
  460. package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +1 -0
  461. package/web/assets/infoDiagram-3YFTVSEB-T368on4D.js +2 -0
  462. package/web/assets/{ishikawaDiagram-BNXS4ZKH-DfYpxnE5.js → ishikawaDiagram-BNXS4ZKH-XpjJRU9h.js} +6 -6
  463. package/web/assets/journeyDiagram-M6C3CM3L-C6wjooas.js +139 -0
  464. package/web/assets/kanban-definition-75IXJCU3-5_UVY79g.js +89 -0
  465. package/web/assets/{katex-K3KEBU37-CTc5BslQ.js → katex-K3KEBU37-qRQBy-EZ.js} +2 -2
  466. package/web/assets/{mindmap-definition-2TDM6QVE-DypvbOMQ.js → mindmap-definition-2TDM6QVE-8xDLzk2e.js} +29 -29
  467. package/web/assets/node-Ct_zna8U.js +8 -0
  468. package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +1 -0
  469. package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +1 -0
  470. package/web/assets/pieDiagram-CU6KROY3-Bv4LpAbr.js +30 -0
  471. package/web/assets/preload-helper-Czpn1I53.js +1 -0
  472. package/web/assets/{quadrantDiagram-VICAPDV7-yXSZ2lLz.js → quadrantDiagram-VICAPDV7-DR54jOeR.js} +6 -6
  473. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +1 -0
  474. package/web/assets/requirementDiagram-JXO7QTGE-PEkg7sKC.js +84 -0
  475. package/web/assets/rolldown-runtime-QTnfLwEv.js +1 -0
  476. package/web/assets/sankeyDiagram-URQDO5SZ-DDWEtjcs.js +40 -0
  477. package/web/assets/sdk-CzHHH8tD.js +37 -0
  478. package/web/assets/sequenceDiagram-VS2MUI6T-Bv-uwANx.js +162 -0
  479. package/web/assets/src-JV30wyV8.js +1 -0
  480. package/web/assets/stateDiagram-7D4R322I-DVNjmkEq.js +1 -0
  481. package/web/assets/stateDiagram-v2-36443NZ5-CyN4Fh7_.js +1 -0
  482. package/web/assets/timeline-definition-O6YCAMPW-Qmsuo7qS.js +120 -0
  483. package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +1 -0
  484. package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +1 -0
  485. package/web/assets/vennDiagram-MWXL3ELB-BD1iK1SX.js +34 -0
  486. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +1 -0
  487. package/web/assets/wardleyDiagram-CUQ6CDDI-D6TzLVob.js +78 -0
  488. package/web/assets/{xychartDiagram-N2JHSOCM-BOLm0eNm.js → xychartDiagram-N2JHSOCM-CoZ_Tits.js} +6 -6
  489. package/web/index.html +18 -10
  490. package/skills/gitnexus-pr-review.md +0 -163
  491. package/web/assets/agent-Dli_x7bU.js +0 -660
  492. package/web/assets/architecture-7EHR7CIX-6QZW5X65-DxJw65fT.js +0 -1
  493. package/web/assets/architectureDiagram-UL44E2DR-dEkqUZN9.js +0 -36
  494. package/web/assets/chunk-3SSMPTDK-B4_etUhr.js +0 -321
  495. package/web/assets/chunk-67TQ5CYL-4sNPJU1q.js +0 -124
  496. package/web/assets/chunk-7W6UQGC5-KyEG0HQg.js +0 -1
  497. package/web/assets/chunk-KGYTTC2M-CWC_c3H9.js +0 -161
  498. package/web/assets/chunk-LII3EMHJ-D-jm-dLa.js +0 -1
  499. package/web/assets/chunk-QA3QBVWF-BgRW3SXd.js +0 -2
  500. package/web/assets/chunk-RG4AUYOV-CqWzWsV3.js +0 -206
  501. package/web/assets/chunk-T2UQINTJ-DSBqkzH7.js +0 -1
  502. package/web/assets/chunk-UY5QBCOK-DyF0vyGd.js +0 -1
  503. package/web/assets/chunk-ZXARS5L4-CxN8oiwI.js +0 -1
  504. package/web/assets/classDiagram-KGZ6W3CR-CMne4tG9.js +0 -1
  505. package/web/assets/classDiagram-v2-72OJOZXJ-CMne4tG9.js +0 -1
  506. package/web/assets/cose-bilkent-UX7MHV2Q-D71wNYRJ.js +0 -1
  507. package/web/assets/dagre-ND4H6XIP-Co5rRx9X.js +0 -4
  508. package/web/assets/diagram-3NCE3AQN-DBp4O00j.js +0 -43
  509. package/web/assets/diagram-GF46GFSD-6N_8yS0i.js +0 -24
  510. package/web/assets/diagram-HNR7UZ2L-DFCfd5LI.js +0 -3
  511. package/web/assets/diagram-QXG6HAR7-Di093rFg.js +0 -24
  512. package/web/assets/diagram-WEQXMOUZ-DZWi4SUN.js +0 -10
  513. package/web/assets/erDiagram-L5TCEMPS-8X1y6R4Y.js +0 -85
  514. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-BQm9QzEa.js +0 -1
  515. package/web/assets/flowDiagram-H6V6AXG4-CMpY8Ufn.js +0 -162
  516. package/web/assets/ganttDiagram-JCBTUEKG-D3iL2Aet.js +0 -292
  517. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-Cr_Bm2Nb.js +0 -1
  518. package/web/assets/gitGraphDiagram-S2ZK5IYY-CPIDgxGm.js +0 -106
  519. package/web/assets/index-KctnI3Vq.js +0 -635
  520. package/web/assets/index-_lgn7hs5.css +0 -2
  521. package/web/assets/info-J43DQDTF-KCYPFFUO-Cs4p2oyk.js +0 -1
  522. package/web/assets/infoDiagram-3YFTVSEB-BaLMZkUg.js +0 -2
  523. package/web/assets/journeyDiagram-M6C3CM3L-CvArszLo.js +0 -139
  524. package/web/assets/kanban-definition-75IXJCU3-CpfVLLf9.js +0 -89
  525. package/web/assets/packet-YPE3B663-LP52Z2RK-CKCrztD2.js +0 -1
  526. package/web/assets/pie-LRSECV5Y-TCRJHUBD-BB7pHqoD.js +0 -1
  527. package/web/assets/pieDiagram-CU6KROY3-s27EFWgP.js +0 -30
  528. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DhoTOcuK.js +0 -1
  529. package/web/assets/requirementDiagram-JXO7QTGE-CWhqInuf.js +0 -84
  530. package/web/assets/sankeyDiagram-URQDO5SZ-1qEjlFIB.js +0 -40
  531. package/web/assets/sequenceDiagram-VS2MUI6T-RyTlZ5cR.js +0 -162
  532. package/web/assets/stateDiagram-7D4R322I-DTjVfX4A.js +0 -1
  533. package/web/assets/stateDiagram-v2-36443NZ5-xY9_k9_Q.js +0 -1
  534. package/web/assets/timeline-definition-O6YCAMPW-DrrqLYAf.js +0 -120
  535. package/web/assets/treeView-BLDUP644-QA4HXRO3-ODehyGKL.js +0 -1
  536. package/web/assets/treemap-LRROVOQU-LLAWBHMP-BfpgC-7o.js +0 -1
  537. package/web/assets/vennDiagram-MWXL3ELB-B0RkWAim.js +0 -34
  538. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-CNeL6VHE.js +0 -1
  539. package/web/assets/wardleyDiagram-CUQ6CDDI-boUxiQ5F.js +0 -78
@@ -0,0 +1,9 @@
1
+ import { createJvmPackageFactStore, } from '../jvm/package-facts.js';
2
+ const javaPackageFacts = createJvmPackageFactStore({
3
+ packageNodeType: 'package_declaration',
4
+ packageNameNodeTypes: ['scoped_identifier', 'identifier'],
5
+ });
6
+ export const clearJavaPackageFacts = () => javaPackageFacts.clear();
7
+ export const captureJavaPackageFact = (filePath, root) => javaPackageFacts.capture(filePath, root);
8
+ export const setJavaPackageFact = (filePath, fact) => javaPackageFacts.set(filePath, fact);
9
+ export const getJavaPackageFact = (filePath) => javaPackageFacts.get(filePath);
@@ -1,17 +1,4 @@
1
- /**
2
- * Java package-scope implicit visibility.
3
- *
4
- * Classes in the same Java package see each other without explicit
5
- * `import` statements. This hook groups files by `package` declaration,
6
- * then injects cross-file class defs into each file's module-scope
7
- * `bindingAugmentations` and mirrors type-bindings across same-package
8
- * files — the Java equivalent of C#'s `populateNamespaceSiblings`.
9
- */
10
- import type { ParsedFile } from '../../../../_shared/index.js';
11
- import type { ScopeResolutionIndexes } from '../../model/scope-resolution-indexes.js';
12
- export declare function populateJavaPackageSiblings(parsedFiles: readonly ParsedFile[], indexes: ScopeResolutionIndexes, ctx: {
1
+ export declare const populateJavaPackageSiblings: (parsedFiles: readonly import('../../../../_shared/index.js').ParsedFile[], indexes: import("../../model/scope-resolution-indexes.js").ScopeResolutionIndexes, ctx: {
13
2
  readonly fileContents: ReadonlyMap<string, string>;
14
- readonly treeCache?: {
15
- get(filePath: string): unknown;
16
- };
17
- }): void;
3
+ }) => void;
4
+ export declare const isJavaPackageSiblingVisibilityIncomplete: (filePath: string) => boolean;
@@ -1,147 +1,8 @@
1
- /**
2
- * Java package-scope implicit visibility.
3
- *
4
- * Classes in the same Java package see each other without explicit
5
- * `import` statements. This hook groups files by `package` declaration,
6
- * then injects cross-file class defs into each file's module-scope
7
- * `bindingAugmentations` and mirrors type-bindings across same-package
8
- * files — the Java equivalent of C#'s `populateNamespaceSiblings`.
9
- */
10
- import { isClassLike } from '../../scope-resolution/scope/walkers.js';
11
- import { getJavaParser } from './query.js';
12
- import { parseSourceSafe, ParseTimeoutError } from '../../../tree-sitter/safe-parse.js';
13
- import { logger } from '../../../logger.js';
14
- function extractPackageName(content, filePath, cachedTree) {
15
- let tree = cachedTree;
16
- if (tree === undefined) {
17
- try {
18
- tree = parseSourceSafe(getJavaParser(), content);
19
- }
20
- catch (err) {
21
- if (err instanceof ParseTimeoutError) {
22
- // Degrade to "no package" so a single pathological file doesn't abort
23
- // same-package sibling injection for the whole run.
24
- logger.warn({ file: filePath }, 'java package-siblings: parse timed out, treating as no package');
25
- return '';
26
- }
27
- throw err;
28
- }
29
- }
30
- for (const child of tree.rootNode.namedChildren) {
31
- if (child.type === 'package_declaration') {
32
- const scoped = child.namedChildren.find((c) => c.type === 'scoped_identifier' || c.type === 'identifier');
33
- return scoped?.text ?? '';
34
- }
35
- }
36
- return '';
37
- }
38
- export function populateJavaPackageSiblings(parsedFiles, indexes, ctx) {
39
- const buckets = new Map();
40
- for (const parsed of parsedFiles) {
41
- const content = ctx.fileContents.get(parsed.filePath);
42
- if (content === undefined)
43
- continue;
44
- const pkg = extractPackageName(content, parsed.filePath, ctx.treeCache?.get(parsed.filePath));
45
- let bucket = buckets.get(pkg);
46
- if (bucket === undefined) {
47
- bucket = { parsed: [], moduleScopes: [] };
48
- buckets.set(pkg, bucket);
49
- }
50
- bucket.parsed.push(parsed);
51
- const ms = parsed.scopes.find((s) => s.kind === 'Module');
52
- if (ms !== undefined) {
53
- bucket.moduleScopes.push({ filePath: parsed.filePath, scope: ms });
54
- }
55
- }
56
- const augmentations = indexes.bindingAugmentations;
57
- const MAX_PACKAGE_FILES = 500;
58
- for (const bucket of buckets.values()) {
59
- if (bucket.moduleScopes.length < 2)
60
- continue;
61
- if (bucket.moduleScopes.length > MAX_PACKAGE_FILES) {
62
- logger.warn(`[java-package-siblings] skipping package with ${bucket.moduleScopes.length} files (cap=${MAX_PACKAGE_FILES}); same-package implicit visibility disabled for this package`);
63
- continue;
64
- }
65
- const classDefs = [];
66
- for (const parsed of bucket.parsed) {
67
- const moduleScope = parsed.scopes.find((s) => s.kind === 'Module');
68
- const moduleScopeId = moduleScope?.id;
69
- for (const scope of parsed.scopes) {
70
- if (scope.kind !== 'Class')
71
- continue;
72
- if (scope.parent !== moduleScopeId)
73
- continue;
74
- for (const def of scope.ownedDefs) {
75
- if (isClassLike(def.type)) {
76
- classDefs.push({ def, filePath: parsed.filePath });
77
- break;
78
- }
79
- }
80
- }
81
- }
82
- for (const { filePath, scope } of bucket.moduleScopes) {
83
- let scopeAug = augmentations.get(scope.id);
84
- if (scopeAug === undefined) {
85
- scopeAug = new Map();
86
- augmentations.set(scope.id, scopeAug);
87
- }
88
- const candidates = classDefs.filter((d) => d.filePath !== filePath);
89
- const proximityCache = new Map();
90
- for (const c of candidates) {
91
- if (!proximityCache.has(c.filePath)) {
92
- proximityCache.set(c.filePath, sharedSegmentCount(c.filePath, filePath));
93
- }
94
- }
95
- const sorted = candidates.sort((a, b) => (proximityCache.get(b.filePath) ?? 0) - (proximityCache.get(a.filePath) ?? 0));
96
- const injectedIds = new Set();
97
- for (const { def } of sorted) {
98
- if (injectedIds.has(def.nodeId))
99
- continue;
100
- const qn = def.qualifiedName;
101
- if (qn === undefined)
102
- continue;
103
- injectedIds.add(def.nodeId);
104
- const simpleName = qn.includes('.') ? qn.slice(qn.lastIndexOf('.') + 1) : qn;
105
- let list = scopeAug.get(simpleName);
106
- if (list === undefined) {
107
- list = [];
108
- scopeAug.set(simpleName, list);
109
- }
110
- list.push({ def, origin: 'namespace' });
111
- }
112
- const tb = scope.typeBindings;
113
- for (const sibling of bucket.moduleScopes) {
114
- if (sibling.filePath === filePath)
115
- continue;
116
- for (const [name, ref] of sibling.scope.typeBindings) {
117
- if (tb.has(name))
118
- continue;
119
- tb.set(name, ref);
120
- }
121
- }
122
- for (const sibParsed of bucket.parsed) {
123
- if (sibParsed.filePath === filePath)
124
- continue;
125
- for (const sibScope of sibParsed.scopes) {
126
- if (sibScope.kind !== 'Class')
127
- continue;
128
- for (const [name, ref] of sibScope.typeBindings) {
129
- if (ref.source === 'self')
130
- continue;
131
- if (tb.has(name))
132
- continue;
133
- tb.set(name, ref);
134
- }
135
- }
136
- }
137
- }
138
- }
139
- }
140
- function sharedSegmentCount(a, b) {
141
- const sa = a.replace(/\\/g, '/').split('/');
142
- const sb = b.replace(/\\/g, '/').split('/');
143
- let i = 0;
144
- while (i < sa.length && i < sb.length && sa[i] === sb[i])
145
- i++;
146
- return i;
147
- }
1
+ import { createJvmPackageSiblingVisibility } from '../jvm/package-siblings.js';
2
+ import { getJavaPackageFact } from './package-facts.js';
3
+ const javaPackageSiblingVisibility = createJvmPackageSiblingVisibility({
4
+ languageLabel: 'java',
5
+ getPackageFact: getJavaPackageFact,
6
+ });
7
+ export const populateJavaPackageSiblings = javaPackageSiblingVisibility.populateNamespaceSiblings;
8
+ export const isJavaPackageSiblingVisibilityIncomplete = javaPackageSiblingVisibility.isVisibilityIncomplete;
@@ -37,6 +37,20 @@ const JAVA_SCOPE_QUERY = `
37
37
  (record_declaration) @scope.class
38
38
  (annotation_type_declaration) @scope.class
39
39
 
40
+ ;; Anonymous class body: \`new Runnable() { public void run() {} }\`.
41
+ ;; Without its own scope, a method's auto-hoist (scope-extractor.ts) has
42
+ ;; nowhere to stop and leaks the name past the anonymous class into the
43
+ ;; enclosing scope -- the same failure mode fixed for TS/JS object
44
+ ;; literals (#2545).
45
+ (object_creation_expression
46
+ (class_body) @scope.class)
47
+
48
+ ;; Enum constant body: \`enum E { A { public void hook() {} } }\` --
49
+ ;; javac's other anonymous-class shape (E$N), same scope-boundary need
50
+ ;; and same class_body anchor (#2555).
51
+ (enum_constant
52
+ body: (class_body) @scope.class)
53
+
40
54
  (method_declaration) @scope.function
41
55
  (constructor_declaration) @scope.function
42
56
 
@@ -56,6 +70,15 @@ const JAVA_SCOPE_QUERY = `
56
70
  (annotation_type_declaration
57
71
  name: (identifier) @declaration.name) @declaration.class
58
72
 
73
+ ;; Class annotation syntax is carried to post-resolution enrichment. Keeping
74
+ ;; this in the existing scope query avoids a second AST build/traversal.
75
+ (class_declaration
76
+ (modifiers
77
+ [
78
+ (marker_annotation name: (_) @class-annotation.name)
79
+ (annotation name: (_) @class-annotation.name)
80
+ ])) @class-annotation.class
81
+
59
82
  ;; Declarations — methods / constructors
60
83
  (method_declaration
61
84
  name: (identifier) @declaration.name) @declaration.method
@@ -13,10 +13,22 @@ import { followChainPostFinalize } from '../../scope-resolution/passes/imported-
13
13
  import { javaProvider } from '../java.js';
14
14
  import { javaArityCompatibility, javaMergeBindings, resolveJavaImportTarget, } from './index.js';
15
15
  import { populateJavaPackageSiblings } from './package-siblings.js';
16
+ import { attachSpringBeanCandidateMetadata } from './spring-bean-metadata.js';
17
+ import { attachJavaSpringConfigBindings } from './spring-config-bindings.js';
18
+ import { applyJavaCaptureSideChannel, clearJavaClassAnnotationFacts, } from './capture-side-channel.js';
19
+ import { clearJavaPackageFacts } from './package-facts.js';
16
20
  const javaScopeResolver = {
17
21
  language: SupportedLanguages.Java,
18
22
  languageProvider: javaProvider,
19
23
  importEdgeReason: 'java-scope: import',
24
+ loadResolutionConfig: () => {
25
+ // Worker capture facts are process-local and outlive a single analysis in
26
+ // server mode. This hook runs once before each Java workspace pass, before
27
+ // ParsedFile side channels are restored for the current files.
28
+ clearJavaClassAnnotationFacts();
29
+ clearJavaPackageFacts();
30
+ return undefined;
31
+ },
20
32
  resolveImportTarget: (targetRaw, fromFile, allFilePaths) => {
21
33
  const ws = { fromFile, allFilePaths };
22
34
  return resolveJavaImportTarget({ kind: 'named', localName: '_', importedName: '_', targetRaw }, ws);
@@ -25,14 +37,25 @@ const javaScopeResolver = {
25
37
  arityCompatibility: (callsite, def) => javaArityCompatibility(def, callsite),
26
38
  buildMro: buildJavaMro,
27
39
  populateOwners: (parsed) => populateClassOwnedMembers(parsed),
40
+ applyCaptureSideChannel: applyJavaCaptureSideChannel,
28
41
  isSuperReceiver: (text) => text.trim() === 'super',
29
42
  fieldFallbackOnMethodLookup: false,
30
43
  propagatesReturnTypesAcrossImports: true,
31
44
  collapseMemberCallsByCallerTarget: true,
32
45
  hoistTypeBindingsToModule: true,
33
46
  stripReceiverCastExpressions: true,
47
+ // #2550: every Java method belongs to a class instance — a free call may
48
+ // resolve to a Method only when the caller's enclosing class chain
49
+ // (self + MRO) contains the method's owner. Closes the finalize-bucket
50
+ // leak (unqualified `run()` matching an unrelated same-file anonymous
51
+ // class's method). C# is the intended next adopter.
52
+ freeCallsRequireInstanceOwnership: true,
34
53
  populateNamespaceSiblings: populateJavaPackageSiblings,
35
54
  populateRangeBindings: populateJavaCrossFileReturnTypes,
55
+ emitPostResolutionEdges: (graph, parsedFiles, nodeLookup, indexes, ctx) => {
56
+ attachSpringBeanCandidateMetadata(graph, parsedFiles, nodeLookup, indexes);
57
+ attachJavaSpringConfigBindings(graph, parsedFiles, nodeLookup, indexes, ctx);
58
+ },
36
59
  };
37
60
  export { javaScopeResolver };
38
61
  function populateJavaCrossFileReturnTypes(parsedFiles, indexes) {
@@ -0,0 +1,2 @@
1
+ /** Java wiring for the language-neutral Spring candidate engine. */
2
+ export declare const attachSpringBeanCandidateMetadata: (graph: import("../../../graph/types.js").KnowledgeGraph, parsedFiles: readonly import('../../../../_shared/index.js').ParsedFile[], nodeLookup: import("../../scope-resolution/graph-bridge/node-lookup.js").GraphNodeLookup, indexes: import("../../model/scope-resolution-indexes.js").ScopeResolutionIndexes) => void;
@@ -0,0 +1,8 @@
1
+ import { createSpringBeanCandidateAttacher } from '../../frameworks/spring/bean-candidates.js';
2
+ import { getJavaClassAnnotationFacts } from './capture-side-channel.js';
3
+ import { isJavaPackageSiblingVisibilityIncomplete } from './package-siblings.js';
4
+ /** Java wiring for the language-neutral Spring candidate engine. */
5
+ export const attachSpringBeanCandidateMetadata = createSpringBeanCandidateAttacher({
6
+ getClassAnnotationFacts: getJavaClassAnnotationFacts,
7
+ isPackageVisibilityIncomplete: isJavaPackageSiblingVisibilityIncomplete,
8
+ });
@@ -0,0 +1,23 @@
1
+ import type { KnowledgeGraph } from '../../../graph/types.js';
2
+ import type { GraphNodeLookup } from '../../scope-resolution/graph-bridge/node-lookup.js';
3
+ import type { ScopeResolutionIndexes } from '../../model/scope-resolution-indexes.js';
4
+ import { type ParsedFile, type ScopeId } from '../../../../_shared/index.js';
5
+ import { type SpringConfigConsumer } from '../../frameworks/spring/config-bindings.js';
6
+ import { type SyntaxNode } from '../../utils/ast-helpers.js';
7
+ export interface JavaSpringConfigConsumerFact {
8
+ readonly consumer: SpringConfigConsumer;
9
+ readonly annotationName: string;
10
+ readonly classScopeId: ScopeId;
11
+ }
12
+ /** Extract statically readable Spring placeholder keys from a Java annotation. */
13
+ export declare function parseValuePlaceholderKeys(annotation: SyntaxNode): string[];
14
+ /** Extract `prefix`/`value` (or the positional value) from the annotation. */
15
+ export declare function parseConfigurationPropertiesPrefix(annotation: SyntaxNode): string | null;
16
+ /** Collect config facts from the Java parser's existing AST (no reparse). */
17
+ export declare function captureJavaSpringConfigConsumerFacts(root: SyntaxNode, filePath: string): JavaSpringConfigConsumerFact[];
18
+ /** Parse Java consumers for focused unit tests; production reuses the worker AST. */
19
+ export declare function extractJavaSpringConfigConsumers(source: string): SpringConfigConsumer[];
20
+ /** Java ScopeResolver post-resolution hook for Spring configuration consumers. */
21
+ export declare function attachJavaSpringConfigBindings(graph: KnowledgeGraph, parsedFiles: readonly ParsedFile[], _nodeLookup: GraphNodeLookup, indexes: ScopeResolutionIndexes, _ctx: {
22
+ readonly fileContents: ReadonlyMap<string, string>;
23
+ }): void;
@@ -0,0 +1,215 @@
1
+ import { makeScopeId } from '../../../../_shared/index.js';
2
+ import { bindSpringConfigConsumers, } from '../../frameworks/spring/config-bindings.js';
3
+ import { createSpringAnnotationNameResolver } from '../../frameworks/spring/bean-candidates.js';
4
+ import { parseSourceSafe } from '../../../tree-sitter/safe-parse.js';
5
+ import { nodeToCapture } from '../../utils/ast-helpers.js';
6
+ import { getJavaParser } from './query.js';
7
+ import { getJavaSpringConfigConsumerFacts } from './capture-side-channel.js';
8
+ import { isJavaPackageSiblingVisibilityIncomplete } from './package-siblings.js';
9
+ const VALUE_ANNOTATION = 'org.springframework.beans.factory.annotation.Value';
10
+ const CONFIGURATION_PROPERTIES_ANNOTATION = 'org.springframework.boot.context.properties.ConfigurationProperties';
11
+ function collectJavaImports(root) {
12
+ const exact = new Set();
13
+ const wildcard = new Set();
14
+ const localTypes = new Set();
15
+ for (const node of root.descendantsOfType('import_declaration')) {
16
+ const imported = node.text
17
+ .replace(/^\s*import\s+(?:static\s+)?/, '')
18
+ .replace(/;\s*$/, '')
19
+ .trim();
20
+ if (imported.endsWith('.*'))
21
+ wildcard.add(imported.slice(0, -2));
22
+ else
23
+ exact.add(imported);
24
+ }
25
+ for (const type of [
26
+ 'class_declaration',
27
+ 'interface_declaration',
28
+ 'enum_declaration',
29
+ 'record_declaration',
30
+ 'annotation_type_declaration',
31
+ ]) {
32
+ for (const node of root.descendantsOfType(type)) {
33
+ const name = node.childForFieldName('name')?.text;
34
+ if (name)
35
+ localTypes.add(name);
36
+ }
37
+ }
38
+ return { exact, wildcard, localTypes };
39
+ }
40
+ function annotationsOn(node) {
41
+ const modifiers = node.namedChildren.find((child) => child.type === 'modifiers');
42
+ if (modifiers === undefined)
43
+ return [];
44
+ const annotations = [];
45
+ for (const child of modifiers.namedChildren) {
46
+ if (child.type !== 'annotation' && child.type !== 'marker_annotation')
47
+ continue;
48
+ const name = child.childForFieldName('name')?.text ?? child.firstNamedChild?.text;
49
+ if (name)
50
+ annotations.push({ name, node: child });
51
+ }
52
+ return annotations;
53
+ }
54
+ function resolvesToAnnotation(rawName, canonicalName, imports) {
55
+ if (rawName.includes('.'))
56
+ return rawName === canonicalName;
57
+ if (imports.localTypes.has(rawName))
58
+ return false;
59
+ if (imports.exact.has(canonicalName))
60
+ return true;
61
+ const packageName = canonicalName.slice(0, canonicalName.lastIndexOf('.'));
62
+ return imports.wildcard.has(packageName);
63
+ }
64
+ function decodeJavaStringLiteral(literal) {
65
+ const delimiterLength = literal.startsWith('"""') && literal.endsWith('"""') ? 3 : 1;
66
+ return literal
67
+ .slice(delimiterLength, -delimiterLength)
68
+ .replace(/\\u([0-9a-fA-F]{4})/g, (_match, hex) => String.fromCharCode(Number.parseInt(hex, 16)))
69
+ .replace(/\\(["'\\btnfr])/g, (_match, escaped) => {
70
+ const controls = {
71
+ b: '\b',
72
+ t: '\t',
73
+ n: '\n',
74
+ f: '\f',
75
+ r: '\r',
76
+ };
77
+ return controls[escaped] ?? escaped;
78
+ });
79
+ }
80
+ function javaStringLiterals(annotation) {
81
+ return annotation
82
+ .descendantsOfType('string_literal')
83
+ .map((literal) => decodeJavaStringLiteral(literal.text));
84
+ }
85
+ /** Extract statically readable Spring placeholder keys from a Java annotation. */
86
+ export function parseValuePlaceholderKeys(annotation) {
87
+ const keys = new Set();
88
+ for (const literal of javaStringLiterals(annotation)) {
89
+ for (const match of literal.matchAll(/\$\{([^{}]+)\}/g)) {
90
+ const key = match[1].split(':', 1)[0].trim();
91
+ if (/^[A-Za-z0-9_.-]+$/.test(key))
92
+ keys.add(key);
93
+ }
94
+ }
95
+ return [...keys];
96
+ }
97
+ /** Extract `prefix`/`value` (or the positional value) from the annotation. */
98
+ export function parseConfigurationPropertiesPrefix(annotation) {
99
+ const named = annotation.descendantsOfType('element_value_pair').find((pair) => {
100
+ const key = pair.childForFieldName('key')?.text;
101
+ return key === 'prefix' || key === 'value';
102
+ });
103
+ const namedValue = named?.childForFieldName('value');
104
+ const argumentsNode = annotation.childForFieldName('arguments');
105
+ const literalNode = (namedValue?.type === 'string_literal'
106
+ ? namedValue
107
+ : namedValue?.descendantsOfType('string_literal')[0]) ??
108
+ (named === undefined
109
+ ? argumentsNode?.namedChildren.find((child) => child.type === 'string_literal')
110
+ : undefined);
111
+ if (literalNode === undefined)
112
+ return null;
113
+ const prefix = decodeJavaStringLiteral(literalNode.text)
114
+ .trim()
115
+ .replace(/^\.+|\.+$/g, '');
116
+ return /^[A-Za-z0-9_.-]+$/.test(prefix) ? prefix : null;
117
+ }
118
+ function classScopeId(filePath, declaration) {
119
+ return makeScopeId({
120
+ filePath,
121
+ range: nodeToCapture('@scope.class', declaration).range,
122
+ kind: 'Class',
123
+ });
124
+ }
125
+ function enclosingClass(node) {
126
+ let current = node.parent;
127
+ while (current !== null) {
128
+ if (current.type === 'class_declaration' || current.type === 'record_declaration') {
129
+ return current;
130
+ }
131
+ current = current.parent;
132
+ }
133
+ return undefined;
134
+ }
135
+ /** Collect config facts from the Java parser's existing AST (no reparse). */
136
+ export function captureJavaSpringConfigConsumerFacts(root, filePath) {
137
+ const imports = collectJavaImports(root);
138
+ const facts = [];
139
+ for (const field of root.descendantsOfType('field_declaration')) {
140
+ const annotations = annotationsOn(field).filter((annotation) => resolvesToAnnotation(annotation.name, VALUE_ANNOTATION, imports));
141
+ if (annotations.length === 0)
142
+ continue;
143
+ const owner = enclosingClass(field);
144
+ if (owner === undefined)
145
+ continue;
146
+ for (const declarator of field.namedChildren.filter((child) => child.type === 'variable_declarator')) {
147
+ const fieldName = declarator.childForFieldName('name')?.text;
148
+ if (!fieldName)
149
+ continue;
150
+ for (const annotation of annotations) {
151
+ const keys = parseValuePlaceholderKeys(annotation.node);
152
+ if (keys.length > 0) {
153
+ facts.push({
154
+ consumer: { kind: 'value', fieldName, line: field.startPosition.row + 1, keys },
155
+ annotationName: annotation.name,
156
+ classScopeId: classScopeId(filePath, owner),
157
+ });
158
+ }
159
+ }
160
+ }
161
+ }
162
+ for (const type of ['class_declaration', 'record_declaration']) {
163
+ for (const declaration of root.descendantsOfType(type)) {
164
+ const className = declaration.childForFieldName('name')?.text;
165
+ if (!className)
166
+ continue;
167
+ for (const annotation of annotationsOn(declaration)) {
168
+ if (!resolvesToAnnotation(annotation.name, CONFIGURATION_PROPERTIES_ANNOTATION, imports)) {
169
+ continue;
170
+ }
171
+ const prefix = parseConfigurationPropertiesPrefix(annotation.node);
172
+ if (prefix !== null) {
173
+ facts.push({
174
+ consumer: {
175
+ kind: 'configuration-properties',
176
+ className,
177
+ line: declaration.startPosition.row + 1,
178
+ prefix,
179
+ },
180
+ annotationName: annotation.name,
181
+ classScopeId: classScopeId(filePath, declaration),
182
+ });
183
+ }
184
+ }
185
+ }
186
+ }
187
+ return facts;
188
+ }
189
+ /** Parse Java consumers for focused unit tests; production reuses the worker AST. */
190
+ export function extractJavaSpringConfigConsumers(source) {
191
+ const tree = parseSourceSafe(getJavaParser(), source);
192
+ return captureJavaSpringConfigConsumerFacts(tree.rootNode, '<memory>').map((fact) => fact.consumer);
193
+ }
194
+ /** Java ScopeResolver post-resolution hook for Spring configuration consumers. */
195
+ export function attachJavaSpringConfigBindings(graph, parsedFiles, _nodeLookup, indexes, _ctx) {
196
+ const resolveAnnotation = createSpringAnnotationNameResolver(indexes);
197
+ const recognizedAnnotations = new Set([VALUE_ANNOTATION, CONFIGURATION_PROPERTIES_ANNOTATION]);
198
+ const batches = [];
199
+ for (const parsed of parsedFiles) {
200
+ const consumers = [];
201
+ for (const fact of getJavaSpringConfigConsumerFacts(parsed.filePath)) {
202
+ const classScope = indexes.scopeTree.getScope(fact.classScopeId);
203
+ if (classScope === undefined || classScope.kind !== 'Class')
204
+ continue;
205
+ const expectedAnnotation = fact.consumer.kind === 'value' ? VALUE_ANNOTATION : CONFIGURATION_PROPERTIES_ANNOTATION;
206
+ const enclosingScope = fact.consumer.kind === 'value' ? classScope.id : classScope.parent;
207
+ const resolved = resolveAnnotation(fact.annotationName, parsed, enclosingScope, recognizedAnnotations, isJavaPackageSiblingVisibilityIncomplete(parsed.filePath));
208
+ if (resolved === expectedAnnotation)
209
+ consumers.push(fact.consumer);
210
+ }
211
+ if (consumers.length > 0)
212
+ batches.push({ filePath: parsed.filePath, consumers });
213
+ }
214
+ bindSpringConfigConsumers(graph, batches);
215
+ }
@@ -26,6 +26,8 @@ import { javaMethodConfig } from '../method-extractors/configs/jvm.js';
26
26
  import { createVariableExtractor } from '../variable-extractors/generic.js';
27
27
  import { javaVariableConfig } from '../variable-extractors/configs/jvm.js';
28
28
  import { createJavaCfgVisitor } from '../cfg/visitors/java.js';
29
+ import { assertCloneable } from '../workers/clone-safety.js';
30
+ import { collectJavaCaptureSideChannel } from './java/capture-side-channel.js';
29
31
  import { emitJavaScopeCaptures, interpretJavaImport, interpretJavaTypeBinding, javaBindingScopeFor, javaImportOwningScope, javaMergeBindings, javaReceiverBinding, javaArityCompatibility, resolveJavaImportTarget, } from './java/index.js';
30
32
  const orderJavaSameNameTypeCandidates = ({ callSiteFilePath, candidates, }) => {
31
33
  if (!callSiteFilePath.endsWith('.java'))
@@ -99,6 +101,7 @@ export const javaProvider = defineLanguage({
99
101
  descriptionExtractor: createLeadingDocDescriptionExtractor(),
100
102
  // ── RFC #909 Ring 3: scope-based resolution hooks ──
101
103
  emitScopeCaptures: emitJavaScopeCaptures,
104
+ collectCaptureSideChannel: (filePath) => assertCloneable(collectJavaCaptureSideChannel(filePath)),
102
105
  // ── PDG: per-function CFG + def/use harvest (#2195 U4) ──
103
106
  cfgVisitor: createJavaCfgVisitor(),
104
107
  interpretImport: interpretJavaImport,
@@ -34,6 +34,7 @@ import { synthesizeTsReceiverBinding } from '../typescript/receiver-binding.js';
34
34
  import { isArrayMethodCallbackArrow } from '../typescript/array-callback.js';
35
35
  import { getTreeSitterBufferSize } from '../../constants.js';
36
36
  import { parseSourceSafe } from '../../../tree-sitter/safe-parse.js';
37
+ import { synthesizeCallableFlowCaptures } from '../../utils/callable-flow-captures.js';
37
38
  import { deriveDefaultExportHocName, isBlockedDefaultExportHoc, isDefaultExportHocFunctionNode, } from '../../ts-js-hoc-utils.js';
38
39
  /** JS function-like node types that may carry a synthesized `this` binding.
39
40
  * Kept in sync with the `@scope.function` patterns in `query.ts`. */
@@ -52,6 +53,20 @@ const CALL_TAGS = [
52
53
  '@reference.call.member',
53
54
  '@reference.call.constructor',
54
55
  ];
56
+ const JS_CALLABLE_CAPTURE_OPTIONS = {
57
+ functionNodeTypes: new Set(FUNCTION_NODE_TYPES),
58
+ callNodeTypes: new Set(['call_expression']),
59
+ parameterListNodeTypes: new Set(['formal_parameters', 'arguments']),
60
+ parameterNodeTypes: new Set(['identifier', 'rest_pattern', 'assignment_pattern']),
61
+ bindingNodeTypes: new Set(['variable_declarator']),
62
+ assignmentNodeTypes: new Set(['assignment_expression', 'augmented_assignment_expression']),
63
+ identifierNodeTypes: new Set([
64
+ 'identifier',
65
+ 'property_identifier',
66
+ 'shorthand_property_identifier_pattern',
67
+ 'private_property_identifier',
68
+ ]),
69
+ };
55
70
  function pickFirstDefined(grouped, tags) {
56
71
  for (const tag of tags) {
57
72
  const cap = grouped[tag];
@@ -840,5 +855,6 @@ export function emitJsScopeCaptures(sourceText, filePath, cachedTree) {
840
855
  synthesizeForOfMapTupleBindings(tree.rootNode, out);
841
856
  synthesizeInstanceofNarrowings(tree.rootNode, out);
842
857
  synthesizeJsInheritanceReferences(tree.rootNode, out);
858
+ out.push(...synthesizeCallableFlowCaptures(tree.rootNode, JS_CALLABLE_CAPTURE_OPTIONS));
843
859
  return out;
844
860
  }
@@ -66,6 +66,13 @@ const JAVASCRIPT_SCOPE_QUERY = `
66
66
  (arrow_function) @scope.function
67
67
  (method_definition) @scope.function
68
68
 
69
+ ;; Object literals get their own scope boundary -- see the matching
70
+ ;; comment in typescript/query.ts (#2545/#2551). Prevents a
71
+ ;; method_definition/property-arrow's auto-hoist from leaking its name
72
+ ;; past the literal into the enclosing scope, and (unlike Block) keeps
73
+ ;; sibling properties from seeing each other as bare identifiers.
74
+ (object) @scope.object
75
+
69
76
  ;; Declarations — classes
70
77
  (class_declaration
71
78
  name: (identifier) @declaration.name) @declaration.class
@@ -457,6 +464,20 @@ const JAVASCRIPT_SCOPE_QUERY = `
457
464
  (member_expression
458
465
  object: (_) @reference.receiver
459
466
  property: (property_identifier) @reference.name) @reference.read.member
467
+
468
+ ;; Value position (#2437): function identifier as object-literal property
469
+ ;; value ({ emitScopeCaptures: emitHook }) or shorthand ({ emitHook }).
470
+ ;; Resolution is callable-gated (MethodRegistry) and emits a USES reference;
471
+ ;; @reference.property-key feeds the property-dispatch pass, which
472
+ ;; synthesizes CALLS at x.<key>() sites. Two separate patterns (tree-sitter
473
+ ;; 0.21 alternation hazard); destructuring shorthand is
474
+ ;; shorthand_property_identifier_pattern and cannot match.
475
+ (pair
476
+ key: (property_identifier) @reference.property-key
477
+ value: (identifier) @reference.name @reference.value-ref)
478
+
479
+ (object
480
+ (shorthand_property_identifier) @reference.name @reference.property-key @reference.value-ref)
460
481
  `;
461
482
  /** JSX-only suffix — appended when compiling against the JSX grammar for .jsx files. */
462
483
  const JSX_QUERY_SUFFIX = `
@@ -0,0 +1,35 @@
1
+ /** Plain-data JVM package fact captured from the language's existing AST. */
2
+ export type JvmPackageFact = {
3
+ readonly status: 'known';
4
+ readonly packageName: string;
5
+ } | {
6
+ readonly status: 'unknown';
7
+ };
8
+ export declare const UNKNOWN_JVM_PACKAGE_FACT: JvmPackageFact;
9
+ export interface JvmPackageSyntaxNode {
10
+ readonly type: string;
11
+ readonly text: string;
12
+ readonly hasError: boolean;
13
+ readonly namedChildren: readonly JvmPackageSyntaxNode[];
14
+ }
15
+ export interface JvmPackageFactOptions {
16
+ readonly packageNodeType: string;
17
+ readonly packageNameNodeTypes: readonly string[];
18
+ }
19
+ export interface JvmPackageFactStore {
20
+ clear(): void;
21
+ capture(filePath: string, root: JvmPackageSyntaxNode): void;
22
+ set(filePath: string, fact: JvmPackageFact): void;
23
+ get(filePath: string): JvmPackageFact | undefined;
24
+ }
25
+ /** Validate a package fact restored from an opaque worker payload. */
26
+ export declare function isJvmPackageFact(value: unknown): value is JvmPackageFact;
27
+ /**
28
+ * Create one language-local package fact store.
29
+ *
30
+ * Package facts are captured while the language's scope extractor already
31
+ * owns a tree-sitter Tree, then serialized through ParsedFile's side-channel.
32
+ * Resolution hooks consume only this plain data and never parse source again.
33
+ */
34
+ export declare function createJvmPackageFactStore(options: JvmPackageFactOptions): JvmPackageFactStore;
35
+ export declare function extractJvmPackageFact(root: JvmPackageSyntaxNode, options: JvmPackageFactOptions): JvmPackageFact;