myshell-tools 1.0.0 → 2.0.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.
- package/CHANGELOG.md +44 -69
- package/LICENSE +21 -21
- package/README.md +178 -318
- package/dist/cli.d.ts +8 -0
- package/dist/cli.js +130 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/cost.d.ts +36 -0
- package/dist/commands/cost.js +103 -0
- package/dist/commands/cost.js.map +1 -0
- package/dist/commands/doctor.d.ts +36 -0
- package/dist/commands/doctor.js +115 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/login.d.ts +20 -0
- package/dist/commands/login.js +60 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/core/assess.d.ts +25 -0
- package/dist/core/assess.js +142 -0
- package/dist/core/assess.js.map +1 -0
- package/dist/core/classify.d.ts +19 -0
- package/dist/core/classify.js +80 -0
- package/dist/core/classify.js.map +1 -0
- package/dist/core/escalate.d.ts +32 -0
- package/dist/core/escalate.js +57 -0
- package/dist/core/escalate.js.map +1 -0
- package/dist/core/index.d.ts +13 -0
- package/dist/core/index.js +12 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/orchestrate.d.ts +42 -0
- package/dist/core/orchestrate.js +439 -0
- package/dist/core/orchestrate.js.map +1 -0
- package/dist/core/policy.d.ts +9 -0
- package/dist/core/policy.js +27 -0
- package/dist/core/policy.js.map +1 -0
- package/dist/core/prompt.d.ts +26 -0
- package/dist/core/prompt.js +125 -0
- package/dist/core/prompt.js.map +1 -0
- package/dist/core/review.d.ts +46 -0
- package/dist/core/review.js +148 -0
- package/dist/core/review.js.map +1 -0
- package/dist/core/route.d.ts +28 -0
- package/dist/core/route.js +52 -0
- package/dist/core/route.js.map +1 -0
- package/dist/core/types.d.ts +141 -0
- package/dist/core/types.js +14 -0
- package/dist/core/types.js.map +1 -0
- package/dist/infra/atomic.d.ts +53 -0
- package/dist/infra/atomic.js +171 -0
- package/dist/infra/atomic.js.map +1 -0
- package/dist/infra/clock.d.ts +9 -0
- package/dist/infra/clock.js +15 -0
- package/dist/infra/clock.js.map +1 -0
- package/dist/infra/index.d.ts +9 -0
- package/dist/infra/index.js +7 -0
- package/dist/infra/index.js.map +1 -0
- package/dist/infra/ledger.d.ts +49 -0
- package/dist/infra/ledger.js +90 -0
- package/dist/infra/ledger.js.map +1 -0
- package/dist/infra/paths.d.ts +28 -0
- package/dist/infra/paths.js +38 -0
- package/dist/infra/paths.js.map +1 -0
- package/dist/infra/pricing.d.ts +47 -0
- package/dist/infra/pricing.js +151 -0
- package/dist/infra/pricing.js.map +1 -0
- package/dist/infra/session.d.ts +28 -0
- package/dist/infra/session.js +61 -0
- package/dist/infra/session.js.map +1 -0
- package/dist/interface/render.d.ts +27 -0
- package/dist/interface/render.js +134 -0
- package/dist/interface/render.js.map +1 -0
- package/dist/interface/repl.d.ts +23 -0
- package/dist/interface/repl.js +90 -0
- package/dist/interface/repl.js.map +1 -0
- package/dist/interface/run.d.ts +20 -0
- package/dist/interface/run.js +31 -0
- package/dist/interface/run.js.map +1 -0
- package/dist/providers/claude-parse.d.ts +24 -0
- package/dist/providers/claude-parse.js +113 -0
- package/dist/providers/claude-parse.js.map +1 -0
- package/dist/providers/claude.d.ts +45 -0
- package/dist/providers/claude.js +122 -0
- package/dist/providers/claude.js.map +1 -0
- package/dist/providers/codex-parse.d.ts +32 -0
- package/dist/providers/codex-parse.js +145 -0
- package/dist/providers/codex-parse.js.map +1 -0
- package/dist/providers/codex.d.ts +44 -0
- package/dist/providers/codex.js +124 -0
- package/dist/providers/codex.js.map +1 -0
- package/dist/providers/detect.d.ts +49 -0
- package/dist/providers/detect.js +125 -0
- package/dist/providers/detect.js.map +1 -0
- package/dist/providers/errors.d.ts +49 -0
- package/dist/providers/errors.js +189 -0
- package/dist/providers/errors.js.map +1 -0
- package/dist/providers/index.d.ts +9 -0
- package/dist/providers/index.js +7 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/port.d.ts +74 -0
- package/dist/providers/port.js +16 -0
- package/dist/providers/port.js.map +1 -0
- package/dist/providers/registry.d.ts +21 -0
- package/dist/providers/registry.js +34 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/ui/banner.d.ts +19 -0
- package/dist/ui/banner.js +32 -0
- package/dist/ui/banner.js.map +1 -0
- package/dist/ui/spinner.d.ts +27 -0
- package/dist/ui/spinner.js +67 -0
- package/dist/ui/spinner.js.map +1 -0
- package/dist/ui/theme.d.ts +32 -0
- package/dist/ui/theme.js +56 -0
- package/dist/ui/theme.js.map +1 -0
- package/package.json +55 -49
- package/data/orchestrator.json +0 -113
- package/src/auth/recovery.mjs +0 -328
- package/src/auth/refresh.mjs +0 -373
- package/src/chef.mjs +0 -348
- package/src/cli/doctor.mjs +0 -568
- package/src/cli/reset.mjs +0 -447
- package/src/cli/status.mjs +0 -379
- package/src/cli.mjs +0 -429
- package/src/commands/doctor.mjs +0 -375
- package/src/commands/help.mjs +0 -324
- package/src/commands/status.mjs +0 -331
- package/src/monitor/health.mjs +0 -486
- package/src/monitor/performance.mjs +0 -442
- package/src/monitor/report.mjs +0 -535
- package/src/orchestrator/classify.mjs +0 -391
- package/src/orchestrator/confidence.mjs +0 -151
- package/src/orchestrator/handoffs.mjs +0 -231
- package/src/orchestrator/review.mjs +0 -222
- package/src/providers/balance.mjs +0 -201
- package/src/providers/claude.mjs +0 -236
- package/src/providers/codex.mjs +0 -255
- package/src/providers/detect.mjs +0 -185
- package/src/providers/errors.mjs +0 -373
- package/src/providers/select.mjs +0 -162
- package/src/repl-enhanced.mjs +0 -417
- package/src/repl.mjs +0 -321
- package/src/state/archive.mjs +0 -366
- package/src/state/atomic.mjs +0 -116
- package/src/state/cleanup.mjs +0 -440
- package/src/state/recovery.mjs +0 -461
- package/src/state/session.mjs +0 -147
- package/src/ui/errors.mjs +0 -456
- package/src/ui/formatter.mjs +0 -327
- package/src/ui/icons.mjs +0 -318
- package/src/ui/progress.mjs +0 -468
- package/templates/prompts/confidence-format.txt +0 -14
- package/templates/prompts/ic-with-feedback.txt +0 -41
- package/templates/prompts/ic.txt +0 -13
- package/templates/prompts/manager-review.txt +0 -40
- package/templates/prompts/manager.txt +0 -14
- package/templates/prompts/worker.txt +0 -12
package/src/cli/reset.mjs
DELETED
|
@@ -1,447 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* reset.mjs — Clean slate reset functionality
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { existsSync } from 'fs';
|
|
6
|
-
import { join } from 'path';
|
|
7
|
-
import { resetAllState, performStateCleanup } from '../state/cleanup.mjs';
|
|
8
|
-
import { createSessionArchive } from '../state/archive.mjs';
|
|
9
|
-
import { getSessionSummary } from '../state/session.mjs';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Colors for terminal output
|
|
13
|
-
*/
|
|
14
|
-
const colors = {
|
|
15
|
-
red: '\x1b[31m',
|
|
16
|
-
green: '\x1b[32m',
|
|
17
|
-
yellow: '\x1b[33m',
|
|
18
|
-
blue: '\x1b[34m',
|
|
19
|
-
cyan: '\x1b[36m',
|
|
20
|
-
white: '\x1b[37m',
|
|
21
|
-
reset: '\x1b[0m',
|
|
22
|
-
bold: '\x1b[1m',
|
|
23
|
-
dim: '\x1b[2m'
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Reset options and their descriptions
|
|
28
|
-
*/
|
|
29
|
-
const RESET_OPTIONS = {
|
|
30
|
-
sessions: {
|
|
31
|
-
name: 'Sessions Only',
|
|
32
|
-
description: 'Clear current session but keep archives and auth',
|
|
33
|
-
dangerous: false
|
|
34
|
-
},
|
|
35
|
-
state: {
|
|
36
|
-
name: 'State Files',
|
|
37
|
-
description: 'Clear all state files but keep auth and archives',
|
|
38
|
-
dangerous: false
|
|
39
|
-
},
|
|
40
|
-
all: {
|
|
41
|
-
name: 'Full Reset',
|
|
42
|
-
description: 'Clear everything except authentication',
|
|
43
|
-
dangerous: true
|
|
44
|
-
},
|
|
45
|
-
nuclear: {
|
|
46
|
-
name: 'Nuclear Reset',
|
|
47
|
-
description: 'Clear absolutely everything including authentication',
|
|
48
|
-
dangerous: true
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Perform reset based on specified level
|
|
54
|
-
*/
|
|
55
|
-
export async function performReset(level = 'sessions', options = {}) {
|
|
56
|
-
const {
|
|
57
|
-
workspace = process.cwd(),
|
|
58
|
-
force = false,
|
|
59
|
-
archive = true,
|
|
60
|
-
verbose = false
|
|
61
|
-
} = options;
|
|
62
|
-
|
|
63
|
-
console.log(`${colors.bold}${colors.blue}🔄 Cortex Reset Tool${colors.reset}\n`);
|
|
64
|
-
|
|
65
|
-
if (!RESET_OPTIONS[level]) {
|
|
66
|
-
throw new Error(`Unknown reset level: ${level}. Available: ${Object.keys(RESET_OPTIONS).join(', ')}`);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const resetConfig = RESET_OPTIONS[level];
|
|
70
|
-
const cortexDir = join(workspace, '.cortex');
|
|
71
|
-
|
|
72
|
-
// Check if there's anything to reset
|
|
73
|
-
if (!existsSync(cortexDir)) {
|
|
74
|
-
console.log(`${colors.yellow}⚠️ No .cortex directory found in workspace.${colors.reset}`);
|
|
75
|
-
console.log(`${colors.dim}Nothing to reset.${colors.reset}\n`);
|
|
76
|
-
return { reset: false, reason: 'No Cortex data found' };
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// Show what will be reset
|
|
80
|
-
console.log(`${colors.bold}Reset Level: ${resetConfig.name}${colors.reset}`);
|
|
81
|
-
console.log(`${colors.dim}${resetConfig.description}${colors.reset}\n`);
|
|
82
|
-
|
|
83
|
-
// Archive current session if requested and data exists
|
|
84
|
-
let archiveResult = null;
|
|
85
|
-
if (archive && level !== 'sessions') {
|
|
86
|
-
const sessionSummary = getSessionSummary(workspace);
|
|
87
|
-
if (sessionSummary.messageCount > 0) {
|
|
88
|
-
console.log('📦 Archiving current session...');
|
|
89
|
-
archiveResult = createSessionArchive('pre-reset', { resetLevel: level }, workspace);
|
|
90
|
-
|
|
91
|
-
if (archiveResult.archived) {
|
|
92
|
-
console.log(`${colors.green}✅ Session archived: ${archiveResult.archiveId}${colors.reset}`);
|
|
93
|
-
} else {
|
|
94
|
-
console.log(`${colors.yellow}⚠️ Archive failed: ${archiveResult.reason}${colors.reset}`);
|
|
95
|
-
}
|
|
96
|
-
console.log();
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// Safety confirmation for dangerous operations
|
|
101
|
-
if (resetConfig.dangerous && !force) {
|
|
102
|
-
console.log(`${colors.red}${colors.bold}⚠️ WARNING: This is a destructive operation!${colors.reset}`);
|
|
103
|
-
console.log(`${colors.red}This will permanently delete Cortex data.${colors.reset}\n`);
|
|
104
|
-
|
|
105
|
-
// In a real implementation, you'd prompt for confirmation
|
|
106
|
-
// For now, require explicit --force flag for dangerous operations
|
|
107
|
-
console.log(`${colors.yellow}To proceed, use --force flag:${colors.reset}`);
|
|
108
|
-
console.log(`${colors.cyan} cortex --reset ${level} --force${colors.reset}\n`);
|
|
109
|
-
|
|
110
|
-
return { reset: false, reason: 'Confirmation required (use --force)' };
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// Perform the reset
|
|
114
|
-
console.log('🧹 Performing reset...\n');
|
|
115
|
-
|
|
116
|
-
const results = {
|
|
117
|
-
startTime: new Date().toISOString(),
|
|
118
|
-
level,
|
|
119
|
-
workspace,
|
|
120
|
-
operations: [],
|
|
121
|
-
archive: archiveResult,
|
|
122
|
-
errors: []
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
try {
|
|
126
|
-
switch (level) {
|
|
127
|
-
case 'sessions':
|
|
128
|
-
await resetSessions(workspace, results, verbose);
|
|
129
|
-
break;
|
|
130
|
-
|
|
131
|
-
case 'state':
|
|
132
|
-
await resetState(workspace, results, verbose);
|
|
133
|
-
break;
|
|
134
|
-
|
|
135
|
-
case 'all':
|
|
136
|
-
await resetAll(workspace, results, verbose);
|
|
137
|
-
break;
|
|
138
|
-
|
|
139
|
-
case 'nuclear':
|
|
140
|
-
await resetNuclear(workspace, results, verbose);
|
|
141
|
-
break;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// Final cleanup
|
|
145
|
-
const cleanupResults = performStateCleanup({
|
|
146
|
-
workspace,
|
|
147
|
-
verbose: false,
|
|
148
|
-
cleanLocks: true,
|
|
149
|
-
cleanTemps: true
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
results.operations.push({
|
|
153
|
-
operation: 'cleanup',
|
|
154
|
-
details: cleanupResults,
|
|
155
|
-
timestamp: new Date().toISOString()
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
if (verbose) {
|
|
159
|
-
console.log(`🧹 Cleaned up ${cleanupResults.operations.length} items`);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
} catch (error) {
|
|
163
|
-
results.errors.push({
|
|
164
|
-
operation: 'reset',
|
|
165
|
-
error: error.message,
|
|
166
|
-
timestamp: new Date().toISOString()
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
console.log(`${colors.red}❌ Reset failed: ${error.message}${colors.reset}\n`);
|
|
170
|
-
return { reset: false, error: error.message, results };
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
results.endTime = new Date().toISOString();
|
|
174
|
-
|
|
175
|
-
// Display results
|
|
176
|
-
displayResetResults(results);
|
|
177
|
-
|
|
178
|
-
return { reset: true, results };
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* Reset sessions only
|
|
183
|
-
*/
|
|
184
|
-
async function resetSessions(workspace, results, verbose) {
|
|
185
|
-
const sessionDir = join(workspace, '.cortex', 'sessions');
|
|
186
|
-
|
|
187
|
-
if (existsSync(sessionDir)) {
|
|
188
|
-
try {
|
|
189
|
-
require('fs').rmSync(sessionDir, { recursive: true, force: true });
|
|
190
|
-
require('fs').mkdirSync(sessionDir, { recursive: true });
|
|
191
|
-
|
|
192
|
-
results.operations.push({
|
|
193
|
-
operation: 'reset_sessions',
|
|
194
|
-
message: 'Cleared session directory',
|
|
195
|
-
timestamp: new Date().toISOString()
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
if (verbose) {
|
|
199
|
-
console.log('✅ Sessions cleared');
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
} catch (error) {
|
|
203
|
-
results.errors.push({
|
|
204
|
-
operation: 'reset_sessions',
|
|
205
|
-
error: error.message,
|
|
206
|
-
timestamp: new Date().toISOString()
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* Reset state files
|
|
214
|
-
*/
|
|
215
|
-
async function resetState(workspace, results, verbose) {
|
|
216
|
-
const stateItems = ['sessions', 'plans', 'work-state', 'checkpoints'];
|
|
217
|
-
|
|
218
|
-
for (const item of stateItems) {
|
|
219
|
-
const itemPath = join(workspace, '.cortex', item);
|
|
220
|
-
|
|
221
|
-
if (existsSync(itemPath)) {
|
|
222
|
-
try {
|
|
223
|
-
require('fs').rmSync(itemPath, { recursive: true, force: true });
|
|
224
|
-
|
|
225
|
-
results.operations.push({
|
|
226
|
-
operation: 'reset_state',
|
|
227
|
-
item,
|
|
228
|
-
message: `Cleared ${item} directory`,
|
|
229
|
-
timestamp: new Date().toISOString()
|
|
230
|
-
});
|
|
231
|
-
|
|
232
|
-
if (verbose) {
|
|
233
|
-
console.log(`✅ ${item} cleared`);
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
} catch (error) {
|
|
237
|
-
results.errors.push({
|
|
238
|
-
operation: 'reset_state',
|
|
239
|
-
item,
|
|
240
|
-
error: error.message,
|
|
241
|
-
timestamp: new Date().toISOString()
|
|
242
|
-
});
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
/**
|
|
249
|
-
* Reset all except auth
|
|
250
|
-
*/
|
|
251
|
-
async function resetAll(workspace, results, verbose) {
|
|
252
|
-
const resetResult = resetAllState(workspace, true); // Preserve auth
|
|
253
|
-
|
|
254
|
-
results.operations.push({
|
|
255
|
-
operation: 'reset_all',
|
|
256
|
-
message: 'Performed full reset (preserved auth)',
|
|
257
|
-
details: resetResult,
|
|
258
|
-
timestamp: new Date().toISOString()
|
|
259
|
-
});
|
|
260
|
-
|
|
261
|
-
if (resetResult.errors.length > 0) {
|
|
262
|
-
results.errors.push(...resetResult.errors.map(err => ({
|
|
263
|
-
operation: 'reset_all',
|
|
264
|
-
error: err,
|
|
265
|
-
timestamp: new Date().toISOString()
|
|
266
|
-
})));
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
if (verbose) {
|
|
270
|
-
console.log(`✅ Reset completed`);
|
|
271
|
-
console.log(` Removed: ${resetResult.removedDirs.join(', ')}`);
|
|
272
|
-
console.log(` Preserved: ${resetResult.preservedDirs.join(', ')}`);
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
/**
|
|
277
|
-
* Nuclear reset (everything)
|
|
278
|
-
*/
|
|
279
|
-
async function resetNuclear(workspace, results, verbose) {
|
|
280
|
-
const resetResult = resetAllState(workspace, false); // Don't preserve auth
|
|
281
|
-
|
|
282
|
-
results.operations.push({
|
|
283
|
-
operation: 'reset_nuclear',
|
|
284
|
-
message: 'Performed nuclear reset (including auth)',
|
|
285
|
-
details: resetResult,
|
|
286
|
-
timestamp: new Date().toISOString()
|
|
287
|
-
});
|
|
288
|
-
|
|
289
|
-
if (resetResult.errors.length > 0) {
|
|
290
|
-
results.errors.push(...resetResult.errors.map(err => ({
|
|
291
|
-
operation: 'reset_nuclear',
|
|
292
|
-
error: err,
|
|
293
|
-
timestamp: new Date().toISOString()
|
|
294
|
-
})));
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
if (verbose) {
|
|
298
|
-
console.log(`✅ Nuclear reset completed`);
|
|
299
|
-
console.log(` Removed: ${resetResult.removedDirs.join(', ')}`);
|
|
300
|
-
|
|
301
|
-
if (resetResult.preservedDirs.length > 0) {
|
|
302
|
-
console.log(` Preserved: ${resetResult.preservedDirs.join(', ')}`);
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
console.log(`${colors.yellow}⚠️ Authentication cleared - you'll need to re-authenticate CLIs${colors.reset}`);
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
/**
|
|
310
|
-
* Display reset results
|
|
311
|
-
*/
|
|
312
|
-
function displayResetResults(results) {
|
|
313
|
-
console.log(`${colors.bold}${colors.green}✅ Reset Completed${colors.reset}\n`);
|
|
314
|
-
|
|
315
|
-
console.log(`${colors.bold}Summary:${colors.reset}`);
|
|
316
|
-
console.log(` Level: ${RESET_OPTIONS[results.level].name}`);
|
|
317
|
-
console.log(` Operations: ${results.operations.length}`);
|
|
318
|
-
console.log(` Errors: ${results.errors.length}`);
|
|
319
|
-
|
|
320
|
-
if (results.archive?.archived) {
|
|
321
|
-
console.log(` Archive: ${results.archive.archiveId}`);
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
console.log();
|
|
325
|
-
|
|
326
|
-
// Show operations if there were any
|
|
327
|
-
if (results.operations.length > 0) {
|
|
328
|
-
console.log(`${colors.bold}Operations Performed:${colors.reset}`);
|
|
329
|
-
results.operations.forEach((op, index) => {
|
|
330
|
-
console.log(` ${index + 1}. ${op.message || op.operation}`);
|
|
331
|
-
});
|
|
332
|
-
console.log();
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
// Show errors if any
|
|
336
|
-
if (results.errors.length > 0) {
|
|
337
|
-
console.log(`${colors.bold}${colors.red}Errors:${colors.reset}`);
|
|
338
|
-
results.errors.forEach((err, index) => {
|
|
339
|
-
console.log(` ${index + 1}. ${err.operation}: ${err.error}`);
|
|
340
|
-
});
|
|
341
|
-
console.log();
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
// Next steps
|
|
345
|
-
console.log(`${colors.bold}Next Steps:${colors.reset}`);
|
|
346
|
-
|
|
347
|
-
if (results.level === 'nuclear') {
|
|
348
|
-
console.log(` 1. Re-authenticate CLIs:`);
|
|
349
|
-
console.log(` ${colors.cyan}claude auth login${colors.reset}`);
|
|
350
|
-
console.log(` ${colors.cyan}codex login${colors.reset}`);
|
|
351
|
-
console.log(` 2. Start fresh: ${colors.cyan}cortex${colors.reset}`);
|
|
352
|
-
} else if (results.level === 'all') {
|
|
353
|
-
console.log(` 1. Start fresh: ${colors.cyan}cortex${colors.reset}`);
|
|
354
|
-
console.log(` 2. Your authentication is preserved`);
|
|
355
|
-
} else {
|
|
356
|
-
console.log(` 1. Continue working: ${colors.cyan}cortex${colors.reset}`);
|
|
357
|
-
console.log(` 2. Your settings and auth are preserved`);
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
console.log();
|
|
361
|
-
console.log(`${colors.dim}Reset completed: ${new Date().toLocaleString()}${colors.reset}`);
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
/**
|
|
365
|
-
* List what would be reset (dry run)
|
|
366
|
-
*/
|
|
367
|
-
export function previewReset(level = 'sessions', workspace = process.cwd()) {
|
|
368
|
-
console.log(`${colors.bold}${colors.blue}🔍 Reset Preview${colors.reset}\n`);
|
|
369
|
-
|
|
370
|
-
const resetConfig = RESET_OPTIONS[level];
|
|
371
|
-
const cortexDir = join(workspace, '.cortex');
|
|
372
|
-
|
|
373
|
-
console.log(`${colors.bold}Reset Level: ${resetConfig.name}${colors.reset}`);
|
|
374
|
-
console.log(`${colors.dim}${resetConfig.description}${colors.reset}\n`);
|
|
375
|
-
|
|
376
|
-
if (!existsSync(cortexDir)) {
|
|
377
|
-
console.log(`${colors.yellow}⚠️ No .cortex directory found - nothing to reset${colors.reset}\n`);
|
|
378
|
-
return { hasData: false };
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
console.log(`${colors.bold}Items that would be affected:${colors.reset}`);
|
|
382
|
-
|
|
383
|
-
const items = [];
|
|
384
|
-
|
|
385
|
-
try {
|
|
386
|
-
const entries = require('fs').readdirSync(cortexDir);
|
|
387
|
-
|
|
388
|
-
entries.forEach(entry => {
|
|
389
|
-
const fullPath = join(cortexDir, entry);
|
|
390
|
-
const stat = require('fs').statSync(fullPath);
|
|
391
|
-
|
|
392
|
-
if (stat.isDirectory()) {
|
|
393
|
-
const shouldAffect = wouldAffectItem(entry, level);
|
|
394
|
-
const status = shouldAffect ? '❌ Will be removed' : '✅ Will be preserved';
|
|
395
|
-
const color = shouldAffect ? colors.red : colors.green;
|
|
396
|
-
|
|
397
|
-
console.log(` ${color}${entry}/${colors.reset} - ${color}${status}${colors.reset}`);
|
|
398
|
-
items.push({ name: entry, affected: shouldAffect });
|
|
399
|
-
}
|
|
400
|
-
});
|
|
401
|
-
|
|
402
|
-
} catch (error) {
|
|
403
|
-
console.log(`${colors.red}❌ Error reading directory: ${error.message}${colors.reset}`);
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
if (resetConfig.dangerous) {
|
|
407
|
-
console.log(`\n${colors.red}${colors.bold}⚠️ WARNING: This is a destructive operation!${colors.reset}`);
|
|
408
|
-
console.log(`${colors.red}Use --force to proceed with this reset level.${colors.reset}`);
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
console.log();
|
|
412
|
-
return { hasData: true, items };
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
/**
|
|
416
|
-
* Check if an item would be affected by reset level
|
|
417
|
-
*/
|
|
418
|
-
function wouldAffectItem(item, level) {
|
|
419
|
-
switch (level) {
|
|
420
|
-
case 'sessions':
|
|
421
|
-
return item === 'sessions';
|
|
422
|
-
|
|
423
|
-
case 'state':
|
|
424
|
-
return ['sessions', 'plans', 'work-state', 'checkpoints'].includes(item);
|
|
425
|
-
|
|
426
|
-
case 'all':
|
|
427
|
-
return item !== 'auth';
|
|
428
|
-
|
|
429
|
-
case 'nuclear':
|
|
430
|
-
return true;
|
|
431
|
-
|
|
432
|
-
default:
|
|
433
|
-
return false;
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
/**
|
|
438
|
-
* Get available reset levels
|
|
439
|
-
*/
|
|
440
|
-
export function getResetLevels() {
|
|
441
|
-
return Object.entries(RESET_OPTIONS).map(([key, config]) => ({
|
|
442
|
-
level: key,
|
|
443
|
-
name: config.name,
|
|
444
|
-
description: config.description,
|
|
445
|
-
dangerous: config.dangerous
|
|
446
|
-
}));
|
|
447
|
-
}
|