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.
Files changed (272) hide show
  1. package/dist/src/cli/commands/guidance.js +487 -668
  2. package/dist/src/cli/commands/index-validate.js +18 -29
  3. package/dist/src/cli/commands/mcp-troubleshoot.js +230 -282
  4. package/dist/src/cli/commands/neural-goal-init.js +92 -125
  5. package/dist/src/cli/commands/swarm-exec.js +317 -393
  6. package/dist/src/cli/commands/swarm.js +1 -1
  7. package/dist/src/cli/commands/validate-framework.js +983 -1100
  8. package/dist/src/cli/commands/validate.js +144 -223
  9. package/dist/src/cli/simple-commands/__tests__/agent.test.js +265 -277
  10. package/dist/src/cli/simple-commands/__tests__/memory.test.js +6 -7
  11. package/dist/src/cli/simple-commands/__tests__/swarm.test.js +373 -356
  12. package/dist/src/cli/simple-commands/__tests__/task.test.js +6 -7
  13. package/dist/src/cli/simple-commands/agent.js +157 -193
  14. package/dist/src/cli/simple-commands/analysis.js +336 -446
  15. package/dist/src/cli/simple-commands/automation-executor.js +1095 -1339
  16. package/dist/src/cli/simple-commands/automation.js +481 -469
  17. package/dist/src/cli/simple-commands/batch-manager.js +261 -313
  18. package/dist/src/cli/simple-commands/claude-telemetry.js +241 -267
  19. package/dist/src/cli/simple-commands/claude-track.js +68 -90
  20. package/dist/src/cli/simple-commands/concurrent-display.js +266 -320
  21. package/dist/src/cli/simple-commands/config.js +245 -290
  22. package/dist/src/cli/simple-commands/coordination.js +182 -234
  23. package/dist/src/cli/simple-commands/enhanced-ui-views.js +812 -615
  24. package/dist/src/cli/simple-commands/enhanced-webui-complete.js +922 -981
  25. package/dist/src/cli/simple-commands/fix-hook-variables.js +274 -294
  26. package/dist/src/cli/simple-commands/github/gh-coordinator.js +378 -457
  27. package/dist/src/cli/simple-commands/github/github-api.js +535 -574
  28. package/dist/src/cli/simple-commands/github/init.js +276 -303
  29. package/dist/src/cli/simple-commands/github.js +222 -247
  30. package/dist/src/cli/simple-commands/goal.js +51 -63
  31. package/dist/src/cli/simple-commands/hive-mind/auto-save-middleware.js +208 -278
  32. package/dist/src/cli/simple-commands/hive-mind/communication.js +601 -696
  33. package/dist/src/cli/simple-commands/hive-mind/core.js +907 -979
  34. package/dist/src/cli/simple-commands/hive-mind/db-optimizer.js +406 -655
  35. package/dist/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1125 -1245
  36. package/dist/src/cli/simple-commands/hive-mind/memory.js +854 -1090
  37. package/dist/src/cli/simple-commands/hive-mind/performance-optimizer.js +459 -574
  38. package/dist/src/cli/simple-commands/hive-mind/performance-test.js +263 -347
  39. package/dist/src/cli/simple-commands/hive-mind/queen.js +727 -768
  40. package/dist/src/cli/simple-commands/hive-mind/session-manager.js +745 -1049
  41. package/dist/src/cli/simple-commands/hive-mind-optimize.js +227 -283
  42. package/dist/src/cli/simple-commands/hive-mind-wizard.js +174 -217
  43. package/dist/src/cli/simple-commands/hive-mind.js +1842 -2283
  44. package/dist/src/cli/simple-commands/hive.js +90 -79
  45. package/dist/src/cli/simple-commands/hook-safety.js +431 -521
  46. package/dist/src/cli/simple-commands/hooks/session-start-soul.js +203 -254
  47. package/dist/src/cli/simple-commands/hooks.js +1064 -1204
  48. package/dist/src/cli/simple-commands/init/agent-copier.js +294 -319
  49. package/dist/src/cli/simple-commands/init/batch-init.js +496 -562
  50. package/dist/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +13 -19
  51. package/dist/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +13 -19
  52. package/dist/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +61 -88
  53. package/dist/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +125 -150
  54. package/dist/src/cli/simple-commands/init/claude-commands/slash-commands.js +42 -49
  55. package/dist/src/cli/simple-commands/init/claude-commands/sparc-commands.js +43 -61
  56. package/dist/src/cli/simple-commands/init/copy-revised-templates.js +141 -147
  57. package/dist/src/cli/simple-commands/init/executable-wrapper.js +31 -44
  58. package/dist/src/cli/simple-commands/init/gitignore-updater.js +64 -90
  59. package/dist/src/cli/simple-commands/init/help.js +104 -107
  60. package/dist/src/cli/simple-commands/init/hive-mind-init.js +509 -528
  61. package/dist/src/cli/simple-commands/init/index.js +1510 -1759
  62. package/dist/src/cli/simple-commands/init/performance-monitor.js +234 -317
  63. package/dist/src/cli/simple-commands/init/rollback/backup-manager.js +441 -504
  64. package/dist/src/cli/simple-commands/init/rollback/index.js +289 -364
  65. package/dist/src/cli/simple-commands/init/rollback/recovery-manager.js +652 -728
  66. package/dist/src/cli/simple-commands/init/rollback/rollback-executor.js +416 -481
  67. package/dist/src/cli/simple-commands/init/rollback/state-tracker.js +369 -448
  68. package/dist/src/cli/simple-commands/init/sparc/roo-readme.js +1 -2
  69. package/dist/src/cli/simple-commands/init/sparc/roomodes-config.js +122 -99
  70. package/dist/src/cli/simple-commands/init/sparc/workflows.js +32 -37
  71. package/dist/src/cli/simple-commands/init/sparc-structure.js +55 -62
  72. package/dist/src/cli/simple-commands/init/template-copier.js +421 -533
  73. package/dist/src/cli/simple-commands/init/templates/coordination-md.js +3 -6
  74. package/dist/src/cli/simple-commands/init/templates/enhanced-templates.js +344 -318
  75. package/dist/src/cli/simple-commands/init/templates/github-safe-enhanced.js +173 -218
  76. package/dist/src/cli/simple-commands/init/templates/github-safe.js +65 -75
  77. package/dist/src/cli/simple-commands/init/templates/memory-bank-md.js +3 -6
  78. package/dist/src/cli/simple-commands/init/templates/readme-files.js +2 -4
  79. package/dist/src/cli/simple-commands/init/templates/safe-hook-patterns.js +187 -230
  80. package/dist/src/cli/simple-commands/init/templates/sparc-modes.js +53 -80
  81. package/dist/src/cli/simple-commands/init/templates/verification-claude-md.js +101 -85
  82. package/dist/src/cli/simple-commands/init/validation/config-validator.js +283 -330
  83. package/dist/src/cli/simple-commands/init/validation/health-checker.js +495 -561
  84. package/dist/src/cli/simple-commands/init/validation/index.js +302 -358
  85. package/dist/src/cli/simple-commands/init/validation/mode-validator.js +308 -359
  86. package/dist/src/cli/simple-commands/init/validation/post-init-validator.js +389 -366
  87. package/dist/src/cli/simple-commands/init/validation/pre-init-validator.js +270 -268
  88. package/dist/src/cli/simple-commands/init/validation/test-runner.js +427 -447
  89. package/dist/src/cli/simple-commands/init.js +1 -2
  90. package/dist/src/cli/simple-commands/mcp-health.js +131 -158
  91. package/dist/src/cli/simple-commands/mcp-integration-layer.js +533 -634
  92. package/dist/src/cli/simple-commands/mcp.js +345 -400
  93. package/dist/src/cli/simple-commands/memory-consolidation.js +426 -537
  94. package/dist/src/cli/simple-commands/memory.js +247 -311
  95. package/dist/src/cli/simple-commands/migrate-hooks.js +39 -46
  96. package/dist/src/cli/simple-commands/monitor.js +294 -363
  97. package/dist/src/cli/simple-commands/neural.js +51 -65
  98. package/dist/src/cli/simple-commands/pair-autofix-only.js +538 -662
  99. package/dist/src/cli/simple-commands/pair-basic.js +528 -656
  100. package/dist/src/cli/simple-commands/pair-old.js +430 -543
  101. package/dist/src/cli/simple-commands/pair-working.js +615 -751
  102. package/dist/src/cli/simple-commands/pair.js +615 -751
  103. package/dist/src/cli/simple-commands/performance-hooks.js +83 -111
  104. package/dist/src/cli/simple-commands/performance-metrics.js +348 -433
  105. package/dist/src/cli/simple-commands/process-ui-enhanced.js +708 -787
  106. package/dist/src/cli/simple-commands/process-ui.js +230 -254
  107. package/dist/src/cli/simple-commands/realtime-update-system.js +525 -611
  108. package/dist/src/cli/simple-commands/sparc/architecture.js +1704 -1530
  109. package/dist/src/cli/simple-commands/sparc/commands.js +438 -516
  110. package/dist/src/cli/simple-commands/sparc/completion.js +1224 -1481
  111. package/dist/src/cli/simple-commands/sparc/coordinator.js +913 -978
  112. package/dist/src/cli/simple-commands/sparc/index.js +241 -298
  113. package/dist/src/cli/simple-commands/sparc/phase-base.js +314 -390
  114. package/dist/src/cli/simple-commands/sparc/pseudocode.js +965 -869
  115. package/dist/src/cli/simple-commands/sparc/refinement.js +980 -1273
  116. package/dist/src/cli/simple-commands/sparc/specification.js +559 -645
  117. package/dist/src/cli/simple-commands/sparc-modes/architect.js +1 -1
  118. package/dist/src/cli/simple-commands/sparc-modes/ask.js +1 -1
  119. package/dist/src/cli/simple-commands/sparc-modes/code.js +1 -1
  120. package/dist/src/cli/simple-commands/sparc-modes/debug.js +1 -1
  121. package/dist/src/cli/simple-commands/sparc-modes/devops.js +1 -1
  122. package/dist/src/cli/simple-commands/sparc-modes/docs-writer.js +1 -1
  123. package/dist/src/cli/simple-commands/sparc-modes/generic.js +1 -1
  124. package/dist/src/cli/simple-commands/sparc-modes/index.js +47 -55
  125. package/dist/src/cli/simple-commands/sparc-modes/integration.js +1 -1
  126. package/dist/src/cli/simple-commands/sparc-modes/mcp.js +1 -1
  127. package/dist/src/cli/simple-commands/sparc-modes/monitoring.js +1 -1
  128. package/dist/src/cli/simple-commands/sparc-modes/optimization.js +1 -1
  129. package/dist/src/cli/simple-commands/sparc-modes/security-review.js +1 -1
  130. package/dist/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +1 -1
  131. package/dist/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +1 -1
  132. package/dist/src/cli/simple-commands/sparc-modes/supabase-admin.js +1 -1
  133. package/dist/src/cli/simple-commands/sparc-modes/swarm.js +101 -87
  134. package/dist/src/cli/simple-commands/sparc-modes/tdd.js +1 -1
  135. package/dist/src/cli/simple-commands/sparc-modes/tutorial.js +1 -1
  136. package/dist/src/cli/simple-commands/sparc.js +465 -493
  137. package/dist/src/cli/simple-commands/start-ui.js +108 -132
  138. package/dist/src/cli/simple-commands/start-wrapper.js +240 -268
  139. package/dist/src/cli/simple-commands/start.js +1 -1
  140. package/dist/src/cli/simple-commands/status.js +254 -275
  141. package/dist/src/cli/simple-commands/stream-chain-clean.js +128 -171
  142. package/dist/src/cli/simple-commands/stream-chain-fixed.js +61 -82
  143. package/dist/src/cli/simple-commands/stream-chain-real.js +267 -331
  144. package/dist/src/cli/simple-commands/stream-chain-working.js +211 -263
  145. package/dist/src/cli/simple-commands/stream-chain.js +260 -318
  146. package/dist/src/cli/simple-commands/stream-processor.js +290 -315
  147. package/dist/src/cli/simple-commands/swarm-executor.js +189 -222
  148. package/dist/src/cli/simple-commands/swarm-metrics-integration.js +208 -300
  149. package/dist/src/cli/simple-commands/swarm-ui.js +623 -703
  150. package/dist/src/cli/simple-commands/swarm-webui-integration.js +258 -286
  151. package/dist/src/cli/simple-commands/swarm.js +887 -1082
  152. package/dist/src/cli/simple-commands/task.js +161 -206
  153. package/dist/src/cli/simple-commands/timestamp-fix.js +59 -89
  154. package/dist/src/cli/simple-commands/token-tracker.js +258 -316
  155. package/dist/src/cli/simple-commands/tool-execution-framework.js +433 -519
  156. package/dist/src/cli/simple-commands/train-and-stream.js +275 -331
  157. package/dist/src/cli/simple-commands/training-pipeline.js +619 -725
  158. package/dist/src/cli/simple-commands/training.js +170 -227
  159. package/dist/src/cli/simple-commands/verification-hooks.js +261 -284
  160. package/dist/src/cli/simple-commands/verification-integration.js +389 -417
  161. package/dist/src/cli/simple-commands/verification-training-integration.js +486 -606
  162. package/dist/src/cli/simple-commands/verification.js +493 -513
  163. package/dist/src/cli/simple-commands/web-server.js +766 -836
  164. package/dist/src/cli/simple-commands/webui-validator.js +106 -124
  165. package/dist/src/coordination/event-bus/demo-wasm-integration.js +212 -251
  166. package/dist/src/coordination/event-bus/qe-event-bus.js +608 -748
  167. package/dist/src/coordination/event-bus/qe-event-bus.test.js +379 -454
  168. package/dist/src/coordination/iteration-tracker.js +363 -454
  169. package/dist/src/enterprise/analytics-manager.js +1135 -0
  170. package/dist/src/enterprise/audit-manager.js +1115 -0
  171. package/dist/src/enterprise/cloud-manager.js +891 -0
  172. package/dist/src/enterprise/deployment-manager.js +966 -0
  173. package/dist/src/enterprise/index.js +6 -0
  174. package/dist/src/enterprise/project-manager.js +584 -0
  175. package/dist/src/enterprise/security-manager.js +991 -0
  176. package/dist/src/index.js +1 -1
  177. package/dist/src/mcp/DEPRECATED.js +46 -60
  178. package/dist/src/mcp/fixes/mcp-error-fixes.js +115 -134
  179. package/dist/src/mcp/implementations/agent-tracker.js +114 -128
  180. package/dist/src/mcp/implementations/daa-tools.js +292 -350
  181. package/dist/src/mcp/implementations/workflow-tools.js +329 -361
  182. package/dist/src/mcp/mcp-config-manager.js +1183 -1331
  183. package/dist/src/mcp/mcp-server-novice-simplified.js +11 -17
  184. package/dist/src/mcp/mcp-server-novice.js +11 -17
  185. package/dist/src/mcp/mcp-server-sdk.js +11 -17
  186. package/dist/src/mcp/mcp-server.js +1620 -1484
  187. package/dist/src/mcp/ruv-swarm-wrapper.js +209 -239
  188. package/dist/src/memory/advanced-serializer.js +609 -589
  189. package/dist/src/memory/enhanced-examples.js +220 -305
  190. package/dist/src/memory/enhanced-memory.js +295 -336
  191. package/dist/src/memory/enhanced-session-serializer.js +408 -492
  192. package/dist/src/memory/fallback-memory-system.js +900 -1021
  193. package/dist/src/memory/fallback-store.js +93 -131
  194. package/dist/src/memory/high-performance-serialization.js +592 -730
  195. package/dist/src/memory/in-memory-store.js +161 -213
  196. package/dist/src/memory/index.js +123 -157
  197. package/dist/src/memory/lock-free-structures.js +578 -764
  198. package/dist/src/memory/memory-mapped-persistence.js +585 -766
  199. package/dist/src/memory/memory-pressure-manager.js +569 -707
  200. package/dist/src/memory/migration.js +358 -445
  201. package/dist/src/memory/shared-memory.js +641 -768
  202. package/dist/src/memory/sqlite-store.js +245 -325
  203. package/dist/src/memory/sqlite-wrapper.js +122 -151
  204. package/dist/src/memory/swarm-memory.js +470 -603
  205. package/dist/src/memory/test-example.js +126 -134
  206. package/dist/src/memory/ultra-fast-memory-store.js +622 -821
  207. package/dist/src/memory/unified-memory-manager.js +356 -437
  208. package/dist/src/migration/index.js +92 -0
  209. package/dist/src/migration/logger.js +121 -0
  210. package/dist/src/migration/migration-analyzer.js +268 -0
  211. package/dist/src/migration/migration-runner.js +522 -0
  212. package/dist/src/migration/migration-validator.js +285 -0
  213. package/dist/src/migration/progress-reporter.js +150 -0
  214. package/dist/src/migration/rollback-manager.js +321 -0
  215. package/dist/src/migration/tests/migration-system.test.js +7 -0
  216. package/dist/src/migration/types.js +3 -0
  217. package/dist/src/swarm/CodeRefactoringSwarm.js +777 -952
  218. package/dist/src/swarm/__tests__/integration.test.js +227 -0
  219. package/dist/src/swarm/__tests__/prompt-copier.test.js +344 -0
  220. package/dist/src/swarm/advanced-orchestrator.js +1095 -0
  221. package/dist/src/swarm/claude-code-interface.js +961 -0
  222. package/dist/src/swarm/claude-flow-executor.js +229 -0
  223. package/dist/src/swarm/consensus-coordinator.js +475 -0
  224. package/dist/src/swarm/coordinator.js +2993 -0
  225. package/dist/src/swarm/direct-executor.js +1180 -0
  226. package/dist/src/swarm/error-recovery/advanced-error-detection.js +691 -0
  227. package/dist/src/swarm/error-recovery/automated-recovery-workflows.js +998 -0
  228. package/dist/src/swarm/error-recovery/error-recovery-coordinator.js +1197 -0
  229. package/dist/src/swarm/error-recovery/recovery-monitoring.js +772 -0
  230. package/dist/src/swarm/error-recovery/resilience-architecture.js +714 -0
  231. package/dist/src/swarm/error-recovery/self-healing-mechanisms.js +1319 -0
  232. package/dist/src/swarm/error-recovery/test-error-recovery-effectiveness.js +808 -0
  233. package/dist/src/swarm/executor-v2.js +322 -0
  234. package/dist/src/swarm/executor.js +815 -0
  235. package/dist/src/swarm/hive-mind-integration.js +703 -0
  236. package/dist/src/swarm/index.js +41 -0
  237. package/dist/src/swarm/json-output-aggregator.js +267 -0
  238. package/dist/src/swarm/large-scale-coordinator.js +542 -0
  239. package/dist/src/swarm/mcp-integration-wrapper.js +628 -0
  240. package/dist/src/swarm/memory.js +1117 -0
  241. package/dist/src/swarm/optimizations/__tests__/optimization.test.js +348 -0
  242. package/dist/src/swarm/optimizations/async-file-manager.js +285 -0
  243. package/dist/src/swarm/optimizations/circular-buffer.js +162 -0
  244. package/dist/src/swarm/optimizations/connection-pool.js +244 -0
  245. package/dist/src/swarm/optimizations/index.js +28 -0
  246. package/dist/src/swarm/optimizations/optimized-executor.js +320 -0
  247. package/dist/src/swarm/optimizations/ttl-map.js +234 -0
  248. package/dist/src/swarm/prompt-cli.js +200 -0
  249. package/dist/src/swarm/prompt-copier-enhanced.js +202 -0
  250. package/dist/src/swarm/prompt-copier.js +381 -0
  251. package/dist/src/swarm/prompt-manager.js +295 -0
  252. package/dist/src/swarm/prompt-utils.js +310 -0
  253. package/dist/src/swarm/result-aggregator.js +718 -0
  254. package/dist/src/swarm/sparc-executor.js +1568 -0
  255. package/dist/src/swarm/strategies/auto.js +758 -0
  256. package/dist/src/swarm/strategies/base.js +128 -0
  257. package/dist/src/swarm/strategies/research.js +914 -0
  258. package/dist/src/swarm/strategies/strategy-metrics-patch.js +2 -0
  259. package/dist/src/swarm/types.js +52 -0
  260. package/dist/src/swarm/workers/copy-worker.js +56 -0
  261. package/dist/src/utils/__tests__/github-cli-safety-wrapper.test.js +332 -400
  262. package/dist/src/utils/github-cli-safe.js +56 -64
  263. package/dist/src/utils/github-cli-safety-wrapper.js +451 -546
  264. package/dist/src/utils/npx-isolated-cache.js +104 -119
  265. package/dist/src/utils/preference-manager.js +622 -652
  266. package/dist/src/utils/timezone-utils.js +86 -105
  267. package/dist/src/validators/epic-config-schema.js +214 -0
  268. package/dist/src/validators/index.js +10 -0
  269. package/dist/src/validators/swarm-init-validator.js +259 -0
  270. package/dist/src/validators/todowrite-batching-validator.js +215 -0
  271. package/dist/src/validators/todowrite-integration.js +187 -0
  272. package/package.json +2 -2
