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
@@ -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
- }