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,460 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Release Validation Script
5
+ * Comprehensive pre-release validation to ensure package quality
6
+ */
7
+
8
+ import { execSync } from 'child_process';
9
+ import fs from 'fs';
10
+ import path from 'path';
11
+ import { fileURLToPath } from 'url';
12
+ import https from 'https';
13
+
14
+ const __filename = fileURLToPath(import.meta.url);
15
+ const __dirname = path.dirname(__filename);
16
+ const rootDir = path.join(__dirname, '..');
17
+
18
+ const packageJson = JSON.parse(fs.readFileSync(path.join(rootDir, 'package.json'), 'utf8'));
19
+ const version = packageJson.version;
20
+ const packageName = packageJson.name;
21
+
22
+ class ReleaseValidator {
23
+ constructor() {
24
+ this.errors = [];
25
+ this.warnings = [];
26
+ this.checks = [];
27
+ }
28
+
29
+ async runAllChecks() {
30
+ console.log(`šŸš€ Validating release for ${packageName}@${version}`);
31
+ console.log('='.repeat(50));
32
+
33
+ await this.validateVersionFormat();
34
+ await this.validateDependencies();
35
+ await this.validateTests();
36
+ await this.validateLinting();
37
+ await this.validateSecurity();
38
+ await this.validateChangelog();
39
+ await this.validateBuild();
40
+ await this.validateGitStatus();
41
+ await this.validatePackageJson();
42
+ await this.validateNPMRegistry();
43
+
44
+ this.generateReport();
45
+ }
46
+
47
+ addCheck(name, success, message, details = null) {
48
+ this.checks.push({ name, success, message, details });
49
+ if (!success) {
50
+ this.errors.push(message);
51
+ }
52
+ }
53
+
54
+ addWarning(message) {
55
+ this.warnings.push(message);
56
+ }
57
+
58
+ async validateVersionFormat() {
59
+ try {
60
+ const semverRegex = /^\d+\.\d+\.\d+(?:-[a-zA-Z0-9.-]+)?(?:\+[a-zA-Z0-9.-]+)?$/;
61
+ const isValid = semverRegex.test(version);
62
+
63
+ this.addCheck(
64
+ 'Version Format',
65
+ isValid,
66
+ isValid ? 'āœ… Version follows semver format' : `āŒ Invalid version format: ${version}`,
67
+ { version }
68
+ );
69
+ } catch (error) {
70
+ this.addCheck('Version Format', false, `āŒ Error validating version: ${error.message}`);
71
+ }
72
+ }
73
+
74
+ async validateDependencies() {
75
+ try {
76
+ // Check for outdated dependencies
77
+ try {
78
+ const outdated = execSync('npm outdated --json', {
79
+ encoding: 'utf8',
80
+ cwd: rootDir,
81
+ stdio: 'pipe'
82
+ });
83
+
84
+ if (outdated.trim()) {
85
+ const outdatedPackages = Object.keys(JSON.parse(outdated));
86
+ this.addWarning(`Outdated dependencies found: ${outdatedPackages.join(', ')}`);
87
+ this.addCheck('Dependencies', true, 'āš ļø Dependencies checked (some outdated)', { outdated: outdatedPackages });
88
+ } else {
89
+ this.addCheck('Dependencies', true, 'āœ… All dependencies up to date');
90
+ }
91
+ } catch (error) {
92
+ // npm outdated exits with code 1 when dependencies are outdated
93
+ if (error.stdout) {
94
+ const outdated = JSON.parse(error.stdout);
95
+ const outdatedPackages = Object.keys(outdated);
96
+ this.addWarning(`Outdated dependencies found: ${outdatedPackages.join(', ')}`);
97
+ this.addCheck('Dependencies', true, 'āš ļø Dependencies checked (some outdated)', { outdated: outdatedPackages });
98
+ } else {
99
+ throw error;
100
+ }
101
+ }
102
+
103
+ // Check for security vulnerabilities
104
+ try {
105
+ const audit = execSync('npm audit --json', {
106
+ encoding: 'utf8',
107
+ cwd: rootDir,
108
+ stdio: 'pipe'
109
+ });
110
+ const auditResult = JSON.parse(audit);
111
+
112
+ const vulns = auditResult.vulnerabilities || {};
113
+ const highVulns = Object.values(vulns).filter(v => v.severity === 'high' || v.severity === 'critical');
114
+
115
+ if (highVulns.length > 0) {
116
+ this.addCheck('Security Audit', false, `āŒ High/critical vulnerabilities found: ${highVulns.length}`, { vulnerabilities: highVulns });
117
+ } else {
118
+ this.addCheck('Security Audit', true, 'āœ… No high/critical vulnerabilities found');
119
+ }
120
+ } catch (error) {
121
+ this.addCheck('Security Audit', false, `āŒ Security audit failed: ${error.message}`);
122
+ }
123
+ } catch (error) {
124
+ this.addCheck('Dependencies', false, `āŒ Error validating dependencies: ${error.message}`);
125
+ }
126
+ }
127
+
128
+ async validateTests() {
129
+ try {
130
+ console.log('🧪 Running tests...');
131
+ const testOutput = execSync('npm test', {
132
+ encoding: 'utf8',
133
+ cwd: rootDir,
134
+ stdio: 'pipe'
135
+ });
136
+
137
+ // Check if tests passed (basic check - could be enhanced with test result parsing)
138
+ const passed = !testOutput.includes('FAIL') && !testOutput.includes('Error:');
139
+
140
+ this.addCheck(
141
+ 'Tests',
142
+ passed,
143
+ passed ? 'āœ… All tests passed' : 'āŒ Some tests failed',
144
+ { output: testOutput.substring(0, 500) + '...' }
145
+ );
146
+ } catch (error) {
147
+ this.addCheck('Tests', false, `āŒ Tests failed: ${error.message}`, { output: error.stdout || error.stderr });
148
+ }
149
+ }
150
+
151
+ async validateLinting() {
152
+ try {
153
+ console.log('šŸ” Running linting...');
154
+ const lintOutput = execSync('npm run lint', {
155
+ encoding: 'utf8',
156
+ cwd: rootDir,
157
+ stdio: 'pipe'
158
+ });
159
+
160
+ this.addCheck('Linting', true, 'āœ… Linting passed');
161
+ } catch (error) {
162
+ this.addCheck('Linting', false, `āŒ Linting failed: ${error.message}`, { output: error.stdout || error.stderr });
163
+ }
164
+ }
165
+
166
+ async validateSecurity() {
167
+ try {
168
+ console.log('šŸ”’ Running security checks...');
169
+
170
+ // Check for hardcoded secrets
171
+ const sensitivePatterns = [
172
+ /password\s*=\s*['"][^'"]+['"]/gi,
173
+ /api[_-]?key\s*=\s*['"][^'"]+['"]/gi,
174
+ /secret\s*=\s*['"][^'"]+['"]/gi,
175
+ /token\s*=\s*['"][^'"]+['"]/gi
176
+ ];
177
+
178
+ const sensitiveFiles = [];
179
+ const sourceFiles = this.getSourceFiles();
180
+
181
+ for (const file of sourceFiles) {
182
+ const content = fs.readFileSync(file, 'utf8');
183
+ for (const pattern of sensitivePatterns) {
184
+ if (pattern.test(content)) {
185
+ sensitiveFiles.push(file);
186
+ break;
187
+ }
188
+ }
189
+ }
190
+
191
+ if (sensitiveFiles.length > 0) {
192
+ this.addWarning(`Potential hardcoded secrets found in: ${sensitiveFiles.join(', ')}`);
193
+ this.addCheck('Security Scan', true, 'āš ļø Security scan completed with warnings', { sensitiveFiles });
194
+ } else {
195
+ this.addCheck('Security Scan', true, 'āœ… No obvious security issues found');
196
+ }
197
+ } catch (error) {
198
+ this.addCheck('Security Scan', false, `āŒ Security scan failed: ${error.message}`);
199
+ }
200
+ }
201
+
202
+ async validateChangelog() {
203
+ try {
204
+ console.log('šŸ“ Validating changelog...');
205
+ const changelogPath = path.join(rootDir, 'CHANGELOG.md');
206
+
207
+ if (!fs.existsSync(changelogPath)) {
208
+ this.addCheck('Changelog', false, 'āŒ CHANGELOG.md not found');
209
+ return;
210
+ }
211
+
212
+ const content = fs.readFileSync(changelogPath, 'utf8');
213
+
214
+ // Check if current version is mentioned in changelog
215
+ const versionMentioned = content.includes(`[${version}]`);
216
+
217
+ if (!versionMentioned) {
218
+ this.addWarning(`Version ${version} not found in CHANGELOG.md`);
219
+ this.addCheck('Changelog', true, 'āš ļø Changelog exists but version not mentioned', { version });
220
+ } else {
221
+ this.addCheck('Changelog', true, 'āœ… Changelog includes current version');
222
+ }
223
+
224
+ // Run changelog validation script
225
+ try {
226
+ execSync('node scripts/validate-changelog.js', {
227
+ encoding: 'utf8',
228
+ cwd: rootDir,
229
+ stdio: 'pipe'
230
+ });
231
+ this.addCheck('Changelog Format', true, 'āœ… Changelog format is valid');
232
+ } catch (error) {
233
+ this.addCheck('Changelog Format', false, `āŒ Changelog format invalid: ${error.message}`);
234
+ }
235
+ } catch (error) {
236
+ this.addCheck('Changelog', false, `āŒ Error validating changelog: ${error.message}`);
237
+ }
238
+ }
239
+
240
+ async validateBuild() {
241
+ try {
242
+ console.log('šŸ”Ø Testing build...');
243
+ const buildOutput = execSync('npm run build', {
244
+ encoding: 'utf8',
245
+ cwd: rootDir,
246
+ stdio: 'pipe'
247
+ });
248
+
249
+ // Check if dist directory was created
250
+ const distPath = path.join(rootDir, '.claude-flow-novice/dist');
251
+ const distExists = fs.existsSync(distPath);
252
+
253
+ this.addCheck(
254
+ 'Build',
255
+ distExists,
256
+ distExists ? 'āœ… Build completed successfully' : 'āŒ Build failed - no dist directory created',
257
+ { output: buildOutput.substring(0, 500) + '...' }
258
+ );
259
+ } catch (error) {
260
+ this.addCheck('Build', false, `āŒ Build failed: ${error.message}`, { output: error.stdout || error.stderr });
261
+ }
262
+ }
263
+
264
+ async validateGitStatus() {
265
+ try {
266
+ console.log('šŸ“‹ Checking git status...');
267
+ const status = execSync('git status --porcelain', {
268
+ encoding: 'utf8',
269
+ cwd: rootDir,
270
+ stdio: 'pipe'
271
+ });
272
+
273
+ const hasUncommittedChanges = status.trim().length > 0;
274
+
275
+ if (hasUncommittedChanges) {
276
+ this.addWarning('Uncommitted changes detected in git repository');
277
+ this.addCheck('Git Status', true, 'āš ļø Git status has uncommitted changes', { changes: status.split('\n').filter(Boolean) });
278
+ } else {
279
+ this.addCheck('Git Status', true, 'āœ… Working directory is clean');
280
+ }
281
+
282
+ // Check if current branch is main/master
283
+ const branch = execSync('git rev-parse --abbrev-ref HEAD', {
284
+ encoding: 'utf8',
285
+ cwd: rootDir,
286
+ stdio: 'pipe'
287
+ }).trim();
288
+
289
+ if (!['main', 'master'].includes(branch)) {
290
+ this.addWarning(`Not on main/master branch (current: ${branch})`);
291
+ this.addCheck('Git Branch', true, 'āš ļø Not on main branch', { branch });
292
+ } else {
293
+ this.addCheck('Git Branch', true, 'āœ… On main/master branch');
294
+ }
295
+ } catch (error) {
296
+ this.addCheck('Git Status', false, `āŒ Error checking git status: ${error.message}`);
297
+ }
298
+ }
299
+
300
+ async validatePackageJson() {
301
+ try {
302
+ const requiredFields = ['name', 'version', 'description', 'main', 'scripts'];
303
+ const missingFields = requiredFields.filter(field => !packageJson[field]);
304
+
305
+ if (missingFields.length > 0) {
306
+ this.addCheck('Package.json', false, `āŒ Missing required fields: ${missingFields.join(', ')}`);
307
+ } else {
308
+ this.addCheck('Package.json', true, 'āœ… package.json has all required fields');
309
+ }
310
+
311
+ // Check if version in package.json matches tag (if exists)
312
+ try {
313
+ const tags = execSync('git tag --list --points-at HEAD', {
314
+ encoding: 'utf8',
315
+ cwd: rootDir,
316
+ stdio: 'pipe'
317
+ }).trim();
318
+
319
+ if (tags) {
320
+ const tagList = tags.split('\n');
321
+ const versionTag = tagList.find(tag => tag === `v${version}`);
322
+
323
+ if (versionTag) {
324
+ this.addCheck('Version Tag', true, 'āœ… Git tag matches package version');
325
+ } else {
326
+ this.addWarning(`No git tag v${version} found for current commit`);
327
+ this.addCheck('Version Tag', true, 'āš ļø No matching git tag found', { version, tags: tagList });
328
+ }
329
+ }
330
+ } catch (error) {
331
+ // No tags found - that's okay
332
+ }
333
+ } catch (error) {
334
+ this.addCheck('Package.json', false, `āŒ Error validating package.json: ${error.message}`);
335
+ }
336
+ }
337
+
338
+ async validateNPMRegistry() {
339
+ try {
340
+ console.log('šŸ“¦ Checking NPM registry...');
341
+
342
+ // Check if package name is available on NPM (for new packages)
343
+ return new Promise((resolve) => {
344
+ const url = `https://registry.npmjs.org/${packageName}`;
345
+
346
+ https.get(url, (res) => {
347
+ if (res.statusCode === 200) {
348
+ // Package exists
349
+ this.addCheck('NPM Registry', true, 'āœ… Package exists on NPM registry');
350
+ resolve();
351
+ } else if (res.statusCode === 404) {
352
+ // Package doesn't exist (new package)
353
+ this.addCheck('NPM Registry', true, 'āœ… Package name is available on NPM');
354
+ resolve();
355
+ } else {
356
+ this.addCheck('NPM Registry', false, `āŒ Unexpected NPM registry response: ${res.statusCode}`);
357
+ resolve();
358
+ }
359
+ }).on('error', (error) => {
360
+ this.addCheck('NPM Registry', false, `āŒ Error checking NPM registry: ${error.message}`);
361
+ resolve();
362
+ });
363
+ });
364
+ } catch (error) {
365
+ this.addCheck('NPM Registry', false, `āŒ Error validating NPM registry: ${error.message}`);
366
+ }
367
+ }
368
+
369
+ getSourceFiles() {
370
+ const extensions = ['.js', '.ts', '.jsx', '.tsx', '.json'];
371
+ const sourceFiles = [];
372
+
373
+ function scanDirectory(dir) {
374
+ const files = fs.readdirSync(dir);
375
+
376
+ for (const file of files) {
377
+ const fullPath = path.join(dir, file);
378
+ const stat = fs.statSync(fullPath);
379
+
380
+ if (stat.isDirectory() && !file.startsWith('.') && file !== 'node_modules') {
381
+ scanDirectory(fullPath);
382
+ } else if (stat.isFile() && extensions.some(ext => file.endsWith(ext))) {
383
+ sourceFiles.push(fullPath);
384
+ }
385
+ }
386
+ }
387
+
388
+ scanDirectory(rootDir);
389
+ return sourceFiles;
390
+ }
391
+
392
+ generateReport() {
393
+ console.log('\nšŸ“Š Release Validation Report');
394
+ console.log('='.repeat(50));
395
+
396
+ // Summary
397
+ const passed = this.checks.filter(c => c.success).length;
398
+ const total = this.checks.length;
399
+ const criticalErrors = this.errors.length;
400
+
401
+ console.log(`\nSummary: ${passed}/${total} checks passed`);
402
+
403
+ if (criticalErrors > 0) {
404
+ console.log(`āŒ ${criticalErrors} critical errors found`);
405
+ }
406
+
407
+ if (this.warnings.length > 0) {
408
+ console.log(`āš ļø ${this.warnings.length} warnings found`);
409
+ }
410
+
411
+ // Detailed results
412
+ console.log('\nDetailed Results:');
413
+ console.log('-'.repeat(30));
414
+
415
+ this.checks.forEach(check => {
416
+ const icon = check.success ? 'āœ…' : 'āŒ';
417
+ console.log(`${icon} ${check.name}: ${check.message}`);
418
+
419
+ if (check.details) {
420
+ console.log(` Details: ${JSON.stringify(check.details, null, 2).substring(0, 200)}...`);
421
+ }
422
+ });
423
+
424
+ // Warnings
425
+ if (this.warnings.length > 0) {
426
+ console.log('\nāš ļø Warnings:');
427
+ this.warnings.forEach(warning => {
428
+ console.log(` • ${warning}`);
429
+ });
430
+ }
431
+
432
+ // Final recommendation
433
+ console.log('\n' + '='.repeat(50));
434
+
435
+ if (criticalErrors > 0) {
436
+ console.log('🚫 RELEASE NOT READY');
437
+ console.log('Fix critical errors before releasing.');
438
+ process.exit(1);
439
+ } else if (this.warnings.length > 0) {
440
+ console.log('āš ļø RELEASE READY WITH WARNINGS');
441
+ console.log('Consider addressing warnings for best quality.');
442
+ process.exit(0);
443
+ } else {
444
+ console.log('āœ… RELEASE READY');
445
+ console.log('All checks passed. Ready to release!');
446
+ process.exit(0);
447
+ }
448
+ }
449
+ }
450
+
451
+ // CLI Interface
452
+ async function main() {
453
+ const validator = new ReleaseValidator();
454
+ await validator.runAllChecks();
455
+ }
456
+
457
+ main().catch(error => {
458
+ console.error('āŒ Release validation failed:', error);
459
+ process.exit(1);
460
+ });
@@ -0,0 +1,66 @@
1
+ #!/bin/bash
2
+
3
+ # Claude Agent SDK - Rollback Script
4
+ # Instant rollback of SDK integration
5
+
6
+ set -e
7
+
8
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
10
+ BACKUP_DIR="$PROJECT_ROOT/.sdk-backup"
11
+ LOG_FILE="$PROJECT_ROOT/sdk-rollback.log"
12
+
13
+ # Colors
14
+ RED='\033[0;31m'
15
+ GREEN='\033[0;32m'
16
+ YELLOW='\033[1;33m'
17
+ BLUE='\033[0;34m'
18
+ NC='\033[0m'
19
+
20
+ log() {
21
+ echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" | tee -a "$LOG_FILE"
22
+ }
23
+
24
+ error() {
25
+ echo -e "${RED}[ERROR]${NC} $1" | tee -a "$LOG_FILE"
26
+ }
27
+
28
+ success() {
29
+ echo -e "${GREEN}[SUCCESS]${NC} $1" | tee -a "$LOG_FILE"
30
+ }
31
+
32
+ echo "=== SDK Rollback Log ===" > "$LOG_FILE"
33
+ log "Starting SDK rollback..."
34
+
35
+ # Disable SDK in environment
36
+ log "Disabling SDK integration..."
37
+ if [ -f "$PROJECT_ROOT/.env" ]; then
38
+ sed -i.bak '/^# Claude Agent SDK Configuration/,/^$/d' "$PROJECT_ROOT/.env"
39
+ sed -i.bak '/^ENABLE_SDK/d' "$PROJECT_ROOT/.env"
40
+ sed -i.bak '/^SDK_/d' "$PROJECT_ROOT/.env"
41
+ success "SDK environment variables removed"
42
+ fi
43
+
44
+ # Restore backup if needed
45
+ if [ -f "$BACKUP_DIR/.env.backup" ]; then
46
+ log "Restoring environment from backup..."
47
+ cp "$BACKUP_DIR/.env.backup" "$PROJECT_ROOT/.env"
48
+ success "Environment restored"
49
+ fi
50
+
51
+ success "Rollback complete!"
52
+
53
+ cat <<EOF
54
+
55
+ ╔══════════════════════════════════════════════════════════════╗
56
+ ā•‘ SDK Rollback Successful ā•‘
57
+ ā•šā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•
58
+
59
+ āœ… SDK Integration: DISABLED
60
+ āœ… System: Restored to pre-SDK state
61
+
62
+ šŸ“ Rollback log: $LOG_FILE
63
+
64
+ EOF
65
+
66
+ log "Rollback complete. System restored."