erosolar-cli 1.7.360 → 1.7.361

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 (41) hide show
  1. package/dist/shell/interactiveShell.d.ts +2 -0
  2. package/dist/shell/interactiveShell.d.ts.map +1 -1
  3. package/dist/shell/interactiveShell.js +32 -13
  4. package/dist/shell/interactiveShell.js.map +1 -1
  5. package/dist/shell/terminalInput.d.ts +26 -17
  6. package/dist/shell/terminalInput.d.ts.map +1 -1
  7. package/dist/shell/terminalInput.js +144 -214
  8. package/dist/shell/terminalInput.js.map +1 -1
  9. package/dist/shell/terminalInputAdapter.d.ts.map +1 -1
  10. package/dist/shell/terminalInputAdapter.js +5 -2
  11. package/dist/shell/terminalInputAdapter.js.map +1 -1
  12. package/dist/subagents/taskRunner.d.ts.map +1 -1
  13. package/dist/subagents/taskRunner.js +7 -25
  14. package/dist/subagents/taskRunner.js.map +1 -1
  15. package/dist/tools/learnTools.js +127 -4
  16. package/dist/tools/learnTools.js.map +1 -1
  17. package/dist/ui/ShellUIAdapter.d.ts +27 -0
  18. package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
  19. package/dist/ui/ShellUIAdapter.js +175 -9
  20. package/dist/ui/ShellUIAdapter.js.map +1 -1
  21. package/dist/ui/compactRenderer.d.ts +139 -0
  22. package/dist/ui/compactRenderer.d.ts.map +1 -0
  23. package/dist/ui/compactRenderer.js +398 -0
  24. package/dist/ui/compactRenderer.js.map +1 -0
  25. package/dist/ui/inPlaceUpdater.d.ts +181 -0
  26. package/dist/ui/inPlaceUpdater.d.ts.map +1 -0
  27. package/dist/ui/inPlaceUpdater.js +515 -0
  28. package/dist/ui/inPlaceUpdater.js.map +1 -0
  29. package/dist/ui/theme.d.ts +108 -3
  30. package/dist/ui/theme.d.ts.map +1 -1
  31. package/dist/ui/theme.js +124 -3
  32. package/dist/ui/theme.js.map +1 -1
  33. package/dist/ui/toolDisplay.d.ts +44 -0
  34. package/dist/ui/toolDisplay.d.ts.map +1 -1
  35. package/dist/ui/toolDisplay.js +147 -1
  36. package/dist/ui/toolDisplay.js.map +1 -1
  37. package/dist/ui/unified/index.d.ts +11 -0
  38. package/dist/ui/unified/index.d.ts.map +1 -1
  39. package/dist/ui/unified/index.js +16 -0
  40. package/dist/ui/unified/index.js.map +1 -1
  41. package/package.json +1 -1
@@ -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, mouse events, and escape sequences)
129
- * Returns true if the data was consumed (paste sequence, mouse event, etc.)
128
+ * Process raw terminal data (handles bracketed paste sequences and mouse events)
129
+ * Returns true if the data was consumed (paste sequence)
130
130
  */
