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,354 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
// config-validator.js - Configuration file validation
|
|
3
|
+
|
|
4
|
+
export class ConfigValidator {
|
|
5
|
+
constructor(workingDir) {
|
|
6
|
+
this.workingDir = workingDir;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Validate .roomodes configuration file
|
|
11
|
+
*/
|
|
12
|
+
async validateRoomodes() {
|
|
13
|
+
const result = {
|
|
14
|
+
success: true,
|
|
15
|
+
errors: [],
|
|
16
|
+
warnings: [],
|
|
17
|
+
config: null,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const roomodesPath = `${this.workingDir}/.roomodes`;
|
|
21
|
+
|
|
22
|
+
try {
|
|
23
|
+
// Check if file exists
|
|
24
|
+
const stat = await fs.stat(roomodesPath);
|
|
25
|
+
if (!stat.isFile) {
|
|
26
|
+
result.success = false;
|
|
27
|
+
result.errors.push('.roomodes exists but is not a file');
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Read and parse JSON
|
|
32
|
+
const content = await fs.readFile(roomodesPath, 'utf8');
|
|
33
|
+
|
|
34
|
+
try {
|
|
35
|
+
const config = JSON.parse(content);
|
|
36
|
+
result.config = config;
|
|
37
|
+
|
|
38
|
+
// Validate structure
|
|
39
|
+
const validationResult = this.validateRoomodesStructure(config);
|
|
40
|
+
if (!validationResult.valid) {
|
|
41
|
+
result.success = false;
|
|
42
|
+
result.errors.push(...validationResult.errors);
|
|
43
|
+
}
|
|
44
|
+
result.warnings.push(...validationResult.warnings);
|
|
45
|
+
} catch (jsonError) {
|
|
46
|
+
result.success = false;
|
|
47
|
+
result.errors.push(`Invalid JSON in .roomodes: ${jsonError.message}`);
|
|
48
|
+
}
|
|
49
|
+
} catch (error) {
|
|
50
|
+
if (error instanceof Deno.errors.NotFound) {
|
|
51
|
+
result.warnings.push('.roomodes file not found - SPARC features may not be available');
|
|
52
|
+
} else {
|
|
53
|
+
result.success = false;
|
|
54
|
+
result.errors.push(`Could not read .roomodes: ${error.message}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Validate CLAUDE.md configuration
|
|
63
|
+
*/
|
|
64
|
+
async validateClaudeMd() {
|
|
65
|
+
const result = {
|
|
66
|
+
success: true,
|
|
67
|
+
errors: [],
|
|
68
|
+
warnings: [],
|
|
69
|
+
content: null,
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const claudeMdPath = `${this.workingDir}/CLAUDE.md`;
|
|
73
|
+
|
|
74
|
+
try {
|
|
75
|
+
const content = await fs.readFile(claudeMdPath, 'utf8');
|
|
76
|
+
result.content = content;
|
|
77
|
+
|
|
78
|
+
// Check for required sections
|
|
79
|
+
const requiredSections = [
|
|
80
|
+
'# Claude Code Configuration',
|
|
81
|
+
'## Project Overview',
|
|
82
|
+
'## SPARC Development Commands',
|
|
83
|
+
];
|
|
84
|
+
|
|
85
|
+
for (const section of requiredSections) {
|
|
86
|
+
if (!content.includes(section)) {
|
|
87
|
+
result.warnings.push(`Missing recommended section: ${section}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Check for important command patterns
|
|
92
|
+
const importantCommands = ['npx claude-flow sparc', 'npm run build', 'npm run test'];
|
|
93
|
+
|
|
94
|
+
for (const command of importantCommands) {
|
|
95
|
+
if (!content.includes(command)) {
|
|
96
|
+
result.warnings.push(`Missing important command reference: ${command}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Check file size
|
|
101
|
+
if (content.length < 100) {
|
|
102
|
+
result.success = false;
|
|
103
|
+
result.errors.push('CLAUDE.md appears to be too short or empty');
|
|
104
|
+
}
|
|
105
|
+
} catch (error) {
|
|
106
|
+
result.success = false;
|
|
107
|
+
result.errors.push(`Could not read CLAUDE.md: ${error.message}`);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return result;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Validate memory configuration
|
|
115
|
+
*/
|
|
116
|
+
async validateMemoryConfig() {
|
|
117
|
+
const result = {
|
|
118
|
+
success: true,
|
|
119
|
+
errors: [],
|
|
120
|
+
warnings: [],
|
|
121
|
+
data: null,
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
const memoryDataPath = `${this.workingDir}/memory/claude-flow-data.json`;
|
|
125
|
+
|
|
126
|
+
try {
|
|
127
|
+
const content = await fs.readFile(memoryDataPath, 'utf8');
|
|
128
|
+
|
|
129
|
+
try {
|
|
130
|
+
const data = JSON.parse(content);
|
|
131
|
+
result.data = data;
|
|
132
|
+
|
|
133
|
+
// Validate structure
|
|
134
|
+
const validationResult = this.validateMemoryDataStructure(data);
|
|
135
|
+
if (!validationResult.valid) {
|
|
136
|
+
result.success = false;
|
|
137
|
+
result.errors.push(...validationResult.errors);
|
|
138
|
+
}
|
|
139
|
+
result.warnings.push(...validationResult.warnings);
|
|
140
|
+
} catch (jsonError) {
|
|
141
|
+
result.success = false;
|
|
142
|
+
result.errors.push(`Invalid JSON in memory data: ${jsonError.message}`);
|
|
143
|
+
}
|
|
144
|
+
} catch (error) {
|
|
145
|
+
result.success = false;
|
|
146
|
+
result.errors.push(`Could not read memory data: ${error.message}`);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Validate coordination configuration
|
|
154
|
+
*/
|
|
155
|
+
async validateCoordinationConfig() {
|
|
156
|
+
const result = {
|
|
157
|
+
success: true,
|
|
158
|
+
errors: [],
|
|
159
|
+
warnings: [],
|
|
160
|
+
content: null,
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
const coordinationPath = `${this.workingDir}/coordination.md`;
|
|
164
|
+
|
|
165
|
+
try {
|
|
166
|
+
const content = await fs.readFile(coordinationPath, 'utf8');
|
|
167
|
+
result.content = content;
|
|
168
|
+
|
|
169
|
+
// Check for required sections
|
|
170
|
+
const requiredSections = [
|
|
171
|
+
'# Multi-Agent Coordination',
|
|
172
|
+
'## Agent Coordination Patterns',
|
|
173
|
+
'## Memory Management',
|
|
174
|
+
];
|
|
175
|
+
|
|
176
|
+
for (const section of requiredSections) {
|
|
177
|
+
if (!content.includes(section)) {
|
|
178
|
+
result.warnings.push(`Missing recommended section in coordination.md: ${section}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Check file size
|
|
183
|
+
if (content.length < 50) {
|
|
184
|
+
result.warnings.push('coordination.md appears to be very short');
|
|
185
|
+
}
|
|
186
|
+
} catch (error) {
|
|
187
|
+
result.success = false;
|
|
188
|
+
result.errors.push(`Could not read coordination.md: ${error.message}`);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
return result;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Validate executable configuration
|
|
196
|
+
*/
|
|
197
|
+
async validateExecutable() {
|
|
198
|
+
const result = {
|
|
199
|
+
success: true,
|
|
200
|
+
errors: [],
|
|
201
|
+
warnings: [],
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
const executablePath = `${this.workingDir}/claude-flow`;
|
|
205
|
+
|
|
206
|
+
try {
|
|
207
|
+
const stat = await fs.stat(executablePath);
|
|
208
|
+
|
|
209
|
+
if (!stat.isFile) {
|
|
210
|
+
result.success = false;
|
|
211
|
+
result.errors.push('claude-flow executable is not a file');
|
|
212
|
+
return result;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// Check if executable (on Unix systems)
|
|
216
|
+
if (Deno.build.os !== 'windows') {
|
|
217
|
+
const isExecutable = (stat.mode & 0o111) !== 0;
|
|
218
|
+
if (!isExecutable) {
|
|
219
|
+
result.warnings.push('claude-flow file is not executable');
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Read and validate content
|
|
224
|
+
const content = await fs.readFile(executablePath, 'utf8');
|
|
225
|
+
|
|
226
|
+
// Check for required elements
|
|
227
|
+
if (content.includes('#!/usr/bin/env')) {
|
|
228
|
+
// Script file
|
|
229
|
+
if (!content.includes('claude-flow') && !content.includes('deno run')) {
|
|
230
|
+
result.warnings.push('Executable script may not be properly configured');
|
|
231
|
+
}
|
|
232
|
+
} else {
|
|
233
|
+
result.warnings.push('Executable may not have proper shebang');
|
|
234
|
+
}
|
|
235
|
+
} catch (error) {
|
|
236
|
+
result.success = false;
|
|
237
|
+
result.errors.push(`Could not validate executable: ${error.message}`);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
return result;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Helper methods
|
|
244
|
+
|
|
245
|
+
validateRoomodesStructure(config) {
|
|
246
|
+
const result = {
|
|
247
|
+
valid: true,
|
|
248
|
+
errors: [],
|
|
249
|
+
warnings: [],
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
// Check top-level structure
|
|
253
|
+
if (typeof config !== 'object' || config === null) {
|
|
254
|
+
result.valid = false;
|
|
255
|
+
result.errors.push('.roomodes must be a JSON object');
|
|
256
|
+
return result;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// Check for required fields
|
|
260
|
+
const requiredFields = ['modes', 'version'];
|
|
261
|
+
for (const field of requiredFields) {
|
|
262
|
+
if (!(field in config)) {
|
|
263
|
+
result.warnings.push(`Missing recommended field in .roomodes: ${field}`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// Validate modes if present
|
|
268
|
+
if ('modes' in config) {
|
|
269
|
+
if (typeof config.modes !== 'object' || config.modes === null) {
|
|
270
|
+
result.valid = false;
|
|
271
|
+
result.errors.push('.roomodes modes must be an object');
|
|
272
|
+
} else {
|
|
273
|
+
// Check each mode
|
|
274
|
+
for (const [modeName, modeConfig] of Object.entries(config.modes)) {
|
|
275
|
+
const modeValidation = this.validateModeConfig(modeName, modeConfig);
|
|
276
|
+
if (!modeValidation.valid) {
|
|
277
|
+
result.warnings.push(...modeValidation.errors.map((err) => `Mode ${modeName}: ${err}`));
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
return result;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
validateModeConfig(modeName, modeConfig) {
|
|
287
|
+
const result = {
|
|
288
|
+
valid: true,
|
|
289
|
+
errors: [],
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
if (typeof modeConfig !== 'object' || modeConfig === null) {
|
|
293
|
+
result.valid = false;
|
|
294
|
+
result.errors.push('mode configuration must be an object');
|
|
295
|
+
return result;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// Check for recommended fields
|
|
299
|
+
const recommendedFields = ['description', 'persona', 'tools'];
|
|
300
|
+
for (const field of recommendedFields) {
|
|
301
|
+
if (!(field in modeConfig)) {
|
|
302
|
+
result.errors.push(`missing recommended field: ${field}`);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// Validate specific fields
|
|
307
|
+
if ('tools' in modeConfig && !Array.isArray(modeConfig.tools)) {
|
|
308
|
+
result.errors.push('tools must be an array');
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
if ('description' in modeConfig && typeof modeConfig.description !== 'string') {
|
|
312
|
+
result.errors.push('description must be a string');
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
return result;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
validateMemoryDataStructure(data) {
|
|
319
|
+
const result = {
|
|
320
|
+
valid: true,
|
|
321
|
+
errors: [],
|
|
322
|
+
warnings: [],
|
|
323
|
+
};
|
|
324
|
+
|
|
325
|
+
if (typeof data !== 'object' || data === null) {
|
|
326
|
+
result.valid = false;
|
|
327
|
+
result.errors.push('Memory data must be a JSON object');
|
|
328
|
+
return result;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
// Check for required fields
|
|
332
|
+
const requiredFields = ['agents', 'tasks', 'lastUpdated'];
|
|
333
|
+
for (const field of requiredFields) {
|
|
334
|
+
if (!(field in data)) {
|
|
335
|
+
result.warnings.push(`Missing field in memory data: ${field}`);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// Validate field types
|
|
340
|
+
if ('agents' in data && !Array.isArray(data.agents)) {
|
|
341
|
+
result.errors.push('agents must be an array');
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
if ('tasks' in data && !Array.isArray(data.tasks)) {
|
|
345
|
+
result.errors.push('tasks must be an array');
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
if ('lastUpdated' in data && typeof data.lastUpdated !== 'number') {
|
|
349
|
+
result.warnings.push('lastUpdated should be a timestamp number');
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
return result;
|
|
353
|
+
}
|
|
354
|
+
}
|