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
@@ -0,0 +1,152 @@
1
+ import { resolveCallerGraphId } from '../../scope-resolution/graph-bridge/ids.js';
2
+ import { createSpringAnnotationNameResolver } from './bean-candidates.js';
3
+ import { SPRING_BEAN_ANNOTATION } from './bean-factories.js';
4
+ export const SPRING_NON_HTTP_HANDLER_ENTRY_POINT_MULTIPLIER = 3.0;
5
+ const SPRING_SERVICE_ACTIVATOR_ANNOTATION = 'org.springframework.integration.annotation.ServiceActivator';
6
+ const HANDLER_ANNOTATIONS = new Map([
7
+ ['org.springframework.scheduling.annotation.Scheduled', 'scheduled'],
8
+ ['org.springframework.scheduling.annotation.Schedules', 'scheduled'],
9
+ ['org.springframework.context.event.EventListener', 'event'],
10
+ ['org.springframework.transaction.event.TransactionalEventListener', 'event'],
11
+ ['org.springframework.modulith.events.ApplicationModuleListener', 'event'],
12
+ ['org.springframework.kafka.annotation.KafkaListener', 'message'],
13
+ ['org.springframework.kafka.annotation.KafkaListeners', 'message'],
14
+ ['org.springframework.amqp.rabbit.annotation.RabbitListener', 'message'],
15
+ ['org.springframework.amqp.rabbit.annotation.RabbitListeners', 'message'],
16
+ ['org.springframework.jms.annotation.JmsListener', 'message'],
17
+ ['org.springframework.jms.annotation.JmsListeners', 'message'],
18
+ ['org.springframework.pulsar.annotation.PulsarListener', 'message'],
19
+ ['org.springframework.pulsar.annotation.PulsarListeners', 'message'],
20
+ ['io.awspring.cloud.sqs.annotation.SqsListener', 'message'],
21
+ ['io.awspring.cloud.messaging.listener.annotation.SqsListener', 'message'],
22
+ ['org.springframework.cloud.aws.messaging.listener.annotation.SqsListener', 'message'],
23
+ ['org.springframework.cloud.stream.annotation.StreamListener', 'message'],
24
+ [SPRING_SERVICE_ACTIVATOR_ANNOTATION, 'message'],
25
+ ['org.springframework.messaging.handler.annotation.MessageMapping', 'message'],
26
+ ['org.springframework.messaging.simp.annotation.SubscribeMapping', 'message'],
27
+ ['com.xxl.job.core.handler.annotation.XxlJob', 'xxl-job'],
28
+ ]);
29
+ const RECOGNIZED_HANDLER_ANNOTATIONS = new Set(HANDLER_ANNOTATIONS.keys());
30
+ const RESOLVABLE_NON_HTTP_ANNOTATIONS = new Set([
31
+ ...RECOGNIZED_HANDLER_ANNOTATIONS,
32
+ SPRING_BEAN_ANNOTATION,
33
+ ]);
34
+ function simpleName(name) {
35
+ const separator = name.lastIndexOf('.');
36
+ return separator === -1 ? name : name.slice(separator + 1);
37
+ }
38
+ const CAPTURE_RELEVANT_SIMPLE_NAMES = new Set([...RECOGNIZED_HANDLER_ANNOTATIONS].map(simpleName));
39
+ export function hasSpringNonHttpHandlerRelevantAnnotation(annotations) {
40
+ return annotations.some((annotation) => CAPTURE_RELEVANT_SIMPLE_NAMES.has(simpleName(annotation.name)));
41
+ }
42
+ function exactCallableOwnersByRange(graph) {
43
+ const owners = new Map();
44
+ for (const node of graph.iterNodes()) {
45
+ if ((node.label !== 'Method' && node.label !== 'Function') ||
46
+ typeof node.properties.filePath !== 'string') {
47
+ continue;
48
+ }
49
+ const key = `${node.properties.filePath}\0${node.properties.startLine}\0${node.properties.endLine}`;
50
+ owners.set(key, owners.has(key) ? null : node);
51
+ }
52
+ return owners;
53
+ }
54
+ function ownerGraphNode(fact, indexes, nodeLookup, graph, getExactOwnerByRange) {
55
+ const ownerId = resolveCallerGraphId(fact.ownerScopeId, indexes, nodeLookup);
56
+ if (ownerId !== undefined) {
57
+ const owner = graph.getNode(ownerId);
58
+ if (owner?.label === 'Method' || owner?.label === 'Function')
59
+ return owner;
60
+ }
61
+ if (fact.ownerFilePath !== undefined && fact.ownerRange !== undefined) {
62
+ const fallback = getExactOwnerByRange().get(`${fact.ownerFilePath}\0${fact.ownerRange.startLine - 1}\0${fact.ownerRange.endLine - 1}`);
63
+ if (fallback !== null && fallback !== undefined)
64
+ return fallback;
65
+ }
66
+ return undefined;
67
+ }
68
+ function handlerReason(kinds) {
69
+ if (kinds.size !== 1) {
70
+ return kinds.has('xxl-job') ? 'managed-non-http-handler' : 'spring-non-http-handler';
71
+ }
72
+ const kind = kinds.values().next().value;
73
+ if (kind === 'xxl-job')
74
+ return 'xxl-job-handler';
75
+ return `spring-${kind}-handler`;
76
+ }
77
+ /**
78
+ * Resolve callable annotations after imports and package visibility finalize,
79
+ * then promote confirmed framework-managed handlers into process entry points.
80
+ */
81
+ export function createSpringNonHttpHandlerMetadataAttacher(adapter) {
82
+ return (graph, parsedFiles, nodeLookup, indexes) => {
83
+ const factsByFile = new Map();
84
+ for (const parsed of parsedFiles) {
85
+ const facts = adapter.getFacts(parsed.filePath);
86
+ if (facts.length > 0)
87
+ factsByFile.set(parsed.filePath, facts);
88
+ }
89
+ if (factsByFile.size === 0)
90
+ return;
91
+ const resolveAnnotation = createSpringAnnotationNameResolver(indexes);
92
+ let exactOwnerByRange;
93
+ const getExactOwnerByRange = () => (exactOwnerByRange ??= exactCallableOwnersByRange(graph));
94
+ let classIdByMethod;
95
+ const ownerClassLabel = (methodId) => {
96
+ if (classIdByMethod === undefined) {
97
+ const owners = new Map();
98
+ for (const relationship of graph.iterRelationshipsByType('HAS_METHOD')) {
99
+ owners.set(relationship.targetId, relationship.sourceId);
100
+ }
101
+ classIdByMethod = owners;
102
+ }
103
+ const classId = classIdByMethod.get(methodId);
104
+ return classId === undefined ? undefined : graph.getNode(classId)?.label;
105
+ };
106
+ for (const parsed of parsedFiles) {
107
+ const facts = factsByFile.get(parsed.filePath);
108
+ if (facts === undefined)
109
+ continue;
110
+ const incomplete = adapter.isPackageVisibilityIncomplete(parsed.filePath);
111
+ const resolvedAnnotations = new Map();
112
+ for (const fact of facts) {
113
+ const ownerScope = indexes.scopeTree.getScope(fact.ownerScopeId);
114
+ const resolvedFactAnnotations = new Set();
115
+ for (const annotation of fact.annotations) {
116
+ if (annotation.useSiteTarget !== undefined)
117
+ continue;
118
+ const enclosingScope = ownerScope?.parent ?? null;
119
+ const cacheKey = `${enclosingScope ?? '<root>'}\0${annotation.name}`;
120
+ let resolved = resolvedAnnotations.get(cacheKey);
121
+ if (!resolvedAnnotations.has(cacheKey)) {
122
+ resolved = resolveAnnotation(annotation.name, parsed, enclosingScope, RESOLVABLE_NON_HTTP_ANNOTATIONS, incomplete);
123
+ resolvedAnnotations.set(cacheKey, resolved);
124
+ }
125
+ if (resolved !== undefined)
126
+ resolvedFactAnnotations.add(resolved);
127
+ }
128
+ const beanFactoryMethod = resolvedFactAnnotations.has(SPRING_BEAN_ANNOTATION);
129
+ const kinds = new Set();
130
+ for (const resolved of resolvedFactAnnotations) {
131
+ if (beanFactoryMethod && resolved === SPRING_SERVICE_ACTIVATOR_ANNOTATION)
132
+ continue;
133
+ const kind = HANDLER_ANNOTATIONS.get(resolved);
134
+ if (kind !== undefined)
135
+ kinds.add(kind);
136
+ }
137
+ if (kinds.size === 0)
138
+ continue;
139
+ const owner = ownerGraphNode(fact, indexes, nodeLookup, graph, getExactOwnerByRange);
140
+ if (owner === undefined || ownerClassLabel(owner.id) === 'Interface')
141
+ continue;
142
+ const currentMultiplier = owner.properties.astFrameworkMultiplier ?? 1.0;
143
+ owner.properties.astFrameworkMultiplier = Math.max(currentMultiplier, SPRING_NON_HTTP_HANDLER_ENTRY_POINT_MULTIPLIER);
144
+ if (currentMultiplier < SPRING_NON_HTTP_HANDLER_ENTRY_POINT_MULTIPLIER ||
145
+ (currentMultiplier === SPRING_NON_HTTP_HANDLER_ENTRY_POINT_MULTIPLIER &&
146
+ owner.properties.astFrameworkReason === undefined)) {
147
+ owner.properties.astFrameworkReason = handlerReason(kinds);
148
+ }
149
+ }
150
+ }
151
+ };
152
+ }
@@ -0,0 +1,5 @@
1
+ import type { DiInjectionMatch } from '../../di-extractors/index.js';
2
+ export declare const SPRING_RESOURCE_ANNOTATIONS: Set<string>;
3
+ export declare function springResourceDefaultName(siteKind: string, memberName: string, dependencyCount: number): string | null;
4
+ /** Build the conservative name-first Resource match shared by Java and Kotlin. */
5
+ export declare function springResourceInjectionMatch(annotationText: string, defaultName: string, rawDeclaredType: string, location: string): DiInjectionMatch | null;
@@ -0,0 +1,91 @@
1
+ import { normalizeSpringBeanType, parseSpringAnnotationArguments, parseStaticClassLiteral, parseStaticStringValues, } from './annotation-arguments.js';
2
+ export const SPRING_RESOURCE_ANNOTATIONS = new Set([
3
+ 'jakarta.annotation.Resource',
4
+ 'javax.annotation.Resource',
5
+ ]);
6
+ function singleNamedArgument(annotationText, name) {
7
+ const argumentsList = parseSpringAnnotationArguments(annotationText);
8
+ if (argumentsList === null || argumentsList.some((argument) => argument.name === undefined)) {
9
+ return null;
10
+ }
11
+ const matches = argumentsList.filter((argument) => argument.name === name);
12
+ if (matches.length > 1)
13
+ return null;
14
+ return matches.length === 0 ? { present: false } : { present: true, value: matches[0].value };
15
+ }
16
+ function staticSingleString(value) {
17
+ if (value === undefined)
18
+ return null;
19
+ const values = parseStaticStringValues(value);
20
+ return values !== null && values.length === 1 ? values[0] : null;
21
+ }
22
+ function javaBeansDecapitalize(value) {
23
+ if (value.length === 0)
24
+ return value;
25
+ if (value.length > 1 &&
26
+ value[0] !== value[0].toLowerCase() &&
27
+ value[1] !== value[1].toLowerCase()) {
28
+ return value;
29
+ }
30
+ return value[0].toLowerCase() + value.slice(1);
31
+ }
32
+ export function springResourceDefaultName(siteKind, memberName, dependencyCount) {
33
+ if (siteKind !== 'method')
34
+ return memberName;
35
+ if (dependencyCount !== 1 || !/^set[A-Z_$]/.test(memberName) || memberName.length <= 3) {
36
+ return null;
37
+ }
38
+ return javaBeansDecapitalize(memberName.slice(3));
39
+ }
40
+ /** Build the conservative name-first Resource match shared by Java and Kotlin. */
41
+ export function springResourceInjectionMatch(annotationText, defaultName, rawDeclaredType, location) {
42
+ const nameArgument = singleNamedArgument(annotationText, 'name');
43
+ const typeArgument = singleNamedArgument(annotationText, 'type');
44
+ const lookupArgument = singleNamedArgument(annotationText, 'lookup');
45
+ const mappedNameArgument = singleNamedArgument(annotationText, 'mappedName');
46
+ if (nameArgument === null ||
47
+ typeArgument === null ||
48
+ lookupArgument === null ||
49
+ mappedNameArgument === null) {
50
+ return null;
51
+ }
52
+ for (const runtimeArgument of [lookupArgument, mappedNameArgument]) {
53
+ if (!runtimeArgument.present)
54
+ continue;
55
+ const value = staticSingleString(runtimeArgument.value);
56
+ if (value === null || value.length > 0)
57
+ return null;
58
+ }
59
+ const declaredType = normalizeSpringBeanType(rawDeclaredType);
60
+ if (declaredType === null)
61
+ return null;
62
+ let targetTypeName = declaredType;
63
+ if (typeArgument.present) {
64
+ const override = parseStaticClassLiteral(typeArgument.value ?? '');
65
+ if (override === null)
66
+ return null;
67
+ if (override.length > 0)
68
+ targetTypeName = override;
69
+ }
70
+ let selectedName = defaultName;
71
+ let explicitName = false;
72
+ if (nameArgument.present) {
73
+ const parsedName = staticSingleString(nameArgument.value);
74
+ if (parsedName === null)
75
+ return null;
76
+ if (parsedName.length > 0) {
77
+ selectedName = parsedName;
78
+ explicitName = true;
79
+ }
80
+ }
81
+ return {
82
+ targetTypeName,
83
+ cardinality: 'single',
84
+ namedSelection: {
85
+ name: selectedName,
86
+ reason: `${explicitName ? 'resource name' : 'default resource name'} "${selectedName}"`,
87
+ ...(!explicitName && !rawDeclaredType.includes('<') ? { fallbackToType: true } : {}),
88
+ },
89
+ reason: `Spring DI: @Resource ${location}: ${targetTypeName}`,
90
+ };
91
+ }
@@ -24,7 +24,11 @@ export const csharpNamespaceStrategy = (rawImportPath, _filePath, ctx) => {
24
24
  }
