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,387 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
// mode-validator.js - SPARC mode functionality testing
|
|
3
|
+
|
|
4
|
+
export class ModeValidator {
|
|
5
|
+
constructor(workingDir) {
|
|
6
|
+
this.workingDir = workingDir;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Test all SPARC modes for basic functionality
|
|
11
|
+
*/
|
|
12
|
+
async testAllModes() {
|
|
13
|
+
const result = {
|
|
14
|
+
success: true,
|
|
15
|
+
errors: [],
|
|
16
|
+
warnings: [],
|
|
17
|
+
modes: {},
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
try {
|
|
21
|
+
// First, check if SPARC is initialized
|
|
22
|
+
const sparcInitialized = await this.checkSparcInitialization();
|
|
23
|
+
if (!sparcInitialized.initialized) {
|
|
24
|
+
result.warnings.push('SPARC not initialized - mode testing skipped');
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Get available modes
|
|
29
|
+
const availableModes = await this.getAvailableModes();
|
|
30
|
+
if (availableModes.length === 0) {
|
|
31
|
+
result.warnings.push('No SPARC modes found for testing');
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Test each mode
|
|
36
|
+
for (const mode of availableModes) {
|
|
37
|
+
const modeTest = await this.testMode(mode);
|
|
38
|
+
result.modes[mode] = modeTest;
|
|
39
|
+
|
|
40
|
+
if (!modeTest.success) {
|
|
41
|
+
result.success = false;
|
|
42
|
+
result.errors.push(`Mode ${mode} failed testing: ${modeTest.error}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
} catch (error) {
|
|
46
|
+
result.success = false;
|
|
47
|
+
result.errors.push(`Mode testing failed: ${error.message}`);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Test a specific SPARC mode
|
|
55
|
+
*/
|
|
56
|
+
async testMode(modeName) {
|
|
57
|
+
const result = {
|
|
58
|
+
success: true,
|
|
59
|
+
error: null,
|
|
60
|
+
checks: {
|
|
61
|
+
accessible: false,
|
|
62
|
+
configValid: false,
|
|
63
|
+
executable: false,
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
try {
|
|
68
|
+
// Test 1: Check if mode is accessible via CLI
|
|
69
|
+
const accessTest = await this.testModeAccess(modeName);
|
|
70
|
+
result.checks.accessible = accessTest.success;
|
|
71
|
+
if (!accessTest.success) {
|
|
72
|
+
result.success = false;
|
|
73
|
+
result.error = accessTest.error;
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Test 2: Validate mode configuration
|
|
78
|
+
const configTest = await this.testModeConfig(modeName);
|
|
79
|
+
result.checks.configValid = configTest.success;
|
|
80
|
+
if (!configTest.success) {
|
|
81
|
+
result.success = false;
|
|
82
|
+
result.error = configTest.error;
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Test 3: Test mode execution (dry run)
|
|
87
|
+
const execTest = await this.testModeExecution(modeName);
|
|
88
|
+
result.checks.executable = execTest.success;
|
|
89
|
+
if (!execTest.success) {
|
|
90
|
+
result.success = false;
|
|
91
|
+
result.error = execTest.error;
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
94
|
+
} catch (error) {
|
|
95
|
+
result.success = false;
|
|
96
|
+
result.error = error.message;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Check if SPARC is properly initialized
|
|
104
|
+
*/
|
|
105
|
+
async checkSparcInitialization() {
|
|
106
|
+
const result = {
|
|
107
|
+
initialized: false,
|
|
108
|
+
hasRoomodes: false,
|
|
109
|
+
hasExecutable: false,
|
|
110
|
+
error: null,
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
try {
|
|
114
|
+
// Check for .roomodes file
|
|
115
|
+
try {
|
|
116
|
+
const stat = await Deno.stat(`${this.workingDir}/.roomodes`);
|
|
117
|
+
result.hasRoomodes = stat.isFile;
|
|
118
|
+
} catch {
|
|
119
|
+
result.error = '.roomodes file not found';
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Check for claude-flow executable
|
|
123
|
+
try {
|
|
124
|
+
const stat = await Deno.stat(`${this.workingDir}/claude-flow`);
|
|
125
|
+
result.hasExecutable = stat.isFile;
|
|
126
|
+
} catch {
|
|
127
|
+
result.error = 'claude-flow executable not found';
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
result.initialized = result.hasRoomodes && result.hasExecutable;
|
|
131
|
+
} catch (error) {
|
|
132
|
+
result.error = error.message;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return result;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Get list of available SPARC modes
|
|
140
|
+
*/
|
|
141
|
+
async getAvailableModes() {
|
|
142
|
+
const modes = [];
|
|
143
|
+
|
|
144
|
+
try {
|
|
145
|
+
// Try to get modes from .roomodes
|
|
146
|
+
const roomodesPath = `${this.workingDir}/.roomodes`;
|
|
147
|
+
const content = await fs.readFile(roomodesPath, 'utf8');
|
|
148
|
+
const config = JSON.parse(content);
|
|
149
|
+
|
|
150
|
+
if (config.modes && typeof config.modes === 'object') {
|
|
151
|
+
modes.push(...Object.keys(config.modes));
|
|
152
|
+
}
|
|
153
|
+
} catch (error) {
|
|
154
|
+
// Fallback to common modes
|
|
155
|
+
modes.push(
|
|
156
|
+
'architect',
|
|
157
|
+
'code',
|
|
158
|
+
'tdd',
|
|
159
|
+
'spec-pseudocode',
|
|
160
|
+
'integration',
|
|
161
|
+
'debug',
|
|
162
|
+
'docs-writer',
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return modes;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Test if a mode is accessible via CLI
|
|
171
|
+
*/
|
|
172
|
+
async testModeAccess(modeName) {
|
|
173
|
+
const result = {
|
|
174
|
+
success: false,
|
|
175
|
+
error: null,
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
try {
|
|
179
|
+
// Test with sparc info command
|
|
180
|
+
const command = new Deno.Command('./claude-flow', {
|
|
181
|
+
args: ['sparc', 'info', modeName],
|
|
182
|
+
cwd: this.workingDir,
|
|
183
|
+
stdout: 'piped',
|
|
184
|
+
stderr: 'piped',
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
const { success, stdout, stderr } = await command.output();
|
|
188
|
+
|
|
189
|
+
if (success) {
|
|
190
|
+
result.success = true;
|
|
191
|
+
} else {
|
|
192
|
+
const errorOutput = new TextDecoder().decode(stderr);
|
|
193
|
+
result.error = `Mode not accessible: ${errorOutput}`;
|
|
194
|
+
}
|
|
195
|
+
} catch (error) {
|
|
196
|
+
result.error = `Failed to test mode access: ${error.message}`;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
return result;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Test mode configuration validity
|
|
204
|
+
*/
|
|
205
|
+
async testModeConfig(modeName) {
|
|
206
|
+
const result = {
|
|
207
|
+
success: false,
|
|
208
|
+
error: null,
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
try {
|
|
212
|
+
// Read .roomodes and validate mode config
|
|
213
|
+
const roomodesPath = `${this.workingDir}/.roomodes`;
|
|
214
|
+
const content = await fs.readFile(roomodesPath, 'utf8');
|
|
215
|
+
const config = JSON.parse(content);
|
|
216
|
+
|
|
217
|
+
if (!config.modes || !config.modes[modeName]) {
|
|
218
|
+
result.error = `Mode ${modeName} not found in configuration`;
|
|
219
|
+
return result;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
const modeConfig = config.modes[modeName];
|
|
223
|
+
|
|
224
|
+
// Basic validation
|
|
225
|
+
if (typeof modeConfig !== 'object') {
|
|
226
|
+
result.error = `Invalid configuration for mode ${modeName}`;
|
|
227
|
+
return result;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Check for required fields
|
|
231
|
+
const requiredFields = ['description'];
|
|
232
|
+
for (const field of requiredFields) {
|
|
233
|
+
if (!modeConfig[field]) {
|
|
234
|
+
result.error = `Mode ${modeName} missing required field: ${field}`;
|
|
235
|
+
return result;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
result.success = true;
|
|
240
|
+
} catch (error) {
|
|
241
|
+
result.error = `Configuration validation failed: ${error.message}`;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
return result;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Test mode execution with a safe dry run
|
|
249
|
+
*/
|
|
250
|
+
async testModeExecution(modeName) {
|
|
251
|
+
const result = {
|
|
252
|
+
success: false,
|
|
253
|
+
error: null,
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
try {
|
|
257
|
+
// Test with a safe, non-destructive command
|
|
258
|
+
const command = new Deno.Command('./claude-flow', {
|
|
259
|
+
args: ['sparc', 'run', modeName, 'test validation', '--dry-run'],
|
|
260
|
+
cwd: this.workingDir,
|
|
261
|
+
stdout: 'piped',
|
|
262
|
+
stderr: 'piped',
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
const { success, stdout, stderr } = await command.output();
|
|
266
|
+
|
|
267
|
+
if (success) {
|
|
268
|
+
result.success = true;
|
|
269
|
+
} else {
|
|
270
|
+
// Check if it's just because --dry-run isn't supported
|
|
271
|
+
const errorOutput = new TextDecoder().decode(stderr);
|
|
272
|
+
if (errorOutput.includes('dry-run') || errorOutput.includes('unknown flag')) {
|
|
273
|
+
// Try without dry-run but with a safe test task
|
|
274
|
+
const testCommand = new Deno.Command('./claude-flow', {
|
|
275
|
+
args: ['sparc', 'modes'],
|
|
276
|
+
cwd: this.workingDir,
|
|
277
|
+
stdout: 'piped',
|
|
278
|
+
stderr: 'piped',
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
const testResult = await testCommand.output();
|
|
282
|
+
if (testResult.success) {
|
|
283
|
+
const output = new TextDecoder().decode(testResult.stdout);
|
|
284
|
+
result.success = output.includes(modeName);
|
|
285
|
+
if (!result.success) {
|
|
286
|
+
result.error = `Mode ${modeName} not listed in available modes`;
|
|
287
|
+
}
|
|
288
|
+
} else {
|
|
289
|
+
result.error = `Mode execution test failed: ${errorOutput}`;
|
|
290
|
+
}
|
|
291
|
+
} else {
|
|
292
|
+
result.error = `Mode execution failed: ${errorOutput}`;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
} catch (error) {
|
|
296
|
+
result.error = `Execution test failed: ${error.message}`;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
return result;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Test SPARC workflow functionality
|
|
304
|
+
*/
|
|
305
|
+
async testWorkflowFunctionality() {
|
|
306
|
+
const result = {
|
|
307
|
+
success: true,
|
|
308
|
+
errors: [],
|
|
309
|
+
warnings: [],
|
|
310
|
+
workflows: {},
|
|
311
|
+
};
|
|
312
|
+
|
|
313
|
+
try {
|
|
314
|
+
// Check for workflow files
|
|
315
|
+
const workflowDir = `${this.workingDir}/.roo/workflows`;
|
|
316
|
+
|
|
317
|
+
try {
|
|
318
|
+
const entries = [];
|
|
319
|
+
for await (const entry of Deno.readDir(workflowDir)) {
|
|
320
|
+
if (entry.isFile && entry.name.endsWith('.json')) {
|
|
321
|
+
entries.push(entry.name);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
// Test each workflow file
|
|
326
|
+
for (const workflowFile of entries) {
|
|
327
|
+
const workflowTest = await this.testWorkflowFile(workflowFile);
|
|
328
|
+
result.workflows[workflowFile] = workflowTest;
|
|
329
|
+
|
|
330
|
+
if (!workflowTest.success) {
|
|
331
|
+
result.warnings.push(`Workflow ${workflowFile} has issues: ${workflowTest.error}`);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
if (entries.length === 0) {
|
|
336
|
+
result.warnings.push('No workflow files found');
|
|
337
|
+
}
|
|
338
|
+
} catch {
|
|
339
|
+
result.warnings.push('Workflow directory not accessible');
|
|
340
|
+
}
|
|
341
|
+
} catch (error) {
|
|
342
|
+
result.errors.push(`Workflow testing failed: ${error.message}`);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
return result;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* Test a specific workflow file
|
|
350
|
+
*/
|
|
351
|
+
async testWorkflowFile(filename) {
|
|
352
|
+
const result = {
|
|
353
|
+
success: true,
|
|
354
|
+
error: null,
|
|
355
|
+
};
|
|
356
|
+
|
|
357
|
+
try {
|
|
358
|
+
const workflowPath = `${this.workingDir}/.roo/workflows/${filename}`;
|
|
359
|
+
const content = await fs.readFile(workflowPath, 'utf8');
|
|
360
|
+
|
|
361
|
+
// Parse JSON
|
|
362
|
+
const workflow = JSON.parse(content);
|
|
363
|
+
|
|
364
|
+
// Basic validation
|
|
365
|
+
if (typeof workflow !== 'object' || workflow === null) {
|
|
366
|
+
result.success = false;
|
|
367
|
+
result.error = 'Workflow must be a JSON object';
|
|
368
|
+
return result;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
// Check for recommended fields
|
|
372
|
+
const recommendedFields = ['name', 'description', 'steps'];
|
|
373
|
+
for (const field of recommendedFields) {
|
|
374
|
+
if (!(field in workflow)) {
|
|
375
|
+
result.success = false;
|
|
376
|
+
result.error = `Missing recommended field: ${field}`;
|
|
377
|
+
return result;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
} catch (error) {
|
|
381
|
+
result.success = false;
|
|
382
|
+
result.error = `Workflow validation failed: ${error.message}`;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
return result;
|
|
386
|
+
}
|
|
387
|
+
}
|