@@ -1,778 +1,702 @@
1
1
  // recovery-manager.js - Automated recovery procedures for common failures
2
-
3
2
  export class RecoveryManager {
4
- constructor(workingDir) {
5
- this.workingDir = workingDir;
6
- }
7
-
8
- /**
3
+ /**
9
4
  * 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}`);
5
+ */ async performRecovery(failureType, context = {}) {
6
+ const result = {
7
+ success: true,
8
+ errors: [],
9
+ warnings: [],
10
+ actions: []
11
+ };
12
+ try {
13
+ console.log(`🔧 Attempting recovery for: ${failureType}`);
14
+ let recoveryResult;
15
+ switch(failureType){
16
+ case 'permission-denied':
17
+ recoveryResult = await this.recoverFromPermissionDenied(context);
18
+ break;
19
+ case 'disk-space':
20
+ recoveryResult = await this.recoverFromDiskSpace(context);
21
+ break;
22
+ case 'missing-dependencies':
23
+ recoveryResult = await this.recoverFromMissingDependencies(context);
24
+ break;
25
+ case 'corrupted-config':
26
+ recoveryResult = await this.recoverFromCorruptedConfig(context);
27
+ break;
28
+ case 'partial-initialization':
29
+ recoveryResult = await this.recoverFromPartialInitialization(context);
30
+ break;
31
+ case 'sparc-failure':
32
+ recoveryResult = await this.recoverFromSparcFailure(context);
33
+ break;
34
+ case 'executable-creation-failure':
35
+ recoveryResult = await this.recoverFromExecutableFailure(context);
36
+ break;
37
+ case 'memory-setup-failure':
38
+ recoveryResult = await this.recoverFromMemorySetupFailure(context);
39
+ break;
40
+ default:
41
+ recoveryResult = await this.performGenericRecovery(failureType, context);
42
+ break;
43
+ }
44
+ result.success = recoveryResult.success;
45
+ result.errors.push(...recoveryResult.errors);
46
+ result.warnings.push(...recoveryResult.warnings);
47
+ result.actions.push(...recoveryResult.actions);
48
+ } catch (error) {
49
+ result.success = false;
50
+ result.errors.push(`Recovery failed: ${error.message}`);
51
+ }
52
+ return result;
69
53
  }
70
-
71
- return result;
72
- }
73
-
74
- /**
54
+ /**
75
55
  * 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') {
56
+ */ async recoverFromPermissionDenied(context) {
57
+ const result = {
58
+ success: true,
59
+ errors: [],
60
+ warnings: [],
61
+ actions: []
62
+ };
88
63
  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');
64
+ // Try to fix permissions on the working directory
65
+ if (Deno.build.os !== 'windows') {
66
+ try {
67
+ const command = new Deno.Command('chmod', {
68
+ args: [
69
+ '-R',
70
+ '755',
71
+ this.workingDir
72
+ ],
73
+ stdout: 'piped',
74
+ stderr: 'piped'
75
+ });
76
+ const { success } = await command.output();
77
+ if (success) {
78
+ result.actions.push('Fixed directory permissions');
79
+ } else {
80
+ result.warnings.push('Could not fix permissions automatically');
81
+ }
82
+ } catch {
83
+ result.warnings.push('Permission fix command not available');
84
+ }
85
+ }
86
+ // Try to create a test file to verify permissions
87
+ try {
88
+ const testFile = `${this.workingDir}/.permission-test`;
89
+ await Deno.writeTextFile(testFile, 'test');
90
+ await Deno.remove(testFile);
91
+ result.actions.push('Verified write permissions restored');
92
+ } catch {
93
+ result.success = false;
94
+ result.errors.push('Write permissions still denied');
95
+ }
96
+ } catch (error) {
97
+ result.success = false;
98
+ result.errors.push(`Permission recovery failed: ${error.message}`);
104
99
  }
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}`);
100
+ return result;
120
101
  }
121
-
122
- return result;
123
- }
124
-
125
- /**
102
+ /**
126
103
  * 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}`);
104
+ */ async recoverFromDiskSpace(context) {
105
+ const result = {
106
+ success: true,
107
+ errors: [],
108
+ warnings: [],
109
+ actions: []
110
+ };
111
+ try {
112
+ // Clean up temporary files
113
+ const tempCleanup = await this.cleanupTemporaryFiles();
114
+ result.actions.push(...tempCleanup.actions);
115
+ // Clean up old backups
116
+ const backupCleanup = await this.cleanupOldBackups();
117
+ result.actions.push(...backupCleanup.actions);
118
+ // Check available space after cleanup
119
+ const spaceCheck = await this.checkAvailableSpace();
120
+ if (spaceCheck.available > 100) {
121
+ // MB
122
+ result.actions.push(`Freed space: ${spaceCheck.available}MB available`);
123
+ } else {
124
+ result.success = false;
125
+ result.errors.push('Insufficient disk space even after cleanup');
126
+ }
127
+ } catch (error) {
128
+ result.success = false;
129
+ result.errors.push(`Disk space recovery failed: ${error.message}`);
130
+ }
131
+ return result;
157
132
  }
158
-
159
- return result;
160
- }
161
-
162
- /**
133
+ /**
163
134
  * 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}`);
135
+ */ async recoverFromMissingDependencies(context) {
136
+ const result = {
137
+ success: true,
138
+ errors: [],
139
+ warnings: [],
140
+ actions: []
141
+ };
142
+ try {
143
+ const missingDeps = context.missingDependencies || [
144
+ 'node',
145
+ 'npm'
146
+ ];
147
+ for (const dep of missingDeps){
148
+ const installResult = await this.attemptDependencyInstallation(dep);
149
+ if (installResult.success) {
150
+ result.actions.push(`Installed/configured: ${dep}`);
151
+ } else {
152
+ result.warnings.push(`Could not install ${dep}: ${installResult.error}`);
153
+ }
154
+ }
155
+ // Verify dependencies are now available
156
+ const verifyResult = await this.verifyDependencies(missingDeps);
157
+ if (!verifyResult.allAvailable) {
158
+ result.success = false;
159
+ result.errors.push('Some dependencies still unavailable after recovery');
160
+ }
161
+ } catch (error) {
162
+ result.success = false;
163
+ result.errors.push(`Dependency recovery failed: ${error.message}`);
182
164
  }
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}`);
165
+ return result;
194
166
  }
195
-
196
- return result;
197
- }
198
-
199
- /**
167
+ /**
200
168
  * 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}`);
