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,461 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Installation Time Benchmark
5
+ *
6
+ * Measures actual installation time from scratch
7
+ * Target: <5 minutes for novice users
8
+ */
9
+
10
+ import { execSync, spawn } from 'child_process';
11
+ import { existsSync, rmSync, mkdirSync } from 'fs';
12
+ import { join } from 'path';
13
+ import { tmpdir } from 'os';
14
+ import chalk from 'chalk';
15
+ import ora from 'ora';
16
+
17
+ class InstallationBenchmark {
18
+ constructor(options = {}) {
19
+ this.iterations = options.iterations || 3;
20
+ this.cleanInstall = options.cleanInstall !== false;
21
+ this.verbose = options.verbose || false;
22
+ this.targetTimeMs = 5 * 60 * 1000; // 5 minutes
23
+ this.results = [];
24
+ }
25
+
26
+ async run() {
27
+ console.log(chalk.blue.bold('📊 Installation Benchmark\n'));
28
+ console.log(chalk.gray(`Running ${this.iterations} installation iterations`));
29
+ console.log(chalk.gray(`Target: Complete installation in under 5 minutes\n`));
30
+
31
+ for (let i = 0; i < this.iterations; i++) {
32
+ console.log(chalk.cyan(`\n━━━ Iteration ${i + 1}/${this.iterations} ━━━\n`));
33
+
34
+ const result = await this.runSingleBenchmark(i + 1);
35
+ this.results.push(result);
36
+
37
+ // Display immediate result
38
+ this.displayIterationResult(result);
39
+
40
+ // Wait between iterations
41
+ if (i < this.iterations - 1) {
42
+ console.log(chalk.gray('\n⏳ Waiting 10 seconds before next iteration...\n'));
43
+ await this.sleep(10000);
44
+ }
45
+ }
46
+
47
+ // Display summary
48
+ this.displaySummary();
49
+
50
+ return this.results;
51
+ }
52
+
53
+ async runSingleBenchmark(iteration) {
54
+ const testDir = join(tmpdir(), `claude-flow-bench-${Date.now()}`);
55
+ const phases = {};
56
+ const startTime = Date.now();
57
+
58
+ try {
59
+ // Phase 0: Environment setup
60
+ const phase0Start = Date.now();
61
+ if (this.cleanInstall) {
62
+ mkdirSync(testDir, { recursive: true });
63
+ process.chdir(testDir);
64
+ }
65
+ phases.setup = Date.now() - phase0Start;
66
+
67
+ // Phase 1: Dependency checks (parallel)
68
+ const phase1Start = Date.now();
69
+ const dependencies = await this.checkDependencies();
70
+ phases.dependencies = Date.now() - phase1Start;
71
+
72
+ // Phase 2: Redis installation
73
+ const phase2Start = Date.now();
74
+ const redis = await this.measureRedisInstall();
75
+ phases.redis = Date.now() - phase2Start;
76
+
77
+ // Phase 3: Quick-start configuration
78
+ const phase3Start = Date.now();
79
+ await this.measureQuickConfig();
80
+ phases.config = Date.now() - phase3Start;
81
+
82
+ // Phase 4: Template deployment
83
+ const phase4Start = Date.now();
84
+ await this.measureTemplateDeployment();
85
+ phases.templates = Date.now() - phase4Start;
86
+
87
+ // Phase 5: Validation
88
+ const phase5Start = Date.now();
89
+ await this.measureValidation();
90
+ phases.validation = Date.now() - phase5Start;
91
+
92
+ const totalTime = Date.now() - startTime;
93
+
94
+ return {
95
+ iteration,
96
+ success: true,
97
+ totalTime,
98
+ targetMet: totalTime < this.targetTimeMs,
99
+ phases,
100
+ dependencies,
101
+ redis,
102
+ testDir
103
+ };
104
+ } catch (error) {
105
+ const totalTime = Date.now() - startTime;
106
+
107
+ return {
108
+ iteration,
109
+ success: false,
110
+ error: error.message,
111
+ totalTime,
112
+ targetMet: false,
113
+ phases,
114
+ testDir
115
+ };
116
+ } finally {
117
+ // Cleanup
118
+ if (this.cleanInstall && existsSync(testDir)) {
119
+ try {
120
+ process.chdir(tmpdir());
121
+ rmSync(testDir, { recursive: true, force: true });
122
+ } catch (cleanupError) {
123
+ console.warn(chalk.yellow(`⚠️ Cleanup warning: ${cleanupError.message}`));
124
+ }
125
+ }
126
+ }
127
+ }
128
+
129
+ async checkDependencies() {
130
+ const checks = {
131
+ node: this.checkCommand('node --version'),
132
+ npm: this.checkCommand('npm --version'),
133
+ redis: this.checkCommand('redis-cli --version'),
134
+ docker: this.checkCommand('docker --version')
135
+ };
136
+
137
+ const results = {};
138
+ for (const [name, promise] of Object.entries(checks)) {
139
+ results[name] = await promise;
140
+ }
141
+
142
+ return results;
143
+ }
144
+
145
+ async checkCommand(command) {
146
+ const start = Date.now();
147
+ try {
148
+ const output = execSync(command, {
149
+ encoding: 'utf8',
150
+ stdio: ['pipe', 'pipe', 'pipe'],
151
+ timeout: 5000
152
+ }).trim();
153
+
154
+ return {
155
+ available: true,
156
+ version: output,
157
+ time: Date.now() - start
158
+ };
159
+ } catch (error) {
160
+ return {
161
+ available: false,
162
+ time: Date.now() - start
163
+ };
164
+ }
165
+ }
166
+
167
+ async measureRedisInstall() {
168
+ const start = Date.now();
169
+
170
+ try {
171
+ // Check if Redis is already running
172
+ try {
173
+ execSync('redis-cli ping', {
174
+ encoding: 'utf8',
175
+ timeout: 2000,
176
+ stdio: ['pipe', 'pipe', 'pipe']
177
+ });
178
+
179
+ return {
180
+ method: 'existing',
181
+ time: Date.now() - start,
182
+ message: 'Redis already running'
183
+ };
184
+ } catch (pingError) {
185
+ // Redis not running, need to install/start
186
+ }
187
+
188
+ // Try Docker method (fastest)
189
+ try {
190
+ execSync('docker ps', { stdio: 'ignore', timeout: 2000 });
191
+
192
+ // Check if container exists
193
+ const existing = execSync('docker ps -a --filter name=claude-flow-bench --format "{{.Names}}"', {
194
+ encoding: 'utf8',
195
+ timeout: 2000
196
+ }).trim();
197
+
198
+ if (existing === 'claude-flow-bench') {
199
+ execSync('docker start claude-flow-bench', { stdio: 'ignore', timeout: 10000 });
200
+ } else {
201
+ execSync(
202
+ 'docker run -d --name claude-flow-bench -p 6379:6379 redis:alpine',
203
+ { stdio: 'ignore', timeout: 60000 }
204
+ );
205
+ }
206
+
207
+ // Wait for Redis
208
+ await this.waitForRedis(20);
209
+
210
+ return {
211
+ method: 'docker',
212
+ time: Date.now() - start,
213
+ message: 'Redis started in Docker'
214
+ };
215
+ } catch (dockerError) {
216
+ return {
217
+ method: 'failed',
218
+ time: Date.now() - start,
219
+ error: 'Docker not available, Redis installation needed'
220
+ };
221
+ }
222
+ } catch (error) {
223
+ return {
224
+ method: 'error',
225
+ time: Date.now() - start,
226
+ error: error.message
227
+ };
228
+ }
229
+ }
230
+
231
+ async waitForRedis(maxAttempts = 20) {
232
+ for (let i = 0; i < maxAttempts; i++) {
233
+ try {
234
+ const response = execSync('redis-cli ping', {
235
+ encoding: 'utf8',
236
+ timeout: 2000,
237
+ stdio: ['pipe', 'pipe', 'pipe']
238
+ }).trim();
239
+
240
+ if (response === 'PONG') {
241
+ return true;
242
+ }
243
+ } catch (error) {
244
+ await this.sleep(1000);
245
+ }
246
+ }
247
+
248
+ throw new Error('Redis failed to start');
249
+ }
250
+
251
+ async measureQuickConfig() {
252
+ const start = Date.now();
253
+
254
+ // Simulate minimal configuration generation
255
+ const config = {
256
+ version: '1.6.6',
257
+ quickStart: true,
258
+ redis: { host: 'localhost', port: 6379 }
259
+ };
260
+
261
+ return {
262
+ time: Date.now() - start,
263
+ config
264
+ };
265
+ }
266
+
267
+ async measureTemplateDeployment() {
268
+ const start = Date.now();
269
+
270
+ // Simulate template deployment (would write files in real scenario)
271
+ const templates = [
272
+ 'CLAUDE.md',
273
+ '.claude/settings.json',
274
+ 'memory/README.md',
275
+ 'coordination/README.md'
276
+ ];
277
+
278
+ return {
279
+ time: Date.now() - start,
280
+ templates: templates.length
281
+ };
282
+ }
283
+
284
+ async measureValidation() {
285
+ const start = Date.now();
286
+
287
+ // Simulate validation checks
288
+ const checks = {
289
+ redis: await this.validateRedis(),
290
+ files: true,
291
+ config: true
292
+ };
293
+
294
+ return {
295
+ time: Date.now() - start,
296
+ checks
297
+ };
298
+ }
299
+
300
+ async validateRedis() {
301
+ try {
302
+ const response = execSync('redis-cli ping', {
303
+ encoding: 'utf8',
304
+ timeout: 2000,
305
+ stdio: ['pipe', 'pipe', 'pipe']
306
+ }).trim();
307
+
308
+ return response === 'PONG';
309
+ } catch (error) {
310
+ return false;
311
+ }
312
+ }
313
+
314
+ displayIterationResult(result) {
315
+ const totalSeconds = (result.totalTime / 1000).toFixed(1);
316
+ const targetSeconds = (this.targetTimeMs / 1000).toFixed(0);
317
+
318
+ if (result.success) {
319
+ console.log(chalk.green(`✅ Iteration ${result.iteration} completed in ${totalSeconds}s`));
320
+
321
+ if (result.targetMet) {
322
+ console.log(chalk.green(` Target met! (${targetSeconds}s)`));
323
+ } else {
324
+ const overBy = ((result.totalTime - this.targetTimeMs) / 1000).toFixed(1);
325
+ console.log(chalk.yellow(` Over target by ${overBy}s`));
326
+ }
327
+
328
+ console.log(chalk.gray('\n Phase breakdown:'));
329
+ console.log(chalk.gray(` Setup: ${(result.phases.setup / 1000).toFixed(1)}s`));
330
+ console.log(chalk.gray(` Dependencies: ${(result.phases.dependencies / 1000).toFixed(1)}s`));
331
+ console.log(chalk.gray(` Redis: ${(result.phases.redis / 1000).toFixed(1)}s (${result.redis.method})`));
332
+ console.log(chalk.gray(` Config: ${(result.phases.config / 1000).toFixed(1)}s`));
333
+ console.log(chalk.gray(` Templates: ${(result.phases.templates / 1000).toFixed(1)}s`));
334
+ console.log(chalk.gray(` Validation: ${(result.phases.validation / 1000).toFixed(1)}s`));
335
+ } else {
336
+ console.log(chalk.red(`❌ Iteration ${result.iteration} failed`));
337
+ console.log(chalk.red(` Error: ${result.error}`));
338
+ console.log(chalk.gray(` Time before failure: ${totalSeconds}s`));
339
+ }
340
+ }
341
+
342
+ displaySummary() {
343
+ console.log('\n' + chalk.blue.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
344
+ console.log(chalk.blue.bold('📊 BENCHMARK SUMMARY'));
345
+ console.log(chalk.blue.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'));
346
+
347
+ const successful = this.results.filter(r => r.success);
348
+ const targetMet = successful.filter(r => r.targetMet);
349
+
350
+ if (successful.length === 0) {
351
+ console.log(chalk.red('❌ All iterations failed\n'));
352
+ return;
353
+ }
354
+
355
+ // Calculate statistics
356
+ const times = successful.map(r => r.totalTime);
357
+ const avgTime = times.reduce((a, b) => a + b, 0) / times.length;
358
+ const minTime = Math.min(...times);
359
+ const maxTime = Math.max(...times);
360
+
361
+ console.log(chalk.cyan('⏱️ Time Statistics:'));
362
+ console.log(` Average: ${chalk.bold((avgTime / 1000).toFixed(1) + 's')}`);
363
+ console.log(` Minimum: ${chalk.bold((minTime / 1000).toFixed(1) + 's')}`);
364
+ console.log(` Maximum: ${chalk.bold((maxTime / 1000).toFixed(1) + 's')}`);
365
+ console.log(` Target: ${(this.targetTimeMs / 1000).toFixed(0)}s\n`);
366
+
367
+ console.log(chalk.cyan('✅ Success Rate:'));
368
+ console.log(` Completed: ${successful.length}/${this.results.length} ${chalk.gray(`(${(successful.length / this.results.length * 100).toFixed(0)}%)`)}`);
369
+ console.log(` Target met: ${targetMet.length}/${successful.length} ${chalk.gray(`(${(targetMet.length / successful.length * 100).toFixed(0)}%)`)}\n`);
370
+
371
+ // Phase averages
372
+ const phases = ['setup', 'dependencies', 'redis', 'config', 'templates', 'validation'];
373
+ const phaseAvg = {};
374
+
375
+ for (const phase of phases) {
376
+ const phaseTimes = successful.map(r => r.phases[phase]).filter(t => t != null);
377
+ if (phaseTimes.length > 0) {
378
+ phaseAvg[phase] = phaseTimes.reduce((a, b) => a + b, 0) / phaseTimes.length;
379
+ }
380
+ }
381
+
382
+ console.log(chalk.cyan('⚙️ Phase Averages:'));
383
+ for (const [phase, time] of Object.entries(phaseAvg)) {
384
+ const pct = ((time / avgTime) * 100).toFixed(0);
385
+ console.log(` ${phase.padEnd(15)}: ${(time / 1000).toFixed(1)}s ${chalk.gray(`(${pct}%)`)}`);
386
+ }
387
+ console.log();
388
+
389
+ // Redis methods
390
+ const redisMethods = successful.map(r => r.redis.method);
391
+ const redisMethodCounts = redisMethods.reduce((acc, method) => {
392
+ acc[method] = (acc[method] || 0) + 1;
393
+ return acc;
394
+ }, {});
395
+
396
+ console.log(chalk.cyan('🔧 Redis Installation Methods:'));
397
+ for (const [method, count] of Object.entries(redisMethodCounts)) {
398
+ console.log(` ${method}: ${count}/${successful.length}`);
399
+ }
400
+ console.log();
401
+
402
+ // Final verdict
403
+ const avgSeconds = (avgTime / 1000).toFixed(1);
404
+ const targetSeconds = (this.targetTimeMs / 1000).toFixed(0);
405
+
406
+ if (avgTime < this.targetTimeMs) {
407
+ console.log(chalk.green.bold(`✅ TARGET MET: Average ${avgSeconds}s < ${targetSeconds}s target\n`));
408
+ } else {
409
+ const overBy = ((avgTime - this.targetTimeMs) / 1000).toFixed(1);
410
+ console.log(chalk.yellow.bold(`⚠️ TARGET EXCEEDED: Average ${avgSeconds}s > ${targetSeconds}s target (over by ${overBy}s)\n`));
411
+
412
+ // Recommendations
413
+ console.log(chalk.cyan('💡 Optimization Recommendations:'));
414
+ const slowestPhase = Object.entries(phaseAvg).sort((a, b) => b[1] - a[1])[0];
415
+ console.log(` - Slowest phase: ${slowestPhase[0]} (${(slowestPhase[1] / 1000).toFixed(1)}s)`);
416
+
417
+ if (redisMethods.includes('failed') || redisMethods.includes('error')) {
418
+ console.log(` - Improve Redis installation reliability`);
419
+ }
420
+
421
+ if (phaseAvg.redis > 60000) {
422
+ console.log(` - Consider Docker-only Redis installation for speed`);
423
+ }
424
+
425
+ if (phaseAvg.dependencies > 10000) {
426
+ console.log(` - Optimize parallel dependency checking`);
427
+ }
428
+
429
+ console.log();
430
+ }
431
+
432
+ console.log(chalk.blue.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'));
433
+ }
434
+
435
+ async sleep(ms) {
436
+ return new Promise(resolve => setTimeout(resolve, ms));
437
+ }
438
+ }
439
+
440
+ // CLI execution
441
+ if (import.meta.url === `file://${process.argv[1]}`) {
442
+ const args = process.argv.slice(2);
443
+ const options = {
444
+ iterations: parseInt(args.find(a => a.startsWith('--iterations='))?.split('=')[1] || '3'),
445
+ cleanInstall: !args.includes('--no-clean'),
446
+ verbose: args.includes('--verbose') || args.includes('-v')
447
+ };
448
+
449
+ const benchmark = new InstallationBenchmark(options);
450
+ benchmark.run().then(results => {
451
+ const avgTime = results.filter(r => r.success).reduce((sum, r) => sum + r.totalTime, 0) / results.filter(r => r.success).length;
452
+ const targetMet = avgTime < benchmark.targetTimeMs;
453
+
454
+ process.exit(targetMet ? 0 : 1);
455
+ }).catch(error => {
456
+ console.error(chalk.red(`\n❌ Benchmark error: ${error.message}`));
457
+ process.exit(1);
458
+ });
459
+ }
460
+
461
+ export default InstallationBenchmark;