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,526 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Claude Flow Novice - Uninstall Script
5
+ *
6
+ * Clean removal of package and configurations
7
+ */
8
+
9
+ import { execSync, spawn } from 'child_process';
10
+ import { existsSync, removeSync, statSync } from 'fs';
11
+ import { join, dirname } from 'path';
12
+ import { homedir, platform } from 'os';
13
+ import chalk from 'chalk';
14
+ import ora from 'ora';
15
+ import inquirer from 'inquirer';
16
+
17
+ class UninstallManager {
18
+ constructor() {
19
+ this.platform = platform();
20
+ this.homeDir = homedir();
21
+ this.configDir = join(this.homeDir, '.claude-flow-novice');
22
+ this.globalInstall = false;
23
+ this.keepConfig = false;
24
+ this.keepData = false;
25
+ }
26
+
27
+ async uninstall() {
28
+ console.log(chalk.blue.bold('🗑️ Claude Flow Novice Uninstall\n'));
29
+
30
+ try {
31
+ await this.promptUninstallOptions();
32
+ await this.stopServices();
33
+ await this.removeGlobalPackage();
34
+ await this.removeLocalFiles();
35
+ await this.removeConfigurations();
36
+ await this.removeServices();
37
+ await this.cleanupRegistry();
38
+ await this.verifyRemoval();
39
+
40
+ this.showUninstallSuccess();
41
+ } catch (error) {
42
+ console.error(chalk.red('❌ Uninstall failed:'), error.message);
43
+ process.exit(1);
44
+ }
45
+ }
46
+
47
+ async promptUninstallOptions() {
48
+ console.log(chalk.yellow('This will remove Claude Flow Novice from your system.\n'));
49
+
50
+ const answers = await inquirer.prompt([
51
+ {
52
+ type: 'confirm',
53
+ name: 'keepConfig',
54
+ message: 'Keep configuration files for future use?',
55
+ default: true
56
+ },
57
+ {
58
+ type: 'confirm',
59
+ name: 'keepData',
60
+ message: 'Keep user data and logs?',
61
+ default: true
62
+ },
63
+ {
64
+ type: 'confirm',
65
+ name: 'removeServices',
66
+ message: 'Remove system services (Redis, etc.)?',
67
+ default: false
68
+ },
69
+ {
70
+ type: 'confirm',
71
+ name: 'confirm',
72
+ message: 'Are you sure you want to proceed with uninstallation?',
73
+ default: false
74
+ }
75
+ ]);
76
+
77
+ if (!answers.confirm) {
78
+ console.log(chalk.cyan('Uninstall cancelled.'));
79
+ process.exit(0);
80
+ }
81
+
82
+ this.keepConfig = answers.keepConfig;
83
+ this.keepData = answers.keepData;
84
+ this.removeServices = answers.removeServices;
85
+
86
+ // Check if globally installed
87
+ try {
88
+ execSync('npm list -g claude-flow-novice', { stdio: 'ignore' });
89
+ this.globalInstall = true;
90
+ } catch (error) {
91
+ this.globalInstall = false;
92
+ }
93
+ }
94
+
95
+ async stopServices() {
96
+ const spinner = ora('Stopping services...').start();
97
+
98
+ try {
99
+ const serviceManager = new (await import('./service-manager.js')).default();
100
+ await serviceManager.stopAllServices();
101
+
102
+ spinner.succeed('Services stopped successfully');
103
+ } catch (error) {
104
+ spinner.warn('Some services could not be stopped');
105
+ console.warn(chalk.yellow('Warning: Some services may still be running'));
106
+ }
107
+ }
108
+
109
+ async removeGlobalPackage() {
110
+ if (!this.globalInstall) {
111
+ return;
112
+ }
113
+
114
+ const spinner = ora('Removing global package...').start();
115
+
116
+ try {
117
+ await this.executeCommand('npm uninstall -g claude-flow-novice', { timeout: 60000 });
118
+ spinner.succeed('Global package removed');
119
+ } catch (error) {
120
+ spinner.fail('Failed to remove global package');
121
+ throw error;
122
+ }
123
+ }
124
+
125
+ async removeLocalFiles() {
126
+ const spinner = ora('Removing local files...').start();
127
+
128
+ try {
129
+ const projectRoot = process.cwd();
130
+
131
+ // Remove local node_modules if it contains claude-flow-novice
132
+ const nodeModulesPath = join(projectRoot, 'node_modules', 'claude-flow-novice');
133
+ if (existsSync(nodeModulesPath)) {
134
+ await this.executeCommand(`rm -rf "${nodeModulesPath}"`, { timeout: 30000 });
135
+ }
136
+
137
+ // Remove package-lock.json entries
138
+ const packageLockPath = join(projectRoot, 'package-lock.json');
139
+ if (existsSync(packageLockPath)) {
140
+ try {
141
+ const packageLock = JSON.parse(require('fs').readFileSync(packageLockPath, 'utf8'));
142
+ if (packageLock.packages?.['node_modules/claude-flow-novice']) {
143
+ delete packageLock.packages['node_modules/claude-flow-novice'];
144
+ require('fs').writeFileSync(packageLockPath, JSON.stringify(packageLock, null, 2));
145
+ }
146
+ } catch (error) {
147
+ // Ignore package-lock.json modification errors
148
+ }
149
+ }
150
+
151
+ spinner.succeed('Local files removed');
152
+ } catch (error) {
153
+ spinner.warn('Some local files could not be removed');
154
+ console.warn(chalk.yellow('Warning: You may need to manually remove some files'));
155
+ }
156
+ }
157
+
158
+ async removeConfigurations() {
159
+ if (!existsSync(this.configDir)) {
160
+ return;
161
+ }
162
+
163
+ const spinner = ora('Removing configurations...').start();
164
+
165
+ try {
166
+ if (!this.keepConfig && !this.keepData) {
167
+ // Remove everything
168
+ await this.executeCommand(`rm -rf "${this.configDir}"`, { timeout: 30000 });
169
+ } else {
170
+ // Keep selected items
171
+ const itemsToKeep = [];
172
+
173
+ if (this.keepConfig) {
174
+ itemsToKeep.push('config');
175
+ }
176
+
177
+ if (this.keepData) {
178
+ itemsToKeep.push('logs', 'data');
179
+ }
180
+
181
+ // Remove only items not in keep list
182
+ const items = require('fs').readdirSync(this.configDir);
183
+ for (const item of items) {
184
+ if (!itemsToKeep.includes(item)) {
185
+ const itemPath = join(this.configDir, item);
186
+ const stats = statSync(itemPath);
187
+
188
+ if (stats.isDirectory()) {
189
+ await this.executeCommand(`rm -rf "${itemPath}"`, { timeout: 30000 });
190
+ } else {
191
+ await this.executeCommand(`rm "${itemPath}"`, { timeout: 30000 });
192
+ }
193
+ }
194
+ }
195
+ }
196
+
197
+ spinner.succeed('Configurations removed');
198
+ } catch (error) {
199
+ spinner.warn('Some configurations could not be removed');
200
+ console.warn(chalk.yellow('Warning: You may need to manually remove configuration files'));
201
+ }
202
+ }
203
+
204
+ async removeServices() {
205
+ if (!this.removeServices) {
206
+ return;
207
+ }
208
+
209
+ const spinner = ora('Removing system services...').start();
210
+
211
+ try {
212
+ // Remove Redis (if installed by claude-flow-novice)
213
+ await this.removeRedisService();
214
+
215
+ // Remove systemd services (Linux)
216
+ if (this.platform === 'linux') {
217
+ await this.removeSystemdServices();
218
+ }
219
+
220
+ // Remove Windows services (if applicable)
221
+ if (this.platform === 'win32') {
222
+ await this.removeWindowsServices();
223
+ }
224
+
225
+ // Remove macOS launch agents (if applicable)
226
+ if (this.platform === 'darwin') {
227
+ await this.removeMacOSServices();
228
+ }
229
+
230
+ spinner.succeed('System services removed');
231
+ } catch (error) {
232
+ spinner.warn('Some services could not be removed');
233
+ console.warn(chalk.yellow('Warning: You may need to manually remove system services'));
234
+ }
235
+ }
236
+
237
+ async removeRedisService() {
238
+ try {
239
+ // Check if Redis was installed by our setup
240
+ const redisConfigPath = join(this.configDir, 'redis.json');
241
+ if (existsSync(redisConfigPath)) {
242
+ const redisConfig = JSON.parse(require('fs').readFileSync(redisConfigPath, 'utf8'));
243
+
244
+ if (redisConfig.installedByClaudeFlow) {
245
+ if (this.platform === 'win32') {
246
+ await this.executeCommand('net stop redis', { timeout: 30000 });
247
+ await this.executeCommand('sc delete redis', { timeout: 30000 });
248
+ } else if (this.platform === 'darwin') {
249
+ await this.executeCommand('brew services stop redis', { timeout: 30000 });
250
+ await this.executeCommand('brew uninstall redis', { timeout: 30000 });
251
+ } else {
252
+ await this.executeCommand('sudo systemctl stop redis-server', { timeout: 30000 });
253
+ await this.executeCommand('sudo systemctl disable redis-server', { timeout: 30000 });
254
+ await this.executeCommand('sudo apt-get remove redis-server -y', { timeout: 30000 });
255
+ }
256
+ }
257
+ }
258
+ } catch (error) {
259
+ // Redis removal failed - continue with uninstall
260
+ }
261
+ }
262
+
263
+ async removeSystemdServices() {
264
+ const services = ['claude-flow-novice', 'claude-flow-dashboard', 'claude-flow-monitor'];
265
+
266
+ for (const service of services) {
267
+ try {
268
+ await this.executeCommand(`sudo systemctl stop ${service}`, { timeout: 30000 });
269
+ await this.executeCommand(`sudo systemctl disable ${service}`, { timeout: 30000 });
270
+ await this.executeCommand(`sudo rm /etc/systemd/system/${service}.service`, { timeout: 30000 });
271
+ await this.executeCommand('sudo systemctl daemon-reload', { timeout: 30000 });
272
+ } catch (error) {
273
+ // Service not found or removal failed - continue
274
+ }
275
+ }
276
+ }
277
+
278
+ async removeWindowsServices() {
279
+ const services = ['ClaudeFlowNovice', 'ClaudeFlowDashboard', 'ClaudeFlowMonitor'];
280
+
281
+ for (const service of services) {
282
+ try {
283
+ await this.executeCommand(`sc stop ${service}`, { timeout: 30000 });
284
+ await this.executeCommand(`sc delete ${service}`, { timeout: 30000 });
285
+ } catch (error) {
286
+ // Service not found or removal failed - continue
287
+ }
288
+ }
289
+ }
290
+
291
+ async removeMacOSServices() {
292
+ const launchAgents = [
293
+ join(this.homeDir, 'Library', 'LaunchAgents', 'com.claude-flow-novice.plist'),
294
+ join(this.homeDir, 'Library', 'LaunchAgents', 'com.claude-flow-dashboard.plist'),
295
+ join(this.homeDir, 'Library', 'LaunchAgents', 'com.claude-flow-monitor.plist')
296
+ ];
297
+
298
+ for (const agent of launchAgents) {
299
+ try {
300
+ if (existsSync(agent)) {
301
+ const serviceName = agent.split('/').pop().replace('.plist', '');
302
+ await this.executeCommand(`launchctl unload ${agent}`, { timeout: 30000 });
303
+ await this.executeCommand(`rm ${agent}`, { timeout: 30000 });
304
+ }
305
+ } catch (error) {
306
+ // Service not found or removal failed - continue
307
+ }
308
+ }
309
+ }
310
+
311
+ async cleanupRegistry() {
312
+ const spinner = ora('Cleaning up registry...').start();
313
+
314
+ try {
315
+ // Remove environment variables
316
+ await this.removeEnvironmentVariables();
317
+
318
+ // Remove PATH modifications
319
+ await this.removePathModifications();
320
+
321
+ // Remove MCP server registration
322
+ await this.removeMCPRegistration();
323
+
324
+ spinner.succeed('Registry cleaned up');
325
+ } catch (error) {
326
+ spinner.warn('Registry cleanup completed with warnings');
327
+ }
328
+ }
329
+
330
+ async removeEnvironmentVariables() {
331
+ const envVars = ['CLAUDE_FLOW_ENV', 'CLAUDE_FLOW_DATA_PATH', 'CLAUDE_FLOW_LOG_LEVEL'];
332
+
333
+ if (this.platform === 'win32') {
334
+ for (const varName of envVars) {
335
+ try {
336
+ await this.executeCommand(`reg delete "HKCU\\Environment" /v ${varName} /f`, { timeout: 30000 });
337
+ } catch (error) {
338
+ // Variable not found or removal failed - continue
339
+ }
340
+ }
341
+ } else {
342
+ // Remove from shell profiles
343
+ const profiles = [
344
+ join(this.homeDir, '.bashrc'),
345
+ join(this.homeDir, '.zshrc'),
346
+ join(this.homeDir, '.profile')
347
+ ];
348
+
349
+ for (const profile of profiles) {
350
+ if (existsSync(profile)) {
351
+ try {
352
+ let content = require('fs').readFileSync(profile, 'utf8');
353
+
354
+ for (const varName of envVars) {
355
+ const regex = new RegExp(`^export ${varName}=.*$`, 'gm');
356
+ content = content.replace(regex, '');
357
+ }
358
+
359
+ require('fs').writeFileSync(profile, content);
360
+ } catch (error) {
361
+ // Profile modification failed - continue
362
+ }
363
+ }
364
+ }
365
+ }
366
+ }
367
+
368
+ async removePathModifications() {
369
+ // Remove claude-flow-novice from PATH
370
+ if (this.platform === 'win32') {
371
+ try {
372
+ const currentPath = execSync('echo %PATH%', { encoding: 'utf8' });
373
+ const newPath = currentPath
374
+ .split(';')
375
+ .filter(path => !path.includes('claude-flow-novice'))
376
+ .join(';');
377
+
378
+ await this.executeCommand(`setx PATH "${newPath}"`, { timeout: 30000 });
379
+ } catch (error) {
380
+ // PATH modification failed - continue
381
+ }
382
+ }
383
+ }
384
+
385
+ async removeMCPRegistration() {
386
+ try {
387
+ // Check if Claude Code CLI is available
388
+ execSync('which claude', { stdio: 'ignore' });
389
+
390
+ // Remove MCP server
391
+ await this.executeCommand('claude mcp remove claude-flow-novice', { timeout: 30000 });
392
+ } catch (error) {
393
+ // Claude Code not installed or MCP removal failed - continue
394
+ }
395
+ }
396
+
397
+ async verifyRemoval() {
398
+ const spinner = ora('Verifying removal...').start();
399
+
400
+ try {
401
+ // Check if package is still installed
402
+ try {
403
+ execSync('npm list -g claude-flow-novice', { stdio: 'ignore' });
404
+ throw new Error('Global package still installed');
405
+ } catch (error) {
406
+ // Expected error - package not found
407
+ }
408
+
409
+ // Check if services are still running
410
+ try {
411
+ execSync('redis-cli ping', { stdio: 'ignore' });
412
+ console.warn(chalk.yellow('Warning: Redis may still be running'));
413
+ } catch (error) {
414
+ // Expected error - Redis not running
415
+ }
416
+
417
+ // Check if configuration directory still exists
418
+ if (!this.keepConfig && !this.keepData && existsSync(this.configDir)) {
419
+ console.warn(chalk.yellow('Warning: Configuration directory still exists'));
420
+ }
421
+
422
+ spinner.succeed('Removal verified successfully');
423
+ } catch (error) {
424
+ spinner.warn('Removal verification completed with warnings');
425
+ }
426
+ }
427
+
428
+ showUninstallSuccess() {
429
+ console.log(chalk.green.bold('\n✅ Claude Flow Novice has been successfully uninstalled!\n'));
430
+
431
+ if (this.keepConfig || this.keepData) {
432
+ console.log(chalk.yellow('Kept items:'));
433
+ if (this.keepConfig) {
434
+ console.log(chalk.white('• Configuration files'));
435
+ }
436
+ if (this.keepData) {
437
+ console.log(chalk.white('• User data and logs'));
438
+ }
439
+ console.log(chalk.cyan(`Location: ${this.configDir}\n`));
440
+ }
441
+
442
+ console.log(chalk.blue('To completely remove all remaining files:'));
443
+ console.log(chalk.white(`rm -rf "${this.configDir}"\n`));
444
+
445
+ console.log(chalk.green('Thank you for using Claude Flow Novice!'));
446
+ console.log(chalk.cyan('We\'d appreciate your feedback to help us improve.\n'));
447
+ }
448
+
449
+ async executeCommand(command, options = {}) {
450
+ return new Promise((resolve, reject) => {
451
+ const child = spawn(command, [], {
452
+ shell: true,
453
+ stdio: 'pipe',
454
+ ...options
455
+ });
456
+
457
+ let stdout = '';
458
+ let stderr = '';
459
+
460
+ child.stdout?.on('data', (data) => stdout += data.toString());
461
+ child.stderr?.on('data', (data) => stderr += data.toString());
462
+
463
+ child.on('close', (code) => {
464
+ if (code === 0) {
465
+ resolve({ stdout, stderr });
466
+ } else {
467
+ reject(new Error(`Command failed with code ${code}: ${stderr}`));
468
+ }
469
+ });
470
+
471
+ child.on('error', reject);
472
+
473
+ if (options.timeout) {
474
+ setTimeout(() => {
475
+ child.kill();
476
+ reject(new Error('Command timeout'));
477
+ }, options.timeout);
478
+ }
479
+ });
480
+ }
481
+ }
482
+
483
+ // Force uninstall option
484
+ async function forceUninstall() {
485
+ console.log(chalk.yellow.bold('⚠️ FORCE UNINSTALL MODE\n'));
486
+ console.log(chalk.red('This will forcibly remove all Claude Flow Novice files and services.\n'));
487
+
488
+ const manager = new UninstallManager();
489
+ manager.keepConfig = false;
490
+ manager.keepData = false;
491
+ manager.removeServices = true;
492
+
493
+ try {
494
+ await manager.stopServices();
495
+ await manager.removeGlobalPackage();
496
+ await manager.removeLocalFiles();
497
+ await this.executeCommand(`rm -rf "${manager.configDir}"`, { timeout: 30000 });
498
+ await manager.removeServices();
499
+ await manager.cleanupRegistry();
500
+
501
+ console.log(chalk.green.bold('\n✅ Force uninstall completed!'));
502
+ } catch (error) {
503
+ console.error(chalk.red('❌ Force uninstall failed:'), error.message);
504
+ process.exit(1);
505
+ }
506
+ }
507
+
508
+ // CLI Interface
509
+ async function main() {
510
+ const command = process.argv[2];
511
+
512
+ switch (command) {
513
+ case 'force':
514
+ await forceUninstall();
515
+ break;
516
+ default:
517
+ const manager = new UninstallManager();
518
+ await manager.uninstall();
519
+ }
520
+ }
521
+
522
+ if (import.meta.url === `file://${process.argv[1]}`) {
523
+ main();
524
+ }
525
+
526
+ export default UninstallManager;