169
+ */ async recoverFromCorruptedConfig(context) {
170
+ const result = {
171
+ success: true,
172
+ errors: [],
173
+ warnings: [],
174
+ actions: []
175
+ };
176
+ try {
177
+ const corruptedFiles = context.corruptedFiles || [
178
+ '.roomodes'
179
+ ];
180
+ for (const file of corruptedFiles){
181
+ const recoveryResult = await this.recoverConfigFile(file);
182
+ if (recoveryResult.success) {
183
+ result.actions.push(`Recovered config file: ${file}`);
184
+ } else {
185
+ result.warnings.push(`Could not recover: ${file}`);
186
+ }
187
+ }
188
+ // Validate recovered configuration
189
+ const validationResult = await this.validateRecoveredConfigs(corruptedFiles);
190
+ if (!validationResult.valid) {
191
+ result.warnings.push('Some recovered configs may have issues');
192
+ }
193
+ } catch (error) {
194
+ result.success = false;
195
+ result.errors.push(`Config recovery failed: ${error.message}`);
219
196
  }
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}`);
197
+ return result;
230
198
  }
231
-
232
- return result;
233
- }
234
-
235
- /**
199
+ /**
236
200
  * 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}`);
201
+ */ async recoverFromPartialInitialization(context) {
202
+ const result = {
203
+ success: true,
204
+ errors: [],
205
+ warnings: [],
206
+ actions: []
207
+ };
208
+ try {
209
+ // Identify what was partially completed
210
+ const completedItems = await this.identifyCompletedItems();
211
+ const missingItems = await this.identifyMissingItems();
212
+ result.actions.push(`Found ${completedItems.length} completed items`);
213
+ result.actions.push(`Found ${missingItems.length} missing items`);
214
+ // Complete missing items
215
+ for (const item of missingItems){
216
+ const completionResult = await this.completeItem(item);
217
+ if (completionResult.success) {
218
+ result.actions.push(`Completed: ${item.name}`);
219
+ } else {
220
+ result.warnings.push(`Could not complete: ${item.name}`);
221
+ }
222
+ }
223
+ // Verify initialization is now complete
224
+ const verificationResult = await this.verifyInitializationComplete();
225
+ if (!verificationResult.complete) {
226
+ result.success = false;
227
+ result.errors.push('Initialization still incomplete after recovery');
228
+ }
229
+ } catch (error) {
230
+ result.success = false;
231
+ result.errors.push(`Partial initialization recovery failed: ${error.message}`);
261
232
  }
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}`);
233
+ return result;
273
234
  }
274
-
275
- return result;
276
- }
277
-
278
- /**
235
+ /**
279
236
  * 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}`);
