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,44 +1,37 @@
1
1
  // template-copier.js - Copy template files instead of generating them dynamically
2
-
3
- import { existsSync } from '../../node-compat.js';
4
- import { promises as fs } from 'fs';
5
- import { dirname, join, relative } from 'path';
6
- import { fileURLToPath } from 'url';
7
-
2
+ import { existsSync } from "../../node-compat.js";
3
+ import { promises as fs } from "fs";
4
+ import { dirname, join, relative } from "path";
5
+ import { fileURLToPath } from "url";
8
6
  const __filename = fileURLToPath(import.meta.url);
9
7
  const __dirname = dirname(__filename);
10
-
11
8
  /**
12
9
  * Find the templates directory (bundled or local)
13
10
  * @param {string} templateType - Template type (basic-swarm, fleet-manager, etc.)
14
11
  * @returns {Promise<string>} Path to templates directory
15
- */
16
- async function findTemplatesDirectory(templateType = 'basic-swarm') {
17
- // Try multiple possible template locations
18
- const possiblePaths = [
19
- // 1. Bundled templates (npm package installed)
20
- join(__dirname, '..', '..', '..', '..', 'templates', templateType),
21
- // 2. Source templates during development
22
- join(__dirname, 'templates'),
23
- // 3. Legacy templates location
24
- join(__dirname, 'templates', templateType),
25
- // 4. Project root templates
26
- join(process.cwd(), 'templates', templateType),
27
- ];
28
-
29
- for (const path of possiblePaths) {
30
- try {
31
- await fs.access(path);
32
- return path;
33
- } catch (err) {
34
- continue;
12
+ */ async function findTemplatesDirectory(templateType = 'basic-swarm') {
13
+ // Try multiple possible template locations
14
+ const possiblePaths = [
15
+ // 1. Bundled templates (npm package installed)
16
+ join(__dirname, '..', '..', '..', '..', 'templates', templateType),
17
+ // 2. Source templates during development
18
+ join(__dirname, 'templates'),
19
+ // 3. Legacy templates location
20
+ join(__dirname, 'templates', templateType),
21
+ // 4. Project root templates
22
+ join(process.cwd(), 'templates', templateType)
23
+ ];
24
+ for (const path of possiblePaths){
25
+ try {
26
+ await fs.access(path);
27
+ return path;
28
+ } catch (err) {
29
+ continue;
30
+ }
35
31
  }
36
- }
37
-
38
- // Fallback to local templates directory
39
- return join(__dirname, 'templates');
32
+ // Fallback to local templates directory
33
+ return join(__dirname, 'templates');
40
34
  }
41
-
42
35
  /**
43
36
  * Copy template files from the templates directory to the target directory
44
37
  * @param {string} targetDir - The directory to copy templates to
@@ -52,566 +45,461 @@ async function findTemplatesDirectory(templateType = 'basic-swarm') {
52
45
  * @param {boolean} options.force - Whether to overwrite existing files
53
46
  * @param {string[]} options.selectedModes - Selected SPARC modes to copy
54
47
  * @returns {Promise<{success: boolean, copiedFiles: string[], errors: string[]}>}
55
- */
56
- export async function copyTemplates(targetDir, options = {}) {
57
- const results = {
58
- success: true,
59
- copiedFiles: [],
60
- errors: [],
61
- };
62
-
63
- try {
64
- // Determine templates directory (bundled or local)
65
- const templatesDir = await findTemplatesDirectory(options.template || 'basic-swarm');
66
-
67
- // Determine which template variants to use
68
- const templateVariant =
69
- options.verify || options.pair
70
- ? 'verification'
71
- : options.optimized
72
- ? 'optimized'
73
- : options.enhanced
74
- ? 'enhanced'
75
- : options.minimal
76
- ? 'minimal'
77
- : options.sparc
78
- ? 'sparc'
79
- : 'full';
80
-
81
- // Core files to copy
82
- const coreFiles = [
83
- {
84
- source: 'CLAUDE.md',
85
- destination: 'CLAUDE.md',
86
- useVariant: true,
87
- },
88
- {
89
- source: 'memory-bank.md',
90
- destination: 'memory-bank.md',
91
- useVariant: true,
92
- },
93
- {
94
- source: 'coordination.md',
95
- destination: 'coordination.md',
96
- useVariant: true,
97
- },
98
- ];
99
-
100
- // Copy core files
101
- for (const file of coreFiles) {
102
- // Skip files if requested
103
- if (options.skipClaudeMd && file.destination === 'CLAUDE.md') continue;
104
- if (options.skipSettings && file.destination.includes('settings')) continue;
105
-
106
- const sourceFile =
107
- file.useVariant && existsSync(join(templatesDir, `${file.source}.${templateVariant}`))
108
- ? `${file.source}.${templateVariant}`
109
- : file.source;
110
-
111
- const sourcePath = join(templatesDir, sourceFile);
112
- const destPath = join(targetDir, file.destination);
113
-
114
- if (await copyFile(sourcePath, destPath, options)) {
115
- results.copiedFiles.push(file.destination);
116
- } else if (!options.dryRun) {
117
- results.errors.push(`Failed to copy ${file.destination}`);
118
- }
119
- }
120
-
121
- // Copy .claude directory structure
122
- if (options.enhanced || !options.minimal) {
123
- const claudeDir = join(targetDir, '.claude');
124
-
125
- // Copy settings.json unless skipped
126
- if (!options.skipSettings) {
127
- const settingsSource =
128
- options.verify || options.pair
129
- ? 'settings.json.verification'
130
- : options.enhanced
131
- ? 'settings.json.enhanced'
132
- : 'settings.json';
133
- const settingsPath = join(templatesDir, settingsSource);
134
- const settingsDest = join(claudeDir, 'settings.json');
135
-
136
- if (!options.dryRun) {
137
- await fs.mkdir(claudeDir, { recursive: true });
48
+ */ export async function copyTemplates(targetDir, options = {}) {
49
+ const results = {
50
+ success: true,
51
+ copiedFiles: [],
52
+ errors: []
53
+ };
54
+ try {
55
+ // Determine templates directory (bundled or local)
56
+ const templatesDir = await findTemplatesDirectory(options.template || 'basic-swarm');
57
+ // Determine which template variants to use
58
+ const templateVariant = options.verify || options.pair ? 'verification' : options.optimized ? 'optimized' : options.enhanced ? 'enhanced' : options.minimal ? 'minimal' : options.sparc ? 'sparc' : 'full';
59
+ // Core files to copy
60
+ const coreFiles = [
61
+ {
62
+ source: 'CLAUDE.md',
63
+ destination: 'CLAUDE.md',
64
+ useVariant: true
65
+ },
66
+ {
67
+ source: 'memory-bank.md',
68
+ destination: 'memory-bank.md',
69
+ useVariant: true
70
+ },
71
+ {
72
+ source: 'coordination.md',
73
+ destination: 'coordination.md',
74
+ useVariant: true
75
+ }
76
+ ];
77
+ // Copy core files
78
+ for (const file of coreFiles){
79
+ // Skip files if requested
80
+ if (options.skipClaudeMd && file.destination === 'CLAUDE.md') continue;
81
+ if (options.skipSettings && file.destination.includes('settings')) continue;
82
+ const sourceFile = file.useVariant && existsSync(join(templatesDir, `${file.source}.${templateVariant}`)) ? `${file.source}.${templateVariant}` : file.source;
83
+ const sourcePath = join(templatesDir, sourceFile);
84
+ const destPath = join(targetDir, file.destination);
85
+ if (await copyFile(sourcePath, destPath, options)) {
86
+ results.copiedFiles.push(file.destination);
87
+ } else if (!options.dryRun) {
88
+ results.errors.push(`Failed to copy ${file.destination}`);
89
+ }
138
90
  }
139
-
140
- if (await copyFile(settingsPath, settingsDest, options)) {
141
- results.copiedFiles.push('.claude/settings.json');
91
+ // Copy .claude directory structure
92
+ if (options.enhanced || !options.minimal) {
93
+ const claudeDir = join(targetDir, '.claude');
94
+ // Copy settings.json unless skipped
95
+ if (!options.skipSettings) {
96
+ const settingsSource = options.verify || options.pair ? 'settings.json.verification' : options.enhanced ? 'settings.json.enhanced' : 'settings.json';
97
+ const settingsPath = join(templatesDir, settingsSource);
98
+ const settingsDest = join(claudeDir, 'settings.json');
99
+ if (!options.dryRun) {
100
+ await fs.mkdir(claudeDir, {
101
+ recursive: true
102
+ });
103
+ }
104
+ if (await copyFile(settingsPath, settingsDest, options)) {
105
+ results.copiedFiles.push('.claude/settings.json');
106
+ }
107
+ } else if (!options.dryRun) {
108
+ // Still create the directory even if skipping settings
109
+ await fs.mkdir(claudeDir, {
110
+ recursive: true
111
+ });
112
+ }
113
+ // Copy command templates
114
+ if (options.sparc || options.enhanced) {
115
+ await copyCommandTemplates(templatesDir, targetDir, options, results);
116
+ }
117
+ // Copy helper scripts (enhanced mode only)
118
+ if (options.enhanced) {
119
+ await copyHelperScripts(templatesDir, targetDir, options, results);
120
+ }
142
121
  }
143
- } else if (!options.dryRun) {
144
- // Still create the directory even if skipping settings
145
- await fs.mkdir(claudeDir, { recursive: true });
146
- }
147
-
148
- // Copy command templates
149
- if (options.sparc || options.enhanced) {
150
- await copyCommandTemplates(templatesDir, targetDir, options, results);
151
- }
152
-
153
- // Copy helper scripts (enhanced mode only)
154
- if (options.enhanced) {
155
- await copyHelperScripts(templatesDir, targetDir, options, results);
156
- }
157
- }
158
-
159
- // Copy SPARC-specific files
160
- if (options.sparc) {
161
- await copySparcTemplates(templatesDir, targetDir, options, results);
122
+ // Copy SPARC-specific files
123
+ if (options.sparc) {
124
+ await copySparcTemplates(templatesDir, targetDir, options, results);
125
+ }
126
+ // Copy wrapper scripts
127
+ await copyWrapperScripts(templatesDir, targetDir, options, results);
128
+ // Create directory structure
129
+ await createDirectoryStructure(targetDir, options);
130
+ // Create README files for memory directories
131
+ await createMemoryReadmeFiles(targetDir, options, results);
132
+ } catch (err) {
133
+ results.success = false;
134
+ results.errors.push(`Template copy failed: ${err.message}`);
162
135
  }
163
-
164
- // Copy wrapper scripts
165
- await copyWrapperScripts(templatesDir, targetDir, options, results);
166
-
167
- // Create directory structure
168
- await createDirectoryStructure(targetDir, options);
169
-
170
- // Create README files for memory directories
171
- await createMemoryReadmeFiles(targetDir, options, results);
172
- } catch (err) {
173
- results.success = false;
174
- results.errors.push(`Template copy failed: ${err.message}`);
175
- }
176
-
177
- return results;
136
+ return results;
178
137
  }
179
-
180
138
  /**
181
139
  * Copy a single file with options
182
- */
183
- async function copyFile(source, destination, options) {
184
- try {
185
- // Check if source exists
186
- if (!existsSync(source)) {
187
- // Try reading from templates directory as fallback
188
- const templateContent = await getTemplateContent(source);
189
- if (templateContent) {
140
+ */ async function copyFile(source, destination, options) {
141
+ try {
142
+ // Check if source exists
143
+ if (!existsSync(source)) {
144
+ // Try reading from templates directory as fallback
145
+ const templateContent = await getTemplateContent(source);
146
+ if (templateContent) {
147
+ if (!options.dryRun) {
148
+ await fs.writeFile(destination, templateContent);
149
+ }
150
+ console.log(` ${options.dryRun ? '[DRY RUN] Would create' : '✓ Created'} ${relative(process.cwd(), destination)}`);
151
+ return true;
152
+ }
153
+ console.log(` ⚠️ Template not found: ${relative(process.cwd(), source)}`);
154
+ return false;
155
+ }
156
+ // Check if destination exists and handle force flag
157
+ if (existsSync(destination) && !options.force) {
158
+ console.log(` ⚠️ File already exists: ${relative(process.cwd(), destination)} (use --force to overwrite)`);
159
+ return false;
160
+ }
190
161
  if (!options.dryRun) {
191
- await fs.writeFile(destination, templateContent);
162
+ // Ensure destination directory exists
163
+ await fs.mkdir(dirname(destination), {
164
+ recursive: true
165
+ });
166
+ // Copy the file
167
+ const content = await fs.readFile(source, 'utf8');
168
+ await fs.writeFile(destination, content);
169
+ // Preserve file permissions for executable scripts
170
+ if (source.endsWith('.sh') || source.includes('claude-flow')) {
171
+ await fs.chmod(destination, 0o755);
172
+ }
192
173
  }
193
- console.log(
194
- ` ${options.dryRun ? '[DRY RUN] Would create' : '✓ Created'} ${relative(process.cwd(), destination)}`,
195
- );
174
+ console.log(` ${options.dryRun ? '[DRY RUN] Would copy' : '✓ Copied'} ${relative(process.cwd(), destination)}`);
196
175
  return true;
197
- }
198
- console.log(` ⚠️ Template not found: ${relative(process.cwd(), source)}`);
199
- return false;
200
- }
201
-
202
- // Check if destination exists and handle force flag
203
- if (existsSync(destination) && !options.force) {
204
- console.log(
205
- ` ⚠️ File already exists: ${relative(process.cwd(), destination)} (use --force to overwrite)`,
206
- );
207
- return false;
208
- }
209
-
210
- if (!options.dryRun) {
211
- // Ensure destination directory exists
212
- await fs.mkdir(dirname(destination), { recursive: true });
213
-
214
- // Copy the file
215
- const content = await fs.readFile(source, 'utf8');
216
- await fs.writeFile(destination, content);
217
-
218
- // Preserve file permissions for executable scripts
219
- if (source.endsWith('.sh') || source.includes('claude-flow')) {
220
- await fs.chmod(destination, 0o755);
221
- }
176
+ } catch (err) {
177
+ console.log(` Failed to copy ${relative(process.cwd(), destination)}: ${err.message}`);
178
+ return false;
222
179
  }
223
-
224
- console.log(
225
- ` ${options.dryRun ? '[DRY RUN] Would copy' : '✓ Copied'} ${relative(process.cwd(), destination)}`,
226
- );
227
- return true;
228
- } catch (err) {
229
- console.log(` ❌ Failed to copy ${relative(process.cwd(), destination)}: ${err.message}`);
230
- return false;
231
- }
232
180
  }
233
-
234
181
  /**
235
182
  * Copy command templates
236
- */
237
- async function copyCommandTemplates(templatesDir, targetDir, options, results) {
238
- const commandsSourceDir = join(templatesDir, 'commands');
239
- const commandsDestDir = join(targetDir, '.claude', 'commands');
240
-
241
- if (!existsSync(commandsSourceDir)) {
242
- // Use generated command templates as fallback
243
- return await generateCommandTemplates(targetDir, options, results);
244
- }
245
-
246
- try {
247
- if (!options.dryRun) {
248
- await fs.mkdir(commandsDestDir, { recursive: true });
183
+ */ async function copyCommandTemplates(templatesDir, targetDir, options, results) {
184
+ const commandsSourceDir = join(templatesDir, 'commands');
185
+ const commandsDestDir = join(targetDir, '.claude', 'commands');
186
+ if (!existsSync(commandsSourceDir)) {
187
+ // Use generated command templates as fallback
188
+ return await generateCommandTemplates(targetDir, options, results);
249
189
  }
250
-
251
- // Copy command categories
252
- const categories = await fs.readdir(commandsSourceDir);
253
-
254
- for (const category of categories) {
255
- const categoryPath = join(commandsSourceDir, category);
256
- const stat = await fs.stat(categoryPath);
257
-
258
- if (stat.isDirectory()) {
259
- const destCategoryPath = join(commandsDestDir, category);
260
-
190
+ try {
261
191
  if (!options.dryRun) {
262
- await fs.mkdir(destCategoryPath, { recursive: true });
192
+ await fs.mkdir(commandsDestDir, {
193
+ recursive: true
194
+ });
263
195
  }
264
-
265
- // Copy files in category
266
- const files = await fs.readdir(categoryPath);
267
- for (const file of files) {
268
- const sourcePath = join(categoryPath, file);
269
- const destPath = join(destCategoryPath, file);
270
-
271
- if (await copyFile(sourcePath, destPath, options)) {
272
- results.copiedFiles.push(join('.claude', 'commands', category, file));
273
- }
196
+ // Copy command categories
197
+ const categories = await fs.readdir(commandsSourceDir);
198
+ for (const category of categories){
199
+ const categoryPath = join(commandsSourceDir, category);
200
+ const stat = await fs.stat(categoryPath);
201
+ if (stat.isDirectory()) {
202
+ const destCategoryPath = join(commandsDestDir, category);
203
+ if (!options.dryRun) {
204
+ await fs.mkdir(destCategoryPath, {
205
+ recursive: true
206
+ });
207
+ }
208
+ // Copy files in category
209
+ const files = await fs.readdir(categoryPath);
210
+ for (const file of files){
211
+ const sourcePath = join(categoryPath, file);
212
+ const destPath = join(destCategoryPath, file);
213
+ if (await copyFile(sourcePath, destPath, options)) {
214
+ results.copiedFiles.push(join('.claude', 'commands', category, file));
215
+ }
216
+ }
217
+ }
274
218
  }
275
- }
219
+ } catch (err) {
220
+ results.errors.push(`Failed to copy command templates: ${err.message}`);
276
221
  }
277
- } catch (err) {
278
- results.errors.push(`Failed to copy command templates: ${err.message}`);
279
- }
280
222
  }
281
-
282
223
  /**
283
224
  * Copy SPARC templates
284
- */
285
- async function copySparcTemplates(templatesDir, targetDir, options, results) {
286
- const sparcDir = join(targetDir, '.claude', 'commands', 'sparc');
287
-
288
- try {
289
- if (!options.dryRun) {
290
- await fs.mkdir(sparcDir, { recursive: true });
291
- }
292
-
293
- // Get SPARC mode templates
294
- const { createSparcModeTemplates, createSparcModesOverview } = await import(
295
- './templates/sparc-modes.js'
296
- );
297
- const sparcTemplates = createSparcModeTemplates();
298
-
299
- // Filter templates if selectedModes is specified
300
- const templatesToCreate = options.selectedModes
301
- ? Object.entries(sparcTemplates).filter(([filename]) => {
302
- const mode = filename.replace('.md', '');
303
- return options.selectedModes.includes(mode);
304
- })
305
- : Object.entries(sparcTemplates);
306
-
307
- // Write SPARC mode files
308
- for (const [filename, content] of templatesToCreate) {
309
- const destPath = join(sparcDir, filename);
310
-
311
- if (!options.dryRun) {
312
- await fs.writeFile(destPath, content);
313
- }
314
-
315
- console.log(
316
- ` ${options.dryRun ? '[DRY RUN] Would create' : '✓ Created'} .claude/commands/sparc/${filename}`,
317
- );
318
- results.copiedFiles.push(join('.claude', 'commands', 'sparc', filename));
319
- }
320
-
321
- // Create sparc-modes.md overview
322
- const overviewPath = join(sparcDir, 'sparc-modes.md');
323
- if (!options.dryRun) {
324
- await fs.writeFile(overviewPath, createSparcModesOverview());
225
+ */ async function copySparcTemplates(templatesDir, targetDir, options, results) {
226
+ const sparcDir = join(targetDir, '.claude', 'commands', 'sparc');
227
+ try {
228
+ if (!options.dryRun) {
229
+ await fs.mkdir(sparcDir, {
230
+ recursive: true
231
+ });
232
+ }
233
+ // Get SPARC mode templates
234
+ const { createSparcModeTemplates, createSparcModesOverview } = await import("./templates/sparc-modes.js");
235
+ const sparcTemplates = createSparcModeTemplates();
236
+ // Filter templates if selectedModes is specified
237
+ const templatesToCreate = options.selectedModes ? Object.entries(sparcTemplates).filter(([filename])=>{
238
+ const mode = filename.replace('.md', '');
239
+ return options.selectedModes.includes(mode);
240
+ }) : Object.entries(sparcTemplates);
241
+ // Write SPARC mode files
242
+ for (const [filename, content] of templatesToCreate){
243
+ const destPath = join(sparcDir, filename);
244
+ if (!options.dryRun) {
245
+ await fs.writeFile(destPath, content);
246
+ }
247
+ console.log(` ${options.dryRun ? '[DRY RUN] Would create' : '✓ Created'} .claude/commands/sparc/${filename}`);
248
+ results.copiedFiles.push(join('.claude', 'commands', 'sparc', filename));
249
+ }
250
+ // Create sparc-modes.md overview
251
+ const overviewPath = join(sparcDir, 'sparc-modes.md');
252
+ if (!options.dryRun) {
253
+ await fs.writeFile(overviewPath, createSparcModesOverview());
254
+ }
255
+ console.log(` ${options.dryRun ? '[DRY RUN] Would create' : '✓ Created'} .claude/commands/sparc/sparc-modes.md`);
256
+ results.copiedFiles.push('.claude/commands/sparc/sparc-modes.md');
257
+ // Copy swarm templates
258
+ await copySwarmTemplates(templatesDir, targetDir, options, results);
259
+ } catch (err) {
260
+ results.errors.push(`Failed to copy SPARC templates: ${err.message}`);
325
261
  }
326
- console.log(
327
- ` ${options.dryRun ? '[DRY RUN] Would create' : '✓ Created'} .claude/commands/sparc/sparc-modes.md`,
328
- );
329
- results.copiedFiles.push('.claude/commands/sparc/sparc-modes.md');
330
-
331
- // Copy swarm templates
332
- await copySwarmTemplates(templatesDir, targetDir, options, results);
333
- } catch (err) {
334
- results.errors.push(`Failed to copy SPARC templates: ${err.message}`);
335
- }
336
262
  }
337
-
338
263
  /**
339
264
  * Copy swarm strategy templates
340
- */
341
- async function copySwarmTemplates(templatesDir, targetDir, options, results) {
342
- const swarmDir = join(targetDir, '.claude', 'commands', 'swarm');
343
-
344
- try {
345
- if (!options.dryRun) {
346
- await fs.mkdir(swarmDir, { recursive: true });
347
- }
348
-
349
- // Get swarm strategy templates
350
- const { createSwarmStrategyTemplates } = await import('./templates/sparc-modes.js');
351
- const swarmTemplates = createSwarmStrategyTemplates();
352
-
353
- // Write swarm strategy files
354
- for (const [filename, content] of Object.entries(swarmTemplates)) {
355
- const destPath = join(swarmDir, filename);
356
-
357
- if (!options.dryRun) {
358
- await fs.writeFile(destPath, content);
359
- }
360
-
361
- console.log(
362
- ` ${options.dryRun ? '[DRY RUN] Would create' : '✓ Created'} .claude/commands/swarm/${filename}`,
363
- );
364
- results.copiedFiles.push(join('.claude', 'commands', 'swarm', filename));
265
+ */ async function copySwarmTemplates(templatesDir, targetDir, options, results) {
266
+ const swarmDir = join(targetDir, '.claude', 'commands', 'swarm');
267
+ try {
268
+ if (!options.dryRun) {
269
+ await fs.mkdir(swarmDir, {
270
+ recursive: true
271
+ });
272
+ }
273
+ // Get swarm strategy templates
274
+ const { createSwarmStrategyTemplates } = await import("./templates/sparc-modes.js");
275
+ const swarmTemplates = createSwarmStrategyTemplates();
276
+ // Write swarm strategy files
277
+ for (const [filename, content] of Object.entries(swarmTemplates)){
278
+ const destPath = join(swarmDir, filename);
279
+ if (!options.dryRun) {
280
+ await fs.writeFile(destPath, content);
281
+ }
282
+ console.log(` ${options.dryRun ? '[DRY RUN] Would create' : '✓ Created'} .claude/commands/swarm/${filename}`);
283
+ results.copiedFiles.push(join('.claude', 'commands', 'swarm', filename));
284
+ }
285
+ } catch (err) {
286
+ results.errors.push(`Failed to copy swarm templates: ${err.message}`);
365
287
  }
366
- } catch (err) {
367
- results.errors.push(`Failed to copy swarm templates: ${err.message}`);
368
- }
369
288
  }
370
-
371
289
  /**
372
290
  * Copy helper scripts (enhanced mode)
373
- */
374
- async function copyHelperScripts(templatesDir, targetDir, options, results) {
375
- const helpersDir = join(targetDir, '.claude', 'helpers');
376
-
377
- try {
378
- if (!options.dryRun) {
379
- await fs.mkdir(helpersDir, { recursive: true });
380
- }
381
-
382
- const helpers = [
383
- 'setup-mcp.sh',
384
- 'quick-start.sh',
385
- 'github-setup.sh',
386
- 'github-safe.js',
387
- 'checkpoint-manager.sh',
388
- 'standard-checkpoint-hooks.sh',
389
- ];
390
- const { createHelperScript } = await import('./templates/enhanced-templates.js');
391
-
392
- for (const helper of helpers) {
393
- const content = createHelperScript(helper);
394
- if (content) {
395
- const destPath = join(helpersDir, helper);
396
-
291
+ */ async function copyHelperScripts(templatesDir, targetDir, options, results) {
292
+ const helpersDir = join(targetDir, '.claude', 'helpers');
293
+ try {
397
294
  if (!options.dryRun) {
398
- await fs.writeFile(destPath, content);
399
- await fs.chmod(destPath, 0o755);
295
+ await fs.mkdir(helpersDir, {
296
+ recursive: true
297
+ });
400
298
  }
401
-
402
- console.log(
403
- ` ${options.dryRun ? '[DRY RUN] Would create' : '✓ Created'} .claude/helpers/${helper}`,
404
- );
405
- results.copiedFiles.push(join('.claude', 'helpers', helper));
406
- }
299
+ const helpers = [
300
+ 'setup-mcp.sh',
301
+ 'quick-start.sh',
302
+ 'github-setup.sh',
303
+ 'github-safe.js',
304
+ 'checkpoint-manager.sh',
305
+ 'standard-checkpoint-hooks.sh'
306
+ ];
307
+ const { createHelperScript } = await import("./templates/enhanced-templates.js");
308
+ for (const helper of helpers){
309
+ const content = createHelperScript(helper);
310
+ if (content) {
311
+ const destPath = join(helpersDir, helper);
312
+ if (!options.dryRun) {
313
+ await fs.writeFile(destPath, content);
314
+ await fs.chmod(destPath, 0o755);
315
+ }
316
+ console.log(` ${options.dryRun ? '[DRY RUN] Would create' : '✓ Created'} .claude/helpers/${helper}`);
317
+ results.copiedFiles.push(join('.claude', 'helpers', helper));
318
+ }
319
+ }
320
+ } catch (err) {
321
+ results.errors.push(`Failed to copy helper scripts: ${err.message}`);
407
322
  }
408
- } catch (err) {
409
- results.errors.push(`Failed to copy helper scripts: ${err.message}`);
410
- }
411
323
  }
412
-
413
324
  /**
414
325
  * Copy wrapper scripts
415
- */
416
- async function copyWrapperScripts(templatesDir, targetDir, options, results) {
417
- try {
418
- // Unix wrapper
419
- const unixWrapperPath = join(targetDir, 'claude-flow');
420
- const unixWrapperSource = join(templatesDir, 'claude-flow-universal');
421
-
422
- if (await copyFile(unixWrapperSource, unixWrapperPath, options)) {
423
- if (!options.dryRun) {
424
- await fs.chmod(unixWrapperPath, 0o755);
425
- }
426
- results.copiedFiles.push('claude-flow');
427
- }
428
-
429
- // Windows batch wrapper
430
- const batchWrapperPath = join(targetDir, 'claude-flow.bat');
431
- const batchWrapperSource = join(templatesDir, 'claude-flow.bat');
432
-
433
- if (await copyFile(batchWrapperSource, batchWrapperPath, options)) {
434
- results.copiedFiles.push('claude-flow.bat');
435
- }
436
-
437
- // PowerShell wrapper
438
- const psWrapperPath = join(targetDir, 'claude-flow.ps1');
439
- const psWrapperSource = join(templatesDir, 'claude-flow.ps1');
440
-
441
- if (await copyFile(psWrapperSource, psWrapperPath, options)) {
442
- results.copiedFiles.push('claude-flow.ps1');
326
+ */ async function copyWrapperScripts(templatesDir, targetDir, options, results) {
327
+ try {
328
+ // Unix wrapper
329
+ const unixWrapperPath = join(targetDir, 'claude-flow');
330
+ const unixWrapperSource = join(templatesDir, 'claude-flow-universal');
331
+ if (await copyFile(unixWrapperSource, unixWrapperPath, options)) {
332
+ if (!options.dryRun) {
333
+ await fs.chmod(unixWrapperPath, 0o755);
334
+ }
335
+ results.copiedFiles.push('claude-flow');
336
+ }
337
+ // Windows batch wrapper
338
+ const batchWrapperPath = join(targetDir, 'claude-flow.bat');
339
+ const batchWrapperSource = join(templatesDir, 'claude-flow.bat');
340
+ if (await copyFile(batchWrapperSource, batchWrapperPath, options)) {
341
+ results.copiedFiles.push('claude-flow.bat');
342
+ }
343
+ // PowerShell wrapper
344
+ const psWrapperPath = join(targetDir, 'claude-flow.ps1');
345
+ const psWrapperSource = join(templatesDir, 'claude-flow.ps1');
346
+ if (await copyFile(psWrapperSource, psWrapperPath, options)) {
347
+ results.copiedFiles.push('claude-flow.ps1');
348
+ }
349
+ } catch (err) {
350
+ results.errors.push(`Failed to copy wrapper scripts: ${err.message}`);
443
351
  }
444
- } catch (err) {
445
- results.errors.push(`Failed to copy wrapper scripts: ${err.message}`);
446
- }
447
352
  }
448
-
449
353
  /**
450
354
  * Create directory structure
451
- */
452
- async function createDirectoryStructure(targetDir, options) {
453
- const directories = [
454
- 'memory',
455
- 'memory/agents',
456
- 'memory/sessions',
457
- 'coordination',
458
- 'coordination/memory_bank',
459
- 'coordination/subtasks',
460
- 'coordination/orchestration',
461
- '.claude',
462
- '.claude/commands',
463
- '.claude/logs',
464
- '.swarm', // For memory persistence
465
- ];
466
-
467
- if (options.sparc) {
468
- directories.push('.claude/commands/sparc', '.claude/commands/swarm');
469
- }
470
-
471
- for (const dir of directories) {
472
- const dirPath = join(targetDir, dir);
473
- try {
474
- if (!options.dryRun) {
475
- await fs.mkdir(dirPath, { recursive: true });
476
- }
477
- console.log(` ${options.dryRun ? '[DRY RUN] Would create' : '✓ Created'} ${dir}/ directory`);
478
- } catch (err) {
479
- if (err.code !== 'EEXIST') {
480
- console.log(` ❌ Failed to create ${dir}/: ${err.message}`);
481
- }
355
+ */ async function createDirectoryStructure(targetDir, options) {
356
+ const directories = [
357
+ 'memory',
358
+ 'memory/agents',
359
+ 'memory/sessions',
360
+ 'coordination',
361
+ 'coordination/memory_bank',
362
+ 'coordination/subtasks',
363
+ 'coordination/orchestration',
364
+ '.claude',
365
+ '.claude/commands',
366
+ '.claude/logs',
367
+ '.swarm'
368
+ ];
369
+ if (options.sparc) {
370
+ directories.push('.claude/commands/sparc', '.claude/commands/swarm');
371
+ }
372
+ for (const dir of directories){
373
+ const dirPath = join(targetDir, dir);
374
+ try {
375
+ if (!options.dryRun) {
376
+ await fs.mkdir(dirPath, {
377
+ recursive: true
378
+ });
379
+ }
380
+ console.log(` ${options.dryRun ? '[DRY RUN] Would create' : '✓ Created'} ${dir}/ directory`);
381
+ } catch (err) {
382
+ if (err.code !== 'EEXIST') {
383
+ console.log(` ❌ Failed to create ${dir}/: ${err.message}`);
384
+ }
385
+ }
482
386
  }
483
- }
484
387
  }
485
-
486
388
  /**
487
389
  * Create README files for memory directories
488
- */
489
- async function createMemoryReadmeFiles(targetDir, options, results) {
490
- const { createAgentsReadme, createSessionsReadme } = await import('./templates/readme-files.js');
491
-
492
- const readmeFiles = [
493
- { path: 'memory/agents/README.md', content: createAgentsReadme() },
494
- { path: 'memory/sessions/README.md', content: createSessionsReadme() },
495
- ];
496
-
497
- for (const { path, content } of readmeFiles) {
498
- const fullPath = join(targetDir, path);
499
-
390
+ */ async function createMemoryReadmeFiles(targetDir, options, results) {
391
+ const { createAgentsReadme, createSessionsReadme } = await import("./templates/readme-files.js");
392
+ const readmeFiles = [
393
+ {
394
+ path: 'memory/agents/README.md',
395
+ content: createAgentsReadme()
396
+ },
397
+ {
398
+ path: 'memory/sessions/README.md',
399
+ content: createSessionsReadme()
400
+ }
401
+ ];
402
+ for (const { path, content } of readmeFiles){
403
+ const fullPath = join(targetDir, path);
404
+ try {
405
+ if (!options.dryRun) {
406
+ await fs.mkdir(dirname(fullPath), {
407
+ recursive: true
408
+ });
409
+ await fs.writeFile(fullPath, content);
410
+ }
411
+ console.log(` ${options.dryRun ? '[DRY RUN] Would create' : '✓ Created'} ${path}`);
412
+ results.copiedFiles.push(path);
413
+ } catch (err) {
414
+ results.errors.push(`Failed to create ${path}: ${err.message}`);
415
+ }
416
+ }
417
+ // Initialize persistence database
418
+ const dbPath = join(targetDir, 'memory', 'claude-flow-data.json');
419
+ const initialData = {
420
+ agents: [],
421
+ tasks: [],
422
+ lastUpdated: Date.now()
423
+ };
500
424
  try {
501
- if (!options.dryRun) {
502
- await fs.mkdir(dirname(fullPath), { recursive: true });
503
- await fs.writeFile(fullPath, content);
504
- }
505
- console.log(` ${options.dryRun ? '[DRY RUN] Would create' : '✓ Created'} ${path}`);
506
- results.copiedFiles.push(path);
425
+ if (!options.dryRun) {
426
+ await fs.writeFile(dbPath, JSON.stringify(initialData, null, 2));
427
+ }
428
+ console.log(` ${options.dryRun ? '[DRY RUN] Would create' : '✓ Created'} memory/claude-flow-data.json (persistence database)`);
429
+ results.copiedFiles.push('memory/claude-flow-data.json');
507
430
  } catch (err) {
508
- results.errors.push(`Failed to create ${path}: ${err.message}`);
509
- }
510
- }
511
-
512
- // Initialize persistence database
513
- const dbPath = join(targetDir, 'memory', 'claude-flow-data.json');
514
- const initialData = {
515
- agents: [],
516
- tasks: [],
517
- lastUpdated: Date.now(),
518
- };
519
-
520
- try {
521
- if (!options.dryRun) {
522
- await fs.writeFile(dbPath, JSON.stringify(initialData, null, 2));
431
+ results.errors.push(`Failed to create persistence database: ${err.message}`);
523
432
  }
524
- console.log(
525
- ` ${options.dryRun ? '[DRY RUN] Would create' : '✓ Created'} memory/claude-flow-data.json (persistence database)`,
526
- );
527
- results.copiedFiles.push('memory/claude-flow-data.json');
528
- } catch (err) {
529
- results.errors.push(`Failed to create persistence database: ${err.message}`);
530
- }
531
433
  }
532
-
533
434
  /**
534
435
  * Get template content from template file (BUNDLED OR LOCAL)
535
- */
536
- async function getTemplateContent(templatePath) {
537
- const filename = templatePath.split('/').pop();
538
-
539
- // Try to read from the actual template file
540
- const __filename = fileURLToPath(import.meta.url);
541
- const __dirname = dirname(__filename);
542
-
543
- // Try multiple possible template locations
544
- // Priority: bundled templates > local templates > dist templates
545
- const templatePaths = [
546
- // 1. Bundled templates (npm package)
547
- join(__dirname, '..', '..', '..', '..', 'templates', 'basic-swarm', filename),
548
- // 2. Source location during development
549
- join(__dirname, 'templates', filename),
550
- // 3. Dist location (files copied directly)
551
- join(__dirname, filename),
552
- // 4. Relative to project root
553
- join(process.cwd(), 'templates', 'basic-swarm', filename),
554
- ];
555
-
556
- for (const actualTemplatePath of templatePaths) {
557
- try {
558
- const content = await fs.readFile(actualTemplatePath, 'utf8');
559
- console.log(` ✓ Using template from ${actualTemplatePath}`);
560
- return content;
561
- } catch (err) {
562
- // Try next path
563
- continue;
436
+ */ async function getTemplateContent(templatePath) {
437
+ const filename = templatePath.split('/').pop();
438
+ // Try to read from the actual template file
439
+ const __filename = fileURLToPath(import.meta.url);
440
+ const __dirname = dirname(__filename);
441
+ // Try multiple possible template locations
442
+ // Priority: bundled templates > local templates > dist templates
443
+ const templatePaths = [
444
+ // 1. Bundled templates (npm package)
445
+ join(__dirname, '..', '..', '..', '..', 'templates', 'basic-swarm', filename),
446
+ // 2. Source location during development
447
+ join(__dirname, 'templates', filename),
448
+ // 3. Dist location (files copied directly)
449
+ join(__dirname, filename),
450
+ // 4. Relative to project root
451
+ join(process.cwd(), 'templates', 'basic-swarm', filename)
452
+ ];
453
+ for (const actualTemplatePath of templatePaths){
454
+ try {
455
+ const content = await fs.readFile(actualTemplatePath, 'utf8');
456
+ console.log(` ✓ Using template from ${actualTemplatePath}`);
457
+ return content;
458
+ } catch (err) {
459
+ continue;
460
+ }
564
461
  }
565
- }
566
-
567
- // NO FALLBACK TO GENERATION - Template file must exist
568
- console.log(` ⚠️ Template file not found for ${filename}`);
569
- console.log(` 💡 Template files must be present in templates/ or src/cli/simple-commands/init/templates/`);
570
- return null;
462
+ // NO FALLBACK TO GENERATION - Template file must exist
463
+ console.log(` ⚠️ Template file not found for ${filename}`);
464
+ console.log(` 💡 Template files must be present in templates/ or src/cli/simple-commands/init/templates/`);
465
+ return null;
571
466
  }
572
-
573
467
  /**
574
468
  * Generate command templates as fallback
575
- */
576
- async function generateCommandTemplates(targetDir, options, results) {
577
- const { COMMAND_STRUCTURE, createCommandDoc } = await import('./templates/enhanced-templates.js');
578
-
579
- for (const [category, commands] of Object.entries(COMMAND_STRUCTURE)) {
580
- const categoryDir = join(targetDir, '.claude', 'commands', category);
581
-
582
- try {
583
- if (!options.dryRun) {
584
- await fs.mkdir(categoryDir, { recursive: true });
585
-
586
- // Create category README
587
- const categoryReadme = `# ${category.charAt(0).toUpperCase() + category.slice(1)} Commands
469
+ */ async function generateCommandTemplates(targetDir, options, results) {
470
+ const { COMMAND_STRUCTURE, createCommandDoc } = await import("./templates/enhanced-templates.js");
471
+ for (const [category, commands] of Object.entries(COMMAND_STRUCTURE)){
472
+ const categoryDir = join(targetDir, '.claude', 'commands', category);
473
+ try {
474
+ if (!options.dryRun) {
475
+ await fs.mkdir(categoryDir, {
476
+ recursive: true
477
+ });
478
+ // Create category README
479
+ const categoryReadme = `# ${category.charAt(0).toUpperCase() + category.slice(1)} Commands
588
480
 
589
481
  Commands for ${category} operations in Claude Flow.
590
482
 
591
483
  ## Available Commands
592
484
 
593
- ${commands.map((cmd) => `- [${cmd}](./${cmd}.md)`).join('\n')}
485
+ ${commands.map((cmd)=>`- [${cmd}](./${cmd}.md)`).join('\n')}
594
486
  `;
595
- await fs.writeFile(join(categoryDir, 'README.md'), categoryReadme);
596
- }
597
-
598
- // Create individual command docs
599
- for (const command of commands) {
600
- const doc = createCommandDoc(category, command);
601
- if (doc) {
602
- const docPath = join(categoryDir, `${command}.md`);
603
- if (!options.dryRun) {
604
- await fs.writeFile(docPath, doc);
605
- }
606
- results.copiedFiles.push(join('.claude', 'commands', category, `${command}.md`));
487
+ await fs.writeFile(join(categoryDir, 'README.md'), categoryReadme);
488
+ }
489
+ // Create individual command docs
490
+ for (const command of commands){
491
+ const doc = createCommandDoc(category, command);
492
+ if (doc) {
493
+ const docPath = join(categoryDir, `${command}.md`);
494
+ if (!options.dryRun) {
495
+ await fs.writeFile(docPath, doc);
496
+ }
497
+ results.copiedFiles.push(join('.claude', 'commands', category, `${command}.md`));
498
+ }
499
+ }
500
+ console.log(` ${options.dryRun ? '[DRY RUN] Would create' : '✓ Created'} ${commands.length} ${category} command docs`);
501
+ } catch (err) {
502
+ results.errors.push(`Failed to generate ${category} command templates: ${err.message}`);
607
503
  }
608
- }
609
-
610
- console.log(
611
- ` ${options.dryRun ? '[DRY RUN] Would create' : '✓ Created'} ${commands.length} ${category} command docs`,
612
- );
613
- } catch (err) {
614
- results.errors.push(`Failed to generate ${category} command templates: ${err.message}`);
615
504
  }
616
- }
617
505
  }