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.
Files changed (153) 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 +130 -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/commands/login.d.ts +20 -0
  14. package/dist/commands/login.js +60 -0
  15. package/dist/commands/login.js.map +1 -0
  16. package/dist/core/assess.d.ts +25 -0
  17. package/dist/core/assess.js +142 -0
  18. package/dist/core/assess.js.map +1 -0
  19. package/dist/core/classify.d.ts +19 -0
  20. package/dist/core/classify.js +80 -0
  21. package/dist/core/classify.js.map +1 -0
  22. package/dist/core/escalate.d.ts +32 -0
  23. package/dist/core/escalate.js +57 -0
  24. package/dist/core/escalate.js.map +1 -0
  25. package/dist/core/index.d.ts +13 -0
  26. package/dist/core/index.js +12 -0
  27. package/dist/core/index.js.map +1 -0
  28. package/dist/core/orchestrate.d.ts +42 -0
  29. package/dist/core/orchestrate.js +439 -0
  30. package/dist/core/orchestrate.js.map +1 -0
  31. package/dist/core/policy.d.ts +9 -0
  32. package/dist/core/policy.js +27 -0
  33. package/dist/core/policy.js.map +1 -0
  34. package/dist/core/prompt.d.ts +26 -0
  35. package/dist/core/prompt.js +125 -0
  36. package/dist/core/prompt.js.map +1 -0
  37. package/dist/core/review.d.ts +46 -0
  38. package/dist/core/review.js +148 -0
  39. package/dist/core/review.js.map +1 -0
  40. package/dist/core/route.d.ts +28 -0
  41. package/dist/core/route.js +52 -0
  42. package/dist/core/route.js.map +1 -0
  43. package/dist/core/types.d.ts +141 -0
  44. package/dist/core/types.js +14 -0
  45. package/dist/core/types.js.map +1 -0
  46. package/dist/infra/atomic.d.ts +53 -0
  47. package/dist/infra/atomic.js +171 -0
  48. package/dist/infra/atomic.js.map +1 -0
  49. package/dist/infra/clock.d.ts +9 -0
  50. package/dist/infra/clock.js +15 -0
  51. package/dist/infra/clock.js.map +1 -0
  52. package/dist/infra/index.d.ts +9 -0
  53. package/dist/infra/index.js +7 -0
  54. package/dist/infra/index.js.map +1 -0
  55. package/dist/infra/ledger.d.ts +49 -0
  56. package/dist/infra/ledger.js +90 -0
  57. package/dist/infra/ledger.js.map +1 -0
  58. package/dist/infra/paths.d.ts +28 -0
  59. package/dist/infra/paths.js +38 -0
  60. package/dist/infra/paths.js.map +1 -0
  61. package/dist/infra/pricing.d.ts +47 -0
  62. package/dist/infra/pricing.js +151 -0
  63. package/dist/infra/pricing.js.map +1 -0
  64. package/dist/infra/session.d.ts +28 -0
  65. package/dist/infra/session.js +61 -0
  66. package/dist/infra/session.js.map +1 -0
  67. package/dist/interface/render.d.ts +27 -0
  68. package/dist/interface/render.js +134 -0
  69. package/dist/interface/render.js.map +1 -0
  70. package/dist/interface/repl.d.ts +23 -0
  71. package/dist/interface/repl.js +90 -0
  72. package/dist/interface/repl.js.map +1 -0
  73. package/dist/interface/run.d.ts +20 -0
  74. package/dist/interface/run.js +31 -0
  75. package/dist/interface/run.js.map +1 -0
  76. package/dist/providers/claude-parse.d.ts +24 -0
  77. package/dist/providers/claude-parse.js +113 -0
  78. package/dist/providers/claude-parse.js.map +1 -0
  79. package/dist/providers/claude.d.ts +45 -0
  80. package/dist/providers/claude.js +122 -0
  81. package/dist/providers/claude.js.map +1 -0
  82. package/dist/providers/codex-parse.d.ts +32 -0
  83. package/dist/providers/codex-parse.js +145 -0
  84. package/dist/providers/codex-parse.js.map +1 -0
  85. package/dist/providers/codex.d.ts +44 -0
  86. package/dist/providers/codex.js +124 -0
  87. package/dist/providers/codex.js.map +1 -0
  88. package/dist/providers/detect.d.ts +49 -0
  89. package/dist/providers/detect.js +125 -0
  90. package/dist/providers/detect.js.map +1 -0
  91. package/dist/providers/errors.d.ts +49 -0
  92. package/dist/providers/errors.js +189 -0
  93. package/dist/providers/errors.js.map +1 -0
  94. package/dist/providers/index.d.ts +9 -0
  95. package/dist/providers/index.js +7 -0
  96. package/dist/providers/index.js.map +1 -0
  97. package/dist/providers/port.d.ts +74 -0
  98. package/dist/providers/port.js +16 -0
  99. package/dist/providers/port.js.map +1 -0
  100. package/dist/providers/registry.d.ts +21 -0
  101. package/dist/providers/registry.js +34 -0
  102. package/dist/providers/registry.js.map +1 -0
  103. package/dist/ui/banner.d.ts +19 -0
  104. package/dist/ui/banner.js +32 -0
  105. package/dist/ui/banner.js.map +1 -0
  106. package/dist/ui/spinner.d.ts +27 -0
  107. package/dist/ui/spinner.js +67 -0
  108. package/dist/ui/spinner.js.map +1 -0
  109. package/dist/ui/theme.d.ts +32 -0
  110. package/dist/ui/theme.js +56 -0
  111. package/dist/ui/theme.js.map +1 -0
  112. package/package.json +55 -49
  113. package/data/orchestrator.json +0 -113
  114. package/src/auth/recovery.mjs +0 -328
  115. package/src/auth/refresh.mjs +0 -373
  116. package/src/chef.mjs +0 -348
  117. package/src/cli/doctor.mjs +0 -568
  118. package/src/cli/reset.mjs +0 -447
  119. package/src/cli/status.mjs +0 -379
  120. package/src/cli.mjs +0 -429
  121. package/src/commands/doctor.mjs +0 -375
  122. package/src/commands/help.mjs +0 -324
  123. package/src/commands/status.mjs +0 -331
  124. package/src/monitor/health.mjs +0 -486
  125. package/src/monitor/performance.mjs +0 -442
  126. package/src/monitor/report.mjs +0 -535
  127. package/src/orchestrator/classify.mjs +0 -391
  128. package/src/orchestrator/confidence.mjs +0 -151
  129. package/src/orchestrator/handoffs.mjs +0 -231
  130. package/src/orchestrator/review.mjs +0 -222
  131. package/src/providers/balance.mjs +0 -201
  132. package/src/providers/claude.mjs +0 -236
  133. package/src/providers/codex.mjs +0 -255
  134. package/src/providers/detect.mjs +0 -185
  135. package/src/providers/errors.mjs +0 -373
  136. package/src/providers/select.mjs +0 -162
  137. package/src/repl-enhanced.mjs +0 -417
  138. package/src/repl.mjs +0 -321
  139. package/src/state/archive.mjs +0 -366
  140. package/src/state/atomic.mjs +0 -116
  141. package/src/state/cleanup.mjs +0 -440
  142. package/src/state/recovery.mjs +0 -461
  143. package/src/state/session.mjs +0 -147
  144. package/src/ui/errors.mjs +0 -456
  145. package/src/ui/formatter.mjs +0 -327
  146. package/src/ui/icons.mjs +0 -318
  147. package/src/ui/progress.mjs +0 -468
  148. package/templates/prompts/confidence-format.txt +0 -14
  149. package/templates/prompts/ic-with-feedback.txt +0 -41
  150. package/templates/prompts/ic.txt +0 -13
  151. package/templates/prompts/manager-review.txt +0 -40
  152. package/templates/prompts/manager.txt +0 -14
  153. package/templates/prompts/worker.txt +0 -12
