gitnexus 1.6.10-rc.2 → 1.6.10-rc.21

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 (219) hide show
  1. package/README.md +56 -12
  2. package/dist/cli/analyze.js +166 -5
  3. package/dist/cli/clean.js +17 -3
  4. package/dist/cli/cli-message.d.ts +1 -1
  5. package/dist/cli/doctor.d.ts +18 -0
  6. package/dist/cli/doctor.js +76 -3
  7. package/dist/cli/embeddings.d.ts +12 -0
  8. package/dist/cli/embeddings.js +49 -0
  9. package/dist/cli/help-i18n.js +4 -0
  10. package/dist/cli/i18n/en.d.ts +10 -5
  11. package/dist/cli/i18n/en.js +10 -5
  12. package/dist/cli/i18n/resources.d.ts +15 -5
  13. package/dist/cli/i18n/zh-CN.d.ts +5 -0
  14. package/dist/cli/i18n/zh-CN.js +10 -5
  15. package/dist/cli/index.js +12 -1
  16. package/dist/core/augmentation/engine.js +4 -3
  17. package/dist/core/embeddings/embedder.js +16 -2
  18. package/dist/core/embeddings/embedding-pipeline.d.ts +20 -0
  19. package/dist/core/embeddings/embedding-pipeline.js +10 -2
  20. package/dist/core/embeddings/http-client.d.ts +28 -1
  21. package/dist/core/embeddings/http-client.js +107 -15
  22. package/dist/core/embeddings/node-module-compat.d.ts +23 -0
  23. package/dist/core/embeddings/node-module-compat.js +23 -0
  24. package/dist/core/embeddings/onnxruntime-common-resolver.js +6 -3
  25. package/dist/core/embeddings/onnxruntime-node-resolver.js +31 -5
  26. package/dist/core/embeddings/runtime-install.d.ts +119 -0
  27. package/dist/core/embeddings/runtime-install.js +372 -0
  28. package/dist/core/embeddings/runtime-support.d.ts +48 -17
  29. package/dist/core/embeddings/runtime-support.js +96 -0
  30. package/dist/core/group/extractors/http-patterns/python.js +246 -108
  31. package/dist/core/group/extractors/manifest-extractor.js +4 -0
  32. package/dist/core/incremental/escalation-gate.d.ts +38 -0
  33. package/dist/core/incremental/escalation-gate.js +48 -0
  34. package/dist/core/incremental/shadow-candidates.d.ts +3 -3
  35. package/dist/core/incremental/shadow-candidates.js +3 -3
  36. package/dist/core/incremental/subgraph-extract.d.ts +2 -2
  37. package/dist/core/incremental/subgraph-extract.js +2 -2
  38. package/dist/core/ingestion/cobol/jcl-processor.js +9 -8
  39. package/dist/core/ingestion/cobol-processor.js +27 -26
  40. package/dist/core/ingestion/community-processor.d.ts +51 -1
  41. package/dist/core/ingestion/community-processor.js +316 -63
  42. package/dist/core/ingestion/emit-references.js +3 -2
  43. package/dist/core/ingestion/languages/cpp/captures.js +157 -74
  44. package/dist/core/ingestion/markdown-processor.js +3 -2
  45. package/dist/core/ingestion/parsing-processor.d.ts +3 -1
  46. package/dist/core/ingestion/parsing-processor.js +4 -0
  47. package/dist/core/ingestion/pipeline-phases/parse-impl.js +42 -0
  48. package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +83 -0
  49. package/dist/core/ingestion/route-extractors/constant-resolver.js +131 -0
  50. package/dist/core/ingestion/route-extractors/python-const-resolver.d.ts +75 -0
  51. package/dist/core/ingestion/route-extractors/python-const-resolver.js +299 -0
  52. package/dist/core/ingestion/tree-sitter-queries.d.ts +1 -1
  53. package/dist/core/ingestion/tree-sitter-queries.js +12 -1
  54. package/dist/core/ingestion/utils/line-base.d.ts +20 -0
  55. package/dist/core/ingestion/utils/line-base.js +20 -0
  56. package/dist/core/ingestion/utils/symbol-labels.d.ts +21 -0
  57. package/dist/core/ingestion/utils/symbol-labels.js +45 -0
  58. package/dist/core/ingestion/workers/parse-worker.d.ts +34 -0
  59. package/dist/core/ingestion/workers/parse-worker.js +40 -5
  60. package/dist/core/ingestion/workers/result-merge.js +4 -0
  61. package/dist/core/ingestion/workers/worker-pool.d.ts +14 -0
  62. package/dist/core/ingestion/workers/worker-pool.js +85 -5
  63. package/dist/core/lbug/csv-generator.js +8 -2
  64. package/dist/core/lbug/cypher-escape.d.ts +20 -0
  65. package/dist/core/lbug/cypher-escape.js +20 -0
  66. package/dist/core/lbug/extension-load-error.d.ts +67 -0
  67. package/dist/core/lbug/extension-load-error.js +320 -0
  68. package/dist/core/lbug/extension-loader.d.ts +17 -2
  69. package/dist/core/lbug/extension-loader.js +38 -13
  70. package/dist/core/lbug/lbug-adapter.d.ts +147 -1
  71. package/dist/core/lbug/lbug-adapter.js +390 -70
  72. package/dist/core/lbug/lbug-config.d.ts +28 -0
  73. package/dist/core/lbug/lbug-config.js +114 -4
  74. package/dist/core/lbug/native-check.d.ts +22 -0
  75. package/dist/core/lbug/native-check.js +66 -0
  76. package/dist/core/lbug/pool-adapter.js +10 -1
  77. package/dist/core/lbug/sidecar-recovery.d.ts +172 -0
  78. package/dist/core/lbug/sidecar-recovery.js +418 -16
  79. package/dist/core/platform/capabilities.js +27 -1
  80. package/dist/core/run-analyze.js +470 -108
  81. package/dist/core/search/fts-indexes.d.ts +7 -0
  82. package/dist/core/search/fts-indexes.js +37 -0
  83. package/dist/core/tree-sitter/safe-parse.d.ts +8 -3
  84. package/dist/core/tree-sitter/safe-parse.js +21 -7
  85. package/dist/core/wiki/graph-queries.js +6 -5
  86. package/dist/mcp/core/embedder.js +16 -2
  87. package/dist/mcp/local/line-display.d.ts +22 -0
  88. package/dist/mcp/local/line-display.js +3 -0
  89. package/dist/mcp/local/local-backend.d.ts +14 -0
  90. package/dist/mcp/local/local-backend.js +63 -19
  91. package/dist/mcp/local/pdg-impact.d.ts +5 -3
  92. package/dist/mcp/local/pdg-impact.js +5 -2
  93. package/dist/mcp/resources.js +1 -0
  94. package/dist/mcp/tools.js +1 -1
  95. package/dist/server/analyze-launch.d.ts +6 -0
  96. package/dist/server/analyze-launch.js +82 -6
  97. package/dist/server/api.d.ts +30 -0
  98. package/dist/server/api.js +63 -21
  99. package/dist/storage/parse-cache.js +1 -1
  100. package/dist/storage/repo-manager.d.ts +65 -1
  101. package/dist/storage/repo-manager.js +18 -1
  102. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +50 -3
  103. package/hooks/claude/gitnexus-hook.cjs +59 -9
  104. package/package.json +5 -3
  105. package/scripts/cross-platform-tests.ts +43 -0
  106. package/scripts/ensure-fts.ts +32 -0
  107. package/scripts/install-duckdb-extension.mjs +85 -24
  108. package/scripts/run-cross-platform.ts +46 -6
  109. package/scripts/shard-arg.ts +30 -0
  110. package/web/assets/ProcessFlowModal-Dna7GkwO.js +22 -0
  111. package/web/assets/{agent-Dli_x7bU.js → agent-DNYDy-KA.js} +49 -49
  112. package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +1 -0
  113. package/web/assets/architectureDiagram-UL44E2DR-BU5ZRITg.js +36 -0
  114. package/web/assets/{blockDiagram-7IZFK4PR-BkWhpzWB.js → blockDiagram-7IZFK4PR-Dut1BpTV.js} +2 -2
  115. package/web/assets/{c4Diagram-Y2BXMSZH-DtBvpzWD.js → c4Diagram-Y2BXMSZH-DOXVs7-C.js} +2 -2
  116. package/web/assets/chunk-2T2R6R2M-pkw2oXHH.js +4 -0
  117. package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +1 -0
  118. package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +321 -0
  119. package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +159 -0
  120. package/web/assets/{chunk-6764PJDD-DpIS7hxD.js → chunk-6764PJDD-C7xxk063.js} +1 -1
  121. package/web/assets/{chunk-67TQ5CYL-4sNPJU1q.js → chunk-67TQ5CYL-zxhDWgyF.js} +3 -3
  122. package/web/assets/chunk-7FYTHRHK-CsmYIswB.js +32 -0
  123. package/web/assets/chunk-7J6CGLKN-AmkN8jJN.js +10 -0
  124. package/web/assets/chunk-7W6UQGC5-pyKGssV3.js +1 -0
  125. package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +1 -0
  126. package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +1 -0
  127. package/web/assets/{chunk-INKRHTLW-Nu4ri9P-.js → chunk-INKRHTLW-D9BM9HWZ.js} +1 -1
  128. package/web/assets/chunk-J5EP6P6S-L19oz55R.js +1 -0
  129. package/web/assets/{chunk-KGFNY3KK-JGMJvKCK.js → chunk-KGFNY3KK-tD2F6wxK.js} +1 -1
  130. package/web/assets/chunk-KGYTTC2M-zm6n242I.js +1 -0
  131. package/web/assets/{chunk-KRXBNO2N-BW5o0KUN.js → chunk-KRXBNO2N-C-UNuKKf.js} +1 -1
  132. package/web/assets/{chunk-LCXTWHL2-CfLLCywY.js → chunk-LCXTWHL2-Ba9JK-6F.js} +2 -2
  133. package/web/assets/{chunk-LII3EMHJ-D-jm-dLa.js → chunk-LII3EMHJ-EGx-eBIu.js} +1 -1
  134. package/web/assets/chunk-LRIF4GLE-C3_PqUBq.js +1 -0
  135. package/web/assets/{chunk-QA3QBVWF-BgRW3SXd.js → chunk-QA3QBVWF-D4cSJBf6.js} +1 -1
  136. package/web/assets/chunk-RERM46MO-B5dAdWpP.js +1 -0
  137. package/web/assets/{chunk-RG4AUYOV-CqWzWsV3.js → chunk-RG4AUYOV-OqBBMwuQ.js} +4 -4
  138. package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +1 -0
  139. package/web/assets/chunk-RLI5ZMPA-CkXZ0y0U.js +1 -0
  140. package/web/assets/{chunk-T2UQINTJ-DSBqkzH7.js → chunk-T2UQINTJ-BJusEiGe.js} +1 -1
  141. package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +1 -0
  142. package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +1 -0
  143. package/web/assets/{chunk-UY5QBCOK-DyF0vyGd.js → chunk-UY5QBCOK-BCpUlARQ.js} +1 -1
  144. package/web/assets/chunk-VU6ZFW4Y-BeXVk45_.js +2 -0
  145. package/web/assets/{chunk-W44A43WB-JqMLIpR0.js → chunk-W44A43WB-BN8EQc_u.js} +1 -1
  146. package/web/assets/{chunk-ZXARS5L4-CxN8oiwI.js → chunk-ZXARS5L4-BI_qR2Nm.js} +1 -1
  147. package/web/assets/classDiagram-KGZ6W3CR-D9zSIg0x.js +1 -0
  148. package/web/assets/classDiagram-v2-72OJOZXJ-D9zSIg0x.js +1 -0
  149. package/web/assets/cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js +1 -0
  150. package/web/assets/dagre-ND4H6XIP-CpcV5kbl.js +4 -0
  151. package/web/assets/diagram-3NCE3AQN-6SMxBRpj.js +43 -0
  152. package/web/assets/diagram-GF46GFSD-BZEdNcRZ.js +24 -0
  153. package/web/assets/{diagram-HNR7UZ2L-DFCfd5LI.js → diagram-HNR7UZ2L-DxKW2a2Y.js} +2 -2
  154. package/web/assets/diagram-QXG6HAR7-HfTHcXX_.js +24 -0
  155. package/web/assets/diagram-WEQXMOUZ-CyijUS8r.js +10 -0
  156. package/web/assets/{erDiagram-L5TCEMPS-8X1y6R4Y.js → erDiagram-L5TCEMPS-D0fvpWEX.js} +3 -3
  157. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +1 -0
  158. package/web/assets/flowDiagram-H6V6AXG4-Bvr9bbhk.js +162 -0
  159. package/web/assets/{ganttDiagram-JCBTUEKG-D3iL2Aet.js → ganttDiagram-JCBTUEKG-TzODrLzv.js} +2 -2
  160. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +1 -0
  161. package/web/assets/gitGraphDiagram-S2ZK5IYY-ONQSwJIY.js +106 -0
  162. package/web/assets/index-B4eB4dNZ.js +575 -0
  163. package/web/assets/index-CX_fADmQ.css +2 -0
  164. package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +1 -0
  165. package/web/assets/infoDiagram-3YFTVSEB-DIPVUIQ6.js +2 -0
  166. package/web/assets/{ishikawaDiagram-BNXS4ZKH-DfYpxnE5.js → ishikawaDiagram-BNXS4ZKH-BLjivjXL.js} +3 -3
  167. package/web/assets/{journeyDiagram-M6C3CM3L-CvArszLo.js → journeyDiagram-M6C3CM3L-Cetgs3NH.js} +3 -3
  168. package/web/assets/{kanban-definition-75IXJCU3-CpfVLLf9.js → kanban-definition-75IXJCU3-DMlCaIpf.js} +5 -5
  169. package/web/assets/{katex-K3KEBU37-CTc5BslQ.js → katex-K3KEBU37-qRQBy-EZ.js} +2 -2
  170. package/web/assets/{mindmap-definition-2TDM6QVE-DypvbOMQ.js → mindmap-definition-2TDM6QVE-B4GbXQBc.js} +3 -3
  171. package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +1 -0
  172. package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +1 -0
  173. package/web/assets/{pieDiagram-CU6KROY3-s27EFWgP.js → pieDiagram-CU6KROY3-D3YC_xyg.js} +2 -2
  174. package/web/assets/{quadrantDiagram-VICAPDV7-yXSZ2lLz.js → quadrantDiagram-VICAPDV7-B1TQnlm0.js} +2 -2
  175. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +1 -0
  176. package/web/assets/{requirementDiagram-JXO7QTGE-CWhqInuf.js → requirementDiagram-JXO7QTGE-f8wczLQf.js} +3 -3
  177. package/web/assets/rolldown-runtime-QTnfLwEv.js +1 -0
  178. package/web/assets/{sankeyDiagram-URQDO5SZ-1qEjlFIB.js → sankeyDiagram-URQDO5SZ-BTxzG5j0.js} +2 -2
  179. package/web/assets/{sequenceDiagram-VS2MUI6T-RyTlZ5cR.js → sequenceDiagram-VS2MUI6T-DuamM-IR.js} +5 -5
  180. package/web/assets/src-BNCXICdA.js +1 -0
  181. package/web/assets/stateDiagram-7D4R322I-Ch2pEUcw.js +1 -0
  182. package/web/assets/stateDiagram-v2-36443NZ5-7ANuoZLL.js +1 -0
  183. package/web/assets/{timeline-definition-O6YCAMPW-DrrqLYAf.js → timeline-definition-O6YCAMPW-07BR8R8G.js} +3 -3
  184. package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +1 -0
  185. package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +1 -0
  186. package/web/assets/{vennDiagram-MWXL3ELB-B0RkWAim.js → vennDiagram-MWXL3ELB-BQX2ossk.js} +4 -4
  187. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +1 -0
  188. package/web/assets/{wardleyDiagram-CUQ6CDDI-boUxiQ5F.js → wardleyDiagram-CUQ6CDDI-CGIJBBiK.js} +3 -3
  189. package/web/assets/{xychartDiagram-N2JHSOCM-BOLm0eNm.js → xychartDiagram-N2JHSOCM-B3HNMuWp.js} +4 -4
  190. package/web/index.html +17 -10
  191. package/web/assets/architecture-7EHR7CIX-6QZW5X65-DxJw65fT.js +0 -1
  192. package/web/assets/architectureDiagram-UL44E2DR-dEkqUZN9.js +0 -36
  193. package/web/assets/chunk-3SSMPTDK-B4_etUhr.js +0 -321
  194. package/web/assets/chunk-7W6UQGC5-KyEG0HQg.js +0 -1
  195. package/web/assets/chunk-KGYTTC2M-CWC_c3H9.js +0 -161
  196. package/web/assets/classDiagram-KGZ6W3CR-CMne4tG9.js +0 -1
  197. package/web/assets/classDiagram-v2-72OJOZXJ-CMne4tG9.js +0 -1
  198. package/web/assets/cose-bilkent-UX7MHV2Q-D71wNYRJ.js +0 -1
  199. package/web/assets/dagre-ND4H6XIP-Co5rRx9X.js +0 -4
  200. package/web/assets/diagram-3NCE3AQN-DBp4O00j.js +0 -43
  201. package/web/assets/diagram-GF46GFSD-6N_8yS0i.js +0 -24
  202. package/web/assets/diagram-QXG6HAR7-Di093rFg.js +0 -24
  203. package/web/assets/diagram-WEQXMOUZ-DZWi4SUN.js +0 -10
  204. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-BQm9QzEa.js +0 -1
  205. package/web/assets/flowDiagram-H6V6AXG4-CMpY8Ufn.js +0 -162
  206. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-Cr_Bm2Nb.js +0 -1
  207. package/web/assets/gitGraphDiagram-S2ZK5IYY-CPIDgxGm.js +0 -106
  208. package/web/assets/index-KctnI3Vq.js +0 -635
  209. package/web/assets/index-_lgn7hs5.css +0 -2
  210. package/web/assets/info-J43DQDTF-KCYPFFUO-Cs4p2oyk.js +0 -1
  211. package/web/assets/infoDiagram-3YFTVSEB-BaLMZkUg.js +0 -2
  212. package/web/assets/packet-YPE3B663-LP52Z2RK-CKCrztD2.js +0 -1
  213. package/web/assets/pie-LRSECV5Y-TCRJHUBD-BB7pHqoD.js +0 -1
  214. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DhoTOcuK.js +0 -1
  215. package/web/assets/stateDiagram-7D4R322I-DTjVfX4A.js +0 -1
  216. package/web/assets/stateDiagram-v2-36443NZ5-xY9_k9_Q.js +0 -1
  217. package/web/assets/treeView-BLDUP644-QA4HXRO3-ODehyGKL.js +0 -1
  218. package/web/assets/treemap-LRROVOQU-LLAWBHMP-BfpgC-7o.js +0 -1
  219. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-CNeL6VHE.js +0 -1
