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,568 @@
1
+ #!/usr/bin/env -S deno run --allow-all
2
+ /**
3
+ * Comprehensive test runner for Claude-Flow
4
+ * Runs all tests with coverage and generates reports
5
+ */
6
+
7
+ import { parseArgs } from "https://deno.land/std@0.220.0/cli/parse_args.ts";
8
+ import { exists } from "https://deno.land/std@0.220.0/fs/exists.ts";
9
+ import { ensureDir } from "https://deno.land/std@0.220.0/fs/ensure_dir.ts";
10
+
11
+ interface TestSuite {
12
+ name: string;
13
+ pattern: string;
14
+ description: string;
15
+ timeout?: number;
16
+ parallel?: boolean;
17
+ }
18
+
19
+ const TEST_SUITES: TestSuite[] = [
20
+ {
21
+ name: "unit",
22
+ pattern: "tests/unit/**/*.test.ts",
23
+ description: "Unit tests for individual components",
24
+ timeout: 30000,
25
+ parallel: true,
26
+ },
27
+ {
28
+ name: "integration",
29
+ pattern: "tests/integration/**/*.test.ts",
30
+ description: "Integration tests for component interactions",
31
+ timeout: 60000,
32
+ parallel: true,
33
+ },
34
+ {
35
+ name: "e2e",
36
+ pattern: "tests/e2e/**/*.test.ts",
37
+ description: "End-to-end CLI and workflow tests",
38
+ timeout: 120000,
39
+ parallel: false,
40
+ },
41
+ ];
42
+
43
+ interface TestOptions {
44
+ suites: string[];
45
+ coverage: boolean;
46
+ watch: boolean;
47
+ filter?: string;
48
+ parallel: boolean;
49
+ verbose: boolean;
50
+ outputDir: string;
51
+ failFast: boolean;
52
+ updateSnapshots: boolean;
53
+ }
54
+
55
+ class TestRunner {
56
+ private options: TestOptions;
57
+
58
+ constructor(options: TestOptions) {
59
+ this.options = options;
60
+ }
61
+
62
+ async run(): Promise<boolean> {
63
+ console.log("🧪 Claude-Flow Test Runner");
64
+ console.log("=".repeat(50));
65
+
66
+ // Ensure output directory exists
67
+ await ensureDir(this.options.outputDir);
68
+
69
+ let allPassed = true;
70
+ const results: Array<{ suite: string; passed: boolean; duration: number }> = [];
71
+
72
+ // Run each test suite
73
+ for (const suiteName of this.options.suites) {
74
+ const suite = TEST_SUITES.find(s => s.name === suiteName);
75
+ if (!suite) {
76
+ console.error(`āŒ Unknown test suite: ${suiteName}`);
77
+ allPassed = false;
78
+ continue;
79
+ }
80
+
81
+ console.log(`\nšŸ“‹ Running ${suite.name} tests: ${suite.description}`);
82
+
83
+ const startTime = Date.now();
84
+ const passed = await this.runSuite(suite);
85
+ const duration = Date.now() - startTime;
86
+
87
+ results.push({ suite: suiteName, passed, duration });
88
+
89
+ if (!passed) {
90
+ allPassed = false;
91
+
92
+ if (this.options.failFast) {
93
+ console.log("\nšŸ’„ Fail-fast enabled, stopping test execution");
94
+ break;
95
+ }
96
+ }
97
+ }
98
+
99
+ // Generate reports
100
+ await this.generateReports(results);
101
+
102
+ // Print summary
103
+ this.printSummary(results, allPassed);
104
+
105
+ return allPassed;
106
+ }
107
+
108
+ private async runSuite(suite: TestSuite): Promise<boolean> {
109
+ const args = [
110
+ "test",
111
+ "--allow-all",
112
+ "--unstable-temporal",
113
+ ];
114
+
115
+ // Add coverage if enabled
116
+ if (this.options.coverage) {
117
+ args.push("--coverage", `${this.options.outputDir}/coverage`);
118
+ }
119
+
120
+ // Add parallel execution
121
+ if (this.options.parallel && suite.parallel) {
122
+ args.push("--parallel");
123
+ }
124
+
125
+ // Note: Deno test doesn't support --timeout flag directly
126
+
127
+ // Add filter if specified
128
+ if (this.options.filter) {
129
+ args.push("--filter", this.options.filter);
130
+ }
131
+
132
+ // Add verbose output
133
+ if (this.options.verbose) {
134
+ args.push("--verbose");
135
+ }
136
+
137
+ // Add fail-fast
138
+ if (this.options.failFast) {
139
+ args.push("--fail-fast");
140
+ }
141
+
142
+ // Add update snapshots
143
+ if (this.options.updateSnapshots) {
144
+ args.push("--update-snapshots");
145
+ }
146
+
147
+ // Add test pattern
148
+ args.push(suite.pattern);
149
+
150
+ console.log(` Command: deno ${args.join(" ")}`);
151
+
152
+ const command = new Deno.Command(Deno.execPath(), {
153
+ args,
154
+ stdout: "piped",
155
+ stderr: "piped",
156
+ });
157
+
158
+ const start = Date.now();
159
+ const { code, stdout, stderr } = await command.output();
160
+ const duration = Date.now() - start;
161
+
162
+ const output = new TextDecoder().decode(stdout);
163
+ const errorOutput = new TextDecoder().decode(stderr);
164
+
165
+ // Write output to files
166
+ const suiteOutputFile = `${this.options.outputDir}/${suite.name}-output.txt`;
167
+ await Deno.writeTextFile(suiteOutputFile, output);
168
+
169
+ if (errorOutput) {
170
+ const suiteErrorFile = `${this.options.outputDir}/${suite.name}-errors.txt`;
171
+ await Deno.writeTextFile(suiteErrorFile, errorOutput);
172
+ }
173
+
174
+ // Print output in real-time if verbose
175
+ if (this.options.verbose) {
176
+ console.log(output);
177
+ if (errorOutput) {
178
+ console.error(errorOutput);
179
+ }
180
+ }
181
+
182
+ const passed = code === 0;
183
+ const status = passed ? "āœ… PASSED" : "āŒ FAILED";
184
+ const durationStr = `${duration}ms`;
185
+
186
+ console.log(` ${status} (${durationStr})`);
187
+
188
+ if (!passed && !this.options.verbose) {
189
+ console.log(" Error output:");
190
+ console.log(errorOutput);
191
+ }
192
+
193
+ return passed;
194
+ }
195
+
196
+ private async generateReports(results: Array<{ suite: string; passed: boolean; duration: number }>): Promise<void> {
197
+ console.log("\nšŸ“Š Generating test reports...");
198
+
199
+ // Generate coverage report if enabled
200
+ if (this.options.coverage) {
201
+ await this.generateCoverageReport();
202
+ }
203
+
204
+ // Generate JUnit XML report
205
+ await this.generateJUnitReport(results);
206
+
207
+ // Generate HTML report
208
+ await this.generateHTMLReport(results);
209
+
210
+ // Generate JSON report
211
+ await this.generateJSONReport(results);
212
+ }
213
+
214
+ private async generateCoverageReport(): Promise<void> {
215
+ const coverageDir = `${this.options.outputDir}/coverage`;
216
+
217
+ if (await exists(coverageDir)) {
218
+ console.log(" Generating coverage reports...");
219
+
220
+ // Generate HTML coverage report
221
+ const htmlCommand = new Deno.Command(Deno.execPath(), {
222
+ args: [
223
+ "coverage",
224
+ coverageDir,
225
+ "--html",
226
+ `--output=${this.options.outputDir}/coverage-html`,
227
+ ],
228
+ stdout: "piped",
229
+ stderr: "piped",
230
+ });
231
+
232
+ await htmlCommand.output();
233
+
234
+ // Generate LCOV coverage report
235
+ const lcovCommand = new Deno.Command(Deno.execPath(), {
236
+ args: [
237
+ "coverage",
238
+ coverageDir,
239
+ "--lcov",
240
+ `--output=${this.options.outputDir}/coverage.lcov`,
241
+ ],
242
+ stdout: "piped",
243
+ stderr: "piped",
244
+ });
245
+
246
+ await lcovCommand.output();
247
+
248
+ // Generate text coverage summary
249
+ const textCommand = new Deno.Command(Deno.execPath(), {
250
+ args: [
251
+ "coverage",
252
+ coverageDir,
253
+ "--detailed",
254
+ ],
255
+ stdout: "piped",
256
+ stderr: "piped",
257
+ });
258
+
259
+ const { stdout } = await textCommand.output();
260
+ const coverageSummary = new TextDecoder().decode(stdout);
261
+
262
+ await Deno.writeTextFile(
263
+ `${this.options.outputDir}/coverage-summary.txt`,
264
+ coverageSummary
265
+ );
266
+
267
+ console.log(" āœ… Coverage reports generated");
268
+ }
269
+ }
270
+
271
+ private async generateJUnitReport(results: Array<{ suite: string; passed: boolean; duration: number }>): Promise<void> {
272
+ const testsuites = results.map(result => {
273
+ const errors = result.passed ? 0 : 1;
274
+ const failures = result.passed ? 0 : 1;
275
+
276
+ return ` <testsuite name="${result.suite}" tests="1" errors="${errors}" failures="${failures}" time="${result.duration / 1000}">
277
+ <testcase name="${result.suite}-tests" classname="Claude-Flow.${result.suite}" time="${result.duration / 1000}">
278
+ ${!result.passed ? '<failure message="Test suite failed" type="TestFailure">Test suite execution failed</failure>' : ''}
279
+ </testcase>
280
+ </testsuite>`;
281
+ }).join('\n');
282
+
283
+ const totalTests = results.length;
284
+ const totalErrors = results.filter(r => !r.passed).length;
285
+ const totalFailures = totalErrors;
286
+ const totalTime = results.reduce((sum, r) => sum + r.duration, 0) / 1000;
287
+
288
+ const junit = `<?xml version="1.0" encoding="UTF-8"?>
289
+ <testsuites name="Claude-Flow" tests="${totalTests}" errors="${totalErrors}" failures="${totalFailures}" time="${totalTime}">
290
+ ${testsuites}
291
+ </testsuites>`;
292
+
293
+ await Deno.writeTextFile(`${this.options.outputDir}/junit.xml`, junit);
294
+ console.log(" āœ… JUnit XML report generated");
295
+ }
296
+
297
+ private async generateHTMLReport(results: Array<{ suite: string; passed: boolean; duration: number }>): Promise<void> {
298
+ const suiteRows = results.map(result => {
299
+ const status = result.passed ? "āœ… PASSED" : "āŒ FAILED";
300
+ const statusClass = result.passed ? "passed" : "failed";
301
+
302
+ return `
303
+ <tr class="${statusClass}">
304
+ <td>${result.suite}</td>
305
+ <td>${status}</td>
306
+ <td>${result.duration}ms</td>
307
+ </tr>`;
308
+ }).join('');
309
+
310
+ const totalTests = results.length;
311
+ const passedTests = results.filter(r => r.passed).length;
312
+ const failedTests = totalTests - passedTests;
313
+ const totalDuration = results.reduce((sum, r) => sum + r.duration, 0);
314
+ const timestamp = new Date().toISOString();
315
+
316
+ const html = `<!DOCTYPE html>
317
+ <html>
318
+ <head>
319
+ <title>Claude-Flow Test Report</title>
320
+ <style>
321
+ body { font-family: Arial, sans-serif; margin: 20px; }
322
+ .header { background: #f5f5f5; padding: 15px; border-radius: 5px; margin-bottom: 20px; }
323
+ .summary { display: flex; gap: 20px; margin-bottom: 20px; }
324
+ .metric { background: white; padding: 15px; border-radius: 5px; border: 1px solid #ddd; text-align: center; }
325
+ .metric h3 { margin: 0; color: #333; }
326
+ .metric .value { font-size: 24px; font-weight: bold; margin: 10px 0; }
327
+ .passed .value { color: #28a745; }
328
+ .failed .value { color: #dc3545; }
329
+ .total .value { color: #007bff; }
330
+ table { width: 100%; border-collapse: collapse; margin-top: 20px; }
331
+ th, td { padding: 12px; text-align: left; border-bottom: 1px solid #ddd; }
332
+ th { background-color: #f8f9fa; }
333
+ .passed { background-color: #d4edda; }
334
+ .failed { background-color: #f8d7da; }
335
+ .footer { margin-top: 30px; text-align: center; color: #666; }
336
+ </style>
337
+ </head>
338
+ <body>
339
+ <div class="header">
340
+ <h1>🧪 Claude-Flow Test Report</h1>
341
+ <p>Generated on: ${timestamp}</p>
342
+ </div>
343
+
344
+ <div class="summary">
345
+ <div class="metric total">
346
+ <h3>Total Tests</h3>
347
+ <div class="value">${totalTests}</div>
348
+ </div>
349
+ <div class="metric passed">
350
+ <h3>Passed</h3>
351
+ <div class="value">${passedTests}</div>
352
+ </div>
353
+ <div class="metric failed">
354
+ <h3>Failed</h3>
355
+ <div class="value">${failedTests}</div>
356
+ </div>
357
+ <div class="metric total">
358
+ <h3>Duration</h3>
359
+ <div class="value">${totalDuration}ms</div>
360
+ </div>
361
+ </div>
362
+
363
+ <table>
364
+ <thead>
365
+ <tr>
366
+ <th>Test Suite</th>
367
+ <th>Status</th>
368
+ <th>Duration</th>
369
+ </tr>
370
+ </thead>
371
+ <tbody>
372
+ ${suiteRows}
373
+ </tbody>
374
+ </table>
375
+
376
+ <div class="footer">
377
+ <p>Claude-Flow Test Suite - Advanced AI Agent Orchestration System</p>
378
+ </div>
379
+ </body>
380
+ </html>`;
381
+
382
+ await Deno.writeTextFile(`${this.options.outputDir}/report.html`, html);
383
+ console.log(" āœ… HTML report generated");
384
+ }
385
+
386
+ private async generateJSONReport(results: Array<{ suite: string; passed: boolean; duration: number }>): Promise<void> {
387
+ const report = {
388
+ timestamp: new Date().toISOString(),
389
+ total: results.length,
390
+ passed: results.filter(r => r.passed).length,
391
+ failed: results.filter(r => !r.passed).length,
392
+ duration: results.reduce((sum, r) => sum + r.duration, 0),
393
+ suites: results,
394
+ environment: {
395
+ deno: Deno.version.deno,
396
+ v8: Deno.version.v8,
397
+ typescript: Deno.version.typescript,
398
+ platform: Deno.build.os,
399
+ arch: Deno.build.arch,
400
+ },
401
+ options: this.options,
402
+ };
403
+
404
+ await Deno.writeTextFile(
405
+ `${this.options.outputDir}/report.json`,
406
+ JSON.stringify(report, null, 2)
407
+ );
408
+ console.log(" āœ… JSON report generated");
409
+ }
410
+
411
+ private printSummary(results: Array<{ suite: string; passed: boolean; duration: number }>, allPassed: boolean): void {
412
+ console.log("\n" + "=".repeat(50));
413
+ console.log("šŸ“Š TEST SUMMARY");
414
+ console.log("=".repeat(50));
415
+
416
+ const total = results.length;
417
+ const passed = results.filter(r => r.passed).length;
418
+ const failed = total - passed;
419
+ const totalDuration = results.reduce((sum, r) => sum + r.duration, 0);
420
+
421
+ console.log(`Total Suites: ${total}`);
422
+ console.log(`Passed: ${passed} āœ…`);
423
+ console.log(`Failed: ${failed} ${failed > 0 ? 'āŒ' : 'āœ…'}`);
424
+ console.log(`Total Duration: ${totalDuration}ms`);
425
+
426
+ if (this.options.coverage) {
427
+ console.log(`Coverage Report: ${this.options.outputDir}/coverage-html/index.html`);
428
+ }
429
+
430
+ console.log(`Detailed Report: ${this.options.outputDir}/report.html`);
431
+
432
+ const overallStatus = allPassed ? "āœ… ALL TESTS PASSED" : "āŒ SOME TESTS FAILED";
433
+ console.log(`\n${overallStatus}`);
434
+
435
+ if (!allPassed) {
436
+ console.log("\nFailed suites:");
437
+ results.filter(r => !r.passed).forEach(r => {
438
+ console.log(` - ${r.suite}`);
439
+ });
440
+ }
441
+ }
442
+ }
443
+
444
+ async function main(): Promise<void> {
445
+ const args = parseArgs(Deno.args, {
446
+ string: ["suites", "filter", "output-dir"],
447
+ boolean: [
448
+ "coverage",
449
+ "watch",
450
+ "parallel",
451
+ "verbose",
452
+ "fail-fast",
453
+ "update-snapshots",
454
+ "help"
455
+ ],
456
+ default: {
457
+ suites: "unit,integration,e2e",
458
+ coverage: true,
459
+ watch: false,
460
+ parallel: true,
461
+ verbose: false,
462
+ "fail-fast": false,
463
+ "update-snapshots": false,
464
+ "output-dir": "./tests/results",
465
+ },
466
+ alias: {
467
+ h: "help",
468
+ c: "coverage",
469
+ w: "watch",
470
+ p: "parallel",
471
+ v: "verbose",
472
+ f: "filter",
473
+ o: "output-dir",
474
+ },
475
+ });
476
+
477
+ if (args.help) {
478
+ console.log(`
479
+ 🧪 Claude-Flow Test Runner
480
+
481
+ USAGE:
482
+ test-runner.ts [OPTIONS]
483
+
484
+ OPTIONS:
485
+ --suites, -s Test suites to run (comma-separated)
486
+ Available: ${TEST_SUITES.map(s => s.name).join(", ")}
487
+ Default: unit,integration,e2e
488
+
489
+ --coverage, -c Generate coverage reports (default: true)
490
+ --watch, -w Watch mode for continuous testing
491
+ --parallel, -p Run tests in parallel (default: true)
492
+ --verbose, -v Verbose output
493
+ --fail-fast Stop on first failure
494
+ --filter, -f Filter tests by pattern
495
+ --output-dir, -o Output directory for reports (default: ./test-results)
496
+ --update-snapshots Update test snapshots
497
+ --help, -h Show this help
498
+
499
+ EXAMPLES:
500
+ # Run all tests with coverage
501
+ ./scripts/test-runner.ts
502
+
503
+ # Run only unit tests
504
+ ./scripts/test-runner.ts --suites unit
505
+
506
+ # Run tests with filter
507
+ ./scripts/test-runner.ts --filter "orchestrator"
508
+
509
+ # Run in watch mode
510
+ ./scripts/test-runner.ts --watch --suites unit
511
+
512
+ # Run without coverage
513
+ ./scripts/test-runner.ts --no-coverage
514
+ `);
515
+ return;
516
+ }
517
+
518
+ const options: TestOptions = {
519
+ suites: args.suites.split(",").map(s => s.trim()),
520
+ coverage: args.coverage,
521
+ watch: args.watch,
522
+ filter: args.filter,
523
+ parallel: args.parallel,
524
+ verbose: args.verbose,
525
+ outputDir: args["output-dir"],
526
+ failFast: args["fail-fast"],
527
+ updateSnapshots: args["update-snapshots"],
528
+ };
529
+
530
+ // Validate suites
531
+ const validSuites = TEST_SUITES.map(s => s.name);
532
+ const invalidSuites = options.suites.filter(s => !validSuites.includes(s));
533
+
534
+ if (invalidSuites.length > 0) {
535
+ console.error(`āŒ Invalid test suites: ${invalidSuites.join(", ")}`);
536
+ console.error(`Available suites: ${validSuites.join(", ")}`);
537
+ Deno.exit(1);
538
+ }
539
+
540
+ const runner = new TestRunner(options);
541
+
542
+ if (options.watch) {
543
+ console.log("šŸ‘€ Watch mode enabled - tests will re-run on file changes");
544
+
545
+ // Simple watch implementation
546
+ const watcher = Deno.watchFs(["./src", "./tests"], { recursive: true });
547
+
548
+ // Run tests initially
549
+ await runner.run();
550
+
551
+ for await (const event of watcher) {
552
+ if (event.kind === "modify" && event.paths.some(p => p.endsWith(".ts"))) {
553
+ console.log("\nšŸ”„ Files changed, re-running tests...");
554
+ await runner.run();
555
+ }
556
+ }
557
+ } else {
558
+ const success = await runner.run();
559
+ Deno.exit(success ? 0 : 1);
560
+ }
561
+ }
562
+
563
+ if (import.meta.main) {
564
+ main().catch(error => {
565
+ console.error("āŒ Test runner failed:", error);
566
+ Deno.exit(1);
567
+ });
568
+ }
@@ -0,0 +1,92 @@
1
+ #!/bin/bash
2
+ # Integration test for Claude-Flow Swarm Mode
3
+
4
+ echo "Claude-Flow Swarm Mode Integration Test"
5
+ echo "======================================="
6
+ echo
7
+
8
+ # Test 1: Binary exists
9
+ echo "Test 1: Checking binary files..."
10
+ if [ -f "./bin/claude-flow" ]; then
11
+ echo "āœ… claude-flow binary found"
12
+ else
13
+ echo "āŒ claude-flow binary not found"
14
+ exit 1
15
+ fi
16
+
17
+ if [ -f "./bin/claude-flow-swarm" ]; then
18
+ echo "āœ… claude-flow-swarm wrapper found"
19
+ else
20
+ echo "āŒ claude-flow-swarm wrapper not found"
21
+ exit 1
22
+ fi
23
+
24
+ # Test 2: Help command
25
+ echo -e "\nTest 2: Testing help command..."
26
+ if ./bin/claude-flow help swarm | grep -q "Claude Swarm Mode"; then
27
+ echo "āœ… Swarm help command works"
28
+ else
29
+ echo "āŒ Swarm help command failed"
30
+ exit 1
31
+ fi
32
+
33
+ # Test 3: Swarm listed in main help
34
+ echo -e "\nTest 3: Checking swarm in main help..."
35
+ if ./bin/claude-flow --help | grep -q "swarm"; then
36
+ echo "āœ… Swarm command listed in main help"
37
+ else
38
+ echo "āŒ Swarm command not listed in main help"
39
+ exit 1
40
+ fi
41
+
42
+ # Test 4: Standalone swarm dry-run
43
+ echo -e "\nTest 4: Testing standalone swarm dry-run..."
44
+ if ./bin/claude-flow-swarm "Test objective" --dry-run | grep -q "DRY RUN"; then
45
+ echo "āœ… Standalone swarm dry-run works"
46
+ else
47
+ echo "āŒ Standalone swarm dry-run failed"
48
+ exit 1
49
+ fi
50
+
51
+ # Test 5: Complex swarm configuration
52
+ echo -e "\nTest 5: Testing complex swarm configuration..."
53
+ OUTPUT=$(./bin/claude-flow-swarm "Complex test" --strategy research --max-agents 10 --coordinator --review --parallel --dry-run)
54
+ if echo "$OUTPUT" | grep -q "Strategy: research" && \
55
+ echo "$OUTPUT" | grep -q "Max Agents: 10" && \
56
+ echo "$OUTPUT" | grep -q "Coordinator: true" && \
57
+ echo "$OUTPUT" | grep -q "Review Mode: true" && \
58
+ echo "$OUTPUT" | grep -q "Parallel: true"; then
59
+ echo "āœ… Complex swarm configuration works"
60
+ else
61
+ echo "āŒ Complex swarm configuration failed"
62
+ echo "Output: $OUTPUT"
63
+ exit 1
64
+ fi
65
+
66
+ # Test 6: Check documentation files
67
+ echo -e "\nTest 6: Checking documentation..."
68
+ if [ -f "./docs/12-swarm.md" ]; then
69
+ echo "āœ… Swarm documentation found"
70
+ else
71
+ echo "āŒ Swarm documentation not found"
72
+ exit 1
73
+ fi
74
+
75
+ # Test 7: Check swarm demo script
76
+ echo -e "\nTest 7: Checking swarm demo script..."
77
+ if [ -f "./swarm-demo.ts" ]; then
78
+ echo "āœ… swarm-demo.ts found"
79
+ else
80
+ echo "āŒ swarm-demo.ts not found"
81
+ exit 1
82
+ fi
83
+
84
+ echo -e "\n======================================="
85
+ echo "āœ… All integration tests passed!"
86
+ echo
87
+ echo "Swarm mode is ready to use:"
88
+ echo " 1. ./bin/claude-flow swarm \"Your objective\" [options]"
89
+ echo " 2. ./bin/claude-flow-swarm \"Your objective\" [options]"
90
+ echo " 3. npx claude-flow swarm \"Your objective\" [options]"
91
+ echo
92
+ echo "For more info: ./bin/claude-flow help swarm"