@@ -1,379 +0,0 @@
1
- /**
2
- * status.mjs — Current session and system status display
3
- */
4
-
5
- import { detectEnvironment, getAvailableModels } from '../providers/detect.mjs';
6
- import { getSessionSummary, loadSession } from '../state/session.mjs';
7
- import { getRecoveryStatus, getPlans } from '../state/recovery.mjs';
8
- import { getStorageStats } from '../state/cleanup.mjs';
9
- import { listArchives } from '../state/archive.mjs';
10
- import { loadRefreshState } from '../auth/refresh.mjs';
11
-
12
- /**
13
- * Colors for terminal output
14
- */
15
- const colors = {
16
- red: '\x1b[31m',
17
- green: '\x1b[32m',
18
- yellow: '\x1b[33m',
19
- blue: '\x1b[34m',
20
- magenta: '\x1b[35m',
21
- cyan: '\x1b[36m',
22
- white: '\x1b[37m',
23
- reset: '\x1b[0m',
24
- bold: '\x1b[1m',
25
- dim: '\x1b[2m'
26
- };
27
-
28
- /**
29
- * Status icons
30
- */
31
- const icons = {
32
- healthy: '✅',
33
- warning: '⚠️ ',
34
- error: '❌',
35
- info: 'ℹ️ ',
36
- active: '🟢',
37
- inactive: '⚪',
38
- working: '🔄',
39
- archive: '📦'
40
- };
41
-
42
- /**
43
- * Display comprehensive status information
44
- */
45
- export function displayStatus(workspace = process.cwd(), options = {}) {
46
- const { verbose = false, format = 'table' } = options;
47
-
48
- console.log(`${colors.bold}${colors.blue}📊 Cortex Status Report${colors.reset}\n`);
49
-
50
- const statusData = gatherStatusData(workspace);
51
-
52
- if (format === 'json') {
53
- console.log(JSON.stringify(statusData, null, 2));
54
- return statusData;
55
- }
56
-
57
- // Display in human-readable format
58
- displaySystemStatus(statusData.system);
59
- displaySessionStatus(statusData.session);
60
- displayProviderStatus(statusData.providers);
61
- displayWorkStatus(statusData.work);
62
- displayStorageStatus(statusData.storage);
63
-
64
- if (verbose) {
65
- displayDetailedStatus(statusData);
66
- }
67
-
68
- return statusData;
69
- }
70
-
71
- /**
72
- * Gather all status information
73
- */
74
- function gatherStatusData(workspace) {
75
- const env = detectEnvironment();
76
- const models = getAvailableModels(env);
77
- const sessionSummary = getSessionSummary(workspace);
78
- const recoveryStatus = getRecoveryStatus(workspace);
79
- const storageStats = getStorageStats(workspace);
80
- const refreshState = loadRefreshState();
81
- const archives = listArchives(workspace);
82
- const plans = getPlans(null, workspace);
83
-
84
- return {
85
- timestamp: new Date().toISOString(),
86
- workspace,
87
- system: {
88
- environment: env,
89
- models,
90
- healthy: env.hasProviders && models.manager.length > 0
91
- },
92
- session: {
93
- summary: sessionSummary,
94
- active: sessionSummary.messageCount > 0,
95
- lastActivity: sessionSummary.lastMessage?.timestamp || null
96
- },
97
- providers: {
98
- claude: {
99
- installed: env.claude.installed,
100
- authenticated: env.claude.authed,
101
- version: env.claude.version,
102
- models: env.claude.models
103
- },
104
- codex: {
105
- installed: env.codex.installed,
106
- authenticated: env.codex.authed,
107
- path: env.codex.path,
108
- models: env.codex.models
109
- }
110
- },
111
- auth: {
112
- refreshState,
113
- lastRefresh: refreshState?.lastRefresh || null,
114
- nextRefreshDue: refreshState?.nextRefreshDue || null
115
- },
116
- work: {
117
- plans: plans.length,
118
- interrupted: recoveryStatus.hasInterruptedWork,
119
- interruptedCount: recoveryStatus.interruptedCount,
120
- canRecover: recoveryStatus.canAutoRecover
121
- },
122
- storage: {
123
- stats: storageStats,
124
- archives: archives.length,
125
- totalSize: storageStats.totalSize,
126
- breakdown: storageStats.breakdown
127
- }
128
- };
129
- }
130
-
131
- /**
132
- * Display system status
133
- */
134
- function displaySystemStatus(system) {
135
- console.log(`${colors.bold}System${colors.reset}`);
136
-
137
- // Overall health
138
- const healthIcon = system.healthy ? icons.healthy : icons.error;
139
- const healthStatus = system.healthy ? `${colors.green}Healthy${colors.reset}` : `${colors.red}Needs Attention${colors.reset}`;
140
- console.log(` ${healthIcon} Status: ${healthStatus}`);
141
-
142
- // Model tiers
143
- const tierCounts = {
144
- manager: system.models.manager.length,
145
- ic: system.models.ic.length,
146
- worker: system.models.worker.length
147
- };
148
-
149
- console.log(` 🏗️ Model Tiers: M:${tierCounts.manager} IC:${tierCounts.ic} W:${tierCounts.worker}`);
150
-
151
- // Platform info
152
- console.log(` 💻 Platform: ${process.platform}/${process.arch}, Node ${process.version}`);
153
- console.log();
154
- }
155
-
156
- /**
157
- * Display session status
158
- */
159
- function displaySessionStatus(session) {
160
- console.log(`${colors.bold}Current Session${colors.reset}`);
161
-
162
- if (session.active) {
163
- const duration = session.summary.duration ?
164
- formatDuration(session.summary.duration) : 'unknown';
165
-
166
- console.log(` ${icons.active} Active session with ${session.summary.messageCount} messages`);
167
- console.log(` 💬 Messages: ${session.summary.userMessageCount} user, ${session.summary.assistantMessageCount} assistant`);
168
- console.log(` ⏱️ Duration: ${duration}`);
169
-
170
- if (session.lastActivity) {
171
- const lastTime = new Date(session.lastActivity).toLocaleTimeString();
172
- console.log(` 🕐 Last activity: ${lastTime}`);
173
- }
174
- } else {
175
- console.log(` ${icons.inactive} No active session`);
176
- }
177
-
178
- console.log();
179
- }
180
-
181
- /**
182
- * Display provider status
183
- */
184
- function displayProviderStatus(providers) {
185
- console.log(`${colors.bold}Providers${colors.reset}`);
186
-
187
- // Claude status
188
- const claudeIcon = providers.claude.authenticated ? icons.healthy :
189
- providers.claude.installed ? icons.warning : icons.error;
190
- const claudeStatus = providers.claude.authenticated ? 'Authenticated' :
191
- providers.claude.installed ? 'Not authenticated' : 'Not installed';
192
- const claudeColor = providers.claude.authenticated ? colors.green :
193
- providers.claude.installed ? colors.yellow : colors.red;
194
-
195
- console.log(` ${claudeIcon} Claude: ${claudeColor}${claudeStatus}${colors.reset}`);
196
- if (providers.claude.version) {
197
- console.log(` ${colors.dim}Version: ${providers.claude.version}${colors.reset}`);
198
- }
199
-
200
- // Codex status
201
- const codexIcon = providers.codex.authenticated ? icons.healthy :
202
- providers.codex.installed ? icons.warning : icons.error;
203
- const codexStatus = providers.codex.authenticated ? 'Authenticated' :
204
- providers.codex.installed ? 'Not authenticated' : 'Not installed';
205
- const codexColor = providers.codex.authenticated ? colors.green :
206
- providers.codex.installed ? colors.yellow : colors.red;
207
-
208
- console.log(` ${codexIcon} Codex: ${codexColor}${codexStatus}${colors.reset}`);
209
- if (providers.codex.path) {
210
- console.log(` ${colors.dim}Path: ${providers.codex.path}${colors.reset}`);
211
- }
212
-
213
- console.log();
214
- }
215
-
216
- /**
217
- * Display work status
218
- */
219
- function displayWorkStatus(work) {
220
- console.log(`${colors.bold}Work State${colors.reset}`);
221
-
222
- if (work.interrupted) {
223
- console.log(` ${icons.warning} ${work.interruptedCount} interrupted session(s)`);
224
- const recoverStatus = work.canRecover ? 'automatic' : 'manual intervention needed';
225
- console.log(` 🔄 Recovery: ${recoverStatus}`);
226
- } else {
227
- console.log(` ${icons.healthy} No interrupted work`);
228
- }
229
-
230
- if (work.plans > 0) {
231
- console.log(` 📋 Plans: ${work.plans} total`);
232
- }
233
-
234
- console.log();
235
- }
236
-
237
- /**
238
- * Display storage status
239
- */
240
- function displayStorageStatus(storage) {
241
- console.log(`${colors.bold}Storage${colors.reset}`);
242
-
243
- const totalMB = Math.round(storage.totalSize / 1024 / 1024);
244
- const storageColor = totalMB < 50 ? colors.green :
245
- totalMB < 200 ? colors.yellow : colors.red;
246
-
247
- console.log(` 💾 Total: ${storageColor}${totalMB}MB${colors.reset}`);
248
-
249
- // Breakdown
250
- if (storage.breakdown.sessions > 0) {
251
- const sessionsMB = Math.round(storage.breakdown.sessions / 1024 / 1024);
252
- console.log(` Sessions: ${sessionsMB}MB`);
253
- }
254
-
255
- if (storage.breakdown.archives > 0) {
256
- const archivesMB = Math.round(storage.breakdown.archives / 1024 / 1024);
257
- console.log(` ${icons.archive} Archives: ${archivesMB}MB (${storage.archives} files)`);
258
- }
259
-
260
- console.log();
261
- }
262
-
263
- /**
264
- * Display detailed status (verbose mode)
265
- */
266
- function displayDetailedStatus(statusData) {
267
- console.log(`${colors.bold}${colors.cyan}Detailed Information${colors.reset}\n`);
268
-
269
- // Authentication details
270
- if (statusData.auth.refreshState) {
271
- console.log(`${colors.bold}Authentication${colors.reset}`);
272
- const lastRefresh = statusData.auth.lastRefresh ?
273
- new Date(statusData.auth.lastRefresh).toLocaleString() : 'Never';
274
- console.log(` Last token refresh: ${lastRefresh}`);
275
-
276
- if (statusData.auth.nextRefreshDue) {
277
- const nextRefresh = new Date(statusData.auth.nextRefreshDue).toLocaleString();
278
- console.log(` Next refresh due: ${nextRefresh}`);
279
- }
280
- console.log();
281
- }
282
-
283
- // Recent session activity
284
- if (statusData.session.active) {
285
- console.log(`${colors.bold}Recent Activity${colors.reset}`);
286
- const recentMessages = loadSession().slice(-5); // Last 5 messages
287
-
288
- recentMessages.forEach((msg, index) => {
289
- const time = new Date(msg.timestamp).toLocaleTimeString();
290
- const role = msg.role === 'user' ? '👤' : msg.role === 'assistant' ? '🤖' : '⚙️ ';
291
- const preview = msg.content.length > 50 ?
292
- msg.content.substring(0, 50) + '...' : msg.content;
293
-
294
- console.log(` ${role} ${colors.dim}${time}${colors.reset} ${preview}`);
295
- });
296
- console.log();
297
- }
298
-
299
- // Storage breakdown
300
- console.log(`${colors.bold}Storage Breakdown${colors.reset}`);
301
- Object.entries(statusData.storage.breakdown).forEach(([category, size]) => {
302
- if (size > 0) {
303
- const sizeMB = (size / 1024 / 1024).toFixed(1);
304
- const percentage = ((size / statusData.storage.totalSize) * 100).toFixed(1);
305
- console.log(` ${category}: ${sizeMB}MB (${percentage}%)`);
306
- }
307
- });
308
- console.log();
309
-
310
- // Model availability
311
- console.log(`${colors.bold}Available Models${colors.reset}`);
312
- ['manager', 'ic', 'worker'].forEach(tier => {
313
- const models = statusData.system.models[tier];
314
- if (models.length > 0) {
315
- console.log(` ${tier.toUpperCase()}:`);
316
- models.forEach(model => {
317
- console.log(` ${model.provider}/${model.model}`);
318
- });
319
- } else {
320
- console.log(` ${tier.toUpperCase()}: ${colors.red}None available${colors.reset}`);
321
- }
322
- });
323
- console.log();
324
- }
325
-
326
- /**
327
- * Get quick status summary for other commands
328
- */
329
- export function getQuickStatus(workspace = process.cwd()) {
330
- const env = detectEnvironment();
331
- const sessionSummary = getSessionSummary(workspace);
332
-
333
- return {
334
- healthy: env.hasProviders,
335
- activeSession: sessionSummary.messageCount > 0,
336
- providers: {
337
- claude: env.claude.authed,
338
- codex: env.codex.authed
339
- },
340
- lastActivity: sessionSummary.lastMessage?.timestamp || null
341
- };
342
- }
343
-
344
- /**
345
- * Display status bar (compact format)
346
- */
347
- export function displayStatusBar(workspace = process.cwd()) {
348
- const status = getQuickStatus(workspace);
349
-
350
- const healthIcon = status.healthy ? '🟢' : '🔴';
351
- const sessionIcon = status.activeSession ? '💬' : '💤';
352
-
353
- const providerStatus = [];
354
- if (status.providers.claude) providerStatus.push('C');
355
- if (status.providers.codex) providerStatus.push('O');
356
-
357
- const providerStr = providerStatus.length > 0 ?
358
- providerStatus.join('') : 'None';
359
-
360
- console.log(`${healthIcon} ${sessionIcon} [${providerStr}]`);
361
- }
362
-
363
- /**
364
- * Format duration in human-readable form
365
- */
366
- function formatDuration(ms) {
367
- const minutes = Math.floor(ms / 60000);
368
- const seconds = Math.floor((ms % 60000) / 1000);
369
-
370
- if (minutes > 60) {
371
- const hours = Math.floor(minutes / 60);
372
- const remainingMinutes = minutes % 60;
373
- return `${hours}h ${remainingMinutes}m`;
374
- } else if (minutes > 0) {
375
- return `${minutes}m ${seconds}s`;
376
- } else {
377
- return `${seconds}s`;
378
- }
379
- }