gitnexus 1.6.11-rc.8 → 1.6.11

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 (531) hide show
  1. package/README.md +95 -26
  2. package/dist/_shared/graph/types.d.ts +81 -2
  3. package/dist/_shared/graph/types.d.ts.map +1 -1
  4. package/dist/_shared/integrations/circuit-breaker.d.ts.map +1 -1
  5. package/dist/_shared/integrations/circuit-breaker.js.map +1 -1
  6. package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
  7. package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
  8. package/dist/_shared/language-detection.d.ts.map +1 -1
  9. package/dist/_shared/language-detection.js +2 -0
  10. package/dist/_shared/language-detection.js.map +1 -1
  11. package/dist/_shared/languages.d.ts +2 -1
  12. package/dist/_shared/languages.d.ts.map +1 -1
  13. package/dist/_shared/languages.js +1 -0
  14. package/dist/_shared/languages.js.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 +4 -0
  18. package/dist/_shared/lbug/schema-constants.js.map +1 -1
  19. package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
  20. package/dist/_shared/scope-resolution/finalize-algorithm.js +1 -0
  21. package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
  22. package/dist/_shared/scope-resolution/language-classification.d.ts +3 -0
  23. package/dist/_shared/scope-resolution/language-classification.d.ts.map +1 -1
  24. package/dist/_shared/scope-resolution/language-classification.js +4 -0
  25. package/dist/_shared/scope-resolution/language-classification.js.map +1 -1
  26. package/dist/_shared/scope-resolution/reference-site.d.ts +10 -0
  27. package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
  28. package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
  29. package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -1
  30. package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -1
  31. package/dist/_shared/scope-resolution/scope-tree.js.map +1 -1
  32. package/dist/_shared/scope-resolution/types.d.ts +15 -0
  33. package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
  34. package/dist/cli/ai-context.d.ts +4 -0
  35. package/dist/cli/ai-context.js +90 -14
  36. package/dist/cli/analyze-config.js +14 -0
  37. package/dist/cli/analyze-options.d.ts +14 -0
  38. package/dist/cli/analyze-watch.d.ts +20 -0
  39. package/dist/cli/analyze-watch.js +434 -0
  40. package/dist/cli/analyze.js +27 -9
  41. package/dist/cli/auto-sync.d.ts +1 -0
  42. package/dist/cli/auto-sync.js +107 -0
  43. package/dist/cli/command-banner.d.ts +15 -0
  44. package/dist/cli/command-banner.js +42 -0
  45. package/dist/cli/detect-changes-format.js +21 -0
  46. package/dist/cli/doctor.d.ts +7 -0
  47. package/dist/cli/doctor.js +14 -0
  48. package/dist/cli/group.js +7 -1
  49. package/dist/cli/help-i18n.js +4 -0
  50. package/dist/cli/i18n/en.d.ts +18 -3
  51. package/dist/cli/i18n/en.js +18 -3
  52. package/dist/cli/i18n/resources.d.ts +33 -3
  53. package/dist/cli/i18n/zh-CN.d.ts +15 -0
  54. package/dist/cli/i18n/zh-CN.js +18 -3
  55. package/dist/cli/index.js +34 -7
  56. package/dist/cli/mcp.d.ts +15 -0
  57. package/dist/cli/mcp.js +44 -0
  58. package/dist/cli/optional-grammars.d.ts +3 -2
  59. package/dist/cli/optional-grammars.js +19 -3
  60. package/dist/cli/setup.js +41 -15
  61. package/dist/cli/update-notice.d.ts +34 -0
  62. package/dist/cli/update-notice.js +91 -0
  63. package/dist/cli/update.d.ts +21 -0
  64. package/dist/cli/update.js +93 -0
  65. package/dist/cli/watch.d.ts +1 -20
  66. package/dist/cli/watch.js +5 -371
  67. package/dist/core/analysis-feature-registry.d.ts +2 -0
  68. package/dist/core/analysis-feature-registry.js +15 -0
  69. package/dist/core/analyzer-identity.js +21 -3
  70. package/dist/core/auto-sync/analysis-worker-launch.d.ts +30 -0
  71. package/dist/core/auto-sync/analysis-worker-launch.js +166 -0
  72. package/dist/core/auto-sync/config.d.ts +33 -0
  73. package/dist/core/auto-sync/config.js +320 -0
  74. package/dist/core/auto-sync/index.d.ts +6 -0
  75. package/dist/core/auto-sync/index.js +6 -0
  76. package/dist/core/auto-sync/path-security.d.ts +9 -0
  77. package/dist/core/auto-sync/path-security.js +251 -0
  78. package/dist/core/auto-sync/repo.d.ts +1 -0
  79. package/dist/core/auto-sync/repo.js +6 -0
  80. package/dist/core/auto-sync/runner.d.ts +44 -0
  81. package/dist/core/auto-sync/runner.js +428 -0
  82. package/dist/core/auto-sync/starter.d.ts +50 -0
  83. package/dist/core/auto-sync/starter.js +497 -0
  84. package/dist/core/auto-sync/state.d.ts +37 -0
  85. package/dist/core/auto-sync/state.js +119 -0
  86. package/dist/core/group/config-parser.js +8 -1
  87. package/dist/core/group/cross-impact.d.ts +3 -0
  88. package/dist/core/group/cross-impact.js +36 -4
  89. package/dist/core/group/extractors/http-patterns/java.js +22 -8
  90. package/dist/core/group/extractors/http-patterns/kotlin.js +86 -31
  91. package/dist/core/group/extractors/http-patterns/node.js +145 -8
  92. package/dist/core/group/extractors/http-patterns/python.js +11 -7
  93. package/dist/core/group/extractors/http-route-extractor.js +63 -17
  94. package/dist/core/group/extractors/java-workspace-extractor.js +244 -31
  95. package/dist/core/group/group-lock.js +5 -6
  96. package/dist/core/group/normalization.d.ts +38 -1
  97. package/dist/core/group/normalization.js +59 -3
  98. package/dist/core/group/service.d.ts +11 -0
  99. package/dist/core/group/service.js +13 -1
  100. package/dist/core/group/storage.js +2 -2
  101. package/dist/core/group/sync.d.ts +24 -1
  102. package/dist/core/group/sync.js +46 -8
  103. package/dist/core/group/types.d.ts +13 -0
  104. package/dist/core/incremental/derived-writeback.d.ts +36 -0
  105. package/dist/core/incremental/derived-writeback.js +68 -0
  106. package/dist/core/incremental/spring-config-drift.d.ts +12 -0
  107. package/dist/core/incremental/spring-config-drift.js +46 -0
  108. package/dist/core/incremental/subgraph-extract.d.ts +7 -4
  109. package/dist/core/incremental/subgraph-extract.js +30 -5
  110. package/dist/core/ingestion/asyncapi/document.d.ts +226 -0
  111. package/dist/core/ingestion/asyncapi/document.js +758 -0
  112. package/dist/core/ingestion/asyncapi/protocol.d.ts +79 -0
  113. package/dist/core/ingestion/asyncapi/protocol.js +203 -0
  114. package/dist/core/ingestion/call-extractors/configs/zig.d.ts +2 -0
  115. package/dist/core/ingestion/call-extractors/configs/zig.js +4 -0
  116. package/dist/core/ingestion/call-extractors/zig-static-gating.d.ts +100 -0
  117. package/dist/core/ingestion/call-extractors/zig-static-gating.js +319 -0
  118. package/dist/core/ingestion/call-processor.js +3 -1
  119. package/dist/core/ingestion/class-extractors/configs/zig.d.ts +2 -0
  120. package/dist/core/ingestion/class-extractors/configs/zig.js +32 -0
  121. package/dist/core/ingestion/class-extractors/generic.js +4 -1
  122. package/dist/core/ingestion/class-types.d.ts +6 -2
  123. package/dist/core/ingestion/destination-key.d.ts +59 -0
  124. package/dist/core/ingestion/destination-key.js +61 -0
  125. package/dist/core/ingestion/entry-point-scoring.d.ts +6 -2
  126. package/dist/core/ingestion/entry-point-scoring.js +8 -44
  127. package/dist/core/ingestion/export-detection.d.ts +37 -0
  128. package/dist/core/ingestion/export-detection.js +60 -0
  129. package/dist/core/ingestion/field-extractors/configs/zig.d.ts +8 -0
  130. package/dist/core/ingestion/field-extractors/configs/zig.js +49 -0
  131. package/dist/core/ingestion/field-extractors/generic.d.ts +1 -1
  132. package/dist/core/ingestion/field-extractors/generic.js +12 -1
  133. package/dist/core/ingestion/frameworks/spring/actuator-runtime.d.ts +26 -0
  134. package/dist/core/ingestion/frameworks/spring/actuator-runtime.js +843 -0
  135. package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +5 -0
  136. package/dist/core/ingestion/frameworks/spring/analysis-features.js +9 -0
  137. package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +8 -1
  138. package/dist/core/ingestion/frameworks/spring/argument-facts.d.ts +80 -0
  139. package/dist/core/ingestion/frameworks/spring/argument-facts.js +85 -0
  140. package/dist/core/ingestion/frameworks/spring/config-bindings.d.ts +1 -0
  141. package/dist/core/ingestion/frameworks/spring/config-bindings.js +2 -1
  142. package/dist/core/ingestion/frameworks/spring/destinations.d.ts +539 -0
  143. package/dist/core/ingestion/frameworks/spring/destinations.js +840 -0
  144. package/dist/core/ingestion/frameworks/spring/dynamic-lookups.d.ts +22 -0
  145. package/dist/core/ingestion/frameworks/spring/dynamic-lookups.js +124 -0
  146. package/dist/core/ingestion/frameworks/spring/message-producers.d.ts +78 -0
  147. package/dist/core/ingestion/frameworks/spring/message-producers.js +90 -0
  148. package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +29 -0
  149. package/dist/core/ingestion/frameworks/spring/vendor-prefixes.d.ts +7 -0
  150. package/dist/core/ingestion/frameworks/spring/vendor-prefixes.js +22 -0
  151. package/dist/core/ingestion/import-resolvers/configs/zig.d.ts +13 -0
  152. package/dist/core/ingestion/import-resolvers/configs/zig.js +26 -0
  153. package/dist/core/ingestion/import-resolvers/zig.d.ts +34 -0
  154. package/dist/core/ingestion/import-resolvers/zig.js +193 -0
  155. package/dist/core/ingestion/language-config.d.ts +177 -0
  156. package/dist/core/ingestion/language-config.js +719 -0
  157. package/dist/core/ingestion/language-provider.d.ts +178 -1
  158. package/dist/core/ingestion/language-provider.js +22 -0
  159. package/dist/core/ingestion/languages/csharp/razor-view-components.d.ts +62 -0
  160. package/dist/core/ingestion/languages/csharp/razor-view-components.js +954 -0
  161. package/dist/core/ingestion/languages/csharp/resolution-config.d.ts +3 -0
  162. package/dist/core/ingestion/languages/csharp/resolution-config.js +6 -1
  163. package/dist/core/ingestion/languages/csharp/scope-resolver.js +8 -0
  164. package/dist/core/ingestion/languages/index.d.ts +1 -0
  165. package/dist/core/ingestion/languages/index.js +2 -0
  166. package/dist/core/ingestion/languages/java/analysis-features.d.ts +1 -1
  167. package/dist/core/ingestion/languages/java/analysis-features.js +14 -6
  168. package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +8 -0
  169. package/dist/core/ingestion/languages/java/capture-side-channel.js +34 -0
  170. package/dist/core/ingestion/languages/java/captures.js +22 -1
  171. package/dist/core/ingestion/languages/java/lombok-synthesizer.d.ts +42 -0
  172. package/dist/core/ingestion/languages/java/lombok-synthesizer.js +439 -0
  173. package/dist/core/ingestion/languages/java/scope-resolver.js +2 -0
  174. package/dist/core/ingestion/languages/java/spring-actuator.d.ts +2 -0
  175. package/dist/core/ingestion/languages/java/spring-actuator.js +62 -0
  176. package/dist/core/ingestion/languages/java/spring-di.d.ts +17 -1
  177. package/dist/core/ingestion/languages/java/spring-di.js +44 -2
  178. package/dist/core/ingestion/languages/java/spring-dynamic-lookup.d.ts +8 -0
  179. package/dist/core/ingestion/languages/java/spring-dynamic-lookup.js +62 -0
  180. package/dist/core/ingestion/languages/java/spring-message-producers.d.ts +20 -0
  181. package/dist/core/ingestion/languages/java/spring-message-producers.js +83 -0
  182. package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +11 -1
  183. package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +13 -3
  184. package/dist/core/ingestion/languages/java.js +18 -8
  185. package/dist/core/ingestion/languages/jvm/accessor-synthesis.d.ts +99 -0
  186. package/dist/core/ingestion/languages/jvm/accessor-synthesis.js +173 -0
  187. package/dist/core/ingestion/languages/jvm/beanspec.d.ts +17 -0
  188. package/dist/core/ingestion/languages/jvm/beanspec.js +42 -0
  189. package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +15 -0
  190. package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +50 -0
  191. package/dist/core/ingestion/languages/kotlin/captures.js +24 -1
  192. package/dist/core/ingestion/languages/kotlin/lombok-synthesizer.d.ts +26 -0
  193. package/dist/core/ingestion/languages/kotlin/lombok-synthesizer.js +417 -0
  194. package/dist/core/ingestion/languages/kotlin/scope-resolver.js +4 -0
  195. package/dist/core/ingestion/languages/kotlin/spring-actuator.d.ts +4 -0
  196. package/dist/core/ingestion/languages/kotlin/spring-actuator.js +172 -0
  197. package/dist/core/ingestion/languages/kotlin/spring-config-bindings.d.ts +18 -0
  198. package/dist/core/ingestion/languages/kotlin/spring-config-bindings.js +411 -0
  199. package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +51 -1
  200. package/dist/core/ingestion/languages/kotlin/spring-di.js +86 -6
  201. package/dist/core/ingestion/languages/kotlin/spring-dynamic-lookup.d.ts +8 -0
  202. package/dist/core/ingestion/languages/kotlin/spring-dynamic-lookup.js +77 -0
  203. package/dist/core/ingestion/languages/kotlin/spring-message-producers.d.ts +17 -0
  204. package/dist/core/ingestion/languages/kotlin/spring-message-producers.js +119 -0
  205. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +16 -0
  206. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +77 -2
  207. package/dist/core/ingestion/languages/kotlin.js +24 -0
  208. package/dist/core/ingestion/languages/python.js +2 -0
  209. package/dist/core/ingestion/languages/rust/query.js +8 -8
  210. package/dist/core/ingestion/languages/zig/captures.d.ts +260 -0
  211. package/dist/core/ingestion/languages/zig/captures.js +2070 -0
  212. package/dist/core/ingestion/languages/zig/index.d.ts +4 -0
  213. package/dist/core/ingestion/languages/zig/index.js +4 -0
  214. package/dist/core/ingestion/languages/zig/interpret.d.ts +36 -0
  215. package/dist/core/ingestion/languages/zig/interpret.js +176 -0
  216. package/dist/core/ingestion/languages/zig/query.d.ts +3 -0
  217. package/dist/core/ingestion/languages/zig/query.js +426 -0
  218. package/dist/core/ingestion/languages/zig/range-binding.d.ts +37 -0
  219. package/dist/core/ingestion/languages/zig/range-binding.js +373 -0
  220. package/dist/core/ingestion/languages/zig/scope-resolver.d.ts +12 -0
  221. package/dist/core/ingestion/languages/zig/scope-resolver.js +58 -0
  222. package/dist/core/ingestion/languages/zig/simple-hooks.d.ts +25 -0
  223. package/dist/core/ingestion/languages/zig/simple-hooks.js +143 -0
  224. package/dist/core/ingestion/languages/zig.d.ts +32 -0
  225. package/dist/core/ingestion/languages/zig.js +130 -0
  226. package/dist/core/ingestion/method-extractors/configs/zig.d.ts +2 -0
  227. package/dist/core/ingestion/method-extractors/configs/zig.js +120 -0
  228. package/dist/core/ingestion/method-extractors/generic.js +16 -4
  229. package/dist/core/ingestion/method-types.d.ts +10 -4
  230. package/dist/core/ingestion/model/field-registry.d.ts +3 -3
  231. package/dist/core/ingestion/model/field-registry.js +11 -7
  232. package/dist/core/ingestion/model/method-registry.d.ts +3 -3
  233. package/dist/core/ingestion/model/method-registry.js +13 -8
  234. package/dist/core/ingestion/model/registration-table.js +3 -0
  235. package/dist/core/ingestion/model/type-registry.js +8 -4
  236. package/dist/core/ingestion/pipeline-phases/di.js +47 -14
  237. package/dist/core/ingestion/pipeline-phases/index.d.ts +1 -0
  238. package/dist/core/ingestion/pipeline-phases/index.js +1 -0
  239. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +7 -1
  240. package/dist/core/ingestion/pipeline-phases/parse-impl.js +79 -91
  241. package/dist/core/ingestion/pipeline-phases/parse.d.ts +17 -0
  242. package/dist/core/ingestion/pipeline-phases/processes.d.ts +2 -1
  243. package/dist/core/ingestion/pipeline-phases/processes.js +39 -4
  244. package/dist/core/ingestion/pipeline-phases/routes.js +27 -18
  245. package/dist/core/ingestion/pipeline-phases/runner.d.ts +4 -1
  246. package/dist/core/ingestion/pipeline-phases/runner.js +34 -14
  247. package/dist/core/ingestion/pipeline-phases/scan.js +82 -1
  248. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +2 -0
  249. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +8 -0
  250. package/dist/core/ingestion/pipeline-phases/spring-destinations.d.ts +123 -0
  251. package/dist/core/ingestion/pipeline-phases/spring-destinations.js +688 -0
  252. package/dist/core/ingestion/pipeline.d.ts +30 -1
  253. package/dist/core/ingestion/pipeline.js +52 -14
  254. package/dist/core/ingestion/resolve-references.js +5 -0
  255. package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +16 -0
  256. package/dist/core/ingestion/route-extractors/constant-resolver.js +10 -0
  257. package/dist/core/ingestion/route-extractors/java-const-resolver.d.ts +27 -1
  258. package/dist/core/ingestion/route-extractors/java-const-resolver.js +161 -13
  259. package/dist/core/ingestion/route-extractors/kotlin-const-resolver.d.ts +12 -18
  260. package/dist/core/ingestion/route-extractors/kotlin-const-resolver.js +214 -33
  261. package/dist/core/ingestion/route-extractors/kotlin-spring.d.ts +13 -0
  262. package/dist/core/ingestion/route-extractors/kotlin-spring.js +259 -0
  263. package/dist/core/ingestion/route-extractors/python-decorator-handler.d.ts +6 -0
  264. package/dist/core/ingestion/route-extractors/python-decorator-handler.js +16 -0
  265. package/dist/core/ingestion/route-extractors/spring-shared.d.ts +30 -1
  266. package/dist/core/ingestion/route-extractors/spring-shared.js +77 -9
  267. package/dist/core/ingestion/route-extractors/spring.js +9 -5
  268. package/dist/core/ingestion/scope-extractor.js +8 -0
  269. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +62 -0
  270. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +4 -0
  271. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +2 -0
  272. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +28 -0
  273. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +11 -2
  274. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +23 -2
  275. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +24 -3
  276. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +11 -1
  277. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +26 -6
  278. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +11 -0
  279. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +29 -3
  280. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +8 -1
  281. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +35 -9
  282. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +1 -4
  283. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +277 -9
  284. package/dist/core/ingestion/scope-resolution/pipeline/registry.js +2 -0
  285. package/dist/core/ingestion/scope-resolution/pipeline/run.js +7 -3
  286. package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +43 -9
  287. package/dist/core/ingestion/scope-resolution/scope/walkers.js +71 -10
  288. package/dist/core/ingestion/tree-sitter-queries.d.ts +1 -0
  289. package/dist/core/ingestion/tree-sitter-queries.js +161 -0
  290. package/dist/core/ingestion/type-extractors/zig.d.ts +2 -0
  291. package/dist/core/ingestion/type-extractors/zig.js +17 -0
  292. package/dist/core/ingestion/utils/ast-helpers.d.ts +40 -1
  293. package/dist/core/ingestion/utils/ast-helpers.js +124 -6
  294. package/dist/core/ingestion/utils/callable-flow-captures.d.ts +9 -0
  295. package/dist/core/ingestion/utils/callable-flow-captures.js +75 -14
  296. package/dist/core/ingestion/utils/test-file-path.d.ts +28 -0
  297. package/dist/core/ingestion/utils/test-file-path.js +87 -0
  298. package/dist/core/ingestion/variable-extractors/configs/zig.d.ts +2 -0
  299. package/dist/core/ingestion/variable-extractors/configs/zig.js +71 -0
  300. package/dist/core/ingestion/workers/parse-worker.js +85 -14
  301. package/dist/core/install-context.d.ts +4 -0
  302. package/dist/core/install-context.js +152 -0
  303. package/dist/core/lbug/csv-generator.d.ts +10 -1
  304. package/dist/core/lbug/csv-generator.js +92 -22
  305. package/dist/core/lbug/graph-emit-sink.d.ts +3 -2
  306. package/dist/core/lbug/graph-emit-sink.js +4 -2
  307. package/dist/core/lbug/lbug-adapter.d.ts +100 -5
  308. package/dist/core/lbug/lbug-adapter.js +236 -24
  309. package/dist/core/lbug/schema.d.ts +6 -5
  310. package/dist/core/lbug/schema.js +84 -22
  311. package/dist/core/net/url-guard.d.ts +6 -0
  312. package/dist/core/net/url-guard.js +147 -0
  313. package/dist/core/package-version.d.ts +5 -0
  314. package/dist/core/package-version.js +10 -0
  315. package/dist/core/run-analyze.d.ts +21 -4
  316. package/dist/core/run-analyze.js +426 -117
  317. package/dist/core/search/fts-indexes.d.ts +19 -1
  318. package/dist/core/search/fts-indexes.js +28 -1
  319. package/dist/core/tree-sitter/parser-loader.js +16 -0
  320. package/dist/core/update-cache.d.ts +39 -0
  321. package/dist/core/update-cache.js +141 -0
  322. package/dist/core/update-check.d.ts +31 -0
  323. package/dist/core/update-check.js +274 -0
  324. package/dist/mcp/local/local-backend.d.ts +27 -13
  325. package/dist/mcp/local/local-backend.js +148 -60
  326. package/dist/mcp/repository-policy.d.ts +5 -1
  327. package/dist/mcp/repository-policy.js +48 -4
  328. package/dist/mcp/resources.js +10 -1
  329. package/dist/mcp/server.js +8 -9
  330. package/dist/mcp/tools.js +32 -22
  331. package/dist/server/analyze-launch.d.ts +2 -0
  332. package/dist/server/analyze-launch.js +2 -0
  333. package/dist/server/analyze-worker-protocol.d.ts +6 -1
  334. package/dist/server/analyze-worker.d.ts +1 -0
  335. package/dist/server/analyze-worker.js +38 -20
  336. package/dist/server/api.d.ts +5 -1
  337. package/dist/server/api.js +105 -88
  338. package/dist/server/git-clone.d.ts +40 -16
  339. package/dist/server/git-clone.js +253 -199
  340. package/dist/server/grep-params.d.ts +18 -0
  341. package/dist/server/grep-params.js +83 -0
  342. package/dist/server/grep-scan.d.ts +23 -0
  343. package/dist/server/grep-scan.js +107 -0
  344. package/dist/server/grep-worker.d.ts +1 -0
  345. package/dist/server/grep-worker.js +12 -0
  346. package/dist/server/mcp-http.d.ts +8 -0
  347. package/dist/server/mcp-http.js +16 -1
  348. package/dist/server/update-controller.d.ts +29 -0
  349. package/dist/server/update-controller.js +82 -0
  350. package/dist/storage/file-lock.d.ts +15 -0
  351. package/dist/storage/file-lock.js +155 -0
  352. package/dist/storage/fs-atomic.d.ts +24 -0
  353. package/dist/storage/fs-atomic.js +86 -2
  354. package/dist/storage/global-dir.d.ts +2 -0
  355. package/dist/storage/global-dir.js +6 -0
  356. package/dist/storage/parse-cache.d.ts +45 -7
  357. package/dist/storage/parse-cache.js +189 -42
  358. package/dist/storage/parsedfile-store.d.ts +41 -60
  359. package/dist/storage/parsedfile-store.js +247 -171
  360. package/dist/storage/repo-manager.d.ts +10 -4
  361. package/dist/storage/repo-manager.js +35 -25
  362. package/dist/storage/repo-meta.d.ts +34 -0
  363. package/dist/storage/v8-sidecar.d.ts +48 -0
  364. package/dist/storage/v8-sidecar.js +347 -0
  365. package/dist/types/pipeline.d.ts +14 -0
  366. package/dist/utils/process-identity.d.ts +2 -0
  367. package/dist/utils/process-identity.js +35 -0
  368. package/package.json +10 -4
  369. package/scripts/assert-web-assets.mjs +35 -0
  370. package/scripts/build-web.js +72 -0
  371. package/scripts/build.js +31 -28
  372. package/scripts/cross-platform-tests.ts +5 -0
  373. package/skills/gitnexus-cli.md +5 -1
  374. package/web/assets/ProcessFlowModal-DAeX2BHW.js +24 -0
  375. package/web/assets/{abnfDiagram-QNN2D4NM-Cq2djWWe.js → abnfDiagram-PAR5IXJI-J3OdeHLl.js} +1 -1
  376. package/web/assets/{agent-BWAXPjC5.js → agent-BMRqXorA.js} +6 -4
  377. package/web/assets/architecture-7GRP2DOG-M7G3SWCO-G3sWyX6M.js +1 -0
  378. package/web/assets/architectureDiagram-2PNWDENW-ysKcRlGT.js +36 -0
  379. package/web/assets/blockDiagram-PUWGUBOA-oLXTa1lY.js +129 -0
  380. package/web/assets/c4Diagram-3NLNHZP5-D3iu4eC0.js +38 -0
  381. package/web/assets/{chunk-2SREHG4O-Dip42xOq.js → chunk-2NMSUPJH-B24w-wng.js} +1 -1
  382. package/web/assets/{chunk-VJFVEZTB-CX66F2ep.js → chunk-32MCUW2P-ByUyt0Sa.js} +3 -3
  383. package/web/assets/{chunk-4RFN2BYJ-DHHWuC-n.js → chunk-3NPNU5GP-DocZ07Sg.js} +1 -1
  384. package/web/assets/{chunk-XNMVGMAZ-Cg_LnPtj.js → chunk-3SMGFRGC-CAu4JRLv.js} +1 -1
  385. package/web/assets/{chunk-W44A43WB-BN8EQc_u.js → chunk-4CAJECRU-DRYMwG9z.js} +1 -1
  386. package/web/assets/chunk-4OADUZ5Q-CxrSvOwZ.js +10 -0
  387. package/web/assets/{chunk-DMV4VAQV-Bn6WXDSX.js → chunk-5IQCK5RY-CCMhl4so.js} +2 -2
  388. package/web/assets/{chunk-RRFMTAIC-CMN0wcYA.js → chunk-5MVFYWFU-Db9KvrYO.js} +1 -1
  389. package/web/assets/chunk-CLS4B6BI-Uvx5QNsu.js +168 -0
  390. package/web/assets/chunk-DZP67EKU-B3Mt380j.js +70 -0
  391. package/web/assets/{chunk-6L755F7B-CMhLBxi2.js → chunk-EICP7K5X-CqwE9hui.js} +1 -1
  392. package/web/assets/{chunk-BI6VK774-D0oaWk8V.js → chunk-GDY2UAB4-CtQQR0a8.js} +1 -1
  393. package/web/assets/chunk-H7VHZCWX-CE1nAmt6.js +1 -0
  394. package/web/assets/chunk-IJBDOHL6-BUKtY6oF.js +1 -0
  395. package/web/assets/{chunk-OIYT25JQ-CQ6KOZGX.js → chunk-JFFVMJIA-0fJenqia.js} +1 -1
  396. package/web/assets/{chunk-HNC4WDU7-DoU3KnA7.js → chunk-JZGDI5JK-BeTMSSkJ.js} +1 -1
  397. package/web/assets/{chunk-EQFTRU2I-1ix7TzW9.js → chunk-KD6SPIPN-Qp1Pflah.js} +1 -1
  398. package/web/assets/chunk-NF366YI6-CpSpya3n.js +231 -0
  399. package/web/assets/chunk-NUDPKBEF-CU1-BQIW.js +34 -0
  400. package/web/assets/{chunk-SATU7PGQ-B1zhgOvc.js → chunk-OJINMHTS-zOCQe4eI.js} +1 -1
  401. package/web/assets/{chunk-E5QJAATJ-dh-5CtIV.js → chunk-Q6NGPIAH-yyBomb63.js} +1 -1
  402. package/web/assets/chunk-QJSWEUOL-D_rf9gPD.js +128 -0
  403. package/web/assets/chunk-R7JDMUKV-CRoqKpD6.js +1 -0
  404. package/web/assets/{chunk-VE5CLXGZ-C1vB7wpY.js → chunk-RCXAM2GK-CUqrWQDV.js} +1 -1
  405. package/web/assets/{chunk-66DQ2XMT-CM0xjFAN.js → chunk-RT4MAWR3-zXy9-Lvt.js} +1 -1
  406. package/web/assets/{chunk-TZUXEDM2-B7p9AcTw.js → chunk-SFMINX4W-J2UrvMpD.js} +1 -1
  407. package/web/assets/{chunk-LORZLZWG-B57uGw2N.js → chunk-SLDQ463B-CHY6e_bQ.js} +2 -2
  408. package/web/assets/{chunk-FWYVLQTC-BgDItRzJ.js → chunk-TCEHX7R3-CXPDEVbm.js} +1 -1
  409. package/web/assets/{chunk-224SPVON-B8gxtXpy.js → chunk-VQC2EELJ-Dc8fIy4R.js} +1 -1
  410. package/web/assets/chunk-VRZKL3EH-DB3KixTQ.js +1 -0
  411. package/web/assets/{chunk-A7VWPJGB-B4O3oQdQ.js → chunk-VTHDQ7BV-b7FsPQZO.js} +1 -1
  412. package/web/assets/chunk-VY2OSTJR-Dkgc3Brg.js +2 -0
  413. package/web/assets/chunk-WUBWJARI-7FwILJ3k.js +2 -0
  414. package/web/assets/{chunk-D6VWDJW2-BxcBdZ9c.js → chunk-YBMQ5JGJ-BSnyWZmd.js} +1 -1
  415. package/web/assets/chunk-YDMLL4PJ-IHhMngTz.js +2 -0
  416. package/web/assets/chunk-Z6V44ARX-BjCEsF0Q.js +62 -0
  417. package/web/assets/chunk-ZJJ7VQJP-Dz089b-K.js +321 -0
  418. package/web/assets/chunk-ZNLK7HRR-B0iFpmW4.js +1 -0
  419. package/web/assets/chunk-ZQN7UHIL-Cy7KAjQt.js +1 -0
  420. package/web/assets/{chunk-L5GCOVLC-CE2w8Nm_.js → chunk-ZS6VBONO-DBjJO0w9.js} +2 -2
  421. package/web/assets/{chunk-NV3KIAZN-5yvcpMiu.js → chunk-ZUNWM646-DNRJyNPe.js} +1 -1
  422. package/web/assets/classDiagram-FGAMPOII-C5Ibyode.js +1 -0
  423. package/web/assets/classDiagram-v2-AI5RJEK4-C5Ibyode.js +1 -0
  424. package/web/assets/{cose-bilkent-RZA4XIPR-BHpK4Crp.js → cose-bilkent-Q72C2OJ3-DMeFXnK8.js} +1 -1
  425. package/web/assets/cynefin-OW5HDTMX-6OCTWOGG-vlqakYcO.js +1 -0
  426. package/web/assets/{cynefinDiagram-TR7LZUCG-C3Iar9lZ.js → cynefinDiagram-2OOWUY4M-BY6DZkTt.js} +1 -1
  427. package/web/assets/dagre-MPVFI544-DWO70fy_.js +4 -0
  428. package/web/assets/diagram-AE4NWXFW-f7JRVRUL.js +24 -0
  429. package/web/assets/{diagram-L7DVE3PN-GIRyVUtt.js → diagram-BUJID5UG-BXZv1rCS.js} +2 -2
  430. package/web/assets/{diagram-JCD7PQ7C-DC5-9FRr.js → diagram-C44CZ5NI-CRNfvjCq.js} +1 -1
  431. package/web/assets/diagram-EYOLEXXS-DZOjKQVE.js +30 -0
  432. package/web/assets/diagram-P7B6PWOJ-D3SQmw3_.js +3 -0
  433. package/web/assets/{ebnfDiagram-DRHRQJWO-D8_CI4ZF.js → ebnfDiagram-FTPZ3PV6-jKWpIDN2.js} +1 -1
  434. package/web/assets/erDiagram-H3ERR26V-BqJntEuJ.js +99 -0
  435. package/web/assets/eventmodeling-NTZA5JFV-WKSWQHFS-Bq4FqtBL.js +1 -0
  436. package/web/assets/flowDiagram-YHGXBVSY-Dnlk2bEu.js +1 -0
  437. package/web/assets/ganttDiagram-RWFTB7ED-Bl6Y1K5T.js +292 -0
  438. package/web/assets/gitGraph-4MIJSDKK-JH2HKYUO-B3yc4GkH.js +1 -0
  439. package/web/assets/gitGraphDiagram-MAR6GKOP-CkNvsrdw.js +106 -0
  440. package/web/assets/{index-CJDpyH-n.css → index-C2_aej58.css} +1 -1
  441. package/web/assets/{index-DDRie6_8.js → index-Dj3vQOHK.js} +51 -51
  442. package/web/assets/info-A6RAGUB7-3TX3OFWW-BM3N5_Dv.js +1 -0
  443. package/web/assets/infoDiagram-LV547AFH-COkFutAf.js +2 -0
  444. package/web/assets/{ishikawaDiagram-4JDSWWDM-DmqWtjkl.js → ishikawaDiagram-PUJQGNDS-Bb8FylSR.js} +2 -2
  445. package/web/assets/{journeyDiagram-QUS3FAKT-XAzVzrQW.js → journeyDiagram-EW5QJT4W-BzoHUBhM.js} +4 -4
  446. package/web/assets/{kanban-definition-D4L7SQKK-YurRnmYn.js → kanban-definition-JSQERAZB-Uy2Pi0yQ.js} +4 -4
  447. package/web/assets/katex-CZ4GXH2S-C0Fcou7U.js +257 -0
  448. package/web/assets/{mindmap-definition-66QP5TD6-ChrWWnil.js → mindmap-definition-VBJCLQLM-B-CnOnt_.js} +3 -3
  449. package/web/assets/packet-AYTQ26CC-MKII6P3Y-Bd52ZE3V.js +1 -0
  450. package/web/assets/{pegDiagram-YKIO5C6U-QGeQLEq2.js → pegDiagram-7WILOQTJ-D9sneKXg.js} +1 -1
  451. package/web/assets/pie-WAS4IAKB-6B4OPMJ5-DW5Xy69Z.js +1 -0
  452. package/web/assets/pieDiagram-EFA7CBSB-Dx2NQofL.js +39 -0
  453. package/web/assets/{quadrantDiagram-VO5QLCXA-B7098wSc.js → quadrantDiagram-WARVYA7P-DPKL9_0A.js} +3 -3
  454. package/web/assets/radar-RG4KPBEZ-UPTR3XUL-CkzibT2h.js +1 -0
  455. package/web/assets/railroad-74A4TZTK-MEFUPFMS-D9zF-mDN.js +1 -0
  456. package/web/assets/railroad-abnf-HS5TGJTU-R5YG2S5D-ruacjUbX.js +1 -0
  457. package/web/assets/railroad-ebnf-LZEXJU2U-G5QEX2L6-S1zc5OiO.js +1 -0
  458. package/web/assets/railroad-peg-WCYAUIDC-H5I2ZRY2-Cbcr0XzY.js +1 -0
  459. package/web/assets/{railroadDiagram-M77LTMSB-AXu4vxk_.js → railroadDiagram-5NIQVNLQ-DsweTo14.js} +1 -1
  460. package/web/assets/{requirementDiagram-RASO5HTO-B-l8InpK.js → requirementDiagram-SXREGOKZ-CXwdNSVR.js} +4 -4
  461. package/web/assets/{sankeyDiagram-F32LOJ6L-Kd7zjJgX.js → sankeyDiagram-VV74M2VP-CA6jtP9P.js} +3 -3
  462. package/web/assets/{sequenceDiagram-URATNSBD-BlcdY9DS.js → sequenceDiagram-52ZFIFDL-k_5rEbzm.js} +15 -15
  463. package/web/assets/src-Df5C1Nz4.js +1 -0
  464. package/web/assets/stateDiagram-3QAKPIVI-BejHTf31.js +1 -0
  465. package/web/assets/stateDiagram-v2-HN2P4RDZ-BrfoRuOc.js +1 -0
  466. package/web/assets/swimlanes-QLVP42QD-CQSVO5D6.js +1 -0
  467. package/web/assets/swimlanesDiagram-JKPDBFCN-DrWB9kcD.js +8 -0
  468. package/web/assets/{timeline-definition-WJXWRH4I-DUfp1R3E.js → timeline-definition-GS45XAXW-C0Ks8rPP.js} +4 -4
  469. package/web/assets/treeView-Q6P3EWNA-ZRJGANNQ-DmKOCo6L.js +1 -0
  470. package/web/assets/treemap-WGGIJYW6-K64VN5AS-DO3xY92U.js +1 -0
  471. package/web/assets/{vennDiagram-K3VCMQLI-Bj-FN-XS.js → vennDiagram-QIQU2ZRJ-rgPiS837.js} +3 -3
  472. package/web/assets/wardley-WFR3VGLG-D67OWCCH-DiDPBNft.js +1 -0
  473. package/web/assets/wardleyDiagram-U6YNM66N-DRVr7SPi.js +78 -0
  474. package/web/assets/{xychartDiagram-5VRUVLCW-CK_rbSWE.js → xychartDiagram-XJAZEDNM-COtlZzYb.js} +3 -3
  475. package/web/index.html +19 -17
  476. package/web/assets/ProcessFlowModal-Badh2Pbg.js +0 -24
  477. package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +0 -1
  478. package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +0 -36
  479. package/web/assets/blockDiagram-54WLDVWM-Dg_hrRWE.js +0 -132
  480. package/web/assets/c4Diagram-X2LASM7V-CnhoT4aV.js +0 -10
  481. package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +0 -127
  482. package/web/assets/chunk-5VCL7Z4A-CQ-2dYWj.js +0 -1
  483. package/web/assets/chunk-6BELYETK-ChsYtfHW.js +0 -1
  484. package/web/assets/chunk-7CWYLC5S-DRgGkkpF.js +0 -2
  485. package/web/assets/chunk-7FYTHRHK-CsmYIswB.js +0 -32
  486. package/web/assets/chunk-KRXBNO2N-C-UNuKKf.js +0 -1
  487. package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +0 -321
  488. package/web/assets/chunk-LIEV3EAG-pyKGssV3.js +0 -1
  489. package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +0 -62
  490. package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +0 -10
  491. package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +0 -156
  492. package/web/assets/chunk-SZD42YQK-ijyKKVr1.js +0 -70
  493. package/web/assets/chunk-TFPGFQPA-Dj6a-0pC.js +0 -231
  494. package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +0 -2
  495. package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +0 -1
  496. package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +0 -1
  497. package/web/assets/chunk-WJBAP47W-BckNkuEN.js +0 -1
  498. package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +0 -1
  499. package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +0 -1
  500. package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +0 -1
  501. package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +0 -4
  502. package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +0 -30
  503. package/web/assets/diagram-KFBZAVDW-Dfmf_4ti.js +0 -3
  504. package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +0 -24
  505. package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +0 -85
  506. package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +0 -1
  507. package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +0 -1
  508. package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +0 -292
  509. package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +0 -1
  510. package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +0 -106
  511. package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +0 -1
  512. package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +0 -2
  513. package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +0 -257
  514. package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +0 -1
  515. package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +0 -1
  516. package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +0 -39
  517. package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +0 -1
  518. package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +0 -1
  519. package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +0 -1
  520. package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +0 -1
  521. package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +0 -1
  522. package/web/assets/src-C5sx_gMp.js +0 -1
  523. package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +0 -1
  524. package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +0 -1
  525. package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +0 -2
  526. package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +0 -8
  527. package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +0 -1
  528. package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +0 -1
  529. package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +0 -1
  530. package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +0 -78
  531. /package/web/assets/{sizeCapture-5GORAGP4-BEqQzsxs.js → sizeCapture-FGA5AGYP-BEqQzsxs.js} +0 -0
