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
@@ -14,9 +14,12 @@ import v8 from 'v8';
14
14
  import cliProgress from 'cli-progress';
15
15
  import { isLbugReady, LbugWipeError } from '../core/lbug/lbug-adapter.js';
16
16
  import { boundedCheckpointBeforeExit } from '../core/lbug/shutdown-helpers.js';
17
- import { getOsPageSize, isLbugCheckpointIoError, isLbugPageSizeFrameError, isPageSizeAwareLadybug, isWalCorruptionError, parseWalCheckpointThreshold, WAL_RECOVERY_SUGGESTION, } from '../core/lbug/lbug-config.js';
17
+ import { findUndeclaredRelationPairError } from '../core/lbug/rel-pair-routing.js';
18
+ import { causeChain } from '../lib/utils.js';
19
+ import { getOsPageSize, isLbugCheckpointIoError, isLbugCheckpointBusyError, isLbugPageSizeFrameError, isPageSizeAwareLadybug, isWalCorruptionError, parseWalCheckpointThreshold, WAL_RECOVERY_SUGGESTION, } from '../core/lbug/lbug-config.js';
18
20
  import { getStoragePaths, getGlobalRegistryPath, RegistryNameCollisionError, AnalysisNotFinalizedError, assertAnalysisFinalized, } from '../storage/repo-manager.js';
19
- import { getGitRoot, hasGitDir, getDefaultBranch } from '../storage/git.js';
21
+ import { getGitRoot, hasGitDir, getDefaultBranch, selfCommitContextFiles, snapshotSelfCommitSafety, } from '../storage/git.js';
22
+ import { IndexLockTimeoutError } from '../storage/index-lock.js';
20
23
  import { loadAnalyzeConfig, mergeAnalyzeOptions, resolveDefaultBranch, validateBranchName, GitNexusRcError, } from './analyze-config.js';
21
24
  import { runFullAnalysis } from '../core/run-analyze.js';
22
25
  import { getRuntimeFingerprint } from '../core/platform/capabilities.js';
@@ -24,7 +27,8 @@ import { getMaxFileSizeBannerMessage } from '../core/ingestion/utils/max-file-si
24
27
  import { warnMissingOptionalGrammars, getOptionalGrammarExtensions } from './optional-grammars.js';
25
28
  import { glob } from 'glob';
26
29
  import fs from 'fs/promises';
27
- import { cliError } from './cli-message.js';
30
+ import { cliError, cliWarn } from './cli-message.js';
31
+ import { heapCapMbFor, memoryAutopilotDisabled } from '../core/ingestion/utils/effective-ram.js';
28
32
  import { EMBEDDING_DIMS_ERROR, normalizeEmbeddingDims } from './embedding-dims.js';
29
33
  import { formatElapsed } from './format-elapsed.js';
30
34
  import { isHfDownloadFailure } from '../core/embeddings/hf-env.js';
@@ -52,15 +56,13 @@ const writeFatalToStderr = (label, err) => {
52
56
  // #2068) is only reachable via `.cause`. Without this the user sees the
53
57
  // wrapper's main-thread stack and never the real frame. `cause.stack` already
54
58
  // begins with the cause's message, so we print the stack alone (not message +
55
- // stack) to avoid repeating it. Depth-bounded so a cyclic `cause` can't loop
56
- // (the phase runner wraps one level; the bound leaves headroom for future
57
- // nesting); uses realStderrWrite so the redirected console.error's ANSI
58
- // clear-line wrapping can't erase it (#1169).
59
- const MAX_CAUSE_DEPTH = 5;
60
- let cause = isErr ? err.cause : undefined;
61
- for (let depth = 0; depth < MAX_CAUSE_DEPTH && cause instanceof Error; depth++) {
59
+ // stack) to avoid repeating it. `causeChain` owns the traversal and the depth
60
+ // bound that stops a cyclic `cause` looping — this used to be one of four
61
+ // hand-rolled copies that had already drifted apart on both. Uses
62
+ // realStderrWrite so the redirected console.error's ANSI clear-line wrapping
63
+ // can't erase it (#1169). The head is skipped: it was just printed above.
64
+ for (const cause of causeChain(isErr ? err.cause : undefined)) {
62
65
  realStderrWrite(`\n Caused by: ${cause.stack ?? cause.message}\n`);
63
- cause = cause.cause;
64
66
  }
65
67
  };
66
68
  let fatalHandlersInstalled = false;
@@ -85,23 +87,20 @@ const installFatalHandlers = () => {
85
87
  process.exit(1);
86
88
  });
87
89
  };
88
- /** Historical floor for the re-exec heap cap — the auto-sizer never goes below
89
- * this, so small boxes / CI never regress. */
90
- const DEFAULT_HEAP_MB = 16384;
91
90
  /**
92
- * RAM-aware re-exec heap cap (MB): `0.75 × effective RAM`, clamped to
93
- * `>= DEFAULT_HEAP_MB`. Kept BELOW physical RAM on purpose — a cap `>=` RAM makes
94
- * V8 collect lazily and inflate the heap into swap-thrash (observed analyzing the
95
- * Linux kernel at a 30GB cap on a 31GB box). `constrainedBytes` is the cgroup
96
- * limit or `null`; it is honored only as a real, smaller-than-physical cap, because
91
+ * RAM-aware re-exec heap cap (MB) — the formula itself is single-sourced in
92
+ * `core/ingestion/utils/effective-ram.ts` (`heapCapMbFor`), shared with the
93
+ * server's analyze fork. `constrainedBytes` is the cgroup limit or `null`;
94
+ * it is honored only as a real, smaller-than-physical cap, because
97
95
  * `process.constrainedMemory()` returns a huge sentinel when UNCONSTRAINED.
96
+ * (Observed rationale: a cap ≥ RAM made V8 collect lazily and swap-thrash —
97
+ * the #2649 worker-timeout cascade on 16 GB boxes.)
98
98
  */
