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.
- package/package.json +9 -8
- package/scripts/.claude-flow/metrics/agent-metrics.json +1 -0
- package/scripts/.claude-flow/metrics/performance.json +9 -0
- package/scripts/.claude-flow/metrics/task-metrics.json +10 -0
- package/scripts/CLEANUP_OPTIMIZATION_REPORT.json +312 -0
- package/scripts/CLEANUP_PERFORMANCE_OPTIMIZATION.md +387 -0
- package/scripts/CLEANUP_QUICK_START.md +268 -0
- package/scripts/CLEANUP_TEST_RESULTS.md +205 -0
- package/scripts/README.md +339 -0
- package/scripts/ace-query.sh +384 -0
- package/scripts/agent-token-analysis.js +430 -0
- package/scripts/auto-setup.js +332 -0
- package/scripts/build/README.md +167 -0
- package/scripts/build/build-config.js +27 -0
- package/scripts/build/build-prompt-copier.sh +30 -0
- package/scripts/build/performance-monitor.js +869 -0
- package/scripts/build/prepare-publish.js +150 -0
- package/scripts/build/typescript-fixer.js +621 -0
- package/scripts/build/unified-builder.sh +428 -0
- package/scripts/build/update-bin-version.js +32 -0
- package/scripts/build/validate-agents.js +238 -0
- package/scripts/build-index.js +43 -0
- package/scripts/build-orchestrator.js +320 -0
- package/scripts/check-routing-stats.cjs +122 -0
- package/scripts/ci-validation.js +375 -0
- package/scripts/cleanup-blocking-coordination.sh +420 -0
- package/scripts/cleanup-idle-sessions.sh +59 -0
- package/scripts/collect-build-metrics.js +65 -0
- package/scripts/demo/README.md +79 -0
- package/scripts/demo/autoscaling-demo-simplified.js +963 -0
- package/scripts/demo/comprehensive-dashboard-test.js +693 -0
- package/scripts/demo/confidence-log.js +87 -0
- package/scripts/demo/confidence-report.js +82 -0
- package/scripts/demo/demo-multi-swarm-coordination.js +325 -0
- package/scripts/demo/demo-production-deployment.js +399 -0
- package/scripts/demo/demo-visualization-system.js +149 -0
- package/scripts/demo/performance-analysis.cjs +71 -0
- package/scripts/demo/performance-analysis.js +71 -0
- package/scripts/demo/test-autoscaling-demo.js +314 -0
- package/scripts/dependency-optimizer.js +349 -0
- package/scripts/dependency-security-assessment.js +331 -0
- package/scripts/deploy-sdk.sh +176 -0
- package/scripts/deployment-readiness-report.json +179 -0
- package/scripts/dev/README.md +264 -0
- package/scripts/dev/claude-flow-wrapper.sh +35 -0
- package/scripts/dev/claude-monitor.py +419 -0
- package/scripts/dev/claude-sparc.sh +562 -0
- package/scripts/dev/claude-wrapper.sh +17 -0
- package/scripts/dev/demo-phase3-compliance.js +172 -0
- package/scripts/dev/demo-task-system.ts +224 -0
- package/scripts/dev/deployment-validator.js +315 -0
- package/scripts/dev/spawn-claude-terminal.sh +32 -0
- package/scripts/dev/start-portal.sh +506 -0
- package/scripts/dev/start-web-ui.js +15 -0
- package/scripts/dev/stop-portal.sh +311 -0
- package/scripts/dev/validate-examples.ts +288 -0
- package/scripts/dev/validate-phase2.cjs +451 -0
- package/scripts/dev/validate-phase2.js +785 -0
- package/scripts/dev/validate-phase3.cjs +208 -0
- package/scripts/dev/validate-security-remediation.js +1 -0
- package/scripts/ecosystem.config.cjs +90 -0
- package/scripts/fix-js-extensions.js +167 -0
- package/scripts/generate-basic-types.js +73 -0
- package/scripts/generate-changelog.js +318 -0
- package/scripts/git-hooks/pre-commit.sh +143 -0
- package/scripts/health-checks.js +634 -0
- package/scripts/hook-wrapper.sh +54 -0
- package/scripts/install/README.md +375 -0
- package/scripts/install/REDIS_SETUP_VALIDATION.json +245 -0
- package/scripts/install/check-prerequisites.js +303 -0
- package/scripts/install/config-wizard.js +606 -0
- package/scripts/install/dependency-checker.js +385 -0
- package/scripts/install/health-check.js +765 -0
- package/scripts/install/install.js +256 -0
- package/scripts/install/installation-benchmark.js +461 -0
- package/scripts/install/quick-install.js +720 -0
- package/scripts/install/quick-start-wizard.js +295 -0
- package/scripts/install/redis-cli.js +289 -0
- package/scripts/install/redis-install-guides.md +407 -0
- package/scripts/install/redis-setup.js +559 -0
- package/scripts/install/redis-test.js +278 -0
- package/scripts/install/service-manager.js +672 -0
- package/scripts/install/setup.js +832 -0
- package/scripts/install/uninstall.js +526 -0
- package/scripts/install/update.js +461 -0
- package/scripts/install-pre-commit-hook.sh +127 -0
- package/scripts/legacy/README.md +272 -0
- package/scripts/legacy/batch-fix-ts.sh +54 -0
- package/scripts/legacy/build-migration.sh +105 -0
- package/scripts/legacy/build-monitor.js +209 -0
- package/scripts/legacy/build-with-filter.sh +84 -0
- package/scripts/legacy/build-workaround.sh +71 -0
- package/scripts/legacy/fix-ts-advanced.js +358 -0
- package/scripts/legacy/fix-ts-final.sh +50 -0
- package/scripts/legacy/fix-ts-targeted.sh +49 -0
- package/scripts/legacy/fix-typescript-errors.js +305 -0
- package/scripts/legacy/force-build.sh +63 -0
- package/scripts/legacy/optimize-performance.js +400 -0
- package/scripts/legacy/performance-monitor.js +263 -0
- package/scripts/legacy/performance-monitoring.js +532 -0
- package/scripts/legacy/performance-test-runner.js +645 -0
- package/scripts/legacy/quick-fix-ts.js +281 -0
- package/scripts/legacy/safe-build.sh +63 -0
- package/scripts/memory-monitor-coordinator.js +322 -0
- package/scripts/migrate-to-sdk.sh +520 -0
- package/scripts/migration/QUICK-START.md +189 -0
- package/scripts/migration/QUICK-START.md.backup-1760135091363 +189 -0
- package/scripts/migration/README.md +464 -0
- package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md +500 -0
- package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md.backup-1760135091348 +500 -0
- package/scripts/migration/UPDATE-PATHS-README.md +464 -0
- package/scripts/migration/UPDATE-PATHS-README.md.backup-1760135091337 +464 -0
- package/scripts/migration/example-patterns.json +19 -0
- package/scripts/migration/install-arm64.js +78 -0
- package/scripts/migration/install.js +83 -0
- package/scripts/migration/migrate-hooks.js +173 -0
- package/scripts/migration/migration-examples.ts +318 -0
- package/scripts/migration/reorganize-workspace.js +504 -0
- package/scripts/migration/test-update-paths.js +359 -0
- package/scripts/migration/update-paths.js +664 -0
- package/scripts/migration/validate-migration.js +647 -0
- package/scripts/monitor-loop.sh +65 -0
- package/scripts/monitor-memory.sh +47 -0
- package/scripts/monitor-migration.js +339 -0
- package/scripts/monitor.py +43 -0
- package/scripts/monitoring/README.md +178 -0
- package/scripts/monitoring/alert-monitor.sh +220 -0
- package/scripts/monitoring/analyze-resources.sh +199 -0
- package/scripts/monitoring/dashboards/rate-limiting-dashboard.json +211 -0
- package/scripts/monitoring/dynamic-monitor.sh +85 -0
- package/scripts/monitoring/launch-stability-test.sh +184 -0
- package/scripts/monitoring/monitor-test.sh +93 -0
- package/scripts/monitoring/pre-test-validation.sh +208 -0
- package/scripts/monitoring/quick-test-alerting.sh +118 -0
- package/scripts/monitoring/quick-test-rate-limiting.sh +206 -0
- package/scripts/monitoring/rate-limiting-monitor.sh +380 -0
- package/scripts/monitoring/resource-monitor.sh +126 -0
- package/scripts/monitoring/stability-monitor.js +429 -0
- package/scripts/monitoring/test-monitor-quick.sh +54 -0
- package/scripts/monitoring/view-alerts.sh +307 -0
- package/scripts/npm-metrics-collector.js +482 -0
- package/scripts/npm-package-validation.cjs +299 -0
- package/scripts/optimization/build-optimizer.js +438 -0
- package/scripts/optimization/config-validator.js +761 -0
- package/scripts/optimization/test-optimization.js +432 -0
- package/scripts/optimization/unified-activation.js +839 -0
- package/scripts/optimize-package-swarm.js +54 -0
- package/scripts/performance/ACTIVATION_COMMANDS.md +292 -0
- package/scripts/performance/sqlite-enhanced-activation.sh +583 -0
- package/scripts/performance/test-enhanced-backend.sh +504 -0
- package/scripts/performance-monitor.js +644 -0
- package/scripts/performance-test-runner.js +698 -0
- package/scripts/post-deployment-monitoring.js +350 -0
- package/scripts/post-edit-pipeline.js +2091 -0
- package/scripts/post-install-claude-md.js +78 -0
- package/scripts/postinstall.js +79 -0
- package/scripts/pre-publish-validation.cjs +212 -0
- package/scripts/pre-publish-validation.js +429 -0
- package/scripts/redis-lua/cleanup-blocking-coordination.lua +198 -0
- package/scripts/release-announcement.js +425 -0
- package/scripts/release-notification.js +248 -0
- package/scripts/release-rollback.js +376 -0
- package/scripts/release-validation.js +460 -0
- package/scripts/rollback-sdk.sh +66 -0
- package/scripts/run-production-validation.ts +590 -0
- package/scripts/run-stability-validation.sh +687 -0
- package/scripts/security/README.md +339 -0
- package/scripts/security/deployment-validation.cjs +279 -0
- package/scripts/security/envelope-encryption-confidence-report.cjs +422 -0
- package/scripts/security/install-git-hooks.sh +132 -0
- package/scripts/security/install-git-secrets.sh +295 -0
- package/scripts/security/rotate-api-keys.js +469 -0
- package/scripts/security/ruv-swarm-safe.js +74 -0
- package/scripts/security/security-audit.cjs +538 -0
- package/scripts/security/setup-redis-auth.sh +397 -0
- package/scripts/security/validate-envelope-encryption.cjs +340 -0
- package/scripts/security-scan.js +492 -0
- package/scripts/src/web/frontend/.claude-flow/metrics/agent-metrics.json +1 -0
- package/scripts/src/web/frontend/.claude-flow/metrics/performance.json +9 -0
- package/scripts/src/web/frontend/.claude-flow/metrics/task-metrics.json +10 -0
- package/scripts/switch-api.sh +158 -0
- package/scripts/sync-agents.js +290 -0
- package/scripts/test/50-agent-test.js +625 -0
- package/scripts/test/NEW_STABILITY_TEST_GUIDE.md +407 -0
- package/scripts/test/README.md +236 -0
- package/scripts/test/STABILITY_TEST_EXAMPLE.md +347 -0
- package/scripts/test/STABILITY_TEST_README.md +480 -0
- package/scripts/test/agent-worker.js +309 -0
- package/scripts/test/ai-coordination-test.js +650 -0
- package/scripts/test/ai-mesh-coordination-test.js +416 -0
- package/scripts/test/check-links.ts +274 -0
- package/scripts/test/check-performance-regression.ts +168 -0
- package/scripts/test/cli-agent-coordination-test.js +313 -0
- package/scripts/test/coordinator-multilingual-test.js +396 -0
- package/scripts/test/coordinator-transparency-demo.js +585 -0
- package/scripts/test/coverage-report.ts +692 -0
- package/scripts/test/generate-swarm-tests.js +633 -0
- package/scripts/test/integration-test-validation.cjs +253 -0
- package/scripts/test/load-test-swarm.js +576 -0
- package/scripts/test/mesh-coordination-zero-overlap-test.js +740 -0
- package/scripts/test/multilingual-hello-world-test.js +390 -0
- package/scripts/test/quick-multilingual-demo.js +464 -0
- package/scripts/test/real-agent-test.js +312 -0
- package/scripts/test/run-phase3-compliance-tests.js +427 -0
- package/scripts/test/run-stability-test-examples.sh +292 -0
- package/scripts/test/stability-results/stability-metrics.jsonl +83 -0
- package/scripts/test/stability-results/stability-test-report.json +128 -0
- package/scripts/test/stability-results/stability-test.log +1827 -0
- package/scripts/test/stability-test-50-agents.js +734 -0
- package/scripts/test/test-batch-tasks.ts +29 -0
- package/scripts/test/test-byzantine-resolution.js +246 -0
- package/scripts/test/test-claude-spawn-options.sh +63 -0
- package/scripts/test/test-cli-wizard.js +331 -0
- package/scripts/test/test-comprehensive.js +401 -0
- package/scripts/test/test-coordination-features.ts +238 -0
- package/scripts/test/test-fallback-systems.js +276 -0
- package/scripts/test/test-init-command.ts +302 -0
- package/scripts/test/test-mcp.ts +251 -0
- package/scripts/test/test-runner.ts +568 -0
- package/scripts/test/test-swarm-integration.sh +92 -0
- package/scripts/test/test-swarm.ts +142 -0
- package/scripts/test/validation-summary.ts +408 -0
- package/scripts/test-cleanup-performance.sh +416 -0
- package/scripts/test-dashboard-auth.cjs +203 -0
- package/scripts/test-docker-deployment.sh +207 -0
- package/scripts/test-npm-package.cjs +167 -0
- package/scripts/test-provider-routing.cjs +226 -0
- package/scripts/test-routing-telemetry.cjs +147 -0
- package/scripts/test-runner.cjs +154 -0
- package/scripts/test-zai-10k.cjs +81 -0
- package/scripts/test-zai-api.cjs +191 -0
- package/scripts/test-zai-diagnostic.cjs +151 -0
- package/scripts/test-zai-final.cjs +128 -0
- package/scripts/test-zai-with-env.cjs +85 -0
- package/scripts/utils/README.md +261 -0
- package/scripts/utils/clean-build-artifacts.sh +94 -0
- package/scripts/utils/cleanup-root.sh +69 -0
- package/scripts/utils/fix-cliffy-imports.js +307 -0
- package/scripts/utils/fix-duplicate-imports.js +114 -0
- package/scripts/utils/fix-error-handling.cjs +70 -0
- package/scripts/utils/fix-import-paths.js +104 -0
- package/scripts/utils/fix-imports.js +116 -0
- package/scripts/utils/fix-shebang.js +78 -0
- package/scripts/utils/fix-test-modules.js +27 -0
- package/scripts/utils/fix-timezone-issue-246.js +200 -0
- package/scripts/utils/fix-ts-comprehensive.py +182 -0
- package/scripts/utils/fix-ts-targeted-batch.js +250 -0
- package/scripts/utils/remove-benchmark-conflicts.sh +140 -0
- package/scripts/utils/simple-test-fixer.js +190 -0
- package/scripts/utils/validate-metrics-structure.cjs +144 -0
- package/scripts/validate-agent-hooks.js +506 -0
- package/scripts/validate-changelog.js +241 -0
- package/scripts/validate-coordination-cli.js +69 -0
- package/scripts/validate-coordination-toggle-integration.cjs +501 -0
- package/scripts/validate-docker-infrastructure.sh +502 -0
- package/scripts/validate-entry-points.js +300 -0
- package/scripts/validate-stage3-performance.ts +377 -0
- package/scripts/validate-template-bundling.js +180 -0
- package/scripts/validation/README.md +33 -0
- package/scripts/validation/acl-security-validation.cjs +214 -0
- package/scripts/validation/acl-security-validation.js +402 -0
- package/scripts/validation/byzantine-verification.js +407 -0
- package/scripts/validation/final-phase-2-consensus.cjs +219 -0
- package/scripts/validation/final-security-validation.js +791 -0
- package/scripts/validation/final-wasm-validation.cjs +840 -0
- package/scripts/validation/integration-test-analysis.js +105 -0
- package/scripts/validation/phase-0-comprehensive-validation.js +474 -0
- package/scripts/validation/phase-0-consensus-report.js +139 -0
- package/scripts/validation/phase-0-final-report.js +112 -0
- package/scripts/validation/phase-0-redis-consensus-report.js +129 -0
- package/scripts/validation/phase-0-validation-improved.js +490 -0
- package/scripts/validation/phase-0-validation-test.js +65 -0
- package/scripts/validation/phase-1-consensus-report.cjs +342 -0
- package/scripts/validation/phase-1-consensus-validation.cjs +551 -0
- package/scripts/validation/phase-1-consensus-validation.js +551 -0
- package/scripts/validation/phase-2-consensus-report.cjs +186 -0
- package/scripts/validation/phase-2-validation.cjs +171 -0
- package/scripts/validation/phase-2-validation.js +171 -0
- package/scripts/validation/phase-4-consensus-report.js +181 -0
- package/scripts/validation/phase-4-final-validation.js +351 -0
- package/scripts/validation/phase-5-consensus-report.cjs +113 -0
- package/scripts/validation/phase-5-consensus-report.js +113 -0
- package/scripts/validation/security-analysis.js +49 -0
- package/scripts/validation/security-validation.js +492 -0
- package/scripts/validation/simple-security-validation.js +464 -0
- package/scripts/verify-installation.js +112 -0
- package/scripts/verify-mcp-server.js +86 -0
- 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;
|