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,387 +1,336 @@
1
- import { promises as fs } from 'fs';
1
+ import { promises as fs } from "fs";
2
2
  // mode-validator.js - SPARC mode functionality testing
3
-
4
3
  export class ModeValidator {
5
- constructor(workingDir) {
6
- this.workingDir = workingDir;
7
- }
8
-
9
- /**
4
+ /**
10
5
  * Test all SPARC modes for basic functionality
11
- */
12
- async testAllModes() {
13
- const result = {
14
- success: true,
15
- errors: [],
16
- warnings: [],
17
- modes: {},
18
- };
19
-
20
- try {
21
- // First, check if SPARC is initialized
22
- const sparcInitialized = await this.checkSparcInitialization();
23
- if (!sparcInitialized.initialized) {
24
- result.warnings.push('SPARC not initialized - mode testing skipped');
25
- return result;
26
- }
27
-
28
- // Get available modes
29
- const availableModes = await this.getAvailableModes();
30
- if (availableModes.length === 0) {
31
- result.warnings.push('No SPARC modes found for testing');
32
- return result;
33
- }
34
-
35
- // Test each mode
36
- for (const mode of availableModes) {
37
- const modeTest = await this.testMode(mode);
38
- result.modes[mode] = modeTest;
39
-
40
- if (!modeTest.success) {
41
- result.success = false;
42
- result.errors.push(`Mode ${mode} failed testing: ${modeTest.error}`);
6
+ */ async testAllModes() {
7
+ const result = {
8
+ success: true,
9
+ errors: [],
10
+ warnings: [],
11
+ modes: {}
12
+ };
13
+ try {
14
+ // First, check if SPARC is initialized
15
+ const sparcInitialized = await this.checkSparcInitialization();
16
+ if (!sparcInitialized.initialized) {
17
+ result.warnings.push('SPARC not initialized - mode testing skipped');
18
+ return result;
19
+ }
20
+ // Get available modes
21
+ const availableModes = await this.getAvailableModes();
22
+ if (availableModes.length === 0) {
23
+ result.warnings.push('No SPARC modes found for testing');
24
+ return result;
25
+ }
26
+ // Test each mode
27
+ for (const mode of availableModes){
28
+ const modeTest = await this.testMode(mode);
29
+ result.modes[mode] = modeTest;
30
+ if (!modeTest.success) {
31
+ result.success = false;
32
+ result.errors.push(`Mode ${mode} failed testing: ${modeTest.error}`);
33
+ }
34
+ }
35
+ } catch (error) {
36
+ result.success = false;
37
+ result.errors.push(`Mode testing failed: ${error.message}`);
43
38
  }
44
- }
45
- } catch (error) {
46
- result.success = false;
47
- result.errors.push(`Mode testing failed: ${error.message}`);
39
+ return result;
48
40
  }
49
-
50
- return result;
51
- }
52
-
53
- /**
41
+ /**
54
42
  * Test a specific SPARC mode
55
- */
56
- async testMode(modeName) {
57
- const result = {
58
- success: true,
59
- error: null,
60
- checks: {
61
- accessible: false,
62
- configValid: false,
63
- executable: false,
64
- },
65
- };
66
-
67
- try {
68
- // Test 1: Check if mode is accessible via CLI
69
- const accessTest = await this.testModeAccess(modeName);
70
- result.checks.accessible = accessTest.success;
71
- if (!accessTest.success) {
72
- result.success = false;
73
- result.error = accessTest.error;
74
- return result;
75
- }
76
-
77
- // Test 2: Validate mode configuration
78
- const configTest = await this.testModeConfig(modeName);
79
- result.checks.configValid = configTest.success;
80
- if (!configTest.success) {
81
- result.success = false;
82
- result.error = configTest.error;
83
- return result;
84
- }
85
-
86
- // Test 3: Test mode execution (dry run)
87
- const execTest = await this.testModeExecution(modeName);
88
- result.checks.executable = execTest.success;
89
- if (!execTest.success) {
90
- result.success = false;
91
- result.error = execTest.error;
43
+ */ async testMode(modeName) {
44
+ const result = {
45
+ success: true,
46
+ error: null,
47
+ checks: {
48
+ accessible: false,
49
+ configValid: false,
50
+ executable: false
51
+ }
52
+ };
53
+ try {
54
+ // Test 1: Check if mode is accessible via CLI
55
+ const accessTest = await this.testModeAccess(modeName);
56
+ result.checks.accessible = accessTest.success;
57
+ if (!accessTest.success) {
58
+ result.success = false;
59
+ result.error = accessTest.error;
60
+ return result;
61
+ }
62
+ // Test 2: Validate mode configuration
63
+ const configTest = await this.testModeConfig(modeName);
64
+ result.checks.configValid = configTest.success;
65
+ if (!configTest.success) {
66
+ result.success = false;
67
+ result.error = configTest.error;
68
+ return result;
69
+ }
70
+ // Test 3: Test mode execution (dry run)
71
+ const execTest = await this.testModeExecution(modeName);
72
+ result.checks.executable = execTest.success;
73
+ if (!execTest.success) {
74
+ result.success = false;
75
+ result.error = execTest.error;
76
+ return result;
77
+ }
78
+ } catch (error) {
79
+ result.success = false;
80
+ result.error = error.message;
81
+ }
92
82
  return result;
93
- }
94
- } catch (error) {
95
- result.success = false;
96
- result.error = error.message;
97
83
  }
98
-
99
- return result;
100
- }
101
-
102
- /**
84
+ /**
103
85
  * Check if SPARC is properly initialized
104
- */
105
- async checkSparcInitialization() {
106
- const result = {
107
- initialized: false,
108
- hasRoomodes: false,
109
- hasExecutable: false,
110
- error: null,
111
- };
112
-
113
- try {
114
- // Check for .roomodes file
115
- try {
116
- const stat = await Deno.stat(`${this.workingDir}/.roomodes`);
117
- result.hasRoomodes = stat.isFile;
118
- } catch {
119
- result.error = '.roomodes file not found';
120
- }
121
-
122
- // Check for claude-flow-novice executable
123
- try {
124
- const stat = await Deno.stat(`${this.workingDir}/claude-flow`);
125
- result.hasExecutable = stat.isFile;
126
- } catch {
127
- result.error = 'claude-flow-novice executable not found';
128
- }
129
-
130
- result.initialized = result.hasRoomodes && result.hasExecutable;
131
- } catch (error) {
132
- result.error = error.message;
86
+ */ async checkSparcInitialization() {
87
+ const result = {
88
+ initialized: false,
89
+ hasRoomodes: false,
90
+ hasExecutable: false,
91
+ error: null
92
+ };
93
+ try {
94
+ // Check for .roomodes file
95
+ try {
96
+ const stat = await Deno.stat(`${this.workingDir}/.roomodes`);
97
+ result.hasRoomodes = stat.isFile;
98
+ } catch {
99
+ result.error = '.roomodes file not found';
100
+ }
101
+ // Check for claude-flow-novice executable
102
+ try {
103
+ const stat = await Deno.stat(`${this.workingDir}/claude-flow`);
104
+ result.hasExecutable = stat.isFile;
105
+ } catch {
106
+ result.error = 'claude-flow-novice executable not found';
107
+ }
108
+ result.initialized = result.hasRoomodes && result.hasExecutable;
109
+ } catch (error) {
110
+ result.error = error.message;
111
+ }
112
+ return result;
133
113
  }
134
-
135
- return result;
136
- }
137
-
138
- /**
114
+ /**
139
115
  * Get list of available SPARC modes
140
- */
141
- async getAvailableModes() {
142
- const modes = [];
143
-
144
- try {
145
- // Try to get modes from .roomodes
146
- const roomodesPath = `${this.workingDir}/.roomodes`;
147
- const content = await fs.readFile(roomodesPath, 'utf8');
148
- const config = JSON.parse(content);
149
-
150
- if (config.modes && typeof config.modes === 'object') {
151
- modes.push(...Object.keys(config.modes));
152
- }
153
- } catch (error) {
154
- // Fallback to common modes
155
- modes.push(
156
- 'architect',
157
- 'code',
158
- 'tdd',
159
- 'spec-pseudocode',
160
- 'integration',
161
- 'debug',
162
- 'docs-writer',
163
- );
116
+ */ async getAvailableModes() {
117
+ const modes = [];
118
+ try {
119
+ // Try to get modes from .roomodes
120
+ const roomodesPath = `${this.workingDir}/.roomodes`;
121
+ const content = await fs.readFile(roomodesPath, 'utf8');
122
+ const config = JSON.parse(content);
123
+ if (config.modes && typeof config.modes === 'object') {
124
+ modes.push(...Object.keys(config.modes));
125
+ }
126
+ } catch (error) {
127
+ // Fallback to common modes
128
+ modes.push('architect', 'code', 'tdd', 'spec-pseudocode', 'integration', 'debug', 'docs-writer');
129
+ }
130
+ return modes;
164
131
  }
165
-
166
- return modes;
167
- }
168
-
169
- /**
132
+ /**
170
133
  * Test if a mode is accessible via CLI
171
- */
172
- async testModeAccess(modeName) {
173
- const result = {
174
- success: false,
175
- error: null,
176
- };
177
-
178
- try {
179
- // Test with sparc info command
180
- const command = new Deno.Command('./claude-flow', {
181
- args: ['sparc', 'info', modeName],
182
- cwd: this.workingDir,
183
- stdout: 'piped',
184
- stderr: 'piped',
185
- });
186
-
187
- const { success, stdout, stderr } = await command.output();
188
-
189
- if (success) {
190
- result.success = true;
191
- } else {
192
- const errorOutput = new TextDecoder().decode(stderr);
193
- result.error = `Mode not accessible: ${errorOutput}`;
194
- }
195
- } catch (error) {
196
- result.error = `Failed to test mode access: ${error.message}`;
134
+ */ async testModeAccess(modeName) {
135
+ const result = {
136
+ success: false,
137
+ error: null
138
+ };
139
+ try {
140
+ // Test with sparc info command
141
+ const command = new Deno.Command('./claude-flow', {
142
+ args: [
143
+ 'sparc',
144
+ 'info',
145
+ modeName
146
+ ],
147
+ cwd: this.workingDir,
148
+ stdout: 'piped',
149
+ stderr: 'piped'
150
+ });
151
+ const { success, stdout, stderr } = await command.output();
152
+ if (success) {
153
+ result.success = true;
154
+ } else {
155
+ const errorOutput = new TextDecoder().decode(stderr);
156
+ result.error = `Mode not accessible: ${errorOutput}`;
157
+ }
158
+ } catch (error) {
159
+ result.error = `Failed to test mode access: ${error.message}`;
160
+ }
161
+ return result;
197
162
  }
198
-
199
- return result;
200
- }
201
-
202
- /**
163
+ /**
203
164
  * Test mode configuration validity
204
- */
205
- async testModeConfig(modeName) {
206
- const result = {
207
- success: false,
208
- error: null,
209
- };
210
-
211
- try {
212
- // Read .roomodes and validate mode config
213
- const roomodesPath = `${this.workingDir}/.roomodes`;
214
- const content = await fs.readFile(roomodesPath, 'utf8');
215
- const config = JSON.parse(content);
216
-
217
- if (!config.modes || !config.modes[modeName]) {
218
- result.error = `Mode ${modeName} not found in configuration`;
219
- return result;
220
- }
221
-
222
- const modeConfig = config.modes[modeName];
223
-
224
- // Basic validation
225
- if (typeof modeConfig !== 'object') {
226
- result.error = `Invalid configuration for mode ${modeName}`;
227
- return result;
228
- }
229
-
230
- // Check for required fields
231
- const requiredFields = ['description'];
232
- for (const field of requiredFields) {
233
- if (!modeConfig[field]) {
234
- result.error = `Mode ${modeName} missing required field: ${field}`;
235
- return result;
165
+ */ async testModeConfig(modeName) {
166
+ const result = {
167
+ success: false,
168
+ error: null
169
+ };
170
+ try {
171
+ // Read .roomodes and validate mode config
172
+ const roomodesPath = `${this.workingDir}/.roomodes`;
173
+ const content = await fs.readFile(roomodesPath, 'utf8');
174
+ const config = JSON.parse(content);
175
+ if (!config.modes || !config.modes[modeName]) {
176
+ result.error = `Mode ${modeName} not found in configuration`;
177
+ return result;
178
+ }
179
+ const modeConfig = config.modes[modeName];
180
+ // Basic validation
181
+ if (typeof modeConfig !== 'object') {
182
+ result.error = `Invalid configuration for mode ${modeName}`;
183
+ return result;
184
+ }
185
+ // Check for required fields
186
+ const requiredFields = [
187
+ 'description'
188
+ ];
189
+ for (const field of requiredFields){
190
+ if (!modeConfig[field]) {
191
+ result.error = `Mode ${modeName} missing required field: ${field}`;
192
+ return result;
193
+ }
194
+ }
195
+ result.success = true;
196
+ } catch (error) {
197
+ result.error = `Configuration validation failed: ${error.message}`;
236
198
  }
237
- }
238
-
239
- result.success = true;
240
- } catch (error) {
241
- result.error = `Configuration validation failed: ${error.message}`;
199
+ return result;
242
200
  }
243
-
244
- return result;
245
- }
246
-
247
- /**
201
+ /**
248
202
  * Test mode execution with a safe dry run
249
- */
250
- async testModeExecution(modeName) {
251
- const result = {
252
- success: false,
253
- error: null,
254
- };
255
-
256
- try {
257
- // Test with a safe, non-destructive command
258
- const command = new Deno.Command('./claude-flow', {
259
- args: ['sparc', 'run', modeName, 'test validation', '--dry-run'],
260
- cwd: this.workingDir,
261
- stdout: 'piped',
262
- stderr: 'piped',
263
- });
264
-
265
- const { success, stdout, stderr } = await command.output();
266
-
267
- if (success) {
268
- result.success = true;
269
- } else {
270
- // Check if it's just because --dry-run isn't supported
271
- const errorOutput = new TextDecoder().decode(stderr);
272
- if (errorOutput.includes('dry-run') || errorOutput.includes('unknown flag')) {
273
- // Try without dry-run but with a safe test task
274
- const testCommand = new Deno.Command('./claude-flow', {
275
- args: ['sparc', 'modes'],
276
- cwd: this.workingDir,
277
- stdout: 'piped',
278
- stderr: 'piped',
279
- });
280
-
281
- const testResult = await testCommand.output();
282
- if (testResult.success) {
283
- const output = new TextDecoder().decode(testResult.stdout);
284
- result.success = output.includes(modeName);
285
- if (!result.success) {
286
- result.error = `Mode ${modeName} not listed in available modes`;
203
+ */ async testModeExecution(modeName) {
204
+ const result = {
205
+ success: false,
206
+ error: null
207
+ };
208
+ try {
209
+ // Test with a safe, non-destructive command
210
+ const command = new Deno.Command('./claude-flow', {
211
+ args: [
212
+ 'sparc',
213
+ 'run',
214
+ modeName,
215
+ 'test validation',
216
+ '--dry-run'
217
+ ],
218
+ cwd: this.workingDir,
219
+ stdout: 'piped',
220
+ stderr: 'piped'
221
+ });
222
+ const { success, stdout, stderr } = await command.output();
223
+ if (success) {
224
+ result.success = true;
225
+ } else {
226
+ // Check if it's just because --dry-run isn't supported
227
+ const errorOutput = new TextDecoder().decode(stderr);
228
+ if (errorOutput.includes('dry-run') || errorOutput.includes('unknown flag')) {
229
+ // Try without dry-run but with a safe test task
230
+ const testCommand = new Deno.Command('./claude-flow', {
231
+ args: [
232
+ 'sparc',
233
+ 'modes'
234
+ ],
235
+ cwd: this.workingDir,
236
+ stdout: 'piped',
237
+ stderr: 'piped'
238
+ });
239
+ const testResult = await testCommand.output();
240
+ if (testResult.success) {
241
+ const output = new TextDecoder().decode(testResult.stdout);
242
+ result.success = output.includes(modeName);
243
+ if (!result.success) {
244
+ result.error = `Mode ${modeName} not listed in available modes`;
245
+ }
246
+ } else {
247
+ result.error = `Mode execution test failed: ${errorOutput}`;
248
+ }
249
+ } else {
250
+ result.error = `Mode execution failed: ${errorOutput}`;
251
+ }
287
252
  }
288
- } else {
289
- result.error = `Mode execution test failed: ${errorOutput}`;
290
- }
291
- } else {
292
- result.error = `Mode execution failed: ${errorOutput}`;
253
+ } catch (error) {
254
+ result.error = `Execution test failed: ${error.message}`;
293
255
  }
294
- }
295
- } catch (error) {
296
- result.error = `Execution test failed: ${error.message}`;
256
+ return result;
297
257
  }
298
-
299
- return result;
300
- }
301
-
302
- /**
258
+ /**
303
259
  * Test SPARC workflow functionality
304
- */
305
- async testWorkflowFunctionality() {
306
- const result = {
307
- success: true,
308
- errors: [],
309
- warnings: [],
310
- workflows: {},
311
- };
312
-
313
- try {
314
- // Check for workflow files
315
- const workflowDir = `${this.workingDir}/.roo/workflows`;
316
-
317
- try {
318
- const entries = [];
319
- for await (const entry of Deno.readDir(workflowDir)) {
320
- if (entry.isFile && entry.name.endsWith('.json')) {
321
- entries.push(entry.name);
322
- }
323
- }
324
-
325
- // Test each workflow file
326
- for (const workflowFile of entries) {
327
- const workflowTest = await this.testWorkflowFile(workflowFile);
328
- result.workflows[workflowFile] = workflowTest;
329
-
330
- if (!workflowTest.success) {
331
- result.warnings.push(`Workflow ${workflowFile} has issues: ${workflowTest.error}`);
332
- }
333
- }
334
-
335
- if (entries.length === 0) {
336
- result.warnings.push('No workflow files found');
260
+ */ async testWorkflowFunctionality() {
261
+ const result = {
262
+ success: true,
263
+ errors: [],
264
+ warnings: [],
265
+ workflows: {}
266
+ };
267
+ try {
268
+ // Check for workflow files
269
+ const workflowDir = `${this.workingDir}/.roo/workflows`;
270
+ try {
271
+ const entries = [];
272
+ for await (const entry of Deno.readDir(workflowDir)){
273
+ if (entry.isFile && entry.name.endsWith('.json')) {
274
+ entries.push(entry.name);
275
+ }
276
+ }
277
+ // Test each workflow file
278
+ for (const workflowFile of entries){
279
+ const workflowTest = await this.testWorkflowFile(workflowFile);
280
+ result.workflows[workflowFile] = workflowTest;
281
+ if (!workflowTest.success) {
282
+ result.warnings.push(`Workflow ${workflowFile} has issues: ${workflowTest.error}`);
283
+ }
284
+ }
285
+ if (entries.length === 0) {
286
+ result.warnings.push('No workflow files found');
287
+ }
288
+ } catch {
289
+ result.warnings.push('Workflow directory not accessible');
290
+ }
291
+ } catch (error) {
292
+ result.errors.push(`Workflow testing failed: ${error.message}`);
337
293
  }
338
- } catch {
339
- result.warnings.push('Workflow directory not accessible');
340
- }
341
- } catch (error) {
342
- result.errors.push(`Workflow testing failed: ${error.message}`);
294
+ return result;
343
295
  }
344
-
345
- return result;
346
- }
347
-
348
- /**
296
+ /**
349
297
  * Test a specific workflow file
350
- */
351
- async testWorkflowFile(filename) {
352
- const result = {
353
- success: true,
354
- error: null,
355
- };
356
-
357
- try {
358
- const workflowPath = `${this.workingDir}/.roo/workflows/${filename}`;
359
- const content = await fs.readFile(workflowPath, 'utf8');
360
-
361
- // Parse JSON
362
- const workflow = JSON.parse(content);
363
-
364
- // Basic validation
365
- if (typeof workflow !== 'object' || workflow === null) {
366
- result.success = false;
367
- result.error = 'Workflow must be a JSON object';
368
- return result;
369
- }
370
-
371
- // Check for recommended fields
372
- const recommendedFields = ['name', 'description', 'steps'];
373
- for (const field of recommendedFields) {
374
- if (!(field in workflow)) {
375
- result.success = false;
376
- result.error = `Missing recommended field: ${field}`;
377
- return result;
298
+ */ async testWorkflowFile(filename) {
299
+ const result = {
300
+ success: true,
301
+ error: null
302
+ };
303
+ try {
304
+ const workflowPath = `${this.workingDir}/.roo/workflows/${filename}`;
305
+ const content = await fs.readFile(workflowPath, 'utf8');
306
+ // Parse JSON
307
+ const workflow = JSON.parse(content);
308
+ // Basic validation
309
+ if (typeof workflow !== 'object' || workflow === null) {
310
+ result.success = false;
311
+ result.error = 'Workflow must be a JSON object';
312
+ return result;
313
+ }
314
+ // Check for recommended fields
315
+ const recommendedFields = [
316
+ 'name',
317
+ 'description',
318
+ 'steps'
319
+ ];
320
+ for (const field of recommendedFields){
321
+ if (!(field in workflow)) {
322
+ result.success = false;
323
+ result.error = `Missing recommended field: ${field}`;
324
+ return result;
325
+ }
326
+ }
327
+ } catch (error) {
328
+ result.success = false;
329
+ result.error = `Workflow validation failed: ${error.message}`;
378
330
  }
379
- }
380
- } catch (error) {
381
- result.success = false;
382
- result.error = `Workflow validation failed: ${error.message}`;
331
+ return result;
332
+ }
333
+ constructor(workingDir){
334
+ this.workingDir = workingDir;
383
335
  }
384
-
385
- return result;
386
- }
387
336
  }