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,375 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CI/CD Validation Pipeline
4
+ *
5
+ * Comprehensive validation for continuous integration
6
+ * Runs all checks required before merging or publishing
7
+ */
8
+
9
+ import { execSync } from 'child_process';
10
+ import fs from 'fs/promises';
11
+ import path from 'path';
12
+ import { fileURLToPath } from 'url';
13
+
14
+ const __filename = fileURLToPath(import.meta.url);
15
+ const __dirname = path.dirname(__filename);
16
+ const rootDir = path.join(__dirname, '..');
17
+
18
+ class CIValidator {
19
+ constructor(options = {}) {
20
+ this.strict = options.strict || false;
21
+ this.skipTests = options.skipTests || false;
22
+ this.results = {
23
+ passed: [],
24
+ failed: [],
25
+ warnings: [],
26
+ skipped: []
27
+ };
28
+ this.startTime = Date.now();
29
+ }
30
+
31
+ async validate() {
32
+ console.log('🔍 CI/CD Validation Pipeline');
33
+ console.log('='.repeat(60));
34
+ console.log(`Mode: ${this.strict ? 'STRICT' : 'STANDARD'}`);
35
+ console.log('='.repeat(60));
36
+
37
+ const stages = [
38
+ { name: 'Environment', fn: () => this.validateEnvironment() },
39
+ { name: 'Dependencies', fn: () => this.validateDependencies() },
40
+ { name: 'Security', fn: () => this.validateSecurity() },
41
+ { name: 'Build', fn: () => this.validateBuild() },
42
+ { name: 'Tests', fn: () => this.validateTests(), skip: this.skipTests },
43
+ { name: 'Code Quality', fn: () => this.validateCodeQuality() },
44
+ { name: 'Package', fn: () => this.validatePackage() }
45
+ ];
46
+
47
+ for (const stage of stages) {
48
+ if (stage.skip) {
49
+ console.log(`\n⏭️ Skipping ${stage.name}`);
50
+ this.results.skipped.push(stage.name);
51
+ continue;
52
+ }
53
+
54
+ try {
55
+ await this.runStage(stage.name, stage.fn);
56
+ } catch (error) {
57
+ if (this.strict) {
58
+ console.error(`\n❌ Validation failed at ${stage.name}: ${error.message}`);
59
+ await this.generateReport();
60
+ process.exit(1);
61
+ } else {
62
+ this.results.warnings.push({ stage: stage.name, error: error.message });
63
+ }
64
+ }
65
+ }
66
+
67
+ await this.generateReport();
68
+ return this.results.failed.length === 0;
69
+ }
70
+
71
+ async runStage(name, fn) {
72
+ console.log(`\n📋 ${name}`);
73
+ console.log('-'.repeat(60));
74
+
75
+ const startTime = Date.now();
76
+ try {
77
+ await fn();
78
+ const duration = Date.now() - startTime;
79
+ this.results.passed.push({ stage: name, duration });
80
+ console.log(`✅ ${name} passed (${duration}ms)`);
81
+ } catch (error) {
82
+ const duration = Date.now() - startTime;
83
+ this.results.failed.push({ stage: name, error: error.message, duration });
84
+ throw error;
85
+ }
86
+ }
87
+
88
+ async validateEnvironment() {
89
+ const checks = [
90
+ { name: 'Node.js', cmd: 'node --version', match: /v(\d+)\./, min: 20 },
91
+ { name: 'npm', cmd: 'npm --version', match: /(\d+)\./, min: 9 }
92
+ ];
93
+
94
+ for (const check of checks) {
95
+ const output = this.runCommand(check.cmd);
96
+ const match = output.match(check.match);
97
+
98
+ if (match) {
99
+ const version = parseInt(match[1]);
100
+ if (version < check.min) {
101
+ throw new Error(`${check.name} version ${version} < ${check.min}`);
102
+ }
103
+ console.log(` ✓ ${check.name}: ${output.trim()}`);
104
+ }
105
+ }
106
+ }
107
+
108
+ async validateDependencies() {
109
+ // Check if node_modules exists
110
+ try {
111
+ await fs.access(path.join(rootDir, 'node_modules'));
112
+ console.log(' ✓ Dependencies installed');
113
+ } catch {
114
+ throw new Error('Dependencies not installed. Run npm install');
115
+ }
116
+
117
+ // Check for outdated dependencies
118
+ try {
119
+ const output = this.runCommand('npm outdated --json');
120
+ const outdated = JSON.parse(output || '{}');
121
+ const count = Object.keys(outdated).length;
122
+
123
+ if (count > 0) {
124
+ console.log(` ⚠️ ${count} outdated dependencies`);
125
+ this.results.warnings.push({ stage: 'Dependencies', message: `${count} outdated packages` });
126
+ } else {
127
+ console.log(' ✓ All dependencies up to date');
128
+ }
129
+ } catch {
130
+ console.log(' ✓ Dependency check completed');
131
+ }
132
+ }
133
+
134
+ async validateSecurity() {
135
+ // Run npm audit
136
+ try {
137
+ const output = this.runCommand('npm audit --json');
138
+ const audit = JSON.parse(output);
139
+ const vulnerabilities = audit.metadata?.vulnerabilities || {};
140
+
141
+ const critical = vulnerabilities.critical || 0;
142
+ const high = vulnerabilities.high || 0;
143
+ const moderate = vulnerabilities.moderate || 0;
144
+
145
+ if (critical > 0 || high > 0) {
146
+ throw new Error(`Found ${critical} critical and ${high} high vulnerabilities`);
147
+ }
148
+
149
+ if (moderate > 0) {
150
+ console.log(` ⚠️ ${moderate} moderate vulnerabilities`);
151
+ this.results.warnings.push({ stage: 'Security', message: `${moderate} moderate vulnerabilities` });
152
+ } else {
153
+ console.log(' ✓ No security vulnerabilities');
154
+ }
155
+ } catch (error) {
156
+ if (error.message.includes('vulnerabilities')) {
157
+ throw error;
158
+ }
159
+ // Audit command might fail if no package-lock.json
160
+ console.log(' ⚠️ Security audit skipped');
161
+ }
162
+
163
+ // Run security scan script if available
164
+ try {
165
+ await fs.access(path.join(rootDir, 'scripts/security-scan.js'));
166
+ console.log(' ✓ Security scan available');
167
+ } catch {
168
+ console.log(' ⚠️ Security scan script not found');
169
+ }
170
+ }
171
+
172
+ async validateBuild() {
173
+ console.log(' Building project...');
174
+
175
+ try {
176
+ this.runCommand('npm run build', { timeout: 300000 }); // 5 minute timeout
177
+ console.log(' ✓ Build successful');
178
+ } catch (error) {
179
+ throw new Error(`Build failed: ${error.message}`);
180
+ }
181
+
182
+ // Validate build output
183
+ const requiredFiles = [
184
+ '.claude-flow-novice/dist/src/index.js',
185
+ '.claude-flow-novice/dist/src/cli/main.js'
186
+ ];
187
+
188
+ for (const file of requiredFiles) {
189
+ try {
190
+ await fs.access(path.join(rootDir, file));
191
+ console.log(` ✓ ${file}`);
192
+ } catch {
193
+ throw new Error(`Build output missing: ${file}`);
194
+ }
195
+ }
196
+ }
197
+
198
+ async validateTests() {
199
+ if (this.skipTests) {
200
+ console.log(' ⏭️ Tests skipped');
201
+ return;
202
+ }
203
+
204
+ console.log(' Running tests...');
205
+
206
+ try {
207
+ // Run tests with CI configuration
208
+ this.runCommand('npm run test:ci', { timeout: 600000 }); // 10 minute timeout
209
+ console.log(' ✓ All tests passed');
210
+ } catch (error) {
211
+ if (this.strict) {
212
+ throw new Error(`Tests failed: ${error.message}`);
213
+ } else {
214
+ console.log(' ⚠️ Some tests failed');
215
+ this.results.warnings.push({ stage: 'Tests', message: 'Test failures detected' });
216
+ }
217
+ }
218
+ }
219
+
220
+ async validateCodeQuality() {
221
+ // Check if linting is configured
222
+ try {
223
+ await fs.access(path.join(rootDir, 'config/linting/.eslintrc.json'));
224
+ console.log(' ✓ ESLint configured');
225
+
226
+ try {
227
+ this.runCommand('npm run lint');
228
+ console.log(' ✓ Linting passed');
229
+ } catch (error) {
230
+ if (this.strict) {
231
+ throw new Error('Linting failed');
232
+ } else {
233
+ console.log(' ⚠️ Linting issues found');
234
+ this.results.warnings.push({ stage: 'Code Quality', message: 'Linting issues' });
235
+ }
236
+ }
237
+ } catch {
238
+ console.log(' ⚠️ ESLint not configured');
239
+ }
240
+
241
+ // Check formatting
242
+ try {
243
+ await fs.access(path.join(rootDir, 'config/linting/.prettierrc.json'));
244
+ console.log(' ✓ Prettier configured');
245
+ } catch {
246
+ console.log(' ⚠️ Prettier not configured');
247
+ }
248
+ }
249
+
250
+ async validatePackage() {
251
+ const packageJson = JSON.parse(
252
+ await fs.readFile(path.join(rootDir, 'package.json'), 'utf8')
253
+ );
254
+
255
+ const requiredFields = ['name', 'version', 'description', 'main', 'types', 'license'];
256
+ for (const field of requiredFields) {
257
+ if (!packageJson[field]) {
258
+ throw new Error(`package.json missing required field: ${field}`);
259
+ }
260
+ console.log(` ✓ ${field}: ${packageJson[field]}`);
261
+ }
262
+
263
+ // Validate entry points
264
+ if (packageJson.main) {
265
+ try {
266
+ await fs.access(path.join(rootDir, packageJson.main));
267
+ console.log(` ✓ Main entry point exists: ${packageJson.main}`);
268
+ } catch {
269
+ throw new Error(`Main entry point not found: ${packageJson.main}`);
270
+ }
271
+ }
272
+
273
+ // Validate bin files
274
+ if (packageJson.bin) {
275
+ const binFiles = typeof packageJson.bin === 'string'
276
+ ? [packageJson.bin]
277
+ : Object.values(packageJson.bin);
278
+
279
+ for (const binFile of binFiles) {
280
+ try {
281
+ await fs.access(path.join(rootDir, binFile));
282
+ console.log(` ✓ Binary exists: ${binFile}`);
283
+ } catch {
284
+ throw new Error(`Binary not found: ${binFile}`);
285
+ }
286
+ }
287
+ }
288
+ }
289
+
290
+ async generateReport() {
291
+ const duration = Date.now() - this.startTime;
292
+ const totalStages = this.results.passed.length + this.results.failed.length + this.results.skipped.length;
293
+
294
+ console.log('\n' + '='.repeat(60));
295
+ console.log('📊 VALIDATION REPORT');
296
+ console.log('='.repeat(60));
297
+
298
+ console.log(`\n⏱️ Total Duration: ${(duration / 1000).toFixed(2)}s`);
299
+ console.log(`✅ Passed: ${this.results.passed.length}/${totalStages}`);
300
+ console.log(`❌ Failed: ${this.results.failed.length}/${totalStages}`);
301
+ console.log(`⚠️ Warnings: ${this.results.warnings.length}`);
302
+ console.log(`⏭️ Skipped: ${this.results.skipped.length}`);
303
+
304
+ if (this.results.failed.length > 0) {
305
+ console.log('\n❌ FAILED STAGES:');
306
+ this.results.failed.forEach(f => {
307
+ console.log(` • ${f.stage}: ${f.error}`);
308
+ });
309
+ }
310
+
311
+ if (this.results.warnings.length > 0) {
312
+ console.log('\n⚠️ WARNINGS:');
313
+ this.results.warnings.forEach(w => {
314
+ console.log(` • ${w.stage}: ${w.message || w.error}`);
315
+ });
316
+ }
317
+
318
+ if (this.results.skipped.length > 0) {
319
+ console.log('\n⏭️ SKIPPED:');
320
+ this.results.skipped.forEach(s => console.log(` • ${s}`));
321
+ }
322
+
323
+ // Save report
324
+ const report = {
325
+ timestamp: new Date().toISOString(),
326
+ duration: `${(duration / 1000).toFixed(2)}s`,
327
+ mode: this.strict ? 'strict' : 'standard',
328
+ ...this.results
329
+ };
330
+
331
+ const reportPath = path.join(rootDir, '.claude-flow-novice/ci-report.json');
332
+ await fs.mkdir(path.dirname(reportPath), { recursive: true });
333
+ await fs.writeFile(reportPath, JSON.stringify(report, null, 2));
334
+ console.log(`\n📄 Report: .claude-flow-novice/ci-report.json`);
335
+
336
+ if (this.results.failed.length === 0) {
337
+ console.log('\n✅ CI VALIDATION PASSED');
338
+ } else {
339
+ console.log('\n❌ CI VALIDATION FAILED');
340
+ }
341
+ }
342
+
343
+ runCommand(command, options = {}) {
344
+ try {
345
+ return execSync(command, {
346
+ encoding: 'utf8',
347
+ cwd: rootDir,
348
+ stdio: 'pipe',
349
+ timeout: options.timeout || 120000,
350
+ ...options
351
+ });
352
+ } catch (error) {
353
+ throw new Error(error.message || 'Command failed');
354
+ }
355
+ }
356
+ }
357
+
358
+ // CLI Interface
359
+ async function main() {
360
+ const args = process.argv.slice(2);
361
+ const options = {
362
+ strict: args.includes('--strict'),
363
+ skipTests: args.includes('--skip-tests')
364
+ };
365
+
366
+ const validator = new CIValidator(options);
367
+ const success = await validator.validate();
368
+
369
+ process.exit(success ? 0 : 1);
370
+ }
371
+
372
+ main().catch(error => {
373
+ console.error('❌ Fatal error:', error);
374
+ process.exit(1);
375
+ });