erosolar-cli 1.7.344 → 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.
@@ -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":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAuD3C;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC;AACvD,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,gBAAgB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAWD;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IAGvD,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,IAAI,CAAqB;IAGjC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,YAAY,CAAK;IAGzB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAG1C,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,cAAc,CAAa;IAGnC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,qBAAqB,CAAuB;IACpD,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,sBAAsB,CAAkB;IAChD,OAAO,CAAC,iBAAiB,CAAc;IACvC,OAAO,CAAC,gBAAgB,CAAc;IACtC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,WAAW,CAAkB;IAGrC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,2BAA2B,CAAc;IAGjD,OAAO,CAAC,UAAU,CAAa;IAE/B,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,OAAO,CAAC,iBAAiB,CAAuB;IAGhD,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAiB;IACpD,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,OAAO,CAAC,oBAAoB,CAAa;IAGzC,OAAO,CAAC,qBAAqB,CAAkB;IAC/C,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,mBAAmB,CAAiB;IAC5C,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,kBAAkB,CAAmB;IAC7C,OAAO,CAAC,kBAAkB,CAAmB;IAC7C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,aAAa,CAAuB;IAG5C,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,uBAAuB,CAAe;IAC9C,OAAO,CAAC,oBAAoB,CAA8C;gBAGxE,WAAW,GAAE,MAAM,CAAC,WAA4B,EAChD,MAAM,GAAE,mBAAwB;IAiBlC;;OAEG;IACH,oBAAoB,IAAI,IAAI;IAM5B;;OAEG;IACH,qBAAqB,IAAI,IAAI;IAM7B;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAM3B;;OAEG;IACH,oBAAoB,IAAI,IAAI;IAM5B;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;IAsDxE;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI;IA2B3D;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAe9B;;;OAGG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI1C;;OAEG;IACH,OAAO,IAAI,SAAS;IAIpB;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IASjD;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACH,QAAQ,IAAI,WAAW,EAAE;IAIzB;;OAEG;IACH,OAAO,IAAI,WAAW,GAAG,SAAS;IAMlC;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAiB9C;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAgB/C;;;OAGG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAgB7C;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE;QAClB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAC9B,GAAG,IAAI;IAyCR;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE;QACtB,mBAAmB,EAAE,OAAO,CAAC;QAC7B,mBAAmB,EAAE,OAAO,CAAC;QAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAClC,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,GAAG,IAAI;IA6BR;;OAEG;IACH,cAAc,IAAI,IAAI;IAOtB;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI;IAWnF;;;;;;OAMG;IACH,MAAM,IAAI,IAAI;IAoCd;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IA4I3B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAuDtB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAwGzB,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,aAAa;IAKrB;;;OAGG;IACH,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAQxE;;OAEG;IACH,WAAW,IAAI,IAAI;IAOnB;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC;;OAEG;IACH,YAAY,IAAI,IAAI;IAapB;;;OAGG;IACH,0BAA0B,IAAI,IAAI;IAqBlC;;OAEG;IACH,yBAAyB,IAAI,IAAI;IAejC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAI7B;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAuBpC;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAI1B;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAI3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;;OAGG;IACH,yBAAyB,CAAC,QAAQ,EAAE;QAClC,yBAAyB,EAAE,CAAC,CAAC,EAAE;YAAE,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;SAAE,KAAK,MAAM,IAAI,CAAC;KACrG,GAAG,IAAI;IAIR;;;OAGG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAyB1C;;;OAGG;IACH,oBAAoB,IAAI,IAAI;IAa5B;;;OAGG;IACH,mBAAmB,IAAI,IAAI;IAU3B;;OAEG;IACH,uBAAuB,IAAI,OAAO;IAIlC;;OAEG;IACH,qBAAqB,IAAI,MAAM,EAAE;IAIjC;;;OAGG;IACH,WAAW,IAAI,IAAI;IAWnB;;;OAGG;IACH,oBAAoB,IAAI,IAAI;IAI5B;;;OAGG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIhC;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,OAAO,IAAI,IAAI;IAgBf,OAAO,CAAC,aAAa;IAwCrB,OAAO,CAAC,aAAa;IA8BrB,OAAO,CAAC,gBAAgB;IAwExB,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,QAAQ;IAuBhB,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,YAAY;IA2BpB,OAAO,CAAC,cAAc;IAwBtB,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,MAAM;IAoCd,OAAO,CAAC,WAAW;IAkCnB,OAAO,CAAC,UAAU;IAkElB;;OAEG;IACH,OAAO,CAAC,eAAe;IA0BvB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAgBhB;;OAEG;IACH,OAAO,CAAC,UAAU;IAYlB;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAwE5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAI/B;;OAEG;IACH,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAQ3C;;OAEG;IACH,qBAAqB,IAAI,IAAI;IAU7B,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,WAAW;IA0BnB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,sBAAsB;IAuB9B,OAAO,CAAC,iBAAiB;IAQzB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI;IAe7E,WAAW,IAAI,aAAa;IAI5B,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAIxC,OAAO,CAAC,WAAW;IAOnB,cAAc,IAAI,IAAI;IAKtB,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,4BAA4B;IAQpC,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,KAAK;IAUb,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,WAAW;CAIpB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
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 editLabel = this.editMode === 'display-edits' ? 'edits:accept' : 'edits:ask';
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} ${editLabel}`, tone: editTone });
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:on' : 'verify:off';
720
- leftParts.push({ text: `${verifyHotkey} ${verifyLabel}`, tone: this.verificationEnabled ? 'success' : 'muted' });
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:on' : 'auto:off';
724
- leftParts.push({ text: `${continueHotkey} ${continueLabel}`, tone: this.autoContinueEnabled ? 'info' : 'muted' });
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 || 'alt+t');
728
- rightParts.push({ text: `${thinkingHotkey} think:${this.thinkingModeLabel}`, tone: 'info' });
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 && this.mode !== 'streaming') {
733
- leftParts.push({ text: `queued:${this.queue.length}`, tone: 'info' });
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} +${latest.lineCount}L ${this.formatHotkey('backspace')}drop`,
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
- ? 'compact imminent'
754
- : `ctx:${contextRemaining}%`;
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
- this.handleUp();
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
- this.handleDown();
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 startIdx = Math.max(0, this.scrollbackBuffer.length - this.scrollbackOffset - contentHeight);
1656
- const endIdx = Math.max(0, this.scrollbackBuffer.length - this.scrollbackOffset);
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
- // Render visible lines with subtle left border
1659
- for (let i = 0; i < Math.min(visibleLines.length, contentHeight); i++) {
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
- this.write(ESC.TO(i + 1, 1));
1662
- // Add subtle left border for scrollback mode
1663
- this.write(theme.ui.muted('▌ '));
1664
- // Truncate if needed
1665
- const maxLen = cols - 6;
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 enhanced scroll indicator with animation
1670
- if (this.scrollbackOffset > 0) {
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
  */