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.
- package/package.json +9 -8
- package/scripts/.claude-flow/metrics/agent-metrics.json +1 -0
- package/scripts/.claude-flow/metrics/performance.json +9 -0
- package/scripts/.claude-flow/metrics/task-metrics.json +10 -0
- package/scripts/CLEANUP_OPTIMIZATION_REPORT.json +312 -0
- package/scripts/CLEANUP_PERFORMANCE_OPTIMIZATION.md +387 -0
- package/scripts/CLEANUP_QUICK_START.md +268 -0
- package/scripts/CLEANUP_TEST_RESULTS.md +205 -0
- package/scripts/README.md +339 -0
- package/scripts/ace-query.sh +384 -0
- package/scripts/agent-token-analysis.js +430 -0
- package/scripts/auto-setup.js +332 -0
- package/scripts/build/README.md +167 -0
- package/scripts/build/build-config.js +27 -0
- package/scripts/build/build-prompt-copier.sh +30 -0
- package/scripts/build/performance-monitor.js +869 -0
- package/scripts/build/prepare-publish.js +150 -0
- package/scripts/build/typescript-fixer.js +621 -0
- package/scripts/build/unified-builder.sh +428 -0
- package/scripts/build/update-bin-version.js +32 -0
- package/scripts/build/validate-agents.js +238 -0
- package/scripts/build-index.js +43 -0
- package/scripts/build-orchestrator.js +320 -0
- package/scripts/check-routing-stats.cjs +122 -0
- package/scripts/ci-validation.js +375 -0
- package/scripts/cleanup-blocking-coordination.sh +420 -0
- package/scripts/cleanup-idle-sessions.sh +59 -0
- package/scripts/collect-build-metrics.js +65 -0
- package/scripts/demo/README.md +79 -0
- package/scripts/demo/autoscaling-demo-simplified.js +963 -0
- package/scripts/demo/comprehensive-dashboard-test.js +693 -0
- package/scripts/demo/confidence-log.js +87 -0
- package/scripts/demo/confidence-report.js +82 -0
- package/scripts/demo/demo-multi-swarm-coordination.js +325 -0
- package/scripts/demo/demo-production-deployment.js +399 -0
- package/scripts/demo/demo-visualization-system.js +149 -0
- package/scripts/demo/performance-analysis.cjs +71 -0
- package/scripts/demo/performance-analysis.js +71 -0
- package/scripts/demo/test-autoscaling-demo.js +314 -0
- package/scripts/dependency-optimizer.js +349 -0
- package/scripts/dependency-security-assessment.js +331 -0
- package/scripts/deploy-sdk.sh +176 -0
- package/scripts/deployment-readiness-report.json +179 -0
- package/scripts/dev/README.md +264 -0
- package/scripts/dev/claude-flow-wrapper.sh +35 -0
- package/scripts/dev/claude-monitor.py +419 -0
- package/scripts/dev/claude-sparc.sh +562 -0
- package/scripts/dev/claude-wrapper.sh +17 -0
- package/scripts/dev/demo-phase3-compliance.js +172 -0
- package/scripts/dev/demo-task-system.ts +224 -0
- package/scripts/dev/deployment-validator.js +315 -0
- package/scripts/dev/spawn-claude-terminal.sh +32 -0
- package/scripts/dev/start-portal.sh +506 -0
- package/scripts/dev/start-web-ui.js +15 -0
- package/scripts/dev/stop-portal.sh +311 -0
- package/scripts/dev/validate-examples.ts +288 -0
- package/scripts/dev/validate-phase2.cjs +451 -0
- package/scripts/dev/validate-phase2.js +785 -0
- package/scripts/dev/validate-phase3.cjs +208 -0
- package/scripts/dev/validate-security-remediation.js +1 -0
- package/scripts/ecosystem.config.cjs +90 -0
- package/scripts/fix-js-extensions.js +167 -0
- package/scripts/generate-basic-types.js +73 -0
- package/scripts/generate-changelog.js +318 -0
- package/scripts/git-hooks/pre-commit.sh +143 -0
- package/scripts/health-checks.js +634 -0
- package/scripts/hook-wrapper.sh +54 -0
- package/scripts/install/README.md +375 -0
- package/scripts/install/REDIS_SETUP_VALIDATION.json +245 -0
- package/scripts/install/check-prerequisites.js +303 -0
- package/scripts/install/config-wizard.js +606 -0
- package/scripts/install/dependency-checker.js +385 -0
- package/scripts/install/health-check.js +765 -0
- package/scripts/install/install.js +256 -0
- package/scripts/install/installation-benchmark.js +461 -0
- package/scripts/install/quick-install.js +720 -0
- package/scripts/install/quick-start-wizard.js +295 -0
- package/scripts/install/redis-cli.js +289 -0
- package/scripts/install/redis-install-guides.md +407 -0
- package/scripts/install/redis-setup.js +559 -0
- package/scripts/install/redis-test.js +278 -0
- package/scripts/install/service-manager.js +672 -0
- package/scripts/install/setup.js +832 -0
- package/scripts/install/uninstall.js +526 -0
- package/scripts/install/update.js +461 -0
- package/scripts/install-pre-commit-hook.sh +127 -0
- package/scripts/legacy/README.md +272 -0
- package/scripts/legacy/batch-fix-ts.sh +54 -0
- package/scripts/legacy/build-migration.sh +105 -0
- package/scripts/legacy/build-monitor.js +209 -0
- package/scripts/legacy/build-with-filter.sh +84 -0
- package/scripts/legacy/build-workaround.sh +71 -0
- package/scripts/legacy/fix-ts-advanced.js +358 -0
- package/scripts/legacy/fix-ts-final.sh +50 -0
- package/scripts/legacy/fix-ts-targeted.sh +49 -0
- package/scripts/legacy/fix-typescript-errors.js +305 -0
- package/scripts/legacy/force-build.sh +63 -0
- package/scripts/legacy/optimize-performance.js +400 -0
- package/scripts/legacy/performance-monitor.js +263 -0
- package/scripts/legacy/performance-monitoring.js +532 -0
- package/scripts/legacy/performance-test-runner.js +645 -0
- package/scripts/legacy/quick-fix-ts.js +281 -0
- package/scripts/legacy/safe-build.sh +63 -0
- package/scripts/memory-monitor-coordinator.js +322 -0
- package/scripts/migrate-to-sdk.sh +520 -0
- package/scripts/migration/QUICK-START.md +189 -0
- package/scripts/migration/QUICK-START.md.backup-1760135091363 +189 -0
- package/scripts/migration/README.md +464 -0
- package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md +500 -0
- package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md.backup-1760135091348 +500 -0
- package/scripts/migration/UPDATE-PATHS-README.md +464 -0
- package/scripts/migration/UPDATE-PATHS-README.md.backup-1760135091337 +464 -0
- package/scripts/migration/example-patterns.json +19 -0
- package/scripts/migration/install-arm64.js +78 -0
- package/scripts/migration/install.js +83 -0
- package/scripts/migration/migrate-hooks.js +173 -0
- package/scripts/migration/migration-examples.ts +318 -0
- package/scripts/migration/reorganize-workspace.js +504 -0
- package/scripts/migration/test-update-paths.js +359 -0
- package/scripts/migration/update-paths.js +664 -0
- package/scripts/migration/validate-migration.js +647 -0
- package/scripts/monitor-loop.sh +65 -0
- package/scripts/monitor-memory.sh +47 -0
- package/scripts/monitor-migration.js +339 -0
- package/scripts/monitor.py +43 -0
- package/scripts/monitoring/README.md +178 -0
- package/scripts/monitoring/alert-monitor.sh +220 -0
- package/scripts/monitoring/analyze-resources.sh +199 -0
- package/scripts/monitoring/dashboards/rate-limiting-dashboard.json +211 -0
- package/scripts/monitoring/dynamic-monitor.sh +85 -0
- package/scripts/monitoring/launch-stability-test.sh +184 -0
- package/scripts/monitoring/monitor-test.sh +93 -0
- package/scripts/monitoring/pre-test-validation.sh +208 -0
- package/scripts/monitoring/quick-test-alerting.sh +118 -0
- package/scripts/monitoring/quick-test-rate-limiting.sh +206 -0
- package/scripts/monitoring/rate-limiting-monitor.sh +380 -0
- package/scripts/monitoring/resource-monitor.sh +126 -0
- package/scripts/monitoring/stability-monitor.js +429 -0
- package/scripts/monitoring/test-monitor-quick.sh +54 -0
- package/scripts/monitoring/view-alerts.sh +307 -0
- package/scripts/npm-metrics-collector.js +482 -0
- package/scripts/npm-package-validation.cjs +299 -0
- package/scripts/optimization/build-optimizer.js +438 -0
- package/scripts/optimization/config-validator.js +761 -0
- package/scripts/optimization/test-optimization.js +432 -0
- package/scripts/optimization/unified-activation.js +839 -0
- package/scripts/optimize-package-swarm.js +54 -0
- package/scripts/performance/ACTIVATION_COMMANDS.md +292 -0
- package/scripts/performance/sqlite-enhanced-activation.sh +583 -0
- package/scripts/performance/test-enhanced-backend.sh +504 -0
- package/scripts/performance-monitor.js +644 -0
- package/scripts/performance-test-runner.js +698 -0
- package/scripts/post-deployment-monitoring.js +350 -0
- package/scripts/post-edit-pipeline.js +2091 -0
- package/scripts/post-install-claude-md.js +78 -0
- package/scripts/postinstall.js +79 -0
- package/scripts/pre-publish-validation.cjs +212 -0
- package/scripts/pre-publish-validation.js +429 -0
- package/scripts/redis-lua/cleanup-blocking-coordination.lua +198 -0
- package/scripts/release-announcement.js +425 -0
- package/scripts/release-notification.js +248 -0
- package/scripts/release-rollback.js +376 -0
- package/scripts/release-validation.js +460 -0
- package/scripts/rollback-sdk.sh +66 -0
- package/scripts/run-production-validation.ts +590 -0
- package/scripts/run-stability-validation.sh +687 -0
- package/scripts/security/README.md +339 -0
- package/scripts/security/deployment-validation.cjs +279 -0
- package/scripts/security/envelope-encryption-confidence-report.cjs +422 -0
- package/scripts/security/install-git-hooks.sh +132 -0
- package/scripts/security/install-git-secrets.sh +295 -0
- package/scripts/security/rotate-api-keys.js +469 -0
- package/scripts/security/ruv-swarm-safe.js +74 -0
- package/scripts/security/security-audit.cjs +538 -0
- package/scripts/security/setup-redis-auth.sh +397 -0
- package/scripts/security/validate-envelope-encryption.cjs +340 -0
- package/scripts/security-scan.js +492 -0
- package/scripts/src/web/frontend/.claude-flow/metrics/agent-metrics.json +1 -0
- package/scripts/src/web/frontend/.claude-flow/metrics/performance.json +9 -0
- package/scripts/src/web/frontend/.claude-flow/metrics/task-metrics.json +10 -0
- package/scripts/switch-api.sh +158 -0
- package/scripts/sync-agents.js +290 -0
- package/scripts/test/50-agent-test.js +625 -0
- package/scripts/test/NEW_STABILITY_TEST_GUIDE.md +407 -0
- package/scripts/test/README.md +236 -0
- package/scripts/test/STABILITY_TEST_EXAMPLE.md +347 -0
- package/scripts/test/STABILITY_TEST_README.md +480 -0
- package/scripts/test/agent-worker.js +309 -0
- package/scripts/test/ai-coordination-test.js +650 -0
- package/scripts/test/ai-mesh-coordination-test.js +416 -0
- package/scripts/test/check-links.ts +274 -0
- package/scripts/test/check-performance-regression.ts +168 -0
- package/scripts/test/cli-agent-coordination-test.js +313 -0
- package/scripts/test/coordinator-multilingual-test.js +396 -0
- package/scripts/test/coordinator-transparency-demo.js +585 -0
- package/scripts/test/coverage-report.ts +692 -0
- package/scripts/test/generate-swarm-tests.js +633 -0
- package/scripts/test/integration-test-validation.cjs +253 -0
- package/scripts/test/load-test-swarm.js +576 -0
- package/scripts/test/mesh-coordination-zero-overlap-test.js +740 -0
- package/scripts/test/multilingual-hello-world-test.js +390 -0
- package/scripts/test/quick-multilingual-demo.js +464 -0
- package/scripts/test/real-agent-test.js +312 -0
- package/scripts/test/run-phase3-compliance-tests.js +427 -0
- package/scripts/test/run-stability-test-examples.sh +292 -0
- package/scripts/test/stability-results/stability-metrics.jsonl +83 -0
- package/scripts/test/stability-results/stability-test-report.json +128 -0
- package/scripts/test/stability-results/stability-test.log +1827 -0
- package/scripts/test/stability-test-50-agents.js +734 -0
- package/scripts/test/test-batch-tasks.ts +29 -0
- package/scripts/test/test-byzantine-resolution.js +246 -0
- package/scripts/test/test-claude-spawn-options.sh +63 -0
- package/scripts/test/test-cli-wizard.js +331 -0
- package/scripts/test/test-comprehensive.js +401 -0
- package/scripts/test/test-coordination-features.ts +238 -0
- package/scripts/test/test-fallback-systems.js +276 -0
- package/scripts/test/test-init-command.ts +302 -0
- package/scripts/test/test-mcp.ts +251 -0
- package/scripts/test/test-runner.ts +568 -0
- package/scripts/test/test-swarm-integration.sh +92 -0
- package/scripts/test/test-swarm.ts +142 -0
- package/scripts/test/validation-summary.ts +408 -0
- package/scripts/test-cleanup-performance.sh +416 -0
- package/scripts/test-dashboard-auth.cjs +203 -0
- package/scripts/test-docker-deployment.sh +207 -0
- package/scripts/test-npm-package.cjs +167 -0
- package/scripts/test-provider-routing.cjs +226 -0
- package/scripts/test-routing-telemetry.cjs +147 -0
- package/scripts/test-runner.cjs +154 -0
- package/scripts/test-zai-10k.cjs +81 -0
- package/scripts/test-zai-api.cjs +191 -0
- package/scripts/test-zai-diagnostic.cjs +151 -0
- package/scripts/test-zai-final.cjs +128 -0
- package/scripts/test-zai-with-env.cjs +85 -0
- package/scripts/utils/README.md +261 -0
- package/scripts/utils/clean-build-artifacts.sh +94 -0
- package/scripts/utils/cleanup-root.sh +69 -0
- package/scripts/utils/fix-cliffy-imports.js +307 -0
- package/scripts/utils/fix-duplicate-imports.js +114 -0
- package/scripts/utils/fix-error-handling.cjs +70 -0
- package/scripts/utils/fix-import-paths.js +104 -0
- package/scripts/utils/fix-imports.js +116 -0
- package/scripts/utils/fix-shebang.js +78 -0
- package/scripts/utils/fix-test-modules.js +27 -0
- package/scripts/utils/fix-timezone-issue-246.js +200 -0
- package/scripts/utils/fix-ts-comprehensive.py +182 -0
- package/scripts/utils/fix-ts-targeted-batch.js +250 -0
- package/scripts/utils/remove-benchmark-conflicts.sh +140 -0
- package/scripts/utils/simple-test-fixer.js +190 -0
- package/scripts/utils/validate-metrics-structure.cjs +144 -0
- package/scripts/validate-agent-hooks.js +506 -0
- package/scripts/validate-changelog.js +241 -0
- package/scripts/validate-coordination-cli.js +69 -0
- package/scripts/validate-coordination-toggle-integration.cjs +501 -0
- package/scripts/validate-docker-infrastructure.sh +502 -0
- package/scripts/validate-entry-points.js +300 -0
- package/scripts/validate-stage3-performance.ts +377 -0
- package/scripts/validate-template-bundling.js +180 -0
- package/scripts/validation/README.md +33 -0
- package/scripts/validation/acl-security-validation.cjs +214 -0
- package/scripts/validation/acl-security-validation.js +402 -0
- package/scripts/validation/byzantine-verification.js +407 -0
- package/scripts/validation/final-phase-2-consensus.cjs +219 -0
- package/scripts/validation/final-security-validation.js +791 -0
- package/scripts/validation/final-wasm-validation.cjs +840 -0
- package/scripts/validation/integration-test-analysis.js +105 -0
- package/scripts/validation/phase-0-comprehensive-validation.js +474 -0
- package/scripts/validation/phase-0-consensus-report.js +139 -0
- package/scripts/validation/phase-0-final-report.js +112 -0
- package/scripts/validation/phase-0-redis-consensus-report.js +129 -0
- package/scripts/validation/phase-0-validation-improved.js +490 -0
- package/scripts/validation/phase-0-validation-test.js +65 -0
- package/scripts/validation/phase-1-consensus-report.cjs +342 -0
- package/scripts/validation/phase-1-consensus-validation.cjs +551 -0
- package/scripts/validation/phase-1-consensus-validation.js +551 -0
- package/scripts/validation/phase-2-consensus-report.cjs +186 -0
- package/scripts/validation/phase-2-validation.cjs +171 -0
- package/scripts/validation/phase-2-validation.js +171 -0
- package/scripts/validation/phase-4-consensus-report.js +181 -0
- package/scripts/validation/phase-4-final-validation.js +351 -0
- package/scripts/validation/phase-5-consensus-report.cjs +113 -0
- package/scripts/validation/phase-5-consensus-report.js +113 -0
- package/scripts/validation/security-analysis.js +49 -0
- package/scripts/validation/security-validation.js +492 -0
- package/scripts/validation/simple-security-validation.js +464 -0
- package/scripts/verify-installation.js +112 -0
- package/scripts/verify-mcp-server.js +86 -0
- 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"
|