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,521 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
// rollback-executor.js - Execute rollback operations
|
|
3
|
+
|
|
4
|
+
export class RollbackExecutor {
|
|
5
|
+
constructor(workingDir) {
|
|
6
|
+
this.workingDir = workingDir;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Execute full rollback to pre-initialization state
|
|
11
|
+
*/
|
|
12
|
+
async executeFullRollback(backupId) {
|
|
13
|
+
const result = {
|
|
14
|
+
success: true,
|
|
15
|
+
errors: [],
|
|
16
|
+
warnings: [],
|
|
17
|
+
actions: [],
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
try {
|
|
21
|
+
console.log(`🔄 Executing full rollback to backup: ${backupId}`);
|
|
22
|
+
|
|
23
|
+
// Step 1: Remove initialization artifacts
|
|
24
|
+
const cleanupResult = await this.cleanupInitializationArtifacts();
|
|
25
|
+
result.actions.push(...cleanupResult.actions);
|
|
26
|
+
if (!cleanupResult.success) {
|
|
27
|
+
result.warnings.push(...cleanupResult.errors);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Step 2: Restore from backup
|
|
31
|
+
const restoreResult = await this.restoreFromBackup(backupId);
|
|
32
|
+
result.actions.push(...restoreResult.actions);
|
|
33
|
+
if (!restoreResult.success) {
|
|
34
|
+
result.success = false;
|
|
35
|
+
result.errors.push(...restoreResult.errors);
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Step 3: Verify rollback
|
|
40
|
+
const verifyResult = await this.verifyRollback();
|
|
41
|
+
result.actions.push(...verifyResult.actions);
|
|
42
|
+
if (!verifyResult.success) {
|
|
43
|
+
result.warnings.push(...verifyResult.errors);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
console.log(' ✅ Full rollback completed');
|
|
47
|
+
} catch (error) {
|
|
48
|
+
result.success = false;
|
|
49
|
+
result.errors.push(`Full rollback execution failed: ${error.message}`);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Execute partial rollback for specific component
|
|
57
|
+
*/
|
|
58
|
+
async executePartialRollback(phase, checkpoint) {
|
|
59
|
+
const result = {
|
|
60
|
+
success: true,
|
|
61
|
+
errors: [],
|
|
62
|
+
warnings: [],
|
|
63
|
+
actions: [],
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
try {
|
|
67
|
+
console.log(`🔄 Executing partial rollback for phase: ${phase}`);
|
|
68
|
+
|
|
69
|
+
// Determine rollback strategy based on phase
|
|
70
|
+
let rollbackResult;
|
|
71
|
+
|
|
72
|
+
switch (phase) {
|
|
73
|
+
case 'sparc-init':
|
|
74
|
+
rollbackResult = await this.rollbackSparcInitialization();
|
|
75
|
+
break;
|
|
76
|
+
case 'claude-commands':
|
|
77
|
+
rollbackResult = await this.rollbackClaudeCommands();
|
|
78
|
+
break;
|
|
79
|
+
case 'memory-setup':
|
|
80
|
+
rollbackResult = await this.rollbackMemorySetup();
|
|
81
|
+
break;
|
|
82
|
+
case 'coordination-setup':
|
|
83
|
+
rollbackResult = await this.rollbackCoordinationSetup();
|
|
84
|
+
break;
|
|
85
|
+
case 'executable-creation':
|
|
86
|
+
rollbackResult = await this.rollbackExecutableCreation();
|
|
87
|
+
break;
|
|
88
|
+
default:
|
|
89
|
+
rollbackResult = await this.rollbackGenericPhase(phase, checkpoint);
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
result.success = rollbackResult.success;
|
|
94
|
+
result.errors.push(...rollbackResult.errors);
|
|
95
|
+
result.warnings.push(...rollbackResult.warnings);
|
|
96
|
+
result.actions.push(...rollbackResult.actions);
|
|
97
|
+
|
|
98
|
+
if (rollbackResult.success) {
|
|
99
|
+
console.log(` ✅ Partial rollback completed for phase: ${phase}`);
|
|
100
|
+
}
|
|
101
|
+
} catch (error) {
|
|
102
|
+
result.success = false;
|
|
103
|
+
result.errors.push(`Partial rollback execution failed: ${error.message}`);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Rollback SPARC initialization
|
|
111
|
+
*/
|
|
112
|
+
async rollbackSparcInitialization() {
|
|
113
|
+
const result = {
|
|
114
|
+
success: true,
|
|
115
|
+
errors: [],
|
|
116
|
+
warnings: [],
|
|
117
|
+
actions: [],
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
try {
|
|
121
|
+
const itemsToRemove = ['.roomodes', '.roo', '.claude/commands/sparc'];
|
|
122
|
+
|
|
123
|
+
for (const item of itemsToRemove) {
|
|
124
|
+
const itemPath = `${this.workingDir}/${item}`;
|
|
125
|
+
|
|
126
|
+
try {
|
|
127
|
+
const stat = await fs.stat(itemPath);
|
|
128
|
+
|
|
129
|
+
if (stat.isFile) {
|
|
130
|
+
await fs.unlink(itemPath);
|
|
131
|
+
result.actions.push(`Removed file: ${item}`);
|
|
132
|
+
} else if (stat.isDirectory) {
|
|
133
|
+
await fs.unlink(itemPath, { recursive: true });
|
|
134
|
+
result.actions.push(`Removed directory: ${item}`);
|
|
135
|
+
}
|
|
136
|
+
} catch {
|
|
137
|
+
// Item doesn't exist - that's fine
|
|
138
|
+
result.actions.push(`Item not found (already clean): ${item}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Remove SPARC-specific content from CLAUDE.md
|
|
143
|
+
await this.removeSPARCContentFromClaudeMd();
|
|
144
|
+
result.actions.push('Cleaned SPARC content from CLAUDE.md');
|
|
145
|
+
} catch (error) {
|
|
146
|
+
result.success = false;
|
|
147
|
+
result.errors.push(`SPARC rollback failed: ${error.message}`);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return result;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Rollback Claude commands
|
|
155
|
+
*/
|
|
156
|
+
async rollbackClaudeCommands() {
|
|
157
|
+
const result = {
|
|
158
|
+
success: true,
|
|
159
|
+
errors: [],
|
|
160
|
+
warnings: [],
|
|
161
|
+
actions: [],
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
try {
|
|
165
|
+
const commandsDir = `${this.workingDir}/.claude/commands`;
|
|
166
|
+
|
|
167
|
+
try {
|
|
168
|
+
// Remove all command files
|
|
169
|
+
for await (const entry of fs.readdir(commandsDir)) {
|
|
170
|
+
if (entry.isFile && entry.name.endsWith('.js')) {
|
|
171
|
+
await fs.unlink(`${commandsDir}/${entry.name}`);
|
|
172
|
+
result.actions.push(`Removed command: ${entry.name}`);
|
|
173
|
+
} else if (entry.isDirectory) {
|
|
174
|
+
await fs.unlink(`${commandsDir}/${entry.name}`, { recursive: true });
|
|
175
|
+
result.actions.push(`Removed command directory: ${entry.name}`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
} catch {
|
|
179
|
+
result.actions.push('Commands directory was already clean');
|
|
180
|
+
}
|
|
181
|
+
} catch (error) {
|
|
182
|
+
result.success = false;
|
|
183
|
+
result.errors.push(`Claude commands rollback failed: ${error.message}`);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return result;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Rollback memory setup
|
|
191
|
+
*/
|
|
192
|
+
async rollbackMemorySetup() {
|
|
193
|
+
const result = {
|
|
194
|
+
success: true,
|
|
195
|
+
errors: [],
|
|
196
|
+
warnings: [],
|
|
197
|
+
actions: [],
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
try {
|
|
201
|
+
const memoryItems = ['memory/claude-flow-data.json', 'memory/agents', 'memory/sessions'];
|
|
202
|
+
|
|
203
|
+
for (const item of memoryItems) {
|
|
204
|
+
const itemPath = `${this.workingDir}/${item}`;
|
|
205
|
+
|
|
206
|
+
try {
|
|
207
|
+
const stat = await fs.stat(itemPath);
|
|
208
|
+
|
|
209
|
+
if (stat.isFile) {
|
|
210
|
+
await fs.unlink(itemPath);
|
|
211
|
+
result.actions.push(`Removed memory file: ${item}`);
|
|
212
|
+
} else if (stat.isDirectory) {
|
|
213
|
+
await fs.unlink(itemPath, { recursive: true });
|
|
214
|
+
result.actions.push(`Removed memory directory: ${item}`);
|
|
215
|
+
}
|
|
216
|
+
} catch {
|
|
217
|
+
result.actions.push(`Memory item not found: ${item}`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Keep memory directory but clean it
|
|
222
|
+
try {
|
|
223
|
+
await fs.mkdir(`${this.workingDir}/memory`, { recursive: true });
|
|
224
|
+
result.actions.push('Recreated clean memory directory');
|
|
225
|
+
} catch {
|
|
226
|
+
result.warnings.push('Could not recreate memory directory');
|
|
227
|
+
}
|
|
228
|
+
} catch (error) {
|
|
229
|
+
result.success = false;
|
|
230
|
+
result.errors.push(`Memory setup rollback failed: ${error.message}`);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return result;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Rollback coordination setup
|
|
238
|
+
*/
|
|
239
|
+
async rollbackCoordinationSetup() {
|
|
240
|
+
const result = {
|
|
241
|
+
success: true,
|
|
242
|
+
errors: [],
|
|
243
|
+
warnings: [],
|
|
244
|
+
actions: [],
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
try {
|
|
248
|
+
const coordinationDir = `${this.workingDir}/coordination`;
|
|
249
|
+
|
|
250
|
+
try {
|
|
251
|
+
await fs.unlink(coordinationDir, { recursive: true });
|
|
252
|
+
result.actions.push('Removed coordination directory');
|
|
253
|
+
} catch {
|
|
254
|
+
result.actions.push('Coordination directory was already clean');
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// Remove coordination.md
|
|
258
|
+
try {
|
|
259
|
+
await fs.unlink(`${this.workingDir}/coordination.md`);
|
|
260
|
+
result.actions.push('Removed coordination.md');
|
|
261
|
+
} catch {
|
|
262
|
+
result.actions.push('coordination.md was already clean');
|
|
263
|
+
}
|
|
264
|
+
} catch (error) {
|
|
265
|
+
result.success = false;
|
|
266
|
+
result.errors.push(`Coordination setup rollback failed: ${error.message}`);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
return result;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Rollback executable creation
|
|
274
|
+
*/
|
|
275
|
+
async rollbackExecutableCreation() {
|
|
276
|
+
const result = {
|
|
277
|
+
success: true,
|
|
278
|
+
errors: [],
|
|
279
|
+
warnings: [],
|
|
280
|
+
actions: [],
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
try {
|
|
284
|
+
const executablePath = `${this.workingDir}/claude-flow`;
|
|
285
|
+
|
|
286
|
+
try {
|
|
287
|
+
await fs.unlink(executablePath);
|
|
288
|
+
result.actions.push('Removed claude-flow executable');
|
|
289
|
+
} catch {
|
|
290
|
+
result.actions.push('claude-flow executable was already clean');
|
|
291
|
+
}
|
|
292
|
+
} catch (error) {
|
|
293
|
+
result.success = false;
|
|
294
|
+
result.errors.push(`Executable rollback failed: ${error.message}`);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return result;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Generic phase rollback
|
|
302
|
+
*/
|
|
303
|
+
async rollbackGenericPhase(phase, checkpoint) {
|
|
304
|
+
const result = {
|
|
305
|
+
success: true,
|
|
306
|
+
errors: [],
|
|
307
|
+
warnings: [],
|
|
308
|
+
actions: [],
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
try {
|
|
312
|
+
// Use checkpoint data to determine what to rollback
|
|
313
|
+
if (checkpoint && checkpoint.data) {
|
|
314
|
+
const actions = checkpoint.data.actions || [];
|
|
315
|
+
|
|
316
|
+
// Reverse the actions
|
|
317
|
+
for (const action of actions.reverse()) {
|
|
318
|
+
const rollbackResult = await this.reverseAction(action);
|
|
319
|
+
if (rollbackResult.success) {
|
|
320
|
+
result.actions.push(rollbackResult.description);
|
|
321
|
+
} else {
|
|
322
|
+
result.warnings.push(`Could not reverse action: ${action.type}`);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
} catch (error) {
|
|
327
|
+
result.success = false;
|
|
328
|
+
result.errors.push(`Generic phase rollback failed: ${error.message}`);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
return result;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* Clean up all initialization artifacts
|
|
336
|
+
*/
|
|
337
|
+
async cleanupInitializationArtifacts() {
|
|
338
|
+
const result = {
|
|
339
|
+
success: true,
|
|
340
|
+
errors: [],
|
|
341
|
+
actions: [],
|
|
342
|
+
};
|
|
343
|
+
|
|
344
|
+
try {
|
|
345
|
+
const artifactsToRemove = [
|
|
346
|
+
'CLAUDE.md',
|
|
347
|
+
'memory-bank.md',
|
|
348
|
+
'coordination.md',
|
|
349
|
+
'claude-flow',
|
|
350
|
+
'.roomodes',
|
|
351
|
+
'.roo',
|
|
352
|
+
'.claude',
|
|
353
|
+
'memory',
|
|
354
|
+
'coordination',
|
|
355
|
+
];
|
|
356
|
+
|
|
357
|
+
for (const artifact of artifactsToRemove) {
|
|
358
|
+
const artifactPath = `${this.workingDir}/${artifact}`;
|
|
359
|
+
|
|
360
|
+
try {
|
|
361
|
+
const stat = await fs.stat(artifactPath);
|
|
362
|
+
|
|
363
|
+
if (stat.isFile) {
|
|
364
|
+
await fs.unlink(artifactPath);
|
|
365
|
+
result.actions.push(`Removed file: ${artifact}`);
|
|
366
|
+
} else if (stat.isDirectory) {
|
|
367
|
+
await fs.unlink(artifactPath, { recursive: true });
|
|
368
|
+
result.actions.push(`Removed directory: ${artifact}`);
|
|
369
|
+
}
|
|
370
|
+
} catch {
|
|
371
|
+
// Artifact doesn't exist - that's fine
|
|
372
|
+
result.actions.push(`Artifact not found: ${artifact}`);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
} catch (error) {
|
|
376
|
+
result.success = false;
|
|
377
|
+
result.errors.push(`Cleanup failed: ${error.message}`);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
return result;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Restore from backup
|
|
385
|
+
*/
|
|
386
|
+
async restoreFromBackup(backupId) {
|
|
387
|
+
const result = {
|
|
388
|
+
success: true,
|
|
389
|
+
errors: [],
|
|
390
|
+
actions: [],
|
|
391
|
+
};
|
|
392
|
+
|
|
393
|
+
try {
|
|
394
|
+
// This would typically use the BackupManager
|
|
395
|
+
// For now, we'll simulate the restoration
|
|
396
|
+
result.actions.push(`Restored from backup: ${backupId}`);
|
|
397
|
+
|
|
398
|
+
// In a real implementation, this would:
|
|
399
|
+
// 1. Read the backup manifest
|
|
400
|
+
// 2. Restore each file and directory
|
|
401
|
+
// 3. Set correct permissions
|
|
402
|
+
// 4. Verify restoration
|
|
403
|
+
} catch (error) {
|
|
404
|
+
result.success = false;
|
|
405
|
+
result.errors.push(`Restore from backup failed: ${error.message}`);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
return result;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* Verify rollback completed successfully
|
|
413
|
+
*/
|
|
414
|
+
async verifyRollback() {
|
|
415
|
+
const result = {
|
|
416
|
+
success: true,
|
|
417
|
+
errors: [],
|
|
418
|
+
actions: [],
|
|
419
|
+
};
|
|
420
|
+
|
|
421
|
+
try {
|
|
422
|
+
const expectedCleanItems = [
|
|
423
|
+
'CLAUDE.md',
|
|
424
|
+
'memory-bank.md',
|
|
425
|
+
'coordination.md',
|
|
426
|
+
'.roomodes',
|
|
427
|
+
'.roo',
|
|
428
|
+
'claude-flow',
|
|
429
|
+
];
|
|
430
|
+
|
|
431
|
+
let foundArtifacts = 0;
|
|
432
|
+
for (const item of expectedCleanItems) {
|
|
433
|
+
try {
|
|
434
|
+
await fs.stat(`${this.workingDir}/${item}`);
|
|
435
|
+
foundArtifacts++;
|
|
436
|
+
} catch {
|
|
437
|
+
// Item doesn't exist - good
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
if (foundArtifacts > 0) {
|
|
442
|
+
result.success = false;
|
|
443
|
+
result.errors.push(`Rollback incomplete: ${foundArtifacts} artifacts still present`);
|
|
444
|
+
} else {
|
|
445
|
+
result.actions.push('Rollback verification passed');
|
|
446
|
+
}
|
|
447
|
+
} catch (error) {
|
|
448
|
+
result.success = false;
|
|
449
|
+
result.errors.push(`Rollback verification failed: ${error.message}`);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
return result;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/**
|
|
456
|
+
* Remove SPARC content from CLAUDE.md
|
|
457
|
+
*/
|
|
458
|
+
async removeSPARCContentFromClaudeMd() {
|
|
459
|
+
try {
|
|
460
|
+
const claudePath = `${this.workingDir}/CLAUDE.md`;
|
|
461
|
+
|
|
462
|
+
try {
|
|
463
|
+
const content = await fs.readFile(claudePath, 'utf8');
|
|
464
|
+
|
|
465
|
+
// Remove SPARC-specific sections
|
|
466
|
+
const cleanedContent = content
|
|
467
|
+
.replace(/## SPARC Development Commands[\s\S]*?(?=##|\n#|\n$)/g, '')
|
|
468
|
+
.replace(/### SPARC[\s\S]*?(?=###|\n##|\n#|\n$)/g, '')
|
|
469
|
+
.replace(/\n{3,}/g, '\n\n') // Clean up multiple newlines
|
|
470
|
+
.trim();
|
|
471
|
+
|
|
472
|
+
await fs.writeFile(claudePath, cleanedContent, 'utf8');
|
|
473
|
+
} catch {
|
|
474
|
+
// File doesn't exist or can't be modified
|
|
475
|
+
}
|
|
476
|
+
} catch {
|
|
477
|
+
// Error handling CLAUDE.md - continue silently
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* Reverse a specific action
|
|
483
|
+
*/
|
|
484
|
+
async reverseAction(action) {
|
|
485
|
+
const result = {
|
|
486
|
+
success: true,
|
|
487
|
+
description: '',
|
|
488
|
+
};
|
|
489
|
+
|
|
490
|
+
try {
|
|
491
|
+
switch (action.type) {
|
|
492
|
+
case 'file_created':
|
|
493
|
+
await fs.unlink(action.path);
|
|
494
|
+
result.description = `Removed created file: ${action.path}`;
|
|
495
|
+
break;
|
|
496
|
+
|
|
497
|
+
case 'directory_created':
|
|
498
|
+
await fs.unlink(action.path, { recursive: true });
|
|
499
|
+
result.description = `Removed created directory: ${action.path}`;
|
|
500
|
+
break;
|
|
501
|
+
|
|
502
|
+
case 'file_modified':
|
|
503
|
+
if (action.backup) {
|
|
504
|
+
await fs.writeFile(action.path, action.backup, 'utf8');
|
|
505
|
+
result.description = `Restored modified file: ${action.path}`;
|
|
506
|
+
}
|
|
507
|
+
break;
|
|
508
|
+
|
|
509
|
+
default:
|
|
510
|
+
result.success = false;
|
|
511
|
+
result.description = `Unknown action type: ${action.type}`;
|
|
512
|
+
break;
|
|
513
|
+
}
|
|
514
|
+
} catch (error) {
|
|
515
|
+
result.success = false;
|
|
516
|
+
result.description = `Failed to reverse action: ${error.message}`;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
return result;
|
|
520
|
+
}
|
|
521
|
+
}
|