Integrate the interactive transcript into the alternate-screen TUI (#46733)

## What changed

- Render transcript history and live output above the composer when `features.transcript_v2` is enabled and alternate-screen rendering is available. Handle scrolling, selection, copying, links, and older-history pagination in the main view.
- Add a clickable return-to-latest control with new-activity hints and temporary clipboard status. Let plain Enter return to latest when the composer is empty.
- Reflow retained transcript content during drawing and preserve the launch-selected screen mode across configuration reloads and session transitions, including `--no-alt-screen` restrictions.
- Enter the alternate screen with its first synchronized frame, and box CLI startup futures to reduce stack usage during session transitions.

## Testing

Add regression coverage for transcript layout, input routing, follow controls, clipboard status, and screen-mode persistence. Add a PTY test for the first alternate-screen frame and clean exit, and extend session-transition coverage through the CLI dispatcher.

GitOrigin-RevId: 1daf077826c7744b0f57399d10d159923dc87a97
This commit is contained in:
Eric Traut
2026-09-20 00:06:00 +00:00
committed by copyberry
parent d7d9f2b9b5
commit f1feda2299
61 changed files with 2791 additions and 246 deletions
+2 -1
View File
@@ -1172,7 +1172,8 @@ fn main() -> anyhow::Result<()> {
codex_build_info::initialize!();
let remote_control_disabled = codex_app_server::take_remote_control_disabled_env();
arg0_dispatch_or_else(move |arg0_paths: Arg0DispatchPaths| async move {
cli_main(arg0_paths, remote_control_disabled).await?;
// Keep the CLI dispatcher off the runtime's stack while the TUI rebuilds a thread.
Box::pin(cli_main(arg0_paths, remote_control_disabled)).await?;
Ok(())
})
}