gitnexus 1.6.9 → 1.6.10-aptos.1

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 (540) hide show
  1. package/README.md +236 -53
  2. package/dist/_shared/graph/types.d.ts +67 -3
  3. package/dist/_shared/graph/types.d.ts.map +1 -1
  4. package/dist/_shared/index.d.ts +1 -0
  5. package/dist/_shared/index.d.ts.map +1 -1
  6. package/dist/_shared/index.js.map +1 -1
  7. package/dist/_shared/integrations/resilient-fetch.d.ts +3 -1
  8. package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
  9. package/dist/_shared/integrations/resilient-fetch.js +4 -3
  10. package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
  11. package/dist/_shared/language-detection.d.ts.map +1 -1
  12. package/dist/_shared/language-detection.js +2 -0
  13. package/dist/_shared/language-detection.js.map +1 -1
  14. package/dist/_shared/languages.d.ts +2 -0
  15. package/dist/_shared/languages.d.ts.map +1 -1
  16. package/dist/_shared/languages.js +2 -0
  17. package/dist/_shared/languages.js.map +1 -1
  18. package/dist/_shared/lbug/schema-constants.d.ts +2 -2
  19. package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
  20. package/dist/_shared/lbug/schema-constants.js +8 -0
  21. package/dist/_shared/lbug/schema-constants.js.map +1 -1
  22. package/dist/_shared/pipeline.d.ts +1 -1
  23. package/dist/_shared/pipeline.d.ts.map +1 -1
  24. package/dist/_shared/scope-resolution/callable-flow-site.d.ts +110 -0
  25. package/dist/_shared/scope-resolution/callable-flow-site.d.ts.map +1 -0
  26. package/dist/_shared/scope-resolution/callable-flow-site.js +11 -0
  27. package/dist/_shared/scope-resolution/callable-flow-site.js.map +1 -0
  28. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +1 -1
  29. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
  30. package/dist/_shared/scope-resolution/finalize-algorithm.js +1 -1
  31. package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
  32. package/dist/_shared/scope-resolution/language-classification.d.ts.map +1 -1
  33. package/dist/_shared/scope-resolution/language-classification.js +1 -0
  34. package/dist/_shared/scope-resolution/language-classification.js.map +1 -1
  35. package/dist/_shared/scope-resolution/parsed-file.d.ts +7 -0
  36. package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
  37. package/dist/_shared/scope-resolution/reference-site.d.ts +9 -1
  38. package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
  39. package/dist/_shared/scope-resolution/types.d.ts +20 -3
  40. package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
  41. package/dist/cli/ai-context.d.ts +1 -1
  42. package/dist/cli/ai-context.js +25 -44
  43. package/dist/cli/analyze.d.ts +5 -2
  44. package/dist/cli/analyze.js +205 -11
  45. package/dist/cli/clean.js +17 -3
  46. package/dist/cli/cli-message.d.ts +1 -1
  47. package/dist/cli/doctor.d.ts +18 -0
  48. package/dist/cli/doctor.js +96 -5
  49. package/dist/cli/editor-targets.d.ts +17 -2
  50. package/dist/cli/editor-targets.js +44 -0
  51. package/dist/cli/embeddings.d.ts +12 -0
  52. package/dist/cli/embeddings.js +49 -0
  53. package/dist/cli/eval-server.d.ts +23 -1
  54. package/dist/cli/eval-server.js +126 -8
  55. package/dist/cli/help-i18n.js +6 -0
  56. package/dist/cli/i18n/en.d.ts +18 -8
  57. package/dist/cli/i18n/en.js +18 -8
  58. package/dist/cli/i18n/resources.d.ts +28 -8
  59. package/dist/cli/i18n/zh-CN.d.ts +10 -0
  60. package/dist/cli/i18n/zh-CN.js +18 -8
  61. package/dist/cli/index.js +21 -7
  62. package/dist/cli/lazy-action.d.ts +7 -0
  63. package/dist/cli/lazy-action.js +27 -0
  64. package/dist/cli/mcp.js +6 -3
  65. package/dist/cli/move-availability.d.ts +5 -0
  66. package/dist/cli/move-availability.js +11 -0
  67. package/dist/cli/setup.d.ts +8 -0
  68. package/dist/cli/setup.js +230 -32
  69. package/dist/cli/skill-gen.js +38 -18
  70. package/dist/cli/standard-skills.d.ts +76 -0
  71. package/dist/cli/standard-skills.js +45 -0
  72. package/dist/cli/status.d.ts +4 -1
  73. package/dist/cli/status.js +57 -4
  74. package/dist/cli/tool.js +11 -0
  75. package/dist/cli/uninstall.js +77 -18
  76. package/dist/cli/wiki.d.ts +1 -0
  77. package/dist/cli/wiki.js +7 -1
  78. package/dist/config/ignore-service.d.ts +2 -0
  79. package/dist/config/ignore-service.js +27 -0
  80. package/dist/core/analysis-features.d.ts +21 -0
  81. package/dist/core/analysis-features.js +59 -0
  82. package/dist/core/analyzer-identity.d.ts +74 -0
  83. package/dist/core/analyzer-identity.js +1820 -0
  84. package/dist/core/augmentation/engine.js +13 -8
  85. package/dist/core/embeddings/embedder.d.ts +3 -2
  86. package/dist/core/embeddings/embedder.js +24 -7
  87. package/dist/core/embeddings/embedding-identity.d.ts +11 -0
  88. package/dist/core/embeddings/embedding-identity.js +24 -0
  89. package/dist/core/embeddings/embedding-pipeline.d.ts +36 -1
  90. package/dist/core/embeddings/embedding-pipeline.js +100 -9
  91. package/dist/core/embeddings/http-client.d.ts +33 -3
  92. package/dist/core/embeddings/http-client.js +237 -25
  93. package/dist/core/embeddings/node-module-compat.d.ts +25 -0
  94. package/dist/core/embeddings/node-module-compat.js +25 -0
  95. package/dist/core/embeddings/onnxruntime-common-resolver.js +8 -5
  96. package/dist/core/embeddings/onnxruntime-node-resolver.js +33 -7
  97. package/dist/core/embeddings/runtime-install.d.ts +119 -0
  98. package/dist/core/embeddings/runtime-install.js +372 -0
  99. package/dist/core/embeddings/runtime-support.d.ts +48 -17
  100. package/dist/core/embeddings/runtime-support.js +96 -0
  101. package/dist/core/git-staleness.js +1 -1
  102. package/dist/core/group/bridge-db.js +2 -0
  103. package/dist/core/group/extractors/http-patterns/python.js +246 -108
  104. package/dist/core/group/extractors/manifest-extractor.js +4 -0
  105. package/dist/core/incremental/escalation-gate.d.ts +38 -0
  106. package/dist/core/incremental/escalation-gate.js +48 -0
  107. package/dist/core/incremental/shadow-candidates.d.ts +3 -3
  108. package/dist/core/incremental/shadow-candidates.js +3 -3
  109. package/dist/core/incremental/subgraph-extract.d.ts +2 -2
  110. package/dist/core/incremental/subgraph-extract.js +2 -2
  111. package/dist/core/index-freshness.d.ts +5 -0
  112. package/dist/core/index-freshness.js +13 -0
  113. package/dist/core/ingestion/class-extractors/configs/jvm.js +29 -0
  114. package/dist/core/ingestion/cobol/cobol-preprocessor.js +1 -1
  115. package/dist/core/ingestion/cobol/jcl-processor.js +9 -8
  116. package/dist/core/ingestion/cobol-processor.js +27 -26
  117. package/dist/core/ingestion/community-processor.d.ts +51 -1
  118. package/dist/core/ingestion/community-processor.js +323 -64
  119. package/dist/core/ingestion/emit-references.js +7 -2
  120. package/dist/core/ingestion/filesystem-walker.js +4 -0
  121. package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +3 -0
  122. package/dist/core/ingestion/frameworks/spring/analysis-features.js +7 -0
  123. package/dist/core/ingestion/frameworks/spring/bean-candidates.d.ts +30 -0
  124. package/dist/core/ingestion/frameworks/spring/bean-candidates.js +182 -0
  125. package/dist/core/ingestion/frameworks/spring/bean-catalog.d.ts +12 -0
  126. package/dist/core/ingestion/frameworks/spring/bean-catalog.js +26 -0
  127. package/dist/core/ingestion/frameworks/spring/config-bindings.d.ts +24 -0
  128. package/dist/core/ingestion/frameworks/spring/config-bindings.js +115 -0
  129. package/dist/core/ingestion/languages/c/captures.js +56 -0
  130. package/dist/core/ingestion/languages/c/query.js +17 -0
  131. package/dist/core/ingestion/languages/c/scope-resolver.js +6 -0
  132. package/dist/core/ingestion/languages/cobol/captures.js +93 -0
  133. package/dist/core/ingestion/languages/cobol/scope-resolver.js +7 -0
  134. package/dist/core/ingestion/languages/cpp/captures.js +365 -75
  135. package/dist/core/ingestion/languages/cpp/scope-resolver.js +14 -0
  136. package/dist/core/ingestion/languages/csharp/captures.js +25 -0
  137. package/dist/core/ingestion/languages/dart/captures.js +90 -2
  138. package/dist/core/ingestion/languages/dart/extension-type-preprocess.d.ts +7 -0
  139. package/dist/core/ingestion/languages/dart/extension-type-preprocess.js +30 -0
  140. package/dist/core/ingestion/languages/dart.js +2 -0
  141. package/dist/core/ingestion/languages/go/captures.js +34 -0
  142. package/dist/core/ingestion/languages/index.d.ts +1 -0
  143. package/dist/core/ingestion/languages/index.js +2 -0
  144. package/dist/core/ingestion/languages/java/analysis-features.d.ts +3 -0
  145. package/dist/core/ingestion/languages/java/analysis-features.js +13 -0
  146. package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +22 -0
  147. package/dist/core/ingestion/languages/java/capture-side-channel.js +58 -0
  148. package/dist/core/ingestion/languages/java/captures.d.ts +4 -3
  149. package/dist/core/ingestion/languages/java/captures.js +193 -17
  150. package/dist/core/ingestion/languages/java/package-facts.d.ts +5 -0
  151. package/dist/core/ingestion/languages/java/package-facts.js +9 -0
  152. package/dist/core/ingestion/languages/java/package-siblings.d.ts +3 -16
  153. package/dist/core/ingestion/languages/java/package-siblings.js +8 -147
  154. package/dist/core/ingestion/languages/java/query.js +23 -0
  155. package/dist/core/ingestion/languages/java/scope-resolver.js +23 -0
  156. package/dist/core/ingestion/languages/java/spring-bean-metadata.d.ts +2 -0
  157. package/dist/core/ingestion/languages/java/spring-bean-metadata.js +8 -0
  158. package/dist/core/ingestion/languages/java/spring-config-bindings.d.ts +23 -0
  159. package/dist/core/ingestion/languages/java/spring-config-bindings.js +215 -0
  160. package/dist/core/ingestion/languages/java.js +3 -0
  161. package/dist/core/ingestion/languages/javascript/captures.js +16 -0
  162. package/dist/core/ingestion/languages/javascript/query.js +21 -0
  163. package/dist/core/ingestion/languages/jvm/package-facts.d.ts +35 -0
  164. package/dist/core/ingestion/languages/jvm/package-facts.js +40 -0
  165. package/dist/core/ingestion/languages/jvm/package-siblings.d.ts +14 -0
  166. package/dist/core/ingestion/languages/jvm/package-siblings.js +129 -0
  167. package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +17 -3
  168. package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +42 -8
  169. package/dist/core/ingestion/languages/kotlin/captures.js +59 -0
  170. package/dist/core/ingestion/languages/kotlin/package-facts.d.ts +5 -0
  171. package/dist/core/ingestion/languages/kotlin/package-facts.js +9 -0
  172. package/dist/core/ingestion/languages/kotlin/package-siblings.d.ts +4 -0
  173. package/dist/core/ingestion/languages/kotlin/package-siblings.js +8 -0
  174. package/dist/core/ingestion/languages/kotlin/query.js +19 -0
  175. package/dist/core/ingestion/languages/kotlin/scope-resolver.js +9 -1
  176. package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.d.ts +2 -0
  177. package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.js +8 -0
  178. package/dist/core/ingestion/languages/kotlin.js +5 -6
  179. package/dist/core/ingestion/languages/move.d.ts +1 -0
  180. package/dist/core/ingestion/languages/move.js +27 -0
  181. package/dist/core/ingestion/languages/php/captures.js +40 -0
  182. package/dist/core/ingestion/languages/php/import-decomposer.js +12 -0
  183. package/dist/core/ingestion/languages/php/import-target.d.ts +2 -1
  184. package/dist/core/ingestion/languages/php/import-target.js +110 -2
  185. package/dist/core/ingestion/languages/php/interpret.js +10 -0
  186. package/dist/core/ingestion/languages/php/scope-resolver.js +1 -1
  187. package/dist/core/ingestion/languages/python/captures.d.ts +3 -4
  188. package/dist/core/ingestion/languages/python/captures.js +24 -5
  189. package/dist/core/ingestion/languages/python/interpret.js +4 -0
  190. package/dist/core/ingestion/languages/python/receiver-binding.d.ts +15 -2
  191. package/dist/core/ingestion/languages/python/receiver-binding.js +96 -2
  192. package/dist/core/ingestion/languages/python/simple-hooks.d.ts +5 -5
  193. package/dist/core/ingestion/languages/python/simple-hooks.js +15 -5
  194. package/dist/core/ingestion/languages/ruby/captures.js +42 -0
  195. package/dist/core/ingestion/languages/rust/captures.js +13 -0
  196. package/dist/core/ingestion/languages/rust/interpret.js +18 -0
  197. package/dist/core/ingestion/languages/rust/query.js +9 -0
  198. package/dist/core/ingestion/languages/rust/range-binding.js +6 -2
  199. package/dist/core/ingestion/languages/swift/captures.js +12 -0
  200. package/dist/core/ingestion/languages/typescript/captures.js +21 -0
  201. package/dist/core/ingestion/languages/typescript/nuxt-auto-imports.js +2 -1
  202. package/dist/core/ingestion/languages/typescript/query.js +37 -0
  203. package/dist/core/ingestion/markdown-processor.js +3 -2
  204. package/dist/core/ingestion/model/registration-table.js +1 -0
  205. package/dist/core/ingestion/parsing-processor.d.ts +3 -1
  206. package/dist/core/ingestion/parsing-processor.js +36 -1
  207. package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
  208. package/dist/core/ingestion/pipeline-phases/index.js +2 -0
  209. package/dist/core/ingestion/pipeline-phases/parse-impl.js +56 -2
  210. package/dist/core/ingestion/pipeline-phases/parse.d.ts +0 -2
  211. package/dist/core/ingestion/pipeline-phases/parse.js +12 -3
  212. package/dist/core/ingestion/pipeline-phases/processes.d.ts +8 -0
  213. package/dist/core/ingestion/pipeline-phases/processes.js +11 -1
  214. package/dist/core/ingestion/pipeline-phases/spring-config.d.ts +37 -0
  215. package/dist/core/ingestion/pipeline-phases/spring-config.js +433 -0
  216. package/dist/core/ingestion/pipeline-phases/standalone-ingest.d.ts +16 -0
  217. package/dist/core/ingestion/pipeline-phases/standalone-ingest.js +6 -0
  218. package/dist/core/ingestion/pipeline.d.ts +4 -2
  219. package/dist/core/ingestion/pipeline.js +14 -2
  220. package/dist/core/ingestion/resolve-references.js +12 -0
  221. package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +83 -0
  222. package/dist/core/ingestion/route-extractors/constant-resolver.js +131 -0
  223. package/dist/core/ingestion/route-extractors/python-const-resolver.d.ts +75 -0
  224. package/dist/core/ingestion/route-extractors/python-const-resolver.js +299 -0
  225. package/dist/core/ingestion/scope-extractor.js +306 -43
  226. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +71 -2
  227. package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +7 -7
  228. package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +8 -7
  229. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +3 -1
  230. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +6 -0
  231. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +1 -0
  232. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +4 -1
  233. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +7 -2
  234. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +47 -0
  235. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +1138 -0
  236. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +16 -4
  237. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +97 -1
  238. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +60 -0
  239. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +111 -0
  240. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +4 -3
  241. package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +5 -0
  242. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +25 -38
  243. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +6 -0
  244. package/dist/core/ingestion/scope-resolution/pipeline/run.js +147 -35
  245. package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +1 -1
  246. package/dist/core/ingestion/scope-resolution/scope/walkers.js +73 -44
  247. package/dist/core/ingestion/taint/typescript-model.js +34 -2
  248. package/dist/core/ingestion/tree-sitter-queries.d.ts +2 -2
  249. package/dist/core/ingestion/tree-sitter-queries.js +23 -2
  250. package/dist/core/ingestion/type-extractors/jvm.js +17 -2
  251. package/dist/core/ingestion/utils/ast-helpers.d.ts +1 -0
  252. package/dist/core/ingestion/utils/ast-helpers.js +153 -2
  253. package/dist/core/ingestion/utils/callable-flow-captures.d.ts +94 -0
  254. package/dist/core/ingestion/utils/callable-flow-captures.js +878 -0
  255. package/dist/core/ingestion/utils/line-base.d.ts +20 -0
  256. package/dist/core/ingestion/utils/line-base.js +20 -0
  257. package/dist/core/ingestion/utils/symbol-labels.d.ts +21 -0
  258. package/dist/core/ingestion/utils/symbol-labels.js +45 -0
  259. package/dist/core/ingestion/workers/parse-worker.d.ts +34 -0
  260. package/dist/core/ingestion/workers/parse-worker.js +40 -5
  261. package/dist/core/ingestion/workers/result-merge.js +4 -0
  262. package/dist/core/ingestion/workers/worker-pool.d.ts +28 -0
  263. package/dist/core/ingestion/workers/worker-pool.js +128 -28
  264. package/dist/core/lbug/csv-generator.d.ts +15 -0
  265. package/dist/core/lbug/csv-generator.js +124 -27
  266. package/dist/core/lbug/cypher-escape.d.ts +20 -0
  267. package/dist/core/lbug/cypher-escape.js +20 -0
  268. package/dist/core/lbug/extension-load-error.d.ts +67 -0
  269. package/dist/core/lbug/extension-load-error.js +326 -0
  270. package/dist/core/lbug/extension-loader.d.ts +17 -2
  271. package/dist/core/lbug/extension-loader.js +38 -13
  272. package/dist/core/lbug/lbug-adapter.d.ts +203 -2
  273. package/dist/core/lbug/lbug-adapter.js +527 -86
  274. package/dist/core/lbug/lbug-config.d.ts +56 -2
  275. package/dist/core/lbug/lbug-config.js +267 -7
  276. package/dist/core/lbug/move-columns.d.ts +7 -0
  277. package/dist/core/lbug/move-columns.js +86 -0
  278. package/dist/core/lbug/native-check.d.ts +40 -0
  279. package/dist/core/lbug/native-check.js +90 -0
  280. package/dist/core/lbug/node-table-layout.d.ts +29 -0
  281. package/dist/core/lbug/node-table-layout.js +119 -0
  282. package/dist/core/lbug/pool-adapter.d.ts +23 -1
  283. package/dist/core/lbug/pool-adapter.js +115 -8
  284. package/dist/core/lbug/schema.d.ts +4 -3
  285. package/dist/core/lbug/schema.js +16 -16
  286. package/dist/core/lbug/sidecar-recovery.d.ts +172 -0
  287. package/dist/core/lbug/sidecar-recovery.js +418 -16
  288. package/dist/core/lbug/wal-checkpoint-driver.js +3 -0
  289. package/dist/core/move/artifact-download.d.ts +19 -0
  290. package/dist/core/move/artifact-download.js +179 -0
  291. package/dist/core/move/compiler-facts.d.ts +120 -0
  292. package/dist/core/move/compiler-facts.js +9 -0
  293. package/dist/core/move/consistency.d.ts +74 -0
  294. package/dist/core/move/consistency.js +182 -0
  295. package/dist/core/move/constants.d.ts +98 -0
  296. package/dist/core/move/constants.js +136 -0
  297. package/dist/core/move/discovery.d.ts +10 -0
  298. package/dist/core/move/discovery.js +22 -0
  299. package/dist/core/move/entry-points.d.ts +14 -0
  300. package/dist/core/move/entry-points.js +40 -0
  301. package/dist/core/move/facts-mapper.d.ts +75 -0
  302. package/dist/core/move/facts-mapper.js +534 -0
  303. package/dist/core/move/install-lock.d.ts +14 -0
  304. package/dist/core/move/install-lock.js +102 -0
  305. package/dist/core/move/install.d.ts +39 -0
  306. package/dist/core/move/install.js +391 -0
  307. package/dist/core/move/mcp-client.d.ts +115 -0
  308. package/dist/core/move/mcp-client.js +436 -0
  309. package/dist/core/move/move-ingest.d.ts +52 -0
  310. package/dist/core/move/move-ingest.js +403 -0
  311. package/dist/core/move/provision.d.ts +19 -0
  312. package/dist/core/move/provision.js +91 -0
  313. package/dist/core/move/release.d.ts +6 -0
  314. package/dist/core/move/release.js +10 -0
  315. package/dist/core/move/symbol-id.d.ts +35 -0
  316. package/dist/core/move/symbol-id.js +65 -0
  317. package/dist/core/move/type-parser.d.ts +11 -0
  318. package/dist/core/move/type-parser.js +38 -0
  319. package/dist/core/platform/capabilities.d.ts +0 -1
  320. package/dist/core/platform/capabilities.js +39 -8
  321. package/dist/core/run-analyze.d.ts +9 -3
  322. package/dist/core/run-analyze.js +1002 -184
  323. package/dist/core/search/fts-indexes.d.ts +31 -0
  324. package/dist/core/search/fts-indexes.js +73 -0
  325. package/dist/core/search/fts-schema.js +2 -0
  326. package/dist/core/tree-sitter/safe-parse.d.ts +8 -3
  327. package/dist/core/tree-sitter/safe-parse.js +21 -7
  328. package/dist/core/wiki/graph-queries.js +6 -5
  329. package/dist/core/wiki/llm-client.d.ts +8 -2
  330. package/dist/core/wiki/llm-client.js +41 -5
  331. package/dist/mcp/core/embedder.js +16 -2
  332. package/dist/mcp/http-transport.d.ts +5 -0
  333. package/dist/mcp/http-transport.js +19 -5
  334. package/dist/mcp/local/bean-metadata.d.ts +2 -0
  335. package/dist/mcp/local/bean-metadata.js +25 -0
  336. package/dist/mcp/local/line-display.d.ts +22 -0
  337. package/dist/mcp/local/line-display.js +3 -0
  338. package/dist/mcp/local/local-backend.d.ts +19 -1
  339. package/dist/mcp/local/local-backend.js +402 -155
  340. package/dist/mcp/local/pdg-impact.d.ts +5 -3
  341. package/dist/mcp/local/pdg-impact.js +5 -2
  342. package/dist/mcp/output-budget.d.ts +5 -0
  343. package/dist/mcp/output-budget.js +52 -0
  344. package/dist/mcp/read-only-policy.d.ts +12 -0
  345. package/dist/mcp/read-only-policy.js +102 -0
  346. package/dist/mcp/repository-policy.d.ts +34 -0
  347. package/dist/mcp/repository-policy.js +328 -0
  348. package/dist/mcp/resources.js +32 -5
  349. package/dist/mcp/server.d.ts +5 -2
  350. package/dist/mcp/server.js +29 -9
  351. package/dist/mcp/tools.d.ts +0 -8
  352. package/dist/mcp/tools.js +102 -5
  353. package/dist/server/analyze-job.d.ts +3 -0
  354. package/dist/server/analyze-job.js +17 -0
  355. package/dist/server/analyze-launch.d.ts +6 -0
  356. package/dist/server/analyze-launch.js +82 -6
  357. package/dist/server/analyze-worker-core.d.ts +2 -1
  358. package/dist/server/analyze-worker-core.js +5 -2
  359. package/dist/server/analyze-worker.js +29 -6
  360. package/dist/server/api.d.ts +30 -0
  361. package/dist/server/api.js +120 -34
  362. package/dist/server/mcp-http.d.ts +1 -1
  363. package/dist/server/mcp-http.js +4 -2
  364. package/dist/server/upload-ingest.js +2 -1
  365. package/dist/server/validation.js +2 -1
  366. package/dist/storage/git.d.ts +31 -0
  367. package/dist/storage/git.js +111 -1
  368. package/dist/storage/parse-cache.js +7 -1
  369. package/dist/storage/parsedfile-store.d.ts +8 -0
  370. package/dist/storage/parsedfile-store.js +165 -1
  371. package/dist/storage/repo-manager.d.ts +194 -2
  372. package/dist/storage/repo-manager.js +56 -1
  373. package/dist/types/pipeline.d.ts +7 -0
  374. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +50 -3
  375. package/hooks/claude/gitnexus-hook.cjs +59 -9
  376. package/hooks/claude/pre-tool-use.sh +0 -0
  377. package/hooks/claude/session-start.sh +0 -0
  378. package/package.json +21 -15
  379. package/scripts/cross-platform-tests.ts +56 -0
  380. package/scripts/ensure-fts.ts +43 -0
  381. package/scripts/install-duckdb-extension.mjs +85 -24
  382. package/scripts/run-cross-platform.ts +61 -6
  383. package/scripts/shard-arg.ts +30 -0
  384. package/scripts/sync-plugin-manifests.mjs +192 -0
  385. package/skills/gitnexus-lfg/README.md +55 -0
  386. package/skills/gitnexus-lfg/SKILL.md +86 -0
  387. package/skills/gitnexus-plan/README.md +142 -0
  388. package/skills/gitnexus-plan/SKILL.md +348 -0
  389. package/skills/gitnexus-plan/references/context-ledger.md +137 -0
  390. package/skills/gitnexus-plan/references/context-pack.md +126 -0
  391. package/skills/gitnexus-plan/references/evidence-provenance.md +272 -0
  392. package/skills/gitnexus-plan/references/pdg-slice.md +109 -0
  393. package/skills/gitnexus-plan/references/plan-template.md +201 -0
  394. package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +2084 -0
  395. package/skills/gitnexus-review/SKILL.md +273 -0
  396. package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +42 -0
  397. package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +39 -0
  398. package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +37 -0
  399. package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +40 -0
  400. package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +42 -0
  401. package/skills/gitnexus-review/ci-personas/ci-security-lens.md +39 -0
  402. package/skills/gitnexus-work/README.md +71 -0
  403. package/skills/gitnexus-work/SKILL.md +269 -0
  404. package/skills/gitnexus-work/references/evidence-provenance.md +272 -0
  405. package/skills/gitnexus-work/scripts/evidence-provenance.mjs +2084 -0
  406. package/web/assets/ProcessFlowModal-B_bfBySy.js +22 -0
  407. package/web/assets/__vite-browser-external-bMKyYQkO.js +1 -0
  408. package/web/assets/agent-Bqxn-abU.js +626 -0
  409. package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +1 -0
  410. package/web/assets/architectureDiagram-UL44E2DR-CmG3uPWf.js +36 -0
  411. package/web/assets/{blockDiagram-7IZFK4PR-BkWhpzWB.js → blockDiagram-7IZFK4PR-DBefcjof.js} +7 -7
  412. package/web/assets/{c4Diagram-Y2BXMSZH-DtBvpzWD.js → c4Diagram-Y2BXMSZH-EjWnjEJl.js} +6 -6
  413. package/web/assets/chunk-2T2R6R2M-Bb6Sy3_j.js +4 -0
  414. package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +1 -0
  415. package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +321 -0
  416. package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +159 -0
  417. package/web/assets/{chunk-6764PJDD-DpIS7hxD.js → chunk-6764PJDD-C7xxk063.js} +1 -1
  418. package/web/assets/chunk-67TQ5CYL-CA7OhIEf.js +124 -0
  419. package/web/assets/chunk-7FYTHRHK-CsmYIswB.js +32 -0
  420. package/web/assets/chunk-7J6CGLKN-BlKwgXKs.js +10 -0
  421. package/web/assets/chunk-7W6UQGC5-pyKGssV3.js +1 -0
  422. package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +1 -0
  423. package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +1 -0
  424. package/web/assets/{chunk-INKRHTLW-Nu4ri9P-.js → chunk-INKRHTLW-Ckl3_KkO.js} +13 -13
  425. package/web/assets/chunk-J5EP6P6S-L19oz55R.js +1 -0
  426. package/web/assets/{chunk-KGFNY3KK-JGMJvKCK.js → chunk-KGFNY3KK-BZeP-55u.js} +17 -17
  427. package/web/assets/chunk-KGYTTC2M-zm6n242I.js +1 -0
  428. package/web/assets/{chunk-KRXBNO2N-BW5o0KUN.js → chunk-KRXBNO2N-C-UNuKKf.js} +1 -1
  429. package/web/assets/{chunk-LCXTWHL2-CfLLCywY.js → chunk-LCXTWHL2-C162wE5z.js} +5 -5
  430. package/web/assets/chunk-LII3EMHJ-BL6lKJ_P.js +1 -0
  431. package/web/assets/chunk-LRIF4GLE-n59lhprL.js +1 -0
  432. package/web/assets/chunk-QA3QBVWF-DVXPOIxe.js +2 -0
  433. package/web/assets/chunk-RERM46MO-B5dAdWpP.js +1 -0
  434. package/web/assets/chunk-RG4AUYOV-ZNgyLFq6.js +206 -0
  435. package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +1 -0
  436. package/web/assets/chunk-RLI5ZMPA-CkXZ0y0U.js +1 -0
  437. package/web/assets/chunk-T2UQINTJ-BEyXhZWe.js +1 -0
  438. package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +1 -0
  439. package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +1 -0
  440. package/web/assets/chunk-UY5QBCOK-ByqTVLvh.js +1 -0
  441. package/web/assets/chunk-VU6ZFW4Y-BLeasdkU.js +2 -0
  442. package/web/assets/{chunk-W44A43WB-JqMLIpR0.js → chunk-W44A43WB-BN8EQc_u.js} +1 -1
  443. package/web/assets/chunk-ZXARS5L4-C3v-4Fsw.js +1 -0
  444. package/web/assets/classDiagram-KGZ6W3CR-olpO3fMe.js +1 -0
  445. package/web/assets/classDiagram-v2-72OJOZXJ-olpO3fMe.js +1 -0
  446. package/web/assets/cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js +1 -0
  447. package/web/assets/dagre-ND4H6XIP-CY4iIF7v.js +4 -0
  448. package/web/assets/diagram-3NCE3AQN-CO6QpzEE.js +43 -0
  449. package/web/assets/diagram-GF46GFSD-B2atbzmU.js +24 -0
  450. package/web/assets/diagram-HNR7UZ2L-DVRltWbL.js +3 -0
  451. package/web/assets/diagram-QXG6HAR7-DR6AHD2h.js +24 -0
  452. package/web/assets/diagram-WEQXMOUZ-DkpoMwTL.js +10 -0
  453. package/web/assets/erDiagram-L5TCEMPS-n8g_90bc.js +85 -0
  454. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +1 -0
  455. package/web/assets/flowDiagram-H6V6AXG4-SGMDiCkB.js +162 -0
  456. package/web/assets/ganttDiagram-JCBTUEKG-Cb3UBqRS.js +292 -0
  457. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +1 -0
  458. package/web/assets/gitGraphDiagram-S2ZK5IYY-Bs9CR7tq.js +106 -0
  459. package/web/assets/index-CX_fADmQ.css +2 -0
  460. package/web/assets/index-D1Z3dGGz.js +575 -0
  461. package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +1 -0
  462. package/web/assets/infoDiagram-3YFTVSEB-T368on4D.js +2 -0
  463. package/web/assets/{ishikawaDiagram-BNXS4ZKH-DfYpxnE5.js → ishikawaDiagram-BNXS4ZKH-XpjJRU9h.js} +6 -6
  464. package/web/assets/journeyDiagram-M6C3CM3L-C6wjooas.js +139 -0
  465. package/web/assets/kanban-definition-75IXJCU3-5_UVY79g.js +89 -0
  466. package/web/assets/{katex-K3KEBU37-CTc5BslQ.js → katex-K3KEBU37-qRQBy-EZ.js} +2 -2
  467. package/web/assets/{mindmap-definition-2TDM6QVE-DypvbOMQ.js → mindmap-definition-2TDM6QVE-8xDLzk2e.js} +29 -29
  468. package/web/assets/node-Ct_zna8U.js +8 -0
  469. package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +1 -0
  470. package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +1 -0
  471. package/web/assets/pieDiagram-CU6KROY3-Bv4LpAbr.js +30 -0
  472. package/web/assets/preload-helper-Czpn1I53.js +1 -0
  473. package/web/assets/{quadrantDiagram-VICAPDV7-yXSZ2lLz.js → quadrantDiagram-VICAPDV7-DR54jOeR.js} +6 -6
  474. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +1 -0
  475. package/web/assets/requirementDiagram-JXO7QTGE-PEkg7sKC.js +84 -0
  476. package/web/assets/rolldown-runtime-QTnfLwEv.js +1 -0
  477. package/web/assets/sankeyDiagram-URQDO5SZ-DDWEtjcs.js +40 -0
  478. package/web/assets/sdk-CzHHH8tD.js +37 -0
  479. package/web/assets/sequenceDiagram-VS2MUI6T-Bv-uwANx.js +162 -0
  480. package/web/assets/src-JV30wyV8.js +1 -0
  481. package/web/assets/stateDiagram-7D4R322I-DVNjmkEq.js +1 -0
  482. package/web/assets/stateDiagram-v2-36443NZ5-CyN4Fh7_.js +1 -0
  483. package/web/assets/timeline-definition-O6YCAMPW-Qmsuo7qS.js +120 -0
  484. package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +1 -0
  485. package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +1 -0
  486. package/web/assets/vennDiagram-MWXL3ELB-BD1iK1SX.js +34 -0
  487. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +1 -0
  488. package/web/assets/wardleyDiagram-CUQ6CDDI-D6TzLVob.js +78 -0
  489. package/web/assets/{xychartDiagram-N2JHSOCM-BOLm0eNm.js → xychartDiagram-N2JHSOCM-CoZ_Tits.js} +6 -6
  490. package/web/index.html +18 -10
  491. package/skills/gitnexus-pr-review.md +0 -163
  492. package/web/assets/agent-Dli_x7bU.js +0 -660
  493. package/web/assets/architecture-7EHR7CIX-6QZW5X65-DxJw65fT.js +0 -1
  494. package/web/assets/architectureDiagram-UL44E2DR-dEkqUZN9.js +0 -36
  495. package/web/assets/chunk-3SSMPTDK-B4_etUhr.js +0 -321
  496. package/web/assets/chunk-67TQ5CYL-4sNPJU1q.js +0 -124
  497. package/web/assets/chunk-7W6UQGC5-KyEG0HQg.js +0 -1
  498. package/web/assets/chunk-KGYTTC2M-CWC_c3H9.js +0 -161
  499. package/web/assets/chunk-LII3EMHJ-D-jm-dLa.js +0 -1
  500. package/web/assets/chunk-QA3QBVWF-BgRW3SXd.js +0 -2
  501. package/web/assets/chunk-RG4AUYOV-CqWzWsV3.js +0 -206
  502. package/web/assets/chunk-T2UQINTJ-DSBqkzH7.js +0 -1
  503. package/web/assets/chunk-UY5QBCOK-DyF0vyGd.js +0 -1
  504. package/web/assets/chunk-ZXARS5L4-CxN8oiwI.js +0 -1
  505. package/web/assets/classDiagram-KGZ6W3CR-CMne4tG9.js +0 -1
  506. package/web/assets/classDiagram-v2-72OJOZXJ-CMne4tG9.js +0 -1
  507. package/web/assets/cose-bilkent-UX7MHV2Q-D71wNYRJ.js +0 -1
  508. package/web/assets/dagre-ND4H6XIP-Co5rRx9X.js +0 -4
  509. package/web/assets/diagram-3NCE3AQN-DBp4O00j.js +0 -43
  510. package/web/assets/diagram-GF46GFSD-6N_8yS0i.js +0 -24
  511. package/web/assets/diagram-HNR7UZ2L-DFCfd5LI.js +0 -3
  512. package/web/assets/diagram-QXG6HAR7-Di093rFg.js +0 -24
  513. package/web/assets/diagram-WEQXMOUZ-DZWi4SUN.js +0 -10
  514. package/web/assets/erDiagram-L5TCEMPS-8X1y6R4Y.js +0 -85
  515. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-BQm9QzEa.js +0 -1
  516. package/web/assets/flowDiagram-H6V6AXG4-CMpY8Ufn.js +0 -162
  517. package/web/assets/ganttDiagram-JCBTUEKG-D3iL2Aet.js +0 -292
  518. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-Cr_Bm2Nb.js +0 -1
  519. package/web/assets/gitGraphDiagram-S2ZK5IYY-CPIDgxGm.js +0 -106
  520. package/web/assets/index-KctnI3Vq.js +0 -635
  521. package/web/assets/index-_lgn7hs5.css +0 -2
  522. package/web/assets/info-J43DQDTF-KCYPFFUO-Cs4p2oyk.js +0 -1
  523. package/web/assets/infoDiagram-3YFTVSEB-BaLMZkUg.js +0 -2
  524. package/web/assets/journeyDiagram-M6C3CM3L-CvArszLo.js +0 -139
  525. package/web/assets/kanban-definition-75IXJCU3-CpfVLLf9.js +0 -89
  526. package/web/assets/packet-YPE3B663-LP52Z2RK-CKCrztD2.js +0 -1
  527. package/web/assets/pie-LRSECV5Y-TCRJHUBD-BB7pHqoD.js +0 -1
  528. package/web/assets/pieDiagram-CU6KROY3-s27EFWgP.js +0 -30
  529. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DhoTOcuK.js +0 -1
  530. package/web/assets/requirementDiagram-JXO7QTGE-CWhqInuf.js +0 -84
  531. package/web/assets/sankeyDiagram-URQDO5SZ-1qEjlFIB.js +0 -40
  532. package/web/assets/sequenceDiagram-VS2MUI6T-RyTlZ5cR.js +0 -162
  533. package/web/assets/stateDiagram-7D4R322I-DTjVfX4A.js +0 -1
  534. package/web/assets/stateDiagram-v2-36443NZ5-xY9_k9_Q.js +0 -1
  535. package/web/assets/timeline-definition-O6YCAMPW-DrrqLYAf.js +0 -120
  536. package/web/assets/treeView-BLDUP644-QA4HXRO3-ODehyGKL.js +0 -1
  537. package/web/assets/treemap-LRROVOQU-LLAWBHMP-BfpgC-7o.js +0 -1
  538. package/web/assets/vennDiagram-MWXL3ELB-B0RkWAim.js +0 -34
  539. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-CNeL6VHE.js +0 -1
  540. package/web/assets/wardleyDiagram-CUQ6CDDI-boUxiQ5F.js +0 -78