99
99
  export function computeHeapCapMb(totalBytes, constrainedBytes) {
100
100
  const effectiveBytes = constrainedBytes !== null && constrainedBytes > 0 && constrainedBytes < totalBytes
101
101
  ? constrainedBytes
102
102
  : totalBytes;
103
- const effectiveMb = Math.floor(effectiveBytes / (1024 * 1024));
104
- return Math.max(DEFAULT_HEAP_MB, Math.floor(0.75 * effectiveMb));
103
+ return heapCapMbFor(effectiveBytes);
105
104
  }
106
105
  function readConstrainedBytes() {
107
106
  if (typeof process.constrainedMemory !== 'function')
@@ -386,21 +385,70 @@ const forceHeapOOMForTestIfEnabled = () => {
386
385
  // the `DEFAULT_WAL_CHECKPOINT_THRESHOLD` constant in
387
386
  // `gitnexus/src/core/lbug/lbug-config.ts` in sync with this value.
388
387
  const RECOMMENDED_WAL_CHECKPOINT_THRESHOLD = 64 * 1024 * 1024;
388
+ /**
389
+ * Last `--max-old-space-size` value (MB) in a NODE_OPTIONS string, or `null`
390
+ * when absent/unparseable. Last occurrence wins, matching V8's own
391
+ * later-flag-wins semantics when NODE_OPTIONS repeats a flag.
392
+ */
393
+ export function parseMaxOldSpaceMb(nodeOptions) {
394
+ // V8 accepts `-` and `_` interchangeably in flag names, and Node accepts a
395
+ // space-separated value in NODE_OPTIONS — honor every spelling of the pin
396
+ // instead of silently overriding it (#2649 review).
397
+ const matches = [...nodeOptions.matchAll(/--max[-_]old[-_]space[-_]size(?:=|\s+)(\d+)/g)];
398
+ if (matches.length === 0)
399
+ return null;
400
+ const mb = Number(matches[matches.length - 1][1]);
401
+ return Number.isFinite(mb) && mb > 0 ? mb : null;
402
+ }
389
403
  /** Re-exec the process with the RAM-aware auto heap cap + larger semi-space/stack
390
- * if we're currently below that. A user-supplied NODE_OPTIONS heap wins (no re-exec). */
404
+ * if we're currently below that.
405
+ *
406
+ * Heap-source precedence (#2649):
407
+ * - an explicit per-invocation `--max-old-space-size` (execArgv) always wins;
408
+ * - `GITNEXUS_MEMORY=off` declines the memory autopilot entirely;
409
+ * - an ambient NODE_OPTIONS heap >= the auto cap is honored as-is;
410
+ * - an ambient NODE_OPTIONS heap BELOW the auto cap is treated as an
411
+ * inherited environment default (devcontainers/CI export one for other
412
+ * tooling), not a deliberate per-run choice: warn and respawn with the
413
+ * auto cap. Pre-#2649 this returned early and large repos then OOM'd on
414
+ * whatever heap the environment happened to specify. */
391
415
  async function ensureHeap() {
392
- const nodeOpts = process.env.NODE_OPTIONS || '';
393
- if (nodeOpts.includes('--max-old-space-size'))
416
+ // Explicit opt-out disables auto-sizing ENTIRELY — both the ambient-pin
417
+ // override and the default v8-limit respawn — and is honored SILENTLY:
418
+ // the operator already made the call, and stderr-sensitive consumers
419
+ // (test harnesses, scripts, supervisors that track a single PID) rely on
420
+ // a quiet, single-process run.
421
+ if (memoryAutopilotDisabled())
394
422
  return false;
395
- const v8Heap = v8.getHeapStatistics().heap_size_limit;
396
- if (v8Heap >= HEAP_MB * 1024 * 1024 * 0.9)
423
+ const nodeOpts = process.env.NODE_OPTIONS || '';
424
+ if (process.execArgv.some((a) => a.startsWith('--max-old-space-size')))
397
425
  return false;
426
+ const ambientHeapMb = parseMaxOldSpaceMb(nodeOpts);
427
+ if (ambientHeapMb !== null) {
428
+ if (ambientHeapMb >= RESPAWN_HEAP_MB)
429
+ return false;
430
+ cliWarn(` NODE_OPTIONS pins the heap to ${ambientHeapMb}MB — below the ${RESPAWN_HEAP_MB}MB this machine's RAM supports.\n` +
431
+ ` Re-running analyze with the larger auto-sized cap (set GITNEXUS_MEMORY=off to keep the NODE_OPTIONS value).\n`);
432
+ }
433
+ else {
434
+ const v8Heap = v8.getHeapStatistics().heap_size_limit;
435
+ if (v8Heap >= HEAP_MB * 1024 * 1024 * 0.9)
436
+ return false;
437
+ }
398
438
  // --stack-size is a V8 flag not allowed in NODE_OPTIONS on Node 24+, so pass it
399
439
  // only as a direct CLI argument. --max-semi-space-size IS allowed in NODE_OPTIONS.
400
440
  const cliFlags = [HEAP_FLAG, SEMI_FLAG];
401
441
  if (!nodeOpts.includes('--stack-size'))
402
442
  cliFlags.push(STACK_FLAG);
403
- const childArgs = [...cliFlags, ...process.argv.slice(1)];
443
+ // Preserve the parent's node flags (execArgv) — dropping them breaks any
444
+ // loader-launched CLI: `node --import tsx src/cli/index.ts` respawned
445
+ // without `--import tsx` cannot execute TypeScript and dies with a
446
+ // swallowed exit 1 (#2649 review). Our heap/semi/stack flags come AFTER
447
+ // execArgv so V8's later-flag-wins semantics resolve duplicates our way.
448
+ // Inspector flags are the one exception: replaying `--inspect[-brk]` makes
449
+ // the child fight the parent for the debug port and die with EADDRINUSE.
450
+ const preservedExecArgv = process.execArgv.filter((a) => !a.startsWith('--inspect'));
451
+ const childArgs = [...preservedExecArgv, ...cliFlags, ...process.argv.slice(1)];
404
452
  const childEnv = {
405
453
  ...process.env,
406
454
  NODE_OPTIONS: `${nodeOpts} ${HEAP_FLAG} ${SEMI_FLAG}`.trim(),
@@ -485,7 +533,7 @@ const restoreAnalyzeEnv = (snap) => {
485
533
  * without booting the full analyze pipeline (#742 review).
486
534
  */
487
535
  export const shouldGenerateCommunitySkillFiles = (options, pipelineResult) => Boolean(options?.skills && pipelineResult && !options?.indexOnly);
488
- export const analyzeCommand = async (inputPath, options) => {
536
+ export const analyzeCommand = async (inputPath, options, runnerIdentityAtBootstrap) => {
489
537
  if (await ensureHeap())
490
538
  return;
491
539
  forceHeapOOMForTestIfEnabled();
@@ -506,7 +554,7 @@ export const analyzeCommand = async (inputPath, options) => {
506
554
  // pre-call values.
507
555
  const envSnap = snapshotAnalyzeEnv();
508
556
  try {
509
- await analyzeCommandImpl(inputPath, options);
557
+ await analyzeCommandImpl(inputPath, options, runnerIdentityAtBootstrap);
510
558
  }
511
559
  finally {
512
560
  restoreAnalyzeEnv(envSnap);
@@ -523,7 +571,9 @@ export const analyzeCommand = async (inputPath, options) => {
523
571
  process.exit(typeof process.exitCode === 'number' ? process.exitCode : 1);
524
572
  }
525
573
  };
526
- const analyzeCommandImpl = async (inputPath, cliOptions) => {
574
+ /** Commander entrypoint used only by the capture-before-import lazy bootstrap. */
575
+ export const analyzeCommandWithRunnerIdentity = async (runnerIdentityAtBootstrap, inputPath, options) => analyzeCommand(inputPath, options, runnerIdentityAtBootstrap);
576
+ const analyzeCommandImpl = async (inputPath, cliOptions, runnerIdentityAtBootstrap) => {
527
577
  console.log('\n GitNexus Analyzer\n');
528
578
  // ── Resolve the target repo root ──────────────────────────────────
529
579
  // Resolved FIRST because `.gitnexusrc` is read from the repo root (not the
@@ -988,7 +1038,7 @@ const analyzeCommandImpl = async (inputPath, cliOptions) => {
988
1038
  const skipAll = options.indexOnly;
989
1039
  const skipAgentsMd = skipAll || options.skipAgentsMd;
990
1040
  const skipSkills = skipAll || options.skipSkills;
991
- const result = await runFullAnalysis(repoPath, {
1041
+ const runOptions = {
992
1042
  // Pipeline re-index — OR'd with --skills because skill generation
993
1043
  // needs a fresh pipelineResult. Has no bearing on the registry
994
1044
  // collision guard (see allowDuplicateName below).
@@ -1035,12 +1085,25 @@ const analyzeCommandImpl = async (inputPath, cliOptions) => {
1035
1085
  // in LadybugDB's ClientContext destructor after --pdg writes (#2264). The
1036
1086
  // CHECKPOINT keeps the index durable; process exit reclaims the handles.
1037
1087
  skipNativeCloseOnExit: true,
1038
- }, {
1088
+ };
1089
+ const runCallbacks = {
1039
1090
  onProgress: (_phase, percent, message) => {
1040
1091
  updateBar(percent, message);
1041
1092
  },
1042
1093
  onLog: barLog,
1043
- });
1094
+ };
1095
+ const bootstrapArgs = runnerIdentityAtBootstrap
1096
+ ? [runnerIdentityAtBootstrap]
1097
+ : [];
1098
+ // #2639 review round 2: snapshot which of AGENTS.md/CLAUDE.md are safe to
1099
+ // auto-commit BEFORE runFullAnalysis (and the --skills regeneration
1100
+ // further down) writes to them, so selfCommitContextFiles can tell a
1101
+ // pre-existing unstaged user edit apart from this run's stats refresh
1102
+ // and refuse to sweep the former into the latter's commit.
1103
+ const selfCommitSafety = options.selfCommit === true
1104
+ ? snapshotSelfCommitSafety(repoPath, ['AGENTS.md', 'CLAUDE.md'])
1105
+ : undefined;
1106
+ const result = await runFullAnalysis(repoPath, runOptions, runCallbacks, ...bootstrapArgs);
1044
1107
  if (result.alreadyUpToDate) {
1045
1108
  // Even the fast path must prove the repo is discoverable. A prior
1046
1109
  // run can write meta.json and then fail before registerRepo(); in
@@ -1080,6 +1143,11 @@ const analyzeCommandImpl = async (inputPath, cliOptions) => {
1080
1143
  if (baseRefRefreshed.length > 0) {
1081
1144
  console.log(` Updated base_ref to "${resolvedDefaultBranch}" in ${baseRefRefreshed.join(', ')}\n`);
1082
1145
  }
1146
+ // #2639: opt-in self-commit of any AGENTS.md/CLAUDE.md churn from this
1147
+ // fast path (e.g. a base_ref refresh above). Best-effort — never throws.
1148
+ if (options.selfCommit === true && selfCommitSafety) {
1149
+ selfCommitContextFiles(repoPath, ['AGENTS.md', 'CLAUDE.md'], selfCommitSafety);
1150
+ }
1083
1151
  // Safe to return without process.exit(0) — the early-return path in
1084
1152
  // runFullAnalysis never opens LadybugDB, so no native handles prevent exit.
1085
1153
  return;
@@ -1153,6 +1221,13 @@ const analyzeCommandImpl = async (inputPath, cliOptions) => {
1153
1221
  /* best-effort */
1154
1222
  }
1155
1223
  }
1224
+ // #2639: opt-in self-commit of any AGENTS.md/CLAUDE.md churn written by
1225
+ // this run (the primary generateAIContextFiles call inside
1226
+ // runFullAnalysis, and/or the --skills regeneration above). Best-effort
1227
+ // — never throws, so a missing git identity etc. can't fail `analyze`.
1228
+ if (options.selfCommit === true && selfCommitSafety) {
1229
+ selfCommitContextFiles(repoPath, ['AGENTS.md', 'CLAUDE.md'], selfCommitSafety);
1230
+ }
1156
1231
  const totalTime = ((Date.now() - t0) / 1000).toFixed(1);
1157
1232
  clearInterval(elapsedTimer);
1158
1233
  process.removeListener('SIGINT', sigintHandler);
@@ -1165,6 +1240,25 @@ const analyzeCommandImpl = async (inputPath, cliOptions) => {
1165
1240
  bar.stop();
1166
1241
  // ── Summary ────────────────────────────────────────────────────
1167
1242
  const s = result.stats;
1243
+ // A collapsed graph write is NOT a successful index. The other incomplete
1244
+ // reasons (`incremental-in-progress`, `embedding-checkpoint-pending`)
1245
+ // describe a run that did what it said and left work for next time; this
1246
+ // one means most of your edges are gone, so every query answers a confident
1247
+ // empty and the exit code is the only thing automation reads. Printing
1248
+ // "indexed successfully" and exiting 0 here would be the same class of
1249
+ // false certainty the check itself was written to remove.
1250
+ if (result.graphWriteCollapsed) {
1251
+ const { expected, persisted } = result.graphWriteCollapsed;
1252
+ console.log(`\n Repository indexed INCOMPLETELY (${totalTime}s)\n`);
1253
+ console.log(` Graph write collapsed: the pipeline produced ${expected.toLocaleString()} relationships\n` +
1254
+ ` but only ${persisted.toLocaleString()} are readable from the index. Queries will answer\n` +
1255
+ ` with missing edges rather than an error.\n\n` +
1256
+ ` The index is recorded INCOMPLETE (graph-write-collapsed). Re-run\n` +
1257
+ ` \`gitnexus analyze --force\`; if it recurs, check disk space and run \`gitnexus doctor\`.`);
1258
+ console.log(` ${repoPath}`);
1259
+ process.exitCode = 1;
1260
+ return;
1261
+ }
1168
1262
  console.log(`\n Repository indexed successfully (${totalTime}s)\n`);
1169
1263
  console.log(` ${(s.nodes ?? 0).toLocaleString()} nodes | ${(s.edges ?? 0).toLocaleString()} edges | ${s.communities ?? 0} clusters | ${s.processes ?? 0} flows`);
1170
1264
  console.log(` ${repoPath}`);
@@ -1172,9 +1266,24 @@ const analyzeCommandImpl = async (inputPath, cliOptions) => {
1172
1266
  // progress-bar log() that fired mid-run has already scrolled away, so the
1173
1267
  // degraded-search state must also appear in the final summary (#1161).
1174
1268
  if (result.ftsSkipped) {
1175
- console.log(`\n Warning: full-text/BM25 search is disabled — the LadybugDB FTS extension was unavailable.\n` +
1176
- ` Install it once with network access (GITNEXUS_LBUG_EXTENSION_INSTALL=auto) then rerun, or\n` +
1177
- ` run \`gitnexus analyze --repair-fts\` when connected. Run \`gitnexus doctor\` for details.`);
1269
+ // #2658 review L2: a build/verify failure is NOT an extension-unavailable
1270
+ // problem — sending the user to install the extension is the wrong remedy.
1271
+ if (result.ftsSkipReason === 'build-failed') {
1272
+ console.log(`\n Warning: full-text/BM25 search is disabled — the search index build failed this run.\n` +
1273
+ ` The FTS extension is available; rerun \`gitnexus analyze --repair-fts\`. If it persists,\n` +
1274
+ ` check the disk for space or corruption. Run \`gitnexus doctor\` for details.`);
1275
+ }
1276
+ else {
1277
+ console.log(
1278
+ // NOT "then rerun" (#2841 §5.C): this run stamped `lastCommit`, so a
1279
+ // plain rerun on an unchanged tree takes the up-to-date fast path and
1280
+ // returns before Phase 3 could rebuild anything — the advice would be
1281
+ // ineffective exactly when the user follows it. `--repair-fts` is the
1282
+ // verb that rebuilds the search indexes without re-parsing the repo.
1283
+ `\n Warning: full-text/BM25 search is disabled — the LadybugDB FTS extension was unavailable.\n` +
1284
+ ` Install it once with network access (GITNEXUS_LBUG_EXTENSION_INSTALL=auto), then run\n` +
1285
+ ` \`gitnexus analyze --repair-fts\` to build the search indexes. Run \`gitnexus doctor\` for details.`);
1286
+ }
1178
1287
  }
1179
1288
  try {
1180
1289
  await fs.access(getGlobalRegistryPath());
@@ -1205,6 +1314,18 @@ const analyzeCommandImpl = async (inputPath, cliOptions) => {
1205
1314
  process.exitCode = 1;
1206
1315
  return;
1207
1316
  }
1317
+ // Another analyze held the index lock past the configured wait ceiling
1318
+ // (#2658, GITNEXUS_INDEX_LOCK_TIMEOUT_MS). The on-disk index is being
1319
+ // refreshed by the holder — this is a clean, expected condition, not a
1320
+ // crash, so render the message without a stack trace.
1321
+ if (err instanceof IndexLockTimeoutError) {
1322
+ cliError(` Another gitnexus analyze (pid ${err.holder.pid} on ${err.holder.hostname}) is ` +
1323
+ `already refreshing this index and did not finish within the wait window.\n` +
1324
+ ` The on-disk index is being updated by that run. Retry later, or raise\n` +
1325
+ ` GITNEXUS_INDEX_LOCK_TIMEOUT_MS to wait longer.\n`, { recoveryHint: 'index-lock-timeout', holderPid: err.holder.pid });
1326
+ process.exitCode = 1;
1327
+ return;
1328
+ }
1208
1329
  // Finalize invariant failure (#1169) — keep the rich actionable
1209
1330
  // message intact and write through realStderrWrite so it can't be
1210
1331
  // erased by a leftover bar refresh on slow terminals.
@@ -1218,6 +1339,35 @@ const analyzeCommandImpl = async (inputPath, cliOptions) => {
1218
1339
  process.exitCode = 1;
1219
1340
  return;
1220
1341
  }
1342
+ // An extracted edge whose FROM→TO label pair is missing from GitNexus's own
1343
+ // relation DDL (#2789). `assertDeclaredPair` aborts the run rather than let
1344
+ // the bulk COPY fail late and silently drop the edge, so the user sees a
1345
+ // mid-run crash inside GitNexus internals with nothing to act on. Name the
1346
+ // pair, the relationship and the file that produced it, and say plainly that
1347
+ // a re-run cannot help — this is deterministic for the same input.
1348
+ // Checked by TYPE (repo norm, #2385) BEFORE the message-text heuristics
1349
+ // below, and through the `cause` chain because the ingestion phase runner
1350
+ // rewraps every phase failure as `Phase 'X' failed: …`.
1351
+ const undeclaredPair = findUndeclaredRelationPairError(err);
1352
+ if (undeclaredPair !== undefined) {
1353
+ // Render the error's OWN message indented — same idiom as the
1354
+ // `LbugWipeError` and page-size branches below. `UndeclaredRelationPairError`
1355
+ // builds a fully self-contained message (pair, relationship type, both node
1356
+ // ids, source file, issue URL, `.gitnexusignore` workaround) precisely
1357
+ // because `gitnexus serve` forwards only `err.message` over worker IPC.
1358
+ // Re-rendering those fields here would be a second copy of one string, free
1359
+ // to drift from the first — and the actionable half would reach CLI users
1360
+ // only. `undeclaredPair.message`, not the outer `msg`: the real error may be
1361
+ // several `cause` levels below the phase wrapper `msg` came from.
1362
+ cliError(` ${undeclaredPair.message.replace(/\n/g, '\n ')}\n`, {
1363
+ recoveryHint: 'undeclared-relation-pair',
1364
+ labelPair: undeclaredPair.pairKey,
1365
+ relationType: undeclaredPair.relationType,
1366
+ sourceFile: undeclaredPair.sourceFile,
1367
+ });
1368
+ process.exitCode = 1;
1369
+ return;
1370
+ }
1221
1371
  // WAL corruption — the index file is unreadable. Give a clear recovery
1222
1372
  // path without a confusing stack trace (the native error message alone
1223
1373
  // is enough signal).
@@ -1229,7 +1379,15 @@ const analyzeCommandImpl = async (inputPath, cliOptions) => {
1229
1379
  return;
1230
1380
  }
1231
1381
  if (isLbugCheckpointIoError(err)) {
1382
+ // #2599: when the checkpoint IO error also looks busy/locked, another
1383
+ // handle holds the store open — name that actionable cause alongside the
1384
+ // threshold hint (the original error is preserved so the hint still fires).
1385
+ const heldOpen = isLbugCheckpointBusyError(err)
1386
+ ? ` Another process may hold the store open (a running \`gitnexus mcp\` server, or a\n` +
1387
+ ` stale reader) — close other GitNexus processes on this repo, then retry.\n`
1388
+ : '';
1232
1389
  cliError(` LadybugDB failed while rotating/removing WAL checkpoint files.\n` +
1390
+ heldOpen +
1233
1391
  ` This can happen when auto-checkpoint runs at the default threshold (~16MB).\n` +
1234
1392
  ` Retry with a larger checkpoint threshold to reduce checkpoint frequency:\n` +
1235
1393
  ` gitnexus analyze --wal-checkpoint-threshold ${RECOMMENDED_WAL_CHECKPOINT_THRESHOLD}\n` +
@@ -12,7 +12,7 @@ import { type CliMessageKey, type CliMessageVars } from './i18n/index.js';
12
12
  * Consumers can import this type to narrow log-record `recoveryHint`
13
13
  * fields without restating the literal list.
14
14
  */
15
- export type RecoveryHint = 'wal-corruption' | 'wal-checkpoint-threshold' | 'lbug-wipe-failed' | 'lbug-page-size' | 'heap-oom-respawn' | 'native-worker-abort' | 'hf-endpoint-unreachable' | 'http-embedding-endpoint-error' | 'embedding-dims-invalid' | 'local-embedding-unsupported' | 'local-embedding-stack-missing' | 'large-repo' | 'npm-resolution' | 'module-not-found' | 'gitnexusrc-invalid' | 'default-branch-invalid';
15
+ export type RecoveryHint = 'wal-corruption' | 'wal-checkpoint-threshold' | 'lbug-wipe-failed' | 'lbug-page-size' | 'heap-oom-respawn' | 'native-worker-abort' | 'hf-endpoint-unreachable' | 'http-embedding-endpoint-error' | 'embedding-dims-invalid' | 'local-embedding-unsupported' | 'local-embedding-stack-missing' | 'large-repo' | 'npm-resolution' | 'module-not-found' | 'gitnexusrc-invalid' | 'default-branch-invalid' | 'index-lock-timeout' | 'undeclared-relation-pair';
16
16
  /**
17
17
  * Common shape for the optional structured-field bag passed to
18
18
  * `cliError`/`cliWarn`/`cliInfo`. Typed so the `recoveryHint` slot is
@@ -1,13 +1,30 @@
1
1
  import { t } from './i18n/index.js';
2
+ import { formatSymbolLine } from './format-symbol.js';
2
3
  export function formatDetectChangesResult(result) {
3
4
  const payload = (result ?? {});
4
5
  if (payload.error)
5
6
  return t('common.error', { message: String(payload.error) });
6
7
  const summary = payload.summary ?? {};
8
+ // A swallowed query failure sets `partial` and leaves the counts at zero
9
+ // (#2283). Printing only "No changes detected." turns a degraded run into a
10
+ // clean bill of health for the pre-commit gate, so say so either way.
11
+ // `truncated` is its sibling flag: the backend caps the changed_symbols
12
+ // LISTING (never the counts), so a short list is not proof of a short diff.
13
+ // Both lead the output — a caveat printed after the summary is read too late.
14
+ const notes = [];
15
+ if (payload.partial)
16
+ notes.push(t('tool.detectChanges.partial'));
17
+ // The plain truncation note reassures that the counts are whole. That is only
18
+ // true when the run did NOT also degrade — `changed_count` sums the batches
19
+ // that succeeded — so the two flags together get a different sentence.
20
+ if (payload.truncated)
21
+ notes.push(t(payload.partial ? 'tool.detectChanges.truncatedDegraded' : 'tool.detectChanges.truncated'));
7
22
  if ((summary.changed_count ?? 0) === 0) {
8
- return t('tool.detectChanges.noChanges');
23
+ return [...notes, t('tool.detectChanges.noChanges')].join('\n');
9
24
  }
10
25
  const lines = [];
26
+ if (notes.length > 0)
27
+ lines.push(...notes, '');
11
28
  lines.push(t('tool.detectChanges.changesSummary', {
12
29
  files: summary.changed_files ?? 0,
13
30
  symbols: summary.changed_count ?? 0,
@@ -22,7 +39,7 @@ export function formatDetectChangesResult(result) {
22
39
  lines.push(t('tool.detectChanges.changedSymbols'));
23
40
  const shown = changed.slice(0, 15);
24
41
  for (const symbol of shown) {
25
- lines.push(` ${symbol.type ?? 'Symbol'} ${symbol.name ?? '?'} → ${symbol.filePath ?? '?'}`);
42
+ lines.push(formatSymbolLine(symbol.type, symbol.name, symbol.filePath));
26
43
  }
27
44
  // Overflow is measured against the TRUE total (summary.changed_count), not
28
45
  // the array length — the array may already be `--limit`-sliced, so using its
@@ -1,4 +1,5 @@
1
1
  import { type EmbeddingRuntimeResolution } from '../core/embeddings/runtime-install.js';
2
+ import { type NativeCheckResult } from '../core/lbug/native-check.js';
2
3
  export declare function displayWidth(value: string): number;
3
4
  export declare function padDisplayEnd(value: string, columns: number): string;
4
5
  /**
@@ -36,4 +37,26 @@ export declare function localEmbeddingDoctorStatus(opts: {
36
37
  * detect the OS page size at runtime).
37
38
  */
38
39
  export declare function pageSizeDoctorLines(pageSize: number | undefined, ladybugVersion: string | undefined): string[];
40
+ /**
41
+ * The hintless buffer-pool doctor line (#2631) — the pool the next Database
42
+ * open in THIS process would get. Same plain-params testable-helper shape as
43
+ * pageSizeDoctorLines above. `pool` is getEffectiveBufferPoolSize(): `0` is
44
+ * the pass-through sentinel for LadybugDB's native 80%-of-RAM default, never
45
+ * printed as "0 MiB". `envRaw` (the raw GITNEXUS_LBUG_BUFFER_POOL_SIZE value)
46
+ * marks operator-supplied absolute values as "(env override)" — no scaling
47
+ * suffix: the hintless default is deliberately unscaled (#2557), and an env
48
+ * value is absolute, so a "×N" note would misdescribe both.
49
+ */
50
+ export declare function poolSizeDoctorLine(pool: number, envRaw: string | undefined): string;
51
+ /**
52
+ * The `native` status line. Literal label like the page-size and pool-size lines
53
+ * above (no i18n key).
54
+ *
55
+ * A failed check is not automatically a MISSING binary, and saying so is the
56
+ * same misdiagnosis #2672 fixed one layer down: on a host whose glibc is too
57
+ * old, `lbugjs.node` is present and merely unloadable, so "missing" sent users
58
+ * to reinstall a file that was already there — while the detail written to
59
+ * stderr right below said the opposite. Render what the check actually found.
60
+ */
61
+ export declare function nativeStatusLine(check: NativeCheckResult): string;
39
62
  export declare const doctorCommand: () => Promise<void>;
@@ -4,8 +4,8 @@ import { isHttpMode } from '../core/embeddings/http-client.js';
4
4
  import { getLocalEmbeddingRuntimeBlocker, localEmbeddingPrefixUnloadableMessage, localEmbeddingStackMissingMessage, } from '../core/embeddings/runtime-support.js';
5
5
  import { isPrefixRuntimeLoadable, resolveEmbeddingRuntime, } from '../core/embeddings/runtime-install.js';
6
6
  import { cudaRedirectDoctorStatus } from '../core/embeddings/onnxruntime-node-resolver.js';
7
- import { checkLbugNative, probeFtsExtensionLoad } from '../core/lbug/native-check.js';
8
- import { getOsPageSize, isPageSizeAwareLadybug } from '../core/lbug/lbug-config.js';
7
+ import { checkLbugNative, probeFtsExtensionLoad, probeVectorExtensionLoad, } from '../core/lbug/native-check.js';
8
+ import { getEffectiveBufferPoolSize, getOsPageSize, isPageSizeAwareLadybug, } from '../core/lbug/lbug-config.js';
9
9
  import { diagnoseExtensionLoad } from '../core/lbug/extension-load-error.js';
10
10
  import { getExtensionInstallPolicy } from '../core/lbug/extension-loader.js';
11
11
  import { t } from './i18n/index.js';
@@ -115,6 +115,51 @@ export function pageSizeDoctorLines(pageSize, ladybugVersion) {
115
115
  }
116
116
  return lines;
117
117
  }
118
+ /**
119
+ * The hintless buffer-pool doctor line (#2631) — the pool the next Database
120
+ * open in THIS process would get. Same plain-params testable-helper shape as
121
+ * pageSizeDoctorLines above. `pool` is getEffectiveBufferPoolSize(): `0` is
122
+ * the pass-through sentinel for LadybugDB's native 80%-of-RAM default, never
123
+ * printed as "0 MiB". `envRaw` (the raw GITNEXUS_LBUG_BUFFER_POOL_SIZE value)
124
+ * marks operator-supplied absolute values as "(env override)" — no scaling
125
+ * suffix: the hintless default is deliberately unscaled (#2557), and an env
126
+ * value is absolute, so a "×N" note would misdescribe both.
127
+ */
128
+ export function poolSizeDoctorLine(pool, envRaw) {
129
+ const value = pool === 0 ? 'native 80% of RAM' : `${Math.round(pool / (1024 * 1024))} MiB`;
130
+ const envNote = envRaw !== undefined && envRaw.trim().length > 0 ? ' (env override)' : '';
131
+ return ` ${padDisplayEnd('pool size', 10)}${value}${envNote}`;
132
+ }
133
+ /**
134
+ * The `native` status line. Literal label like the page-size and pool-size lines
135
+ * above (no i18n key).
136
+ *
137
+ * A failed check is not automatically a MISSING binary, and saying so is the
138
+ * same misdiagnosis #2672 fixed one layer down: on a host whose glibc is too
139
+ * old, `lbugjs.node` is present and merely unloadable, so "missing" sent users
140
+ * to reinstall a file that was already there — while the detail written to
141
+ * stderr right below said the opposite. Render what the check actually found.
142
+ */
143
+ export function nativeStatusLine(check) {
144
+ return ` ${padDisplayEnd('native', 10)}${nativeStatusText(check)}`;
145
+ }
146
+ function nativeStatusText(check) {
147
+ if (check.ok)
148
+ return '✓ lbugjs.node loaded';
149
+ switch (check.kind) {
150
+ case 'package_missing':
151
+ return '✗ @ladybugdb/core not installed';
152
+ case 'load_failed':
153
+ return '✗ lbugjs.node present but failed to load';
154
+ case 'binary_unwritable':
155
+ // The prebuilt exists; only the copy into node_modules was refused. Saying
156
+ // "missing" here would contradict the detail printed underneath (#2672).
157
+ return '✗ lbugjs.node not installed (node_modules not writable)';
158
+ default:
159
+ // 'binary_missing', and any future kind: the conservative claim.
160
+ return '✗ lbugjs.node missing';
161
+ }
162
+ }
118
163
  export const doctorCommand = async () => {
119
164
  const fingerprint = getRuntimeFingerprint();
120
165
  const capabilities = getRuntimeCapabilities();
@@ -132,12 +177,12 @@ export const doctorCommand = async () => {
132
177
  for (const line of pageSizeDoctorLines(getOsPageSize(), fingerprint.ladybugdb)) {
133
178
  console.log(line);
134
179
  }
180
+ // Hintless buffer pool for the next DB open (#2631). Literal label like
181
+ // the page size line above (no i18n key).
182
+ console.log(poolSizeDoctorLine(getEffectiveBufferPoolSize(), process.env.GITNEXUS_LBUG_BUFFER_POOL_SIZE));
135
183
  const nativeCheck = checkLbugNative();
136
- if (nativeCheck.ok) {
137
- console.log(` ${padDisplayEnd('native', 10)}✓ lbugjs.node loaded`);
138
- }
139
- else {
140
- console.log(` ${padDisplayEnd('native', 10)}✗ lbugjs.node missing`);
184
+ console.log(nativeStatusLine(nativeCheck));
185
+ if (!nativeCheck.ok) {
141
186
  process.stderr.write(`\n${nativeCheck.message?.replace(/^/gm, ' ')}\n\n`);
142
187
  }
143
188
  console.log(` ${label('doctor.labels.onnx', 10)}${fingerprint.onnxruntime ?? 'unknown'}`);
@@ -162,8 +207,26 @@ export const doctorCommand = async () => {
162
207
  console.log(` ${padDisplayEnd('', 18)}${remedy}`);
163
208
  }
164
209
  }
165
- console.log(` ${label('doctor.labels.vectorIndex', 18)}${capabilities.vector}`);
166
- console.log(` ${label('doctor.labels.semanticMode', 18)}${capabilities.semanticMode}`);
210
+ // Live LOAD probe for VECTOR too (#2623). The static capability is just
211
+ // `platform !== 'win32'`, so it printed "available" on the very machines
212
+ // where analyze was failing to load the extension — the same contradiction
213
+ // #2374 fixed for FTS above, and exactly what #2623's reporter saw while
214
+ // every incremental analyze died on an unloaded VECTOR extension.
215
+ const vectorProbe = nativeCheck.ok
216
+ ? await probeVectorExtensionLoad()
217
+ : { loaded: false, reason: 'LadybugDB native module (lbugjs.node) failed to load' };
218
+ console.log(` ${label('doctor.labels.vectorIndex', 18)}${vectorProbe.loaded ? 'available' : 'unavailable'}`);
219
+ if (!vectorProbe.loaded && vectorProbe.reason) {
220
+ console.log(` ${padDisplayEnd('', 18)}${vectorProbe.reason}`);
221
+ const { kind, remedy } = diagnoseExtensionLoad(vectorProbe.reason, 'VECTOR');
222
+ if (kind !== 'unknown') {
223
+ console.log(` ${padDisplayEnd('', 18)}${remedy}`);
224
+ }
225
+ }
226
+ // Semantic mode follows the probe, not the platform: without a loadable
227
+ // VECTOR extension the index can be neither built nor queried, so search is
228
+ // really on exact scan no matter what the platform would allow.
229
+ console.log(` ${label('doctor.labels.semanticMode', 18)}${vectorProbe.loaded ? capabilities.semanticMode : 'exact-scan'}`);
167
230
  // Surface the optional-extension install policy so offline users can see
168
231
  // whether analyze/query will reach the network (extension.ladybugdb.com).
169
232
  // Literal label (like the 'native' line) to avoid adding i18n keys.
@@ -47,6 +47,12 @@ export function getEditorTargets(home = os.homedir()) {
47
47
  id: 'opencode',
48
48
  label: 'OpenCode',
49
49
  file: path.join(home, '.config', 'opencode', 'opencode.json'),
50
+ // OpenCode merges config.json -> opencode.json -> opencode.jsonc; setup
51
+ // writes an existing readable config to avoid creating a shadow file.
52
+ legacyFiles: [
53
+ path.join(home, '.config', 'opencode', 'opencode.jsonc'),
54
+ path.join(home, '.config', 'opencode', 'config.json'),
55
+ ],
50
56
  // OpenCode nests servers under `mcp`, not `mcpServers`.
51
57
  keyPath: ['mcp', 'gitnexus'],
52
58
  },
@@ -16,7 +16,8 @@
16
16
  * Usage:
17
17
  * gitnexus eval-server # default port 4848, binds 127.0.0.1
18
18
  * gitnexus eval-server --port 4848 # explicit port
19
- * gitnexus eval-server --host 0.0.0.0 # reachable from other VMs / containers
19
+ * GITNEXUS_AUTH_TOKEN=... gitnexus eval-server --host 0.0.0.0
20
+ * GITNEXUS_AUTH_TOKEN=... gitnexus eval-server --host devbox.local
20
21
  * gitnexus eval-server --idle-timeout 300 # auto-shutdown after 300s idle
21
22
  *
22
23
  * READY signal format: GITNEXUS_EVAL_SERVER_READY:<host>:<port>
@@ -42,6 +43,27 @@ export interface EvalServerOptions {
42
43
  * address (127.0.0.1 or ::1) at bind time rather than forcing IPv4.
43
44
  */
44
45
  export declare function validateHost(raw: string): string | null;
46
+ type EvalServerHostLookup = (hostname: string) => Promise<string>;
47
+ /** Resolve a DNS bind name once so validation and listen() use the same concrete address. */
48
+ export declare function resolveEvalServerBindHost(raw: string, resolveHostname?: EvalServerHostLookup): Promise<string | null>;
49
+ /** Resolve the bearer token from the shell, then .env.local, then .env. */
50
+ export declare function resolveEvalServerAuthToken(env: NodeJS.ProcessEnv, cwd?: string): string | undefined;
51
+ /** True only for literal loopback addresses; DNS names are resolved before this check. */
52
+ export declare function isEvalServerLoopbackHost(host: string): boolean;
53
+ /**
54
+ * Resolve the bearer token for a concrete bind host. An unreadable `.env` /
55
+ * `.env.local` only matters when the binding actually requires a token, so
56
+ * loopback binds degrade to a warning instead of refusing to start; any
57
+ * non-loopback bind keeps the fail-closed error.
58
+ */
59
+ export declare function resolveEvalServerAuthTokenForHost(host: string, env: NodeJS.ProcessEnv, cwd?: string): {
60
+ token?: string;
61
+ warning?: string;
62
+ };
63
+ /** Refuse exposure of the eval-server query surface without authentication. */
64
+ export declare function assertSecureEvalServerBinding(host: string, authToken: string | undefined): void;
65
+ /** Validate the exact Bearer header while keeping token comparison constant-time. */
66
+ export declare function isEvalServerBearerAuthorized(authorization: string | string[] | undefined, authToken: string | undefined): boolean;
45
67
  export declare function formatQueryResult(result: any): string;
46
68
  export declare function formatContextResult(result: any): string;
47
69
  export declare function formatImpactResult(result: any): string;