237
+ */ async recoverFromSparcFailure(context) {
238
+ const result = {
239
+ success: true,
240
+ errors: [],
241
+ warnings: [],
242
+ actions: []
243
+ };
244
+ try {
245
+ // Try to recover .roomodes file
246
+ const roomodesRecovery = await this.recoverRoomodesFile();
247
+ if (roomodesRecovery.success) {
248
+ result.actions.push('Recovered .roomodes configuration');
249
+ } else {
250
+ result.warnings.push('Could not recover .roomodes');
251
+ }
252
+ // Try to recover .roo directory structure
253
+ const rooRecovery = await this.recoverRooDirectory();
254
+ if (rooRecovery.success) {
255
+ result.actions.push('Recovered .roo directory structure');
256
+ } else {
257
+ result.warnings.push('Could not recover .roo directory');
258
+ }
259
+ // Try to recover SPARC commands
260
+ const commandsRecovery = await this.recoverSparcCommands();
261
+ if (commandsRecovery.success) {
262
+ result.actions.push('Recovered SPARC commands');
263
+ } else {
264
+ result.warnings.push('Could not recover SPARC commands');
265
+ }
266
+ } catch (error) {
267
+ result.success = false;
268
+ result.errors.push(`SPARC recovery failed: ${error.message}`);
269
+ }
270
+ return result;
316
271
  }
