erosolar-cli 1.7.343 → 1.7.345
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/shell/interactiveShell.d.ts +13 -1
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +92 -1
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/shell/terminalInput.d.ts +18 -0
- package/dist/shell/terminalInput.d.ts.map +1 -1
- package/dist/shell/terminalInput.js +159 -49
- package/dist/shell/terminalInput.js.map +1 -1
- package/dist/ui/ShellUIAdapter.d.ts +7 -1
- package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
- package/dist/ui/ShellUIAdapter.js +29 -6
- package/dist/ui/ShellUIAdapter.js.map +1 -1
- package/dist/ui/unified/layout.d.ts +19 -0
- package/dist/ui/unified/layout.d.ts.map +1 -1
- package/dist/ui/unified/layout.js +81 -5
- package/dist/ui/unified/layout.js.map +1 -1
- package/package.json +1 -1
|
@@ -249,6 +249,7 @@ export declare class TerminalInput extends EventEmitter {
|
|
|
249
249
|
/**
|
|
250
250
|
* Build mode controls line with all keyboard shortcuts.
|
|
251
251
|
* Shows status, all toggles, and contextual information.
|
|
252
|
+
* Enhanced with comprehensive feature status display.
|
|
252
253
|
*/
|
|
253
254
|
private buildModeControls;
|
|
254
255
|
private formatHotkey;
|
|
@@ -408,10 +409,27 @@ export declare class TerminalInput extends EventEmitter {
|
|
|
408
409
|
* Jump to the bottom (live mode)
|
|
409
410
|
*/
|
|
410
411
|
private scrollToBottom;
|
|
412
|
+
/**
|
|
413
|
+
* Toggle scrollback mode on/off (Alt+S hotkey)
|
|
414
|
+
*/
|
|
415
|
+
private toggleScrollbackMode;
|
|
411
416
|
/**
|
|
412
417
|
* Render the scrollback buffer view with enhanced visuals
|
|
418
|
+
* Features:
|
|
419
|
+
* - Visual scroll position indicator
|
|
420
|
+
* - Progress bar showing position in history
|
|
421
|
+
* - Keyboard navigation hints
|
|
422
|
+
* - Animated indicators
|
|
413
423
|
*/
|
|
414
424
|
private renderScrollbackView;
|
|
425
|
+
/**
|
|
426
|
+
* Build scrollback header with navigation hints
|
|
427
|
+
*/
|
|
428
|
+
private buildScrollbackHeader;
|
|
429
|
+
/**
|
|
430
|
+
* Render visual scroll track on the right side
|
|
431
|
+
*/
|
|
432
|
+
private renderScrollTrack;
|
|
415
433
|
/**
|
|
416
434
|
* Build a visual progress bar
|
|
417
435
|
*/
|
|
@@ -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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"}
|
|
@@ -687,12 +687,13 @@ export class TerminalInput extends EventEmitter {
|
|
|
687
687
|
/**
|
|
688
688
|
* Build mode controls line with all keyboard shortcuts.
|
|
689
689
|
* Shows status, all toggles, and contextual information.
|
|
690
|
+
* Enhanced with comprehensive feature status display.
|
|
690
691
|
*/
|
|
691
692
|
buildModeControls(cols) {
|
|
692
693
|
const width = Math.max(8, cols - 2);
|
|
693
694
|
const leftParts = [];
|
|
694
695
|
const rightParts = [];
|
|
695
|
-
// Streaming indicator
|
|
696
|
+
// Streaming indicator with animated spinner
|
|
696
697
|
if (this.streamingLabel) {
|
|
697
698
|
leftParts.push({ text: `◐ ${this.streamingLabel}`, tone: 'info' });
|
|
698
699
|
}
|
|
@@ -704,6 +705,13 @@ export class TerminalInput extends EventEmitter {
|
|
|
704
705
|
if (this.statusMessage) {
|
|
705
706
|
leftParts.push({ text: this.statusMessage, tone: this.streamingLabel ? 'muted' : 'info' });
|
|
706
707
|
}
|
|
708
|
+
// === SCROLLBACK INDICATOR ===
|
|
709
|
+
if (this.isInScrollbackMode && this.scrollbackOffset > 0) {
|
|
710
|
+
const scrollInfo = `↑${this.scrollbackOffset}`;
|
|
711
|
+
leftParts.push({ text: scrollInfo, tone: 'info' });
|
|
712
|
+
// Show scrollback help hint
|
|
713
|
+
leftParts.push({ text: `${this.formatHotkey('alt+s')}exit`, tone: 'muted' });
|
|
714
|
+
}
|
|
707
715
|
// === KEYBOARD SHORTCUTS ===
|
|
708
716
|
// Interrupt shortcut (during streaming)
|
|
709
717
|
if (this.mode === 'streaming' || this.scrollRegionActive) {
|
|
@@ -711,26 +719,35 @@ export class TerminalInput extends EventEmitter {
|
|
|
711
719
|
}
|
|
712
720
|
// Edit mode toggle (Shift+Tab)
|
|
713
721
|
const editHotkey = this.formatHotkey('shift+tab');
|
|
714
|
-
const
|
|
722
|
+
const editIcon = this.editMode === 'display-edits' ? '✓' : '?';
|
|
723
|
+
const editLabel = this.editMode === 'display-edits' ? 'edits:auto' : 'edits:ask';
|
|
715
724
|
const editTone = this.editMode === 'display-edits' ? 'success' : 'muted';
|
|
716
|
-
leftParts.push({ text: `${editHotkey}
|
|
725
|
+
leftParts.push({ text: `${editHotkey}${editIcon}${editLabel}`, tone: editTone });
|
|
717
726
|
// Verification toggle (Alt+V)
|
|
727
|
+
const verifyIcon = this.verificationEnabled ? '✓' : '○';
|
|
718
728
|
const verifyHotkey = this.formatHotkey(this.verificationHotkey || 'alt+v');
|
|
719
|
-
const verifyLabel = this.verificationEnabled ? 'verify
|
|
720
|
-
leftParts.push({ text: `${verifyHotkey}
|
|
729
|
+
const verifyLabel = this.verificationEnabled ? 'verify' : 'no-verify';
|
|
730
|
+
leftParts.push({ text: `${verifyHotkey}${verifyIcon}${verifyLabel}`, tone: this.verificationEnabled ? 'success' : 'muted' });
|
|
721
731
|
// Auto-continue toggle (Alt+C)
|
|
732
|
+
const autoIcon = this.autoContinueEnabled ? '↻' : '○';
|
|
722
733
|
const continueHotkey = this.formatHotkey(this.autoContinueHotkey || 'alt+c');
|
|
723
|
-
const continueLabel = this.autoContinueEnabled ? 'auto
|
|
724
|
-
leftParts.push({ text: `${continueHotkey}
|
|
734
|
+
const continueLabel = this.autoContinueEnabled ? 'auto' : 'manual';
|
|
735
|
+
leftParts.push({ text: `${continueHotkey}${autoIcon}${continueLabel}`, tone: this.autoContinueEnabled ? 'info' : 'muted' });
|
|
725
736
|
// Thinking mode toggle (if available)
|
|
726
737
|
if (this.thinkingModeLabel) {
|
|
727
|
-
const thinkingHotkey = this.formatHotkey(this.thinkingHotkey || '
|
|
728
|
-
rightParts.push({ text: `${thinkingHotkey}
|
|
738
|
+
const thinkingHotkey = this.formatHotkey(this.thinkingHotkey || '/thinking');
|
|
739
|
+
rightParts.push({ text: `${thinkingHotkey}◐${this.thinkingModeLabel}`, tone: 'info' });
|
|
729
740
|
}
|
|
730
741
|
// === CONTEXTUAL INFO ===
|
|
731
742
|
// Queued commands
|
|
732
|
-
if (this.queue.length > 0
|
|
733
|
-
|
|
743
|
+
if (this.queue.length > 0) {
|
|
744
|
+
const queueIcon = this.mode === 'streaming' ? '⏳' : '▸';
|
|
745
|
+
leftParts.push({ text: `${queueIcon}${this.queue.length}queued`, tone: 'info' });
|
|
746
|
+
}
|
|
747
|
+
// Scrollback buffer size (when significant)
|
|
748
|
+
if (this.scrollbackBuffer.length > 100 && !this.isInScrollbackMode) {
|
|
749
|
+
const bufferHint = `${this.formatHotkey('alt+s')}↕${Math.floor(this.scrollbackBuffer.length / 100) * 100}+L`;
|
|
750
|
+
rightParts.push({ text: bufferHint, tone: 'muted' });
|
|
734
751
|
}
|
|
735
752
|
// Multi-line indicator
|
|
736
753
|
if (this.buffer.includes('\n')) {
|
|
@@ -741,19 +758,25 @@ export class TerminalInput extends EventEmitter {
|
|
|
741
758
|
if (this.pastePlaceholders.length > 0) {
|
|
742
759
|
const latest = this.pastePlaceholders[this.pastePlaceholders.length - 1];
|
|
743
760
|
rightParts.push({
|
|
744
|
-
text: `paste#${latest.id}
|
|
761
|
+
text: `paste#${latest.id}+${latest.lineCount}L`,
|
|
745
762
|
tone: 'info',
|
|
746
763
|
});
|
|
747
764
|
}
|
|
748
|
-
// Context remaining warning
|
|
765
|
+
// Context remaining warning with visual indicator
|
|
749
766
|
const contextRemaining = this.computeContextRemaining();
|
|
750
767
|
if (contextRemaining !== null) {
|
|
751
|
-
const tone = contextRemaining <= 10 ? 'warn' : 'muted';
|
|
768
|
+
const tone = contextRemaining <= 10 ? 'warn' : contextRemaining <= 30 ? 'info' : 'muted';
|
|
769
|
+
const icon = contextRemaining <= 10 ? '⚠' : '⊛';
|
|
752
770
|
const label = contextRemaining === 0 && this.contextUsage !== null
|
|
753
|
-
?
|
|
754
|
-
:
|
|
771
|
+
? `${icon}compact!`
|
|
772
|
+
: `${icon}${contextRemaining}%`;
|
|
755
773
|
rightParts.push({ text: label, tone });
|
|
756
774
|
}
|
|
775
|
+
// Model/provider quick reference (compact)
|
|
776
|
+
if (this.modelLabel && !this.streamingLabel) {
|
|
777
|
+
const shortModel = this.modelLabel.length > 12 ? this.modelLabel.slice(0, 10) + '..' : this.modelLabel;
|
|
778
|
+
rightParts.push({ text: shortModel, tone: 'muted' });
|
|
779
|
+
}
|
|
757
780
|
// Render: left-aligned shortcuts, right-aligned context info
|
|
758
781
|
if (!rightParts.length || width < 60) {
|
|
759
782
|
const merged = rightParts.length ? [...leftParts, ...rightParts] : leftParts;
|
|
@@ -1142,6 +1165,25 @@ export class TerminalInput extends EventEmitter {
|
|
|
1142
1165
|
case 'c':
|
|
1143
1166
|
this.emit('toggleAutoContinue');
|
|
1144
1167
|
break;
|
|
1168
|
+
case 's':
|
|
1169
|
+
// Alt+S: Toggle scrollback mode
|
|
1170
|
+
this.toggleScrollbackMode();
|
|
1171
|
+
break;
|
|
1172
|
+
case 'up':
|
|
1173
|
+
// Alt+Up: Quick scroll up into history
|
|
1174
|
+
if (!this.isInScrollbackMode) {
|
|
1175
|
+
this.scrollUp(10);
|
|
1176
|
+
}
|
|
1177
|
+
else {
|
|
1178
|
+
this.scrollUp(1);
|
|
1179
|
+
}
|
|
1180
|
+
break;
|
|
1181
|
+
case 'down':
|
|
1182
|
+
// Alt+Down: Quick scroll down
|
|
1183
|
+
if (this.isInScrollbackMode) {
|
|
1184
|
+
this.scrollDown(1);
|
|
1185
|
+
}
|
|
1186
|
+
break;
|
|
1145
1187
|
}
|
|
1146
1188
|
}
|
|
1147
1189
|
handleSpecialKey(_str, key) {
|
|
@@ -1167,10 +1209,22 @@ export class TerminalInput extends EventEmitter {
|
|
|
1167
1209
|
this.moveCursorRight();
|
|
1168
1210
|
return true;
|
|
1169
1211
|
case 'up':
|
|
1170
|
-
|
|
1212
|
+
// Ctrl+Shift+Up or Shift+Up: Quick scroll up in scrollback
|
|
1213
|
+
if ((key.ctrl && key.shift) || key.shift) {
|
|
1214
|
+
this.scrollUp(5);
|
|
1215
|
+
}
|
|
1216
|
+
else {
|
|
1217
|
+
this.handleUp();
|
|
1218
|
+
}
|
|
1171
1219
|
return true;
|
|
1172
1220
|
case 'down':
|
|
1173
|
-
|
|
1221
|
+
// Ctrl+Shift+Down or Shift+Down: Quick scroll down in scrollback
|
|
1222
|
+
if ((key.ctrl && key.shift) || key.shift) {
|
|
1223
|
+
this.scrollDown(5);
|
|
1224
|
+
}
|
|
1225
|
+
else {
|
|
1226
|
+
this.handleDown();
|
|
1227
|
+
}
|
|
1174
1228
|
return true;
|
|
1175
1229
|
case 'home':
|
|
1176
1230
|
// Ctrl+Home or in scrollback mode: scroll to top
|
|
@@ -1635,8 +1689,24 @@ export class TerminalInput extends EventEmitter {
|
|
|
1635
1689
|
this.isInScrollbackMode = false;
|
|
1636
1690
|
this.forceRender();
|
|
1637
1691
|
}
|
|
1692
|
+
/**
|
|
1693
|
+
* Toggle scrollback mode on/off (Alt+S hotkey)
|
|
1694
|
+
*/
|
|
1695
|
+
toggleScrollbackMode() {
|
|
1696
|
+
if (this.isInScrollbackMode) {
|
|
1697
|
+
this.scrollToBottom();
|
|
1698
|
+
}
|
|
1699
|
+
else if (this.scrollbackBuffer.length > 0) {
|
|
1700
|
+
this.scrollUp(20);
|
|
1701
|
+
}
|
|
1702
|
+
}
|
|
1638
1703
|
/**
|
|
1639
1704
|
* Render the scrollback buffer view with enhanced visuals
|
|
1705
|
+
* Features:
|
|
1706
|
+
* - Visual scroll position indicator
|
|
1707
|
+
* - Progress bar showing position in history
|
|
1708
|
+
* - Keyboard navigation hints
|
|
1709
|
+
* - Animated indicators
|
|
1640
1710
|
*/
|
|
1641
1711
|
renderScrollbackView() {
|
|
1642
1712
|
const { rows, cols } = this.getSize();
|
|
@@ -1652,42 +1722,32 @@ export class TerminalInput extends EventEmitter {
|
|
|
1652
1722
|
this.write(ESC.CLEAR_LINE);
|
|
1653
1723
|
}
|
|
1654
1724
|
// Calculate which lines to show
|
|
1655
|
-
const
|
|
1656
|
-
const
|
|
1725
|
+
const totalLines = this.scrollbackBuffer.length;
|
|
1726
|
+
const startIdx = Math.max(0, totalLines - this.scrollbackOffset - contentHeight);
|
|
1727
|
+
const endIdx = Math.max(0, totalLines - this.scrollbackOffset);
|
|
1657
1728
|
const visibleLines = this.scrollbackBuffer.slice(startIdx, endIdx);
|
|
1658
|
-
//
|
|
1659
|
-
|
|
1729
|
+
// Build header bar with navigation hints
|
|
1730
|
+
const headerInfo = this.buildScrollbackHeader(cols, totalLines, startIdx, endIdx);
|
|
1731
|
+
this.write(ESC.TO(1, 1));
|
|
1732
|
+
this.write(headerInfo);
|
|
1733
|
+
// Render visible lines with line numbers and visual guides
|
|
1734
|
+
const lineNumWidth = String(totalLines).length + 1;
|
|
1735
|
+
const contentStart = 2; // Start after header
|
|
1736
|
+
for (let i = 0; i < Math.min(visibleLines.length, contentHeight - 1); i++) {
|
|
1660
1737
|
const line = visibleLines[i] ?? '';
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1738
|
+
const lineNum = startIdx + i + 1;
|
|
1739
|
+
this.write(ESC.TO(contentStart + i, 1));
|
|
1740
|
+
// Line number gutter
|
|
1741
|
+
const numStr = String(lineNum).padStart(lineNumWidth, ' ');
|
|
1742
|
+
this.write(theme.ui.muted(`${numStr} │ `));
|
|
1743
|
+
// Content with truncation
|
|
1744
|
+
const gutterWidth = lineNumWidth + 4;
|
|
1745
|
+
const maxLen = cols - gutterWidth - 2;
|
|
1666
1746
|
const displayLine = line.length > maxLen ? line.slice(0, maxLen - 3) + '...' : line;
|
|
1667
1747
|
this.write(displayLine);
|
|
1668
1748
|
}
|
|
1669
|
-
// Add
|
|
1670
|
-
|
|
1671
|
-
const totalLines = this.scrollbackBuffer.length;
|
|
1672
|
-
const currentPos = totalLines - this.scrollbackOffset;
|
|
1673
|
-
const percentage = Math.round((currentPos / totalLines) * 100);
|
|
1674
|
-
// Animated scroll arrows
|
|
1675
|
-
const scrollFrames = ['⬆', '⇡', '↟', '⇡'];
|
|
1676
|
-
this.scrollIndicatorFrame = (this.scrollIndicatorFrame + 1) % scrollFrames.length;
|
|
1677
|
-
const arrow = scrollFrames[this.scrollIndicatorFrame];
|
|
1678
|
-
// Build indicator with progress bar
|
|
1679
|
-
const progressBar = this.buildProgressBar(percentage, 10);
|
|
1680
|
-
const indicator = theme.accent(`${arrow} `) +
|
|
1681
|
-
theme.info(`Scrollback `) +
|
|
1682
|
-
theme.ui.muted(`[${this.scrollbackOffset}↑] `) +
|
|
1683
|
-
progressBar +
|
|
1684
|
-
theme.ui.muted(` ${percentage}%`);
|
|
1685
|
-
// Position at top right
|
|
1686
|
-
const indicatorRow = 1;
|
|
1687
|
-
const indicatorCol = Math.max(1, cols - 50);
|
|
1688
|
-
this.write(ESC.TO(indicatorRow, indicatorCol));
|
|
1689
|
-
this.write(indicator);
|
|
1690
|
-
}
|
|
1749
|
+
// Add visual scroll track on the right edge
|
|
1750
|
+
this.renderScrollTrack(cols, contentHeight, totalLines, startIdx, endIdx);
|
|
1691
1751
|
this.write(ESC.RESTORE);
|
|
1692
1752
|
this.write(ESC.SHOW);
|
|
1693
1753
|
}
|
|
@@ -1697,6 +1757,56 @@ export class TerminalInput extends EventEmitter {
|
|
|
1697
1757
|
// Re-render chat box
|
|
1698
1758
|
this.forceRender();
|
|
1699
1759
|
}
|
|
1760
|
+
/**
|
|
1761
|
+
* Build scrollback header with navigation hints
|
|
1762
|
+
*/
|
|
1763
|
+
buildScrollbackHeader(cols, totalLines, startIdx, endIdx) {
|
|
1764
|
+
const percentage = Math.round((endIdx / totalLines) * 100);
|
|
1765
|
+
// Animated scroll indicator
|
|
1766
|
+
const scrollFrames = ['◆', '◇', '◆', '◈'];
|
|
1767
|
+
this.scrollIndicatorFrame = (this.scrollIndicatorFrame + 1) % scrollFrames.length;
|
|
1768
|
+
const indicator = scrollFrames[this.scrollIndicatorFrame];
|
|
1769
|
+
// Build header parts
|
|
1770
|
+
const leftPart = theme.info(`${indicator} SCROLLBACK`) +
|
|
1771
|
+
theme.ui.muted(` [${startIdx + 1}-${endIdx} of ${totalLines}]`);
|
|
1772
|
+
const progressBar = this.buildProgressBar(percentage, 15);
|
|
1773
|
+
const rightPart = progressBar +
|
|
1774
|
+
theme.ui.muted(` ${percentage}%`) +
|
|
1775
|
+
theme.ui.muted(' │ ') +
|
|
1776
|
+
theme.primary('PgUp') + theme.ui.muted('/') + theme.primary('PgDn') +
|
|
1777
|
+
theme.ui.muted(' scroll · ') +
|
|
1778
|
+
theme.primary('End') + theme.ui.muted(' exit');
|
|
1779
|
+
const leftLen = this.visibleLength(leftPart);
|
|
1780
|
+
const rightLen = this.visibleLength(rightPart);
|
|
1781
|
+
const padding = Math.max(1, cols - leftLen - rightLen - 2);
|
|
1782
|
+
return `${leftPart}${' '.repeat(padding)}${rightPart}`;
|
|
1783
|
+
}
|
|
1784
|
+
/**
|
|
1785
|
+
* Render visual scroll track on the right side
|
|
1786
|
+
*/
|
|
1787
|
+
renderScrollTrack(cols, contentHeight, totalLines, startIdx, endIdx) {
|
|
1788
|
+
if (totalLines <= contentHeight || cols < 40)
|
|
1789
|
+
return;
|
|
1790
|
+
const trackHeight = contentHeight - 1; // Exclude header
|
|
1791
|
+
const viewportRatio = (endIdx - startIdx) / totalLines;
|
|
1792
|
+
const positionRatio = startIdx / Math.max(1, totalLines - (endIdx - startIdx));
|
|
1793
|
+
// Calculate thumb size and position
|
|
1794
|
+
const thumbSize = Math.max(1, Math.round(viewportRatio * trackHeight));
|
|
1795
|
+
const thumbStart = Math.round(positionRatio * (trackHeight - thumbSize));
|
|
1796
|
+
// Render track on right edge
|
|
1797
|
+
for (let i = 0; i < trackHeight; i++) {
|
|
1798
|
+
const row = 2 + i; // Start after header
|
|
1799
|
+
this.write(ESC.TO(row, cols));
|
|
1800
|
+
if (i >= thumbStart && i < thumbStart + thumbSize) {
|
|
1801
|
+
// Thumb (viewport indicator)
|
|
1802
|
+
this.write(theme.accent('█'));
|
|
1803
|
+
}
|
|
1804
|
+
else {
|
|
1805
|
+
// Track background
|
|
1806
|
+
this.write(theme.ui.muted('░'));
|
|
1807
|
+
}
|
|
1808
|
+
}
|
|
1809
|
+
}
|
|
1700
1810
|
/**
|
|
1701
1811
|
* Build a visual progress bar
|
|
1702
1812
|
*/
|