kynjal-cli 4.0.0 → 4.0.2
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.
- package/dist/src/appliance/gguf-engine.d.ts +91 -0
- package/dist/src/appliance/gguf-engine.d.ts.map +1 -0
- package/dist/src/appliance/gguf-engine.js +286 -525
- package/dist/src/appliance/gguf-engine.js.map +1 -1
- package/dist/src/appliance/ruvllm-bridge.d.ts +102 -0
- package/dist/src/appliance/ruvllm-bridge.d.ts.map +1 -0
- package/dist/src/appliance/ruvllm-bridge.js +203 -403
- package/dist/src/appliance/ruvllm-bridge.js.map +1 -1
- package/dist/src/appliance/rvfa-builder.d.ts +44 -0
- package/dist/src/appliance/rvfa-builder.d.ts.map +1 -0
- package/dist/src/appliance/rvfa-builder.js +154 -208
- package/dist/src/appliance/rvfa-builder.js.map +1 -1
- package/dist/src/appliance/rvfa-distribution.d.ts +97 -0
- package/dist/src/appliance/rvfa-distribution.d.ts.map +1 -0
- package/dist/src/appliance/rvfa-distribution.js +260 -423
- package/dist/src/appliance/rvfa-distribution.js.map +1 -1
- package/dist/src/appliance/rvfa-format.d.ts +111 -0
- package/dist/src/appliance/rvfa-format.d.ts.map +1 -0
- package/dist/src/appliance/rvfa-format.js +128 -200
- package/dist/src/appliance/rvfa-format.js.map +1 -1
- package/dist/src/appliance/rvfa-runner.d.ts +69 -0
- package/dist/src/appliance/rvfa-runner.d.ts.map +1 -0
- package/dist/src/appliance/rvfa-runner.js +168 -304
- package/dist/src/appliance/rvfa-runner.js.map +1 -1
- package/dist/src/appliance/rvfa-signing.d.ts +123 -0
- package/dist/src/appliance/rvfa-signing.d.ts.map +1 -0
- package/dist/src/appliance/rvfa-signing.js +173 -295
- package/dist/src/appliance/rvfa-signing.js.map +1 -1
- package/dist/src/benchmarks/pretrain/index.d.ts +58 -0
- package/dist/src/benchmarks/pretrain/index.d.ts.map +1 -0
- package/dist/src/benchmarks/pretrain/index.js +331 -542
- package/dist/src/benchmarks/pretrain/index.js.map +1 -1
- package/dist/src/commands/agent.js +574 -697
- package/dist/src/commands/agent.js.map +1 -1
- package/dist/src/commands/analyze.js +1218 -1548
- package/dist/src/commands/analyze.js.map +1 -1
- package/dist/src/commands/appliance-advanced.js +158 -267
- package/dist/src/commands/appliance-advanced.js.map +1 -1
- package/dist/src/commands/appliance.js +318 -493
- package/dist/src/commands/appliance.js.map +1 -1
- package/dist/src/commands/benchmark.js +372 -523
- package/dist/src/commands/benchmark.js.map +1 -1
- package/dist/src/commands/claims.js +274 -364
- package/dist/src/commands/claims.js.map +1 -1
- package/dist/src/commands/cleanup.js +113 -157
- package/dist/src/commands/cleanup.js.map +1 -1
- package/dist/src/commands/completions.js +477 -118
- package/dist/src/commands/completions.js.map +1 -1
- package/dist/src/commands/config.js +237 -303
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/daemon.js +487 -596
- package/dist/src/commands/daemon.js.map +1 -1
- package/dist/src/commands/deployment.js +194 -275
- package/dist/src/commands/deployment.js.map +1 -1
- package/dist/src/commands/doctor.js +504 -686
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/embeddings.js +1293 -1543
- package/dist/src/commands/embeddings.js.map +1 -1
- package/dist/src/commands/guidance.js +449 -596
- package/dist/src/commands/guidance.js.map +1 -1
- package/dist/src/commands/hive-mind.js +854 -938
- package/dist/src/commands/hive-mind.js.map +1 -1
- package/dist/src/commands/hooks.js +3112 -3519
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/index.d.ts +115 -0
- package/dist/src/commands/index.d.ts.map +1 -0
- package/dist/src/commands/index.js +126 -308
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/init.js +788 -940
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/issues.js +383 -558
- package/dist/src/commands/issues.js.map +1 -1
- package/dist/src/commands/mcp.js +493 -605
- package/dist/src/commands/mcp.js.map +1 -1
- package/dist/src/commands/memory.js +833 -1026
- package/dist/src/commands/memory.js.map +1 -1
- package/dist/src/commands/migrate.js +282 -347
- package/dist/src/commands/migrate.js.map +1 -1
- package/dist/src/commands/neural.js +1289 -1563
- package/dist/src/commands/neural.js.map +1 -1
- package/dist/src/commands/performance.js +497 -643
- package/dist/src/commands/performance.js.map +1 -1
- package/dist/src/commands/plugins.js +668 -841
- package/dist/src/commands/plugins.js.map +1 -1
- package/dist/src/commands/process.js +392 -447
- package/dist/src/commands/process.js.map +1 -1
- package/dist/src/commands/progress.js +162 -256
- package/dist/src/commands/progress.js.map +1 -1
- package/dist/src/commands/providers.js +150 -220
- package/dist/src/commands/providers.js.map +1 -1
- package/dist/src/commands/route.js +520 -665
- package/dist/src/commands/route.js.map +1 -1
- package/dist/src/commands/ruvector/backup.js +505 -651
- package/dist/src/commands/ruvector/backup.js.map +1 -1
- package/dist/src/commands/ruvector/benchmark.js +349 -401
- package/dist/src/commands/ruvector/benchmark.js.map +1 -1
- package/dist/src/commands/ruvector/import.js +224 -266
- package/dist/src/commands/ruvector/import.js.map +1 -1
- package/dist/src/commands/ruvector/index.js +37 -75
- package/dist/src/commands/ruvector/index.js.map +1 -1
- package/dist/src/commands/ruvector/init.js +336 -359
- package/dist/src/commands/ruvector/init.js.map +1 -1
- package/dist/src/commands/ruvector/migrate.js +335 -322
- package/dist/src/commands/ruvector/migrate.js.map +1 -1
- package/dist/src/commands/ruvector/optimize.js +375 -431
- package/dist/src/commands/ruvector/optimize.js.map +1 -1
- package/dist/src/commands/ruvector/setup.js +703 -117
- package/dist/src/commands/ruvector/setup.js.map +1 -1
- package/dist/src/commands/ruvector/status.js +364 -419
- package/dist/src/commands/ruvector/status.js.map +1 -1
- package/dist/src/commands/security.js +485 -608
- package/dist/src/commands/security.js.map +1 -1
- package/dist/src/commands/session.js +504 -626
- package/dist/src/commands/session.js.map +1 -1
- package/dist/src/commands/start.js +267 -364
- package/dist/src/commands/start.js.map +1 -1
- package/dist/src/commands/status.js +380 -486
- package/dist/src/commands/status.js.map +1 -1
- package/dist/src/commands/swarm.js +408 -488
- package/dist/src/commands/swarm.js.map +1 -1
- package/dist/src/commands/task.js +423 -538
- package/dist/src/commands/task.js.map +1 -1
- package/dist/src/commands/transfer-store.js +322 -412
- package/dist/src/commands/transfer-store.js.map +1 -1
- package/dist/src/commands/update.js +196 -291
- package/dist/src/commands/update.js.map +1 -1
- package/dist/src/commands/workflow.js +386 -486
- package/dist/src/commands/workflow.js.map +1 -1
- package/dist/src/config-adapter.d.ts +15 -0
- package/dist/src/config-adapter.d.ts.map +1 -0
- package/dist/src/config-adapter.js +38 -39
- package/dist/src/config-adapter.js.map +1 -1
- package/dist/src/index.d.ts +77 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +309 -411
- package/dist/src/index.js.map +1 -1
- package/dist/src/infrastructure/in-memory-repositories.d.ts +68 -0
- package/dist/src/infrastructure/in-memory-repositories.d.ts.map +1 -0
- package/dist/src/infrastructure/in-memory-repositories.js +246 -507
- package/dist/src/infrastructure/in-memory-repositories.js.map +1 -1
- package/dist/src/init/claudemd-generator.d.ts +25 -0
- package/dist/src/init/claudemd-generator.d.ts.map +1 -0
- package/dist/src/init/claudemd-generator.js +368 -78
- package/dist/src/init/claudemd-generator.js.map +1 -1
- package/dist/src/init/executor.d.ts +41 -0
- package/dist/src/init/executor.d.ts.map +1 -0
- package/dist/src/init/executor.js +1307 -996
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/helpers-generator.d.ts +60 -0
- package/dist/src/init/helpers-generator.d.ts.map +1 -0
- package/dist/src/init/helpers-generator.js +657 -12
- package/dist/src/init/helpers-generator.js.map +1 -1
- package/dist/src/init/index.d.ts +1 -1
- package/dist/src/init/index.d.ts.map +1 -1
- package/dist/src/init/index.js +1 -1
- package/dist/src/init/index.js.map +1 -1
- package/dist/src/init/mcp-generator.js +33 -37
- package/dist/src/init/mcp-generator.js.map +1 -1
- package/dist/src/init/settings-generator.js +76 -77
- package/dist/src/init/settings-generator.js.map +1 -1
- package/dist/src/init/statusline-generator.js +801 -3
- package/dist/src/init/statusline-generator.js.map +1 -1
- package/dist/src/init/types.d.ts +1 -1
- package/dist/src/init/types.d.ts.map +1 -1
- package/dist/src/init/types.js +76 -59
- package/dist/src/init/types.js.map +1 -1
- package/dist/src/mcp-client.d.ts +92 -0
- package/dist/src/mcp-client.d.ts.map +1 -0
- package/dist/src/mcp-client.js +81 -125
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-server.d.ts +161 -0
- package/dist/src/mcp-server.d.ts.map +1 -0
- package/dist/src/mcp-server.js +470 -757
- package/dist/src/mcp-server.js.map +1 -1
- package/dist/src/mcp-tools/agent-tools.js +391 -492
- package/dist/src/mcp-tools/agent-tools.js.map +1 -1
- package/dist/src/mcp-tools/agentdb-tools.js +332 -533
- package/dist/src/mcp-tools/agentdb-tools.js.map +1 -1
- package/dist/src/mcp-tools/analyze-tools.js +172 -236
- package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
- package/dist/src/mcp-tools/auto-install.d.ts +83 -0
- package/dist/src/mcp-tools/auto-install.d.ts.map +1 -0
- package/dist/src/mcp-tools/auto-install.js +80 -142
- package/dist/src/mcp-tools/auto-install.js.map +1 -1
- package/dist/src/mcp-tools/browser-tools.js +252 -375
- package/dist/src/mcp-tools/browser-tools.js.map +1 -1
- package/dist/src/mcp-tools/claims-tools.js +473 -565
- package/dist/src/mcp-tools/claims-tools.js.map +1 -1
- package/dist/src/mcp-tools/config-tools.js +197 -272
- package/dist/src/mcp-tools/config-tools.js.map +1 -1
- package/dist/src/mcp-tools/coordination-tools.js +500 -572
- package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
- package/dist/src/mcp-tools/daa-tools.js +286 -364
- package/dist/src/mcp-tools/daa-tools.js.map +1 -1
- package/dist/src/mcp-tools/embeddings-tools.js +582 -693
- package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
- package/dist/src/mcp-tools/github-tools.js +260 -311
- package/dist/src/mcp-tools/github-tools.js.map +1 -1
- package/dist/src/mcp-tools/hive-mind-tools.js +573 -640
- package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +2215 -2648
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/memory-tools.js +350 -505
- package/dist/src/mcp-tools/memory-tools.js.map +1 -1
- package/dist/src/mcp-tools/neural-tools.js +315 -412
- package/dist/src/mcp-tools/neural-tools.js.map +1 -1
- package/dist/src/mcp-tools/performance-tools.js +420 -480
- package/dist/src/mcp-tools/performance-tools.js.map +1 -1
- package/dist/src/mcp-tools/progress-tools.js +204 -278
- package/dist/src/mcp-tools/progress-tools.js.map +1 -1
- package/dist/src/mcp-tools/ruvllm-tools.js +163 -279
- package/dist/src/mcp-tools/ruvllm-tools.js.map +1 -1
- package/dist/src/mcp-tools/security-tools.js +297 -429
- package/dist/src/mcp-tools/security-tools.js.map +1 -1
- package/dist/src/mcp-tools/session-tools.js +185 -234
- package/dist/src/mcp-tools/session-tools.js.map +1 -1
- package/dist/src/mcp-tools/swarm-tools.js +207 -260
- package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
- package/dist/src/mcp-tools/system-tools.js +276 -325
- package/dist/src/mcp-tools/system-tools.js.map +1 -1
- package/dist/src/mcp-tools/task-tools.js +270 -336
- package/dist/src/mcp-tools/task-tools.js.map +1 -1
- package/dist/src/mcp-tools/terminal-tools.js +148 -196
- package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
- package/dist/src/mcp-tools/transfer-tools.js +186 -333
- package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
- package/dist/src/mcp-tools/types.d.ts +31 -0
- package/dist/src/mcp-tools/types.d.ts.map +1 -0
- package/dist/src/mcp-tools/wasm-agent-tools.js +133 -280
- package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -1
- package/dist/src/mcp-tools/workflow-tools.js +405 -450
- package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
- package/dist/src/memory/ewc-consolidation.d.ts +295 -0
- package/dist/src/memory/ewc-consolidation.d.ts.map +1 -0
- package/dist/src/memory/ewc-consolidation.js +190 -303
- package/dist/src/memory/ewc-consolidation.js.map +1 -1
- package/dist/src/memory/intelligence.d.ts +338 -0
- package/dist/src/memory/intelligence.d.ts.map +1 -0
- package/dist/src/memory/intelligence.js +569 -794
- package/dist/src/memory/intelligence.js.map +1 -1
- package/dist/src/memory/memory-bridge.d.ts +407 -0
- package/dist/src/memory/memory-bridge.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge.js +1170 -1640
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-initializer.d.ts +412 -0
- package/dist/src/memory/memory-initializer.d.ts.map +1 -0
- package/dist/src/memory/memory-initializer.js +1836 -1851
- package/dist/src/memory/memory-initializer.js.map +1 -1
- package/dist/src/memory/sona-optimizer.d.ts +227 -0
- package/dist/src/memory/sona-optimizer.d.ts.map +1 -0
- package/dist/src/memory/sona-optimizer.js +199 -329
- package/dist/src/memory/sona-optimizer.js.map +1 -1
- package/dist/src/output.d.ts +2 -2
- package/dist/src/output.d.ts.map +1 -1
- package/dist/src/output.js +242 -272
- package/dist/src/output.js.map +1 -1
- package/dist/src/parser.d.ts +51 -0
- package/dist/src/parser.d.ts.map +1 -0
- package/dist/src/parser.js +140 -187
- package/dist/src/parser.js.map +1 -1
- package/dist/src/plugins/manager.d.ts +133 -0
- package/dist/src/plugins/manager.d.ts.map +1 -0
- package/dist/src/plugins/manager.js +285 -521
- package/dist/src/plugins/manager.js.map +1 -1
- package/dist/src/plugins/store/discovery.d.ts +88 -0
- package/dist/src/plugins/store/discovery.d.ts.map +1 -0
- package/dist/src/plugins/store/discovery.js +271 -358
- package/dist/src/plugins/store/discovery.js.map +1 -1
- package/dist/src/plugins/store/index.d.ts +76 -0
- package/dist/src/plugins/store/index.d.ts.map +1 -0
- package/dist/src/plugins/store/index.js +48 -105
- package/dist/src/plugins/store/index.js.map +1 -1
- package/dist/src/plugins/store/search.d.ts +46 -0
- package/dist/src/plugins/store/search.d.ts.map +1 -0
- package/dist/src/plugins/store/search.js +69 -107
- package/dist/src/plugins/store/search.js.map +1 -1
- package/dist/src/plugins/store/types.d.ts +274 -0
- package/dist/src/plugins/store/types.d.ts.map +1 -0
- package/dist/src/plugins/tests/demo-plugin-store.js +113 -160
- package/dist/src/plugins/tests/demo-plugin-store.js.map +1 -1
- package/dist/src/plugins/tests/standalone-test.js +172 -223
- package/dist/src/plugins/tests/standalone-test.js.map +1 -1
- package/dist/src/plugins/tests/test-plugin-store.js +190 -228
- package/dist/src/plugins/tests/test-plugin-store.js.map +1 -1
- package/dist/src/production/circuit-breaker.d.ts +101 -0
- package/dist/src/production/circuit-breaker.d.ts.map +1 -0
- package/dist/src/production/circuit-breaker.js +62 -126
- package/dist/src/production/circuit-breaker.js.map +1 -1
- package/dist/src/production/error-handler.d.ts +92 -0
- package/dist/src/production/error-handler.d.ts.map +1 -0
- package/dist/src/production/error-handler.js +86 -156
- package/dist/src/production/error-handler.js.map +1 -1
- package/dist/src/production/monitoring.d.ts +161 -0
- package/dist/src/production/monitoring.d.ts.map +1 -0
- package/dist/src/production/monitoring.js +139 -220
- package/dist/src/production/monitoring.js.map +1 -1
- package/dist/src/production/rate-limiter.d.ts +80 -0
- package/dist/src/production/rate-limiter.d.ts.map +1 -0
- package/dist/src/production/rate-limiter.js +74 -93
- package/dist/src/production/rate-limiter.js.map +1 -1
- package/dist/src/production/retry.d.ts +48 -0
- package/dist/src/production/retry.d.ts.map +1 -0
- package/dist/src/production/retry.js +75 -167
- package/dist/src/production/retry.js.map +1 -1
- package/dist/src/prompt.d.ts +44 -0
- package/dist/src/prompt.d.ts.map +1 -0
- package/dist/src/prompt.js +436 -560
- package/dist/src/prompt.js.map +1 -1
- package/dist/src/runtime/headless.d.ts +60 -0
- package/dist/src/runtime/headless.d.ts.map +1 -0
- package/dist/src/runtime/headless.js +197 -286
- package/dist/src/runtime/headless.js.map +1 -1
- package/dist/src/ruvector/agent-wasm.d.ts +182 -0
- package/dist/src/ruvector/agent-wasm.d.ts.map +1 -0
- package/dist/src/ruvector/agent-wasm.js +156 -351
- package/dist/src/ruvector/agent-wasm.js.map +1 -1
- package/dist/src/ruvector/ast-analyzer.d.ts +67 -0
- package/dist/src/ruvector/ast-analyzer.d.ts.map +1 -0
- package/dist/src/ruvector/ast-analyzer.js +145 -232
- package/dist/src/ruvector/ast-analyzer.js.map +1 -1
- package/dist/src/ruvector/coverage-router.d.ts +160 -0
- package/dist/src/ruvector/coverage-router.d.ts.map +1 -0
- package/dist/src/ruvector/coverage-router.js +287 -419
- package/dist/src/ruvector/coverage-router.js.map +1 -1
- package/dist/src/ruvector/coverage-tools.js +56 -101
- package/dist/src/ruvector/coverage-tools.js.map +1 -1
- package/dist/src/ruvector/diff-classifier.d.ts +175 -0
- package/dist/src/ruvector/diff-classifier.d.ts.map +1 -0
- package/dist/src/ruvector/diff-classifier.js +324 -451
- package/dist/src/ruvector/diff-classifier.js.map +1 -1
- package/dist/src/ruvector/enhanced-model-router.d.ts +146 -0
- package/dist/src/ruvector/enhanced-model-router.d.ts.map +1 -0
- package/dist/src/ruvector/enhanced-model-router.js +260 -336
- package/dist/src/ruvector/enhanced-model-router.js.map +1 -1
- package/dist/src/ruvector/flash-attention.d.ts +195 -0
- package/dist/src/ruvector/flash-attention.d.ts.map +1 -0
- package/dist/src/ruvector/flash-attention.js +223 -254
- package/dist/src/ruvector/flash-attention.js.map +1 -1
- package/dist/src/ruvector/graph-analyzer.d.ts +187 -0
- package/dist/src/ruvector/graph-analyzer.d.ts.map +1 -0
- package/dist/src/ruvector/graph-analyzer.js +486 -680
- package/dist/src/ruvector/graph-analyzer.js.map +1 -1
- package/dist/src/ruvector/index.d.ts +40 -0
- package/dist/src/ruvector/index.d.ts.map +1 -0
- package/dist/src/ruvector/index.js +36 -106
- package/dist/src/ruvector/index.js.map +1 -1
- package/dist/src/ruvector/lora-adapter.d.ts +218 -0
- package/dist/src/ruvector/lora-adapter.d.ts.map +1 -0
- package/dist/src/ruvector/lora-adapter.js +155 -248
- package/dist/src/ruvector/lora-adapter.js.map +1 -1
- package/dist/src/ruvector/model-router.d.ts +220 -0
- package/dist/src/ruvector/model-router.d.ts.map +1 -0
- package/dist/src/ruvector/model-router.js +175 -248
- package/dist/src/ruvector/model-router.js.map +1 -1
- package/dist/src/ruvector/moe-router.d.ts +206 -0
- package/dist/src/ruvector/moe-router.d.ts.map +1 -0
- package/dist/src/ruvector/moe-router.js +228 -286
- package/dist/src/ruvector/moe-router.js.map +1 -1
- package/dist/src/ruvector/q-learning-router.d.ts +211 -0
- package/dist/src/ruvector/q-learning-router.d.ts.map +1 -0
- package/dist/src/ruvector/q-learning-router.js +257 -338
- package/dist/src/ruvector/q-learning-router.js.map +1 -1
- package/dist/src/ruvector/ruvllm-wasm.d.ts +179 -0
- package/dist/src/ruvector/ruvllm-wasm.d.ts.map +1 -0
- package/dist/src/ruvector/ruvllm-wasm.js +270 -434
- package/dist/src/ruvector/ruvllm-wasm.js.map +1 -1
- package/dist/src/ruvector/semantic-router.d.ts +77 -0
- package/dist/src/ruvector/semantic-router.d.ts.map +1 -0
- package/dist/src/ruvector/semantic-router.js +60 -67
- package/dist/src/ruvector/semantic-router.js.map +1 -1
- package/dist/src/ruvector/vector-db.d.ts +69 -0
- package/dist/src/ruvector/vector-db.d.ts.map +1 -0
- package/dist/src/ruvector/vector-db.js +119 -205
- package/dist/src/ruvector/vector-db.js.map +1 -1
- package/dist/src/services/agentic-flow-bridge.d.ts +50 -0
- package/dist/src/services/agentic-flow-bridge.d.ts.map +1 -0
- package/dist/src/services/agentic-flow-bridge.js +32 -105
- package/dist/src/services/agentic-flow-bridge.js.map +1 -1
- package/dist/src/services/claim-service.d.ts +204 -0
- package/dist/src/services/claim-service.d.ts.map +1 -0
- package/dist/src/services/claim-service.js +615 -940
- package/dist/src/services/claim-service.js.map +1 -1
- package/dist/src/services/container-worker-pool.d.ts +197 -0
- package/dist/src/services/container-worker-pool.d.ts.map +1 -0
- package/dist/src/services/container-worker-pool.js +398 -666
- package/dist/src/services/container-worker-pool.js.map +1 -1
- package/dist/src/services/headless-worker-executor.d.ts +304 -0
- package/dist/src/services/headless-worker-executor.d.ts.map +1 -0
- package/dist/src/services/headless-worker-executor.js +441 -467
- package/dist/src/services/headless-worker-executor.js.map +1 -1
- package/dist/src/services/index.d.ts +4 -4
- package/dist/src/services/index.d.ts.map +1 -1
- package/dist/src/services/index.js +4 -4
- package/dist/src/services/index.js.map +1 -1
- package/dist/src/services/registry-api.d.ts +58 -0
- package/dist/src/services/registry-api.d.ts.map +1 -0
- package/dist/src/services/registry-api.js +92 -200
- package/dist/src/services/registry-api.js.map +1 -1
- package/dist/src/services/ruvector-training.d.ts +222 -0
- package/dist/src/services/ruvector-training.d.ts.map +1 -0
- package/dist/src/services/ruvector-training.js +257 -337
- package/dist/src/services/ruvector-training.js.map +1 -1
- package/dist/src/services/worker-daemon.d.ts +228 -0
- package/dist/src/services/worker-daemon.d.ts.map +1 -0
- package/dist/src/services/worker-daemon.js +591 -849
- package/dist/src/services/worker-daemon.js.map +1 -1
- package/dist/src/services/worker-queue.d.ts +194 -0
- package/dist/src/services/worker-queue.d.ts.map +1 -0
- package/dist/src/services/worker-queue.js +331 -548
- package/dist/src/services/worker-queue.js.map +1 -1
- package/dist/src/suggest.d.ts +53 -0
- package/dist/src/suggest.d.ts.map +1 -0
- package/dist/src/suggest.js +45 -55
- package/dist/src/suggest.js.map +1 -1
- package/dist/src/transfer/anonymization/index.js +29 -37
- package/dist/src/transfer/anonymization/index.js.map +1 -1
- package/dist/src/transfer/deploy-seraphine.js +128 -155
- package/dist/src/transfer/deploy-seraphine.js.map +1 -1
- package/dist/src/transfer/export.d.ts +25 -0
- package/dist/src/transfer/export.d.ts.map +1 -0
- package/dist/src/transfer/export.js +84 -142
- package/dist/src/transfer/export.js.map +1 -1
- package/dist/src/transfer/index.d.ts +1 -1
- package/dist/src/transfer/index.d.ts.map +1 -1
- package/dist/src/transfer/index.js +0 -2
- package/dist/src/transfer/index.js.map +1 -1
- package/dist/src/transfer/ipfs/client.d.ts +109 -0
- package/dist/src/transfer/ipfs/client.d.ts.map +1 -0
- package/dist/src/transfer/ipfs/client.js +187 -337
- package/dist/src/transfer/ipfs/client.js.map +1 -1
- package/dist/src/transfer/ipfs/upload.d.ts +95 -0
- package/dist/src/transfer/ipfs/upload.d.ts.map +1 -0
- package/dist/src/transfer/ipfs/upload.js +288 -434
- package/dist/src/transfer/ipfs/upload.js.map +1 -1
- package/dist/src/transfer/models/seraphine.d.ts +72 -0
- package/dist/src/transfer/models/seraphine.d.ts.map +1 -0
- package/dist/src/transfer/models/seraphine.js +55 -55
- package/dist/src/transfer/models/seraphine.js.map +1 -1
- package/dist/src/transfer/serialization/cfp.d.ts +49 -0
- package/dist/src/transfer/serialization/cfp.d.ts.map +1 -0
- package/dist/src/transfer/serialization/cfp.js +30 -31
- package/dist/src/transfer/serialization/cfp.js.map +1 -1
- package/dist/src/transfer/storage/gcs.d.ts +82 -0
- package/dist/src/transfer/storage/gcs.d.ts.map +1 -0
- package/dist/src/transfer/storage/gcs.js +165 -232
- package/dist/src/transfer/storage/gcs.js.map +1 -1
- package/dist/src/transfer/store/discovery.d.ts +84 -0
- package/dist/src/transfer/store/discovery.d.ts.map +1 -0
- package/dist/src/transfer/store/discovery.js +239 -349
- package/dist/src/transfer/store/discovery.js.map +1 -1
- package/dist/src/transfer/store/download.d.ts +70 -0
- package/dist/src/transfer/store/download.d.ts.map +1 -0
- package/dist/src/transfer/store/download.js +243 -365
- package/dist/src/transfer/store/download.js.map +1 -1
- package/dist/src/transfer/store/index.d.ts +84 -0
- package/dist/src/transfer/store/index.d.ts.map +1 -0
- package/dist/src/transfer/store/index.js +63 -130
- package/dist/src/transfer/store/index.js.map +1 -1
- package/dist/src/transfer/store/publish.d.ts +76 -0
- package/dist/src/transfer/store/publish.d.ts.map +1 -0
- package/dist/src/transfer/store/publish.js +184 -258
- package/dist/src/transfer/store/publish.js.map +1 -1
- package/dist/src/transfer/store/registry.js +50 -72
- package/dist/src/transfer/store/registry.js.map +1 -1
- package/dist/src/transfer/store/search.d.ts +54 -0
- package/dist/src/transfer/store/search.d.ts.map +1 -0
- package/dist/src/transfer/store/search.js +64 -96
- package/dist/src/transfer/store/search.js.map +1 -1
- package/dist/src/transfer/store/tests/standalone-test.js +174 -231
- package/dist/src/transfer/store/tests/standalone-test.js.map +1 -1
- package/dist/src/transfer/test-seraphine.js +95 -130
- package/dist/src/transfer/test-seraphine.js.map +1 -1
- package/dist/src/transfer/tests/test-store.js +194 -239
- package/dist/src/transfer/tests/test-store.js.map +1 -1
- package/dist/src/transfer/types.d.ts +245 -0
- package/dist/src/transfer/types.d.ts.map +1 -0
- package/dist/src/types.d.ts +198 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +26 -55
- package/dist/src/types.js.map +1 -1
- package/dist/src/update/checker.d.ts +34 -0
- package/dist/src/update/checker.d.ts.map +1 -0
- package/dist/src/update/checker.js +106 -183
- package/dist/src/update/checker.js.map +1 -1
- package/dist/src/update/executor.d.ts +32 -0
- package/dist/src/update/executor.d.ts.map +1 -0
- package/dist/src/update/executor.js +135 -198
- package/dist/src/update/executor.js.map +1 -1
- package/dist/src/update/index.d.ts +33 -0
- package/dist/src/update/index.d.ts.map +1 -0
- package/dist/src/update/index.js +38 -85
- package/dist/src/update/index.js.map +1 -1
- package/dist/src/update/rate-limiter.d.ts +20 -0
- package/dist/src/update/rate-limiter.d.ts.map +1 -0
- package/dist/src/update/rate-limiter.js +19 -31
- package/dist/src/update/rate-limiter.js.map +1 -1
- package/dist/src/update/validator.d.ts +17 -0
- package/dist/src/update/validator.d.ts.map +1 -0
- package/dist/src/update/validator.js +38 -64
- package/dist/src/update/validator.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -2,51 +2,6 @@
|
|
|
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
|
-
};
|
|
50
5
|
import { output } from '../../output.js';
|
|
51
6
|
import { confirm } from '../../prompt.js';
|
|
52
7
|
/**
|
|
@@ -60,13 +15,13 @@ function getConnectionConfig(ctx) {
|
|
|
60
15
|
user: ctx.flags.user || process.env.PGUSER || 'postgres',
|
|
61
16
|
password: ctx.flags.password || process.env.PGPASSWORD || '',
|
|
62
17
|
ssl: ctx.flags.ssl || process.env.PGSSLMODE === 'require',
|
|
63
|
-
schema: ctx.flags.schema || 'claude_flow'
|
|
18
|
+
schema: ctx.flags.schema || 'claude_flow',
|
|
64
19
|
};
|
|
65
20
|
}
|
|
66
21
|
/**
|
|
67
22
|
* RuVector optimize command
|
|
68
23
|
*/
|
|
69
|
-
export
|
|
24
|
+
export const optimizeCommand = {
|
|
70
25
|
name: 'optimize',
|
|
71
26
|
description: 'Optimization analysis and recommendations',
|
|
72
27
|
options: [
|
|
@@ -75,74 +30,74 @@ export var optimizeCommand = {
|
|
|
75
30
|
short: 'a',
|
|
76
31
|
description: 'Analyze current performance',
|
|
77
32
|
type: 'boolean',
|
|
78
|
-
|
|
33
|
+
default: true,
|
|
79
34
|
},
|
|
80
35
|
{
|
|
81
36
|
name: 'apply',
|
|
82
37
|
description: 'Apply suggested optimizations',
|
|
83
38
|
type: 'boolean',
|
|
84
|
-
|
|
39
|
+
default: false,
|
|
85
40
|
},
|
|
86
41
|
{
|
|
87
42
|
name: 'index',
|
|
88
43
|
short: 'i',
|
|
89
44
|
description: 'Optimize specific index',
|
|
90
|
-
type: 'string'
|
|
45
|
+
type: 'string',
|
|
91
46
|
},
|
|
92
47
|
{
|
|
93
48
|
name: 'vacuum',
|
|
94
49
|
description: 'Run VACUUM ANALYZE',
|
|
95
50
|
type: 'boolean',
|
|
96
|
-
|
|
51
|
+
default: false,
|
|
97
52
|
},
|
|
98
53
|
{
|
|
99
54
|
name: 'reindex',
|
|
100
55
|
description: 'Rebuild indexes',
|
|
101
56
|
type: 'boolean',
|
|
102
|
-
|
|
57
|
+
default: false,
|
|
103
58
|
},
|
|
104
59
|
{
|
|
105
60
|
name: 'host',
|
|
106
61
|
short: 'h',
|
|
107
62
|
description: 'PostgreSQL host',
|
|
108
63
|
type: 'string',
|
|
109
|
-
|
|
64
|
+
default: 'localhost',
|
|
110
65
|
},
|
|
111
66
|
{
|
|
112
67
|
name: 'port',
|
|
113
68
|
short: 'p',
|
|
114
69
|
description: 'PostgreSQL port',
|
|
115
70
|
type: 'number',
|
|
116
|
-
|
|
71
|
+
default: 5432,
|
|
117
72
|
},
|
|
118
73
|
{
|
|
119
74
|
name: 'database',
|
|
120
75
|
description: 'Database name',
|
|
121
|
-
type: 'string'
|
|
76
|
+
type: 'string',
|
|
122
77
|
},
|
|
123
78
|
{
|
|
124
79
|
name: 'user',
|
|
125
80
|
short: 'u',
|
|
126
81
|
description: 'Database user',
|
|
127
|
-
type: 'string'
|
|
82
|
+
type: 'string',
|
|
128
83
|
},
|
|
129
84
|
{
|
|
130
85
|
name: 'password',
|
|
131
86
|
description: 'Database password',
|
|
132
|
-
type: 'string'
|
|
87
|
+
type: 'string',
|
|
133
88
|
},
|
|
134
89
|
{
|
|
135
90
|
name: 'ssl',
|
|
136
91
|
description: 'Enable SSL',
|
|
137
92
|
type: 'boolean',
|
|
138
|
-
|
|
93
|
+
default: false,
|
|
139
94
|
},
|
|
140
95
|
{
|
|
141
96
|
name: 'schema',
|
|
142
97
|
short: 's',
|
|
143
98
|
description: 'Schema name',
|
|
144
99
|
type: 'string',
|
|
145
|
-
|
|
100
|
+
default: 'claude_flow',
|
|
146
101
|
},
|
|
147
102
|
],
|
|
148
103
|
examples: [
|
|
@@ -151,203 +106,204 @@ export var optimizeCommand = {
|
|
|
151
106
|
{ command: 'claude-flow ruvector optimize --vacuum', description: 'Run VACUUM ANALYZE' },
|
|
152
107
|
{ command: 'claude-flow ruvector optimize --reindex', description: 'Rebuild all indexes' },
|
|
153
108
|
],
|
|
154
|
-
action:
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
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();
|
|
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}`);
|
|
249
179
|
spinner.succeed('All indexes rebuilt');
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
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',
|
|
256
|
+
});
|
|
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
|
+
});
|
|
318
270
|
}
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
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);
|
|
342
298
|
// Recommend higher ef_construction for large datasets
|
|
343
299
|
if (rowCount > 100000 && efValue < 100) {
|
|
344
300
|
recommendations.push({
|
|
345
301
|
category: 'HNSW Tuning',
|
|
346
302
|
priority: 'medium',
|
|
347
|
-
issue:
|
|
303
|
+
issue: `HNSW index "${idx.index_name}" has ef_construction=${efValue} for ${rowCount.toLocaleString()} vectors`,
|
|
348
304
|
recommendation: 'Consider rebuilding with higher ef_construction for better recall',
|
|
349
|
-
sql:
|
|
350
|
-
impact: 'Improves recall at slight build time cost'
|
|
305
|
+
sql: `-- Rebuild with: CREATE INDEX ... WITH (m = ${mValue}, ef_construction = 128)`,
|
|
306
|
+
impact: 'Improves recall at slight build time cost',
|
|
351
307
|
});
|
|
352
308
|
}
|
|
353
309
|
// Recommend higher m for very large datasets
|
|
@@ -355,205 +311,193 @@ export var optimizeCommand = {
|
|
|
355
311
|
recommendations.push({
|
|
356
312
|
category: 'HNSW Tuning',
|
|
357
313
|
priority: 'medium',
|
|
358
|
-
issue:
|
|
314
|
+
issue: `HNSW index "${idx.index_name}" has m=${mValue} for ${rowCount.toLocaleString()} vectors`,
|
|
359
315
|
recommendation: 'Consider rebuilding with higher m for better connectivity',
|
|
360
|
-
sql:
|
|
361
|
-
impact: 'Improves recall and query performance'
|
|
316
|
+
sql: `-- Rebuild with: CREATE INDEX ... WITH (m = 24, ef_construction = ${efValue})`,
|
|
317
|
+
impact: 'Improves recall and query performance',
|
|
362
318
|
});
|
|
363
319
|
}
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
lists = options.find(
|
|
368
|
-
listsValue = lists ? parseInt(lists.split('=')[1], 10) : 100;
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
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));
|
|
374
332
|
if (Math.abs(listsValue - recommendedLists) / recommendedLists > 0.5) {
|
|
375
333
|
recommendations.push({
|
|
376
334
|
category: 'IVFFlat Tuning',
|
|
377
335
|
priority: 'medium',
|
|
378
|
-
issue:
|
|
336
|
+
issue: `IVFFlat index "${idx.index_name}" has lists=${listsValue} (recommended: ~${recommendedLists})`,
|
|
379
337
|
recommendation: 'Consider rebuilding with optimal lists parameter',
|
|
380
|
-
sql:
|
|
381
|
-
impact: 'Balances query speed and recall'
|
|
382
|
-
});
|
|
383
|
-
}
|
|
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'
|
|
338
|
+
sql: `-- Rebuild with: CREATE INDEX ... WITH (lists = ${recommendedLists})`,
|
|
339
|
+
impact: 'Balances query speed and recall',
|
|
410
340
|
});
|
|
411
341
|
}
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
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)}`);
|
|
443
422
|
}
|
|
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
423
|
output.writeln();
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
ssl: config.ssl ? { rejectUnauthorized: false } : false
|
|
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,
|
|
488
438
|
});
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
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
|
|
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));
|
|
545
460
|
}
|
|
546
461
|
}
|
|
547
|
-
}
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
case 42: return [2 /*return*/];
|
|
462
|
+
}
|
|
463
|
+
await applyClient.end();
|
|
464
|
+
output.writeln();
|
|
465
|
+
output.printSuccess('Optimizations applied');
|
|
466
|
+
}
|
|
467
|
+
}
|
|
554
468
|
}
|
|
555
|
-
|
|
556
|
-
|
|
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
|
+
},
|
|
557
501
|
};
|
|
558
502
|
export default optimizeCommand;
|
|
559
503
|
//# sourceMappingURL=optimize.js.map
|