317
-
318
- return result;
319
- }
320
-
321
- /**
272
+ /**
322
273
  * 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-novice 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
- }
274
+ */ async recoverFromExecutableFailure(context) {
275
+ const result = {
276
+ success: true,
277
+ errors: [],
278
+ warnings: [],
279
+ actions: []
280
+ };
281
+ try {
282
+ // Try to recreate the executable
283
+ const executablePath = `${this.workingDir}/claude-flow`;
284
+ // Remove corrupted executable if it exists
285
+ try {
286
+ await Deno.remove(executablePath);
287
+ result.actions.push('Removed corrupted executable');
288
+ } catch {
289
+ // File doesn't exist
290
+ }
291
+ // Recreate executable
292
+ const createResult = await this.createExecutableWrapper();
293
+ if (createResult.success) {
294
+ result.actions.push('Recreated claude-flow-novice executable');
295
+ // Set permissions
296
+ if (Deno.build.os !== 'windows') {
297
+ try {
298
+ const command = new Deno.Command('chmod', {
299
+ args: [
300
+ '+x',
301
+ executablePath
302
+ ]
303
+ });
304
+ await command.output();
305
+ result.actions.push('Set executable permissions');
306
+ } catch {
307
+ result.warnings.push('Could not set executable permissions');
308
+ }
309
+ }
310
+ } else {
311
+ result.success = false;
312
+ result.errors.push('Could not recreate executable');
313
+ }
314
+ } catch (error) {
315
+ result.success = false;
316
+ result.errors.push(`Executable recovery failed: ${error.message}`);
360
317
  }
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}`);
318
+ return result;
368
319
  }
369
-
370
- return result;
371
- }
372
-
373
- /**
320
+ /**
374
321
  * 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) {
322
+ */ async recoverFromMemorySetupFailure(context) {
323
+ const result = {
324
+ success: true,
325
+ errors: [],
326
+ warnings: [],
327
+ actions: []
328
+ };
425
329
  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}`);
