Skip to content

Codex 0.159.1 hybrid sessions lose wheel/touch scrolling, leaving mobile without transcript navigation #508

Description

@DodgyBadger

Summary

Codex sessions no longer let me scroll back to messages that have moved above the visible pane with a mouse wheel, trackpad, or touch gesture. The transcript is still present: PageUp/PageDown navigate it on desktop, and the Response Viewer ("View last response") still shows the latest response.

This appears to be a regression caused by newer Codex hybrid rendering no longer matching Codeman's inline-viewport assumption. It is particularly disruptive on mobile, where PageUp/PageDown are unavailable.

Environment

  • Codeman: 1.33.2
  • Installation: Docker Compose
  • Codex CLI: 0.159.1
  • Codex render mode: hybrid

Reproduction

  1. Start a Codex session.
  2. Generate enough output to exceed one terminal screen.
  3. Scroll upward with a wheel, trackpad, or touch gesture.

Expected

Earlier Codex output becomes visible.

Actual

Scrolling cannot reach output above the visible pane.

  • Desktop: focusing the terminal and pressing PageUp/PageDown still navigates the internal transcript.
  • Mobile: there is no equivalent navigation key, so "View last response" is the only remaining way to inspect content that moved above the pane.

Diagnostics

Live Codex panes reported:

alternate_on=1
history_size=0
mouse_any_flag=0

For one active session:

  • GET /api/sessions/:id/terminal?full=1
    • source: mux-full-history
    • captureRows: 36
    • terminalBuffer.length: 8,835
  • GET /api/sessions/:id/terminal
    • terminalBuffer.length: approximately 211 KB

The first non-Shell terminal load requests full=1, so this Codex pane receives only the current tmux frame even though the server byte buffer is much larger.

Codeman currently routes Codex wheel gestures to local xterm scrollback. That behavior was based on Codex CLI 0.147.0, where Codex used an inline viewport with alternate_on=0 and growing tmux history. Codex 0.159.1 hybrid mode now uses alternate_on=1 with history_size=0, leaving nothing local to scroll.

The existing hollow-buffer PageUp/PageDown fallback only recognizes Claude sessions.

Local verification

I tested an experimental frontend-only patch that lets Codex use the existing hollow-buffer PageUp/PageDown fallback when xterm reports baseY === 0:

_localScrollbackIsHollow() {
  const mode = this.sessions?.get(this.activeSessionId)?.mode || 'claude';
  if (mode !== 'claude' && mode !== 'codex') return false;

  const buf = this.terminal?.buffer?.active;
  if (!buf || buf.type === 'alternate') return false;

  return (buf.baseY || 0) === 0;
}

Test results:

  • Wheel/trackpad scrolling reached the missing Codex transcript.
  • PageUp/PageDown continued to work directly.
  • Wheel scrolling was somewhat janky because smooth travel was translated into whole-page keypresses.
  • The same fallback is wired into the touch path, giving mobile a route to Codex's internal transcript.
  • Codex sessions with real local scrollback remained on the existing local route.
  • Focused terminal tests: 74/74 passed.
  • Frontend syntax check passed.

This confirms that the transcript is intact and that the regression is in Codeman's wheel/touch scroll-owner selection. The experimental fallback demonstrates the likely direction, although a final fix may need smoother wheel-to-page mapping or Codex-version/render-mode detection.

Workarounds

  • Desktop: focus the terminal and use PageUp/PageDown.
  • Mobile: use "View last response." There is currently no equivalent transcript-navigation gesture.

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions