resolve-solo 0.5.3 → 0.7.0

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.
@@ -0,0 +1,231 @@
1
+ /**
2
+ * Uninstall Logic
3
+ *
4
+ * Handles detection of install method, data cleanup, and removal of resolve-solo.
5
+ */
6
+ import * as fs from 'node:fs';
7
+ import * as path from 'node:path';
8
+ import * as os from 'node:os';
9
+ import { execSync } from 'node:child_process';
10
+ import { getResolveaiDir } from './storage.js';
11
+ import { cleanupClaudeIntegration } from './setup.js';
12
+ /**
13
+ * Detect how resolve-solo was installed
14
+ */
15
+ export function detectInstallMethod() {
16
+ try {
17
+ // Check if installed globally via npm
18
+ const globalList = execSync('npm list -g resolve-solo --depth=0', {
19
+ stdio: 'pipe',
20
+ encoding: 'utf-8',
21
+ });
22
+ if (globalList.includes('resolve-solo@')) {
23
+ return 'npm-global';
24
+ }
25
+ }
26
+ catch {
27
+ // Not found globally
28
+ }
29
+ try {
30
+ // Check if installed locally in current directory
31
+ const localList = execSync('npm list resolve-solo --depth=0', {
32
+ stdio: 'pipe',
33
+ encoding: 'utf-8',
34
+ });
35
+ if (localList.includes('resolve-solo@')) {
36
+ return 'npm-local';
37
+ }
38
+ }
39
+ catch {
40
+ // Not found locally
41
+ }
42
+ // If we're running but not installed, probably npx or direct execution
43
+ // Check if node_modules exists in our package directory
44
+ try {
45
+ const whichResolve = execSync('which resolveai', {
46
+ stdio: 'pipe',
47
+ encoding: 'utf-8',
48
+ }).trim();
49
+ // If it's in a .npm/_npx directory, it's npx
50
+ if (whichResolve.includes('/_npx/') || whichResolve.includes('\\_npx\\')) {
51
+ return 'npx';
52
+ }
53
+ }
54
+ catch {
55
+ // which command failed
56
+ }
57
+ return 'unknown';
58
+ }
59
+ /**
60
+ * Calculate directory size in human-readable format
61
+ */
62
+ function getDirectorySize(dirPath) {
63
+ if (!fs.existsSync(dirPath)) {
64
+ return '0 B';
65
+ }
66
+ let totalSize = 0;
67
+ function calculateSize(currentPath) {
68
+ const stats = fs.statSync(currentPath);
69
+ if (stats.isDirectory()) {
70
+ const files = fs.readdirSync(currentPath);
71
+ for (const file of files) {
72
+ calculateSize(path.join(currentPath, file));
73
+ }
74
+ }
75
+ else {
76
+ totalSize += stats.size;
77
+ }
78
+ }
79
+ try {
80
+ calculateSize(dirPath);
81
+ }
82
+ catch {
83
+ return 'unknown';
84
+ }
85
+ // Convert to human-readable
86
+ if (totalSize < 1024)
87
+ return `${totalSize} B`;
88
+ if (totalSize < 1024 * 1024)
89
+ return `${(totalSize / 1024).toFixed(1)} KB`;
90
+ if (totalSize < 1024 * 1024 * 1024)
91
+ return `${(totalSize / (1024 * 1024)).toFixed(1)} MB`;
92
+ return `${(totalSize / (1024 * 1024 * 1024)).toFixed(1)} GB`;
93
+ }
94
+ /**
95
+ * Check if Claude Code integration exists
96
+ */
97
+ function hasClaudeIntegration() {
98
+ const homeDir = os.homedir();
99
+ const configPaths = [
100
+ path.join(homeDir, '.config', 'claude', 'config.json'),
101
+ path.join(homeDir, '.claude', 'config.json'),
102
+ path.join(homeDir, '.claude.json'),
103
+ ];
104
+ for (const configPath of configPaths) {
105
+ if (fs.existsSync(configPath)) {
106
+ try {
107
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
108
+ if (config.mcpServers && config.mcpServers['resolve-solo']) {
109
+ return true;
110
+ }
111
+ }
112
+ catch {
113
+ continue;
114
+ }
115
+ }
116
+ }
117
+ // Check agent file
118
+ const agentFile = path.join(homeDir, '.claude', 'agents', 'incident-investigator.md');
119
+ return fs.existsSync(agentFile);
120
+ }
121
+ /**
122
+ * Generate summary of what will be removed
123
+ */
124
+ export function getUninstallSummary() {
125
+ const installMethod = detectInstallMethod();
126
+ const packageInstalled = installMethod !== 'npx' && installMethod !== 'unknown';
127
+ const dataDir = getResolveaiDir();
128
+ const dataExists = fs.existsSync(dataDir);
129
+ const dataSize = dataExists ? getDirectorySize(dataDir) : undefined;
130
+ const claudeIntegration = hasClaudeIntegration();
131
+ return {
132
+ installMethod,
133
+ packageInstalled,
134
+ dataExists,
135
+ dataSize,
136
+ claudeIntegration,
137
+ };
138
+ }
139
+ /**
140
+ * Remove npm package
141
+ */
142
+ function removePackage(installMethod) {
143
+ if (installMethod === 'npm-global') {
144
+ try {
145
+ execSync('npm uninstall -g resolve-solo', { stdio: 'pipe' });
146
+ return true;
147
+ }
148
+ catch {
149
+ return false;
150
+ }
151
+ }
152
+ else if (installMethod === 'npm-local') {
153
+ try {
154
+ execSync('npm uninstall resolve-solo', { stdio: 'pipe' });
155
+ return true;
156
+ }
157
+ catch {
158
+ return false;
159
+ }
160
+ }
161
+ // npx or unknown - nothing to remove
162
+ return false;
163
+ }
164
+ /**
165
+ * Remove local data directory
166
+ */
167
+ function removeData(dataDir) {
168
+ if (!fs.existsSync(dataDir)) {
169
+ return true; // Nothing to remove
170
+ }
171
+ try {
172
+ fs.rmSync(dataDir, { recursive: true, force: true });
173
+ return true;
174
+ }
175
+ catch {
176
+ return false;
177
+ }
178
+ }
179
+ /**
180
+ * Remove Claude Code integration
181
+ */
182
+ function removeClaudeIntegration() {
183
+ const result = cleanupClaudeIntegration();
184
+ return result.success;
185
+ }
186
+ /**
187
+ * Perform uninstall
188
+ */
189
+ export function performUninstall(options) {
190
+ const summary = getUninstallSummary();
191
+ const removed = {
192
+ package: false,
193
+ data: false,
194
+ claudeIntegration: false,
195
+ };
196
+ // Remove package if installed
197
+ if (summary.packageInstalled) {
198
+ removed.package = removePackage(summary.installMethod);
199
+ }
200
+ // Remove data unless --keep-data flag is set
201
+ if (summary.dataExists && !options.keepData) {
202
+ const dataDir = getResolveaiDir();
203
+ removed.data = removeData(dataDir);
204
+ }
205
+ // Remove Claude Code integration
206
+ if (summary.claudeIntegration) {
207
+ removed.claudeIntegration = removeClaudeIntegration();
208
+ }
209
+ // Determine success
210
+ const success = (!summary.packageInstalled || removed.package) &&
211
+ (!summary.dataExists || options.keepData || removed.data) &&
212
+ (!summary.claudeIntegration || removed.claudeIntegration);
213
+ // Build message
214
+ let message = 'Uninstall ';
215
+ if (success) {
216
+ message += 'completed successfully';
217
+ if (options.keepData && summary.dataExists) {
218
+ message += ' (data preserved)';
219
+ }
220
+ }
221
+ else {
222
+ message += 'completed with errors';
223
+ }
224
+ return {
225
+ success,
226
+ message,
227
+ summary,
228
+ removed,
229
+ };
230
+ }
231
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../src/uninstall.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "resolve-solo",
3
- "version": "0.5.3",
3
+ "version": "0.7.0",
4
4
  "description": "Local-first CLI on-call assistant for individual engineers",
5
5
  "main": "./dist/index.js",
6
6
  "type": "module",