kynjal-cli 4.0.0 → 4.0.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 (502) hide show
  1. package/dist/src/appliance/gguf-engine.d.ts +91 -0
  2. package/dist/src/appliance/gguf-engine.d.ts.map +1 -0
  3. package/dist/src/appliance/gguf-engine.js +286 -525
  4. package/dist/src/appliance/gguf-engine.js.map +1 -1
  5. package/dist/src/appliance/ruvllm-bridge.d.ts +102 -0
  6. package/dist/src/appliance/ruvllm-bridge.d.ts.map +1 -0
  7. package/dist/src/appliance/ruvllm-bridge.js +203 -403
  8. package/dist/src/appliance/ruvllm-bridge.js.map +1 -1
  9. package/dist/src/appliance/rvfa-builder.d.ts +44 -0
  10. package/dist/src/appliance/rvfa-builder.d.ts.map +1 -0
  11. package/dist/src/appliance/rvfa-builder.js +154 -208
  12. package/dist/src/appliance/rvfa-builder.js.map +1 -1
  13. package/dist/src/appliance/rvfa-distribution.d.ts +97 -0
  14. package/dist/src/appliance/rvfa-distribution.d.ts.map +1 -0
  15. package/dist/src/appliance/rvfa-distribution.js +260 -423
  16. package/dist/src/appliance/rvfa-distribution.js.map +1 -1
  17. package/dist/src/appliance/rvfa-format.d.ts +111 -0
  18. package/dist/src/appliance/rvfa-format.d.ts.map +1 -0
  19. package/dist/src/appliance/rvfa-format.js +128 -200
  20. package/dist/src/appliance/rvfa-format.js.map +1 -1
  21. package/dist/src/appliance/rvfa-runner.d.ts +69 -0
  22. package/dist/src/appliance/rvfa-runner.d.ts.map +1 -0
  23. package/dist/src/appliance/rvfa-runner.js +168 -304
  24. package/dist/src/appliance/rvfa-runner.js.map +1 -1
  25. package/dist/src/appliance/rvfa-signing.d.ts +123 -0
  26. package/dist/src/appliance/rvfa-signing.d.ts.map +1 -0
  27. package/dist/src/appliance/rvfa-signing.js +173 -295
  28. package/dist/src/appliance/rvfa-signing.js.map +1 -1
  29. package/dist/src/benchmarks/pretrain/index.d.ts +58 -0
  30. package/dist/src/benchmarks/pretrain/index.d.ts.map +1 -0
  31. package/dist/src/benchmarks/pretrain/index.js +331 -542
  32. package/dist/src/benchmarks/pretrain/index.js.map +1 -1
  33. package/dist/src/commands/agent.js +574 -697
  34. package/dist/src/commands/agent.js.map +1 -1
  35. package/dist/src/commands/analyze.js +1218 -1548
  36. package/dist/src/commands/analyze.js.map +1 -1
  37. package/dist/src/commands/appliance-advanced.js +158 -267
  38. package/dist/src/commands/appliance-advanced.js.map +1 -1
  39. package/dist/src/commands/appliance.js +318 -493
  40. package/dist/src/commands/appliance.js.map +1 -1
  41. package/dist/src/commands/benchmark.js +372 -523
  42. package/dist/src/commands/benchmark.js.map +1 -1
  43. package/dist/src/commands/claims.js +274 -364
  44. package/dist/src/commands/claims.js.map +1 -1
  45. package/dist/src/commands/cleanup.js +113 -157
  46. package/dist/src/commands/cleanup.js.map +1 -1
  47. package/dist/src/commands/completions.js +477 -118
  48. package/dist/src/commands/completions.js.map +1 -1
  49. package/dist/src/commands/config.js +237 -303
  50. package/dist/src/commands/config.js.map +1 -1
  51. package/dist/src/commands/daemon.js +487 -596
  52. package/dist/src/commands/daemon.js.map +1 -1
  53. package/dist/src/commands/deployment.js +194 -275
  54. package/dist/src/commands/deployment.js.map +1 -1
  55. package/dist/src/commands/doctor.js +504 -686
  56. package/dist/src/commands/doctor.js.map +1 -1
  57. package/dist/src/commands/embeddings.js +1293 -1543
  58. package/dist/src/commands/embeddings.js.map +1 -1
  59. package/dist/src/commands/guidance.js +449 -596
  60. package/dist/src/commands/guidance.js.map +1 -1
  61. package/dist/src/commands/hive-mind.js +854 -938
  62. package/dist/src/commands/hive-mind.js.map +1 -1
  63. package/dist/src/commands/hooks.js +3112 -3519
  64. package/dist/src/commands/hooks.js.map +1 -1
  65. package/dist/src/commands/index.d.ts +115 -0
  66. package/dist/src/commands/index.d.ts.map +1 -0
  67. package/dist/src/commands/index.js +126 -308
  68. package/dist/src/commands/index.js.map +1 -1
  69. package/dist/src/commands/init.js +788 -940
  70. package/dist/src/commands/init.js.map +1 -1
  71. package/dist/src/commands/issues.js +383 -558
  72. package/dist/src/commands/issues.js.map +1 -1
  73. package/dist/src/commands/mcp.js +493 -605
  74. package/dist/src/commands/mcp.js.map +1 -1
  75. package/dist/src/commands/memory.js +833 -1026
  76. package/dist/src/commands/memory.js.map +1 -1
  77. package/dist/src/commands/migrate.js +282 -347
  78. package/dist/src/commands/migrate.js.map +1 -1
  79. package/dist/src/commands/neural.js +1289 -1563
  80. package/dist/src/commands/neural.js.map +1 -1
  81. package/dist/src/commands/performance.js +497 -643
  82. package/dist/src/commands/performance.js.map +1 -1
  83. package/dist/src/commands/plugins.js +668 -841
  84. package/dist/src/commands/plugins.js.map +1 -1
  85. package/dist/src/commands/process.js +392 -447
  86. package/dist/src/commands/process.js.map +1 -1
  87. package/dist/src/commands/progress.js +162 -256
  88. package/dist/src/commands/progress.js.map +1 -1
  89. package/dist/src/commands/providers.js +150 -220
  90. package/dist/src/commands/providers.js.map +1 -1
  91. package/dist/src/commands/route.js +520 -665
  92. package/dist/src/commands/route.js.map +1 -1
  93. package/dist/src/commands/ruvector/backup.js +505 -651
  94. package/dist/src/commands/ruvector/backup.js.map +1 -1
  95. package/dist/src/commands/ruvector/benchmark.js +349 -401
  96. package/dist/src/commands/ruvector/benchmark.js.map +1 -1
  97. package/dist/src/commands/ruvector/import.js +224 -266
  98. package/dist/src/commands/ruvector/import.js.map +1 -1
  99. package/dist/src/commands/ruvector/index.js +37 -75
  100. package/dist/src/commands/ruvector/index.js.map +1 -1
  101. package/dist/src/commands/ruvector/init.js +336 -359
  102. package/dist/src/commands/ruvector/init.js.map +1 -1
  103. package/dist/src/commands/ruvector/migrate.js +335 -322
  104. package/dist/src/commands/ruvector/migrate.js.map +1 -1
  105. package/dist/src/commands/ruvector/optimize.js +375 -431
  106. package/dist/src/commands/ruvector/optimize.js.map +1 -1
  107. package/dist/src/commands/ruvector/setup.js +703 -117
  108. package/dist/src/commands/ruvector/setup.js.map +1 -1
  109. package/dist/src/commands/ruvector/status.js +364 -419
  110. package/dist/src/commands/ruvector/status.js.map +1 -1
  111. package/dist/src/commands/security.js +485 -608
  112. package/dist/src/commands/security.js.map +1 -1
  113. package/dist/src/commands/session.js +504 -626
  114. package/dist/src/commands/session.js.map +1 -1
  115. package/dist/src/commands/start.js +267 -364
  116. package/dist/src/commands/start.js.map +1 -1
  117. package/dist/src/commands/status.js +380 -486
  118. package/dist/src/commands/status.js.map +1 -1
  119. package/dist/src/commands/swarm.js +408 -488
  120. package/dist/src/commands/swarm.js.map +1 -1
  121. package/dist/src/commands/task.js +423 -538
  122. package/dist/src/commands/task.js.map +1 -1
  123. package/dist/src/commands/transfer-store.js +322 -412
  124. package/dist/src/commands/transfer-store.js.map +1 -1
  125. package/dist/src/commands/update.js +196 -291
  126. package/dist/src/commands/update.js.map +1 -1
  127. package/dist/src/commands/workflow.js +386 -486
  128. package/dist/src/commands/workflow.js.map +1 -1
  129. package/dist/src/config-adapter.d.ts +15 -0
  130. package/dist/src/config-adapter.d.ts.map +1 -0
  131. package/dist/src/config-adapter.js +38 -39
  132. package/dist/src/config-adapter.js.map +1 -1
  133. package/dist/src/index.d.ts +77 -0
  134. package/dist/src/index.d.ts.map +1 -0
  135. package/dist/src/index.js +309 -411
  136. package/dist/src/index.js.map +1 -1
  137. package/dist/src/infrastructure/in-memory-repositories.d.ts +68 -0
  138. package/dist/src/infrastructure/in-memory-repositories.d.ts.map +1 -0
  139. package/dist/src/infrastructure/in-memory-repositories.js +246 -507
  140. package/dist/src/infrastructure/in-memory-repositories.js.map +1 -1
  141. package/dist/src/init/claudemd-generator.d.ts +25 -0
  142. package/dist/src/init/claudemd-generator.d.ts.map +1 -0
  143. package/dist/src/init/claudemd-generator.js +368 -78
  144. package/dist/src/init/claudemd-generator.js.map +1 -1
  145. package/dist/src/init/executor.d.ts +41 -0
  146. package/dist/src/init/executor.d.ts.map +1 -0
  147. package/dist/src/init/executor.js +1307 -996
  148. package/dist/src/init/executor.js.map +1 -1
  149. package/dist/src/init/helpers-generator.d.ts +60 -0
  150. package/dist/src/init/helpers-generator.d.ts.map +1 -0
  151. package/dist/src/init/helpers-generator.js +657 -12
  152. package/dist/src/init/helpers-generator.js.map +1 -1
  153. package/dist/src/init/index.d.ts +1 -1
  154. package/dist/src/init/index.d.ts.map +1 -1
  155. package/dist/src/init/index.js +1 -1
  156. package/dist/src/init/index.js.map +1 -1
  157. package/dist/src/init/mcp-generator.js +33 -37
  158. package/dist/src/init/mcp-generator.js.map +1 -1
  159. package/dist/src/init/settings-generator.js +76 -77
  160. package/dist/src/init/settings-generator.js.map +1 -1
  161. package/dist/src/init/statusline-generator.js +801 -3
  162. package/dist/src/init/statusline-generator.js.map +1 -1
  163. package/dist/src/init/types.d.ts +1 -1
  164. package/dist/src/init/types.d.ts.map +1 -1
  165. package/dist/src/init/types.js +76 -59
  166. package/dist/src/init/types.js.map +1 -1
  167. package/dist/src/mcp-client.d.ts +92 -0
  168. package/dist/src/mcp-client.d.ts.map +1 -0
  169. package/dist/src/mcp-client.js +81 -125
  170. package/dist/src/mcp-client.js.map +1 -1
  171. package/dist/src/mcp-server.d.ts +161 -0
  172. package/dist/src/mcp-server.d.ts.map +1 -0
  173. package/dist/src/mcp-server.js +470 -757
  174. package/dist/src/mcp-server.js.map +1 -1
  175. package/dist/src/mcp-tools/agent-tools.js +391 -492
  176. package/dist/src/mcp-tools/agent-tools.js.map +1 -1
  177. package/dist/src/mcp-tools/agentdb-tools.js +332 -533
  178. package/dist/src/mcp-tools/agentdb-tools.js.map +1 -1
  179. package/dist/src/mcp-tools/analyze-tools.js +172 -236
  180. package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
  181. package/dist/src/mcp-tools/auto-install.d.ts +83 -0
  182. package/dist/src/mcp-tools/auto-install.d.ts.map +1 -0
  183. package/dist/src/mcp-tools/auto-install.js +80 -142
  184. package/dist/src/mcp-tools/auto-install.js.map +1 -1
  185. package/dist/src/mcp-tools/browser-tools.js +252 -375
  186. package/dist/src/mcp-tools/browser-tools.js.map +1 -1
  187. package/dist/src/mcp-tools/claims-tools.js +473 -565
  188. package/dist/src/mcp-tools/claims-tools.js.map +1 -1
  189. package/dist/src/mcp-tools/config-tools.js +197 -272
  190. package/dist/src/mcp-tools/config-tools.js.map +1 -1
  191. package/dist/src/mcp-tools/coordination-tools.js +500 -572
  192. package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
  193. package/dist/src/mcp-tools/daa-tools.js +286 -364
  194. package/dist/src/mcp-tools/daa-tools.js.map +1 -1
  195. package/dist/src/mcp-tools/embeddings-tools.js +582 -693
  196. package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
  197. package/dist/src/mcp-tools/github-tools.js +260 -311
  198. package/dist/src/mcp-tools/github-tools.js.map +1 -1
  199. package/dist/src/mcp-tools/hive-mind-tools.js +573 -640
  200. package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
  201. package/dist/src/mcp-tools/hooks-tools.js +2215 -2648
  202. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  203. package/dist/src/mcp-tools/memory-tools.js +350 -505
  204. package/dist/src/mcp-tools/memory-tools.js.map +1 -1
  205. package/dist/src/mcp-tools/neural-tools.js +315 -412
  206. package/dist/src/mcp-tools/neural-tools.js.map +1 -1
  207. package/dist/src/mcp-tools/performance-tools.js +420 -480
  208. package/dist/src/mcp-tools/performance-tools.js.map +1 -1
  209. package/dist/src/mcp-tools/progress-tools.js +204 -278
  210. package/dist/src/mcp-tools/progress-tools.js.map +1 -1
  211. package/dist/src/mcp-tools/ruvllm-tools.js +163 -279
  212. package/dist/src/mcp-tools/ruvllm-tools.js.map +1 -1
  213. package/dist/src/mcp-tools/security-tools.js +297 -429
  214. package/dist/src/mcp-tools/security-tools.js.map +1 -1
  215. package/dist/src/mcp-tools/session-tools.js +185 -234
  216. package/dist/src/mcp-tools/session-tools.js.map +1 -1
  217. package/dist/src/mcp-tools/swarm-tools.js +207 -260
  218. package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
  219. package/dist/src/mcp-tools/system-tools.js +276 -325
  220. package/dist/src/mcp-tools/system-tools.js.map +1 -1
  221. package/dist/src/mcp-tools/task-tools.js +270 -336
  222. package/dist/src/mcp-tools/task-tools.js.map +1 -1
  223. package/dist/src/mcp-tools/terminal-tools.js +148 -196
  224. package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
  225. package/dist/src/mcp-tools/transfer-tools.js +186 -333
  226. package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
  227. package/dist/src/mcp-tools/types.d.ts +31 -0
  228. package/dist/src/mcp-tools/types.d.ts.map +1 -0
  229. package/dist/src/mcp-tools/wasm-agent-tools.js +133 -280
  230. package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -1
  231. package/dist/src/mcp-tools/workflow-tools.js +405 -450
  232. package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
  233. package/dist/src/memory/ewc-consolidation.d.ts +295 -0
  234. package/dist/src/memory/ewc-consolidation.d.ts.map +1 -0
  235. package/dist/src/memory/ewc-consolidation.js +190 -303
  236. package/dist/src/memory/ewc-consolidation.js.map +1 -1
  237. package/dist/src/memory/intelligence.d.ts +338 -0
  238. package/dist/src/memory/intelligence.d.ts.map +1 -0
  239. package/dist/src/memory/intelligence.js +569 -794
  240. package/dist/src/memory/intelligence.js.map +1 -1
  241. package/dist/src/memory/memory-bridge.d.ts +407 -0
  242. package/dist/src/memory/memory-bridge.d.ts.map +1 -0
  243. package/dist/src/memory/memory-bridge.js +1170 -1640
  244. package/dist/src/memory/memory-bridge.js.map +1 -1
  245. package/dist/src/memory/memory-initializer.d.ts +412 -0
  246. package/dist/src/memory/memory-initializer.d.ts.map +1 -0
  247. package/dist/src/memory/memory-initializer.js +1836 -1851
  248. package/dist/src/memory/memory-initializer.js.map +1 -1
  249. package/dist/src/memory/sona-optimizer.d.ts +227 -0
  250. package/dist/src/memory/sona-optimizer.d.ts.map +1 -0
  251. package/dist/src/memory/sona-optimizer.js +199 -329
  252. package/dist/src/memory/sona-optimizer.js.map +1 -1
  253. package/dist/src/output.d.ts +2 -2
  254. package/dist/src/output.d.ts.map +1 -1
  255. package/dist/src/output.js +242 -272
  256. package/dist/src/output.js.map +1 -1
  257. package/dist/src/parser.d.ts +51 -0
  258. package/dist/src/parser.d.ts.map +1 -0
  259. package/dist/src/parser.js +140 -187
  260. package/dist/src/parser.js.map +1 -1
  261. package/dist/src/plugins/manager.d.ts +133 -0
  262. package/dist/src/plugins/manager.d.ts.map +1 -0
  263. package/dist/src/plugins/manager.js +285 -521
  264. package/dist/src/plugins/manager.js.map +1 -1
  265. package/dist/src/plugins/store/discovery.d.ts +88 -0
  266. package/dist/src/plugins/store/discovery.d.ts.map +1 -0
  267. package/dist/src/plugins/store/discovery.js +271 -358
  268. package/dist/src/plugins/store/discovery.js.map +1 -1
  269. package/dist/src/plugins/store/index.d.ts +76 -0
  270. package/dist/src/plugins/store/index.d.ts.map +1 -0
  271. package/dist/src/plugins/store/index.js +48 -105
  272. package/dist/src/plugins/store/index.js.map +1 -1
  273. package/dist/src/plugins/store/search.d.ts +46 -0
  274. package/dist/src/plugins/store/search.d.ts.map +1 -0
  275. package/dist/src/plugins/store/search.js +69 -107
  276. package/dist/src/plugins/store/search.js.map +1 -1
  277. package/dist/src/plugins/store/types.d.ts +274 -0
  278. package/dist/src/plugins/store/types.d.ts.map +1 -0
  279. package/dist/src/plugins/tests/demo-plugin-store.js +113 -160
  280. package/dist/src/plugins/tests/demo-plugin-store.js.map +1 -1
  281. package/dist/src/plugins/tests/standalone-test.js +172 -223
  282. package/dist/src/plugins/tests/standalone-test.js.map +1 -1
  283. package/dist/src/plugins/tests/test-plugin-store.js +190 -228
  284. package/dist/src/plugins/tests/test-plugin-store.js.map +1 -1
  285. package/dist/src/production/circuit-breaker.d.ts +101 -0
  286. package/dist/src/production/circuit-breaker.d.ts.map +1 -0
  287. package/dist/src/production/circuit-breaker.js +62 -126
  288. package/dist/src/production/circuit-breaker.js.map +1 -1
  289. package/dist/src/production/error-handler.d.ts +92 -0
  290. package/dist/src/production/error-handler.d.ts.map +1 -0
  291. package/dist/src/production/error-handler.js +86 -156
  292. package/dist/src/production/error-handler.js.map +1 -1
  293. package/dist/src/production/monitoring.d.ts +161 -0
  294. package/dist/src/production/monitoring.d.ts.map +1 -0
  295. package/dist/src/production/monitoring.js +139 -220
  296. package/dist/src/production/monitoring.js.map +1 -1
  297. package/dist/src/production/rate-limiter.d.ts +80 -0
  298. package/dist/src/production/rate-limiter.d.ts.map +1 -0
  299. package/dist/src/production/rate-limiter.js +74 -93
  300. package/dist/src/production/rate-limiter.js.map +1 -1
  301. package/dist/src/production/retry.d.ts +48 -0
  302. package/dist/src/production/retry.d.ts.map +1 -0
  303. package/dist/src/production/retry.js +75 -167
  304. package/dist/src/production/retry.js.map +1 -1
  305. package/dist/src/prompt.d.ts +44 -0
  306. package/dist/src/prompt.d.ts.map +1 -0
  307. package/dist/src/prompt.js +436 -560
  308. package/dist/src/prompt.js.map +1 -1
  309. package/dist/src/runtime/headless.d.ts +60 -0
  310. package/dist/src/runtime/headless.d.ts.map +1 -0
  311. package/dist/src/runtime/headless.js +197 -286
  312. package/dist/src/runtime/headless.js.map +1 -1
  313. package/dist/src/ruvector/agent-wasm.d.ts +182 -0
  314. package/dist/src/ruvector/agent-wasm.d.ts.map +1 -0
  315. package/dist/src/ruvector/agent-wasm.js +156 -351
  316. package/dist/src/ruvector/agent-wasm.js.map +1 -1
  317. package/dist/src/ruvector/ast-analyzer.d.ts +67 -0
  318. package/dist/src/ruvector/ast-analyzer.d.ts.map +1 -0
  319. package/dist/src/ruvector/ast-analyzer.js +145 -232
  320. package/dist/src/ruvector/ast-analyzer.js.map +1 -1
  321. package/dist/src/ruvector/coverage-router.d.ts +160 -0
  322. package/dist/src/ruvector/coverage-router.d.ts.map +1 -0
  323. package/dist/src/ruvector/coverage-router.js +287 -419
  324. package/dist/src/ruvector/coverage-router.js.map +1 -1
  325. package/dist/src/ruvector/coverage-tools.js +56 -101
  326. package/dist/src/ruvector/coverage-tools.js.map +1 -1
  327. package/dist/src/ruvector/diff-classifier.d.ts +175 -0
  328. package/dist/src/ruvector/diff-classifier.d.ts.map +1 -0
  329. package/dist/src/ruvector/diff-classifier.js +324 -451
  330. package/dist/src/ruvector/diff-classifier.js.map +1 -1
  331. package/dist/src/ruvector/enhanced-model-router.d.ts +146 -0
  332. package/dist/src/ruvector/enhanced-model-router.d.ts.map +1 -0
  333. package/dist/src/ruvector/enhanced-model-router.js +260 -336
  334. package/dist/src/ruvector/enhanced-model-router.js.map +1 -1
  335. package/dist/src/ruvector/flash-attention.d.ts +195 -0
  336. package/dist/src/ruvector/flash-attention.d.ts.map +1 -0
  337. package/dist/src/ruvector/flash-attention.js +223 -254
  338. package/dist/src/ruvector/flash-attention.js.map +1 -1
  339. package/dist/src/ruvector/graph-analyzer.d.ts +187 -0
  340. package/dist/src/ruvector/graph-analyzer.d.ts.map +1 -0
  341. package/dist/src/ruvector/graph-analyzer.js +486 -680
  342. package/dist/src/ruvector/graph-analyzer.js.map +1 -1
  343. package/dist/src/ruvector/index.d.ts +40 -0
  344. package/dist/src/ruvector/index.d.ts.map +1 -0
  345. package/dist/src/ruvector/index.js +36 -106
  346. package/dist/src/ruvector/index.js.map +1 -1
  347. package/dist/src/ruvector/lora-adapter.d.ts +218 -0
  348. package/dist/src/ruvector/lora-adapter.d.ts.map +1 -0
  349. package/dist/src/ruvector/lora-adapter.js +155 -248
  350. package/dist/src/ruvector/lora-adapter.js.map +1 -1
  351. package/dist/src/ruvector/model-router.d.ts +220 -0
  352. package/dist/src/ruvector/model-router.d.ts.map +1 -0
  353. package/dist/src/ruvector/model-router.js +175 -248
  354. package/dist/src/ruvector/model-router.js.map +1 -1
  355. package/dist/src/ruvector/moe-router.d.ts +206 -0
  356. package/dist/src/ruvector/moe-router.d.ts.map +1 -0
  357. package/dist/src/ruvector/moe-router.js +228 -286
  358. package/dist/src/ruvector/moe-router.js.map +1 -1
  359. package/dist/src/ruvector/q-learning-router.d.ts +211 -0
  360. package/dist/src/ruvector/q-learning-router.d.ts.map +1 -0
  361. package/dist/src/ruvector/q-learning-router.js +257 -338
  362. package/dist/src/ruvector/q-learning-router.js.map +1 -1
  363. package/dist/src/ruvector/ruvllm-wasm.d.ts +179 -0
  364. package/dist/src/ruvector/ruvllm-wasm.d.ts.map +1 -0
  365. package/dist/src/ruvector/ruvllm-wasm.js +270 -434
  366. package/dist/src/ruvector/ruvllm-wasm.js.map +1 -1
  367. package/dist/src/ruvector/semantic-router.d.ts +77 -0
  368. package/dist/src/ruvector/semantic-router.d.ts.map +1 -0
  369. package/dist/src/ruvector/semantic-router.js +60 -67
  370. package/dist/src/ruvector/semantic-router.js.map +1 -1
  371. package/dist/src/ruvector/vector-db.d.ts +69 -0
  372. package/dist/src/ruvector/vector-db.d.ts.map +1 -0
  373. package/dist/src/ruvector/vector-db.js +119 -205
  374. package/dist/src/ruvector/vector-db.js.map +1 -1
  375. package/dist/src/services/agentic-flow-bridge.d.ts +50 -0
  376. package/dist/src/services/agentic-flow-bridge.d.ts.map +1 -0
  377. package/dist/src/services/agentic-flow-bridge.js +32 -105
  378. package/dist/src/services/agentic-flow-bridge.js.map +1 -1
  379. package/dist/src/services/claim-service.d.ts +204 -0
  380. package/dist/src/services/claim-service.d.ts.map +1 -0
  381. package/dist/src/services/claim-service.js +615 -940
  382. package/dist/src/services/claim-service.js.map +1 -1
  383. package/dist/src/services/container-worker-pool.d.ts +197 -0
  384. package/dist/src/services/container-worker-pool.d.ts.map +1 -0
  385. package/dist/src/services/container-worker-pool.js +398 -666
  386. package/dist/src/services/container-worker-pool.js.map +1 -1
  387. package/dist/src/services/headless-worker-executor.d.ts +304 -0
  388. package/dist/src/services/headless-worker-executor.d.ts.map +1 -0
  389. package/dist/src/services/headless-worker-executor.js +441 -467
  390. package/dist/src/services/headless-worker-executor.js.map +1 -1
  391. package/dist/src/services/index.d.ts +4 -4
  392. package/dist/src/services/index.d.ts.map +1 -1
  393. package/dist/src/services/index.js +4 -4
  394. package/dist/src/services/index.js.map +1 -1
  395. package/dist/src/services/registry-api.d.ts +58 -0
  396. package/dist/src/services/registry-api.d.ts.map +1 -0
  397. package/dist/src/services/registry-api.js +92 -200
  398. package/dist/src/services/registry-api.js.map +1 -1
  399. package/dist/src/services/ruvector-training.d.ts +222 -0
  400. package/dist/src/services/ruvector-training.d.ts.map +1 -0
  401. package/dist/src/services/ruvector-training.js +257 -337
  402. package/dist/src/services/ruvector-training.js.map +1 -1
  403. package/dist/src/services/worker-daemon.d.ts +228 -0
  404. package/dist/src/services/worker-daemon.d.ts.map +1 -0
  405. package/dist/src/services/worker-daemon.js +591 -849
  406. package/dist/src/services/worker-daemon.js.map +1 -1
  407. package/dist/src/services/worker-queue.d.ts +194 -0
  408. package/dist/src/services/worker-queue.d.ts.map +1 -0
  409. package/dist/src/services/worker-queue.js +331 -548
  410. package/dist/src/services/worker-queue.js.map +1 -1
  411. package/dist/src/suggest.d.ts +53 -0
  412. package/dist/src/suggest.d.ts.map +1 -0
  413. package/dist/src/suggest.js +45 -55
  414. package/dist/src/suggest.js.map +1 -1
  415. package/dist/src/transfer/anonymization/index.js +29 -37
  416. package/dist/src/transfer/anonymization/index.js.map +1 -1
  417. package/dist/src/transfer/deploy-seraphine.js +128 -155
  418. package/dist/src/transfer/deploy-seraphine.js.map +1 -1
  419. package/dist/src/transfer/export.d.ts +25 -0
  420. package/dist/src/transfer/export.d.ts.map +1 -0
  421. package/dist/src/transfer/export.js +84 -142
  422. package/dist/src/transfer/export.js.map +1 -1
  423. package/dist/src/transfer/index.d.ts +1 -1
  424. package/dist/src/transfer/index.d.ts.map +1 -1
  425. package/dist/src/transfer/index.js +0 -2
  426. package/dist/src/transfer/index.js.map +1 -1
  427. package/dist/src/transfer/ipfs/client.d.ts +109 -0
  428. package/dist/src/transfer/ipfs/client.d.ts.map +1 -0
  429. package/dist/src/transfer/ipfs/client.js +187 -337
  430. package/dist/src/transfer/ipfs/client.js.map +1 -1
  431. package/dist/src/transfer/ipfs/upload.d.ts +95 -0
  432. package/dist/src/transfer/ipfs/upload.d.ts.map +1 -0
  433. package/dist/src/transfer/ipfs/upload.js +288 -434
  434. package/dist/src/transfer/ipfs/upload.js.map +1 -1
  435. package/dist/src/transfer/models/seraphine.d.ts +72 -0
  436. package/dist/src/transfer/models/seraphine.d.ts.map +1 -0
  437. package/dist/src/transfer/models/seraphine.js +55 -55
  438. package/dist/src/transfer/models/seraphine.js.map +1 -1
  439. package/dist/src/transfer/serialization/cfp.d.ts +49 -0
  440. package/dist/src/transfer/serialization/cfp.d.ts.map +1 -0
  441. package/dist/src/transfer/serialization/cfp.js +30 -31
  442. package/dist/src/transfer/serialization/cfp.js.map +1 -1
  443. package/dist/src/transfer/storage/gcs.d.ts +82 -0
  444. package/dist/src/transfer/storage/gcs.d.ts.map +1 -0
  445. package/dist/src/transfer/storage/gcs.js +165 -232
  446. package/dist/src/transfer/storage/gcs.js.map +1 -1
  447. package/dist/src/transfer/store/discovery.d.ts +84 -0
  448. package/dist/src/transfer/store/discovery.d.ts.map +1 -0
  449. package/dist/src/transfer/store/discovery.js +239 -349
  450. package/dist/src/transfer/store/discovery.js.map +1 -1
  451. package/dist/src/transfer/store/download.d.ts +70 -0
  452. package/dist/src/transfer/store/download.d.ts.map +1 -0
  453. package/dist/src/transfer/store/download.js +243 -365
  454. package/dist/src/transfer/store/download.js.map +1 -1
  455. package/dist/src/transfer/store/index.d.ts +84 -0
  456. package/dist/src/transfer/store/index.d.ts.map +1 -0
  457. package/dist/src/transfer/store/index.js +63 -130
  458. package/dist/src/transfer/store/index.js.map +1 -1
  459. package/dist/src/transfer/store/publish.d.ts +76 -0
  460. package/dist/src/transfer/store/publish.d.ts.map +1 -0
  461. package/dist/src/transfer/store/publish.js +184 -258
  462. package/dist/src/transfer/store/publish.js.map +1 -1
  463. package/dist/src/transfer/store/registry.js +50 -72
  464. package/dist/src/transfer/store/registry.js.map +1 -1
  465. package/dist/src/transfer/store/search.d.ts +54 -0
  466. package/dist/src/transfer/store/search.d.ts.map +1 -0
  467. package/dist/src/transfer/store/search.js +64 -96
  468. package/dist/src/transfer/store/search.js.map +1 -1
  469. package/dist/src/transfer/store/tests/standalone-test.js +174 -231
  470. package/dist/src/transfer/store/tests/standalone-test.js.map +1 -1
  471. package/dist/src/transfer/test-seraphine.js +95 -130
  472. package/dist/src/transfer/test-seraphine.js.map +1 -1
  473. package/dist/src/transfer/tests/test-store.js +194 -239
  474. package/dist/src/transfer/tests/test-store.js.map +1 -1
  475. package/dist/src/transfer/types.d.ts +245 -0
  476. package/dist/src/transfer/types.d.ts.map +1 -0
  477. package/dist/src/types.d.ts +198 -0
  478. package/dist/src/types.d.ts.map +1 -0
  479. package/dist/src/types.js +26 -55
  480. package/dist/src/types.js.map +1 -1
  481. package/dist/src/update/checker.d.ts +34 -0
  482. package/dist/src/update/checker.d.ts.map +1 -0
  483. package/dist/src/update/checker.js +106 -183
  484. package/dist/src/update/checker.js.map +1 -1
  485. package/dist/src/update/executor.d.ts +32 -0
  486. package/dist/src/update/executor.d.ts.map +1 -0
  487. package/dist/src/update/executor.js +135 -198
  488. package/dist/src/update/executor.js.map +1 -1
  489. package/dist/src/update/index.d.ts +33 -0
  490. package/dist/src/update/index.d.ts.map +1 -0
  491. package/dist/src/update/index.js +38 -85
  492. package/dist/src/update/index.js.map +1 -1
  493. package/dist/src/update/rate-limiter.d.ts +20 -0
  494. package/dist/src/update/rate-limiter.d.ts.map +1 -0
  495. package/dist/src/update/rate-limiter.js +19 -31
  496. package/dist/src/update/rate-limiter.js.map +1 -1
  497. package/dist/src/update/validator.d.ts +17 -0
  498. package/dist/src/update/validator.d.ts.map +1 -0
  499. package/dist/src/update/validator.js +38 -64
  500. package/dist/src/update/validator.js.map +1 -1
  501. package/dist/tsconfig.tsbuildinfo +1 -1
  502. package/package.json +1 -1
