kynjal-cli 3.1.3 → 4.0.0

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 (566) hide show
  1. package/.claude/agents/core/coder.md +1 -1
  2. package/.claude/agents/core/planner.md +2 -2
  3. package/.claude/agents/core/researcher.md +1 -1
  4. package/.claude/agents/core/reviewer.md +1 -1
  5. package/.claude/agents/core/tester.md +1 -1
  6. package/.claude/agents/data/data-ml-model.md +4 -4
  7. package/.claude/agents/development/dev-backend-api.md +4 -4
  8. package/.claude/agents/documentation/docs-api-openapi.md +4 -4
  9. package/.claude/agents/github/code-review-swarm.md +2 -2
  10. package/.claude/agents/github/issue-tracker.md +2 -2
  11. package/.claude/agents/github/pr-manager.md +2 -2
  12. package/.claude/agents/github/release-manager.md +2 -2
  13. package/.claude/agents/github/workflow-automation.md +2 -2
  14. package/.claude/agents/sparc/architecture.md +3 -3
  15. package/.claude/agents/sparc/pseudocode.md +2 -2
  16. package/.claude/agents/sparc/refinement.md +3 -3
  17. package/.claude/agents/sparc/specification.md +2 -2
  18. package/.claude/agents/swarm/adaptive-coordinator.md +1 -1
  19. package/.claude/agents/swarm/hierarchical-coordinator.md +1 -1
  20. package/.claude/agents/swarm/mesh-coordinator.md +1 -1
  21. package/.claude/agents/templates/base-template-generator.md +25 -4
  22. package/.claude/agents/templates/sparc-coordinator.md +3 -3
  23. package/.claude/helpers/auto-commit.sh +1 -1
  24. package/.claude/helpers/auto-memory-hook.mjs +27 -9
  25. package/.claude/helpers/hook-handler.cjs +58 -18
  26. package/.claude/helpers/statusline.cjs +14 -33
  27. package/.claude/helpers/statusline.js +3 -3
  28. package/.claude/settings.json +9 -9
  29. package/.claude/skills/reasoningbank-intelligence/SKILL.md +2 -2
  30. package/.claude/skills/swarm-orchestration/SKILL.md +1 -1
  31. package/README.md +383 -170
  32. package/bin/cli.js +6 -6
  33. package/bin/mcp-server.js +1 -1
  34. package/bin/preinstall.cjs +2 -0
  35. package/dist/src/appliance/gguf-engine.js +664 -0
  36. package/dist/src/appliance/gguf-engine.js.map +1 -0
  37. package/dist/src/appliance/ruvllm-bridge.js +492 -0
  38. package/dist/src/appliance/ruvllm-bridge.js.map +1 -0
  39. package/dist/src/appliance/rvfa-builder.js +383 -0
  40. package/dist/src/appliance/rvfa-builder.js.map +1 -0
  41. package/dist/src/appliance/rvfa-distribution.js +533 -0
  42. package/dist/src/appliance/rvfa-distribution.js.map +1 -0
  43. package/dist/src/appliance/rvfa-format.js +465 -0
  44. package/dist/src/appliance/rvfa-format.js.map +1 -0
  45. package/dist/src/appliance/rvfa-runner.js +373 -0
  46. package/dist/src/appliance/rvfa-runner.js.map +1 -0
  47. package/dist/src/appliance/rvfa-signing.js +469 -0
  48. package/dist/src/appliance/rvfa-signing.js.map +1 -0
  49. package/dist/src/benchmarks/pretrain/index.js +542 -331
  50. package/dist/src/benchmarks/pretrain/index.js.map +1 -1
  51. package/dist/src/commands/agent.d.ts.map +1 -1
  52. package/dist/src/commands/agent.js +725 -502
  53. package/dist/src/commands/agent.js.map +1 -1
  54. package/dist/src/commands/analyze.js +1548 -1218
  55. package/dist/src/commands/analyze.js.map +1 -1
  56. package/dist/src/commands/appliance-advanced.d.ts +9 -0
  57. package/dist/src/commands/appliance-advanced.d.ts.map +1 -0
  58. package/dist/src/commands/appliance-advanced.js +324 -0
  59. package/dist/src/commands/appliance-advanced.js.map +1 -0
  60. package/dist/src/commands/appliance.d.ts +8 -0
  61. package/dist/src/commands/appliance.d.ts.map +1 -0
  62. package/dist/src/commands/appliance.js +581 -0
  63. package/dist/src/commands/appliance.js.map +1 -0
  64. package/dist/src/commands/benchmark.js +523 -372
  65. package/dist/src/commands/benchmark.js.map +1 -1
  66. package/dist/src/commands/claims.js +364 -274
  67. package/dist/src/commands/claims.js.map +1 -1
  68. package/dist/src/commands/cleanup.d.ts +13 -0
  69. package/dist/src/commands/cleanup.d.ts.map +1 -0
  70. package/dist/src/commands/cleanup.js +262 -0
  71. package/dist/src/commands/cleanup.js.map +1 -0
  72. package/dist/src/commands/completions.js +118 -477
  73. package/dist/src/commands/completions.js.map +1 -1
  74. package/dist/src/commands/config.js +303 -237
  75. package/dist/src/commands/config.js.map +1 -1
  76. package/dist/src/commands/daemon.d.ts.map +1 -1
  77. package/dist/src/commands/daemon.js +597 -425
  78. package/dist/src/commands/daemon.js.map +1 -1
  79. package/dist/src/commands/deployment.js +275 -194
  80. package/dist/src/commands/deployment.js.map +1 -1
  81. package/dist/src/commands/doctor.d.ts.map +1 -1
  82. package/dist/src/commands/doctor.js +690 -460
  83. package/dist/src/commands/doctor.js.map +1 -1
  84. package/dist/src/commands/embeddings.js +1543 -1293
  85. package/dist/src/commands/embeddings.js.map +1 -1
  86. package/dist/src/commands/guidance.js +596 -449
  87. package/dist/src/commands/guidance.js.map +1 -1
  88. package/dist/src/commands/hive-mind.js +938 -854
  89. package/dist/src/commands/hive-mind.js.map +1 -1
  90. package/dist/src/commands/hooks.d.ts.map +1 -1
  91. package/dist/src/commands/hooks.js +3677 -2570
  92. package/dist/src/commands/hooks.js.map +1 -1
  93. package/dist/src/commands/index.js +322 -122
  94. package/dist/src/commands/index.js.map +1 -1
  95. package/dist/src/commands/init.d.ts +1 -1
  96. package/dist/src/commands/init.d.ts.map +1 -1
  97. package/dist/src/commands/init.js +943 -787
  98. package/dist/src/commands/init.js.map +1 -1
  99. package/dist/src/commands/issues.js +558 -383
  100. package/dist/src/commands/issues.js.map +1 -1
  101. package/dist/src/commands/mcp.d.ts.map +1 -1
  102. package/dist/src/commands/mcp.js +605 -475
  103. package/dist/src/commands/mcp.js.map +1 -1
  104. package/dist/src/commands/memory.d.ts.map +1 -1
  105. package/dist/src/commands/memory.js +1031 -814
  106. package/dist/src/commands/memory.js.map +1 -1
  107. package/dist/src/commands/migrate.js +347 -282
  108. package/dist/src/commands/migrate.js.map +1 -1
  109. package/dist/src/commands/neural.d.ts.map +1 -1
  110. package/dist/src/commands/neural.js +1563 -1283
  111. package/dist/src/commands/neural.js.map +1 -1
  112. package/dist/src/commands/performance.js +643 -497
  113. package/dist/src/commands/performance.js.map +1 -1
  114. package/dist/src/commands/plugins.js +841 -668
  115. package/dist/src/commands/plugins.js.map +1 -1
  116. package/dist/src/commands/process.js +447 -392
  117. package/dist/src/commands/process.js.map +1 -1
  118. package/dist/src/commands/progress.js +256 -162
  119. package/dist/src/commands/progress.js.map +1 -1
  120. package/dist/src/commands/providers.js +220 -150
  121. package/dist/src/commands/providers.js.map +1 -1
  122. package/dist/src/commands/route.js +665 -520
  123. package/dist/src/commands/route.js.map +1 -1
  124. package/dist/src/commands/ruvector/backup.js +651 -505
  125. package/dist/src/commands/ruvector/backup.js.map +1 -1
  126. package/dist/src/commands/ruvector/benchmark.js +401 -349
  127. package/dist/src/commands/ruvector/benchmark.js.map +1 -1
  128. package/dist/src/commands/ruvector/import.js +267 -225
  129. package/dist/src/commands/ruvector/import.js.map +1 -1
  130. package/dist/src/commands/ruvector/index.js +75 -37
  131. package/dist/src/commands/ruvector/index.js.map +1 -1
  132. package/dist/src/commands/ruvector/init.js +359 -336
  133. package/dist/src/commands/ruvector/init.js.map +1 -1
  134. package/dist/src/commands/ruvector/migrate.js +322 -335
  135. package/dist/src/commands/ruvector/migrate.js.map +1 -1
  136. package/dist/src/commands/ruvector/optimize.js +431 -375
  137. package/dist/src/commands/ruvector/optimize.js.map +1 -1
  138. package/dist/src/commands/ruvector/setup.js +117 -703
  139. package/dist/src/commands/ruvector/setup.js.map +1 -1
  140. package/dist/src/commands/ruvector/status.js +419 -364
  141. package/dist/src/commands/ruvector/status.js.map +1 -1
  142. package/dist/src/commands/security.d.ts.map +1 -1
  143. package/dist/src/commands/security.js +610 -456
  144. package/dist/src/commands/security.js.map +1 -1
  145. package/dist/src/commands/session.d.ts +1 -1
  146. package/dist/src/commands/session.js +627 -505
  147. package/dist/src/commands/session.js.map +1 -1
  148. package/dist/src/commands/start.d.ts +1 -1
  149. package/dist/src/commands/start.js +368 -271
  150. package/dist/src/commands/start.js.map +1 -1
  151. package/dist/src/commands/status.d.ts +1 -1
  152. package/dist/src/commands/status.d.ts.map +1 -1
  153. package/dist/src/commands/status.js +492 -379
  154. package/dist/src/commands/status.js.map +1 -1
  155. package/dist/src/commands/swarm.js +488 -408
  156. package/dist/src/commands/swarm.js.map +1 -1
  157. package/dist/src/commands/task.d.ts +1 -1
  158. package/dist/src/commands/task.js +539 -424
  159. package/dist/src/commands/task.js.map +1 -1
  160. package/dist/src/commands/transfer-store.js +412 -322
  161. package/dist/src/commands/transfer-store.js.map +1 -1
  162. package/dist/src/commands/update.js +291 -196
  163. package/dist/src/commands/update.js.map +1 -1
  164. package/dist/src/commands/workflow.js +486 -386
  165. package/dist/src/commands/workflow.js.map +1 -1
  166. package/dist/src/config-adapter.js +40 -39
  167. package/dist/src/config-adapter.js.map +1 -1
  168. package/dist/src/index.js +416 -312
  169. package/dist/src/index.js.map +1 -1
  170. package/dist/src/infrastructure/in-memory-repositories.js +507 -246
  171. package/dist/src/infrastructure/in-memory-repositories.js.map +1 -1
  172. package/dist/src/init/claudemd-generator.js +78 -368
  173. package/dist/src/init/claudemd-generator.js.map +1 -1
  174. package/dist/src/init/executor.js +1019 -1345
  175. package/dist/src/init/executor.js.map +1 -1
  176. package/dist/src/init/helpers-generator.js +60 -635
  177. package/dist/src/init/helpers-generator.js.map +1 -1
  178. package/dist/src/init/index.d.ts +1 -1
  179. package/dist/src/init/index.d.ts.map +1 -1
  180. package/dist/src/init/index.js +1 -1
  181. package/dist/src/init/index.js.map +1 -1
  182. package/dist/src/init/mcp-generator.d.ts +0 -1
  183. package/dist/src/init/mcp-generator.d.ts.map +1 -1
  184. package/dist/src/init/mcp-generator.js +62 -42
  185. package/dist/src/init/mcp-generator.js.map +1 -1
  186. package/dist/src/init/settings-generator.d.ts.map +1 -1
  187. package/dist/src/init/settings-generator.js +167 -100
  188. package/dist/src/init/settings-generator.js.map +1 -1
  189. package/dist/src/init/statusline-generator.d.ts +16 -8
  190. package/dist/src/init/statusline-generator.d.ts.map +1 -1
  191. package/dist/src/init/statusline-generator.js +20 -1300
  192. package/dist/src/init/statusline-generator.js.map +1 -1
  193. package/dist/src/init/types.d.ts +15 -5
  194. package/dist/src/init/types.d.ts.map +1 -1
  195. package/dist/src/init/types.js +66 -76
  196. package/dist/src/init/types.js.map +1 -1
  197. package/dist/src/mcp-client.js +130 -76
  198. package/dist/src/mcp-client.js.map +1 -1
  199. package/dist/src/mcp-server.js +758 -445
  200. package/dist/src/mcp-server.js.map +1 -1
  201. package/dist/src/mcp-tools/agent-tools.js +492 -391
  202. package/dist/src/mcp-tools/agent-tools.js.map +1 -1
  203. package/dist/src/mcp-tools/agentdb-tools.d.ts +30 -0
  204. package/dist/src/mcp-tools/agentdb-tools.d.ts.map +1 -0
  205. package/dist/src/mcp-tools/agentdb-tools.js +758 -0
  206. package/dist/src/mcp-tools/agentdb-tools.js.map +1 -0
  207. package/dist/src/mcp-tools/analyze-tools.js +236 -172
  208. package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
  209. package/dist/src/mcp-tools/auto-install.js +142 -80
  210. package/dist/src/mcp-tools/auto-install.js.map +1 -1
  211. package/dist/src/mcp-tools/browser-tools.js +375 -252
  212. package/dist/src/mcp-tools/browser-tools.js.map +1 -1
  213. package/dist/src/mcp-tools/claims-tools.js +565 -473
  214. package/dist/src/mcp-tools/claims-tools.js.map +1 -1
  215. package/dist/src/mcp-tools/config-tools.d.ts.map +1 -1
  216. package/dist/src/mcp-tools/config-tools.js +284 -190
  217. package/dist/src/mcp-tools/config-tools.js.map +1 -1
  218. package/dist/src/mcp-tools/coordination-tools.d.ts.map +1 -1
  219. package/dist/src/mcp-tools/coordination-tools.js +600 -349
  220. package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
  221. package/dist/src/mcp-tools/daa-tools.js +367 -289
  222. package/dist/src/mcp-tools/daa-tools.js.map +1 -1
  223. package/dist/src/mcp-tools/embeddings-tools.js +693 -582
  224. package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
  225. package/dist/src/mcp-tools/github-tools.js +312 -261
  226. package/dist/src/mcp-tools/github-tools.js.map +1 -1
  227. package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -1
  228. package/dist/src/mcp-tools/hive-mind-tools.js +718 -423
  229. package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
  230. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  231. package/dist/src/mcp-tools/hooks-tools.js +2726 -1978
  232. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  233. package/dist/src/mcp-tools/index.d.ts +2 -0
  234. package/dist/src/mcp-tools/index.d.ts.map +1 -1
  235. package/dist/src/mcp-tools/index.js +2 -0
  236. package/dist/src/mcp-tools/index.js.map +1 -1
  237. package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
  238. package/dist/src/mcp-tools/memory-tools.js +514 -329
  239. package/dist/src/mcp-tools/memory-tools.js.map +1 -1
  240. package/dist/src/mcp-tools/neural-tools.d.ts.map +1 -1
  241. package/dist/src/mcp-tools/neural-tools.js +428 -326
  242. package/dist/src/mcp-tools/neural-tools.js.map +1 -1
  243. package/dist/src/mcp-tools/performance-tools.js +480 -420
  244. package/dist/src/mcp-tools/performance-tools.js.map +1 -1
  245. package/dist/src/mcp-tools/progress-tools.js +278 -204
  246. package/dist/src/mcp-tools/progress-tools.js.map +1 -1
  247. package/dist/src/mcp-tools/ruvllm-tools.d.ts +9 -0
  248. package/dist/src/mcp-tools/ruvllm-tools.d.ts.map +1 -0
  249. package/dist/src/mcp-tools/ruvllm-tools.js +399 -0
  250. package/dist/src/mcp-tools/ruvllm-tools.js.map +1 -0
  251. package/dist/src/mcp-tools/security-tools.js +429 -297
  252. package/dist/src/mcp-tools/security-tools.js.map +1 -1
  253. package/dist/src/mcp-tools/session-tools.js +234 -185
  254. package/dist/src/mcp-tools/session-tools.js.map +1 -1
  255. package/dist/src/mcp-tools/swarm-tools.d.ts +2 -1
  256. package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -1
  257. package/dist/src/mcp-tools/swarm-tools.js +303 -64
  258. package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
  259. package/dist/src/mcp-tools/system-tools.d.ts.map +1 -1
  260. package/dist/src/mcp-tools/system-tools.js +352 -200
  261. package/dist/src/mcp-tools/system-tools.js.map +1 -1
  262. package/dist/src/mcp-tools/task-tools.d.ts.map +1 -1
  263. package/dist/src/mcp-tools/task-tools.js +357 -189
  264. package/dist/src/mcp-tools/task-tools.js.map +1 -1
  265. package/dist/src/mcp-tools/terminal-tools.js +196 -148
  266. package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
  267. package/dist/src/mcp-tools/transfer-tools.js +333 -186
  268. package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
  269. package/dist/src/mcp-tools/wasm-agent-tools.d.ts +9 -0
  270. package/dist/src/mcp-tools/wasm-agent-tools.d.ts.map +1 -0
  271. package/dist/src/mcp-tools/wasm-agent-tools.js +377 -0
  272. package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -0
  273. package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -1
  274. package/dist/src/mcp-tools/workflow-tools.js +471 -335
  275. package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
  276. package/dist/src/memory/ewc-consolidation.js +345 -173
  277. package/dist/src/memory/ewc-consolidation.js.map +1 -1
  278. package/dist/src/memory/intelligence.js +841 -359
  279. package/dist/src/memory/intelligence.js.map +1 -1
  280. package/dist/src/memory/memory-bridge.js +1964 -0
  281. package/dist/src/memory/memory-bridge.js.map +1 -0
  282. package/dist/src/memory/memory-initializer.js +1895 -1602
  283. package/dist/src/memory/memory-initializer.js.map +1 -1
  284. package/dist/src/memory/sona-optimizer.js +329 -199
  285. package/dist/src/memory/sona-optimizer.js.map +1 -1
  286. package/dist/src/output.d.ts +2 -2
  287. package/dist/src/output.d.ts.map +1 -1
  288. package/dist/src/output.js +273 -242
  289. package/dist/src/output.js.map +1 -1
  290. package/dist/src/parser.js +217 -124
  291. package/dist/src/parser.js.map +1 -1
  292. package/dist/src/plugins/manager.js +531 -278
  293. package/dist/src/plugins/manager.js.map +1 -1
  294. package/dist/src/plugins/store/discovery.js +362 -275
  295. package/dist/src/plugins/store/discovery.js.map +1 -1
  296. package/dist/src/plugins/store/index.js +105 -48
  297. package/dist/src/plugins/store/index.js.map +1 -1
  298. package/dist/src/plugins/store/search.js +107 -69
  299. package/dist/src/plugins/store/search.js.map +1 -1
  300. package/dist/src/plugins/tests/demo-plugin-store.js +160 -113
  301. package/dist/src/plugins/tests/demo-plugin-store.js.map +1 -1
  302. package/dist/src/plugins/tests/standalone-test.js +223 -172
  303. package/dist/src/plugins/tests/standalone-test.js.map +1 -1
  304. package/dist/src/plugins/tests/test-plugin-store.js +228 -190
  305. package/dist/src/plugins/tests/test-plugin-store.js.map +1 -1
  306. package/dist/src/production/circuit-breaker.js +126 -62
  307. package/dist/src/production/circuit-breaker.js.map +1 -1
  308. package/dist/src/production/error-handler.js +156 -86
  309. package/dist/src/production/error-handler.js.map +1 -1
  310. package/dist/src/production/monitoring.js +220 -139
  311. package/dist/src/production/monitoring.js.map +1 -1
  312. package/dist/src/production/rate-limiter.js +93 -74
  313. package/dist/src/production/rate-limiter.js.map +1 -1
  314. package/dist/src/production/retry.js +167 -75
  315. package/dist/src/production/retry.js.map +1 -1
  316. package/dist/src/prompt.js +560 -436
  317. package/dist/src/prompt.js.map +1 -1
  318. package/dist/src/runtime/headless.js +289 -200
  319. package/dist/src/runtime/headless.js.map +1 -1
  320. package/dist/src/ruvector/agent-wasm.js +511 -0
  321. package/dist/src/ruvector/agent-wasm.js.map +1 -0
  322. package/dist/src/ruvector/ast-analyzer.js +232 -145
  323. package/dist/src/ruvector/ast-analyzer.js.map +1 -1
  324. package/dist/src/ruvector/coverage-router.js +419 -287
  325. package/dist/src/ruvector/coverage-router.js.map +1 -1
  326. package/dist/src/ruvector/coverage-tools.js +101 -56
  327. package/dist/src/ruvector/coverage-tools.js.map +1 -1
  328. package/dist/src/ruvector/diff-classifier.js +451 -324
  329. package/dist/src/ruvector/diff-classifier.js.map +1 -1
  330. package/dist/src/ruvector/enhanced-model-router.js +337 -251
  331. package/dist/src/ruvector/enhanced-model-router.js.map +1 -1
  332. package/dist/src/ruvector/flash-attention.js +254 -223
  333. package/dist/src/ruvector/flash-attention.js.map +1 -1
  334. package/dist/src/ruvector/graph-analyzer.js +680 -486
  335. package/dist/src/ruvector/graph-analyzer.js.map +1 -1
  336. package/dist/src/ruvector/index.js +113 -27
  337. package/dist/src/ruvector/index.js.map +1 -1
  338. package/dist/src/ruvector/lora-adapter.js +248 -155
  339. package/dist/src/ruvector/lora-adapter.js.map +1 -1
  340. package/dist/src/ruvector/model-router.js +248 -175
  341. package/dist/src/ruvector/model-router.js.map +1 -1
  342. package/dist/src/ruvector/moe-router.js +286 -228
  343. package/dist/src/ruvector/moe-router.js.map +1 -1
  344. package/dist/src/ruvector/q-learning-router.js +338 -257
  345. package/dist/src/ruvector/q-learning-router.js.map +1 -1
  346. package/dist/src/ruvector/ruvllm-wasm.js +527 -0
  347. package/dist/src/ruvector/ruvllm-wasm.js.map +1 -0
  348. package/dist/src/ruvector/semantic-router.js +67 -60
  349. package/dist/src/ruvector/semantic-router.js.map +1 -1
  350. package/dist/src/ruvector/vector-db.js +205 -119
  351. package/dist/src/ruvector/vector-db.js.map +1 -1
  352. package/dist/src/services/agentic-flow-bridge.js +168 -0
  353. package/dist/src/services/agentic-flow-bridge.js.map +1 -0
  354. package/dist/src/services/claim-service.js +940 -615
  355. package/dist/src/services/claim-service.js.map +1 -1
  356. package/dist/src/services/container-worker-pool.js +669 -399
  357. package/dist/src/services/container-worker-pool.js.map +1 -1
  358. package/dist/src/services/headless-worker-executor.js +467 -441
  359. package/dist/src/services/headless-worker-executor.js.map +1 -1
  360. package/dist/src/services/index.d.ts +5 -5
  361. package/dist/src/services/index.d.ts.map +1 -1
  362. package/dist/src/services/index.js +4 -4
  363. package/dist/src/services/index.js.map +1 -1
  364. package/dist/src/services/registry-api.js +201 -93
  365. package/dist/src/services/registry-api.js.map +1 -1
  366. package/dist/src/services/ruvector-training.js +414 -144
  367. package/dist/src/services/ruvector-training.js.map +1 -1
  368. package/dist/src/services/worker-daemon.js +928 -531
  369. package/dist/src/services/worker-daemon.js.map +1 -1
  370. package/dist/src/services/worker-queue.js +550 -331
  371. package/dist/src/services/worker-queue.js.map +1 -1
  372. package/dist/src/suggest.js +55 -45
  373. package/dist/src/suggest.js.map +1 -1
  374. package/dist/src/transfer/anonymization/index.js +37 -29
  375. package/dist/src/transfer/anonymization/index.js.map +1 -1
  376. package/dist/src/transfer/deploy-seraphine.d.ts +1 -1
  377. package/dist/src/transfer/deploy-seraphine.js +156 -129
  378. package/dist/src/transfer/deploy-seraphine.js.map +1 -1
  379. package/dist/src/transfer/export.js +142 -84
  380. package/dist/src/transfer/export.js.map +1 -1
  381. package/dist/src/transfer/index.d.ts +1 -1
  382. package/dist/src/transfer/index.d.ts.map +1 -1
  383. package/dist/src/transfer/index.js +2 -0
  384. package/dist/src/transfer/index.js.map +1 -1
  385. package/dist/src/transfer/ipfs/client.js +337 -179
  386. package/dist/src/transfer/ipfs/client.js.map +1 -1
  387. package/dist/src/transfer/ipfs/upload.js +434 -290
  388. package/dist/src/transfer/ipfs/upload.js.map +1 -1
  389. package/dist/src/transfer/models/seraphine.js +58 -58
  390. package/dist/src/transfer/models/seraphine.js.map +1 -1
  391. package/dist/src/transfer/serialization/cfp.js +37 -33
  392. package/dist/src/transfer/serialization/cfp.js.map +1 -1
  393. package/dist/src/transfer/storage/gcs.js +248 -139
  394. package/dist/src/transfer/storage/gcs.js.map +1 -1
  395. package/dist/src/transfer/store/discovery.js +353 -243
  396. package/dist/src/transfer/store/discovery.js.map +1 -1
  397. package/dist/src/transfer/store/download.js +365 -243
  398. package/dist/src/transfer/store/download.js.map +1 -1
  399. package/dist/src/transfer/store/index.js +130 -63
  400. package/dist/src/transfer/store/index.js.map +1 -1
  401. package/dist/src/transfer/store/publish.js +258 -184
  402. package/dist/src/transfer/store/publish.js.map +1 -1
  403. package/dist/src/transfer/store/registry.js +73 -51
  404. package/dist/src/transfer/store/registry.js.map +1 -1
  405. package/dist/src/transfer/store/search.js +96 -64
  406. package/dist/src/transfer/store/search.js.map +1 -1
  407. package/dist/src/transfer/store/tests/standalone-test.js +231 -174
  408. package/dist/src/transfer/store/tests/standalone-test.js.map +1 -1
  409. package/dist/src/transfer/test-seraphine.js +130 -95
  410. package/dist/src/transfer/test-seraphine.js.map +1 -1
  411. package/dist/src/transfer/tests/test-store.js +239 -194
  412. package/dist/src/transfer/tests/test-store.js.map +1 -1
  413. package/dist/src/types.js +56 -27
  414. package/dist/src/types.js.map +1 -1
  415. package/dist/src/update/checker.js +183 -106
  416. package/dist/src/update/checker.js.map +1 -1
  417. package/dist/src/update/executor.js +198 -135
  418. package/dist/src/update/executor.js.map +1 -1
  419. package/dist/src/update/index.js +85 -38
  420. package/dist/src/update/index.js.map +1 -1
  421. package/dist/src/update/rate-limiter.js +31 -19
  422. package/dist/src/update/rate-limiter.js.map +1 -1
  423. package/dist/src/update/validator.js +64 -38
  424. package/dist/src/update/validator.js.map +1 -1
  425. package/dist/tsconfig.tsbuildinfo +1 -1
  426. package/package.json +13 -10
  427. package/.claude/agents/custom/accessibility-auditor.yaml +0 -56
  428. package/.claude/agents/custom/design-architect.yaml +0 -48
  429. package/.claude/agents/custom/ui-developer.yaml +0 -46
  430. package/.claude/agents/custom/ux-researcher.yaml +0 -60
  431. package/dist/src/benchmarks/pretrain/index.d.ts +0 -58
  432. package/dist/src/benchmarks/pretrain/index.d.ts.map +0 -1
  433. package/dist/src/commands/index.d.ts +0 -108
  434. package/dist/src/commands/index.d.ts.map +0 -1
  435. package/dist/src/config-adapter.d.ts +0 -15
  436. package/dist/src/config-adapter.d.ts.map +0 -1
  437. package/dist/src/index.d.ts +0 -76
  438. package/dist/src/index.d.ts.map +0 -1
  439. package/dist/src/infrastructure/in-memory-repositories.d.ts +0 -68
  440. package/dist/src/infrastructure/in-memory-repositories.d.ts.map +0 -1
  441. package/dist/src/init/claudemd-generator.d.ts +0 -25
  442. package/dist/src/init/claudemd-generator.d.ts.map +0 -1
  443. package/dist/src/init/executor.d.ts +0 -41
  444. package/dist/src/init/executor.d.ts.map +0 -1
  445. package/dist/src/init/helpers-generator.d.ts +0 -60
  446. package/dist/src/init/helpers-generator.d.ts.map +0 -1
  447. package/dist/src/mcp-client.d.ts +0 -92
  448. package/dist/src/mcp-client.d.ts.map +0 -1
  449. package/dist/src/mcp-server.d.ts +0 -161
  450. package/dist/src/mcp-server.d.ts.map +0 -1
  451. package/dist/src/mcp-tools/auto-install.d.ts +0 -83
  452. package/dist/src/mcp-tools/auto-install.d.ts.map +0 -1
  453. package/dist/src/mcp-tools/types.d.ts +0 -31
  454. package/dist/src/mcp-tools/types.d.ts.map +0 -1
  455. package/dist/src/memory/ewc-consolidation.d.ts +0 -271
  456. package/dist/src/memory/ewc-consolidation.d.ts.map +0 -1
  457. package/dist/src/memory/intelligence.d.ts +0 -285
  458. package/dist/src/memory/intelligence.d.ts.map +0 -1
  459. package/dist/src/memory/memory-initializer.d.ts +0 -396
  460. package/dist/src/memory/memory-initializer.d.ts.map +0 -1
  461. package/dist/src/memory/sona-optimizer.d.ts +0 -227
  462. package/dist/src/memory/sona-optimizer.d.ts.map +0 -1
  463. package/dist/src/parser.d.ts +0 -41
  464. package/dist/src/parser.d.ts.map +0 -1
  465. package/dist/src/plugins/manager.d.ts +0 -133
  466. package/dist/src/plugins/manager.d.ts.map +0 -1
  467. package/dist/src/plugins/store/discovery.d.ts +0 -88
  468. package/dist/src/plugins/store/discovery.d.ts.map +0 -1
  469. package/dist/src/plugins/store/index.d.ts +0 -76
  470. package/dist/src/plugins/store/index.d.ts.map +0 -1
  471. package/dist/src/plugins/store/search.d.ts +0 -46
  472. package/dist/src/plugins/store/search.d.ts.map +0 -1
  473. package/dist/src/plugins/store/types.d.ts +0 -274
  474. package/dist/src/plugins/store/types.d.ts.map +0 -1
  475. package/dist/src/production/circuit-breaker.d.ts +0 -101
  476. package/dist/src/production/circuit-breaker.d.ts.map +0 -1
  477. package/dist/src/production/error-handler.d.ts +0 -92
  478. package/dist/src/production/error-handler.d.ts.map +0 -1
  479. package/dist/src/production/monitoring.d.ts +0 -161
  480. package/dist/src/production/monitoring.d.ts.map +0 -1
  481. package/dist/src/production/rate-limiter.d.ts +0 -80
  482. package/dist/src/production/rate-limiter.d.ts.map +0 -1
  483. package/dist/src/production/retry.d.ts +0 -48
  484. package/dist/src/production/retry.d.ts.map +0 -1
  485. package/dist/src/prompt.d.ts +0 -44
  486. package/dist/src/prompt.d.ts.map +0 -1
  487. package/dist/src/runtime/headless.d.ts +0 -60
  488. package/dist/src/runtime/headless.d.ts.map +0 -1
  489. package/dist/src/ruvector/ast-analyzer.d.ts +0 -67
  490. package/dist/src/ruvector/ast-analyzer.d.ts.map +0 -1
  491. package/dist/src/ruvector/coverage-router.d.ts +0 -160
  492. package/dist/src/ruvector/coverage-router.d.ts.map +0 -1
  493. package/dist/src/ruvector/diff-classifier.d.ts +0 -175
  494. package/dist/src/ruvector/diff-classifier.d.ts.map +0 -1
  495. package/dist/src/ruvector/enhanced-model-router.d.ts +0 -146
  496. package/dist/src/ruvector/enhanced-model-router.d.ts.map +0 -1
  497. package/dist/src/ruvector/flash-attention.d.ts +0 -195
  498. package/dist/src/ruvector/flash-attention.d.ts.map +0 -1
  499. package/dist/src/ruvector/graph-analyzer.d.ts +0 -187
  500. package/dist/src/ruvector/graph-analyzer.d.ts.map +0 -1
  501. package/dist/src/ruvector/index.d.ts +0 -34
  502. package/dist/src/ruvector/index.d.ts.map +0 -1
  503. package/dist/src/ruvector/lora-adapter.d.ts +0 -218
  504. package/dist/src/ruvector/lora-adapter.d.ts.map +0 -1
  505. package/dist/src/ruvector/model-router.d.ts +0 -220
  506. package/dist/src/ruvector/model-router.d.ts.map +0 -1
  507. package/dist/src/ruvector/moe-router.d.ts +0 -206
  508. package/dist/src/ruvector/moe-router.d.ts.map +0 -1
  509. package/dist/src/ruvector/q-learning-router.d.ts +0 -211
  510. package/dist/src/ruvector/q-learning-router.d.ts.map +0 -1
  511. package/dist/src/ruvector/semantic-router.d.ts +0 -77
  512. package/dist/src/ruvector/semantic-router.d.ts.map +0 -1
  513. package/dist/src/ruvector/vector-db.d.ts +0 -69
  514. package/dist/src/ruvector/vector-db.d.ts.map +0 -1
  515. package/dist/src/services/claim-service.d.ts +0 -204
  516. package/dist/src/services/claim-service.d.ts.map +0 -1
  517. package/dist/src/services/container-worker-pool.d.ts +0 -197
  518. package/dist/src/services/container-worker-pool.d.ts.map +0 -1
  519. package/dist/src/services/headless-worker-executor.d.ts +0 -304
  520. package/dist/src/services/headless-worker-executor.d.ts.map +0 -1
  521. package/dist/src/services/registry-api.d.ts +0 -58
  522. package/dist/src/services/registry-api.d.ts.map +0 -1
  523. package/dist/src/services/ruvector-training.d.ts +0 -213
  524. package/dist/src/services/ruvector-training.d.ts.map +0 -1
  525. package/dist/src/services/worker-daemon.d.ts +0 -203
  526. package/dist/src/services/worker-daemon.d.ts.map +0 -1
  527. package/dist/src/services/worker-queue.d.ts +0 -194
  528. package/dist/src/services/worker-queue.d.ts.map +0 -1
  529. package/dist/src/suggest.d.ts +0 -53
  530. package/dist/src/suggest.d.ts.map +0 -1
  531. package/dist/src/transfer/export.d.ts +0 -25
  532. package/dist/src/transfer/export.d.ts.map +0 -1
  533. package/dist/src/transfer/ipfs/client.d.ts +0 -109
  534. package/dist/src/transfer/ipfs/client.d.ts.map +0 -1
  535. package/dist/src/transfer/ipfs/upload.d.ts +0 -95
  536. package/dist/src/transfer/ipfs/upload.d.ts.map +0 -1
  537. package/dist/src/transfer/models/seraphine.d.ts +0 -72
  538. package/dist/src/transfer/models/seraphine.d.ts.map +0 -1
  539. package/dist/src/transfer/serialization/cfp.d.ts +0 -49
  540. package/dist/src/transfer/serialization/cfp.d.ts.map +0 -1
  541. package/dist/src/transfer/storage/gcs.d.ts +0 -82
  542. package/dist/src/transfer/storage/gcs.d.ts.map +0 -1
  543. package/dist/src/transfer/store/discovery.d.ts +0 -84
  544. package/dist/src/transfer/store/discovery.d.ts.map +0 -1
  545. package/dist/src/transfer/store/download.d.ts +0 -70
  546. package/dist/src/transfer/store/download.d.ts.map +0 -1
  547. package/dist/src/transfer/store/index.d.ts +0 -84
  548. package/dist/src/transfer/store/index.d.ts.map +0 -1
  549. package/dist/src/transfer/store/publish.d.ts +0 -76
  550. package/dist/src/transfer/store/publish.d.ts.map +0 -1
  551. package/dist/src/transfer/store/search.d.ts +0 -54
  552. package/dist/src/transfer/store/search.d.ts.map +0 -1
  553. package/dist/src/transfer/types.d.ts +0 -245
  554. package/dist/src/transfer/types.d.ts.map +0 -1
  555. package/dist/src/types.d.ts +0 -198
  556. package/dist/src/types.d.ts.map +0 -1
  557. package/dist/src/update/checker.d.ts +0 -34
  558. package/dist/src/update/checker.d.ts.map +0 -1
  559. package/dist/src/update/executor.d.ts +0 -32
  560. package/dist/src/update/executor.d.ts.map +0 -1
  561. package/dist/src/update/index.d.ts +0 -33
  562. package/dist/src/update/index.d.ts.map +0 -1
  563. package/dist/src/update/rate-limiter.d.ts +0 -20
  564. package/dist/src/update/rate-limiter.d.ts.map +0 -1
  565. package/dist/src/update/validator.d.ts +0 -17
  566. package/dist/src/update/validator.d.ts.map +0 -1
@@ -2,6 +2,42 @@
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
+ };
5
41
  import { output } from '../../output.js';
6
42
  import { confirm, input } from '../../prompt.js';
7
43
  /**
@@ -15,7 +51,7 @@ function getConnectionConfig(ctx) {
15
51
  user: ctx.flags.user || process.env.PGUSER || 'postgres',
16
52
  password: ctx.flags.password || process.env.PGPASSWORD || '',
17
53
  ssl: ctx.flags.ssl || process.env.PGSSLMODE === 'require',
18
- schema: ctx.flags.schema || 'claude_flow',
54
+ schema: ctx.flags.schema || 'claude_flow'
19
55
  };
20
56
  }
21
57
  /**
@@ -24,15 +60,15 @@ function getConnectionConfig(ctx) {
24
60
  function formatBytes(bytes) {
25
61
  if (bytes === 0)
26
62
  return '0 B';
27
- const k = 1024;
28
- const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
29
- const i = Math.floor(Math.log(bytes) / Math.log(k));
63
+ var k = 1024;
64
+ var sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
65
+ var i = Math.floor(Math.log(bytes) / Math.log(k));
30
66
  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
31
67
  }
32
68
  /**
33
69
  * RuVector backup subcommand
34
70
  */
35
- const backupSubcommand = {
71
+ var backupSubcommand = {
36
72
  name: 'create',
37
73
  description: 'Create a backup of RuVector data',
38
74
  options: [
@@ -41,78 +77,78 @@ const backupSubcommand = {
41
77
  short: 'o',
42
78
  description: 'Output file path',
43
79
  type: 'string',
44
- required: true,
80
+ required: true
45
81
  },
46
82
  {
47
83
  name: 'tables',
48
84
  short: 't',
49
85
  description: 'Specific tables (comma-separated)',
50
- type: 'string',
86
+ type: 'string'
51
87
  },
52
88
  {
53
89
  name: 'format',
54
90
  short: 'f',
55
91
  description: 'Output format',
56
92
  type: 'string',
57
- default: 'sql',
58
- choices: ['sql', 'json', 'csv'],
93
+ "default": 'sql',
94
+ choices: ['sql', 'json', 'csv']
59
95
  },
60
96
  {
61
97
  name: 'compress',
62
98
  short: 'c',
63
99
  description: 'Compress output (gzip)',
64
100
  type: 'boolean',
65
- default: false,
101
+ "default": false
66
102
  },
67
103
  {
68
104
  name: 'include-indexes',
69
105
  description: 'Include index definitions',
70
106
  type: 'boolean',
71
- default: true,
107
+ "default": true
72
108
  },
73
109
  {
74
110
  name: 'host',
75
111
  short: 'h',
76
112
  description: 'PostgreSQL host',
77
113
  type: 'string',
78
- default: 'localhost',
114
+ "default": 'localhost'
79
115
  },
80
116
  {
81
117
  name: 'port',
82
118
  short: 'p',
83
119
  description: 'PostgreSQL port',
84
120
  type: 'number',
85
- default: 5432,
121
+ "default": 5432
86
122
  },
87
123
  {
88
124
  name: 'database',
89
125
  short: 'd',
90
126
  description: 'Database name',
91
- type: 'string',
127
+ type: 'string'
92
128
  },
93
129
  {
94
130
  name: 'user',
95
131
  short: 'u',
96
132
  description: 'Database user',
97
- type: 'string',
133
+ type: 'string'
98
134
  },
99
135
  {
100
136
  name: 'password',
101
137
  description: 'Database password',
102
- type: 'string',
138
+ type: 'string'
103
139
  },
104
140
  {
105
141
  name: 'ssl',
106
142
  description: 'Enable SSL',
107
143
  type: 'boolean',
108
- default: false,
144
+ "default": false
109
145
  },
110
146
  {
111
147
  name: 'schema',
112
148
  short: 's',
113
149
  description: 'Schema name',
114
150
  type: 'string',
115
- default: 'claude_flow',
151
+ "default": 'claude_flow'
116
152
  },
117
153
  ],
118
154
  examples: [
@@ -120,246 +156,275 @@ const backupSubcommand = {
120
156
  { command: 'claude-flow ruvector backup create -o backup.json --format json', description: 'Create JSON backup' },
121
157
  { command: 'claude-flow ruvector backup create -o backup.sql.gz --compress', description: 'Compressed backup' },
122
158
  ],
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(', ')});`);
279
- }
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);
280
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
+ }
344
+ }
345
+ content = lines.join('\n');
281
346
  }
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};`);
347
+ else if (format === 'json') {
348
+ content = JSON.stringify(backupData, null, 2);
288
349
  }
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(','));
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');
310
373
  }
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);
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*/];
322
420
  }
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
- },
421
+ });
422
+ }); }
358
423
  };
