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,606 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Configuration Wizard for Claude Flow Novice
5
+ * Interactive setup for first-time users
6
+ */
7
+
8
+ import { existsSync, writeFileSync, mkdirSync, readFileSync } from 'fs';
9
+ import { join, dirname } from 'path';
10
+ import { homedir } from 'os';
11
+ import { createInterface } from 'readline';
12
+ import chalk from 'chalk';
13
+ import inquirer from 'inquirer';
14
+ import ora from 'ora';
15
+ import boxen from 'boxen';
16
+ import { v4 as uuidv4 } from 'uuid';
17
+
18
+ class ConfigWizard {
19
+ constructor() {
20
+ this.config = {
21
+ basic: {},
22
+ redis: {},
23
+ swarm: {},
24
+ security: {},
25
+ development: {},
26
+ monitoring: {}
27
+ };
28
+ this.spinner = ora();
29
+ this.rl = createInterface({
30
+ input: process.stdin,
31
+ output: process.stdout
32
+ });
33
+ }
34
+
35
+ async run() {
36
+ console.log(boxen(
37
+ chalk.cyan.bold('āš™ļø Claude Flow Novice - Configuration Wizard'),
38
+ {
39
+ padding: 1,
40
+ borderColor: 'cyan',
41
+ borderStyle: 'round'
42
+ }
43
+ ));
44
+
45
+ console.log(chalk.yellow('\nšŸ‘‹ Welcome! Let\'s configure your Claude Flow Novice setup.\n'));
46
+ console.log('This wizard will help you configure essential settings for optimal performance.\n');
47
+
48
+ try {
49
+ await this.configureBasicSettings();
50
+ await this.configureRedis();
51
+ await this.configureSwarmSettings();
52
+ await this.configureSecurity();
53
+ await this.configureDevelopment();
54
+ await this.configureMonitoring();
55
+
56
+ const confirmed = await this.confirmConfiguration();
57
+ if (confirmed) {
58
+ await this.saveConfiguration();
59
+ await this.generateEnvironmentFiles();
60
+ this.displaySuccessMessage();
61
+ } else {
62
+ console.log(chalk.yellow('Configuration cancelled. No changes were made.'));
63
+ }
64
+ } catch (error) {
65
+ console.error(chalk.red('Configuration error:'), error.message);
66
+ process.exit(1);
67
+ } finally {
68
+ this.rl.close();
69
+ }
70
+ }
71
+
72
+ async configureBasicSettings() {
73
+ console.log(chalk.bold.blue('\nšŸ“‹ Basic Configuration'));
74
+ console.log(chalk.gray('Configure basic settings for your environment.\n'));
75
+
76
+ const answers = await inquirer.prompt([
77
+ {
78
+ type: 'input',
79
+ name: 'environment',
80
+ message: 'Environment type:',
81
+ default: 'development',
82
+ choices: ['development', 'staging', 'production'],
83
+ validate: (input) => ['development', 'staging', 'production'].includes(input) || 'Please enter: development, staging, or production'
84
+ },
85
+ {
86
+ type: 'input',
87
+ name: 'projectName',
88
+ message: 'Project name:',
89
+ default: 'claude-flow-novice-project',
90
+ validate: (input) => input.length > 0 || 'Project name is required'
91
+ },
92
+ {
93
+ type: 'input',
94
+ name: 'projectDescription',
95
+ message: 'Project description:',
96
+ default: 'AI agent orchestration project'
97
+ },
98
+ {
99
+ type: 'input',
100
+ name: 'author',
101
+ message: 'Author name:',
102
+ default: () => {
103
+ try {
104
+ return require('os').userInfo().username;
105
+ } catch {
106
+ return 'Developer';
107
+ }
108
+ }
109
+ },
110
+ {
111
+ type: 'list',
112
+ name: 'logLevel',
113
+ message: 'Logging level:',
114
+ choices: ['error', 'warn', 'info', 'debug'],
115
+ default: 'info'
116
+ }
117
+ ]);
118
+
119
+ this.config.basic = answers;
120
+ }
121
+
122
+ async configureRedis() {
123
+ console.log(chalk.bold.blue('\nšŸ”“ Redis Configuration'));
124
+ console.log(chalk.gray('Configure Redis connection settings.\n'));
125
+
126
+ // Check if Redis is available
127
+ let redisAvailable = false;
128
+ try {
129
+ const { execSync } = await import('child_process');
130
+ execSync('redis-cli ping', { encoding: 'utf8', timeout: 2000 });
131
+ redisAvailable = true;
132
+ } catch {
133
+ console.log(chalk.yellow('āš ļø Redis is not running locally.'));
134
+ }
135
+
136
+ const answers = await inquirer.prompt([
137
+ {
138
+ type: 'confirm',
139
+ name: 'useRedis',
140
+ message: 'Use Redis for state persistence?',
141
+ default: true
142
+ },
143
+ {
144
+ type: 'list',
145
+ name: 'redisType',
146
+ message: 'Redis connection type:',
147
+ choices: ['local', 'remote', 'cloud'],
148
+ default: redisAvailable ? 'local' : 'remote',
149
+ when: (answers) => answers.useRedis
150
+ },
151
+ {
152
+ type: 'input',
153
+ name: 'redisHost',
154
+ message: 'Redis host:',
155
+ default: 'localhost',
156
+ when: (answers) => answers.useRedis && answers.redisType !== 'cloud'
157
+ },
158
+ {
159
+ type: 'input',
160
+ name: 'redisPort',
161
+ message: 'Redis port:',
162
+ default: '6379',
163
+ validate: (input) => !isNaN(input) && input > 0 && input < 65536 || 'Please enter a valid port number',
164
+ when: (answers) => answers.useRedis && answers.redisType !== 'cloud'
165
+ },
166
+ {
167
+ type: 'input',
168
+ name: 'redisPassword',
169
+ message: 'Redis password (leave empty for no password):',
170
+ when: (answers) => answers.useRedis
171
+ },
172
+ {
173
+ type: 'input',
174
+ name: 'redisUrl',
175
+ message: 'Redis connection URL:',
176
+ when: (answers) => answers.useRedis && answers.redisType === 'cloud',
177
+ validate: (input) => input.startsWith('redis://') || input.startsWith('rediss://') || 'Please enter a valid Redis URL'
178
+ },
179
+ {
180
+ type: 'confirm',
181
+ name: 'installRedis',
182
+ message: 'Automatically install Redis locally?',
183
+ default: true,
184
+ when: (answers) => answers.useRedis && answers.redisType === 'local' && !redisAvailable
185
+ }
186
+ ]);
187
+
188
+ this.config.redis = answers;
189
+ }
190
+
191
+ async configureSwarmSettings() {
192
+ console.log(chalk.bold.blue('\nšŸ Swarm Configuration'));
193
+ console.log(chalk.gray('Configure swarm behavior and agent settings.\n'));
194
+
195
+ const answers = await inquirer.prompt([
196
+ {
197
+ type: 'input',
198
+ name: 'maxAgents',
199
+ message: 'Maximum number of agents:',
200
+ default: '10',
201
+ validate: (input) => !isNaN(input) && input > 0 && input <= 100 || 'Please enter a number between 1 and 100'
202
+ },
203
+ {
204
+ type: 'list',
205
+ name: 'swarmStrategy',
206
+ message: 'Default swarm strategy:',
207
+ choices: ['development', 'research', 'production', 'testing'],
208
+ default: 'development'
209
+ },
210
+ {
211
+ type: 'list',
212
+ name: 'swarmMode',
213
+ message: 'Default swarm mode:',
214
+ choices: ['mesh', 'hierarchical', 'centralized'],
215
+ default: 'mesh'
216
+ },
217
+ {
218
+ type: 'confirm',
219
+ name: 'enablePersistence',
220
+ message: 'Enable swarm state persistence?',
221
+ default: true
222
+ },
223
+ {
224
+ type: 'input',
225
+ name: 'consensusThreshold',
226
+ message: 'Consensus threshold (0.0-1.0):',
227
+ default: '0.90',
228
+ validate: (input) => {
229
+ const num = parseFloat(input);
230
+ return !isNaN(num) && num >= 0 && num <= 1 || 'Please enter a number between 0 and 1';
231
+ }
232
+ },
233
+ {
234
+ type: 'confirm',
235
+ name: 'enableRealTime',
236
+ message: 'Enable real-time monitoring?',
237
+ default: true
238
+ }
239
+ ]);
240
+
241
+ this.config.swarm = answers;
242
+ }
243
+
244
+ async configureSecurity() {
245
+ console.log(chalk.bold.blue('\nšŸ”’ Security Configuration'));
246
+ console.log(chalk.gray('Configure security settings and permissions.\n'));
247
+
248
+ const answers = await inquirer.prompt([
249
+ {
250
+ type: 'confirm',
251
+ name: 'enableAuth',
252
+ message: 'Enable authentication?',
253
+ default: false
254
+ },
255
+ {
256
+ type: 'list',
257
+ name: 'authMethod',
258
+ message: 'Authentication method:',
259
+ choices: ['jwt', 'api-key', 'basic', 'oauth'],
260
+ default: 'jwt',
261
+ when: (answers) => answers.enableAuth
262
+ },
263
+ {
264
+ type: 'input',
265
+ name: 'jwtSecret',
266
+ message: 'JWT secret (leave empty to auto-generate):',
267
+ when: (answers) => answers.enableAuth && answers.authMethod === 'jwt'
268
+ },
269
+ {
270
+ type: 'confirm',
271
+ name: 'enableRateLimit',
272
+ message: 'Enable rate limiting?',
273
+ default: true
274
+ },
275
+ {
276
+ type: 'input',
277
+ name: 'rateLimitWindow',
278
+ message: 'Rate limit window (minutes):',
279
+ default: '15',
280
+ validate: (input) => !isNaN(input) && input > 0 || 'Please enter a positive number',
281
+ when: (answers) => answers.enableRateLimit
282
+ },
283
+ {
284
+ type: 'input',
285
+ name: 'rateLimitMax',
286
+ message: 'Maximum requests per window:',
287
+ default: '100',
288
+ validate: (input) => !isNaN(input) && input > 0 || 'Please enter a positive number',
289
+ when: (answers) => answers.enableRateLimit
290
+ },
291
+ {
292
+ type: 'confirm',
293
+ name: 'enableCORS',
294
+ message: 'Enable CORS?',
295
+ default: true
296
+ }
297
+ ]);
298
+
299
+ // Generate JWT secret if not provided
300
+ if (answers.enableAuth && answers.authMethod === 'jwt' && !answers.jwtSecret) {
301
+ answers.jwtSecret = uuidv4() + uuidv4();
302
+ }
303
+
304
+ this.config.security = answers;
305
+ }
306
+
307
+ async configureDevelopment() {
308
+ console.log(chalk.bold.blue('\nšŸ› ļø Development Configuration'));
309
+ console.log(chalk.gray('Configure development-specific settings.\n'));
310
+
311
+ const answers = await inquirer.prompt([
312
+ {
313
+ type: 'confirm',
314
+ name: 'enableHotReload',
315
+ message: 'Enable hot reloading?',
316
+ default: true
317
+ },
318
+ {
319
+ type: 'confirm',
320
+ name: 'enableDebugMode',
321
+ message: 'Enable debug mode?',
322
+ default: true
323
+ },
324
+ {
325
+ type: 'confirm',
326
+ name: 'enableTestMode',
327
+ message: 'Enable test mode?',
328
+ default: false
329
+ },
330
+ {
331
+ type: 'input',
332
+ name: 'devServerPort',
333
+ message: 'Development server port:',
334
+ default: '3000',
335
+ validate: (input) => !isNaN(input) && input > 0 && input < 65536 || 'Please enter a valid port number'
336
+ },
337
+ {
338
+ type: 'confirm',
339
+ name: 'enableMockData',
340
+ message: 'Enable mock data for testing?',
341
+ default: false
342
+ },
343
+ {
344
+ type: 'list',
345
+ name: 'databaseType',
346
+ message: 'Database type:',
347
+ choices: ['sqlite', 'postgresql', 'mysql', 'none'],
348
+ default: 'sqlite'
349
+ }
350
+ ]);
351
+
352
+ this.config.development = answers;
353
+ }
354
+
355
+ async configureMonitoring() {
356
+ console.log(chalk.bold.blue('\nšŸ“Š Monitoring Configuration'));
357
+ console.log(chalk.gray('Configure monitoring and alerting settings.\n'));
358
+
359
+ const answers = await inquirer.prompt([
360
+ {
361
+ type: 'confirm',
362
+ name: 'enableMetrics',
363
+ message: 'Enable metrics collection?',
364
+ default: true
365
+ },
366
+ {
367
+ type: 'confirm',
368
+ name: 'enableHealthChecks',
369
+ message: 'Enable health checks?',
370
+ default: true
371
+ },
372
+ {
373
+ type: 'confirm',
374
+ name: 'enableAlerts',
375
+ message: 'Enable alerts?',
376
+ default: true
377
+ },
378
+ {
379
+ type: 'input',
380
+ name: 'healthCheckInterval',
381
+ message: 'Health check interval (seconds):',
382
+ default: '30',
383
+ validate: (input) => !isNaN(input) && input > 0 || 'Please enter a positive number',
384
+ when: (answers) => answers.enableHealthChecks
385
+ },
386
+ {
387
+ type: 'list',
388
+ name: 'logFormat',
389
+ message: 'Log format:',
390
+ choices: ['json', 'text', 'combined'],
391
+ default: 'json'
392
+ },
393
+ {
394
+ type: 'confirm',
395
+ name: 'enableDashboard',
396
+ message: 'Enable monitoring dashboard?',
397
+ default: true
398
+ }
399
+ ]);
400
+
401
+ this.config.monitoring = answers;
402
+ }
403
+
404
+ async confirmConfiguration() {
405
+ console.log(chalk.bold.blue('\nšŸ“‹ Configuration Summary'));
406
+ console.log(chalk.gray('Please review your configuration before saving.\n'));
407
+
408
+ const summary = this.generateSummary();
409
+ console.log(summary);
410
+
411
+ const { confirmed } = await inquirer.prompt([
412
+ {
413
+ type: 'confirm',
414
+ name: 'confirmed',
415
+ message: 'Save this configuration?',
416
+ default: true
417
+ }
418
+ ]);
419
+
420
+ return confirmed;
421
+ }
422
+
423
+ generateSummary() {
424
+ const sections = [];
425
+
426
+ sections.push(chalk.cyan.bold('Basic Settings:'));
427
+ sections.push(` Environment: ${this.config.basic.environment}`);
428
+ sections.push(` Project: ${this.config.basic.projectName}`);
429
+ sections.push(` Author: ${this.config.basic.author}`);
430
+ sections.push(` Log Level: ${this.config.basic.logLevel}`);
431
+
432
+ sections.push('\n' + chalk.cyan.bold('Redis Settings:'));
433
+ if (this.config.redis.useRedis) {
434
+ sections.push(` Type: ${this.config.redis.redisType}`);
435
+ if (this.config.redis.redisType === 'cloud') {
436
+ sections.push(` URL: ${this.config.redis.redisUrl.replace(/\/\/.*@/, '//***:***@')}`);
437
+ } else {
438
+ sections.push(` Host: ${this.config.redis.redisHost}:${this.config.redis.redisPort}`);
439
+ sections.push(` Password: ${this.config.redis.redisPassword ? '***' : 'None'}`);
440
+ }
441
+ } else {
442
+ sections.push(' Redis: Disabled');
443
+ }
444
+
445
+ sections.push('\n' + chalk.cyan.bold('Swarm Settings:'));
446
+ sections.push(` Max Agents: ${this.config.swarm.maxAgents}`);
447
+ sections.push(` Strategy: ${this.config.swarm.swarmStrategy}`);
448
+ sections.push(` Mode: ${this.config.swarm.swarmMode}`);
449
+ sections.push(` Persistence: ${this.config.swarm.enablePersistence ? 'Enabled' : 'Disabled'}`);
450
+
451
+ sections.push('\n' + chalk.cyan.bold('Security Settings:'));
452
+ sections.push(` Authentication: ${this.config.security.enableAuth ? this.config.security.authMethod : 'Disabled'}`);
453
+ sections.push(` Rate Limiting: ${this.config.security.enableRateLimit ? 'Enabled' : 'Disabled'}`);
454
+ sections.push(` CORS: ${this.config.security.enableCORS ? 'Enabled' : 'Disabled'}`);
455
+
456
+ sections.push('\n' + chalk.cyan.bold('Development Settings:'));
457
+ sections.push(` Hot Reload: ${this.config.development.enableHotReload ? 'Enabled' : 'Disabled'}`);
458
+ sections.push(` Debug Mode: ${this.config.development.enableDebugMode ? 'Enabled' : 'Disabled'}`);
459
+ sections.push(` Dev Server Port: ${this.config.development.devServerPort}`);
460
+
461
+ sections.push('\n' + chalk.cyan.bold('Monitoring Settings:'));
462
+ sections.push(` Metrics: ${this.config.monitoring.enableMetrics ? 'Enabled' : 'Disabled'}`);
463
+ sections.push(` Health Checks: ${this.config.monitoring.enableHealthChecks ? 'Enabled' : 'Disabled'}`);
464
+ sections.push(` Dashboard: ${this.config.monitoring.enableDashboard ? 'Enabled' : 'Disabled'}`);
465
+
466
+ return sections.join('\n');
467
+ }
468
+
469
+ async saveConfiguration() {
470
+ this.spinner.start('Saving configuration...');
471
+
472
+ try {
473
+ // Ensure config directory exists
474
+ const configDir = join(process.cwd(), 'config');
475
+ if (!existsSync(configDir)) {
476
+ mkdirSync(configDir, { recursive: true });
477
+ }
478
+
479
+ // Save main configuration
480
+ const configPath = join(configDir, 'claude-flow-config.json');
481
+ writeFileSync(configPath, JSON.stringify(this.config, null, 2));
482
+
483
+ // Save user configuration
484
+ const userConfigPath = join(homedir(), '.claude-flow-novice', 'config.json');
485
+ const userConfigDir = dirname(userConfigPath);
486
+ if (!existsSync(userConfigDir)) {
487
+ mkdirSync(userConfigDir, { recursive: true });
488
+ }
489
+ writeFileSync(userConfigPath, JSON.stringify(this.config, null, 2));
490
+
491
+ this.spinner.succeed('Configuration saved successfully!');
492
+ } catch (error) {
493
+ this.spinner.fail('Failed to save configuration');
494
+ throw error;
495
+ }
496
+ }
497
+
498
+ async generateEnvironmentFiles() {
499
+ this.spinner.start('Generating environment files...');
500
+
501
+ try {
502
+ // Generate .env file
503
+ const envContent = this.generateEnvContent();
504
+ writeFileSync(join(process.cwd(), '.env'), envContent);
505
+
506
+ // Generate .env.example file
507
+ const exampleContent = this.generateEnvExampleContent();
508
+ writeFileSync(join(process.cwd(), '.env.example'), exampleContent);
509
+
510
+ this.spinner.succeed('Environment files generated!');
511
+ } catch (error) {
512
+ this.spinner.fail('Failed to generate environment files');
513
+ throw error;
514
+ }
515
+ }
516
+
517
+ generateEnvContent() {
518
+ const lines = [
519
+ '# Claude Flow Novice Environment Configuration',
520
+ '# Generated on ' + new Date().toISOString(),
521
+ '',
522
+ `NODE_ENV=${this.config.basic.environment}`,
523
+ `PROJECT_NAME=${this.config.basic.projectName}`,
524
+ `LOG_LEVEL=${this.config.basic.logLevel}`,
525
+ ''
526
+ ];
527
+
528
+ if (this.config.redis.useRedis) {
529
+ lines.push('# Redis Configuration');
530
+ if (this.config.redis.redisType === 'cloud') {
531
+ lines.push(`REDIS_URL=${this.config.redis.redisUrl}`);
532
+ } else {
533
+ lines.push(`REDIS_HOST=${this.config.redis.redisHost}`);
534
+ lines.push(`REDIS_PORT=${this.config.redis.redisPort}`);
535
+ if (this.config.redis.redisPassword) {
536
+ lines.push(`REDIS_PASSWORD=${this.config.redis.redisPassword}`);
537
+ }
538
+ }
539
+ lines.push('');
540
+ }
541
+
542
+ if (this.config.security.enableAuth && this.config.security.jwtSecret) {
543
+ lines.push('# Security Configuration');
544
+ lines.push(`JWT_SECRET=${this.config.security.jwtSecret}`);
545
+ lines.push('');
546
+ }
547
+
548
+ lines.push('# Swarm Configuration');
549
+ lines.push(`MAX_AGENTS=${this.config.swarm.maxAgents}`);
550
+ lines.push(`SWARM_STRATEGY=${this.config.swarm.swarmStrategy}`);
551
+ lines.push(`SWARM_MODE=${this.config.swarm.swarmMode}`);
552
+ lines.push(`CONSENSUS_THRESHOLD=${this.config.swarm.consensusThreshold}`);
553
+ lines.push('');
554
+
555
+ lines.push('# Development Configuration');
556
+ lines.push(`DEV_SERVER_PORT=${this.config.development.devServerPort}`);
557
+ lines.push(`HOT_RELOAD=${this.config.development.enableHotReload}`);
558
+ lines.push(`DEBUG_MODE=${this.config.development.enableDebugMode}`);
559
+ lines.push('');
560
+
561
+ return lines.join('\n');
562
+ }
563
+
564
+ generateEnvExampleContent() {
565
+ return this.generateEnvContent()
566
+ .replace(/=.+$/, '=') // Replace values with empty
567
+ .replace(/JWT_SECRET=.+$/, 'JWT_SECRET=your-jwt-secret-here')
568
+ .replace(/REDIS_PASSWORD=.+$/, 'REDIS_PASSWORD=your-redis-password');
569
+ }
570
+
571
+ displaySuccessMessage() {
572
+ console.log('\n' + boxen(
573
+ chalk.green.bold('šŸŽ‰ Configuration completed successfully!'),
574
+ {
575
+ padding: 1,
576
+ borderColor: 'green',
577
+ borderStyle: 'round'
578
+ }
579
+ ));
580
+
581
+ console.log(chalk.blue('\nšŸ“ Files created:'));
582
+ console.log(' • config/claude-flow-config.json');
583
+ console.log(' • .env');
584
+ console.log(' • .env.example');
585
+ console.log(' • ~/.claude-flow-novice/config.json');
586
+
587
+ console.log(chalk.blue('\nšŸš€ Next steps:'));
588
+ console.log(' 1. Review the generated configuration files');
589
+ console.log(' 2. Run: npm run setup:install');
590
+ console.log(' 3. Start development: npm run dev');
591
+
592
+ if (this.config.redis.installRedis) {
593
+ console.log(chalk.yellow('\nāš ļø Redis will be installed automatically during setup.'));
594
+ }
595
+
596
+ console.log(chalk.gray('\nšŸ’” You can re-run this wizard anytime with: npm run config:wizard'));
597
+ }
598
+ }
599
+
600
+ // Run if executed directly
601
+ if (import.meta.url === `file://${process.argv[1]}`) {
602
+ const wizard = new ConfigWizard();
603
+ wizard.run().catch(console.error);
604
+ }
605
+
606
+ export default ConfigWizard;