kynjal-cli 4.0.0 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
@@ -4,53 +4,6 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Created with ruv.io
|
|
6
6
|
*/
|
|
7
|
-
var __assign = (this && this.__assign) || function () {
|
|
8
|
-
__assign = Object.assign || function(t) {
|
|
9
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
10
|
-
s = arguments[i];
|
|
11
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
12
|
-
t[p] = s[p];
|
|
13
|
-
}
|
|
14
|
-
return t;
|
|
15
|
-
};
|
|
16
|
-
return __assign.apply(this, arguments);
|
|
17
|
-
};
|
|
18
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
19
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
20
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
21
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
22
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
23
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
24
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
25
|
-
});
|
|
26
|
-
};
|
|
27
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
28
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
29
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
30
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
31
|
-
function step(op) {
|
|
32
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
33
|
-
while (_) try {
|
|
34
|
-
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;
|
|
35
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
36
|
-
switch (op[0]) {
|
|
37
|
-
case 0: case 1: t = op; break;
|
|
38
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
39
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
40
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
41
|
-
default:
|
|
42
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
43
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
44
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
45
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
46
|
-
if (t[2]) _.ops.pop();
|
|
47
|
-
_.trys.pop(); continue;
|
|
48
|
-
}
|
|
49
|
-
op = body.call(thisArg, _);
|
|
50
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
51
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
7
|
import { output } from '../output.js';
|
|
55
8
|
import { existsSync, readFileSync, statSync } from 'fs';
|
|
56
9
|
import { join, dirname } from 'path';
|
|
@@ -58,549 +11,427 @@ import { fileURLToPath } from 'url';
|
|
|
58
11
|
import { execSync, exec } from 'child_process';
|
|
59
12
|
import { promisify } from 'util';
|
|
60
13
|
// Promisified exec with proper shell and env inheritance for cross-platform support
|
|
61
|
-
|
|
14
|
+
const execAsync = promisify(exec);
|
|
62
15
|
/**
|
|
63
16
|
* Execute command asynchronously with proper environment inheritance
|
|
64
17
|
* Critical for Windows where PATH may not be inherited properly
|
|
65
18
|
*/
|
|
66
|
-
function runCommand(command, timeoutMs) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
encoding: 'utf8',
|
|
74
|
-
timeout: timeoutMs,
|
|
75
|
-
shell: process.platform === 'win32' ? 'cmd.exe' : '/bin/sh',
|
|
76
|
-
env: __assign({}, process.env),
|
|
77
|
-
windowsHide: true
|
|
78
|
-
})];
|
|
79
|
-
case 1:
|
|
80
|
-
stdout = (_a.sent()).stdout;
|
|
81
|
-
return [2 /*return*/, stdout.trim()];
|
|
82
|
-
}
|
|
83
|
-
});
|
|
19
|
+
async function runCommand(command, timeoutMs = 5000) {
|
|
20
|
+
const { stdout } = await execAsync(command, {
|
|
21
|
+
encoding: 'utf8',
|
|
22
|
+
timeout: timeoutMs,
|
|
23
|
+
shell: process.platform === 'win32' ? 'cmd.exe' : '/bin/sh', // Use proper shell per platform
|
|
24
|
+
env: { ...process.env }, // Explicitly inherit full environment
|
|
25
|
+
windowsHide: true, // Hide window on Windows
|
|
84
26
|
});
|
|
27
|
+
return stdout.trim();
|
|
85
28
|
}
|
|
86
29
|
// Check Node.js version
|
|
87
|
-
function checkNodeVersion() {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
else {
|
|
101
|
-
return [2 /*return*/, { name: 'Node.js Version', status: 'fail', message: version + " (>= " + requiredMajor + " required)", fix: 'nvm install 20 && nvm use 20' }];
|
|
102
|
-
}
|
|
103
|
-
return [2 /*return*/];
|
|
104
|
-
});
|
|
105
|
-
});
|
|
30
|
+
async function checkNodeVersion() {
|
|
31
|
+
const requiredMajor = 20;
|
|
32
|
+
const version = process.version;
|
|
33
|
+
const major = parseInt(version.slice(1).split('.')[0], 10);
|
|
34
|
+
if (major >= requiredMajor) {
|
|
35
|
+
return { name: 'Node.js Version', status: 'pass', message: `${version} (>= ${requiredMajor} required)` };
|
|
36
|
+
}
|
|
37
|
+
else if (major >= 18) {
|
|
38
|
+
return { name: 'Node.js Version', status: 'warn', message: `${version} (>= ${requiredMajor} recommended)`, fix: 'nvm install 20 && nvm use 20' };
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
return { name: 'Node.js Version', status: 'fail', message: `${version} (>= ${requiredMajor} required)`, fix: 'nvm install 20 && nvm use 20' };
|
|
42
|
+
}
|
|
106
43
|
}
|
|
107
44
|
// Check npm version (async with proper env inheritance)
|
|
108
|
-
function checkNpmVersion() {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
else {
|
|
123
|
-
return [2 /*return*/, { name: 'npm Version', status: 'warn', message: "v" + version + " (>= 9 recommended)", fix: 'npm install -g npm@latest' }];
|
|
124
|
-
}
|
|
125
|
-
return [3 /*break*/, 3];
|
|
126
|
-
case 2:
|
|
127
|
-
_a = _b.sent();
|
|
128
|
-
return [2 /*return*/, { name: 'npm Version', status: 'fail', message: 'npm not found', fix: 'Install Node.js from https://nodejs.org' }];
|
|
129
|
-
case 3: return [2 /*return*/];
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
});
|
|
45
|
+
async function checkNpmVersion() {
|
|
46
|
+
try {
|
|
47
|
+
const version = await runCommand('npm --version');
|
|
48
|
+
const major = parseInt(version.split('.')[0], 10);
|
|
49
|
+
if (major >= 9) {
|
|
50
|
+
return { name: 'npm Version', status: 'pass', message: `v${version}` };
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
return { name: 'npm Version', status: 'warn', message: `v${version} (>= 9 recommended)`, fix: 'npm install -g npm@latest' };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return { name: 'npm Version', status: 'fail', message: 'npm not found', fix: 'Install Node.js from https://nodejs.org' };
|
|
58
|
+
}
|
|
133
59
|
}
|
|
134
60
|
// Check config file
|
|
135
|
-
function checkConfigFile() {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
content = readFileSync(configPath, 'utf8');
|
|
149
|
-
JSON.parse(content);
|
|
150
|
-
return [2 /*return*/, { name: 'Config File', status: 'pass', message: "Found: " + configPath }];
|
|
151
|
-
}
|
|
152
|
-
catch (e) {
|
|
153
|
-
return [2 /*return*/, { name: 'Config File', status: 'fail', message: "Invalid JSON: " + configPath, fix: 'Fix JSON syntax in config file' }];
|
|
154
|
-
}
|
|
155
|
-
}
|
|
61
|
+
async function checkConfigFile() {
|
|
62
|
+
// JSON configs (parse-validated)
|
|
63
|
+
const jsonPaths = [
|
|
64
|
+
'.claude-flow/config.json',
|
|
65
|
+
'claude-flow.config.json',
|
|
66
|
+
'.claude-flow.json'
|
|
67
|
+
];
|
|
68
|
+
for (const configPath of jsonPaths) {
|
|
69
|
+
if (existsSync(configPath)) {
|
|
70
|
+
try {
|
|
71
|
+
const content = readFileSync(configPath, 'utf8');
|
|
72
|
+
JSON.parse(content);
|
|
73
|
+
return { name: 'Config File', status: 'pass', message: `Found: ${configPath}` };
|
|
156
74
|
}
|
|
157
|
-
|
|
158
|
-
'
|
|
159
|
-
'.claude-flow/config.yml',
|
|
160
|
-
'claude-flow.config.yaml'
|
|
161
|
-
];
|
|
162
|
-
for (_a = 0, yamlPaths_1 = yamlPaths; _a < yamlPaths_1.length; _a++) {
|
|
163
|
-
configPath = yamlPaths_1[_a];
|
|
164
|
-
if (existsSync(configPath)) {
|
|
165
|
-
return [2 /*return*/, { name: 'Config File', status: 'pass', message: "Found: " + configPath }];
|
|
166
|
-
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
return { name: 'Config File', status: 'fail', message: `Invalid JSON: ${configPath}`, fix: 'Fix JSON syntax in config file' };
|
|
167
77
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// YAML configs (existence-checked only — no heavy yaml parser dependency)
|
|
81
|
+
const yamlPaths = [
|
|
82
|
+
'.claude-flow/config.yaml',
|
|
83
|
+
'.claude-flow/config.yml',
|
|
84
|
+
'claude-flow.config.yaml'
|
|
85
|
+
];
|
|
86
|
+
for (const configPath of yamlPaths) {
|
|
87
|
+
if (existsSync(configPath)) {
|
|
88
|
+
return { name: 'Config File', status: 'pass', message: `Found: ${configPath}` };
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return { name: 'Config File', status: 'warn', message: 'No config file (using defaults)', fix: 'claude-flow config init' };
|
|
171
92
|
}
|
|
172
93
|
// Check daemon status
|
|
173
|
-
function checkDaemonStatus() {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
94
|
+
async function checkDaemonStatus() {
|
|
95
|
+
try {
|
|
96
|
+
const pidFile = '.claude-flow/daemon.pid';
|
|
97
|
+
if (existsSync(pidFile)) {
|
|
98
|
+
const pid = readFileSync(pidFile, 'utf8').trim();
|
|
177
99
|
try {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
pid = readFileSync(pidFile, 'utf8').trim();
|
|
181
|
-
try {
|
|
182
|
-
process.kill(parseInt(pid, 10), 0); // Check if process exists
|
|
183
|
-
return [2 /*return*/, { name: 'Daemon Status', status: 'pass', message: "Running (PID: " + pid + ")" }];
|
|
184
|
-
}
|
|
185
|
-
catch (_b) {
|
|
186
|
-
return [2 /*return*/, { name: 'Daemon Status', status: 'warn', message: 'Stale PID file', fix: 'rm .claude-flow/daemon.pid && claude-flow daemon start' }];
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
return [2 /*return*/, { name: 'Daemon Status', status: 'warn', message: 'Not running', fix: 'claude-flow daemon start' }];
|
|
100
|
+
process.kill(parseInt(pid, 10), 0); // Check if process exists
|
|
101
|
+
return { name: 'Daemon Status', status: 'pass', message: `Running (PID: ${pid})` };
|
|
190
102
|
}
|
|
191
|
-
catch
|
|
192
|
-
return
|
|
103
|
+
catch {
|
|
104
|
+
return { name: 'Daemon Status', status: 'warn', message: 'Stale PID file', fix: 'rm .claude-flow/daemon.pid && claude-flow daemon start' };
|
|
193
105
|
}
|
|
194
|
-
|
|
195
|
-
}
|
|
196
|
-
}
|
|
106
|
+
}
|
|
107
|
+
return { name: 'Daemon Status', status: 'warn', message: 'Not running', fix: 'claude-flow daemon start' };
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return { name: 'Daemon Status', status: 'warn', message: 'Unable to check', fix: 'claude-flow daemon status' };
|
|
111
|
+
}
|
|
197
112
|
}
|
|
198
113
|
// Check memory database
|
|
199
|
-
function checkMemoryDatabase() {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
try {
|
|
212
|
-
stats = statSync(dbPath);
|
|
213
|
-
sizeMB = (stats.size / 1024 / 1024).toFixed(2);
|
|
214
|
-
return [2 /*return*/, { name: 'Memory Database', status: 'pass', message: dbPath + " (" + sizeMB + " MB)" }];
|
|
215
|
-
}
|
|
216
|
-
catch (_b) {
|
|
217
|
-
return [2 /*return*/, { name: 'Memory Database', status: 'warn', message: dbPath + " (unable to stat)" }];
|
|
218
|
-
}
|
|
219
|
-
}
|
|
114
|
+
async function checkMemoryDatabase() {
|
|
115
|
+
const dbPaths = [
|
|
116
|
+
'.claude-flow/memory.db',
|
|
117
|
+
'.swarm/memory.db',
|
|
118
|
+
'data/memory.db'
|
|
119
|
+
];
|
|
120
|
+
for (const dbPath of dbPaths) {
|
|
121
|
+
if (existsSync(dbPath)) {
|
|
122
|
+
try {
|
|
123
|
+
const stats = statSync(dbPath);
|
|
124
|
+
const sizeMB = (stats.size / 1024 / 1024).toFixed(2);
|
|
125
|
+
return { name: 'Memory Database', status: 'pass', message: `${dbPath} (${sizeMB} MB)` };
|
|
220
126
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
127
|
+
catch {
|
|
128
|
+
return { name: 'Memory Database', status: 'warn', message: `${dbPath} (unable to stat)` };
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return { name: 'Memory Database', status: 'warn', message: 'Not initialized', fix: 'claude-flow memory configure --backend hybrid' };
|
|
224
133
|
}
|
|
225
134
|
// Check API keys
|
|
226
|
-
function checkApiKeys() {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
found
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
else {
|
|
249
|
-
return [2 /*return*/, { name: 'API Keys', status: 'warn', message: 'No API keys found', fix: 'export ANTHROPIC_API_KEY=your_key' }];
|
|
250
|
-
}
|
|
251
|
-
return [2 /*return*/];
|
|
252
|
-
});
|
|
253
|
-
});
|
|
135
|
+
async function checkApiKeys() {
|
|
136
|
+
const keys = ['ANTHROPIC_API_KEY', 'CLAUDE_API_KEY', 'OPENAI_API_KEY'];
|
|
137
|
+
const found = [];
|
|
138
|
+
for (const key of keys) {
|
|
139
|
+
if (process.env[key]) {
|
|
140
|
+
found.push(key);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Detect Claude Code environment — API keys are managed internally
|
|
144
|
+
const inClaudeCode = !!(process.env.CLAUDE_CODE || process.env.CLAUDE_PROJECT_DIR || process.env.MCP_SESSION_ID);
|
|
145
|
+
if (found.includes('ANTHROPIC_API_KEY') || found.includes('CLAUDE_API_KEY')) {
|
|
146
|
+
return { name: 'API Keys', status: 'pass', message: `Found: ${found.join(', ')}` };
|
|
147
|
+
}
|
|
148
|
+
else if (inClaudeCode) {
|
|
149
|
+
return { name: 'API Keys', status: 'pass', message: 'Claude Code (managed internally)' };
|
|
150
|
+
}
|
|
151
|
+
else if (found.length > 0) {
|
|
152
|
+
return { name: 'API Keys', status: 'warn', message: `Found: ${found.join(', ')} (no Claude key)`, fix: 'export ANTHROPIC_API_KEY=your_key' };
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
return { name: 'API Keys', status: 'warn', message: 'No API keys found', fix: 'export ANTHROPIC_API_KEY=your_key' };
|
|
156
|
+
}
|
|
254
157
|
}
|
|
255
158
|
// Check git (async with proper env inheritance)
|
|
256
|
-
function checkGit() {
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
return
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
case 1:
|
|
265
|
-
version = _b.sent();
|
|
266
|
-
return [2 /*return*/, { name: 'Git', status: 'pass', message: version.replace('git version ', 'v') }];
|
|
267
|
-
case 2:
|
|
268
|
-
_a = _b.sent();
|
|
269
|
-
return [2 /*return*/, { name: 'Git', status: 'warn', message: 'Not installed', fix: 'Install git from https://git-scm.com' }];
|
|
270
|
-
case 3: return [2 /*return*/];
|
|
271
|
-
}
|
|
272
|
-
});
|
|
273
|
-
});
|
|
159
|
+
async function checkGit() {
|
|
160
|
+
try {
|
|
161
|
+
const version = await runCommand('git --version');
|
|
162
|
+
return { name: 'Git', status: 'pass', message: version.replace('git version ', 'v') };
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
return { name: 'Git', status: 'warn', message: 'Not installed', fix: 'Install git from https://git-scm.com' };
|
|
166
|
+
}
|
|
274
167
|
}
|
|
275
168
|
// Check if in git repo (async with proper env inheritance)
|
|
276
|
-
function checkGitRepo() {
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
return
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
case 1:
|
|
285
|
-
_b.sent();
|
|
286
|
-
return [2 /*return*/, { name: 'Git Repository', status: 'pass', message: 'In a git repository' }];
|
|
287
|
-
case 2:
|
|
288
|
-
_a = _b.sent();
|
|
289
|
-
return [2 /*return*/, { name: 'Git Repository', status: 'warn', message: 'Not a git repository', fix: 'git init' }];
|
|
290
|
-
case 3: return [2 /*return*/];
|
|
291
|
-
}
|
|
292
|
-
});
|
|
293
|
-
});
|
|
169
|
+
async function checkGitRepo() {
|
|
170
|
+
try {
|
|
171
|
+
await runCommand('git rev-parse --git-dir');
|
|
172
|
+
return { name: 'Git Repository', status: 'pass', message: 'In a git repository' };
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
return { name: 'Git Repository', status: 'warn', message: 'Not a git repository', fix: 'git init' };
|
|
176
|
+
}
|
|
294
177
|
}
|
|
295
178
|
// Check MCP servers
|
|
296
|
-
function checkMcpServers() {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
return [2 /*return*/, { name: 'MCP Servers', status: 'pass', message: count + " servers (ruflo configured)" }];
|
|
315
|
-
}
|
|
316
|
-
else {
|
|
317
|
-
return [2 /*return*/, { name: 'MCP Servers', status: 'warn', message: count + " servers (ruflo not found)", fix: 'claude mcp add ruflo -- npx -y ruflo@latest mcp start' }];
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
catch (_b) {
|
|
321
|
-
// continue to next path
|
|
322
|
-
}
|
|
179
|
+
async function checkMcpServers() {
|
|
180
|
+
const mcpConfigPaths = [
|
|
181
|
+
join(process.env.HOME || '', '.claude/claude_desktop_config.json'),
|
|
182
|
+
join(process.env.HOME || '', '.config/claude/mcp.json'),
|
|
183
|
+
'.mcp.json'
|
|
184
|
+
];
|
|
185
|
+
for (const configPath of mcpConfigPaths) {
|
|
186
|
+
if (existsSync(configPath)) {
|
|
187
|
+
try {
|
|
188
|
+
const content = JSON.parse(readFileSync(configPath, 'utf8'));
|
|
189
|
+
const servers = content.mcpServers || content.servers || {};
|
|
190
|
+
const count = Object.keys(servers).length;
|
|
191
|
+
const hasClaudeFlow = 'claude-flow' in servers || 'claude-flow_alpha' in servers || 'ruflo' in servers || 'ruflo_alpha' in servers;
|
|
192
|
+
if (hasClaudeFlow) {
|
|
193
|
+
return { name: 'MCP Servers', status: 'pass', message: `${count} servers (ruflo configured)` };
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
return { name: 'MCP Servers', status: 'warn', message: `${count} servers (ruflo not found)`, fix: 'claude mcp add ruflo -- npx -y ruflo@latest mcp start' };
|
|
323
197
|
}
|
|
324
198
|
}
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
199
|
+
catch {
|
|
200
|
+
// continue to next path
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return { name: 'MCP Servers', status: 'warn', message: 'No MCP config found', fix: 'claude mcp add claude-flow npx @claude-flow/cli@v3alpha mcp start' };
|
|
328
205
|
}
|
|
329
206
|
// Check disk space (async with proper env inheritance)
|
|
330
|
-
function checkDiskSpace() {
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
}
|
|
356
|
-
return [2 /*return*/, { name: 'Disk Space', status: 'pass', message: available + " available" }];
|
|
357
|
-
case 2:
|
|
358
|
-
_b = _c.sent();
|
|
359
|
-
return [2 /*return*/, { name: 'Disk Space', status: 'warn', message: 'Unable to check' }];
|
|
360
|
-
case 3: return [2 /*return*/];
|
|
361
|
-
}
|
|
362
|
-
});
|
|
363
|
-
});
|
|
207
|
+
async function checkDiskSpace() {
|
|
208
|
+
try {
|
|
209
|
+
if (process.platform === 'win32') {
|
|
210
|
+
return { name: 'Disk Space', status: 'pass', message: 'Check skipped on Windows' };
|
|
211
|
+
}
|
|
212
|
+
// Use df -Ph for POSIX mode (guarantees single-line output even with long device names)
|
|
213
|
+
const output_str = await runCommand('df -Ph . | tail -1');
|
|
214
|
+
const parts = output_str.split(/\s+/);
|
|
215
|
+
// POSIX format: Filesystem Size Used Avail Capacity Mounted
|
|
216
|
+
const available = parts[3];
|
|
217
|
+
const usePercent = parseInt(parts[4]?.replace('%', '') || '0', 10);
|
|
218
|
+
if (isNaN(usePercent)) {
|
|
219
|
+
return { name: 'Disk Space', status: 'warn', message: `${available || 'unknown'} available (unable to parse usage)` };
|
|
220
|
+
}
|
|
221
|
+
if (usePercent > 90) {
|
|
222
|
+
return { name: 'Disk Space', status: 'fail', message: `${available} available (${usePercent}% used)`, fix: 'Free up disk space' };
|
|
223
|
+
}
|
|
224
|
+
else if (usePercent > 80) {
|
|
225
|
+
return { name: 'Disk Space', status: 'warn', message: `${available} available (${usePercent}% used)` };
|
|
226
|
+
}
|
|
227
|
+
return { name: 'Disk Space', status: 'pass', message: `${available} available` };
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
return { name: 'Disk Space', status: 'warn', message: 'Unable to check' };
|
|
231
|
+
}
|
|
364
232
|
}
|
|
365
233
|
// Check TypeScript/build (async with proper env inheritance)
|
|
366
|
-
function checkBuildTools() {
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
return [2 /*return*/, { name: 'TypeScript', status: 'warn', message: 'Not installed locally', fix: 'npm install -D typescript' }];
|
|
378
|
-
}
|
|
379
|
-
return [2 /*return*/, { name: 'TypeScript', status: 'pass', message: tscVersion.replace('Version ', 'v') }];
|
|
380
|
-
case 2:
|
|
381
|
-
_a = _b.sent();
|
|
382
|
-
return [2 /*return*/, { name: 'TypeScript', status: 'warn', message: 'Not installed locally', fix: 'npm install -D typescript' }];
|
|
383
|
-
case 3: return [2 /*return*/];
|
|
384
|
-
}
|
|
385
|
-
});
|
|
386
|
-
});
|
|
234
|
+
async function checkBuildTools() {
|
|
235
|
+
try {
|
|
236
|
+
const tscVersion = await runCommand('npx tsc --version', 10000); // tsc can be slow
|
|
237
|
+
if (!tscVersion || tscVersion.includes('not found')) {
|
|
238
|
+
return { name: 'TypeScript', status: 'warn', message: 'Not installed locally', fix: 'npm install -D typescript' };
|
|
239
|
+
}
|
|
240
|
+
return { name: 'TypeScript', status: 'pass', message: tscVersion.replace('Version ', 'v') };
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
return { name: 'TypeScript', status: 'warn', message: 'Not installed locally', fix: 'npm install -D typescript' };
|
|
244
|
+
}
|
|
387
245
|
}
|
|
388
246
|
// Check for stale npx cache (version freshness)
|
|
389
|
-
function checkVersionFreshness() {
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
(pkg.name === '@claude-flow/cli' || pkg.name === 'claude-flow' || pkg.name === 'ruflo')) {
|
|
412
|
-
currentVersion = pkg.version;
|
|
413
|
-
break;
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
catch (_e) {
|
|
418
|
-
// Unreadable/invalid JSON -- skip and keep walking up
|
|
419
|
-
}
|
|
420
|
-
parent = dirname(dir);
|
|
421
|
-
if (parent === dir)
|
|
422
|
-
break; // reached root
|
|
423
|
-
dir = parent;
|
|
247
|
+
async function checkVersionFreshness() {
|
|
248
|
+
try {
|
|
249
|
+
// Get current CLI version from package.json
|
|
250
|
+
// Use import.meta.url to reliably locate our own package.json,
|
|
251
|
+
// regardless of how deep the compiled file sits (e.g. dist/src/commands/).
|
|
252
|
+
let currentVersion = '0.0.0';
|
|
253
|
+
try {
|
|
254
|
+
const thisFile = fileURLToPath(import.meta.url);
|
|
255
|
+
let dir = dirname(thisFile);
|
|
256
|
+
// Walk up from the current file's directory until we find the
|
|
257
|
+
// package.json that belongs to @claude-flow/cli (or claude-flow/cli).
|
|
258
|
+
// Walk until dirname(dir) === dir (filesystem root on any platform).
|
|
259
|
+
for (;;) {
|
|
260
|
+
const candidate = join(dir, 'package.json');
|
|
261
|
+
try {
|
|
262
|
+
if (existsSync(candidate)) {
|
|
263
|
+
const pkg = JSON.parse(readFileSync(candidate, 'utf8'));
|
|
264
|
+
if (pkg.version &&
|
|
265
|
+
typeof pkg.name === 'string' &&
|
|
266
|
+
(pkg.name === '@claude-flow/cli' || pkg.name === 'claude-flow' || pkg.name === 'ruflo')) {
|
|
267
|
+
currentVersion = pkg.version;
|
|
268
|
+
break;
|
|
424
269
|
}
|
|
425
270
|
}
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
_d.label = 1;
|
|
435
|
-
case 1:
|
|
436
|
-
_d.trys.push([1, 3, , 4]);
|
|
437
|
-
return [4 /*yield*/, runCommand('npm view @claude-flow/cli@alpha version', 5000)];
|
|
438
|
-
case 2:
|
|
439
|
-
npmInfo = _d.sent();
|
|
440
|
-
latestVersion = npmInfo.trim();
|
|
441
|
-
return [3 /*break*/, 4];
|
|
442
|
-
case 3:
|
|
443
|
-
_c = _d.sent();
|
|
444
|
-
// Can't reach npm registry - skip check
|
|
445
|
-
return [2 /*return*/, {
|
|
446
|
-
name: 'Version Freshness',
|
|
447
|
-
status: 'warn',
|
|
448
|
-
message: "v" + currentVersion + " (cannot check registry)"
|
|
449
|
-
}];
|
|
450
|
-
case 4:
|
|
451
|
-
parseVersion = function (v) {
|
|
452
|
-
var match = v.match(/^(\d+)\.(\d+)\.(\d+)(?:-[a-zA-Z]+\.(\d+))?/);
|
|
453
|
-
if (!match)
|
|
454
|
-
return { major: 0, minor: 0, patch: 0, prerelease: 0 };
|
|
455
|
-
return {
|
|
456
|
-
major: parseInt(match[1], 10) || 0,
|
|
457
|
-
minor: parseInt(match[2], 10) || 0,
|
|
458
|
-
patch: parseInt(match[3], 10) || 0,
|
|
459
|
-
prerelease: parseInt(match[4], 10) || 0
|
|
460
|
-
};
|
|
461
|
-
};
|
|
462
|
-
current = parseVersion(currentVersion);
|
|
463
|
-
latest = parseVersion(latestVersion);
|
|
464
|
-
isOutdated = (latest.major > current.major ||
|
|
465
|
-
(latest.major === current.major && latest.minor > current.minor) ||
|
|
466
|
-
(latest.major === current.major && latest.minor === current.minor && latest.patch > current.patch) ||
|
|
467
|
-
(latest.major === current.major && latest.minor === current.minor && latest.patch === current.patch && latest.prerelease > current.prerelease));
|
|
468
|
-
if (isOutdated) {
|
|
469
|
-
fix = isNpx
|
|
470
|
-
? 'rm -rf ~/.npm/_npx/* && npx -y @claude-flow/cli@latest'
|
|
471
|
-
: 'npm update @claude-flow/cli';
|
|
472
|
-
return [2 /*return*/, {
|
|
473
|
-
name: 'Version Freshness',
|
|
474
|
-
status: 'warn',
|
|
475
|
-
message: "v" + currentVersion + " (latest: v" + latestVersion + ")" + (isNpx ? ' [npx cache stale]' : ''),
|
|
476
|
-
fix: fix
|
|
477
|
-
}];
|
|
478
|
-
}
|
|
479
|
-
return [2 /*return*/, {
|
|
480
|
-
name: 'Version Freshness',
|
|
481
|
-
status: 'pass',
|
|
482
|
-
message: "v" + currentVersion + " (up to date)"
|
|
483
|
-
}];
|
|
484
|
-
case 5:
|
|
485
|
-
error_1 = _d.sent();
|
|
486
|
-
return [2 /*return*/, {
|
|
487
|
-
name: 'Version Freshness',
|
|
488
|
-
status: 'warn',
|
|
489
|
-
message: 'Unable to check version freshness'
|
|
490
|
-
}];
|
|
491
|
-
case 6: return [2 /*return*/];
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
// Unreadable/invalid JSON -- skip and keep walking up
|
|
274
|
+
}
|
|
275
|
+
const parent = dirname(dir);
|
|
276
|
+
if (parent === dir)
|
|
277
|
+
break; // reached root
|
|
278
|
+
dir = parent;
|
|
492
279
|
}
|
|
493
|
-
}
|
|
494
|
-
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
// Fall back to a default
|
|
283
|
+
currentVersion = '0.0.0';
|
|
284
|
+
}
|
|
285
|
+
// Check if running via npx (look for _npx in process path or argv)
|
|
286
|
+
const isNpx = process.argv[1]?.includes('_npx') ||
|
|
287
|
+
process.env.npm_execpath?.includes('npx') ||
|
|
288
|
+
process.cwd().includes('_npx');
|
|
289
|
+
// Query npm for latest version (using alpha tag since that's what we publish to)
|
|
290
|
+
let latestVersion = currentVersion;
|
|
291
|
+
try {
|
|
292
|
+
const npmInfo = await runCommand('npm view @claude-flow/cli@alpha version', 5000);
|
|
293
|
+
latestVersion = npmInfo.trim();
|
|
294
|
+
}
|
|
295
|
+
catch {
|
|
296
|
+
// Can't reach npm registry - skip check
|
|
297
|
+
return {
|
|
298
|
+
name: 'Version Freshness',
|
|
299
|
+
status: 'warn',
|
|
300
|
+
message: `v${currentVersion} (cannot check registry)`
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
// Parse version numbers for comparison (handle prerelease like 3.0.0-alpha.84)
|
|
304
|
+
const parseVersion = (v) => {
|
|
305
|
+
const match = v.match(/^(\d+)\.(\d+)\.(\d+)(?:-[a-zA-Z]+\.(\d+))?/);
|
|
306
|
+
if (!match)
|
|
307
|
+
return { major: 0, minor: 0, patch: 0, prerelease: 0 };
|
|
308
|
+
return {
|
|
309
|
+
major: parseInt(match[1], 10) || 0,
|
|
310
|
+
minor: parseInt(match[2], 10) || 0,
|
|
311
|
+
patch: parseInt(match[3], 10) || 0,
|
|
312
|
+
prerelease: parseInt(match[4], 10) || 0
|
|
313
|
+
};
|
|
314
|
+
};
|
|
315
|
+
const current = parseVersion(currentVersion);
|
|
316
|
+
const latest = parseVersion(latestVersion);
|
|
317
|
+
// Compare versions (including prerelease number)
|
|
318
|
+
const isOutdated = (latest.major > current.major ||
|
|
319
|
+
(latest.major === current.major && latest.minor > current.minor) ||
|
|
320
|
+
(latest.major === current.major && latest.minor === current.minor && latest.patch > current.patch) ||
|
|
321
|
+
(latest.major === current.major && latest.minor === current.minor && latest.patch === current.patch && latest.prerelease > current.prerelease));
|
|
322
|
+
if (isOutdated) {
|
|
323
|
+
const fix = isNpx
|
|
324
|
+
? 'rm -rf ~/.npm/_npx/* && npx -y @claude-flow/cli@latest'
|
|
325
|
+
: 'npm update @claude-flow/cli';
|
|
326
|
+
return {
|
|
327
|
+
name: 'Version Freshness',
|
|
328
|
+
status: 'warn',
|
|
329
|
+
message: `v${currentVersion} (latest: v${latestVersion})${isNpx ? ' [npx cache stale]' : ''}`,
|
|
330
|
+
fix
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
return {
|
|
334
|
+
name: 'Version Freshness',
|
|
335
|
+
status: 'pass',
|
|
336
|
+
message: `v${currentVersion} (up to date)`
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
catch (error) {
|
|
340
|
+
return {
|
|
341
|
+
name: 'Version Freshness',
|
|
342
|
+
status: 'warn',
|
|
343
|
+
message: 'Unable to check version freshness'
|
|
344
|
+
};
|
|
345
|
+
}
|
|
495
346
|
}
|
|
496
347
|
// Check Claude Code CLI (async with proper env inheritance)
|
|
497
|
-
function checkClaudeCode() {
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
name: 'Claude Code CLI',
|
|
514
|
-
status: 'warn',
|
|
515
|
-
message: 'Not installed',
|
|
516
|
-
fix: 'npm install -g @anthropic-ai/claude-code'
|
|
517
|
-
}];
|
|
518
|
-
case 3: return [2 /*return*/];
|
|
519
|
-
}
|
|
520
|
-
});
|
|
521
|
-
});
|
|
348
|
+
async function checkClaudeCode() {
|
|
349
|
+
try {
|
|
350
|
+
const version = await runCommand('claude --version');
|
|
351
|
+
// Parse version from output like "claude 1.0.0" or "Claude Code v1.0.0"
|
|
352
|
+
const versionMatch = version.match(/v?(\d+\.\d+\.\d+)/);
|
|
353
|
+
const versionStr = versionMatch ? `v${versionMatch[1]}` : version;
|
|
354
|
+
return { name: 'Claude Code CLI', status: 'pass', message: versionStr };
|
|
355
|
+
}
|
|
356
|
+
catch {
|
|
357
|
+
return {
|
|
358
|
+
name: 'Claude Code CLI',
|
|
359
|
+
status: 'warn',
|
|
360
|
+
message: 'Not installed',
|
|
361
|
+
fix: 'npm install -g @anthropic-ai/claude-code'
|
|
362
|
+
};
|
|
363
|
+
}
|
|
522
364
|
}
|
|
523
365
|
// Install Claude Code CLI
|
|
524
|
-
function installClaudeCode() {
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
encoding: 'utf8',
|
|
532
|
-
stdio: 'inherit'
|
|
533
|
-
});
|
|
534
|
-
output.writeln(output.success('Claude Code CLI installed successfully!'));
|
|
535
|
-
return [2 /*return*/, true];
|
|
536
|
-
}
|
|
537
|
-
catch (error) {
|
|
538
|
-
output.writeln(output.error('Failed to install Claude Code CLI'));
|
|
539
|
-
if (error instanceof Error) {
|
|
540
|
-
output.writeln(output.dim(error.message));
|
|
541
|
-
}
|
|
542
|
-
return [2 /*return*/, false];
|
|
543
|
-
}
|
|
544
|
-
return [2 /*return*/];
|
|
366
|
+
async function installClaudeCode() {
|
|
367
|
+
try {
|
|
368
|
+
output.writeln();
|
|
369
|
+
output.writeln(output.bold('Installing Claude Code CLI...'));
|
|
370
|
+
execSync('npm install -g @anthropic-ai/claude-code', {
|
|
371
|
+
encoding: 'utf8',
|
|
372
|
+
stdio: 'inherit'
|
|
545
373
|
});
|
|
546
|
-
|
|
374
|
+
output.writeln(output.success('Claude Code CLI installed successfully!'));
|
|
375
|
+
return true;
|
|
376
|
+
}
|
|
377
|
+
catch (error) {
|
|
378
|
+
output.writeln(output.error('Failed to install Claude Code CLI'));
|
|
379
|
+
if (error instanceof Error) {
|
|
380
|
+
output.writeln(output.dim(error.message));
|
|
381
|
+
}
|
|
382
|
+
return false;
|
|
383
|
+
}
|
|
547
384
|
}
|
|
548
385
|
// Check agentic-flow v3 integration (filesystem-based to avoid slow WASM/DB init)
|
|
549
|
-
function checkAgenticFlow() {
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
if (existsSync(p)) {
|
|
562
|
-
pkgJsonPath = p;
|
|
563
|
-
break;
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
|
-
if (!pkgJsonPath) {
|
|
567
|
-
return [2 /*return*/, {
|
|
568
|
-
name: 'agentic-flow',
|
|
569
|
-
status: 'warn',
|
|
570
|
-
message: 'Not installed (optional — embeddings/routing will use fallbacks)',
|
|
571
|
-
fix: 'npm install agentic-flow@latest'
|
|
572
|
-
}];
|
|
573
|
-
}
|
|
574
|
-
pkg = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'));
|
|
575
|
-
version = pkg.version || 'unknown';
|
|
576
|
-
exports = pkg.exports || {};
|
|
577
|
-
features = [
|
|
578
|
-
exports['./reasoningbank'] ? 'ReasoningBank' : null,
|
|
579
|
-
exports['./router'] ? 'Router' : null,
|
|
580
|
-
exports['./transport/quic'] ? 'QUIC' : null,
|
|
581
|
-
].filter(Boolean);
|
|
582
|
-
return [2 /*return*/, {
|
|
583
|
-
name: 'agentic-flow',
|
|
584
|
-
status: 'pass',
|
|
585
|
-
message: "v" + version + " (" + features.join(', ') + ")"
|
|
586
|
-
}];
|
|
386
|
+
async function checkAgenticFlow() {
|
|
387
|
+
try {
|
|
388
|
+
// Walk common node_modules paths to find agentic-flow/package.json
|
|
389
|
+
const candidates = [
|
|
390
|
+
join(process.cwd(), 'node_modules', 'agentic-flow', 'package.json'),
|
|
391
|
+
join(process.cwd(), '..', 'node_modules', 'agentic-flow', 'package.json'),
|
|
392
|
+
];
|
|
393
|
+
let pkgJsonPath = null;
|
|
394
|
+
for (const p of candidates) {
|
|
395
|
+
if (existsSync(p)) {
|
|
396
|
+
pkgJsonPath = p;
|
|
397
|
+
break;
|
|
587
398
|
}
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
399
|
+
}
|
|
400
|
+
if (!pkgJsonPath) {
|
|
401
|
+
return {
|
|
402
|
+
name: 'agentic-flow',
|
|
403
|
+
status: 'warn',
|
|
404
|
+
message: 'Not installed (optional — embeddings/routing will use fallbacks)',
|
|
405
|
+
fix: 'npm install agentic-flow@latest'
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
const pkg = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'));
|
|
409
|
+
const version = pkg.version || 'unknown';
|
|
410
|
+
const exports = pkg.exports || {};
|
|
411
|
+
const features = [
|
|
412
|
+
exports['./reasoningbank'] ? 'ReasoningBank' : null,
|
|
413
|
+
exports['./router'] ? 'Router' : null,
|
|
414
|
+
exports['./transport/quic'] ? 'QUIC' : null,
|
|
415
|
+
].filter(Boolean);
|
|
416
|
+
return {
|
|
417
|
+
name: 'agentic-flow',
|
|
418
|
+
status: 'pass',
|
|
419
|
+
message: `v${version} (${features.join(', ')})`
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
catch {
|
|
423
|
+
return { name: 'agentic-flow', status: 'warn', message: 'Check failed' };
|
|
424
|
+
}
|
|
594
425
|
}
|
|
595
426
|
// Format health check result
|
|
596
427
|
function formatCheck(check) {
|
|
597
|
-
|
|
428
|
+
const icon = check.status === 'pass' ? output.success('✓') :
|
|
598
429
|
check.status === 'warn' ? output.warning('⚠') :
|
|
599
430
|
output.error('✗');
|
|
600
|
-
return icon
|
|
431
|
+
return `${icon} ${check.name}: ${check.message}`;
|
|
601
432
|
}
|
|
602
433
|
// Main doctor command
|
|
603
|
-
export
|
|
434
|
+
export const doctorCommand = {
|
|
604
435
|
name: 'doctor',
|
|
605
436
|
description: 'System diagnostics and health checks',
|
|
606
437
|
options: [
|
|
@@ -609,14 +440,14 @@ export var doctorCommand = {
|
|
|
609
440
|
short: 'f',
|
|
610
441
|
description: 'Show fix commands for issues',
|
|
611
442
|
type: 'boolean',
|
|
612
|
-
|
|
443
|
+
default: false
|
|
613
444
|
},
|
|
614
445
|
{
|
|
615
446
|
name: 'install',
|
|
616
447
|
short: 'i',
|
|
617
448
|
description: 'Auto-install missing dependencies (Claude Code CLI)',
|
|
618
449
|
type: 'boolean',
|
|
619
|
-
|
|
450
|
+
default: false
|
|
620
451
|
},
|
|
621
452
|
{
|
|
622
453
|
name: 'component',
|
|
@@ -629,7 +460,7 @@ export var doctorCommand = {
|
|
|
629
460
|
short: 'v',
|
|
630
461
|
description: 'Verbose output',
|
|
631
462
|
type: 'boolean',
|
|
632
|
-
|
|
463
|
+
default: false
|
|
633
464
|
}
|
|
634
465
|
],
|
|
635
466
|
examples: [
|
|
@@ -639,163 +470,150 @@ export var doctorCommand = {
|
|
|
639
470
|
{ command: 'claude-flow doctor -c version', description: 'Check for stale npx cache' },
|
|
640
471
|
{ command: 'claude-flow doctor -c claude', description: 'Check Claude Code CLI only' }
|
|
641
472
|
],
|
|
642
|
-
action:
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
for (_i = 0, checkResults_1 = checkResults; _i < checkResults_1.length; _i++) {
|
|
706
|
-
settledResult = checkResults_1[_i];
|
|
707
|
-
if (settledResult.status === 'fulfilled') {
|
|
708
|
-
result = settledResult.value;
|
|
709
|
-
results.push(result);
|
|
710
|
-
output.writeln(formatCheck(result));
|
|
711
|
-
if (result.fix && (result.status === 'fail' || result.status === 'warn')) {
|
|
712
|
-
fixes.push(result.name + ": " + result.fix);
|
|
713
|
-
}
|
|
714
|
-
}
|
|
715
|
-
else {
|
|
716
|
-
errorResult = {
|
|
717
|
-
name: 'Check',
|
|
718
|
-
status: 'fail',
|
|
719
|
-
message: ((_b = settledResult.reason) === null || _b === void 0 ? void 0 : _b.message) || 'Unknown error'
|
|
720
|
-
};
|
|
721
|
-
results.push(errorResult);
|
|
722
|
-
output.writeln(formatCheck(errorResult));
|
|
723
|
-
}
|
|
473
|
+
action: async (ctx) => {
|
|
474
|
+
const showFix = ctx.flags.fix;
|
|
475
|
+
const autoInstall = ctx.flags.install;
|
|
476
|
+
const component = ctx.flags.component;
|
|
477
|
+
const verbose = ctx.flags.verbose;
|
|
478
|
+
output.writeln();
|
|
479
|
+
output.writeln(output.bold('RuFlo Doctor'));
|
|
480
|
+
output.writeln(output.dim('System diagnostics and health check'));
|
|
481
|
+
output.writeln(output.dim('─'.repeat(50)));
|
|
482
|
+
output.writeln();
|
|
483
|
+
const allChecks = [
|
|
484
|
+
checkVersionFreshness,
|
|
485
|
+
checkNodeVersion,
|
|
486
|
+
checkNpmVersion,
|
|
487
|
+
checkClaudeCode,
|
|
488
|
+
checkGit,
|
|
489
|
+
checkGitRepo,
|
|
490
|
+
checkConfigFile,
|
|
491
|
+
checkDaemonStatus,
|
|
492
|
+
checkMemoryDatabase,
|
|
493
|
+
checkApiKeys,
|
|
494
|
+
checkMcpServers,
|
|
495
|
+
checkDiskSpace,
|
|
496
|
+
checkBuildTools,
|
|
497
|
+
checkAgenticFlow
|
|
498
|
+
];
|
|
499
|
+
const componentMap = {
|
|
500
|
+
'version': checkVersionFreshness,
|
|
501
|
+
'freshness': checkVersionFreshness,
|
|
502
|
+
'node': checkNodeVersion,
|
|
503
|
+
'npm': checkNpmVersion,
|
|
504
|
+
'claude': checkClaudeCode,
|
|
505
|
+
'config': checkConfigFile,
|
|
506
|
+
'daemon': checkDaemonStatus,
|
|
507
|
+
'memory': checkMemoryDatabase,
|
|
508
|
+
'api': checkApiKeys,
|
|
509
|
+
'git': checkGit,
|
|
510
|
+
'mcp': checkMcpServers,
|
|
511
|
+
'disk': checkDiskSpace,
|
|
512
|
+
'typescript': checkBuildTools,
|
|
513
|
+
'agentic-flow': checkAgenticFlow
|
|
514
|
+
};
|
|
515
|
+
let checksToRun = allChecks;
|
|
516
|
+
if (component && componentMap[component]) {
|
|
517
|
+
checksToRun = [componentMap[component]];
|
|
518
|
+
}
|
|
519
|
+
const results = [];
|
|
520
|
+
const fixes = [];
|
|
521
|
+
// OPTIMIZATION: Run all checks in parallel for 3-5x faster execution
|
|
522
|
+
const spinner = output.createSpinner({ text: 'Running health checks in parallel...', spinner: 'dots' });
|
|
523
|
+
spinner.start();
|
|
524
|
+
try {
|
|
525
|
+
// Execute all checks concurrently
|
|
526
|
+
const checkResults = await Promise.allSettled(checksToRun.map(check => check()));
|
|
527
|
+
spinner.stop();
|
|
528
|
+
// Process results in order
|
|
529
|
+
for (const settledResult of checkResults) {
|
|
530
|
+
if (settledResult.status === 'fulfilled') {
|
|
531
|
+
const result = settledResult.value;
|
|
532
|
+
results.push(result);
|
|
533
|
+
output.writeln(formatCheck(result));
|
|
534
|
+
if (result.fix && (result.status === 'fail' || result.status === 'warn')) {
|
|
535
|
+
fixes.push(`${result.name}: ${result.fix}`);
|
|
724
536
|
}
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
537
|
+
}
|
|
538
|
+
else {
|
|
539
|
+
const errorResult = {
|
|
540
|
+
name: 'Check',
|
|
541
|
+
status: 'fail',
|
|
542
|
+
message: settledResult.reason?.message || 'Unknown error'
|
|
543
|
+
};
|
|
544
|
+
results.push(errorResult);
|
|
545
|
+
output.writeln(formatCheck(errorResult));
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
catch (error) {
|
|
550
|
+
spinner.stop();
|
|
551
|
+
output.writeln(output.error('Failed to run health checks'));
|
|
552
|
+
}
|
|
553
|
+
// Auto-install missing dependencies if requested
|
|
554
|
+
if (autoInstall) {
|
|
555
|
+
const claudeCodeResult = results.find(r => r.name === 'Claude Code CLI');
|
|
556
|
+
if (claudeCodeResult && claudeCodeResult.status !== 'pass') {
|
|
557
|
+
const installed = await installClaudeCode();
|
|
558
|
+
if (installed) {
|
|
559
|
+
// Re-check Claude Code after installation
|
|
560
|
+
const newCheck = await checkClaudeCode();
|
|
561
|
+
const idx = results.findIndex(r => r.name === 'Claude Code CLI');
|
|
743
562
|
if (idx !== -1) {
|
|
744
563
|
results[idx] = newCheck;
|
|
745
|
-
|
|
564
|
+
// Update fixes list
|
|
565
|
+
const fixIdx = fixes.findIndex(f => f.startsWith('Claude Code CLI:'));
|
|
746
566
|
if (fixIdx !== -1 && newCheck.status === 'pass') {
|
|
747
567
|
fixes.splice(fixIdx, 1);
|
|
748
568
|
}
|
|
749
569
|
}
|
|
750
570
|
output.writeln(formatCheck(newCheck));
|
|
751
|
-
|
|
752
|
-
case 7:
|
|
753
|
-
passed = results.filter(function (r) { return r.status === 'pass'; }).length;
|
|
754
|
-
warnings = results.filter(function (r) { return r.status === 'warn'; }).length;
|
|
755
|
-
failed = results.filter(function (r) { return r.status === 'fail'; }).length;
|
|
756
|
-
output.writeln();
|
|
757
|
-
output.writeln(output.dim('─'.repeat(50)));
|
|
758
|
-
output.writeln();
|
|
759
|
-
summaryParts = [
|
|
760
|
-
output.success(passed + " passed"),
|
|
761
|
-
warnings > 0 ? output.warning(warnings + " warnings") : null,
|
|
762
|
-
failed > 0 ? output.error(failed + " failed") : null
|
|
763
|
-
].filter(Boolean);
|
|
764
|
-
output.writeln("Summary: " + summaryParts.join(', '));
|
|
765
|
-
// Show fixes
|
|
766
|
-
if (showFix && fixes.length > 0) {
|
|
767
|
-
output.writeln();
|
|
768
|
-
output.writeln(output.bold('Suggested Fixes:'));
|
|
769
|
-
output.writeln();
|
|
770
|
-
for (_a = 0, fixes_1 = fixes; _a < fixes_1.length; _a++) {
|
|
771
|
-
fix = fixes_1[_a];
|
|
772
|
-
output.writeln(output.dim(" " + fix));
|
|
773
|
-
}
|
|
774
|
-
}
|
|
775
|
-
else if (fixes.length > 0 && !showFix) {
|
|
776
|
-
output.writeln();
|
|
777
|
-
output.writeln(output.dim("Run with --fix to see " + fixes.length + " suggested fix" + (fixes.length > 1 ? 'es' : '')));
|
|
778
|
-
}
|
|
779
|
-
// Overall result
|
|
780
|
-
if (failed > 0) {
|
|
781
|
-
output.writeln();
|
|
782
|
-
output.writeln(output.error('Some checks failed. Please address the issues above.'));
|
|
783
|
-
return [2 /*return*/, { success: false, exitCode: 1, data: { passed: passed, warnings: warnings, failed: failed, results: results } }];
|
|
784
|
-
}
|
|
785
|
-
else if (warnings > 0) {
|
|
786
|
-
output.writeln();
|
|
787
|
-
output.writeln(output.warning('All checks passed with some warnings.'));
|
|
788
|
-
return [2 /*return*/, { success: true, data: { passed: passed, warnings: warnings, failed: failed, results: results } }];
|
|
789
|
-
}
|
|
790
|
-
else {
|
|
791
|
-
output.writeln();
|
|
792
|
-
output.writeln(output.success('All checks passed! System is healthy.'));
|
|
793
|
-
return [2 /*return*/, { success: true, data: { passed: passed, warnings: warnings, failed: failed, results: results } }];
|
|
794
|
-
}
|
|
795
|
-
return [2 /*return*/];
|
|
571
|
+
}
|
|
796
572
|
}
|
|
797
|
-
}
|
|
798
|
-
|
|
573
|
+
}
|
|
574
|
+
// Summary
|
|
575
|
+
const passed = results.filter(r => r.status === 'pass').length;
|
|
576
|
+
const warnings = results.filter(r => r.status === 'warn').length;
|
|
577
|
+
const failed = results.filter(r => r.status === 'fail').length;
|
|
578
|
+
output.writeln();
|
|
579
|
+
output.writeln(output.dim('─'.repeat(50)));
|
|
580
|
+
output.writeln();
|
|
581
|
+
const summaryParts = [
|
|
582
|
+
output.success(`${passed} passed`),
|
|
583
|
+
warnings > 0 ? output.warning(`${warnings} warnings`) : null,
|
|
584
|
+
failed > 0 ? output.error(`${failed} failed`) : null
|
|
585
|
+
].filter(Boolean);
|
|
586
|
+
output.writeln(`Summary: ${summaryParts.join(', ')}`);
|
|
587
|
+
// Show fixes
|
|
588
|
+
if (showFix && fixes.length > 0) {
|
|
589
|
+
output.writeln();
|
|
590
|
+
output.writeln(output.bold('Suggested Fixes:'));
|
|
591
|
+
output.writeln();
|
|
592
|
+
for (const fix of fixes) {
|
|
593
|
+
output.writeln(output.dim(` ${fix}`));
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
else if (fixes.length > 0 && !showFix) {
|
|
597
|
+
output.writeln();
|
|
598
|
+
output.writeln(output.dim(`Run with --fix to see ${fixes.length} suggested fix${fixes.length > 1 ? 'es' : ''}`));
|
|
599
|
+
}
|
|
600
|
+
// Overall result
|
|
601
|
+
if (failed > 0) {
|
|
602
|
+
output.writeln();
|
|
603
|
+
output.writeln(output.error('Some checks failed. Please address the issues above.'));
|
|
604
|
+
return { success: false, exitCode: 1, data: { passed, warnings, failed, results } };
|
|
605
|
+
}
|
|
606
|
+
else if (warnings > 0) {
|
|
607
|
+
output.writeln();
|
|
608
|
+
output.writeln(output.warning('All checks passed with some warnings.'));
|
|
609
|
+
return { success: true, data: { passed, warnings, failed, results } };
|
|
610
|
+
}
|
|
611
|
+
else {
|
|
612
|
+
output.writeln();
|
|
613
|
+
output.writeln(output.success('All checks passed! System is healthy.'));
|
|
614
|
+
return { success: true, data: { passed, warnings, failed, results } };
|
|
615
|
+
}
|
|
616
|
+
}
|
|
799
617
|
};
|
|
800
618
|
export default doctorCommand;
|
|
801
619
|
//# sourceMappingURL=doctor.js.map
|