claude-flow-novice 2.2.4 → 2.2.5

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 (288) hide show
  1. package/package.json +9 -8
  2. package/scripts/.claude-flow/metrics/agent-metrics.json +1 -0
  3. package/scripts/.claude-flow/metrics/performance.json +9 -0
  4. package/scripts/.claude-flow/metrics/task-metrics.json +10 -0
  5. package/scripts/CLEANUP_OPTIMIZATION_REPORT.json +312 -0
  6. package/scripts/CLEANUP_PERFORMANCE_OPTIMIZATION.md +387 -0
  7. package/scripts/CLEANUP_QUICK_START.md +268 -0
  8. package/scripts/CLEANUP_TEST_RESULTS.md +205 -0
  9. package/scripts/README.md +339 -0
  10. package/scripts/ace-query.sh +384 -0
  11. package/scripts/agent-token-analysis.js +430 -0
  12. package/scripts/auto-setup.js +332 -0
  13. package/scripts/build/README.md +167 -0
  14. package/scripts/build/build-config.js +27 -0
  15. package/scripts/build/build-prompt-copier.sh +30 -0
  16. package/scripts/build/performance-monitor.js +869 -0
  17. package/scripts/build/prepare-publish.js +150 -0
  18. package/scripts/build/typescript-fixer.js +621 -0
  19. package/scripts/build/unified-builder.sh +428 -0
  20. package/scripts/build/update-bin-version.js +32 -0
  21. package/scripts/build/validate-agents.js +238 -0
  22. package/scripts/build-index.js +43 -0
  23. package/scripts/build-orchestrator.js +320 -0
  24. package/scripts/check-routing-stats.cjs +122 -0
  25. package/scripts/ci-validation.js +375 -0
  26. package/scripts/cleanup-blocking-coordination.sh +420 -0
  27. package/scripts/cleanup-idle-sessions.sh +59 -0
  28. package/scripts/collect-build-metrics.js +65 -0
  29. package/scripts/demo/README.md +79 -0
  30. package/scripts/demo/autoscaling-demo-simplified.js +963 -0
  31. package/scripts/demo/comprehensive-dashboard-test.js +693 -0
  32. package/scripts/demo/confidence-log.js +87 -0
  33. package/scripts/demo/confidence-report.js +82 -0
  34. package/scripts/demo/demo-multi-swarm-coordination.js +325 -0
  35. package/scripts/demo/demo-production-deployment.js +399 -0
  36. package/scripts/demo/demo-visualization-system.js +149 -0
  37. package/scripts/demo/performance-analysis.cjs +71 -0
  38. package/scripts/demo/performance-analysis.js +71 -0
  39. package/scripts/demo/test-autoscaling-demo.js +314 -0
  40. package/scripts/dependency-optimizer.js +349 -0
  41. package/scripts/dependency-security-assessment.js +331 -0
  42. package/scripts/deploy-sdk.sh +176 -0
  43. package/scripts/deployment-readiness-report.json +179 -0
  44. package/scripts/dev/README.md +264 -0
  45. package/scripts/dev/claude-flow-wrapper.sh +35 -0
  46. package/scripts/dev/claude-monitor.py +419 -0
  47. package/scripts/dev/claude-sparc.sh +562 -0
  48. package/scripts/dev/claude-wrapper.sh +17 -0
  49. package/scripts/dev/demo-phase3-compliance.js +172 -0
  50. package/scripts/dev/demo-task-system.ts +224 -0
  51. package/scripts/dev/deployment-validator.js +315 -0
  52. package/scripts/dev/spawn-claude-terminal.sh +32 -0
  53. package/scripts/dev/start-portal.sh +506 -0
  54. package/scripts/dev/start-web-ui.js +15 -0
  55. package/scripts/dev/stop-portal.sh +311 -0
  56. package/scripts/dev/validate-examples.ts +288 -0
  57. package/scripts/dev/validate-phase2.cjs +451 -0
  58. package/scripts/dev/validate-phase2.js +785 -0
  59. package/scripts/dev/validate-phase3.cjs +208 -0
  60. package/scripts/dev/validate-security-remediation.js +1 -0
  61. package/scripts/ecosystem.config.cjs +90 -0
  62. package/scripts/fix-js-extensions.js +167 -0
  63. package/scripts/generate-basic-types.js +73 -0
  64. package/scripts/generate-changelog.js +318 -0
  65. package/scripts/git-hooks/pre-commit.sh +143 -0
  66. package/scripts/health-checks.js +634 -0
  67. package/scripts/hook-wrapper.sh +54 -0
  68. package/scripts/install/README.md +375 -0
  69. package/scripts/install/REDIS_SETUP_VALIDATION.json +245 -0
  70. package/scripts/install/check-prerequisites.js +303 -0
  71. package/scripts/install/config-wizard.js +606 -0
  72. package/scripts/install/dependency-checker.js +385 -0
  73. package/scripts/install/health-check.js +765 -0
  74. package/scripts/install/install.js +256 -0
  75. package/scripts/install/installation-benchmark.js +461 -0
  76. package/scripts/install/quick-install.js +720 -0
  77. package/scripts/install/quick-start-wizard.js +295 -0
  78. package/scripts/install/redis-cli.js +289 -0
  79. package/scripts/install/redis-install-guides.md +407 -0
  80. package/scripts/install/redis-setup.js +559 -0
  81. package/scripts/install/redis-test.js +278 -0
  82. package/scripts/install/service-manager.js +672 -0
  83. package/scripts/install/setup.js +832 -0
  84. package/scripts/install/uninstall.js +526 -0
  85. package/scripts/install/update.js +461 -0
  86. package/scripts/install-pre-commit-hook.sh +127 -0
  87. package/scripts/legacy/README.md +272 -0
  88. package/scripts/legacy/batch-fix-ts.sh +54 -0
  89. package/scripts/legacy/build-migration.sh +105 -0
  90. package/scripts/legacy/build-monitor.js +209 -0
  91. package/scripts/legacy/build-with-filter.sh +84 -0
  92. package/scripts/legacy/build-workaround.sh +71 -0
  93. package/scripts/legacy/fix-ts-advanced.js +358 -0
  94. package/scripts/legacy/fix-ts-final.sh +50 -0
  95. package/scripts/legacy/fix-ts-targeted.sh +49 -0
  96. package/scripts/legacy/fix-typescript-errors.js +305 -0
  97. package/scripts/legacy/force-build.sh +63 -0
  98. package/scripts/legacy/optimize-performance.js +400 -0
  99. package/scripts/legacy/performance-monitor.js +263 -0
  100. package/scripts/legacy/performance-monitoring.js +532 -0
  101. package/scripts/legacy/performance-test-runner.js +645 -0
  102. package/scripts/legacy/quick-fix-ts.js +281 -0
  103. package/scripts/legacy/safe-build.sh +63 -0
  104. package/scripts/memory-monitor-coordinator.js +322 -0
  105. package/scripts/migrate-to-sdk.sh +520 -0
  106. package/scripts/migration/QUICK-START.md +189 -0
  107. package/scripts/migration/QUICK-START.md.backup-1760135091363 +189 -0
  108. package/scripts/migration/README.md +464 -0
  109. package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md +500 -0
  110. package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md.backup-1760135091348 +500 -0
  111. package/scripts/migration/UPDATE-PATHS-README.md +464 -0
  112. package/scripts/migration/UPDATE-PATHS-README.md.backup-1760135091337 +464 -0
  113. package/scripts/migration/example-patterns.json +19 -0
  114. package/scripts/migration/install-arm64.js +78 -0
  115. package/scripts/migration/install.js +83 -0
  116. package/scripts/migration/migrate-hooks.js +173 -0
  117. package/scripts/migration/migration-examples.ts +318 -0
  118. package/scripts/migration/reorganize-workspace.js +504 -0
  119. package/scripts/migration/test-update-paths.js +359 -0
  120. package/scripts/migration/update-paths.js +664 -0
  121. package/scripts/migration/validate-migration.js +647 -0
  122. package/scripts/monitor-loop.sh +65 -0
  123. package/scripts/monitor-memory.sh +47 -0
  124. package/scripts/monitor-migration.js +339 -0
  125. package/scripts/monitor.py +43 -0
  126. package/scripts/monitoring/README.md +178 -0
  127. package/scripts/monitoring/alert-monitor.sh +220 -0
  128. package/scripts/monitoring/analyze-resources.sh +199 -0
  129. package/scripts/monitoring/dashboards/rate-limiting-dashboard.json +211 -0
  130. package/scripts/monitoring/dynamic-monitor.sh +85 -0
  131. package/scripts/monitoring/launch-stability-test.sh +184 -0
  132. package/scripts/monitoring/monitor-test.sh +93 -0
  133. package/scripts/monitoring/pre-test-validation.sh +208 -0
  134. package/scripts/monitoring/quick-test-alerting.sh +118 -0
  135. package/scripts/monitoring/quick-test-rate-limiting.sh +206 -0
  136. package/scripts/monitoring/rate-limiting-monitor.sh +380 -0
  137. package/scripts/monitoring/resource-monitor.sh +126 -0
  138. package/scripts/monitoring/stability-monitor.js +429 -0
  139. package/scripts/monitoring/test-monitor-quick.sh +54 -0
  140. package/scripts/monitoring/view-alerts.sh +307 -0
  141. package/scripts/npm-metrics-collector.js +482 -0
  142. package/scripts/npm-package-validation.cjs +299 -0
  143. package/scripts/optimization/build-optimizer.js +438 -0
  144. package/scripts/optimization/config-validator.js +761 -0
  145. package/scripts/optimization/test-optimization.js +432 -0
  146. package/scripts/optimization/unified-activation.js +839 -0
  147. package/scripts/optimize-package-swarm.js +54 -0
  148. package/scripts/performance/ACTIVATION_COMMANDS.md +292 -0
  149. package/scripts/performance/sqlite-enhanced-activation.sh +583 -0
  150. package/scripts/performance/test-enhanced-backend.sh +504 -0
  151. package/scripts/performance-monitor.js +644 -0
  152. package/scripts/performance-test-runner.js +698 -0
  153. package/scripts/post-deployment-monitoring.js +350 -0
  154. package/scripts/post-edit-pipeline.js +2091 -0
  155. package/scripts/post-install-claude-md.js +78 -0
  156. package/scripts/postinstall.js +79 -0
  157. package/scripts/pre-publish-validation.cjs +212 -0
  158. package/scripts/pre-publish-validation.js +429 -0
  159. package/scripts/redis-lua/cleanup-blocking-coordination.lua +198 -0
  160. package/scripts/release-announcement.js +425 -0
  161. package/scripts/release-notification.js +248 -0
  162. package/scripts/release-rollback.js +376 -0
  163. package/scripts/release-validation.js +460 -0
  164. package/scripts/rollback-sdk.sh +66 -0
  165. package/scripts/run-production-validation.ts +590 -0
  166. package/scripts/run-stability-validation.sh +687 -0
  167. package/scripts/security/README.md +339 -0
  168. package/scripts/security/deployment-validation.cjs +279 -0
  169. package/scripts/security/envelope-encryption-confidence-report.cjs +422 -0
  170. package/scripts/security/install-git-hooks.sh +132 -0
  171. package/scripts/security/install-git-secrets.sh +295 -0
  172. package/scripts/security/rotate-api-keys.js +469 -0
  173. package/scripts/security/ruv-swarm-safe.js +74 -0
  174. package/scripts/security/security-audit.cjs +538 -0
  175. package/scripts/security/setup-redis-auth.sh +397 -0
  176. package/scripts/security/validate-envelope-encryption.cjs +340 -0
  177. package/scripts/security-scan.js +492 -0
  178. package/scripts/src/web/frontend/.claude-flow/metrics/agent-metrics.json +1 -0
  179. package/scripts/src/web/frontend/.claude-flow/metrics/performance.json +9 -0
  180. package/scripts/src/web/frontend/.claude-flow/metrics/task-metrics.json +10 -0
  181. package/scripts/switch-api.sh +158 -0
  182. package/scripts/sync-agents.js +290 -0
  183. package/scripts/test/50-agent-test.js +625 -0
  184. package/scripts/test/NEW_STABILITY_TEST_GUIDE.md +407 -0
  185. package/scripts/test/README.md +236 -0
  186. package/scripts/test/STABILITY_TEST_EXAMPLE.md +347 -0
  187. package/scripts/test/STABILITY_TEST_README.md +480 -0
  188. package/scripts/test/agent-worker.js +309 -0
  189. package/scripts/test/ai-coordination-test.js +650 -0
  190. package/scripts/test/ai-mesh-coordination-test.js +416 -0
  191. package/scripts/test/check-links.ts +274 -0
  192. package/scripts/test/check-performance-regression.ts +168 -0
  193. package/scripts/test/cli-agent-coordination-test.js +313 -0
  194. package/scripts/test/coordinator-multilingual-test.js +396 -0
  195. package/scripts/test/coordinator-transparency-demo.js +585 -0
  196. package/scripts/test/coverage-report.ts +692 -0
  197. package/scripts/test/generate-swarm-tests.js +633 -0
  198. package/scripts/test/integration-test-validation.cjs +253 -0
  199. package/scripts/test/load-test-swarm.js +576 -0
  200. package/scripts/test/mesh-coordination-zero-overlap-test.js +740 -0
  201. package/scripts/test/multilingual-hello-world-test.js +390 -0
  202. package/scripts/test/quick-multilingual-demo.js +464 -0
  203. package/scripts/test/real-agent-test.js +312 -0
  204. package/scripts/test/run-phase3-compliance-tests.js +427 -0
  205. package/scripts/test/run-stability-test-examples.sh +292 -0
  206. package/scripts/test/stability-results/stability-metrics.jsonl +83 -0
  207. package/scripts/test/stability-results/stability-test-report.json +128 -0
  208. package/scripts/test/stability-results/stability-test.log +1827 -0
  209. package/scripts/test/stability-test-50-agents.js +734 -0
  210. package/scripts/test/test-batch-tasks.ts +29 -0
  211. package/scripts/test/test-byzantine-resolution.js +246 -0
  212. package/scripts/test/test-claude-spawn-options.sh +63 -0
  213. package/scripts/test/test-cli-wizard.js +331 -0
  214. package/scripts/test/test-comprehensive.js +401 -0
  215. package/scripts/test/test-coordination-features.ts +238 -0
  216. package/scripts/test/test-fallback-systems.js +276 -0
  217. package/scripts/test/test-init-command.ts +302 -0
  218. package/scripts/test/test-mcp.ts +251 -0
  219. package/scripts/test/test-runner.ts +568 -0
  220. package/scripts/test/test-swarm-integration.sh +92 -0
  221. package/scripts/test/test-swarm.ts +142 -0
  222. package/scripts/test/validation-summary.ts +408 -0
  223. package/scripts/test-cleanup-performance.sh +416 -0
  224. package/scripts/test-dashboard-auth.cjs +203 -0
  225. package/scripts/test-docker-deployment.sh +207 -0
  226. package/scripts/test-npm-package.cjs +167 -0
  227. package/scripts/test-provider-routing.cjs +226 -0
  228. package/scripts/test-routing-telemetry.cjs +147 -0
  229. package/scripts/test-runner.cjs +154 -0
  230. package/scripts/test-zai-10k.cjs +81 -0
  231. package/scripts/test-zai-api.cjs +191 -0
  232. package/scripts/test-zai-diagnostic.cjs +151 -0
  233. package/scripts/test-zai-final.cjs +128 -0
  234. package/scripts/test-zai-with-env.cjs +85 -0
  235. package/scripts/utils/README.md +261 -0
  236. package/scripts/utils/clean-build-artifacts.sh +94 -0
  237. package/scripts/utils/cleanup-root.sh +69 -0
  238. package/scripts/utils/fix-cliffy-imports.js +307 -0
  239. package/scripts/utils/fix-duplicate-imports.js +114 -0
  240. package/scripts/utils/fix-error-handling.cjs +70 -0
  241. package/scripts/utils/fix-import-paths.js +104 -0
  242. package/scripts/utils/fix-imports.js +116 -0
  243. package/scripts/utils/fix-shebang.js +78 -0
  244. package/scripts/utils/fix-test-modules.js +27 -0
  245. package/scripts/utils/fix-timezone-issue-246.js +200 -0
  246. package/scripts/utils/fix-ts-comprehensive.py +182 -0
  247. package/scripts/utils/fix-ts-targeted-batch.js +250 -0
  248. package/scripts/utils/remove-benchmark-conflicts.sh +140 -0
  249. package/scripts/utils/simple-test-fixer.js +190 -0
  250. package/scripts/utils/validate-metrics-structure.cjs +144 -0
  251. package/scripts/validate-agent-hooks.js +506 -0
  252. package/scripts/validate-changelog.js +241 -0
  253. package/scripts/validate-coordination-cli.js +69 -0
  254. package/scripts/validate-coordination-toggle-integration.cjs +501 -0
  255. package/scripts/validate-docker-infrastructure.sh +502 -0
  256. package/scripts/validate-entry-points.js +300 -0
  257. package/scripts/validate-stage3-performance.ts +377 -0
  258. package/scripts/validate-template-bundling.js +180 -0
  259. package/scripts/validation/README.md +33 -0
  260. package/scripts/validation/acl-security-validation.cjs +214 -0
  261. package/scripts/validation/acl-security-validation.js +402 -0
  262. package/scripts/validation/byzantine-verification.js +407 -0
  263. package/scripts/validation/final-phase-2-consensus.cjs +219 -0
  264. package/scripts/validation/final-security-validation.js +791 -0
  265. package/scripts/validation/final-wasm-validation.cjs +840 -0
  266. package/scripts/validation/integration-test-analysis.js +105 -0
  267. package/scripts/validation/phase-0-comprehensive-validation.js +474 -0
  268. package/scripts/validation/phase-0-consensus-report.js +139 -0
  269. package/scripts/validation/phase-0-final-report.js +112 -0
  270. package/scripts/validation/phase-0-redis-consensus-report.js +129 -0
  271. package/scripts/validation/phase-0-validation-improved.js +490 -0
  272. package/scripts/validation/phase-0-validation-test.js +65 -0
  273. package/scripts/validation/phase-1-consensus-report.cjs +342 -0
  274. package/scripts/validation/phase-1-consensus-validation.cjs +551 -0
  275. package/scripts/validation/phase-1-consensus-validation.js +551 -0
  276. package/scripts/validation/phase-2-consensus-report.cjs +186 -0
  277. package/scripts/validation/phase-2-validation.cjs +171 -0
  278. package/scripts/validation/phase-2-validation.js +171 -0
  279. package/scripts/validation/phase-4-consensus-report.js +181 -0
  280. package/scripts/validation/phase-4-final-validation.js +351 -0
  281. package/scripts/validation/phase-5-consensus-report.cjs +113 -0
  282. package/scripts/validation/phase-5-consensus-report.js +113 -0
  283. package/scripts/validation/security-analysis.js +49 -0
  284. package/scripts/validation/security-validation.js +492 -0
  285. package/scripts/validation/simple-security-validation.js +464 -0
  286. package/scripts/verify-installation.js +112 -0
  287. package/scripts/verify-mcp-server.js +86 -0
  288. package/scripts/verify-sdk-phase1.cjs +293 -0