@@ -1,3 +1,4 @@
1
+ import { type ExtensionLoadDiagnosis } from './extension-load-error.js';
1
2
  /**
2
3
  * Lifecycle policy for an optional DuckDB extension.
3
4
  *
@@ -20,6 +21,12 @@ export interface ExtensionCapability {
20
21
  loaded: boolean;
21
22
  /** Human-readable reason when `loaded` is false. */
22
23
  reason?: string;
24
+ /**
25
+ * Classified diagnosis of `reason`, computed ONCE at mark-unavailable time so
26
+ * per-request surfaces (ftsDegradedWarning on /api/search + MCP query) read the
27
+ * cached remedy instead of re-inspecting the extension file on every call (#2383 F3).
28
+ */
29
+ diagnosis?: ExtensionLoadDiagnosis;
23
30
  }
24
31
  /** Per-call overrides applied on top of `ExtensionManager` defaults. */
25
32
  export interface ExtensionEnsureOptions {
@@ -29,7 +36,7 @@ export interface ExtensionEnsureOptions {
29
36
  export interface ExtensionManagerOptions {
30
37
  policy?: ExtensionInstallPolicy;
31
38
  installTimeoutMs?: number;
32
- installExtension?: (extensionName: string, timeoutMs: number) => Promise<ExtensionInstallResult>;
39
+ installExtension?: (extensionName: string, timeoutMs: number, loadError?: string) => Promise<ExtensionInstallResult>;
33
40
  warn?: (message: string) => void;
34
41
  }
35
42
  export declare const getExtensionInstallPolicy: () => ExtensionInstallPolicy;
@@ -58,7 +65,7 @@ export declare const getExtensionInstallChildProcessArgs: (extensionName: string
58
65
  * If the child exceeds `timeoutMs` the parent kills it with SIGKILL and
59
66
  * resolves with `timedOut: true`.
60
67
  */
61
- export declare const installDuckDbExtensionOutOfProcess: (extensionName: string, timeoutMs?: number) => Promise<ExtensionInstallResult>;
68
+ export declare const installDuckDbExtensionOutOfProcess: (extensionName: string, timeoutMs?: number, loadError?: string) => Promise<ExtensionInstallResult>;
62
69
  /**
63
70
  * Centralized lifecycle manager for optional LadybugDB extensions.
64
71
  *
@@ -90,6 +97,14 @@ export declare class ExtensionManager {
90
97
  * paths are expected to degrade gracefully.
91
98
  */
92
99
  ensure(query: (sql: string) => Promise<unknown>, name: string, label: string, opts?: ExtensionEnsureOptions): Promise<boolean>;
100
+ /**
101
+ * Attempt `LOAD EXTENSION <name>`; returns `null` on success and the
102
+ * collapsed error message on failure. The message is the load-side ground
103
+ * truth — LadybugDB distinguishes a missing extension file from a present
104
+ * but unloadable one (wrong platform, truncated download, version mismatch),
105
+ * and discarding it left users staring at "not pre-installed" when the file
106
+ * existed all along (#2374).
107
+ */
93
108
  private tryLoad;
94
109
  private markLoaded;
95
110
  private markUnavailable;
@@ -1,12 +1,15 @@
1
1
  import { spawn } from 'child_process';
2
2
  import { fileURLToPath } from 'node:url';
3
3
  import { LBUG_MAX_DB_SIZE } from './lbug-config.js';
4
+ import { diagnoseExtensionLoad } from './extension-load-error.js';
4
5
  import { logger } from '../logger.js';
5
6
  const DEFAULT_EXTENSION_INSTALL_TIMEOUT_MS = 15_000;
6
7
  const EXTENSION_NAME_PATTERN = /^[A-Za-z][A-Za-z0-9_]*$/;
7
8
  const alreadyAvailable = (message) => message.includes('already loaded') ||
8
9
  message.includes('already installed') ||
9
10
  message.includes('already exists');
11
+ /** LadybugDB errors are multi-line; collapse for single-line warn/reason strings. */
12
+ const oneLine = (value) => value.replace(/\s+/g, ' ').trim();
10
13
  const resolvePolicyFromEnv = () => {
11
14
  const raw = process.env.GITNEXUS_LBUG_EXTENSION_INSTALL;
12
15
  if (raw === 'load-only' || raw === 'never' || raw === 'auto')
@@ -51,7 +54,7 @@ export const getExtensionInstallChildProcessArgs = (extensionName, maxDbSize = L
51
54
  * If the child exceeds `timeoutMs` the parent kills it with SIGKILL and
52
55
  * resolves with `timedOut: true`.
53
56
  */
54
- export const installDuckDbExtensionOutOfProcess = async (extensionName, timeoutMs = getExtensionInstallTimeoutMs()) => {
57
+ export const installDuckDbExtensionOutOfProcess = async (extensionName, timeoutMs = getExtensionInstallTimeoutMs(), loadError) => {
55
58
  if (!EXTENSION_NAME_PATTERN.test(extensionName)) {
56
59
  throw new Error(`Invalid DuckDB extension name: ${extensionName}`);
57
60
  }
@@ -60,6 +63,9 @@ export const installDuckDbExtensionOutOfProcess = async (extensionName, timeoutM
60
63
  env: {
61
64
  ...process.env,
62
65
  GITNEXUS_LBUG_EXTENSION_NAME: extensionName,
66
+ // The child picks INSTALL vs FORCE INSTALL from this LOAD error so it
67
+ // only re-downloads when the on-disk extension file is actually broken.
68
+ ...(loadError ? { GITNEXUS_LBUG_EXTENSION_LOAD_ERROR: loadError } : {}),
63
69
  },
64
70
  stdio: ['ignore', 'ignore', 'pipe'],
65
71
  windowsHide: true,
@@ -78,7 +84,7 @@ export const installDuckDbExtensionOutOfProcess = async (extensionName, timeoutM
78
84
  resolve({
79
85
  success: false,
80
86
  timedOut: true,
81
- message: `INSTALL ${extensionName} timed out after ${timeoutMs}ms`,
87
+ message: `extension install for ${extensionName} timed out after ${timeoutMs}ms`,
82
88
  });
83
89
  }, timeoutMs);
84
90
  child.on('error', (err) => {
@@ -97,8 +103,8 @@ export const installDuckDbExtensionOutOfProcess = async (extensionName, timeoutM
97
103
  success: code === 0,
98
104
  timedOut: false,
99
105
  message: code === 0
100
- ? `INSTALL ${extensionName} completed`
101
- : `INSTALL ${extensionName} failed with ${signal ?? `exit code ${code}`}${stderr ? `: ${stderr.trim()}` : ''}`,
106
+ ? `extension install for ${extensionName} completed`
107
+ : `extension install for ${extensionName} failed with ${signal ?? `exit code ${code}`}${stderr ? `: ${stderr.trim()}` : ''}`,
102
108
  });
103
109
  });
104
110
  });
@@ -152,46 +158,65 @@ export class ExtensionManager {
152
158
  this.markUnavailable(name, label, 'extension install policy is "never"', warn);
153
159
  return false;
154
160
  }
155
- if (await this.tryLoad(query, name)) {
161
+ const loadError = await this.tryLoad(query, name);
162
+ if (loadError === null) {
156
163
  this.markLoaded(name);
157
164
  return true;
158
165
  }
159
166
  if (policy === 'load-only') {
160
- this.markUnavailable(name, label, 'load-only policy: extension not pre-installed', warn);
167
+ this.markUnavailable(name, label, `load-only policy (no install attempted); LOAD ${name} failed: ${loadError}`, warn);
161
168
  return false;
162
169
  }
163
170
  let install = this.installAttempted.get(name);
164
171
  if (!install) {
165
172
  const installFn = this.options.installExtension ?? installDuckDbExtensionOutOfProcess;
166
- install = await installFn(name, timeoutMs);
173
+ // Hand the child the LOAD error so it re-downloads (FORCE) only when the
174
+ // present extension file is provably broken, not on every LOAD failure.
175
+ install = await installFn(name, timeoutMs, loadError);
167
176
  this.installAttempted.set(name, install);
168
177
  }
169
178
  if (!install.success) {
170
- this.markUnavailable(name, label, install.message, warn);
179
+ this.markUnavailable(name, label, `${install.message}; LOAD ${name} had failed: ${loadError}`, warn);
171
180
  return false;
172
181
  }
173
- if (await this.tryLoad(query, name)) {
182
+ const retryError = await this.tryLoad(query, name);
183
+ if (retryError === null) {
174
184
  this.markLoaded(name);
175
185
  return true;
176
186
  }
177
- this.markUnavailable(name, label, `LOAD ${name} failed after successful INSTALL`, warn);
187
+ this.markUnavailable(name, label, `LOAD ${name} failed after successful INSTALL: ${retryError}`, warn);
178
188
  return false;
179
189
  }
190
+ /**
191
+ * Attempt `LOAD EXTENSION <name>`; returns `null` on success and the
192
+ * collapsed error message on failure. The message is the load-side ground
193
+ * truth — LadybugDB distinguishes a missing extension file from a present
194
+ * but unloadable one (wrong platform, truncated download, version mismatch),
195
+ * and discarding it left users staring at "not pre-installed" when the file
196
+ * existed all along (#2374).
197
+ */
180
198
  async tryLoad(query, name) {
181
199
  try {
182
200
  await query(`LOAD EXTENSION ${name}`);
183
- return true;
201
+ return null;
184
202
  }
185
203
  catch (err) {
186
204
  const msg = err instanceof Error ? err.message : String(err);
187
- return alreadyAvailable(msg);
205
+ return alreadyAvailable(msg) ? null : oneLine(msg);
188
206
  }
189
207
  }
190
208
  markLoaded(name) {
191
209
  this.capabilities.set(name, { name, loaded: true });
192
210
  }
193
211
  markUnavailable(name, label, reason, warn) {
194
- this.capabilities.set(name, { name, loaded: false, reason });
212
+ // Classify once here (the single load-failure sink, run per Database not per
213
+ // request) so the hot per-request warning path does no file I/O (#2383 F3).
214
+ this.capabilities.set(name, {
215
+ name,
216
+ loaded: false,
217
+ reason,
218
+ diagnosis: diagnoseExtensionLoad(reason, label),
219
+ });
195
220
  const key = `${name}:${reason}`;
196
221
  if (this.warnedKeys.has(key))
197
222
  return;
@@ -2,7 +2,7 @@ import lbug from '@ladybugdb/core';
2
2
  import { KnowledgeGraph } from '../graph/types.js';
3
3
  import { NodeTableName } from './schema.js';
4
4
  import type { PdgEmitManifest } from './pdg-emit-sink.js';
5
- import type { CachedEmbedding } from '../embeddings/types.js';
5
+ import { type CachedEmbedding } from '../embeddings/types.js';
6
6
  import { type ExtensionEnsureOptions } from './extension-loader.js';
7
7
  /** Result of splitting the relationship CSV into per-label-pair files. */
8
8
  export interface RelCsvSplitResult {
@@ -83,6 +83,21 @@ pdgEmitManifest?: PdgEmitManifest) => Promise<{
83
83
  warnings: string[];
84
84
  }>;
85
85
  export declare const COPY_CSV_OPTS = "(HEADER=true, ESCAPE='\"', DELIM=',', QUOTE='\"', PARALLEL=false, auto_detect=false)";
86
+ /**
87
+ * Fallback: insert relationships one-by-one if COPY fails.
88
+ *
89
+ * Exported for the quoted-id round-trip tests in
90
+ * `test/integration/lbug-core-adapter.test.ts` (the `DELETE_FILES_CHUNK_SIZE`
91
+ * exported-for-tests precedent); production callers stay in this module.
92
+ * Bails silently when the adapter singleton is closed.
93
+ *
94
+ * KNOWN PRE-EXISTING NARROWING (distinct from the `''` escaping bug, NOT
95
+ * fixed here): the row regex below matches CSV fields with `[^"]*`, so an id
96
+ * containing a double quote (CSV-escaped as `""`) never matches and the edge
97
+ * is skipped. Tracked as part of the quote-in-id divergence documented in
98
+ * `rel-pair-routing.ts`.
99
+ */
100
+ export declare const fallbackRelationshipInserts: (validRelLines: string[], validTables: Set<string>, getNodeLabel: (id: string) => string) => Promise<void>;
86
101
  export declare const getCopyQuery: (table: NodeTableName, filePath: string) => string;
87
102
  /**
88
103
  * Insert a single node to LadybugDB
@@ -198,6 +213,76 @@ export declare const safeClose: () => Promise<void>;
198
213
  */
199
214
  export declare const closeLbugBeforeExit: () => Promise<void>;
200
215
  export declare const closeLbug: () => Promise<void>;
216
+ /**
217
+ * Thrown by {@link wipeLbugDbFiles} when a data-bearing member of the
218
+ * LadybugDB file family is still present after the bounded
219
+ * remove-and-verify retries (#2409, tri-review 4669518496 P2-4), and by
220
+ * run-analyze's dirty-recovery block when the crashed run's sidecars can
221
+ * neither be parked nor removed (this shipping review, FIX 1 — same lock
222
+ * class, same remediation, and the CLI already renders this type).
223
+ *
224
+ * Classify by TYPE (`err instanceof LbugWipeError`) — the repo norm from
225
+ * #2385 — never by message text. The MESSAGE is nonetheless fully
226
+ * self-contained (headline + blocked paths + remediation) because
227
+ * `gitnexus serve` forwards only `err.message` over worker IPC
228
+ * (analyze-worker-core.ts), so the serve surface has nothing but this
229
+ * string to show the user. The holder framing deliberately covers the
230
+ * own-process case (FIX 2, finder A): the blocking handle is often a
231
+ * lingering one from THIS process's just-closed DB or a transient AV scan
232
+ * — not necessarily another process — so an immediate re-run often
233
+ * succeeds.
234
+ */
235
+ export declare class LbugWipeError extends Error {
236
+ /** Paths still present (or unverifiable) after all retries. */
237
+ readonly survivors: readonly string[];
238
+ constructor(survivors: readonly string[], options?: {
239
+ headline?: string;
240
+ });
241
+ }
242
+ /**
243
+ * Remove the LadybugDB file family and VERIFY each member is really gone.
244
+ *
245
+ * Owns the canonical 4-file family list — `<lbugPath>`, `.wal`, `.shadow`,
246
+ * `.lock` — so run-analyze's two wipe sites (full rebuild + the #2409
247
+ * escalation valve) can never drift apart. `.shadow` is included because a
248
+ * checkpoint-in-flight crash leaves a shadow sidecar, and a stale shadow next
249
+ * to a freshly created DB file is replay poison on the next open (#2409).
250
+ *
251
+ * Verification contract (tri-review 4669518496 P2-4 — the old inline loops
252
+ * swallowed rm failures and let `initLbug` reopen a still-populated DB the
253
+ * run believed it wiped): after `fs.rm({ recursive, force })`, each path is
254
+ * probed and counts as GONE only when the probe rejects with **ENOENT**. A
255
+ * resolving probe, or a rejection in the EPERM/EBUSY/EACCES class (Windows
256
+ * delete-pending / handle-release lag — see HANDLE_RELEASE_LOCK_CODES in
257
+ * lbug-config.ts), or any other code means the path is not verifiably gone:
258
+ * it is retried on the shared handle-release budget
259
+ * (HANDLE_RELEASE_PROBE_ATTEMPTS × linear HANDLE_RELEASE_PROBE_DELAY_MS,
260
+ * lbug-config.ts — the previous private mirror constants were
261
+ * documentation-coupled copies) and then handled by CLASS (this shipping
262
+ * review, FIX 2):
263
+ *
264
+ * - DATA-BEARING members (`<lbugPath>`, `.wal`, `.shadow`) — a survivor
265
+ * means the reopen would resurrect rows this run believes wiped: throw
266
+ * a typed {@link LbugWipeError}.
267
+ * - `.lock` — contentless: `initLbug` recreates it, and a genuinely held
268
+ * lock surfaces as initLbug's own lock-busy classification (a better
269
+ * error than this one). A `.lock`-only survivor (an AV-held
270
+ * delete-pending handle outlasting the budget previously failed a
271
+ * perfectly sound rebuild) logs a warning and CONTINUES.
272
+ *
273
+ * Linux unlinked-but-open (name gone, holder keeps the old inode) probes
274
+ * ENOENT and is accepted by design — both production wipe sites run after a
275
+ * real `closeLbug()`.
276
+ *
277
+ * Deliberately OUT of this contract: `cleanupOldKuzuFiles`
278
+ * (repo-manager.ts) sweeps the LEGACY kuzu-era file family during storage
279
+ * migration — different family, best-effort by design; and
280
+ * `sweepStaleSidecars` (lbug-config.ts) is a test-fixture-gated open-retry
281
+ * fallback that must never delete production files. Neither wipes the live
282
+ * DB the run is about to recreate, so neither needs (or may share) the
283
+ * loud-failure contract here.
284
+ */
285
+ export declare const wipeLbugDbFiles: (lbugPath: string) => Promise<void>;
201
286
  export declare const isLbugReady: () => boolean;
202
287
  /**
203
288
  * Delete all nodes (and their relationships) for a specific file from LadybugDB
@@ -208,6 +293,43 @@ export declare const isLbugReady: () => boolean;
208
293
  export declare const deleteNodesForFile: (filePath: string, dbPath?: string) => Promise<{
209
294
  deletedNodes: number;
210
295
  }>;
296
+ /**
297
+ * Chunk size for {@link deleteNodesForFiles}. 200 paths keeps each
298
+ * statement ~13KB (well inside parser limits) while a ~700-file write set
299
+ * still collapses from ~13,000 statements to 124: 31 statements per chunk
300
+ * (1 CodeEmbedding join-delete + 30 filePath-bearing node tables — the
301
+ * 32-table NODE_TABLES roster minus Community/Process) × 4 chunks. The
302
+ * original "~40" claim under-counted the per-chunk statement fan-out
303
+ * (tri-review 4669518496 accuracy sweep).
304
+ */
305
+ export declare const DELETE_FILES_CHUNK_SIZE = 200;
306
+ /**
307
+ * Batched variant of {@link deleteNodesForFile} for the incremental
308
+ * writeback (#2409). One `DETACH DELETE … WHERE n.filePath IN […]` per
309
+ * node table per chunk of paths, instead of a count + delete per table
310
+ * per FILE. The per-file loop issued ~13,000 single-row write
311
+ * transactions on a ~700-file write set — a WAL-append storm that made
312
+ * the incremental path slower than a full rebuild and is the write
313
+ * pattern behind the native mid-writeback deaths reported in #2409.
314
+ *
315
+ * NO general error swallowing: a zero-match chunk is a no-op success by
316
+ * construction (every node table except Community/Process has a filePath
317
+ * column), so anything thrown here is a real engine failure the caller
318
+ * must see — silently skipping was exactly how #2409 hid its root cause.
319
+ * The single tolerated exception (FIX 4) is the missing-embedding-table
320
+ * binder error on the embedding join-delete: a DB created without
321
+ * EMBEDDING_SCHEMA cannot own embedding rows, so skipping that one
322
+ * statement is sound, while failing would brick every incremental run on
323
+ * such a DB until `--force`. Statement count per chunk is unchanged by the
324
+ * multi-label join: 1 embedding join-delete + 30 node-table deletes = 31
325
+ * (the rejected per-label fallback shape would have been 19 + 30 = 49).
326
+ * Singleton-connection only: the analyze writeback owns the write lock,
327
+ * and `queryAndDrain` routes through `withConnLock` for it (the WAL
328
+ * checkpoint driver is live during this).
329
+ */
330
+ export declare const deleteNodesForFiles: (filePaths: readonly string[], options?: {
331
+ onChunk?: (filesDone: number, filesTotal: number) => void;
332
+ }) => Promise<void>;
211
333
  export declare const getEmbeddingTableName: () => string;
212
334
  /**
213
335
  * Return the distinct repo-relative paths of files that import
@@ -225,6 +347,30 @@ export declare const getEmbeddingTableName: () => string;
225
347
  * exports.
226
348
  */
227
349
  export declare const queryImporters: (targetFilePath: string) => Promise<string[]>;
350
+ /**
351
+ * Batched variant of {@link queryImporters} for the incremental importer
352
+ * BFS (#2409): distinct importers of ANY of the target paths, one query per
353
+ * chunk per BFS depth instead of one query per frontier FILE (a ~700-file
354
+ * frontier was ~700 sequential round-trips, each taking the connection lock
355
+ * against the live WAL checkpoint driver — ~5.6s of the writeback measured).
356
+ *
357
+ * Same contract as the singular form: reads the pre-pipeline DB state and
358
+ * swallows per-chunk query failures into a smaller result (correctness
359
+ * degrades on that branch — under-expansion means possibly-stale edges —
360
+ * but the DB stays writable and the writeback proceeds). Unlike the singular
361
+ * form the degradation is not silent (tri-review 4669518496 P2-5): every
362
+ * dropped chunk is logged and reported through `options.onChunkFailure`, so
363
+ * the orchestrator can count it into the #2410 crash diagnostics
364
+ * (`incrementalInProgress.droppedImporterChunks`).
365
+ */
366
+ export declare const queryImportersBatch: (targetFilePaths: readonly string[], options?: {
367
+ /**
368
+ * Invoked once per chunk whose IMPORTS query failed and was dropped from
369
+ * the expansion. Observability only — the degrade-don't-fail contract is
370
+ * unchanged (the result just shrinks by the failed chunk's importers).
371
+ */
372
+ onChunkFailure?: (chunkIndex: number, chunkSize: number, err: unknown) => void;
373
+ }) => Promise<string[]>;
228
374
  /**
229
375
  * Drop every Community and Process node (and their MEMBER_OF /
230
376
  * STEP_IN_PROCESS edges via DETACH DELETE). Used at the start of an
@@ -338,6 +484,40 @@ export declare const createFTSIndex: (tableName: string, indexName: string, prop
338
484
  * failure propagates so the caller can log it.
339
485
  */
340
486
  export declare const createVectorIndex: () => Promise<boolean>;
487
+ /**
488
+ * Make DML against {@link EMBEDDING_TABLE_NAME} legal on the writable
489
+ * connection when it can be, and report whether it is.
490
+ *
491
+ * LadybugDB refuses EVERY mutation of a table carrying an HNSW index while
492
+ * the VECTOR extension is not loaded on that connection: `DELETE` fails with
493
+ * "Trying to delete from an index on table CodeEmbedding but its extension is
494
+ * not loaded", `CREATE` with the matching "insert into an index" variant,
495
+ * `DROP TABLE` is refused while the index references it, and `SET` — even on
496
+ * a NON-indexed property — segfaults the process outright. Probed against
497
+ * @ladybugdb/core 0.18.2 (the lockfile-pinned version) and 0.18.0 — every
498
+ * result identical on both (#2623).
499
+ *
500
+ * Dropping the index is NOT an available recovery: `CALL DROP_VECTOR_INDEX`
501
+ * is itself a VECTOR-extension function and resolves to "Catalog exception:
502
+ * function DROP_VECTOR_INDEX is not defined" in exactly the state it would
503
+ * need to rescue. Loading the extension is the only in-place repair, which is
504
+ * why this returns a verdict instead of attempting a fixup.
505
+ *
506
+ * `true` = embedding-row DML is safe: either VECTOR is now loaded, or the
507
+ * table carries no index to trip over. `false` = genuinely blocked (index
508
+ * present, extension unloadable); the analyze orchestrator answers that by
509
+ * escalating to the wipe-and-rebuild write plan instead of failing
510
+ * mid-writeback.
511
+ *
512
+ * Cheap by construction: one local `SHOW_INDEXES` read settles the common
513
+ * "this repo never built an embedding index" case without touching the
514
+ * extension machinery at all, so a VECTOR-less machine is not charged a
515
+ * bounded INSTALL attempt on every incremental analyze. `SHOW_INDEXES` is
516
+ * readable WITHOUT the extension and reports `extension_loaded` per index, so
517
+ * no error-string sniffing is needed; it runs through the unprepared
518
+ * `conn.query()` path like every other `CALL` procedure here (#2114).
519
+ */
520
+ export declare const ensureEmbeddingRowDmlSafe: () => Promise<boolean>;
341
521
  /**
342
522
  * Lazy-create an FTS index, caching the fact in-process.
343
523
  *
@@ -373,6 +553,27 @@ export declare const queryFTS: (tableName: string, indexName: string, query: str
373
553
  [key: string]: any;
374
554
  }>>;
375
555
  /**
376
- * Drop an FTS index
556
+ * True for the two benign "nothing to drop" `DROP_FTS_INDEX` failures —
557
+ * both catalog/binder exceptions, LadybugDB's classes for "this name isn't
558
+ * bound to anything right now" (probe-verified end-to-end through
559
+ * `dropFTSIndex`'s real `conn.query()` path against @ladybugdb/core
560
+ * 0.18.x): the named index was never created (`Binder exception: Table <T>
561
+ * doesn't have an index with name <name>.`), or the FTS extension/function
562
+ * isn't registered at all (`Catalog exception: function DROP_FTS_INDEX is
563
+ * not defined...`). A real engine failure — e.g. the `Runtime exception:
564
+ * FTS index '<name>' is inconsistent: ...` class from #2589 — is a
565
+ * DIFFERENT exception class (an execution-time failure, not a catalog/bind
566
+ * lookup miss), so this returns false for it. Anchored to the START of the
567
+ * message (not a bare substring search): every probed LadybugDB error leads
568
+ * with its exception class, and anchoring means a future message that merely
569
+ * mentions "Binder exception" or "Catalog exception" further in in the body
570
+ * of an otherwise-genuine failure can't be misclassified as benign. Pure
571
+ * string logic so it is unit-testable without a native LadybugDB connection.
572
+ */
573
+ export declare const isBenignDropFtsIndexError: (message: string) => boolean;
574
+ /**
575
+ * Drop an FTS index. Tolerates only {@link isBenignDropFtsIndexError} —
576
+ * anything else rethrows instead of being silently masked, which previously
577
+ * let a corrupted index persist across analyze runs undetected.
377
578
  */
378
579
  export declare const dropFTSIndex: (tableName: string, indexName: string) => Promise<void>;