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.
- package/.claude/agents/core/coder.md +1 -1
- package/.claude/agents/core/planner.md +2 -2
- package/.claude/agents/core/researcher.md +1 -1
- package/.claude/agents/core/reviewer.md +1 -1
- package/.claude/agents/core/tester.md +1 -1
- package/.claude/agents/data/data-ml-model.md +4 -4
- package/.claude/agents/development/dev-backend-api.md +4 -4
- package/.claude/agents/documentation/docs-api-openapi.md +4 -4
- package/.claude/agents/github/code-review-swarm.md +2 -2
- package/.claude/agents/github/issue-tracker.md +2 -2
- package/.claude/agents/github/pr-manager.md +2 -2
- package/.claude/agents/github/release-manager.md +2 -2
- package/.claude/agents/github/workflow-automation.md +2 -2
- package/.claude/agents/sparc/architecture.md +3 -3
- package/.claude/agents/sparc/pseudocode.md +2 -2
- package/.claude/agents/sparc/refinement.md +3 -3
- package/.claude/agents/sparc/specification.md +2 -2
- package/.claude/agents/swarm/adaptive-coordinator.md +1 -1
- package/.claude/agents/swarm/hierarchical-coordinator.md +1 -1
- package/.claude/agents/swarm/mesh-coordinator.md +1 -1
- package/.claude/agents/templates/base-template-generator.md +25 -4
- package/.claude/agents/templates/sparc-coordinator.md +3 -3
- package/.claude/helpers/auto-commit.sh +1 -1
- package/.claude/helpers/auto-memory-hook.mjs +27 -9
- package/.claude/helpers/hook-handler.cjs +58 -18
- package/.claude/helpers/statusline.cjs +14 -33
- package/.claude/helpers/statusline.js +3 -3
- package/.claude/settings.json +9 -9
- package/.claude/skills/reasoningbank-intelligence/SKILL.md +2 -2
- package/.claude/skills/swarm-orchestration/SKILL.md +1 -1
- package/README.md +383 -170
- package/bin/cli.js +6 -6
- package/bin/mcp-server.js +1 -1
- package/bin/preinstall.cjs +2 -0
- package/dist/src/appliance/gguf-engine.js +664 -0
- package/dist/src/appliance/gguf-engine.js.map +1 -0
- package/dist/src/appliance/ruvllm-bridge.js +492 -0
- package/dist/src/appliance/ruvllm-bridge.js.map +1 -0
- package/dist/src/appliance/rvfa-builder.js +383 -0
- package/dist/src/appliance/rvfa-builder.js.map +1 -0
- package/dist/src/appliance/rvfa-distribution.js +533 -0
- package/dist/src/appliance/rvfa-distribution.js.map +1 -0
- package/dist/src/appliance/rvfa-format.js +465 -0
- package/dist/src/appliance/rvfa-format.js.map +1 -0
- package/dist/src/appliance/rvfa-runner.js +373 -0
- package/dist/src/appliance/rvfa-runner.js.map +1 -0
- package/dist/src/appliance/rvfa-signing.js +469 -0
- package/dist/src/appliance/rvfa-signing.js.map +1 -0
- package/dist/src/benchmarks/pretrain/index.js +542 -331
- package/dist/src/benchmarks/pretrain/index.js.map +1 -1
- package/dist/src/commands/agent.d.ts.map +1 -1
- package/dist/src/commands/agent.js +725 -502
- package/dist/src/commands/agent.js.map +1 -1
- package/dist/src/commands/analyze.js +1548 -1218
- package/dist/src/commands/analyze.js.map +1 -1
- package/dist/src/commands/appliance-advanced.d.ts +9 -0
- package/dist/src/commands/appliance-advanced.d.ts.map +1 -0
- package/dist/src/commands/appliance-advanced.js +324 -0
- package/dist/src/commands/appliance-advanced.js.map +1 -0
- package/dist/src/commands/appliance.d.ts +8 -0
- package/dist/src/commands/appliance.d.ts.map +1 -0
- package/dist/src/commands/appliance.js +581 -0
- package/dist/src/commands/appliance.js.map +1 -0
- package/dist/src/commands/benchmark.js +523 -372
- package/dist/src/commands/benchmark.js.map +1 -1
- package/dist/src/commands/claims.js +364 -274
- package/dist/src/commands/claims.js.map +1 -1
- package/dist/src/commands/cleanup.d.ts +13 -0
- package/dist/src/commands/cleanup.d.ts.map +1 -0
- package/dist/src/commands/cleanup.js +262 -0
- package/dist/src/commands/cleanup.js.map +1 -0
- package/dist/src/commands/completions.js +118 -477
- package/dist/src/commands/completions.js.map +1 -1
- package/dist/src/commands/config.js +303 -237
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/daemon.d.ts.map +1 -1
- package/dist/src/commands/daemon.js +597 -425
- package/dist/src/commands/daemon.js.map +1 -1
- package/dist/src/commands/deployment.js +275 -194
- package/dist/src/commands/deployment.js.map +1 -1
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +690 -460
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/embeddings.js +1543 -1293
- package/dist/src/commands/embeddings.js.map +1 -1
- package/dist/src/commands/guidance.js +596 -449
- package/dist/src/commands/guidance.js.map +1 -1
- package/dist/src/commands/hive-mind.js +938 -854
- package/dist/src/commands/hive-mind.js.map +1 -1
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +3677 -2570
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/index.js +322 -122
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/init.d.ts +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +943 -787
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/issues.js +558 -383
- package/dist/src/commands/issues.js.map +1 -1
- package/dist/src/commands/mcp.d.ts.map +1 -1
- package/dist/src/commands/mcp.js +605 -475
- package/dist/src/commands/mcp.js.map +1 -1
- package/dist/src/commands/memory.d.ts.map +1 -1
- package/dist/src/commands/memory.js +1031 -814
- package/dist/src/commands/memory.js.map +1 -1
- package/dist/src/commands/migrate.js +347 -282
- package/dist/src/commands/migrate.js.map +1 -1
- package/dist/src/commands/neural.d.ts.map +1 -1
- package/dist/src/commands/neural.js +1563 -1283
- package/dist/src/commands/neural.js.map +1 -1
- package/dist/src/commands/performance.js +643 -497
- package/dist/src/commands/performance.js.map +1 -1
- package/dist/src/commands/plugins.js +841 -668
- package/dist/src/commands/plugins.js.map +1 -1
- package/dist/src/commands/process.js +447 -392
- package/dist/src/commands/process.js.map +1 -1
- package/dist/src/commands/progress.js +256 -162
- package/dist/src/commands/progress.js.map +1 -1
- package/dist/src/commands/providers.js +220 -150
- package/dist/src/commands/providers.js.map +1 -1
- package/dist/src/commands/route.js +665 -520
- package/dist/src/commands/route.js.map +1 -1
- package/dist/src/commands/ruvector/backup.js +651 -505
- package/dist/src/commands/ruvector/backup.js.map +1 -1
- package/dist/src/commands/ruvector/benchmark.js +401 -349
- package/dist/src/commands/ruvector/benchmark.js.map +1 -1
- package/dist/src/commands/ruvector/import.js +267 -225
- package/dist/src/commands/ruvector/import.js.map +1 -1
- package/dist/src/commands/ruvector/index.js +75 -37
- package/dist/src/commands/ruvector/index.js.map +1 -1
- package/dist/src/commands/ruvector/init.js +359 -336
- package/dist/src/commands/ruvector/init.js.map +1 -1
- package/dist/src/commands/ruvector/migrate.js +322 -335
- package/dist/src/commands/ruvector/migrate.js.map +1 -1
- package/dist/src/commands/ruvector/optimize.js +431 -375
- package/dist/src/commands/ruvector/optimize.js.map +1 -1
- package/dist/src/commands/ruvector/setup.js +117 -703
- package/dist/src/commands/ruvector/setup.js.map +1 -1
- package/dist/src/commands/ruvector/status.js +419 -364
- package/dist/src/commands/ruvector/status.js.map +1 -1
- package/dist/src/commands/security.d.ts.map +1 -1
- package/dist/src/commands/security.js +610 -456
- package/dist/src/commands/security.js.map +1 -1
- package/dist/src/commands/session.d.ts +1 -1
- package/dist/src/commands/session.js +627 -505
- package/dist/src/commands/session.js.map +1 -1
- package/dist/src/commands/start.d.ts +1 -1
- package/dist/src/commands/start.js +368 -271
- package/dist/src/commands/start.js.map +1 -1
- package/dist/src/commands/status.d.ts +1 -1
- package/dist/src/commands/status.d.ts.map +1 -1
- package/dist/src/commands/status.js +492 -379
- package/dist/src/commands/status.js.map +1 -1
- package/dist/src/commands/swarm.js +488 -408
- package/dist/src/commands/swarm.js.map +1 -1
- package/dist/src/commands/task.d.ts +1 -1
- package/dist/src/commands/task.js +539 -424
- package/dist/src/commands/task.js.map +1 -1
- package/dist/src/commands/transfer-store.js +412 -322
- package/dist/src/commands/transfer-store.js.map +1 -1
- package/dist/src/commands/update.js +291 -196
- package/dist/src/commands/update.js.map +1 -1
- package/dist/src/commands/workflow.js +486 -386
- package/dist/src/commands/workflow.js.map +1 -1
- package/dist/src/config-adapter.js +40 -39
- package/dist/src/config-adapter.js.map +1 -1
- package/dist/src/index.js +416 -312
- package/dist/src/index.js.map +1 -1
- package/dist/src/infrastructure/in-memory-repositories.js +507 -246
- package/dist/src/infrastructure/in-memory-repositories.js.map +1 -1
- package/dist/src/init/claudemd-generator.js +78 -368
- package/dist/src/init/claudemd-generator.js.map +1 -1
- package/dist/src/init/executor.js +1019 -1345
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/helpers-generator.js +60 -635
- 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.d.ts +0 -1
- package/dist/src/init/mcp-generator.d.ts.map +1 -1
- package/dist/src/init/mcp-generator.js +62 -42
- package/dist/src/init/mcp-generator.js.map +1 -1
- package/dist/src/init/settings-generator.d.ts.map +1 -1
- package/dist/src/init/settings-generator.js +167 -100
- package/dist/src/init/settings-generator.js.map +1 -1
- package/dist/src/init/statusline-generator.d.ts +16 -8
- package/dist/src/init/statusline-generator.d.ts.map +1 -1
- package/dist/src/init/statusline-generator.js +20 -1300
- package/dist/src/init/statusline-generator.js.map +1 -1
- package/dist/src/init/types.d.ts +15 -5
- package/dist/src/init/types.d.ts.map +1 -1
- package/dist/src/init/types.js +66 -76
- package/dist/src/init/types.js.map +1 -1
- package/dist/src/mcp-client.js +130 -76
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-server.js +758 -445
- package/dist/src/mcp-server.js.map +1 -1
- package/dist/src/mcp-tools/agent-tools.js +492 -391
- package/dist/src/mcp-tools/agent-tools.js.map +1 -1
- package/dist/src/mcp-tools/agentdb-tools.d.ts +30 -0
- package/dist/src/mcp-tools/agentdb-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/agentdb-tools.js +758 -0
- package/dist/src/mcp-tools/agentdb-tools.js.map +1 -0
- package/dist/src/mcp-tools/analyze-tools.js +236 -172
- package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
- package/dist/src/mcp-tools/auto-install.js +142 -80
- package/dist/src/mcp-tools/auto-install.js.map +1 -1
- package/dist/src/mcp-tools/browser-tools.js +375 -252
- package/dist/src/mcp-tools/browser-tools.js.map +1 -1
- package/dist/src/mcp-tools/claims-tools.js +565 -473
- package/dist/src/mcp-tools/claims-tools.js.map +1 -1
- package/dist/src/mcp-tools/config-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/config-tools.js +284 -190
- package/dist/src/mcp-tools/config-tools.js.map +1 -1
- package/dist/src/mcp-tools/coordination-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/coordination-tools.js +600 -349
- package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
- package/dist/src/mcp-tools/daa-tools.js +367 -289
- package/dist/src/mcp-tools/daa-tools.js.map +1 -1
- package/dist/src/mcp-tools/embeddings-tools.js +693 -582
- package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
- package/dist/src/mcp-tools/github-tools.js +312 -261
- package/dist/src/mcp-tools/github-tools.js.map +1 -1
- package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hive-mind-tools.js +718 -423
- package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +2726 -1978
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/index.d.ts +2 -0
- package/dist/src/mcp-tools/index.d.ts.map +1 -1
- package/dist/src/mcp-tools/index.js +2 -0
- package/dist/src/mcp-tools/index.js.map +1 -1
- package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/memory-tools.js +514 -329
- package/dist/src/mcp-tools/memory-tools.js.map +1 -1
- package/dist/src/mcp-tools/neural-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/neural-tools.js +428 -326
- package/dist/src/mcp-tools/neural-tools.js.map +1 -1
- package/dist/src/mcp-tools/performance-tools.js +480 -420
- package/dist/src/mcp-tools/performance-tools.js.map +1 -1
- package/dist/src/mcp-tools/progress-tools.js +278 -204
- package/dist/src/mcp-tools/progress-tools.js.map +1 -1
- package/dist/src/mcp-tools/ruvllm-tools.d.ts +9 -0
- package/dist/src/mcp-tools/ruvllm-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/ruvllm-tools.js +399 -0
- package/dist/src/mcp-tools/ruvllm-tools.js.map +1 -0
- package/dist/src/mcp-tools/security-tools.js +429 -297
- package/dist/src/mcp-tools/security-tools.js.map +1 -1
- package/dist/src/mcp-tools/session-tools.js +234 -185
- package/dist/src/mcp-tools/session-tools.js.map +1 -1
- package/dist/src/mcp-tools/swarm-tools.d.ts +2 -1
- package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/swarm-tools.js +303 -64
- package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
- package/dist/src/mcp-tools/system-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/system-tools.js +352 -200
- package/dist/src/mcp-tools/system-tools.js.map +1 -1
- package/dist/src/mcp-tools/task-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/task-tools.js +357 -189
- package/dist/src/mcp-tools/task-tools.js.map +1 -1
- package/dist/src/mcp-tools/terminal-tools.js +196 -148
- package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
- package/dist/src/mcp-tools/transfer-tools.js +333 -186
- package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
- package/dist/src/mcp-tools/wasm-agent-tools.d.ts +9 -0
- package/dist/src/mcp-tools/wasm-agent-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/wasm-agent-tools.js +377 -0
- package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -0
- package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/workflow-tools.js +471 -335
- package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
- package/dist/src/memory/ewc-consolidation.js +345 -173
- package/dist/src/memory/ewc-consolidation.js.map +1 -1
- package/dist/src/memory/intelligence.js +841 -359
- package/dist/src/memory/intelligence.js.map +1 -1
- package/dist/src/memory/memory-bridge.js +1964 -0
- package/dist/src/memory/memory-bridge.js.map +1 -0
- package/dist/src/memory/memory-initializer.js +1895 -1602
- package/dist/src/memory/memory-initializer.js.map +1 -1
- package/dist/src/memory/sona-optimizer.js +329 -199
- 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 +273 -242
- package/dist/src/output.js.map +1 -1
- package/dist/src/parser.js +217 -124
- package/dist/src/parser.js.map +1 -1
- package/dist/src/plugins/manager.js +531 -278
- package/dist/src/plugins/manager.js.map +1 -1
- package/dist/src/plugins/store/discovery.js +362 -275
- package/dist/src/plugins/store/discovery.js.map +1 -1
- package/dist/src/plugins/store/index.js +105 -48
- package/dist/src/plugins/store/index.js.map +1 -1
- package/dist/src/plugins/store/search.js +107 -69
- package/dist/src/plugins/store/search.js.map +1 -1
- package/dist/src/plugins/tests/demo-plugin-store.js +160 -113
- package/dist/src/plugins/tests/demo-plugin-store.js.map +1 -1
- package/dist/src/plugins/tests/standalone-test.js +223 -172
- package/dist/src/plugins/tests/standalone-test.js.map +1 -1
- package/dist/src/plugins/tests/test-plugin-store.js +228 -190
- package/dist/src/plugins/tests/test-plugin-store.js.map +1 -1
- package/dist/src/production/circuit-breaker.js +126 -62
- package/dist/src/production/circuit-breaker.js.map +1 -1
- package/dist/src/production/error-handler.js +156 -86
- package/dist/src/production/error-handler.js.map +1 -1
- package/dist/src/production/monitoring.js +220 -139
- package/dist/src/production/monitoring.js.map +1 -1
- package/dist/src/production/rate-limiter.js +93 -74
- package/dist/src/production/rate-limiter.js.map +1 -1
- package/dist/src/production/retry.js +167 -75
- package/dist/src/production/retry.js.map +1 -1
- package/dist/src/prompt.js +560 -436
- package/dist/src/prompt.js.map +1 -1
- package/dist/src/runtime/headless.js +289 -200
- package/dist/src/runtime/headless.js.map +1 -1
- package/dist/src/ruvector/agent-wasm.js +511 -0
- package/dist/src/ruvector/agent-wasm.js.map +1 -0
- package/dist/src/ruvector/ast-analyzer.js +232 -145
- package/dist/src/ruvector/ast-analyzer.js.map +1 -1
- package/dist/src/ruvector/coverage-router.js +419 -287
- package/dist/src/ruvector/coverage-router.js.map +1 -1
- package/dist/src/ruvector/coverage-tools.js +101 -56
- package/dist/src/ruvector/coverage-tools.js.map +1 -1
- package/dist/src/ruvector/diff-classifier.js +451 -324
- package/dist/src/ruvector/diff-classifier.js.map +1 -1
- package/dist/src/ruvector/enhanced-model-router.js +337 -251
- package/dist/src/ruvector/enhanced-model-router.js.map +1 -1
- package/dist/src/ruvector/flash-attention.js +254 -223
- package/dist/src/ruvector/flash-attention.js.map +1 -1
- package/dist/src/ruvector/graph-analyzer.js +680 -486
- package/dist/src/ruvector/graph-analyzer.js.map +1 -1
- package/dist/src/ruvector/index.js +113 -27
- package/dist/src/ruvector/index.js.map +1 -1
- package/dist/src/ruvector/lora-adapter.js +248 -155
- package/dist/src/ruvector/lora-adapter.js.map +1 -1
- package/dist/src/ruvector/model-router.js +248 -175
- package/dist/src/ruvector/model-router.js.map +1 -1
- package/dist/src/ruvector/moe-router.js +286 -228
- package/dist/src/ruvector/moe-router.js.map +1 -1
- package/dist/src/ruvector/q-learning-router.js +338 -257
- package/dist/src/ruvector/q-learning-router.js.map +1 -1
- package/dist/src/ruvector/ruvllm-wasm.js +527 -0
- package/dist/src/ruvector/ruvllm-wasm.js.map +1 -0
- package/dist/src/ruvector/semantic-router.js +67 -60
- package/dist/src/ruvector/semantic-router.js.map +1 -1
- package/dist/src/ruvector/vector-db.js +205 -119
- package/dist/src/ruvector/vector-db.js.map +1 -1
- package/dist/src/services/agentic-flow-bridge.js +168 -0
- package/dist/src/services/agentic-flow-bridge.js.map +1 -0
- package/dist/src/services/claim-service.js +940 -615
- package/dist/src/services/claim-service.js.map +1 -1
- package/dist/src/services/container-worker-pool.js +669 -399
- package/dist/src/services/container-worker-pool.js.map +1 -1
- package/dist/src/services/headless-worker-executor.js +467 -441
- package/dist/src/services/headless-worker-executor.js.map +1 -1
- package/dist/src/services/index.d.ts +5 -5
- 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.js +201 -93
- package/dist/src/services/registry-api.js.map +1 -1
- package/dist/src/services/ruvector-training.js +414 -144
- package/dist/src/services/ruvector-training.js.map +1 -1
- package/dist/src/services/worker-daemon.js +928 -531
- package/dist/src/services/worker-daemon.js.map +1 -1
- package/dist/src/services/worker-queue.js +550 -331
- package/dist/src/services/worker-queue.js.map +1 -1
- package/dist/src/suggest.js +55 -45
- package/dist/src/suggest.js.map +1 -1
- package/dist/src/transfer/anonymization/index.js +37 -29
- package/dist/src/transfer/anonymization/index.js.map +1 -1
- package/dist/src/transfer/deploy-seraphine.d.ts +1 -1
- package/dist/src/transfer/deploy-seraphine.js +156 -129
- package/dist/src/transfer/deploy-seraphine.js.map +1 -1
- package/dist/src/transfer/export.js +142 -84
- 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 +2 -0
- package/dist/src/transfer/index.js.map +1 -1
- package/dist/src/transfer/ipfs/client.js +337 -179
- package/dist/src/transfer/ipfs/client.js.map +1 -1
- package/dist/src/transfer/ipfs/upload.js +434 -290
- package/dist/src/transfer/ipfs/upload.js.map +1 -1
- package/dist/src/transfer/models/seraphine.js +58 -58
- package/dist/src/transfer/models/seraphine.js.map +1 -1
- package/dist/src/transfer/serialization/cfp.js +37 -33
- package/dist/src/transfer/serialization/cfp.js.map +1 -1
- package/dist/src/transfer/storage/gcs.js +248 -139
- package/dist/src/transfer/storage/gcs.js.map +1 -1
- package/dist/src/transfer/store/discovery.js +353 -243
- package/dist/src/transfer/store/discovery.js.map +1 -1
- package/dist/src/transfer/store/download.js +365 -243
- package/dist/src/transfer/store/download.js.map +1 -1
- package/dist/src/transfer/store/index.js +130 -63
- package/dist/src/transfer/store/index.js.map +1 -1
- package/dist/src/transfer/store/publish.js +258 -184
- package/dist/src/transfer/store/publish.js.map +1 -1
- package/dist/src/transfer/store/registry.js +73 -51
- package/dist/src/transfer/store/registry.js.map +1 -1
- package/dist/src/transfer/store/search.js +96 -64
- package/dist/src/transfer/store/search.js.map +1 -1
- package/dist/src/transfer/store/tests/standalone-test.js +231 -174
- package/dist/src/transfer/store/tests/standalone-test.js.map +1 -1
- package/dist/src/transfer/test-seraphine.js +130 -95
- package/dist/src/transfer/test-seraphine.js.map +1 -1
- package/dist/src/transfer/tests/test-store.js +239 -194
- package/dist/src/transfer/tests/test-store.js.map +1 -1
- package/dist/src/types.js +56 -27
- package/dist/src/types.js.map +1 -1
- package/dist/src/update/checker.js +183 -106
- package/dist/src/update/checker.js.map +1 -1
- package/dist/src/update/executor.js +198 -135
- package/dist/src/update/executor.js.map +1 -1
- package/dist/src/update/index.js +85 -38
- package/dist/src/update/index.js.map +1 -1
- package/dist/src/update/rate-limiter.js +31 -19
- package/dist/src/update/rate-limiter.js.map +1 -1
- package/dist/src/update/validator.js +64 -38
- package/dist/src/update/validator.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -10
- package/.claude/agents/custom/accessibility-auditor.yaml +0 -56
- package/.claude/agents/custom/design-architect.yaml +0 -48
- package/.claude/agents/custom/ui-developer.yaml +0 -46
- package/.claude/agents/custom/ux-researcher.yaml +0 -60
- package/dist/src/benchmarks/pretrain/index.d.ts +0 -58
- package/dist/src/benchmarks/pretrain/index.d.ts.map +0 -1
- package/dist/src/commands/index.d.ts +0 -108
- package/dist/src/commands/index.d.ts.map +0 -1
- package/dist/src/config-adapter.d.ts +0 -15
- package/dist/src/config-adapter.d.ts.map +0 -1
- package/dist/src/index.d.ts +0 -76
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/infrastructure/in-memory-repositories.d.ts +0 -68
- package/dist/src/infrastructure/in-memory-repositories.d.ts.map +0 -1
- package/dist/src/init/claudemd-generator.d.ts +0 -25
- package/dist/src/init/claudemd-generator.d.ts.map +0 -1
- package/dist/src/init/executor.d.ts +0 -41
- package/dist/src/init/executor.d.ts.map +0 -1
- package/dist/src/init/helpers-generator.d.ts +0 -60
- package/dist/src/init/helpers-generator.d.ts.map +0 -1
- package/dist/src/mcp-client.d.ts +0 -92
- package/dist/src/mcp-client.d.ts.map +0 -1
- package/dist/src/mcp-server.d.ts +0 -161
- package/dist/src/mcp-server.d.ts.map +0 -1
- package/dist/src/mcp-tools/auto-install.d.ts +0 -83
- package/dist/src/mcp-tools/auto-install.d.ts.map +0 -1
- package/dist/src/mcp-tools/types.d.ts +0 -31
- package/dist/src/mcp-tools/types.d.ts.map +0 -1
- package/dist/src/memory/ewc-consolidation.d.ts +0 -271
- package/dist/src/memory/ewc-consolidation.d.ts.map +0 -1
- package/dist/src/memory/intelligence.d.ts +0 -285
- package/dist/src/memory/intelligence.d.ts.map +0 -1
- package/dist/src/memory/memory-initializer.d.ts +0 -396
- package/dist/src/memory/memory-initializer.d.ts.map +0 -1
- package/dist/src/memory/sona-optimizer.d.ts +0 -227
- package/dist/src/memory/sona-optimizer.d.ts.map +0 -1
- package/dist/src/parser.d.ts +0 -41
- package/dist/src/parser.d.ts.map +0 -1
- package/dist/src/plugins/manager.d.ts +0 -133
- package/dist/src/plugins/manager.d.ts.map +0 -1
- package/dist/src/plugins/store/discovery.d.ts +0 -88
- package/dist/src/plugins/store/discovery.d.ts.map +0 -1
- package/dist/src/plugins/store/index.d.ts +0 -76
- package/dist/src/plugins/store/index.d.ts.map +0 -1
- package/dist/src/plugins/store/search.d.ts +0 -46
- package/dist/src/plugins/store/search.d.ts.map +0 -1
- package/dist/src/plugins/store/types.d.ts +0 -274
- package/dist/src/plugins/store/types.d.ts.map +0 -1
- package/dist/src/production/circuit-breaker.d.ts +0 -101
- package/dist/src/production/circuit-breaker.d.ts.map +0 -1
- package/dist/src/production/error-handler.d.ts +0 -92
- package/dist/src/production/error-handler.d.ts.map +0 -1
- package/dist/src/production/monitoring.d.ts +0 -161
- package/dist/src/production/monitoring.d.ts.map +0 -1
- package/dist/src/production/rate-limiter.d.ts +0 -80
- package/dist/src/production/rate-limiter.d.ts.map +0 -1
- package/dist/src/production/retry.d.ts +0 -48
- package/dist/src/production/retry.d.ts.map +0 -1
- package/dist/src/prompt.d.ts +0 -44
- package/dist/src/prompt.d.ts.map +0 -1
- package/dist/src/runtime/headless.d.ts +0 -60
- package/dist/src/runtime/headless.d.ts.map +0 -1
- package/dist/src/ruvector/ast-analyzer.d.ts +0 -67
- package/dist/src/ruvector/ast-analyzer.d.ts.map +0 -1
- package/dist/src/ruvector/coverage-router.d.ts +0 -160
- package/dist/src/ruvector/coverage-router.d.ts.map +0 -1
- package/dist/src/ruvector/diff-classifier.d.ts +0 -175
- package/dist/src/ruvector/diff-classifier.d.ts.map +0 -1
- package/dist/src/ruvector/enhanced-model-router.d.ts +0 -146
- package/dist/src/ruvector/enhanced-model-router.d.ts.map +0 -1
- package/dist/src/ruvector/flash-attention.d.ts +0 -195
- package/dist/src/ruvector/flash-attention.d.ts.map +0 -1
- package/dist/src/ruvector/graph-analyzer.d.ts +0 -187
- package/dist/src/ruvector/graph-analyzer.d.ts.map +0 -1
- package/dist/src/ruvector/index.d.ts +0 -34
- package/dist/src/ruvector/index.d.ts.map +0 -1
- package/dist/src/ruvector/lora-adapter.d.ts +0 -218
- package/dist/src/ruvector/lora-adapter.d.ts.map +0 -1
- package/dist/src/ruvector/model-router.d.ts +0 -220
- package/dist/src/ruvector/model-router.d.ts.map +0 -1
- package/dist/src/ruvector/moe-router.d.ts +0 -206
- package/dist/src/ruvector/moe-router.d.ts.map +0 -1
- package/dist/src/ruvector/q-learning-router.d.ts +0 -211
- package/dist/src/ruvector/q-learning-router.d.ts.map +0 -1
- package/dist/src/ruvector/semantic-router.d.ts +0 -77
- package/dist/src/ruvector/semantic-router.d.ts.map +0 -1
- package/dist/src/ruvector/vector-db.d.ts +0 -69
- package/dist/src/ruvector/vector-db.d.ts.map +0 -1
- package/dist/src/services/claim-service.d.ts +0 -204
- package/dist/src/services/claim-service.d.ts.map +0 -1
- package/dist/src/services/container-worker-pool.d.ts +0 -197
- package/dist/src/services/container-worker-pool.d.ts.map +0 -1
- package/dist/src/services/headless-worker-executor.d.ts +0 -304
- package/dist/src/services/headless-worker-executor.d.ts.map +0 -1
- package/dist/src/services/registry-api.d.ts +0 -58
- package/dist/src/services/registry-api.d.ts.map +0 -1
- package/dist/src/services/ruvector-training.d.ts +0 -213
- package/dist/src/services/ruvector-training.d.ts.map +0 -1
- package/dist/src/services/worker-daemon.d.ts +0 -203
- package/dist/src/services/worker-daemon.d.ts.map +0 -1
- package/dist/src/services/worker-queue.d.ts +0 -194
- package/dist/src/services/worker-queue.d.ts.map +0 -1
- package/dist/src/suggest.d.ts +0 -53
- package/dist/src/suggest.d.ts.map +0 -1
- package/dist/src/transfer/export.d.ts +0 -25
- package/dist/src/transfer/export.d.ts.map +0 -1
- package/dist/src/transfer/ipfs/client.d.ts +0 -109
- package/dist/src/transfer/ipfs/client.d.ts.map +0 -1
- package/dist/src/transfer/ipfs/upload.d.ts +0 -95
- package/dist/src/transfer/ipfs/upload.d.ts.map +0 -1
- package/dist/src/transfer/models/seraphine.d.ts +0 -72
- package/dist/src/transfer/models/seraphine.d.ts.map +0 -1
- package/dist/src/transfer/serialization/cfp.d.ts +0 -49
- package/dist/src/transfer/serialization/cfp.d.ts.map +0 -1
- package/dist/src/transfer/storage/gcs.d.ts +0 -82
- package/dist/src/transfer/storage/gcs.d.ts.map +0 -1
- package/dist/src/transfer/store/discovery.d.ts +0 -84
- package/dist/src/transfer/store/discovery.d.ts.map +0 -1
- package/dist/src/transfer/store/download.d.ts +0 -70
- package/dist/src/transfer/store/download.d.ts.map +0 -1
- package/dist/src/transfer/store/index.d.ts +0 -84
- package/dist/src/transfer/store/index.d.ts.map +0 -1
- package/dist/src/transfer/store/publish.d.ts +0 -76
- package/dist/src/transfer/store/publish.d.ts.map +0 -1
- package/dist/src/transfer/store/search.d.ts +0 -54
- package/dist/src/transfer/store/search.d.ts.map +0 -1
- package/dist/src/transfer/types.d.ts +0 -245
- package/dist/src/transfer/types.d.ts.map +0 -1
- package/dist/src/types.d.ts +0 -198
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/update/checker.d.ts +0 -34
- package/dist/src/update/checker.d.ts.map +0 -1
- package/dist/src/update/executor.d.ts +0 -32
- package/dist/src/update/executor.d.ts.map +0 -1
- package/dist/src/update/index.d.ts +0 -33
- package/dist/src/update/index.d.ts.map +0 -1
- package/dist/src/update/rate-limiter.d.ts +0 -20
- package/dist/src/update/rate-limiter.d.ts.map +0 -1
- package/dist/src/update/validator.d.ts +0 -17
- 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
|
|
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:
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
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
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
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:
|
|
378
|
+
issue: "IVFFlat index \"" + idx.index_name + "\" has lists=" + listsValue + " (recommended: ~" + recommendedLists + ")",
|
|
337
379
|
recommendation: 'Consider rebuilding with optimal lists parameter',
|
|
338
|
-
sql:
|
|
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
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
WHERE name IN (
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
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
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
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
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
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
|
-
|
|
464
|
-
|
|
465
|
-
|
|
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
|
-
|
|
470
|
-
|
|
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
|