claude-flow-novice 2.0.3 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/cli/commands/guidance.js +487 -668
- package/dist/src/cli/commands/index-validate.js +18 -29
- package/dist/src/cli/commands/mcp-troubleshoot.js +230 -282
- package/dist/src/cli/commands/neural-goal-init.js +92 -125
- package/dist/src/cli/commands/swarm-exec.js +317 -393
- package/dist/src/cli/commands/swarm.js +1 -1
- package/dist/src/cli/commands/validate-framework.js +983 -1100
- package/dist/src/cli/commands/validate.js +144 -223
- package/dist/src/cli/simple-commands/__tests__/agent.test.js +265 -277
- package/dist/src/cli/simple-commands/__tests__/memory.test.js +6 -7
- package/dist/src/cli/simple-commands/__tests__/swarm.test.js +373 -356
- package/dist/src/cli/simple-commands/__tests__/task.test.js +6 -7
- package/dist/src/cli/simple-commands/agent.js +157 -193
- package/dist/src/cli/simple-commands/analysis.js +336 -446
- package/dist/src/cli/simple-commands/automation-executor.js +1095 -1339
- package/dist/src/cli/simple-commands/automation.js +481 -469
- package/dist/src/cli/simple-commands/batch-manager.js +261 -313
- package/dist/src/cli/simple-commands/claude-telemetry.js +241 -267
- package/dist/src/cli/simple-commands/claude-track.js +68 -90
- package/dist/src/cli/simple-commands/concurrent-display.js +266 -320
- package/dist/src/cli/simple-commands/config.js +245 -290
- package/dist/src/cli/simple-commands/coordination.js +182 -234
- package/dist/src/cli/simple-commands/enhanced-ui-views.js +812 -615
- package/dist/src/cli/simple-commands/enhanced-webui-complete.js +922 -981
- package/dist/src/cli/simple-commands/fix-hook-variables.js +274 -294
- package/dist/src/cli/simple-commands/github/gh-coordinator.js +378 -457
- package/dist/src/cli/simple-commands/github/github-api.js +535 -574
- package/dist/src/cli/simple-commands/github/init.js +276 -303
- package/dist/src/cli/simple-commands/github.js +222 -247
- package/dist/src/cli/simple-commands/goal.js +51 -63
- package/dist/src/cli/simple-commands/hive-mind/auto-save-middleware.js +208 -278
- package/dist/src/cli/simple-commands/hive-mind/communication.js +601 -696
- package/dist/src/cli/simple-commands/hive-mind/core.js +907 -979
- package/dist/src/cli/simple-commands/hive-mind/db-optimizer.js +406 -655
- package/dist/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1125 -1245
- package/dist/src/cli/simple-commands/hive-mind/memory.js +854 -1090
- package/dist/src/cli/simple-commands/hive-mind/performance-optimizer.js +459 -574
- package/dist/src/cli/simple-commands/hive-mind/performance-test.js +263 -347
- package/dist/src/cli/simple-commands/hive-mind/queen.js +727 -768
- package/dist/src/cli/simple-commands/hive-mind/session-manager.js +745 -1049
- package/dist/src/cli/simple-commands/hive-mind-optimize.js +227 -283
- package/dist/src/cli/simple-commands/hive-mind-wizard.js +174 -217
- package/dist/src/cli/simple-commands/hive-mind.js +1842 -2283
- package/dist/src/cli/simple-commands/hive.js +90 -79
- package/dist/src/cli/simple-commands/hook-safety.js +431 -521
- package/dist/src/cli/simple-commands/hooks/session-start-soul.js +203 -254
- package/dist/src/cli/simple-commands/hooks.js +1064 -1204
- package/dist/src/cli/simple-commands/init/agent-copier.js +294 -319
- package/dist/src/cli/simple-commands/init/batch-init.js +496 -562
- package/dist/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +61 -88
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +125 -150
- package/dist/src/cli/simple-commands/init/claude-commands/slash-commands.js +42 -49
- package/dist/src/cli/simple-commands/init/claude-commands/sparc-commands.js +43 -61
- package/dist/src/cli/simple-commands/init/copy-revised-templates.js +141 -147
- package/dist/src/cli/simple-commands/init/executable-wrapper.js +31 -44
- package/dist/src/cli/simple-commands/init/gitignore-updater.js +64 -90
- package/dist/src/cli/simple-commands/init/help.js +104 -107
- package/dist/src/cli/simple-commands/init/hive-mind-init.js +509 -528
- package/dist/src/cli/simple-commands/init/index.js +1510 -1759
- package/dist/src/cli/simple-commands/init/performance-monitor.js +234 -317
- package/dist/src/cli/simple-commands/init/rollback/backup-manager.js +441 -504
- package/dist/src/cli/simple-commands/init/rollback/index.js +289 -364
- package/dist/src/cli/simple-commands/init/rollback/recovery-manager.js +652 -728
- package/dist/src/cli/simple-commands/init/rollback/rollback-executor.js +416 -481
- package/dist/src/cli/simple-commands/init/rollback/state-tracker.js +369 -448
- package/dist/src/cli/simple-commands/init/sparc/roo-readme.js +1 -2
- package/dist/src/cli/simple-commands/init/sparc/roomodes-config.js +122 -99
- package/dist/src/cli/simple-commands/init/sparc/workflows.js +32 -37
- package/dist/src/cli/simple-commands/init/sparc-structure.js +55 -62
- package/dist/src/cli/simple-commands/init/template-copier.js +421 -533
- package/dist/src/cli/simple-commands/init/templates/coordination-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/enhanced-templates.js +344 -318
- package/dist/src/cli/simple-commands/init/templates/github-safe-enhanced.js +173 -218
- package/dist/src/cli/simple-commands/init/templates/github-safe.js +65 -75
- package/dist/src/cli/simple-commands/init/templates/memory-bank-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/readme-files.js +2 -4
- package/dist/src/cli/simple-commands/init/templates/safe-hook-patterns.js +187 -230
- package/dist/src/cli/simple-commands/init/templates/sparc-modes.js +53 -80
- package/dist/src/cli/simple-commands/init/templates/verification-claude-md.js +101 -85
- package/dist/src/cli/simple-commands/init/validation/config-validator.js +283 -330
- package/dist/src/cli/simple-commands/init/validation/health-checker.js +495 -561
- package/dist/src/cli/simple-commands/init/validation/index.js +302 -358
- package/dist/src/cli/simple-commands/init/validation/mode-validator.js +308 -359
- package/dist/src/cli/simple-commands/init/validation/post-init-validator.js +389 -366
- package/dist/src/cli/simple-commands/init/validation/pre-init-validator.js +270 -268
- package/dist/src/cli/simple-commands/init/validation/test-runner.js +427 -447
- package/dist/src/cli/simple-commands/init.js +1 -2
- package/dist/src/cli/simple-commands/mcp-health.js +131 -158
- package/dist/src/cli/simple-commands/mcp-integration-layer.js +533 -634
- package/dist/src/cli/simple-commands/mcp.js +345 -400
- package/dist/src/cli/simple-commands/memory-consolidation.js +426 -537
- package/dist/src/cli/simple-commands/memory.js +247 -311
- package/dist/src/cli/simple-commands/migrate-hooks.js +39 -46
- package/dist/src/cli/simple-commands/monitor.js +294 -363
- package/dist/src/cli/simple-commands/neural.js +51 -65
- package/dist/src/cli/simple-commands/pair-autofix-only.js +538 -662
- package/dist/src/cli/simple-commands/pair-basic.js +528 -656
- package/dist/src/cli/simple-commands/pair-old.js +430 -543
- package/dist/src/cli/simple-commands/pair-working.js +615 -751
- package/dist/src/cli/simple-commands/pair.js +615 -751
- package/dist/src/cli/simple-commands/performance-hooks.js +83 -111
- package/dist/src/cli/simple-commands/performance-metrics.js +348 -433
- package/dist/src/cli/simple-commands/process-ui-enhanced.js +708 -787
- package/dist/src/cli/simple-commands/process-ui.js +230 -254
- package/dist/src/cli/simple-commands/realtime-update-system.js +525 -611
- package/dist/src/cli/simple-commands/sparc/architecture.js +1704 -1530
- package/dist/src/cli/simple-commands/sparc/commands.js +438 -516
- package/dist/src/cli/simple-commands/sparc/completion.js +1224 -1481
- package/dist/src/cli/simple-commands/sparc/coordinator.js +913 -978
- package/dist/src/cli/simple-commands/sparc/index.js +241 -298
- package/dist/src/cli/simple-commands/sparc/phase-base.js +314 -390
- package/dist/src/cli/simple-commands/sparc/pseudocode.js +965 -869
- package/dist/src/cli/simple-commands/sparc/refinement.js +980 -1273
- package/dist/src/cli/simple-commands/sparc/specification.js +559 -645
- package/dist/src/cli/simple-commands/sparc-modes/architect.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/ask.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/code.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/debug.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/devops.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/docs-writer.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/generic.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/index.js +47 -55
- package/dist/src/cli/simple-commands/sparc-modes/integration.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/mcp.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/monitoring.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/optimization.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/security-review.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/supabase-admin.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/swarm.js +101 -87
- package/dist/src/cli/simple-commands/sparc-modes/tdd.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/tutorial.js +1 -1
- package/dist/src/cli/simple-commands/sparc.js +465 -493
- package/dist/src/cli/simple-commands/start-ui.js +108 -132
- package/dist/src/cli/simple-commands/start-wrapper.js +240 -268
- package/dist/src/cli/simple-commands/start.js +1 -1
- package/dist/src/cli/simple-commands/status.js +254 -275
- package/dist/src/cli/simple-commands/stream-chain-clean.js +128 -171
- package/dist/src/cli/simple-commands/stream-chain-fixed.js +61 -82
- package/dist/src/cli/simple-commands/stream-chain-real.js +267 -331
- package/dist/src/cli/simple-commands/stream-chain-working.js +211 -263
- package/dist/src/cli/simple-commands/stream-chain.js +260 -318
- package/dist/src/cli/simple-commands/stream-processor.js +290 -315
- package/dist/src/cli/simple-commands/swarm-executor.js +189 -222
- package/dist/src/cli/simple-commands/swarm-metrics-integration.js +208 -300
- package/dist/src/cli/simple-commands/swarm-ui.js +623 -703
- package/dist/src/cli/simple-commands/swarm-webui-integration.js +258 -286
- package/dist/src/cli/simple-commands/swarm.js +887 -1082
- package/dist/src/cli/simple-commands/task.js +161 -206
- package/dist/src/cli/simple-commands/timestamp-fix.js +59 -89
- package/dist/src/cli/simple-commands/token-tracker.js +258 -316
- package/dist/src/cli/simple-commands/tool-execution-framework.js +433 -519
- package/dist/src/cli/simple-commands/train-and-stream.js +275 -331
- package/dist/src/cli/simple-commands/training-pipeline.js +619 -725
- package/dist/src/cli/simple-commands/training.js +170 -227
- package/dist/src/cli/simple-commands/verification-hooks.js +261 -284
- package/dist/src/cli/simple-commands/verification-integration.js +389 -417
- package/dist/src/cli/simple-commands/verification-training-integration.js +486 -606
- package/dist/src/cli/simple-commands/verification.js +493 -513
- package/dist/src/cli/simple-commands/web-server.js +766 -836
- package/dist/src/cli/simple-commands/webui-validator.js +106 -124
- package/dist/src/coordination/event-bus/demo-wasm-integration.js +212 -251
- package/dist/src/coordination/event-bus/qe-event-bus.js +608 -748
- package/dist/src/coordination/event-bus/qe-event-bus.test.js +379 -454
- package/dist/src/coordination/iteration-tracker.js +363 -454
- package/dist/src/enterprise/analytics-manager.js +1135 -0
- package/dist/src/enterprise/audit-manager.js +1115 -0
- package/dist/src/enterprise/cloud-manager.js +891 -0
- package/dist/src/enterprise/deployment-manager.js +966 -0
- package/dist/src/enterprise/index.js +6 -0
- package/dist/src/enterprise/project-manager.js +584 -0
- package/dist/src/enterprise/security-manager.js +991 -0
- package/dist/src/index.js +1 -1
- package/dist/src/mcp/DEPRECATED.js +46 -60
- package/dist/src/mcp/fixes/mcp-error-fixes.js +115 -134
- package/dist/src/mcp/implementations/agent-tracker.js +114 -128
- package/dist/src/mcp/implementations/daa-tools.js +292 -350
- package/dist/src/mcp/implementations/workflow-tools.js +329 -361
- package/dist/src/mcp/mcp-config-manager.js +1183 -1331
- package/dist/src/mcp/mcp-server-novice-simplified.js +11 -17
- package/dist/src/mcp/mcp-server-novice.js +11 -17
- package/dist/src/mcp/mcp-server-sdk.js +11 -17
- package/dist/src/mcp/mcp-server.js +1620 -1484
- package/dist/src/mcp/ruv-swarm-wrapper.js +209 -239
- package/dist/src/memory/advanced-serializer.js +609 -589
- package/dist/src/memory/enhanced-examples.js +220 -305
- package/dist/src/memory/enhanced-memory.js +295 -336
- package/dist/src/memory/enhanced-session-serializer.js +408 -492
- package/dist/src/memory/fallback-memory-system.js +900 -1021
- package/dist/src/memory/fallback-store.js +93 -131
- package/dist/src/memory/high-performance-serialization.js +592 -730
- package/dist/src/memory/in-memory-store.js +161 -213
- package/dist/src/memory/index.js +123 -157
- package/dist/src/memory/lock-free-structures.js +578 -764
- package/dist/src/memory/memory-mapped-persistence.js +585 -766
- package/dist/src/memory/memory-pressure-manager.js +569 -707
- package/dist/src/memory/migration.js +358 -445
- package/dist/src/memory/shared-memory.js +641 -768
- package/dist/src/memory/sqlite-store.js +245 -325
- package/dist/src/memory/sqlite-wrapper.js +122 -151
- package/dist/src/memory/swarm-memory.js +470 -603
- package/dist/src/memory/test-example.js +126 -134
- package/dist/src/memory/ultra-fast-memory-store.js +622 -821
- package/dist/src/memory/unified-memory-manager.js +356 -437
- package/dist/src/migration/index.js +92 -0
- package/dist/src/migration/logger.js +121 -0
- package/dist/src/migration/migration-analyzer.js +268 -0
- package/dist/src/migration/migration-runner.js +522 -0
- package/dist/src/migration/migration-validator.js +285 -0
- package/dist/src/migration/progress-reporter.js +150 -0
- package/dist/src/migration/rollback-manager.js +321 -0
- package/dist/src/migration/tests/migration-system.test.js +7 -0
- package/dist/src/migration/types.js +3 -0
- package/dist/src/swarm/CodeRefactoringSwarm.js +777 -952
- package/dist/src/swarm/__tests__/integration.test.js +227 -0
- package/dist/src/swarm/__tests__/prompt-copier.test.js +344 -0
- package/dist/src/swarm/advanced-orchestrator.js +1095 -0
- package/dist/src/swarm/claude-code-interface.js +961 -0
- package/dist/src/swarm/claude-flow-executor.js +229 -0
- package/dist/src/swarm/consensus-coordinator.js +475 -0
- package/dist/src/swarm/coordinator.js +2993 -0
- package/dist/src/swarm/direct-executor.js +1180 -0
- package/dist/src/swarm/error-recovery/advanced-error-detection.js +691 -0
- package/dist/src/swarm/error-recovery/automated-recovery-workflows.js +998 -0
- package/dist/src/swarm/error-recovery/error-recovery-coordinator.js +1197 -0
- package/dist/src/swarm/error-recovery/recovery-monitoring.js +772 -0
- package/dist/src/swarm/error-recovery/resilience-architecture.js +714 -0
- package/dist/src/swarm/error-recovery/self-healing-mechanisms.js +1319 -0
- package/dist/src/swarm/error-recovery/test-error-recovery-effectiveness.js +808 -0
- package/dist/src/swarm/executor-v2.js +322 -0
- package/dist/src/swarm/executor.js +815 -0
- package/dist/src/swarm/hive-mind-integration.js +703 -0
- package/dist/src/swarm/index.js +41 -0
- package/dist/src/swarm/json-output-aggregator.js +267 -0
- package/dist/src/swarm/large-scale-coordinator.js +542 -0
- package/dist/src/swarm/mcp-integration-wrapper.js +628 -0
- package/dist/src/swarm/memory.js +1117 -0
- package/dist/src/swarm/optimizations/__tests__/optimization.test.js +348 -0
- package/dist/src/swarm/optimizations/async-file-manager.js +285 -0
- package/dist/src/swarm/optimizations/circular-buffer.js +162 -0
- package/dist/src/swarm/optimizations/connection-pool.js +244 -0
- package/dist/src/swarm/optimizations/index.js +28 -0
- package/dist/src/swarm/optimizations/optimized-executor.js +320 -0
- package/dist/src/swarm/optimizations/ttl-map.js +234 -0
- package/dist/src/swarm/prompt-cli.js +200 -0
- package/dist/src/swarm/prompt-copier-enhanced.js +202 -0
- package/dist/src/swarm/prompt-copier.js +381 -0
- package/dist/src/swarm/prompt-manager.js +295 -0
- package/dist/src/swarm/prompt-utils.js +310 -0
- package/dist/src/swarm/result-aggregator.js +718 -0
- package/dist/src/swarm/sparc-executor.js +1568 -0
- package/dist/src/swarm/strategies/auto.js +758 -0
- package/dist/src/swarm/strategies/base.js +128 -0
- package/dist/src/swarm/strategies/research.js +914 -0
- package/dist/src/swarm/strategies/strategy-metrics-patch.js +2 -0
- package/dist/src/swarm/types.js +52 -0
- package/dist/src/swarm/workers/copy-worker.js +56 -0
- package/dist/src/utils/__tests__/github-cli-safety-wrapper.test.js +332 -400
- package/dist/src/utils/github-cli-safe.js +56 -64
- package/dist/src/utils/github-cli-safety-wrapper.js +451 -546
- package/dist/src/utils/npx-isolated-cache.js +104 -119
- package/dist/src/utils/preference-manager.js +622 -652
- package/dist/src/utils/timezone-utils.js +86 -105
- package/dist/src/validators/epic-config-schema.js +214 -0
- package/dist/src/validators/index.js +10 -0
- package/dist/src/validators/swarm-init-validator.js +259 -0
- package/dist/src/validators/todowrite-batching-validator.js +215 -0
- package/dist/src/validators/todowrite-integration.js +187 -0
- package/package.json +2 -2
|
@@ -1,521 +1,456 @@
|
|
|
1
|
-
import { promises as fs } from
|
|
1
|
+
import { promises as fs } from "fs";
|
|
2
2
|
// rollback-executor.js - Execute rollback operations
|
|
3
|
-
|
|
4
3
|
export class RollbackExecutor {
|
|
5
|
-
|
|
6
|
-
this.workingDir = workingDir;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
/**
|
|
4
|
+
/**
|
|
10
5
|
* Execute full rollback to pre-initialization state
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
6
|
+
*/ async executeFullRollback(backupId) {
|
|
7
|
+
const result = {
|
|
8
|
+
success: true,
|
|
9
|
+
errors: [],
|
|
10
|
+
warnings: [],
|
|
11
|
+
actions: []
|
|
12
|
+
};
|
|
13
|
+
try {
|
|
14
|
+
console.log(`🔄 Executing full rollback to backup: ${backupId}`);
|
|
15
|
+
// Step 1: Remove initialization artifacts
|
|
16
|
+
const cleanupResult = await this.cleanupInitializationArtifacts();
|
|
17
|
+
result.actions.push(...cleanupResult.actions);
|
|
18
|
+
if (!cleanupResult.success) {
|
|
19
|
+
result.warnings.push(...cleanupResult.errors);
|
|
20
|
+
}
|
|
21
|
+
// Step 2: Restore from backup
|
|
22
|
+
const restoreResult = await this.restoreFromBackup(backupId);
|
|
23
|
+
result.actions.push(...restoreResult.actions);
|
|
24
|
+
if (!restoreResult.success) {
|
|
25
|
+
result.success = false;
|
|
26
|
+
result.errors.push(...restoreResult.errors);
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
// Step 3: Verify rollback
|
|
30
|
+
const verifyResult = await this.verifyRollback();
|
|
31
|
+
result.actions.push(...verifyResult.actions);
|
|
32
|
+
if (!verifyResult.success) {
|
|
33
|
+
result.warnings.push(...verifyResult.errors);
|
|
34
|
+
}
|
|
35
|
+
console.log(' ✅ Full rollback completed');
|
|
36
|
+
} catch (error) {
|
|
37
|
+
result.success = false;
|
|
38
|
+
result.errors.push(`Full rollback execution failed: ${error.message}`);
|
|
39
|
+
}
|
|
36
40
|
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
41
|
}
|
|
51
|
-
|
|
52
|
-
return result;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
42
|
+
/**
|
|
56
43
|
* Execute partial rollback for specific component
|
|
57
|
-
*/
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
} catch (error) {
|
|
102
|
-
result.success = false;
|
|
103
|
-
result.errors.push(`Partial rollback execution failed: ${error.message}`);
|
|
44
|
+
*/ async executePartialRollback(phase, checkpoint) {
|
|
45
|
+
const result = {
|
|
46
|
+
success: true,
|
|
47
|
+
errors: [],
|
|
48
|
+
warnings: [],
|
|
49
|
+
actions: []
|
|
50
|
+
};
|
|
51
|
+
try {
|
|
52
|
+
console.log(`🔄 Executing partial rollback for phase: ${phase}`);
|
|
53
|
+
// Determine rollback strategy based on phase
|
|
54
|
+
let rollbackResult;
|
|
55
|
+
switch(phase){
|
|
56
|
+
case 'sparc-init':
|
|
57
|
+
rollbackResult = await this.rollbackSparcInitialization();
|
|
58
|
+
break;
|
|
59
|
+
case 'claude-commands':
|
|
60
|
+
rollbackResult = await this.rollbackClaudeCommands();
|
|
61
|
+
break;
|
|
62
|
+
case 'memory-setup':
|
|
63
|
+
rollbackResult = await this.rollbackMemorySetup();
|
|
64
|
+
break;
|
|
65
|
+
case 'coordination-setup':
|
|
66
|
+
rollbackResult = await this.rollbackCoordinationSetup();
|
|
67
|
+
break;
|
|
68
|
+
case 'executable-creation':
|
|
69
|
+
rollbackResult = await this.rollbackExecutableCreation();
|
|
70
|
+
break;
|
|
71
|
+
default:
|
|
72
|
+
rollbackResult = await this.rollbackGenericPhase(phase, checkpoint);
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
result.success = rollbackResult.success;
|
|
76
|
+
result.errors.push(...rollbackResult.errors);
|
|
77
|
+
result.warnings.push(...rollbackResult.warnings);
|
|
78
|
+
result.actions.push(...rollbackResult.actions);
|
|
79
|
+
if (rollbackResult.success) {
|
|
80
|
+
console.log(` ✅ Partial rollback completed for phase: ${phase}`);
|
|
81
|
+
}
|
|
82
|
+
} catch (error) {
|
|
83
|
+
result.success = false;
|
|
84
|
+
result.errors.push(`Partial rollback execution failed: ${error.message}`);
|
|
85
|
+
}
|
|
86
|
+
return result;
|
|
104
87
|
}
|
|
105
|
-
|
|
106
|
-
return result;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
88
|
+
/**
|
|
110
89
|
* Rollback SPARC initialization
|
|
111
|
-
*/
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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
|
-
|
|
90
|
+
*/ async rollbackSparcInitialization() {
|
|
91
|
+
const result = {
|
|
92
|
+
success: true,
|
|
93
|
+
errors: [],
|
|
94
|
+
warnings: [],
|
|
95
|
+
actions: []
|
|
96
|
+
};
|
|
126
97
|
try {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
98
|
+
const itemsToRemove = [
|
|
99
|
+
'.roomodes',
|
|
100
|
+
'.roo',
|
|
101
|
+
'.claude/commands/sparc'
|
|
102
|
+
];
|
|
103
|
+
for (const item of itemsToRemove){
|
|
104
|
+
const itemPath = `${this.workingDir}/${item}`;
|
|
105
|
+
try {
|
|
106
|
+
const stat = await fs.stat(itemPath);
|
|
107
|
+
if (stat.isFile) {
|
|
108
|
+
await fs.unlink(itemPath);
|
|
109
|
+
result.actions.push(`Removed file: ${item}`);
|
|
110
|
+
} else if (stat.isDirectory) {
|
|
111
|
+
await fs.unlink(itemPath, {
|
|
112
|
+
recursive: true
|
|
113
|
+
});
|
|
114
|
+
result.actions.push(`Removed directory: ${item}`);
|
|
115
|
+
}
|
|
116
|
+
} catch {
|
|
117
|
+
// Item doesn't exist - that's fine
|
|
118
|
+
result.actions.push(`Item not found (already clean): ${item}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Remove SPARC-specific content from CLAUDE.md
|
|
122
|
+
await this.removeSPARCContentFromClaudeMd();
|
|
123
|
+
result.actions.push('Cleaned SPARC content from CLAUDE.md');
|
|
124
|
+
} catch (error) {
|
|
125
|
+
result.success = false;
|
|
126
|
+
result.errors.push(`SPARC rollback failed: ${error.message}`);
|
|
139
127
|
}
|
|
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}`);
|
|
128
|
+
return result;
|
|
148
129
|
}
|
|
149
|
-
|
|
150
|
-
return result;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/**
|
|
130
|
+
/**
|
|
154
131
|
* Rollback Claude commands
|
|
155
|
-
*/
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
132
|
+
*/ async rollbackClaudeCommands() {
|
|
133
|
+
const result = {
|
|
134
|
+
success: true,
|
|
135
|
+
errors: [],
|
|
136
|
+
warnings: [],
|
|
137
|
+
actions: []
|
|
138
|
+
};
|
|
139
|
+
try {
|
|
140
|
+
const commandsDir = `${this.workingDir}/.claude/commands`;
|
|
141
|
+
try {
|
|
142
|
+
// Remove all command files
|
|
143
|
+
for await (const entry of fs.readdir(commandsDir)){
|
|
144
|
+
if (entry.isFile && entry.name.endsWith('.js')) {
|
|
145
|
+
await fs.unlink(`${commandsDir}/${entry.name}`);
|
|
146
|
+
result.actions.push(`Removed command: ${entry.name}`);
|
|
147
|
+
} else if (entry.isDirectory) {
|
|
148
|
+
await fs.unlink(`${commandsDir}/${entry.name}`, {
|
|
149
|
+
recursive: true
|
|
150
|
+
});
|
|
151
|
+
result.actions.push(`Removed command directory: ${entry.name}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
} catch {
|
|
155
|
+
result.actions.push('Commands directory was already clean');
|
|
156
|
+
}
|
|
157
|
+
} catch (error) {
|
|
158
|
+
result.success = false;
|
|
159
|
+
result.errors.push(`Claude commands rollback failed: ${error.message}`);
|
|
177
160
|
}
|
|
178
|
-
|
|
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}`);
|
|
161
|
+
return result;
|
|
184
162
|
}
|
|
185
|
-
|
|
186
|
-
return result;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/**
|
|
163
|
+
/**
|
|
190
164
|
* Rollback memory setup
|
|
191
|
-
*/
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
-
|
|
165
|
+
*/ async rollbackMemorySetup() {
|
|
166
|
+
const result = {
|
|
167
|
+
success: true,
|
|
168
|
+
errors: [],
|
|
169
|
+
warnings: [],
|
|
170
|
+
actions: []
|
|
171
|
+
};
|
|
206
172
|
try {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
173
|
+
const memoryItems = [
|
|
174
|
+
'memory/claude-flow-data.json',
|
|
175
|
+
'memory/agents',
|
|
176
|
+
'memory/sessions'
|
|
177
|
+
];
|
|
178
|
+
for (const item of memoryItems){
|
|
179
|
+
const itemPath = `${this.workingDir}/${item}`;
|
|
180
|
+
try {
|
|
181
|
+
const stat = await fs.stat(itemPath);
|
|
182
|
+
if (stat.isFile) {
|
|
183
|
+
await fs.unlink(itemPath);
|
|
184
|
+
result.actions.push(`Removed memory file: ${item}`);
|
|
185
|
+
} else if (stat.isDirectory) {
|
|
186
|
+
await fs.unlink(itemPath, {
|
|
187
|
+
recursive: true
|
|
188
|
+
});
|
|
189
|
+
result.actions.push(`Removed memory directory: ${item}`);
|
|
190
|
+
}
|
|
191
|
+
} catch {
|
|
192
|
+
result.actions.push(`Memory item not found: ${item}`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Keep memory directory but clean it
|
|
196
|
+
try {
|
|
197
|
+
await fs.mkdir(`${this.workingDir}/memory`, {
|
|
198
|
+
recursive: true
|
|
199
|
+
});
|
|
200
|
+
result.actions.push('Recreated clean memory directory');
|
|
201
|
+
} catch {
|
|
202
|
+
result.warnings.push('Could not recreate memory directory');
|
|
203
|
+
}
|
|
204
|
+
} catch (error) {
|
|
205
|
+
result.success = false;
|
|
206
|
+
result.errors.push(`Memory setup rollback failed: ${error.message}`);
|
|
218
207
|
}
|
|
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}`);
|
|
208
|
+
return result;
|
|
231
209
|
}
|
|
232
|
-
|
|
233
|
-
return result;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
/**
|
|
210
|
+
/**
|
|
237
211
|
* Rollback coordination setup
|
|
238
|
-
*/
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
212
|
+
*/ async rollbackCoordinationSetup() {
|
|
213
|
+
const result = {
|
|
214
|
+
success: true,
|
|
215
|
+
errors: [],
|
|
216
|
+
warnings: [],
|
|
217
|
+
actions: []
|
|
218
|
+
};
|
|
219
|
+
try {
|
|
220
|
+
const coordinationDir = `${this.workingDir}/coordination`;
|
|
221
|
+
try {
|
|
222
|
+
await fs.unlink(coordinationDir, {
|
|
223
|
+
recursive: true
|
|
224
|
+
});
|
|
225
|
+
result.actions.push('Removed coordination directory');
|
|
226
|
+
} catch {
|
|
227
|
+
result.actions.push('Coordination directory was already clean');
|
|
228
|
+
}
|
|
229
|
+
// Remove coordination.md
|
|
230
|
+
try {
|
|
231
|
+
await fs.unlink(`${this.workingDir}/coordination.md`);
|
|
232
|
+
result.actions.push('Removed coordination.md');
|
|
233
|
+
} catch {
|
|
234
|
+
result.actions.push('coordination.md was already clean');
|
|
235
|
+
}
|
|
236
|
+
} catch (error) {
|
|
237
|
+
result.success = false;
|
|
238
|
+
result.errors.push(`Coordination setup rollback failed: ${error.message}`);
|
|
239
|
+
}
|
|
240
|
+
return result;
|
|
267
241
|
}
|
|
268
|
-
|
|
269
|
-
return result;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
/**
|
|
242
|
+
/**
|
|
273
243
|
* Rollback executable creation
|
|
274
|
-
*/
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
result.errors.push(`Executable rollback failed: ${error.message}`);
|
|
244
|
+
*/ async rollbackExecutableCreation() {
|
|
245
|
+
const result = {
|
|
246
|
+
success: true,
|
|
247
|
+
errors: [],
|
|
248
|
+
warnings: [],
|
|
249
|
+
actions: []
|
|
250
|
+
};
|
|
251
|
+
try {
|
|
252
|
+
const executablePath = `${this.workingDir}/claude-flow`;
|
|
253
|
+
try {
|
|
254
|
+
await fs.unlink(executablePath);
|
|
255
|
+
result.actions.push('Removed claude-flow-novice executable');
|
|
256
|
+
} catch {
|
|
257
|
+
result.actions.push('claude-flow-novice executable was already clean');
|
|
258
|
+
}
|
|
259
|
+
} catch (error) {
|
|
260
|
+
result.success = false;
|
|
261
|
+
result.errors.push(`Executable rollback failed: ${error.message}`);
|
|
262
|
+
}
|
|
263
|
+
return result;
|
|
295
264
|
}
|
|
296
|
-
|
|
297
|
-
return result;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
/**
|
|
265
|
+
/**
|
|
301
266
|
* Generic phase rollback
|
|
302
|
-
*/
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
267
|
+
*/ async rollbackGenericPhase(phase, checkpoint) {
|
|
268
|
+
const result = {
|
|
269
|
+
success: true,
|
|
270
|
+
errors: [],
|
|
271
|
+
warnings: [],
|
|
272
|
+
actions: []
|
|
273
|
+
};
|
|
274
|
+
try {
|
|
275
|
+
// Use checkpoint data to determine what to rollback
|
|
276
|
+
if (checkpoint && checkpoint.data) {
|
|
277
|
+
const actions = checkpoint.data.actions || [];
|
|
278
|
+
// Reverse the actions
|
|
279
|
+
for (const action of actions.reverse()){
|
|
280
|
+
const rollbackResult = await this.reverseAction(action);
|
|
281
|
+
if (rollbackResult.success) {
|
|
282
|
+
result.actions.push(rollbackResult.description);
|
|
283
|
+
} else {
|
|
284
|
+
result.warnings.push(`Could not reverse action: ${action.type}`);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
} catch (error) {
|
|
289
|
+
result.success = false;
|
|
290
|
+
result.errors.push(`Generic phase rollback failed: ${error.message}`);
|
|
324
291
|
}
|
|
325
|
-
|
|
326
|
-
} catch (error) {
|
|
327
|
-
result.success = false;
|
|
328
|
-
result.errors.push(`Generic phase rollback failed: ${error.message}`);
|
|
292
|
+
return result;
|
|
329
293
|
}
|
|
330
|
-
|
|
331
|
-
return result;
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
/**
|
|
294
|
+
/**
|
|
335
295
|
* Clean up all initialization artifacts
|
|
336
|
-
*/
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
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
|
-
|
|
296
|
+
*/ async cleanupInitializationArtifacts() {
|
|
297
|
+
const result = {
|
|
298
|
+
success: true,
|
|
299
|
+
errors: [],
|
|
300
|
+
actions: []
|
|
301
|
+
};
|
|
360
302
|
try {
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
303
|
+
const artifactsToRemove = [
|
|
304
|
+
'CLAUDE.md',
|
|
305
|
+
'memory-bank.md',
|
|
306
|
+
'coordination.md',
|
|
307
|
+
'claude-flow',
|
|
308
|
+
'.roomodes',
|
|
309
|
+
'.roo',
|
|
310
|
+
'.claude',
|
|
311
|
+
'memory',
|
|
312
|
+
'coordination'
|
|
313
|
+
];
|
|
314
|
+
for (const artifact of artifactsToRemove){
|
|
315
|
+
const artifactPath = `${this.workingDir}/${artifact}`;
|
|
316
|
+
try {
|
|
317
|
+
const stat = await fs.stat(artifactPath);
|
|
318
|
+
if (stat.isFile) {
|
|
319
|
+
await fs.unlink(artifactPath);
|
|
320
|
+
result.actions.push(`Removed file: ${artifact}`);
|
|
321
|
+
} else if (stat.isDirectory) {
|
|
322
|
+
await fs.unlink(artifactPath, {
|
|
323
|
+
recursive: true
|
|
324
|
+
});
|
|
325
|
+
result.actions.push(`Removed directory: ${artifact}`);
|
|
326
|
+
}
|
|
327
|
+
} catch {
|
|
328
|
+
// Artifact doesn't exist - that's fine
|
|
329
|
+
result.actions.push(`Artifact not found: ${artifact}`);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
} catch (error) {
|
|
333
|
+
result.success = false;
|
|
334
|
+
result.errors.push(`Cleanup failed: ${error.message}`);
|
|
373
335
|
}
|
|
374
|
-
|
|
375
|
-
} catch (error) {
|
|
376
|
-
result.success = false;
|
|
377
|
-
result.errors.push(`Cleanup failed: ${error.message}`);
|
|
336
|
+
return result;
|
|
378
337
|
}
|
|
379
|
-
|
|
380
|
-
return result;
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
/**
|
|
338
|
+
/**
|
|
384
339
|
* Restore from backup
|
|
385
|
-
*/
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
result.errors.push(`Restore from backup failed: ${error.message}`);
|
|
340
|
+
*/ async restoreFromBackup(backupId) {
|
|
341
|
+
const result = {
|
|
342
|
+
success: true,
|
|
343
|
+
errors: [],
|
|
344
|
+
actions: []
|
|
345
|
+
};
|
|
346
|
+
try {
|
|
347
|
+
// This would typically use the BackupManager
|
|
348
|
+
// For now, we'll simulate the restoration
|
|
349
|
+
result.actions.push(`Restored from backup: ${backupId}`);
|
|
350
|
+
// In a real implementation, this would:
|
|
351
|
+
// 1. Read the backup manifest
|
|
352
|
+
// 2. Restore each file and directory
|
|
353
|
+
// 3. Set correct permissions
|
|
354
|
+
// 4. Verify restoration
|
|
355
|
+
} catch (error) {
|
|
356
|
+
result.success = false;
|
|
357
|
+
result.errors.push(`Restore from backup failed: ${error.message}`);
|
|
358
|
+
}
|
|
359
|
+
return result;
|
|
406
360
|
}
|
|
407
|
-
|
|
408
|
-
return result;
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
/**
|
|
361
|
+
/**
|
|
412
362
|
* Verify rollback completed successfully
|
|
413
|
-
*/
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
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) {
|
|
363
|
+
*/ async verifyRollback() {
|
|
364
|
+
const result = {
|
|
365
|
+
success: true,
|
|
366
|
+
errors: [],
|
|
367
|
+
actions: []
|
|
368
|
+
};
|
|
433
369
|
try {
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
370
|
+
const expectedCleanItems = [
|
|
371
|
+
'CLAUDE.md',
|
|
372
|
+
'memory-bank.md',
|
|
373
|
+
'coordination.md',
|
|
374
|
+
'.roomodes',
|
|
375
|
+
'.roo',
|
|
376
|
+
'claude-flow'
|
|
377
|
+
];
|
|
378
|
+
let foundArtifacts = 0;
|
|
379
|
+
for (const item of expectedCleanItems){
|
|
380
|
+
try {
|
|
381
|
+
await fs.stat(`${this.workingDir}/${item}`);
|
|
382
|
+
foundArtifacts++;
|
|
383
|
+
} catch {
|
|
384
|
+
// Item doesn't exist - good
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
if (foundArtifacts > 0) {
|
|
388
|
+
result.success = false;
|
|
389
|
+
result.errors.push(`Rollback incomplete: ${foundArtifacts} artifacts still present`);
|
|
390
|
+
} else {
|
|
391
|
+
result.actions.push('Rollback verification passed');
|
|
392
|
+
}
|
|
393
|
+
} catch (error) {
|
|
394
|
+
result.success = false;
|
|
395
|
+
result.errors.push(`Rollback verification failed: ${error.message}`);
|
|
438
396
|
}
|
|
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}`);
|
|
397
|
+
return result;
|
|
450
398
|
}
|
|
451
|
-
|
|
452
|
-
return result;
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
/**
|
|
399
|
+
/**
|
|
456
400
|
* Remove SPARC content from CLAUDE.md
|
|
457
|
-
*/
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
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
|
|
401
|
+
*/ async removeSPARCContentFromClaudeMd() {
|
|
402
|
+
try {
|
|
403
|
+
const claudePath = `${this.workingDir}/CLAUDE.md`;
|
|
404
|
+
try {
|
|
405
|
+
const content = await fs.readFile(claudePath, 'utf8');
|
|
406
|
+
// Remove SPARC-specific sections
|
|
407
|
+
const cleanedContent = content.replace(/## SPARC Development Commands[\s\S]*?(?=##|\n#|\n$)/g, '').replace(/### SPARC[\s\S]*?(?=###|\n##|\n#|\n$)/g, '').replace(/\n{3,}/g, '\n\n') // Clean up multiple newlines
|
|
408
|
+
.trim();
|
|
409
|
+
await fs.writeFile(claudePath, cleanedContent, 'utf8');
|
|
410
|
+
} catch {
|
|
411
|
+
// File doesn't exist or can't be modified
|
|
412
|
+
}
|
|
413
|
+
} catch {
|
|
414
|
+
// Error handling CLAUDE.md - continue silently
|
|
415
|
+
}
|
|
478
416
|
}
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
/**
|
|
417
|
+
/**
|
|
482
418
|
* Reverse a specific action
|
|
483
|
-
*/
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
419
|
+
*/ async reverseAction(action) {
|
|
420
|
+
const result = {
|
|
421
|
+
success: true,
|
|
422
|
+
description: ''
|
|
423
|
+
};
|
|
424
|
+
try {
|
|
425
|
+
switch(action.type){
|
|
426
|
+
case 'file_created':
|
|
427
|
+
await fs.unlink(action.path);
|
|
428
|
+
result.description = `Removed created file: ${action.path}`;
|
|
429
|
+
break;
|
|
430
|
+
case 'directory_created':
|
|
431
|
+
await fs.unlink(action.path, {
|
|
432
|
+
recursive: true
|
|
433
|
+
});
|
|
434
|
+
result.description = `Removed created directory: ${action.path}`;
|
|
435
|
+
break;
|
|
436
|
+
case 'file_modified':
|
|
437
|
+
if (action.backup) {
|
|
438
|
+
await fs.writeFile(action.path, action.backup, 'utf8');
|
|
439
|
+
result.description = `Restored modified file: ${action.path}`;
|
|
440
|
+
}
|
|
441
|
+
break;
|
|
442
|
+
default:
|
|
443
|
+
result.success = false;
|
|
444
|
+
result.description = `Unknown action type: ${action.type}`;
|
|
445
|
+
break;
|
|
446
|
+
}
|
|
447
|
+
} catch (error) {
|
|
448
|
+
result.success = false;
|
|
449
|
+
result.description = `Failed to reverse action: ${error.message}`;
|
|
450
|
+
}
|
|
451
|
+
return result;
|
|
452
|
+
}
|
|
453
|
+
constructor(workingDir){
|
|
454
|
+
this.workingDir = workingDir;
|
|
517
455
|
}
|
|
518
|
-
|
|
519
|
-
return result;
|
|
520
|
-
}
|
|
521
456
|
}
|