359
424
  /**
360
425
  * RuVector restore subcommand
361
426
  */
362
- const restoreSubcommand = {
427
+ var restoreSubcommand = {
363
428
  name: 'restore',
364
429
  description: 'Restore RuVector data from backup',
365
430
  options: [
@@ -368,63 +433,63 @@ const restoreSubcommand = {
368
433
  short: 'i',
369
434
  description: 'Input file path',
370
435
  type: 'string',
371
- required: true,
436
+ required: true
372
437
  },
373
438
  {
374
439
  name: 'clean',
375
440
  description: 'Drop existing tables first',
376
441
  type: 'boolean',
377
- default: false,
442
+ "default": false
378
443
  },
379
444
  {
380
445
  name: 'dry-run',
381
446
  description: 'Show what would be restored without executing',
382
447
  type: 'boolean',
383
- default: false,
448
+ "default": false
384
449
  },
385
450
  {
386
451
  name: 'host',
387
452
  short: 'h',
388
453
  description: 'PostgreSQL host',
389
454
  type: 'string',
390
- default: 'localhost',
455
+ "default": 'localhost'
391
456
  },
392
457
  {
393
458
  name: 'port',
394
459
  short: 'p',
395
460
  description: 'PostgreSQL port',
396
461
  type: 'number',
397
- default: 5432,
462
+ "default": 5432
398
463
  },
399
464
  {
400
465
  name: 'database',
401
466
  short: 'd',
402
467
  description: 'Database name',
403
- type: 'string',
468
+ type: 'string'
404
469
  },
405
470
  {
406
471
  name: 'user',
407
472
  short: 'u',
408
473
  description: 'Database user',
409
- type: 'string',
474
+ type: 'string'
410
475
  },
411
476
  {
412
477
  name: 'password',
413
478
  description: 'Database password',
414
- type: 'string',
479
+ type: 'string'
415
480
  },
416
481
  {
417
482
  name: 'ssl',
418
483
  description: 'Enable SSL',
419
484
  type: 'boolean',
420
- default: false,
485
+ "default": false
421
486
  },
422
487
  {
423
488
  name: 'schema',
424
489
  short: 's',
425
490
  description: 'Schema name',
426
491
  type: 'string',
427
- default: 'claude_flow',
492
+ "default": 'claude_flow'
428
493
  },
429
494
  ],
430
495
  examples: [
@@ -432,236 +497,315 @@ const restoreSubcommand = {
432
497
  { command: 'claude-flow ruvector backup restore -i backup.json --clean', description: 'Clean restore' },
433
498
  { command: 'claude-flow ruvector backup restore -i backup.sql --dry-run', description: 'Preview restore' },
434
499
  ],
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}...`);
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' });
558
523
  spinner.start();
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++;
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
+ });
574
582
  }
575
- catch {
576
- // Skip conflicts
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");
577
587
  }
588
+ return [2 /*return*/, { success: true, data: { dryRun: true } }];
578
589
  }
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:
579
692
  restoredTables++;
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) {
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];
585
701
  spinner.setText('Restoring indexes...');
586
702
  spinner.start();
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
- }
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++;
595
749
  }
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
- }
750
+ else if (stmt.toUpperCase().includes('CREATE INDEX')) {
751
+ restoredIndexes++;
619
752
  }
620
- catch (error) {
621
- // Log but continue
622
- if (process.env.DEBUG) {
623
- console.error('Statement failed:', stmt.substring(0, 100));
624
- }
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));
625
759
  }
760
+ return [3 /*break*/, 38];
761
+ case 38:
626
762
  if (executed % 100 === 0) {
627
- spinner.setText(`Executing SQL restore... ${executed}/${statements.length}`);
763
+ spinner.setText("Executing SQL restore... " + executed + "/" + statements.length);
628
764
  }
629
- }
630
- spinner.succeed(`Executed ${executed} SQL statements`);
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*/];
631
801
  }
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
- },
802
+ });
803
+ }); }
660
804
  };
661
805
  /**
662
806
  * RuVector backup main command
663
807
  */
664
- export const backupCommand = {
808
+ export var backupCommand = {
665
809
  name: 'backup',
666
810
  description: 'Backup and restore RuVector data',
667
811
  subcommands: [backupSubcommand, restoreSubcommand],
@@ -671,76 +815,78 @@ export const backupCommand = {
671
815
  short: 'h',
672
816
  description: 'PostgreSQL host',
673
817
  type: 'string',
674
- default: 'localhost',
818
+ "default": 'localhost'
675
819
  },
676
820
  {
677
821
  name: 'port',
678
822
  short: 'p',
679
823
  description: 'PostgreSQL port',
680
824
  type: 'number',
681
- default: 5432,
825
+ "default": 5432
682
826
  },
683
827
  {
684
828
  name: 'database',
685
829
  short: 'd',
686
830
  description: 'Database name',
687
- type: 'string',
831
+ type: 'string'
688
832
  },
689
833
  {
690
834
  name: 'user',
691
835
  short: 'u',
692
836
  description: 'Database user',
693
- type: 'string',
837
+ type: 'string'
694
838
  },
695
839
  {
696
840
  name: 'password',
697
841
  description: 'Database password',
698
- type: 'string',
842
+ type: 'string'
699
843
  },
700
844
  {
701
845
  name: 'ssl',
702
846
  description: 'Enable SSL',
703
847
  type: 'boolean',
704
- default: false,
848
+ "default": false
705
849
  },
706
850
  {
707
851
  name: 'schema',
708
852
  short: 's',
709
853
  description: 'Schema name',
710
854
  type: 'string',
711
- default: 'claude_flow',
855
+ "default": 'claude_flow'
712
856
  },
713
857
  ],
714
858
  examples: [
715
859
  { command: 'claude-flow ruvector backup create -o backup.sql', description: 'Create backup' },
716
860
  { command: 'claude-flow ruvector backup restore -i backup.sql', description: 'Restore backup' },
717
861
  ],
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
- },
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
+ }); }
744
890
  };
745
891
  export default backupCommand;
746
892
  //# sourceMappingURL=backup.js.map