@@ -40,9 +40,10 @@ export declare const en: {
40
40
  readonly 'clean.deleteBranch': "This will delete the branch index \"{{branch}}\" at: {{path}}";
41
41
  readonly 'clean.deletedBranch': "Deleted branch index: {{branch}}";
42
42
  readonly 'clean.lbugSidecars.state': "LadybugDB sidecar state: {{state}}";
43
- readonly 'clean.lbugSidecars.none': "No quarantined LadybugDB missing-shadow WAL sidecars found.";
44
- readonly 'clean.lbugSidecars.preview': "This will delete {{count}} quarantined LadybugDB missing-shadow WAL sidecar(s):";
45
- readonly 'clean.lbugSidecars.deleted': "Deleted {{count}} quarantined LadybugDB missing-shadow WAL sidecar(s).";
43
+ readonly 'clean.lbugSidecars.none': "No parked LadybugDB recovery sidecars found (missing-shadow WAL quarantines or dirty-recovery parks).";
44
+ readonly 'clean.lbugSidecars.preview': "This will delete {{count}} parked LadybugDB recovery sidecar(s) (missing-shadow WAL quarantines and dirty-recovery parks):";
45
+ readonly 'clean.lbugSidecars.deleted': "Deleted {{count}} parked LadybugDB recovery sidecar(s).";
46
+ readonly 'clean.lbugSidecars.failed': "Could not delete {{count}} locked file(s) — stop the process holding them (GitNexus MCP/serve or an antivirus scan) and re-run:";
46
47
  readonly 'remove.nothingToRemove': "Nothing to remove: {{message}}";
47
48
  readonly 'remove.deleteTarget': "This will delete the GitNexus index for: {{name}}";
48
49
  readonly 'remove.removed': "Removed: {{name}}";
@@ -117,6 +118,8 @@ export declare const en: {
117
118
  readonly 'help.command.list.description': "List all indexed repositories";
118
119
  readonly 'help.command.status.description': "Show index status for current repo";
119
120
  readonly 'help.command.doctor.description': "Show runtime platform capabilities and embedding configuration";
121
+ readonly 'help.command.embeddings.description': "Manage the on-demand local embedding runtime";
122
+ readonly 'help.command.embeddings.install.description': "Install the local embedding stack (@huggingface/transformers + onnxruntime-node) on demand. Heals installs where npm skipped the optional packages (e.g. behind an HTTP proxy, #2370). Downloads only from your configured npm registry — mirrors and proxies apply.";
120
123
  readonly 'help.command.clean.description': "Delete GitNexus index for current repo";
121
124
  readonly 'help.command.remove.description': "Delete the GitNexus index for a registered repo (by alias, name, or absolute path). Unlike `clean`, does not require being inside the repo. Idempotent on unknown targets.";
122
125
  readonly 'help.command.wiki.description': "Generate repository wiki from knowledge graph";
@@ -173,7 +176,7 @@ export declare const en: {
173
176
  readonly 'help.option.uninstall.force': "Apply the changes (default is a dry-run preview)";
174
177
  readonly 'help.option.clean.all': "Clean all indexed repos";
175
178
  readonly 'help.option.clean.branch': "Delete only the named branch index (not the workspace index)";
176
- readonly 'help.option.clean.lbugSidecars': "Clean quarantined LadybugDB missing-shadow WAL sidecars";
179
+ readonly 'help.option.clean.lbugSidecars': "Clean parked LadybugDB recovery sidecars (missing-shadow WAL quarantines and dirty-recovery parks)";
177
180
  readonly 'help.option.wiki.force': "Force full regeneration even if up to date";
178
181
  readonly 'help.option.wiki.provider': "LLM provider: openai, openrouter, azure, custom, cursor, claude, codex, or opencode (default: openai)";
179
182
  readonly 'help.option.wiki.model': "LLM model or Azure deployment name (default: minimax/minimax-m2.5)";
@@ -220,6 +223,8 @@ export declare const en: {
220
223
  readonly 'help.option.check.cycles': "Detect circular imports and fail when any are found";
221
224
  readonly 'help.option.evalServer.host': "Bind address (default: 127.0.0.1, use 0.0.0.0 to expose to all interfaces)";
222
225
  readonly 'help.option.evalServer.idleTimeout': "Auto-shutdown after N seconds idle (0 = disabled)";
226
+ readonly 'help.option.embeddings.install.cuda': "Also download the CUDA GPU binaries (runs onnxruntime-node's NuGet postinstall; set GLOBAL_AGENT_HTTPS_PROXY behind a proxy)";
227
+ readonly 'help.option.embeddings.install.force': "Install into the runtime prefix even when the stack already resolves";
223
228
  readonly 'help.option.group.create.force': "Overwrite existing group";
224
229
  readonly 'help.option.group.sync.skipEmbeddings': "Exact + BM25 only (no embedding fallback)";
225
230
  readonly 'help.option.group.sync.exactOnly': "Exact match only";
@@ -238,5 +243,5 @@ export declare const en: {
238
243
  readonly 'help.option.group.contracts.type': "Filter by contract type";
239
244
  readonly 'help.option.group.contracts.repo': "Filter by repo";
240
245
  readonly 'help.option.group.contracts.unmatched': "Show only unmatched contracts";
241
- readonly 'help.analyze.environment': "\nEnvironment variables:\n GITNEXUS_NO_GITIGNORE=1 Skip .gitignore parsing (still reads .gitnexusignore)\n GITNEXUS_MAX_FILE_SIZE=N Override large-file skip threshold (KB). Default 512, max 32768.\n GITNEXUS_WORKER_SUB_BATCH_TIMEOUT_MS=N Worker idle timeout in milliseconds. Default 30000.\n GITNEXUS_WAL_CHECKPOINT_THRESHOLD=N LadybugDB WAL auto-checkpoint threshold in bytes (default 67108864 = 64 MiB; -1 keeps Ladybug stock ~16 MiB).\n GITNEXUS_WORKER_SUB_BATCH_MAX_BYTES=N Worker job byte budget. Default 8388608.\n GITNEXUS_WORKER_POOL_SIZE=N Parse worker count override. Default cores-1 capped at 16.\n GITNEXUS_PARSE_CHUNK_CONCURRENCY=N Concurrent in-flight parse chunks. Default 2.\n GITNEXUS_WORKER_MAX_RESPAWNS_PER_SLOT=N Max replacement spawns per slot before drop. Default 3.\n GITNEXUS_WORKER_MAX_CUMULATIVE_TIMEOUT_MS=N Total retry wall-time per job. Default 5x sub-batch timeout.\n GITNEXUS_WORKER_CONSECUTIVE_FAILURE_THRESHOLD=N Per-slot deaths to trip circuit breaker. Default max(3, poolSize).\n GITNEXUS_EMBEDDING_THREADS=N Limit local ONNX CPU threads for --embeddings.\n GITNEXUS_SEMANTIC_EXACT_SCAN_LIMIT=N Max embedding chunks for exact-scan fallback. Default 10000.\n GITNEXUS_VECTOR_MAX_DISTANCE=N Max accepted semantic/vector cosine distance (0 < N <= 2; higher values clamp to 2). Default 0.6 for MCP, 0.5 elsewhere.\n\nFlags override the corresponding env vars when both are provided.\n\nTip: `.gitnexusignore` supports `.gitignore`-style negation. Add e.g.\n `!__tests__/` to index a directory that is auto-filtered by default (#771).";
246
+ readonly 'help.analyze.environment': "\nEnvironment variables:\n GITNEXUS_NO_GITIGNORE=1 Skip .gitignore parsing (still reads .gitnexusignore)\n GITNEXUS_MAX_FILE_SIZE=N Override large-file skip threshold (KB). Default 512, max 32768.\n GITNEXUS_WORKER_SUB_BATCH_TIMEOUT_MS=N Worker idle timeout in milliseconds. Default 30000.\n GITNEXUS_WAL_CHECKPOINT_THRESHOLD=N LadybugDB WAL auto-checkpoint threshold in bytes (default 67108864 = 64 MiB; -1 keeps Ladybug stock ~16 MiB).\n GITNEXUS_WORKER_SUB_BATCH_MAX_BYTES=N Worker job byte budget. Default 8388608.\n GITNEXUS_WORKER_POOL_SIZE=N Parse worker count override. Default cores-1 capped at 16.\n GITNEXUS_PARSE_CHUNK_CONCURRENCY=N Concurrent in-flight parse chunks. Default 2.\n GITNEXUS_WORKER_MAX_RESPAWNS_PER_SLOT=N Max replacement spawns per slot before drop. Default 3.\n GITNEXUS_WORKER_MAX_CUMULATIVE_TIMEOUT_MS=N Total retry wall-time per job. Default 5x sub-batch timeout.\n GITNEXUS_WORKER_CONSECUTIVE_FAILURE_THRESHOLD=N Per-slot deaths to trip circuit breaker. Default max(3, poolSize).\n GITNEXUS_WORKER_SHUTDOWN_DRAIN_MS=N Max wait at pool shutdown for a retired worker still inside native code (terminated at its next safe point instead of aborting the process). Default 30000.\n GITNEXUS_CPP_CAPTURE_BUDGET_MS=N Per-file wall-clock budget for C++ capture extraction; on breach the file keeps partial captures with a warning. Default 20000.\n GITNEXUS_EMBEDDING_THREADS=N Limit local ONNX CPU threads for --embeddings.\n GITNEXUS_SEMANTIC_EXACT_SCAN_LIMIT=N Max embedding chunks for exact-scan fallback. Default 10000.\n GITNEXUS_VECTOR_MAX_DISTANCE=N Max accepted semantic/vector cosine distance (0 < N <= 2; higher values clamp to 2). Default 0.6 for MCP, 0.5 elsewhere.\n\nFlags override the corresponding env vars when both are provided.\n\nTip: `.gitnexusignore` supports `.gitignore`-style negation. Add e.g.\n `!__tests__/` to index a directory that is auto-filtered by default (#771).";
242
247
  };
@@ -40,9 +40,10 @@ export const en = {
40
40
  'clean.deleteBranch': 'This will delete the branch index "{{branch}}" at: {{path}}',
41
41
  'clean.deletedBranch': 'Deleted branch index: {{branch}}',
42
42
  'clean.lbugSidecars.state': 'LadybugDB sidecar state: {{state}}',
43
- 'clean.lbugSidecars.none': 'No quarantined LadybugDB missing-shadow WAL sidecars found.',
44
- 'clean.lbugSidecars.preview': 'This will delete {{count}} quarantined LadybugDB missing-shadow WAL sidecar(s):',
45
- 'clean.lbugSidecars.deleted': 'Deleted {{count}} quarantined LadybugDB missing-shadow WAL sidecar(s).',
43
+ 'clean.lbugSidecars.none': 'No parked LadybugDB recovery sidecars found (missing-shadow WAL quarantines or dirty-recovery parks).',
44
+ 'clean.lbugSidecars.preview': 'This will delete {{count}} parked LadybugDB recovery sidecar(s) (missing-shadow WAL quarantines and dirty-recovery parks):',
45
+ 'clean.lbugSidecars.deleted': 'Deleted {{count}} parked LadybugDB recovery sidecar(s).',
46
+ 'clean.lbugSidecars.failed': 'Could not delete {{count}} locked file(s) — stop the process holding them (GitNexus MCP/serve or an antivirus scan) and re-run:',
46
47
  'remove.nothingToRemove': 'Nothing to remove: {{message}}',
47
48
  'remove.deleteTarget': 'This will delete the GitNexus index for: {{name}}',
48
49
  'remove.removed': 'Removed: {{name}}',
@@ -117,6 +118,8 @@ export const en = {
117
118
  'help.command.list.description': 'List all indexed repositories',
118
119
  'help.command.status.description': 'Show index status for current repo',
119
120
  'help.command.doctor.description': 'Show runtime platform capabilities and embedding configuration',
121
+ 'help.command.embeddings.description': 'Manage the on-demand local embedding runtime',
122
+ 'help.command.embeddings.install.description': 'Install the local embedding stack (@huggingface/transformers + onnxruntime-node) on demand. Heals installs where npm skipped the optional packages (e.g. behind an HTTP proxy, #2370). Downloads only from your configured npm registry — mirrors and proxies apply.',
120
123
  'help.command.clean.description': 'Delete GitNexus index for current repo',
121
124
  'help.command.remove.description': 'Delete the GitNexus index for a registered repo (by alias, name, or absolute path). Unlike `clean`, does not require being inside the repo. Idempotent on unknown targets.',
122
125
  'help.command.wiki.description': 'Generate repository wiki from knowledge graph',
@@ -173,7 +176,7 @@ export const en = {
173
176
  'help.option.uninstall.force': 'Apply the changes (default is a dry-run preview)',
174
177
  'help.option.clean.all': 'Clean all indexed repos',
175
178
  'help.option.clean.branch': 'Delete only the named branch index (not the workspace index)',
176
- 'help.option.clean.lbugSidecars': 'Clean quarantined LadybugDB missing-shadow WAL sidecars',
179
+ 'help.option.clean.lbugSidecars': 'Clean parked LadybugDB recovery sidecars (missing-shadow WAL quarantines and dirty-recovery parks)',
177
180
  'help.option.wiki.force': 'Force full regeneration even if up to date',
178
181
  'help.option.wiki.provider': 'LLM provider: openai, openrouter, azure, custom, cursor, claude, codex, or opencode (default: openai)',
179
182
  'help.option.wiki.model': 'LLM model or Azure deployment name (default: minimax/minimax-m2.5)',
@@ -220,6 +223,8 @@ export const en = {
220
223
  'help.option.check.cycles': 'Detect circular imports and fail when any are found',
221
224
  'help.option.evalServer.host': 'Bind address (default: 127.0.0.1, use 0.0.0.0 to expose to all interfaces)',
222
225
  'help.option.evalServer.idleTimeout': 'Auto-shutdown after N seconds idle (0 = disabled)',
226
+ 'help.option.embeddings.install.cuda': "Also download the CUDA GPU binaries (runs onnxruntime-node's NuGet postinstall; set GLOBAL_AGENT_HTTPS_PROXY behind a proxy)",
227
+ 'help.option.embeddings.install.force': 'Install into the runtime prefix even when the stack already resolves',
223
228
  'help.option.group.create.force': 'Overwrite existing group',
224
229
  'help.option.group.sync.skipEmbeddings': 'Exact + BM25 only (no embedding fallback)',
225
230
  'help.option.group.sync.exactOnly': 'Exact match only',
@@ -238,5 +243,5 @@ export const en = {
238
243
  'help.option.group.contracts.type': 'Filter by contract type',
239
244
  'help.option.group.contracts.repo': 'Filter by repo',
240
245
  'help.option.group.contracts.unmatched': 'Show only unmatched contracts',
241
- 'help.analyze.environment': '\nEnvironment variables:\n GITNEXUS_NO_GITIGNORE=1 Skip .gitignore parsing (still reads .gitnexusignore)\n GITNEXUS_MAX_FILE_SIZE=N Override large-file skip threshold (KB). Default 512, max 32768.\n GITNEXUS_WORKER_SUB_BATCH_TIMEOUT_MS=N Worker idle timeout in milliseconds. Default 30000.\n GITNEXUS_WAL_CHECKPOINT_THRESHOLD=N LadybugDB WAL auto-checkpoint threshold in bytes (default 67108864 = 64 MiB; -1 keeps Ladybug stock ~16 MiB).\n GITNEXUS_WORKER_SUB_BATCH_MAX_BYTES=N Worker job byte budget. Default 8388608.\n GITNEXUS_WORKER_POOL_SIZE=N Parse worker count override. Default cores-1 capped at 16.\n GITNEXUS_PARSE_CHUNK_CONCURRENCY=N Concurrent in-flight parse chunks. Default 2.\n GITNEXUS_WORKER_MAX_RESPAWNS_PER_SLOT=N Max replacement spawns per slot before drop. Default 3.\n GITNEXUS_WORKER_MAX_CUMULATIVE_TIMEOUT_MS=N Total retry wall-time per job. Default 5x sub-batch timeout.\n GITNEXUS_WORKER_CONSECUTIVE_FAILURE_THRESHOLD=N Per-slot deaths to trip circuit breaker. Default max(3, poolSize).\n GITNEXUS_EMBEDDING_THREADS=N Limit local ONNX CPU threads for --embeddings.\n GITNEXUS_SEMANTIC_EXACT_SCAN_LIMIT=N Max embedding chunks for exact-scan fallback. Default 10000.\n GITNEXUS_VECTOR_MAX_DISTANCE=N Max accepted semantic/vector cosine distance (0 < N <= 2; higher values clamp to 2). Default 0.6 for MCP, 0.5 elsewhere.\n\nFlags override the corresponding env vars when both are provided.\n\nTip: `.gitnexusignore` supports `.gitignore`-style negation. Add e.g.\n `!__tests__/` to index a directory that is auto-filtered by default (#771).',
246
+ 'help.analyze.environment': '\nEnvironment variables:\n GITNEXUS_NO_GITIGNORE=1 Skip .gitignore parsing (still reads .gitnexusignore)\n GITNEXUS_MAX_FILE_SIZE=N Override large-file skip threshold (KB). Default 512, max 32768.\n GITNEXUS_WORKER_SUB_BATCH_TIMEOUT_MS=N Worker idle timeout in milliseconds. Default 30000.\n GITNEXUS_WAL_CHECKPOINT_THRESHOLD=N LadybugDB WAL auto-checkpoint threshold in bytes (default 67108864 = 64 MiB; -1 keeps Ladybug stock ~16 MiB).\n GITNEXUS_WORKER_SUB_BATCH_MAX_BYTES=N Worker job byte budget. Default 8388608.\n GITNEXUS_WORKER_POOL_SIZE=N Parse worker count override. Default cores-1 capped at 16.\n GITNEXUS_PARSE_CHUNK_CONCURRENCY=N Concurrent in-flight parse chunks. Default 2.\n GITNEXUS_WORKER_MAX_RESPAWNS_PER_SLOT=N Max replacement spawns per slot before drop. Default 3.\n GITNEXUS_WORKER_MAX_CUMULATIVE_TIMEOUT_MS=N Total retry wall-time per job. Default 5x sub-batch timeout.\n GITNEXUS_WORKER_CONSECUTIVE_FAILURE_THRESHOLD=N Per-slot deaths to trip circuit breaker. Default max(3, poolSize).\n GITNEXUS_WORKER_SHUTDOWN_DRAIN_MS=N Max wait at pool shutdown for a retired worker still inside native code (terminated at its next safe point instead of aborting the process). Default 30000.\n GITNEXUS_CPP_CAPTURE_BUDGET_MS=N Per-file wall-clock budget for C++ capture extraction; on breach the file keeps partial captures with a warning. Default 20000.\n GITNEXUS_EMBEDDING_THREADS=N Limit local ONNX CPU threads for --embeddings.\n GITNEXUS_SEMANTIC_EXACT_SCAN_LIMIT=N Max embedding chunks for exact-scan fallback. Default 10000.\n GITNEXUS_VECTOR_MAX_DISTANCE=N Max accepted semantic/vector cosine distance (0 < N <= 2; higher values clamp to 2). Default 0.6 for MCP, 0.5 elsewhere.\n\nFlags override the corresponding env vars when both are provided.\n\nTip: `.gitnexusignore` supports `.gitignore`-style negation. Add e.g.\n `!__tests__/` to index a directory that is auto-filtered by default (#771).',
242
247
  };
@@ -41,9 +41,10 @@ export declare const cliResources: {
41
41
  readonly 'clean.deleteBranch': "This will delete the branch index \"{{branch}}\" at: {{path}}";
42
42
  readonly 'clean.deletedBranch': "Deleted branch index: {{branch}}";
43
43
  readonly 'clean.lbugSidecars.state': "LadybugDB sidecar state: {{state}}";
44
- readonly 'clean.lbugSidecars.none': "No quarantined LadybugDB missing-shadow WAL sidecars found.";
45
- readonly 'clean.lbugSidecars.preview': "This will delete {{count}} quarantined LadybugDB missing-shadow WAL sidecar(s):";
46
- readonly 'clean.lbugSidecars.deleted': "Deleted {{count}} quarantined LadybugDB missing-shadow WAL sidecar(s).";
44
+ readonly 'clean.lbugSidecars.none': "No parked LadybugDB recovery sidecars found (missing-shadow WAL quarantines or dirty-recovery parks).";
45
+ readonly 'clean.lbugSidecars.preview': "This will delete {{count}} parked LadybugDB recovery sidecar(s) (missing-shadow WAL quarantines and dirty-recovery parks):";
46
+ readonly 'clean.lbugSidecars.deleted': "Deleted {{count}} parked LadybugDB recovery sidecar(s).";
47
+ readonly 'clean.lbugSidecars.failed': "Could not delete {{count}} locked file(s) — stop the process holding them (GitNexus MCP/serve or an antivirus scan) and re-run:";
47
48
  readonly 'remove.nothingToRemove': "Nothing to remove: {{message}}";
48
49
  readonly 'remove.deleteTarget': "This will delete the GitNexus index for: {{name}}";
49
50
  readonly 'remove.removed': "Removed: {{name}}";
@@ -118,6 +119,8 @@ export declare const cliResources: {
118
119
  readonly 'help.command.list.description': "List all indexed repositories";
119
120
  readonly 'help.command.status.description': "Show index status for current repo";
120
121
  readonly 'help.command.doctor.description': "Show runtime platform capabilities and embedding configuration";
122
+ readonly 'help.command.embeddings.description': "Manage the on-demand local embedding runtime";
123
+ readonly 'help.command.embeddings.install.description': "Install the local embedding stack (@huggingface/transformers + onnxruntime-node) on demand. Heals installs where npm skipped the optional packages (e.g. behind an HTTP proxy, #2370). Downloads only from your configured npm registry — mirrors and proxies apply.";
121
124
  readonly 'help.command.clean.description': "Delete GitNexus index for current repo";
122
125
  readonly 'help.command.remove.description': "Delete the GitNexus index for a registered repo (by alias, name, or absolute path). Unlike `clean`, does not require being inside the repo. Idempotent on unknown targets.";
123
126
  readonly 'help.command.wiki.description': "Generate repository wiki from knowledge graph";
@@ -174,7 +177,7 @@ export declare const cliResources: {
174
177
  readonly 'help.option.uninstall.force': "Apply the changes (default is a dry-run preview)";
175
178
  readonly 'help.option.clean.all': "Clean all indexed repos";
176
179
  readonly 'help.option.clean.branch': "Delete only the named branch index (not the workspace index)";
177
- readonly 'help.option.clean.lbugSidecars': "Clean quarantined LadybugDB missing-shadow WAL sidecars";
180
+ readonly 'help.option.clean.lbugSidecars': "Clean parked LadybugDB recovery sidecars (missing-shadow WAL quarantines and dirty-recovery parks)";
178
181
  readonly 'help.option.wiki.force': "Force full regeneration even if up to date";
179
182
  readonly 'help.option.wiki.provider': "LLM provider: openai, openrouter, azure, custom, cursor, claude, codex, or opencode (default: openai)";
180
183
  readonly 'help.option.wiki.model': "LLM model or Azure deployment name (default: minimax/minimax-m2.5)";
@@ -221,6 +224,8 @@ export declare const cliResources: {
221
224
  readonly 'help.option.check.cycles': "Detect circular imports and fail when any are found";
222
225
  readonly 'help.option.evalServer.host': "Bind address (default: 127.0.0.1, use 0.0.0.0 to expose to all interfaces)";
223
226
  readonly 'help.option.evalServer.idleTimeout': "Auto-shutdown after N seconds idle (0 = disabled)";
227
+ readonly 'help.option.embeddings.install.cuda': "Also download the CUDA GPU binaries (runs onnxruntime-node's NuGet postinstall; set GLOBAL_AGENT_HTTPS_PROXY behind a proxy)";
228
+ readonly 'help.option.embeddings.install.force': "Install into the runtime prefix even when the stack already resolves";
224
229
  readonly 'help.option.group.create.force': "Overwrite existing group";
225
230
  readonly 'help.option.group.sync.skipEmbeddings': "Exact + BM25 only (no embedding fallback)";
226
231
  readonly 'help.option.group.sync.exactOnly': "Exact match only";
@@ -239,7 +244,7 @@ export declare const cliResources: {
239
244
  readonly 'help.option.group.contracts.type': "Filter by contract type";
240
245
  readonly 'help.option.group.contracts.repo': "Filter by repo";
241
246
  readonly 'help.option.group.contracts.unmatched': "Show only unmatched contracts";
242
- readonly 'help.analyze.environment': "\nEnvironment variables:\n GITNEXUS_NO_GITIGNORE=1 Skip .gitignore parsing (still reads .gitnexusignore)\n GITNEXUS_MAX_FILE_SIZE=N Override large-file skip threshold (KB). Default 512, max 32768.\n GITNEXUS_WORKER_SUB_BATCH_TIMEOUT_MS=N Worker idle timeout in milliseconds. Default 30000.\n GITNEXUS_WAL_CHECKPOINT_THRESHOLD=N LadybugDB WAL auto-checkpoint threshold in bytes (default 67108864 = 64 MiB; -1 keeps Ladybug stock ~16 MiB).\n GITNEXUS_WORKER_SUB_BATCH_MAX_BYTES=N Worker job byte budget. Default 8388608.\n GITNEXUS_WORKER_POOL_SIZE=N Parse worker count override. Default cores-1 capped at 16.\n GITNEXUS_PARSE_CHUNK_CONCURRENCY=N Concurrent in-flight parse chunks. Default 2.\n GITNEXUS_WORKER_MAX_RESPAWNS_PER_SLOT=N Max replacement spawns per slot before drop. Default 3.\n GITNEXUS_WORKER_MAX_CUMULATIVE_TIMEOUT_MS=N Total retry wall-time per job. Default 5x sub-batch timeout.\n GITNEXUS_WORKER_CONSECUTIVE_FAILURE_THRESHOLD=N Per-slot deaths to trip circuit breaker. Default max(3, poolSize).\n GITNEXUS_EMBEDDING_THREADS=N Limit local ONNX CPU threads for --embeddings.\n GITNEXUS_SEMANTIC_EXACT_SCAN_LIMIT=N Max embedding chunks for exact-scan fallback. Default 10000.\n GITNEXUS_VECTOR_MAX_DISTANCE=N Max accepted semantic/vector cosine distance (0 < N <= 2; higher values clamp to 2). Default 0.6 for MCP, 0.5 elsewhere.\n\nFlags override the corresponding env vars when both are provided.\n\nTip: `.gitnexusignore` supports `.gitignore`-style negation. Add e.g.\n `!__tests__/` to index a directory that is auto-filtered by default (#771).";
247
+ readonly 'help.analyze.environment': "\nEnvironment variables:\n GITNEXUS_NO_GITIGNORE=1 Skip .gitignore parsing (still reads .gitnexusignore)\n GITNEXUS_MAX_FILE_SIZE=N Override large-file skip threshold (KB). Default 512, max 32768.\n GITNEXUS_WORKER_SUB_BATCH_TIMEOUT_MS=N Worker idle timeout in milliseconds. Default 30000.\n GITNEXUS_WAL_CHECKPOINT_THRESHOLD=N LadybugDB WAL auto-checkpoint threshold in bytes (default 67108864 = 64 MiB; -1 keeps Ladybug stock ~16 MiB).\n GITNEXUS_WORKER_SUB_BATCH_MAX_BYTES=N Worker job byte budget. Default 8388608.\n GITNEXUS_WORKER_POOL_SIZE=N Parse worker count override. Default cores-1 capped at 16.\n GITNEXUS_PARSE_CHUNK_CONCURRENCY=N Concurrent in-flight parse chunks. Default 2.\n GITNEXUS_WORKER_MAX_RESPAWNS_PER_SLOT=N Max replacement spawns per slot before drop. Default 3.\n GITNEXUS_WORKER_MAX_CUMULATIVE_TIMEOUT_MS=N Total retry wall-time per job. Default 5x sub-batch timeout.\n GITNEXUS_WORKER_CONSECUTIVE_FAILURE_THRESHOLD=N Per-slot deaths to trip circuit breaker. Default max(3, poolSize).\n GITNEXUS_WORKER_SHUTDOWN_DRAIN_MS=N Max wait at pool shutdown for a retired worker still inside native code (terminated at its next safe point instead of aborting the process). Default 30000.\n GITNEXUS_CPP_CAPTURE_BUDGET_MS=N Per-file wall-clock budget for C++ capture extraction; on breach the file keeps partial captures with a warning. Default 20000.\n GITNEXUS_EMBEDDING_THREADS=N Limit local ONNX CPU threads for --embeddings.\n GITNEXUS_SEMANTIC_EXACT_SCAN_LIMIT=N Max embedding chunks for exact-scan fallback. Default 10000.\n GITNEXUS_VECTOR_MAX_DISTANCE=N Max accepted semantic/vector cosine distance (0 < N <= 2; higher values clamp to 2). Default 0.6 for MCP, 0.5 elsewhere.\n\nFlags override the corresponding env vars when both are provided.\n\nTip: `.gitnexusignore` supports `.gitignore`-style negation. Add e.g.\n `!__tests__/` to index a directory that is auto-filtered by default (#771).";
243
248
  };
244
249
  readonly 'zh-CN': {
245
250
  'common.notIndexed': string;
@@ -286,6 +291,7 @@ export declare const cliResources: {
286
291
  'clean.lbugSidecars.none': string;
287
292
  'clean.lbugSidecars.preview': string;
288
293
  'clean.lbugSidecars.deleted': string;
294
+ 'clean.lbugSidecars.failed': string;
289
295
  'remove.nothingToRemove': string;
290
296
  'remove.deleteTarget': string;
291
297
  'remove.removed': string;
@@ -360,6 +366,8 @@ export declare const cliResources: {
360
366
  'help.command.list.description': string;
361
367
  'help.command.status.description': string;
362
368
  'help.command.doctor.description': string;
369
+ 'help.command.embeddings.description': string;
370
+ 'help.command.embeddings.install.description': string;
363
371
  'help.command.clean.description': string;
364
372
  'help.command.remove.description': string;
365
373
  'help.command.wiki.description': string;
@@ -463,6 +471,8 @@ export declare const cliResources: {
463
471
  'help.option.check.cycles': string;
464
472
  'help.option.evalServer.host': string;
465
473
  'help.option.evalServer.idleTimeout': string;
474
+ 'help.option.embeddings.install.cuda': string;
475
+ 'help.option.embeddings.install.force': string;
466
476
  'help.option.group.create.force': string;
467
477
  'help.option.group.sync.skipEmbeddings': string;
468
478
  'help.option.group.sync.exactOnly': string;
@@ -43,6 +43,7 @@ export declare const zhCN: {
43
43
  'clean.lbugSidecars.none': string;
44
44
  'clean.lbugSidecars.preview': string;
45
45
  'clean.lbugSidecars.deleted': string;
46
+ 'clean.lbugSidecars.failed': string;
46
47
  'remove.nothingToRemove': string;
47
48
  'remove.deleteTarget': string;
48
49
  'remove.removed': string;
@@ -117,6 +118,8 @@ export declare const zhCN: {
117
118
  'help.command.list.description': string;
118
119
  'help.command.status.description': string;
119
120
  'help.command.doctor.description': string;
121
+ 'help.command.embeddings.description': string;
122
+ 'help.command.embeddings.install.description': string;
120
123
  'help.command.clean.description': string;
121
124
  'help.command.remove.description': string;
122
125
  'help.command.wiki.description': string;
@@ -220,6 +223,8 @@ export declare const zhCN: {
220
223
  'help.option.check.cycles': string;
221
224
  'help.option.evalServer.host': string;
222
225
  'help.option.evalServer.idleTimeout': string;
226
+ 'help.option.embeddings.install.cuda': string;
227
+ 'help.option.embeddings.install.force': string;
223
228
  'help.option.group.create.force': string;
224
229
  'help.option.group.sync.skipEmbeddings': string;
225
230
  'help.option.group.sync.exactOnly': string;
@@ -40,9 +40,10 @@ export const zhCN = {
40
40
  'clean.deleteBranch': '将删除分支索引 “{{branch}}”,路径:{{path}}',
41
41
  'clean.deletedBranch': '已删除分支索引:{{branch}}',
42
42
  'clean.lbugSidecars.state': 'LadybugDB sidecar 状态:{{state}}',
43
- 'clean.lbugSidecars.none': '未找到已隔离的 LadybugDB missing-shadow WAL sidecar。',
44
- 'clean.lbugSidecars.preview': '将删除 {{count}} 个已隔离的 LadybugDB missing-shadow WAL sidecar:',
45
- 'clean.lbugSidecars.deleted': '已删除 {{count}} 个已隔离的 LadybugDB missing-shadow WAL sidecar。',
43
+ 'clean.lbugSidecars.none': '未找到已暂存的 LadybugDB 恢复 sidecar(missing-shadow WAL 隔离文件或 dirty-recovery 暂存文件)。',
44
+ 'clean.lbugSidecars.preview': '将删除 {{count}} 个已暂存的 LadybugDB 恢复 sidecar(missing-shadow WAL 隔离文件与 dirty-recovery 暂存文件):',
45
+ 'clean.lbugSidecars.deleted': '已删除 {{count}} 个已暂存的 LadybugDB 恢复 sidecar。',
46
+ 'clean.lbugSidecars.failed': '有 {{count}} 个文件被锁定而无法删除 — 请停止占用它们的进程(GitNexus MCP/serve 或杀毒软件扫描)后重试:',
46
47
  'remove.nothingToRemove': '无需移除:{{message}}',
47
48
  'remove.deleteTarget': '将删除该仓库的 GitNexus 索引:{{name}}',
48
49
  'remove.removed': '已移除:{{name}}',
@@ -117,6 +118,8 @@ export const zhCN = {
117
118
  'help.command.list.description': '列出所有已索引仓库',
118
119
  'help.command.status.description': '显示当前仓库的索引状态',
119
120
  'help.command.doctor.description': '显示运行平台能力和嵌入配置',
121
+ 'help.command.embeddings.description': '管理按需安装的本地嵌入运行时',
122
+ 'help.command.embeddings.install.description': '按需安装本地嵌入组件(@huggingface/transformers + onnxruntime-node)。修复 npm 跳过可选包的安装(例如在 HTTP 代理后,#2370)。仅从你配置的 npm registry 下载 — 镜像和代理均生效。',
120
123
  'help.command.clean.description': '删除当前仓库的 GitNexus 索引',
121
124
  'help.command.remove.description': '删除已注册仓库的 GitNexus 索引(按别名、名称或绝对路径)。与 `clean` 不同,不要求位于仓库内;未知目标会幂等处理。',
122
125
  'help.command.wiki.description': '从知识图谱生成仓库 Wiki',
@@ -173,7 +176,7 @@ export const zhCN = {
173
176
  'help.option.uninstall.force': '应用更改(默认仅为预演预览)',
174
177
  'help.option.clean.all': '清理所有已索引仓库',
175
178
  'help.option.clean.branch': '仅删除指定分支的索引(不影响工作区索引)',
176
- 'help.option.clean.lbugSidecars': '清理已隔离的 LadybugDB missing-shadow WAL sidecar',
179
+ 'help.option.clean.lbugSidecars': '清理已暂存的 LadybugDB 恢复 sidecar(missing-shadow WAL 隔离文件与 dirty-recovery 暂存文件)',
177
180
  'help.option.wiki.force': '即使已是最新也强制完整重新生成',
178
181
  'help.option.wiki.provider': 'LLM 提供商:openai、openrouter、azure、custom、cursor、claude、codex 或 opencode(默认:openai)',
179
182
  'help.option.wiki.model': 'LLM 模型或 Azure deployment 名称(默认:minimax/minimax-m2.5)',
@@ -220,6 +223,8 @@ export const zhCN = {
220
223
  'help.option.check.cycles': '检测循环导入,并在发现循环时失败',
221
224
  'help.option.evalServer.host': '绑定地址(默认:127.0.0.1;用 0.0.0.0 暴露到所有网卡)',
222
225
  'help.option.evalServer.idleTimeout': '空闲 N 秒后自动关闭(0 = 禁用)',
226
+ 'help.option.embeddings.install.cuda': '同时下载 CUDA GPU 二进制文件(运行 onnxruntime-node 的 NuGet postinstall;代理后请设置 GLOBAL_AGENT_HTTPS_PROXY)',
227
+ 'help.option.embeddings.install.force': '即使嵌入组件已可解析,也强制安装到运行时目录',
223
228
  'help.option.group.create.force': '覆盖现有仓库组',
224
229
  'help.option.group.sync.skipEmbeddings': '仅使用 exact + BM25(不使用嵌入回退)',
225
230
  'help.option.group.sync.exactOnly': '仅精确匹配',
@@ -238,5 +243,5 @@ export const zhCN = {
238
243
  'help.option.group.contracts.type': '按契约类型过滤',
239
244
  'help.option.group.contracts.repo': '按仓库过滤',
240
245
  'help.option.group.contracts.unmatched': '仅显示未匹配契约',
241
- 'help.analyze.environment': '\n环境变量:\n GITNEXUS_NO_GITIGNORE=1 跳过 .gitignore 解析(仍读取 .gitnexusignore)\n GITNEXUS_MAX_FILE_SIZE=N 覆盖大文件跳过阈值(KB)。默认 512,最大 32768。\n GITNEXUS_WORKER_SUB_BATCH_TIMEOUT_MS=N Worker 空闲超时(毫秒)。默认 30000。\n GITNEXUS_WAL_CHECKPOINT_THRESHOLD=N LadybugDB WAL 自动 checkpoint 阈值(字节,默认 67108864 = 64 MiB;-1 保持 Ladybug 默认约 16 MiB)。\n GITNEXUS_WORKER_SUB_BATCH_MAX_BYTES=N Worker 作业字节预算。默认 8388608。\n GITNEXUS_WORKER_POOL_SIZE=N 解析 worker 数量覆盖值。默认 cores-1,最多 16。\n GITNEXUS_PARSE_CHUNK_CONCURRENCY=N 并发进行中的解析分块数。默认 2。\n GITNEXUS_WORKER_MAX_RESPAWNS_PER_SLOT=N 每个 slot 丢弃前允许的最大替换进程数。默认 3。\n GITNEXUS_WORKER_MAX_CUMULATIVE_TIMEOUT_MS=N 每个作业的总重试墙钟时间。默认 5 倍子批次超时。\n GITNEXUS_WORKER_CONSECUTIVE_FAILURE_THRESHOLD=N 每个 slot 触发熔断的死亡次数。默认 max(3, poolSize)。\n GITNEXUS_EMBEDDING_THREADS=N 限制 --embeddings 的本地 ONNX CPU 线程数。\n GITNEXUS_SEMANTIC_EXACT_SCAN_LIMIT=N exact-scan 回退的最大嵌入分块数。默认 10000。\n GITNEXUS_VECTOR_MAX_DISTANCE=N 语义/向量搜索接受的最大余弦距离(0 < N <= 2;超出则钳制为 2)。MCP 默认 0.6,其他路径默认 0.5。\n\n当参数和对应环境变量同时提供时,参数优先。\n\n提示:`.gitnexusignore` 支持 `.gitignore` 风格的取反。比如添加\n `!__tests__/` 可以索引默认自动过滤的目录(#771)。',
246
+ 'help.analyze.environment': '\n环境变量:\n GITNEXUS_NO_GITIGNORE=1 跳过 .gitignore 解析(仍读取 .gitnexusignore)\n GITNEXUS_MAX_FILE_SIZE=N 覆盖大文件跳过阈值(KB)。默认 512,最大 32768。\n GITNEXUS_WORKER_SUB_BATCH_TIMEOUT_MS=N Worker 空闲超时(毫秒)。默认 30000。\n GITNEXUS_WAL_CHECKPOINT_THRESHOLD=N LadybugDB WAL 自动 checkpoint 阈值(字节,默认 67108864 = 64 MiB;-1 保持 Ladybug 默认约 16 MiB)。\n GITNEXUS_WORKER_SUB_BATCH_MAX_BYTES=N Worker 作业字节预算。默认 8388608。\n GITNEXUS_WORKER_POOL_SIZE=N 解析 worker 数量覆盖值。默认 cores-1,最多 16。\n GITNEXUS_PARSE_CHUNK_CONCURRENCY=N 并发进行中的解析分块数。默认 2。\n GITNEXUS_WORKER_MAX_RESPAWNS_PER_SLOT=N 每个 slot 丢弃前允许的最大替换进程数。默认 3。\n GITNEXUS_WORKER_MAX_CUMULATIVE_TIMEOUT_MS=N 每个作业的总重试墙钟时间。默认 5 倍子批次超时。\n GITNEXUS_WORKER_CONSECUTIVE_FAILURE_THRESHOLD=N 每个 slot 触发熔断的死亡次数。默认 max(3, poolSize)。\n GITNEXUS_WORKER_SHUTDOWN_DRAIN_MS=N 线程池关闭时等待仍在原生代码中的已退役 worker 的最长时间(到达安全点后再终止,避免进程级 abort)。默认 30000。\n GITNEXUS_CPP_CAPTURE_BUDGET_MS=N C++ 捕获提取的每文件墙钟预算;超出后该文件保留部分捕获并输出警告。默认 20000。\n GITNEXUS_EMBEDDING_THREADS=N 限制 --embeddings 的本地 ONNX CPU 线程数。\n GITNEXUS_SEMANTIC_EXACT_SCAN_LIMIT=N exact-scan 回退的最大嵌入分块数。默认 10000。\n GITNEXUS_VECTOR_MAX_DISTANCE=N 语义/向量搜索接受的最大余弦距离(0 < N <= 2;超出则钳制为 2)。MCP 默认 0.6,其他路径默认 0.5。\n\n当参数和对应环境变量同时提供时,参数优先。\n\n提示:`.gitnexusignore` 支持 `.gitignore` 风格的取反。比如添加\n `!__tests__/` 可以索引默认自动过滤的目录(#771)。',
242
247
  };
package/dist/cli/index.js CHANGED
@@ -153,13 +153,24 @@ program
153
153
  .command('doctor')
154
154
  .description('Show runtime platform capabilities and embedding configuration')
155
155
  .action(createLazyAction(() => import('./doctor.js'), 'doctorCommand'));
156
+ program
157
+ .command('embeddings')
158
+ .description('Manage the on-demand local embedding runtime')
159
+ .command('install')
160
+ .description('Install the local embedding stack (@huggingface/transformers + onnxruntime-node) on demand. ' +
161
+ 'Heals installs where npm skipped the optional packages (e.g. behind an HTTP proxy, #2370). ' +
162
+ 'Downloads only from your configured npm registry — mirrors and proxies apply.')
163
+ .option('--cuda', "Also download the CUDA GPU binaries (runs onnxruntime-node's NuGet postinstall; " +
164
+ 'set GLOBAL_AGENT_HTTPS_PROXY behind a proxy)')
165
+ .option('--force', 'Install into the runtime prefix even when the stack already resolves')
166
+ .action(createLazyAction(() => import('./embeddings.js'), 'embeddingsInstallCommand'));
156
167
  program
157
168
  .command('clean')
158
169
  .description('Delete GitNexus index for current repo')
159
170
  .option('-f, --force', 'Skip confirmation prompt')
160
171
  .option('--all', 'Clean all indexed repos')
161
172
  .option('--branch <name>', 'Delete only the named branch index (not the workspace index)')
162
- .option('--lbug-sidecars', 'Clean quarantined LadybugDB missing-shadow WAL sidecars')
173
+ .option('--lbug-sidecars', 'Clean parked LadybugDB recovery sidecars (missing-shadow WAL quarantines and dirty-recovery parks)')
163
174
  .action(createLazyAction(() => import('./clean.js'), 'cleanCommand'));
164
175
  program
165
176
  .command('remove <target>')
@@ -15,6 +15,7 @@
15
15
  */
16
16
  import path from 'path';
17
17
  import { listRegisteredRepos } from '../../storage/repo-manager.js';
18
+ import { escapeCypherString } from '../lbug/cypher-escape.js';
18
19
  /**
19
20
  * Find the best matching repo for a given working directory.
20
21
  * Matches by checking if cwd is within the repo's path.
@@ -76,7 +77,7 @@ async function findRepoForCwd(cwd) {
76
77
  export async function augment(pattern, cwd) {
77
78
  if (!pattern || pattern.length < 3)
78
79
  return '';
79
- const patternFirstWord = pattern.trim().replace(/'/g, "''").split(/\s+/)[0];
80
+ const patternFirstWord = escapeCypherString(pattern.trim()).split(/\s+/)[0];
80
81
  if (!patternFirstWord || patternFirstWord.length < 2)
81
82
  return '';
82
83
  const workDir = cwd || process.cwd();
@@ -97,7 +98,7 @@ export async function augment(pattern, cwd) {
97
98
  // Step 2: Map BM25 file results to symbols
98
99
  const symbolMatches = [];
99
100
  for (const result of bm25Results.slice(0, 5)) {
100
- const escaped = result.filePath.replace(/'/g, "''");
101
+ const escaped = escapeCypherString(result.filePath);
101
102
  try {
102
103
  const symbols = await executeQuery(repoId, `
103
104
  MATCH (n) WHERE n.filePath = '${escaped}'
@@ -147,7 +148,7 @@ export async function augment(pattern, cwd) {
147
148
  .filter((sym, i, arr) => arr.findIndex((s) => s.nodeId === sym.nodeId) === i);
148
149
  if (uniqueSymbols.length === 0)
149
150
  return '';
150
- const idList = uniqueSymbols.map((s) => `'${s.nodeId.replace(/'/g, "''")}'`).join(', ');
151
+ const idList = uniqueSymbols.map((s) => `'${escapeCypherString(s.nodeId)}'`).join(', ');
151
152
  // Batch fetch callers
152
153
  const callersMap = new Map();
153
154
  try {
@@ -16,8 +16,9 @@ import { DEFAULT_EMBEDDING_CONFIG } from './types.js';
16
16
  import { isHttpMode, getHttpDimensions, httpEmbed } from './http-client.js';
17
17
  import { resolveEmbeddingConfig } from './config.js';
18
18
  import { applyHfEnvOverrides, isHfDownloadFailure, withHfDownloadRetry } from './hf-env.js';
19
- import { getLocalEmbeddingRuntimeBlocker } from './runtime-support.js';
19
+ import { getLocalEmbeddingRuntimeBlocker, getMissingLocalEmbeddingStackMessage, } from './runtime-support.js';
20
20
  import { ensureOnnxRuntimeCommonResolvable } from './onnxruntime-common-resolver.js';
21
+ import { ensureEmbeddingStackResolvable } from './runtime-install.js';
21
22
  import { ensureOnnxRuntimeNodeMatchesSystem, isEffectiveCudaAvailable, } from './onnxruntime-node-resolver.js';
22
23
  import { logger } from '../logger.js';
23
24
  // Module-level state for singleton pattern
@@ -73,6 +74,11 @@ export const initEmbedder = async (onProgress, config = {}, forceDevice) => {
73
74
  try {
74
75
  // Lazy-load transformers.js only after the runtime guard has passed, so
75
76
  // unsupported platforms never reach the native ONNX import (#1515).
77
+ // Registered FIRST so it sits last in the hook chain (registerHooks runs
78
+ // the most recent hook first): when the optional stack was pruned at
79
+ // install time (#2370), its bare specifiers fall back to the on-demand
80
+ // runtime prefix.
81
+ ensureEmbeddingStackResolvable();
76
82
  // Under pnpm-strict / `pnpm dlx`, transformers' phantom `onnxruntime-common`
77
83
  // import is unresolvable; register the fallback resolver first (#307).
78
84
  ensureOnnxRuntimeCommonResolvable();
@@ -82,7 +88,15 @@ export const initEmbedder = async (onProgress, config = {}, forceDevice) => {
82
88
  // to the CUDA-13 build before transformers imports them. No-op on matching
83
89
  // layouts, non-CUDA, Windows/DirectML, and macOS.
84
90
  ensureOnnxRuntimeNodeMatchesSystem();
85
- const { pipeline, env } = await import('@huggingface/transformers');
91
+ // The stack is an optionalDependency: npm prunes it when onnxruntime-node's
92
+ // postinstall can't reach api.nuget.org (#2370). Rethrow with actionable
93
+ // reinstall guidance instead of a raw ERR_MODULE_NOT_FOUND.
94
+ const { pipeline, env } = await import('@huggingface/transformers').catch((err) => {
95
+ const missing = getMissingLocalEmbeddingStackMessage(err);
96
+ if (missing)
97
+ throw new Error(missing);
98
+ throw err;
99
+ });
86
100
  // Configure transformers.js environment
87
101
  env.allowLocalModels = false;
88
102
  // Bridge user-controlled env vars to transformers.js: HF_HOME →
@@ -51,6 +51,26 @@ export declare const batchInsertEmbeddings: (executeWithReusedStatement: (cypher
51
51
  embedding: number[];
52
52
  contentHash?: string;
53
53
  }>) => Promise<void>;
54
+ /**
55
+ * Create the vector index for semantic search (indexes the CodeEmbedding table).
56
+ *
57
+ * Keeps the embedding-specific extension-install policy gate here
58
+ * (ensureVectorExtensionAvailable → resolveEmbeddingInstallPolicy, default
59
+ * `auto` for the analyze write path), then delegates the actual
60
+ * `CALL CREATE_VECTOR_INDEX(...)` to the adapter, which runs it through the
61
+ * unprepared `conn.query()` path. It must NOT go through the injected
62
+ * `executeQuery` (prepared `conn.prepare()`): LadybugDB cannot prepare that
63
+ * procedure and fails with "We do not support prepare multiple statements" —
64
+ * the silent degrade in #2114.
65
+ *
66
+ * Exported for run-analyze's wipe-and-restore seam (tri-review 4669518496
67
+ * P1): a full-rebuild/escalated write wipes the DB files — index included —
68
+ * and a preserve-only run restores embedding ROWS without ever reaching the
69
+ * pipeline call sites below, so the orchestrator recreates the index through
70
+ * this same policy-gated, warn-on-failure entry point. Consumed there via
71
+ * dynamic import only (lazy-embeddings convention, #2370).
72
+ */
73
+ export declare const buildVectorIndex: () => Promise<boolean>;
54
74
  export interface EmbeddingPipelineResult {
55
75
  nodesProcessed: number;
56
76
  chunksProcessed: number;
@@ -18,6 +18,7 @@ import { DEFAULT_VECTOR_MAX_DISTANCE, getVectorMaxDistance, resolveEmbeddingConf
18
18
  import { rankExactEmbeddingRows } from './exact-search.js';
19
19
  import { EMBEDDING_TABLE_NAME, EMBEDDING_INDEX_NAME, STALE_HASH_SENTINEL } from '../lbug/schema.js';
20
20
  import { loadVectorExtension, createVectorIndex } from '../lbug/lbug-adapter.js';
21
+ import { escapeCypherString } from '../lbug/cypher-escape.js';
21
22
  import { getExactScanLimit } from '../platform/capabilities.js';
22
23
  import { logger } from '../logger.js';
23
24
  const isDev = process.env.NODE_ENV === 'development';
@@ -163,8 +164,15 @@ export const batchInsertEmbeddings = async (executeWithReusedStatement, updates)
163
164
  * `executeQuery` (prepared `conn.prepare()`): LadybugDB cannot prepare that
164
165
  * procedure and fails with "We do not support prepare multiple statements" —
165
166
  * the silent degrade in #2114.
167
+ *
168
+ * Exported for run-analyze's wipe-and-restore seam (tri-review 4669518496
169
+ * P1): a full-rebuild/escalated write wipes the DB files — index included —
170
+ * and a preserve-only run restores embedding ROWS without ever reaching the
171
+ * pipeline call sites below, so the orchestrator recreates the index through
172
+ * this same policy-gated, warn-on-failure entry point. Consumed there via
173
+ * dynamic import only (lazy-embeddings convention, #2370).
166
174
  */
167
- const buildVectorIndex = async () => {
175
+ export const buildVectorIndex = async () => {
168
176
  // This pre-check applies the embedding-specific install policy
169
177
  // (resolveEmbeddingInstallPolicy, default `auto` for analyze) before reaching
170
178
  // the adapter. The adapter's createVectorIndex() calls loadVectorExtension()
@@ -536,7 +544,7 @@ export const semanticSearch = async (executeQuery, query, k = 10, maxDistance =
536
544
  // Batch-fetch metadata per label
537
545
  const results = [];
538
546
  for (const [label, items] of byLabel) {
539
- const idList = items.map((i) => `'${i.nodeId.replace(/'/g, "''")}'`).join(', ');
547
+ const idList = items.map((i) => `'${escapeCypherString(i.nodeId)}'`).join(', ');
540
548
  try {
541
549
  const nodeQuery = `
542
550
  MATCH (n:\`${label}\`) WHERE n.id IN [${idList}]
@@ -11,7 +11,13 @@
11
11
  * via `AbortSignal.timeout` on the underlying fetch.
12
12
  */
13
13
  /**
14
- * Check whether HTTP embedding mode is active (env vars are set).
14
+ * Whether HTTP embedding mode is active i.e. both `GITNEXUS_EMBEDDING_URL` and
15
+ * `GITNEXUS_EMBEDDING_MODEL` are set. A pure presence probe: it deliberately does
16
+ * NOT call {@link readConfig}, so it never throws on a malformed
17
+ * `GITNEXUS_EMBEDDING_DIMS`. This lets its ~13 call sites (analyze, doctor,
18
+ * run-analyze, embedder, mcp) probe the mode without a defensive try/catch; the
19
+ * DIMS value is validated where it is actually used (`readConfig` in
20
+ * `httpEmbed`/`httpEmbedQuery`), surfacing a recognizable config error. See #2385.
15
21
  */
16
22
  export declare const isHttpMode: () => boolean;
17
23
  /**
@@ -26,6 +32,27 @@ export declare const getHttpDimensions: () => number | undefined;
26
32
  * custom-endpoint confirmation can mask the same way.
27
33
  */
28
34
  export declare const safeUrl: (url: string) => string;
35
+ /**
36
+ * Error thrown by this module's HTTP embedding path (`httpEmbedBatch` /
37
+ * `httpEmbed` / `httpEmbedQuery`) for any endpoint failure — a
38
+ * connection/timeout/DNS error, an open circuit, a non-OK status, an
39
+ * unparseable or wrong-shape response body, an empty response, or a dimension
40
+ * mismatch.
41
+ *
42
+ * Carrying a distinct type (rather than a plain `Error`) lets the CLI tell a
43
+ * *custom endpoint* failure apart from a HuggingFace *model download* failure
44
+ * without matching message text: the two share the same underlying network
45
+ * substrings (`fetch failed`, `ECONNREFUSED`, …), which is exactly why
46
+ * `isNetworkFetchError` in `hf-env.ts` cannot tell them apart. Keying on the
47
+ * type instead of the message is also locale-proof and survives message
48
+ * rewording. The human-readable `.message` (built with `safeUrl` and the
49
+ * underlying reason) is what the CLI surfaces to the user. See #2385.
50
+ */
51
+ export declare class HttpEmbeddingError extends Error {
52
+ constructor(message: string, options?: {
53
+ cause?: unknown;
54
+ });
55
+ }
29
56
  /**
30
57
  * Embed texts via the HTTP backend, splitting into batches.
31
58
  * Reads config from env vars on every call.