330
+ // Recreate memory directory structure
331
+ const memoryDirs = [
332
+ 'memory',
333
+ 'memory/agents',
334
+ 'memory/sessions'
335
+ ];
336
+ for (const dir of memoryDirs){
337
+ try {
338
+ await Deno.mkdir(`${this.workingDir}/${dir}`, {
339
+ recursive: true
340
+ });
341
+ result.actions.push(`Created directory: ${dir}`);
342
+ } catch {
343
+ result.warnings.push(`Could not create directory: ${dir}`);
344
+ }
345
+ }
346
+ // Recreate memory data file
347
+ const memoryDataPath = `${this.workingDir}/memory/claude-flow-data.json`;
348
+ const initialData = {
349
+ agents: [],
350
+ tasks: [],
351
+ lastUpdated: Date.now()
352
+ };
353
+ try {
354
+ await Deno.writeTextFile(memoryDataPath, JSON.stringify(initialData, null, 2));
355
+ result.actions.push('Recreated memory data file');
356
+ } catch {
357
+ result.warnings.push('Could not recreate memory data file');
358
+ }
359
+ // Recreate README files
360
+ const readmeFiles = [
361
+ {
362
+ path: 'memory/agents/README.md',
363
+ content: '# Agent Memory\n\nThis directory stores agent-specific memory data.'
364
+ },
365
+ {
366
+ path: 'memory/sessions/README.md',
367
+ content: '# Session Memory\n\nThis directory stores session-specific memory data.'
368
+ }
369
+ ];
370
+ for (const readme of readmeFiles){
371
+ try {
372
+ await Deno.writeTextFile(`${this.workingDir}/${readme.path}`, readme.content);
373
+ result.actions.push(`Created ${readme.path}`);
374
+ } catch {
375
+ result.warnings.push(`Could not create ${readme.path}`);
376
+ }
377
+ }
378
+ } catch (error) {
379
+ result.success = false;
380
+ result.errors.push(`Memory setup recovery failed: ${error.message}`);
430
381
  }
431
- }
432
- } catch (error) {
433
- result.success = false;
434
- result.errors.push(`Memory setup recovery failed: ${error.message}`);
382
+ return result;
435
383
  }
436
-
437
- return result;
438
- }
439
-
440
- /**
384
+ /**
441
385
  * 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}`);
386
+ */ async performGenericRecovery(failureType, context) {
387
+ const result = {
388
+ success: true,
389
+ errors: [],
390
+ warnings: [],
391
+ actions: []
392
+ };
393
+ try {
394
+ // Attempt common recovery procedures
395
+ // 1. Clean up temporary files
396
+ const tempCleanup = await this.cleanupTemporaryFiles();
397
+ result.actions.push(...tempCleanup.actions);
398
+ // 2. Verify basic file permissions
399
+ const permCheck = await this.verifyBasicPermissions();
400
+ if (!permCheck.adequate) {
401
+ result.warnings.push('Permission issues detected');
402
+ }
403
+ // 3. Check for common file conflicts
404
+ const conflictCheck = await this.checkForConflicts();
405
+ if (conflictCheck.conflicts.length > 0) {
406
+ result.warnings.push(`Found ${conflictCheck.conflicts.length} potential conflicts`);
407
+ }
408
+ result.actions.push(`Performed generic recovery for: ${failureType}`);
409
+ result.warnings.push('Generic recovery may not fully resolve the issue');
410
+ } catch (error) {
411
+ result.success = false;
412
+ result.errors.push(`Generic recovery failed: ${error.message}`);
413
+ }
414
+ return result;
475
415
  }
476
-
477
- return result;
478
- }
479
-
480
- /**
416
+ /**
481
417
  * 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}`);
418
+ */ async validateRecoverySystem() {
419
+ const result = {
420
+ success: true,
421
+ errors: [],
422
+ warnings: []
423
+ };
424
+ try {
425
+ // Test recovery procedures
426
+ const recoveryTests = [
427
+ 'permission-denied',
428
+ 'disk-space',
429
+ 'corrupted-config'
430
+ ];
431
+ for (const test of recoveryTests){
432
+ const testResult = await this.testRecoveryProcedure(test);
433
+ if (!testResult.success) {
434
+ result.warnings.push(`Recovery test failed: ${test}`);
435
+ }
436
+ }
437
+ } catch (error) {
438
+ result.success = false;
439
+ result.errors.push(`Recovery system validation failed: ${error.message}`);
440
+ }
441
+ return result;
442
+ }
443
+ // Helper methods
444
+ async cleanupTemporaryFiles() {
445
+ const result = {
446
+ actions: []
447
+ };
448
+ const tempPatterns = [
449
+ '*.tmp',
450
+ '*.temp',
451
+ '.claude-flow-*-test*'
452
+ ];
453
+ for (const pattern of tempPatterns){
454
+ try {
455
+ // Simple cleanup - in a real implementation, use glob matching
456
+ result.actions.push(`Cleaned temporary files: ${pattern}`);
457
+ } catch {
458
+ // Continue with other patterns
459
+ }
460
+ }
461
+ return result;
462
+ }
463
+ async cleanupOldBackups() {
464
+ const result = {
465
+ actions: []
466
+ };
467
+ try {
468
+ const backupDir = `${this.workingDir}/.claude-flow-backups`;
469
+ // This would normally integrate with BackupManager
470
+ result.actions.push('Cleaned old backups');
471
+ } catch {
472
+ // Backup cleanup not critical
473
+ }
474
+ return result;
475
+ }
476
+ async checkAvailableSpace() {
477
+ try {
478
+ const command = new Deno.Command('df', {
479
+ args: [
480
+ '-m',
481
+ this.workingDir
482
+ ],
483
+ stdout: 'piped'
484
+ });
485
+ const { stdout, success } = await command.output();
486
+ if (success) {
487
+ const output = new TextDecoder().decode(stdout);
488
+ const lines = output.trim().split('\n');
489
+ if (lines.length >= 2) {
490
+ const parts = lines[1].split(/\s+/);
491
+ if (parts.length >= 4) {
492
+ return {
493
+ available: parseInt(parts[3])
494
+ };
495
+ }
496
+ }
497
+ }
498
+ } catch {
499
+ // Can't check space
498
500
  }
499
- }
500
- } catch (error) {
501
- result.success = false;
502
- result.errors.push(`Recovery system validation failed: ${error.message}`);
501
+ return {
502
+ available: 1000
503
+ }; // Assume adequate
503
504
  }
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
- }
505
+ async attemptDependencyInstallation(dependency) {
506
+ const result = {
507
+ success: false,
508
+ error: null
509
+ };
510
+ // This would contain actual dependency installation logic
511
+ // For now, just simulate
512
+ result.success = true;
513
+ return result;
522
514
  }
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
515
+ async verifyDependencies(dependencies) {
516
+ const result = {
517
+ allAvailable: true,
518
+ missing: []
519
+ };
520
+ for (const dep of dependencies){
521
+ try {
522
+ const command = new Deno.Command(dep, {
523
+ args: [
524
+ '--version'
525
+ ],
526
+ stdout: 'piped',
527
+ stderr: 'piped'
528
+ });
529
+ const { success } = await command.output();
530
+ if (!success) {
531
+ result.allAvailable = false;
532
+ result.missing.push(dep);
533
+ }
534
+ } catch {
535
+ result.allAvailable = false;
536
+ result.missing.push(dep);
537
+ }
538
+ }
539
+ return result;
540
+ }
541
+ async recoverConfigFile(filename) {
542
+ const result = {
543
+ success: true
544
+ };
545
+ // This would contain config file recovery logic
546
+ // Generate default config based on filename
547
+ return result;
548
+ }
549
+ async validateRecoveredConfigs(filenames) {
550
+ return {
551
+ valid: true
552
+ };
537
553
  }
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
- }
554
+ async identifyCompletedItems() {
555
+ const items = [];
556
+ const checkFiles = [
557
+ 'CLAUDE.md',
558
+ 'memory-bank.md',
559
+ 'coordination.md'
560
+ ];
561
+ for (const file of checkFiles){
562
+ try {
563
+ await Deno.stat(`${this.workingDir}/${file}`);
564
+ items.push({
565
+ name: file,
566
+ type: 'file'
567
+ });
568
+ } catch {
569
+ // File doesn't exist
570
+ }
560
571
  }
561
- }
562
- } catch {
563
- // Can't check space
572
+ return items;
564
573
  }
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);
574
+ async identifyMissingItems() {
575
+ const missing = [];
576
+ const requiredFiles = [
577
+ 'CLAUDE.md',
578
+ 'memory-bank.md',
579
+ 'coordination.md',
580
+ 'claude-flow'
581
+ ];
582
+ for (const file of requiredFiles){
583
+ try {
584
+ await Deno.stat(`${this.workingDir}/${file}`);
585
+ } catch {
586
+ missing.push({
587
+ name: file,
588
+ type: 'file'
589
+ });
590
+ }
599
591
  }
600
- } catch {
601
- result.allAvailable = false;
602
- result.missing.push(dep);
603
- }
592
+ return missing;
604
593
  }
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
- }
594
+ async completeItem(item) {
595
+ const result = {
596
+ success: true
597
+ };
598
+ // This would contain item completion logic based on item type
599
+ return result;
636
600
  }
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
- }
601
+ async verifyInitializationComplete() {
602
+ return {
603
+ complete: true
604
+ };
605
+ }
606
+ async recoverRoomodesFile() {
607
+ const result = {
608
+ success: true
609
+ };
610
+ // Generate basic .roomodes content
611
+ const basicRoomodes = {
612
+ version: '1.0',
613
+ modes: {
614
+ architect: {
615
+ description: 'System design and architecture planning'
616
+ },
617
+ code: {
618
+ description: 'Clean, modular code implementation'
619
+ },
620
+ tdd: {
621
+ description: 'Test-driven development and testing'
622
+ }
623
+ }
624
+ };
625
+ try {
626
+ await Deno.writeTextFile(`${this.workingDir}/.roomodes`, JSON.stringify(basicRoomodes, null, 2));
627
+ } catch {
628
+ result.success = false;
629
+ }
630
+ return result;
652
631
  }
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;
632
+ async recoverRooDirectory() {
633
+ const result = {
634
+ success: true
635
+ };
636
+ try {
637
+ const rooDirs = [
638
+ '.roo',
639
+ '.roo/templates',
640
+ '.roo/workflows',
641
+ '.roo/modes'
642
+ ];
643
+ for (const dir of rooDirs){
644
+ await Deno.mkdir(`${this.workingDir}/${dir}`, {
645
+ recursive: true
646
+ });
647
+ }
648
+ } catch {
649
+ result.success = false;
650
+ }
651
+ return result;
699
652
  }
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;
653
+ async recoverSparcCommands() {
654
+ const result = {
655
+ success: true
656
+ };
657
+ // This would recreate SPARC command files
658
+ return result;
717
659
  }
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
660
+ async createExecutableWrapper() {
661
+ const result = {
662
+ success: true
663
+ };
664
+ const executableContent = `#!/usr/bin/env bash
737
665
  # Claude Flow Local Executable Wrapper
738
666
  exec deno run --allow-all --unstable-kv --unstable-cron \\
739
667
  "${import.meta.url.replace('file://', '').replace(/[^/]*$/, '../../../main.js')}" "$@"
740
668
  `;
741
-
742
- try {
743
- await Deno.writeTextFile(`${this.workingDir}/claude-flow`, executableContent);
744
- } catch {
745
- result.success = false;
669
+ try {
670
+ await Deno.writeTextFile(`${this.workingDir}/claude-flow`, executableContent);
671
+ } catch {
672
+ result.success = false;
673
+ }
674
+ return result;
675
+ }
676
+ async verifyBasicPermissions() {
677
+ const result = {
678
+ adequate: true
679
+ };
680
+ try {
681
+ const testFile = `${this.workingDir}/.permission-test`;
682
+ await Deno.writeTextFile(testFile, 'test');
683
+ await Deno.remove(testFile);
684
+ } catch {
685
+ result.adequate = false;
686
+ }
687
+ return result;
688
+ }
689
+ async checkForConflicts() {
690
+ return {
691
+ conflicts: []
692
+ };
693
+ }
694
+ async testRecoveryProcedure(procedureName) {
695
+ return {
696
+ success: true
697
+ };
746
698
  }
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;
699
+ constructor(workingDir){
700
+ this.workingDir = workingDir;
762
701
  }
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
702
  }