gitnexus 1.6.10-rc.99 → 1.6.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (775) hide show
  1. package/README.md +177 -18
  2. package/dist/_shared/graph/types.d.ts +21 -2
  3. package/dist/_shared/graph/types.d.ts.map +1 -1
  4. package/dist/_shared/index.d.ts +3 -3
  5. package/dist/_shared/index.d.ts.map +1 -1
  6. package/dist/_shared/index.js +1 -1
  7. package/dist/_shared/index.js.map +1 -1
  8. package/dist/_shared/integrations/circuit-breaker.d.ts.map +1 -1
  9. package/dist/_shared/integrations/circuit-breaker.js.map +1 -1
  10. package/dist/_shared/integrations/resilient-fetch.d.ts +16 -0
  11. package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
  12. package/dist/_shared/integrations/resilient-fetch.js +19 -7
  13. package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
  14. package/dist/_shared/language-detection.d.ts.map +1 -1
  15. package/dist/_shared/lbug/schema-constants.d.ts +2 -2
  16. package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
  17. package/dist/_shared/lbug/schema-constants.js +3 -0
  18. package/dist/_shared/lbug/schema-constants.js.map +1 -1
  19. package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
  20. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +5 -0
  21. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
  22. package/dist/_shared/scope-resolution/finalize-algorithm.js +315 -36
  23. package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
  24. package/dist/_shared/scope-resolution/reference-site.d.ts +115 -0
  25. package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
  26. package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
  27. package/dist/_shared/scope-resolution/registries/lookup-core.d.ts.map +1 -1
  28. package/dist/_shared/scope-resolution/registries/lookup-core.js +58 -2
  29. package/dist/_shared/scope-resolution/registries/lookup-core.js.map +1 -1
  30. package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -1
  31. package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -1
  32. package/dist/_shared/scope-resolution/scope-tree.js.map +1 -1
  33. package/dist/_shared/scope-resolution/symbol-definition.d.ts +47 -0
  34. package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
  35. package/dist/_shared/scope-resolution/types.d.ts +278 -3
  36. package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
  37. package/dist/cli/ai-context.d.ts +3 -2
  38. package/dist/cli/ai-context.js +71 -16
  39. package/dist/cli/analyze-config.d.ts +1 -1
  40. package/dist/cli/analyze-options.d.ts +131 -0
  41. package/dist/cli/analyze-options.js +1 -0
  42. package/dist/cli/analyze.d.ts +21 -113
  43. package/dist/cli/analyze.js +172 -29
  44. package/dist/cli/cli-message.d.ts +1 -1
  45. package/dist/cli/detect-changes-format.js +19 -2
  46. package/dist/cli/doctor.d.ts +12 -0
  47. package/dist/cli/doctor.js +32 -5
  48. package/dist/cli/editor-targets.js +6 -0
  49. package/dist/cli/eval-server.js +2 -1
  50. package/dist/cli/format-symbol.d.ts +15 -0
  51. package/dist/cli/format-symbol.js +17 -0
  52. package/dist/cli/generated-skill.d.ts +17 -0
  53. package/dist/cli/generated-skill.js +1 -0
  54. package/dist/cli/group.js +229 -21
  55. package/dist/cli/help-i18n.js +1 -2
  56. package/dist/cli/i18n/en.d.ts +11 -9
  57. package/dist/cli/i18n/en.js +13 -9
  58. package/dist/cli/i18n/resources.d.ts +15 -11
  59. package/dist/cli/i18n/zh-CN.d.ts +4 -2
  60. package/dist/cli/i18n/zh-CN.js +11 -9
  61. package/dist/cli/index.js +8 -4
  62. package/dist/cli/resolve-invocation.d.ts +7 -3
  63. package/dist/cli/resolve-invocation.js +7 -3
  64. package/dist/cli/setup.js +4 -3
  65. package/dist/cli/skill-gen.d.ts +1 -6
  66. package/dist/cli/tool.d.ts +1 -0
  67. package/dist/cli/tool.js +74 -17
  68. package/dist/cli/wiki.js +53 -10
  69. package/dist/config/ignore-service.d.ts +2 -0
  70. package/dist/config/ignore-service.js +54 -13
  71. package/dist/core/analyzer-identity.d.ts +80 -0
  72. package/dist/core/analyzer-identity.js +364 -26
  73. package/dist/core/augmentation/engine.js +86 -71
  74. package/dist/core/embedding-checkpoint.d.ts +143 -0
  75. package/dist/core/embedding-checkpoint.js +221 -0
  76. package/dist/core/embedding-count.d.ts +61 -0
  77. package/dist/core/embedding-count.js +69 -0
  78. package/dist/core/embeddings/ast-utils.js +9 -1
  79. package/dist/core/embeddings/embedding-pipeline.d.ts +8 -0
  80. package/dist/core/embeddings/embedding-pipeline.js +253 -14
  81. package/dist/core/embeddings/http-client.d.ts +5 -0
  82. package/dist/core/embeddings/http-client.js +142 -27
  83. package/dist/core/graph/graph.js +3 -0
  84. package/dist/core/graph/import-cycles.d.ts +194 -3
  85. package/dist/core/graph/import-cycles.js +522 -73
  86. package/dist/core/graph/types.d.ts +18 -0
  87. package/dist/core/group/bridge-db.d.ts +204 -1
  88. package/dist/core/group/bridge-db.js +401 -28
  89. package/dist/core/group/completeness.d.ts +130 -0
  90. package/dist/core/group/completeness.js +83 -0
  91. package/dist/core/group/config-parser.js +0 -5
  92. package/dist/core/group/cross-impact.d.ts +46 -1
  93. package/dist/core/group/cross-impact.js +220 -19
  94. package/dist/core/group/cross-trace.d.ts +32 -11
  95. package/dist/core/group/cross-trace.js +114 -20
  96. package/dist/core/group/extractors/http-patterns/java.js +278 -22
  97. package/dist/core/group/extractors/http-patterns/node.js +332 -216
  98. package/dist/core/group/extractors/http-patterns/types.d.ts +8 -0
  99. package/dist/core/group/extractors/http-route-extractor.d.ts +1 -0
  100. package/dist/core/group/extractors/http-route-extractor.js +122 -48
  101. package/dist/core/group/extractors/include-extractor.js +20 -2
  102. package/dist/core/group/extractors/manifest-extractor.d.ts +1 -1
  103. package/dist/core/group/extractors/manifest-extractor.js +7 -7
  104. package/dist/core/group/extractors/python-workspace-extractor.js +5 -2
  105. package/dist/core/group/group-lock.d.ts +31 -0
  106. package/dist/core/group/group-lock.js +166 -0
  107. package/dist/core/group/service.js +297 -16
  108. package/dist/core/group/storage.d.ts +3 -0
  109. package/dist/core/group/storage.js +7 -39
  110. package/dist/core/group/sync.d.ts +49 -3
  111. package/dist/core/group/sync.js +0 -0
  112. package/dist/core/group/types.d.ts +183 -8
  113. package/dist/core/group/types.js +28 -1
  114. package/dist/core/incremental/subgraph-extract.d.ts +9 -6
  115. package/dist/core/incremental/subgraph-extract.js +33 -10
  116. package/dist/core/index-freshness.d.ts +77 -2
  117. package/dist/core/index-freshness.js +109 -2
  118. package/dist/core/ingestion/call-processor.d.ts +13 -1
  119. package/dist/core/ingestion/call-processor.js +110 -3
  120. package/dist/core/ingestion/cfg/callee-cell-format.d.ts +42 -0
  121. package/dist/core/ingestion/cfg/callee-cell-format.js +42 -0
  122. package/dist/core/ingestion/cfg/emit.d.ts +8 -23
  123. package/dist/core/ingestion/cfg/emit.js +9 -23
  124. package/dist/core/ingestion/class-extractors/configs/go.js +10 -5
  125. package/dist/core/ingestion/cluster-enricher.js +8 -4
  126. package/dist/core/ingestion/community-processor.d.ts +21 -3
  127. package/dist/core/ingestion/community-processor.js +81 -82
  128. package/dist/core/ingestion/di-extractors/index.d.ts +9 -33
  129. package/dist/core/ingestion/di-extractors/spring.d.ts +1 -1
  130. package/dist/core/ingestion/di-extractors/spring.js +8 -1
  131. package/dist/core/ingestion/di-extractors/types.d.ts +60 -0
  132. package/dist/core/ingestion/di-extractors/types.js +15 -0
  133. package/dist/core/ingestion/filesystem-walker.js +30 -14
  134. package/dist/core/ingestion/finalize-orchestrator.js +1 -0
  135. package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +6 -0
  136. package/dist/core/ingestion/frameworks/spring/analysis-features.js +35 -1
  137. package/dist/core/ingestion/frameworks/spring/annotation-arguments.d.ts +13 -0
  138. package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +227 -0
  139. package/dist/core/ingestion/frameworks/spring/aop-candidates.d.ts +15 -0
  140. package/dist/core/ingestion/frameworks/spring/aop-candidates.js +85 -0
  141. package/dist/core/ingestion/frameworks/spring/aop.d.ts +118 -0
  142. package/dist/core/ingestion/frameworks/spring/aop.js +476 -0
  143. package/dist/core/ingestion/frameworks/spring/auto-configuration.d.ts +8 -0
  144. package/dist/core/ingestion/frameworks/spring/auto-configuration.js +16 -0
  145. package/dist/core/ingestion/frameworks/spring/bean-catalog.js +1 -0
  146. package/dist/core/ingestion/frameworks/spring/bean-factories.d.ts +33 -0
  147. package/dist/core/ingestion/frameworks/spring/bean-factories.js +65 -0
  148. package/dist/core/ingestion/frameworks/spring/conditionals.d.ts +25 -0
  149. package/dist/core/ingestion/frameworks/spring/conditionals.js +319 -0
  150. package/dist/core/ingestion/frameworks/spring/di-metadata.d.ts +3 -0
  151. package/dist/core/ingestion/frameworks/spring/di-metadata.js +162 -13
  152. package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +28 -0
  153. package/dist/core/ingestion/frameworks/spring/non-http-handlers.js +152 -0
  154. package/dist/core/ingestion/frameworks/spring/resource-injection.d.ts +5 -0
  155. package/dist/core/ingestion/frameworks/spring/resource-injection.js +91 -0
  156. package/dist/core/ingestion/import-resolvers/configs/csharp.js +5 -1
  157. package/dist/core/ingestion/import-resolvers/configs/swift.js +13 -0
  158. package/dist/core/ingestion/import-resolvers/csharp.d.ts +9 -1
  159. package/dist/core/ingestion/import-resolvers/csharp.js +234 -27
  160. package/dist/core/ingestion/import-resolvers/go.d.ts +11 -1
  161. package/dist/core/ingestion/import-resolvers/go.js +44 -17
  162. package/dist/core/ingestion/import-resolvers/jvm.d.ts +2 -2
  163. package/dist/core/ingestion/import-resolvers/node-workspace-packages.d.ts +90 -0
  164. package/dist/core/ingestion/import-resolvers/node-workspace-packages.js +429 -0
  165. package/dist/core/ingestion/import-resolvers/package-dir-index.d.ts +124 -0
  166. package/dist/core/ingestion/import-resolvers/package-dir-index.js +223 -0
  167. package/dist/core/ingestion/import-resolvers/pass-cache.d.ts +50 -0
  168. package/dist/core/ingestion/import-resolvers/pass-cache.js +60 -0
  169. package/dist/core/ingestion/import-resolvers/per-file-set.d.ts +71 -0
  170. package/dist/core/ingestion/import-resolvers/per-file-set.js +11 -0
  171. package/dist/core/ingestion/import-resolvers/php.d.ts +1 -1
  172. package/dist/core/ingestion/import-resolvers/php.js +65 -19
  173. package/dist/core/ingestion/import-resolvers/python-file-index.d.ts +201 -0
  174. package/dist/core/ingestion/import-resolvers/python-file-index.js +302 -0
  175. package/dist/core/ingestion/import-resolvers/python.js +25 -6
  176. package/dist/core/ingestion/import-resolvers/ruby.d.ts +1 -1
  177. package/dist/core/ingestion/import-resolvers/rust.d.ts +2 -2
  178. package/dist/core/ingestion/import-resolvers/standard.d.ts +1 -1
  179. package/dist/core/ingestion/import-resolvers/types.d.ts +1 -12
  180. package/dist/core/ingestion/import-resolvers/utils.d.ts +65 -6
  181. package/dist/core/ingestion/import-resolvers/utils.js +215 -36
  182. package/dist/core/ingestion/import-resolvers/workspace-file-index.d.ts +72 -0
  183. package/dist/core/ingestion/import-resolvers/workspace-file-index.js +58 -0
  184. package/dist/core/ingestion/language-config.d.ts +29 -1
  185. package/dist/core/ingestion/language-config.js +110 -35
  186. package/dist/core/ingestion/language-provider.d.ts +209 -7
  187. package/dist/core/ingestion/language-provider.js +37 -0
  188. package/dist/core/ingestion/languages/c/captures.js +7 -0
  189. package/dist/core/ingestion/languages/c/import-target.js +12 -16
  190. package/dist/core/ingestion/languages/c/scope-resolver.js +20 -19
  191. package/dist/core/ingestion/languages/c/static-linkage.js +12 -16
  192. package/dist/core/ingestion/languages/c-cpp.js +13 -0
  193. package/dist/core/ingestion/languages/cobol/scope-resolver.js +27 -20
  194. package/dist/core/ingestion/languages/cobol.js +13 -0
  195. package/dist/core/ingestion/languages/cpp/adl.d.ts +2 -2
  196. package/dist/core/ingestion/languages/cpp/adl.js +67 -44
  197. package/dist/core/ingestion/languages/cpp/captures.js +14 -2
  198. package/dist/core/ingestion/languages/cpp/file-local-linkage.js +11 -15
  199. package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +28 -8
  200. package/dist/core/ingestion/languages/cpp/inline-namespaces.js +242 -68
  201. package/dist/core/ingestion/languages/cpp/interpret.d.ts +2 -0
  202. package/dist/core/ingestion/languages/cpp/interpret.js +126 -6
  203. package/dist/core/ingestion/languages/cpp/query.js +106 -0
  204. package/dist/core/ingestion/languages/cpp/scope-resolver.js +48 -20
  205. package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +2 -15
  206. package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +18 -10
  207. package/dist/core/ingestion/languages/csharp/captures.js +19 -0
  208. package/dist/core/ingestion/languages/csharp/import-target.js +46 -72
  209. package/dist/core/ingestion/languages/csharp/namespace-siblings.js +5 -1
  210. package/dist/core/ingestion/languages/csharp/query.js +25 -5
  211. package/dist/core/ingestion/languages/csharp/scope-resolver.js +75 -2
  212. package/dist/core/ingestion/languages/dart/captures.d.ts +10 -0
  213. package/dist/core/ingestion/languages/dart/captures.js +598 -16
  214. package/dist/core/ingestion/languages/dart/import-target.js +32 -9
  215. package/dist/core/ingestion/languages/dart/index.d.ts +1 -1
  216. package/dist/core/ingestion/languages/dart/index.js +1 -1
  217. package/dist/core/ingestion/languages/dart/query.js +98 -1
  218. package/dist/core/ingestion/languages/dart/scope-resolver.js +14 -3
  219. package/dist/core/ingestion/languages/dart/simple-hooks.js +9 -0
  220. package/dist/core/ingestion/languages/dart.js +6 -1
  221. package/dist/core/ingestion/languages/go/captures.js +108 -3
  222. package/dist/core/ingestion/languages/go/generic-type-parameters.d.ts +31 -0
  223. package/dist/core/ingestion/languages/go/generic-type-parameters.js +140 -0
  224. package/dist/core/ingestion/languages/go/import-target.d.ts +3 -10
  225. package/dist/core/ingestion/languages/go/import-target.js +34 -30
  226. package/dist/core/ingestion/languages/go/index.d.ts +1 -1
  227. package/dist/core/ingestion/languages/go/interface-impls.d.ts +9 -1
  228. package/dist/core/ingestion/languages/go/interface-impls.js +693 -87
  229. package/dist/core/ingestion/languages/go/interpret.d.ts +2 -0
  230. package/dist/core/ingestion/languages/go/interpret.js +22 -8
  231. package/dist/core/ingestion/languages/go/method-owners.js +31 -12
  232. package/dist/core/ingestion/languages/go/package-clause.d.ts +46 -0
  233. package/dist/core/ingestion/languages/go/package-clause.js +75 -0
  234. package/dist/core/ingestion/languages/go/package-siblings.js +7 -11
  235. package/dist/core/ingestion/languages/go/query.js +56 -3
  236. package/dist/core/ingestion/languages/go/scope-resolver.js +39 -0
  237. package/dist/core/ingestion/languages/go.js +9 -0
  238. package/dist/core/ingestion/languages/java/analysis-features.d.ts +4 -0
  239. package/dist/core/ingestion/languages/java/analysis-features.js +12 -0
  240. package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +12 -0
  241. package/dist/core/ingestion/languages/java/capture-side-channel.js +48 -0
  242. package/dist/core/ingestion/languages/java/captures.js +77 -32
  243. package/dist/core/ingestion/languages/java/import-target.d.ts +49 -9
  244. package/dist/core/ingestion/languages/java/import-target.js +68 -88
  245. package/dist/core/ingestion/languages/java/interpret.js +3 -2
  246. package/dist/core/ingestion/languages/java/module-resolution.d.ts +62 -0
  247. package/dist/core/ingestion/languages/java/module-resolution.js +142 -0
  248. package/dist/core/ingestion/languages/java/query.js +15 -3
  249. package/dist/core/ingestion/languages/java/record-components.d.ts +14 -0
  250. package/dist/core/ingestion/languages/java/record-components.js +185 -0
  251. package/dist/core/ingestion/languages/java/scope-resolver.js +10 -2
  252. package/dist/core/ingestion/languages/java/spring-aop.d.ts +12 -0
  253. package/dist/core/ingestion/languages/java/spring-aop.js +49 -0
  254. package/dist/core/ingestion/languages/java/spring-conditionals.d.ts +11 -0
  255. package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
  256. package/dist/core/ingestion/languages/java/spring-di.d.ts +4 -1
  257. package/dist/core/ingestion/languages/java/spring-di.js +41 -9
  258. package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +7 -0
  259. package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +32 -0
  260. package/dist/core/ingestion/languages/java.js +94 -3
  261. package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
  262. package/dist/core/ingestion/languages/javascript/captures.js +262 -4
  263. package/dist/core/ingestion/languages/javascript/import-target.d.ts +17 -21
  264. package/dist/core/ingestion/languages/javascript/import-target.js +24 -41
  265. package/dist/core/ingestion/languages/javascript/index.d.ts +54 -5
  266. package/dist/core/ingestion/languages/javascript/index.js +54 -5
  267. package/dist/core/ingestion/languages/javascript/query.d.ts +1 -0
  268. package/dist/core/ingestion/languages/javascript/query.js +211 -5
  269. package/dist/core/ingestion/languages/javascript/scope-resolver.js +12 -0
  270. package/dist/core/ingestion/languages/javascript/simple-hooks.js +2 -1
  271. package/dist/core/ingestion/languages/jvm/package-siblings.js +77 -9
  272. package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +15 -0
  273. package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +48 -0
  274. package/dist/core/ingestion/languages/kotlin/captures.js +43 -1
  275. package/dist/core/ingestion/languages/kotlin/import-target.d.ts +8 -1
  276. package/dist/core/ingestion/languages/kotlin/import-target.js +20 -123
  277. package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
  278. package/dist/core/ingestion/languages/kotlin/index.js +1 -0
  279. package/dist/core/ingestion/languages/kotlin/module-resolution.d.ts +22 -0
  280. package/dist/core/ingestion/languages/kotlin/module-resolution.js +108 -0
  281. package/dist/core/ingestion/languages/kotlin/query.js +28 -2
  282. package/dist/core/ingestion/languages/kotlin/scope-resolver.js +23 -2
  283. package/dist/core/ingestion/languages/kotlin/spring-aop.d.ts +12 -0
  284. package/dist/core/ingestion/languages/kotlin/spring-aop.js +64 -0
  285. package/dist/core/ingestion/languages/kotlin/spring-conditionals.d.ts +12 -0
  286. package/dist/core/ingestion/languages/kotlin/spring-conditionals.js +49 -0
  287. package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +2 -0
  288. package/dist/core/ingestion/languages/kotlin/spring-di.js +60 -11
  289. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +10 -0
  290. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +41 -0
  291. package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
  292. package/dist/core/ingestion/languages/php/captures.js +319 -51
  293. package/dist/core/ingestion/languages/php/import-target.d.ts +3 -4
  294. package/dist/core/ingestion/languages/php/import-target.js +192 -62
  295. package/dist/core/ingestion/languages/php/query.js +31 -0
  296. package/dist/core/ingestion/languages/python/arity-metadata.d.ts +1 -0
  297. package/dist/core/ingestion/languages/python/arity-metadata.js +1 -0
  298. package/dist/core/ingestion/languages/python/captures.js +29 -0
  299. package/dist/core/ingestion/languages/python/import-decomposer.js +22 -1
  300. package/dist/core/ingestion/languages/python/import-target.d.ts +42 -1
  301. package/dist/core/ingestion/languages/python/import-target.js +277 -91
  302. package/dist/core/ingestion/languages/python/index.d.ts +1 -1
  303. package/dist/core/ingestion/languages/python/index.js +1 -1
  304. package/dist/core/ingestion/languages/python/interpret.d.ts +52 -0
  305. package/dist/core/ingestion/languages/python/interpret.js +249 -7
  306. package/dist/core/ingestion/languages/python/query.js +9 -0
  307. package/dist/core/ingestion/languages/python/receiver-binding.d.ts +8 -6
  308. package/dist/core/ingestion/languages/python/receiver-binding.js +108 -12
  309. package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
  310. package/dist/core/ingestion/languages/python/simple-hooks.js +2 -8
  311. package/dist/core/ingestion/languages/python.js +13 -0
  312. package/dist/core/ingestion/languages/ruby/captures.js +158 -0
  313. package/dist/core/ingestion/languages/ruby/import-target.js +7 -5
  314. package/dist/core/ingestion/languages/ruby/query.js +93 -0
  315. package/dist/core/ingestion/languages/ruby/scope-resolver.js +2 -0
  316. package/dist/core/ingestion/languages/ruby/simple-hooks.d.ts +1 -1
  317. package/dist/core/ingestion/languages/ruby/simple-hooks.js +22 -1
  318. package/dist/core/ingestion/languages/rust/captures.js +39 -1
  319. package/dist/core/ingestion/languages/rust/method-owners.js +11 -1
  320. package/dist/core/ingestion/languages/rust/module-path.d.ts +126 -0
  321. package/dist/core/ingestion/languages/rust/module-path.js +214 -0
  322. package/dist/core/ingestion/languages/rust/qualified-call.d.ts +41 -0
  323. package/dist/core/ingestion/languages/rust/qualified-call.js +481 -0
  324. package/dist/core/ingestion/languages/rust/query.js +39 -6
  325. package/dist/core/ingestion/languages/rust/scope-resolver.js +21 -2
  326. package/dist/core/ingestion/languages/rust.js +17 -0
  327. package/dist/core/ingestion/languages/swift/captures.js +87 -3
  328. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.d.ts +48 -0
  329. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.js +253 -0
  330. package/dist/core/ingestion/languages/swift/import-target.js +4 -9
  331. package/dist/core/ingestion/languages/swift/query.js +17 -0
  332. package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +8 -0
  333. package/dist/core/ingestion/languages/swift/receiver-binding.js +6 -2
  334. package/dist/core/ingestion/languages/swift.js +2 -0
  335. package/dist/core/ingestion/languages/typescript/captures.d.ts +90 -1
  336. package/dist/core/ingestion/languages/typescript/captures.js +267 -5
  337. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.d.ts +134 -0
  338. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.js +523 -0
  339. package/dist/core/ingestion/languages/typescript/cjs-module-exports.d.ts +54 -0
  340. package/dist/core/ingestion/languages/typescript/cjs-module-exports.js +191 -0
  341. package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.d.ts +7 -0
  342. package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.js +92 -0
  343. package/dist/core/ingestion/languages/typescript/file-candidates.d.ts +29 -0
  344. package/dist/core/ingestion/languages/typescript/file-candidates.js +70 -0
  345. package/dist/core/ingestion/languages/typescript/import-decomposer.d.ts +28 -1
  346. package/dist/core/ingestion/languages/typescript/import-decomposer.js +125 -10
  347. package/dist/core/ingestion/languages/typescript/import-target.d.ts +25 -37
  348. package/dist/core/ingestion/languages/typescript/import-target.js +24 -26
  349. package/dist/core/ingestion/languages/typescript/interpret.d.ts +21 -1
  350. package/dist/core/ingestion/languages/typescript/interpret.js +45 -5
  351. package/dist/core/ingestion/languages/typescript/module-resolution.d.ts +48 -0
  352. package/dist/core/ingestion/languages/typescript/module-resolution.js +171 -0
  353. package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
  354. package/dist/core/ingestion/languages/typescript/query.js +303 -14
  355. package/dist/core/ingestion/languages/typescript/receiver-binding.d.ts +17 -0
  356. package/dist/core/ingestion/languages/typescript/receiver-binding.js +27 -0
  357. package/dist/core/ingestion/languages/typescript/scope-resolver.js +27 -40
  358. package/dist/core/ingestion/languages/typescript/simple-hooks.d.ts +0 -10
  359. package/dist/core/ingestion/languages/typescript/simple-hooks.js +22 -22
  360. package/dist/core/ingestion/languages/typescript/tsconfig.d.ts +59 -0
  361. package/dist/core/ingestion/languages/typescript/tsconfig.js +292 -0
  362. package/dist/core/ingestion/languages/typescript.js +93 -2
  363. package/dist/core/ingestion/languages/vue/import-target.d.ts +6 -22
  364. package/dist/core/ingestion/languages/vue/import-target.js +11 -47
  365. package/dist/core/ingestion/languages/vue/scope-resolver.js +4 -2
  366. package/dist/core/ingestion/local-symbol-pruner.js +11 -11
  367. package/dist/core/ingestion/method-extractors/configs/csharp.js +1 -0
  368. package/dist/core/ingestion/method-extractors/generic.js +1 -0
  369. package/dist/core/ingestion/method-types.d.ts +16 -0
  370. package/dist/core/ingestion/pipeline-phases/di.d.ts +1 -1
  371. package/dist/core/ingestion/pipeline-phases/di.js +136 -21
  372. package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
  373. package/dist/core/ingestion/pipeline-phases/index.js +2 -0
  374. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
  375. package/dist/core/ingestion/pipeline-phases/parse-impl.js +154 -4
  376. package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
  377. package/dist/core/ingestion/pipeline-phases/processes.d.ts +3 -2
  378. package/dist/core/ingestion/pipeline-phases/processes.js +91 -6
  379. package/dist/core/ingestion/pipeline-phases/routes.js +116 -25
  380. package/dist/core/ingestion/pipeline-phases/spring-aop.d.ts +34 -0
  381. package/dist/core/ingestion/pipeline-phases/spring-aop.js +439 -0
  382. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +34 -0
  383. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +255 -0
  384. package/dist/core/ingestion/pipeline-phases/types.d.ts +7 -0
  385. package/dist/core/ingestion/pipeline.d.ts +26 -2
  386. package/dist/core/ingestion/pipeline.js +60 -11
  387. package/dist/core/ingestion/process-processor.d.ts +109 -2
  388. package/dist/core/ingestion/process-processor.js +464 -52
  389. package/dist/core/ingestion/resolve-references.d.ts +6 -1
  390. package/dist/core/ingestion/resolve-references.js +66 -6
  391. package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +8 -2
  392. package/dist/core/ingestion/route-extractors/constant-resolver.js +11 -7
  393. package/dist/core/ingestion/route-extractors/data-route-table.d.ts +40 -0
  394. package/dist/core/ingestion/route-extractors/data-route-table.js +876 -0
  395. package/dist/core/ingestion/route-extractors/dispatch-guard.d.ts +96 -0
  396. package/dist/core/ingestion/route-extractors/dispatch-guard.js +1184 -0
  397. package/dist/core/ingestion/route-extractors/java-const-resolver.d.ts +114 -0
  398. package/dist/core/ingestion/route-extractors/java-const-resolver.js +569 -0
  399. package/dist/core/ingestion/route-extractors/js-const-resolver.d.ts +192 -0
  400. package/dist/core/ingestion/route-extractors/js-const-resolver.js +1033 -0
  401. package/dist/core/ingestion/route-extractors/nest.d.ts +53 -0
  402. package/dist/core/ingestion/route-extractors/nest.js +523 -0
  403. package/dist/core/ingestion/route-extractors/spring-shared.d.ts +11 -0
  404. package/dist/core/ingestion/route-extractors/spring-shared.js +89 -0
  405. package/dist/core/ingestion/route-extractors/spring.js +214 -29
  406. package/dist/core/ingestion/scope-extractor-bridge.js +9 -1
  407. package/dist/core/ingestion/scope-extractor.d.ts +22 -7
  408. package/dist/core/ingestion/scope-extractor.js +309 -15
  409. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +311 -21
  410. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
  411. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +12 -0
  412. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +47 -0
  413. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
  414. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +280 -42
  415. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +123 -0
  416. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +171 -17
  417. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +58 -1
  418. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +137 -34
  419. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +30 -1
  420. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +39 -1
  421. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +18 -1
  422. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +113 -18
  423. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +107 -5
  424. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +590 -33
  425. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +3 -0
  426. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +101 -41
  427. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.d.ts +34 -0
  428. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.js +62 -0
  429. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +5 -1
  430. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +8 -1
  431. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +105 -5
  432. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +931 -92
  433. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.d.ts +58 -0
  434. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.js +458 -0
  435. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.d.ts +180 -0
  436. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.js +418 -0
  437. package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +29 -0
  438. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +57 -0
  439. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +55 -1
  440. package/dist/core/ingestion/scope-resolution/pipeline/run.js +241 -19
  441. package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +112 -2
  442. package/dist/core/ingestion/scope-resolution/resolution-outcome.js +38 -1
  443. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +25 -3
  444. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +36 -16
  445. package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +210 -9
  446. package/dist/core/ingestion/scope-resolution/scope/walkers.js +905 -22
  447. package/dist/core/ingestion/scope-resolution/summary-maps.d.ts +28 -0
  448. package/dist/core/ingestion/scope-resolution/summary-maps.js +50 -0
  449. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.d.ts +55 -0
  450. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.js +37 -0
  451. package/dist/core/ingestion/scope-resolution/unresolved-receivers.d.ts +109 -0
  452. package/dist/core/ingestion/scope-resolution/unresolved-receivers.js +204 -0
  453. package/dist/core/ingestion/scope-resolution/utils/definition-id.d.ts +13 -0
  454. package/dist/core/ingestion/scope-resolution/utils/definition-id.js +19 -0
  455. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.d.ts +171 -0
  456. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.js +218 -0
  457. package/dist/core/ingestion/scope-resolution/workspace-index-types.d.ts +34 -0
  458. package/dist/core/ingestion/scope-resolution/workspace-index-types.js +15 -0
  459. package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +7 -20
  460. package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
  461. package/dist/core/ingestion/tree-sitter-queries.js +678 -4
  462. package/dist/core/ingestion/type-env.js +11 -7
  463. package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
  464. package/dist/core/ingestion/type-extractors/shared.js +16 -0
  465. package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
  466. package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
  467. package/dist/core/ingestion/type-extractors/typescript.js +26 -0
  468. package/dist/core/ingestion/utils/ast-helpers.d.ts +297 -15
  469. package/dist/core/ingestion/utils/ast-helpers.js +578 -46
  470. package/dist/core/ingestion/utils/call-analysis.d.ts +27 -22
  471. package/dist/core/ingestion/utils/call-analysis.js +202 -7
  472. package/dist/core/ingestion/utils/callable-flow-captures.d.ts +59 -0
  473. package/dist/core/ingestion/utils/callable-flow-captures.js +51 -1
  474. package/dist/core/ingestion/utils/callable-labels.d.ts +25 -0
  475. package/dist/core/ingestion/utils/callable-labels.js +31 -0
  476. package/dist/core/ingestion/utils/effective-ram.d.ts +40 -0
  477. package/dist/core/ingestion/utils/effective-ram.js +58 -0
  478. package/dist/core/ingestion/utils/line-base.d.ts +14 -0
  479. package/dist/core/ingestion/utils/line-base.js +14 -0
  480. package/dist/core/ingestion/utils/method-props.d.ts +27 -4
  481. package/dist/core/ingestion/utils/method-props.js +29 -4
  482. package/dist/core/ingestion/utils/receiver-chain-captures.d.ts +31 -0
  483. package/dist/core/ingestion/utils/receiver-chain-captures.js +57 -0
  484. package/dist/core/ingestion/utils/receiver-chain-codec.d.ts +89 -0
  485. package/dist/core/ingestion/utils/receiver-chain-codec.js +182 -0
  486. package/dist/core/ingestion/utils/scope-tree-walk.d.ts +22 -0
  487. package/dist/core/ingestion/utils/scope-tree-walk.js +33 -0
  488. package/dist/core/ingestion/utils/template-arguments.d.ts +96 -0
  489. package/dist/core/ingestion/utils/template-arguments.js +196 -0
  490. package/dist/core/ingestion/utils/type-parameters.d.ts +49 -0
  491. package/dist/core/ingestion/utils/type-parameters.js +206 -0
  492. package/dist/core/ingestion/workers/callable-id.d.ts +80 -0
  493. package/dist/core/ingestion/workers/callable-id.js +125 -0
  494. package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
  495. package/dist/core/ingestion/workers/parse-worker.js +493 -54
  496. package/dist/core/ingestion/workers/worker-pool.d.ts +20 -27
  497. package/dist/core/ingestion/workers/worker-pool.js +91 -3
  498. package/dist/core/lbug/csv-generator.d.ts +27 -0
  499. package/dist/core/lbug/csv-generator.js +72 -17
  500. package/dist/core/lbug/extension-load-error.js +13 -2
  501. package/dist/core/lbug/extension-loader.d.ts +29 -0
  502. package/dist/core/lbug/extension-loader.js +31 -6
  503. package/dist/core/lbug/graph-emit-sink.d.ts +264 -0
  504. package/dist/core/lbug/graph-emit-sink.js +581 -0
  505. package/dist/core/lbug/lbug-adapter.d.ts +290 -11
  506. package/dist/core/lbug/lbug-adapter.js +652 -69
  507. package/dist/core/lbug/native-check.d.ts +21 -0
  508. package/dist/core/lbug/native-check.js +248 -32
  509. package/dist/core/lbug/pdg-emit-sink.d.ts +13 -4
  510. package/dist/core/lbug/pdg-emit-sink.js +21 -111
  511. package/dist/core/lbug/pool-adapter.d.ts +9 -0
  512. package/dist/core/lbug/pool-adapter.js +164 -14
  513. package/dist/core/lbug/query-batch.d.ts +75 -0
  514. package/dist/core/lbug/query-batch.js +102 -0
  515. package/dist/core/lbug/rel-pair-routing.d.ts +160 -2
  516. package/dist/core/lbug/rel-pair-routing.js +228 -10
  517. package/dist/core/lbug/schema.d.ts +163 -4
  518. package/dist/core/lbug/schema.js +404 -159
  519. package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
  520. package/dist/core/lbug/sync-csv-writer.js +108 -0
  521. package/dist/core/run-analyze.d.ts +147 -0
  522. package/dist/core/run-analyze.js +1215 -179
  523. package/dist/core/search/bm25-index.d.ts +11 -0
  524. package/dist/core/search/bm25-index.js +60 -26
  525. package/dist/core/search/fts-indexes.d.ts +150 -9
  526. package/dist/core/search/fts-indexes.js +241 -23
  527. package/dist/core/wiki/graph-queries.js +145 -112
  528. package/dist/core/wiki/llm-client.d.ts +29 -3
  529. package/dist/core/wiki/llm-client.js +47 -12
  530. package/dist/core/wiki/prompts.d.ts +19 -0
  531. package/dist/core/wiki/prompts.js +20 -1
  532. package/dist/lib/utils.d.ts +113 -0
  533. package/dist/lib/utils.js +185 -0
  534. package/dist/mcp/local/aop-metadata.d.ts +77 -0
  535. package/dist/mcp/local/aop-metadata.js +227 -0
  536. package/dist/mcp/local/bean-metadata.d.ts +2 -1
  537. package/dist/mcp/local/bean-metadata.js +22 -1
  538. package/dist/mcp/local/convex-metadata.d.ts +8 -0
  539. package/dist/mcp/local/convex-metadata.js +45 -0
  540. package/dist/mcp/local/local-backend.d.ts +174 -11
  541. package/dist/mcp/local/local-backend.js +1678 -331
  542. package/dist/mcp/local/path-predicate.d.ts +19 -0
  543. package/dist/mcp/local/path-predicate.js +21 -0
  544. package/dist/mcp/local/pdg-impact.d.ts +132 -10
  545. package/dist/mcp/local/pdg-impact.js +391 -98
  546. package/dist/mcp/repository-policy.d.ts +1 -0
  547. package/dist/mcp/repository-policy.js +5 -0
  548. package/dist/mcp/resources.js +26 -4
  549. package/dist/mcp/server.js +23 -13
  550. package/dist/mcp/tools.d.ts +8 -0
  551. package/dist/mcp/tools.js +76 -23
  552. package/dist/server/analyze-job.d.ts +37 -2
  553. package/dist/server/analyze-job.js +13 -2
  554. package/dist/server/analyze-launch.d.ts +1 -1
  555. package/dist/server/analyze-launch.js +79 -10
  556. package/dist/server/analyze-worker-core.d.ts +1 -1
  557. package/dist/server/analyze-worker-core.js +10 -1
  558. package/dist/server/analyze-worker-ipc.d.ts +1 -1
  559. package/dist/server/analyze-worker-ipc.js +4 -0
  560. package/dist/server/analyze-worker-protocol.d.ts +59 -0
  561. package/dist/server/analyze-worker-protocol.js +1 -0
  562. package/dist/server/analyze-worker.d.ts +1 -17
  563. package/dist/server/api.d.ts +2 -11
  564. package/dist/server/api.js +164 -163
  565. package/dist/server/embed-run-outcome.d.ts +89 -0
  566. package/dist/server/embed-run-outcome.js +88 -0
  567. package/dist/server/git-clone.js +6 -2
  568. package/dist/server/middleware.d.ts +116 -9
  569. package/dist/server/middleware.js +291 -22
  570. package/dist/server/sse-progress.d.ts +41 -0
  571. package/dist/server/sse-progress.js +125 -0
  572. package/dist/storage/branch-index.d.ts +11 -6
  573. package/dist/storage/branch-index.js +15 -7
  574. package/dist/storage/file-hash.js +2 -2
  575. package/dist/storage/fs-atomic.d.ts +25 -0
  576. package/dist/storage/fs-atomic.js +42 -0
  577. package/dist/storage/git.d.ts +131 -0
  578. package/dist/storage/git.js +236 -2
  579. package/dist/storage/index-lock.d.ts +102 -0
  580. package/dist/storage/index-lock.js +660 -0
  581. package/dist/storage/parse-cache.js +588 -6
  582. package/dist/storage/parsedfile-store.js +76 -6
  583. package/dist/storage/repo-manager.d.ts +54 -441
  584. package/dist/storage/repo-manager.js +312 -221
  585. package/dist/storage/repo-meta.d.ts +530 -0
  586. package/dist/storage/repo-meta.js +100 -0
  587. package/dist/types/pipeline.d.ts +37 -0
  588. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +1 -1
  589. package/hooks/claude/gitnexus-hook.cjs +1 -1
  590. package/hooks/claude/resolve-analyze-cmd.cjs +80 -13
  591. package/package.json +11 -2
  592. package/scripts/cross-platform-shard.ts +153 -0
  593. package/scripts/cross-platform-tests.ts +122 -0
  594. package/scripts/run-cross-platform.ts +16 -5
  595. package/skills/gitnexus-cli.md +3 -3
  596. package/skills/gitnexus-debugging.md +37 -7
  597. package/skills/gitnexus-exploring.md +26 -4
  598. package/skills/gitnexus-impact-analysis.md +71 -10
  599. package/skills/gitnexus-plan/README.md +11 -6
  600. package/skills/gitnexus-plan/references/evidence-provenance.md +49 -12
  601. package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +654 -372
  602. package/skills/gitnexus-refactoring.md +48 -5
  603. package/skills/gitnexus-review/SKILL.md +12 -6
  604. package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +1 -1
  605. package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +1 -1
  606. package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +1 -1
  607. package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +1 -1
  608. package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +1 -1
  609. package/skills/gitnexus-review/ci-personas/ci-security-lens.md +1 -1
  610. package/skills/gitnexus-taint-analysis.md +13 -7
  611. package/skills/gitnexus-work/SKILL.md +4 -1
  612. package/skills/gitnexus-work/references/evidence-provenance.md +49 -12
  613. package/skills/gitnexus-work/scripts/evidence-provenance.mjs +654 -372
  614. package/vendor/leiden/utils.cjs +28 -1
  615. package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
  616. package/web/assets/{__vite-browser-external-bMKyYQkO.js → __vite-browser-external-COxE8F0G.js} +1 -1
  617. package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
  618. package/web/assets/agent-Dr4l5EOp.js +662 -0
  619. package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
  620. package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
  621. package/web/assets/{blockDiagram-7IZFK4PR-DBefcjof.js → blockDiagram-54WLDVWM-Dg_hrRWE.js} +4 -4
  622. package/web/assets/{c4Diagram-Y2BXMSZH-EjWnjEJl.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +2 -2
  623. package/web/assets/chunk-224SPVON-B8gxtXpy.js +1 -0
  624. package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +127 -0
  625. package/web/assets/chunk-2SREHG4O-Dip42xOq.js +1 -0
  626. package/web/assets/chunk-4RFN2BYJ-DHHWuC-n.js +1 -0
  627. package/web/assets/chunk-66DQ2XMT-CM0xjFAN.js +1 -0
  628. package/web/assets/chunk-6BELYETK-ChsYtfHW.js +1 -0
  629. package/web/assets/{chunk-LII3EMHJ-BL6lKJ_P.js → chunk-6L755F7B-CMhLBxi2.js} +1 -1
  630. package/web/assets/{chunk-QA3QBVWF-DVXPOIxe.js → chunk-7CWYLC5S-DRgGkkpF.js} +1 -1
  631. package/web/assets/{chunk-ZXARS5L4-C3v-4Fsw.js → chunk-A7VWPJGB-B4O3oQdQ.js} +1 -1
  632. package/web/assets/chunk-BI6VK774-D0oaWk8V.js +1 -0
  633. package/web/assets/chunk-D6VWDJW2-BxcBdZ9c.js +2 -0
  634. package/web/assets/chunk-DMV4VAQV-Bn6WXDSX.js +4 -0
  635. package/web/assets/chunk-E5QJAATJ-dh-5CtIV.js +2 -0
  636. package/web/assets/chunk-EQFTRU2I-1ix7TzW9.js +2 -0
  637. package/web/assets/chunk-FWYVLQTC-BgDItRzJ.js +1 -0
  638. package/web/assets/chunk-HNC4WDU7-DoU3KnA7.js +1 -0
  639. package/web/assets/chunk-L5GCOVLC-CE2w8Nm_.js +161 -0
  640. package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +321 -0
  641. package/web/assets/chunk-LORZLZWG-B57uGw2N.js +88 -0
  642. package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +62 -0
  643. package/web/assets/chunk-NV3KIAZN-5yvcpMiu.js +1 -0
  644. package/web/assets/chunk-OIYT25JQ-CQ6KOZGX.js +1 -0
  645. package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +10 -0
  646. package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +156 -0
  647. package/web/assets/chunk-RRFMTAIC-CMN0wcYA.js +1 -0
  648. package/web/assets/{chunk-RLI5ZMPA-CkXZ0y0U.js → chunk-SATU7PGQ-B1zhgOvc.js} +1 -1
  649. package/web/assets/chunk-STOV2HOB-GnExfzIX.js +1 -0
  650. package/web/assets/{chunk-INKRHTLW-Ckl3_KkO.js → chunk-SZD42YQK-ijyKKVr1.js} +21 -21
  651. package/web/assets/{chunk-LCXTWHL2-C162wE5z.js → chunk-TFPGFQPA-Dj6a-0pC.js} +3 -3
  652. package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +2 -0
  653. package/web/assets/chunk-TZUXEDM2-B7p9AcTw.js +1 -0
  654. package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +1 -0
  655. package/web/assets/{chunk-6764PJDD-C7xxk063.js → chunk-VE5CLXGZ-C1vB7wpY.js} +1 -1
  656. package/web/assets/{chunk-RG4AUYOV-ZNgyLFq6.js → chunk-VJFVEZTB-CX66F2ep.js} +3 -3
  657. package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +1 -0
  658. package/web/assets/chunk-WJBAP47W-BckNkuEN.js +1 -0
  659. package/web/assets/chunk-XNMVGMAZ-Cg_LnPtj.js +1 -0
  660. package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +1 -0
  661. package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +1 -0
  662. package/web/assets/{cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js → cose-bilkent-RZA4XIPR-BHpK4Crp.js} +1 -1
  663. package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +1 -0
  664. package/web/assets/cynefinDiagram-TR7LZUCG-C3Iar9lZ.js +62 -0
  665. package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +4 -0
  666. package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +30 -0
  667. package/web/assets/diagram-JCD7PQ7C-DC5-9FRr.js +24 -0
  668. package/web/assets/{diagram-HNR7UZ2L-DVRltWbL.js → diagram-KFBZAVDW-Dfmf_4ti.js} +3 -3
  669. package/web/assets/diagram-L7DVE3PN-GIRyVUtt.js +41 -0
  670. package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +24 -0
  671. package/web/assets/ebnfDiagram-DRHRQJWO-D8_CI4ZF.js +1 -0
  672. package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +85 -0
  673. package/web/assets/error-D9MtuG9s.js +1 -0
  674. package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +1 -0
  675. package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +1 -0
  676. package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +292 -0
  677. package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +1 -0
  678. package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +106 -0
  679. package/web/assets/{index-D7mTFcvQ.js → index-2zdvEdzg.js} +51 -51
  680. package/web/assets/index-CJDpyH-n.css +2 -0
  681. package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +1 -0
  682. package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +2 -0
  683. package/web/assets/{ishikawaDiagram-BNXS4ZKH-XpjJRU9h.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +2 -2
  684. package/web/assets/{journeyDiagram-M6C3CM3L-C6wjooas.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +3 -3
  685. package/web/assets/{kanban-definition-75IXJCU3-5_UVY79g.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +6 -6
  686. package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
  687. package/web/assets/{mindmap-definition-2TDM6QVE-8xDLzk2e.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +5 -5
  688. package/web/assets/node.browser-U-KyT5AW.js +1 -0
  689. package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +1 -0
  690. package/web/assets/pegDiagram-YKIO5C6U-QGeQLEq2.js +1 -0
  691. package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +1 -0
  692. package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +39 -0
  693. package/web/assets/{quadrantDiagram-VICAPDV7-DR54jOeR.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +3 -3
  694. package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +1 -0
  695. package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +1 -0
  696. package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +1 -0
  697. package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +1 -0
  698. package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +1 -0
  699. package/web/assets/railroadDiagram-M77LTMSB-AXu4vxk_.js +1 -0
  700. package/web/assets/{requirementDiagram-JXO7QTGE-PEkg7sKC.js → requirementDiagram-RASO5HTO-B-l8InpK.js} +4 -4
  701. package/web/assets/{sankeyDiagram-URQDO5SZ-DDWEtjcs.js → sankeyDiagram-F32LOJ6L-Kd7zjJgX.js} +3 -3
  702. package/web/assets/{sequenceDiagram-VS2MUI6T-Bv-uwANx.js → sequenceDiagram-URATNSBD-BlcdY9DS.js} +7 -7
  703. package/web/assets/sizeCapture-5GORAGP4-BEqQzsxs.js +1 -0
  704. package/web/assets/src-C5sx_gMp.js +1 -0
  705. package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +1 -0
  706. package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +1 -0
  707. package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +2 -0
  708. package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +8 -0
  709. package/web/assets/{timeline-definition-O6YCAMPW-Qmsuo7qS.js → timeline-definition-WJXWRH4I-DUfp1R3E.js} +3 -3
  710. package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +1 -0
  711. package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +1 -0
  712. package/web/assets/vennDiagram-K3VCMQLI-Bj-FN-XS.js +34 -0
  713. package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +1 -0
  714. package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +78 -0
  715. package/web/assets/xychartDiagram-5VRUVLCW-CK_rbSWE.js +7 -0
  716. package/web/index.html +16 -15
  717. package/dist/core/ingestion/languages/python/index-stats.d.ts +0 -18
  718. package/dist/core/ingestion/languages/python/index-stats.js +0 -25
  719. package/web/assets/ProcessFlowModal-CwkpVkv-.js +0 -22
  720. package/web/assets/agent-Ds-lkZjX.js +0 -626
  721. package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
  722. package/web/assets/architectureDiagram-UL44E2DR-CmG3uPWf.js +0 -36
  723. package/web/assets/chunk-2T2R6R2M-Bb6Sy3_j.js +0 -4
  724. package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +0 -1
  725. package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +0 -321
  726. package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +0 -159
  727. package/web/assets/chunk-67TQ5CYL-CA7OhIEf.js +0 -124
  728. package/web/assets/chunk-7J6CGLKN-BlKwgXKs.js +0 -10
  729. package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +0 -1
  730. package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +0 -1
  731. package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
  732. package/web/assets/chunk-KGFNY3KK-BZeP-55u.js +0 -62
  733. package/web/assets/chunk-KGYTTC2M-zm6n242I.js +0 -1
  734. package/web/assets/chunk-KNLZD3CH-BGlP6X9R.js +0 -1
  735. package/web/assets/chunk-LRIF4GLE-n59lhprL.js +0 -1
  736. package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
  737. package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
  738. package/web/assets/chunk-T2UQINTJ-BEyXhZWe.js +0 -1
  739. package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +0 -1
  740. package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +0 -1
  741. package/web/assets/chunk-UY5QBCOK-ByqTVLvh.js +0 -1
  742. package/web/assets/chunk-VU6ZFW4Y-BLeasdkU.js +0 -2
  743. package/web/assets/classDiagram-KGZ6W3CR-olpO3fMe.js +0 -1
  744. package/web/assets/classDiagram-v2-72OJOZXJ-olpO3fMe.js +0 -1
  745. package/web/assets/dagre-ND4H6XIP-CY4iIF7v.js +0 -4
  746. package/web/assets/diagram-3NCE3AQN-CO6QpzEE.js +0 -43
  747. package/web/assets/diagram-GF46GFSD-B2atbzmU.js +0 -24
  748. package/web/assets/diagram-QXG6HAR7-DR6AHD2h.js +0 -24
  749. package/web/assets/diagram-WEQXMOUZ-DkpoMwTL.js +0 -10
  750. package/web/assets/erDiagram-L5TCEMPS-n8g_90bc.js +0 -85
  751. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
  752. package/web/assets/flowDiagram-H6V6AXG4-SGMDiCkB.js +0 -162
  753. package/web/assets/ganttDiagram-JCBTUEKG-Cb3UBqRS.js +0 -292
  754. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
  755. package/web/assets/gitGraphDiagram-S2ZK5IYY-Bs9CR7tq.js +0 -106
  756. package/web/assets/index-CX_fADmQ.css +0 -2
  757. package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +0 -1
  758. package/web/assets/infoDiagram-3YFTVSEB-T368on4D.js +0 -2
  759. package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
  760. package/web/assets/node-Ct_zna8U.js +0 -8
  761. package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +0 -1
  762. package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +0 -1
  763. package/web/assets/pieDiagram-CU6KROY3-Bv4LpAbr.js +0 -30
  764. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
  765. package/web/assets/sdk-CzHHH8tD.js +0 -37
  766. package/web/assets/src-Cv1eWg0o.js +0 -1
  767. package/web/assets/stateDiagram-7D4R322I-DVNjmkEq.js +0 -1
  768. package/web/assets/stateDiagram-v2-36443NZ5-CyN4Fh7_.js +0 -1
  769. package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +0 -1
  770. package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +0 -1
  771. package/web/assets/vennDiagram-MWXL3ELB-BD1iK1SX.js +0 -34
  772. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
  773. package/web/assets/wardleyDiagram-CUQ6CDDI-D6TzLVob.js +0 -78
  774. package/web/assets/xychartDiagram-N2JHSOCM-CoZ_Tits.js +0 -7
  775. /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
@@ -1 +1,114 @@
1
1
  export declare const generateId: (label: string, name: string) => string;
2
+ /**
3
+ * Total order on strings by UTF-16 code unit — deliberately NOT `localeCompare`.
4
+ *
5
+ * `localeCompare` resolves against the host's default ICU locale, so two machines
6
+ * can order the same pair differently and a tie-broken cap keeps a different
7
+ * subset on each (#2787). Code-unit order is host-independent and matches the
8
+ * binary `ORDER BY` the graph queries use, so a JS re-sort reproduces the DB's
9
+ * order instead of fighting it.
10
+ *
11
+ * Use this for every tiebreak that feeds a `.slice()`, a page boundary, or any
12
+ * other cut — `Array.prototype.sort` is stable, so a comparator that returns 0
13
+ * for distinct elements silently falls back to input order.
14
+ */
15
+ export declare const compareCodeUnits: (a: string, b: string) => number;
16
+ /**
17
+ * How many links of an `Error.cause` chain any walker below visits, counting
18
+ * the head. THE bound — hand-rolled copies had drifted to three different
19
+ * numbers with three different loop conditions (`depth < 5` in two places,
20
+ * `depth <= 5` in a third, i.e. six levels).
21
+ *
22
+ * The bound exists purely so a cyclic chain (`a.cause = b; b.cause = a`)
23
+ * cannot loop forever. Real chains are one or two links deep — the ingestion
24
+ * phase runner wraps a phase failure once as
25
+ * `new Error("Phase 'X' failed: …", { cause })` — so five leaves ample
26
+ * headroom for future nesting.
27
+ */
28
+ export declare const CAUSE_CHAIN_MAX_DEPTH = 5;
29
+ /**
30
+ * Walk `err` and its `cause` chain, head first, yielding each `Error` link.
31
+ *
32
+ * Stops at the first non-`Error` link (a `cause` may legally be any value, and
33
+ * a non-Error carries no further `cause` worth following) and after
34
+ * `maxDepth` links. Non-`Error` input yields nothing.
35
+ *
36
+ * THE single cause-chain traversal. Consume this (or {@link findInCauseChain})
37
+ * rather than re-rolling the `for (let depth = 0; …; current = current.cause)`
38
+ * loop: every hand-rolled copy has to re-decide the bound and the loop
39
+ * condition, and they did not agree.
40
+ */
41
+ export declare function causeChain(err: unknown, maxDepth?: number): Generator<Error>;
42
+ /**
43
+ * Find the first link of `err`'s cause chain that `match` accepts.
44
+ *
45
+ * Load-bearing for CLI error classification: the ingestion phase runner
46
+ * rewraps every phase failure as `new Error("Phase 'X' failed: …", { cause })`,
47
+ * so a bare `instanceof` at the CLI boundary misses the real error entirely
48
+ * and falls through to a generic stack dump. Classify by TYPE through this
49
+ * helper (the repo norm from #2385), never by message text.
50
+ */
51
+ export declare function findInCauseChain<T>(err: unknown, match: (e: unknown) => e is T, maxDepth?: number): T | undefined;
52
+ /**
53
+ * Drop a Windows extended-length (`\\?\`) prefix from a path (#2667).
54
+ *
55
+ * **Comparison domain only.** Never apply this to a string that is about to be
56
+ * handed to `fs`: libuv's `fs__capture_path` only converts WTF-8 to UTF-16 and
57
+ * does *not* re-add the prefix for over-MAX_PATH paths, so stripping an
58
+ * filesystem-facing path would break long-path access on hosts that have not
59
+ * opted into `LongPathsEnabled`. Registry keys, repo-resolution lookups and
60
+ * other pure string comparisons are safe — and are exactly where an
61
+ * un-normalized prefix silently fails to match.
62
+ *
63
+ * The prefix can only ever arrive from caller-supplied input (`path.resolve`
64
+ * preserves it); `realpathSync.native` cannot emit it, because libuv's
65
+ * `fs__realpath_handle` strips it unconditionally.
66
+ *
67
+ * `\\?\Volume{GUID}\…` is deliberately left alone: the remainder of a volume-GUID
68
+ * path is not a usable path, so stripping it would invent a wrong one. The `\\.\`
69
+ * device namespace is left alone for the same reason and one more — most of what
70
+ * it addresses (`\\.\PhysicalDrive0`, `\\.\COM1`, `\\.\pipe\…`) is not a
71
+ * filesystem path at all. Both forms simply fail to match a registry entry, which
72
+ * is the safe direction. `platform` is explicit so the transform is unit-testable
73
+ * off Windows — same shape as `normalizeAnalyzerRootPath` in
74
+ * `src/core/analyzer-identity.ts`.
75
+ *
76
+ * Call this on a `path.resolve`d path. Only the backslash spelling is matched,
77
+ * which is sufficient there because `path.win32.resolve` already folds the
78
+ * forward-slash spelling into it (`//?/D:/a` → `\\?\D:\a`). A raw, unresolved
79
+ * `//?/…` string is returned unchanged rather than half-normalized.
80
+ */
81
+ export declare const stripWindowsLongPathPrefix: (p: string, platform?: NodeJS.Platform) => string;
82
+ /**
83
+ * Split `items` into consecutive slices of at most `size`.
84
+ *
85
+ * Returns an empty array for empty input, and never returns an empty slice, so
86
+ * `for (const batch of chunk(xs, n))` always has something to work on.
87
+ *
88
+ * Callers batching a GRAPH QUERY should take the size from `core/lbug/query-batch.ts`,
89
+ * which documents why a query built from a caller-sized array needs a ceiling at
90
+ * all (#2915) and which of the two ceilings applies: `LBUG_QUERY_BATCH_SIZE` when
91
+ * each item makes the query do more work, `LBUG_ID_PROBE_BATCH_SIZE` when it is a
92
+ * plain `id IN $ids` probe and round trips dominate. They differ by 10x, in
93
+ * opposite directions, for that reason.
94
+ */
95
+ export declare function chunk<T>(items: readonly T[], size: number): T[][];
96
+ /**
97
+ * Run `run` over each item with at most `concurrency` in flight, returning the
98
+ * results in input order.
99
+ *
100
+ * A failure is reported through `onError` and yields `undefined` for that item,
101
+ * so one bad item degrades the result (the caller raises its own `partial`
102
+ * flag) instead of discarding the items that succeeded beside it.
103
+ *
104
+ * This SCHEDULES, it does not synchronize: `run` must be safe to execute
105
+ * concurrently with itself. Both kinds of caller here are — `fs.readFile` per
106
+ * path in the ingestion walkers, and graph queries, where `executeParameterized`
107
+ * checks a connection out of the per-repo pool for the duration of the query
108
+ * (`pool-adapter.ts`) so parallel calls never share one. The default leaves
109
+ * headroom for other in-flight work.
110
+ */
111
+ export declare function mapConcurrent<T, R>(items: readonly T[], run: (item: T) => Promise<R>, options?: {
112
+ concurrency?: number;
113
+ onError?: (error: unknown) => void;
114
+ }): Promise<(R | undefined)[]>;
package/dist/lib/utils.js CHANGED
@@ -1,3 +1,188 @@
1
1
  export const generateId = (label, name) => {
2
2
  return `${label}:${name}`;
3
3
  };
4
+ /**
5
+ * Total order on strings by UTF-16 code unit — deliberately NOT `localeCompare`.
6
+ *
7
+ * `localeCompare` resolves against the host's default ICU locale, so two machines
8
+ * can order the same pair differently and a tie-broken cap keeps a different
9
+ * subset on each (#2787). Code-unit order is host-independent and matches the
10
+ * binary `ORDER BY` the graph queries use, so a JS re-sort reproduces the DB's
11
+ * order instead of fighting it.
12
+ *
13
+ * Use this for every tiebreak that feeds a `.slice()`, a page boundary, or any
14
+ * other cut — `Array.prototype.sort` is stable, so a comparator that returns 0
15
+ * for distinct elements silently falls back to input order.
16
+ */
17
+ export const compareCodeUnits = (a, b) => (a < b ? -1 : a > b ? 1 : 0);
18
+ /**
19
+ * How many links of an `Error.cause` chain any walker below visits, counting
20
+ * the head. THE bound — hand-rolled copies had drifted to three different
21
+ * numbers with three different loop conditions (`depth < 5` in two places,
22
+ * `depth <= 5` in a third, i.e. six levels).
23
+ *
24
+ * The bound exists purely so a cyclic chain (`a.cause = b; b.cause = a`)
25
+ * cannot loop forever. Real chains are one or two links deep — the ingestion
26
+ * phase runner wraps a phase failure once as
27
+ * `new Error("Phase 'X' failed: …", { cause })` — so five leaves ample
28
+ * headroom for future nesting.
29
+ */
30
+ export const CAUSE_CHAIN_MAX_DEPTH = 5;
31
+ /**
32
+ * Walk `err` and its `cause` chain, head first, yielding each `Error` link.
33
+ *
34
+ * Stops at the first non-`Error` link (a `cause` may legally be any value, and
35
+ * a non-Error carries no further `cause` worth following) and after
36
+ * `maxDepth` links. Non-`Error` input yields nothing.
37
+ *
38
+ * THE single cause-chain traversal. Consume this (or {@link findInCauseChain})
39
+ * rather than re-rolling the `for (let depth = 0; …; current = current.cause)`
40
+ * loop: every hand-rolled copy has to re-decide the bound and the loop
41
+ * condition, and they did not agree.
42
+ */
43
+ export function* causeChain(err, maxDepth = CAUSE_CHAIN_MAX_DEPTH) {
44
+ let current = err;
45
+ for (let depth = 0; depth < maxDepth && current instanceof Error; depth++) {
46
+ yield current;
47
+ current = current.cause;
48
+ }
49
+ }
50
+ /**
51
+ * Find the first link of `err`'s cause chain that `match` accepts.
52
+ *
53
+ * Load-bearing for CLI error classification: the ingestion phase runner
54
+ * rewraps every phase failure as `new Error("Phase 'X' failed: …", { cause })`,
55
+ * so a bare `instanceof` at the CLI boundary misses the real error entirely
56
+ * and falls through to a generic stack dump. Classify by TYPE through this
57
+ * helper (the repo norm from #2385), never by message text.
58
+ */
59
+ export function findInCauseChain(err, match, maxDepth = CAUSE_CHAIN_MAX_DEPTH) {
60
+ for (const link of causeChain(err, maxDepth)) {
61
+ if (match(link))
62
+ return link;
63
+ }
64
+ return undefined;
65
+ }
66
+ /**
67
+ * Drop a Windows extended-length (`\\?\`) prefix from a path (#2667).
68
+ *
69
+ * **Comparison domain only.** Never apply this to a string that is about to be
70
+ * handed to `fs`: libuv's `fs__capture_path` only converts WTF-8 to UTF-16 and
71
+ * does *not* re-add the prefix for over-MAX_PATH paths, so stripping an
72
+ * filesystem-facing path would break long-path access on hosts that have not
73
+ * opted into `LongPathsEnabled`. Registry keys, repo-resolution lookups and
74
+ * other pure string comparisons are safe — and are exactly where an
75
+ * un-normalized prefix silently fails to match.
76
+ *
77
+ * The prefix can only ever arrive from caller-supplied input (`path.resolve`
78
+ * preserves it); `realpathSync.native` cannot emit it, because libuv's
79
+ * `fs__realpath_handle` strips it unconditionally.
80
+ *
81
+ * `\\?\Volume{GUID}\…` is deliberately left alone: the remainder of a volume-GUID
82
+ * path is not a usable path, so stripping it would invent a wrong one. The `\\.\`
83
+ * device namespace is left alone for the same reason and one more — most of what
84
+ * it addresses (`\\.\PhysicalDrive0`, `\\.\COM1`, `\\.\pipe\…`) is not a
85
+ * filesystem path at all. Both forms simply fail to match a registry entry, which
86
+ * is the safe direction. `platform` is explicit so the transform is unit-testable
87
+ * off Windows — same shape as `normalizeAnalyzerRootPath` in
88
+ * `src/core/analyzer-identity.ts`.
89
+ *
90
+ * Call this on a `path.resolve`d path. Only the backslash spelling is matched,
91
+ * which is sufficient there because `path.win32.resolve` already folds the
92
+ * forward-slash spelling into it (`//?/D:/a` → `\\?\D:\a`). A raw, unresolved
93
+ * `//?/…` string is returned unchanged rather than half-normalized.
94
+ */
95
+ export const stripWindowsLongPathPrefix = (p, platform = process.platform) => {
96
+ if (platform !== 'win32')
97
+ return p;
98
+ // Both spellings are case-insensitive: the Windows object namespace that
99
+ // `\\?\` addresses is, so `\\?\unc\…` is as valid as `\\?\UNC\…`.
100
+ //
101
+ // Each pattern requires the component that makes the remainder a usable path —
102
+ // a share name after `UNC\`, a separator after the drive colon. Without those
103
+ // the slice would emit something worse than the input it was handed: `\\?\UNC`
104
+ // would become the bare root `\\`, and the drive-relative `\\?\D:foo` would
105
+ // become `D:foo`, which is not absolute and would resolve against the process
106
+ // cwd if a future caller ever passed it to `fs`. A malformed extended path is
107
+ // left untouched instead, so it simply fails to match a registry entry.
108
+ if (/^\\\\\?\\UNC\\(?=[^\\])/i.test(p))
109
+ return `\\\\${p.slice(8)}`;
110
+ if (/^\\\\\?\\[A-Za-z]:\\/.test(p))
111
+ return p.slice(4);
112
+ return p;
113
+ };
114
+ /**
115
+ * Split `items` into consecutive slices of at most `size`.
116
+ *
117
+ * Returns an empty array for empty input, and never returns an empty slice, so
118
+ * `for (const batch of chunk(xs, n))` always has something to work on.
119
+ *
120
+ * Callers batching a GRAPH QUERY should take the size from `core/lbug/query-batch.ts`,
121
+ * which documents why a query built from a caller-sized array needs a ceiling at
122
+ * all (#2915) and which of the two ceilings applies: `LBUG_QUERY_BATCH_SIZE` when
123
+ * each item makes the query do more work, `LBUG_ID_PROBE_BATCH_SIZE` when it is a
124
+ * plain `id IN $ids` probe and round trips dominate. They differ by 10x, in
125
+ * opposite directions, for that reason.
126
+ */
127
+ export function chunk(items, size) {
128
+ // `NaN` fails every comparison, so a bare `size < 1` lets it through and
129
+ // A size is a COUNT, so it has to be a positive integer — `Number.isInteger`
130
+ // rather than `Number.isFinite`, because a fractional size silently DUPLICATES
131
+ // items rather than failing: `slice` truncates its indices while `i` does not,
132
+ // so size 1.5 yields slice(0, 1.5) = items 0-1 and then slice(1.5, 3) = items
133
+ // 1-2, and item 1 lands in two batches. `NaN` is the other shape this rejects —
134
+ // it fails every comparison, so a bare `size < 1` lets it through and `i += NaN`
135
+ // produces exactly one empty slice, which the docstring promises never to
136
+ // return. `mapConcurrent`'s `Math.max(1, …)` propagates a NaN concurrency the
137
+ // same way.
138
+ if (!Number.isInteger(size) || size < 1) {
139
+ throw new RangeError(`chunk size must be a positive integer, got ${size}`);
140
+ }
141
+ const batches = [];
142
+ for (let i = 0; i < items.length; i += size)
143
+ batches.push(items.slice(i, i + size));
144
+ return batches;
145
+ }
146
+ /**
147
+ * Run `run` over each item with at most `concurrency` in flight, returning the
148
+ * results in input order.
149
+ *
150
+ * A failure is reported through `onError` and yields `undefined` for that item,
151
+ * so one bad item degrades the result (the caller raises its own `partial`
152
+ * flag) instead of discarding the items that succeeded beside it.
153
+ *
154
+ * This SCHEDULES, it does not synchronize: `run` must be safe to execute
155
+ * concurrently with itself. Both kinds of caller here are — `fs.readFile` per
156
+ * path in the ingestion walkers, and graph queries, where `executeParameterized`
157
+ * checks a connection out of the per-repo pool for the duration of the query
158
+ * (`pool-adapter.ts`) so parallel calls never share one. The default leaves
159
+ * headroom for other in-flight work.
160
+ */
161
+ export async function mapConcurrent(items, run, options = {}) {
162
+ const settle = async (item) => {
163
+ try {
164
+ return await run(item);
165
+ }
166
+ catch (error) {
167
+ // Reporting a failure must not become a failure. `onError` is caller-supplied
168
+ // — a logger with a bad format string is enough — and an uncaught throw here
169
+ // rejects `settle`, which rejects the whole `Promise.all` wave and discards
170
+ // the neighbouring successes this function exists to preserve.
171
+ try {
172
+ options.onError?.(error);
173
+ }
174
+ catch {
175
+ /* empty */
176
+ }
177
+ return undefined;
178
+ }
179
+ };
180
+ // Wave scheduling rather than a rolling window: measured on the real query
181
+ // path the two are within noise (538ms vs 532ms on a 1,000-file diff, whose
182
+ // per-batch times spread only 1.35x), and most inputs produce a single wave.
183
+ const results = [];
184
+ for (const wave of chunk(items, Math.max(1, options.concurrency ?? 4))) {
185
+ results.push(...(await Promise.all(wave.map(settle))));
186
+ }
187
+ return results;
188
+ }
@@ -0,0 +1,77 @@
1
+ import { type SpringAopReason } from '../../core/ingestion/frameworks/spring/aop.js';
2
+ type SpringAopBehaviorReason = Extract<SpringAopReason, {
3
+ kind: 'behavior';
4
+ }>;
5
+ type SpringAopAdviceReason = Extract<SpringAopReason, {
6
+ kind: 'advice';
7
+ }>;
8
+ type SpringAopAspectReason = Extract<SpringAopReason, {
9
+ kind: 'aspect';
10
+ }>;
11
+ type SpringAopPointcutReason = Extract<SpringAopReason, {
12
+ kind: 'pointcut';
13
+ }>;
14
+ export interface SpringAopBehaviorMetadata {
15
+ readonly annotation: string;
16
+ readonly behavior: SpringAopBehaviorReason['behavior'];
17
+ readonly declaredOn: SpringAopBehaviorReason['declaredOn'];
18
+ readonly activation: SpringAopBehaviorReason['activation'];
19
+ readonly evidenceId: string;
20
+ }
21
+ export interface SpringAopAdviceMetadata {
22
+ readonly annotation: string;
23
+ readonly advice: SpringAopAdviceReason['advice'];
24
+ readonly pointcut: string;
25
+ readonly match: SpringAopAdviceReason['match'];
26
+ readonly activation: SpringAopAdviceReason['activation'];
27
+ readonly adviceId: string;
28
+ readonly adviceName?: string;
29
+ readonly adviceFilePath?: string;
30
+ readonly advisedId: string;
31
+ readonly advisedName?: string;
32
+ readonly advisedFilePath?: string;
33
+ }
34
+ export interface SpringAopUnresolvedPointcutMetadata {
35
+ readonly annotation: string;
36
+ readonly pointcut: string | null;
37
+ readonly adviceId: string;
38
+ readonly adviceName?: string;
39
+ readonly adviceFilePath?: string;
40
+ readonly evidenceId: string;
41
+ }
42
+ export interface SpringAopResolvedPointcutMetadata {
43
+ readonly annotation: string;
44
+ readonly pointcut: string;
45
+ readonly match: Extract<SpringAopPointcutReason['match'], 'static'>;
46
+ readonly resolution: Extract<SpringAopPointcutReason['resolution'], 'resolved'>;
47
+ readonly adviceId: string;
48
+ readonly adviceName?: string;
49
+ readonly adviceFilePath?: string;
50
+ readonly evidenceId: string;
51
+ }
52
+ export interface SpringAopAspectMetadata {
53
+ readonly annotation: string;
54
+ readonly activation: SpringAopAspectReason['activation'];
55
+ readonly registration: SpringAopAspectReason['registration'];
56
+ readonly evidenceId: string;
57
+ }
58
+ export interface SpringAopMetadata {
59
+ readonly framework: 'spring';
60
+ readonly proxied?: 'possible';
61
+ readonly truncated?: true;
62
+ readonly aspect?: SpringAopAspectMetadata;
63
+ readonly behaviors: readonly SpringAopBehaviorMetadata[];
64
+ readonly advices: readonly SpringAopAdviceMetadata[];
65
+ readonly resolvedPointcuts: readonly SpringAopResolvedPointcutMetadata[];
66
+ readonly unresolvedPointcuts: readonly SpringAopUnresolvedPointcutMetadata[];
67
+ }
68
+ /**
69
+ * Read additive Spring proxy/advice metadata for context and impact results.
70
+ *
71
+ * The helper intentionally trusts only versioned reasons accepted by the
72
+ * shared decoder. Other DECLARES edges (for example Spring Bean factories)
73
+ * and malformed/forward-version evidence are ignored. Query failures are
74
+ * fail-soft because older or partially upgraded indexes must remain readable.
75
+ */
76
+ export declare function querySpringAopMetadata(lbugPath: string, symbolId: string, symbolType: string): Promise<SpringAopMetadata | undefined>;
77
+ export {};
@@ -0,0 +1,227 @@
1
+ import { executeParameterized } from '../../core/lbug/pool-adapter.js';
2
+ import { decodeSpringAopReason, } from '../../core/ingestion/frameworks/spring/aop.js';
3
+ const SUPPORTED_SYMBOL_TYPES = new Set(['Class', 'Interface', 'Method', 'CodeElement']);
4
+ const QUERY_RESULT_LIMIT = 1_000;
5
+ const QUERY_FETCH_LIMIT = QUERY_RESULT_LIMIT + 1;
6
+ function readRowValue(row, name, index) {
7
+ if (typeof row === 'object' && row !== null && name in row) {
8
+ return row[name];
9
+ }
10
+ return Array.isArray(row) ? row[index] : undefined;
11
+ }
12
+ function readRequiredString(row, name, index) {
13
+ const value = readRowValue(row, name, index);
14
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
15
+ }
16
+ function readOptionalString(row, name, index) {
17
+ const value = readRowValue(row, name, index);
18
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
19
+ }
20
+ function normalizeRelationshipRow(row) {
21
+ const sourceId = readRequiredString(row, 'sourceId', 0);
22
+ const targetId = readRequiredString(row, 'targetId', 3);
23
+ if (sourceId === undefined || targetId === undefined)
24
+ return undefined;
25
+ const sourceName = readOptionalString(row, 'sourceName', 1);
26
+ const sourceFilePath = readOptionalString(row, 'sourceFilePath', 2);
27
+ const targetName = readOptionalString(row, 'targetName', 4);
28
+ const targetFilePath = readOptionalString(row, 'targetFilePath', 5);
29
+ return {
30
+ sourceId,
31
+ ...optionalField('sourceName', sourceName),
32
+ ...optionalField('sourceFilePath', sourceFilePath),
33
+ targetId,
34
+ ...optionalField('targetName', targetName),
35
+ ...optionalField('targetFilePath', targetFilePath),
36
+ reason: readRowValue(row, 'reason', 6),
37
+ };
38
+ }
39
+ function optionalField(key, value) {
40
+ return value === undefined ? {} : { [key]: value };
41
+ }
42
+ function stableDedupe(values, keyOf) {
43
+ const unique = new Map();
44
+ for (const value of values)
45
+ unique.set(keyOf(value), value);
46
+ return [...unique.entries()]
47
+ .sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))
48
+ .map(([, value]) => value);
49
+ }
50
+ const RELATIONSHIP_PROJECTION = `
51
+ RETURN source.id AS sourceId, source.name AS sourceName, source.filePath AS sourceFilePath,
52
+ target.id AS targetId, target.name AS targetName, target.filePath AS targetFilePath,
53
+ r.reason AS reason, r.step AS step
54
+ `;
55
+ const DETERMINISTIC_RELATIONSHIP_ORDER = 'ORDER BY sourceId, targetId, reason, step';
56
+ /**
57
+ * Read additive Spring proxy/advice metadata for context and impact results.
58
+ *
59
+ * The helper intentionally trusts only versioned reasons accepted by the
60
+ * shared decoder. Other DECLARES edges (for example Spring Bean factories)
61
+ * and malformed/forward-version evidence are ignored. Query failures are
62
+ * fail-soft because older or partially upgraded indexes must remain readable.
63
+ */
64
+ export async function querySpringAopMetadata(lbugPath, symbolId, symbolType) {
65
+ if (!SUPPORTED_SYMBOL_TYPES.has(symbolType))
66
+ return undefined;
67
+ try {
68
+ const [outgoingAdviceRows, incomingAdviceRows, outgoingPointcutRows, incomingPointcutRows] = await Promise.all([
69
+ executeParameterized(lbugPath, `MATCH (source {id: $symbolId})-[r:CodeRelation]->(target)
70
+ WHERE r.type = 'ADVISED_BY'
71
+ AND r.reason STARTS WITH 'spring-aop:v1:'
72
+ ${RELATIONSHIP_PROJECTION}
73
+ ${DETERMINISTIC_RELATIONSHIP_ORDER}
74
+ LIMIT 1001`, { symbolId }),
75
+ executeParameterized(lbugPath, `MATCH (source)-[r:CodeRelation]->(target {id: $symbolId})
76
+ WHERE r.type = 'ADVISED_BY'
77
+ AND r.reason STARTS WITH 'spring-aop:v1:'
78
+ ${RELATIONSHIP_PROJECTION}
79
+ ${DETERMINISTIC_RELATIONSHIP_ORDER}
80
+ LIMIT 1001`, { symbolId }),
81
+ executeParameterized(lbugPath, `MATCH (source {id: $symbolId})-[r:CodeRelation]->(target:CodeElement)
82
+ WHERE r.type = 'DECLARES'
83
+ AND r.reason STARTS WITH 'spring-aop:v1:'
84
+ ${RELATIONSHIP_PROJECTION}
85
+ ${DETERMINISTIC_RELATIONSHIP_ORDER}
86
+ LIMIT 1001`, { symbolId }),
87
+ executeParameterized(lbugPath, `MATCH (source)-[r:CodeRelation]->(target:CodeElement {id: $symbolId})
88
+ WHERE r.type = 'DECLARES'
89
+ AND r.reason STARTS WITH 'spring-aop:v1:'
90
+ ${RELATIONSHIP_PROJECTION}
91
+ ${DETERMINISTIC_RELATIONSHIP_ORDER}
92
+ LIMIT 1001`, { symbolId }),
93
+ ]);
94
+ const behaviors = [];
95
+ const advices = [];
96
+ const resolvedPointcuts = [];
97
+ const unresolvedPointcuts = [];
98
+ const aspects = [];
99
+ const truncated = [
100
+ outgoingAdviceRows,
101
+ incomingAdviceRows,
102
+ outgoingPointcutRows,
103
+ incomingPointcutRows,
104
+ ].some((rows) => rows.length >= QUERY_FETCH_LIMIT);
105
+ let queriedSymbolIsAdvisedSource = false;
106
+ for (const [rows, isOutgoing] of [
107
+ [outgoingAdviceRows, true],
108
+ [incomingAdviceRows, false],
109
+ ]) {
110
+ for (const rawRow of rows.slice(0, QUERY_RESULT_LIMIT)) {
111
+ const row = normalizeRelationshipRow(rawRow);
112
+ if (row === undefined)
113
+ continue;
114
+ const reason = decodeSpringAopReason(row.reason);
115
+ if (reason?.kind === 'behavior') {
116
+ if (isOutgoing)
117
+ queriedSymbolIsAdvisedSource = true;
118
+ behaviors.push({
119
+ annotation: reason.annotation,
120
+ behavior: reason.behavior,
121
+ declaredOn: reason.declaredOn,
122
+ activation: reason.activation,
123
+ evidenceId: row.targetId,
124
+ });
125
+ }
126
+ else if (reason?.kind === 'advice') {
127
+ if (isOutgoing)
128
+ queriedSymbolIsAdvisedSource = true;
129
+ advices.push({
130
+ annotation: reason.annotation,
131
+ advice: reason.advice,
132
+ pointcut: reason.pointcut,
133
+ match: reason.match,
134
+ activation: reason.activation,
135
+ adviceId: row.targetId,
136
+ ...optionalField('adviceName', row.targetName),
137
+ ...optionalField('adviceFilePath', row.targetFilePath),
138
+ advisedId: row.sourceId,
139
+ ...optionalField('advisedName', row.sourceName),
140
+ ...optionalField('advisedFilePath', row.sourceFilePath),
141
+ });
142
+ }
143
+ }
144
+ }
145
+ for (const rows of [outgoingPointcutRows, incomingPointcutRows]) {
146
+ for (const rawRow of rows.slice(0, QUERY_RESULT_LIMIT)) {
147
+ const row = normalizeRelationshipRow(rawRow);
148
+ if (row === undefined)
149
+ continue;
150
+ const reason = decodeSpringAopReason(row.reason);
151
+ if (reason?.kind === 'aspect') {
152
+ aspects.push({
153
+ annotation: reason.annotation,
154
+ activation: reason.activation,
155
+ registration: reason.registration,
156
+ evidenceId: row.targetId,
157
+ });
158
+ }
159
+ else if (reason?.kind === 'pointcut' &&
160
+ reason.match === 'static' &&
161
+ reason.resolution === 'resolved' &&
162
+ typeof reason.pointcut === 'string') {
163
+ resolvedPointcuts.push({
164
+ annotation: reason.annotation,
165
+ pointcut: reason.pointcut,
166
+ match: reason.match,
167
+ resolution: reason.resolution,
168
+ adviceId: row.sourceId,
169
+ ...optionalField('adviceName', row.sourceName),
170
+ ...optionalField('adviceFilePath', row.sourceFilePath),
171
+ evidenceId: row.targetId,
172
+ });
173
+ }
174
+ else if (reason?.kind === 'pointcut' && reason.match === 'unresolved') {
175
+ unresolvedPointcuts.push({
176
+ annotation: reason.annotation,
177
+ pointcut: reason.pointcut,
178
+ adviceId: row.sourceId,
179
+ ...optionalField('adviceName', row.sourceName),
180
+ ...optionalField('adviceFilePath', row.sourceFilePath),
181
+ evidenceId: row.targetId,
182
+ });
183
+ }
184
+ }
185
+ }
186
+ const dedupedAspects = stableDedupe(aspects, (aspect) => JSON.stringify([aspect.annotation, aspect.evidenceId]));
187
+ const dedupedBehaviors = stableDedupe(behaviors, (behavior) => JSON.stringify([
188
+ behavior.behavior,
189
+ behavior.annotation,
190
+ behavior.declaredOn,
191
+ behavior.evidenceId,
192
+ ]));
193
+ const dedupedAdvices = stableDedupe(advices, (advice) => JSON.stringify([advice.advisedId, advice.adviceId, advice.advice, advice.pointcut]));
194
+ const dedupedPointcuts = stableDedupe(unresolvedPointcuts, (pointcut) => JSON.stringify([
195
+ pointcut.adviceId,
196
+ pointcut.evidenceId,
197
+ pointcut.annotation,
198
+ pointcut.pointcut,
199
+ ]));
200
+ const dedupedResolvedPointcuts = stableDedupe(resolvedPointcuts, (pointcut) => JSON.stringify([
201
+ pointcut.adviceId,
202
+ pointcut.evidenceId,
203
+ pointcut.annotation,
204
+ pointcut.pointcut,
205
+ ]));
206
+ if (dedupedAspects.length === 0 &&
207
+ dedupedBehaviors.length === 0 &&
208
+ dedupedAdvices.length === 0 &&
209
+ dedupedResolvedPointcuts.length === 0 &&
210
+ dedupedPointcuts.length === 0) {
211
+ return undefined;
212
+ }
213
+ return {
214
+ framework: 'spring',
215
+ ...(queriedSymbolIsAdvisedSource ? { proxied: 'possible' } : {}),
216
+ ...(truncated ? { truncated: true } : {}),
217
+ ...(dedupedAspects[0] === undefined ? {} : { aspect: dedupedAspects[0] }),
218
+ behaviors: dedupedBehaviors,
219
+ advices: dedupedAdvices,
220
+ resolvedPointcuts: dedupedResolvedPointcuts,
221
+ unresolvedPointcuts: dedupedPointcuts,
222
+ };
223
+ }
224
+ catch {
225
+ return undefined;
226
+ }
227
+ }
@@ -1,2 +1,3 @@
1
1
  import { type SpringBeanMetadata } from '../../core/ingestion/frameworks/spring/bean-catalog.js';
2
- export declare function queryClassBeanMetadata(lbugPath: string, symbolId: string, symbolType: string): Promise<SpringBeanMetadata | undefined>;
2
+ import { type SpringBeanFactoryMetadata } from '../../core/ingestion/frameworks/spring/bean-factories.js';
3
+ export declare function queryClassBeanMetadata(lbugPath: string, symbolId: string, symbolType: string): Promise<SpringBeanMetadata | SpringBeanFactoryMetadata | undefined>;
@@ -1,9 +1,30 @@
1
1
  import { executeParameterized } from '../../core/lbug/pool-adapter.js';
2
2
  import { deriveSpringBeanMetadata, } from '../../core/ingestion/frameworks/spring/bean-catalog.js';
3
+ import { decodeSpringBeanFactoryReason, } from '../../core/ingestion/frameworks/spring/bean-factories.js';
3
4
  export async function queryClassBeanMetadata(lbugPath, symbolId, symbolType) {
4
- if (symbolType !== 'Class')
5
+ if (symbolType !== 'Class' && symbolType !== 'Method' && symbolType !== 'CodeElement') {
5
6
  return undefined;
7
+ }
6
8
  try {
9
+ if (symbolType !== 'Class') {
10
+ const pattern = symbolType === 'Method'
11
+ ? 'MATCH (m:Method {id: $symbolId})-[r:CodeRelation]->(b:CodeElement)'
12
+ : 'MATCH (m:Method)-[r:CodeRelation]->(b:CodeElement {id: $symbolId})';
13
+ // determinism: probe — PK-anchored singleton. A @Bean factory's declaration
14
+ // node id is derived from the declaring method's id
15
+ // (`CodeElement:spring-bean:<methodId>`, see bean-factories.ts), so exactly
16
+ // one DECLARES edge with this reason prefix exists per anchored endpoint,
17
+ // whichever end `$symbolId` pins.
18
+ const rows = await executeParameterized(lbugPath, `${pattern}
19
+ WHERE r.type = 'DECLARES'
20
+ AND r.reason STARTS WITH 'spring-bean-factory:'
21
+ RETURN r.reason AS reason
22
+ LIMIT 1`, { symbolId });
23
+ const row = rows[0];
24
+ return row === undefined ? undefined : decodeSpringBeanFactoryReason(row.reason ?? row[0]);
25
+ }
26
+ // determinism: probe — PK-anchored singleton. `$symbolId` is a node primary
27
+ // key, so at most one Class row can match and the LIMIT never chooses.
7
28
  const rows = await executeParameterized(lbugPath, `
8
29
  MATCH (c:Class {id: $symbolId})
9
30
  RETURN c.frameworkAnnotations AS frameworkAnnotations
@@ -0,0 +1,8 @@
1
+ import { executeParameterized } from '../../core/lbug/pool-adapter.js';
2
+ export interface ConvexDispatchMetadata {
3
+ readonly factory?: string;
4
+ readonly boundary: string;
5
+ readonly staleIndex?: true;
6
+ readonly probeFailed?: true;
7
+ }
8
+ export declare function queryConvexDispatchMetadata(lbugPath: string, symbolId: string, symbolName: string, symbolType: string, runQuery?: typeof executeParameterized): Promise<ConvexDispatchMetadata | undefined>;