gitnexus 1.6.10-rc.21 → 1.6.10-rc.211

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (870) hide show
  1. package/README.md +212 -22
  2. package/dist/_shared/graph/types.d.ts +27 -8
  3. package/dist/_shared/graph/types.d.ts.map +1 -1
  4. package/dist/_shared/index.d.ts +4 -3
  5. package/dist/_shared/index.d.ts.map +1 -1
  6. package/dist/_shared/index.js +1 -1
  7. package/dist/_shared/index.js.map +1 -1
  8. package/dist/_shared/integrations/circuit-breaker.d.ts.map +1 -1
  9. package/dist/_shared/integrations/circuit-breaker.js.map +1 -1
  10. package/dist/_shared/integrations/resilient-fetch.d.ts +19 -1
  11. package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
  12. package/dist/_shared/integrations/resilient-fetch.js +23 -10
  13. package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
  14. package/dist/_shared/language-detection.d.ts.map +1 -1
  15. package/dist/_shared/lbug/schema-constants.d.ts +2 -2
  16. package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
  17. package/dist/_shared/lbug/schema-constants.js +3 -0
  18. package/dist/_shared/lbug/schema-constants.js.map +1 -1
  19. package/dist/_shared/scope-resolution/callable-flow-site.d.ts +110 -0
  20. package/dist/_shared/scope-resolution/callable-flow-site.d.ts.map +1 -0
  21. package/dist/_shared/scope-resolution/callable-flow-site.js +11 -0
  22. package/dist/_shared/scope-resolution/callable-flow-site.js.map +1 -0
  23. package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
  24. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +6 -1
  25. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
  26. package/dist/_shared/scope-resolution/finalize-algorithm.js +316 -37
  27. package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
  28. package/dist/_shared/scope-resolution/parsed-file.d.ts +7 -0
  29. package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
  30. package/dist/_shared/scope-resolution/reference-site.d.ts +124 -1
  31. package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
  32. package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
  33. package/dist/_shared/scope-resolution/registries/lookup-core.d.ts.map +1 -1
  34. package/dist/_shared/scope-resolution/registries/lookup-core.js +58 -2
  35. package/dist/_shared/scope-resolution/registries/lookup-core.js.map +1 -1
  36. package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -1
  37. package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -1
  38. package/dist/_shared/scope-resolution/scope-tree.js.map +1 -1
  39. package/dist/_shared/scope-resolution/symbol-definition.d.ts +47 -0
  40. package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
  41. package/dist/_shared/scope-resolution/types.d.ts +297 -5
  42. package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
  43. package/dist/cli/ai-context.d.ts +10 -2
  44. package/dist/cli/ai-context.js +128 -61
  45. package/dist/cli/analyze-config.d.ts +1 -1
  46. package/dist/cli/analyze-options.d.ts +131 -0
  47. package/dist/cli/analyze-options.js +1 -0
  48. package/dist/cli/analyze.d.ts +25 -114
  49. package/dist/cli/analyze.js +194 -36
  50. package/dist/cli/cli-message.d.ts +1 -1
  51. package/dist/cli/detect-changes-format.js +19 -2
  52. package/dist/cli/doctor.d.ts +23 -0
  53. package/dist/cli/doctor.js +72 -9
  54. package/dist/cli/editor-targets.js +6 -0
  55. package/dist/cli/eval-server.d.ts +23 -1
  56. package/dist/cli/eval-server.js +128 -9
  57. package/dist/cli/format-symbol.d.ts +15 -0
  58. package/dist/cli/format-symbol.js +17 -0
  59. package/dist/cli/generated-skill.d.ts +17 -0
  60. package/dist/cli/generated-skill.js +1 -0
  61. package/dist/cli/group.js +23 -2
  62. package/dist/cli/help-i18n.js +3 -0
  63. package/dist/cli/i18n/en.d.ts +17 -8
  64. package/dist/cli/i18n/en.js +19 -8
  65. package/dist/cli/i18n/resources.d.ts +26 -8
  66. package/dist/cli/i18n/zh-CN.d.ts +9 -0
  67. package/dist/cli/i18n/zh-CN.js +17 -8
  68. package/dist/cli/index.js +16 -9
  69. package/dist/cli/lazy-action.d.ts +7 -0
  70. package/dist/cli/lazy-action.js +27 -0
  71. package/dist/cli/mcp.js +6 -3
  72. package/dist/cli/resolve-invocation.d.ts +7 -3
  73. package/dist/cli/resolve-invocation.js +7 -3
  74. package/dist/cli/setup.d.ts +8 -0
  75. package/dist/cli/setup.js +30 -7
  76. package/dist/cli/skill-gen.d.ts +1 -6
  77. package/dist/cli/skill-gen.js +88 -18
  78. package/dist/cli/standard-skills.d.ts +76 -0
  79. package/dist/cli/standard-skills.js +45 -0
  80. package/dist/cli/status.d.ts +4 -1
  81. package/dist/cli/status.js +57 -4
  82. package/dist/cli/tool.d.ts +1 -0
  83. package/dist/cli/tool.js +75 -7
  84. package/dist/cli/uninstall.js +7 -2
  85. package/dist/cli/wiki.d.ts +1 -0
  86. package/dist/cli/wiki.js +59 -10
  87. package/dist/config/ignore-service.d.ts +2 -0
  88. package/dist/config/ignore-service.js +31 -4
  89. package/dist/core/analysis-features.d.ts +21 -0
  90. package/dist/core/analysis-features.js +59 -0
  91. package/dist/core/analyzer-identity.d.ts +154 -0
  92. package/dist/core/analyzer-identity.js +2158 -0
  93. package/dist/core/augmentation/engine.js +95 -76
  94. package/dist/core/embedding-checkpoint.d.ts +143 -0
  95. package/dist/core/embedding-checkpoint.js +221 -0
  96. package/dist/core/embedding-count.d.ts +61 -0
  97. package/dist/core/embedding-count.js +69 -0
  98. package/dist/core/embeddings/ast-utils.js +9 -1
  99. package/dist/core/embeddings/embedder.d.ts +3 -2
  100. package/dist/core/embeddings/embedder.js +8 -5
  101. package/dist/core/embeddings/embedding-identity.d.ts +11 -0
  102. package/dist/core/embeddings/embedding-identity.js +24 -0
  103. package/dist/core/embeddings/embedding-pipeline.d.ts +24 -1
  104. package/dist/core/embeddings/embedding-pipeline.js +341 -19
  105. package/dist/core/embeddings/http-client.d.ts +10 -2
  106. package/dist/core/embeddings/http-client.js +282 -47
  107. package/dist/core/embeddings/node-module-compat.d.ts +4 -2
  108. package/dist/core/embeddings/node-module-compat.js +4 -2
  109. package/dist/core/embeddings/onnxruntime-common-resolver.js +5 -5
  110. package/dist/core/embeddings/onnxruntime-node-resolver.js +2 -2
  111. package/dist/core/embeddings/runtime-install.js +1 -1
  112. package/dist/core/git-staleness.js +1 -1
  113. package/dist/core/graph/graph.js +3 -0
  114. package/dist/core/graph/import-cycles.d.ts +194 -3
  115. package/dist/core/graph/import-cycles.js +522 -73
  116. package/dist/core/graph/types.d.ts +18 -0
  117. package/dist/core/group/bridge-db.js +5 -27
  118. package/dist/core/group/cross-impact.d.ts +21 -0
  119. package/dist/core/group/cross-impact.js +128 -15
  120. package/dist/core/group/cross-trace.js +27 -16
  121. package/dist/core/group/extractors/http-patterns/java.js +91 -14
  122. package/dist/core/group/extractors/http-patterns/node.js +19 -0
  123. package/dist/core/group/extractors/http-patterns/types.d.ts +8 -0
  124. package/dist/core/group/extractors/http-route-extractor.d.ts +1 -0
  125. package/dist/core/group/extractors/http-route-extractor.js +122 -48
  126. package/dist/core/group/extractors/include-extractor.js +20 -2
  127. package/dist/core/group/extractors/manifest-extractor.d.ts +1 -1
  128. package/dist/core/group/extractors/manifest-extractor.js +7 -7
  129. package/dist/core/group/service.js +10 -1
  130. package/dist/core/group/storage.js +2 -33
  131. package/dist/core/group/types.d.ts +18 -0
  132. package/dist/core/incremental/subgraph-extract.d.ts +9 -6
  133. package/dist/core/incremental/subgraph-extract.js +33 -10
  134. package/dist/core/index-freshness.d.ts +80 -0
  135. package/dist/core/index-freshness.js +120 -0
  136. package/dist/core/ingestion/call-processor.d.ts +13 -1
  137. package/dist/core/ingestion/call-processor.js +110 -3
  138. package/dist/core/ingestion/cfg/callee-cell-format.d.ts +42 -0
  139. package/dist/core/ingestion/cfg/callee-cell-format.js +42 -0
  140. package/dist/core/ingestion/cfg/emit.d.ts +8 -23
  141. package/dist/core/ingestion/cfg/emit.js +9 -23
  142. package/dist/core/ingestion/class-extractors/configs/go.js +10 -5
  143. package/dist/core/ingestion/class-extractors/configs/jvm.js +29 -0
  144. package/dist/core/ingestion/cluster-enricher.js +8 -4
  145. package/dist/core/ingestion/cobol/cobol-preprocessor.js +1 -1
  146. package/dist/core/ingestion/community-processor.d.ts +21 -3
  147. package/dist/core/ingestion/community-processor.js +88 -83
  148. package/dist/core/ingestion/di-extractors/index.d.ts +22 -34
  149. package/dist/core/ingestion/di-extractors/index.js +17 -18
  150. package/dist/core/ingestion/di-extractors/spring.d.ts +27 -5
  151. package/dist/core/ingestion/di-extractors/spring.js +87 -3
  152. package/dist/core/ingestion/di-extractors/types.d.ts +60 -0
  153. package/dist/core/ingestion/di-extractors/types.js +15 -0
  154. package/dist/core/ingestion/emit-references.js +4 -0
  155. package/dist/core/ingestion/filesystem-walker.js +16 -12
  156. package/dist/core/ingestion/finalize-orchestrator.js +1 -0
  157. package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +9 -0
  158. package/dist/core/ingestion/frameworks/spring/analysis-features.js +41 -0
  159. package/dist/core/ingestion/frameworks/spring/annotation-arguments.d.ts +13 -0
  160. package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +227 -0
  161. package/dist/core/ingestion/frameworks/spring/aop-candidates.d.ts +15 -0
  162. package/dist/core/ingestion/frameworks/spring/aop-candidates.js +85 -0
  163. package/dist/core/ingestion/frameworks/spring/aop.d.ts +118 -0
  164. package/dist/core/ingestion/frameworks/spring/aop.js +476 -0
  165. package/dist/core/ingestion/frameworks/spring/auto-configuration.d.ts +8 -0
  166. package/dist/core/ingestion/frameworks/spring/auto-configuration.js +16 -0
  167. package/dist/core/ingestion/frameworks/spring/bean-candidates.d.ts +30 -0
  168. package/dist/core/ingestion/frameworks/spring/bean-candidates.js +182 -0
  169. package/dist/core/ingestion/frameworks/spring/bean-catalog.d.ts +12 -0
  170. package/dist/core/ingestion/frameworks/spring/bean-catalog.js +27 -0
  171. package/dist/core/ingestion/frameworks/spring/bean-factories.d.ts +33 -0
  172. package/dist/core/ingestion/frameworks/spring/bean-factories.js +65 -0
  173. package/dist/core/ingestion/frameworks/spring/conditionals.d.ts +25 -0
  174. package/dist/core/ingestion/frameworks/spring/conditionals.js +319 -0
  175. package/dist/core/ingestion/frameworks/spring/config-bindings.d.ts +24 -0
  176. package/dist/core/ingestion/frameworks/spring/config-bindings.js +115 -0
  177. package/dist/core/ingestion/frameworks/spring/di-metadata.d.ts +48 -0
  178. package/dist/core/ingestion/frameworks/spring/di-metadata.js +379 -0
  179. package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +28 -0
  180. package/dist/core/ingestion/frameworks/spring/non-http-handlers.js +152 -0
  181. package/dist/core/ingestion/frameworks/spring/resource-injection.d.ts +5 -0
  182. package/dist/core/ingestion/frameworks/spring/resource-injection.js +91 -0
  183. package/dist/core/ingestion/import-resolvers/configs/csharp.js +5 -1
  184. package/dist/core/ingestion/import-resolvers/configs/swift.js +13 -0
  185. package/dist/core/ingestion/import-resolvers/csharp.d.ts +9 -1
  186. package/dist/core/ingestion/import-resolvers/csharp.js +234 -27
  187. package/dist/core/ingestion/import-resolvers/go.d.ts +11 -1
  188. package/dist/core/ingestion/import-resolvers/go.js +44 -17
  189. package/dist/core/ingestion/import-resolvers/jvm.d.ts +2 -2
  190. package/dist/core/ingestion/import-resolvers/node-workspace-packages.d.ts +90 -0
  191. package/dist/core/ingestion/import-resolvers/node-workspace-packages.js +428 -0
  192. package/dist/core/ingestion/import-resolvers/package-dir-index.d.ts +124 -0
  193. package/dist/core/ingestion/import-resolvers/package-dir-index.js +223 -0
  194. package/dist/core/ingestion/import-resolvers/pass-cache.d.ts +50 -0
  195. package/dist/core/ingestion/import-resolvers/pass-cache.js +60 -0
  196. package/dist/core/ingestion/import-resolvers/per-file-set.d.ts +71 -0
  197. package/dist/core/ingestion/import-resolvers/per-file-set.js +11 -0
  198. package/dist/core/ingestion/import-resolvers/php.d.ts +1 -1
  199. package/dist/core/ingestion/import-resolvers/php.js +27 -8
  200. package/dist/core/ingestion/import-resolvers/python-file-index.d.ts +201 -0
  201. package/dist/core/ingestion/import-resolvers/python-file-index.js +302 -0
  202. package/dist/core/ingestion/import-resolvers/python.js +25 -6
  203. package/dist/core/ingestion/import-resolvers/ruby.d.ts +1 -1
  204. package/dist/core/ingestion/import-resolvers/rust.d.ts +2 -2
  205. package/dist/core/ingestion/import-resolvers/standard.d.ts +1 -1
  206. package/dist/core/ingestion/import-resolvers/types.d.ts +1 -12
  207. package/dist/core/ingestion/import-resolvers/utils.d.ts +65 -6
  208. package/dist/core/ingestion/import-resolvers/utils.js +215 -36
  209. package/dist/core/ingestion/import-resolvers/workspace-file-index.d.ts +72 -0
  210. package/dist/core/ingestion/import-resolvers/workspace-file-index.js +58 -0
  211. package/dist/core/ingestion/language-config.d.ts +20 -1
  212. package/dist/core/ingestion/language-config.js +18 -23
  213. package/dist/core/ingestion/language-provider.d.ts +133 -7
  214. package/dist/core/ingestion/languages/c/captures.js +63 -0
  215. package/dist/core/ingestion/languages/c/import-target.js +12 -16
  216. package/dist/core/ingestion/languages/c/query.js +17 -0
  217. package/dist/core/ingestion/languages/c/scope-resolver.js +26 -19
  218. package/dist/core/ingestion/languages/c/static-linkage.js +12 -16
  219. package/dist/core/ingestion/languages/c-cpp.js +13 -0
  220. package/dist/core/ingestion/languages/cobol/captures.js +93 -0
  221. package/dist/core/ingestion/languages/cobol/scope-resolver.js +34 -20
  222. package/dist/core/ingestion/languages/cobol.js +13 -0
  223. package/dist/core/ingestion/languages/cpp/adl.d.ts +2 -2
  224. package/dist/core/ingestion/languages/cpp/adl.js +67 -44
  225. package/dist/core/ingestion/languages/cpp/captures.js +222 -3
  226. package/dist/core/ingestion/languages/cpp/file-local-linkage.js +11 -15
  227. package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +28 -8
  228. package/dist/core/ingestion/languages/cpp/inline-namespaces.js +242 -68
  229. package/dist/core/ingestion/languages/cpp/interpret.d.ts +2 -0
  230. package/dist/core/ingestion/languages/cpp/interpret.js +126 -6
  231. package/dist/core/ingestion/languages/cpp/query.js +106 -0
  232. package/dist/core/ingestion/languages/cpp/scope-resolver.js +62 -20
  233. package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +2 -15
  234. package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +18 -10
  235. package/dist/core/ingestion/languages/csharp/captures.js +44 -0
  236. package/dist/core/ingestion/languages/csharp/import-target.js +46 -72
  237. package/dist/core/ingestion/languages/csharp/namespace-siblings.js +5 -1
  238. package/dist/core/ingestion/languages/csharp/query.js +25 -5
  239. package/dist/core/ingestion/languages/csharp/scope-resolver.js +75 -2
  240. package/dist/core/ingestion/languages/dart/captures.d.ts +10 -0
  241. package/dist/core/ingestion/languages/dart/captures.js +686 -16
  242. package/dist/core/ingestion/languages/dart/extension-type-preprocess.d.ts +7 -0
  243. package/dist/core/ingestion/languages/dart/extension-type-preprocess.js +30 -0
  244. package/dist/core/ingestion/languages/dart/import-target.js +32 -9
  245. package/dist/core/ingestion/languages/dart/index.d.ts +1 -1
  246. package/dist/core/ingestion/languages/dart/index.js +1 -1
  247. package/dist/core/ingestion/languages/dart/query.js +98 -1
  248. package/dist/core/ingestion/languages/dart/scope-resolver.js +14 -3
  249. package/dist/core/ingestion/languages/dart/simple-hooks.js +9 -0
  250. package/dist/core/ingestion/languages/dart.js +8 -1
  251. package/dist/core/ingestion/languages/go/captures.js +142 -3
  252. package/dist/core/ingestion/languages/go/generic-type-parameters.d.ts +31 -0
  253. package/dist/core/ingestion/languages/go/generic-type-parameters.js +140 -0
  254. package/dist/core/ingestion/languages/go/import-target.d.ts +3 -10
  255. package/dist/core/ingestion/languages/go/import-target.js +34 -30
  256. package/dist/core/ingestion/languages/go/index.d.ts +1 -1
  257. package/dist/core/ingestion/languages/go/interface-impls.d.ts +9 -1
  258. package/dist/core/ingestion/languages/go/interface-impls.js +693 -87
  259. package/dist/core/ingestion/languages/go/interpret.d.ts +2 -0
  260. package/dist/core/ingestion/languages/go/interpret.js +22 -8
  261. package/dist/core/ingestion/languages/go/method-owners.js +31 -12
  262. package/dist/core/ingestion/languages/go/package-clause.d.ts +46 -0
  263. package/dist/core/ingestion/languages/go/package-clause.js +75 -0
  264. package/dist/core/ingestion/languages/go/package-siblings.js +7 -11
  265. package/dist/core/ingestion/languages/go/query.js +56 -3
  266. package/dist/core/ingestion/languages/go/scope-resolver.js +39 -0
  267. package/dist/core/ingestion/languages/go.js +9 -0
  268. package/dist/core/ingestion/languages/java/analysis-features.d.ts +7 -0
  269. package/dist/core/ingestion/languages/java/analysis-features.js +25 -0
  270. package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +38 -0
  271. package/dist/core/ingestion/languages/java/capture-side-channel.js +124 -0
  272. package/dist/core/ingestion/languages/java/captures.d.ts +4 -3
  273. package/dist/core/ingestion/languages/java/captures.js +321 -49
  274. package/dist/core/ingestion/languages/java/import-target.d.ts +49 -9
  275. package/dist/core/ingestion/languages/java/import-target.js +68 -88
  276. package/dist/core/ingestion/languages/java/interpret.js +3 -2
  277. package/dist/core/ingestion/languages/java/module-resolution.d.ts +62 -0
  278. package/dist/core/ingestion/languages/java/module-resolution.js +142 -0
  279. package/dist/core/ingestion/languages/java/package-facts.d.ts +5 -0
  280. package/dist/core/ingestion/languages/java/package-facts.js +9 -0
  281. package/dist/core/ingestion/languages/java/package-siblings.d.ts +3 -16
  282. package/dist/core/ingestion/languages/java/package-siblings.js +8 -147
  283. package/dist/core/ingestion/languages/java/query.js +39 -3
  284. package/dist/core/ingestion/languages/java/record-components.d.ts +14 -0
  285. package/dist/core/ingestion/languages/java/record-components.js +185 -0
  286. package/dist/core/ingestion/languages/java/scope-resolver.js +35 -2
  287. package/dist/core/ingestion/languages/java/spring-aop.d.ts +12 -0
  288. package/dist/core/ingestion/languages/java/spring-aop.js +49 -0
  289. package/dist/core/ingestion/languages/java/spring-bean-metadata.d.ts +2 -0
  290. package/dist/core/ingestion/languages/java/spring-bean-metadata.js +8 -0
  291. package/dist/core/ingestion/languages/java/spring-conditionals.d.ts +11 -0
  292. package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
  293. package/dist/core/ingestion/languages/java/spring-config-bindings.d.ts +23 -0
  294. package/dist/core/ingestion/languages/java/spring-config-bindings.js +215 -0
  295. package/dist/core/ingestion/languages/java/spring-di.d.ts +20 -0
  296. package/dist/core/ingestion/languages/java/spring-di.js +160 -0
  297. package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +7 -0
  298. package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +32 -0
  299. package/dist/core/ingestion/languages/java.js +76 -3
  300. package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
  301. package/dist/core/ingestion/languages/javascript/captures.js +278 -4
  302. package/dist/core/ingestion/languages/javascript/import-target.d.ts +17 -21
  303. package/dist/core/ingestion/languages/javascript/import-target.js +24 -41
  304. package/dist/core/ingestion/languages/javascript/index.d.ts +54 -5
  305. package/dist/core/ingestion/languages/javascript/index.js +54 -5
  306. package/dist/core/ingestion/languages/javascript/query.d.ts +1 -0
  307. package/dist/core/ingestion/languages/javascript/query.js +232 -5
  308. package/dist/core/ingestion/languages/javascript/scope-resolver.js +12 -0
  309. package/dist/core/ingestion/languages/javascript/simple-hooks.js +2 -1
  310. package/dist/core/ingestion/languages/jvm/package-facts.d.ts +35 -0
  311. package/dist/core/ingestion/languages/jvm/package-facts.js +40 -0
  312. package/dist/core/ingestion/languages/jvm/package-siblings.d.ts +14 -0
  313. package/dist/core/ingestion/languages/jvm/package-siblings.js +197 -0
  314. package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +40 -3
  315. package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +111 -8
  316. package/dist/core/ingestion/languages/kotlin/captures.js +112 -0
  317. package/dist/core/ingestion/languages/kotlin/import-target.d.ts +8 -1
  318. package/dist/core/ingestion/languages/kotlin/import-target.js +20 -123
  319. package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
  320. package/dist/core/ingestion/languages/kotlin/index.js +1 -0
  321. package/dist/core/ingestion/languages/kotlin/module-resolution.d.ts +22 -0
  322. package/dist/core/ingestion/languages/kotlin/module-resolution.js +108 -0
  323. package/dist/core/ingestion/languages/kotlin/package-facts.d.ts +5 -0
  324. package/dist/core/ingestion/languages/kotlin/package-facts.js +9 -0
  325. package/dist/core/ingestion/languages/kotlin/package-siblings.d.ts +4 -0
  326. package/dist/core/ingestion/languages/kotlin/package-siblings.js +8 -0
  327. package/dist/core/ingestion/languages/kotlin/query.js +47 -2
  328. package/dist/core/ingestion/languages/kotlin/scope-resolver.js +36 -3
  329. package/dist/core/ingestion/languages/kotlin/spring-aop.d.ts +12 -0
  330. package/dist/core/ingestion/languages/kotlin/spring-aop.js +64 -0
  331. package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.d.ts +2 -0
  332. package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.js +8 -0
  333. package/dist/core/ingestion/languages/kotlin/spring-conditionals.d.ts +12 -0
  334. package/dist/core/ingestion/languages/kotlin/spring-conditionals.js +49 -0
  335. package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +20 -0
  336. package/dist/core/ingestion/languages/kotlin/spring-di.js +299 -0
  337. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +10 -0
  338. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +41 -0
  339. package/dist/core/ingestion/languages/kotlin.js +5 -6
  340. package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
  341. package/dist/core/ingestion/languages/php/captures.js +359 -51
  342. package/dist/core/ingestion/languages/php/import-decomposer.js +12 -0
  343. package/dist/core/ingestion/languages/php/import-target.d.ts +2 -1
  344. package/dist/core/ingestion/languages/php/import-target.js +229 -7
  345. package/dist/core/ingestion/languages/php/interpret.js +10 -0
  346. package/dist/core/ingestion/languages/php/query.js +31 -0
  347. package/dist/core/ingestion/languages/php/scope-resolver.js +1 -1
  348. package/dist/core/ingestion/languages/python/arity-metadata.d.ts +1 -0
  349. package/dist/core/ingestion/languages/python/arity-metadata.js +1 -0
  350. package/dist/core/ingestion/languages/python/captures.d.ts +3 -4
  351. package/dist/core/ingestion/languages/python/captures.js +53 -5
  352. package/dist/core/ingestion/languages/python/import-decomposer.js +22 -1
  353. package/dist/core/ingestion/languages/python/import-target.d.ts +42 -1
  354. package/dist/core/ingestion/languages/python/import-target.js +277 -91
  355. package/dist/core/ingestion/languages/python/index.d.ts +1 -1
  356. package/dist/core/ingestion/languages/python/index.js +1 -1
  357. package/dist/core/ingestion/languages/python/interpret.d.ts +52 -0
  358. package/dist/core/ingestion/languages/python/interpret.js +249 -3
  359. package/dist/core/ingestion/languages/python/query.js +9 -0
  360. package/dist/core/ingestion/languages/python/receiver-binding.d.ts +17 -2
  361. package/dist/core/ingestion/languages/python/receiver-binding.js +192 -2
  362. package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
  363. package/dist/core/ingestion/languages/python/simple-hooks.d.ts +5 -5
  364. package/dist/core/ingestion/languages/python/simple-hooks.js +9 -5
  365. package/dist/core/ingestion/languages/ruby/captures.js +200 -0
  366. package/dist/core/ingestion/languages/ruby/import-target.js +7 -5
  367. package/dist/core/ingestion/languages/ruby/query.js +93 -0
  368. package/dist/core/ingestion/languages/ruby/scope-resolver.js +2 -0
  369. package/dist/core/ingestion/languages/ruby/simple-hooks.d.ts +1 -1
  370. package/dist/core/ingestion/languages/ruby/simple-hooks.js +22 -1
  371. package/dist/core/ingestion/languages/rust/captures.js +52 -1
  372. package/dist/core/ingestion/languages/rust/interpret.js +18 -0
  373. package/dist/core/ingestion/languages/rust/method-owners.js +11 -1
  374. package/dist/core/ingestion/languages/rust/module-path.d.ts +126 -0
  375. package/dist/core/ingestion/languages/rust/module-path.js +214 -0
  376. package/dist/core/ingestion/languages/rust/qualified-call.d.ts +41 -0
  377. package/dist/core/ingestion/languages/rust/qualified-call.js +481 -0
  378. package/dist/core/ingestion/languages/rust/query.js +48 -6
  379. package/dist/core/ingestion/languages/rust/range-binding.d.ts +1 -11
  380. package/dist/core/ingestion/languages/rust/range-binding.js +149 -63
  381. package/dist/core/ingestion/languages/rust/scope-resolver.js +21 -2
  382. package/dist/core/ingestion/languages/rust.js +17 -0
  383. package/dist/core/ingestion/languages/swift/captures.js +99 -3
  384. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.d.ts +48 -0
  385. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.js +253 -0
  386. package/dist/core/ingestion/languages/swift/import-target.js +4 -9
  387. package/dist/core/ingestion/languages/swift/query.js +17 -0
  388. package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +8 -0
  389. package/dist/core/ingestion/languages/swift/receiver-binding.js +6 -2
  390. package/dist/core/ingestion/languages/swift.js +2 -0
  391. package/dist/core/ingestion/languages/typescript/captures.d.ts +90 -1
  392. package/dist/core/ingestion/languages/typescript/captures.js +288 -5
  393. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.d.ts +134 -0
  394. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.js +523 -0
  395. package/dist/core/ingestion/languages/typescript/cjs-module-exports.d.ts +54 -0
  396. package/dist/core/ingestion/languages/typescript/cjs-module-exports.js +191 -0
  397. package/dist/core/ingestion/languages/typescript/file-candidates.d.ts +29 -0
  398. package/dist/core/ingestion/languages/typescript/file-candidates.js +70 -0
  399. package/dist/core/ingestion/languages/typescript/import-decomposer.d.ts +28 -1
  400. package/dist/core/ingestion/languages/typescript/import-decomposer.js +125 -10
  401. package/dist/core/ingestion/languages/typescript/import-target.d.ts +25 -37
  402. package/dist/core/ingestion/languages/typescript/import-target.js +24 -26
  403. package/dist/core/ingestion/languages/typescript/interpret.d.ts +21 -1
  404. package/dist/core/ingestion/languages/typescript/interpret.js +45 -5
  405. package/dist/core/ingestion/languages/typescript/module-resolution.d.ts +48 -0
  406. package/dist/core/ingestion/languages/typescript/module-resolution.js +171 -0
  407. package/dist/core/ingestion/languages/typescript/nuxt-auto-imports.js +2 -1
  408. package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
  409. package/dist/core/ingestion/languages/typescript/query.js +340 -14
  410. package/dist/core/ingestion/languages/typescript/receiver-binding.d.ts +17 -0
  411. package/dist/core/ingestion/languages/typescript/receiver-binding.js +27 -0
  412. package/dist/core/ingestion/languages/typescript/scope-resolver.js +27 -40
  413. package/dist/core/ingestion/languages/typescript/simple-hooks.d.ts +0 -10
  414. package/dist/core/ingestion/languages/typescript/simple-hooks.js +22 -22
  415. package/dist/core/ingestion/languages/typescript/tsconfig.d.ts +59 -0
  416. package/dist/core/ingestion/languages/typescript/tsconfig.js +291 -0
  417. package/dist/core/ingestion/languages/typescript.js +87 -1
  418. package/dist/core/ingestion/languages/vue/import-target.d.ts +6 -22
  419. package/dist/core/ingestion/languages/vue/import-target.js +11 -47
  420. package/dist/core/ingestion/languages/vue/scope-resolver.js +4 -2
  421. package/dist/core/ingestion/local-symbol-pruner.js +11 -11
  422. package/dist/core/ingestion/method-extractors/configs/csharp.js +1 -0
  423. package/dist/core/ingestion/method-extractors/generic.js +1 -0
  424. package/dist/core/ingestion/method-types.d.ts +16 -0
  425. package/dist/core/ingestion/parsing-processor.js +32 -1
  426. package/dist/core/ingestion/pipeline-phases/di.d.ts +8 -33
  427. package/dist/core/ingestion/pipeline-phases/di.js +275 -157
  428. package/dist/core/ingestion/pipeline-phases/index.d.ts +3 -0
  429. package/dist/core/ingestion/pipeline-phases/index.js +3 -0
  430. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
  431. package/dist/core/ingestion/pipeline-phases/parse-impl.js +158 -3
  432. package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
  433. package/dist/core/ingestion/pipeline-phases/processes.d.ts +11 -2
  434. package/dist/core/ingestion/pipeline-phases/processes.js +102 -7
  435. package/dist/core/ingestion/pipeline-phases/routes.js +56 -10
  436. package/dist/core/ingestion/pipeline-phases/spring-aop.d.ts +34 -0
  437. package/dist/core/ingestion/pipeline-phases/spring-aop.js +439 -0
  438. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +34 -0
  439. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +255 -0
  440. package/dist/core/ingestion/pipeline-phases/spring-config.d.ts +37 -0
  441. package/dist/core/ingestion/pipeline-phases/spring-config.js +433 -0
  442. package/dist/core/ingestion/pipeline-phases/types.d.ts +7 -0
  443. package/dist/core/ingestion/pipeline.d.ts +27 -3
  444. package/dist/core/ingestion/pipeline.js +62 -12
  445. package/dist/core/ingestion/process-processor.d.ts +109 -2
  446. package/dist/core/ingestion/process-processor.js +464 -52
  447. package/dist/core/ingestion/resolve-references.d.ts +6 -1
  448. package/dist/core/ingestion/resolve-references.js +78 -6
  449. package/dist/core/ingestion/route-extractors/data-route-table.d.ts +25 -0
  450. package/dist/core/ingestion/route-extractors/data-route-table.js +864 -0
  451. package/dist/core/ingestion/route-extractors/dispatch-guard.d.ts +96 -0
  452. package/dist/core/ingestion/route-extractors/dispatch-guard.js +1184 -0
  453. package/dist/core/ingestion/route-extractors/spring-shared.d.ts +11 -0
  454. package/dist/core/ingestion/route-extractors/spring-shared.js +89 -0
  455. package/dist/core/ingestion/route-extractors/spring.js +109 -24
  456. package/dist/core/ingestion/scope-extractor-bridge.js +9 -1
  457. package/dist/core/ingestion/scope-extractor.d.ts +22 -7
  458. package/dist/core/ingestion/scope-extractor.js +617 -59
  459. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +381 -22
  460. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
  461. package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +7 -7
  462. package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +8 -7
  463. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +15 -1
  464. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +53 -0
  465. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
  466. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +275 -41
  467. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +123 -0
  468. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +171 -17
  469. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +56 -1
  470. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +130 -32
  471. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +30 -1
  472. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +46 -3
  473. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +64 -0
  474. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +1233 -0
  475. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +107 -5
  476. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +590 -33
  477. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +19 -4
  478. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +160 -4
  479. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.d.ts +34 -0
  480. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.js +62 -0
  481. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +64 -0
  482. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +118 -0
  483. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +109 -8
  484. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +931 -92
  485. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.d.ts +58 -0
  486. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.js +458 -0
  487. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.d.ts +180 -0
  488. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.js +418 -0
  489. package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +34 -0
  490. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +82 -38
  491. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +61 -1
  492. package/dist/core/ingestion/scope-resolution/pipeline/run.js +384 -48
  493. package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +112 -2
  494. package/dist/core/ingestion/scope-resolution/resolution-outcome.js +38 -1
  495. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +25 -3
  496. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +36 -16
  497. package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +210 -9
  498. package/dist/core/ingestion/scope-resolution/scope/walkers.js +968 -56
  499. package/dist/core/ingestion/scope-resolution/summary-maps.d.ts +28 -0
  500. package/dist/core/ingestion/scope-resolution/summary-maps.js +50 -0
  501. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.d.ts +55 -0
  502. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.js +37 -0
  503. package/dist/core/ingestion/scope-resolution/unresolved-receivers.d.ts +109 -0
  504. package/dist/core/ingestion/scope-resolution/unresolved-receivers.js +204 -0
  505. package/dist/core/ingestion/scope-resolution/utils/definition-id.d.ts +13 -0
  506. package/dist/core/ingestion/scope-resolution/utils/definition-id.js +19 -0
  507. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.d.ts +171 -0
  508. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.js +218 -0
  509. package/dist/core/ingestion/scope-resolution/workspace-index-types.d.ts +34 -0
  510. package/dist/core/ingestion/scope-resolution/workspace-index-types.js +15 -0
  511. package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +7 -20
  512. package/dist/core/ingestion/taint/typescript-model.js +34 -2
  513. package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
  514. package/dist/core/ingestion/tree-sitter-queries.js +688 -5
  515. package/dist/core/ingestion/type-env.js +11 -7
  516. package/dist/core/ingestion/type-extractors/jvm.js +17 -2
  517. package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
  518. package/dist/core/ingestion/type-extractors/shared.js +16 -0
  519. package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
  520. package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
  521. package/dist/core/ingestion/type-extractors/typescript.js +26 -0
  522. package/dist/core/ingestion/utils/ast-helpers.d.ts +311 -14
  523. package/dist/core/ingestion/utils/ast-helpers.js +745 -48
  524. package/dist/core/ingestion/utils/call-analysis.d.ts +27 -22
  525. package/dist/core/ingestion/utils/call-analysis.js +202 -7
  526. package/dist/core/ingestion/utils/callable-flow-captures.d.ts +153 -0
  527. package/dist/core/ingestion/utils/callable-flow-captures.js +928 -0
  528. package/dist/core/ingestion/utils/callable-labels.d.ts +25 -0
  529. package/dist/core/ingestion/utils/callable-labels.js +31 -0
  530. package/dist/core/ingestion/utils/effective-ram.d.ts +40 -0
  531. package/dist/core/ingestion/utils/effective-ram.js +58 -0
  532. package/dist/core/ingestion/utils/line-base.d.ts +14 -0
  533. package/dist/core/ingestion/utils/line-base.js +14 -0
  534. package/dist/core/ingestion/utils/method-props.d.ts +27 -4
  535. package/dist/core/ingestion/utils/method-props.js +29 -4
  536. package/dist/core/ingestion/utils/receiver-chain-captures.d.ts +31 -0
  537. package/dist/core/ingestion/utils/receiver-chain-captures.js +57 -0
  538. package/dist/core/ingestion/utils/receiver-chain-codec.d.ts +89 -0
  539. package/dist/core/ingestion/utils/receiver-chain-codec.js +182 -0
  540. package/dist/core/ingestion/utils/scope-tree-walk.d.ts +22 -0
  541. package/dist/core/ingestion/utils/scope-tree-walk.js +33 -0
  542. package/dist/core/ingestion/utils/template-arguments.d.ts +96 -0
  543. package/dist/core/ingestion/utils/template-arguments.js +196 -0
  544. package/dist/core/ingestion/utils/type-parameters.d.ts +49 -0
  545. package/dist/core/ingestion/utils/type-parameters.js +206 -0
  546. package/dist/core/ingestion/workers/callable-id.d.ts +72 -0
  547. package/dist/core/ingestion/workers/callable-id.js +116 -0
  548. package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
  549. package/dist/core/ingestion/workers/parse-worker.js +409 -39
  550. package/dist/core/ingestion/workers/worker-pool.d.ts +34 -27
  551. package/dist/core/ingestion/workers/worker-pool.js +133 -25
  552. package/dist/core/lbug/csv-generator.d.ts +27 -0
  553. package/dist/core/lbug/csv-generator.js +80 -17
  554. package/dist/core/lbug/extension-load-error.d.ts +2 -2
  555. package/dist/core/lbug/extension-load-error.js +44 -27
  556. package/dist/core/lbug/extension-loader.d.ts +29 -0
  557. package/dist/core/lbug/extension-loader.js +32 -7
  558. package/dist/core/lbug/graph-emit-sink.d.ts +264 -0
  559. package/dist/core/lbug/graph-emit-sink.js +581 -0
  560. package/dist/core/lbug/lbug-adapter.d.ts +337 -3
  561. package/dist/core/lbug/lbug-adapter.js +772 -67
  562. package/dist/core/lbug/lbug-config.d.ts +93 -6
  563. package/dist/core/lbug/lbug-config.js +269 -9
  564. package/dist/core/lbug/native-check.d.ts +39 -0
  565. package/dist/core/lbug/native-check.js +323 -46
  566. package/dist/core/lbug/pdg-emit-sink.d.ts +13 -4
  567. package/dist/core/lbug/pdg-emit-sink.js +21 -111
  568. package/dist/core/lbug/pool-adapter.d.ts +23 -1
  569. package/dist/core/lbug/pool-adapter.js +115 -7
  570. package/dist/core/lbug/query-batch.d.ts +75 -0
  571. package/dist/core/lbug/query-batch.js +102 -0
  572. package/dist/core/lbug/rel-pair-routing.d.ts +160 -2
  573. package/dist/core/lbug/rel-pair-routing.js +228 -10
  574. package/dist/core/lbug/schema.d.ts +162 -3
  575. package/dist/core/lbug/schema.js +392 -157
  576. package/dist/core/lbug/sidecar-recovery.d.ts +1 -0
  577. package/dist/core/lbug/sidecar-recovery.js +1 -1
  578. package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
  579. package/dist/core/lbug/sync-csv-writer.js +108 -0
  580. package/dist/core/lbug/wal-checkpoint-driver.js +3 -0
  581. package/dist/core/platform/capabilities.d.ts +0 -1
  582. package/dist/core/platform/capabilities.js +12 -7
  583. package/dist/core/run-analyze.d.ts +150 -3
  584. package/dist/core/run-analyze.js +1562 -151
  585. package/dist/core/search/bm25-index.d.ts +11 -0
  586. package/dist/core/search/bm25-index.js +60 -26
  587. package/dist/core/search/fts-indexes.d.ts +167 -2
  588. package/dist/core/search/fts-indexes.js +264 -10
  589. package/dist/core/wiki/graph-queries.js +145 -112
  590. package/dist/core/wiki/llm-client.d.ts +37 -5
  591. package/dist/core/wiki/llm-client.js +88 -17
  592. package/dist/core/wiki/prompts.d.ts +19 -0
  593. package/dist/core/wiki/prompts.js +20 -1
  594. package/dist/lib/utils.d.ts +113 -0
  595. package/dist/lib/utils.js +185 -0
  596. package/dist/mcp/http-transport.d.ts +5 -0
  597. package/dist/mcp/http-transport.js +19 -5
  598. package/dist/mcp/local/aop-metadata.d.ts +77 -0
  599. package/dist/mcp/local/aop-metadata.js +227 -0
  600. package/dist/mcp/local/bean-metadata.d.ts +3 -0
  601. package/dist/mcp/local/bean-metadata.js +46 -0
  602. package/dist/mcp/local/local-backend.d.ts +167 -6
  603. package/dist/mcp/local/local-backend.js +1756 -405
  604. package/dist/mcp/local/path-predicate.d.ts +19 -0
  605. package/dist/mcp/local/path-predicate.js +21 -0
  606. package/dist/mcp/local/pdg-impact.d.ts +132 -10
  607. package/dist/mcp/local/pdg-impact.js +391 -98
  608. package/dist/mcp/output-budget.d.ts +5 -0
  609. package/dist/mcp/output-budget.js +52 -0
  610. package/dist/mcp/read-only-policy.d.ts +12 -0
  611. package/dist/mcp/read-only-policy.js +102 -0
  612. package/dist/mcp/repository-policy.d.ts +35 -0
  613. package/dist/mcp/repository-policy.js +333 -0
  614. package/dist/mcp/resources.js +34 -7
  615. package/dist/mcp/server.d.ts +5 -2
  616. package/dist/mcp/server.js +48 -18
  617. package/dist/mcp/tools.d.ts +8 -8
  618. package/dist/mcp/tools.js +91 -20
  619. package/dist/server/analyze-job.d.ts +40 -2
  620. package/dist/server/analyze-job.js +30 -2
  621. package/dist/server/analyze-launch.d.ts +1 -1
  622. package/dist/server/analyze-launch.js +79 -10
  623. package/dist/server/analyze-worker-core.d.ts +3 -2
  624. package/dist/server/analyze-worker-core.js +15 -3
  625. package/dist/server/analyze-worker-ipc.d.ts +1 -1
  626. package/dist/server/analyze-worker-ipc.js +4 -0
  627. package/dist/server/analyze-worker-protocol.d.ts +59 -0
  628. package/dist/server/analyze-worker-protocol.js +1 -0
  629. package/dist/server/analyze-worker.d.ts +1 -17
  630. package/dist/server/analyze-worker.js +29 -6
  631. package/dist/server/api.d.ts +2 -11
  632. package/dist/server/api.js +200 -155
  633. package/dist/server/embed-run-outcome.d.ts +89 -0
  634. package/dist/server/embed-run-outcome.js +88 -0
  635. package/dist/server/git-clone.js +6 -2
  636. package/dist/server/mcp-http.d.ts +1 -1
  637. package/dist/server/mcp-http.js +4 -2
  638. package/dist/server/middleware.d.ts +116 -9
  639. package/dist/server/middleware.js +291 -22
  640. package/dist/server/sse-progress.d.ts +41 -0
  641. package/dist/server/sse-progress.js +125 -0
  642. package/dist/server/upload-ingest.js +2 -1
  643. package/dist/server/validation.js +2 -1
  644. package/dist/storage/branch-index.d.ts +11 -6
  645. package/dist/storage/branch-index.js +15 -7
  646. package/dist/storage/file-hash.js +2 -2
  647. package/dist/storage/fs-atomic.d.ts +25 -0
  648. package/dist/storage/fs-atomic.js +42 -0
  649. package/dist/storage/git.d.ts +165 -0
  650. package/dist/storage/git.js +352 -3
  651. package/dist/storage/index-lock.d.ts +83 -0
  652. package/dist/storage/index-lock.js +654 -0
  653. package/dist/storage/parse-cache.js +482 -1
  654. package/dist/storage/parsedfile-store.d.ts +8 -0
  655. package/dist/storage/parsedfile-store.js +235 -1
  656. package/dist/storage/repo-manager.d.ts +29 -309
  657. package/dist/storage/repo-manager.js +187 -165
  658. package/dist/storage/repo-meta.d.ts +530 -0
  659. package/dist/storage/repo-meta.js +100 -0
  660. package/dist/types/pipeline.d.ts +37 -0
  661. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +1 -1
  662. package/hooks/claude/gitnexus-hook.cjs +1 -1
  663. package/hooks/claude/resolve-analyze-cmd.cjs +80 -13
  664. package/package.json +20 -12
  665. package/scripts/cross-platform-shard.ts +143 -0
  666. package/scripts/cross-platform-tests.ts +94 -0
  667. package/scripts/ensure-fts.ts +14 -3
  668. package/scripts/run-cross-platform.ts +36 -10
  669. package/scripts/sync-plugin-manifests.mjs +192 -0
  670. package/skills/gitnexus-cli.md +3 -3
  671. package/skills/gitnexus-debugging.md +37 -7
  672. package/skills/gitnexus-exploring.md +26 -4
  673. package/skills/gitnexus-impact-analysis.md +71 -10
  674. package/skills/gitnexus-lfg/README.md +55 -0
  675. package/skills/gitnexus-lfg/SKILL.md +86 -0
  676. package/skills/gitnexus-plan/README.md +147 -0
  677. package/skills/gitnexus-plan/SKILL.md +348 -0
  678. package/skills/gitnexus-plan/references/context-ledger.md +137 -0
  679. package/skills/gitnexus-plan/references/context-pack.md +126 -0
  680. package/skills/gitnexus-plan/references/evidence-provenance.md +309 -0
  681. package/skills/gitnexus-plan/references/pdg-slice.md +109 -0
  682. package/skills/gitnexus-plan/references/plan-template.md +201 -0
  683. package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +2366 -0
  684. package/skills/gitnexus-refactoring.md +48 -5
  685. package/skills/gitnexus-review/SKILL.md +279 -0
  686. package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +42 -0
  687. package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +39 -0
  688. package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +37 -0
  689. package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +40 -0
  690. package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +42 -0
  691. package/skills/gitnexus-review/ci-personas/ci-security-lens.md +39 -0
  692. package/skills/gitnexus-taint-analysis.md +13 -7
  693. package/skills/gitnexus-work/README.md +71 -0
  694. package/skills/gitnexus-work/SKILL.md +272 -0
  695. package/skills/gitnexus-work/references/evidence-provenance.md +309 -0
  696. package/skills/gitnexus-work/scripts/evidence-provenance.mjs +2366 -0
  697. package/vendor/leiden/utils.cjs +28 -1
  698. package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
  699. package/web/assets/__vite-browser-external-bMKyYQkO.js +1 -0
  700. package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
  701. package/web/assets/agent-DIzEQ1JJ.js +626 -0
  702. package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
  703. package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
  704. package/web/assets/blockDiagram-54WLDVWM-Dg_hrRWE.js +132 -0
  705. package/web/assets/{c4Diagram-Y2BXMSZH-DOXVs7-C.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +6 -6
  706. package/web/assets/chunk-224SPVON-B8gxtXpy.js +1 -0
  707. package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +127 -0
  708. package/web/assets/chunk-2SREHG4O-Dip42xOq.js +1 -0
  709. package/web/assets/chunk-4RFN2BYJ-DHHWuC-n.js +1 -0
  710. package/web/assets/chunk-66DQ2XMT-CM0xjFAN.js +1 -0
  711. package/web/assets/chunk-6BELYETK-ChsYtfHW.js +1 -0
  712. package/web/assets/chunk-6L755F7B-CMhLBxi2.js +1 -0
  713. package/web/assets/chunk-7CWYLC5S-DRgGkkpF.js +2 -0
  714. package/web/assets/chunk-A7VWPJGB-B4O3oQdQ.js +1 -0
  715. package/web/assets/chunk-BI6VK774-D0oaWk8V.js +1 -0
  716. package/web/assets/chunk-D6VWDJW2-BxcBdZ9c.js +2 -0
  717. package/web/assets/chunk-DMV4VAQV-Bn6WXDSX.js +4 -0
  718. package/web/assets/chunk-E5QJAATJ-dh-5CtIV.js +2 -0
  719. package/web/assets/chunk-EQFTRU2I-1ix7TzW9.js +2 -0
  720. package/web/assets/chunk-FWYVLQTC-BgDItRzJ.js +1 -0
  721. package/web/assets/chunk-HNC4WDU7-DoU3KnA7.js +1 -0
  722. package/web/assets/chunk-L5GCOVLC-CE2w8Nm_.js +161 -0
  723. package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +321 -0
  724. package/web/assets/chunk-LORZLZWG-B57uGw2N.js +88 -0
  725. package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +62 -0
  726. package/web/assets/chunk-NV3KIAZN-5yvcpMiu.js +1 -0
  727. package/web/assets/chunk-OIYT25JQ-CQ6KOZGX.js +1 -0
  728. package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +10 -0
  729. package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +156 -0
  730. package/web/assets/chunk-RRFMTAIC-CMN0wcYA.js +1 -0
  731. package/web/assets/{chunk-RLI5ZMPA-CkXZ0y0U.js → chunk-SATU7PGQ-B1zhgOvc.js} +1 -1
  732. package/web/assets/chunk-STOV2HOB-GnExfzIX.js +1 -0
  733. package/web/assets/chunk-SZD42YQK-ijyKKVr1.js +70 -0
  734. package/web/assets/chunk-TFPGFQPA-Dj6a-0pC.js +231 -0
  735. package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +2 -0
  736. package/web/assets/chunk-TZUXEDM2-B7p9AcTw.js +1 -0
  737. package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +1 -0
  738. package/web/assets/{chunk-6764PJDD-C7xxk063.js → chunk-VE5CLXGZ-C1vB7wpY.js} +1 -1
  739. package/web/assets/chunk-VJFVEZTB-CX66F2ep.js +206 -0
  740. package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +1 -0
  741. package/web/assets/chunk-WJBAP47W-BckNkuEN.js +1 -0
  742. package/web/assets/chunk-XNMVGMAZ-Cg_LnPtj.js +1 -0
  743. package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +1 -0
  744. package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +1 -0
  745. package/web/assets/{cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js → cose-bilkent-RZA4XIPR-BHpK4Crp.js} +1 -1
  746. package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +1 -0
  747. package/web/assets/cynefinDiagram-TR7LZUCG-C3Iar9lZ.js +62 -0
  748. package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +4 -0
  749. package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +30 -0
  750. package/web/assets/diagram-JCD7PQ7C-DC5-9FRr.js +24 -0
  751. package/web/assets/diagram-KFBZAVDW-Dfmf_4ti.js +3 -0
  752. package/web/assets/diagram-L7DVE3PN-GIRyVUtt.js +41 -0
  753. package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +24 -0
  754. package/web/assets/ebnfDiagram-DRHRQJWO-D8_CI4ZF.js +1 -0
  755. package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +85 -0
  756. package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +1 -0
  757. package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +1 -0
  758. package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +292 -0
  759. package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +1 -0
  760. package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +106 -0
  761. package/web/assets/{index-B4eB4dNZ.js → index-BBNl0qfX.js} +51 -51
  762. package/web/assets/index-CJDpyH-n.css +2 -0
  763. package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +1 -0
  764. package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +2 -0
  765. package/web/assets/{ishikawaDiagram-BNXS4ZKH-BLjivjXL.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +6 -6
  766. package/web/assets/{journeyDiagram-M6C3CM3L-Cetgs3NH.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +6 -6
  767. package/web/assets/{kanban-definition-75IXJCU3-DMlCaIpf.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +27 -27
  768. package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
  769. package/web/assets/{mindmap-definition-2TDM6QVE-B4GbXQBc.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +29 -29
  770. package/web/assets/node-Ct_zna8U.js +8 -0
  771. package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +1 -0
  772. package/web/assets/pegDiagram-YKIO5C6U-QGeQLEq2.js +1 -0
  773. package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +1 -0
  774. package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +39 -0
  775. package/web/assets/preload-helper-Czpn1I53.js +1 -0
  776. package/web/assets/{quadrantDiagram-VICAPDV7-B1TQnlm0.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +6 -6
  777. package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +1 -0
  778. package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +1 -0
  779. package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +1 -0
  780. package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +1 -0
  781. package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +1 -0
  782. package/web/assets/railroadDiagram-M77LTMSB-AXu4vxk_.js +1 -0
  783. package/web/assets/requirementDiagram-RASO5HTO-B-l8InpK.js +84 -0
  784. package/web/assets/sankeyDiagram-F32LOJ6L-Kd7zjJgX.js +40 -0
  785. package/web/assets/sdk-CzHHH8tD.js +37 -0
  786. package/web/assets/sequenceDiagram-URATNSBD-BlcdY9DS.js +162 -0
  787. package/web/assets/sizeCapture-5GORAGP4-BEqQzsxs.js +1 -0
  788. package/web/assets/src-C5sx_gMp.js +1 -0
  789. package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +1 -0
  790. package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +1 -0
  791. package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +2 -0
  792. package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +8 -0
  793. package/web/assets/timeline-definition-WJXWRH4I-DUfp1R3E.js +120 -0
  794. package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +1 -0
  795. package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +1 -0
  796. package/web/assets/vennDiagram-K3VCMQLI-Bj-FN-XS.js +34 -0
  797. package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +1 -0
  798. package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +78 -0
  799. package/web/assets/xychartDiagram-5VRUVLCW-CK_rbSWE.js +7 -0
  800. package/web/index.html +17 -15
  801. package/dist/core/ingestion/languages/python/index-stats.d.ts +0 -18
  802. package/dist/core/ingestion/languages/python/index-stats.js +0 -25
  803. package/skills/gitnexus-pr-review.md +0 -163
  804. package/web/assets/ProcessFlowModal-Dna7GkwO.js +0 -22
  805. package/web/assets/agent-DNYDy-KA.js +0 -660
  806. package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
  807. package/web/assets/architectureDiagram-UL44E2DR-BU5ZRITg.js +0 -36
  808. package/web/assets/blockDiagram-7IZFK4PR-Dut1BpTV.js +0 -132
  809. package/web/assets/chunk-2T2R6R2M-pkw2oXHH.js +0 -4
  810. package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +0 -1
  811. package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +0 -321
  812. package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +0 -159
  813. package/web/assets/chunk-67TQ5CYL-zxhDWgyF.js +0 -124
  814. package/web/assets/chunk-7J6CGLKN-AmkN8jJN.js +0 -10
  815. package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +0 -1
  816. package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +0 -1
  817. package/web/assets/chunk-INKRHTLW-D9BM9HWZ.js +0 -70
  818. package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
  819. package/web/assets/chunk-KGFNY3KK-tD2F6wxK.js +0 -62
  820. package/web/assets/chunk-KGYTTC2M-zm6n242I.js +0 -1
  821. package/web/assets/chunk-KNLZD3CH-BGlP6X9R.js +0 -1
  822. package/web/assets/chunk-LCXTWHL2-Ba9JK-6F.js +0 -231
  823. package/web/assets/chunk-LII3EMHJ-EGx-eBIu.js +0 -1
  824. package/web/assets/chunk-LRIF4GLE-C3_PqUBq.js +0 -1
  825. package/web/assets/chunk-QA3QBVWF-D4cSJBf6.js +0 -2
  826. package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
  827. package/web/assets/chunk-RG4AUYOV-OqBBMwuQ.js +0 -206
  828. package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
  829. package/web/assets/chunk-T2UQINTJ-BJusEiGe.js +0 -1
  830. package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +0 -1
  831. package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +0 -1
  832. package/web/assets/chunk-UY5QBCOK-BCpUlARQ.js +0 -1
  833. package/web/assets/chunk-VU6ZFW4Y-BeXVk45_.js +0 -2
  834. package/web/assets/chunk-ZXARS5L4-BI_qR2Nm.js +0 -1
  835. package/web/assets/classDiagram-KGZ6W3CR-D9zSIg0x.js +0 -1
  836. package/web/assets/classDiagram-v2-72OJOZXJ-D9zSIg0x.js +0 -1
  837. package/web/assets/dagre-ND4H6XIP-CpcV5kbl.js +0 -4
  838. package/web/assets/diagram-3NCE3AQN-6SMxBRpj.js +0 -43
  839. package/web/assets/diagram-GF46GFSD-BZEdNcRZ.js +0 -24
  840. package/web/assets/diagram-HNR7UZ2L-DxKW2a2Y.js +0 -3
  841. package/web/assets/diagram-QXG6HAR7-HfTHcXX_.js +0 -24
  842. package/web/assets/diagram-WEQXMOUZ-CyijUS8r.js +0 -10
  843. package/web/assets/erDiagram-L5TCEMPS-D0fvpWEX.js +0 -85
  844. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
  845. package/web/assets/flowDiagram-H6V6AXG4-Bvr9bbhk.js +0 -162
  846. package/web/assets/ganttDiagram-JCBTUEKG-TzODrLzv.js +0 -292
  847. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
  848. package/web/assets/gitGraphDiagram-S2ZK5IYY-ONQSwJIY.js +0 -106
  849. package/web/assets/index-CX_fADmQ.css +0 -2
  850. package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +0 -1
  851. package/web/assets/infoDiagram-3YFTVSEB-DIPVUIQ6.js +0 -2
  852. package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
  853. package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +0 -1
  854. package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +0 -1
  855. package/web/assets/pieDiagram-CU6KROY3-D3YC_xyg.js +0 -30
  856. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
  857. package/web/assets/requirementDiagram-JXO7QTGE-f8wczLQf.js +0 -84
  858. package/web/assets/sankeyDiagram-URQDO5SZ-BTxzG5j0.js +0 -40
  859. package/web/assets/sequenceDiagram-VS2MUI6T-DuamM-IR.js +0 -162
  860. package/web/assets/src-BNCXICdA.js +0 -1
  861. package/web/assets/stateDiagram-7D4R322I-Ch2pEUcw.js +0 -1
  862. package/web/assets/stateDiagram-v2-36443NZ5-7ANuoZLL.js +0 -1
  863. package/web/assets/timeline-definition-O6YCAMPW-07BR8R8G.js +0 -120
  864. package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +0 -1
  865. package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +0 -1
  866. package/web/assets/vennDiagram-MWXL3ELB-BQX2ossk.js +0 -34
  867. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
  868. package/web/assets/wardleyDiagram-CUQ6CDDI-CGIJBBiK.js +0 -78
  869. package/web/assets/xychartDiagram-N2JHSOCM-B3HNMuWp.js +0 -7
  870. /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
@@ -4,6 +4,7 @@
4
4
  * LLM-based enrichment for community clusters.
5
5
  * Generates semantic names, keywords, and descriptions using an LLM.
6
6
  */
7
+ import { chunk } from '../../lib/utils.js';
7
8
  import { logger } from '../logger.js';
8
9
  // ============================================================================
9
10
  // PROMPT TEMPLATE
@@ -104,10 +105,13 @@ export const enrichClustersBatch = async (communities, memberMap, llmClient, bat
104
105
  const enrichments = new Map();
105
106
  let tokensUsed = 0;
106
107
  // Process in batches
107
- for (let i = 0; i < communities.length; i += batchSize) {
108
- // Report progress
109
- onProgress?.(Math.min(i + batchSize, communities.length), communities.length);
110
- const batch = communities.slice(i, i + batchSize);
108
+ let reported = 0;
109
+ for (const batch of chunk(communities, batchSize)) {
110
+ // Report progress. `reported` after each whole batch equals the old
111
+ // `Math.min(i + batchSize, communities.length)` — the last batch is short
112
+ // exactly when that clamp used to bite.
113
+ reported += batch.length;
114
+ onProgress?.(reported, communities.length);
111
115
  const batchPrompt = batch
112
116
  .map((community, idx) => {
113
117
  const members = memberMap.get(community.id) || [];
@@ -363,7 +363,7 @@ function parseDataItemClauses(rest) {
363
363
  result.pic = picMatch[1];
364
364
  }
365
365
  // USAGE [IS] <usage-type> — including non-standard COMP-6, COMP-X etc.
366
- const usageMatch = text.match(/\bUSAGE\s+(?:IS\s+)?(COMP(?:UTATIONAL)?(?:-[0-9X])?|BINARY|PACKED-DECIMAL|DISPLAY|INDEX|POINTER|NATIONAL)\b/i);
366
+ const usageMatch = text.match(/\bUSAGE\s+(?:IS\s+)?(PROCEDURE-POINTER|FUNCTION-POINTER|COMP(?:UTATIONAL)?(?:-[0-9X])?|BINARY|PACKED-DECIMAL|DISPLAY|INDEX|POINTER|NATIONAL)\b/i);
367
367
  if (usageMatch) {
368
368
  result.usage = usageMatch[1].toUpperCase();
369
369
  }
@@ -16,9 +16,12 @@ type CommunityEngine = 'graphology' | 'icebug';
16
16
  export type CommunityDetectionEngine = CommunityEngine | 'auto';
17
17
  export interface CommunityDetectionOptions {
18
18
  /**
19
- * Graphology remains the default. `icebug`/`auto` are guarded prototype
20
- * paths for #2337 and fall back to Graphology if the optional native module
21
- * is not available or does not expose the expected API.
19
+ * Graphology is the supported default. `icebug`/`auto` are **experimental**:
20
+ * they route through the optional `@ladybugmem/icebug` native Leiden (#2337)
21
+ * and fall back to Graphology if it is not installed, cannot load, or
22
+ * predates the thread/seed controls determinism requires. The two engines
23
+ * partition differently, so switching changes community IDs — and with them
24
+ * any generated context keyed on those IDs. No stability guarantee.
22
25
  */
23
26
  engine?: CommunityDetectionEngine;
24
27
  icebug?: {
@@ -86,4 +89,19 @@ export declare const processCommunities: (knowledgeGraph: KnowledgeGraph, onProg
86
89
  export declare const buildCommunityProjection: (knowledgeGraph: KnowledgeGraph) => CommunityProjection;
87
90
  export declare const buildCommunityCsr: (projection: CommunityProjection) => CommunityCsr;
88
91
  export declare const buildGraphologyGraph: (projection: CommunityProjection) => GraphInstance;
92
+ /**
93
+ * Runs Leiden in a worker so a native crash cannot take the analyze process
94
+ * with it. Written against @ladybugmem/icebug's published surface (lib/index.js
95
+ * + index.d.ts): `GraphR(n, directed, outIndices, outIndptr)` pins the CSR
96
+ * buffers zero-copy, and `Leiden(graph, iterations, randomize, gamma)` — note
97
+ * `randomize` precedes `gamma` — returns `{membership, count}` from
98
+ * `getPartition()`.
99
+ *
100
+ * The thread/seed controls are required, not optional: community IDs feed
101
+ * generated context, so a build without them would give non-reproducible
102
+ * output. They exist at icebug-nodejs HEAD but are missing from the published
103
+ * 12.8.0 tarball, so today this guard is what trips and sends us back to
104
+ * Graphology.
105
+ */
106
+ export declare const buildIcebugWorkerSource: (moduleSpecifier: string) => string;
89
107
  export {};
@@ -39,6 +39,12 @@ function createSeededRng(seed) {
39
39
  };
40
40
  }
41
41
  const COMMUNITY_ENGINE_ENV = 'GITNEXUS_COMMUNITY_ENGINE';
42
+ /**
43
+ * Not a declared dependency: the prebuilds need system Arrow 24, libomp and
44
+ * glibc >= 2.38, so it stays an opt-in `npm i @ladybugmem/icebug` alongside
45
+ * GitNexus rather than 30MB every install pays for.
46
+ */
47
+ const ICEBUG_MODULE = '@ladybugmem/icebug';
42
48
  const DEFAULT_COMMUNITY_ENGINE = 'graphology';
43
49
  const LEIDEN_TIMEOUT_MS = 60_000;
44
50
  const ICEBUG_TIMEOUT_MS = 60_000;
@@ -147,18 +153,21 @@ export const buildCommunityProjection = (knowledgeGraph) => {
147
153
  const isLarge = symbolCount > 10_000;
148
154
  const connectedNodes = new Set();
149
155
  const nodeDegree = new Map();
150
- knowledgeGraph.forEachRelationship((rel) => {
151
- if (!isClusteringRelationship(rel.type) || rel.sourceId === rel.targetId)
156
+ // Field-wise scan (#2680): this walks every edge and reads only these four,
157
+ // so taking objects would allocate one per edge for nothing.
158
+ knowledgeGraph.forEachRelationshipFields((sourceId, targetId, type, confidence) => {
159
+ if (!isClusteringRelationship(type) || sourceId === targetId)
152
160
  return;
153
- if (isLarge && rel.confidence < MIN_CONFIDENCE_LARGE)
161
+ if (isLarge && confidence < MIN_CONFIDENCE_LARGE)
154
162
  return;
155
- connectedNodes.add(rel.sourceId);
156
- connectedNodes.add(rel.targetId);
157
- nodeDegree.set(rel.sourceId, (nodeDegree.get(rel.sourceId) || 0) + 1);
158
- nodeDegree.set(rel.targetId, (nodeDegree.get(rel.targetId) || 0) + 1);
163
+ connectedNodes.add(sourceId);
164
+ connectedNodes.add(targetId);
165
+ nodeDegree.set(sourceId, (nodeDegree.get(sourceId) || 0) + 1);
166
+ nodeDegree.set(targetId, (nodeDegree.get(targetId) || 0) + 1);
159
167
  });
160
168
  const nodes = [];
161
169
  const nodeIndexById = new Map();
170
+ const eligibleNodes = [];
162
171
  knowledgeGraph.forEachNode((node) => {
163
172
  if (!isCommunitySymbol(node) || !connectedNodes.has(node.id))
164
173
  return;
@@ -166,6 +175,10 @@ export const buildCommunityProjection = (knowledgeGraph) => {
166
175
  // get absorbed into their single neighbor's community, but cost iteration time.
167
176
  if (isLarge && (nodeDegree.get(node.id) || 0) < 2)
168
177
  return;
178
+ eligibleNodes.push(node);
179
+ });
180
+ eligibleNodes.sort((left, right) => (left.id < right.id ? -1 : left.id > right.id ? 1 : 0));
181
+ for (const node of eligibleNodes) {
169
182
  nodeIndexById.set(node.id, nodes.length);
170
183
  nodes.push({
171
184
  id: node.id,
@@ -173,16 +186,16 @@ export const buildCommunityProjection = (knowledgeGraph) => {
173
186
  filePath: node.properties.filePath,
174
187
  type: node.label,
175
188
  });
176
- });
189
+ }
177
190
  const seenEdges = new Set();
178
191
  const edges = [];
179
- knowledgeGraph.forEachRelationship((rel) => {
180
- if (!isClusteringRelationship(rel.type) || rel.sourceId === rel.targetId)
192
+ knowledgeGraph.forEachRelationshipFields((sourceId, targetId, type, confidence) => {
193
+ if (!isClusteringRelationship(type) || sourceId === targetId)
181
194
  return;
182
- if (isLarge && rel.confidence < MIN_CONFIDENCE_LARGE)
195
+ if (isLarge && confidence < MIN_CONFIDENCE_LARGE)
183
196
  return;
184
- const sourceIndex = nodeIndexById.get(rel.sourceId);
185
- const targetIndex = nodeIndexById.get(rel.targetId);
197
+ const sourceIndex = nodeIndexById.get(sourceId);
198
+ const targetIndex = nodeIndexById.get(targetId);
186
199
  if (sourceIndex === undefined || targetIndex === undefined || sourceIndex === targetIndex)
187
200
  return;
188
201
  const [a, b] = sourceIndex < targetIndex ? [sourceIndex, targetIndex] : [targetIndex, sourceIndex];
@@ -192,6 +205,7 @@ export const buildCommunityProjection = (knowledgeGraph) => {
192
205
  seenEdges.add(edgeKey);
193
206
  edges.push([a, b]);
194
207
  });
208
+ edges.sort(([leftA, leftB], [rightA, rightB]) => leftA - rightA || leftB - rightB);
195
209
  return { nodes, edges, symbolCount, isLarge };
196
210
  };
197
211
  export const buildCommunityCsr = (projection) => {
@@ -238,6 +252,11 @@ const runCommunityEngine = async (graph, projection, engineRequested, options, o
238
252
  if (engineRequested === 'graphology') {
239
253
  return runGraphologyLeiden(graph, projection.isLarge, engineRequested);
240
254
  }
255
+ // Announced on request, not just on fallback: a run that succeeds is the case
256
+ // where the user most needs to know the partition came from the experimental
257
+ // engine, since community IDs feed generated context.
258
+ onProgress?.(`Experimental ${engineRequested} community engine requested — unsupported, and its ` +
259
+ 'communities will not match the Graphology default.', 32);
241
260
  try {
242
261
  return await runIcebugLeiden(projection, engineRequested, options);
243
262
  }
@@ -286,8 +305,7 @@ const runIcebugLeiden = async (projection, engineRequested, options) => {
286
305
  if (!Number.isFinite(nativeResult.modularity)) {
287
306
  throw new Error('optional icebug modularity was not finite');
288
307
  }
289
- if (partition.length !== projection.nodes.length ||
290
- partition.some((community) => !Number.isSafeInteger(community))) {
308
+ if (partition.length !== projection.nodes.length || !isIntegerPartition(partition)) {
291
309
  throw new Error(`optional icebug partition was malformed for ${projection.nodes.length} projected nodes`);
292
310
  }
293
311
  const communities = normalizePartition(projection, partition);
@@ -299,6 +317,13 @@ const runIcebugLeiden = async (projection, engineRequested, options) => {
299
317
  engineRequested,
300
318
  };
301
319
  };
320
+ const isIntegerPartition = (partition) => {
321
+ for (let index = 0; index < partition.length; index++) {
322
+ if (!Number.isSafeInteger(partition[index]))
323
+ return false;
324
+ }
325
+ return true;
326
+ };
302
327
  const runIcebugWorker = (nodeCount, csr, options) => {
303
328
  const threads = options.icebug?.threads ?? 1;
304
329
  if (!Number.isSafeInteger(threads) || threads !== 1) {
@@ -324,13 +349,20 @@ const runIcebugWorker = (nodeCount, csr, options) => {
324
349
  let settled = false;
325
350
  const timeout = setTimeout(() => {
326
351
  settled = true;
327
- void worker.terminate();
352
+ // Deliberately NOT terminate(): every millisecond of this worker's life is
353
+ // spent inside an N-API call (dlopen, GraphR, Leiden, run), and killing a
354
+ // thread mid-N-API aborts the whole process — Napi::Error → std::terminate
355
+ // → SIGABRT (#2432, see worker-pool.ts `shutdownDrainMs`). A timeout must
356
+ // degrade to the Graphology fallback, not take analyze down with it.
357
+ // unref() so a wedged native run cannot hold the process open either.
358
+ worker.unref();
328
359
  reject(new Error(`optional icebug community engine timed out after ${ICEBUG_TIMEOUT_MS}ms`));
329
360
  }, ICEBUG_TIMEOUT_MS);
361
+ // No terminate() on the settled paths either: the worker script ends after
362
+ // its single postMessage, so the thread exits on its own.
330
363
  worker.once('message', (message) => {
331
364
  settled = true;
332
365
  clearTimeout(timeout);
333
- void worker.terminate();
334
366
  if (message.ok === true) {
335
367
  resolve(message);
336
368
  }
@@ -341,7 +373,6 @@ const runIcebugWorker = (nodeCount, csr, options) => {
341
373
  worker.once('error', (error) => {
342
374
  settled = true;
343
375
  clearTimeout(timeout);
344
- void worker.terminate();
345
376
  reject(error);
346
377
  });
347
378
  worker.once('exit', (code) => {
@@ -356,85 +387,59 @@ const runIcebugWorker = (nodeCount, csr, options) => {
356
387
  });
357
388
  });
358
389
  };
359
- const ICEBUG_WORKER_SOURCE = `
390
+ /**
391
+ * Runs Leiden in a worker so a native crash cannot take the analyze process
392
+ * with it. Written against @ladybugmem/icebug's published surface (lib/index.js
393
+ * + index.d.ts): `GraphR(n, directed, outIndices, outIndptr)` pins the CSR
394
+ * buffers zero-copy, and `Leiden(graph, iterations, randomize, gamma)` — note
395
+ * `randomize` precedes `gamma` — returns `{membership, count}` from
396
+ * `getPartition()`.
397
+ *
398
+ * The thread/seed controls are required, not optional: community IDs feed
399
+ * generated context, so a build without them would give non-reproducible
400
+ * output. They exist at icebug-nodejs HEAD but are missing from the published
401
+ * 12.8.0 tarball, so today this guard is what trips and sends us back to
402
+ * Graphology.
403
+ */
404
+ export const buildIcebugWorkerSource = (moduleSpecifier) => `
360
405
  const { parentPort, workerData } = require('node:worker_threads');
361
406
 
362
- const isNumericArrayLike = (value) =>
363
- typeof value === 'object' &&
364
- value !== null &&
365
- 'length' in value &&
366
- typeof value.length === 'number';
367
-
368
- const readPartition = (runner) => {
369
- const candidates = [
370
- typeof runner.getPartition === 'function' ? runner.getPartition() : runner.partition,
371
- typeof runner.getCommunities === 'function' ? runner.getCommunities() : undefined,
372
- typeof runner.getMembership === 'function' ? runner.getMembership() : undefined,
373
- typeof runner.getMemberships === 'function' ? runner.getMemberships() : undefined,
374
- ];
375
-
376
- for (const candidate of candidates) {
377
- if (isNumericArrayLike(candidate)) {
378
- return Array.from(candidate, Number);
379
- }
380
- }
381
-
382
- throw new Error('optional icebug ParallelLeidenView did not expose a partition array');
383
- };
384
-
385
- const readModularity = (runner) => {
386
- if (typeof runner.getModularity === 'function') return runner.getModularity();
387
- if (typeof runner.modularity === 'function') return runner.modularity();
388
- if (typeof runner.modularity === 'number') return runner.modularity;
389
- return 0;
390
- };
391
-
392
- (async () => {
393
- const imported = await import('icebug');
394
- const icebug = imported.default ?? imported;
395
- const fromCSR = icebug.Graph?.fromCSR;
396
- const ParallelLeidenView = icebug.community?.ParallelLeidenView;
397
- if (!fromCSR || !ParallelLeidenView) {
398
- throw new Error('optional icebug module does not expose Graph.fromCSR/ParallelLeidenView');
399
- }
407
+ try {
408
+ const icebug = require(${JSON.stringify(moduleSpecifier)});
400
409
 
401
410
  if (typeof icebug.setNumberOfThreads !== 'function' || typeof icebug.setSeed !== 'function') {
402
- throw new Error('optional icebug module does not expose deterministic thread/seed controls');
411
+ throw new Error(
412
+ 'optional icebug build predates the deterministic thread/seed controls (icebug-nodejs#6)',
413
+ );
403
414
  }
415
+
404
416
  icebug.setNumberOfThreads(workerData.threads);
405
417
  icebug.setSeed(workerData.seed, false);
406
418
 
407
- const nativeGraph = fromCSR(workerData.nodeCount, false, workerData.indices, workerData.indptr);
408
- let runner;
409
- try {
410
- runner = new ParallelLeidenView(nativeGraph, {
411
- iterations: workerData.iterations,
412
- gamma: workerData.gamma,
413
- randomize: workerData.randomize,
414
- });
415
- } catch {
416
- runner = new ParallelLeidenView(
417
- nativeGraph,
418
- workerData.iterations,
419
- workerData.gamma,
420
- workerData.randomize,
421
- );
422
- }
419
+ const graph = new icebug.GraphR(
420
+ workerData.nodeCount,
421
+ false,
422
+ workerData.indices,
423
+ workerData.indptr,
424
+ );
425
+ const leiden = new icebug.Leiden(
426
+ graph,
427
+ workerData.iterations,
428
+ workerData.randomize,
429
+ workerData.gamma,
430
+ );
431
+ leiden.run();
423
432
 
424
- if (typeof runner.run !== 'function') {
425
- throw new Error('optional icebug ParallelLeidenView does not expose run()');
426
- }
427
-
428
- runner.run();
429
433
  parentPort.postMessage({
430
434
  ok: true,
431
- partition: readPartition(runner),
432
- modularity: readModularity(runner),
435
+ partition: leiden.getPartition().membership,
436
+ modularity: leiden.modularity(),
433
437
  });
434
- })().catch((error) => {
438
+ } catch (error) {
435
439
  parentPort.postMessage({ ok: false, error: error instanceof Error ? error.message : String(error) });
436
- });
440
+ }
437
441
  `;
442
+ const ICEBUG_WORKER_SOURCE = buildIcebugWorkerSource(ICEBUG_MODULE);
438
443
  const normalizePartition = (projection, partition) => {
439
444
  const remap = new Map();
440
445
  const communities = {};
@@ -1,47 +1,35 @@
1
1
  /**
2
- * Per-language DI field-matcher registry — the lookup the generic `di`
3
- * pipeline phase uses to decide whether a `Property` node is a
4
- * dependency-injection fan-out candidate.
2
+ * Per-language DI resolver registry — the lookup the generic `di` pipeline
3
+ * phase uses to discover injection sites and provider metadata on graph nodes.
5
4
  *
6
5
  * Mirrors `scope-resolution/pipeline/registry.ts` (`SCOPE_RESOLVERS`): a
7
- * single-valued `ReadonlyMap<SupportedLanguages, DiFieldMatcher>` consumed by
6
+ * single-valued `ReadonlyMap<SupportedLanguages, DiResolver>` consumed by
8
7
  * a framework-neutral phase, so no language or framework names leak into
9
- * shared pipeline code. Adding a framework is two lines: implement a
10
- * `DiFieldMatcher` in `di-extractors/<framework>.ts` and register it here.
8
+ * shared pipeline code. Adding a framework means implementing a `DiResolver`
9
+ * in `di-extractors/<framework>.ts` and registering it here.
11
10
  *
12
- * Scope honesty: matchers are per-language *field-injection* matchers.
13
- * Constructor injection (the dominant modern Spring idiom) lives on
14
- * Method/parameter nodes and would require widening the phase's routing —
15
- * deliberately out of scope (see the plan's Deferred work). The registry is
16
- * single-valued per language, matching the `SCOPE_RESOLVERS` shape; widen the
17
- * value type to arrays only when a second same-language framework actually
18
- * lands (a one-line type change then).
11
+ * The registry is single-valued per language, matching the `SCOPE_RESOLVERS`
12
+ * shape; widen the value type to arrays only when a second same-language
13
+ * framework actually lands. Java and Kotlin share Spring's attached metadata
14
+ * contract while retaining language-specific syntax capture.
19
15
  */
20
16
  import { SupportedLanguages } from '../../../_shared/index.js';
21
- import type { GraphNode } from '../../../_shared/index.js';
22
- /** A successful DI field match, produced by a per-language matcher. */
23
- export interface DiFieldMatch {
24
- /** The element type name `T` — the injected bean interface. */
25
- elementTypeName: string;
26
- /** Human-readable edge reason. Framework specifics (names, idioms,
27
- * collection wrapper, gating annotation) live in this payload so the
28
- * shared `di` phase stays framework-neutral. */
29
- reason: string;
30
- }
31
- /**
32
- * A per-language field-injection matcher: given a `Property` node, return the
33
- * parsed DI match or `null` when the field is not container-injected. The
34
- * matcher receives the whole node (not pre-plucked fields) so the shared
35
- * phase stays ignorant of which properties matter.
36
- */
37
- export type DiFieldMatcher = (node: GraphNode) => DiFieldMatch | null;
17
+ import type { DiResolver } from './types.js';
18
+ /** The resolver contract lives in the leaf `./types.js` so an implementation
19
+ * can depend on it without depending on this registry (which imports every
20
+ * implementation). The two match shapes are re-exported here because consumers
21
+ * of the registry read them off its results — `pipeline-phases/di.ts` and the
22
+ * Spring metadata modules import them from this module alongside
23
+ * `DI_RESOLVERS`. `DiResolver` itself is NOT re-exported: only implementations
24
+ * need it, and they import it from `./types.js` directly. */
25
+ export type { DiInjectionMatch, DiProviderMatch } from './types.js';
38
26
  /**
39
27
  * Type guard narrowing an arbitrary graph `language` string to
40
- * `SupportedLanguages`, so `DI_MATCHERS.get()` needs no cast.
28
+ * `SupportedLanguages`, so `DI_RESOLVERS.get()` needs no cast.
41
29
  */
42
30
  export declare function isSupportedLanguage(value: string): value is SupportedLanguages;
43
- /** Map of `SupportedLanguages` → `DiFieldMatcher`. The `di` phase routes each
44
- * `Property` node here by `node.properties.language`; no entry ⇒ the node is
31
+ /** Map of `SupportedLanguages` → `DiResolver`. The `di` phase routes each
32
+ * graph node here by `node.properties.language`; no entry ⇒ the node is
45
33
  * skipped. This is the single source of truth for which languages (and,
46
34
  * transitively, frameworks) produce INJECTS edges. */
47
- export declare const DI_MATCHERS: ReadonlyMap<SupportedLanguages, DiFieldMatcher>;
35
+ export declare const DI_RESOLVERS: ReadonlyMap<SupportedLanguages, DiResolver>;
@@ -1,35 +1,34 @@
1
1
  /**
2
- * Per-language DI field-matcher registry — the lookup the generic `di`
3
- * pipeline phase uses to decide whether a `Property` node is a
4
- * dependency-injection fan-out candidate.
2
+ * Per-language DI resolver registry — the lookup the generic `di` pipeline
3
+ * phase uses to discover injection sites and provider metadata on graph nodes.
5
4
  *
6
5
  * Mirrors `scope-resolution/pipeline/registry.ts` (`SCOPE_RESOLVERS`): a
7
- * single-valued `ReadonlyMap<SupportedLanguages, DiFieldMatcher>` consumed by
6
+ * single-valued `ReadonlyMap<SupportedLanguages, DiResolver>` consumed by
8
7
  * a framework-neutral phase, so no language or framework names leak into
9
- * shared pipeline code. Adding a framework is two lines: implement a
10
- * `DiFieldMatcher` in `di-extractors/<framework>.ts` and register it here.
8
+ * shared pipeline code. Adding a framework means implementing a `DiResolver`
9
+ * in `di-extractors/<framework>.ts` and registering it here.
11
10
  *
12
- * Scope honesty: matchers are per-language *field-injection* matchers.
13
- * Constructor injection (the dominant modern Spring idiom) lives on
14
- * Method/parameter nodes and would require widening the phase's routing —
15
- * deliberately out of scope (see the plan's Deferred work). The registry is
16
- * single-valued per language, matching the `SCOPE_RESOLVERS` shape; widen the
17
- * value type to arrays only when a second same-language framework actually
18
- * lands (a one-line type change then).
11
+ * The registry is single-valued per language, matching the `SCOPE_RESOLVERS`
12
+ * shape; widen the value type to arrays only when a second same-language
13
+ * framework actually lands. Java and Kotlin share Spring's attached metadata
14
+ * contract while retaining language-specific syntax capture.
19
15
  */
20
16
  import { SupportedLanguages } from '../../../_shared/index.js';
21
- import { springDiFieldMatcher } from './spring.js';
17
+ import { springDiResolver } from './spring.js';
22
18
  /** All `SupportedLanguages` string values, for narrowing raw graph strings. */
23
19
  const SUPPORTED_LANGUAGE_VALUES = new Set(Object.values(SupportedLanguages));
24
20
  /**
25
21
  * Type guard narrowing an arbitrary graph `language` string to
26
- * `SupportedLanguages`, so `DI_MATCHERS.get()` needs no cast.
22
+ * `SupportedLanguages`, so `DI_RESOLVERS.get()` needs no cast.
27
23
  */
28
24
  export function isSupportedLanguage(value) {
29
25
  return SUPPORTED_LANGUAGE_VALUES.has(value);
30
26
  }
31
- /** Map of `SupportedLanguages` → `DiFieldMatcher`. The `di` phase routes each
32
- * `Property` node here by `node.properties.language`; no entry ⇒ the node is
27
+ /** Map of `SupportedLanguages` → `DiResolver`. The `di` phase routes each
28
+ * graph node here by `node.properties.language`; no entry ⇒ the node is
33
29
  * skipped. This is the single source of truth for which languages (and,
34
30
  * transitively, frameworks) produce INJECTS edges. */
35
- export const DI_MATCHERS = new Map([[SupportedLanguages.Java, springDiFieldMatcher]]);
31
+ export const DI_RESOLVERS = new Map([
32
+ [SupportedLanguages.Java, springDiResolver],
33
+ [SupportedLanguages.Kotlin, springDiResolver],
34
+ ]);
@@ -51,11 +51,22 @@
51
51
  * between `<` and the element) are NOT stripped and fail closed —
52
52
  * acceptable.
53
53
  *
54
- * Registered under `SupportedLanguages.Java` in `./index.ts` (`DI_MATCHERS`);
55
- * language routing is the registry's job, so the matcher itself never reads
56
- * `node.properties.language`.
54
+ * Registered for Java and Kotlin in `./index.ts` (`DI_RESOLVERS`); language
55
+ * routing is the registry's job, so the matcher itself never reads
56
+ * `node.properties.language`. Kotlin's AST-backed class metadata is the
57
+ * primary path because Kotlin Property extraction intentionally exposes less
58
+ * annotation/type syntax than Java's legacy field contract.
57
59
  */
58
- import type { DiFieldMatcher } from './index.js';
60
+ import type { GraphNode } from '../../../_shared/index.js';
61
+ import type { DiResolver } from './types.js';
62
+ /** Ephemeral Class-node property populated by Java's post-resolution Spring
63
+ * metadata hook. It is consumed in the same pipeline run before persistence. */
64
+ export declare const SPRING_DI_INJECTION_SITES_PROPERTY = "springDiInjectionSites";
65
+ /** Ephemeral Class-node property carrying Spring bean names / @Primary. */
66
+ export declare const SPRING_DI_PROVIDER_PROPERTY = "springDiProvider";
67
+ /** Marker placed on Property nodes whose richer AST-backed field fact was
68
+ * attached to the owning Class, suppressing the legacy collection fallback. */
69
+ export declare const SPRING_DI_CAPTURED_FIELD_PROPERTY = "springDiCapturedField";
59
70
  /**
60
71
  * Parse a Spring DI collection field's raw declared type (verbatim source
61
72
  * text, generics preserved) and return the injected bean type name.
@@ -73,10 +84,21 @@ export declare function parseSpringCollectionType(rawDeclaredType: string): {
73
84
  collectionType: string;
74
85
  elementTypeName: string;
75
86
  } | null;
87
+ /** Parse either a supported collect-all type or a standard single bean type. */
88
+ export declare function parseSpringInjectionType(rawDeclaredType: string): {
89
+ targetTypeName: string;
90
+ cardinality: 'single' | 'collection';
91
+ displayType: string;
92
+ } | null;
76
93
  /**
77
94
  * Match a `Property` node against Spring's collection-injection shape.
78
95
  *
79
96
  * Returns the parsed match (with a Spring-specific human-readable `reason`
80
97
  * payload) or `null` when the field is not container-injected.
81
98
  */
82
- export declare const springDiFieldMatcher: DiFieldMatcher;
99
+ export declare const springDiFieldMatcher: (node: GraphNode) => {
100
+ elementTypeName: string;
101
+ reason: string;
102
+ } | null;
103
+ /** JVM/Spring resolver registered behind the framework-neutral DI seam. */
104
+ export declare const springDiResolver: DiResolver;
@@ -51,9 +51,11 @@
51
51
  * between `<` and the element) are NOT stripped and fail closed —
52
52
  * acceptable.
53
53
  *
54
- * Registered under `SupportedLanguages.Java` in `./index.ts` (`DI_MATCHERS`);
55
- * language routing is the registry's job, so the matcher itself never reads
56
- * `node.properties.language`.
54
+ * Registered for Java and Kotlin in `./index.ts` (`DI_RESOLVERS`); language
55
+ * routing is the registry's job, so the matcher itself never reads
56
+ * `node.properties.language`. Kotlin's AST-backed class metadata is the
57
+ * primary path because Kotlin Property extraction intentionally exposes less
58
+ * annotation/type syntax than Java's legacy field contract.
57
59
  */
58
60
  import { isDev } from '../utils/env.js';
59
61
  import { logger } from '../../logger.js';
@@ -76,6 +78,14 @@ const WILDCARD_SUPER_PREFIX = '? super ';
76
78
  * parser accepts. Everything else (wildcards, arrays, comments, stray
77
79
  * punctuation) fails closed. */
78
80
  const JAVA_TYPE_NAME_PATTERN = /^[A-Za-z_$][A-Za-z0-9_$]*(?:\.[A-Za-z_$][A-Za-z0-9_$]*)*$/;
81
+ /** Ephemeral Class-node property populated by Java's post-resolution Spring
82
+ * metadata hook. It is consumed in the same pipeline run before persistence. */
83
+ export const SPRING_DI_INJECTION_SITES_PROPERTY = 'springDiInjectionSites';
84
+ /** Ephemeral Class-node property carrying Spring bean names / @Primary. */
85
+ export const SPRING_DI_PROVIDER_PROPERTY = 'springDiProvider';
86
+ /** Marker placed on Property nodes whose richer AST-backed field fact was
87
+ * attached to the owning Class, suppressing the legacy collection fallback. */
88
+ export const SPRING_DI_CAPTURED_FIELD_PROPERTY = 'springDiCapturedField';
79
89
  /**
80
90
  * Split a generic-argument list on TOP-LEVEL commas only, tracking `<`/`>`
81
91
  * bracket depth so nested generics (e.g. the `Pair<A,B>` key in
@@ -179,6 +189,21 @@ export function parseSpringCollectionType(rawDeclaredType) {
179
189
  return null;
180
190
  return { collectionType: wrapper, elementTypeName };
181
191
  }
192
+ /** Parse either a supported collect-all type or a standard single bean type. */
193
+ export function parseSpringInjectionType(rawDeclaredType) {
194
+ const collection = parseSpringCollectionType(rawDeclaredType);
195
+ if (collection !== null) {
196
+ return {
197
+ targetTypeName: collection.elementTypeName,
198
+ cardinality: 'collection',
199
+ displayType: `${collection.collectionType}<${collection.elementTypeName}>`,
200
+ };
201
+ }
202
+ const normalized = rawDeclaredType.replace(/\s+/g, '').trim();
203
+ if (!JAVA_TYPE_NAME_PATTERN.test(normalized))
204
+ return null;
205
+ return { targetTypeName: normalized, cardinality: 'single', displayType: normalized };
206
+ }
182
207
  /**
183
208
  * Match a `Property` node against Spring's collection-injection shape.
184
209
  *
@@ -218,3 +243,62 @@ export const springDiFieldMatcher = (node) => {
218
243
  reason: `Spring DI: ${matchedAnnotation} ${parsed.collectionType}<${parsed.elementTypeName}>`,
219
244
  };
220
245
  };
246
+ function isInjectionMatch(value) {
247
+ if (value === null || typeof value !== 'object')
248
+ return false;
249
+ const match = value;
250
+ const namedSelection = match.namedSelection;
251
+ return (typeof match.targetTypeName === 'string' &&
252
+ (match.cardinality === 'single' || match.cardinality === 'collection') &&
253
+ typeof match.reason === 'string' &&
254
+ (match.edgeSource === undefined ||
255
+ match.edgeSource === 'owner-class' ||
256
+ match.edgeSource === 'site') &&
257
+ (namedSelection === undefined ||
258
+ (typeof namedSelection === 'object' &&
259
+ namedSelection !== null &&
260
+ typeof namedSelection.name === 'string' &&
261
+ typeof namedSelection.reason === 'string' &&
262
+ (namedSelection.fallbackToType === undefined ||
263
+ typeof namedSelection.fallbackToType === 'boolean'))));
264
+ }
265
+ function isProviderMatch(value) {
266
+ if (value === null || typeof value !== 'object')
267
+ return false;
268
+ const provider = value;
269
+ return (Array.isArray(provider.names) &&
270
+ provider.names.every((name) => typeof name === 'string') &&
271
+ (provider.providedTypeName === undefined || typeof provider.providedTypeName === 'string') &&
272
+ (provider.declaredByNodeId === undefined || typeof provider.declaredByNodeId === 'string') &&
273
+ (provider.preferenceReason === undefined || typeof provider.preferenceReason === 'string'));
274
+ }
275
+ /** JVM/Spring resolver registered behind the framework-neutral DI seam. */
276
+ export const springDiResolver = {
277
+ matchInjectionSites(node) {
278
+ const matches = [];
279
+ // Preserve the existing Property-node collection contract for hand-built
280
+ // graphs and for compatibility with pre-#2414 extraction fixtures.
281
+ if (node.label === 'Property' && node.properties[SPRING_DI_CAPTURED_FIELD_PROPERTY] !== true) {
282
+ const field = springDiFieldMatcher(node);
283
+ if (field !== null) {
284
+ matches.push({
285
+ targetTypeName: field.elementTypeName,
286
+ cardinality: 'collection',
287
+ reason: field.reason,
288
+ });
289
+ }
290
+ }
291
+ const attached = node.properties[SPRING_DI_INJECTION_SITES_PROPERTY];
292
+ if (Array.isArray(attached)) {
293
+ for (const candidate of attached) {
294
+ if (isInjectionMatch(candidate))
295
+ matches.push(candidate);
296
+ }
297
+ }
298
+ return matches;
299
+ },
300
+ matchProvider(node) {
301
+ const attached = node.properties[SPRING_DI_PROVIDER_PROPERTY];
302
+ return isProviderMatch(attached) ? attached : null;
303
+ },
304
+ };