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,376 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Release Rollback Script
5
+ * Provides rollback functionality for failed releases
6
+ */
7
+
8
+ import { execSync } from 'child_process';
9
+ import fs from 'fs';
10
+ import path from 'path';
11
+ import { fileURLToPath } from 'url';
12
+
13
+ const __filename = fileURLToPath(import.meta.url);
14
+ const __dirname = path.dirname(__filename);
15
+ const rootDir = path.join(__dirname, '..');
16
+
17
+ const packageJson = JSON.parse(fs.readFileSync(path.join(rootDir, 'package.json'), 'utf8'));
18
+ const currentVersion = packageJson.version;
19
+ const packageName = packageJson.name;
20
+
21
+ class ReleaseRollback {
22
+ constructor() {
23
+ this.packageName = packageName;
24
+ this.currentVersion = currentVersion;
25
+ this.rollbackDataPath = path.join(rootDir, '.rollback-data.json');
26
+ }
27
+
28
+ async rollback(options = {}) {
29
+ console.log(`🔄 Rolling back ${this.packageName}@${this.currentVersion}`);
30
+ console.log('='.repeat(50));
31
+
32
+ const { version, force, dryRun } = options;
33
+
34
+ try {
35
+ // Save rollback data before proceeding
36
+ await this.saveRollbackData();
37
+
38
+ if (dryRun) {
39
+ console.log('🔍 DRY RUN MODE - No changes will be made');
40
+ }
41
+
42
+ // Determine target version
43
+ const targetVersion = version || await this.getPreviousVersion();
44
+ if (!targetVersion) {
45
+ throw new Error('No previous version found to rollback to');
46
+ }
47
+
48
+ console.log(`📦 Rolling back to version: ${targetVersion}`);
49
+
50
+ // Validate rollback
51
+ if (!force) {
52
+ await this.validateRollback(targetVersion);
53
+ }
54
+
55
+ if (!dryRun) {
56
+ // Perform rollback steps
57
+ await this.rollbackPackageVersion(targetVersion);
58
+ await this.rollbackGitState(targetVersion);
59
+ await this.rollbackNPM(targetVersion);
60
+ await this.cleanupRollback(targetVersion);
61
+ } else {
62
+ console.log('✅ Dry run completed - no changes made');
63
+ }
64
+
65
+ console.log(`✅ Rollback to ${targetVersion} completed successfully`);
66
+
67
+ } catch (error) {
68
+ console.error(`❌ Rollback failed: ${error.message}`);
69
+
70
+ // Attempt to restore state
71
+ if (!dryRun) {
72
+ await this.restoreRollbackData();
73
+ }
74
+
75
+ process.exit(1);
76
+ }
77
+ }
78
+
79
+ async saveRollbackData() {
80
+ try {
81
+ const rollbackData = {
82
+ timestamp: new Date().toISOString(),
83
+ currentVersion: this.currentVersion,
84
+ packageJson: packageJson,
85
+ gitState: {
86
+ branch: execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf8', cwd: rootDir }).trim(),
87
+ commit: execSync('git rev-parse HEAD', { encoding: 'utf8', cwd: rootDir }).trim(),
88
+ status: execSync('git status --porcelain', { encoding: 'utf8', cwd: rootDir }).trim()
89
+ }
90
+ };
91
+
92
+ fs.writeFileSync(this.rollbackDataPath, JSON.stringify(rollbackData, null, 2), 'utf8');
93
+ console.log('✅ Rollback data saved');
94
+ } catch (error) {
95
+ console.warn('⚠️ Could not save rollback data:', error.message);
96
+ }
97
+ }
98
+
99
+ async restoreRollbackData() {
100
+ try {
101
+ if (!fs.existsSync(this.rollbackDataPath)) {
102
+ console.log('⚠️ No rollback data found');
103
+ return;
104
+ }
105
+
106
+ const rollbackData = JSON.parse(fs.readFileSync(this.rollbackDataPath, 'utf8'));
107
+
108
+ // Restore package.json
109
+ fs.writeFileSync(
110
+ path.join(rootDir, 'package.json'),
111
+ JSON.stringify(rollbackData.packageJson, null, 2),
112
+ 'utf8'
113
+ );
114
+
115
+ console.log('✅ Rollback data restored');
116
+ } catch (error) {
117
+ console.warn('⚠️ Could not restore rollback data:', error.message);
118
+ }
119
+ }
120
+
121
+ async getPreviousVersion() {
122
+ try {
123
+ // Get all git tags
124
+ const tags = execSync('git tag --list --sort=-version:refname', {
125
+ encoding: 'utf8',
126
+ cwd: rootDir
127
+ }).trim().split('\n');
128
+
129
+ // Filter version tags and find the one before current
130
+ const versionTags = tags.filter(tag => tag.startsWith('v')).map(tag => tag.substring(1));
131
+ const currentIndex = versionTags.indexOf(this.currentVersion);
132
+
133
+ if (currentIndex > 0) {
134
+ return versionTags[currentIndex - 1];
135
+ }
136
+
137
+ // If current version not found, return the latest tag
138
+ return versionTags[0];
139
+ } catch (error) {
140
+ console.warn('⚠️ Could not determine previous version:', error.message);
141
+ return null;
142
+ }
143
+ }
144
+
145
+ async validateRollback(targetVersion) {
146
+ console.log('🔍 Validating rollback...');
147
+
148
+ // Check if target version tag exists
149
+ try {
150
+ execSync(`git rev-parse v${targetVersion}`, {
151
+ encoding: 'utf8',
152
+ cwd: rootDir,
153
+ stdio: 'pipe'
154
+ });
155
+ console.log('✅ Target version tag exists');
156
+ } catch (error) {
157
+ throw new Error(`Git tag v${targetVersion} not found`);
158
+ }
159
+
160
+ // Check if target version exists on NPM
161
+ try {
162
+ const response = await fetch(`https://registry.npmjs.org/${this.packageName}/${targetVersion}`);
163
+ if (response.status !== 200) {
164
+ console.warn(`⚠️ Version ${targetVersion} not found on NPM registry`);
165
+ } else {
166
+ console.log('✅ Target version exists on NPM');
167
+ }
168
+ } catch (error) {
169
+ console.warn('⚠️ Could not verify NPM version:', error.message);
170
+ }
171
+
172
+ // Check for uncommitted changes
173
+ const status = execSync('git status --porcelain', {
174
+ encoding: 'utf8',
175
+ cwd: rootDir
176
+ }).trim();
177
+
178
+ if (status) {
179
+ throw new Error('Working directory has uncommitted changes. Commit or stash them first.');
180
+ }
181
+
182
+ console.log('✅ Rollback validation passed');
183
+ }
184
+
185
+ async rollbackPackageVersion(targetVersion) {
186
+ console.log(`📦 Rolling back package version to ${targetVersion}...`);
187
+
188
+ try {
189
+ // Update package.json version
190
+ const updatedPackageJson = { ...packageJson, version: targetVersion };
191
+ fs.writeFileSync(
192
+ path.join(rootDir, 'package.json'),
193
+ JSON.stringify(updatedPackageJson, null, 2),
194
+ 'utf8'
195
+ );
196
+
197
+ // Rebuild with target version
198
+ execSync('npm run build', { encoding: 'utf8', cwd: rootDir, stdio: 'pipe' });
199
+ console.log('✅ Package version rolled back');
200
+ } catch (error) {
201
+ throw new Error(`Failed to rollback package version: ${error.message}`);
202
+ }
203
+ }
204
+
205
+ async rollbackGitState(targetVersion) {
206
+ console.log(`🔄 Rolling back git state to v${targetVersion}...`);
207
+
208
+ try {
209
+ // Checkout the target tag
210
+ execSync(`git checkout v${targetVersion}`, {
211
+ encoding: 'utf8',
212
+ cwd: rootDir,
213
+ stdio: 'pipe'
214
+ });
215
+
216
+ console.log('✅ Git state rolled back');
217
+ } catch (error) {
218
+ throw new Error(`Failed to rollback git state: ${error.message}`);
219
+ }
220
+ }
221
+
222
+ async rollbackNPM(targetVersion) {
223
+ console.log(`📦 Checking NPM rollback for v${targetVersion}...`);
224
+
225
+ try {
226
+ // Note: NPM doesn't allow unpublishing versions older than 24 hours
227
+ // This function provides guidance for NPM rollback scenarios
228
+
229
+ console.log('ℹ️ NPM Rollback Information:');
230
+ console.log(' • NPM does not allow unpublishing versions older than 24 hours');
231
+ console.log(' • The package.json version has been rolled back locally');
232
+ console.log(' • To republish the previous version, use: npm publish --tag latest');
233
+ console.log(' • To deprecate the problematic version, use: npm deprecate <package>@<version>');
234
+
235
+ // If the problematic version is recent, provide unpublish option
236
+ const canUnpublish = await this.canUnpublishVersion(this.currentVersion);
237
+ if (canUnpublish) {
238
+ console.log(` • Version ${this.currentVersion} can be unpublished: npm unpublish ${this.packageName}@${this.currentVersion}`);
239
+ }
240
+
241
+ console.log('✅ NPM rollback guidance provided');
242
+ } catch (error) {
243
+ console.warn('⚠️ Could not complete NPM rollback:', error.message);
244
+ }
245
+ }
246
+
247
+ async canUnpublishVersion(version) {
248
+ try {
249
+ // Check version age on NPM
250
+ const response = await fetch(`https://registry.npmjs.org/${this.packageName}`);
251
+ const data = await response.json();
252
+ const versionData = data.time[version];
253
+
254
+ if (versionData) {
255
+ const publishTime = new Date(versionData);
256
+ const now = new Date();
257
+ const hoursDiff = (now - publishTime) / (1000 * 60 * 60);
258
+
259
+ return hoursDiff < 24;
260
+ }
261
+
262
+ return false;
263
+ } catch (error) {
264
+ return false;
265
+ }
266
+ }
267
+
268
+ async cleanupRollback(targetVersion) {
269
+ console.log('🧹 Cleaning up after rollback...');
270
+
271
+ try {
272
+ // Clean build artifacts
273
+ execSync('npm run clean', { encoding: 'utf8', cwd: rootDir, stdio: 'pipe' });
274
+
275
+ // Remove rollback data
276
+ if (fs.existsSync(this.rollbackDataPath)) {
277
+ fs.unlinkSync(this.rollbackDataPath);
278
+ }
279
+
280
+ console.log('✅ Cleanup completed');
281
+ } catch (error) {
282
+ console.warn('⚠️ Cleanup warning:', error.message);
283
+ }
284
+ }
285
+
286
+ listRollbackOptions() {
287
+ console.log(`📋 Available rollback options for ${this.packageName}`);
288
+ console.log('='.repeat(50));
289
+
290
+ try {
291
+ const tags = execSync('git tag --list --sort=-version:refname', {
292
+ encoding: 'utf8',
293
+ cwd: rootDir
294
+ }).trim().split('\n');
295
+
296
+ const versionTags = tags.filter(tag => tag.startsWith('v'));
297
+
298
+ console.log('\n📦 Available version tags:');
299
+ versionTags.forEach((tag, index) => {
300
+ const isCurrent = tag === `v${this.currentVersion}`;
301
+ const marker = isCurrent ? ' (current)' : '';
302
+ console.log(` ${index + 1}. ${tag}${marker}`);
303
+ });
304
+
305
+ console.log('\n💡 Rollback commands:');
306
+ console.log(` node scripts/release-rollback.js --version <version>`);
307
+ console.log(` node scripts/release-rollback.js --version ${versionTags[1] || 'previous'}`);
308
+ console.log(' node scripts/release-rollback.js --dry-run # Preview rollback');
309
+
310
+ } catch (error) {
311
+ console.error('❌ Could not list rollback options:', error.message);
312
+ }
313
+ }
314
+ }
315
+
316
+ // CLI Interface
317
+ async function main() {
318
+ const args = process.argv.slice(2);
319
+ const options = {};
320
+
321
+ // Parse arguments
322
+ for (let i = 0; i < args.length; i++) {
323
+ const arg = args[i];
324
+ switch (arg) {
325
+ case '--version':
326
+ case '-v':
327
+ options.version = args[++i];
328
+ break;
329
+ case '--force':
330
+ case '-f':
331
+ options.force = true;
332
+ break;
333
+ case '--dry-run':
334
+ case '-d':
335
+ options.dryRun = true;
336
+ break;
337
+ case '--list':
338
+ case '-l':
339
+ const roller = new ReleaseRollback();
340
+ roller.listRollbackOptions();
341
+ return;
342
+ case '--help':
343
+ case '-h':
344
+ console.log(`
345
+ Release Rollback Tool
346
+
347
+ Usage: node release-rollback.js [options]
348
+
349
+ Options:
350
+ --version, -v <version> Target version to rollback to
351
+ --force, -f Skip validation prompts
352
+ --dry-run, -d Preview rollback without making changes
353
+ --list, -l List available rollback options
354
+ --help, -h Show this help message
355
+
356
+ Examples:
357
+ node release-rollback.js --version 1.2.3
358
+ node release-rollback.js --version 1.2.3 --force
359
+ node release-rollback.js --dry-run
360
+ node release-rollback.js --list
361
+ `);
362
+ return;
363
+ default:
364
+ console.error(`Unknown option: ${arg}`);
365
+ process.exit(1);
366
+ }
367
+ }
368
+
369
+ const roller = new ReleaseRollback();
370
+ await roller.rollback(options);
371
+ }
372
+
373
+ main().catch(error => {
374
+ console.error('❌ Rollback failed:', error);
375
+ process.exit(1);
376
+ });