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,399 +1,324 @@
|
|
|
1
1
|
// rollback/index.js - Comprehensive rollback system for SPARC initialization
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { printSuccess, printError, printWarning } from '../../../utils.js';
|
|
8
|
-
|
|
2
|
+
import { BackupManager } from "./backup-manager.js";
|
|
3
|
+
import { RollbackExecutor } from "./rollback-executor.js";
|
|
4
|
+
import { StateTracker } from "./state-tracker.js";
|
|
5
|
+
import { RecoveryManager } from "./recovery-manager.js";
|
|
6
|
+
import { printSuccess, printError, printWarning } from "../../../utils.js";
|
|
9
7
|
/**
|
|
10
8
|
* Main rollback orchestrator
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
constructor(workingDir) {
|
|
14
|
-
this.workingDir = workingDir;
|
|
15
|
-
this.backupManager = new BackupManager(workingDir);
|
|
16
|
-
this.rollbackExecutor = new RollbackExecutor(workingDir);
|
|
17
|
-
this.stateTracker = new StateTracker(workingDir);
|
|
18
|
-
this.recoveryManager = new RecoveryManager(workingDir);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
9
|
+
*/ export class RollbackSystem {
|
|
10
|
+
/**
|
|
22
11
|
* Create backup before initialization
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
result.success = false;
|
|
55
|
-
result.errors.push(`Backup creation failed: ${error.message}`);
|
|
56
|
-
printError(`Backup failed: ${error.message}`);
|
|
12
|
+
*/ async createPreInitBackup() {
|
|
13
|
+
const result = {
|
|
14
|
+
success: true,
|
|
15
|
+
backupId: null,
|
|
16
|
+
errors: [],
|
|
17
|
+
warnings: []
|
|
18
|
+
};
|
|
19
|
+
try {
|
|
20
|
+
console.log('🔄 Creating pre-initialization backup...');
|
|
21
|
+
const backup = await this.backupManager.createBackup('pre-init');
|
|
22
|
+
result.backupId = backup.id;
|
|
23
|
+
result.success = backup.success;
|
|
24
|
+
if (backup.success) {
|
|
25
|
+
printSuccess(`Backup created: ${backup.id}`);
|
|
26
|
+
console.log(` 📁 Backup location: ${backup.location}`);
|
|
27
|
+
// Record rollback point
|
|
28
|
+
await this.stateTracker.recordRollbackPoint('pre-init', {
|
|
29
|
+
backupId: backup.id,
|
|
30
|
+
timestamp: Date.now(),
|
|
31
|
+
state: 'clean'
|
|
32
|
+
});
|
|
33
|
+
} else {
|
|
34
|
+
result.errors.push(...backup.errors);
|
|
35
|
+
printError('Failed to create backup');
|
|
36
|
+
}
|
|
37
|
+
} catch (error) {
|
|
38
|
+
result.success = false;
|
|
39
|
+
result.errors.push(`Backup creation failed: ${error.message}`);
|
|
40
|
+
printError(`Backup failed: ${error.message}`);
|
|
41
|
+
}
|
|
42
|
+
return result;
|
|
57
43
|
}
|
|
58
|
-
|
|
59
|
-
return result;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
44
|
+
/**
|
|
63
45
|
* Create checkpoint during initialization
|
|
64
|
-
*/
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
result.errors.push(`Checkpoint creation failed: ${error.message}`);
|
|
46
|
+
*/ async createCheckpoint(phase, data = {}) {
|
|
47
|
+
const result = {
|
|
48
|
+
success: true,
|
|
49
|
+
checkpointId: null,
|
|
50
|
+
errors: []
|
|
51
|
+
};
|
|
52
|
+
try {
|
|
53
|
+
const checkpoint = await this.stateTracker.createCheckpoint(phase, data);
|
|
54
|
+
result.checkpointId = checkpoint.id;
|
|
55
|
+
result.success = checkpoint.success;
|
|
56
|
+
if (!checkpoint.success) {
|
|
57
|
+
result.errors.push(...checkpoint.errors);
|
|
58
|
+
}
|
|
59
|
+
} catch (error) {
|
|
60
|
+
result.success = false;
|
|
61
|
+
result.errors.push(`Checkpoint creation failed: ${error.message}`);
|
|
62
|
+
}
|
|
63
|
+
return result;
|
|
83
64
|
}
|
|
84
|
-
|
|
85
|
-
return result;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
65
|
+
/**
|
|
89
66
|
* Perform full rollback to pre-initialization state
|
|
90
|
-
*/
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
67
|
+
*/ async performFullRollback(backupId = null) {
|
|
68
|
+
const result = {
|
|
69
|
+
success: true,
|
|
70
|
+
errors: [],
|
|
71
|
+
warnings: [],
|
|
72
|
+
actions: []
|
|
73
|
+
};
|
|
74
|
+
try {
|
|
75
|
+
console.log('🔄 Performing full rollback...');
|
|
76
|
+
// Find the appropriate backup
|
|
77
|
+
const targetBackup = backupId || await this.findLatestPreInitBackup();
|
|
78
|
+
if (!targetBackup) {
|
|
79
|
+
result.success = false;
|
|
80
|
+
result.errors.push('No suitable backup found for rollback');
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
// Execute rollback
|
|
84
|
+
const rollbackResult = await this.rollbackExecutor.executeFullRollback(targetBackup);
|
|
85
|
+
result.success = rollbackResult.success;
|
|
86
|
+
result.errors.push(...rollbackResult.errors);
|
|
87
|
+
result.warnings.push(...rollbackResult.warnings);
|
|
88
|
+
result.actions.push(...rollbackResult.actions);
|
|
89
|
+
if (rollbackResult.success) {
|
|
90
|
+
printSuccess('Full rollback completed successfully');
|
|
91
|
+
// Update state tracking
|
|
92
|
+
await this.stateTracker.recordRollback(targetBackup, 'full');
|
|
93
|
+
} else {
|
|
94
|
+
printError('Full rollback failed');
|
|
95
|
+
}
|
|
96
|
+
} catch (error) {
|
|
97
|
+
result.success = false;
|
|
98
|
+
result.errors.push(`Rollback failed: ${error.message}`);
|
|
99
|
+
printError(`Rollback failed: ${error.message}`);
|
|
100
|
+
}
|
|
107
101
|
return result;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// Execute rollback
|
|
111
|
-
const rollbackResult = await this.rollbackExecutor.executeFullRollback(targetBackup);
|
|
112
|
-
result.success = rollbackResult.success;
|
|
113
|
-
result.errors.push(...rollbackResult.errors);
|
|
114
|
-
result.warnings.push(...rollbackResult.warnings);
|
|
115
|
-
result.actions.push(...rollbackResult.actions);
|
|
116
|
-
|
|
117
|
-
if (rollbackResult.success) {
|
|
118
|
-
printSuccess('Full rollback completed successfully');
|
|
119
|
-
|
|
120
|
-
// Update state tracking
|
|
121
|
-
await this.stateTracker.recordRollback(targetBackup, 'full');
|
|
122
|
-
} else {
|
|
123
|
-
printError('Full rollback failed');
|
|
124
|
-
}
|
|
125
|
-
} catch (error) {
|
|
126
|
-
result.success = false;
|
|
127
|
-
result.errors.push(`Rollback failed: ${error.message}`);
|
|
128
|
-
printError(`Rollback failed: ${error.message}`);
|
|
129
102
|
}
|
|
130
|
-
|
|
131
|
-
return result;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
103
|
+
/**
|
|
135
104
|
* Perform partial rollback to specific checkpoint
|
|
136
|
-
*/
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
105
|
+
*/ async performPartialRollback(phase, checkpointId = null) {
|
|
106
|
+
const result = {
|
|
107
|
+
success: true,
|
|
108
|
+
errors: [],
|
|
109
|
+
warnings: [],
|
|
110
|
+
actions: []
|
|
111
|
+
};
|
|
112
|
+
try {
|
|
113
|
+
console.log(`🔄 Performing partial rollback for phase: ${phase}`);
|
|
114
|
+
// Find checkpoint
|
|
115
|
+
const checkpoint = checkpointId || await this.findLatestCheckpoint(phase);
|
|
116
|
+
if (!checkpoint) {
|
|
117
|
+
result.success = false;
|
|
118
|
+
result.errors.push(`No checkpoint found for phase: ${phase}`);
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
// Execute partial rollback
|
|
122
|
+
const rollbackResult = await this.rollbackExecutor.executePartialRollback(phase, checkpoint);
|
|
123
|
+
result.success = rollbackResult.success;
|
|
124
|
+
result.errors.push(...rollbackResult.errors);
|
|
125
|
+
result.warnings.push(...rollbackResult.warnings);
|
|
126
|
+
result.actions.push(...rollbackResult.actions);
|
|
127
|
+
if (rollbackResult.success) {
|
|
128
|
+
printSuccess(`Partial rollback completed for phase: ${phase}`);
|
|
129
|
+
// Update state tracking
|
|
130
|
+
await this.stateTracker.recordRollback(checkpoint, 'partial', phase);
|
|
131
|
+
} else {
|
|
132
|
+
printError(`Partial rollback failed for phase: ${phase}`);
|
|
133
|
+
}
|
|
134
|
+
} catch (error) {
|
|
135
|
+
result.success = false;
|
|
136
|
+
result.errors.push(`Partial rollback failed: ${error.message}`);
|
|
137
|
+
printError(`Partial rollback failed: ${error.message}`);
|
|
138
|
+
}
|
|
153
139
|
return result;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
// Execute partial rollback
|
|
157
|
-
const rollbackResult = await this.rollbackExecutor.executePartialRollback(phase, checkpoint);
|
|
158
|
-
result.success = rollbackResult.success;
|
|
159
|
-
result.errors.push(...rollbackResult.errors);
|
|
160
|
-
result.warnings.push(...rollbackResult.warnings);
|
|
161
|
-
result.actions.push(...rollbackResult.actions);
|
|
162
|
-
|
|
163
|
-
if (rollbackResult.success) {
|
|
164
|
-
printSuccess(`Partial rollback completed for phase: ${phase}`);
|
|
165
|
-
|
|
166
|
-
// Update state tracking
|
|
167
|
-
await this.stateTracker.recordRollback(checkpoint, 'partial', phase);
|
|
168
|
-
} else {
|
|
169
|
-
printError(`Partial rollback failed for phase: ${phase}`);
|
|
170
|
-
}
|
|
171
|
-
} catch (error) {
|
|
172
|
-
result.success = false;
|
|
173
|
-
result.errors.push(`Partial rollback failed: ${error.message}`);
|
|
174
|
-
printError(`Partial rollback failed: ${error.message}`);
|
|
175
140
|
}
|
|
176
|
-
|
|
177
|
-
return result;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
141
|
+
/**
|
|
181
142
|
* Auto-recovery from common failures
|
|
182
|
-
*/
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
result.errors.push(`Auto-recovery failed: ${error.message}`);
|
|
208
|
-
printError(`Auto-recovery failed: ${error.message}`);
|
|
143
|
+
*/ async performAutoRecovery(failureType, context = {}) {
|
|
144
|
+
const result = {
|
|
145
|
+
success: true,
|
|
146
|
+
errors: [],
|
|
147
|
+
warnings: [],
|
|
148
|
+
recoveryActions: []
|
|
149
|
+
};
|
|
150
|
+
try {
|
|
151
|
+
console.log(`🔧 Attempting auto-recovery for: ${failureType}`);
|
|
152
|
+
const recoveryResult = await this.recoveryManager.performRecovery(failureType, context);
|
|
153
|
+
result.success = recoveryResult.success;
|
|
154
|
+
result.errors.push(...recoveryResult.errors);
|
|
155
|
+
result.warnings.push(...recoveryResult.warnings);
|
|
156
|
+
result.recoveryActions.push(...recoveryResult.actions);
|
|
157
|
+
if (recoveryResult.success) {
|
|
158
|
+
printSuccess(`Auto-recovery completed for: ${failureType}`);
|
|
159
|
+
} else {
|
|
160
|
+
printWarning(`Auto-recovery failed for: ${failureType}`);
|
|
161
|
+
}
|
|
162
|
+
} catch (error) {
|
|
163
|
+
result.success = false;
|
|
164
|
+
result.errors.push(`Auto-recovery failed: ${error.message}`);
|
|
165
|
+
printError(`Auto-recovery failed: ${error.message}`);
|
|
166
|
+
}
|
|
167
|
+
return result;
|
|
209
168
|
}
|
|
210
|
-
|
|
211
|
-
return result;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
/**
|
|
169
|
+
/**
|
|
215
170
|
* List available rollback points
|
|
216
|
-
*/
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
result.errors.push(`Failed to list rollback points: ${error.message}`);
|
|
171
|
+
*/ async listRollbackPoints() {
|
|
172
|
+
const result = {
|
|
173
|
+
success: true,
|
|
174
|
+
rollbackPoints: [],
|
|
175
|
+
checkpoints: [],
|
|
176
|
+
errors: []
|
|
177
|
+
};
|
|
178
|
+
try {
|
|
179
|
+
// Get rollback points
|
|
180
|
+
const rollbackPoints = await this.stateTracker.getRollbackPoints();
|
|
181
|
+
result.rollbackPoints = rollbackPoints;
|
|
182
|
+
// Get checkpoints
|
|
183
|
+
const checkpoints = await this.stateTracker.getCheckpoints();
|
|
184
|
+
result.checkpoints = checkpoints;
|
|
185
|
+
} catch (error) {
|
|
186
|
+
result.success = false;
|
|
187
|
+
result.errors.push(`Failed to list rollback points: ${error.message}`);
|
|
188
|
+
}
|
|
189
|
+
return result;
|
|
236
190
|
}
|
|
237
|
-
|
|
238
|
-
return result;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
/**
|
|
191
|
+
/**
|
|
242
192
|
* Clean up old backups and checkpoints
|
|
243
|
-
*/
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
result.errors.push(`Cleanup failed: ${error.message}`);
|
|
193
|
+
*/ async cleanupOldBackups(keepCount = 5) {
|
|
194
|
+
const result = {
|
|
195
|
+
success: true,
|
|
196
|
+
cleaned: [],
|
|
197
|
+
errors: []
|
|
198
|
+
};
|
|
199
|
+
try {
|
|
200
|
+
const cleanupResult = await this.backupManager.cleanupOldBackups(keepCount);
|
|
201
|
+
result.success = cleanupResult.success;
|
|
202
|
+
result.cleaned = cleanupResult.cleaned;
|
|
203
|
+
result.errors.push(...cleanupResult.errors);
|
|
204
|
+
if (cleanupResult.success) {
|
|
205
|
+
console.log(`🗑️ Cleaned up ${cleanupResult.cleaned.length} old backups`);
|
|
206
|
+
}
|
|
207
|
+
} catch (error) {
|
|
208
|
+
result.success = false;
|
|
209
|
+
result.errors.push(`Cleanup failed: ${error.message}`);
|
|
210
|
+
}
|
|
211
|
+
return result;
|
|
263
212
|
}
|
|
264
|
-
|
|
265
|
-
return result;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
/**
|
|
213
|
+
/**
|
|
269
214
|
* Validate rollback system integrity
|
|
270
|
-
*/
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
215
|
+
*/ async validateRollbackSystem() {
|
|
216
|
+
const result = {
|
|
217
|
+
success: true,
|
|
218
|
+
checks: {},
|
|
219
|
+
errors: [],
|
|
220
|
+
warnings: []
|
|
221
|
+
};
|
|
222
|
+
try {
|
|
223
|
+
// Check backup system
|
|
224
|
+
const backupCheck = await this.backupManager.validateBackupSystem();
|
|
225
|
+
result.checks.backup = backupCheck;
|
|
226
|
+
if (!backupCheck.success) {
|
|
227
|
+
result.success = false;
|
|
228
|
+
result.errors.push(...backupCheck.errors);
|
|
229
|
+
}
|
|
230
|
+
// Check state tracking
|
|
231
|
+
const stateCheck = await this.stateTracker.validateStateTracking();
|
|
232
|
+
result.checks.stateTracking = stateCheck;
|
|
233
|
+
if (!stateCheck.success) {
|
|
234
|
+
result.warnings.push(...stateCheck.errors);
|
|
235
|
+
}
|
|
236
|
+
// Check recovery system
|
|
237
|
+
const recoveryCheck = await this.recoveryManager.validateRecoverySystem();
|
|
238
|
+
result.checks.recovery = recoveryCheck;
|
|
239
|
+
if (!recoveryCheck.success) {
|
|
240
|
+
result.warnings.push(...recoveryCheck.errors);
|
|
241
|
+
}
|
|
242
|
+
} catch (error) {
|
|
243
|
+
result.success = false;
|
|
244
|
+
result.errors.push(`Rollback system validation failed: ${error.message}`);
|
|
245
|
+
}
|
|
246
|
+
return result;
|
|
247
|
+
}
|
|
248
|
+
// Helper methods
|
|
249
|
+
async findLatestPreInitBackup() {
|
|
250
|
+
try {
|
|
251
|
+
const rollbackPoints = await this.stateTracker.getRollbackPoints();
|
|
252
|
+
const preInitPoints = rollbackPoints.filter((point)=>point.type === 'pre-init');
|
|
253
|
+
if (preInitPoints.length > 0) {
|
|
254
|
+
return preInitPoints.sort((a, b)=>b.timestamp - a.timestamp)[0].backupId;
|
|
255
|
+
}
|
|
256
|
+
return null;
|
|
257
|
+
} catch {
|
|
258
|
+
return null;
|
|
259
|
+
}
|
|
304
260
|
}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
if (preInitPoints.length > 0) {
|
|
317
|
-
return preInitPoints.sort((a, b) => b.timestamp - a.timestamp)[0].backupId;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
return null;
|
|
321
|
-
} catch {
|
|
322
|
-
return null;
|
|
261
|
+
async findLatestCheckpoint(phase) {
|
|
262
|
+
try {
|
|
263
|
+
const checkpoints = await this.stateTracker.getCheckpoints();
|
|
264
|
+
const phaseCheckpoints = checkpoints.filter((checkpoint)=>checkpoint.phase === phase);
|
|
265
|
+
if (phaseCheckpoints.length > 0) {
|
|
266
|
+
return phaseCheckpoints.sort((a, b)=>b.timestamp - a.timestamp)[0];
|
|
267
|
+
}
|
|
268
|
+
return null;
|
|
269
|
+
} catch {
|
|
270
|
+
return null;
|
|
271
|
+
}
|
|
323
272
|
}
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
if (phaseCheckpoints.length > 0) {
|
|
332
|
-
return phaseCheckpoints.sort((a, b) => b.timestamp - a.timestamp)[0];
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
return null;
|
|
336
|
-
} catch {
|
|
337
|
-
return null;
|
|
273
|
+
constructor(workingDir){
|
|
274
|
+
this.workingDir = workingDir;
|
|
275
|
+
this.backupManager = new BackupManager(workingDir);
|
|
276
|
+
this.rollbackExecutor = new RollbackExecutor(workingDir);
|
|
277
|
+
this.stateTracker = new StateTracker(workingDir);
|
|
278
|
+
this.recoveryManager = new RecoveryManager(workingDir);
|
|
338
279
|
}
|
|
339
|
-
}
|
|
340
280
|
}
|
|
341
|
-
|
|
342
281
|
/**
|
|
343
282
|
* Atomic operation wrapper
|
|
344
|
-
*/
|
|
345
|
-
|
|
346
|
-
constructor(rollbackSystem, operationName) {
|
|
347
|
-
this.rollbackSystem = rollbackSystem;
|
|
348
|
-
this.operationName = operationName;
|
|
349
|
-
this.checkpointId = null;
|
|
350
|
-
this.completed = false;
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
/**
|
|
283
|
+
*/ export class AtomicOperation {
|
|
284
|
+
/**
|
|
354
285
|
* Begin atomic operation
|
|
355
|
-
*/
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
/**
|
|
286
|
+
*/ async begin() {
|
|
287
|
+
const checkpoint = await this.rollbackSystem.createCheckpoint(`atomic-${this.operationName}`, {
|
|
288
|
+
operation: this.operationName,
|
|
289
|
+
started: Date.now()
|
|
290
|
+
});
|
|
291
|
+
this.checkpointId = checkpoint.checkpointId;
|
|
292
|
+
return checkpoint.success;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
367
295
|
* Commit atomic operation
|
|
368
|
-
*/
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
});
|
|
296
|
+
*/ async commit() {
|
|
297
|
+
this.completed = true;
|
|
298
|
+
// Mark checkpoint as committed
|
|
299
|
+
if (this.checkpointId) {
|
|
300
|
+
await this.rollbackSystem.stateTracker.updateCheckpoint(this.checkpointId, {
|
|
301
|
+
status: 'committed',
|
|
302
|
+
completed: Date.now()
|
|
303
|
+
});
|
|
304
|
+
}
|
|
378
305
|
}
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
/**
|
|
306
|
+
/**
|
|
382
307
|
* Rollback atomic operation
|
|
383
|
-
*/
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
308
|
+
*/ async rollback() {
|
|
309
|
+
if (this.checkpointId && !this.completed) {
|
|
310
|
+
await this.rollbackSystem.performPartialRollback(`atomic-${this.operationName}`, this.checkpointId);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
constructor(rollbackSystem, operationName){
|
|
314
|
+
this.rollbackSystem = rollbackSystem;
|
|
315
|
+
this.operationName = operationName;
|
|
316
|
+
this.checkpointId = null;
|
|
317
|
+
this.completed = false;
|
|
390
318
|
}
|
|
391
|
-
}
|
|
392
319
|
}
|
|
393
|
-
|
|
394
320
|
/**
|
|
395
321
|
* Create and manage atomic operations
|
|
396
|
-
*/
|
|
397
|
-
|
|
398
|
-
return new AtomicOperation(rollbackSystem, operationName);
|
|
322
|
+
*/ export function createAtomicOperation(rollbackSystem, operationName) {
|
|
323
|
+
return new AtomicOperation(rollbackSystem, operationName);
|
|
399
324
|
}
|