erosolar-cli 1.7.382 → 1.7.385
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/core/contextManager.d.ts +4 -0
- package/dist/core/contextManager.d.ts.map +1 -1
- package/dist/core/contextManager.js +16 -0
- package/dist/core/contextManager.js.map +1 -1
- package/dist/core/toolPreconditions.d.ts.map +1 -1
- package/dist/core/toolPreconditions.js +9 -0
- package/dist/core/toolPreconditions.js.map +1 -1
- package/dist/shell/interactiveShell.d.ts +12 -0
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +213 -53
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/shell/terminalInput.d.ts +20 -0
- package/dist/shell/terminalInput.d.ts.map +1 -1
- package/dist/shell/terminalInput.js +110 -6
- package/dist/shell/terminalInput.js.map +1 -1
- package/dist/ui/ShellUIAdapter.d.ts +13 -0
- package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
- package/dist/ui/ShellUIAdapter.js +40 -3
- package/dist/ui/ShellUIAdapter.js.map +1 -1
- package/dist/ui/display.d.ts.map +1 -1
- package/dist/ui/display.js +12 -2
- package/dist/ui/display.js.map +1 -1
- package/package.json +1 -1
|
@@ -119,6 +119,11 @@ export declare class TerminalInput extends EventEmitter {
|
|
|
119
119
|
private showingSuggestions;
|
|
120
120
|
private selectedSuggestionIndex;
|
|
121
121
|
private maxVisibleSuggestions;
|
|
122
|
+
private suggestionRenderState;
|
|
123
|
+
private lastSuggestionStartRow;
|
|
124
|
+
private lastChatBoxStartRow;
|
|
125
|
+
private lastChatBoxHeight;
|
|
126
|
+
private displayInterceptorDispose;
|
|
122
127
|
constructor(writeStream?: NodeJS.WriteStream, config?: TerminalInputConfig);
|
|
123
128
|
/**
|
|
124
129
|
* Enable bracketed paste mode in terminal
|
|
@@ -224,6 +229,11 @@ export declare class TerminalInput extends EventEmitter {
|
|
|
224
229
|
* Move selection down in suggestions list
|
|
225
230
|
*/
|
|
226
231
|
private moveSuggestionDown;
|
|
232
|
+
/**
|
|
233
|
+
* Handle mouse selection inside the suggestions list.
|
|
234
|
+
* Returns true if the click selected a command.
|
|
235
|
+
*/
|
|
236
|
+
private handleSuggestionClick;
|
|
227
237
|
/**
|
|
228
238
|
* Cancel suggestion display (Escape)
|
|
229
239
|
*/
|
|
@@ -293,6 +303,16 @@ export declare class TerminalInput extends EventEmitter {
|
|
|
293
303
|
* Content scrolls in the region above the chat box.
|
|
294
304
|
*/
|
|
295
305
|
private renderPinnedChatBox;
|
|
306
|
+
/**
|
|
307
|
+
* Keep assistant/user content above the chat box when it expands (e.g., slash menu).
|
|
308
|
+
* Scrolls just enough to free space without moving the cursor.
|
|
309
|
+
*/
|
|
310
|
+
private ensureContentAboveChatBox;
|
|
311
|
+
/**
|
|
312
|
+
* Track output written directly by the display (system/assistant messages) so
|
|
313
|
+
* it is captured in scrollback and accounted for when re-rendering the chat box.
|
|
314
|
+
*/
|
|
315
|
+
private trackExternalOutput;
|
|
296
316
|
/**
|
|
297
317
|
* Build compact meta line above the divider.
|
|
298
318
|
* Shows model/provider and key metrics in a single line.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminalInput.d.ts","sourceRoot":"","sources":["../../src/shell/terminalInput.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"terminalInput.d.ts","sourceRoot":"","sources":["../../src/shell/terminalInput.ts"],"names":[],"mappings":"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"}
|
|
@@ -132,6 +132,11 @@ export class TerminalInput extends EventEmitter {
|
|
|
132
132
|
showingSuggestions = false;
|
|
133
133
|
selectedSuggestionIndex = 0;
|
|
134
134
|
maxVisibleSuggestions = 10;
|
|
135
|
+
suggestionRenderState = null;
|
|
136
|
+
lastSuggestionStartRow = null;
|
|
137
|
+
lastChatBoxStartRow = null;
|
|
138
|
+
lastChatBoxHeight = 0;
|
|
139
|
+
displayInterceptorDispose = null;
|
|
135
140
|
constructor(writeStream = process.stdout, config = {}) {
|
|
136
141
|
super();
|
|
137
142
|
this.out = writeStream;
|
|
@@ -192,7 +197,9 @@ export class TerminalInput extends EventEmitter {
|
|
|
192
197
|
let match;
|
|
193
198
|
while ((match = mousePattern.exec(data)) !== null) {
|
|
194
199
|
const button = parseInt(match[1], 10);
|
|
195
|
-
|
|
200
|
+
const x = parseInt(match[2], 10);
|
|
201
|
+
const y = parseInt(match[3], 10);
|
|
202
|
+
this.handleMouseEvent(button, x, y, match[4]);
|
|
196
203
|
hadMouseEvents = true;
|
|
197
204
|
}
|
|
198
205
|
if (hadMouseEvents) {
|
|
@@ -240,7 +247,7 @@ export class TerminalInput extends EventEmitter {
|
|
|
240
247
|
/**
|
|
241
248
|
* Handle mouse events (button, x, y coordinates, action)
|
|
242
249
|
*/
|
|
243
|
-
handleMouseEvent(button,
|
|
250
|
+
handleMouseEvent(button, x, y, action) {
|
|
244
251
|
// Mouse wheel events: button 64 = scroll up, button 65 = scroll down
|
|
245
252
|
if (button === 64) {
|
|
246
253
|
// Scroll up (3 lines per wheel tick)
|
|
@@ -252,6 +259,13 @@ export class TerminalInput extends EventEmitter {
|
|
|
252
259
|
this.scrollDown(3);
|
|
253
260
|
return;
|
|
254
261
|
}
|
|
262
|
+
// Left-click selection inside the command suggestions menu
|
|
263
|
+
if (button === 0 && action === 'M') {
|
|
264
|
+
if (this.handleSuggestionClick(y)) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
// No other left-click handling needed; fall through to consume silently
|
|
268
|
+
}
|
|
255
269
|
// Left button (0), middle button (1), right button (2)
|
|
256
270
|
// These are captured by SGR mouse tracking but we don't need to handle them
|
|
257
271
|
// Just consume silently - the escape sequence has already been processed
|
|
@@ -479,6 +493,26 @@ export class TerminalInput extends EventEmitter {
|
|
|
479
493
|
this.scheduleRender();
|
|
480
494
|
return true;
|
|
481
495
|
}
|
|
496
|
+
/**
|
|
497
|
+
* Handle mouse selection inside the suggestions list.
|
|
498
|
+
* Returns true if the click selected a command.
|
|
499
|
+
*/
|
|
500
|
+
handleSuggestionClick(clickRow) {
|
|
501
|
+
if (!this.showingSuggestions || !this.suggestionRenderState)
|
|
502
|
+
return false;
|
|
503
|
+
if (this.lastSuggestionStartRow === null)
|
|
504
|
+
return false;
|
|
505
|
+
// First line is the header; suggestions start on the next row
|
|
506
|
+
const relativeRow = clickRow - this.lastSuggestionStartRow - 1;
|
|
507
|
+
if (relativeRow < 0)
|
|
508
|
+
return false;
|
|
509
|
+
const { startIdx, visibleCount } = this.suggestionRenderState;
|
|
510
|
+
if (relativeRow >= visibleCount)
|
|
511
|
+
return false;
|
|
512
|
+
this.selectedSuggestionIndex = startIdx + relativeRow;
|
|
513
|
+
this.selectSuggestion();
|
|
514
|
+
return true;
|
|
515
|
+
}
|
|
482
516
|
/**
|
|
483
517
|
* Cancel suggestion display (Escape)
|
|
484
518
|
*/
|
|
@@ -493,6 +527,7 @@ export class TerminalInput extends EventEmitter {
|
|
|
493
527
|
* Build command suggestion display lines
|
|
494
528
|
*/
|
|
495
529
|
buildSuggestionLines(width) {
|
|
530
|
+
this.suggestionRenderState = null;
|
|
496
531
|
if (!this.showingSuggestions)
|
|
497
532
|
return [];
|
|
498
533
|
const filtered = this.getFilteredCommands();
|
|
@@ -508,6 +543,10 @@ export class TerminalInput extends EventEmitter {
|
|
|
508
543
|
startIdx = Math.max(0, this.selectedSuggestionIndex - padding);
|
|
509
544
|
startIdx = Math.min(startIdx, filtered.length - maxDisplay);
|
|
510
545
|
}
|
|
546
|
+
this.suggestionRenderState = {
|
|
547
|
+
startIdx,
|
|
548
|
+
visibleCount: Math.min(maxDisplay, Math.max(0, filtered.length - startIdx))
|
|
549
|
+
};
|
|
511
550
|
// Header with navigation hint - keep it short
|
|
512
551
|
lines.push(theme.ui.muted(`Commands (↑↓ Tab Enter)`));
|
|
513
552
|
// Render visible suggestions
|
|
@@ -733,9 +772,16 @@ export class TerminalInput extends EventEmitter {
|
|
|
733
772
|
// ALWAYS pin chat box at absolute bottom
|
|
734
773
|
const chatBoxStartRow = Math.max(1, rows - chatBoxHeight + 1);
|
|
735
774
|
const scrollEnd = chatBoxStartRow - 1;
|
|
775
|
+
this.lastChatBoxStartRow = chatBoxStartRow;
|
|
776
|
+
this.lastChatBoxHeight = chatBoxHeight;
|
|
777
|
+
this.lastSuggestionStartRow = null;
|
|
736
778
|
writeLock.lock('terminalInput.renderPinned');
|
|
737
779
|
this.isRendering = true;
|
|
738
780
|
try {
|
|
781
|
+
// Ensure content stays above the expanded chat/menu area when idle
|
|
782
|
+
if (!streamingActive && !this.scrollRegionActive) {
|
|
783
|
+
this.ensureContentAboveChatBox(chatBoxStartRow, rows);
|
|
784
|
+
}
|
|
739
785
|
this.write(ESC.SAVE);
|
|
740
786
|
this.write(ESC.HIDE);
|
|
741
787
|
// Temporarily reset scroll region to write chat box cleanly
|
|
@@ -773,15 +819,15 @@ export class TerminalInput extends EventEmitter {
|
|
|
773
819
|
const line = visibleLines[i] ?? '';
|
|
774
820
|
const isFirstLine = (startLine + i) === 0;
|
|
775
821
|
const isCursorLine = i === adjustedCursorLine;
|
|
822
|
+
const col = isCursorLine ? Math.max(0, Math.min(cursorCol, line.length)) : 0;
|
|
776
823
|
this.write(ESC.BG_DARK);
|
|
777
824
|
this.write(ESC.DIM);
|
|
778
825
|
this.write(isFirstLine ? this.config.promptChar : this.config.continuationChar);
|
|
779
826
|
this.write(ESC.RESET);
|
|
780
827
|
this.write(ESC.BG_DARK);
|
|
781
828
|
if (isCursorLine) {
|
|
782
|
-
const col = Math.min(cursorCol, line.length);
|
|
783
829
|
const before = line.slice(0, col);
|
|
784
|
-
const at =
|
|
830
|
+
const at = line.charAt(col) || ' ';
|
|
785
831
|
const after = col < line.length ? line.slice(col + 1) : '';
|
|
786
832
|
this.write(before);
|
|
787
833
|
this.write(ESC.REVERSE + ESC.BOLD);
|
|
@@ -795,7 +841,9 @@ export class TerminalInput extends EventEmitter {
|
|
|
795
841
|
this.write(line);
|
|
796
842
|
}
|
|
797
843
|
// Pad to edge
|
|
798
|
-
const lineLen = this.config.promptChar.length +
|
|
844
|
+
const lineLen = this.config.promptChar.length +
|
|
845
|
+
line.length +
|
|
846
|
+
(isCursorLine && col >= line.length ? 1 : 0);
|
|
799
847
|
const padding = Math.max(0, cols - lineLen - 1);
|
|
800
848
|
if (padding > 0)
|
|
801
849
|
this.write(' '.repeat(padding));
|
|
@@ -804,6 +852,9 @@ export class TerminalInput extends EventEmitter {
|
|
|
804
852
|
// Command suggestions (shown above controls when "/" is typed)
|
|
805
853
|
const suggestionLines = this.buildSuggestionLines(cols - 2);
|
|
806
854
|
let suggestionRow = currentRow + visibleLines.length;
|
|
855
|
+
if (suggestionLines.length > 0) {
|
|
856
|
+
this.lastSuggestionStartRow = suggestionRow;
|
|
857
|
+
}
|
|
807
858
|
for (const suggestionLine of suggestionLines) {
|
|
808
859
|
this.write(ESC.TO(suggestionRow, 1));
|
|
809
860
|
this.write(' '); // Indent to match input
|
|
@@ -846,6 +897,41 @@ export class TerminalInput extends EventEmitter {
|
|
|
846
897
|
this.isRendering = false;
|
|
847
898
|
}
|
|
848
899
|
}
|
|
900
|
+
/**
|
|
901
|
+
* Keep assistant/user content above the chat box when it expands (e.g., slash menu).
|
|
902
|
+
* Scrolls just enough to free space without moving the cursor.
|
|
903
|
+
*/
|
|
904
|
+
ensureContentAboveChatBox(chatBoxStartRow, rows) {
|
|
905
|
+
const contentMaxRow = Math.max(1, chatBoxStartRow - 1);
|
|
906
|
+
if (this.contentRow < contentMaxRow)
|
|
907
|
+
return;
|
|
908
|
+
const overflow = (this.contentRow - contentMaxRow) + 1;
|
|
909
|
+
const scrollLines = Math.min(overflow, rows);
|
|
910
|
+
this.write(ESC.SAVE);
|
|
911
|
+
this.write(ESC.TO(rows, 1));
|
|
912
|
+
this.write('\n'.repeat(scrollLines));
|
|
913
|
+
this.write(ESC.RESTORE);
|
|
914
|
+
this.contentRow = contentMaxRow;
|
|
915
|
+
}
|
|
916
|
+
/**
|
|
917
|
+
* Track output written directly by the display (system/assistant messages) so
|
|
918
|
+
* it is captured in scrollback and accounted for when re-rendering the chat box.
|
|
919
|
+
*/
|
|
920
|
+
trackExternalOutput(content) {
|
|
921
|
+
if (!content)
|
|
922
|
+
return;
|
|
923
|
+
// Normalize and capture in scrollback for history
|
|
924
|
+
const normalized = content.replace(/\r/g, '\n');
|
|
925
|
+
this.addToScrollback(normalized);
|
|
926
|
+
// Advance content row by the number of newline characters
|
|
927
|
+
const newlines = (normalized.match(/\n/g) || []).length;
|
|
928
|
+
if (newlines > 0) {
|
|
929
|
+
this.contentRow += newlines;
|
|
930
|
+
if (!this.scrollRegionActive) {
|
|
931
|
+
this.scheduleRender();
|
|
932
|
+
}
|
|
933
|
+
}
|
|
934
|
+
}
|
|
849
935
|
/**
|
|
850
936
|
* Build compact meta line above the divider.
|
|
851
937
|
* Shows model/provider and key metrics in a single line.
|
|
@@ -1257,7 +1343,21 @@ export class TerminalInput extends EventEmitter {
|
|
|
1257
1343
|
* Register with display's output interceptor - kept for backwards compatibility
|
|
1258
1344
|
*/
|
|
1259
1345
|
registerOutputInterceptor(_display) {
|
|
1260
|
-
|
|
1346
|
+
const display = _display;
|
|
1347
|
+
if (!display?.registerOutputInterceptor)
|
|
1348
|
+
return;
|
|
1349
|
+
// Remove prior hook if present
|
|
1350
|
+
if (this.displayInterceptorDispose) {
|
|
1351
|
+
this.displayInterceptorDispose();
|
|
1352
|
+
this.displayInterceptorDispose = null;
|
|
1353
|
+
}
|
|
1354
|
+
this.displayInterceptorDispose = display.registerOutputInterceptor({
|
|
1355
|
+
afterWrite: (content) => {
|
|
1356
|
+
if (!content)
|
|
1357
|
+
return;
|
|
1358
|
+
this.trackExternalOutput(content);
|
|
1359
|
+
},
|
|
1360
|
+
});
|
|
1261
1361
|
}
|
|
1262
1362
|
/**
|
|
1263
1363
|
* Write content above the floating chat box.
|
|
@@ -1359,6 +1459,10 @@ export class TerminalInput extends EventEmitter {
|
|
|
1359
1459
|
return;
|
|
1360
1460
|
this.disposed = true;
|
|
1361
1461
|
this.enabled = false;
|
|
1462
|
+
if (this.displayInterceptorDispose) {
|
|
1463
|
+
this.displayInterceptorDispose();
|
|
1464
|
+
this.displayInterceptorDispose = null;
|
|
1465
|
+
}
|
|
1362
1466
|
this.disableScrollRegion();
|
|
1363
1467
|
this.resetStreamingRenderThrottle();
|
|
1364
1468
|
this.disableBracketedPaste();
|