@@ -0,0 +1,22 @@
1
+ import type { ParsedFile, Range, ScopeId } from '../../../../_shared/index.js';
2
+ import type { KnowledgeGraph } from '../../../graph/types.js';
3
+ import type { DiInjectionMatch } from '../../di-extractors/index.js';
4
+ import type { ScopeResolutionIndexes } from '../../model/scope-resolution-indexes.js';
5
+ import type { GraphNodeLookup } from '../../scope-resolution/graph-bridge/node-lookup.js';
6
+ export interface SpringDynamicLookupFact {
7
+ readonly ownerScopeId: ScopeId;
8
+ readonly ownerRange: Range;
9
+ readonly receiverName: string;
10
+ readonly methodName: string;
11
+ readonly targetTypeName: string;
12
+ }
13
+ export declare function springDynamicLookupCardinality(receiverName: string, methodName: string): DiInjectionMatch['cardinality'] | null;
14
+ export interface SpringDynamicLookupMetadataAdapter {
15
+ getFacts(filePath: string): readonly SpringDynamicLookupFact[];
16
+ }
17
+ /**
18
+ * Attach AST-captured programmatic Spring lookups to the framework-neutral DI
19
+ * resolver. Java/Kotlin own syntax capture; this shared JVM/Spring seam owns
20
+ * import-aware type binding and metadata attachment.
21
+ */
22
+ export declare function createSpringDynamicLookupMetadataAttacher(adapter: SpringDynamicLookupMetadataAdapter): (graph: KnowledgeGraph, parsedFiles: readonly ParsedFile[], nodeLookup: GraphNodeLookup, indexes: ScopeResolutionIndexes) => void;
@@ -0,0 +1,124 @@
1
+ import { SPRING_DI_INJECTION_SITES_PROPERTY } from '../../di-extractors/spring.js';
2
+ import { resolveCallerGraphId, resolveDefGraphId, } from '../../scope-resolution/graph-bridge/ids.js';
3
+ import { isClassLike, lookupBindingsAt } from '../../scope-resolution/scope/walkers.js';
4
+ const COLLECTION_LOOKUP_METHODS = new Set(['getBeans', 'getBeansOfType']);
5
+ const SINGLE_LOOKUP_METHODS = new Set(['getBean']);
6
+ /**
7
+ * Distinctive utility names plus conventional Spring context variable names.
8
+ * Generic locals remain recall-oriented because repositories often omit the
9
+ * third-party context type from the index; AST call/class-literal gates and
10
+ * import-aware target resolution prevent the raw-text false-positive class.
11
+ */
12
+ const KNOWN_RECEIVERS = new Set([
13
+ 'SpringContextUtil',
14
+ 'SpringContextHolder',
15
+ 'SpringBeanUtil',
16
+ 'ApplicationContextProvider',
17
+ 'BeanFactoryProvider',
18
+ 'ApplicationContext',
19
+ 'BeanFactory',
20
+ 'ListableBeanFactory',
21
+ 'applicationContext',
22
+ 'context',
23
+ 'ctx',
24
+ 'appContext',
25
+ 'beanFactory',
26
+ ]);
27
+ export function springDynamicLookupCardinality(receiverName, methodName) {
28
+ const receiverSimpleName = receiverName.slice(receiverName.lastIndexOf('.') + 1);
29
+ if (!KNOWN_RECEIVERS.has(receiverSimpleName))
30
+ return null;
31
+ if (COLLECTION_LOOKUP_METHODS.has(methodName))
32
+ return 'collection';
33
+ if (SINGLE_LOOKUP_METHODS.has(methodName))
34
+ return 'single';
35
+ return null;
36
+ }
37
+ function visibleTypeDefinitions(fact, indexes) {
38
+ const simpleName = fact.targetTypeName.slice(fact.targetTypeName.lastIndexOf('.') + 1);
39
+ let scopeId = fact.ownerScopeId;
40
+ while (scopeId !== null) {
41
+ const visible = lookupBindingsAt(scopeId, simpleName, indexes)
42
+ .map(({ def }) => def)
43
+ .filter((def) => isClassLike(def.type))
44
+ .filter((def) => !fact.targetTypeName.includes('.') || def.qualifiedName === fact.targetTypeName);
45
+ if (visible.length > 0) {
46
+ const unique = new Map(visible.map((def) => [def.nodeId, def]));
47
+ return [...unique.values()];
48
+ }
49
+ scopeId = indexes.scopeTree.getScope(scopeId)?.parent ?? null;
50
+ }
51
+ return [];
52
+ }
53
+ function resolveTargetTypeName(graph, fact, callerLanguage, nodeLookup, indexes) {
54
+ const graphIds = new Set();
55
+ for (const definition of visibleTypeDefinitions(fact, indexes)) {
56
+ const graphId = resolveDefGraphId(definition.filePath, definition, nodeLookup);
57
+ if (graphId === undefined)
58
+ continue;
59
+ const node = graph.getNode(graphId);
60
+ if ((node?.label === 'Class' ||
61
+ node?.label === 'Interface' ||
62
+ node?.label === 'Record' ||
63
+ node?.label === 'Enum') &&
64
+ node.properties.language === callerLanguage) {
65
+ graphIds.add(graphId);
66
+ }
67
+ }
68
+ if (graphIds.size !== 1)
69
+ return undefined;
70
+ const targetId = graphIds.values().next().value;
71
+ if (targetId === undefined)
72
+ return undefined;
73
+ const target = graph.getNode(targetId);
74
+ if (target === undefined)
75
+ return undefined;
76
+ const qualifiedName = target.properties.qualifiedName;
77
+ return typeof qualifiedName === 'string' ? qualifiedName : target.properties.name;
78
+ }
79
+ /**
80
+ * Attach AST-captured programmatic Spring lookups to the framework-neutral DI
81
+ * resolver. Java/Kotlin own syntax capture; this shared JVM/Spring seam owns
82
+ * import-aware type binding and metadata attachment.
83
+ */
84
+ export function createSpringDynamicLookupMetadataAttacher(adapter) {
85
+ return (graph, parsedFiles, nodeLookup, indexes) => {
86
+ for (const parsed of parsedFiles) {
87
+ for (const fact of adapter.getFacts(parsed.filePath)) {
88
+ const cardinality = springDynamicLookupCardinality(fact.receiverName, fact.methodName);
89
+ if (cardinality === null)
90
+ continue;
91
+ const callerId = resolveCallerGraphId(fact.ownerScopeId, indexes, nodeLookup, {
92
+ startLine: fact.ownerRange.startLine,
93
+ startCol: fact.ownerRange.startCol,
94
+ });
95
+ if (callerId === undefined)
96
+ continue;
97
+ const caller = graph.getNode(callerId);
98
+ if (caller === undefined ||
99
+ (caller.label !== 'Function' &&
100
+ caller.label !== 'Method' &&
101
+ caller.label !== 'Constructor')) {
102
+ continue;
103
+ }
104
+ const targetTypeName = resolveTargetTypeName(graph, fact, caller.properties.language, nodeLookup, indexes);
105
+ if (targetTypeName === undefined)
106
+ continue;
107
+ const match = {
108
+ targetTypeName,
109
+ cardinality,
110
+ edgeSource: 'site',
111
+ reason: `Spring dynamic lookup: ${fact.receiverName}.${fact.methodName}(${fact.targetTypeName})`,
112
+ };
113
+ // Singular lookups intentionally use the shared DI selection policy:
114
+ // a unique/@Primary candidate wins; unresolved multiplicity is an
115
+ // explicit 0.5-confidence fan-out rather than a guessed runtime winner.
116
+ const existing = caller.properties[SPRING_DI_INJECTION_SITES_PROPERTY];
117
+ caller.properties[SPRING_DI_INJECTION_SITES_PROPERTY] = [
118
+ ...(Array.isArray(existing) ? existing : []),
119
+ match,
120
+ ];
121
+ }
122
+ }
123
+ };
124
+ }
@@ -0,0 +1,78 @@
1
+ import type { Range, ScopeId } from '../../../../_shared/index.js';
2
+ import type { SpringArgumentFact } from './argument-facts.js';
3
+ /**
4
+ * Outbound side of Spring messaging: the template calls that publish to a
5
+ * broker destination, mirroring the inbound `@KafkaListener` / `@RabbitListener`
6
+ * family already recognized in `non-http-handlers.ts`.
7
+ *
8
+ * Recognition is purely syntactic and happens while the language's own scope
9
+ * query already has the call node in hand. The receiver's declared type is NOT
10
+ * consulted: at capture time the field may be inherited, injected from another
11
+ * file, or typed through an import that is not finalized yet. Matching on the
12
+ * receiver's simple name instead keeps the capture cheap and resolver-free; a
13
+ * later phase that owns type information can refine or discard a fact.
14
+ */
15
+ export type SpringMessageProducerTemplate = 'kafka' | 'rabbit' | 'jms' | 'stream-bridge';
16
+ /**
17
+ * Cheap pre-filter usable before any receiver text is materialized. Both
18
+ * languages visit every member call, so the common case must cost one set
19
+ * lookup on the method name.
20
+ */
21
+ export declare function isSpringMessageProducerMethod(methodName: string): boolean;
22
+ /**
23
+ * Classify a `receiver.method(...)` call as a messaging producer, or `null`.
24
+ *
25
+ * `receiverName` is the receiver expression as written; only its last
26
+ * dot-separated segment participates, so `this.kafkaTemplate` and
27
+ * `outer.inner.kafkaTemplate` match while `templates.get("k")` does not.
28
+ *
29
+ * The PLAIN_IDENTIFIER gate runs BEFORE the fold and is load-bearing, because
30
+ * the last-dot split is textual: in `config.get("a.kafkaTemplate")` it yields
31
+ * `kafkaTemplate")`, which folds to something a name match would accept. Only
32
+ * an identifier survives the gate, which is also what rejects `templates["k"]`,
33
+ * `getTemplate()`, and a receiver whose dot is separated by a comment.
34
+ *
35
+ * The folded segment then matches case-insensitively when it CONTAINS the
36
+ * template type name, so every convention a template bean is really declared
37
+ * with is recognized — decorated by prefix (`orderKafkaTemplate`), by suffix
38
+ * (`kafkaTemplateDlq`, `kafkaTemplateV2`, `rabbitTemplate1`), or written as a
39
+ * constant (`KAFKA_TEMPLATE`, `STREAM_BRIDGE`). A suffix-only rule accepted
40
+ * one of those and silently dropped the rest, which are exactly the publishes
41
+ * this capture exists to find. A receiver named only `template` still does not
42
+ * match: without type information that would attribute any `send` in the
43
+ * repository to Kafka.
44
+ *
45
+ * The bare type name (`KafkaTemplate.send(...)`) contains itself and so is
46
+ * accepted. That is left as it is: the match is by NAME, a name equal to the
47
+ * type is the strongest evidence the rule has, and a later phase that owns type
48
+ * information can discard a static-looking receiver.
49
+ *
50
+ * A substring rule also lets ONE receiver satisfy TWO signatures, which a
51
+ * suffix rule could not: `KafkaTemplate` and `StreamBridge` both publish
52
+ * through `send`, and `RabbitTemplate` and `JmsTemplate` both through
53
+ * `convertAndSend`, so `streamBridgeKafkaTemplate.send(...)` matches two
54
+ * templates at once. Such a receiver yields NO fact. Nothing here can break the
55
+ * tie honestly: the receiver's TYPE is deliberately not resolved, and the name
56
+ * is not ranked evidence — neither the longest match, nor the last one, nor the
57
+ * order of this list says whether that bean is a KafkaTemplate fronted by a
58
+ * stream binding or a StreamBridge named after the broker behind it. Returning
59
+ * the first match published an arbitrary choice as a definite broker
60
+ * attribution, the one outcome a consumer cannot tell from a fact. Silence
61
+ * costs a rare publish and stays recoverable by a phase that owns types.
62
+ */
63
+ export declare function springMessageProducerTemplateOf(receiverName: string, methodName: string): SpringMessageProducerTemplate | null;
64
+ export interface SpringMessageProducerFact {
65
+ /** Callable that performs the publish; the enclosing method or function. */
66
+ readonly ownerScopeId: ScopeId;
67
+ readonly ownerRange: Range;
68
+ readonly template: SpringMessageProducerTemplate;
69
+ /** Receiver expression as written, for example `this.orderKafkaTemplate`. */
70
+ readonly receiverName: string;
71
+ readonly methodName: string;
72
+ /**
73
+ * Call arguments in source order, or absent when the call site has no
74
+ * argument list at all (a Kotlin trailing-lambda call). An empty array means
75
+ * an empty argument list was written — a different fact from no list.
76
+ */
77
+ readonly args?: readonly SpringArgumentFact[];
78
+ }
@@ -0,0 +1,90 @@
1
+ const PRODUCER_SIGNATURES = [
2
+ { template: 'kafka', typeName: 'KafkaTemplate', methodName: 'send' },
3
+ { template: 'rabbit', typeName: 'RabbitTemplate', methodName: 'convertAndSend' },
4
+ { template: 'jms', typeName: 'JmsTemplate', methodName: 'convertAndSend' },
5
+ { template: 'stream-bridge', typeName: 'StreamBridge', methodName: 'send' },
6
+ ];
7
+ const PRODUCER_METHOD_NAMES = new Set(PRODUCER_SIGNATURES.map((signature) => signature.methodName));
8
+ /** A receiver we can attribute; `templates["k"]` or `getTemplate()` cannot be. */
9
+ const PLAIN_IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
10
+ /**
11
+ * Fold a receiver's simple name to the form the type-name match runs against.
12
+ *
13
+ * `_` and `$` are word separators in the spellings this has to accept, not part
14
+ * of the words: `KAFKA_TEMPLATE` and `kafka_template` are the same bean name as
15
+ * `kafkaTemplate`, written to the constant and snake conventions. Digits stay,
16
+ * because they are part of a name (`kafkaTemplate2`), never a separator.
17
+ */
18
+ function foldReceiverName(receiverSimpleName) {
19
+ return receiverSimpleName.replace(/[_$]/g, '').toLowerCase();
20
+ }
21
+ /**
22
+ * Cheap pre-filter usable before any receiver text is materialized. Both
23
+ * languages visit every member call, so the common case must cost one set
24
+ * lookup on the method name.
25
+ */
26
+ export function isSpringMessageProducerMethod(methodName) {
27
+ return PRODUCER_METHOD_NAMES.has(methodName);
28
+ }
29
+ /**
30
+ * Classify a `receiver.method(...)` call as a messaging producer, or `null`.
31
+ *
32
+ * `receiverName` is the receiver expression as written; only its last
33
+ * dot-separated segment participates, so `this.kafkaTemplate` and
34
+ * `outer.inner.kafkaTemplate` match while `templates.get("k")` does not.
35
+ *
36
+ * The PLAIN_IDENTIFIER gate runs BEFORE the fold and is load-bearing, because
37
+ * the last-dot split is textual: in `config.get("a.kafkaTemplate")` it yields
38
+ * `kafkaTemplate")`, which folds to something a name match would accept. Only
39
+ * an identifier survives the gate, which is also what rejects `templates["k"]`,
40
+ * `getTemplate()`, and a receiver whose dot is separated by a comment.
41
+ *
42
+ * The folded segment then matches case-insensitively when it CONTAINS the
43
+ * template type name, so every convention a template bean is really declared
44
+ * with is recognized — decorated by prefix (`orderKafkaTemplate`), by suffix
45
+ * (`kafkaTemplateDlq`, `kafkaTemplateV2`, `rabbitTemplate1`), or written as a
46
+ * constant (`KAFKA_TEMPLATE`, `STREAM_BRIDGE`). A suffix-only rule accepted
47
+ * one of those and silently dropped the rest, which are exactly the publishes
48
+ * this capture exists to find. A receiver named only `template` still does not
49
+ * match: without type information that would attribute any `send` in the
50
+ * repository to Kafka.
51
+ *
52
+ * The bare type name (`KafkaTemplate.send(...)`) contains itself and so is
53
+ * accepted. That is left as it is: the match is by NAME, a name equal to the
54
+ * type is the strongest evidence the rule has, and a later phase that owns type
55
+ * information can discard a static-looking receiver.
56
+ *
57
+ * A substring rule also lets ONE receiver satisfy TWO signatures, which a
58
+ * suffix rule could not: `KafkaTemplate` and `StreamBridge` both publish
59
+ * through `send`, and `RabbitTemplate` and `JmsTemplate` both through
60
+ * `convertAndSend`, so `streamBridgeKafkaTemplate.send(...)` matches two
61
+ * templates at once. Such a receiver yields NO fact. Nothing here can break the
62
+ * tie honestly: the receiver's TYPE is deliberately not resolved, and the name
63
+ * is not ranked evidence — neither the longest match, nor the last one, nor the
64
+ * order of this list says whether that bean is a KafkaTemplate fronted by a
65
+ * stream binding or a StreamBridge named after the broker behind it. Returning
66
+ * the first match published an arbitrary choice as a definite broker
67
+ * attribution, the one outcome a consumer cannot tell from a fact. Silence
68
+ * costs a rare publish and stays recoverable by a phase that owns types.
69
+ */
70
+ export function springMessageProducerTemplateOf(receiverName, methodName) {
71
+ if (!isSpringMessageProducerMethod(methodName))
72
+ return null;
73
+ const receiverSimpleName = receiverName.slice(receiverName.lastIndexOf('.') + 1).trim();
74
+ if (!PLAIN_IDENTIFIER.test(receiverSimpleName))
75
+ return null;
76
+ const folded = foldReceiverName(receiverSimpleName);
77
+ let matched = null;
78
+ for (const signature of PRODUCER_SIGNATURES) {
79
+ if (signature.methodName !== methodName)
80
+ continue;
81
+ if (!folded.includes(signature.typeName.toLowerCase()))
82
+ continue;
83
+ // A second match makes the receiver ambiguous; see above for why it is not
84
+ // resolved by preferring one of them.
85
+ if (matched !== null)
86
+ return null;
87
+ matched = signature.template;
88
+ }
89
+ return matched;
90
+ }
@@ -2,12 +2,41 @@ import type { ParsedFile, Range, ScopeId } from '../../../../_shared/index.js';
2
2
  import type { KnowledgeGraph } from '../../../graph/types.js';
