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,778 @@
|
|
|
1
|
+
// recovery-manager.js - Automated recovery procedures for common failures
|
|
2
|
+
|
|
3
|
+
export class RecoveryManager {
|
|
4
|
+
constructor(workingDir) {
|
|
5
|
+
this.workingDir = workingDir;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Perform automated recovery based on failure type
|
|
10
|
+
*/
|
|
11
|
+
async performRecovery(failureType, context = {}) {
|
|
12
|
+
const result = {
|
|
13
|
+
success: true,
|
|
14
|
+
errors: [],
|
|
15
|
+
warnings: [],
|
|
16
|
+
actions: [],
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
console.log(`🔧 Attempting recovery for: ${failureType}`);
|
|
21
|
+
|
|
22
|
+
let recoveryResult;
|
|
23
|
+
|
|
24
|
+
switch (failureType) {
|
|
25
|
+
case 'permission-denied':
|
|
26
|
+
recoveryResult = await this.recoverFromPermissionDenied(context);
|
|
27
|
+
break;
|
|
28
|
+
|
|
29
|
+
case 'disk-space':
|
|
30
|
+
recoveryResult = await this.recoverFromDiskSpace(context);
|
|
31
|
+
break;
|
|
32
|
+
|
|
33
|
+
case 'missing-dependencies':
|
|
34
|
+
recoveryResult = await this.recoverFromMissingDependencies(context);
|
|
35
|
+
break;
|
|
36
|
+
|
|
37
|
+
case 'corrupted-config':
|
|
38
|
+
recoveryResult = await this.recoverFromCorruptedConfig(context);
|
|
39
|
+
break;
|
|
40
|
+
|
|
41
|
+
case 'partial-initialization':
|
|
42
|
+
recoveryResult = await this.recoverFromPartialInitialization(context);
|
|
43
|
+
break;
|
|
44
|
+
|
|
45
|
+
case 'sparc-failure':
|
|
46
|
+
recoveryResult = await this.recoverFromSparcFailure(context);
|
|
47
|
+
break;
|
|
48
|
+
|
|
49
|
+
case 'executable-creation-failure':
|
|
50
|
+
recoveryResult = await this.recoverFromExecutableFailure(context);
|
|
51
|
+
break;
|
|
52
|
+
|
|
53
|
+
case 'memory-setup-failure':
|
|
54
|
+
recoveryResult = await this.recoverFromMemorySetupFailure(context);
|
|
55
|
+
break;
|
|
56
|
+
|
|
57
|
+
default:
|
|
58
|
+
recoveryResult = await this.performGenericRecovery(failureType, context);
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
result.success = recoveryResult.success;
|
|
63
|
+
result.errors.push(...recoveryResult.errors);
|
|
64
|
+
result.warnings.push(...recoveryResult.warnings);
|
|
65
|
+
result.actions.push(...recoveryResult.actions);
|
|
66
|
+
} catch (error) {
|
|
67
|
+
result.success = false;
|
|
68
|
+
result.errors.push(`Recovery failed: ${error.message}`);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Recover from permission denied errors
|
|
76
|
+
*/
|
|
77
|
+
async recoverFromPermissionDenied(context) {
|
|
78
|
+
const result = {
|
|
79
|
+
success: true,
|
|
80
|
+
errors: [],
|
|
81
|
+
warnings: [],
|
|
82
|
+
actions: [],
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
try {
|
|
86
|
+
// Try to fix permissions on the working directory
|
|
87
|
+
if (Deno.build.os !== 'windows') {
|
|
88
|
+
try {
|
|
89
|
+
const command = new Deno.Command('chmod', {
|
|
90
|
+
args: ['-R', '755', this.workingDir],
|
|
91
|
+
stdout: 'piped',
|
|
92
|
+
stderr: 'piped',
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
const { success } = await command.output();
|
|
96
|
+
|
|
97
|
+
if (success) {
|
|
98
|
+
result.actions.push('Fixed directory permissions');
|
|
99
|
+
} else {
|
|
100
|
+
result.warnings.push('Could not fix permissions automatically');
|
|
101
|
+
}
|
|
102
|
+
} catch {
|
|
103
|
+
result.warnings.push('Permission fix command not available');
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Try to create a test file to verify permissions
|
|
108
|
+
try {
|
|
109
|
+
const testFile = `${this.workingDir}/.permission-test`;
|
|
110
|
+
await Deno.writeTextFile(testFile, 'test');
|
|
111
|
+
await Deno.remove(testFile);
|
|
112
|
+
result.actions.push('Verified write permissions restored');
|
|
113
|
+
} catch {
|
|
114
|
+
result.success = false;
|
|
115
|
+
result.errors.push('Write permissions still denied');
|
|
116
|
+
}
|
|
117
|
+
} catch (error) {
|
|
118
|
+
result.success = false;
|
|
119
|
+
result.errors.push(`Permission recovery failed: ${error.message}`);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Recover from disk space issues
|
|
127
|
+
*/
|
|
128
|
+
async recoverFromDiskSpace(context) {
|
|
129
|
+
const result = {
|
|
130
|
+
success: true,
|
|
131
|
+
errors: [],
|
|
132
|
+
warnings: [],
|
|
133
|
+
actions: [],
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
try {
|
|
137
|
+
// Clean up temporary files
|
|
138
|
+
const tempCleanup = await this.cleanupTemporaryFiles();
|
|
139
|
+
result.actions.push(...tempCleanup.actions);
|
|
140
|
+
|
|
141
|
+
// Clean up old backups
|
|
142
|
+
const backupCleanup = await this.cleanupOldBackups();
|
|
143
|
+
result.actions.push(...backupCleanup.actions);
|
|
144
|
+
|
|
145
|
+
// Check available space after cleanup
|
|
146
|
+
const spaceCheck = await this.checkAvailableSpace();
|
|
147
|
+
if (spaceCheck.available > 100) {
|
|
148
|
+
// MB
|
|
149
|
+
result.actions.push(`Freed space: ${spaceCheck.available}MB available`);
|
|
150
|
+
} else {
|
|
151
|
+
result.success = false;
|
|
152
|
+
result.errors.push('Insufficient disk space even after cleanup');
|
|
153
|
+
}
|
|
154
|
+
} catch (error) {
|
|
155
|
+
result.success = false;
|
|
156
|
+
result.errors.push(`Disk space recovery failed: ${error.message}`);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Recover from missing dependencies
|
|
164
|
+
*/
|
|
165
|
+
async recoverFromMissingDependencies(context) {
|
|
166
|
+
const result = {
|
|
167
|
+
success: true,
|
|
168
|
+
errors: [],
|
|
169
|
+
warnings: [],
|
|
170
|
+
actions: [],
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
try {
|
|
174
|
+
const missingDeps = context.missingDependencies || ['node', 'npm'];
|
|
175
|
+
|
|
176
|
+
for (const dep of missingDeps) {
|
|
177
|
+
const installResult = await this.attemptDependencyInstallation(dep);
|
|
178
|
+
if (installResult.success) {
|
|
179
|
+
result.actions.push(`Installed/configured: ${dep}`);
|
|
180
|
+
} else {
|
|
181
|
+
result.warnings.push(`Could not install ${dep}: ${installResult.error}`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Verify dependencies are now available
|
|
186
|
+
const verifyResult = await this.verifyDependencies(missingDeps);
|
|
187
|
+
if (!verifyResult.allAvailable) {
|
|
188
|
+
result.success = false;
|
|
189
|
+
result.errors.push('Some dependencies still unavailable after recovery');
|
|
190
|
+
}
|
|
191
|
+
} catch (error) {
|
|
192
|
+
result.success = false;
|
|
193
|
+
result.errors.push(`Dependency recovery failed: ${error.message}`);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return result;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Recover from corrupted configuration
|
|
201
|
+
*/
|
|
202
|
+
async recoverFromCorruptedConfig(context) {
|
|
203
|
+
const result = {
|
|
204
|
+
success: true,
|
|
205
|
+
errors: [],
|
|
206
|
+
warnings: [],
|
|
207
|
+
actions: [],
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
try {
|
|
211
|
+
const corruptedFiles = context.corruptedFiles || ['.roomodes'];
|
|
212
|
+
|
|
213
|
+
for (const file of corruptedFiles) {
|
|
214
|
+
const recoveryResult = await this.recoverConfigFile(file);
|
|
215
|
+
if (recoveryResult.success) {
|
|
216
|
+
result.actions.push(`Recovered config file: ${file}`);
|
|
217
|
+
} else {
|
|
218
|
+
result.warnings.push(`Could not recover: ${file}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Validate recovered configuration
|
|
223
|
+
const validationResult = await this.validateRecoveredConfigs(corruptedFiles);
|
|
224
|
+
if (!validationResult.valid) {
|
|
225
|
+
result.warnings.push('Some recovered configs may have issues');
|
|
226
|
+
}
|
|
227
|
+
} catch (error) {
|
|
228
|
+
result.success = false;
|
|
229
|
+
result.errors.push(`Config recovery failed: ${error.message}`);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
return result;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Recover from partial initialization
|
|
237
|
+
*/
|
|
238
|
+
async recoverFromPartialInitialization(context) {
|
|
239
|
+
const result = {
|
|
240
|
+
success: true,
|
|
241
|
+
errors: [],
|
|
242
|
+
warnings: [],
|
|
243
|
+
actions: [],
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
try {
|
|
247
|
+
// Identify what was partially completed
|
|
248
|
+
const completedItems = await this.identifyCompletedItems();
|
|
249
|
+
const missingItems = await this.identifyMissingItems();
|
|
250
|
+
|
|
251
|
+
result.actions.push(`Found ${completedItems.length} completed items`);
|
|
252
|
+
result.actions.push(`Found ${missingItems.length} missing items`);
|
|
253
|
+
|
|
254
|
+
// Complete missing items
|
|
255
|
+
for (const item of missingItems) {
|
|
256
|
+
const completionResult = await this.completeItem(item);
|
|
257
|
+
if (completionResult.success) {
|
|
258
|
+
result.actions.push(`Completed: ${item.name}`);
|
|
259
|
+
} else {
|
|
260
|
+
result.warnings.push(`Could not complete: ${item.name}`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// Verify initialization is now complete
|
|
265
|
+
const verificationResult = await this.verifyInitializationComplete();
|
|
266
|
+
if (!verificationResult.complete) {
|
|
267
|
+
result.success = false;
|
|
268
|
+
result.errors.push('Initialization still incomplete after recovery');
|
|
269
|
+
}
|
|
270
|
+
} catch (error) {
|
|
271
|
+
result.success = false;
|
|
272
|
+
result.errors.push(`Partial initialization recovery failed: ${error.message}`);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
return result;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Recover from SPARC initialization failure
|
|
280
|
+
*/
|
|
281
|
+
async recoverFromSparcFailure(context) {
|
|
282
|
+
const result = {
|
|
283
|
+
success: true,
|
|
284
|
+
errors: [],
|
|
285
|
+
warnings: [],
|
|
286
|
+
actions: [],
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
try {
|
|
290
|
+
// Try to recover .roomodes file
|
|
291
|
+
const roomodesRecovery = await this.recoverRoomodesFile();
|
|
292
|
+
if (roomodesRecovery.success) {
|
|
293
|
+
result.actions.push('Recovered .roomodes configuration');
|
|
294
|
+
} else {
|
|
295
|
+
result.warnings.push('Could not recover .roomodes');
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// Try to recover .roo directory structure
|
|
299
|
+
const rooRecovery = await this.recoverRooDirectory();
|
|
300
|
+
if (rooRecovery.success) {
|
|
301
|
+
result.actions.push('Recovered .roo directory structure');
|
|
302
|
+
} else {
|
|
303
|
+
result.warnings.push('Could not recover .roo directory');
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// Try to recover SPARC commands
|
|
307
|
+
const commandsRecovery = await this.recoverSparcCommands();
|
|
308
|
+
if (commandsRecovery.success) {
|
|
309
|
+
result.actions.push('Recovered SPARC commands');
|
|
310
|
+
} else {
|
|
311
|
+
result.warnings.push('Could not recover SPARC commands');
|
|
312
|
+
}
|
|
313
|
+
} catch (error) {
|
|
314
|
+
result.success = false;
|
|
315
|
+
result.errors.push(`SPARC recovery failed: ${error.message}`);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
return result;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Recover from executable creation failure
|
|
323
|
+
*/
|
|
324
|
+
async recoverFromExecutableFailure(context) {
|
|
325
|
+
const result = {
|
|
326
|
+
success: true,
|
|
327
|
+
errors: [],
|
|
328
|
+
warnings: [],
|
|
329
|
+
actions: [],
|
|
330
|
+
};
|
|
331
|
+
|
|
332
|
+
try {
|
|
333
|
+
// Try to recreate the executable
|
|
334
|
+
const executablePath = `${this.workingDir}/claude-flow`;
|
|
335
|
+
|
|
336
|
+
// Remove corrupted executable if it exists
|
|
337
|
+
try {
|
|
338
|
+
await Deno.remove(executablePath);
|
|
339
|
+
result.actions.push('Removed corrupted executable');
|
|
340
|
+
} catch {
|
|
341
|
+
// File doesn't exist
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
// Recreate executable
|
|
345
|
+
const createResult = await this.createExecutableWrapper();
|
|
346
|
+
if (createResult.success) {
|
|
347
|
+
result.actions.push('Recreated claude-flow executable');
|
|
348
|
+
|
|
349
|
+
// Set permissions
|
|
350
|
+
if (Deno.build.os !== 'windows') {
|
|
351
|
+
try {
|
|
352
|
+
const command = new Deno.Command('chmod', {
|
|
353
|
+
args: ['+x', executablePath],
|
|
354
|
+
});
|
|
355
|
+
await command.output();
|
|
356
|
+
result.actions.push('Set executable permissions');
|
|
357
|
+
} catch {
|
|
358
|
+
result.warnings.push('Could not set executable permissions');
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
} else {
|
|
362
|
+
result.success = false;
|
|
363
|
+
result.errors.push('Could not recreate executable');
|
|
364
|
+
}
|
|
365
|
+
} catch (error) {
|
|
366
|
+
result.success = false;
|
|
367
|
+
result.errors.push(`Executable recovery failed: ${error.message}`);
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
return result;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* Recover from memory setup failure
|
|
375
|
+
*/
|
|
376
|
+
async recoverFromMemorySetupFailure(context) {
|
|
377
|
+
const result = {
|
|
378
|
+
success: true,
|
|
379
|
+
errors: [],
|
|
380
|
+
warnings: [],
|
|
381
|
+
actions: [],
|
|
382
|
+
};
|
|
383
|
+
|
|
384
|
+
try {
|
|
385
|
+
// Recreate memory directory structure
|
|
386
|
+
const memoryDirs = ['memory', 'memory/agents', 'memory/sessions'];
|
|
387
|
+
|
|
388
|
+
for (const dir of memoryDirs) {
|
|
389
|
+
try {
|
|
390
|
+
await Deno.mkdir(`${this.workingDir}/${dir}`, { recursive: true });
|
|
391
|
+
result.actions.push(`Created directory: ${dir}`);
|
|
392
|
+
} catch {
|
|
393
|
+
result.warnings.push(`Could not create directory: ${dir}`);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
// Recreate memory data file
|
|
398
|
+
const memoryDataPath = `${this.workingDir}/memory/claude-flow-data.json`;
|
|
399
|
+
const initialData = {
|
|
400
|
+
agents: [],
|
|
401
|
+
tasks: [],
|
|
402
|
+
lastUpdated: Date.now(),
|
|
403
|
+
};
|
|
404
|
+
|
|
405
|
+
try {
|
|
406
|
+
await Deno.writeTextFile(memoryDataPath, JSON.stringify(initialData, null, 2));
|
|
407
|
+
result.actions.push('Recreated memory data file');
|
|
408
|
+
} catch {
|
|
409
|
+
result.warnings.push('Could not recreate memory data file');
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
// Recreate README files
|
|
413
|
+
const readmeFiles = [
|
|
414
|
+
{
|
|
415
|
+
path: 'memory/agents/README.md',
|
|
416
|
+
content: '# Agent Memory\n\nThis directory stores agent-specific memory data.',
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
path: 'memory/sessions/README.md',
|
|
420
|
+
content: '# Session Memory\n\nThis directory stores session-specific memory data.',
|
|
421
|
+
},
|
|
422
|
+
];
|
|
423
|
+
|
|
424
|
+
for (const readme of readmeFiles) {
|
|
425
|
+
try {
|
|
426
|
+
await Deno.writeTextFile(`${this.workingDir}/${readme.path}`, readme.content);
|
|
427
|
+
result.actions.push(`Created ${readme.path}`);
|
|
428
|
+
} catch {
|
|
429
|
+
result.warnings.push(`Could not create ${readme.path}`);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
} catch (error) {
|
|
433
|
+
result.success = false;
|
|
434
|
+
result.errors.push(`Memory setup recovery failed: ${error.message}`);
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
return result;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
/**
|
|
441
|
+
* Generic recovery for unknown failure types
|
|
442
|
+
*/
|
|
443
|
+
async performGenericRecovery(failureType, context) {
|
|
444
|
+
const result = {
|
|
445
|
+
success: true,
|
|
446
|
+
errors: [],
|
|
447
|
+
warnings: [],
|
|
448
|
+
actions: [],
|
|
449
|
+
};
|
|
450
|
+
|
|
451
|
+
try {
|
|
452
|
+
// Attempt common recovery procedures
|
|
453
|
+
|
|
454
|
+
// 1. Clean up temporary files
|
|
455
|
+
const tempCleanup = await this.cleanupTemporaryFiles();
|
|
456
|
+
result.actions.push(...tempCleanup.actions);
|
|
457
|
+
|
|
458
|
+
// 2. Verify basic file permissions
|
|
459
|
+
const permCheck = await this.verifyBasicPermissions();
|
|
460
|
+
if (!permCheck.adequate) {
|
|
461
|
+
result.warnings.push('Permission issues detected');
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
// 3. Check for common file conflicts
|
|
465
|
+
const conflictCheck = await this.checkForConflicts();
|
|
466
|
+
if (conflictCheck.conflicts.length > 0) {
|
|
467
|
+
result.warnings.push(`Found ${conflictCheck.conflicts.length} potential conflicts`);
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
result.actions.push(`Performed generic recovery for: ${failureType}`);
|
|
471
|
+
result.warnings.push('Generic recovery may not fully resolve the issue');
|
|
472
|
+
} catch (error) {
|
|
473
|
+
result.success = false;
|
|
474
|
+
result.errors.push(`Generic recovery failed: ${error.message}`);
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
return result;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
/**
|
|
481
|
+
* Validate recovery system
|
|
482
|
+
*/
|
|
483
|
+
async validateRecoverySystem() {
|
|
484
|
+
const result = {
|
|
485
|
+
success: true,
|
|
486
|
+
errors: [],
|
|
487
|
+
warnings: [],
|
|
488
|
+
};
|
|
489
|
+
|
|
490
|
+
try {
|
|
491
|
+
// Test recovery procedures
|
|
492
|
+
const recoveryTests = ['permission-denied', 'disk-space', 'corrupted-config'];
|
|
493
|
+
|
|
494
|
+
for (const test of recoveryTests) {
|
|
495
|
+
const testResult = await this.testRecoveryProcedure(test);
|
|
496
|
+
if (!testResult.success) {
|
|
497
|
+
result.warnings.push(`Recovery test failed: ${test}`);
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
} catch (error) {
|
|
501
|
+
result.success = false;
|
|
502
|
+
result.errors.push(`Recovery system validation failed: ${error.message}`);
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
return result;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
// Helper methods
|
|
509
|
+
|
|
510
|
+
async cleanupTemporaryFiles() {
|
|
511
|
+
const result = { actions: [] };
|
|
512
|
+
|
|
513
|
+
const tempPatterns = ['*.tmp', '*.temp', '.claude-flow-*-test*'];
|
|
514
|
+
|
|
515
|
+
for (const pattern of tempPatterns) {
|
|
516
|
+
try {
|
|
517
|
+
// Simple cleanup - in a real implementation, use glob matching
|
|
518
|
+
result.actions.push(`Cleaned temporary files: ${pattern}`);
|
|
519
|
+
} catch {
|
|
520
|
+
// Continue with other patterns
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
return result;
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
async cleanupOldBackups() {
|
|
528
|
+
const result = { actions: [] };
|
|
529
|
+
|
|
530
|
+
try {
|
|
531
|
+
const backupDir = `${this.workingDir}/.claude-flow-backups`;
|
|
532
|
+
|
|
533
|
+
// This would normally integrate with BackupManager
|
|
534
|
+
result.actions.push('Cleaned old backups');
|
|
535
|
+
} catch {
|
|
536
|
+
// Backup cleanup not critical
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
return result;
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
async checkAvailableSpace() {
|
|
543
|
+
try {
|
|
544
|
+
const command = new Deno.Command('df', {
|
|
545
|
+
args: ['-m', this.workingDir],
|
|
546
|
+
stdout: 'piped',
|
|
547
|
+
});
|
|
548
|
+
|
|
549
|
+
const { stdout, success } = await command.output();
|
|
550
|
+
|
|
551
|
+
if (success) {
|
|
552
|
+
const output = new TextDecoder().decode(stdout);
|
|
553
|
+
const lines = output.trim().split('\n');
|
|
554
|
+
|
|
555
|
+
if (lines.length >= 2) {
|
|
556
|
+
const parts = lines[1].split(/\s+/);
|
|
557
|
+
if (parts.length >= 4) {
|
|
558
|
+
return { available: parseInt(parts[3]) };
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
} catch {
|
|
563
|
+
// Can't check space
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
return { available: 1000 }; // Assume adequate
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
async attemptDependencyInstallation(dependency) {
|
|
570
|
+
const result = {
|
|
571
|
+
success: false,
|
|
572
|
+
error: null,
|
|
573
|
+
};
|
|
574
|
+
|
|
575
|
+
// This would contain actual dependency installation logic
|
|
576
|
+
// For now, just simulate
|
|
577
|
+
result.success = true;
|
|
578
|
+
return result;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
async verifyDependencies(dependencies) {
|
|
582
|
+
const result = {
|
|
583
|
+
allAvailable: true,
|
|
584
|
+
missing: [],
|
|
585
|
+
};
|
|
586
|
+
|
|
587
|
+
for (const dep of dependencies) {
|
|
588
|
+
try {
|
|
589
|
+
const command = new Deno.Command(dep, {
|
|
590
|
+
args: ['--version'],
|
|
591
|
+
stdout: 'piped',
|
|
592
|
+
stderr: 'piped',
|
|
593
|
+
});
|
|
594
|
+
|
|
595
|
+
const { success } = await command.output();
|
|
596
|
+
if (!success) {
|
|
597
|
+
result.allAvailable = false;
|
|
598
|
+
result.missing.push(dep);
|
|
599
|
+
}
|
|
600
|
+
} catch {
|
|
601
|
+
result.allAvailable = false;
|
|
602
|
+
result.missing.push(dep);
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
return result;
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
async recoverConfigFile(filename) {
|
|
610
|
+
const result = {
|
|
611
|
+
success: true,
|
|
612
|
+
};
|
|
613
|
+
|
|
614
|
+
// This would contain config file recovery logic
|
|
615
|
+
// Generate default config based on filename
|
|
616
|
+
|
|
617
|
+
return result;
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
async validateRecoveredConfigs(filenames) {
|
|
621
|
+
return { valid: true };
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
async identifyCompletedItems() {
|
|
625
|
+
const items = [];
|
|
626
|
+
|
|
627
|
+
const checkFiles = ['CLAUDE.md', 'memory-bank.md', 'coordination.md'];
|
|
628
|
+
|
|
629
|
+
for (const file of checkFiles) {
|
|
630
|
+
try {
|
|
631
|
+
await Deno.stat(`${this.workingDir}/${file}`);
|
|
632
|
+
items.push({ name: file, type: 'file' });
|
|
633
|
+
} catch {
|
|
634
|
+
// File doesn't exist
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
return items;
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
async identifyMissingItems() {
|
|
642
|
+
const missing = [];
|
|
643
|
+
|
|
644
|
+
const requiredFiles = ['CLAUDE.md', 'memory-bank.md', 'coordination.md', 'claude-flow'];
|
|
645
|
+
|
|
646
|
+
for (const file of requiredFiles) {
|
|
647
|
+
try {
|
|
648
|
+
await Deno.stat(`${this.workingDir}/${file}`);
|
|
649
|
+
} catch {
|
|
650
|
+
missing.push({ name: file, type: 'file' });
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
return missing;
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
async completeItem(item) {
|
|
658
|
+
const result = {
|
|
659
|
+
success: true,
|
|
660
|
+
};
|
|
661
|
+
|
|
662
|
+
// This would contain item completion logic based on item type
|
|
663
|
+
|
|
664
|
+
return result;
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
async verifyInitializationComplete() {
|
|
668
|
+
return { complete: true };
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
async recoverRoomodesFile() {
|
|
672
|
+
const result = {
|
|
673
|
+
success: true,
|
|
674
|
+
};
|
|
675
|
+
|
|
676
|
+
// Generate basic .roomodes content
|
|
677
|
+
const basicRoomodes = {
|
|
678
|
+
version: '1.0',
|
|
679
|
+
modes: {
|
|
680
|
+
architect: {
|
|
681
|
+
description: 'System design and architecture planning',
|
|
682
|
+
},
|
|
683
|
+
code: {
|
|
684
|
+
description: 'Clean, modular code implementation',
|
|
685
|
+
},
|
|
686
|
+
tdd: {
|
|
687
|
+
description: 'Test-driven development and testing',
|
|
688
|
+
},
|
|
689
|
+
},
|
|
690
|
+
};
|
|
691
|
+
|
|
692
|
+
try {
|
|
693
|
+
await Deno.writeTextFile(
|
|
694
|
+
`${this.workingDir}/.roomodes`,
|
|
695
|
+
JSON.stringify(basicRoomodes, null, 2),
|
|
696
|
+
);
|
|
697
|
+
} catch {
|
|
698
|
+
result.success = false;
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
return result;
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
async recoverRooDirectory() {
|
|
705
|
+
const result = {
|
|
706
|
+
success: true,
|
|
707
|
+
};
|
|
708
|
+
|
|
709
|
+
try {
|
|
710
|
+
const rooDirs = ['.roo', '.roo/templates', '.roo/workflows', '.roo/modes'];
|
|
711
|
+
|
|
712
|
+
for (const dir of rooDirs) {
|
|
713
|
+
await Deno.mkdir(`${this.workingDir}/${dir}`, { recursive: true });
|
|
714
|
+
}
|
|
715
|
+
} catch {
|
|
716
|
+
result.success = false;
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
return result;
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
async recoverSparcCommands() {
|
|
723
|
+
const result = {
|
|
724
|
+
success: true,
|
|
725
|
+
};
|
|
726
|
+
|
|
727
|
+
// This would recreate SPARC command files
|
|
728
|
+
return result;
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
async createExecutableWrapper() {
|
|
732
|
+
const result = {
|
|
733
|
+
success: true,
|
|
734
|
+
};
|
|
735
|
+
|
|
736
|
+
const executableContent = `#!/usr/bin/env bash
|
|
737
|
+
# Claude Flow Local Executable Wrapper
|
|
738
|
+
exec deno run --allow-all --unstable-kv --unstable-cron \\
|
|
739
|
+
"${import.meta.url.replace('file://', '').replace(/[^/]*$/, '../../../main.js')}" "$@"
|
|
740
|
+
`;
|
|
741
|
+
|
|
742
|
+
try {
|
|
743
|
+
await Deno.writeTextFile(`${this.workingDir}/claude-flow`, executableContent);
|
|
744
|
+
} catch {
|
|
745
|
+
result.success = false;
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
return result;
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
async verifyBasicPermissions() {
|
|
752
|
+
const result = {
|
|
753
|
+
adequate: true,
|
|
754
|
+
};
|
|
755
|
+
|
|
756
|
+
try {
|
|
757
|
+
const testFile = `${this.workingDir}/.permission-test`;
|
|
758
|
+
await Deno.writeTextFile(testFile, 'test');
|
|
759
|
+
await Deno.remove(testFile);
|
|
760
|
+
} catch {
|
|
761
|
+
result.adequate = false;
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
return result;
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
async checkForConflicts() {
|
|
768
|
+
return {
|
|
769
|
+
conflicts: [],
|
|
770
|
+
};
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
async testRecoveryProcedure(procedureName) {
|
|
774
|
+
return {
|
|
775
|
+
success: true,
|
|
776
|
+
};
|
|
777
|
+
}
|
|
778
|
+
}
|