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,51 @@
2
2
  * V3 CLI RuVector Optimize Command
3
3
  * Optimization analysis and recommendations
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
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
42
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
43
+ if (ar || !(i in from)) {
44
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
45
+ ar[i] = from[i];
46
+ }
47
+ }
48
+ return to.concat(ar || Array.prototype.slice.call(from));
49
+ };
5
50
  import { output } from '../../output.js';
6
51
  import { confirm } from '../../prompt.js';
7
52
  /**
@@ -15,13 +60,13 @@ function getConnectionConfig(ctx) {
15
60
  user: ctx.flags.user || process.env.PGUSER || 'postgres',
16
61
  password: ctx.flags.password || process.env.PGPASSWORD || '',
17
62
  ssl: ctx.flags.ssl || process.env.PGSSLMODE === 'require',
18
- schema: ctx.flags.schema || 'claude_flow',
63
+ schema: ctx.flags.schema || 'claude_flow'
19
64
  };
20
65
  }
21
66
  /**
22
67
  * RuVector optimize command
23
68
  */
24
- export const optimizeCommand = {
69
+ export var optimizeCommand = {
25
70
  name: 'optimize',
26
71
  description: 'Optimization analysis and recommendations',
27
72
  options: [
@@ -30,74 +75,74 @@ export const optimizeCommand = {
30
75
  short: 'a',
31
76
  description: 'Analyze current performance',
32
77
  type: 'boolean',
33
- default: true,
78
+ "default": true
34
79
  },
35
80
  {
36
81
  name: 'apply',
37
82
  description: 'Apply suggested optimizations',
38
83
  type: 'boolean',
39
- default: false,
84
+ "default": false
40
85
  },
41
86
  {
42
87
  name: 'index',
43
88
  short: 'i',
44
89
  description: 'Optimize specific index',
45
- type: 'string',
90
+ type: 'string'
46
91
  },
47
92
  {
48
93
  name: 'vacuum',
49
94
  description: 'Run VACUUM ANALYZE',
50
95
  type: 'boolean',
51
- default: false,
96
+ "default": false
52
97
  },
53
98
  {
54
99
  name: 'reindex',
55
100
  description: 'Rebuild indexes',
56
101
  type: 'boolean',
57
- default: false,
102
+ "default": false
58
103
  },
59
104
  {
60
105
  name: 'host',
61
106
  short: 'h',
62
107
  description: 'PostgreSQL host',
63
108
  type: 'string',
64
- default: 'localhost',
109
+ "default": 'localhost'
65
110
  },
66
111
  {
67
112
  name: 'port',
68
113
  short: 'p',
69
114
  description: 'PostgreSQL port',
70
115
  type: 'number',
71
- default: 5432,
116
+ "default": 5432
72
117
  },
73
118
  {
74
119
  name: 'database',
75
120
  description: 'Database name',
76
- type: 'string',
121
+ type: 'string'
77
122
  },
78
123
  {
79
124
  name: 'user',
80
125
  short: 'u',
81
126
  description: 'Database user',
82
- type: 'string',
127
+ type: 'string'
83
128
  },
84
129
  {
85
130
  name: 'password',
86
131
  description: 'Database password',
87
- type: 'string',
132
+ type: 'string'
88
133
  },
89
134
  {
90
135
  name: 'ssl',
91
136
  description: 'Enable SSL',
92
137
  type: 'boolean',
93
- default: false,
138
+ "default": false
94
139
  },
95
140
  {
96
141
  name: 'schema',
97
142
  short: 's',
98
143
  description: 'Schema name',
99
144
  type: 'string',
100
- default: 'claude_flow',
145
+ "default": 'claude_flow'
101
146
  },
102
147
  ],
103
148
  examples: [
@@ -106,204 +151,203 @@ export const optimizeCommand = {
106
151
  { command: 'claude-flow ruvector optimize --vacuum', description: 'Run VACUUM ANALYZE' },
107
152
  { command: 'claude-flow ruvector optimize --reindex', description: 'Rebuild all indexes' },
108
153
  ],
109
- action: async (ctx) => {
110
- const config = getConnectionConfig(ctx);
111
- const applyOptimizations = ctx.flags.apply;
112
- const runVacuum = ctx.flags.vacuum;
113
- const runReindex = ctx.flags.reindex;
114
- const specificIndex = ctx.flags.index;
115
- output.writeln();
116
- output.writeln(output.bold('RuVector Optimization Analysis'));
117
- output.writeln(output.dim('='.repeat(60)));
118
- output.writeln();
119
- if (!config.database) {
120
- output.printError('Database name is required. Use --database or -d flag, or set PGDATABASE env.');
121
- return { success: false, exitCode: 1 };
122
- }
123
- const spinner = output.createSpinner({ text: 'Connecting to PostgreSQL...', spinner: 'dots' });
124
- spinner.start();
125
- const recommendations = [];
126
- try {
127
- // Import pg
128
- let pg = null;
129
- try {
130
- pg = await import('pg');
131
- }
132
- catch {
133
- spinner.fail('PostgreSQL driver not found');
134
- output.printError('Install pg package: npm install pg');
135
- return { success: false, exitCode: 1 };
136
- }
137
- const client = new pg.Client({
138
- host: config.host,
139
- port: config.port,
140
- database: config.database,
141
- user: config.user,
142
- password: config.password,
143
- ssl: config.ssl ? { rejectUnauthorized: false } : false,
144
- });
145
- await client.connect();
146
- spinner.succeed('Connected to PostgreSQL');
147
- // Check schema exists
148
- const schemaResult = await client.query(`
149
- SELECT schema_name FROM information_schema.schemata WHERE schema_name = $1
150
- `, [config.schema]);
151
- if (schemaResult.rows.length === 0) {
152
- output.printError(`Schema "${config.schema}" not found`);
153
- await client.end();
154
- return { success: false, exitCode: 1 };
155
- }
156
- // Run VACUUM if requested
157
- if (runVacuum) {
158
- spinner.setText('Running VACUUM ANALYZE...');
159
- spinner.start();
160
- const tables = await client.query(`
161
- SELECT table_name FROM information_schema.tables
162
- WHERE table_schema = $1 AND table_type = 'BASE TABLE'
163
- `, [config.schema]);
164
- for (const row of tables.rows) {
165
- await client.query(`VACUUM ANALYZE ${config.schema}.${row.table_name}`);
166
- }
167
- spinner.succeed('VACUUM ANALYZE completed');
168
- }
169
- // Rebuild indexes if requested
170
- if (runReindex) {
171
- spinner.setText('Rebuilding indexes...');
172
- spinner.start();
173
- if (specificIndex) {
174
- await client.query(`REINDEX INDEX ${config.schema}.${specificIndex}`);
175
- spinner.succeed(`Index ${specificIndex} rebuilt`);
176
- }
177
- else {
178
- await client.query(`REINDEX SCHEMA ${config.schema}`);
179
- spinner.succeed('All indexes rebuilt');
180
- }
181
- }
182
- // Analyze table statistics
183
- spinner.setText('Analyzing table statistics...');
184
- spinner.start();
185
- const tableStatsResult = await client.query(`
186
- SELECT
187
- relname as table_name,
188
- n_live_tup as live_rows,
189
- n_dead_tup as dead_rows,
190
- last_vacuum,
191
- last_autovacuum,
192
- last_analyze,
193
- last_autoanalyze
194
- FROM pg_stat_user_tables
195
- WHERE schemaname = $1
196
- `, [config.schema]);
197
- for (const row of tableStatsResult.rows) {
198
- const deadRatio = row.live_rows > 0 ? row.dead_rows / row.live_rows : 0;
199
- // Check for high dead tuple ratio
200
- if (deadRatio > 0.1) {
201
- recommendations.push({
202
- category: 'Table Bloat',
203
- priority: deadRatio > 0.3 ? 'critical' : 'high',
204
- issue: `Table "${row.table_name}" has ${(deadRatio * 100).toFixed(1)}% dead tuples`,
205
- recommendation: 'Run VACUUM to reclaim space',
206
- sql: `VACUUM ANALYZE ${config.schema}.${row.table_name}`,
207
- impact: 'Reduces storage and improves query performance',
208
- });
209
- }
210
- // Check for missing statistics
211
- if (!row.last_analyze && !row.last_autoanalyze) {
212
- recommendations.push({
213
- category: 'Statistics',
214
- priority: 'medium',
215
- issue: `Table "${row.table_name}" has never been analyzed`,
216
- recommendation: 'Run ANALYZE to collect statistics',
217
- sql: `ANALYZE ${config.schema}.${row.table_name}`,
218
- impact: 'Improves query planner decisions',
219
- });
220
- }
221
- }
222
- spinner.succeed('Table statistics analyzed');
223
- // Analyze indexes
224
- spinner.setText('Analyzing index health...');
225
- spinner.start();
226
- const indexStatsResult = await client.query(`
227
- SELECT
228
- i.relname as index_name,
229
- t.relname as table_name,
230
- am.amname as index_type,
231
- pg_relation_size(i.oid) as index_size,
232
- idx.indisvalid as is_valid,
233
- idx.indisready as is_ready,
234
- idx.indislive as is_live,
235
- pg_stat_user_indexes.idx_scan as scans,
236
- pg_stat_user_indexes.idx_tup_read as tuples_read,
237
- pg_stat_user_indexes.idx_tup_fetch as tuples_fetched
238
- FROM pg_index idx
239
- JOIN pg_class i ON i.oid = idx.indexrelid
240
- JOIN pg_class t ON t.oid = idx.indrelid
241
- JOIN pg_namespace n ON n.oid = t.relnamespace
242
- JOIN pg_am am ON am.oid = i.relam
243
- LEFT JOIN pg_stat_user_indexes ON pg_stat_user_indexes.indexrelid = i.oid
244
- WHERE n.nspname = $1
245
- `, [config.schema]);
246
- for (const row of indexStatsResult.rows) {
247
- // Check for invalid indexes
248
- if (!row.is_valid) {
249
- recommendations.push({
250
- category: 'Index Health',
251
- priority: 'critical',
252
- issue: `Index "${row.index_name}" is invalid`,
253
- recommendation: 'Rebuild the index',
254
- sql: `REINDEX INDEX ${config.schema}.${row.index_name}`,
255
- impact: 'Index is not being used for queries',
154
+ action: function (ctx) { return __awaiter(void 0, void 0, Promise, function () {
155
+ var config, applyOptimizations, runVacuum, runReindex, specificIndex, spinner, recommendations, pg, _a, client, schemaResult, tables, _i, _b, row, tableStatsResult, _c, _d, row, deadRatio, indexStatsResult, _e, _f, row, sizeKB, vectorIndexes, _g, vectorIndexes_1, idx, optionsResult, options, m, efConstruction, mValue, efValue, countResult, rowCount, lists, listsValue, countResult, rowCount, recommendedLists, settingsResult, settings, _h, _j, row, workMemMB, maintMemMB, critical, high, medium, low, displayRecommendations, confirmApply, applyClient, _k, _l, rec, error_1, error_2;
156
+ var _m;
157
+ return __generator(this, function (_o) {
158
+ switch (_o.label) {
159
+ case 0:
160
+ config = getConnectionConfig(ctx);
161
+ applyOptimizations = ctx.flags.apply;
162
+ runVacuum = ctx.flags.vacuum;
163
+ runReindex = ctx.flags.reindex;
164
+ specificIndex = ctx.flags.index;
165
+ output.writeln();
166
+ output.writeln(output.bold('RuVector Optimization Analysis'));
167
+ output.writeln(output.dim('='.repeat(60)));
168
+ output.writeln();
169
+ if (!config.database) {
170
+ output.printError('Database name is required. Use --database or -d flag, or set PGDATABASE env.');
171
+ return [2 /*return*/, { success: false, exitCode: 1 }];
172
+ }
173
+ spinner = output.createSpinner({ text: 'Connecting to PostgreSQL...', spinner: 'dots' });
174
+ spinner.start();
175
+ recommendations = [];
176
+ _o.label = 1;
177
+ case 1:
178
+ _o.trys.push([1, 41, , 42]);
179
+ pg = null;
180
+ _o.label = 2;
181
+ case 2:
182
+ _o.trys.push([2, 4, , 5]);
183
+ return [4 /*yield*/, import('pg')];
184
+ case 3:
185
+ pg = _o.sent();
186
+ return [3 /*break*/, 5];
187
+ case 4:
188
+ _a = _o.sent();
189
+ spinner.fail('PostgreSQL driver not found');
190
+ output.printError('Install pg package: npm install pg');
191
+ return [2 /*return*/, { success: false, exitCode: 1 }];
192
+ case 5:
193
+ client = new pg.Client({
194
+ host: config.host,
195
+ port: config.port,
196
+ database: config.database,
197
+ user: config.user,
198
+ password: config.password,
199
+ ssl: config.ssl ? { rejectUnauthorized: false } : false
256
200
  });
257
- }
258
- // Check for unused indexes (skip vector indexes as they may be new)
259
- if (row.scans === 0 && row.index_type !== 'hnsw' && row.index_type !== 'ivfflat') {
260
- const sizeKB = parseInt(row.index_size, 10) / 1024;
261
- if (sizeKB > 100) {
262
- recommendations.push({
263
- category: 'Unused Index',
264
- priority: 'low',
265
- issue: `Index "${row.index_name}" has never been used (${(sizeKB / 1024).toFixed(2)} MB)`,
266
- recommendation: 'Consider dropping if not needed',
267
- sql: `-- DROP INDEX IF EXISTS ${config.schema}.${row.index_name}`,
268
- impact: 'Reduces storage and write overhead',
269
- });
201
+ return [4 /*yield*/, client.connect()];
202
+ case 6:
203
+ _o.sent();
204
+ spinner.succeed('Connected to PostgreSQL');
205
+ return [4 /*yield*/, client.query("\n SELECT schema_name FROM information_schema.schemata WHERE schema_name = $1\n ", [config.schema])];
206
+ case 7:
207
+ schemaResult = _o.sent();
208
+ if (!(schemaResult.rows.length === 0)) return [3 /*break*/, 9];
209
+ output.printError("Schema \"" + config.schema + "\" not found");
210
+ return [4 /*yield*/, client.end()];
211
+ case 8:
212
+ _o.sent();
213
+ return [2 /*return*/, { success: false, exitCode: 1 }];
214
+ case 9:
215
+ if (!runVacuum) return [3 /*break*/, 15];
216
+ spinner.setText('Running VACUUM ANALYZE...');
217
+ spinner.start();
218
+ return [4 /*yield*/, client.query("\n SELECT table_name FROM information_schema.tables\n WHERE table_schema = $1 AND table_type = 'BASE TABLE'\n ", [config.schema])];
219
+ case 10:
220
+ tables = _o.sent();
221
+ _i = 0, _b = tables.rows;
222
+ _o.label = 11;
223
+ case 11:
224
+ if (!(_i < _b.length)) return [3 /*break*/, 14];
225
+ row = _b[_i];
226
+ return [4 /*yield*/, client.query("VACUUM ANALYZE " + config.schema + "." + row.table_name)];
227
+ case 12:
228
+ _o.sent();
229
+ _o.label = 13;
230
+ case 13:
231
+ _i++;
232
+ return [3 /*break*/, 11];
233
+ case 14:
234
+ spinner.succeed('VACUUM ANALYZE completed');
235
+ _o.label = 15;
236
+ case 15:
237
+ if (!runReindex) return [3 /*break*/, 19];
238
+ spinner.setText('Rebuilding indexes...');
239
+ spinner.start();
240
+ if (!specificIndex) return [3 /*break*/, 17];
241
+ return [4 /*yield*/, client.query("REINDEX INDEX " + config.schema + "." + specificIndex)];
242
+ case 16:
243
+ _o.sent();
244
+ spinner.succeed("Index " + specificIndex + " rebuilt");
245
+ return [3 /*break*/, 19];
246
+ case 17: return [4 /*yield*/, client.query("REINDEX SCHEMA " + config.schema)];
247
+ case 18:
248
+ _o.sent();
249
+ spinner.succeed('All indexes rebuilt');
250
+ _o.label = 19;
251
+ case 19:
252
+ // Analyze table statistics
253
+ spinner.setText('Analyzing table statistics...');
254
+ spinner.start();
255
+ return [4 /*yield*/, client.query("\n SELECT\n relname as table_name,\n n_live_tup as live_rows,\n n_dead_tup as dead_rows,\n last_vacuum,\n last_autovacuum,\n last_analyze,\n last_autoanalyze\n FROM pg_stat_user_tables\n WHERE schemaname = $1\n ", [config.schema])];
256
+ case 20:
257
+ tableStatsResult = _o.sent();
258
+ for (_c = 0, _d = tableStatsResult.rows; _c < _d.length; _c++) {
259
+ row = _d[_c];
260
+ deadRatio = row.live_rows > 0 ? row.dead_rows / row.live_rows : 0;
261
+ // Check for high dead tuple ratio
262
+ if (deadRatio > 0.1) {
263
+ recommendations.push({
264
+ category: 'Table Bloat',
265
+ priority: deadRatio > 0.3 ? 'critical' : 'high',
266
+ issue: "Table \"" + row.table_name + "\" has " + (deadRatio * 100).toFixed(1) + "% dead tuples",
267
+ recommendation: 'Run VACUUM to reclaim space',
268
+ sql: "VACUUM ANALYZE " + config.schema + "." + row.table_name,
269
+ impact: 'Reduces storage and improves query performance'
270
+ });
271
+ }
272
+ // Check for missing statistics
273
+ if (!row.last_analyze && !row.last_autoanalyze) {
274
+ recommendations.push({
275
+ category: 'Statistics',
276
+ priority: 'medium',
277
+ issue: "Table \"" + row.table_name + "\" has never been analyzed",
278
+ recommendation: 'Run ANALYZE to collect statistics',
279
+ sql: "ANALYZE " + config.schema + "." + row.table_name,
280
+ impact: 'Improves query planner decisions'
281
+ });
282
+ }
270
283
  }
271
- }
272
- }
273
- spinner.succeed('Index health analyzed');
274
- // Analyze vector index parameters
275
- spinner.setText('Analyzing vector index configuration...');
276
- spinner.start();
277
- const vectorIndexes = indexStatsResult.rows.filter(r => r.index_type === 'hnsw' || r.index_type === 'ivfflat');
278
- for (const idx of vectorIndexes) {
279
- // Get index options
280
- const optionsResult = await client.query(`
281
- SELECT reloptions FROM pg_class
282
- WHERE relname = $1 AND relnamespace = (
283
- SELECT oid FROM pg_namespace WHERE nspname = $2
284
- )
285
- `, [idx.index_name, config.schema]);
286
- const options = optionsResult.rows[0]?.reloptions || [];
287
- if (idx.index_type === 'hnsw') {
288
- // Check HNSW parameters
289
- const m = options.find((o) => o.startsWith('m='));
290
- const efConstruction = options.find((o) => o.startsWith('ef_construction='));
291
- const mValue = m ? parseInt(m.split('=')[1], 10) : 16;
292
- const efValue = efConstruction ? parseInt(efConstruction.split('=')[1], 10) : 64;
293
- // Get table row count
294
- const countResult = await client.query(`
295
- SELECT count(*) as cnt FROM ${config.schema}.${idx.table_name}
296
- `);
297
- const rowCount = parseInt(countResult.rows[0].cnt, 10);
284
+ spinner.succeed('Table statistics analyzed');
285
+ // Analyze indexes
286
+ spinner.setText('Analyzing index health...');
287
+ spinner.start();
288
+ return [4 /*yield*/, client.query("\n SELECT\n i.relname as index_name,\n t.relname as table_name,\n am.amname as index_type,\n pg_relation_size(i.oid) as index_size,\n idx.indisvalid as is_valid,\n idx.indisready as is_ready,\n idx.indislive as is_live,\n pg_stat_user_indexes.idx_scan as scans,\n pg_stat_user_indexes.idx_tup_read as tuples_read,\n pg_stat_user_indexes.idx_tup_fetch as tuples_fetched\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 JOIN pg_am am ON am.oid = i.relam\n LEFT JOIN pg_stat_user_indexes ON pg_stat_user_indexes.indexrelid = i.oid\n WHERE n.nspname = $1\n ", [config.schema])];
289
+ case 21:
290
+ indexStatsResult = _o.sent();
291
+ for (_e = 0, _f = indexStatsResult.rows; _e < _f.length; _e++) {
292
+ row = _f[_e];
293
+ // Check for invalid indexes
294
+ if (!row.is_valid) {
295
+ recommendations.push({
296
+ category: 'Index Health',
297
+ priority: 'critical',
298
+ issue: "Index \"" + row.index_name + "\" is invalid",
299
+ recommendation: 'Rebuild the index',
300
+ sql: "REINDEX INDEX " + config.schema + "." + row.index_name,
301
+ impact: 'Index is not being used for queries'
302
+ });
303
+ }
304
+ // Check for unused indexes (skip vector indexes as they may be new)
305
+ if (row.scans === 0 && row.index_type !== 'hnsw' && row.index_type !== 'ivfflat') {
306
+ sizeKB = parseInt(row.index_size, 10) / 1024;
307
+ if (sizeKB > 100) {
308
+ recommendations.push({
309
+ category: 'Unused Index',
310
+ priority: 'low',
311
+ issue: "Index \"" + row.index_name + "\" has never been used (" + (sizeKB / 1024).toFixed(2) + " MB)",
312
+ recommendation: 'Consider dropping if not needed',
313
+ sql: "-- DROP INDEX IF EXISTS " + config.schema + "." + row.index_name,
314
+ impact: 'Reduces storage and write overhead'
315
+ });
316
+ }
317
+ }
318
+ }
319
+ spinner.succeed('Index health analyzed');
320
+ // Analyze vector index parameters
321
+ spinner.setText('Analyzing vector index configuration...');
322
+ spinner.start();
323
+ vectorIndexes = indexStatsResult.rows.filter(function (r) { return r.index_type === 'hnsw' || r.index_type === 'ivfflat'; });
324
+ _g = 0, vectorIndexes_1 = vectorIndexes;
325
+ _o.label = 22;
326
+ case 22:
327
+ if (!(_g < vectorIndexes_1.length)) return [3 /*break*/, 28];
328
+ idx = vectorIndexes_1[_g];
329
+ return [4 /*yield*/, client.query("\n SELECT reloptions FROM pg_class\n WHERE relname = $1 AND relnamespace = (\n SELECT oid FROM pg_namespace WHERE nspname = $2\n )\n ", [idx.index_name, config.schema])];
330
+ case 23:
331
+ optionsResult = _o.sent();
332
+ options = ((_m = optionsResult.rows[0]) === null || _m === void 0 ? void 0 : _m.reloptions) || [];
333
+ if (!(idx.index_type === 'hnsw')) return [3 /*break*/, 25];
334
+ m = options.find(function (o) { return o.startsWith('m='); });
335
+ efConstruction = options.find(function (o) { return o.startsWith('ef_construction='); });
336
+ mValue = m ? parseInt(m.split('=')[1], 10) : 16;
337
+ efValue = efConstruction ? parseInt(efConstruction.split('=')[1], 10) : 64;
338
+ return [4 /*yield*/, client.query("\n SELECT count(*) as cnt FROM " + config.schema + "." + idx.table_name + "\n ")];
339
+ case 24:
340
+ countResult = _o.sent();
341
+ rowCount = parseInt(countResult.rows[0].cnt, 10);
298
342
  // Recommend higher ef_construction for large datasets
299
343
  if (rowCount > 100000 && efValue < 100) {
300
344
  recommendations.push({
301
345
  category: 'HNSW Tuning',
302
346
  priority: 'medium',
303
- issue: `HNSW index "${idx.index_name}" has ef_construction=${efValue} for ${rowCount.toLocaleString()} vectors`,
347
+ issue: "HNSW index \"" + idx.index_name + "\" has ef_construction=" + efValue + " for " + rowCount.toLocaleString() + " vectors",
304
348
  recommendation: 'Consider rebuilding with higher ef_construction for better recall',
305
- sql: `-- Rebuild with: CREATE INDEX ... WITH (m = ${mValue}, ef_construction = 128)`,
306
- impact: 'Improves recall at slight build time cost',
349
+ sql: "-- Rebuild with: CREATE INDEX ... WITH (m = " + mValue + ", ef_construction = 128)",
350
+ impact: 'Improves recall at slight build time cost'
307
351
  });
308
352
  }
309
353
  // Recommend higher m for very large datasets
@@ -311,193 +355,205 @@ export const optimizeCommand = {
311
355
  recommendations.push({
312
356
  category: 'HNSW Tuning',
313
357
  priority: 'medium',
314
- issue: `HNSW index "${idx.index_name}" has m=${mValue} for ${rowCount.toLocaleString()} vectors`,
358
+ issue: "HNSW index \"" + idx.index_name + "\" has m=" + mValue + " for " + rowCount.toLocaleString() + " vectors",
315
359
  recommendation: 'Consider rebuilding with higher m for better connectivity',
316
- sql: `-- Rebuild with: CREATE INDEX ... WITH (m = 24, ef_construction = ${efValue})`,
317
- impact: 'Improves recall and query performance',
360
+ sql: "-- Rebuild with: CREATE INDEX ... WITH (m = 24, ef_construction = " + efValue + ")",
361
+ impact: 'Improves recall and query performance'
318
362
  });
319
363
  }
320
- }
321
- if (idx.index_type === 'ivfflat') {
322
- // Check IVFFlat lists parameter
323
- const lists = options.find((o) => o.startsWith('lists='));
324
- const listsValue = lists ? parseInt(lists.split('=')[1], 10) : 100;
325
- // Get table row count
326
- const countResult = await client.query(`
327
- SELECT count(*) as cnt FROM ${config.schema}.${idx.table_name}
328
- `);
329
- const rowCount = parseInt(countResult.rows[0].cnt, 10);
330
- // Recommended lists = sqrt(n)
331
- const recommendedLists = Math.floor(Math.sqrt(rowCount));
364
+ _o.label = 25;
365
+ case 25:
366
+ if (!(idx.index_type === 'ivfflat')) return [3 /*break*/, 27];
367
+ lists = options.find(function (o) { return o.startsWith('lists='); });
368
+ listsValue = lists ? parseInt(lists.split('=')[1], 10) : 100;
369
+ return [4 /*yield*/, client.query("\n SELECT count(*) as cnt FROM " + config.schema + "." + idx.table_name + "\n ")];
370
+ case 26:
371
+ countResult = _o.sent();
372
+ rowCount = parseInt(countResult.rows[0].cnt, 10);
373
+ recommendedLists = Math.floor(Math.sqrt(rowCount));
332
374
  if (Math.abs(listsValue - recommendedLists) / recommendedLists > 0.5) {
333
375
  recommendations.push({
334
376
  category: 'IVFFlat Tuning',
335
377
  priority: 'medium',
336
- issue: `IVFFlat index "${idx.index_name}" has lists=${listsValue} (recommended: ~${recommendedLists})`,
378
+ issue: "IVFFlat index \"" + idx.index_name + "\" has lists=" + listsValue + " (recommended: ~" + recommendedLists + ")",
337
379
  recommendation: 'Consider rebuilding with optimal lists parameter',
338
- sql: `-- Rebuild with: CREATE INDEX ... WITH (lists = ${recommendedLists})`,
339
- impact: 'Balances query speed and recall',
380
+ sql: "-- Rebuild with: CREATE INDEX ... WITH (lists = " + recommendedLists + ")",
381
+ impact: 'Balances query speed and recall'
340
382
  });
341
383
  }
342
- }
343
- }
344
- spinner.succeed('Vector index configuration analyzed');
345
- // Check memory settings
346
- spinner.setText('Checking PostgreSQL settings...');
347
- spinner.start();
348
- const settingsResult = await client.query(`
349
- SELECT name, setting, unit, context
350
- FROM pg_settings
351
- WHERE name IN (
352
- 'shared_buffers', 'effective_cache_size', 'work_mem',
353
- 'maintenance_work_mem', 'max_parallel_workers_per_gather'
354
- )
355
- `);
356
- const settings = {};
357
- for (const row of settingsResult.rows) {
358
- settings[row.name] = row.setting + (row.unit || '');
359
- }
360
- // Check work_mem for vector operations
361
- const workMemMB = parseInt(settings.work_mem || '4096', 10) / 1024;
362
- if (workMemMB < 64) {
363
- recommendations.push({
364
- category: 'Memory Settings',
365
- priority: 'medium',
366
- issue: `work_mem is ${workMemMB.toFixed(0)}MB (recommended: 64MB+ for vector ops)`,
367
- recommendation: 'Increase work_mem for better vector search performance',
368
- sql: `SET work_mem = '64MB'`,
369
- impact: 'Improves sorting and index build performance',
370
- });
371
- }
372
- // Check maintenance_work_mem for index building
373
- const maintMemMB = parseInt(settings.maintenance_work_mem || '65536', 10) / 1024;
374
- if (maintMemMB < 256) {
375
- recommendations.push({
376
- category: 'Memory Settings',
377
- priority: 'low',
378
- issue: `maintenance_work_mem is ${maintMemMB.toFixed(0)}MB`,
379
- recommendation: 'Increase for faster index builds',
380
- sql: `SET maintenance_work_mem = '256MB'`,
381
- impact: 'Faster VACUUM and index creation',
382
- });
383
- }
384
- spinner.succeed('PostgreSQL settings checked');
385
- await client.end();
386
- // Display recommendations
387
- output.writeln();
388
- if (recommendations.length === 0) {
389
- output.printSuccess('No optimization recommendations - your setup looks good!');
390
- output.writeln();
391
- output.printBox([
392
- 'All tables have been analyzed',
393
- 'Indexes are valid and properly configured',
394
- 'Memory settings are adequate',
395
- '',
396
- 'Tips for maintaining performance:',
397
- ' - Run VACUUM ANALYZE regularly',
398
- ' - Monitor dead tuple ratio',
399
- ' - Rebuild indexes after large batch inserts',
400
- ].join('\n'), 'Status: Optimal');
401
- return { success: true, data: { recommendations: [] } };
402
- }
403
- // Group by priority
404
- const critical = recommendations.filter(r => r.priority === 'critical');
405
- const high = recommendations.filter(r => r.priority === 'high');
406
- const medium = recommendations.filter(r => r.priority === 'medium');
407
- const low = recommendations.filter(r => r.priority === 'low');
408
- output.writeln(output.bold(`Found ${recommendations.length} optimization recommendations:`));
409
- output.writeln();
410
- // Display by priority
411
- const displayRecommendations = (recs, label, color) => {
412
- if (recs.length === 0)
413
- return;
414
- output.writeln(color(`${label} Priority (${recs.length}):`));
415
- output.writeln();
416
- for (const rec of recs) {
417
- output.writeln(` ${output.bold(rec.category)}: ${rec.issue}`);
418
- output.writeln(` ${output.dim('Recommendation:')} ${rec.recommendation}`);
419
- output.writeln(` ${output.dim('Impact:')} ${rec.impact}`);
420
- if (rec.sql) {
421
- output.writeln(` ${output.dim('SQL:')} ${output.highlight(rec.sql)}`);
384
+ _o.label = 27;
385
+ case 27:
386
+ _g++;
387
+ return [3 /*break*/, 22];
388
+ case 28:
389
+ spinner.succeed('Vector index configuration analyzed');
390
+ // Check memory settings
391
+ spinner.setText('Checking PostgreSQL settings...');
392
+ spinner.start();
393
+ return [4 /*yield*/, client.query("\n SELECT name, setting, unit, context\n FROM pg_settings\n WHERE name IN (\n 'shared_buffers', 'effective_cache_size', 'work_mem',\n 'maintenance_work_mem', 'max_parallel_workers_per_gather'\n )\n ")];
394
+ case 29:
395
+ settingsResult = _o.sent();
396
+ settings = {};
397
+ for (_h = 0, _j = settingsResult.rows; _h < _j.length; _h++) {
398
+ row = _j[_h];
399
+ settings[row.name] = row.setting + (row.unit || '');
400
+ }
401
+ workMemMB = parseInt(settings.work_mem || '4096', 10) / 1024;
402
+ if (workMemMB < 64) {
403
+ recommendations.push({
404
+ category: 'Memory Settings',
405
+ priority: 'medium',
406
+ issue: "work_mem is " + workMemMB.toFixed(0) + "MB (recommended: 64MB+ for vector ops)",
407
+ recommendation: 'Increase work_mem for better vector search performance',
408
+ sql: "SET work_mem = '64MB'",
409
+ impact: 'Improves sorting and index build performance'
410
+ });
411
+ }
412
+ maintMemMB = parseInt(settings.maintenance_work_mem || '65536', 10) / 1024;
413
+ if (maintMemMB < 256) {
414
+ recommendations.push({
415
+ category: 'Memory Settings',
416
+ priority: 'low',
417
+ issue: "maintenance_work_mem is " + maintMemMB.toFixed(0) + "MB",
418
+ recommendation: 'Increase for faster index builds',
419
+ sql: "SET maintenance_work_mem = '256MB'",
420
+ impact: 'Faster VACUUM and index creation'
421
+ });
422
422
  }
423
+ spinner.succeed('PostgreSQL settings checked');
424
+ return [4 /*yield*/, client.end()];
425
+ case 30:
426
+ _o.sent();
427
+ // Display recommendations
423
428
  output.writeln();
424
- }
425
- };
426
- displayRecommendations(critical, 'CRITICAL', output.error.bind(output));
427
- displayRecommendations(high, 'HIGH', output.warning.bind(output));
428
- displayRecommendations(medium, 'MEDIUM', output.highlight.bind(output));
429
- displayRecommendations(low, 'LOW', output.dim.bind(output));
430
- // Apply optimizations if requested
431
- if (applyOptimizations && (critical.length > 0 || high.length > 0)) {
432
- output.writeln(output.dim('-'.repeat(60)));
433
- output.writeln();
434
- if (ctx.interactive) {
435
- const confirmApply = await confirm({
436
- message: `Apply ${critical.length + high.length} critical/high priority optimizations?`,
437
- default: false,
429
+ if (recommendations.length === 0) {
430
+ output.printSuccess('No optimization recommendations - your setup looks good!');
431
+ output.writeln();
432
+ output.printBox([
433
+ 'All tables have been analyzed',
434
+ 'Indexes are valid and properly configured',
435
+ 'Memory settings are adequate',
436
+ '',
437
+ 'Tips for maintaining performance:',
438
+ ' - Run VACUUM ANALYZE regularly',
439
+ ' - Monitor dead tuple ratio',
440
+ ' - Rebuild indexes after large batch inserts',
441
+ ].join('\n'), 'Status: Optimal');
442
+ return [2 /*return*/, { success: true, data: { recommendations: [] } }];
443
+ }
444
+ critical = recommendations.filter(function (r) { return r.priority === 'critical'; });
445
+ high = recommendations.filter(function (r) { return r.priority === 'high'; });
446
+ medium = recommendations.filter(function (r) { return r.priority === 'medium'; });
447
+ low = recommendations.filter(function (r) { return r.priority === 'low'; });
448
+ output.writeln(output.bold("Found " + recommendations.length + " optimization recommendations:"));
449
+ output.writeln();
450
+ displayRecommendations = function (recs, label, color) {
451
+ if (recs.length === 0)
452
+ return;
453
+ output.writeln(color(label + " Priority (" + recs.length + "):"));
454
+ output.writeln();
455
+ for (var _i = 0, recs_1 = recs; _i < recs_1.length; _i++) {
456
+ var rec = recs_1[_i];
457
+ output.writeln(" " + output.bold(rec.category) + ": " + rec.issue);
458
+ output.writeln(" " + output.dim('Recommendation:') + " " + rec.recommendation);
459
+ output.writeln(" " + output.dim('Impact:') + " " + rec.impact);
460
+ if (rec.sql) {
461
+ output.writeln(" " + output.dim('SQL:') + " " + output.highlight(rec.sql));
462
+ }
463
+ output.writeln();
464
+ }
465
+ };
466
+ displayRecommendations(critical, 'CRITICAL', output.error.bind(output));
467
+ displayRecommendations(high, 'HIGH', output.warning.bind(output));
468
+ displayRecommendations(medium, 'MEDIUM', output.highlight.bind(output));
469
+ displayRecommendations(low, 'LOW', output.dim.bind(output));
470
+ if (!(applyOptimizations && (critical.length > 0 || high.length > 0))) return [3 /*break*/, 40];
471
+ output.writeln(output.dim('-'.repeat(60)));
472
+ output.writeln();
473
+ if (!ctx.interactive) return [3 /*break*/, 40];
474
+ return [4 /*yield*/, confirm({
475
+ message: "Apply " + (critical.length + high.length) + " critical/high priority optimizations?",
476
+ "default": false
477
+ })];
478
+ case 31:
479
+ confirmApply = _o.sent();
480
+ if (!confirmApply) return [3 /*break*/, 40];
481
+ applyClient = new pg.Client({
482
+ host: config.host,
483
+ port: config.port,
484
+ database: config.database,
485
+ user: config.user,
486
+ password: config.password,
487
+ ssl: config.ssl ? { rejectUnauthorized: false } : false
438
488
  });
439
- if (confirmApply) {
440
- const applyClient = new pg.Client({
441
- host: config.host,
442
- port: config.port,
443
- database: config.database,
444
- user: config.user,
445
- password: config.password,
446
- ssl: config.ssl ? { rejectUnauthorized: false } : false,
447
- });
448
- await applyClient.connect();
449
- for (const rec of [...critical, ...high]) {
450
- if (rec.sql && !rec.sql.startsWith('--')) {
451
- spinner.setText(`Applying: ${rec.issue}...`);
452
- spinner.start();
453
- try {
454
- await applyClient.query(rec.sql);
455
- spinner.succeed(`Applied: ${rec.category}`);
456
- }
457
- catch (error) {
458
- spinner.fail(`Failed: ${rec.category}`);
459
- output.printError(error instanceof Error ? error.message : String(error));
489
+ return [4 /*yield*/, applyClient.connect()];
490
+ case 32:
491
+ _o.sent();
492
+ _k = 0, _l = __spreadArray(__spreadArray([], critical, true), high, true);
493
+ _o.label = 33;
494
+ case 33:
495
+ if (!(_k < _l.length)) return [3 /*break*/, 38];
496
+ rec = _l[_k];
497
+ if (!(rec.sql && !rec.sql.startsWith('--'))) return [3 /*break*/, 37];
498
+ spinner.setText("Applying: " + rec.issue + "...");
499
+ spinner.start();
500
+ _o.label = 34;
501
+ case 34:
502
+ _o.trys.push([34, 36, , 37]);
503
+ return [4 /*yield*/, applyClient.query(rec.sql)];
504
+ case 35:
505
+ _o.sent();
506
+ spinner.succeed("Applied: " + rec.category);
507
+ return [3 /*break*/, 37];
508
+ case 36:
509
+ error_1 = _o.sent();
510
+ spinner.fail("Failed: " + rec.category);
511
+ output.printError(error_1 instanceof Error ? error_1.message : String(error_1));
512
+ return [3 /*break*/, 37];
513
+ case 37:
514
+ _k++;
515
+ return [3 /*break*/, 33];
516
+ case 38: return [4 /*yield*/, applyClient.end()];
517
+ case 39:
518
+ _o.sent();
519
+ output.writeln();
520
+ output.printSuccess('Optimizations applied');
521
+ _o.label = 40;
522
+ case 40:
523
+ // Summary
524
+ output.printBox([
525
+ "Total Recommendations: " + recommendations.length,
526
+ " Critical: " + critical.length,
527
+ " High: " + high.length,
528
+ " Medium: " + medium.length,
529
+ " Low: " + low.length,
530
+ '',
531
+ 'Quick commands:',
532
+ " claude-flow ruvector optimize --vacuum # Clean up tables",
533
+ " claude-flow ruvector optimize --reindex # Rebuild indexes",
534
+ " claude-flow ruvector optimize --apply # Apply critical fixes",
535
+ ].join('\n'), 'Optimization Summary');
536
+ return [2 /*return*/, {
537
+ success: true,
538
+ data: {
539
+ recommendations: recommendations,
540
+ summary: {
541
+ critical: critical.length,
542
+ high: high.length,
543
+ medium: medium.length,
544
+ low: low.length
460
545
  }
461
546
  }
462
- }
463
- await applyClient.end();
464
- output.writeln();
465
- output.printSuccess('Optimizations applied');
466
- }
467
- }
547
+ }];
548
+ case 41:
549
+ error_2 = _o.sent();
550
+ spinner.fail('Optimization analysis failed');
551
+ output.printError(error_2 instanceof Error ? error_2.message : String(error_2));
552
+ return [2 /*return*/, { success: false, exitCode: 1 }];
553
+ case 42: return [2 /*return*/];
468
554
  }
469
- // Summary
470
- output.printBox([
471
- `Total Recommendations: ${recommendations.length}`,
472
- ` Critical: ${critical.length}`,
473
- ` High: ${high.length}`,
474
- ` Medium: ${medium.length}`,
475
- ` Low: ${low.length}`,
476
- '',
477
- 'Quick commands:',
478
- ` claude-flow ruvector optimize --vacuum # Clean up tables`,
479
- ` claude-flow ruvector optimize --reindex # Rebuild indexes`,
480
- ` claude-flow ruvector optimize --apply # Apply critical fixes`,
481
- ].join('\n'), 'Optimization Summary');
482
- return {
483
- success: true,
484
- data: {
485
- recommendations,
486
- summary: {
487
- critical: critical.length,
488
- high: high.length,
489
- medium: medium.length,
490
- low: low.length,
491
- },
492
- },
493
- };
494
- }
495
- catch (error) {
496
- spinner.fail('Optimization analysis failed');
497
- output.printError(error instanceof Error ? error.message : String(error));
498
- return { success: false, exitCode: 1 };
499
- }
500
- },
555
+ });
556
+ }); }
501
557
  };
502
558
  export default optimizeCommand;
503
559
  //# sourceMappingURL=optimize.js.map