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,504 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * @fileoverview Automated workspace reorganization script with git history preservation
5
+ * @module scripts/migration/reorganize-workspace
6
+ *
7
+ * Features:
8
+ * - Git history preservation via git mv
9
+ * - Dry-run mode for safe planning
10
+ * - Automatic backup creation with timestamps
11
+ * - Rollback capability
12
+ * - Comprehensive logging
13
+ * - Progress reporting
14
+ */
15
+
16
+ import fs from 'fs';
17
+ import path from 'path';
18
+ import { execSync } from 'child_process';
19
+ import { fileURLToPath } from 'url';
20
+
21
+ const __filename = fileURLToPath(import.meta.url);
22
+ const __dirname = path.dirname(__filename);
23
+
24
+ class WorkspaceReorganizer {
25
+ constructor(options = {}) {
26
+ this.dryRun = options.dryRun || false;
27
+ this.verbose = options.verbose || false;
28
+ this.rollback = options.rollback || false;
29
+ this.rootDir = path.resolve(__dirname, '../..');
30
+ this.timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5);
31
+ this.logFile = path.join(this.rootDir, '.artifacts', 'logs', `migration-${this.timestamp}.log`);
32
+ this.backupFile = path.join(this.rootDir, '.artifacts', 'backups', `workspace-backup-${this.timestamp}.json`);
33
+ this.operations = [];
34
+ this.errors = [];
35
+ this.stats = {
36
+ planned: 0,
37
+ completed: 0,
38
+ failed: 0,
39
+ skipped: 0
40
+ };
41
+
42
+ // Migration rules
43
+ this.migrationRules = [
44
+ {
45
+ pattern: /^test-.*\.(js|mjs|cjs|ts)$/,
46
+ destination: 'tests/manual/',
47
+ description: 'Manual test files'
48
+ },
49
+ {
50
+ pattern: /^.*-validation\.(js|mjs|cjs|ts)$/,
51
+ destination: 'scripts/validation/',
52
+ description: 'Validation scripts'
53
+ },
54
+ {
55
+ pattern: /^.*-consensus-report\.(js|mjs|cjs|ts)$/,
56
+ destination: 'scripts/validation/',
57
+ description: 'Consensus report scripts'
58
+ },
59
+ {
60
+ pattern: /^.*-demo.*\.(js|mjs|cjs|ts)$/,
61
+ destination: 'scripts/demo/',
62
+ description: 'Demo scripts'
63
+ },
64
+ {
65
+ pattern: /^performance-.*\.(js|mjs|cjs|ts)$/,
66
+ destination: 'scripts/demo/',
67
+ description: 'Performance demo scripts'
68
+ },
69
+ {
70
+ pattern: /^test-results.*\.(json|txt|log)$/,
71
+ destination: '.artifacts/test-results/archive/',
72
+ description: 'Test result files'
73
+ },
74
+ {
75
+ pattern: /^benchmark-results.*\.txt$/,
76
+ destination: '.artifacts/benchmarks/',
77
+ description: 'Benchmark result files'
78
+ },
79
+ {
80
+ pattern: /^.*\.log$/,
81
+ destination: '.artifacts/logs/',
82
+ description: 'Log files'
83
+ },
84
+ {
85
+ pattern: /^.*\.(backup|bundle)$/,
86
+ destination: '.artifacts/backups/',
87
+ description: 'Backup files'
88
+ },
89
+ {
90
+ pattern: /^swarm-memory\.db.*$/,
91
+ destination: 'database/',
92
+ description: 'Database files'
93
+ }
94
+ ];
95
+ }
96
+
97
+ /**
98
+ * Initialize logging
99
+ */
100
+ initializeLogging() {
101
+ const logDir = path.dirname(this.logFile);
102
+ if (!fs.existsSync(logDir)) {
103
+ fs.mkdirSync(logDir, { recursive: true });
104
+ }
105
+
106
+ this.log('='.repeat(80));
107
+ this.log(`Workspace Reorganization Script`);
108
+ this.log(`Timestamp: ${this.timestamp}`);
109
+ this.log(`Mode: ${this.dryRun ? 'DRY-RUN' : 'EXECUTE'}`);
110
+ this.log(`Verbose: ${this.verbose}`);
111
+ this.log(`Rollback: ${this.rollback}`);
112
+ this.log('='.repeat(80));
113
+ }
114
+
115
+ /**
116
+ * Log message to both console and file
117
+ */
118
+ log(message, level = 'INFO') {
119
+ const timestamp = new Date().toISOString();
120
+ const logMessage = `[${timestamp}] [${level}] ${message}`;
121
+
122
+ console.log(logMessage);
123
+
124
+ try {
125
+ fs.appendFileSync(this.logFile, logMessage + '\n');
126
+ } catch (error) {
127
+ console.error(`Failed to write to log file: ${error.message}`);
128
+ }
129
+ }
130
+
131
+ /**
132
+ * Verbose logging (only if verbose mode enabled)
133
+ */
134
+ debug(message) {
135
+ if (this.verbose) {
136
+ this.log(message, 'DEBUG');
137
+ }
138
+ }
139
+
140
+ /**
141
+ * Execute shell command with error handling
142
+ */
143
+ exec(command, options = {}) {
144
+ try {
145
+ this.debug(`Executing: ${command}`);
146
+ const result = execSync(command, {
147
+ cwd: this.rootDir,
148
+ encoding: 'utf8',
149
+ ...options
150
+ });
151
+ return { success: true, output: result };
152
+ } catch (error) {
153
+ return {
154
+ success: false,
155
+ error: error.message,
156
+ output: error.stdout || error.stderr || ''
157
+ };
158
+ }
159
+ }
160
+
161
+ /**
162
+ * Check if file exists
163
+ */
164
+ fileExists(filePath) {
165
+ return fs.existsSync(path.join(this.rootDir, filePath));
166
+ }
167
+
168
+ /**
169
+ * Scan root directory for files to migrate
170
+ */
171
+ scanWorkspace() {
172
+ this.log('Scanning workspace for files to migrate...');
173
+
174
+ try {
175
+ const files = fs.readdirSync(this.rootDir);
176
+
177
+ files.forEach(file => {
178
+ const filePath = path.join(this.rootDir, file);
179
+ const stat = fs.statSync(filePath);
180
+
181
+ // Only process files, skip directories
182
+ if (!stat.isFile()) {
183
+ return;
184
+ }
185
+
186
+ // Check each migration rule
187
+ for (const rule of this.migrationRules) {
188
+ if (rule.pattern.test(file)) {
189
+ this.operations.push({
190
+ source: file,
191
+ destination: path.join(rule.destination, file),
192
+ description: rule.description,
193
+ rule: rule.pattern.toString()
194
+ });
195
+ this.stats.planned++;
196
+ break; // Only match first rule
197
+ }
198
+ }
199
+ });
200
+
201
+ this.log(`Found ${this.operations.length} files to migrate`);
202
+
203
+ } catch (error) {
204
+ this.log(`Error scanning workspace: ${error.message}`, 'ERROR');
205
+ this.errors.push({ operation: 'scan', error: error.message });
206
+ }
207
+ }
208
+
209
+ /**
210
+ * Create backup of workspace state
211
+ */
212
+ createBackup() {
213
+ if (this.dryRun) {
214
+ this.log('DRY-RUN: Skipping backup creation');
215
+ return true;
216
+ }
217
+
218
+ this.log('Creating workspace backup...');
219
+
220
+ try {
221
+ const backupDir = path.dirname(this.backupFile);
222
+ if (!fs.existsSync(backupDir)) {
223
+ fs.mkdirSync(backupDir, { recursive: true });
224
+ }
225
+
226
+ const backupData = {
227
+ timestamp: this.timestamp,
228
+ operations: this.operations,
229
+ rootDir: this.rootDir
230
+ };
231
+
232
+ fs.writeFileSync(this.backupFile, JSON.stringify(backupData, null, 2));
233
+ this.log(`Backup created: ${this.backupFile}`);
234
+ return true;
235
+
236
+ } catch (error) {
237
+ this.log(`Failed to create backup: ${error.message}`, 'ERROR');
238
+ this.errors.push({ operation: 'backup', error: error.message });
239
+ return false;
240
+ }
241
+ }
242
+
243
+ /**
244
+ * Ensure destination directory exists
245
+ */
246
+ ensureDestinationDir(destPath) {
247
+ const destDir = path.dirname(path.join(this.rootDir, destPath));
248
+
249
+ if (!fs.existsSync(destDir)) {
250
+ if (this.dryRun) {
251
+ this.debug(`DRY-RUN: Would create directory: ${destDir}`);
252
+ } else {
253
+ fs.mkdirSync(destDir, { recursive: true });
254
+ this.debug(`Created directory: ${destDir}`);
255
+ }
256
+ }
257
+ }
258
+
259
+ /**
260
+ * Execute file migration using git mv
261
+ */
262
+ migrateFile(operation) {
263
+ const { source, destination, description } = operation;
264
+
265
+ // Validate source exists
266
+ if (!this.fileExists(source)) {
267
+ this.log(`Skipping: ${source} (does not exist)`, 'WARN');
268
+ this.stats.skipped++;
269
+ return;
270
+ }
271
+
272
+ // Check if destination already exists
273
+ if (this.fileExists(destination)) {
274
+ this.log(`Skipping: ${destination} (already exists)`, 'WARN');
275
+ this.stats.skipped++;
276
+ return;
277
+ }
278
+
279
+ // Ensure destination directory exists
280
+ this.ensureDestinationDir(destination);
281
+
282
+ if (this.dryRun) {
283
+ this.log(`DRY-RUN: Would move ${source} -> ${destination} (${description})`);
284
+ this.stats.completed++;
285
+ return;
286
+ }
287
+
288
+ // Use git mv to preserve history
289
+ const result = this.exec(`git mv "${source}" "${destination}"`);
290
+
291
+ if (result.success) {
292
+ this.log(`✓ Moved: ${source} -> ${destination}`);
293
+ this.stats.completed++;
294
+ } else {
295
+ this.log(`✗ Failed to move ${source}: ${result.error}`, 'ERROR');
296
+ this.errors.push({ operation: source, error: result.error });
297
+ this.stats.failed++;
298
+ }
299
+ }
300
+
301
+ /**
302
+ * Execute all migration operations
303
+ */
304
+ executeMigration() {
305
+ this.log('\nExecuting migration operations...\n');
306
+
307
+ // Group operations by destination for better reporting
308
+ const grouped = this.operations.reduce((acc, op) => {
309
+ const destDir = path.dirname(op.destination);
310
+ if (!acc[destDir]) {
311
+ acc[destDir] = [];
312
+ }
313
+ acc[destDir].push(op);
314
+ return acc;
315
+ }, {});
316
+
317
+ // Process each group
318
+ Object.entries(grouped).forEach(([destDir, ops]) => {
319
+ this.log(`\n→ Migrating ${ops.length} files to ${destDir}/`);
320
+ ops.forEach(op => this.migrateFile(op));
321
+ });
322
+ }
323
+
324
+ /**
325
+ * Restore from backup (rollback)
326
+ */
327
+ performRollback() {
328
+ this.log('Performing rollback from backup...');
329
+
330
+ // Find most recent backup
331
+ const backupsDir = path.join(this.rootDir, '.artifacts', 'backups');
332
+ if (!fs.existsSync(backupsDir)) {
333
+ this.log('No backups directory found', 'ERROR');
334
+ return false;
335
+ }
336
+
337
+ const backups = fs.readdirSync(backupsDir)
338
+ .filter(f => f.startsWith('workspace-backup-') && f.endsWith('.json'))
339
+ .sort()
340
+ .reverse();
341
+
342
+ if (backups.length === 0) {
343
+ this.log('No backup files found', 'ERROR');
344
+ return false;
345
+ }
346
+
347
+ const backupFile = path.join(backupsDir, backups[0]);
348
+ this.log(`Using backup: ${backupFile}`);
349
+
350
+ try {
351
+ const backup = JSON.parse(fs.readFileSync(backupFile, 'utf8'));
352
+
353
+ // Reverse the operations
354
+ backup.operations.reverse().forEach(op => {
355
+ const { source, destination } = op;
356
+
357
+ if (this.fileExists(destination)) {
358
+ const result = this.exec(`git mv "${destination}" "${source}"`);
359
+ if (result.success) {
360
+ this.log(`✓ Restored: ${destination} -> ${source}`);
361
+ } else {
362
+ this.log(`✗ Failed to restore ${destination}: ${result.error}`, 'ERROR');
363
+ }
364
+ }
365
+ });
366
+
367
+ this.log('Rollback completed');
368
+ return true;
369
+
370
+ } catch (error) {
371
+ this.log(`Rollback failed: ${error.message}`, 'ERROR');
372
+ return false;
373
+ }
374
+ }
375
+
376
+ /**
377
+ * Print summary report
378
+ */
379
+ printSummary() {
380
+ this.log('\n' + '='.repeat(80));
381
+ this.log('MIGRATION SUMMARY');
382
+ this.log('='.repeat(80));
383
+ this.log(`Mode: ${this.dryRun ? 'DRY-RUN' : 'EXECUTE'}`);
384
+ this.log(`Planned: ${this.stats.planned}`);
385
+ this.log(`Completed: ${this.stats.completed}`);
386
+ this.log(`Failed: ${this.stats.failed}`);
387
+ this.log(`Skipped: ${this.stats.skipped}`);
388
+
389
+ if (this.errors.length > 0) {
390
+ this.log(`\nErrors (${this.errors.length}):`);
391
+ this.errors.forEach(err => {
392
+ this.log(` - ${err.operation}: ${err.error}`, 'ERROR');
393
+ });
394
+ }
395
+
396
+ this.log(`\nLog file: ${this.logFile}`);
397
+ if (!this.dryRun) {
398
+ this.log(`Backup file: ${this.backupFile}`);
399
+ }
400
+ this.log('='.repeat(80));
401
+ }
402
+
403
+ /**
404
+ * Main execution flow
405
+ */
406
+ async run() {
407
+ this.initializeLogging();
408
+
409
+ if (this.rollback) {
410
+ this.performRollback();
411
+ this.printSummary();
412
+ return;
413
+ }
414
+
415
+ this.scanWorkspace();
416
+
417
+ if (this.operations.length === 0) {
418
+ this.log('No files to migrate');
419
+ return;
420
+ }
421
+
422
+ if (!this.dryRun) {
423
+ if (!this.createBackup()) {
424
+ this.log('Backup creation failed, aborting migration', 'ERROR');
425
+ return;
426
+ }
427
+ }
428
+
429
+ this.executeMigration();
430
+ this.printSummary();
431
+
432
+ // Exit code based on failures
433
+ if (this.stats.failed > 0) {
434
+ process.exit(1);
435
+ }
436
+ }
437
+ }
438
+
439
+ // CLI argument parsing
440
+ function parseArgs() {
441
+ const args = process.argv.slice(2);
442
+ const options = {
443
+ dryRun: false,
444
+ verbose: false,
445
+ rollback: false
446
+ };
447
+
448
+ args.forEach(arg => {
449
+ switch (arg) {
450
+ case '--dry-run':
451
+ options.dryRun = true;
452
+ break;
453
+ case '--verbose':
454
+ options.verbose = true;
455
+ break;
456
+ case '--rollback':
457
+ options.rollback = true;
458
+ break;
459
+ case '--help':
460
+ case '-h':
461
+ console.log(`
462
+ Workspace Reorganization Script
463
+
464
+ Usage: node reorganize-workspace.js [OPTIONS]
465
+
466
+ Options:
467
+ --dry-run Show what would be done without executing
468
+ --verbose Enable detailed logging
469
+ --rollback Restore from most recent backup
470
+ --help, -h Show this help message
471
+
472
+ Examples:
473
+ # Preview migration (safe)
474
+ node reorganize-workspace.js --dry-run
475
+
476
+ # Execute migration with verbose output
477
+ node reorganize-workspace.js --verbose
478
+
479
+ # Execute migration
480
+ node reorganize-workspace.js
481
+
482
+ # Rollback to previous state
483
+ node reorganize-workspace.js --rollback
484
+ `);
485
+ process.exit(0);
486
+ default:
487
+ console.error(`Unknown option: ${arg}`);
488
+ console.log('Use --help for usage information');
489
+ process.exit(1);
490
+ }
491
+ });
492
+
493
+ return options;
494
+ }
495
+
496
+ // Main execution
497
+ const options = parseArgs();
498
+ const reorganizer = new WorkspaceReorganizer(options);
499
+ reorganizer.run().catch(error => {
500
+ console.error(`Fatal error: ${error.message}`);
501
+ process.exit(1);
502
+ });
503
+
504
+ export default WorkspaceReorganizer;