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
@@ -2,7 +2,9 @@ import type { KnowledgeGraph } from '../core/graph/types.js';
2
2
  import { CommunityDetectionResult } from '../core/ingestion/community-processor.js';
3
3
  import { ProcessDetectionResult } from '../core/ingestion/process-processor.js';
4
4
  import type { ResolutionOutcome } from '../core/ingestion/scope-resolution/resolution-outcome.js';
5
+ import type { UndecidedSatisfaction } from '../core/ingestion/scope-resolution/contract/scope-resolver.js';
5
6
  import type { PdgEmitManifest } from '../core/lbug/pdg-emit-sink.js';
7
+ import type { GraphEmitManifest } from '../core/lbug/graph-emit-sink.js';
6
8
  export interface PipelineResult {
7
9
  graph: KnowledgeGraph;
8
10
  /** Absolute path to the repo root — used for lazy file reads during LadybugDB loading */
@@ -17,6 +19,16 @@ export interface PipelineResult {
17
19
  * produced; graph edge semantics are unchanged.
18
20
  */
19
21
  resolutionOutcomes: readonly ResolutionOutcome[];
22
+ /**
23
+ * Interfaces whose structural-satisfaction check could not be completed
24
+ * (#2873). Empty for languages with no structural detection.
25
+ *
26
+ * ABSENT means scope resolution never ran, which is not the same claim as an
27
+ * empty array — that one says the analyzer looked and decided everything.
28
+ * The writer needs the difference: it carries a prior record forward across a
29
+ * run that could not measure, and CLEARS it on a run that measured clean.
30
+ */
31
+ undecidedSatisfaction?: readonly UndecidedSatisfaction[];
20
32
  /**
21
33
  * True if a worker pool was actually constructed for this run. The worker
22
34
  * pool is the sole parse path (sequential parsing was removed). False means
@@ -34,4 +46,29 @@ export interface PipelineResult {
34
46
  * layer (if any) is resident in `graph` and persists via the whole-graph emit.
35
47
  */
36
48
  pdgEmitManifest?: PdgEmitManifest;
49
+ /**
50
+ * Streamed structural-emit COPY manifest (#2680). Present only when
51
+ * `streamGraphEmit` was active (full rebuild + enabled): the per-pair CSVs of
52
+ * relationships that never entered the in-memory graph, for `loadGraphToLbug`
53
+ * to COPY ALONGSIDE the whole-graph CSVs (their pair keys overlap, so they are
54
+ * additional COPY jobs, not map entries).
55
+ */
56
+ graphEmitManifest?: GraphEmitManifest;
57
+ /**
58
+ * Property-inference facts from scope resolution (R3-1). Present so a caller
59
+ * — a test, the CLI, or a future MCP surface — can tell WHY a field has no
60
+ * ACCESSES rows: genuinely unread, ambiguous between candidates, or anchored
61
+ * only in a language the per-language inference may not cross. Those are
62
+ * three different situations with three different remedies, and without this
63
+ * they produce byte-identical empty results.
64
+ */
65
+ propertyInference?: {
66
+ readonly ambiguous: number;
67
+ readonly ambiguousNames: readonly string[];
68
+ readonly crossLanguage: number;
69
+ readonly crossLanguageNames: readonly {
70
+ readonly name: string;
71
+ readonly languages: string[];
72
+ }[];
73
+ };
37
74
  }
@@ -503,7 +503,7 @@ function buildStaleIndexHint(gitNexusDir, cwd) {
503
503
 
504
504
  if (currentHead === lastCommit) return '';
505
505
 
506
- const analyzeCmd = formatAnalyzeCommand({ embeddings: hadEmbeddings });
506
+ const analyzeCmd = formatAnalyzeCommand({ embeddings: hadEmbeddings, indexOnly: true });
507
507
  return (
508
508
  `[GitNexus] index is stale (last indexed: ${lastCommit ? lastCommit.slice(0, 7) : 'never'}). ` +
509
509
  `Run \`${analyzeCmd}\` to refresh the knowledge graph.`
@@ -523,7 +523,7 @@ function handlePostToolUse(input) {
523
523
  // If HEAD matches last indexed commit, no reindex needed
524
524
  if (currentHead && currentHead === lastCommit) return;
525
525
 
526
- const analyzeCmd = formatAnalyzeCommand({ embeddings: hadEmbeddings });
526
+ const analyzeCmd = formatAnalyzeCommand({ embeddings: hadEmbeddings, indexOnly: true });
527
527
  sendHookResponse(
528
528
  'PostToolUse',
529
529
  `GitNexus index is stale (last indexed: ${lastCommit ? lastCommit.slice(0, 7) : 'never'}). ` +
@@ -5,9 +5,19 @@
5
5
  * 1. Global `gitnexus` on PATH (best — no install step)
6
6
  * 2. npm 11+ with pnpm on PATH → `pnpm --allow-build=… dlx` (avoids the npx
7
7
  * arborist crash *and* pnpm 10+ ignored-build-script failures, #1939)
8
- * 3. npm < 11 with npm on PATH → `npx` (works; simpler than pnpm dlx)
9
- * 4. pnpm-only → `pnpm --allow-build=… dlx`
10
- * 5. Last resort → `npx` (warned on npm 11+ from analyze.ts)
8
+ * 3. npm 11+ without pnpm but with bunx → `bunx` (dodges the same crash)
9
+ * 4. npm < 11 with npm on PATH → `npx` (works; simpler than pnpm dlx)
10
+ * 5. pnpm-only → `pnpm --allow-build=… dlx`
11
+ * 6. bun-only → `bunx`
12
+ * 7. Last resort → `npx` (warned on npm 11+ from analyze.ts)
13
+ *
14
+ * The bun branches exist because a Node toolchain is no longer implied: on a
15
+ * bun-only machine npm, npx and pnpm are all absent, so every rung above
16
+ * resolved to `npx` and the emitted command could not run at all. `bunx` is
17
+ * bun's install-free one-shot runner and needs no allow-build equivalent — bun
18
+ * skips lifecycle scripts unconditionally for a `bunx` fetch, which the native
19
+ * loader recovers from directly (see core/lbug/native-check.ts). Both bun rungs
20
+ * gate on `bunx` actually running, not merely existing on PATH — see `hasBun`.
11
21
  *
12
22
  * The `--allow-build` flags MUST precede the `dlx` token. pnpm < 10.14 keeps
13
23
  * `dlx` in its argv escape list, so flags placed *after* `dlx` are parsed as
@@ -42,7 +52,12 @@ const PNPM_ALLOW_BUILD_EMBEDDINGS = ['onnxruntime-node'];
42
52
  // hook first runs `git rev-parse --git-common-dir` (~2s) and `git rev-parse HEAD`
43
53
  // (~3s); the pnpm path then adds up to two 1s `--version` probes (npm, pnpm), so
44
54
  // the worst case is ~7s — within budget. A healthy `--version` returns in well
45
- // under a second, so the realistic cost is far lower.
55
+ // under a second, so the realistic cost is far lower. The bun rungs add at most
56
+ // one more 1s probe (`bunx --version`), reached only when pnpm is unusable and
57
+ // npm is 11+ or unreadable, for a ~8s theoretical cap. That cap needs an absent
58
+ // pnpm to burn its full second, which only Windows can do (`shell: true` spawns
59
+ // cmd.exe); on POSIX an absent pnpm ENOENTs in ~1ms, so the real ceiling is
60
+ // unmoved.
46
61
  const PROBE_TIMEOUT_MS = 1000;
47
62
 
48
63
  /**
@@ -104,9 +119,17 @@ function resolveOnPath(
104
119
  return weakHit;
105
120
  }
106
121
 
107
- // One spawn of `<command> --version` → { major, minor } (each null when
122
+ // One spawn of `<command> --version` → { ran, major, minor } (versions null when
108
123
  // unreadable). Version injection happens at the resolver seam (getNpmMajorVersion
109
124
  // / formatPnpmAllowBuildArgs), so this stays a pure real-process probe.
125
+ //
126
+ // `ran` is liveness, kept separate from the version because a PATH hit proves a
127
+ // file exists, not that it works, and the two answers differ: a banner-printing
128
+ // or oddly-versioned tool is alive with `major: null`, while a stale shim left by
129
+ // a partial uninstall is neither. Only the bun rung consults `ran` today (see
130
+ // hasBun) — it is the one runner with no version to read, so a dedicated probe is
131
+ // its only liveness signal; pnpm gets the same evidence for free from the version
132
+ // spawn it must make anyway, and deliberately forgives an unreadable one (#1939).
110
133
  function probeVersion(command) {
111
134
  try {
112
135
  const output = execFileSync(command, ['--version'], {
@@ -131,11 +154,13 @@ function probeVersion(command) {
131
154
  .find((l) => /^v?\d+\.\d+/.test(l));
132
155
  const match = versionLine ? versionLine.match(/^v?(\d+)\.(\d+)/) : null;
133
156
  return {
157
+ ran: true,
134
158
  major: match ? Number(match[1]) : null,
135
159
  minor: match ? Number(match[2]) : null,
136
160
  };
137
161
  } catch {
138
- return { major: null, minor: null };
162
+ // Spawn failure, non-zero exit, or the timeout — the command did not run.
163
+ return { ran: false, major: null, minor: null };
139
164
  }
140
165
  }
141
166
 
@@ -176,14 +201,14 @@ function formatDocumentationDlxCommand(gitnexusArgs, options = {}) {
176
201
  }
177
202
 
178
203
  /**
179
- * Resolve `gitnexus` | `pnpm` | `npx`. `GITNEXUS_INVOCATION` forces a mode
180
- * (test/escape hatch). `probe` is injectable so the preference order can be
204
+ * Resolve `gitnexus` | `pnpm` | `bun` | `npx`. `GITNEXUS_INVOCATION` forces a
205
+ * mode (test/escape hatch). `probe` is injectable so the preference order can be
181
206
  * unit-tested without spawning; it defaults to the real PATH probe. `deps` can
182
- * inject `{ npmMajor, pnpmMajor }` for tests.
207
+ * inject `{ npmMajor, pnpmMajor, bunPresent, bunRuns }` for tests.
183
208
  */
184
209
  function resolveInvocationMode(probe = resolveOnPath, deps = {}) {
185
210
  const forced = process.env.GITNEXUS_INVOCATION?.trim().toLowerCase();
186
- if (forced === 'gitnexus' || forced === 'pnpm' || forced === 'npx') {
211
+ if (forced === 'gitnexus' || forced === 'pnpm' || forced === 'npx' || forced === 'bun') {
187
212
  return forced;
188
213
  }
189
214
  if (probe('gitnexus', true)) return 'gitnexus';
@@ -202,12 +227,33 @@ function resolveInvocationMode(probe = resolveOnPath, deps = {}) {
202
227
  ? deps.pnpmMajor !== null
203
228
  : Boolean(probe('pnpm'));
204
229
 
230
+ // bun usability is resolved lazily: only the two branches below can select it,
231
+ // so a machine with pnpm, or with npm < 11, never pays the PATH scan or the
232
+ // spawn. `bunx` (not `bun`) is probed because `bunx` is what the resolved
233
+ // command actually runs. Two gates, `&&`-ordered cheapest first: a spawn-free
234
+ // PATH scan, then liveness — a PATH hit alone would route a present-but-broken
235
+ // shim to a command that can only fail at execution time.
236
+ let bunCache;
237
+ const hasBun = () => {
238
+ if (bunCache === undefined) {
239
+ const present = 'bunPresent' in deps ? Boolean(deps.bunPresent) : Boolean(probe('bunx'));
240
+ bunCache = present && ('bunRuns' in deps ? Boolean(deps.bunRuns) : probeVersion('bunx').ran);
241
+ }
242
+ return bunCache;
243
+ };
244
+
205
245
  // npm 11+ npx install crash (#1939) — prefer pnpm dlx when available.
206
246
  if (hasPnpm && npmMajor !== null && npmMajor >= 11) return 'pnpm';
247
+ // Same crash, no pnpm to fall back on: bunx is install-free and unaffected.
248
+ if (npmMajor !== null && npmMajor >= 11 && hasBun()) return 'bun';
207
249
  // npm 10 and earlier: npx works; prefer it over pnpm dlx when npm is present.
208
250
  if (npmMajor !== null && npmMajor < 11) return 'npx';
209
251
  // npm absent or unreadable — use pnpm if present (with allow-build flags).
210
252
  if (hasPnpm) return 'pnpm';
253
+ // Neither npm nor pnpm — bunx is the only install-free runner left. Without
254
+ // this rung a bun-only machine fell through to `npx`, which is not installed
255
+ // there, so the emitted command failed with "npx: command not found".
256
+ if (hasBun()) return 'bun';
211
257
 
212
258
  return 'npx';
213
259
  }
@@ -218,8 +264,25 @@ function formatPnpmDlxCommand(gitnexusArgs, options = {}, deps = {}) {
218
264
  return `pnpm ${prefix}dlx ${NPX_REF} ${gitnexusArgs}`;
219
265
  }
220
266
 
267
+ /**
268
+ * bun's install-free one-shot runner. Deliberately flag-free: bun has no
269
+ * per-invocation `--allow-build` equivalent (`--trust` is a `bun add`/`bun
270
+ * install` flag that writes trustedDependencies into a project package.json,
271
+ * which a one-shot `bunx` has nowhere to put), so the skipped lifecycle copy is
272
+ * recovered by the native loader instead of by the invocation.
273
+ */
274
+ function formatBunxCommand(gitnexusArgs) {
275
+ return `bunx ${NPX_REF} ${gitnexusArgs}`;
276
+ }
277
+
221
278
  function formatAnalyzeCommand(options = {}, deps = {}) {
222
- const suffix = options.embeddings ? ' --embeddings' : '';
279
+ // `--index-only` is what a routine "your index is stale" nudge wants: it
280
+ // reindexes without rewriting AGENTS.md / CLAUDE.md / skills, so an agent
281
+ // following the nudge on every commit cannot churn the tracked agent guides
282
+ // (#2907). Callers that actually want the docs refreshed omit it.
283
+ const suffix = `${options.indexOnly ? ' --index-only' : ''}${
284
+ options.embeddings ? ' --embeddings' : ''
285
+ }`;
223
286
  // Keep the stale-index hook budget tight by querying each tool at most once.
224
287
  // The memoized `probe` is a spawn-free PATH scan (resolveOnPath) shared with
225
288
  // resolveInvocationMode, so `gitnexus` is scanned only once and no subprocess
@@ -238,7 +301,8 @@ function formatAnalyzeCommand(options = {}, deps = {}) {
238
301
  const forced = process.env.GITNEXUS_INVOCATION?.trim().toLowerCase();
239
302
  // pnpm is only consulted when no non-pnpm mode is already certain: forced
240
303
  // gitnexus/npx never use pnpm, and a present global gitnexus wins outright.
241
- const mightUsePnpm = forced === 'pnpm' || (forced !== 'gitnexus' && forced !== 'npx');
304
+ const mightUsePnpm =
305
+ forced === 'pnpm' || (forced !== 'gitnexus' && forced !== 'npx' && forced !== 'bun');
242
306
  if (mightUsePnpm && (forced === 'pnpm' || !probe('gitnexus', true))) {
243
307
  const { major, minor } = probeVersion('pnpm');
244
308
  // Carry presence separately from version: when the version probe fails
@@ -252,6 +316,7 @@ function formatAnalyzeCommand(options = {}, deps = {}) {
252
316
  const mode = resolveInvocationMode(probe, resolved);
253
317
  if (mode === 'gitnexus') return `gitnexus analyze${suffix}`;
254
318
  if (mode === 'pnpm') return `${formatPnpmDlxCommand(`analyze${suffix}`, options, resolved)}`;
319
+ if (mode === 'bun') return formatBunxCommand(`analyze${suffix}`);
255
320
  return `npx ${NPX_REF} analyze${suffix}`;
256
321
  }
257
322
 
@@ -268,6 +333,7 @@ function buildRunnerArgv(mode, gitnexusArgs, deps = {}) {
268
333
  (a) => a === '--embeddings' || a.startsWith('--embeddings='),
269
334
  );
270
335
  if (mode === 'gitnexus') return { program: 'gitnexus', args: [...gitnexusArgs] };
336
+ if (mode === 'bun') return { program: 'bunx', args: [NPX_REF, ...gitnexusArgs] };
271
337
  if (mode === 'pnpm') {
272
338
  return {
273
339
  program: 'pnpm',
@@ -279,6 +345,7 @@ function buildRunnerArgv(mode, gitnexusArgs, deps = {}) {
279
345
 
280
346
  module.exports = {
281
347
  formatAnalyzeCommand,
348
+ formatBunxCommand,
282
349
  formatDocumentationDlxCommand,
283
350
  formatPnpmAllowBuildArgs,
284
351
  formatPnpmDlxCommand,
@@ -291,7 +358,7 @@ module.exports = {
291
358
  };
292
359
 
293
360
  // Direct-exec entrypoint (#1945): `node run.cjs <gitnexus args…>` resolves the
294
- // best available runner (global `gitnexus` → `pnpm dlx` → `npx`) at call time and
361
+ // best available runner (global `gitnexus` → `pnpm dlx` → `bunx` → `npx`) at call time and
295
362
  // runs it, inheriting stdio and propagating the child's exit code. This lets the
296
363
  // committed skills and generated AGENTS.md/CLAUDE.md reference ONE stable,
297
364
  // CLI-neutral command without baking in a package-manager assumption. `gitnexus
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gitnexus",
3
- "version": "1.6.10-rc.21",
3
+ "version": "1.6.10-rc.211",
4
4
  "description": "Graph-powered code intelligence for AI agents. Index any codebase, query via MCP or CLI.",
5
5
  "author": "Abhigyan Patwari",
6
6
  "license": "PolyForm-Noncommercial-1.0.0",
@@ -52,10 +52,11 @@
52
52
  "postinstall": "node scripts/build-tree-sitter-grammars.cjs",
53
53
  "assert-publish-coverage": "node scripts/assert-publish-grammar-coverage.cjs",
54
54
  "prepare": "node scripts/build.js",
55
- "prepack": "node scripts/assert-publish-grammar-coverage.cjs && node scripts/build.js"
55
+ "prepack": "node scripts/assert-publish-grammar-coverage.cjs && node scripts/build.js",
56
+ "version": "node scripts/sync-plugin-manifests.mjs"
56
57
  },
57
58
  "dependencies": {
58
- "@ladybugdb/core": "^0.18.0",
59
+ "@ladybugdb/core": "^0.19.0",
59
60
  "@modelcontextprotocol/sdk": "^1.0.0",
60
61
  "@scarf/scarf": "^1.4.0",
61
62
  "busboy": "^1.6.0",
@@ -69,7 +70,7 @@
69
70
  "graphology-indices": "^0.17.0",
70
71
  "graphology-utils": "^2.3.0",
71
72
  "ignore": "^7.0.5",
72
- "js-yaml": "^4.1.1",
73
+ "js-yaml": "^5.0.0",
73
74
  "jsonc-parser": "^3.3.1",
74
75
  "mnemonist": "^0.40.3",
75
76
  "node-addon-api": "^8.0.0",
@@ -78,6 +79,7 @@
78
79
  "pandemonium": "^2.4.0",
79
80
  "pino": "^10.3.1",
80
81
  "pino-pretty": "^13.1.3",
82
+ "proxy-addr": "^2.0.7",
81
83
  "tree-sitter": "0.21.1",
82
84
  "tree-sitter-c-sharp": "0.23.1",
83
85
  "tree-sitter-cpp": "0.23.2",
@@ -95,18 +97,22 @@
95
97
  "@huggingface/transformers": "^4.1.0",
96
98
  "onnxruntime-node": "^1.24.0"
97
99
  },
100
+ "trustedDependencies": [
101
+ "@ladybugdb/core",
102
+ "gitnexus",
103
+ "tree-sitter"
104
+ ],
98
105
  "devDependencies": {
99
- "@babel/generator": "^7.29.7",
100
- "@babel/parser": "^7.29.7",
101
- "@babel/traverse": "^7.29.7",
102
- "@babel/types": "^7.29.7",
106
+ "@babel/generator": "^8.0.0",
107
+ "@babel/parser": "^8.0.0",
108
+ "@babel/traverse": "^8.0.0",
109
+ "@babel/types": "^8.0.0",
103
110
  "@types/busboy": "^1.5.4",
104
111
  "@types/cli-progress": "^3.11.6",
105
112
  "@types/cors": "^2.8.17",
106
113
  "@types/express": "^5.0.6",
107
- "@types/js-yaml": "^4.0.9",
108
- "@types/node": "^25.6.0",
109
- "@types/uuid": "^11.0.0",
114
+ "@types/node": "^26.0.0",
115
+ "@types/proxy-addr": "^2.0.3",
110
116
  "@vitest/coverage-v8": "^4.0.18",
111
117
  "gitnexus-shared": "file:../gitnexus-shared",
112
118
  "tsx": "^4.0.0",
@@ -114,11 +120,13 @@
114
120
  "vitest": "^4.0.18"
115
121
  },
116
122
  "overrides": {
123
+ "adm-zip": ">=0.6.0",
124
+ "sharp": ">=0.35.0",
117
125
  "@huggingface/transformers": {
118
126
  "onnxruntime-node": "$onnxruntime-node"
119
127
  }
120
128
  },
121
129
  "engines": {
122
- "node": ">=22.0.0"
130
+ "node": "^22.18.0 || >=24.11.0"
123
131
  }
124
132
  }
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Weight-aware partitioning for the cross-platform test matrix.
3
+ *
4
+ * WHY THIS EXISTS. `run-cross-platform.ts` used to hand vitest the whole file
5
+ * list plus `--shard=i/n`, and vitest partitions by file COUNT. Runtime on this
6
+ * suite is wildly uneven — measured on the Windows runner, `cli-e2e` is 361 s
7
+ * and `worker-pool` 221 s, while most files are under a second — so a
8
+ * count-split routinely put several of the heaviest suites on one shard. That
9
+ * is #2449, and this file's sibling header has documented the symptom ("the
10
+ * heaviest spawn suites can cluster on one shard") since the watchdog was first
11
+ * raised from 15 to 20 minutes.
12
+ *
13
+ * It went from a latent hazard to a red matrix when three CHEAP files (the
14
+ * `dist/` module-load closure guards: 448 ms, 53 ms, sub-second) were added to
15
+ * `SPAWN_CLI`. They cost nothing to run, but a count-split re-partitions on
16
+ * every insertion, and the reshuffle happened to land `cli-e2e` + `cli-limit-e2e`
17
+ * + `analyze-heap-oom-e2e` together on shard 1/3 — 32 files against 26 and 29 —
18
+ * which blew the 20-minute budget with four files still queued. Nothing about
19
+ * the added files caused it; they were simply the perturbation.
20
+ *
21
+ * So the split is done HERE, by weight, and only the chosen shard's files are
22
+ * handed to vitest. Two properties follow, and both are pinned in
23
+ * `test/unit/cross-platform-shard.test.ts`:
24
+ *
25
+ * - the heaviest suites are spread across shards by construction, so the
26
+ * busiest shard tracks the ideal rather than the luck of the sort order;
27
+ * - adding or removing a CHEAP file cannot move a heavy one, so registering a
28
+ * new platform-sensitive test is no longer a CI-stability gamble. That is the
29
+ * property whose absence caused this.
30
+ */
31
+
32
+ /**
33
+ * Measured wall-clock on the WINDOWS runner (the slowest platform, so it is the
34
+ * one that decides the budget), in seconds, from the last fully-green matrix run
35
+ * plus the timed files of the run that failed.
36
+ *
37
+ * Only files heavy enough to matter are listed; everything else is carried by
38
+ * {@link PER_FILE_OVERHEAD_SEC} alone. These are load-balancing hints, NOT
39
+ * assertions — no
40
+ * test asserts a runtime, and drift only makes the split slightly less even, so
41
+ * a stale entry is harmless and refreshing them is optional. Deliberately not
42
+ * auto-generated: a committed table is reviewable and works offline, and the
43
+ * alternative (timing files at CI runtime to decide the split) would make the
44
+ * partition depend on the very machine load it is trying to protect against.
45
+ */
46
+ export const WINDOWS_WEIGHTS_SEC: Readonly<Record<string, number>> = {
47
+ 'test/integration/cli-e2e.test.ts': 361,
48
+ 'test/integration/worker-pool.test.ts': 222,
49
+ 'test/unit/incremental-vector-extension-ordering.test.ts': 87,
50
+ // ESTIMATE, not a measurement (#2841): this suite drives more full
51
+ // `runFullAnalysis` cycles than the VECTOR sibling above, so the 8 s
52
+ // PER_FILE_OVERHEAD floor would badly under-charge it and skew the Windows
53
+ // split — the failure mode that produced the job timeouts this table exists
54
+ // to prevent. Scaled from the sibling's measured 87 s by analyze-run count.
55
+ // Replace with a real figure after the first green Windows matrix run.
56
+ 'test/unit/incremental-index-extension-dml-gate.test.ts': 180,
57
+ 'test/integration/cli-limit-e2e.test.ts': 75,
58
+ 'test/unit/hooks.test.ts': 26,
59
+ 'test/integration/analyze-heap-oom-e2e.test.ts': 23,
60
+ 'test/unit/git-utils.test.ts': 18,
61
+ 'test/integration/hooks-e2e.test.ts': 15,
62
+ 'test/integration/tree-sitter-languages.test.ts': 9,
63
+ 'test/unit/repo-manager.test.ts': 9,
64
+ 'test/unit/detect-changes-worktree.test.ts': 9,
65
+ 'test/integration/antigravity-hook-e2e.test.ts': 7,
66
+ 'test/unit/index-lock.test.ts': 5,
67
+ 'test/unit/setup.test.ts': 5,
68
+ };
69
+
70
+ /**
71
+ * Fixed cost every file pays regardless of what it asserts: a pool worker start,
72
+ * module graph evaluation, and (for most of this list) a native addon load.
73
+ *
74
+ * Added to EVERY file's weight, not just unmeasured ones, and that is the point.
75
+ * Calibrated against the last green Windows matrix: its busiest shard ran 736 s
76
+ * of wall clock over ~511 s of measured file time, so roughly 8 s per file is
77
+ * unattributed setup. Without this term the balancer treats a light file as
78
+ * nearly free and, having isolated the two monsters, piles every remaining file
79
+ * onto the other shards — trading a runtime imbalance for a file-count one that
80
+ * costs just as much. With it, the split balances runtime AND count together.
81
+ */
82
+ const PER_FILE_OVERHEAD_SEC = 8;
83
+
84
+ /**
85
+ * Scheduling weight for `file`: its measured runtime (0 if it was fast enough
86
+ * that vitest printed no duration) plus the per-file floor above.
87
+ */
88
+ export function weightOf(file: string): number {
89
+ return (WINDOWS_WEIGHTS_SEC[file] ?? 0) + PER_FILE_OVERHEAD_SEC;
90
+ }
91
+
92
+ /**
93
+ * Partition `files` into `total` shards and return the 1-based `index` one.
94
+ *
95
+ * Longest-processing-time first: sort by weight descending, then repeatedly give
96
+ * the next file to the lightest shard so far. LPT is the standard greedy for
97
+ * multiprocessor scheduling and is guaranteed within 4/3 of optimal — far more
98
+ * than enough here, where the goal is only "no shard gets two monsters".
99
+ *
100
+ * Ties break on the file path so the partition is DETERMINISTIC: every shard
101
+ * computes the same split independently, on a different machine, with no
102
+ * coordination — which is what lets each runner select its own slice.
103
+ *
104
+ * Returns files in the input list's original order, not weight order, so failure
105
+ * output and reruns stay readable.
106
+ */
107
+ export function shardFiles(
108
+ files: readonly string[],
109
+ index: number,
110
+ total: number,
111
+ ): readonly string[] {
112
+ if (!Number.isInteger(total) || total < 1) {
113
+ throw new Error(`shard total must be a positive integer, got ${total}`);
114
+ }
115
+ if (!Number.isInteger(index) || index < 1 || index > total) {
116
+ throw new Error(`shard index must be in 1..${total}, got ${index}`);
117
+ }
118
+ if (total === 1) return [...files];
119
+
120
+ const byWeightDesc = [...files].sort((a, b) => {
121
+ const diff = weightOf(b) - weightOf(a);
122
+ return diff !== 0 ? diff : a.localeCompare(b);
123
+ });
124
+
125
+ const loads = Array.from({ length: total }, () => 0);
126
+ const assigned = Array.from({ length: total }, () => new Set<string>());
127
+ for (const file of byWeightDesc) {
128
+ let lightest = 0;
129
+ for (let i = 1; i < total; i++) {
130
+ if (loads[i]! < loads[lightest]!) lightest = i;
131
+ }
132
+ assigned[lightest]!.add(file);
133
+ loads[lightest]! += weightOf(file);
134
+ }
135
+
136
+ const mine = assigned[index - 1]!;
137
+ return files.filter((f) => mine.has(f));
138
+ }
139
+
140
+ /** Total weight of a file set — the shard cost this balancer is minimising. */
141
+ export function shardWeight(files: readonly string[]): number {
142
+ return files.reduce((sum, f) => sum + weightOf(f), 0);
143
+ }
@@ -36,12 +36,46 @@ const PLATFORM_LOGIC = [
36
36
  // must exercise the Windows backslash branch, so run it on the OS matrix (#2394).
37
37
  'test/unit/cli-entry.test.ts',
38
38
  'test/unit/platform-capabilities.test.ts',
39
+ // The gitnexus-plan safe writer resolves every name through a per-platform
40
+ // backend: Linux anchors through /proc/self/fd, macOS resolves lexically and
41
+ // verifies each step against descriptors it holds open. Publication is link(2)
42
+ // on both. #2905 shipped the Darwin backend after the suite had silently
43
+ // skipped on every non-Linux runner, so this file must run on the OS matrix or
44
+ // the macOS half is unverified by construction — and the flag, trailing-
45
+ // separator and hard-link fixtures assert kernel behaviour that only a real
46
+ // Darwin kernel can confirm. Windows is refused by the capability gate; the
47
+ // suite asserts that refusal rather than skipping it.
48
+ 'test/unit/evidence-provenance-helper.test.ts',
49
+ // Windows drive-letter case variance in the analyzer runner-identity path
50
+ // fields (#2668): normalizeAnalyzerRootPath is a POSIX no-op, so the
51
+ // "identity path fields are normalizer-stable" fixpoint guard only bites on
52
+ // the windows-latest matrix — it must run there, not just in the Ubuntu
53
+ // full-suite where it's trivially green. Deliberately the split-out
54
+ // normalization file, NOT analyzer-identity.test.ts: the latter's fixture
55
+ // tests compare identity fields against raw temp-dir paths and fail on macOS,
56
+ // where /var/... realpaths to /private/var/....
57
+ 'test/unit/analyzer-identity-path-normalization.test.ts',
58
+ // `isInside` containment guard vs Windows cross-drive paths: path.relative
59
+ // returns the absolute target across drives, so the guard needs isAbsolute.
60
+ // Fixture-free and pathApi-injectable, so it is portable to every runner.
61
+ 'test/unit/analyzer-identity-is-inside.test.ts',
62
+ // `\\?\` extended-length prefix normalization (#2667): fixture-free and
63
+ // platform-injectable (every assertion passes an explicit 'win32'), so like the
64
+ // is-inside guard above it is portable to every runner and its assertions run
65
+ // identically here and on Ubuntu. Registered alongside its two siblings so the
66
+ // Windows path-handling guards stay discoverable as one group. Same
67
+ // mixed-prefix relativize hazard as is-inside, reached through a
68
+ // caller-supplied path.
69
+ 'test/unit/windows-long-path-prefix.test.ts',
39
70
  // getconf page-size probe: explicit process.platform gate (win32 short-circuit)
40
71
  // plus a live-probe test whose only real non-4K coverage is macos-arm64's
41
72
  // 16 KiB pages — the exact hardware class #1231 targets (#2424 review).
42
73
  'test/unit/lbug-config-pagesize.test.ts',
43
74
  'test/unit/worker-pool-windows-quarantine.test.ts',
44
75
  'test/unit/lbug-pool-fts-load.test.ts',
76
+ // Global registry writes use the platform-specific index-lock backend
77
+ // (Windows named pipe, Linux socket, or macOS file lock). This includes the
78
+ // overlapping-registration regression from #2716 on every OS matrix.
45
79
  'test/unit/repo-manager.test.ts',
46
80
  'test/unit/repo-manager-finalize-invariant.test.ts',
47
81
  'test/unit/git-utils.test.ts',
@@ -79,6 +113,13 @@ const PLATFORM_LOGIC = [
79
113
  // POSIX and Windows — the fail-closed path-claim semantics must hold on the
80
114
  // real windows-latest path implementation (#2419/#2420).
81
115
  'test/unit/server-api-repo-resolution.test.ts',
116
+ // The index write-lock (#2658) selects its backend by process.platform — the
117
+ // OS socket lock (Windows named pipe / Linux abstract socket) vs the file
118
+ // fallback — and its socket-backend describe block is gated to linux/win32.
119
+ // The Ubuntu suite only proves the Linux abstract-socket path, so run it here
120
+ // to exercise the Windows named-pipe backend and the macOS file fallback on
121
+ // their real platforms (#2658 review H3).
122
+ 'test/unit/index-lock.test.ts',
82
123
  ];
83
124
 
84
125
  // Native LadybugDB integration tests — exercise the @ladybugdb/core
@@ -117,6 +158,24 @@ const LBUG_NATIVE = [
117
158
  // to a live native DB, rm-then-rename over an existing parked copy) before
118
159
  // any open — rename semantics are exactly what differs on Windows.
119
160
  'test/unit/incremental-dirty-recovery.test.ts',
161
+ // #2623: the incremental writeback must load VECTOR before the CodeEmbedding
162
+ // join-delete, and the blocked path must escalate instead of crashing. The
163
+ // win32 VECTOR gate was removed in the same PR, so this ordering must be
164
+ // proven on the windows-latest native addon, not just Ubuntu. Budget: ~25s
165
+ // on Linux → expect ~2min on the slowest Windows shard.
166
+ 'test/unit/incremental-vector-extension-ordering.test.ts',
167
+ // #2841: the FTS half of that same gate, plus the both-extensions-blocked
168
+ // case — and it needs this matrix for two reasons the VECTOR sibling above
169
+ // does not cover. The reported failure environment is a machine where the
170
+ // extension stopped LOADING, which is the #2374 class and Windows-reported
171
+ // (the same reason fts-extension-e2e.test.ts is registered below), so the
172
+ // FTS-unavailable branch has to run on a real Windows/macOS runner rather
173
+ // than only on Ubuntu where FTS always loads. And its both-blocked case is
174
+ // gated on GITNEXUS_REQUIRE_VECTOR=1, which ci-tests.yml sets ONLY on this
175
+ // job — everywhere else an unavailable VECTOR extension skips instead of
176
+ // failing. Budget: four real analyze runs, so expect it to sit alongside the
177
+ // VECTOR sibling's ~87s Windows measurement.
178
+ 'test/unit/incremental-index-extension-dml-gate.test.ts',
120
179
  ];
121
180
 
122
181
  // Process spawning and CLI tests — exercise child_process with real
@@ -141,6 +200,41 @@ const SPAWN_CLI = [
141
200
  'test/integration/antigravity-hook-e2e.test.ts',
142
201
  'test/unit/local-cli-subprocess.test.ts',
143
202
  'test/unit/runner-exec-tail.test.ts',
203
+ // Real cross-process single-writer lock coordination (#2658): child processes
204
+ // contend for the lock and race to reclaim a dead holder. Process spawning,
205
+ // kernel socket auto-release (Win named pipe / Linux abstract socket), and the
206
+ // FILE-backend rename-steal reclaim (macOS/BSD default) all vary across OSes —
207
+ // the exact behaviors the Windows/macOS matrix must prove. macOS timing first
208
+ // exposed a file-backend double-admit race here (#2658 review); the reclaim is
209
+ // now judgment-verified so a live holder is never displaced.
210
+ 'test/integration/analyze-index-lock-concurrency.test.ts',
211
+ // The three `dist/` module-load closure guards, all built on the shared
212
+ // child-process probe in `test/helpers/module-load-probe.ts`. That probe IS
213
+ // the platform-varying part: it spawns `process.execPath` in array form,
214
+ // clears NODE_OPTIONS, addresses its target via `pathToFileURL` (Windows needs
215
+ // the `file:///C:/...` form — a bare absolute path is not a valid ESM
216
+ // specifier there), and renders every result through a `path.sep`→POSIX
217
+ // normalisation the anchors and offender regexes depend on. None of that is
218
+ // proven anywhere else.
219
+ //
220
+ // Cheap: measured on the Windows runner at 448 ms, 53 ms and sub-second. An
221
+ // earlier attempt to register them still turned the matrix red — not from
222
+ // their own cost, but because vitest sharded by file COUNT, so inserting any
223
+ // file re-partitioned the list and happened to cluster `cli-e2e` (361 s) with
224
+ // `cli-limit-e2e` (75 s) on one shard. The split is weight-aware now
225
+ // (`scripts/cross-platform-shard.ts`), so a cheap file can no longer move a
226
+ // heavy one.
227
+ //
228
+ // #2802: MCP startup must not eagerly load the analyze-only language
229
+ // provider registry or the group contract extractors.
230
+ 'test/integration/mcp/startup-language-closure.test.ts',
231
+ // PR #1383: `cli/mcp.js`'s static-import closure must stay leaf-only so no
232
+ // native binding initialises before the stdout sentinel installs.
233
+ 'test/integration/mcp/import-closure.test.ts',
234
+ // #2091/#2093/#2116: the scope-resolution registry must not load the optional
235
+ // tree-sitter grammars at import time. The offender regexes match grammar
236
+ // paths with either separator, which only the Windows runner proves.
237
+ 'test/integration/optional-grammars/registry-import-closure.test.ts',
144
238
  ];
145
239
 
146
240
  // Worker threads tests — exercise real worker_threads which have
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Install the LadybugDB FTS extension into the shared home (~/.lbdb) up front, so
3
- * every test in a sharded CI run finds it regardless of which shard it lands in.
2
+ * Install the LadybugDB FTS and VECTOR extensions into the shared home (~/.lbdb)
3
+ * up front, so every test in a sharded CI run finds them regardless of shard.
4
4
  *
5
5
  * FTS-dependent tests split two ways: the LOAD-path gate (skipUnlessFtsAvailable)
6
6
  * self-installs on miss, but the FILE-path gate (requireFtsResourceOrSkip, e.g.
@@ -17,13 +17,24 @@
17
17
  import { mkdtempSync, rmSync } from 'node:fs';
18
18
  import { tmpdir } from 'node:os';
19
19
  import { join } from 'node:path';
20
- import { initLbug, loadFTSExtension, closeLbug } from '../src/core/lbug/lbug-adapter.js';
20
+ import {
21
+ initLbug,
22
+ loadFTSExtension,
23
+ loadVectorExtension,
24
+ closeLbug,
25
+ } from '../src/core/lbug/lbug-adapter.js';
21
26
 
22
27
  const dir = mkdtempSync(join(tmpdir(), 'gn-ensure-fts-'));
23
28
  try {
24
29
  await initLbug(join(dir, 'ensure-fts.lbug'));
25
30
  const ok = await loadFTSExtension(undefined, { policy: 'auto' });
26
31
  console.log(ok ? 'FTS extension ready.' : 'FTS extension unavailable (continuing).');
32
+ // VECTOR rides the same pre-install (#2623): the win32 gate is gone, so the
33
+ // vector suites genuinely run on Windows/macOS — installing once here means
34
+ // every sharded test process LOADs from ~/.lbdb instead of racing its own
35
+ // out-of-process INSTALL (bounded 15s each when the server is unreachable).
36
+ const vec = await loadVectorExtension(undefined, { policy: 'auto' });
37
+ console.log(vec ? 'VECTOR extension ready.' : 'VECTOR extension unavailable (continuing).');
27
38
  } catch (err) {
28
39
  console.warn(`ensure-fts: skipped (${err instanceof Error ? err.message : String(err)})`);
29
40
  } finally {