@@ -0,0 +1,832 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Main Setup Script for Claude Flow Novice
5
+ * Automated installation and configuration orchestration
6
+ */
7
+
8
+ import { existsSync, writeFileSync, mkdirSync, readFileSync, chmodSync } from 'fs';
9
+ import { join, dirname, resolve } from 'path';
10
+ import { homedir, platform, arch } from 'os';
11
+ import { execSync, spawn } from 'child_process';
12
+ import { createInterface } from 'readline';
13
+ import chalk from 'chalk';
14
+ import ora from 'ora';
15
+ import boxen from 'boxen';
16
+ import { fileURLToPath } from 'url';
17
+
18
+ const __filename = fileURLToPath(import.meta.url);
19
+ const __dirname = dirname(__filename);
20
+
21
+ class SetupManager {
22
+ constructor() {
23
+ this.rootDir = resolve(__dirname, '../..');
24
+ this.configDir = join(this.rootDir, 'config');
25
+ this.scriptsDir = join(this.rootDir, 'scripts');
26
+ this.nodeModulesDir = join(this.rootDir, 'node_modules');
27
+ this.platform = platform();
28
+ this.arch = arch();
29
+ this.spinner = ora();
30
+ this.rl = createInterface({
31
+ input: process.stdin,
32
+ output: process.stdout
33
+ });
34
+ this.setupLog = [];
35
+ this.rollbackStack = [];
36
+ }
37
+
38
+ async run(options = {}) {
39
+ console.log(boxen(
40
+ chalk.cyan.bold('šŸš€ Claude Flow Novice - Automated Setup'),
41
+ {
42
+ padding: 1,
43
+ borderColor: 'cyan',
44
+ borderStyle: 'round'
45
+ }
46
+ ));
47
+
48
+ console.log(chalk.yellow('\nšŸŽÆ Starting automated installation and setup...\n'));
49
+
50
+ try {
51
+ // Step 1: Check prerequisites
52
+ await this.checkPrerequisites(options.skipPrerequisites);
53
+
54
+ // Step 2: Load or create configuration
55
+ await this.loadOrCreateConfiguration(options.interactive !== false);
56
+
57
+ // Step 3: Install dependencies
58
+ await this.installDependencies(options.skipDeps);
59
+
60
+ // Step 4: Setup Redis
61
+ await this.setupRedis();
62
+
63
+ // Step 5: Create configuration files
64
+ await this.createConfigurationFiles();
65
+
66
+ // Step 6: Setup development environment
67
+ await this.setupDevelopmentEnvironment();
68
+
69
+ // Step 7: Validate installation
70
+ await this.validateInstallation();
71
+
72
+ // Step 8: Create startup scripts
73
+ await this.createStartupScripts();
74
+
75
+ this.displaySuccessMessage();
76
+ this.logSetupCompletion();
77
+
78
+ } catch (error) {
79
+ console.error(chalk.red('\nāŒ Setup failed:'), error.message);
80
+ this.logError(error);
81
+
82
+ if (options.autoRollback !== false) {
83
+ const shouldRollback = await this.promptRollback();
84
+ if (shouldRollback) {
85
+ await this.performRollback();
86
+ }
87
+ }
88
+
89
+ process.exit(1);
90
+ } finally {
91
+ this.rl.close();
92
+ }
93
+ }
94
+
95
+ async checkPrerequisites(skip = false) {
96
+ if (skip) {
97
+ console.log(chalk.yellow('āš ļø Skipping prerequisites check'));
98
+ return;
99
+ }
100
+
101
+ this.spinner.start('Checking system prerequisites...');
102
+
103
+ try {
104
+ // Import and run prerequisites checker
105
+ const { default: PrerequisitesChecker } = await import('./check-prerequisites.js');
106
+ const checker = new PrerequisitesChecker();
107
+ const passed = await checker.checkAll();
108
+
109
+ if (!passed) {
110
+ this.spinner.fail('Prerequisites check failed');
111
+ throw new Error('System prerequisites not met. Please resolve the issues and try again.');
112
+ }
113
+
114
+ this.spinner.succeed('Prerequisites check passed');
115
+ this.addLog('Prerequisites validation completed successfully');
116
+ } catch (error) {
117
+ this.spinner.fail('Prerequisites check failed');
118
+ throw error;
119
+ }
120
+ }
121
+
122
+ async loadOrCreateConfiguration(interactive = true) {
123
+ this.spinner.start('Loading configuration...');
124
+
125
+ try {
126
+ const configPath = join(this.configDir, 'claude-flow-config.json');
127
+
128
+ if (existsSync(configPath) && !interactive) {
129
+ // Load existing configuration
130
+ const configData = readFileSync(configPath, 'utf8');
131
+ this.config = JSON.parse(configData);
132
+ this.spinner.succeed('Configuration loaded from existing file');
133
+ } else {
134
+ this.spinner.stop();
135
+
136
+ if (interactive) {
137
+ // Run configuration wizard
138
+ console.log(chalk.blue('\nšŸ“ Running configuration wizard...\n'));
139
+ const { default: ConfigWizard } = await import('./config-wizard.js');
140
+ const wizard = new ConfigWizard();
141
+ await wizard.run();
142
+
143
+ // Load the generated configuration
144
+ const configData = readFileSync(configPath, 'utf8');
145
+ this.config = JSON.parse(configData);
146
+ } else {
147
+ // Use default configuration
148
+ this.config = this.getDefaultConfiguration();
149
+ await this.saveConfiguration(this.config);
150
+ console.log(chalk.green('āœ… Using default configuration'));
151
+ }
152
+ }
153
+
154
+ this.addLog('Configuration loaded successfully');
155
+ } catch (error) {
156
+ this.spinner.fail('Configuration setup failed');
157
+ throw error;
158
+ }
159
+ }
160
+
161
+ getDefaultConfiguration() {
162
+ return {
163
+ basic: {
164
+ environment: 'development',
165
+ projectName: 'claude-flow-novice-project',
166
+ projectDescription: 'AI agent orchestration project',
167
+ author: 'Developer',
168
+ logLevel: 'info'
169
+ },
170
+ redis: {
171
+ useRedis: true,
172
+ redisType: 'local',
173
+ redisHost: 'localhost',
174
+ redisPort: '6379',
175
+ redisPassword: '',
176
+ installRedis: true
177
+ },
178
+ swarm: {
179
+ maxAgents: '10',
180
+ swarmStrategy: 'development',
181
+ swarmMode: 'mesh',
182
+ enablePersistence: true,
183
+ consensusThreshold: '0.90',
184
+ enableRealTime: true
185
+ },
186
+ security: {
187
+ enableAuth: false,
188
+ enableRateLimit: true,
189
+ rateLimitWindow: '15',
190
+ rateLimitMax: '100',
191
+ enableCORS: true
192
+ },
193
+ development: {
194
+ enableHotReload: true,
195
+ enableDebugMode: true,
196
+ enableTestMode: false,
197
+ devServerPort: '3000',
198
+ enableMockData: false,
199
+ databaseType: 'sqlite'
200
+ },
201
+ monitoring: {
202
+ enableMetrics: true,
203
+ enableHealthChecks: true,
204
+ enableAlerts: true,
205
+ healthCheckInterval: '30',
206
+ logFormat: 'json',
207
+ enableDashboard: true
208
+ }
209
+ };
210
+ }
211
+
212
+ async saveConfiguration(config) {
213
+ const configPath = join(this.configDir, 'claude-flow-config.json');
214
+ if (!existsSync(this.configDir)) {
215
+ mkdirSync(this.configDir, { recursive: true });
216
+ }
217
+ writeFileSync(configPath, JSON.stringify(config, null, 2));
218
+ this.config = config;
219
+ }
220
+
221
+ async installDependencies(skip = false) {
222
+ if (skip) {
223
+ console.log(chalk.yellow('āš ļø Skipping dependency installation'));
224
+ return;
225
+ }
226
+
227
+ this.spinner.start('Installing dependencies...');
228
+
229
+ try {
230
+ // Check if node_modules exists
231
+ if (!existsSync(this.nodeModulesDir)) {
232
+ this.addRollbackAction(() => {
233
+ if (existsSync(this.nodeModulesDir)) {
234
+ execSync(`rm -rf "${this.nodeModulesDir}"`, { cwd: this.rootDir });
235
+ }
236
+ });
237
+ }
238
+
239
+ // Install npm dependencies
240
+ execSync('npm install', {
241
+ cwd: this.rootDir,
242
+ stdio: 'pipe',
243
+ encoding: 'utf8'
244
+ });
245
+
246
+ this.spinner.succeed('Dependencies installed successfully');
247
+ this.addLog('Dependencies installed successfully');
248
+ } catch (error) {
249
+ this.spinner.fail('Dependency installation failed');
250
+ throw new Error(`Failed to install dependencies: ${error.message}`);
251
+ }
252
+ }
253
+
254
+ async setupRedis() {
255
+ if (!this.config.redis.useRedis) {
256
+ console.log(chalk.yellow('āš ļø Redis configuration disabled'));
257
+ return;
258
+ }
259
+
260
+ this.spinner.start('Setting up Redis...');
261
+
262
+ try {
263
+ if (this.config.redis.redisType === 'local' && this.config.redis.installRedis) {
264
+ await this.installRedisLocally();
265
+ }
266
+
267
+ // Test Redis connection
268
+ if (this.config.redis.redisType !== 'cloud') {
269
+ await this.testRedisConnection();
270
+ }
271
+
272
+ this.spinner.succeed('Redis setup completed');
273
+ this.addLog('Redis setup completed successfully');
274
+ } catch (error) {
275
+ this.spinner.fail('Redis setup failed');
276
+ throw new Error(`Redis setup failed: ${error.message}`);
277
+ }
278
+ }
279
+
280
+ async installRedisLocally() {
281
+ try {
282
+ // Check if Redis is already installed
283
+ execSync('redis-server --version', { encoding: 'utf8', stdio: 'pipe' });
284
+ console.log(chalk.green('Redis is already installed'));
285
+ return;
286
+ } catch {
287
+ // Redis not installed, proceed with installation
288
+ }
289
+
290
+ console.log(chalk.blue('Installing Redis locally...'));
291
+
292
+ if (this.platform === 'win32') {
293
+ await this.installRedisWindows();
294
+ } else if (this.platform === 'darwin') {
295
+ await this.installRedisMacOS();
296
+ } else if (this.platform === 'linux') {
297
+ await this.installRedisLinux();
298
+ } else {
299
+ throw new Error(`Unsupported platform for Redis installation: ${this.platform}`);
300
+ }
301
+
302
+ this.addRollbackAction(() => {
303
+ // Add Redis uninstallation logic if needed
304
+ console.log('Note: Redis uninstallation may require manual intervention');
305
+ });
306
+ }
307
+
308
+ async installRedisWindows() {
309
+ console.log(chalk.yellow('Windows Redis installation...'));
310
+ console.log('Please download and install Redis from: https://github.com/microsoftarchive/redis/releases');
311
+
312
+ const { confirm } = await this.prompt('\nHave you installed Redis manually?', { default: false });
313
+ if (!confirm) {
314
+ throw new Error('Redis installation required for Windows');
315
+ }
316
+ }
317
+
318
+ async installRedisMacOS() {
319
+ try {
320
+ // Try Homebrew installation
321
+ execSync('brew install redis', { stdio: 'pipe' });
322
+ console.log(chalk.green('āœ… Redis installed via Homebrew'));
323
+ } catch {
324
+ console.log(chalk.yellow('Homebrew not available. Please install Redis manually:'));
325
+ console.log('brew install redis');
326
+ throw new Error('Redis installation failed');
327
+ }
328
+ }
329
+
330
+ async installRedisLinux() {
331
+ try {
332
+ // Try apt-get (Ubuntu/Debian)
333
+ execSync('sudo apt-get update && sudo apt-get install -y redis-server', { stdio: 'pipe' });
334
+ console.log(chalk.green('āœ… Redis installed via apt-get'));
335
+ } catch {
336
+ try {
337
+ // Try yum (CentOS/RHEL)
338
+ execSync('sudo yum install -y redis', { stdio: 'pipe' });
339
+ console.log(chalk.green('āœ… Redis installed via yum'));
340
+ } catch {
341
+ console.log(chalk.yellow('Please install Redis manually:'));
342
+ console.log('Ubuntu/Debian: sudo apt-get install redis-server');
343
+ console.log('CentOS/RHEL: sudo yum install redis');
344
+ throw new Error('Redis installation failed');
345
+ }
346
+ }
347
+ }
348
+
349
+ async testRedisConnection() {
350
+ try {
351
+ execSync('redis-cli ping', { encoding: 'utf8', timeout: 5000, stdio: 'pipe' });
352
+ console.log(chalk.green('āœ… Redis connection successful'));
353
+ } catch {
354
+ console.log(chalk.yellow('Starting Redis server...'));
355
+ try {
356
+ // Try to start Redis server
357
+ spawn('redis-server', { detached: true });
358
+ // Give it a moment to start
359
+ await new Promise(resolve => setTimeout(resolve, 2000));
360
+
361
+ // Test connection again
362
+ execSync('redis-cli ping', { encoding: 'utf8', timeout: 5000, stdio: 'pipe' });
363
+ console.log(chalk.green('āœ… Redis server started and connection successful'));
364
+ } catch (error) {
365
+ throw new Error('Failed to start Redis server');
366
+ }
367
+ }
368
+ }
369
+
370
+ async createConfigurationFiles() {
371
+ this.spinner.start('Creating configuration files...');
372
+
373
+ try {
374
+ // Create .env file
375
+ const envContent = this.generateEnvContent();
376
+ writeFileSync(join(this.rootDir, '.env'), envContent);
377
+
378
+ // Create .env.example
379
+ const exampleContent = this.generateEnvExampleContent();
380
+ writeFileSync(join(this.rootDir, '.env.example'), exampleContent);
381
+
382
+ // Create additional config files
383
+ await this.createAdditionalConfigFiles();
384
+
385
+ this.spinner.succeed('Configuration files created');
386
+ this.addLog('Configuration files created successfully');
387
+ } catch (error) {
388
+ this.spinner.fail('Configuration file creation failed');
389
+ throw error;
390
+ }
391
+ }
392
+
393
+ generateEnvContent() {
394
+ const lines = [
395
+ '# Claude Flow Novice Environment Configuration',
396
+ '# Generated on ' + new Date().toISOString(),
397
+ '',
398
+ `NODE_ENV=${this.config.basic.environment}`,
399
+ `PROJECT_NAME=${this.config.basic.projectName}`,
400
+ `LOG_LEVEL=${this.config.basic.logLevel}`,
401
+ ''
402
+ ];
403
+
404
+ if (this.config.redis.useRedis) {
405
+ lines.push('# Redis Configuration');
406
+ if (this.config.redis.redisType === 'cloud') {
407
+ lines.push(`REDIS_URL=${this.config.redis.redisUrl}`);
408
+ } else {
409
+ lines.push(`REDIS_HOST=${this.config.redis.redisHost}`);
410
+ lines.push(`REDIS_PORT=${this.config.redis.redisPort}`);
411
+ if (this.config.redis.redisPassword) {
412
+ lines.push(`REDIS_PASSWORD=${this.config.redis.redisPassword}`);
413
+ }
414
+ }
415
+ lines.push('');
416
+ }
417
+
418
+ lines.push('# Swarm Configuration');
419
+ lines.push(`MAX_AGENTS=${this.config.swarm.maxAgents}`);
420
+ lines.push(`SWARM_STRATEGY=${this.config.swarm.swarmStrategy}`);
421
+ lines.push(`SWARM_MODE=${this.config.swarm.swarmMode}`);
422
+ lines.push(`CONSENSUS_THRESHOLD=${this.config.swarm.consensusThreshold}`);
423
+ lines.push('');
424
+
425
+ lines.push('# Development Configuration');
426
+ lines.push(`DEV_SERVER_PORT=${this.config.development.devServerPort}`);
427
+ lines.push(`HOT_RELOAD=${this.config.development.enableHotReload}`);
428
+ lines.push(`DEBUG_MODE=${this.config.development.enableDebugMode}`);
429
+ lines.push('');
430
+
431
+ return lines.join('\n');
432
+ }
433
+
434
+ generateEnvExampleContent() {
435
+ return this.generateEnvContent()
436
+ .replace(/=.+$/, '=')
437
+ .replace(/REDIS_PASSWORD=.+$/, 'REDIS_PASSWORD=your-redis-password');
438
+ }
439
+
440
+ async createAdditionalConfigFiles() {
441
+ // Create user directory structure
442
+ const userDirs = [
443
+ join(this.rootDir, '.claude-flow-novice'),
444
+ join(this.rootDir, '.claude-flow-novice/logs'),
445
+ join(this.rootDir, '.claude-flow-novice/data'),
446
+ join(this.rootDir, '.claude-flow-novice/cache'),
447
+ join(this.rootDir, '.claude-flow-novice/temp')
448
+ ];
449
+
450
+ userDirs.forEach(dir => {
451
+ if (!existsSync(dir)) {
452
+ mkdirSync(dir, { recursive: true });
453
+ }
454
+ });
455
+
456
+ // Create default configuration files
457
+ const configs = [
458
+ {
459
+ path: join(this.configDir, 'development.json'),
460
+ content: JSON.stringify({
461
+ server: { port: 3000 },
462
+ redis: { host: 'localhost', port: 6379 },
463
+ logging: { level: 'debug' }
464
+ }, null, 2)
465
+ },
466
+ {
467
+ path: join(this.configDir, 'production.json'),
468
+ content: JSON.stringify({
469
+ server: { port: 8080 },
470
+ redis: { host: 'localhost', port: 6379 },
471
+ logging: { level: 'info' }
472
+ }, null, 2)
473
+ }
474
+ ];
475
+
476
+ configs.forEach(config => {
477
+ if (!existsSync(config.path)) {
478
+ writeFileSync(config.path, config.content);
479
+ }
480
+ });
481
+ }
482
+
483
+ async setupDevelopmentEnvironment() {
484
+ this.spinner.start('Setting up development environment...');
485
+
486
+ try {
487
+ // Create development scripts
488
+ await this.createDevScripts();
489
+
490
+ // Setup Git hooks if git repository
491
+ if (existsSync(join(this.rootDir, '.git'))) {
492
+ await this.setupGitHooks();
493
+ }
494
+
495
+ // Create IDE configuration files
496
+ await this.createIDEConfigs();
497
+
498
+ this.spinner.succeed('Development environment setup completed');
499
+ this.addLog('Development environment setup completed');
500
+ } catch (error) {
501
+ this.spinner.fail('Development environment setup failed');
502
+ throw error;
503
+ }
504
+ }
505
+
506
+ async createDevScripts() {
507
+ const scripts = [
508
+ {
509
+ name: 'start-dev',
510
+ content: `#!/bin/bash
511
+ echo "šŸš€ Starting Claude Flow Novice in development mode..."
512
+ npm run dev
513
+ `,
514
+ executable: true
515
+ },
516
+ {
517
+ name: 'start-prod',
518
+ content: `#!/bin/bash
519
+ echo "šŸš€ Starting Claude Flow Novice in production mode..."
520
+ npm run start
521
+ `,
522
+ executable: true
523
+ },
524
+ {
525
+ name: 'redis-start',
526
+ content: `#!/bin/bash
527
+ echo "šŸ”“ Starting Redis server..."
528
+ redis-server --daemonize yes
529
+ sleep 2
530
+ redis-cli ping
531
+ `,
532
+ executable: true
533
+ },
534
+ {
535
+ name: 'redis-stop',
536
+ content: `#!/bin/bash
537
+ echo "šŸ”“ Stopping Redis server..."
538
+ redis-cli shutdown
539
+ `,
540
+ executable: true
541
+ }
542
+ ];
543
+
544
+ const scriptsDir = join(this.rootDir, 'scripts', 'dev');
545
+ if (!existsSync(scriptsDir)) {
546
+ mkdirSync(scriptsDir, { recursive: true });
547
+ }
548
+
549
+ scripts.forEach(script => {
550
+ const scriptPath = join(scriptsDir, script.name);
551
+ writeFileSync(scriptPath, script.content);
552
+ if (script.executable) {
553
+ chmodSync(scriptPath, '755');
554
+ }
555
+ });
556
+ }
557
+
558
+ async setupGitHooks() {
559
+ const hooksDir = join(this.rootDir, '.git', 'hooks');
560
+ const preCommitHook = `#!/bin/bash
561
+ echo "šŸ” Running pre-commit checks..."
562
+ npm run lint
563
+ npm run test:unit
564
+ `;
565
+
566
+ const preCommitPath = join(hooksDir, 'pre-commit');
567
+ if (!existsSync(preCommitPath)) {
568
+ writeFileSync(preCommitPath, preCommitHook);
569
+ chmodSync(preCommitPath, '755');
570
+ }
571
+ }
572
+
573
+ async createIDEConfigs() {
574
+ // VS Code settings
575
+ const vscodeDir = join(this.rootDir, '.vscode');
576
+ if (!existsSync(vscodeDir)) {
577
+ mkdirSync(vscodeDir, { recursive: true });
578
+ }
579
+
580
+ const vscodeSettings = {
581
+ "editor.formatOnSave": true,
582
+ "editor.codeActionsOnSave": {
583
+ "source.fixAll.eslint": true
584
+ },
585
+ "typescript.preferences.importModuleSpecifier": "relative",
586
+ "files.exclude": {
587
+ "**/.claude-flow-novice": true,
588
+ "**/node_modules": true,
589
+ "**/dist": true
590
+ }
591
+ };
592
+
593
+ writeFileSync(
594
+ join(vscodeDir, 'settings.json'),
595
+ JSON.stringify(vscodeSettings, null, 2)
596
+ );
597
+ }
598
+
599
+ async validateInstallation() {
600
+ this.spinner.start('Validating installation...');
601
+
602
+ try {
603
+ // Check if critical files exist
604
+ const criticalFiles = [
605
+ join(this.rootDir, 'package.json'),
606
+ join(this.configDir, 'claude-flow-config.json'),
607
+ join(this.rootDir, '.env')
608
+ ];
609
+
610
+ for (const file of criticalFiles) {
611
+ if (!existsSync(file)) {
612
+ throw new Error(`Critical file missing: ${file}`);
613
+ }
614
+ }
615
+
616
+ // Validate configuration
617
+ this.validateConfiguration();
618
+
619
+ // Test basic functionality
620
+ await this.testBasicFunctionality();
621
+
622
+ this.spinner.succeed('Installation validation completed');
623
+ this.addLog('Installation validation passed');
624
+ } catch (error) {
625
+ this.spinner.fail('Installation validation failed');
626
+ throw error;
627
+ }
628
+ }
629
+
630
+ validateConfiguration() {
631
+ const requiredFields = [
632
+ 'basic.environment',
633
+ 'basic.projectName',
634
+ 'swarm.maxAgents',
635
+ 'swarm.swarmStrategy'
636
+ ];
637
+
638
+ for (const field of requiredFields) {
639
+ const value = field.split('.').reduce((obj, key) => obj?.[key], this.config);
640
+ if (!value) {
641
+ throw new Error(`Missing required configuration: ${field}`);
642
+ }
643
+ }
644
+ }
645
+
646
+ async testBasicFunctionality() {
647
+ try {
648
+ // Test if the main CLI command works
649
+ const result = execSync('node .claude-flow-novice/dist/src/cli/main.js --help', {
650
+ cwd: this.rootDir,
651
+ encoding: 'utf8',
652
+ timeout: 10000,
653
+ stdio: 'pipe'
654
+ });
655
+
656
+ if (!result.includes('claude-flow-novice')) {
657
+ throw new Error('CLI command validation failed');
658
+ }
659
+ } catch (error) {
660
+ console.log(chalk.yellow('Note: CLI validation failed, but installation can continue'));
661
+ console.log('This may be expected if the project hasn\'t been built yet');
662
+ }
663
+ }
664
+
665
+ async createStartupScripts() {
666
+ this.spinner.start('Creating startup scripts...');
667
+
668
+ try {
669
+ // Create quick start script
670
+ const quickStartScript = this.generateQuickStartScript();
671
+ writeFileSync(join(this.rootDir, 'scripts', 'quick-start.js'), quickStartScript);
672
+
673
+ // Make it executable
674
+ chmodSync(join(this.rootDir, 'scripts', 'quick-start.js'), '755');
675
+
676
+ this.spinner.succeed('Startup scripts created');
677
+ this.addLog('Startup scripts created successfully');
678
+ } catch (error) {
679
+ this.spinner.fail('Startup script creation failed');
680
+ throw error;
681
+ }
682
+ }
683
+
684
+ generateQuickStartScript() {
685
+ return `#!/usr/bin/env node
686
+
687
+ /**
688
+ * Quick Start Script for Claude Flow Novice
689
+ */
690
+
691
+ import { spawn } from 'child_process';
692
+ import { existsSync } from 'fs';
693
+ import chalk from 'chalk';
694
+
695
+ console.log(chalk.cyan.bold('šŸš€ Claude Flow Novice - Quick Start'));
696
+ console.log('');
697
+
698
+ async function quickStart() {
699
+ try {
700
+ // Check if Redis is running
701
+ console.log('šŸ”“ Checking Redis...');
702
+ try {
703
+ spawn('redis-cli', ['ping'], { stdio: 'pipe' });
704
+ console.log(chalk.green('āœ… Redis is running'));
705
+ } catch {
706
+ console.log(chalk.yellow('āš ļø Starting Redis...'));
707
+ spawn('redis-server', ['--daemonize', 'yes']);
708
+ await new Promise(resolve => setTimeout(resolve, 3000));
709
+ }
710
+
711
+ // Start the application
712
+ console.log('šŸš€ Starting Claude Flow Novice...');
713
+ const child = spawn('npm', ['run', 'dev'], {
714
+ stdio: 'inherit',
715
+ cwd: process.cwd()
716
+ });
717
+
718
+ child.on('close', (code) => {
719
+ console.log(\`Process exited with code \${code}\`);
720
+ });
721
+
722
+ } catch (error) {
723
+ console.error(chalk.red('Failed to start:'), error.message);
724
+ process.exit(1);
725
+ }
726
+ }
727
+
728
+ quickStart();
729
+ `;
730
+ }
731
+
732
+ async promptRollback() {
733
+ const { confirm } = await this.prompt('\nāŒ Setup failed. Would you like to rollback changes?', { default: true });
734
+ return confirm;
735
+ }
736
+
737
+ async performRollback() {
738
+ console.log(chalk.yellow('\nšŸ”„ Rolling back changes...'));
739
+
740
+ for (const action of this.rollbackStack.reverse()) {
741
+ try {
742
+ await action();
743
+ console.log(chalk.green('āœ… Rollback step completed'));
744
+ } catch (error) {
745
+ console.log(chalk.red('āŒ Rollback step failed:'), error.message);
746
+ }
747
+ }
748
+
749
+ console.log(chalk.yellow('\nāš ļø Rollback completed. Some manual cleanup may be required.'));
750
+ }
751
+
752
+ addRollbackAction(action) {
753
+ this.rollbackStack.push(action);
754
+ }
755
+
756
+ prompt(question, options = {}) {
757
+ return new Promise((resolve) => {
758
+ this.rl.question(question, (answer) => {
759
+ if (options.default && typeof options.default === 'boolean') {
760
+ resolve({ confirm: answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes' });
761
+ } else {
762
+ resolve(answer);
763
+ }
764
+ });
765
+ });
766
+ }
767
+
768
+ addLog(message) {
769
+ const timestamp = new Date().toISOString();
770
+ this.setupLog.push({ timestamp, message });
771
+ }
772
+
773
+ logError(error) {
774
+ this.addLog(`ERROR: ${error.message}`);
775
+ this.addLog(`STACK: ${error.stack}`);
776
+ }
777
+
778
+ logSetupCompletion() {
779
+ const logPath = join(this.rootDir, '.claude-flow-novice', 'setup.log');
780
+ writeFileSync(logPath, JSON.stringify(this.setupLog, null, 2));
781
+ }
782
+
783
+ displaySuccessMessage() {
784
+ console.log('\n' + boxen(
785
+ chalk.green.bold('šŸŽ‰ Claude Flow Novice setup completed successfully!'),
786
+ {
787
+ padding: 1,
788
+ borderColor: 'green',
789
+ borderStyle: 'round'
790
+ }
791
+ ));
792
+
793
+ console.log(chalk.blue('\nšŸ“ Created files:'));
794
+ console.log(' • .env (environment configuration)');
795
+ console.log(' • config/claude-flow-config.json');
796
+ console.log(' • scripts/dev/ (development scripts)');
797
+ console.log(' • .claude-flow-novice/ (user data directory)');
798
+
799
+ console.log(chalk.blue('\nšŸš€ Quick start commands:'));
800
+ console.log(' npm run dev # Start development server');
801
+ console.log(' npm start # Start production server');
802
+ console.log(' node scripts/quick-start.js # Quick start with Redis');
803
+ console.log(' npm run config:wizard # Reconfigure settings');
804
+
805
+ if (this.config.redis.useRedis) {
806
+ console.log(chalk.blue('\nšŸ”“ Redis commands:'));
807
+ console.log(' npm run redis:start # Start Redis server');
808
+ console.log(' npm run redis:stop # Stop Redis server');
809
+ }
810
+
811
+ console.log(chalk.green('\n✨ Your Claude Flow Novice environment is ready!'));
812
+ console.log(chalk.gray('Check the documentation for more information about available features.'));
813
+ }
814
+ }
815
+
816
+ // Run if executed directly
817
+ if (import.meta.url === `file://${process.argv[1]}`) {
818
+ const setup = new SetupManager();
819
+
820
+ // Parse command line arguments
821
+ const args = process.argv.slice(2);
822
+ const options = {
823
+ skipPrerequisites: args.includes('--skip-prereqs'),
824
+ skipDeps: args.includes('--skip-deps'),
825
+ interactive: !args.includes('--non-interactive'),
826
+ autoRollback: !args.includes('--no-rollback')
827
+ };
828
+
829
+ setup.run(options).catch(console.error);
830
+ }
831
+
832
+ export default SetupManager;