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,559 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Claude Flow Novice - Redis Setup Script
5
+ *
6
+ * Handles Redis installation, configuration, and optimization
7
+ */
8
+
9
+ import { execSync, spawn } from 'child_process';
10
+ import { existsSync, writeFileSync, readFileSync, chmodSync } from 'fs';
11
+ import { join, dirname } from 'path';
12
+ import { homedir, platform } from 'os';
13
+ import chalk from 'chalk';
14
+ import ora from 'ora';
15
+
16
+ class RedisSetup {
17
+ constructor(options = {}) {
18
+ this.platform = platform();
19
+ this.homeDir = homedir();
20
+ this.configDir = join(this.homeDir, '.claude-flow-novice', 'config');
21
+ this.redisConfig = {
22
+ port: options.port || 6379,
23
+ host: options.host || 'localhost',
24
+ password: options.password || null,
25
+ maxMemory: options.maxMemory || '256mb',
26
+ persistence: options.persistence !== false,
27
+ optimization: {
28
+ tcpKeepAlive: 300,
29
+ timeout: 0,
30
+ databases: 16,
31
+ ...options.optimization
32
+ }
33
+ };
34
+ this.skipInstallation = options.skipInstallation || false;
35
+ this.interactive = options.interactive !== false;
36
+ }
37
+
38
+ async setup() {
39
+ console.log(chalk.blue.bold('šŸ”§ Redis Setup\n'));
40
+
41
+ try {
42
+ await this.checkRedisInstallation();
43
+ await this.installRedisIfNeeded();
44
+ await this.configureRedis();
45
+ await this.optimizeRedis();
46
+ await this.startRedis();
47
+ await this.testRedisConnection();
48
+
49
+ console.log(chalk.green.bold('āœ… Redis setup completed successfully!\n'));
50
+ return true;
51
+ } catch (error) {
52
+ console.error(chalk.red('āŒ Redis setup failed:'), error.message);
53
+ return false;
54
+ }
55
+ }
56
+
57
+ async checkRedisInstallation() {
58
+ const spinner = ora('Checking Redis installation...').start();
59
+
60
+ try {
61
+ // Check if Redis CLI is available
62
+ const version = execSync('redis-cli --version', { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
63
+
64
+ // Check if Redis server is also available
65
+ try {
66
+ execSync('redis-server --version', { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'] });
67
+ spinner.succeed(`Redis installed: ${version}`);
68
+ this.redisInstalled = true;
69
+ return true;
70
+ } catch (serverError) {
71
+ spinner.warn(`Redis CLI found (${version}) but Redis server not found`);
72
+ this.redisInstalled = 'partial';
73
+ return false;
74
+ }
75
+ } catch (error) {
76
+ spinner.warn('Redis not found');
77
+ this.redisInstalled = false;
78
+ return false;
79
+ }
80
+ }
81
+
82
+ async installRedisIfNeeded() {
83
+ if (this.skipInstallation) {
84
+ console.log(chalk.yellow('ā­ļø Skipping Redis installation (manual mode)'));
85
+ return;
86
+ }
87
+
88
+ if (this.redisInstalled === true) {
89
+ console.log(chalk.green('āœ… Redis already installed, skipping installation'));
90
+ return;
91
+ }
92
+
93
+ const spinner = ora('Installing Redis...').start();
94
+
95
+ try {
96
+ if (this.platform === 'win32') {
97
+ await this.installRedisWindows(spinner);
98
+ } else if (this.platform === 'darwin') {
99
+ await this.installRedisMacOS(spinner);
100
+ } else {
101
+ await this.installRedisLinux(spinner);
102
+ }
103
+
104
+ spinner.succeed('Redis installed successfully');
105
+ } catch (error) {
106
+ spinner.fail('Redis installation failed');
107
+ this.displayInstallationInstructions();
108
+ throw error;
109
+ }
110
+ }
111
+
112
+ async installRedisWindows(spinner) {
113
+ // Check if Chocolatey is available
114
+ let hasChoco = false;
115
+ try {
116
+ execSync('choco --version', { stdio: 'ignore' });
117
+ hasChoco = true;
118
+ } catch (error) {
119
+ // Try Scoop as alternative
120
+ try {
121
+ execSync('scoop --version', { stdio: 'ignore' });
122
+ spinner.text = 'Installing Redis via Scoop...';
123
+ await this.executeCommand('scoop install redis', { timeout: 300000 });
124
+ return;
125
+ } catch (scoopError) {
126
+ throw new Error(
127
+ 'Package manager not found. Please install Chocolatey (https://chocolatey.org/install) or Scoop (https://scoop.sh/)'
128
+ );
129
+ }
130
+ }
131
+
132
+ if (hasChoco) {
133
+ // Install Redis via Chocolatey
134
+ spinner.text = 'Installing Redis via Chocolatey...';
135
+ await this.executeCommand('choco install redis-64 -y', { timeout: 300000 });
136
+
137
+ // Add Redis to PATH
138
+ const redisPaths = [
139
+ 'C:\\ProgramData\\chocolatey\\bin\\redis-cli.exe',
140
+ 'C:\\Program Files\\Redis\\redis-cli.exe'
141
+ ];
142
+
143
+ for (const redisPath of redisPaths) {
144
+ if (existsSync(redisPath)) {
145
+ console.log(chalk.cyan(`\nšŸ’” Redis installed at: ${redisPath}`));
146
+ break;
147
+ }
148
+ }
149
+ }
150
+ }
151
+
152
+ async installRedisMacOS() {
153
+ // Check if Homebrew is available
154
+ try {
155
+ execSync('brew --version', { stdio: 'ignore' });
156
+ } catch (error) {
157
+ throw new Error('Homebrew not found. Please install Homebrew first: https://brew.sh/');
158
+ }
159
+
160
+ // Install Redis via Homebrew
161
+ await this.executeCommand('brew install redis', { timeout: 300000 });
162
+ }
163
+
164
+ async installRedisLinux() {
165
+ const distro = await this.detectLinuxDistribution();
166
+
167
+ switch (distro) {
168
+ case 'ubuntu':
169
+ case 'debian':
170
+ await this.executeCommand('sudo apt-get update && sudo apt-get install redis-server -y', { timeout: 300000 });
171
+ break;
172
+ case 'centos':
173
+ case 'rhel':
174
+ case 'fedora':
175
+ await this.executeCommand('sudo yum install redis -y', { timeout: 300000 });
176
+ break;
177
+ case 'arch':
178
+ await this.executeCommand('sudo pacman -S redis --noconfirm', { timeout: 300000 });
179
+ break;
180
+ default:
181
+ throw new Error(`Unsupported Linux distribution: ${distro}`);
182
+ }
183
+ }
184
+
185
+ async detectLinuxDistribution() {
186
+ try {
187
+ const releaseInfo = readFileSync('/etc/os-release', 'utf8');
188
+ if (releaseInfo.includes('ubuntu')) return 'ubuntu';
189
+ if (releaseInfo.includes('debian')) return 'debian';
190
+ if (releaseInfo.includes('centos')) return 'centos';
191
+ if (releaseInfo.includes('rhel')) return 'rhel';
192
+ if (releaseInfo.includes('fedora')) return 'fedora';
193
+ if (releaseInfo.includes('arch')) return 'arch';
194
+ } catch (error) {
195
+ // Fall back to detection via lsb_release
196
+ try {
197
+ const output = execSync('lsb_release -si', { encoding: 'utf8' }).toLowerCase().trim();
198
+ return output;
199
+ } catch (error) {
200
+ return 'unknown';
201
+ }
202
+ }
203
+
204
+ return 'unknown';
205
+ }
206
+
207
+ async configureRedis() {
208
+ const spinner = ora('Configuring Redis...').start();
209
+
210
+ try {
211
+ const configPath = await this.getRedisConfigPath();
212
+ const backupPath = `${configPath}.backup`;
213
+
214
+ // Create backup of original config
215
+ if (existsSync(configPath)) {
216
+ await this.executeCommand(`cp "${configPath}" "${backupPath}"`);
217
+ }
218
+
219
+ // Generate optimized configuration
220
+ const config = this.generateRedisConfig();
221
+ writeFileSync(configPath, config);
222
+
223
+ // Save configuration to claude-flow-novice config directory
224
+ const claudeRedisConfig = {
225
+ ...this.redisConfig,
226
+ configFile: configPath,
227
+ platform: this.platform,
228
+ installedAt: new Date().toISOString()
229
+ };
230
+
231
+ writeFileSync(
232
+ join(this.configDir, 'redis.json'),
233
+ JSON.stringify(claudeRedisConfig, null, 2)
234
+ );
235
+
236
+ spinner.succeed('Redis configured successfully');
237
+ } catch (error) {
238
+ spinner.fail('Redis configuration failed');
239
+ throw error;
240
+ }
241
+ }
242
+
243
+ async getRedisConfigPath() {
244
+ const possiblePaths = [
245
+ '/etc/redis/redis.conf',
246
+ '/usr/local/etc/redis.conf',
247
+ '/etc/redis/redis/redis.conf',
248
+ join(this.homeDir, '.redis/redis.conf'),
249
+ 'C:\\ProgramData\\Redis\\redis.conf',
250
+ 'C:\\Redis\\redis.conf'
251
+ ];
252
+
253
+ for (const path of possiblePaths) {
254
+ if (existsSync(path)) {
255
+ return path;
256
+ }
257
+ }
258
+
259
+ // Create default config location
260
+ const defaultPath = this.platform === 'win32'
261
+ ? 'C:\\Redis\\redis.conf'
262
+ : '/etc/redis/redis.conf';
263
+
264
+ // Create directory if it doesn't exist
265
+ const configDir = dirname(defaultPath);
266
+ if (!existsSync(configDir)) {
267
+ await this.executeCommand(`mkdir -p "${configDir}"`);
268
+ }
269
+
270
+ return defaultPath;
271
+ }
272
+
273
+ generateRedisConfig() {
274
+ return `
275
+ # Claude Flow Novice Redis Configuration
276
+ # Generated on ${new Date().toISOString()}
277
+
278
+ # Network
279
+ bind 127.0.0.1
280
+ port ${this.redisConfig.port}
281
+ protected-mode yes
282
+
283
+ # Security
284
+ ${this.redisConfig.password ? `requirepass ${this.redisConfig.password}` : '# requirepass your-password-here'}
285
+
286
+ # Memory Management
287
+ maxmemory ${this.redisConfig.maxMemory}
288
+ maxmemory-policy allkeys-lru
289
+
290
+ # Persistence
291
+ ${this.redisConfig.persistence ? `
292
+ save 900 1
293
+ save 300 10
294
+ save 60 10000
295
+ ` : `# save 900 1
296
+ # save 300 10
297
+ # save 60 10000`}
298
+
299
+ # Optimization
300
+ tcp-keepalive ${this.redisConfig.optimization.tcpKeepAlive}
301
+ timeout ${this.redisConfig.optimization.timeout}
302
+ databases ${this.redisConfig.optimization.databases}
303
+
304
+ # Performance
305
+ tcp-backlog 511
306
+ rdbcompression yes
307
+ rdbchecksum yes
308
+
309
+ # Logging
310
+ loglevel notice
311
+ logfile ""
312
+
313
+ # Client Configuration
314
+ maxclients 10000
315
+
316
+ # Memory Usage
317
+ hash-max-ziplist-entries 512
318
+ hash-max-ziplist-value 64
319
+ list-max-ziplist-size -2
320
+ list-compress-depth 0
321
+ set-max-intset-entries 512
322
+ zset-max-ziplist-entries 128
323
+ zset-max-ziplist-value 64
324
+
325
+ # Latency Monitoring
326
+ latency-monitor-threshold 100
327
+
328
+ # Slow Log
329
+ slowlog-log-slower-than 10000
330
+ slowlog-max-len 128
331
+
332
+ # Event Notification (for Claude Flow Novice)
333
+ notify-keyspace-events "Ex"
334
+
335
+ # Append Only File (additional persistence)
336
+ appendonly yes
337
+ appendfsync everysec
338
+ no-appendfsync-on-rewrite no
339
+ auto-aof-rewrite-percentage 100
340
+ auto-aof-rewrite-min-size 64mb
341
+ `.trim();
342
+ }
343
+
344
+ async optimizeRedis() {
345
+ const spinner = ora('Optimizing Redis settings...').start();
346
+
347
+ try {
348
+ if (this.platform === 'linux') {
349
+ // Linux-specific optimizations
350
+ await this.executeCommand('echo "vm.overcommit_memory = 1" | sudo tee -a /etc/sysctl.conf');
351
+ await this.executeCommand('sudo sysctl vm.overcommit_memory=1');
352
+
353
+ // Disable transparent huge pages
354
+ try {
355
+ await this.executeCommand('echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled');
356
+ } catch (error) {
357
+ // Not all systems support this
358
+ }
359
+ }
360
+
361
+ spinner.succeed('Redis optimized successfully');
362
+ } catch (error) {
363
+ spinner.warn('Redis optimization completed with warnings');
364
+ console.warn(chalk.yellow('Some optimizations could not be applied'));
365
+ }
366
+ }
367
+
368
+ async startRedis() {
369
+ const spinner = ora('Starting Redis server...').start();
370
+
371
+ try {
372
+ if (this.platform === 'win32') {
373
+ await this.startRedisWindows();
374
+ } else if (this.platform === 'darwin') {
375
+ await this.startRedisMacOS();
376
+ } else {
377
+ await this.startRedisLinux();
378
+ }
379
+
380
+ // Wait for Redis to start
381
+ await this.waitForRedis();
382
+
383
+ spinner.succeed('Redis server started successfully');
384
+ } catch (error) {
385
+ spinner.fail('Redis server startup failed');
386
+ throw error;
387
+ }
388
+ }
389
+
390
+ async startRedisWindows() {
391
+ // Start Redis as a Windows service or directly
392
+ try {
393
+ await this.executeCommand('net start redis', { timeout: 30000 });
394
+ } catch (error) {
395
+ // Fallback to direct execution
396
+ await this.executeCommand('redis-server', { detached: true, stdio: 'ignore' });
397
+ }
398
+ }
399
+
400
+ async startRedisMacOS() {
401
+ // Start Redis via Homebrew services
402
+ try {
403
+ await this.executeCommand('brew services start redis', { timeout: 30000 });
404
+ } catch (error) {
405
+ // Fallback to direct execution
406
+ await this.executeCommand('redis-server /usr/local/etc/redis.conf', { detached: true, stdio: 'ignore' });
407
+ }
408
+ }
409
+
410
+ async startRedisLinux() {
411
+ // Start Redis via systemd
412
+ try {
413
+ await this.executeCommand('sudo systemctl start redis-server', { timeout: 30000 });
414
+ await this.executeCommand('sudo systemctl enable redis-server');
415
+ } catch (error) {
416
+ // Fallback to direct execution
417
+ await this.executeCommand('redis-server /etc/redis/redis.conf', { detached: true, stdio: 'ignore' });
418
+ }
419
+ }
420
+
421
+ async waitForRedis() {
422
+ const maxAttempts = 30;
423
+ const delay = 1000;
424
+
425
+ for (let i = 0; i < maxAttempts; i++) {
426
+ try {
427
+ execSync('redis-cli ping', { stdio: 'ignore', timeout: 5000 });
428
+ return;
429
+ } catch (error) {
430
+ await new Promise(resolve => setTimeout(resolve, delay));
431
+ }
432
+ }
433
+
434
+ throw new Error('Redis failed to start within the expected time');
435
+ }
436
+
437
+ async testRedisConnection() {
438
+ const spinner = ora('Testing Redis connection...').start();
439
+
440
+ try {
441
+ // Test basic connectivity
442
+ const response = execSync('redis-cli ping', { encoding: 'utf8' }).trim();
443
+
444
+ if (response === 'PONG') {
445
+ // Test memory operations
446
+ execSync('redis-cli set claude-flow-test "connection-test"', { stdio: 'ignore' });
447
+ const value = execSync('redis-cli get claude-flow-test', { encoding: 'utf8' }).trim();
448
+ execSync('redis-cli del claude-flow-test', { stdio: 'ignore' });
449
+
450
+ if (value === 'connection-test') {
451
+ spinner.succeed('Redis connection test passed');
452
+ } else {
453
+ throw new Error('Redis memory operations failed');
454
+ }
455
+ } else {
456
+ throw new Error('Redis not responding correctly');
457
+ }
458
+ } catch (error) {
459
+ spinner.fail('Redis connection test failed');
460
+ throw error;
461
+ }
462
+ }
463
+
464
+ displayInstallationInstructions() {
465
+ console.log(chalk.yellow('\nšŸ“š Manual Installation Instructions:\n'));
466
+
467
+ if (this.platform === 'win32') {
468
+ console.log(chalk.cyan('Windows Installation Options:'));
469
+ console.log(' 1. Via Chocolatey (recommended):');
470
+ console.log(' - Install Chocolatey: https://chocolatey.org/install');
471
+ console.log(' - Run: choco install redis-64 -y\n');
472
+ console.log(' 2. Via Scoop:');
473
+ console.log(' - Install Scoop: https://scoop.sh/');
474
+ console.log(' - Run: scoop install redis\n');
475
+ console.log(' 3. Direct Download:');
476
+ console.log(' - Download: https://github.com/microsoftarchive/redis/releases');
477
+ console.log(' - Extract and add to PATH\n');
478
+ } else if (this.platform === 'darwin') {
479
+ console.log(chalk.cyan('macOS Installation:'));
480
+ console.log(' 1. Via Homebrew (recommended):');
481
+ console.log(' - Install Homebrew: https://brew.sh/');
482
+ console.log(' - Run: brew install redis\n');
483
+ console.log(' 2. Via MacPorts:');
484
+ console.log(' - Run: sudo port install redis\n');
485
+ } else {
486
+ console.log(chalk.cyan('Linux Installation:'));
487
+ console.log(' Ubuntu/Debian:');
488
+ console.log(' - Run: sudo apt-get update && sudo apt-get install redis-server\n');
489
+ console.log(' CentOS/RHEL/Fedora:');
490
+ console.log(' - Run: sudo yum install redis\n');
491
+ console.log(' Arch Linux:');
492
+ console.log(' - Run: sudo pacman -S redis\n');
493
+ }
494
+
495
+ console.log(chalk.yellow('After installation, run this script again to complete setup.\n'));
496
+ }
497
+
498
+ async getRedisInfo() {
499
+ try {
500
+ const info = execSync('redis-cli INFO server', { encoding: 'utf8' });
501
+ const lines = info.split('\n');
502
+ const data = {};
503
+
504
+ for (const line of lines) {
505
+ if (line.includes(':')) {
506
+ const [key, value] = line.split(':');
507
+ data[key.trim()] = value.trim();
508
+ }
509
+ }
510
+
511
+ return data;
512
+ } catch (error) {
513
+ return null;
514
+ }
515
+ }
516
+
517
+ async executeCommand(command, options = {}) {
518
+ return new Promise((resolve, reject) => {
519
+ const child = spawn(command, [], {
520
+ shell: true,
521
+ stdio: 'pipe',
522
+ ...options
523
+ });
524
+
525
+ let stdout = '';
526
+ let stderr = '';
527
+
528
+ child.stdout?.on('data', (data) => stdout += data.toString());
529
+ child.stderr?.on('data', (data) => stderr += data.toString());
530
+
531
+ child.on('close', (code) => {
532
+ if (code === 0) {
533
+ resolve({ stdout, stderr });
534
+ } else {
535
+ reject(new Error(`Command failed with code ${code}: ${stderr}`));
536
+ }
537
+ });
538
+
539
+ child.on('error', reject);
540
+
541
+ if (options.timeout) {
542
+ setTimeout(() => {
543
+ child.kill();
544
+ reject(new Error('Command timeout'));
545
+ }, options.timeout);
546
+ }
547
+ });
548
+ }
549
+ }
550
+
551
+ // Execute Redis setup
552
+ if (import.meta.url === `file://${process.argv[1]}`) {
553
+ const redisSetup = new RedisSetup();
554
+ redisSetup.setup().then(success => {
555
+ process.exit(success ? 0 : 1);
556
+ }).catch(console.error);
557
+ }
558
+
559
+ export default RedisSetup;