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,539 @@
1
+ import type { SpringArgumentFact } from './argument-facts.js';
2
+ import type { SpringMessageProducerTemplate } from './message-producers.js';
3
+ /**
4
+ * Resolution of Spring async messaging DESTINATIONS — the broker address a
5
+ * `@KafkaListener` reads from or a `kafkaTemplate.send(...)` writes to.
6
+ *
7
+ * The capture layer records the destination argument exactly as written and
8
+ * resolves nothing (see `argument-facts.ts`). This module is the other half:
9
+ * it decides WHICH argument names the destination, then walks a four-step
10
+ * cascade to turn that argument's source text into an address. It is pure —
11
+ * no graph, no filesystem, no parser — so every rule below is unit-testable
12
+ * against a string, and `pipeline-phases/spring-destinations.ts` is left with
13
+ * only node and edge emission.
14
+ *
15
+ * ── THE INVARIANT THIS MODULE EXISTS TO PROTECT ──────────────────────────
16
+ *
17
+ * An address that could NOT be resolved must never become a shared identity.
18
+ * Two unrelated services that each merely write
19
+ *
20
+ * @KafkaListener(topics = "${app.topic}")
21
+ *
22
+ * have said nothing about each other. If the graph keyed a destination node on
23
+ * that placeholder text, they would land on one node and READ AS CONNECTED —
24
+ * and a false edge is worse than a missing one, because a missing edge is
25
+ * visible as a gap while a false one enters reports as a fact.
26
+ *
27
+ * So this module never returns a placeholder, a constant name, or any other
28
+ * unresolved spelling as an `address`. An unresolved candidate comes back as
29
+ * `{ kind: 'unresolved', reason }` with no address at all, and the phase keys
30
+ * such a node by its SOURCE LOCATION. A status flag would not have been
31
+ * enough: the two services would still share whatever key the node was minted
32
+ * from. Only withholding the key prevents the join.
33
+ *
34
+ * ── REFUSAL IS DATA ──────────────────────────────────────────────────────
35
+ *
36
+ * Every path that declines to produce an address records WHY, from a closed
37
+ * set ({@link SpringDestinationRefusal}). The measure of this feature is the
38
+ * unresolved fraction, so a silent `continue` would hide precisely the number
39
+ * that says whether it works.
40
+ */
41
+ /**
42
+ * Broker family behind a destination, as far as the syntax can attest.
43
+ *
44
+ * Part of the `Destination` node IDENTITY, not merely a label on it: the phase
45
+ * keys a resolved node by `(broker, address)` via the framework-neutral
46
+ * `ingestion/destination-key.ts`, so two brokers claiming one address are two
47
+ * ordinary nodes. Adding or renaming a member here therefore re-keys every node
48
+ * it applies to, which a full re-index absorbs and an incremental one does not
49
+ * — the destination layer is delete-alled and rebuilt graph-wide on every
50
+ * incremental writeback for exactly this class of reason.
51
+ *
52
+ * A member is only added when the SYNTAX attests to it. A guess here becomes a
53
+ * guess in the identity, and the cost of a wrong one is a real pair split in
54
+ * two (see `destinationNodeKey` for why that cost is nonetheless the cheaper
55
+ * of the two failures available).
56
+ */
57
+ export type SpringDestinationBroker = 'kafka' | 'rabbit' | 'jms' | 'pulsar' | 'sqs' | 'stream' | 'integration';
58
+ /**
59
+ * Why a candidate produced no address. Closed set: each member is a distinct,
60
+ * countable diagnosis, and no path may decline without naming one.
61
+ *
62
+ * Members are split rather than merged wherever the two causes are different
63
+ * FACTS about the repository. The unresolved fraction is only useful if its
64
+ * breakdown says what to go and fix, and a bucket that means "either the
65
+ * capture could not read this or the source really did write it that way"
66
+ * answers neither question.
67
+ */
68
+ export type SpringDestinationRefusal =
69
+ /** The annotation is a recognized listener but its arguments were never read
70
+ * — a CAPTURE limitation, not a statement about the source. */
71
+ 'annotation-arguments-unavailable'
72
+ /** The annotation's argument list was read and it was EMPTY: `@KafkaListener`
73
+ * with no elements at all. A real source-level gap, and deliberately not the
74
+ * same bucket as `annotation-arguments-unavailable` — see
75
+ * `SpringNonHttpHandlerAnnotationFact.args`, which keeps absent and `[]`
76
+ * apart precisely so a consumer of the fact does not have to guess. */
77
+ | 'annotation-arguments-empty'
78
+ /** Recognized listener, argument list present, no element names a destination. */
79
+ | 'no-destination-argument'
80
+ /** `@KafkaListeners({@KafkaListener(...), ...})` and its siblings. The
81
+ * container's single argument is a list of NESTED annotations, and capture
82
+ * does not descend into them, so their destinations are unreadable here.
83
+ * Recorded rather than skipped: a repository using repeated-listener
84
+ * containers loses real destinations, and that has to show up in the count
85
+ * instead of looking like a repository with no listeners. */
86
+ | 'repeated-listener-container'
87
+ /** `@KafkaListener(topicPattern = ...)` — a regex over topics, not an address. */
88
+ | 'topic-pattern'
89
+ /** A destination form this module deliberately does not read, e.g.
90
+ * `@RabbitListener(bindings = @QueueBinding(...))` or `topicPartitions`. */
91
+ | 'unsupported-annotation-argument'
92
+ /** A Kotlin trailing-lambda call: the publish has no argument list at all. */
93
+ | 'producer-arguments-unavailable'
94
+ /** The call's arity matches none of the overloads that carry a destination. */
95
+ | 'producer-arity-unrecognized'
96
+ /** The call used NAMED arguments and none of them names a destination
97
+ * parameter this module knows. Selecting by position instead would read
98
+ * whatever the author happened to write first — see
99
+ * {@link selectProducerDestinationArguments}. */
100
+ | 'producer-named-argument-unrecognized'
101
+ /** `rabbitTemplate.convertAndSend(message)` — default exchange, empty routing
102
+ * key. There is no address in the source to record. */
103
+ | 'rabbit-default-exchange'
104
+ /** The argument in the destination position is not shaped like an address
105
+ * (not a string literal, not a constant reference) — most often because the
106
+ * overload actually taken has the payload there. */
107
+ | 'producer-argument-not-address-shaped'
108
+ /** Two overloads fit the call, they disagree about which slot is the address,
109
+ * and the argument is spelled the same way under both readings. The
110
+ * archetype is `convertAndSend("orders.rk", "body", correlationData)`: it is
111
+ * `(exchange, routingKey, message)` with the address `"body"`, or
112
+ * `(routingKey, message, correlationData)` with the address `"orders.rk"`
113
+ * and `"body"` as a String PAYLOAD. Both are real overloads spelled
114
+ * (String, String, ref).
115
+ *
116
+ * Distinct from `producer-argument-not-address-shaped`, which says the slot
117
+ * cannot hold an address at all. This one says it can, twice, and the module
118
+ * will not pick — a payload published as an address joins a consumer of a
119
+ * queue that happens to be named after the payload's text. */
120
+ | 'ambiguous-producer-overload'
121
+ /** `topics = {}` / `topics = []` / `arrayOf()`. */
122
+ | 'empty-destination-list'
123
+ /** The element is an expression this module will not evaluate — a
124
+ * concatenation, a call, a ternary. */
125
+ | 'not-a-literal-or-constant'
126
+ /** A constant reference no constant resolver could fold to a string. */
127
+ | 'unresolved-constant'
128
+ /** `#{...}` — a SpEL expression, evaluated by the container against beans and
129
+ * the environment at RUNTIME. `#{@kafkaProps.ordersTopic}` is the archetypal
130
+ * unresolvable address: nothing in the source says what it evaluates to, and
131
+ * two services that merely wrote the same expression have said nothing about
132
+ * each other. */
133
+ | 'spel-expression'
134
+ /** An unescaped `$` interpolation in a language whose string literals
135
+ * interpolate. In Kotlin `"orders-$env"` and `"orders-${env}"` are STRING
136
+ * TEMPLATES evaluated at runtime, not addresses and not Spring placeholders
137
+ * — the escaped `"\${app.topic}"` is how a Spring placeholder has to be
138
+ * written there. Java does not interpolate, so `$` is an ordinary character
139
+ * and this never fires for it. */
140
+ | 'unescaped-interpolation'
141
+ /** `${key}` with no default. The KEY is recorded; the VALUE is deliberately
142
+ * absent from the graph (config values may hold credentials — see the header
143
+ * of `pipeline-phases/spring-config.ts`), so this can never resolve here. */
144
+ | 'unresolved-config-key'
145
+ /** `${key:default}`. The default IS written in the source, and it is kept on
146
+ * the node — but it is not an IDENTITY. It holds only while the key is not
147
+ * overridden in configuration, and configuration VALUES are deliberately
148
+ * absent from this graph, so the code cannot know whether it holds. Keying
149
+ * on it merges every service that copy-pasted the same fallback: `${a:events}`
150
+ * and `${b:events}` are two different addresses that happen to share a
151
+ * default. Both the key and the default text survive as properties, so the
152
+ * case stays countable and distinguishable from a bare `${key}`. */
153
+ | 'overridable-config-default'
154
+ /** `${}` — a placeholder that names no key. There is nothing to record and
155
+ * nothing to look up; kept separate so an empty key never reaches the
156
+ * `Property` lookup as if it were a real one. */
157
+ | 'empty-config-key'
158
+ /** A string literal that is empty or nothing but whitespace. An empty address
159
+ * addresses nothing, and letting it through would give every such site one
160
+ * shared `''` identity — the same false join the placeholder rule prevents. */
161
+ | 'empty-literal-address'
162
+ /** A constant reference that folded to an empty or whitespace-only string.
163
+ * Same outcome as `empty-literal-address`, different repository fact: there
164
+ * the source wrote `""`, here a constant declaration did. */
165
+ | 'empty-constant-address';
166
+ /**
167
+ * How an address was arrived at, kept on the node for provenance.
168
+ *
169
+ * There is deliberately no `config-default` member. A `${key:default}` does not
170
+ * resolve — see `overridable-config-default` — so no address can be reached
171
+ * that way.
172
+ */
173
+ export type SpringDestinationVia = 'literal' | 'constant' | 'specification';
174
+ export type SpringDestinationRole = 'consumer' | 'producer';
175
+ /**
176
+ * One argument element that has been ACCEPTED as naming a destination, before
177
+ * any attempt to resolve it. An array-valued argument yields one candidate per
178
+ * element: `topics = ["a", "b"]` really is two destinations, and each gets its
179
+ * own node and its own edge (see the phase for why no group node is minted).
180
+ */
181
+ export interface SpringDestinationCandidate {
182
+ readonly role: SpringDestinationRole;
183
+ /** Annotation simple name (`KafkaListener`) or producer template (`kafka`). */
184
+ readonly source: string;
185
+ readonly broker: SpringDestinationBroker;
186
+ /** Index of the argument this element came from, in source order. */
187
+ readonly argIndex: number;
188
+ /** Argument name when the call/annotation named it (`topics`, `queues`). */
189
+ readonly argName?: string;
190
+ /** Index within an array-valued argument; `0` for a scalar. */
191
+ readonly elementIndex: number;
192
+ /** The element's source text, exactly as captured. */
193
+ readonly rawText: string;
194
+ /** Companion provenance that is not itself an address — currently only the
195
+ * Rabbit exchange that accompanies a routing key. */
196
+ readonly exchange?: string;
197
+ }
198
+ /** A candidate that was declined before resolution was even attempted. */
199
+ export interface SpringDestinationRefusalRecord {
200
+ readonly role: SpringDestinationRole;
201
+ readonly source: string;
202
+ readonly broker: SpringDestinationBroker;
203
+ readonly reason: SpringDestinationRefusal;
204
+ /** Source text that provoked the refusal, when there was one. */
205
+ readonly rawText?: string;
206
+ readonly argIndex?: number;
207
+ readonly argName?: string;
208
+ }
209
+ export interface SpringDestinationSelection {
210
+ readonly candidates: readonly SpringDestinationCandidate[];
211
+ readonly refusals: readonly SpringDestinationRefusalRecord[];
212
+ }
213
+ export type SpringDestinationResolution = {
214
+ readonly kind: 'resolved';
215
+ readonly address: string;
216
+ readonly via: SpringDestinationVia;
217
+ } | {
218
+ readonly kind: 'unresolved';
219
+ readonly reason: SpringDestinationRefusal;
220
+ /** Configuration key named by an unresolvable `${...}` placeholder. Lets
221
+ * the phase link the node to the `Property` nodes for that key without
222
+ * ever learning the key's value. */
223
+ readonly configKey?: string;
224
+ /** Default text of a `${key:default}`, exactly as the source wrote it.
225
+ * Kept as PROVENANCE only — it is never an address and never a key, for
226
+ * the reason `overridable-config-default` gives. */
227
+ readonly configDefault?: string;
228
+ };
229
+ /**
230
+ * The cascade's pluggable steps plus the one language capability it needs.
231
+ *
232
+ * The steps are supplied by the phase, which owns the language-specific
233
+ * machinery; keeping them as callbacks is what lets this module stay
234
+ * language-neutral and testable with a plain map.
235
+ */
236
+ export interface SpringDestinationResolvers {
237
+ /**
238
+ * Whether the owning language INTERPOLATES string literals — Kotlin does,
239
+ * Java does not. A capability, deliberately not a language name: shared
240
+ * ingestion code may not branch on a language (see AGENTS.md), and the
241
+ * capability is also the thing that actually matters. Supplied alongside
242
+ * `getSpringMessagingFacts` by the provider and threaded in by the phase.
243
+ *
244
+ * When true, an unescaped `$` inside a literal is a runtime template and the
245
+ * candidate is refused. When false (the default) `$` is an ordinary
246
+ * character and `"${app.topic}"` is a Spring placeholder.
247
+ */
248
+ readonly interpolatesStringLiterals?: boolean;
249
+ /**
250
+ * Step 2 — fold a constant reference (`Topics.ORDERS`, `ORDERS`) to its
251
+ * string value, or `null` when it cannot be folded. Backed by
252
+ * `resolveJavaConstant` / `resolveKotlinConstant`.
253
+ */
254
+ readonly constant?: (name: string) => string | null;
255
+ /**
256
+ * Step 4 — SEAM, DELIBERATELY NOT IMPLEMENTED.
257
+ *
258
+ * Some destinations are named nowhere in the source: the address lives in a
259
+ * published API specification (AsyncAPI / springwolf) that the service
260
+ * generates, and the code only names a binding. Resolving those means reading
261
+ * an artifact that is not a source file, deciding which specification belongs
262
+ * to which module, and trusting a generated document — a different problem
263
+ * from the three syntactic steps above, with a different failure mode.
264
+ *
265
+ * The hook exists so that work has a defined place to land and so the cascade
266
+ * order is fixed now rather than renegotiated later. Nothing supplies it
267
+ * today, so step 4 is a no-op and such destinations stay unresolved with the
268
+ * reason the earlier step recorded.
269
+ *
270
+ * ── STILL UNSUPPLIED, AND NOW FOR A REASON RATHER THAN FOR WANT OF A READER ──
271
+ *
272
+ * `core/ingestion/asyncapi/document.ts` reads AsyncAPI 3.x documents, and
273
+ * `pipeline-phases/spring-destinations.ts` emits what they state as
274
+ * destinations of their own. It does NOT feed this hook, and the gap is a
275
+ * decision:
276
+ *
277
+ * A document names addresses; it does not name the method that uses one. To
278
+ * hand an address to THIS candidate, something has to choose which of the
279
+ * document's operations belongs to it. Partitioning by (broker, action) is
280
+ * the only division both sides agree on, and it is a weak one: a service with
281
+ * several listeners on one broker puts them all in one bucket. Any bucket
282
+ * holding more than one operation forces a heuristic, and a wrong heuristic
283
+ * puts a REAL address on a joining node under the wrong site — a false
284
+ * connection wearing the clothes of a resolved one, which is the exact
285
+ * outcome this module's keying rule exists to prevent. Only a bucket of size
286
+ * one is a fact rather than a guess.
287
+ *
288
+ * Two things would change that, and neither is a heuristic: a document whose
289
+ * operations carry the implementing symbol, or a configuration source that
290
+ * answers the `${key}` this candidate already recorded. The second is the
291
+ * stronger of the two — a key-to-value lookup is exact where a document match
292
+ * is a guess — and it wants its own resolver rather than this one, because
293
+ * what it needs is the placeholder key, not the candidate.
294
+ */
295
+ readonly specification?: (candidate: SpringDestinationCandidate) => string | null;
296
+ }
297
+ /**
298
+ * Choose the destination-bearing arguments of one listener annotation.
299
+ *
300
+ * Returns `null` when the annotation is not a broker listener at all — that is
301
+ * not a refusal, there was nothing to refuse. A recognized annotation always
302
+ * returns a selection, even when every path in it declined, so the caller can
303
+ * count what was seen against what resolved.
304
+ */
305
+ export declare function selectConsumerDestinationArguments(annotationName: string, args: readonly SpringArgumentFact[] | undefined): SpringDestinationSelection | null;
306
+ /**
307
+ * Choose the destination-bearing arguments of one messaging-template publish.
308
+ *
309
+ * A NAME beats a position, arity decides where it can decide, and shape decides
310
+ * where it cannot.
311
+ *
312
+ * When any argument is passed by name, {@link PRODUCER_DESTINATION_PARAMETERS}
313
+ * decides — position is not consulted at all, because a named argument list
314
+ * need not be in parameter order. When the slot this module would have read
315
+ * positionally is itself named with something it does not recognize, that is a
316
+ * contradiction and the publish is refused rather than read.
317
+ *
318
+ * `KafkaTemplate.send` and `StreamBridge.send` put the destination first in
319
+ * every multi-argument positional overload they have, so once such a call has
320
+ * two or more arguments its slot 0 is the destination and nothing further needs
321
+ * deciding. Those slots use the PERMISSIVE gate ({@link isAddressShaped}): a
322
+ * bare identifier is let through to the cascade, which refuses it by name if no
323
+ * constant folds. That keeps `unresolved-constant` — a thing we tried to
324
+ * resolve — distinct from `producer-argument-not-address-shaped`, a thing we
325
+ * declined to read at all.
326
+ *
327
+ * The `convertAndSend` families are different. Both admit trailing
328
+ * `MessagePostProcessor` and `CorrelationData` parameters, and arity does not
329
+ * separate the overloads in EITHER direction:
330
+ *
331
+ * jms (destination, message) 2 vs (message, postProcessor) 2
332
+ * rabbit (routingKey, message) 2 vs (message, postProcessor) 2
333
+ * rabbit (exchange, routingKey, message) 3 vs (routingKey, message, pp) 3
334
+ * vs (routingKey, message, correlation) 3
335
+ * rabbit (exchange, routingKey, message, pp) 4 vs (routingKey, message, pp, corr) 4
336
+ *
337
+ * So the tie is broken by the STRICT gate ({@link isConfidentAddressShape}) — a
338
+ * string literal, a qualified reference, or a screaming-snake constant, all of
339
+ * which a payload variable is not. A lowercase bare identifier is NOT confident
340
+ * evidence, so `convertAndSend(topic, payload)` is refused rather than read:
341
+ * the same spelling is how a payload variable looks, and nothing in the syntax
342
+ * separates them. That refusal is the deliberate cost. A refusal is counted and
343
+ * recoverable; a wrong address enters reports as a fact.
344
+ *
345
+ * There is NO positional fallback at rabbit arity 3+. An earlier revision fell
346
+ * back to accepting slot 0 when slot 1 was not confident, which turned the
347
+ * ordinary `convertAndSend(EXCHANGE, routingKey, event)` — routing key in a
348
+ * variable — into a destination whose address was the EXCHANGE NAME. That is
349
+ * the worst possible outcome: an address that looks entirely plausible and can
350
+ * join a `@RabbitListener(queues = "orders")` that has nothing to do with it.
351
+ *
352
+ * ── THE ONE AMBIGUITY, REFUSED RATHER THAN GUESSED ───────────────────────
353
+ *
354
+ * `convertAndSend("orders.rk", "body", correlationData)` fits two overloads at
355
+ * once and they disagree about which slot is the address:
356
+ *
357
+ * (exchange, routingKey, message) → the address is `"body"`
358
+ * (routingKey, message, correlationData) → the address is `"orders.rk"`
359
+ *
360
+ * Both are real, both are spelled (String, String, ref), and no rule over the
361
+ * syntax separates them. Picking either one publishes the OTHER reading's
362
+ * payload as an address, where a consumer of a queue named after that text
363
+ * joins a publisher that never wrote to it. So neither is picked: the call is
364
+ * refused as `ambiguous-producer-overload` and yields no candidate and no edge.
365
+ *
366
+ * The refusal is narrow on purpose, because over-refusing here costs the
367
+ * ordinary case, and a suppression that eats correct results is the more
368
+ * expensive mistake. It fires ONLY on a STRING LITERAL in slot 1, at the
369
+ * arities where a competing overload exists:
370
+ *
371
+ * - A literal is no evidence at all. An address and a payload are BOTH
372
+ * ordinarily written as literals, so the spelling distinguishes nothing.
373
+ * - A CONSTANT or QUALIFIED reference is evidence, which is the whole premise
374
+ * of {@link isConfidentAddressShape}: `ORDERS_ROUTING_KEY` and
375
+ * `Topics.ORDERS_KEY` are how a configured NAME is written, not how a
376
+ * payload computed at the call site is. Those keep resolving.
377
+ * - Arity 5 has no competing overload at all —
378
+ * `(exchange, routingKey, message, pp, correlationData)` is the only
379
+ * five-argument form — so slot 1 there is the routing key whatever it is
380
+ * spelled like, and the refusal must not reach it.
381
+ * - A NAMED argument settles the reading outright, and the name-beats-position
382
+ * pre-pass above has already returned by then.
383
+ */
384
+ export declare function selectProducerDestinationArguments(fact: {
385
+ readonly template: SpringMessageProducerTemplate;
386
+ readonly methodName: string;
387
+ readonly args?: readonly SpringArgumentFact[];
388
+ }): SpringDestinationSelection;
389
+ /**
390
+ * Split an array-valued destination argument into its elements.
391
+ *
392
+ * Both languages hand this module ONE unsplit string per argument: capture
393
+ * records an argument's source text, and `topics = {"a", "b"}` is a single
394
+ * argument whose text happens to be a list. So the list is parsed here, in the
395
+ * three spellings the two languages use — Java `{…}`, Kotlin `[…]`, and Kotlin
396
+ * `arrayOf(…)`.
397
+ *
398
+ * Anything else comes back as a single element, unchanged: a scalar argument,
399
+ * and equally an expression that merely starts with a brace. The split tracks
400
+ * nesting and string literals, so a comma inside a literal or inside a nested
401
+ * call does not split the list.
402
+ *
403
+ * Returns `[]` for an empty list, which the caller must distinguish from a
404
+ * one-element list — `topics = {}` names no destination at all.
405
+ */
406
+ export declare function splitSpringDestinationList(text: string): readonly string[];
407
+ /**
408
+ * Unquote a string literal to its value, or `null` when the text is not a
409
+ * single literal.
410
+ *
411
+ * Escapes are undone only for the sequences that can appear inside a
412
+ * destination: `\"`, `\\`, and Kotlin's `\$`. That last one matters more than it
413
+ * looks — a Spring placeholder written in Kotlin MUST escape the dollar
414
+ * (`"\${app.topic}"`) or the compiler reads it as a string template, so without
415
+ * undoing it every Kotlin placeholder would fail the `${` test below and be
416
+ * misfiled as a plain literal address named `\${app.topic}`.
417
+ *
418
+ * The unescaping is also why {@link hasUnescapedStringInterpolation} has to run
419
+ * against the RAW text: once `\$` has become `$`, the escaped placeholder and
420
+ * the runtime template are the same string.
421
+ */
422
+ export declare function parseSpringStringLiteral(text: string): string | null;
423
+ /**
424
+ * Whether a string literal contains an UNESCAPED interpolation, for a language
425
+ * whose literals interpolate.
426
+ *
427
+ * Only meaningful for such a language; Java never calls it. In Kotlin:
428
+ *
429
+ * "orders-$env" template — the value is decided at runtime
430
+ * "orders-${env}" template — NOT a Spring placeholder
431
+ * "\${app.topic}" escaped — this is how a Spring placeholder is written
432
+ * """orders-$env""" template — raw strings interpolate and cannot escape
433
+ *
434
+ * Reads the RAW literal text on purpose: {@link parseSpringStringLiteral}
435
+ * resolves `\$` to `$`, after which the second and third rows above are the
436
+ * same string and the distinction is gone. A raw (`"""`) literal has no
437
+ * backslash escapes at all — `${'$'}` is the only way to write a dollar there —
438
+ * so every `$` in one is an interpolation.
439
+ */
440
+ export declare function hasUnescapedStringInterpolation(text: string): boolean;
441
+ /**
442
+ * PERMISSIVE gate — true when the text could name an address: a string literal,
443
+ * or any reference a constant resolver could plausibly fold. Says nothing about
444
+ * whether that reference actually resolves; the cascade decides that and
445
+ * records `unresolved-constant` when it does not.
446
+ *
447
+ * Used where the overload set already fixes which slot holds the destination.
448
+ */
449
+ export declare function isAddressShaped(text: string): boolean;
450
+ /**
451
+ * STRICT gate — true only when the spelling is confident evidence of an
452
+ * address, not merely compatible with one.
453
+ *
454
+ * The difference from {@link isAddressShaped} is the lowercase bare identifier.
455
+ * `convertAndSend(topic, payload)` and `convertAndSend(message, processor)` are
456
+ * the same syntax; only a human reading the names can tell which slot is the
457
+ * destination, and a name is not something this module is willing to rank as
458
+ * evidence. So a bare `topic` fails here and the publish is refused, while
459
+ * `"orders"`, `Topics.ORDERS` and `ORDERS_TOPIC` pass.
460
+ *
461
+ * Used ONLY at the arities where a trailing `MessagePostProcessor` overload
462
+ * collides with the destination-carrying one. Everywhere else the permissive
463
+ * gate applies, so this stricter rule costs nothing outside the ambiguity.
464
+ */
465
+ export declare function isConfidentAddressShape(text: string): boolean;
466
+ export interface SpringPlaceholderResult {
467
+ /** True when the text contained no `${…}` at all. */
468
+ readonly plain: boolean;
469
+ /** Key of the FIRST placeholder, in source order. Present whenever `plain`
470
+ * is false; the empty string when the placeholder named no key (`${}`). */
471
+ readonly key?: string;
472
+ /** Default text of that placeholder, exactly as written, when it had one.
473
+ * Absent for a bare `${key}`. The empty string for `${key:}`, which is a
474
+ * default that was written and is empty. */
475
+ readonly defaultValue?: string;
476
+ }
477
+ /**
478
+ * Read the FIRST Spring property placeholder out of an already-unquoted value.
479
+ *
480
+ * NOTHING IS SUBSTITUTED, and that is the rule, not an omission.
481
+ *
482
+ * `${key}` cannot resolve: the value lives in a configuration file this index
483
+ * deliberately does not read into the graph (values may hold credentials — see
484
+ * `pipeline-phases/spring-config.ts`). The KEY comes back instead, so the
485
+ * caller can link the node to the `Property` nodes for that key without ever
486
+ * learning its value.
487
+ *
488
+ * `${key:default}` cannot resolve EITHER, which is a correction to this
489
+ * module's original rule. The default is written in the source, so reading it
490
+ * is legitimate and it is returned — but it is provenance, never an identity.
491
+ * A default holds only while the key is not overridden, and whether it is
492
+ * overridden is a fact about configuration VALUES, which are absent from this
493
+ * graph by design. Substituting it made `${a.topic:events}` and
494
+ * `${b.topic:events}` one node and reported a producer/consumer pair between
495
+ * two services that shared nothing but a copy-pasted fallback. The same
496
+ * reasoning applies to any placeholder-derived value: a value the configuration
497
+ * can override is not an identity.
498
+ *
499
+ * Only the first placeholder is read because there is nothing to do with the
500
+ * rest — the value is already unresolvable, and the first key is the one a
501
+ * reader would look up. A nested default (`${a:${b}}`) needs no special case
502
+ * under this rule: `a` is the key and `${b}` is the default text, both reported
503
+ * as written.
504
+ */
505
+ export declare function resolveSpringPlaceholders(value: string): SpringPlaceholderResult;
506
+ /**
507
+ * Resolve one candidate to an address, or to a named refusal.
508
+ *
509
+ * Four steps, in this order, each of which may decline:
510
+ *
511
+ * 1. literal — `"orders.v1"`, including one element of an array form.
512
+ * 2. constant — `Topics.ORDERS`, through the supplied constant resolver.
513
+ * 3. configuration — neither `${app.topic}` nor `${app.topic:orders}`
514
+ * resolves; the key, and the default text when there is
515
+ * one, are reported instead.
516
+ * 4. specification — the deferred seam; see {@link SpringDestinationResolvers}.
517
+ *
518
+ * Steps 1 and 2 both feed step 3: a literal may be a placeholder, and so may
519
+ * the value a constant folds to (`static final String TOPIC = "${app.topic}"`
520
+ * is an ordinary way to write one). Skipping step 3 after step 2 would file
521
+ * that constant's placeholder text as a resolved address — the exact false
522
+ * identity this module exists to prevent, arrived at one step later.
523
+ *
524
+ * Two classes of text are rejected BEFORE step 3, because they are not
525
+ * addresses in any configuration: a SpEL expression, which the container
526
+ * evaluates against live beans, and an unescaped string-template interpolation
527
+ * in a language that interpolates. Order matters between them and the
528
+ * placeholder rule — `"#{'${app.topics}'.split(',')}"` contains a `${` and
529
+ * would otherwise be filed under a configuration key that is not really what
530
+ * it is.
531
+ *
532
+ * WHITESPACE. An address is kept exactly as the source wrote it, `" orders "`
533
+ * included, so `" orders "` is its own node and does not join `"orders"`. That
534
+ * is a missing connection rather than a false one, which is the trade this
535
+ * module makes everywhere. The emptiness test below trims, because a
536
+ * whitespace-only address addresses nothing — the two rules disagree on
537
+ * purpose, and this is the statement of it.
538
+ */
539
+ export declare function resolveSpringDestination(candidate: SpringDestinationCandidate, resolvers?: SpringDestinationResolvers): SpringDestinationResolution;