claude-flow-novice 1.3.0 โ 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-flow-novice/preferences/generation.json +147 -0
- package/.claude-flow-novice/preferences/language-configs/javascript.json +51 -0
- package/.claude-flow-novice/preferences/language-configs/python.json +50 -0
- package/.claude-flow-novice/preferences/language-configs/rust.json +237 -0
- package/.claude-flow-novice/preferences/language-configs/typescript.json +54 -0
- package/.claude-flow-novice/preferences/project-local.json +91 -0
- package/.claude-flow-novice/preferences/resource-delegation.json +120 -0
- package/.claude-flow-novice/preferences/team-shared.json +195 -0
- package/.claude-flow-novice/preferences/user-global.json +247 -0
- package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-JAVASCRIPT.md +769 -0
- package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-PYTHON.md +1214 -0
- package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-RUST.md +475 -0
- package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-TYPESCRIPT.md +851 -0
- package/.claude-flow-novice/templates/claude-md-templates/README.md +263 -0
- package/CLAUDE.md +81 -0
- package/README-NPM.md +0 -0
- package/package.json +11 -7
- package/scripts/build/README.md +167 -0
- package/scripts/build/build-config.js +27 -0
- package/scripts/build/build-prompt-copier.sh +30 -0
- package/scripts/build/performance-monitor.js +869 -0
- package/scripts/build/prepare-publish.js +150 -0
- package/scripts/build/typescript-fixer.js +621 -0
- package/scripts/build/unified-builder.sh +428 -0
- package/scripts/build/update-bin-version.js +32 -0
- package/scripts/dev/README.md +264 -0
- package/scripts/dev/claude-flow-wrapper.sh +35 -0
- package/scripts/dev/claude-monitor.py +419 -0
- package/scripts/dev/claude-sparc.sh +562 -0
- package/scripts/dev/claude-wrapper.sh +17 -0
- package/scripts/dev/demo-phase3-compliance.js +172 -0
- package/scripts/dev/demo-task-system.ts +224 -0
- package/scripts/dev/deployment-validator.js +315 -0
- package/scripts/dev/spawn-claude-terminal.sh +32 -0
- package/scripts/dev/start-portal.sh +506 -0
- package/scripts/dev/start-web-ui.js +15 -0
- package/scripts/dev/stop-portal.sh +311 -0
- package/scripts/dev/validate-examples.ts +288 -0
- package/scripts/dev/validate-phase2.cjs +451 -0
- package/scripts/dev/validate-phase2.js +785 -0
- package/scripts/dev/validate-phase3.cjs +208 -0
- package/scripts/dev/validate-security-remediation.js +1 -0
- package/scripts/legacy/README.md +272 -0
- package/scripts/legacy/batch-fix-ts.sh +54 -0
- package/scripts/legacy/build-migration.sh +105 -0
- package/scripts/legacy/build-monitor.js +209 -0
- package/scripts/legacy/build-with-filter.sh +84 -0
- package/scripts/legacy/build-workaround.sh +71 -0
- package/scripts/legacy/fix-ts-advanced.js +358 -0
- package/scripts/legacy/fix-ts-final.sh +50 -0
- package/scripts/legacy/fix-ts-targeted.sh +49 -0
- package/scripts/legacy/fix-typescript-errors.js +305 -0
- package/scripts/legacy/force-build.sh +63 -0
- package/scripts/legacy/optimize-performance.js +400 -0
- package/scripts/legacy/performance-monitor.js +263 -0
- package/scripts/legacy/performance-monitoring.js +532 -0
- package/scripts/legacy/performance-test-runner.js +645 -0
- package/scripts/legacy/quick-fix-ts.js +281 -0
- package/scripts/legacy/safe-build.sh +63 -0
- package/scripts/migration/README.md +434 -0
- package/scripts/migration/install-arm64.js +78 -0
- package/scripts/migration/install.js +83 -0
- package/scripts/migration/migrate-hooks.js +173 -0
- package/scripts/migration/migration-examples.ts +318 -0
- package/scripts/optimization/build-optimizer.js +438 -0
- package/scripts/optimization/config-validator.js +761 -0
- package/scripts/optimization/test-optimization.js +432 -0
- package/scripts/optimization/unified-activation.js +839 -0
- package/scripts/performance/ACTIVATION_COMMANDS.md +292 -0
- package/scripts/performance/sqlite-enhanced-activation.sh +583 -0
- package/scripts/performance/test-enhanced-backend.sh +504 -0
- package/scripts/performance-test-runner.js +698 -0
- package/scripts/security/README.md +339 -0
- package/scripts/security/install-git-hooks.sh +132 -0
- package/scripts/security/ruv-swarm-safe.js +74 -0
- package/scripts/test/README.md +236 -0
- package/scripts/test/check-links.ts +274 -0
- package/scripts/test/check-performance-regression.ts +168 -0
- package/scripts/test/coverage-report.ts +692 -0
- package/scripts/test/generate-swarm-tests.js +633 -0
- package/scripts/test/integration-test-validation.cjs +253 -0
- package/scripts/test/load-test-swarm.js +576 -0
- package/scripts/test/run-phase3-compliance-tests.js +427 -0
- package/scripts/test/test-batch-tasks.ts +29 -0
- package/scripts/test/test-byzantine-resolution.js +246 -0
- package/scripts/test/test-claude-spawn-options.sh +63 -0
- package/scripts/test/test-cli-wizard.js +331 -0
- package/scripts/test/test-comprehensive.js +401 -0
- package/scripts/test/test-coordination-features.ts +238 -0
- package/scripts/test/test-fallback-systems.js +276 -0
- package/scripts/test/test-init-command.ts +302 -0
- package/scripts/test/test-mcp.ts +251 -0
- package/scripts/test/test-runner.ts +568 -0
- package/scripts/test/test-swarm-integration.sh +92 -0
- package/scripts/test/test-swarm.ts +142 -0
- package/scripts/test/validation-summary.ts +408 -0
- package/scripts/utils/README.md +261 -0
- package/scripts/utils/clean-build-artifacts.sh +94 -0
- package/scripts/utils/cleanup-root.sh +69 -0
- package/scripts/utils/fix-cliffy-imports.js +307 -0
- package/scripts/utils/fix-duplicate-imports.js +114 -0
- package/scripts/utils/fix-error-handling.cjs +70 -0
- package/scripts/utils/fix-import-paths.js +104 -0
- package/scripts/utils/fix-imports.js +116 -0
- package/scripts/utils/fix-shebang.js +78 -0
- package/scripts/utils/fix-test-modules.js +27 -0
- package/scripts/utils/fix-timezone-issue-246.js +200 -0
- package/scripts/utils/fix-ts-comprehensive.py +182 -0
- package/scripts/utils/fix-ts-targeted-batch.js +250 -0
- package/scripts/utils/remove-benchmark-conflicts.sh +140 -0
- package/scripts/utils/simple-test-fixer.js +190 -0
- package/scripts/utils/validate-metrics-structure.cjs +144 -0
- package/scripts/verify-mcp-server.js +86 -0
- package/src/cli/simple-commands/__tests__/agent.test.js +291 -0
- package/src/cli/simple-commands/__tests__/memory.test.js +8 -0
- package/src/cli/simple-commands/__tests__/swarm.test.js +371 -0
- package/src/cli/simple-commands/__tests__/task.test.js +8 -0
- package/src/cli/simple-commands/agent.js +216 -0
- package/src/cli/simple-commands/analysis.js +570 -0
- package/src/cli/simple-commands/automation-executor.js +1603 -0
- package/src/cli/simple-commands/automation.js +627 -0
- package/src/cli/simple-commands/batch-manager.js +338 -0
- package/src/cli/simple-commands/claude-telemetry.js +311 -0
- package/src/cli/simple-commands/claude-track.js +102 -0
- package/src/cli/simple-commands/concurrent-display.js +348 -0
- package/src/cli/simple-commands/config.js +319 -0
- package/src/cli/simple-commands/coordination.js +307 -0
- package/src/cli/simple-commands/enhanced-ui-views.js +654 -0
- package/src/cli/simple-commands/enhanced-webui-complete.js +1038 -0
- package/src/cli/simple-commands/fix-hook-variables.js +363 -0
- package/src/cli/simple-commands/github/gh-coordinator.js +605 -0
- package/src/cli/simple-commands/github/github-api.js +624 -0
- package/src/cli/simple-commands/github/init.js +543 -0
- package/src/cli/simple-commands/github.js +377 -0
- package/src/cli/simple-commands/goal.js +145 -0
- package/src/cli/simple-commands/hive-mind/auto-save-middleware.js +311 -0
- package/src/cli/simple-commands/hive-mind/communication.js +740 -0
- package/src/cli/simple-commands/hive-mind/core.js +1031 -0
- package/src/cli/simple-commands/hive-mind/db-optimizer.js +872 -0
- package/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1364 -0
- package/src/cli/simple-commands/hive-mind/memory.js +1292 -0
- package/src/cli/simple-commands/hive-mind/performance-optimizer.js +618 -0
- package/src/cli/simple-commands/hive-mind/performance-test.js +373 -0
- package/src/cli/simple-commands/hive-mind/queen.js +809 -0
- package/src/cli/simple-commands/hive-mind/session-manager.js +1223 -0
- package/src/cli/simple-commands/hive-mind-optimize.js +361 -0
- package/src/cli/simple-commands/hive-mind-wizard.js +281 -0
- package/src/cli/simple-commands/hive-mind.js +3112 -0
- package/src/cli/simple-commands/hive.js +140 -0
- package/src/cli/simple-commands/hook-safety.js +671 -0
- package/src/cli/simple-commands/hooks.js +1268 -0
- package/src/cli/simple-commands/init/.claude/checkpoints/1756224542.json +7 -0
- package/src/cli/simple-commands/init/.claude/checkpoints/1756224544.json +8 -0
- package/src/cli/simple-commands/init/README.md +106 -0
- package/src/cli/simple-commands/init/VALIDATION_ROLLBACK.md +488 -0
- package/src/cli/simple-commands/init/agent-copier.js +347 -0
- package/src/cli/simple-commands/init/batch-init.js +663 -0
- package/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +438 -0
- package/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +876 -0
- package/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +356 -0
- package/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +501 -0
- package/src/cli/simple-commands/init/claude-commands/slash-commands.js +57 -0
- package/src/cli/simple-commands/init/claude-commands/sparc-commands.js +296 -0
- package/src/cli/simple-commands/init/copy-revised-templates.js +175 -0
- package/src/cli/simple-commands/init/executable-wrapper.js +122 -0
- package/src/cli/simple-commands/init/gitignore-updater.js +137 -0
- package/src/cli/simple-commands/init/help.js +110 -0
- package/src/cli/simple-commands/init/hive-mind-init.js +749 -0
- package/src/cli/simple-commands/init/index.js +1953 -0
- package/src/cli/simple-commands/init/performance-monitor.js +344 -0
- package/src/cli/simple-commands/init/rollback/backup-manager.js +542 -0
- package/src/cli/simple-commands/init/rollback/index.js +399 -0
- package/src/cli/simple-commands/init/rollback/recovery-manager.js +778 -0
- package/src/cli/simple-commands/init/rollback/rollback-executor.js +521 -0
- package/src/cli/simple-commands/init/rollback/state-tracker.js +486 -0
- package/src/cli/simple-commands/init/sparc/roo-readme.js +61 -0
- package/src/cli/simple-commands/init/sparc/roomodes-config.js +102 -0
- package/src/cli/simple-commands/init/sparc/workflows.js +40 -0
- package/src/cli/simple-commands/init/sparc-structure.js +68 -0
- package/src/cli/simple-commands/init/template-copier.js +640 -0
- package/src/cli/simple-commands/init/templates/CLAUDE.md +1185 -0
- package/src/cli/simple-commands/init/templates/CLAUDE.md.optimized +265 -0
- package/src/cli/simple-commands/init/templates/claude-flow-universal +81 -0
- package/src/cli/simple-commands/init/templates/claude-flow.bat +18 -0
- package/src/cli/simple-commands/init/templates/claude-flow.ps1 +24 -0
- package/src/cli/simple-commands/init/templates/claude-md.js +1101 -0
- package/src/cli/simple-commands/init/templates/commands/analysis/bottleneck-detect.md +162 -0
- package/src/cli/simple-commands/init/templates/commands/automation/auto-agent.md +122 -0
- package/src/cli/simple-commands/init/templates/commands/coordination/swarm-init.md +85 -0
- package/src/cli/simple-commands/init/templates/commands/github/github-swarm.md +121 -0
- package/src/cli/simple-commands/init/templates/commands/helpers/standard-checkpoint-hooks.sh +179 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/notification.md +113 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/post-command.md +116 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/post-edit.md +117 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/post-task.md +112 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/pre-command.md +113 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/pre-edit.md +113 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/pre-search.md +112 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/pre-task.md +111 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/session-end.md +118 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/session-restore.md +118 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/session-start.md +117 -0
- package/src/cli/simple-commands/init/templates/coordination-md.js +340 -0
- package/src/cli/simple-commands/init/templates/coordination.md +16 -0
- package/src/cli/simple-commands/init/templates/enhanced-templates.js +2347 -0
- package/src/cli/simple-commands/init/templates/github-safe-enhanced.js +331 -0
- package/src/cli/simple-commands/init/templates/github-safe.js +106 -0
- package/src/cli/simple-commands/init/templates/memory-bank-md.js +259 -0
- package/src/cli/simple-commands/init/templates/memory-bank.md +16 -0
- package/src/cli/simple-commands/init/templates/readme-files.js +72 -0
- package/src/cli/simple-commands/init/templates/safe-hook-patterns.js +430 -0
- package/src/cli/simple-commands/init/templates/settings.json +109 -0
- package/src/cli/simple-commands/init/templates/settings.json.enhanced +35 -0
- package/src/cli/simple-commands/init/templates/sparc-modes.js +1401 -0
- package/src/cli/simple-commands/init/templates/verification-claude-md.js +432 -0
- package/src/cli/simple-commands/init/validation/config-validator.js +354 -0
- package/src/cli/simple-commands/init/validation/health-checker.js +599 -0
- package/src/cli/simple-commands/init/validation/index.js +388 -0
- package/src/cli/simple-commands/init/validation/mode-validator.js +387 -0
- package/src/cli/simple-commands/init/validation/post-init-validator.js +390 -0
- package/src/cli/simple-commands/init/validation/pre-init-validator.js +290 -0
- package/src/cli/simple-commands/init/validation/test-runner.js +488 -0
- package/src/cli/simple-commands/init.js +4 -0
- package/src/cli/simple-commands/mcp-health.js +163 -0
- package/src/cli/simple-commands/mcp-integration-layer.js +689 -0
- package/src/cli/simple-commands/mcp.js +420 -0
- package/src/cli/simple-commands/memory-consolidation.js +631 -0
- package/src/cli/simple-commands/memory.js +345 -0
- package/src/cli/simple-commands/migrate-hooks.js +63 -0
- package/src/cli/simple-commands/monitor.js +417 -0
- package/src/cli/simple-commands/neural.js +148 -0
- package/src/cli/simple-commands/pair-autofix-only.js +755 -0
- package/src/cli/simple-commands/pair-basic.js +751 -0
- package/src/cli/simple-commands/pair-old.js +623 -0
- package/src/cli/simple-commands/pair-working.js +849 -0
- package/src/cli/simple-commands/pair.js +849 -0
- package/src/cli/simple-commands/performance-hooks.js +149 -0
- package/src/cli/simple-commands/performance-metrics.js +601 -0
- package/src/cli/simple-commands/process-ui-enhanced.js +821 -0
- package/src/cli/simple-commands/process-ui.js +274 -0
- package/src/cli/simple-commands/realtime-update-system.js +659 -0
- package/src/cli/simple-commands/sparc/architecture.js +1750 -0
- package/src/cli/simple-commands/sparc/commands.js +575 -0
- package/src/cli/simple-commands/sparc/completion.js +1831 -0
- package/src/cli/simple-commands/sparc/coordinator.js +1045 -0
- package/src/cli/simple-commands/sparc/index.js +321 -0
- package/src/cli/simple-commands/sparc/phase-base.js +430 -0
- package/src/cli/simple-commands/sparc/pseudocode.js +984 -0
- package/src/cli/simple-commands/sparc/refinement.js +1856 -0
- package/src/cli/simple-commands/sparc/specification.js +736 -0
- package/src/cli/simple-commands/sparc-modes/architect.js +125 -0
- package/src/cli/simple-commands/sparc-modes/ask.js +126 -0
- package/src/cli/simple-commands/sparc-modes/code.js +148 -0
- package/src/cli/simple-commands/sparc-modes/debug.js +112 -0
- package/src/cli/simple-commands/sparc-modes/devops.js +137 -0
- package/src/cli/simple-commands/sparc-modes/docs-writer.js +38 -0
- package/src/cli/simple-commands/sparc-modes/generic.js +34 -0
- package/src/cli/simple-commands/sparc-modes/index.js +201 -0
- package/src/cli/simple-commands/sparc-modes/integration.js +55 -0
- package/src/cli/simple-commands/sparc-modes/mcp.js +38 -0
- package/src/cli/simple-commands/sparc-modes/monitoring.js +38 -0
- package/src/cli/simple-commands/sparc-modes/optimization.js +38 -0
- package/src/cli/simple-commands/sparc-modes/security-review.js +130 -0
- package/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +167 -0
- package/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +38 -0
- package/src/cli/simple-commands/sparc-modes/supabase-admin.js +149 -0
- package/src/cli/simple-commands/sparc-modes/swarm.js +436 -0
- package/src/cli/simple-commands/sparc-modes/tdd.js +112 -0
- package/src/cli/simple-commands/sparc-modes/tutorial.js +277 -0
- package/src/cli/simple-commands/sparc.js +530 -0
- package/src/cli/simple-commands/start-ui.js +147 -0
- package/src/cli/simple-commands/start-wrapper.js +285 -0
- package/src/cli/simple-commands/start.js +2 -0
- package/src/cli/simple-commands/status.js +303 -0
- package/src/cli/simple-commands/stream-chain-clean.js +221 -0
- package/src/cli/simple-commands/stream-chain-fixed.js +89 -0
- package/src/cli/simple-commands/stream-chain-real.js +408 -0
- package/src/cli/simple-commands/stream-chain-working.js +323 -0
- package/src/cli/simple-commands/stream-chain.js +491 -0
- package/src/cli/simple-commands/stream-processor.js +340 -0
- package/src/cli/simple-commands/swarm-executor.js +253 -0
- package/src/cli/simple-commands/swarm-metrics-integration.js +371 -0
- package/src/cli/simple-commands/swarm-ui.js +741 -0
- package/src/cli/simple-commands/swarm-webui-integration.js +311 -0
- package/src/cli/simple-commands/swarm.js +2277 -0
- package/src/cli/simple-commands/task.js +228 -0
- package/src/cli/simple-commands/templates/mle-star-workflow.json +294 -0
- package/src/cli/simple-commands/timestamp-fix.js +104 -0
- package/src/cli/simple-commands/token-tracker.js +372 -0
- package/src/cli/simple-commands/tool-execution-framework.js +555 -0
- package/src/cli/simple-commands/train-and-stream.js +354 -0
- package/src/cli/simple-commands/training-pipeline.js +874 -0
- package/src/cli/simple-commands/training.js +288 -0
- package/src/cli/simple-commands/verification-hooks.js +336 -0
- package/src/cli/simple-commands/verification-integration.js +464 -0
- package/src/cli/simple-commands/verification-training-integration.js +646 -0
- package/src/cli/simple-commands/verification.js +551 -0
- package/src/cli/simple-commands/web-server.js +929 -0
- package/src/cli/simple-commands/webui-validator.js +136 -0
- package/src/language/README.md +503 -0
- package/src/language/claude-md-generator.js +618 -0
- package/src/language/cli.js +422 -0
- package/src/language/example.js +347 -0
- package/src/language/integration-system.js +619 -0
- package/src/language/language-detector.js +581 -0
|
@@ -0,0 +1,488 @@
|
|
|
1
|
+
// test-runner.js - Test runner for validation and rollback systems
|
|
2
|
+
|
|
3
|
+
import { ValidationSystem } from './index.js';
|
|
4
|
+
import { promises as fs } from 'fs';
|
|
5
|
+
import { RollbackSystem } from '../rollback/index.js';
|
|
6
|
+
import { printSuccess, printError, printWarning } from '../../../utils.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Test runner for validation and rollback systems
|
|
10
|
+
*/
|
|
11
|
+
export class ValidationTestRunner {
|
|
12
|
+
constructor(workingDir) {
|
|
13
|
+
this.workingDir = workingDir;
|
|
14
|
+
this.validationSystem = new ValidationSystem(workingDir);
|
|
15
|
+
this.rollbackSystem = new RollbackSystem(workingDir);
|
|
16
|
+
this.testResults = [];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Run all validation and rollback tests
|
|
21
|
+
*/
|
|
22
|
+
async runAllTests() {
|
|
23
|
+
console.log('๐งช Running validation and rollback system tests...');
|
|
24
|
+
|
|
25
|
+
const tests = [
|
|
26
|
+
{ name: 'Pre-init Validation', test: () => this.testPreInitValidation() },
|
|
27
|
+
{ name: 'Post-init Validation', test: () => this.testPostInitValidation() },
|
|
28
|
+
{ name: 'Configuration Validation', test: () => this.testConfigValidation() },
|
|
29
|
+
{ name: 'Mode Functionality', test: () => this.testModeFunctionality() },
|
|
30
|
+
{ name: 'Health Checks', test: () => this.testHealthChecks() },
|
|
31
|
+
{ name: 'Backup System', test: () => this.testBackupSystem() },
|
|
32
|
+
{ name: 'Rollback System', test: () => this.testRollbackSystem() },
|
|
33
|
+
{ name: 'State Tracking', test: () => this.testStateTracking() },
|
|
34
|
+
{ name: 'Recovery Procedures', test: () => this.testRecoveryProcedures() },
|
|
35
|
+
{ name: 'Atomic Operations', test: () => this.testAtomicOperations() },
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
for (const testCase of tests) {
|
|
39
|
+
console.log(`\n๐ฌ Testing: ${testCase.name}`);
|
|
40
|
+
|
|
41
|
+
try {
|
|
42
|
+
const result = await testCase.test();
|
|
43
|
+
this.testResults.push({
|
|
44
|
+
name: testCase.name,
|
|
45
|
+
success: result.success,
|
|
46
|
+
details: result,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
if (result.success) {
|
|
50
|
+
printSuccess(`โ
${testCase.name} passed`);
|
|
51
|
+
} else {
|
|
52
|
+
printError(`โ ${testCase.name} failed`);
|
|
53
|
+
if (result.errors) {
|
|
54
|
+
result.errors.forEach((error) => console.error(` - ${error}`));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
} catch (error) {
|
|
58
|
+
this.testResults.push({
|
|
59
|
+
name: testCase.name,
|
|
60
|
+
success: false,
|
|
61
|
+
error: error.message,
|
|
62
|
+
});
|
|
63
|
+
printError(`โ ${testCase.name} threw exception: ${error.message}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
this.generateTestReport();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Test pre-initialization validation
|
|
72
|
+
*/
|
|
73
|
+
async testPreInitValidation() {
|
|
74
|
+
const result = { success: true, errors: [], details: {} };
|
|
75
|
+
|
|
76
|
+
try {
|
|
77
|
+
// Test with normal conditions
|
|
78
|
+
const normalValidation = await this.validationSystem.validatePreInit();
|
|
79
|
+
result.details.normal = normalValidation;
|
|
80
|
+
|
|
81
|
+
if (!normalValidation.success && normalValidation.errors.length > 0) {
|
|
82
|
+
// Some failures are expected in test environment
|
|
83
|
+
result.details.expectedFailures = normalValidation.errors;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Test with force flag
|
|
87
|
+
const forceValidation = await this.validationSystem.validatePreInit({ force: true });
|
|
88
|
+
result.details.force = forceValidation;
|
|
89
|
+
|
|
90
|
+
result.success = true; // Pre-init validation tested successfully
|
|
91
|
+
} catch (error) {
|
|
92
|
+
result.success = false;
|
|
93
|
+
result.errors.push(`Pre-init validation test failed: ${error.message}`);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Test post-initialization validation
|
|
101
|
+
*/
|
|
102
|
+
async testPostInitValidation() {
|
|
103
|
+
const result = { success: true, errors: [], details: {} };
|
|
104
|
+
|
|
105
|
+
try {
|
|
106
|
+
// Create minimal test files for validation
|
|
107
|
+
await this.createTestFiles();
|
|
108
|
+
|
|
109
|
+
const postValidation = await this.validationSystem.validatePostInit();
|
|
110
|
+
result.details.postValidation = postValidation;
|
|
111
|
+
|
|
112
|
+
// Clean up test files
|
|
113
|
+
await this.cleanupTestFiles();
|
|
114
|
+
|
|
115
|
+
result.success = true;
|
|
116
|
+
} catch (error) {
|
|
117
|
+
result.success = false;
|
|
118
|
+
result.errors.push(`Post-init validation test failed: ${error.message}`);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return result;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Test configuration validation
|
|
126
|
+
*/
|
|
127
|
+
async testConfigValidation() {
|
|
128
|
+
const result = { success: true, errors: [], details: {} };
|
|
129
|
+
|
|
130
|
+
try {
|
|
131
|
+
// Create test configuration files
|
|
132
|
+
await this.createTestConfigs();
|
|
133
|
+
|
|
134
|
+
const configValidation = await this.validationSystem.validateConfiguration();
|
|
135
|
+
result.details.configValidation = configValidation;
|
|
136
|
+
|
|
137
|
+
// Clean up test configs
|
|
138
|
+
await this.cleanupTestConfigs();
|
|
139
|
+
|
|
140
|
+
result.success = true;
|
|
141
|
+
} catch (error) {
|
|
142
|
+
result.success = false;
|
|
143
|
+
result.errors.push(`Config validation test failed: ${error.message}`);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Test mode functionality
|
|
151
|
+
*/
|
|
152
|
+
async testModeFunctionality() {
|
|
153
|
+
const result = { success: true, errors: [], details: {} };
|
|
154
|
+
|
|
155
|
+
try {
|
|
156
|
+
// Create test SPARC configuration
|
|
157
|
+
await this.createTestSparcConfig();
|
|
158
|
+
|
|
159
|
+
const modeTests = await this.validationSystem.testModeFunctionality();
|
|
160
|
+
result.details.modeTests = modeTests;
|
|
161
|
+
|
|
162
|
+
// Clean up test SPARC config
|
|
163
|
+
await this.cleanupTestSparcConfig();
|
|
164
|
+
|
|
165
|
+
result.success = true;
|
|
166
|
+
} catch (error) {
|
|
167
|
+
result.success = false;
|
|
168
|
+
result.errors.push(`Mode functionality test failed: ${error.message}`);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
return result;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Test health checks
|
|
176
|
+
*/
|
|
177
|
+
async testHealthChecks() {
|
|
178
|
+
const result = { success: true, errors: [], details: {} };
|
|
179
|
+
|
|
180
|
+
try {
|
|
181
|
+
const healthChecks = await this.validationSystem.runHealthChecks();
|
|
182
|
+
result.details.healthChecks = healthChecks;
|
|
183
|
+
|
|
184
|
+
result.success = true;
|
|
185
|
+
} catch (error) {
|
|
186
|
+
result.success = false;
|
|
187
|
+
result.errors.push(`Health checks test failed: ${error.message}`);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return result;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Test backup system
|
|
195
|
+
*/
|
|
196
|
+
async testBackupSystem() {
|
|
197
|
+
const result = { success: true, errors: [], details: {} };
|
|
198
|
+
|
|
199
|
+
try {
|
|
200
|
+
// Test backup creation
|
|
201
|
+
const backupResult = await this.rollbackSystem.backupManager.createBackup(
|
|
202
|
+
'test',
|
|
203
|
+
'Test backup',
|
|
204
|
+
);
|
|
205
|
+
result.details.backupCreation = backupResult;
|
|
206
|
+
|
|
207
|
+
if (!backupResult.success) {
|
|
208
|
+
result.success = false;
|
|
209
|
+
result.errors.push('Backup creation failed');
|
|
210
|
+
return result;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Test backup listing
|
|
214
|
+
const backups = await this.rollbackSystem.backupManager.listBackups();
|
|
215
|
+
result.details.backupListing = { count: backups.length };
|
|
216
|
+
|
|
217
|
+
// Test backup deletion
|
|
218
|
+
if (backupResult.id) {
|
|
219
|
+
const deleteResult = await this.rollbackSystem.backupManager.deleteBackup(backupResult.id);
|
|
220
|
+
result.details.backupDeletion = deleteResult;
|
|
221
|
+
|
|
222
|
+
if (!deleteResult.success) {
|
|
223
|
+
result.errors.push('Backup deletion failed');
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
} catch (error) {
|
|
227
|
+
result.success = false;
|
|
228
|
+
result.errors.push(`Backup system test failed: ${error.message}`);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
return result;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Test rollback system
|
|
236
|
+
*/
|
|
237
|
+
async testRollbackSystem() {
|
|
238
|
+
const result = { success: true, errors: [], details: {} };
|
|
239
|
+
|
|
240
|
+
try {
|
|
241
|
+
// Test rollback system validation
|
|
242
|
+
const rollbackValidation = await this.rollbackSystem.validateRollbackSystem();
|
|
243
|
+
result.details.rollbackValidation = rollbackValidation;
|
|
244
|
+
|
|
245
|
+
if (!rollbackValidation.success) {
|
|
246
|
+
result.errors.push(...rollbackValidation.errors);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Test rollback point listing
|
|
250
|
+
const rollbackPoints = await this.rollbackSystem.listRollbackPoints();
|
|
251
|
+
result.details.rollbackPoints = {
|
|
252
|
+
count: rollbackPoints.rollbackPoints.length,
|
|
253
|
+
checkpoints: rollbackPoints.checkpoints.length,
|
|
254
|
+
};
|
|
255
|
+
} catch (error) {
|
|
256
|
+
result.success = false;
|
|
257
|
+
result.errors.push(`Rollback system test failed: ${error.message}`);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
return result;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Test state tracking
|
|
265
|
+
*/
|
|
266
|
+
async testStateTracking() {
|
|
267
|
+
const result = { success: true, errors: [], details: {} };
|
|
268
|
+
|
|
269
|
+
try {
|
|
270
|
+
const stateTracker = this.rollbackSystem.stateTracker;
|
|
271
|
+
|
|
272
|
+
// Test checkpoint creation
|
|
273
|
+
const checkpoint = await stateTracker.createCheckpoint('test-phase', { test: true });
|
|
274
|
+
result.details.checkpointCreation = checkpoint;
|
|
275
|
+
|
|
276
|
+
if (!checkpoint.success) {
|
|
277
|
+
result.errors.push('Checkpoint creation failed');
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// Test rollback point recording
|
|
281
|
+
const rollbackPoint = await stateTracker.recordRollbackPoint('test', { testData: true });
|
|
282
|
+
result.details.rollbackPointCreation = rollbackPoint;
|
|
283
|
+
|
|
284
|
+
if (!rollbackPoint.success) {
|
|
285
|
+
result.errors.push('Rollback point creation failed');
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// Test state validation
|
|
289
|
+
const stateValidation = await stateTracker.validateStateTracking();
|
|
290
|
+
result.details.stateValidation = stateValidation;
|
|
291
|
+
|
|
292
|
+
if (!stateValidation.success) {
|
|
293
|
+
result.errors.push(...stateValidation.errors);
|
|
294
|
+
}
|
|
295
|
+
} catch (error) {
|
|
296
|
+
result.success = false;
|
|
297
|
+
result.errors.push(`State tracking test failed: ${error.message}`);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
return result;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* Test recovery procedures
|
|
305
|
+
*/
|
|
306
|
+
async testRecoveryProcedures() {
|
|
307
|
+
const result = { success: true, errors: [], details: {} };
|
|
308
|
+
|
|
309
|
+
try {
|
|
310
|
+
const recoveryManager = this.rollbackSystem.recoveryManager;
|
|
311
|
+
|
|
312
|
+
// Test recovery system validation
|
|
313
|
+
const recoveryValidation = await recoveryManager.validateRecoverySystem();
|
|
314
|
+
result.details.recoveryValidation = recoveryValidation;
|
|
315
|
+
|
|
316
|
+
if (!recoveryValidation.success) {
|
|
317
|
+
result.errors.push(...recoveryValidation.errors);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// Test generic recovery
|
|
321
|
+
const genericRecovery = await recoveryManager.performRecovery('test-failure', { test: true });
|
|
322
|
+
result.details.genericRecovery = genericRecovery;
|
|
323
|
+
} catch (error) {
|
|
324
|
+
result.success = false;
|
|
325
|
+
result.errors.push(`Recovery procedures test failed: ${error.message}`);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
return result;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* Test atomic operations
|
|
333
|
+
*/
|
|
334
|
+
async testAtomicOperations() {
|
|
335
|
+
const result = { success: true, errors: [], details: {} };
|
|
336
|
+
|
|
337
|
+
try {
|
|
338
|
+
const { createAtomicOperation } = await import('../rollback/index.js');
|
|
339
|
+
|
|
340
|
+
// Test atomic operation creation
|
|
341
|
+
const atomicOp = createAtomicOperation(this.rollbackSystem, 'test-operation');
|
|
342
|
+
|
|
343
|
+
// Test begin
|
|
344
|
+
const beginResult = await atomicOp.begin();
|
|
345
|
+
result.details.atomicBegin = { success: beginResult };
|
|
346
|
+
|
|
347
|
+
if (!beginResult) {
|
|
348
|
+
result.errors.push('Atomic operation begin failed');
|
|
349
|
+
return result;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
// Test commit
|
|
353
|
+
await atomicOp.commit();
|
|
354
|
+
result.details.atomicCommit = { success: true };
|
|
355
|
+
} catch (error) {
|
|
356
|
+
result.success = false;
|
|
357
|
+
result.errors.push(`Atomic operations test failed: ${error.message}`);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
return result;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* Generate test report
|
|
365
|
+
*/
|
|
366
|
+
generateTestReport() {
|
|
367
|
+
console.log('\n' + '='.repeat(60));
|
|
368
|
+
console.log('๐งช VALIDATION & ROLLBACK SYSTEM TEST REPORT');
|
|
369
|
+
console.log('='.repeat(60));
|
|
370
|
+
|
|
371
|
+
const passed = this.testResults.filter((test) => test.success).length;
|
|
372
|
+
const failed = this.testResults.filter((test) => !test.success).length;
|
|
373
|
+
const total = this.testResults.length;
|
|
374
|
+
|
|
375
|
+
console.log(`\n๐ Summary: ${passed}/${total} tests passed`);
|
|
376
|
+
|
|
377
|
+
if (failed === 0) {
|
|
378
|
+
printSuccess('๐ All tests passed!');
|
|
379
|
+
} else {
|
|
380
|
+
printError(`โ ${failed} tests failed`);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
console.log('\n๐ Test Results:');
|
|
384
|
+
this.testResults.forEach((test) => {
|
|
385
|
+
const status = test.success ? 'โ
' : 'โ';
|
|
386
|
+
console.log(` ${status} ${test.name}`);
|
|
387
|
+
|
|
388
|
+
if (!test.success && test.error) {
|
|
389
|
+
console.log(` Error: ${test.error}`);
|
|
390
|
+
}
|
|
391
|
+
});
|
|
392
|
+
|
|
393
|
+
console.log('\n' + '='.repeat(60));
|
|
394
|
+
|
|
395
|
+
// Overall system health assessment
|
|
396
|
+
const healthScore = (passed / total) * 100;
|
|
397
|
+
console.log(`\n๐ฅ System Health Score: ${healthScore.toFixed(1)}%`);
|
|
398
|
+
|
|
399
|
+
if (healthScore >= 90) {
|
|
400
|
+
printSuccess('๐ข Excellent - System is fully operational');
|
|
401
|
+
} else if (healthScore >= 70) {
|
|
402
|
+
printWarning('๐ก Good - System is mostly operational with minor issues');
|
|
403
|
+
} else if (healthScore >= 50) {
|
|
404
|
+
printWarning('๐ Fair - System has some significant issues');
|
|
405
|
+
} else {
|
|
406
|
+
printError('๐ด Poor - System has major issues requiring attention');
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
// Helper methods for creating test files
|
|
411
|
+
|
|
412
|
+
async createTestFiles() {
|
|
413
|
+
try {
|
|
414
|
+
await fs.mkdir(`${this.workingDir}/test-temp`, { recursive: true });
|
|
415
|
+
await fs.writeFile(`${this.workingDir}/test-temp/CLAUDE.md`, '# Test CLAUDE.md', 'utf8');
|
|
416
|
+
await fs.writeFile(
|
|
417
|
+
`${this.workingDir}/test-temp/memory-bank.md`,
|
|
418
|
+
'# Test Memory Bank',
|
|
419
|
+
'utf8',
|
|
420
|
+
);
|
|
421
|
+
} catch {
|
|
422
|
+
// Test files creation failed - not critical for testing
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
async cleanupTestFiles() {
|
|
427
|
+
try {
|
|
428
|
+
await fs.unlink(`${this.workingDir}/test-temp`, { recursive: true });
|
|
429
|
+
} catch {
|
|
430
|
+
// Cleanup failed - not critical
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
async createTestConfigs() {
|
|
435
|
+
try {
|
|
436
|
+
const testConfig = {
|
|
437
|
+
version: '1.0',
|
|
438
|
+
modes: {
|
|
439
|
+
'test-mode': {
|
|
440
|
+
description: 'Test mode for validation',
|
|
441
|
+
},
|
|
442
|
+
},
|
|
443
|
+
};
|
|
444
|
+
|
|
445
|
+
await fs.writeFile(
|
|
446
|
+
`${this.workingDir}/test-roomodes`,
|
|
447
|
+
JSON.stringify(testConfig, null, 2, 'utf8'),
|
|
448
|
+
);
|
|
449
|
+
} catch {
|
|
450
|
+
// Test config creation failed - not critical
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
async cleanupTestConfigs() {
|
|
455
|
+
try {
|
|
456
|
+
await fs.unlink(`${this.workingDir}/test-roomodes`);
|
|
457
|
+
} catch {
|
|
458
|
+
// Cleanup failed - not critical
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
async createTestSparcConfig() {
|
|
463
|
+
try {
|
|
464
|
+
await this.createTestConfigs();
|
|
465
|
+
await fs.mkdir(`${this.workingDir}/test-roo`, { recursive: true });
|
|
466
|
+
} catch {
|
|
467
|
+
// Test SPARC config creation failed - not critical
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
async cleanupTestSparcConfig() {
|
|
472
|
+
try {
|
|
473
|
+
await this.cleanupTestConfigs();
|
|
474
|
+
await fs.unlink(`${this.workingDir}/test-roo`, { recursive: true });
|
|
475
|
+
} catch {
|
|
476
|
+
// Cleanup failed - not critical
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* Run validation and rollback tests
|
|
483
|
+
*/
|
|
484
|
+
export async function runValidationTests(workingDir) {
|
|
485
|
+
const testRunner = new ValidationTestRunner(workingDir);
|
|
486
|
+
await testRunner.runAllTests();
|
|
487
|
+
return testRunner.testResults;
|
|
488
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
// MCP Health Check Command
|
|
2
|
+
// Provides comprehensive health monitoring for MCP configuration
|
|
3
|
+
// Uses the bulletproof MCP configuration manager for diagnostics
|
|
4
|
+
|
|
5
|
+
import { printSuccess, printWarning, printError } from '../utils.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* MCP Health Check Command
|
|
9
|
+
* Provides detailed health assessment of MCP configuration
|
|
10
|
+
*/
|
|
11
|
+
export async function mcpHealthCommand(subArgs, flags) {
|
|
12
|
+
// Show help if requested
|
|
13
|
+
if (flags.help || flags.h || subArgs.includes('--help') || subArgs.includes('-h')) {
|
|
14
|
+
console.log(`
|
|
15
|
+
๐ฅ MCP Health Check
|
|
16
|
+
|
|
17
|
+
Usage: claude-flow-novice mcp health [options]
|
|
18
|
+
|
|
19
|
+
Options:
|
|
20
|
+
--verbose Show detailed diagnostic information
|
|
21
|
+
--fix Automatically fix detected issues
|
|
22
|
+
--dry-run Preview fixes without applying changes
|
|
23
|
+
--help, -h Show this help message
|
|
24
|
+
|
|
25
|
+
This command performs a comprehensive health check of your MCP configuration:
|
|
26
|
+
โข Detects broken server configurations
|
|
27
|
+
โข Identifies conflicts between local and project configs
|
|
28
|
+
โข Validates Claude Code CLI installation
|
|
29
|
+
โข Tests MCP server connectivity
|
|
30
|
+
โข Provides actionable recommendations
|
|
31
|
+
|
|
32
|
+
The health check is safe and read-only by default. Use --fix to automatically
|
|
33
|
+
resolve detected issues with full backup and rollback protection.
|
|
34
|
+
`.trim());
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const options = {
|
|
39
|
+
verbose: flags.verbose || false,
|
|
40
|
+
autoFix: flags.fix || false,
|
|
41
|
+
dryRun: flags['dry-run'] || false
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
console.log('๐ฅ Running MCP health check...');
|
|
45
|
+
|
|
46
|
+
try {
|
|
47
|
+
// Import the bulletproof MCP configuration manager
|
|
48
|
+
const { quickMcpHealthCheck, enhancedMcpInit } = await import('../mcp/mcp-config-manager.js');
|
|
49
|
+
|
|
50
|
+
// Run comprehensive health check
|
|
51
|
+
const healthResult = await quickMcpHealthCheck(options);
|
|
52
|
+
|
|
53
|
+
// Display results using the enhanced UX
|
|
54
|
+
try {
|
|
55
|
+
const { displayHealthCheckResults } = await import('./mcp-user-experience.js');
|
|
56
|
+
displayHealthCheckResults(healthResult, options);
|
|
57
|
+
} catch (uxError) {
|
|
58
|
+
// Fallback to basic output if UX module isn't available
|
|
59
|
+
displayBasicHealthResults(healthResult, options);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// If issues were found and fix is requested, run the bulletproof setup
|
|
63
|
+
if (!healthResult.healthy && options.autoFix) {
|
|
64
|
+
console.log('\n๐ ๏ธ Attempting to fix detected issues...');
|
|
65
|
+
|
|
66
|
+
const fixResult = await enhancedMcpInit({
|
|
67
|
+
verbose: options.verbose,
|
|
68
|
+
autoFix: true,
|
|
69
|
+
dryRun: options.dryRun,
|
|
70
|
+
enhancedUx: true
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
if (fixResult.success) {
|
|
74
|
+
printSuccess('๐ All issues have been automatically resolved!');
|
|
75
|
+
console.log(' โข Run health check again to verify: npx claude-flow-novice mcp health');
|
|
76
|
+
} else {
|
|
77
|
+
printWarning('โ ๏ธ Some issues could not be automatically resolved');
|
|
78
|
+
if (fixResult.recovery && fixResult.recovery.recommendedActions) {
|
|
79
|
+
console.log('\n๐ ๏ธ Manual actions required:');
|
|
80
|
+
fixResult.recovery.recommendedActions.slice(0, 3).forEach((action, i) => {
|
|
81
|
+
console.log(` ${i + 1}. ${action}`);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
} else if (!healthResult.healthy && !options.autoFix) {
|
|
86
|
+
console.log('\n๐ก To automatically fix issues, run:');
|
|
87
|
+
console.log(' npx claude-flow-novice mcp health --fix');
|
|
88
|
+
console.log('\n Or preview fixes with:');
|
|
89
|
+
console.log(' npx claude-flow-novice mcp health --fix --dry-run');
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Exit with appropriate code
|
|
93
|
+
process.exit(healthResult.healthy ? 0 : 1);
|
|
94
|
+
|
|
95
|
+
} catch (error) {
|
|
96
|
+
printError(`Health check failed: ${error.message}`);
|
|
97
|
+
|
|
98
|
+
if (options.verbose) {
|
|
99
|
+
console.error('\n๐ Stack trace:');
|
|
100
|
+
console.error(error.stack);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
console.log('\n๐ Troubleshooting:');
|
|
104
|
+
console.log(' โข Ensure claude-flow-novice is properly installed');
|
|
105
|
+
console.log(' โข Check if Claude Code CLI is installed: claude --version');
|
|
106
|
+
console.log(' โข Try running: npx claude-flow-novice init --force');
|
|
107
|
+
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Basic health results display (fallback when UX module isn't available)
|
|
114
|
+
*/
|
|
115
|
+
function displayBasicHealthResults(results, options) {
|
|
116
|
+
console.log('\n๐ Health Check Results:');
|
|
117
|
+
console.log('โ'.repeat(40));
|
|
118
|
+
|
|
119
|
+
const healthIcon = results.healthy ? 'โ
' : results.needsAttention ? 'โ ๏ธ' : 'โ';
|
|
120
|
+
const healthStatus = results.healthy ? 'Healthy' : 'Needs Attention';
|
|
121
|
+
|
|
122
|
+
console.log(`Overall Status: ${healthIcon} ${healthStatus}`);
|
|
123
|
+
|
|
124
|
+
if (results.healthScore !== undefined) {
|
|
125
|
+
console.log(`Health Score: ${results.healthScore}/100`);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (results.state) {
|
|
129
|
+
console.log('\nConfiguration Status:');
|
|
130
|
+
console.log(` Claude Code: ${results.state.claudeCodeInstalled ? 'โ
' : 'โ'}`);
|
|
131
|
+
console.log(` Local Config: ${results.state.hasLocalConfig ? 'โ
' : 'โ'}`);
|
|
132
|
+
console.log(` Project Config: ${results.state.hasProjectConfig ? 'โ
' : 'โ'}`);
|
|
133
|
+
|
|
134
|
+
if (results.state.brokenPaths && results.state.brokenPaths.length > 0) {
|
|
135
|
+
console.log('\nโ Issues Found:');
|
|
136
|
+
results.state.brokenPaths.forEach(broken => {
|
|
137
|
+
console.log(` โข ${broken.serverName}: ${broken.issues ? broken.issues.join(', ') : 'Configuration issues'}`);
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
if (results.state.conflictingServers && results.state.conflictingServers.length > 0) {
|
|
142
|
+
console.log('\nโ ๏ธ Configuration Conflicts:');
|
|
143
|
+
results.state.conflictingServers.forEach(conflict => {
|
|
144
|
+
console.log(` โข ${conflict.serverName}: Local vs Project configuration`);
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (results.verification && results.verification.tests) {
|
|
150
|
+
console.log('\n๐งช Verification Tests:');
|
|
151
|
+
results.verification.tests.forEach(test => {
|
|
152
|
+
const status = test.passed ? 'โ
' : 'โ';
|
|
153
|
+
console.log(` ${status} ${test.name}`);
|
|
154
|
+
if (options.verbose && test.details) {
|
|
155
|
+
console.log(` ${test.details}`);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
console.log('โ'.repeat(40));
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export default mcpHealthCommand;
|