myshell-tools 1.0.0 → 2.0.0-alpha.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.
Files changed (150) hide show
  1. package/CHANGELOG.md +44 -69
  2. package/LICENSE +21 -21
  3. package/README.md +178 -318
  4. package/dist/cli.d.ts +8 -0
  5. package/dist/cli.js +106 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/cost.d.ts +36 -0
  8. package/dist/commands/cost.js +103 -0
  9. package/dist/commands/cost.js.map +1 -0
  10. package/dist/commands/doctor.d.ts +36 -0
  11. package/dist/commands/doctor.js +115 -0
  12. package/dist/commands/doctor.js.map +1 -0
  13. package/dist/core/assess.d.ts +25 -0
  14. package/dist/core/assess.js +142 -0
  15. package/dist/core/assess.js.map +1 -0
  16. package/dist/core/classify.d.ts +19 -0
  17. package/dist/core/classify.js +80 -0
  18. package/dist/core/classify.js.map +1 -0
  19. package/dist/core/escalate.d.ts +32 -0
  20. package/dist/core/escalate.js +57 -0
  21. package/dist/core/escalate.js.map +1 -0
  22. package/dist/core/index.d.ts +13 -0
  23. package/dist/core/index.js +12 -0
  24. package/dist/core/index.js.map +1 -0
  25. package/dist/core/orchestrate.d.ts +42 -0
  26. package/dist/core/orchestrate.js +439 -0
  27. package/dist/core/orchestrate.js.map +1 -0
  28. package/dist/core/policy.d.ts +9 -0
  29. package/dist/core/policy.js +27 -0
  30. package/dist/core/policy.js.map +1 -0
  31. package/dist/core/prompt.d.ts +26 -0
  32. package/dist/core/prompt.js +125 -0
  33. package/dist/core/prompt.js.map +1 -0
  34. package/dist/core/review.d.ts +46 -0
  35. package/dist/core/review.js +148 -0
  36. package/dist/core/review.js.map +1 -0
  37. package/dist/core/route.d.ts +28 -0
  38. package/dist/core/route.js +52 -0
  39. package/dist/core/route.js.map +1 -0
  40. package/dist/core/types.d.ts +141 -0
  41. package/dist/core/types.js +14 -0
  42. package/dist/core/types.js.map +1 -0
  43. package/dist/infra/atomic.d.ts +53 -0
  44. package/dist/infra/atomic.js +171 -0
  45. package/dist/infra/atomic.js.map +1 -0
  46. package/dist/infra/clock.d.ts +9 -0
  47. package/dist/infra/clock.js +15 -0
  48. package/dist/infra/clock.js.map +1 -0
  49. package/dist/infra/index.d.ts +9 -0
  50. package/dist/infra/index.js +7 -0
  51. package/dist/infra/index.js.map +1 -0
  52. package/dist/infra/ledger.d.ts +49 -0
  53. package/dist/infra/ledger.js +90 -0
  54. package/dist/infra/ledger.js.map +1 -0
  55. package/dist/infra/paths.d.ts +28 -0
  56. package/dist/infra/paths.js +38 -0
  57. package/dist/infra/paths.js.map +1 -0
  58. package/dist/infra/pricing.d.ts +47 -0
  59. package/dist/infra/pricing.js +151 -0
  60. package/dist/infra/pricing.js.map +1 -0
  61. package/dist/infra/session.d.ts +28 -0
  62. package/dist/infra/session.js +61 -0
  63. package/dist/infra/session.js.map +1 -0
  64. package/dist/interface/render.d.ts +27 -0
  65. package/dist/interface/render.js +134 -0
  66. package/dist/interface/render.js.map +1 -0
  67. package/dist/interface/repl.d.ts +23 -0
  68. package/dist/interface/repl.js +90 -0
  69. package/dist/interface/repl.js.map +1 -0
  70. package/dist/interface/run.d.ts +20 -0
  71. package/dist/interface/run.js +31 -0
  72. package/dist/interface/run.js.map +1 -0
  73. package/dist/providers/claude-parse.d.ts +24 -0
  74. package/dist/providers/claude-parse.js +113 -0
  75. package/dist/providers/claude-parse.js.map +1 -0
  76. package/dist/providers/claude.d.ts +45 -0
  77. package/dist/providers/claude.js +122 -0
  78. package/dist/providers/claude.js.map +1 -0
  79. package/dist/providers/codex-parse.d.ts +32 -0
  80. package/dist/providers/codex-parse.js +145 -0
  81. package/dist/providers/codex-parse.js.map +1 -0
  82. package/dist/providers/codex.d.ts +44 -0
  83. package/dist/providers/codex.js +124 -0
  84. package/dist/providers/codex.js.map +1 -0
  85. package/dist/providers/detect.d.ts +49 -0
  86. package/dist/providers/detect.js +125 -0
  87. package/dist/providers/detect.js.map +1 -0
  88. package/dist/providers/errors.d.ts +49 -0
  89. package/dist/providers/errors.js +189 -0
  90. package/dist/providers/errors.js.map +1 -0
  91. package/dist/providers/index.d.ts +9 -0
  92. package/dist/providers/index.js +7 -0
  93. package/dist/providers/index.js.map +1 -0
  94. package/dist/providers/port.d.ts +74 -0
  95. package/dist/providers/port.js +16 -0
  96. package/dist/providers/port.js.map +1 -0
  97. package/dist/providers/registry.d.ts +21 -0
  98. package/dist/providers/registry.js +34 -0
  99. package/dist/providers/registry.js.map +1 -0
  100. package/dist/ui/banner.d.ts +19 -0
  101. package/dist/ui/banner.js +32 -0
  102. package/dist/ui/banner.js.map +1 -0
  103. package/dist/ui/spinner.d.ts +27 -0
  104. package/dist/ui/spinner.js +67 -0
  105. package/dist/ui/spinner.js.map +1 -0
  106. package/dist/ui/theme.d.ts +32 -0
  107. package/dist/ui/theme.js +56 -0
  108. package/dist/ui/theme.js.map +1 -0
  109. package/package.json +55 -49
  110. package/data/orchestrator.json +0 -113
  111. package/src/auth/recovery.mjs +0 -328
  112. package/src/auth/refresh.mjs +0 -373
  113. package/src/chef.mjs +0 -348
  114. package/src/cli/doctor.mjs +0 -568
  115. package/src/cli/reset.mjs +0 -447
  116. package/src/cli/status.mjs +0 -379
  117. package/src/cli.mjs +0 -429
  118. package/src/commands/doctor.mjs +0 -375
  119. package/src/commands/help.mjs +0 -324
  120. package/src/commands/status.mjs +0 -331
  121. package/src/monitor/health.mjs +0 -486
  122. package/src/monitor/performance.mjs +0 -442
  123. package/src/monitor/report.mjs +0 -535
  124. package/src/orchestrator/classify.mjs +0 -391
  125. package/src/orchestrator/confidence.mjs +0 -151
  126. package/src/orchestrator/handoffs.mjs +0 -231
  127. package/src/orchestrator/review.mjs +0 -222
  128. package/src/providers/balance.mjs +0 -201
  129. package/src/providers/claude.mjs +0 -236
  130. package/src/providers/codex.mjs +0 -255
  131. package/src/providers/detect.mjs +0 -185
  132. package/src/providers/errors.mjs +0 -373
  133. package/src/providers/select.mjs +0 -162
  134. package/src/repl-enhanced.mjs +0 -417
  135. package/src/repl.mjs +0 -321
  136. package/src/state/archive.mjs +0 -366
  137. package/src/state/atomic.mjs +0 -116
  138. package/src/state/cleanup.mjs +0 -440
  139. package/src/state/recovery.mjs +0 -461
  140. package/src/state/session.mjs +0 -147
  141. package/src/ui/errors.mjs +0 -456
  142. package/src/ui/formatter.mjs +0 -327
  143. package/src/ui/icons.mjs +0 -318
  144. package/src/ui/progress.mjs +0 -468
  145. package/templates/prompts/confidence-format.txt +0 -14
  146. package/templates/prompts/ic-with-feedback.txt +0 -41
  147. package/templates/prompts/ic.txt +0 -13
  148. package/templates/prompts/manager-review.txt +0 -40
  149. package/templates/prompts/manager.txt +0 -14
  150. 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
- }