25
25
  return null;
26
26
  }
27
- const resolvedFiles = resolveCSharpImportInternal(rawImportPath, csharpConfigs, ctx.normalizedFileList, ctx.allFileList, ctx.index, evidence);
27
+ const resolvedFiles = resolveCSharpImportInternal(rawImportPath, csharpConfigs,
28
+ // The Set, not `ctx.normalizedFileList`/`ctx.allFileList`: the resolver
29
+ // derives both from it through the same per-pass memo the ctx's own arrays
30
+ // come from, so this is the identical pair by a shorter route.
31
+ ctx.allFilePaths, ctx.index, evidence);
28
32
  if (resolvedFiles.length > 1) {
29
33
  const dirSuffix = resolveCSharpNamespaceDir(rawImportPath, csharpConfigs);
30
34
  if (dirSuffix) {
@@ -31,6 +31,19 @@ import { SupportedLanguages } from '../../../../_shared/index.js';
31
31
  * stable reference and the index is built once — not once per import. A
32
32
  * fresh run produces a fresh array → a fresh index, so cross-run staleness
33
33
  * is impossible.
34
+ *
35
+ * DELIBERATELY NOT ON `import-resolvers/per-file-set.ts` (#2909 sweep): this is
36
+ * a TWO-input memo keyed on ONE of them. The index is a function of both
37
+ * `ctx` (`allFileList` + the index-aligned `normalizedFileList`) and `targets`,
38
+ * but the key is only `ctx.allFileList`, and `perFileSet`'s `build: (key) => T`
39
+ * hands the builder nothing but the key. It is sound here only because of an
40
+ * invariant OUTSIDE the memo — `targets` is `ctx.configs.swiftPackageConfig
41
+ * .targets`, so it shares `ctx`'s lifetime and cannot vary while
42
+ * `ctx.allFileList` is fixed — and `perFileSet` has no way to express "and this
43
+ * other input is pinned by the same lifetime". Re-keying on `ctx` to make
44
+ * `targets` derivable from the key would change what the cache is keyed on and
45
+ * force an unreachable null-config arm into the builder, so it is a behaviour
46
+ * change rather than a consolidation. Leave it hand-rolled.
34
47
  */
35
48
  const SWIFT_TARGET_INDEX_CACHE = new WeakMap();
36
49
  function getSwiftTargetIndex(ctx, targets) {
@@ -13,8 +13,16 @@ import type { CSharpProjectConfig, CSharpNamespaceEvidence } from '../language-c
13
13
  * The final unanchored suffix fallback is gated on `evidence` so BCL usings
14
14
  * (e.g. `System.Threading.Tasks`) can't match a coincidentally-named local
15
15
  * file (#1881). When `evidence` is omitted the fallback stays permissive.
16
+ *
17
+ * Takes the file SET, not the two materialized lists it used to take: both are
18
+ * derived here from the per-pass `getWorkspaceFileIndex` memo, which is where
19
+ * every caller already got them. That leaves one key shape for the indexes
20
+ * below and makes the `normalized`/`all` pairing structural rather than a
21
+ * contract the caller has to honour. `index` stays a parameter — the parity
22
+ * harness drives this resolver with and without one, and the no-index legs are
23
+ * a tested dimension, not a degenerate case.
16
24
  */
17
- export declare function resolveCSharpImportInternal(importPath: string, csharpConfigs: CSharpProjectConfig[], normalizedFileList: string[], allFileList: string[], index?: SuffixIndex, evidence?: CSharpNamespaceEvidence): string[];
25
+ export declare function resolveCSharpImportInternal(importPath: string, csharpConfigs: CSharpProjectConfig[], allFilePaths: ReadonlySet<string>, index?: SuffixIndex, evidence?: CSharpNamespaceEvidence): string[];
18
26
  /**
19
27
  * Compute the directory suffix for a C# namespace import (for PackageMap).
20
28
  * Returns a suffix like "/ProjectDir/Models/" or null if no config matches.
@@ -4,8 +4,171 @@
4
4
  * Strategy lives in configs/csharp.ts.
5
5
  * This file contains shared helpers for namespace-based resolution.
6
6
  */
7
+ import { perFileSet } from './per-file-set.js';
8
+ import { getWorkspaceFileIndex } from './workspace-file-index.js';
7
9
  import { suffixResolve } from './utils.js';
8
10
  import { csharpSuffixFallbackAllowed } from '../csharp-namespace-gate.js';
11
+ /**
12
+ * Memoized on the file SET's identity, the same key every other per-file-set
13
+ * index in this pipeline uses: the orchestrator builds one Set per pass and
14
+ * threads it through every import, so this build runs once.
15
+ *
16
+ * It used to key on the `normalizedFileList` ARRAY, which was a second key
17
+ * shape and — more to the point — one no guard could instrument. Copying an
18
+ * array mints a fresh `WeakMap` key while traversing the SET zero extra times,
19
+ * so a `[...normalized]` copy at the adapter boundary rebuilt this index once
20
+ * per `using` while every scan-counting guard stayed green and only the timing
21
+ * bench noticed (#2911 review). Taking the array from
22
+ * `getWorkspaceFileIndex(allFilePaths)` inside the builder retires that shape:
23
+ * the only way to defeat the memo now is to copy the Set, which is exactly what
24
+ * `CountingSet` counts.
25
+ *
26
+ * It also retires a precondition. The cached positions index `normalized` while
27
+ * the emitted value is read from `all`; both now come from the same
28
+ * `getWorkspaceFileIndex` object, so the caller can no longer pair a position
29
+ * list against a differently-ordered array.
30
+ */
31
+ const getCsharpNamespaceDirIndex = perFileSet((allFilePaths) => {
32
+ const { normalized: normalizedFileList } = getWorkspaceFileIndex(allFilePaths);
33
+ const dirsByLastSegment = new Map();
34
+ const positionsByDir = new Map();
35
+ const singleSegmentDirs = [];
36
+ for (let i = 0; i < normalizedFileList.length; i++) {
37
+ const normalized = normalizedFileList[i];
38
+ if (!normalized.endsWith('.cs'))
39
+ continue;
40
+ const lastSlash = normalized.lastIndexOf('/');
41
+ // A file with no directory can never match: the needle always ends with
42
+ // '/', so `indexOf` on a slash-free path is always -1.
43
+ if (lastSlash < 0)
44
+ continue;
45
+ const dir = normalized.slice(0, lastSlash);
46
+ let positions = positionsByDir.get(dir);
47
+ if (positions === undefined) {
48
+ positions = [];
49
+ positionsByDir.set(dir, positions);
50
+ const lastSegment = dir.slice(dir.lastIndexOf('/') + 1);
51
+ if (lastSegment === dir)
52
+ singleSegmentDirs.push(dir);
53
+ let dirs = dirsByLastSegment.get(lastSegment);
54
+ if (dirs === undefined) {
55
+ dirs = [];
56
+ dirsByLastSegment.set(lastSegment, dirs);
57
+ }
58
+ dirs.push(dir);
59
+ }
60
+ positions.push(i);
61
+ }
62
+ return { dirsByLastSegment, positionsByDir, singleSegmentDirs };
63
+ });
64
+ /**
65
+ * Every directory that could satisfy `dirPrefix`, as a superset — the exact
66
+ * test runs in `matchingDirPositions`.
67
+ *
68
+ * When `dirPrefix` contains a '/', its own slash forces a segment boundary in
69
+ * any matching directory: `H` ending with `…/<lastSeg>/` means `D` ends with
70
+ * `/<lastSeg>`, so `D`'s last segment IS `lastSeg` and the exact bucket is
71
+ * complete. Without a '/', `D`'s last segment only has to END with `dirPrefix`
72
+ * (`SubModels` for `Models`), which no single bucket holds, so the last-segment
73
+ * KEYS are swept. That is the one term here that is not O(matches), and it is
74
+ * O(distinct last segments), not O(directories): C# repos reuse `Models`,
75
+ * `Services`, `Controllers` under every project, so the sweep collapses on the
76
+ * layouts that actually occur. Measured at 200 000 `.cs` files, 25 000
77
+ * directories: 456 µs per import when every directory name is unique, 7.9 µs
78
+ * on a `SrcN/Models` layout. Closing the unique-name case needs a character-
79
+ * suffix map over the segments, which is the O(files × depth) memory shape
80
+ * `package-dir-index.ts` cites #2649 to avoid — a design change, not a tune.
81
+ *
82
+ * An empty `dirPrefix` would sweep every key and keep every directory, so it is
83
+ * answered from `singleSegmentDirs` instead: its needle is a bare '/', which
84
+ * only a slash-free directory can carry as its LAST slash.
85
+ */
86
+ function* candidateDirs(index, dirPrefix) {
87
+ if (dirPrefix === '') {
88
+ yield* index.singleSegmentDirs;
89
+ return;
90
+ }
91
+ const lastSlash = dirPrefix.lastIndexOf('/');
92
+ if (lastSlash >= 0) {
93
+ const bucket = index.dirsByLastSegment.get(dirPrefix.slice(lastSlash + 1));
94
+ if (bucket !== undefined)
95
+ yield* bucket;
96
+ return;
97
+ }
98
+ for (const [lastSegment, dirs] of index.dirsByLastSegment) {
99
+ if (!lastSegment.endsWith(dirPrefix))
100
+ continue;
101
+ yield* dirs;
102
+ }
103
+ }
104
+ /** Positions of the `.cs` files in each directory matching `dirPrefix`. */
105
+ function* matchingDirPositions(index, dirPrefix) {
106
+ for (const dir of candidateDirs(index, dirPrefix)) {
107
+ // `(dir + '/').endsWith(dirPrefix + '/')` IS `dir.endsWith(dirPrefix)` — the
108
+ // appended '/' only ever matches itself, so it decides nothing and BOTH
109
+ // concatenations go. Exhaustively verified, not assumed: 0 disagreements
110
+ // over every ordered pair of strings up to length 5 over `{a, b, '/'}`
111
+ // including '' (132 496 pairs). Measured 64.9 ns -> 18.4 ns per candidate
112
+ // (Node 22.18); the `dir + '/'` was paid once per candidate, on every sweep
113
+ // of the last-segment keys.
114
+ //
115
+ // Still deliberately UNANCHORED (no leading '/'), so `src/SubModels` keeps
116
+ // answering `Models` — see the derivation above. That is also exactly why
117
+ // the reduction empties this predicate out while `package-dir-index.ts`
118
+ // keeps its concatenations: one decorating term per side here, two there,
119
+ // and only the trailing one cancels.
120
+ //
121
+ // `endsWith` subsumes the length guard the `indexOf` form needed: a shorter
122
+ // `dir` is simply false, where `indexOf` returned -1 and
123
+ // `haystack.length - needle.length` could also be -1 and report a bogus
124
+ // match.
125
+ //
126
+ // Do NOT "finish the job" with the two-argument overload. `endsWith(search,
127
+ // endPosition)` measured 8.8-11.8 ns against 9.5-14.9 ns for the
128
+ // one-argument form across seven call-site shapes (Node 22.18) — a wash —
129
+ // and `dir.endsWith(dirPrefix, dir.length)` is character-for-character this
130
+ // same test anyway. There is nothing left here to win.
131
+ if (!dir.endsWith(dirPrefix))
132
+ continue;
133
+ const positions = index.positionsByDir.get(dir);
134
+ if (positions !== undefined)
135
+ yield positions;
136
+ }
137
+ }
138
+ /**
139
+ * Append every `.cs` file directly inside a directory matching `dirPrefix`, in
140
+ * `normalizedFileList` order — the order the single-pass scan emitted, which
141
+ * this function's callers return as the whole edge target list.
142
+ */
143
+ function pushFilesDirectlyInNamespaceDir(index, dirPrefix, allFileList, results) {
144
+ // One matching directory is the overwhelmingly common case, and its positions
145
+ // are already ascending, so the first bucket is held by reference. A second
146
+ // one promotes it to a real accumulator that is appended to from then on —
147
+ // never re-spread per directory, which would cost O(files × dirs²) copies in
148
+ // a monorepo carrying the same namespace directory under many projects.
149
+ let first = null;
150
+ let merged = null;
151
+ for (const positions of matchingDirPositions(index, dirPrefix)) {
152
+ if (first === null) {
153
+ first = positions;
154
+ continue;
155
+ }
156
+ if (merged === null)
157
+ merged = [...first];
158
+ for (const position of positions)
159
+ merged.push(position);
160
+ }
161
+ if (first === null)
162
+ return;
163
+ if (merged === null) {
164
+ for (const position of first)
165
+ results.push(allFileList[position]);
166
+ return;
167
+ }
168
+ merged.sort((a, b) => a - b);
169
+ for (const position of merged)
170
+ results.push(allFileList[position]);
171
+ }
9
172
  /**
10
173
  * Resolve a C# using-directive import path to matching .cs files (low-level helper).
11
174
  * Tries single-file match first, then directory match for namespace imports.
@@ -13,8 +176,17 @@ import { csharpSuffixFallbackAllowed } from '../csharp-namespace-gate.js';
13
176
  * The final unanchored suffix fallback is gated on `evidence` so BCL usings
14
177
  * (e.g. `System.Threading.Tasks`) can't match a coincidentally-named local
15
178
  * file (#1881). When `evidence` is omitted the fallback stays permissive.
179
+ *
180
+ * Takes the file SET, not the two materialized lists it used to take: both are
181
+ * derived here from the per-pass `getWorkspaceFileIndex` memo, which is where
182
+ * every caller already got them. That leaves one key shape for the indexes
183
+ * below and makes the `normalized`/`all` pairing structural rather than a
184
+ * contract the caller has to honour. `index` stays a parameter — the parity
185
+ * harness drives this resolver with and without one, and the no-index legs are
186
+ * a tested dimension, not a degenerate case.
16
187
  */
17
- export function resolveCSharpImportInternal(importPath, csharpConfigs, normalizedFileList, allFileList, index, evidence) {
188
+ export function resolveCSharpImportInternal(importPath, csharpConfigs, allFilePaths, index, evidence) {
189
+ const { normalized: normalizedFileList, all: allFileList } = getWorkspaceFileIndex(allFilePaths);
18
190
  const namespacePath = importPath.replace(/\./g, '/');
19
191
  const results = [];
20
192
  for (const config of csharpConfigs) {
@@ -51,38 +223,73 @@ export function resolveCSharpImportInternal(importPath, csharpConfigs, normalize
51
223
  // 2. Try as directory: all .cs files directly inside (namespace import)
52
224
  if (index) {
53
225
  const dirFiles = index.getFilesInDir(dirPrefix, '.cs');
226
+ // `getFilesInDir` already answers "directly inside a directory `D` where
227
+ // `D === dirPrefix || D.endsWith('/' + dirPrefix)`" — its keys ARE
228
+ // segment-aligned directory suffixes. So for a non-empty `dirPrefix` the
229
+ // direct-child re-check this loop used to run cannot reject anything, and
230
+ // measurement agrees: zero rejections over 12 008 (prefix, candidate)
231
+ // pairs. It rejected before #2881 only because it asked `indexOf` for the
232
+ // FIRST `/<dirPrefix>/`, which is the rule that issue removed.
233
+ //
234
+ // That widening does not stay inside step 2's own bucket. This step
235
+ // returns as soon as it pushes anything, so a query it used to answer with
236
+ // nothing now also SUPPRESSES step 3, whose unanchored match set is a
237
+ // strict superset: over `SubModels/Models/F1.cs` + `SubModels/F3.cs`,
238
+ // `using App.Models` answered both through step 3 and now answers only the
239
+ // first through step 2. The new answer is the more precise one — a
240
+ // directory literally named `Models` beating a character-suffix hit on
241
+ // `SubModels` — and it is what this module's step-2-before-step-3 layering
242
+ // asks for, so it is kept rather than worked around. Pinned absolutely by
243
+ // the parity test, which is differentially blind to it (its frozen legacy
244
+ // copy moved in lockstep with this line).
245
+ //
246
+ // The empty prefix is the exception and keeps a real filter. `getDirMap`
247
+ // keys a file under every suffix of its DIRECTORY, so it emits the EMPTY
248
+ // one exactly when that directory's last component is empty: a leading '/'
249
+ // on a root-level file, or a doubled slash immediately before the file
250
+ // name. Probed against `getDirMap`'s own key emission:
251
+ //
252
+ // src/X.cs -> ['src:.cs'] no empty key
253
+ // /X.cs -> [':.cs'] empty key
254
+ // a//X.cs -> [':.cs', 'a/:.cs'] empty key
255
+ // /a/b/X.cs -> ['b:.cs', 'a/b:.cs', '/a/b:.cs'] no empty key
256
+ //
257
+ // So the `''` bucket is not "one directory deep" on its own — `a//X.cs`
258
+ // sits in it two components down — while step 3 answers that same query
259
+ // from `singleSegmentDirs`, which is. Filtering on `D` holding no slash is
260
+ // what rejects `a//X.cs` and keeps steps 2 and 3 in agreement.
54
261
  for (const f of dirFiles) {
55
- const normalized = f.replace(/\\/g, '/');
56
- // Check it's a direct child by finding the dirPrefix and ensuring no deeper slashes
57
- const prefixIdx = normalized.indexOf(dirPrefix + '/');
58
- if (prefixIdx < 0)
59
- continue;
60
- const afterDir = normalized.substring(prefixIdx + dirPrefix.length + 1);
61
- if (!afterDir.includes('/')) {
62
- results.push(f);
63
- }
64
- }
65
- if (results.length > 0)
66
- return results;
67
- }
68
- // 3. Linear scan fallback for directory matching
69
- if (results.length === 0) {
70
- const dirTrail = dirPrefix + '/';
71
- for (let i = 0; i < normalizedFileList.length; i++) {
72
- const normalized = normalizedFileList[i];
73
- if (!normalized.endsWith('.cs'))
74
- continue;
75
- const prefixIdx = normalized.indexOf(dirTrail);
76
- if (prefixIdx < 0)
77
- continue;
78
- const afterDir = normalized.substring(prefixIdx + dirTrail.length);
79
- if (!afterDir.includes('/')) {
80
- results.push(allFileList[i]);
262
+ if (dirPrefix === '') {
263
+ const normalized = f.replace(/\\/g, '/');
264
+ const lastSlash = normalized.lastIndexOf('/');
265
+ if (lastSlash < 0 || normalized.slice(0, lastSlash).includes('/'))
266
+ continue;
81
267
  }
268
+ results.push(f);
82
269
  }
83
270
  if (results.length > 0)
84
271
  return results;
85
272
  }
273
+ // 3. Directory matching, UNANCHORED.
274
+ //
275
+ // Not redundant with step 2, and not skippable when `index` is present:
276
+ // `getFilesInDir` is keyed on SEGMENT suffixes of a directory, while this
277
+ // leg's predicate is an unanchored ends-with one, so it additionally
278
+ // answers `Models` with `src/SubModels/` and `src/Models` with
279
+ // `vendor/mysrc/Models/`. It is also the only leg that answers an empty
280
+ // `dirPrefix` — the `relative = ''` branch above (the import IS the root
281
+ // namespace) with no `projectDir` to stand in for it — because
282
+ // `buildSuffixIndex` emits an empty directory suffix only for a path that
283
+ // BEGINS with '/', so over repo-relative paths `getFilesInDir('', '.cs')`
284
+ // is always empty. See `CsharpNamespaceDirIndex` above for the index that
285
+ // replaced the per-import Θ(files) scan this used to be (#2902).
286
+ //
287
+ // `results` is provably empty here: step 2 returns as soon as it pushes
288
+ // anything, and so does this leg, so every iteration of the config loop
289
+ // starts empty.
290
+ pushFilesDirectlyInNamespaceDir(getCsharpNamespaceDirIndex(allFilePaths), dirPrefix, allFileList, results);
291
+ if (results.length > 0)
292
+ return results;
86
293
  }
87
294
  // Fallback: suffix matching without namespace stripping (single file).
88
295
  // Gated on in-repo declared-namespace evidence (#1881).
@@ -3,6 +3,16 @@
3
3
  *
4
4
  * Strategy lives in configs/go.ts.
5
5
  * This file contains the shared helpers used by the strategy.
6
+ *
7
+ * **Reachability, as of #2929:** nothing in production calls either export
8
+ * today. The only path in is `configs/go.ts` → `createImportResolver` →
9
+ * the `importResolver` field on Go's `LanguageProvider`, and that field is
10
+ * read at exactly two lines — `import-target-adapter.ts:74-75` — whose two
11
+ * exports (`buildImportTargetWorkspace`,
12
+ * `resolveImportTargetAcrossLanguages`) have no importer anywhere but their
13
+ * own unit test. So this is a live-looking but currently unwired leg; the
14
+ * tests in `test/unit/import-resolvers/go-package-resolve.test.ts` are the
15
+ * only thing watching it.
6
16
  */
7
17
  import type { GoModuleConfig } from '../language-config.js';
8
18
  /**
@@ -14,4 +24,4 @@ export declare function resolveGoPackageDir(importPath: string, goModule: GoModu
14
24
  * Resolve a Go internal package import to all .go files in the package directory.
15
25
  * Returns an array of file paths.
16
26
  */
17
- export declare function resolveGoPackage(importPath: string, goModule: GoModuleConfig, normalizedFileList: string[], allFileList: string[]): string[];
27
+ export declare function resolveGoPackage(importPath: string, goModule: GoModuleConfig, normalizedFileList: readonly string[], allFileList: readonly string[]): string[];