131
131
  processRawData(data: string): {
132
132
  consumed: boolean;
@@ -250,8 +250,9 @@ export declare class TerminalInput extends EventEmitter {
250
250
  */
251
251
  private buildMetaLines;
252
252
  /**
253
- * Build mode controls line with all keyboard shortcuts and toggle states.
254
- * Shows below the chat box input area with spelled-out key names.
253
+ * Build mode controls line with all keyboard shortcuts.
254
+ * Shows status, all toggles, and contextual information.
255
+ * Enhanced with comprehensive feature status display.
255
256
  */
256
257
  private buildModeControls;
257
258
  private formatHotkey;
@@ -327,17 +328,18 @@ export declare class TerminalInput extends EventEmitter {
327
328
  */
328
329
  writeToScrollRegion(content: string): void;
329
330
  /**
330
- * Enter alternate screen buffer and clear it.
331
- * This gives us full control over the terminal without affecting user's history.
331
+ * Enter alternate screen buffer.
332
+ * DISABLED: Using terminal-native mode for proper scrollback and text selection.
332
333
  */
333
334
  enterAlternateScreen(): void;
334
335
  /**
335
336
  * Exit alternate screen buffer.
336
- * Restores the user's previous terminal content.
337
+ * DISABLED: Using terminal-native mode.
337
338
  */
338
339
  exitAlternateScreen(): void;
339
340
  /**
340
341
  * Check if alternate screen buffer is currently active.
342
+ * Always returns false - using terminal-native mode.
341
343
  */
342
344
  isAlternateScreenActive(): boolean;
343
345
  /**
@@ -345,8 +347,9 @@ export declare class TerminalInput extends EventEmitter {
345
347
  */
346
348
  getScrollbackSnapshot(): string[];
347
349
  /**
348
- * Clear the entire terminal screen and reset content position.
349
- * This removes all content including the launching command.
350
+ * Clear the visible terminal area and reset content position.
351
+ * In terminal-native mode, this just adds newlines to scroll past content
352
+ * rather than clearing history (preserving scrollback).
350
353
  */
351
354
  clearScreen(): void;
352
355
  /**
@@ -378,8 +381,9 @@ export declare class TerminalInput extends EventEmitter {
378
381
  */
379
382
  private getPageSize;
380
383
  /**
381
- * Build scroll indicator for the divider line (Claude Code style).
382
- * Shows scroll position when in scrollback mode, or history size hint when idle.
384
+ * Build scroll indicator for the divider line.
385
+ * Scrollback navigation is disabled in alternate screen mode.
386
+ * This returns null - no scroll indicator is shown.
383
387
  */
384
388
  private buildScrollIndicator;
385
389
  private handleSpecialKey;
@@ -410,31 +414,36 @@ export declare class TerminalInput extends EventEmitter {
410
414
  private addToScrollback;
411
415
  /**
412
416
  * Scroll up by a number of lines (PageUp)
417
+ * Note: Scrollback is disabled in alternate screen mode to avoid display corruption.
418
+ * Users should use their terminal's native scrollback or copy/paste features.
413
419
  */
414
420
  private scrollUp;
415
421
  /**
416
422
  * Scroll down by a number of lines (PageDown)
423
+ * Note: Scrollback disabled - see scrollUp comment
417
424
  */
418
425
  private scrollDown;
419
426
  /**
420
427
  * Jump to the top of scrollback buffer
428
+ * DISABLED: Scrollback navigation causes display corruption in alternate screen mode.
429
+ * The scrollback buffer is maintained but cannot be rendered properly.
421
430
  */
422
431
  private scrollToTop;
423
432
  /**
424
433
  * Jump to the bottom (live mode)
434
+ * DISABLED: Scrollback navigation causes display corruption.
425
435
  */
426
436
  private scrollToBottom;
427
437
  /**
428
438
  * Toggle scrollback mode on/off (Alt+S hotkey)
439
+ * DISABLED: Scrollback navigation causes display corruption in alternate screen mode.
429
440
  */
430
441
  private toggleScrollbackMode;
431
442
  /**
432
- * Render the scrollback buffer view with enhanced visuals
433
- * Features:
434
- * - Visual scroll position indicator
435
- * - Progress bar showing position in history
436
- * - Keyboard navigation hints
437
- * - Animated indicators
443
+ * Render the scrollback buffer view.
444
+ * DISABLED: This causes display corruption in alternate screen mode.
445
+ * The alternate screen buffer has its own rendering model that conflicts with
446
+ * manual scroll region manipulation.
438
447
  */
439
448
  private renderScrollbackView;
440
449
  /**
@@ -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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"}
@@ -117,7 +117,7 @@ export class TerminalInput extends EventEmitter {
117
117
  editMode = 'display-edits';
118
118
  verificationEnabled = true;
119
119
  autoContinueEnabled = false;
120
- verificationHotkey = 'alt+d';
120
+ verificationHotkey = 'alt+v';
121
121
  autoContinueHotkey = 'alt+c';
122
122
  thinkingHotkey = '/thinking';
123
123
  modelLabel = null;
@@ -173,8 +173,8 @@ export class TerminalInput extends EventEmitter {
173
173
  }
174
174
  }
175
175
  /**
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.)
176
+ * Process raw terminal data (handles bracketed paste sequences and mouse events)
177
+ * Returns true if the data was consumed (paste sequence)
178
178
  */
179
179
  processRawData(data) {
180
180
  // Check for mouse events (SGR mode: \x1b[<button;x;yM or m)
@@ -190,14 +190,6 @@ 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
- }
201
193
  // Check for paste start
202
194
  if (data.includes(ESC.PASTE_START)) {
203
195
  this.isPasting = true;
@@ -696,96 +688,125 @@ export class TerminalInput extends EventEmitter {
696
688
  return [`${leftText}${' '.repeat(spacing)}${rightText}`];
697
689
  }
698
690
  /**
699
- * Build mode controls line with all keyboard shortcuts and toggle states.
700
- * Shows below the chat box input area with spelled-out key names.
691
+ * Build mode controls line with all keyboard shortcuts.
692
+ * Shows status, all toggles, and contextual information.
693
+ * Enhanced with comprehensive feature status display.
701
694
  */
702
695
  buildModeControls(cols) {
703
696
  const width = Math.max(8, cols - 2);
704
- const parts = [];
705
- // Streaming status with stop hint
697
+ const leftParts = [];
698
+ const rightParts = [];
699
+ // Streaming indicator with animated spinner
706
700
  if (this.streamingLabel) {
707
- parts.push({ text: `◐ ${this.streamingLabel}`, tone: 'info' });
708
- parts.push({ text: `Esc:stop`, tone: 'warn' });
701
+ leftParts.push({ text: `◐ ${this.streamingLabel}`, tone: 'info' });
702
+ }
703
+ // Override status (warnings, errors)
704
+ if (this.overrideStatusMessage) {
705
+ leftParts.push({ text: `⚠ ${this.overrideStatusMessage}`, tone: 'warn' });
706
+ }
707
+ // Main status message
708
+ if (this.statusMessage) {
709
+ leftParts.push({ text: this.statusMessage, tone: this.streamingLabel ? 'muted' : 'info' });
709
710
  }
710
- // === ALL MODE TOGGLES ===
711
- // Edit mode (Shift+Tab)
711
+ // Scrollback indicator removed - scrollback is disabled in alternate screen mode
712
+ // === KEYBOARD SHORTCUTS ===
713
+ // Interrupt shortcut (during streaming)
714
+ if (this.mode === 'streaming' || this.scrollRegionActive) {
715
+ leftParts.push({ text: `${this.formatHotkey('esc')} stop`, tone: 'warn' });
716
+ }
717
+ // Edit mode toggle (Shift+Tab)
718
+ const editHotkey = this.formatHotkey('shift+tab');
712
719
  const editIcon = this.editMode === 'display-edits' ? '✓' : '?';
720
+ const editLabel = this.editMode === 'display-edits' ? 'edits:auto' : 'edits:ask';
713
721
  const editTone = this.editMode === 'display-edits' ? 'success' : 'muted';
714
- parts.push({ text: `⇧Tab:edits${editIcon}`, tone: editTone });
715
- // Verify mode (Alt+D for double-check)
722
+ leftParts.push({ text: `${editHotkey}${editIcon}${editLabel}`, tone: editTone });
723
+ // Verification toggle (Alt+V)
716
724
  const verifyIcon = this.verificationEnabled ? '✓' : '○';
717
- const verifyTone = this.verificationEnabled ? 'success' : 'muted';
718
- parts.push({ text: `⌥D:verify${verifyIcon}`, tone: verifyTone });
719
- // Auto-continue (Alt+C)
720
- const autoIcon = this.autoContinueEnabled ? '✓' : '○';
721
- const autoTone = this.autoContinueEnabled ? 'success' : 'muted';
722
- parts.push({ text: `⌥C:auto${autoIcon}`, tone: autoTone });
723
- // Thinking mode (Alt+T) - show current mode
725
+ const verifyHotkey = this.formatHotkey(this.verificationHotkey || 'alt+v');
726
+ const verifyLabel = this.verificationEnabled ? 'verify' : 'no-verify';
727
+ leftParts.push({ text: `${verifyHotkey}${verifyIcon}${verifyLabel}`, tone: this.verificationEnabled ? 'success' : 'muted' });
728
+ // Auto-continue toggle (Alt+C)
729
+ const autoIcon = this.autoContinueEnabled ? '' : '';
730
+ const continueHotkey = this.formatHotkey(this.autoContinueHotkey || 'alt+c');
731
+ const continueLabel = this.autoContinueEnabled ? 'auto' : 'manual';
732
+ leftParts.push({ text: `${continueHotkey}${autoIcon}${continueLabel}`, tone: this.autoContinueEnabled ? 'info' : 'muted' });
733
+ // Thinking mode toggle (if available)
724
734
  if (this.thinkingModeLabel) {
725
- const thinkingShort = this.thinkingModeLabel === 'minimal' ? 'min' :
726
- this.thinkingModeLabel === 'balanced' ? 'bal' :
727
- this.thinkingModeLabel === 'extended' ? 'ext' : this.thinkingModeLabel;
728
- parts.push({ text: `⌥T:think:${thinkingShort}`, tone: 'info' });
729
- }
730
- // Clear context (Alt+X)
731
- parts.push({ text: `⌥X:clear`, tone: 'muted' });
732
- // Scroll (PgUp/Dn)
733
- parts.push({ text: `PgUp/Dn:scroll`, tone: 'muted' });
734
- // === STATUS INFO ===
735
- // Context remaining
735
+ const thinkingHotkey = this.formatHotkey(this.thinkingHotkey || '/thinking');
736
+ rightParts.push({ text: `${thinkingHotkey}◐${this.thinkingModeLabel}`, tone: 'info' });
737
+ }
738
+ // === CONTEXTUAL INFO ===
739
+ // Queued commands
740
+ if (this.queue.length > 0) {
741
+ const queueIcon = this.mode === 'streaming' ? '⏳' : '';
742
+ leftParts.push({ text: `${queueIcon}${this.queue.length}queued`, tone: 'info' });
743
+ }
744
+ // Scrollback buffer hint removed - scrollback navigation is disabled
745
+ // Multi-line indicator
746
+ if (this.buffer.includes('\n')) {
747
+ const lineCount = this.buffer.split('\n').length;
748
+ rightParts.push({ text: `${lineCount}L`, tone: 'muted' });
749
+ }
750
+ // Paste indicator
751
+ if (this.pastePlaceholders.length > 0) {
752
+ const latest = this.pastePlaceholders[this.pastePlaceholders.length - 1];
753
+ rightParts.push({
754
+ text: `paste#${latest.id}+${latest.lineCount}L`,
755
+ tone: 'info',
756
+ });
757
+ }
758
+ // Context remaining warning with visual indicator
736
759
  const contextRemaining = this.computeContextRemaining();
737
760
  if (contextRemaining !== null) {
738
761
  const tone = contextRemaining <= 10 ? 'warn' : contextRemaining <= 30 ? 'info' : 'muted';
739
- const icon = contextRemaining <= 20 ? '⚠' : '';
740
- parts.push({ text: `${icon}ctx:${contextRemaining}%`, tone });
741
- }
742
- // Token usage
743
- if (this.metaTokensUsed !== null) {
744
- const used = this.formatTokenCount(this.metaTokensUsed);
745
- const limit = this.metaTokenLimit ? `/${this.formatTokenCount(this.metaTokenLimit)}` : '';
746
- parts.push({ text: `⊛${used}${limit}`, tone: 'muted' });
747
- }
748
- // Elapsed time during streaming
749
- if (this.metaElapsedSeconds !== null && this.streamingLabel) {
750
- parts.push({ text: `⏱${this.formatElapsedLabel(this.metaElapsedSeconds)}`, tone: 'muted' });
751
- }
752
- return renderStatusLine(parts, width);
762
+ const icon = contextRemaining <= 10 ? '⚠' : '';
763
+ const label = contextRemaining === 0 && this.contextUsage !== null
764
+ ? `${icon}compact!`
765
+ : `${icon}${contextRemaining}%`;
766
+ rightParts.push({ text: label, tone });
767
+ }
768
+ // Model/provider quick reference (compact)
769
+ if (this.modelLabel && !this.streamingLabel) {
770
+ const shortModel = this.modelLabel.length > 12 ? this.modelLabel.slice(0, 10) + '..' : this.modelLabel;
771
+ rightParts.push({ text: shortModel, tone: 'muted' });
772
+ }
773
+ // Render: left-aligned shortcuts, right-aligned context info
774
+ if (!rightParts.length || width < 60) {
775
+ const merged = rightParts.length ? [...leftParts, ...rightParts] : leftParts;
776
+ return renderStatusLine(merged, width);
777
+ }
778
+ const leftWidth = Math.max(12, Math.floor(width * 0.65));
779
+ const rightWidth = Math.max(14, width - leftWidth - 1);
780
+ const leftText = renderStatusLine(leftParts, leftWidth);
781
+ const rightText = renderStatusLine(rightParts, rightWidth);
782
+ const spacing = Math.max(1, width - this.visibleLength(leftText) - this.visibleLength(rightText));
783
+ return `${leftText}${' '.repeat(spacing)}${rightText}`;
753
784
  }
754
785
  formatHotkey(hotkey) {
755
786
  const normalized = hotkey.trim().toLowerCase();
756
787
  if (!normalized)
757
788
  return hotkey;
758
789
  const parts = normalized.split('+').filter(Boolean);
759
- // Use readable key names instead of symbols for better terminal compatibility
760
790
  const map = {
761
- shift: 'Shift',
762
- sh: 'Shift',
763
- alt: 'Alt',
764
- option: 'Alt',
765
- opt: 'Alt',
766
- ctrl: 'Ctrl',
767
- control: 'Ctrl',
768
- cmd: 'Cmd',
769
- meta: 'Cmd',
770
- esc: 'Esc',
771
- escape: 'Esc',
772
- tab: 'Tab',
773
- return: 'Enter',
774
- enter: 'Enter',
775
- pageup: 'PgUp',
776
- pagedown: 'PgDn',
777
- home: 'Home',
778
- end: 'End',
791
+ shift: '',
792
+ sh: '',
793
+ alt: '',
794
+ option: '',
795
+ opt: '',
796
+ ctrl: '',
797
+ control: '',
798
+ cmd: '',
799
+ meta: '',
779
800
  };
780
801
  const formatted = parts
781
802
  .map((part) => {
782
- const label = map[part];
783
- if (label)
784
- return label;
785
- return part.length === 1 ? part.toUpperCase() : part.charAt(0).toUpperCase() + part.slice(1);
803
+ const symbol = map[part];
804
+ if (symbol)
805
+ return symbol;
806
+ return part.length === 1 ? part.toUpperCase() : part.toUpperCase();
786
807
  })
787
- .join('+');
788
- return `[${formatted}]`;
808
+ .join('');
809
+ return formatted || hotkey;
789
810
  }
790
811
  computeContextRemaining() {
791
812
  if (this.contextUsage === null) {
@@ -951,7 +972,7 @@ export class TerminalInput extends EventEmitter {
951
972
  * Calculate chat box height.
952
973
  */
953
974
  getChatBoxHeight() {
954
- return 5; // Fixed: divider + input + status + buffer
975
+ return 6; // Fixed: meta + divider + input + controls + buffer
955
976
  }
956
977
  /**
957
978
  * @deprecated Use streamContent() instead
@@ -987,41 +1008,26 @@ export class TerminalInput extends EventEmitter {
987
1008
  }
988
1009
  }
989
1010
  /**
990
- * Enter alternate screen buffer and clear it.
991
- * This gives us full control over the terminal without affecting user's history.
1011
+ * Enter alternate screen buffer.
1012
+ * DISABLED: Using terminal-native mode for proper scrollback and text selection.
992
1013
  */
993
1014
  enterAlternateScreen() {
994
- writeLock.lock('enterAltScreen');
995
- try {
996
- this.write(ESC.ENTER_ALT_SCREEN);
997
- this.write(ESC.HOME);
998
- this.write(ESC.CLEAR_SCREEN);
999
- this.contentRow = 1;
1000
- this.alternateScreenActive = true;
1001
- }
1002
- finally {
1003
- writeLock.unlock();
1004
- }
1015
+ // Disabled - using terminal-native mode
1016
+ this.contentRow = 1;
1005
1017
  }
1006
1018
  /**
1007
1019
  * Exit alternate screen buffer.
1008
- * Restores the user's previous terminal content.
1020
+ * DISABLED: Using terminal-native mode.
1009
1021
  */
1010
1022
  exitAlternateScreen() {
1011
- writeLock.lock('exitAltScreen');
1012
- try {
1013
- this.write(ESC.EXIT_ALT_SCREEN);
1014
- this.alternateScreenActive = false;
1015
- }
1016
- finally {
1017
- writeLock.unlock();
1018
- }
1023
+ // Disabled - using terminal-native mode
1019
1024
  }
1020
1025
  /**
1021
1026
  * Check if alternate screen buffer is currently active.
1027
+ * Always returns false - using terminal-native mode.
1022
1028
  */
1023
1029
  isAlternateScreenActive() {
1024
- return this.alternateScreenActive;
1030
+ return false;
1025
1031
  }
1026
1032
  /**
1027
1033
  * Get a snapshot of the scrollback buffer (for display on exit).
@@ -1030,14 +1036,17 @@ export class TerminalInput extends EventEmitter {
1030
1036
  return [...this.scrollbackBuffer];
1031
1037
  }
1032
1038
  /**
1033
- * Clear the entire terminal screen and reset content position.
1034
- * This removes all content including the launching command.
1039
+ * Clear the visible terminal area and reset content position.
1040
+ * In terminal-native mode, this just adds newlines to scroll past content
1041
+ * rather than clearing history (preserving scrollback).
1035
1042
  */
1036
1043
  clearScreen() {
1037
1044
  writeLock.lock('clearScreen');
1038
1045
  try {
1046
+ // In native mode, scroll past existing content rather than clearing
1047
+ const { rows } = this.getSize();
1048
+ this.write('\n'.repeat(rows));
1039
1049
  this.write(ESC.HOME);
1040
- this.write(ESC.CLEAR_SCREEN);
1041
1050
  this.contentRow = 1;
1042
1051
  }
1043
1052
  finally {
@@ -1137,8 +1146,8 @@ export class TerminalInput extends EventEmitter {
1137
1146
  this.insertNewline();
1138
1147
  break;
1139
1148
  // === MODE TOGGLES ===
1140
- case 'd':
1141
- // Alt+D: Toggle verification/double-check mode (auto-tests after edits)
1149
+ case 'v':
1150
+ // Alt+V: Toggle verification mode (auto-tests after edits)
1142
1151
  this.emit('toggleVerify');
1143
1152
  break;
1144
1153
  case 'c':
@@ -1205,25 +1214,12 @@ export class TerminalInput extends EventEmitter {
1205
1214
  return Math.max(5, rows - chatBoxHeight - 2);
1206
1215
  }
1207
1216
  /**
1208
- * Build scroll indicator for the divider line (Claude Code style).
1209
- * Shows scroll position when in scrollback mode, or history size hint when idle.
1217
+ * Build scroll indicator for the divider line.
1218
+ * Scrollback navigation is disabled in alternate screen mode.
1219
+ * This returns null - no scroll indicator is shown.
1210
1220
  */
1211
1221
  buildScrollIndicator() {
1212
- const bufferSize = this.scrollbackBuffer.length;
1213
- // In scrollback mode - show position
1214
- if (this.isInScrollbackMode && this.scrollbackOffset > 0) {
1215
- const { rows } = this.getSize();
1216
- const chatBoxHeight = this.getChatBoxHeight();
1217
- const viewportHeight = Math.max(1, rows - chatBoxHeight);
1218
- const currentPos = Math.max(0, bufferSize - this.scrollbackOffset - viewportHeight);
1219
- const pct = bufferSize > 0 ? Math.round((currentPos / bufferSize) * 100) : 0;
1220
- return `↑${this.scrollbackOffset} · ${pct}% · PgUp/Dn`;
1221
- }
1222
- // Not in scrollback - show hint if there's history
1223
- if (bufferSize > 20) {
1224
- const sizeLabel = bufferSize >= 1000 ? `${Math.floor(bufferSize / 1000)}k` : `${bufferSize}`;
1225
- return `↕${sizeLabel}L · PgUp`;
1226
- }
1222
+ // Scrollback navigation disabled - no indicator needed
1227
1223
  return null;
1228
1224
  }
1229
1225
  handleSpecialKey(_str, key) {
@@ -1285,10 +1281,11 @@ export class TerminalInput extends EventEmitter {
1285
1281
  }
1286
1282
  return true;
1287
1283
  case 'pageup':
1288
- this.scrollUp(20); // Scroll up by 20 lines
1284
+ // Scrollback disabled in alternate screen mode
1285
+ // Users should use terminal's native scrollback if available
1289
1286
  return true;
1290
1287
  case 'pagedown':
1291
- this.scrollDown(20); // Scroll down by 20 lines
1288
+ // Scrollback disabled in alternate screen mode
1292
1289
  return true;
1293
1290
  case 'tab':
1294
1291
  if (key.shift) {
@@ -1682,120 +1679,53 @@ export class TerminalInput extends EventEmitter {
1682
1679
  }
1683
1680
  /**
1684
1681
  * Scroll up by a number of lines (PageUp)
1682
+ * Note: Scrollback is disabled in alternate screen mode to avoid display corruption.
1683
+ * Users should use their terminal's native scrollback or copy/paste features.
1685
1684
  */
1686
- scrollUp(lines = 10) {
1687
- const { rows } = this.getSize();
1688
- const chatBoxHeight = this.getChatBoxHeight();
1689
- const visibleLines = Math.max(1, rows - chatBoxHeight);
1690
- // Calculate max scroll offset
1691
- const maxOffset = Math.max(0, this.scrollbackBuffer.length - visibleLines);
1692
- this.scrollbackOffset = Math.min(this.scrollbackOffset + lines, maxOffset);
1693
- this.isInScrollbackMode = this.scrollbackOffset > 0;
1694
- if (this.isInScrollbackMode) {
1695
- this.renderScrollbackView();
1696
- }
1685
+ scrollUp(_lines = 10) {
1686
+ // Scrollback disabled - alternate screen buffer doesn't support it well
1687
+ // The scrollback buffer is still maintained for potential future use
1688
+ // Users can select and copy text normally since mouse tracking is off
1697
1689
  }
1698
1690
  /**
1699
1691
  * Scroll down by a number of lines (PageDown)
1692
+ * Note: Scrollback disabled - see scrollUp comment
1700
1693
  */
1701
- scrollDown(lines = 10) {
1702
- this.scrollbackOffset = Math.max(0, this.scrollbackOffset - lines);
1703
- this.isInScrollbackMode = this.scrollbackOffset > 0;
1704
- if (this.isInScrollbackMode) {
1705
- this.renderScrollbackView();
1706
- }
1707
- else {
1708
- // Returned to live mode - force re-render
1709
- this.forceRender();
1710
- }
1694
+ scrollDown(_lines = 10) {
1695
+ // Scrollback disabled
1711
1696
  }
1712
1697
  /**
1713
1698
  * Jump to the top of scrollback buffer
1699
+ * DISABLED: Scrollback navigation causes display corruption in alternate screen mode.
1700
+ * The scrollback buffer is maintained but cannot be rendered properly.
1714
1701
  */
1715
1702
  scrollToTop() {
1716
- const { rows } = this.getSize();
1717
- const chatBoxHeight = this.getChatBoxHeight();
1718
- const visibleLines = Math.max(1, rows - chatBoxHeight);
1719
- const maxOffset = Math.max(0, this.scrollbackBuffer.length - visibleLines);
1720
- this.scrollbackOffset = maxOffset;
1721
- this.isInScrollbackMode = true;
1722
- this.renderScrollbackView();
1703
+ // Disabled - causes display corruption in alternate screen buffer
1723
1704
  }
1724
1705
  /**
1725
1706
  * Jump to the bottom (live mode)
1707
+ * DISABLED: Scrollback navigation causes display corruption.
1726
1708
  */
1727
1709
  scrollToBottom() {
1710
+ // Reset scrollback state in case it was somehow enabled
1728
1711
  this.scrollbackOffset = 0;
1729
1712
  this.isInScrollbackMode = false;
1730
- this.forceRender();
1731
1713
  }
1732
1714
  /**
1733
1715
  * Toggle scrollback mode on/off (Alt+S hotkey)
1716
+ * DISABLED: Scrollback navigation causes display corruption in alternate screen mode.
1734
1717
  */
1735
1718
  toggleScrollbackMode() {
1736
- if (this.isInScrollbackMode) {
1737
- this.scrollToBottom();
1738
- }
1739
- else if (this.scrollbackBuffer.length > 0) {
1740
- this.scrollUp(20);
1741
- }
1719
+ // Disabled - alternate screen buffer doesn't support manual scrollback rendering
1742
1720
  }
1743
1721
  /**
1744
- * Render the scrollback buffer view with enhanced visuals
1745
- * Features:
1746
- * - Visual scroll position indicator
1747
- * - Progress bar showing position in history
1748
- * - Keyboard navigation hints
1749
- * - Animated indicators
1722
+ * Render the scrollback buffer view.
1723
+ * DISABLED: This causes display corruption in alternate screen mode.
1724
+ * The alternate screen buffer has its own rendering model that conflicts with
1725
+ * manual scroll region manipulation.
1750
1726
  */
1751
1727
  renderScrollbackView() {
1752
- const { rows, cols } = this.getSize();
1753
- const chatBoxHeight = this.getChatBoxHeight();
1754
- const contentHeight = Math.max(1, rows - chatBoxHeight);
1755
- writeLock.lock('renderScrollback');
1756
- try {
1757
- this.write(ESC.SAVE);
1758
- this.write(ESC.HIDE);
1759
- // Clear content area
1760
- for (let i = 1; i <= contentHeight; i++) {
1761
- this.write(ESC.TO(i, 1));
1762
- this.write(ESC.CLEAR_LINE);
1763
- }
1764
- // Calculate which lines to show
1765
- const totalLines = this.scrollbackBuffer.length;
1766
- const startIdx = Math.max(0, totalLines - this.scrollbackOffset - contentHeight);
1767
- const endIdx = Math.max(0, totalLines - this.scrollbackOffset);
1768
- const visibleLines = this.scrollbackBuffer.slice(startIdx, endIdx);
1769
- // Build header bar with navigation hints
1770
- const headerInfo = this.buildScrollbackHeader(cols, totalLines, startIdx, endIdx);
1771
- this.write(ESC.TO(1, 1));
1772
- this.write(headerInfo);
1773
- // Render visible lines with line numbers and visual guides
1774
- const lineNumWidth = String(totalLines).length + 1;
1775
- const contentStart = 2; // Start after header
1776
- for (let i = 0; i < Math.min(visibleLines.length, contentHeight - 1); i++) {
1777
- const line = visibleLines[i] ?? '';
1778
- const lineNum = startIdx + i + 1;
1779
- this.write(ESC.TO(contentStart + i, 1));
1780
- // Line number gutter
1781
- const numStr = String(lineNum).padStart(lineNumWidth, ' ');
1782
- this.write(theme.ui.muted(`${numStr} │ `));
1783
- // Content with truncation
1784
- const gutterWidth = lineNumWidth + 4;
1785
- const maxLen = cols - gutterWidth - 2;
1786
- const displayLine = line.length > maxLen ? line.slice(0, maxLen - 3) + '...' : line;
1787
- this.write(displayLine);
1788
- }
1789
- // Add visual scroll track on the right edge
1790
- this.renderScrollTrack(cols, contentHeight, totalLines, startIdx, endIdx);
1791
- this.write(ESC.RESTORE);
1792
- this.write(ESC.SHOW);
1793
- }
1794
- finally {
1795
- writeLock.unlock();
1796
- }
1797
- // Re-render chat box
1798
- this.forceRender();
1728
+ // Disabled - causes display corruption
1799
1729
  }
1800
1730
  /**
1801
1731
  * Build scrollback header with navigation hints