erosolar-cli 1.7.351 → 1.7.353

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.
@@ -125,8 +125,8 @@ export declare class TerminalInput extends EventEmitter {
125
125
  */
126
126
  disableMouseTracking(): void;
127
127
  /**
128
- * Process raw terminal data (handles bracketed paste sequences and mouse events)
129
- * Returns true if the data was consumed (paste sequence)
128
+ * Process raw terminal data (handles bracketed paste sequences, mouse events, and escape sequences)
129
+ * Returns true if the data was consumed (paste sequence, mouse event, etc.)
130
130
  */
131
131
  processRawData(data: string): {
132
132
  consumed: boolean;
@@ -430,8 +430,12 @@ export declare class TerminalInput extends EventEmitter {
430
430
  */
431
431
  private toggleScrollbackMode;
432
432
  /**
433
- * Render the scrollback buffer view.
434
- * Simple, clean display of historical content above the chat box.
433
+ * Render the scrollback buffer view with enhanced visuals
434
+ * Features:
435
+ * - Visual scroll position indicator
436
+ * - Progress bar showing position in history
437
+ * - Keyboard navigation hints
438
+ * - Animated indicators
435
439
  */
436
440
  private renderScrollbackView;
437
441
  /**
@@ -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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"}
@@ -173,8 +173,8 @@ export class TerminalInput extends EventEmitter {
173
173
  }
174
174
  }
175
175
  /**
176
- * Process raw terminal data (handles bracketed paste sequences and mouse events)
177
- * Returns true if the data was consumed (paste sequence)
176
+ * Process raw terminal data (handles bracketed paste sequences, mouse events, and escape sequences)
177
+ * Returns true if the data was consumed (paste sequence, mouse event, etc.)
178
178
  */
179
179
  processRawData(data) {
180
180
  // Check for mouse events (SGR mode: \x1b[<button;x;yM or m)
@@ -190,6 +190,14 @@ export class TerminalInput extends EventEmitter {
190
190
  const remaining = data.slice(mouseEventEnd);
191
191
  return { consumed: true, passthrough: remaining };
192
192
  }
193
+ // Filter out arrow key escape sequences (they're handled by keypress events)
194
+ // Arrow keys: \x1b[A (up), \x1b[B (down), \x1b[C (right), \x1b[D (left)
195
+ const arrowMatch = data.match(/\x1b\[[ABCD]/);
196
+ if (arrowMatch) {
197
+ // Arrow keys should be handled by keypress handler, strip them from passthrough
198
+ const filtered = data.replace(/\x1b\[[ABCD]/g, '');
199
+ return { consumed: filtered.length !== data.length, passthrough: filtered };
200
+ }
193
201
  // Check for paste start
194
202
  if (data.includes(ESC.PASTE_START)) {
195
203
  this.isPasting = true;
@@ -694,129 +702,112 @@ export class TerminalInput extends EventEmitter {
694
702
  */
695
703
  buildModeControls(cols) {
696
704
  const width = Math.max(8, cols - 2);
697
- const leftParts = [];
698
- const rightParts = [];
699
- // Streaming indicator with animated spinner
705
+ const lines = [];
706
+ // === LINE 1: STATUS AND CONTEXT ===
707
+ const statusParts = [];
708
+ // Streaming indicator
700
709
  if (this.streamingLabel) {
701
- leftParts.push({ text: `◐ ${this.streamingLabel}`, tone: 'info' });
710
+ statusParts.push({ text: `◐ ${this.streamingLabel}`, tone: 'info' });
702
711
  }
703
712
  // Override status (warnings, errors)
704
713
  if (this.overrideStatusMessage) {
705
- leftParts.push({ text: `⚠ ${this.overrideStatusMessage}`, tone: 'warn' });
714
+ statusParts.push({ text: `⚠ ${this.overrideStatusMessage}`, tone: 'warn' });
706
715
  }
707
716
  // Main status message
708
717
  if (this.statusMessage) {
709
- leftParts.push({ text: this.statusMessage, tone: this.streamingLabel ? 'muted' : 'info' });
718
+ statusParts.push({ text: this.statusMessage, tone: this.streamingLabel ? 'muted' : 'info' });
710
719
  }
711
- // === SCROLLBACK INDICATOR ===
712
- if (this.isInScrollbackMode && this.scrollbackOffset > 0) {
713
- const scrollInfo = `↑${this.scrollbackOffset}`;
714
- leftParts.push({ text: scrollInfo, tone: 'info' });
715
- // Show scrollback help hint
716
- leftParts.push({ text: `${this.formatHotkey('alt+s')}exit`, tone: 'muted' });
717
- }
718
- // === KEYBOARD SHORTCUTS ===
719
- // Interrupt shortcut (during streaming)
720
- if (this.mode === 'streaming' || this.scrollRegionActive) {
721
- leftParts.push({ text: `${this.formatHotkey('esc')} stop`, tone: 'warn' });
722
- }
723
- // Edit mode toggle (Shift+Tab)
724
- const editHotkey = this.formatHotkey('shift+tab');
725
- const editIcon = this.editMode === 'display-edits' ? '✓' : '?';
726
- const editLabel = this.editMode === 'display-edits' ? 'edits:auto' : 'edits:ask';
727
- const editTone = this.editMode === 'display-edits' ? 'success' : 'muted';
728
- leftParts.push({ text: `${editHotkey}${editIcon}${editLabel}`, tone: editTone });
729
- // Verification toggle (Alt+V)
730
- const verifyIcon = this.verificationEnabled ? '✓' : '○';
731
- const verifyHotkey = this.formatHotkey(this.verificationHotkey || 'alt+v');
732
- const verifyLabel = this.verificationEnabled ? 'verify' : 'no-verify';
733
- leftParts.push({ text: `${verifyHotkey}${verifyIcon}${verifyLabel}`, tone: this.verificationEnabled ? 'success' : 'muted' });
734
- // Auto-continue toggle (Alt+C)
735
- const autoIcon = this.autoContinueEnabled ? '↻' : '○';
736
- const continueHotkey = this.formatHotkey(this.autoContinueHotkey || 'alt+c');
737
- const continueLabel = this.autoContinueEnabled ? 'auto' : 'manual';
738
- leftParts.push({ text: `${continueHotkey}${autoIcon}${continueLabel}`, tone: this.autoContinueEnabled ? 'info' : 'muted' });
739
- // Thinking mode toggle (if available)
740
- if (this.thinkingModeLabel) {
741
- const thinkingHotkey = this.formatHotkey(this.thinkingHotkey || '/thinking');
742
- rightParts.push({ text: `${thinkingHotkey}◐${this.thinkingModeLabel}`, tone: 'info' });
743
- }
744
- // === CONTEXTUAL INFO ===
745
720
  // Queued commands
746
721
  if (this.queue.length > 0) {
747
- const queueIcon = this.mode === 'streaming' ? '' : '▸';
748
- leftParts.push({ text: `${queueIcon}${this.queue.length}queued`, tone: 'info' });
749
- }
750
- // Scrollback buffer size (when significant)
751
- if (this.scrollbackBuffer.length > 100 && !this.isInScrollbackMode) {
752
- const bufferHint = `${this.formatHotkey('alt+s')}↕${Math.floor(this.scrollbackBuffer.length / 100) * 100}+L`;
753
- rightParts.push({ text: bufferHint, tone: 'muted' });
754
- }
755
- // Multi-line indicator
756
- if (this.buffer.includes('\n')) {
757
- const lineCount = this.buffer.split('\n').length;
758
- rightParts.push({ text: `${lineCount}L`, tone: 'muted' });
759
- }
760
- // Paste indicator
761
- if (this.pastePlaceholders.length > 0) {
762
- const latest = this.pastePlaceholders[this.pastePlaceholders.length - 1];
763
- rightParts.push({
764
- text: `paste#${latest.id}+${latest.lineCount}L`,
765
- tone: 'info',
766
- });
722
+ statusParts.push({ text: `⏳${this.queue.length} queued`, tone: 'info' });
767
723
  }
768
- // Context remaining warning with visual indicator
724
+ // Context remaining
769
725
  const contextRemaining = this.computeContextRemaining();
770
726
  if (contextRemaining !== null) {
771
727
  const tone = contextRemaining <= 10 ? 'warn' : contextRemaining <= 30 ? 'info' : 'muted';
772
728
  const icon = contextRemaining <= 10 ? '⚠' : '⊛';
773
- const label = contextRemaining === 0 && this.contextUsage !== null
774
- ? `${icon}compact!`
775
- : `${icon}${contextRemaining}%`;
776
- rightParts.push({ text: label, tone });
729
+ statusParts.push({ text: `${icon}${contextRemaining}% ctx`, tone });
777
730
  }
778
- // Model/provider quick reference (compact)
731
+ // Model info
779
732
  if (this.modelLabel && !this.streamingLabel) {
780
- const shortModel = this.modelLabel.length > 12 ? this.modelLabel.slice(0, 10) + '..' : this.modelLabel;
781
- rightParts.push({ text: shortModel, tone: 'muted' });
733
+ statusParts.push({ text: this.modelLabel, tone: 'muted' });
782
734
  }
783
- // Render: left-aligned shortcuts, right-aligned context info
784
- if (!rightParts.length || width < 60) {
785
- const merged = rightParts.length ? [...leftParts, ...rightParts] : leftParts;
786
- return renderStatusLine(merged, width);
735
+ if (statusParts.length > 0) {
736
+ lines.push(renderStatusLine(statusParts, width));
787
737
  }
788
- const leftWidth = Math.max(12, Math.floor(width * 0.65));
789
- const rightWidth = Math.max(14, width - leftWidth - 1);
790
- const leftText = renderStatusLine(leftParts, leftWidth);
791
- const rightText = renderStatusLine(rightParts, rightWidth);
792
- const spacing = Math.max(1, width - this.visibleLength(leftText) - this.visibleLength(rightText));
793
- return `${leftText}${' '.repeat(spacing)}${rightText}`;
738
+ // === LINE 2: ALL KEYBOARD SHORTCUTS ===
739
+ const shortcutParts = [];
740
+ // Interrupt (during streaming)
741
+ if (this.mode === 'streaming' || this.scrollRegionActive) {
742
+ shortcutParts.push({ text: `[Esc] stop`, tone: 'warn' });
743
+ }
744
+ // Edit mode toggle
745
+ const editIcon = this.editMode === 'display-edits' ? '✓' : '?';
746
+ shortcutParts.push({
747
+ text: `[Shift+Tab] edits:${this.editMode === 'display-edits' ? 'auto' : 'ask'}${editIcon}`,
748
+ tone: this.editMode === 'display-edits' ? 'success' : 'muted'
749
+ });
750
+ // Verification toggle
751
+ const verifyIcon = this.verificationEnabled ? '✓' : '○';
752
+ shortcutParts.push({
753
+ text: `[Alt+V] verify${verifyIcon}`,
754
+ tone: this.verificationEnabled ? 'success' : 'muted'
755
+ });
756
+ // Auto-continue toggle
757
+ const autoIcon = this.autoContinueEnabled ? '✓' : '○';
758
+ shortcutParts.push({
759
+ text: `[Alt+C] auto${autoIcon}`,
760
+ tone: this.autoContinueEnabled ? 'success' : 'muted'
761
+ });
762
+ // Thinking mode (if available)
763
+ if (this.thinkingModeLabel) {
764
+ shortcutParts.push({
765
+ text: `[Alt+T] ${this.thinkingModeLabel}`,
766
+ tone: 'info'
767
+ });
768
+ }
769
+ // Context clear
770
+ shortcutParts.push({ text: `[Alt+X] clear`, tone: 'muted' });
771
+ // Scroll navigation
772
+ shortcutParts.push({ text: `[PgUp/PgDn] scroll`, tone: 'muted' });
773
+ lines.push(renderStatusLine(shortcutParts, width));
774
+ return lines.join('\n');
794
775
  }
795
776
  formatHotkey(hotkey) {
796
777
  const normalized = hotkey.trim().toLowerCase();
797
778
  if (!normalized)
798
779
  return hotkey;
799
780
  const parts = normalized.split('+').filter(Boolean);
781
+ // Use readable key names instead of symbols for better terminal compatibility
800
782
  const map = {
801
- shift: '',
802
- sh: '',
803
- alt: '',
804
- option: '',
805
- opt: '',
806
- ctrl: '',
807
- control: '',
808
- cmd: '',
809
- meta: '',
783
+ shift: 'Shift',
784
+ sh: 'Shift',
785
+ alt: 'Alt',
786
+ option: 'Alt',
787
+ opt: 'Alt',
788
+ ctrl: 'Ctrl',
789
+ control: 'Ctrl',
790
+ cmd: 'Cmd',
791
+ meta: 'Cmd',
792
+ esc: 'Esc',
793
+ escape: 'Esc',
794
+ tab: 'Tab',
795
+ return: 'Enter',
796
+ enter: 'Enter',
797
+ pageup: 'PgUp',
798
+ pagedown: 'PgDn',
799
+ home: 'Home',
800
+ end: 'End',
810
801
  };
811
802
  const formatted = parts
812
803
  .map((part) => {
813
- const symbol = map[part];
814
- if (symbol)
815
- return symbol;
816
- return part.length === 1 ? part.toUpperCase() : part.toUpperCase();
804
+ const label = map[part];
805
+ if (label)
806
+ return label;
807
+ return part.length === 1 ? part.toUpperCase() : part.charAt(0).toUpperCase() + part.slice(1);
817
808
  })
818
- .join('');
819
- return formatted || hotkey;
809
+ .join('+');
810
+ return `[${formatted}]`;
820
811
  }
821
812
  computeContextRemaining() {
822
813
  if (this.contextUsage === null) {
@@ -982,7 +973,7 @@ export class TerminalInput extends EventEmitter {
982
973
  * Calculate chat box height.
983
974
  */
984
975
  getChatBoxHeight() {
985
- return 6; // Fixed: meta + divider + input + controls + buffer
976
+ return 7; // Fixed: meta + divider + input + status line + shortcuts line + buffer
986
977
  }
987
978
  /**
988
979
  * @deprecated Use streamContent() instead
@@ -1772,8 +1763,12 @@ export class TerminalInput extends EventEmitter {
1772
1763
  }
1773
1764
  }
1774
1765
  /**
1775
- * Render the scrollback buffer view.
1776
- * Simple, clean display of historical content above the chat box.
1766
+ * Render the scrollback buffer view with enhanced visuals
1767
+ * Features:
1768
+ * - Visual scroll position indicator
1769
+ * - Progress bar showing position in history
1770
+ * - Keyboard navigation hints
1771
+ * - Animated indicators
1777
1772
  */
1778
1773
  renderScrollbackView() {
1779
1774
  const { rows, cols } = this.getSize();
@@ -1783,32 +1778,45 @@ export class TerminalInput extends EventEmitter {
1783
1778
  try {
1784
1779
  this.write(ESC.SAVE);
1785
1780
  this.write(ESC.HIDE);
1786
- // Reset scroll region temporarily
1787
- this.write(ESC.RESET_SCROLL);
1781
+ // Clear content area
1782
+ for (let i = 1; i <= contentHeight; i++) {
1783
+ this.write(ESC.TO(i, 1));
1784
+ this.write(ESC.CLEAR_LINE);
1785
+ }
1788
1786
  // Calculate which lines to show
1789
1787
  const totalLines = this.scrollbackBuffer.length;
1790
1788
  const startIdx = Math.max(0, totalLines - this.scrollbackOffset - contentHeight);
1791
1789
  const endIdx = Math.max(0, totalLines - this.scrollbackOffset);
1792
1790
  const visibleLines = this.scrollbackBuffer.slice(startIdx, endIdx);
1793
- // Clear and render content area
1794
- for (let i = 0; i < contentHeight; i++) {
1795
- const row = i + 1;
1796
- this.write(ESC.TO(row, 1));
1797
- this.write(ESC.CLEAR_LINE);
1798
- if (i < visibleLines.length) {
1799
- const line = visibleLines[i] ?? '';
1800
- // Truncate if needed
1801
- const displayLine = line.length > cols - 1 ? line.slice(0, cols - 4) + '...' : line;
1802
- this.write(displayLine);
1803
- }
1791
+ // Build header bar with navigation hints
1792
+ const headerInfo = this.buildScrollbackHeader(cols, totalLines, startIdx, endIdx);
1793
+ this.write(ESC.TO(1, 1));
1794
+ this.write(headerInfo);
1795
+ // Render visible lines with line numbers and visual guides
1796
+ const lineNumWidth = String(totalLines).length + 1;
1797
+ const contentStart = 2; // Start after header
1798
+ for (let i = 0; i < Math.min(visibleLines.length, contentHeight - 1); i++) {
1799
+ const line = visibleLines[i] ?? '';
1800
+ const lineNum = startIdx + i + 1;
1801
+ this.write(ESC.TO(contentStart + i, 1));
1802
+ // Line number gutter
1803
+ const numStr = String(lineNum).padStart(lineNumWidth, ' ');
1804
+ this.write(theme.ui.muted(`${numStr} │ `));
1805
+ // Content with truncation
1806
+ const gutterWidth = lineNumWidth + 4;
1807
+ const maxLen = cols - gutterWidth - 2;
1808
+ const displayLine = line.length > maxLen ? line.slice(0, maxLen - 3) + '...' : line;
1809
+ this.write(displayLine);
1804
1810
  }
1811
+ // Add visual scroll track on the right edge
1812
+ this.renderScrollTrack(cols, contentHeight, totalLines, startIdx, endIdx);
1805
1813
  this.write(ESC.RESTORE);
1806
1814
  this.write(ESC.SHOW);
1807
1815
  }
1808
1816
  finally {
1809
1817
  writeLock.unlock();
1810
1818
  }
1811
- // Re-render chat box at bottom
1819
+ // Re-render chat box
1812
1820
  this.forceRender();
1813
1821
  }
1814
1822
  /**