erosolar-cli 1.7.370 → 1.7.371
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/dist/contracts/agent-schemas.json +11 -1
- package/dist/shell/interactiveShell.d.ts +2 -0
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +114 -3
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/shell/terminalInput.d.ts +1 -0
- package/dist/shell/terminalInput.d.ts.map +1 -1
- package/dist/shell/terminalInput.js +34 -9
- package/dist/shell/terminalInput.js.map +1 -1
- package/dist/ui/ShellUIAdapter.d.ts +9 -3
- package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
- package/dist/ui/ShellUIAdapter.js +202 -46
- package/dist/ui/ShellUIAdapter.js.map +1 -1
- package/dist/ui/shortcutsHelp.d.ts.map +1 -1
- package/dist/ui/shortcutsHelp.js +19 -14
- package/dist/ui/shortcutsHelp.js.map +1 -1
- package/package.json +1 -1
|
@@ -303,6 +303,11 @@
|
|
|
303
303
|
],
|
|
304
304
|
|
|
305
305
|
"slashCommands": [
|
|
306
|
+
{
|
|
307
|
+
"command": "/help",
|
|
308
|
+
"description": "Show all available commands and keyboard shortcuts",
|
|
309
|
+
"category": "other"
|
|
310
|
+
},
|
|
306
311
|
{
|
|
307
312
|
"command": "/model",
|
|
308
313
|
"description": "Choose what model to use",
|
|
@@ -320,7 +325,12 @@
|
|
|
320
325
|
},
|
|
321
326
|
{
|
|
322
327
|
"command": "/tools",
|
|
323
|
-
"description": "Enable or disable CLI tools",
|
|
328
|
+
"description": "Enable or disable CLI tools and MCP servers",
|
|
329
|
+
"category": "configuration"
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
"command": "/mcp",
|
|
333
|
+
"description": "Manage MCP (Model Context Protocol) server connections",
|
|
324
334
|
"category": "configuration"
|
|
325
335
|
},
|
|
326
336
|
{
|
|
@@ -89,6 +89,7 @@ export declare class InteractiveShell {
|
|
|
89
89
|
private streamingHeartbeatStart;
|
|
90
90
|
private streamingHeartbeatFrame;
|
|
91
91
|
private streamingStatusLabel;
|
|
92
|
+
private lastStreamingElapsedSeconds;
|
|
92
93
|
private statusLineState;
|
|
93
94
|
private statusMessageOverride;
|
|
94
95
|
private promptRefreshTimer;
|
|
@@ -266,6 +267,7 @@ export declare class InteractiveShell {
|
|
|
266
267
|
private showToolsMenu;
|
|
267
268
|
private renderToolMenu;
|
|
268
269
|
private formatToolOptionLine;
|
|
270
|
+
private showMcpStatus;
|
|
269
271
|
private showAgentsMenu;
|
|
270
272
|
private formatAgentOptionLine;
|
|
271
273
|
private handleModelProviderSelection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactiveShell.d.ts","sourceRoot":"","sources":["../../src/shell/interactiveShell.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAiCtE,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE/E,OAAO,EAAE,iBAAiB,EAAwB,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAyB,KAAK,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"interactiveShell.d.ts","sourceRoot":"","sources":["../../src/shell/interactiveShell.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ import { buildInteractiveSystemPrompt } from './systemPrompt.js';
|
|
|
13
13
|
import { getTaskCompletionDetector, resetTaskCompletionDetector, } from './taskCompletionDetector.js';
|
|
14
14
|
import { discoverAllModels, quickCheckProviders, getCachedDiscoveredModels, sortModelsByPriority } from '../core/modelDiscovery.js';
|
|
15
15
|
import { getModels, getSlashCommands, getProviders } from '../core/agentSchemaLoader.js';
|
|
16
|
+
import { loadMcpServers } from '../mcp/config.js';
|
|
16
17
|
import { clearAutosaveSnapshot, deleteSession, listSessions, loadAutosaveSnapshot, loadSessionById, saveAutosaveSnapshot, saveSessionSnapshot, } from '../core/sessionStore.js';
|
|
17
18
|
import { buildCustomCommandPrompt, loadCustomSlashCommands, } from '../core/customCommands.js';
|
|
18
19
|
import { SkillRepository } from '../skills/skillRepository.js';
|
|
@@ -132,6 +133,7 @@ export class InteractiveShell {
|
|
|
132
133
|
streamingHeartbeatStart = null;
|
|
133
134
|
streamingHeartbeatFrame = 0;
|
|
134
135
|
streamingStatusLabel = null;
|
|
136
|
+
lastStreamingElapsedSeconds = null; // Preserve final elapsed time
|
|
135
137
|
statusLineState = null;
|
|
136
138
|
statusMessageOverride = null;
|
|
137
139
|
promptRefreshTimer = null;
|
|
@@ -861,9 +863,20 @@ export class InteractiveShell {
|
|
|
861
863
|
const statusText = this.formatStatusLine(this.statusLineState);
|
|
862
864
|
this.terminalInput.setStatusMessage(statusText);
|
|
863
865
|
// Surface meta header (elapsed + context usage) above the divider
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
866
|
+
// Use streaming elapsed time if available, otherwise fall back to status line state
|
|
867
|
+
let elapsedSeconds = null;
|
|
868
|
+
if (this.streamingHeartbeatStart) {
|
|
869
|
+
// Actively streaming - compute live elapsed
|
|
870
|
+
elapsedSeconds = Math.max(0, Math.floor((Date.now() - this.streamingHeartbeatStart) / 1000));
|
|
871
|
+
}
|
|
872
|
+
else if (this.lastStreamingElapsedSeconds !== null) {
|
|
873
|
+
// Just finished streaming - use preserved final time
|
|
874
|
+
elapsedSeconds = this.lastStreamingElapsedSeconds;
|
|
875
|
+
}
|
|
876
|
+
else if (this.statusLineState) {
|
|
877
|
+
// Fallback to status line state elapsed
|
|
878
|
+
elapsedSeconds = Math.max(0, Math.floor((Date.now() - this.statusLineState.startedAt) / 1000));
|
|
879
|
+
}
|
|
867
880
|
const thinkingMs = display.isSpinnerActive() ? display.getThinkingElapsedMs() : null;
|
|
868
881
|
const tokensUsed = this.latestTokenUsage.used;
|
|
869
882
|
const tokenLimit = this.latestTokenUsage.limit ?? this.activeContextWindowTokens;
|
|
@@ -1002,6 +1015,10 @@ export class InteractiveShell {
|
|
|
1002
1015
|
stopStreamingHeartbeat() {
|
|
1003
1016
|
// Exit global streaming mode - allows UI to render again
|
|
1004
1017
|
exitStreamingMode();
|
|
1018
|
+
// Preserve final elapsed time before clearing heartbeat start
|
|
1019
|
+
if (this.streamingHeartbeatStart) {
|
|
1020
|
+
this.lastStreamingElapsedSeconds = Math.max(0, Math.floor((Date.now() - this.streamingHeartbeatStart) / 1000));
|
|
1021
|
+
}
|
|
1005
1022
|
// Exit scroll region mode
|
|
1006
1023
|
this.terminalInput.exitStreamingScrollRegion();
|
|
1007
1024
|
this.uiUpdates.stopHeartbeat('streaming');
|
|
@@ -1214,6 +1231,10 @@ export class InteractiveShell {
|
|
|
1214
1231
|
return;
|
|
1215
1232
|
}
|
|
1216
1233
|
switch (command) {
|
|
1234
|
+
case '/help':
|
|
1235
|
+
case '/?':
|
|
1236
|
+
this.showHelp();
|
|
1237
|
+
break;
|
|
1217
1238
|
case '/model':
|
|
1218
1239
|
this.showModelMenu();
|
|
1219
1240
|
break;
|
|
@@ -1228,6 +1249,9 @@ export class InteractiveShell {
|
|
|
1228
1249
|
case '/tools':
|
|
1229
1250
|
this.showToolsMenu();
|
|
1230
1251
|
break;
|
|
1252
|
+
case '/mcp':
|
|
1253
|
+
await this.showMcpStatus();
|
|
1254
|
+
break;
|
|
1231
1255
|
case '/doctor':
|
|
1232
1256
|
this.runDoctor();
|
|
1233
1257
|
break;
|
|
@@ -1320,6 +1344,30 @@ export class InteractiveShell {
|
|
|
1320
1344
|
const info = [
|
|
1321
1345
|
this.buildSlashCommandList('Available Commands:'),
|
|
1322
1346
|
'',
|
|
1347
|
+
theme.gradient.primary('Keyboard Shortcuts:'),
|
|
1348
|
+
'',
|
|
1349
|
+
theme.bold(' Mode Toggles'),
|
|
1350
|
+
` ${theme.info('Shift+Tab')} ${theme.ui.muted('Toggle edit mode (auto/ask)')}`,
|
|
1351
|
+
` ${theme.info('Option+V')} ${theme.ui.muted('Toggle verification')}`,
|
|
1352
|
+
` ${theme.info('Option+C')} ${theme.ui.muted('Toggle auto-continue')}`,
|
|
1353
|
+
` ${theme.info('Option+T')} ${theme.ui.muted('Cycle thinking mode')}`,
|
|
1354
|
+
` ${theme.info('Option+E')} ${theme.ui.muted('Toggle edit permission mode')}`,
|
|
1355
|
+
` ${theme.info('Option+X')} ${theme.ui.muted('Clear/compact context')}`,
|
|
1356
|
+
'',
|
|
1357
|
+
theme.bold(' Navigation'),
|
|
1358
|
+
` ${theme.info('PageUp/PageDown')} ${theme.ui.muted('Scroll through output')}`,
|
|
1359
|
+
` ${theme.info('Escape')} ${theme.ui.muted('Stop streaming')}`,
|
|
1360
|
+
` ${theme.info('Ctrl+C')} ${theme.ui.muted('Clear input or interrupt')}`,
|
|
1361
|
+
` ${theme.info('Up/Down')} ${theme.ui.muted('Navigate command history')}`,
|
|
1362
|
+
'',
|
|
1363
|
+
theme.bold(' Editing'),
|
|
1364
|
+
` ${theme.info('Ctrl+A')} ${theme.ui.muted('Move to start of line')}`,
|
|
1365
|
+
` ${theme.info('Ctrl+E')} ${theme.ui.muted('Move to end of line')}`,
|
|
1366
|
+
` ${theme.info('Ctrl+K')} ${theme.ui.muted('Delete to end of line')}`,
|
|
1367
|
+
` ${theme.info('Ctrl+U')} ${theme.ui.muted('Delete to start of line')}`,
|
|
1368
|
+
` ${theme.info('Ctrl+W')} ${theme.ui.muted('Delete previous word')}`,
|
|
1369
|
+
` ${theme.info('Shift+Enter')} ${theme.ui.muted('Insert newline (multi-line input)')}`,
|
|
1370
|
+
'',
|
|
1323
1371
|
'Type your request in natural language and press Enter.',
|
|
1324
1372
|
];
|
|
1325
1373
|
display.showSystemMessage(info.join('\n'));
|
|
@@ -2234,6 +2282,69 @@ export class InteractiveShell {
|
|
|
2234
2282
|
const detailLine = this.colorizeDropdownLine(` ${details.join(' • ')}`, index);
|
|
2235
2283
|
return `${numberLabel} ${checkbox} ${optionLabel}\n${detailLine}`;
|
|
2236
2284
|
}
|
|
2285
|
+
async showMcpStatus() {
|
|
2286
|
+
const lines = [];
|
|
2287
|
+
lines.push(theme.gradient.primary('MCP (Model Context Protocol) Status'));
|
|
2288
|
+
lines.push('');
|
|
2289
|
+
// Load MCP server configurations
|
|
2290
|
+
const servers = await loadMcpServers({
|
|
2291
|
+
workingDir: this.workingDir,
|
|
2292
|
+
env: process.env,
|
|
2293
|
+
});
|
|
2294
|
+
if (servers.length === 0) {
|
|
2295
|
+
lines.push(theme.ui.muted('No MCP servers configured.'));
|
|
2296
|
+
lines.push('');
|
|
2297
|
+
lines.push(theme.bold('Configuration files:'));
|
|
2298
|
+
lines.push(` ${theme.info('.mcp.json')} - Project-local MCP configuration`);
|
|
2299
|
+
lines.push(` ${theme.info('.erosolar/mcp.json')} - Project-local alternate location`);
|
|
2300
|
+
lines.push(` ${theme.info('~/.mcp.json')} - Global MCP configuration`);
|
|
2301
|
+
lines.push(` ${theme.info('~/.erosolar/mcp.d/*.json')} - Global MCP server files`);
|
|
2302
|
+
lines.push('');
|
|
2303
|
+
lines.push('Example .mcp.json:');
|
|
2304
|
+
lines.push(theme.ui.muted(`{
|
|
2305
|
+
"my-server": {
|
|
2306
|
+
"type": "stdio",
|
|
2307
|
+
"command": "npx",
|
|
2308
|
+
"args": ["-y", "@modelcontextprotocol/server-filesystem", "\${WORKSPACE_ROOT}"]
|
|
2309
|
+
}
|
|
2310
|
+
}`));
|
|
2311
|
+
}
|
|
2312
|
+
else {
|
|
2313
|
+
lines.push(theme.bold(`Configured MCP Servers (${servers.length}):`));
|
|
2314
|
+
lines.push('');
|
|
2315
|
+
for (const server of servers) {
|
|
2316
|
+
const typeIcon = server.type === 'stdio' ? '⚙' : '🌐';
|
|
2317
|
+
const serverLine = ` ${typeIcon} ${theme.primary(server.id)}`;
|
|
2318
|
+
lines.push(serverLine);
|
|
2319
|
+
if (server.type === 'stdio') {
|
|
2320
|
+
lines.push(` ${theme.ui.muted('Command:')} ${server.command} ${server.args?.join(' ') ?? ''}`);
|
|
2321
|
+
}
|
|
2322
|
+
else if (server.type === 'sse') {
|
|
2323
|
+
lines.push(` ${theme.ui.muted('URL:')} ${server.url}`);
|
|
2324
|
+
}
|
|
2325
|
+
if (server.description) {
|
|
2326
|
+
lines.push(` ${theme.ui.muted('Description:')} ${server.description}`);
|
|
2327
|
+
}
|
|
2328
|
+
lines.push(` ${theme.ui.muted('Source:')} ${server.source}`);
|
|
2329
|
+
lines.push('');
|
|
2330
|
+
}
|
|
2331
|
+
// Show MCP tools from runtime
|
|
2332
|
+
const providerTools = this.runtimeSession.toolRuntime.listProviderTools();
|
|
2333
|
+
const mcpTools = providerTools.filter(t => t.name.startsWith('mcp__'));
|
|
2334
|
+
if (mcpTools.length > 0) {
|
|
2335
|
+
lines.push(theme.bold(`Active MCP Tools (${mcpTools.length}):`));
|
|
2336
|
+
for (const tool of mcpTools.slice(0, 20)) {
|
|
2337
|
+
lines.push(` ${theme.info('•')} ${theme.ui.muted(tool.name)}`);
|
|
2338
|
+
}
|
|
2339
|
+
if (mcpTools.length > 20) {
|
|
2340
|
+
lines.push(` ${theme.ui.muted(`... and ${mcpTools.length - 20} more`)}`);
|
|
2341
|
+
}
|
|
2342
|
+
}
|
|
2343
|
+
}
|
|
2344
|
+
lines.push('');
|
|
2345
|
+
lines.push(theme.ui.muted('Use /tools to enable/disable MCP servers.'));
|
|
2346
|
+
display.showSystemMessage(lines.join('\n'));
|
|
2347
|
+
}
|
|
2237
2348
|
showAgentsMenu() {
|
|
2238
2349
|
if (!this.agentMenu) {
|
|
2239
2350
|
display.showWarning('Agent selection is not available in this CLI.');
|