@@ -2,42 +2,6 @@
2
2
  * V3 CLI RuVector Backup Command
3
3
  * Backup and restore for RuVector PostgreSQL data
4
4
  */
5
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7
- return new (P || (P = Promise))(function (resolve, reject) {
8
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
9
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
10
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
11
- step((generator = generator.apply(thisArg, _arguments || [])).next());
12
- });
13
- };
14
- var __generator = (this && this.__generator) || function (thisArg, body) {
15
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
16
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
17
- function verb(n) { return function (v) { return step([n, v]); }; }
18
- function step(op) {
19
- if (f) throw new TypeError("Generator is already executing.");
20
- while (_) try {
21
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
22
- if (y = 0, t) op = [op[0] & 2, t.value];
23
- switch (op[0]) {
24
- case 0: case 1: t = op; break;
25
- case 4: _.label++; return { value: op[1], done: false };
26
- case 5: _.label++; y = op[1]; op = [0]; continue;
27
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
28
- default:
29
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
30
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
31
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
32
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
33
- if (t[2]) _.ops.pop();
34
- _.trys.pop(); continue;
35
- }
36
- op = body.call(thisArg, _);
37
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
38
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
39
- }
40
- };
41
5
  import { output } from '../../output.js';
42
6
  import { confirm, input } from '../../prompt.js';
43
7
  /**
@@ -51,7 +15,7 @@ function getConnectionConfig(ctx) {
51
15
  user: ctx.flags.user || process.env.PGUSER || 'postgres',
52
16
  password: ctx.flags.password || process.env.PGPASSWORD || '',
53
17
  ssl: ctx.flags.ssl || process.env.PGSSLMODE === 'require',
54
- schema: ctx.flags.schema || 'claude_flow'
18
+ schema: ctx.flags.schema || 'claude_flow',
55
19
  };
56
20
  }
57
21
  /**
@@ -60,15 +24,15 @@ function getConnectionConfig(ctx) {
60
24
  function formatBytes(bytes) {
61
25
  if (bytes === 0)
62
26
  return '0 B';
63
- var k = 1024;
64
- var sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
65
- var i = Math.floor(Math.log(bytes) / Math.log(k));
27
+ const k = 1024;
28
+ const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
29
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
66
30
  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
67
31
  }
68
32
  /**
69
33
  * RuVector backup subcommand
70
34
  */
71
- var backupSubcommand = {
35
+ const backupSubcommand = {
72
36
  name: 'create',
73
37
  description: 'Create a backup of RuVector data',
74
38
  options: [
@@ -77,78 +41,78 @@ var backupSubcommand = {
77
41
  short: 'o',
78
42
  description: 'Output file path',
79
43
  type: 'string',
80
- required: true
44
+ required: true,
81
45
  },
82
46
  {
83
47
  name: 'tables',
84
48
  short: 't',
85
49
  description: 'Specific tables (comma-separated)',
86
- type: 'string'
50
+ type: 'string',
87
51
  },
88
52
  {
89
53
  name: 'format',
90
54
  short: 'f',
91
55
  description: 'Output format',
92
56
  type: 'string',
93
- "default": 'sql',
94
- choices: ['sql', 'json', 'csv']
57
+ default: 'sql',
58
+ choices: ['sql', 'json', 'csv'],
95
59
  },
96
60
  {
97
61
  name: 'compress',
98
62
  short: 'c',
99
63
  description: 'Compress output (gzip)',
100
64
  type: 'boolean',
101
- "default": false
65
+ default: false,
102
66
  },
103
67
  {
104
68
  name: 'include-indexes',
105
69
  description: 'Include index definitions',
106
70
  type: 'boolean',
107
- "default": true
71
+ default: true,
108
72
  },
109
73
  {
110
74
  name: 'host',
111
75
  short: 'h',
112
76
  description: 'PostgreSQL host',
113
77
  type: 'string',
114
- "default": 'localhost'
78
+ default: 'localhost',
115
79
  },
116
80
  {
117
81
  name: 'port',
118
82
  short: 'p',
119
83
  description: 'PostgreSQL port',
120
84
  type: 'number',
121
- "default": 5432
85
+ default: 5432,
122
86
  },
123
87
  {
124
88
  name: 'database',
125
89
  short: 'd',
126
90
  description: 'Database name',
127
- type: 'string'
91
+ type: 'string',
128
92
  },
129
93
  {
130
94
  name: 'user',
131
95
  short: 'u',
132
96
  description: 'Database user',
133
- type: 'string'
97
+ type: 'string',
134
98
  },
135
99
  {
136
100
  name: 'password',
137
101
  description: 'Database password',
138
- type: 'string'
102
+ type: 'string',
139
103
  },
140
104
  {
141
105
  name: 'ssl',
142
106
  description: 'Enable SSL',
143
107
  type: 'boolean',
144
- "default": false
108
+ default: false,
145
109
  },
146
110
  {
147
111
  name: 'schema',
148
112
  short: 's',
149
113
  description: 'Schema name',
150
114
  type: 'string',
151
- "default": 'claude_flow'
115
+ default: 'claude_flow',
152
116
  },
153
117
  ],
154
118
  examples: [
@@ -156,275 +120,246 @@ var backupSubcommand = {
156
120
  { command: 'claude-flow ruvector backup create -o backup.json --format json', description: 'Create JSON backup' },
157
121
  { command: 'claude-flow ruvector backup create -o backup.sql.gz --compress', description: 'Compressed backup' },
158
122
  ],
159
- action: function (ctx) { return __awaiter(void 0, void 0, Promise, function () {
160
- var config, outputPath, tablesFilter, format, compress, includeIndexes, spinner, fs, path, promisify, pg, _a, client, tables, tablesResult, backupData, totalRows, _i, tables_1, tableName, columnsResult, columns, dataResult, indexResult, content, lines, _b, _c, table, _loop_1, _d, _e, row, _f, _g, idx, lines, _h, _j, table, _loop_2, _k, _l, row, zlib, gzip, compressed, fileSize, error_1;
161
- return __generator(this, function (_m) {
162
- switch (_m.label) {
163
- case 0:
164
- config = getConnectionConfig(ctx);
165
- outputPath = ctx.flags.output;
166
- tablesFilter = ctx.flags.tables;
167
- format = ctx.flags.format || 'sql';
168
- compress = ctx.flags.compress;
169
- includeIndexes = ctx.flags['include-indexes'] !== false;
170
- output.writeln();
171
- output.writeln(output.bold('RuVector Backup'));
172
- output.writeln(output.dim('='.repeat(60)));
173
- output.writeln();
174
- if (!config.database) {
175
- output.printError('Database name is required. Use --database or -d flag, or set PGDATABASE env.');
176
- return [2 /*return*/, { success: false, exitCode: 1 }];
177
- }
178
- if (!(!outputPath && ctx.interactive)) return [3 /*break*/, 2];
179
- return [4 /*yield*/, input({
180
- message: 'Output file path:',
181
- "default": "ruvector_backup_" + new Date().toISOString().split('T')[0] + "." + format,
182
- validate: function (v) { return v.length > 0 || 'Output path is required'; }
183
- })];
184
- case 1:
185
- outputPath = _m.sent();
186
- _m.label = 2;
187
- case 2:
188
- if (!outputPath) {
189
- output.printError('Output path is required. Use --output or -o flag.');
190
- return [2 /*return*/, { success: false, exitCode: 1 }];
191
- }
192
- spinner = output.createSpinner({ text: 'Connecting to PostgreSQL...', spinner: 'dots' });
193
- spinner.start();
194
- _m.label = 3;
195
- case 3:
196
- _m.trys.push([3, 27, , 28]);
197
- return [4 /*yield*/, import('fs')];
198
- case 4:
199
- fs = _m.sent();
200
- return [4 /*yield*/, import('path')];
201
- case 5:
202
- path = _m.sent();
203
- return [4 /*yield*/, import('util')];
204
- case 6:
205
- promisify = (_m.sent()).promisify;
206
- pg = null;
207
- _m.label = 7;
208
- case 7:
209
- _m.trys.push([7, 9, , 10]);
210
- return [4 /*yield*/, import('pg')];
211
- case 8:
212
- pg = _m.sent();
213
- return [3 /*break*/, 10];
214
- case 9:
215
- _a = _m.sent();
216
- spinner.fail('PostgreSQL driver not found');
217
- output.printError('Install pg package: npm install pg');
218
- return [2 /*return*/, { success: false, exitCode: 1 }];
219
- case 10:
220
- client = new pg.Client({
221
- host: config.host,
222
- port: config.port,
223
- database: config.database,
224
- user: config.user,
225
- password: config.password,
226
- ssl: config.ssl ? { rejectUnauthorized: false } : false
227
- });
228
- return [4 /*yield*/, client.connect()];
229
- case 11:
230
- _m.sent();
231
- spinner.succeed('Connected to PostgreSQL');
232
- // Get tables to backup
233
- spinner.setText('Discovering tables...');
234
- spinner.start();
235
- tables = [];
236
- if (!tablesFilter) return [3 /*break*/, 12];
237
- tables = tablesFilter.split(',').map(function (t) { return t.trim(); });
238
- return [3 /*break*/, 14];
239
- case 12: return [4 /*yield*/, client.query("\n SELECT table_name FROM information_schema.tables\n WHERE table_schema = $1 AND table_type = 'BASE TABLE'\n ORDER BY table_name\n ", [config.schema])];
240
- case 13:
241
- tablesResult = _m.sent();
242
- tables = tablesResult.rows.map(function (r) { return r.table_name; });
243
- _m.label = 14;
244
- case 14:
245
- spinner.succeed("Found " + tables.length + " tables to backup");
246
- backupData = {
247
- metadata: {
248
- backupDate: new Date().toISOString(),
249
- database: config.database,
250
- schema: config.schema,
251
- format: format,
252
- version: '1.0.0'
253
- },
254
- schema: config.schema,
255
- tables: [],
256
- indexes: []
257
- };
258
- totalRows = 0;
259
- _i = 0, tables_1 = tables;
260
- _m.label = 15;
261
- case 15:
262
- if (!(_i < tables_1.length)) return [3 /*break*/, 19];
263
- tableName = tables_1[_i];
264
- spinner.setText("Exporting " + tableName + "...");
265
- spinner.start();
266
- return [4 /*yield*/, client.query("\n SELECT column_name, data_type\n FROM information_schema.columns\n WHERE table_schema = $1 AND table_name = $2\n ORDER BY ordinal_position\n ", [config.schema, tableName])];
267
- case 16:
268
- columnsResult = _m.sent();
269
- columns = columnsResult.rows.map(function (r) { return r.column_name; });
270
- return [4 /*yield*/, client.query("\n SELECT * FROM " + config.schema + "." + tableName + "\n ")];
271
- case 17:
272
- dataResult = _m.sent();
273
- backupData.tables.push({
274
- name: tableName,
275
- columns: columns,
276
- rows: dataResult.rows
277
- });
278
- totalRows += dataResult.rows.length;
279
- spinner.setText("Exporting " + tableName + "... (" + dataResult.rows.length + " rows)");
280
- _m.label = 18;
281
- case 18:
282
- _i++;
283
- return [3 /*break*/, 15];
284
- case 19:
285
- spinner.succeed("Exported " + totalRows.toLocaleString() + " rows from " + tables.length + " tables");
286
- if (!includeIndexes) return [3 /*break*/, 21];
287
- spinner.setText('Exporting index definitions...');
288
- spinner.start();
289
- return [4 /*yield*/, client.query("\n SELECT pg_get_indexdef(i.oid) as indexdef\n FROM pg_index idx\n JOIN pg_class i ON i.oid = idx.indexrelid\n JOIN pg_class t ON t.oid = idx.indrelid\n JOIN pg_namespace n ON n.oid = t.relnamespace\n WHERE n.nspname = $1\n AND NOT idx.indisprimary\n ", [config.schema])];
290
- case 20:
291
- indexResult = _m.sent();
292
- backupData.indexes = indexResult.rows.map(function (r) { return r.indexdef; });
293
- spinner.succeed("Exported " + backupData.indexes.length + " index definitions");
294
- _m.label = 21;
295
- case 21: return [4 /*yield*/, client.end()];
296
- case 22:
297
- _m.sent();
298
- // Write backup file
299
- spinner.setText("Writing backup to " + outputPath + "...");
300
- spinner.start();
301
- content = void 0;
302
- if (format === 'sql') {
303
- lines = [];
304
- lines.push("-- RuVector Backup");
305
- lines.push("-- Generated: " + backupData.metadata.backupDate);
306
- lines.push("-- Database: " + config.database);
307
- lines.push("-- Schema: " + config.schema);
308
- lines.push('');
309
- lines.push("CREATE SCHEMA IF NOT EXISTS " + config.schema + ";");
310
- lines.push('');
311
- for (_b = 0, _c = backupData.tables; _b < _c.length; _b++) {
312
- table = _c[_b];
313
- lines.push("-- Table: " + table.name);
314
- lines.push("-- Rows: " + table.rows.length);
315
- lines.push('');
316
- if (table.rows.length > 0) {
317
- _loop_1 = function (row) {
318
- var values = table.columns.map(function (col) {
319
- var val = row[col];
320
- if (val === null || val === undefined)
321
- return 'NULL';
322
- if (typeof val === 'string')
323
- return "'" + val.replace(/'/g, "''") + "'";
324
- if (typeof val === 'object')
325
- return "'" + JSON.stringify(val).replace(/'/g, "''") + "'";
326
- return String(val);
327
- });
328
- lines.push("INSERT INTO " + config.schema + "." + table.name + " (" + table.columns.join(', ') + ") VALUES (" + values.join(', ') + ");");
329
- };
330
- for (_d = 0, _e = table.rows; _d < _e.length; _d++) {
331
- row = _e[_d];
332
- _loop_1(row);
333
- }
334
- lines.push('');
335
- }
336
- }
337
- // Add indexes
338
- if (includeIndexes && backupData.indexes.length > 0) {
339
- lines.push('-- Indexes');
340
- for (_f = 0, _g = backupData.indexes; _f < _g.length; _f++) {
341
- idx = _g[_f];
342
- lines.push(idx + ";");
343
- }
123
+ action: async (ctx) => {
124
+ const config = getConnectionConfig(ctx);
125
+ let outputPath = ctx.flags.output;
126
+ const tablesFilter = ctx.flags.tables;
127
+ const format = ctx.flags.format || 'sql';
128
+ const compress = ctx.flags.compress;
129
+ const includeIndexes = ctx.flags['include-indexes'] !== false;
130
+ output.writeln();
131
+ output.writeln(output.bold('RuVector Backup'));
132
+ output.writeln(output.dim('='.repeat(60)));
133
+ output.writeln();
134
+ if (!config.database) {
135
+ output.printError('Database name is required. Use --database or -d flag, or set PGDATABASE env.');
136
+ return { success: false, exitCode: 1 };
137
+ }
138
+ // Interactive mode
139
+ if (!outputPath && ctx.interactive) {
140
+ outputPath = await input({
141
+ message: 'Output file path:',
142
+ default: `ruvector_backup_${new Date().toISOString().split('T')[0]}.${format}`,
143
+ validate: (v) => v.length > 0 || 'Output path is required',
144
+ });
145
+ }
146
+ if (!outputPath) {
147
+ output.printError('Output path is required. Use --output or -o flag.');
148
+ return { success: false, exitCode: 1 };
149
+ }
150
+ const spinner = output.createSpinner({ text: 'Connecting to PostgreSQL...', spinner: 'dots' });
151
+ spinner.start();
152
+ try {
153
+ // Import dependencies
154
+ const fs = await import('fs');
155
+ const path = await import('path');
156
+ const { promisify } = await import('util');
157
+ let pg = null;
158
+ try {
159
+ pg = await import('pg');
160
+ }
161
+ catch {
162
+ spinner.fail('PostgreSQL driver not found');
163
+ output.printError('Install pg package: npm install pg');
164
+ return { success: false, exitCode: 1 };
165
+ }
166
+ const client = new pg.Client({
167
+ host: config.host,
168
+ port: config.port,
169
+ database: config.database,
170
+ user: config.user,
171
+ password: config.password,
172
+ ssl: config.ssl ? { rejectUnauthorized: false } : false,
173
+ });
174
+ await client.connect();
175
+ spinner.succeed('Connected to PostgreSQL');
176
+ // Get tables to backup
177
+ spinner.setText('Discovering tables...');
178
+ spinner.start();
179
+ let tables = [];
180
+ if (tablesFilter) {
181
+ tables = tablesFilter.split(',').map(t => t.trim());
182
+ }
183
+ else {
184
+ const tablesResult = await client.query(`
185
+ SELECT table_name FROM information_schema.tables
186
+ WHERE table_schema = $1 AND table_type = 'BASE TABLE'
187
+ ORDER BY table_name
188
+ `, [config.schema]);
189
+ tables = tablesResult.rows.map(r => r.table_name);
190
+ }
191
+ spinner.succeed(`Found ${tables.length} tables to backup`);
192
+ // Prepare backup data
193
+ const backupData = {
194
+ metadata: {
195
+ backupDate: new Date().toISOString(),
196
+ database: config.database,
197
+ schema: config.schema,
198
+ format,
199
+ version: '1.0.0',
200
+ },
201
+ schema: config.schema,
202
+ tables: [],
203
+ indexes: [],
204
+ };
205
+ let totalRows = 0;
206
+ // Export each table
207
+ for (const tableName of tables) {
208
+ spinner.setText(`Exporting ${tableName}...`);
209
+ spinner.start();
210
+ // Get columns
211
+ const columnsResult = await client.query(`
212
+ SELECT column_name, data_type
213
+ FROM information_schema.columns
214
+ WHERE table_schema = $1 AND table_name = $2
215
+ ORDER BY ordinal_position
216
+ `, [config.schema, tableName]);
217
+ const columns = columnsResult.rows.map(r => r.column_name);
218
+ // Get data
219
+ const dataResult = await client.query(`
220
+ SELECT * FROM ${config.schema}.${tableName}
221
+ `);
222
+ backupData.tables.push({
223
+ name: tableName,
224
+ columns,
225
+ rows: dataResult.rows,
226
+ });
227
+ totalRows += dataResult.rows.length;
228
+ spinner.setText(`Exporting ${tableName}... (${dataResult.rows.length} rows)`);
229
+ }
230
+ spinner.succeed(`Exported ${totalRows.toLocaleString()} rows from ${tables.length} tables`);
231
+ // Get indexes
232
+ if (includeIndexes) {
233
+ spinner.setText('Exporting index definitions...');
234
+ spinner.start();
235
+ const indexResult = await client.query(`
236
+ SELECT pg_get_indexdef(i.oid) as indexdef
237
+ FROM pg_index idx
238
+ JOIN pg_class i ON i.oid = idx.indexrelid
239
+ JOIN pg_class t ON t.oid = idx.indrelid
240
+ JOIN pg_namespace n ON n.oid = t.relnamespace
241
+ WHERE n.nspname = $1
242
+ AND NOT idx.indisprimary
243
+ `, [config.schema]);
244
+ backupData.indexes = indexResult.rows.map(r => r.indexdef);
245
+ spinner.succeed(`Exported ${backupData.indexes.length} index definitions`);
246
+ }
247
+ await client.end();
248
+ // Write backup file
249
+ spinner.setText(`Writing backup to ${outputPath}...`);
250
+ spinner.start();
251
+ let content;
252
+ if (format === 'sql') {
253
+ // Generate SQL format
254
+ const lines = [];
255
+ lines.push(`-- RuVector Backup`);
256
+ lines.push(`-- Generated: ${backupData.metadata.backupDate}`);
257
+ lines.push(`-- Database: ${config.database}`);
258
+ lines.push(`-- Schema: ${config.schema}`);
259
+ lines.push('');
260
+ lines.push(`CREATE SCHEMA IF NOT EXISTS ${config.schema};`);
261
+ lines.push('');
262
+ for (const table of backupData.tables) {
263
+ lines.push(`-- Table: ${table.name}`);
264
+ lines.push(`-- Rows: ${table.rows.length}`);
265
+ lines.push('');
266
+ if (table.rows.length > 0) {
267
+ for (const row of table.rows) {
268
+ const values = table.columns.map(col => {
269
+ const val = row[col];
270
+ if (val === null || val === undefined)
271
+ return 'NULL';
272
+ if (typeof val === 'string')
273
+ return `'${val.replace(/'/g, "''")}'`;
274
+ if (typeof val === 'object')
275
+ return `'${JSON.stringify(val).replace(/'/g, "''")}'`;
276
+ return String(val);
277
+ });
278
+ lines.push(`INSERT INTO ${config.schema}.${table.name} (${table.columns.join(', ')}) VALUES (${values.join(', ')});`);
344
279
  }
345
- content = lines.join('\n');
280
+ lines.push('');
346
281
  }
347
- else if (format === 'json') {
348
- content = JSON.stringify(backupData, null, 2);
282
+ }
283
+ // Add indexes
284
+ if (includeIndexes && backupData.indexes.length > 0) {
285
+ lines.push('-- Indexes');
286
+ for (const idx of backupData.indexes) {
287
+ lines.push(`${idx};`);
349
288
  }
350
- else {
351
- lines = [];
352
- for (_h = 0, _j = backupData.tables; _h < _j.length; _h++) {
353
- table = _j[_h];
354
- lines.push("# Table: " + table.name);
355
- lines.push(table.columns.join(','));
356
- _loop_2 = function (row) {
357
- var values = table.columns.map(function (col) {
358
- var val = row[col];
359
- if (val === null || val === undefined)
360
- return '';
361
- var str = typeof val === 'object' ? JSON.stringify(val) : String(val);
362
- return str.includes(',') || str.includes('"') ? "\"" + str.replace(/"/g, '""') + "\"" : str;
363
- });
364
- lines.push(values.join(','));
365
- };
366
- for (_k = 0, _l = table.rows; _k < _l.length; _k++) {
367
- row = _l[_k];
368
- _loop_2(row);
369
- }
370
- lines.push('');
371
- }
372
- content = lines.join('\n');
289
+ }
290
+ content = lines.join('\n');
291
+ }
292
+ else if (format === 'json') {
293
+ content = JSON.stringify(backupData, null, 2);
294
+ }
295
+ else {
296
+ // CSV format - one file per table would be better, but we'll concatenate
297
+ const lines = [];
298
+ for (const table of backupData.tables) {
299
+ lines.push(`# Table: ${table.name}`);
300
+ lines.push(table.columns.join(','));
301
+ for (const row of table.rows) {
302
+ const values = table.columns.map(col => {
303
+ const val = row[col];
304
+ if (val === null || val === undefined)
305
+ return '';
306
+ const str = typeof val === 'object' ? JSON.stringify(val) : String(val);
307
+ return str.includes(',') || str.includes('"') ? `"${str.replace(/"/g, '""')}"` : str;
308
+ });
309
+ lines.push(values.join(','));
373
310
  }
374
- if (!compress) return [3 /*break*/, 25];
375
- return [4 /*yield*/, import('zlib')];
376
- case 23:
377
- zlib = _m.sent();
378
- gzip = promisify(zlib.gzip);
379
- return [4 /*yield*/, gzip(Buffer.from(content, 'utf-8'))];
380
- case 24:
381
- compressed = _m.sent();
382
- outputPath = outputPath.endsWith('.gz') ? outputPath : outputPath + ".gz";
383
- fs.writeFileSync(outputPath, compressed);
384
- return [3 /*break*/, 26];
385
- case 25:
386
- fs.writeFileSync(outputPath, content, 'utf-8');
387
- _m.label = 26;
388
- case 26:
389
- fileSize = fs.statSync(outputPath).size;
390
- spinner.succeed("Backup written to " + outputPath + " (" + formatBytes(fileSize) + ")");
391
- output.writeln();
392
- output.printSuccess('Backup completed successfully!');
393
- output.writeln();
394
- output.printBox([
395
- "Output: " + outputPath,
396
- "Format: " + format.toUpperCase() + (compress ? ' (gzip compressed)' : ''),
397
- "Size: " + formatBytes(fileSize),
398
- "Tables: " + tables.length,
399
- "Total Rows: " + totalRows.toLocaleString(),
400
- "Indexes: " + backupData.indexes.length,
401
- ].join('\n'), 'Backup Summary');
402
- return [2 /*return*/, {
403
- success: true,
404
- data: {
405
- outputPath: outputPath,
406
- format: format,
407
- compressed: compress,
408
- tables: tables.length,
409
- totalRows: totalRows,
410
- indexes: backupData.indexes.length,
411
- fileSize: fileSize
412
- }
413
- }];
414
- case 27:
415
- error_1 = _m.sent();
416
- spinner.fail('Backup failed');
417
- output.printError(error_1 instanceof Error ? error_1.message : String(error_1));
418
- return [2 /*return*/, { success: false, exitCode: 1 }];
419
- case 28: return [2 /*return*/];
311
+ lines.push('');
312
+ }
313
+ content = lines.join('\n');
314
+ }
315
+ // Compress if requested
316
+ if (compress) {
317
+ const zlib = await import('zlib');
318
+ const gzip = promisify(zlib.gzip);
319
+ const compressed = await gzip(Buffer.from(content, 'utf-8'));
320
+ outputPath = outputPath.endsWith('.gz') ? outputPath : `${outputPath}.gz`;
321
+ fs.writeFileSync(outputPath, compressed);
420
322
  }
421
- });
422
- }); }
323
+ else {
324
+ fs.writeFileSync(outputPath, content, 'utf-8');
325
+ }
326
+ const fileSize = fs.statSync(outputPath).size;
327
+ spinner.succeed(`Backup written to ${outputPath} (${formatBytes(fileSize)})`);
328
+ output.writeln();
329
+ output.printSuccess('Backup completed successfully!');
330
+ output.writeln();
331
+ output.printBox([
332
+ `Output: ${outputPath}`,
333
+ `Format: ${format.toUpperCase()}${compress ? ' (gzip compressed)' : ''}`,
334
+ `Size: ${formatBytes(fileSize)}`,
335
+ `Tables: ${tables.length}`,
336
+ `Total Rows: ${totalRows.toLocaleString()}`,
337
+ `Indexes: ${backupData.indexes.length}`,
338
+ ].join('\n'), 'Backup Summary');
339
+ return {
340
+ success: true,
341
+ data: {
342
+ outputPath,
343
+ format,
344
+ compressed: compress,
345
+ tables: tables.length,
346
+ totalRows,
347
+ indexes: backupData.indexes.length,
348
+ fileSize,
349
+ },
350
+ };
351
+ }
352
+ catch (error) {
353
+ spinner.fail('Backup failed');
354
+ output.printError(error instanceof Error ? error.message : String(error));
355
+ return { success: false, exitCode: 1 };
356
+ }
357
+ },
423
358
  };
424
359
  /**
425
360
  * RuVector restore subcommand
426
361
  */
427
- var restoreSubcommand = {
362
+ const restoreSubcommand = {
428
363
  name: 'restore',
429
364
  description: 'Restore RuVector data from backup',
430
365
  options: [
@@ -433,63 +368,63 @@ var restoreSubcommand = {
433
368
  short: 'i',
434
369
  description: 'Input file path',
435
370
  type: 'string',
436
- required: true
371
+ required: true,
437
372
  },
438
373
  {
439
374
  name: 'clean',
440
375
  description: 'Drop existing tables first',
441
376
  type: 'boolean',
442
- "default": false
377
+ default: false,
443
378
  },
444
379
  {
445
380
  name: 'dry-run',
446
381
  description: 'Show what would be restored without executing',
447
382
  type: 'boolean',
448
- "default": false
383
+ default: false,
449
384
  },
450
385
  {
451
386
  name: 'host',
452
387
  short: 'h',
453
388
  description: 'PostgreSQL host',
454
389
  type: 'string',
455
- "default": 'localhost'
390
+ default: 'localhost',
456
391
  },
457
392
  {
458
393
  name: 'port',
459
394
  short: 'p',
460
395
  description: 'PostgreSQL port',
461
396
  type: 'number',
462
- "default": 5432
397
+ default: 5432,
463
398
  },
464
399
  {
465
400
  name: 'database',
466
401
  short: 'd',
467
402
  description: 'Database name',
468
- type: 'string'
403
+ type: 'string',
469
404
  },
470
405
  {
471
406
  name: 'user',
472
407
  short: 'u',
473
408
  description: 'Database user',
474
- type: 'string'
409
+ type: 'string',
475
410
  },
476
411
  {
477
412
  name: 'password',
478
413
  description: 'Database password',
479
- type: 'string'
414
+ type: 'string',
480
415
  },
481
416
  {
482
417
  name: 'ssl',
483
418
  description: 'Enable SSL',
484
419
  type: 'boolean',
485
- "default": false
420
+ default: false,
486
421
  },
487
422
  {
488
423
  name: 'schema',
489
424
  short: 's',
490
425
  description: 'Schema name',
491
426
  type: 'string',
492
- "default": 'claude_flow'
427
+ default: 'claude_flow',
493
428
  },
494
429
  ],
495
430
  examples: [
@@ -497,315 +432,236 @@ var restoreSubcommand = {
497
432
  { command: 'claude-flow ruvector backup restore -i backup.json --clean', description: 'Clean restore' },
498
433
  { command: 'claude-flow ruvector backup restore -i backup.sql --dry-run', description: 'Preview restore' },
499
434
  ],
500
- action: function (ctx) { return __awaiter(void 0, void 0, Promise, function () {
501
- var config, inputPath, clean, dryRun, spinner, fs, path, promisify, content, zlib, gunzip, compressed, decompressed, fileSize, isJson, format, data, insertCount, createCount, confirmClean, pg, _a, client, restoredRows, restoredTables, restoredIndexes, data, _i, _b, table, _loop_3, _c, _d, row, _e, _f, indexDef, _g, statements, executed, _h, statements_1, stmt, error_2, error_3;
502
- var _j, _k, _l, _m, _o;
503
- return __generator(this, function (_p) {
504
- switch (_p.label) {
505
- case 0:
506
- config = getConnectionConfig(ctx);
507
- inputPath = ctx.flags.input;
508
- clean = ctx.flags.clean;
509
- dryRun = ctx.flags['dry-run'];
510
- output.writeln();
511
- output.writeln(output.bold('RuVector Restore'));
512
- output.writeln(output.dim('='.repeat(60)));
513
- output.writeln();
514
- if (!config.database) {
515
- output.printError('Database name is required. Use --database or -d flag, or set PGDATABASE env.');
516
- return [2 /*return*/, { success: false, exitCode: 1 }];
517
- }
518
- if (!inputPath) {
519
- output.printError('Input path is required. Use --input or -i flag.');
520
- return [2 /*return*/, { success: false, exitCode: 1 }];
521
- }
522
- spinner = output.createSpinner({ text: 'Reading backup file...', spinner: 'dots' });
435
+ action: async (ctx) => {
436
+ const config = getConnectionConfig(ctx);
437
+ const inputPath = ctx.flags.input;
438
+ const clean = ctx.flags.clean;
439
+ const dryRun = ctx.flags['dry-run'];
440
+ output.writeln();
441
+ output.writeln(output.bold('RuVector Restore'));
442
+ output.writeln(output.dim('='.repeat(60)));
443
+ output.writeln();
444
+ if (!config.database) {
445
+ output.printError('Database name is required. Use --database or -d flag, or set PGDATABASE env.');
446
+ return { success: false, exitCode: 1 };
447
+ }
448
+ if (!inputPath) {
449
+ output.printError('Input path is required. Use --input or -i flag.');
450
+ return { success: false, exitCode: 1 };
451
+ }
452
+ const spinner = output.createSpinner({ text: 'Reading backup file...', spinner: 'dots' });
453
+ spinner.start();
454
+ try {
455
+ const fs = await import('fs');
456
+ const path = await import('path');
457
+ const { promisify } = await import('util');
458
+ // Check file exists
459
+ if (!fs.existsSync(inputPath)) {
460
+ spinner.fail('Backup file not found');
461
+ output.printError(`File not found: ${inputPath}`);
462
+ return { success: false, exitCode: 1 };
463
+ }
464
+ // Read file
465
+ let content;
466
+ if (inputPath.endsWith('.gz')) {
467
+ const zlib = await import('zlib');
468
+ const gunzip = promisify(zlib.gunzip);
469
+ const compressed = fs.readFileSync(inputPath);
470
+ const decompressed = await gunzip(compressed);
471
+ content = decompressed.toString('utf-8');
472
+ }
473
+ else {
474
+ content = fs.readFileSync(inputPath, 'utf-8');
475
+ }
476
+ const fileSize = fs.statSync(inputPath).size;
477
+ spinner.succeed(`Read backup file (${formatBytes(fileSize)})`);
478
+ // Determine format
479
+ const isJson = content.trim().startsWith('{');
480
+ const format = isJson ? 'json' : 'sql';
481
+ if (dryRun) {
482
+ output.printInfo('Dry run mode: showing what would be restored');
483
+ output.writeln();
484
+ if (isJson) {
485
+ const data = JSON.parse(content);
486
+ output.writeln(output.highlight('Backup metadata:'));
487
+ output.printTable({
488
+ columns: [
489
+ { key: 'property', header: 'Property', width: 20 },
490
+ { key: 'value', header: 'Value', width: 40 },
491
+ ],
492
+ data: [
493
+ { property: 'Backup Date', value: data.metadata?.backupDate || 'Unknown' },
494
+ { property: 'Database', value: data.metadata?.database || 'Unknown' },
495
+ { property: 'Schema', value: data.schema || 'Unknown' },
496
+ { property: 'Tables', value: String(data.tables?.length || 0) },
497
+ { property: 'Total Rows', value: String(data.tables?.reduce((sum, t) => sum + t.rows.length, 0) || 0) },
498
+ { property: 'Indexes', value: String(data.indexes?.length || 0) },
499
+ ],
500
+ });
501
+ }
502
+ else {
503
+ // Count SQL statements
504
+ const insertCount = (content.match(/INSERT INTO/gi) || []).length;
505
+ const createCount = (content.match(/CREATE (TABLE|INDEX)/gi) || []).length;
506
+ output.writeln(`SQL statements: ${insertCount} inserts, ${createCount} creates`);
507
+ }
508
+ return { success: true, data: { dryRun: true } };
509
+ }
510
+ // Confirm clean operation
511
+ if (clean && ctx.interactive) {
512
+ const confirmClean = await confirm({
513
+ message: 'This will drop existing tables. Continue?',
514
+ default: false,
515
+ });
516
+ if (!confirmClean) {
517
+ output.printInfo('Restore cancelled');
518
+ return { success: false, exitCode: 0 };
519
+ }
520
+ }
521
+ // Connect and restore
522
+ let pg = null;
523
+ try {
524
+ pg = await import('pg');
525
+ }
526
+ catch {
527
+ spinner.fail('PostgreSQL driver not found');
528
+ output.printError('Install pg package: npm install pg');
529
+ return { success: false, exitCode: 1 };
530
+ }
531
+ const client = new pg.Client({
532
+ host: config.host,
533
+ port: config.port,
534
+ database: config.database,
535
+ user: config.user,
536
+ password: config.password,
537
+ ssl: config.ssl ? { rejectUnauthorized: false } : false,
538
+ });
539
+ await client.connect();
540
+ spinner.succeed('Connected to PostgreSQL');
541
+ // Clean if requested
542
+ if (clean) {
543
+ spinner.setText(`Dropping schema "${config.schema}"...`);
544
+ spinner.start();
545
+ await client.query(`DROP SCHEMA IF EXISTS ${config.schema} CASCADE`);
546
+ await client.query(`CREATE SCHEMA ${config.schema}`);
547
+ spinner.succeed('Schema cleaned');
548
+ }
549
+ // Restore
550
+ let restoredRows = 0;
551
+ let restoredTables = 0;
552
+ let restoredIndexes = 0;
553
+ if (isJson) {
554
+ // Restore from JSON
555
+ const data = JSON.parse(content);
556
+ for (const table of data.tables || []) {
557
+ spinner.setText(`Restoring ${table.name}...`);
523
558
  spinner.start();
524
- _p.label = 1;
525
- case 1:
526
- _p.trys.push([1, 43, , 44]);
527
- return [4 /*yield*/, import('fs')];
528
- case 2:
529
- fs = _p.sent();
530
- return [4 /*yield*/, import('path')];
531
- case 3:
532
- path = _p.sent();
533
- return [4 /*yield*/, import('util')];
534
- case 4:
535
- promisify = (_p.sent()).promisify;
536
- // Check file exists
537
- if (!fs.existsSync(inputPath)) {
538
- spinner.fail('Backup file not found');
539
- output.printError("File not found: " + inputPath);
540
- return [2 /*return*/, { success: false, exitCode: 1 }];
541
- }
542
- content = void 0;
543
- if (!inputPath.endsWith('.gz')) return [3 /*break*/, 7];
544
- return [4 /*yield*/, import('zlib')];
545
- case 5:
546
- zlib = _p.sent();
547
- gunzip = promisify(zlib.gunzip);
548
- compressed = fs.readFileSync(inputPath);
549
- return [4 /*yield*/, gunzip(compressed)];
550
- case 6:
551
- decompressed = _p.sent();
552
- content = decompressed.toString('utf-8');
553
- return [3 /*break*/, 8];
554
- case 7:
555
- content = fs.readFileSync(inputPath, 'utf-8');
556
- _p.label = 8;
557
- case 8:
558
- fileSize = fs.statSync(inputPath).size;
559
- spinner.succeed("Read backup file (" + formatBytes(fileSize) + ")");
560
- isJson = content.trim().startsWith('{');
561
- format = isJson ? 'json' : 'sql';
562
- if (dryRun) {
563
- output.printInfo('Dry run mode: showing what would be restored');
564
- output.writeln();
565
- if (isJson) {
566
- data = JSON.parse(content);
567
- output.writeln(output.highlight('Backup metadata:'));
568
- output.printTable({
569
- columns: [
570
- { key: 'property', header: 'Property', width: 20 },
571
- { key: 'value', header: 'Value', width: 40 },
572
- ],
573
- data: [
574
- { property: 'Backup Date', value: ((_j = data.metadata) === null || _j === void 0 ? void 0 : _j.backupDate) || 'Unknown' },
575
- { property: 'Database', value: ((_k = data.metadata) === null || _k === void 0 ? void 0 : _k.database) || 'Unknown' },
576
- { property: 'Schema', value: data.schema || 'Unknown' },
577
- { property: 'Tables', value: String(((_l = data.tables) === null || _l === void 0 ? void 0 : _l.length) || 0) },
578
- { property: 'Total Rows', value: String(((_m = data.tables) === null || _m === void 0 ? void 0 : _m.reduce(function (sum, t) { return sum + t.rows.length; }, 0)) || 0) },
579
- { property: 'Indexes', value: String(((_o = data.indexes) === null || _o === void 0 ? void 0 : _o.length) || 0) },
580
- ]
581
- });
559
+ // Create table if needed (assuming schema matches)
560
+ for (const row of table.rows) {
561
+ const columns = Object.keys(row);
562
+ const values = columns.map((col, idx) => `$${idx + 1}`);
563
+ const params = columns.map(col => {
564
+ const val = row[col];
565
+ return typeof val === 'object' ? JSON.stringify(val) : val;
566
+ });
567
+ try {
568
+ await client.query(`
569
+ INSERT INTO ${config.schema}.${table.name} (${columns.join(', ')})
570
+ VALUES (${values.join(', ')})
571
+ ON CONFLICT DO NOTHING
572
+ `, params);
573
+ restoredRows++;
582
574
  }
583
- else {
584
- insertCount = (content.match(/INSERT INTO/gi) || []).length;
585
- createCount = (content.match(/CREATE (TABLE|INDEX)/gi) || []).length;
586
- output.writeln("SQL statements: " + insertCount + " inserts, " + createCount + " creates");
575
+ catch {
576
+ // Skip conflicts
587
577
  }
588
- return [2 /*return*/, { success: true, data: { dryRun: true } }];
589
578
  }
590
- if (!(clean && ctx.interactive)) return [3 /*break*/, 10];
591
- return [4 /*yield*/, confirm({
592
- message: 'This will drop existing tables. Continue?',
593
- "default": false
594
- })];
595
- case 9:
596
- confirmClean = _p.sent();
597
- if (!confirmClean) {
598
- output.printInfo('Restore cancelled');
599
- return [2 /*return*/, { success: false, exitCode: 0 }];
600
- }
601
- _p.label = 10;
602
- case 10:
603
- pg = null;
604
- _p.label = 11;
605
- case 11:
606
- _p.trys.push([11, 13, , 14]);
607
- return [4 /*yield*/, import('pg')];
608
- case 12:
609
- pg = _p.sent();
610
- return [3 /*break*/, 14];
611
- case 13:
612
- _a = _p.sent();
613
- spinner.fail('PostgreSQL driver not found');
614
- output.printError('Install pg package: npm install pg');
615
- return [2 /*return*/, { success: false, exitCode: 1 }];
616
- case 14:
617
- client = new pg.Client({
618
- host: config.host,
619
- port: config.port,
620
- database: config.database,
621
- user: config.user,
622
- password: config.password,
623
- ssl: config.ssl ? { rejectUnauthorized: false } : false
624
- });
625
- return [4 /*yield*/, client.connect()];
626
- case 15:
627
- _p.sent();
628
- spinner.succeed('Connected to PostgreSQL');
629
- if (!clean) return [3 /*break*/, 18];
630
- spinner.setText("Dropping schema \"" + config.schema + "\"...");
631
- spinner.start();
632
- return [4 /*yield*/, client.query("DROP SCHEMA IF EXISTS " + config.schema + " CASCADE")];
633
- case 16:
634
- _p.sent();
635
- return [4 /*yield*/, client.query("CREATE SCHEMA " + config.schema)];
636
- case 17:
637
- _p.sent();
638
- spinner.succeed('Schema cleaned');
639
- _p.label = 18;
640
- case 18:
641
- restoredRows = 0;
642
- restoredTables = 0;
643
- restoredIndexes = 0;
644
- if (!isJson) return [3 /*break*/, 33];
645
- data = JSON.parse(content);
646
- _i = 0, _b = data.tables || [];
647
- _p.label = 19;
648
- case 19:
649
- if (!(_i < _b.length)) return [3 /*break*/, 25];
650
- table = _b[_i];
651
- spinner.setText("Restoring " + table.name + "...");
652
- spinner.start();
653
- _loop_3 = function (row) {
654
- var columns, values, params, _q;
655
- return __generator(this, function (_r) {
656
- switch (_r.label) {
657
- case 0:
658
- columns = Object.keys(row);
659
- values = columns.map(function (col, idx) { return "$" + (idx + 1); });
660
- params = columns.map(function (col) {
661
- var val = row[col];
662
- return typeof val === 'object' ? JSON.stringify(val) : val;
663
- });
664
- _r.label = 1;
665
- case 1:
666
- _r.trys.push([1, 3, , 4]);
667
- return [4 /*yield*/, client.query("\n INSERT INTO " + config.schema + "." + table.name + " (" + columns.join(', ') + ")\n VALUES (" + values.join(', ') + ")\n ON CONFLICT DO NOTHING\n ", params)];
668
- case 2:
669
- _r.sent();
670
- restoredRows++;
671
- return [3 /*break*/, 4];
672
- case 3:
673
- _q = _r.sent();
674
- return [3 /*break*/, 4];
675
- case 4: return [2 /*return*/];
676
- }
677
- });
678
- };
679
- _c = 0, _d = table.rows;
680
- _p.label = 20;
681
- case 20:
682
- if (!(_c < _d.length)) return [3 /*break*/, 23];
683
- row = _d[_c];
684
- return [5 /*yield**/, _loop_3(row)];
685
- case 21:
686
- _p.sent();
687
- _p.label = 22;
688
- case 22:
689
- _c++;
690
- return [3 /*break*/, 20];
691
- case 23:
692
579
  restoredTables++;
693
- spinner.setText("Restoring " + table.name + "... (" + table.rows.length + " rows)");
694
- _p.label = 24;
695
- case 24:
696
- _i++;
697
- return [3 /*break*/, 19];
698
- case 25:
699
- spinner.succeed("Restored " + restoredTables + " tables, " + restoredRows + " rows");
700
- if (!(data.indexes && data.indexes.length > 0)) return [3 /*break*/, 32];
580
+ spinner.setText(`Restoring ${table.name}... (${table.rows.length} rows)`);
581
+ }
582
+ spinner.succeed(`Restored ${restoredTables} tables, ${restoredRows} rows`);
583
+ // Restore indexes
584
+ if (data.indexes && data.indexes.length > 0) {
701
585
  spinner.setText('Restoring indexes...');
702
586
  spinner.start();
703
- _e = 0, _f = data.indexes;
704
- _p.label = 26;
705
- case 26:
706
- if (!(_e < _f.length)) return [3 /*break*/, 31];
707
- indexDef = _f[_e];
708
- _p.label = 27;
709
- case 27:
710
- _p.trys.push([27, 29, , 30]);
711
- return [4 /*yield*/, client.query(indexDef)];
712
- case 28:
713
- _p.sent();
714
- restoredIndexes++;
715
- return [3 /*break*/, 30];
716
- case 29:
717
- _g = _p.sent();
718
- return [3 /*break*/, 30];
719
- case 30:
720
- _e++;
721
- return [3 /*break*/, 26];
722
- case 31:
723
- spinner.succeed("Restored " + restoredIndexes + " indexes");
724
- _p.label = 32;
725
- case 32: return [3 /*break*/, 41];
726
- case 33:
727
- // Restore from SQL
728
- spinner.setText('Executing SQL restore...');
729
- spinner.start();
730
- statements = content
731
- .split(';')
732
- .map(function (s) { return s.trim(); })
733
- .filter(function (s) { return s.length > 0 && !s.startsWith('--'); });
734
- executed = 0;
735
- _h = 0, statements_1 = statements;
736
- _p.label = 34;
737
- case 34:
738
- if (!(_h < statements_1.length)) return [3 /*break*/, 40];
739
- stmt = statements_1[_h];
740
- _p.label = 35;
741
- case 35:
742
- _p.trys.push([35, 37, , 38]);
743
- return [4 /*yield*/, client.query(stmt)];
744
- case 36:
745
- _p.sent();
746
- executed++;
747
- if (stmt.toUpperCase().includes('INSERT INTO')) {
748
- restoredRows++;
587
+ for (const indexDef of data.indexes) {
588
+ try {
589
+ await client.query(indexDef);
590
+ restoredIndexes++;
591
+ }
592
+ catch {
593
+ // Index may already exist
594
+ }
749
595
  }
750
- else if (stmt.toUpperCase().includes('CREATE INDEX')) {
751
- restoredIndexes++;
596
+ spinner.succeed(`Restored ${restoredIndexes} indexes`);
597
+ }
598
+ }
599
+ else {
600
+ // Restore from SQL
601
+ spinner.setText('Executing SQL restore...');
602
+ spinner.start();
603
+ // Split by semicolons and execute
604
+ const statements = content
605
+ .split(';')
606
+ .map(s => s.trim())
607
+ .filter(s => s.length > 0 && !s.startsWith('--'));
608
+ let executed = 0;
609
+ for (const stmt of statements) {
610
+ try {
611
+ await client.query(stmt);
612
+ executed++;
613
+ if (stmt.toUpperCase().includes('INSERT INTO')) {
614
+ restoredRows++;
615
+ }
616
+ else if (stmt.toUpperCase().includes('CREATE INDEX')) {
617
+ restoredIndexes++;
618
+ }
752
619
  }
753
- return [3 /*break*/, 38];
754
- case 37:
755
- error_2 = _p.sent();
756
- // Log but continue
757
- if (process.env.DEBUG) {
758
- console.error('Statement failed:', stmt.substring(0, 100));
620
+ catch (error) {
621
+ // Log but continue
622
+ if (process.env.DEBUG) {
623
+ console.error('Statement failed:', stmt.substring(0, 100));
624
+ }
759
625
  }
760
- return [3 /*break*/, 38];
761
- case 38:
762
626
  if (executed % 100 === 0) {
763
- spinner.setText("Executing SQL restore... " + executed + "/" + statements.length);
627
+ spinner.setText(`Executing SQL restore... ${executed}/${statements.length}`);
764
628
  }
765
- _p.label = 39;
766
- case 39:
767
- _h++;
768
- return [3 /*break*/, 34];
769
- case 40:
770
- spinner.succeed("Executed " + executed + " SQL statements");
771
- _p.label = 41;
772
- case 41: return [4 /*yield*/, client.end()];
773
- case 42:
774
- _p.sent();
775
- output.writeln();
776
- output.printSuccess('Restore completed successfully!');
777
- output.writeln();
778
- output.printBox([
779
- "Source: " + inputPath,
780
- "Format: " + format.toUpperCase(),
781
- "Tables Restored: " + restoredTables,
782
- "Rows Restored: " + restoredRows.toLocaleString(),
783
- "Indexes Restored: " + restoredIndexes,
784
- ].join('\n'), 'Restore Summary');
785
- return [2 /*return*/, {
786
- success: true,
787
- data: {
788
- inputPath: inputPath,
789
- format: format,
790
- restoredTables: restoredTables,
791
- restoredRows: restoredRows,
792
- restoredIndexes: restoredIndexes
793
- }
794
- }];
795
- case 43:
796
- error_3 = _p.sent();
797
- spinner.fail('Restore failed');
798
- output.printError(error_3 instanceof Error ? error_3.message : String(error_3));
799
- return [2 /*return*/, { success: false, exitCode: 1 }];
800
- case 44: return [2 /*return*/];
629
+ }
630
+ spinner.succeed(`Executed ${executed} SQL statements`);
801
631
  }
802
- });
803
- }); }
632
+ await client.end();
633
+ output.writeln();
634
+ output.printSuccess('Restore completed successfully!');
635
+ output.writeln();
636
+ output.printBox([
637
+ `Source: ${inputPath}`,
638
+ `Format: ${format.toUpperCase()}`,
639
+ `Tables Restored: ${restoredTables}`,
640
+ `Rows Restored: ${restoredRows.toLocaleString()}`,
641
+ `Indexes Restored: ${restoredIndexes}`,
642
+ ].join('\n'), 'Restore Summary');
643
+ return {
644
+ success: true,
645
+ data: {
646
+ inputPath,
647
+ format,
648
+ restoredTables,
649
+ restoredRows,
650
+ restoredIndexes,
651
+ },
652
+ };
653
+ }
654
+ catch (error) {
655
+ spinner.fail('Restore failed');
656
+ output.printError(error instanceof Error ? error.message : String(error));
657
+ return { success: false, exitCode: 1 };
658
+ }
659
+ },
804
660
  };
805
661
  /**
806
662
  * RuVector backup main command
807
663
  */
808
- export var backupCommand = {
664
+ export const backupCommand = {
809
665
  name: 'backup',
810
666
  description: 'Backup and restore RuVector data',
811
667
  subcommands: [backupSubcommand, restoreSubcommand],
@@ -815,78 +671,76 @@ export var backupCommand = {
815
671
  short: 'h',
816
672
  description: 'PostgreSQL host',
817
673
  type: 'string',
818
- "default": 'localhost'
674
+ default: 'localhost',
819
675
  },
820
676
  {
821
677
  name: 'port',
822
678
  short: 'p',
823
679
  description: 'PostgreSQL port',
824
680
  type: 'number',
825
- "default": 5432
681
+ default: 5432,
826
682
  },
827
683
  {
828
684
  name: 'database',
829
685
  short: 'd',
830
686
  description: 'Database name',
831
- type: 'string'
687
+ type: 'string',
832
688
  },
833
689
  {
834
690
  name: 'user',
835
691
  short: 'u',
836
692
  description: 'Database user',
837
- type: 'string'
693
+ type: 'string',
838
694
  },
839
695
  {
840
696
  name: 'password',
841
697
  description: 'Database password',
842
- type: 'string'
698
+ type: 'string',
843
699
  },
844
700
  {
845
701
  name: 'ssl',
846
702
  description: 'Enable SSL',
847
703
  type: 'boolean',
848
- "default": false
704
+ default: false,
849
705
  },
850
706
  {
851
707
  name: 'schema',
852
708
  short: 's',
853
709
  description: 'Schema name',
854
710
  type: 'string',
855
- "default": 'claude_flow'
711
+ default: 'claude_flow',
856
712
  },
857
713
  ],
858
714
  examples: [
859
715
  { command: 'claude-flow ruvector backup create -o backup.sql', description: 'Create backup' },
860
716
  { command: 'claude-flow ruvector backup restore -i backup.sql', description: 'Restore backup' },
861
717
  ],
862
- action: function (ctx) { return __awaiter(void 0, void 0, Promise, function () {
863
- return __generator(this, function (_a) {
864
- output.writeln();
865
- output.writeln(output.bold('RuVector Backup'));
866
- output.writeln(output.dim('='.repeat(60)));
867
- output.writeln();
868
- output.printBox([
869
- 'RuVector Backup provides data backup and restore capabilities:',
870
- '',
871
- ' create Create a backup of RuVector data',
872
- ' restore Restore RuVector data from backup',
873
- '',
874
- 'Supported formats:',
875
- ' SQL - PostgreSQL-compatible SQL statements',
876
- ' JSON - Portable JSON format with metadata',
877
- ' CSV - Comma-separated values',
878
- '',
879
- 'Features:',
880
- ' - Selective table backup',
881
- ' - Gzip compression',
882
- ' - Index preservation',
883
- ' - Incremental restore',
884
- ].join('\n'), 'Backup Commands');
885
- output.writeln();
886
- output.printInfo('Run `claude-flow ruvector backup <command> --help` for details');
887
- return [2 /*return*/, { success: true }];
888
- });
889
- }); }
718
+ action: async (ctx) => {
719
+ output.writeln();
720
+ output.writeln(output.bold('RuVector Backup'));
721
+ output.writeln(output.dim('='.repeat(60)));
722
+ output.writeln();
723
+ output.printBox([
724
+ 'RuVector Backup provides data backup and restore capabilities:',
725
+ '',
726
+ ' create Create a backup of RuVector data',
727
+ ' restore Restore RuVector data from backup',
728
+ '',
729
+ 'Supported formats:',
730
+ ' SQL - PostgreSQL-compatible SQL statements',
731
+ ' JSON - Portable JSON format with metadata',
732
+ ' CSV - Comma-separated values',
733
+ '',
734
+ 'Features:',
735
+ ' - Selective table backup',
736
+ ' - Gzip compression',
737
+ ' - Index preservation',
738
+ ' - Incremental restore',
739
+ ].join('\n'), 'Backup Commands');
740
+ output.writeln();
741
+ output.printInfo('Run `claude-flow ruvector backup <command> --help` for details');
742
+ return { success: true };
743
+ },
890
744
  };
891
745
  export default backupCommand;
892
746
  //# sourceMappingURL=backup.js.map