3
3
  import type { ScopeResolutionIndexes } from '../../model/scope-resolution-indexes.js';
4
4
  import type { GraphNodeLookup } from '../../scope-resolution/graph-bridge/node-lookup.js';
5
+ import type { SpringArgumentFact } from './argument-facts.js';
5
6
  export declare const SPRING_NON_HTTP_HANDLER_ENTRY_POINT_MULTIPLIER = 3;
6
7
  export type SpringNonHttpHandlerKind = 'scheduled' | 'event' | 'message' | 'xxl-job';
7
8
  export interface SpringNonHttpHandlerAnnotationFact {
8
9
  readonly name: string;
9
10
  /** Kotlin use-site targets describe generated/property elements, not the callable. */
10
11
  readonly useSiteTarget?: string;
12
+ /**
13
+ * Annotation arguments in source order. An empty array always means an empty
14
+ * list was written (`@Scheduled()`), which is a different fact from absence —
15
+ * but absence has TWO causes, and only one of them is a statement about the
16
+ * source. Either the annotation was written without an argument list
17
+ * (`@Scheduled`), or arguments were never read for this callable.
18
+ *
19
+ * They are read only for a callable that carries a handler annotation. Java
20
+ * produces facts for no other callable, so there absence does mean "no list
21
+ * was written". Kotlin also produces a fact for a merely annotated function —
22
+ * it captures those without a name prefilter so an import alias cannot hide a
23
+ * handler — and on those facts arguments are absent however the annotation
24
+ * was written.
25
+ *
26
+ * The values keep their source spelling, with one deliberate exception:
27
+ * `normalizeSpringFactText` trims them and collapses whitespace around the
28
+ * dots of a multi-line expression, so `Destinations.ORDERS` and the same
29
+ * reference wrapped across lines produce equal facts. Without that, source
30
+ * formatting — including the enclosing block's indentation, which is not a
31
+ * property of the expression at all — would leak into the data and make two
32
+ * spellings of one destination compare unequal downstream.
33
+ *
34
+ * Nothing else is touched. `@KafkaListener(topics = ...)` and
35
+ * `@RabbitListener(queues = ...)` name the destination differently, and a
36
+ * destination may be a literal, a constant reference, or a `${...}`
37
+ * placeholder; resolving any of those belongs to a later phase.
38
+ */
39
+ readonly args?: readonly SpringArgumentFact[];
11
40
  }
12
41
  export interface SpringNonHttpHandlerFact<Annotation extends SpringNonHttpHandlerAnnotationFact = SpringNonHttpHandlerAnnotationFact> {
13
42
  readonly ownerScopeId: ScopeId;
@@ -0,0 +1,7 @@
1
+ /** Return the configured vendor prefixes as a canonical, duplicate-free set. */
2
+ export declare function springVendorPrefixes(): ReadonlySet<string>;
3
+ /**
4
+ * Stable metadata value for the route semantics controlled by the prefix list.
5
+ * Sorting makes equivalent lists independent of declaration order.
6
+ */
7
+ export declare function springVendorPrefixesKey(): string;
@@ -0,0 +1,22 @@
1
+ const DEFAULT_SPRING_VENDOR_PREFIXES = 'Win';
2
+ let cachedRawValue;
3
+ let cachedPrefixes;
4
+ /** Return the configured vendor prefixes as a canonical, duplicate-free set. */
5
+ export function springVendorPrefixes() {
6
+ const rawValue = process.env.GITNEXUS_SPRING_VENDOR_PREFIXES ?? DEFAULT_SPRING_VENDOR_PREFIXES;
7
+ if (cachedPrefixes && cachedRawValue === rawValue)
8
+ return cachedPrefixes;
9
+ cachedRawValue = rawValue;
10
+ cachedPrefixes = new Set(rawValue
11
+ .split(',')
12
+ .map((prefix) => prefix.trim())
13
+ .filter(Boolean));
14
+ return cachedPrefixes;
15
+ }
16
+ /**
17
+ * Stable metadata value for the route semantics controlled by the prefix list.
18
+ * Sorting makes equivalent lists independent of declaration order.
19
+ */
20
+ export function springVendorPrefixesKey() {
21
+ return JSON.stringify([...springVendorPrefixes()].sort());
22
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Zig import resolution.
3
+ *
4
+ * Local-file imports (`@import("./foo.zig")`, `@import("foo.zig")`) resolve
5
+ * relative to the importer. Bare names (`@import("bar")`) resolve through
6
+ * build.zig.zon `.path` deps when a parsed ZigBuildZonConfig is available
7
+ * (see language-config.ts `loadZigBuildConfig`). Everything unresolvable —
8
+ * `std`, `builtin`, `root`, `.url`-based deps — returns an empty result so
9
+ * it doesn't produce ghost import edges.
10
+ */
11
+ import type { ImportResolutionConfig, ImportResolverStrategy } from '../types.js';
12
+ export declare const zigImportStrategy: ImportResolverStrategy;
13
+ export declare const zigImportConfig: ImportResolutionConfig;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Zig import resolution.
3
+ *
4
+ * Local-file imports (`@import("./foo.zig")`, `@import("foo.zig")`) resolve
5
+ * relative to the importer. Bare names (`@import("bar")`) resolve through
6
+ * build.zig.zon `.path` deps when a parsed ZigBuildZonConfig is available
7
+ * (see language-config.ts `loadZigBuildConfig`). Everything unresolvable —
8
+ * `std`, `builtin`, `root`, `.url`-based deps — returns an empty result so
9
+ * it doesn't produce ghost import edges.
10
+ */
11
+ import { SupportedLanguages } from '../../../../_shared/index.js';
12
+ import { resolveZigImportInternal } from '../zig.js';
13
+ const stripQuotes = (s) => s.replace(/^['"]|['"]$/g, '');
14
+ export const zigImportStrategy = (rawImportPath, filePath, ctx) => {
15
+ // tree-sitter-zig captures the string with surrounding quotes.
16
+ const stripped = stripQuotes(rawImportPath);
17
+ const resolved = resolveZigImportInternal(filePath, stripped, ctx.allFilePaths, ctx.configs.zigBuildZon ?? null);
18
+ // Unresolvable (stdlib / builtin / .url dep / missing file): stop the
19
+ // chain with an empty result rather than falling through to suffix
20
+ // matching, which could ghost-match an unrelated same-named file.
21
+ return { kind: 'files', files: resolved ? [resolved] : [] };
22
+ };
23
+ export const zigImportConfig = {
24
+ language: SupportedLanguages.Zig,
25
+ strategies: [zigImportStrategy],
26
+ };
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Zig module import resolution — internal helpers.
3
+ *
4
+ * Zig imports take three shapes:
5
+ * const std = @import("std"); → stdlib, unresolvable
6
+ * const builtin = @import("builtin"); → compiler builtin, unresolvable
7
+ * const root = @import("root"); → user's main module, unresolvable here
8
+ * const foo = @import("./foo.zig"); → relative path
9
+ * const foo = @import("foo.zig"); → also relative (Zig treats unprefixed
10
+ * paths with a `.zig` extension as
11
+ * filesystem-relative to the importer)
12
+ * const lp = @import("lightpanda"); → the repo's OWN module, declared by
13
+ * its root build.zig (`b.addModule`)
14
+ * const bar = @import("bar"); → package dep declared in build.zig.zon
15
+ *
16
+ * Bare-name resolution is handled when a parsed ZigBuildZonConfig is
17
+ * supplied (see `loadZigBuildConfig`). The import table of the build module
18
+ * the importer belongs to comes first (`buildModules` — per-module
19
+ * `addImport` aliases, see `zigModulesContaining`), then the root
20
+ * build.zig's named modules flattened repo-wide (`rootModules`, name → root
21
+ * file — a repo with no build.zig.zon still resolves them). `.url`-based deps unpack into a build cache outside
22
+ * the repo and so are returned as null; `.path`-based deps are resolved
23
+ * through the root the dep's own build.zig declares, then the conventional
24
+ * `<dep_root>/src/root.zig`, `<dep_root>/src/<name>.zig`,
25
+ * `<dep_root>/src/main.zig` layouts.
26
+ */
27
+ import { type ZigBuildZonConfig } from '../language-config.js';
28
+ /** Resolve a Zig @import argument to a file path in the repository.
29
+ * Returns null when the import is a stdlib / builtin / root reference,
30
+ * an unresolvable build.zig.zon package dep, or genuinely unresolvable.
31
+ *
32
+ * `buildZon` (optional) supplies the parsed `.dependencies` map from
33
+ * build.zig.zon. */
34
+ export declare function resolveZigImportInternal(currentFile: string, importPath: string, allFiles: ReadonlySet<string>, buildZon?: ZigBuildZonConfig | null): string | null;