Skip to content

[2 of 2] Start fresh TUI thread in background#23176

Merged
etraut-openai merged 5 commits into
mainfrom
etraut/tui-startup-background-thread-start
May 20, 2026
Merged

[2 of 2] Start fresh TUI thread in background#23176
etraut-openai merged 5 commits into
mainfrom
etraut/tui-startup-background-thread-start

Conversation

@etraut-openai
Copy link
Copy Markdown
Collaborator

@etraut-openai etraut-openai commented May 17, 2026

Why

After the terminal-probe work in #23175, fresh-session startup still waits for thread/start before the chat input can become usable. The chat widget already has the machinery to hold early submissions until a session is configured, so fresh thread/start does not need to stay on the input-ready hot path.

Refs #16335.

What

This PR starts fresh app-server threads in a background task, reports completion through a startup app event, and attaches the primary session once thread/start returns. Resume and fork startup paths remain synchronous.

Benchmark

In the local pty startup benchmark, this PR's pre-optimization base branch, #23175, measured about 152ms median from launch to accepted chat input. The stacked result measured about 66ms median, for an approximate additional savings of 85-95ms. For broader context, the original main baseline before either startup optimization was about 250.5ms median. We also measured Codex 0.117.0 on the same machine at about 64.6ms median, so the stacked branch is back in the old-startup-time range.

Stack

  1. #23175: [1 of 2] Optimize TUI startup terminal probes — base PR
  2. #23176: [2 of 2] Start fresh TUI thread in background — this PR

Verification

  • cargo test -p codex-tui
@etraut-openai etraut-openai force-pushed the etraut/tui-startup-probes branch from 21eb3e6 to c5f1e4d Compare May 17, 2026 18:09
@etraut-openai etraut-openai force-pushed the etraut/tui-startup-background-thread-start branch 2 times, most recently from bbf5260 to afadf1c Compare May 17, 2026 18:17
@etraut-openai etraut-openai force-pushed the etraut/tui-startup-probes branch from c5f1e4d to bf13a59 Compare May 17, 2026 18:38
@etraut-openai etraut-openai force-pushed the etraut/tui-startup-background-thread-start branch from afadf1c to e93336b Compare May 17, 2026 18:39
etraut-openai added a commit that referenced this pull request May 18, 2026
## Why

Codex TUI startup still feels slower than 0.117.0 after the app-server
move in 0.118.0. A visible chunk of launch-to-input latency comes from
serial terminal startup probes: cursor position, keyboard enhancement
support, and default foreground/background color queries can each wait
on terminal responses before the first usable frame.

Refs #16335.

## What

This PR batches the terminal startup probes into one bounded probe. It
also reuses the probed cursor position and default colors during TUI
setup, fast-paths the primary-device-attributes fallback as keyboard
enhancement unsupported, and keeps lightweight startup timing logs for
future tuning.

The startup telemetry is intentionally left in production: it records
phase timings for terminal probes and initial-frame scheduling so future
startup regressions can be diagnosed from normal logs rather than
re-adding one-off debug instrumentation.

## Benchmark

In the local pty startup benchmark, the pre-optimization `main` baseline
was about 250.5ms median from launch to accepted chat input. This
probe-only branch measured about 152ms median, for an approximate
savings of 95-100ms.

## Stack

1. [#23175: [1 of 2] Optimize TUI startup terminal
probes](#23175) — this PR
2. [#23176: [2 of 2] Start fresh TUI thread in
background](#23176) — layered on
this PR

## Verification

- `cargo test -p codex-tui`
Base automatically changed from etraut/tui-startup-probes to main May 18, 2026 16:04
@etraut-openai etraut-openai force-pushed the etraut/tui-startup-background-thread-start branch from e93336b to e7300a2 Compare May 18, 2026 16:09
Copy link
Copy Markdown
Contributor

@fcoury-oai fcoury-oai left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

During smoke test I quickly sent a few lines but instead of them being submitted as queued, they were shown as separate lines:

Image

I would expect them to be queued individually. Is that the behavior we wanted?

@etraut-openai etraut-openai force-pushed the etraut/tui-startup-background-thread-start branch from e7300a2 to ac0cdf8 Compare May 20, 2026 04:03
Copy link
Copy Markdown
Contributor

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ac0cdf81a2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread codex-rs/tui/src/app/session_lifecycle.rs
Comment thread codex-rs/tui/src/app/session_lifecycle.rs
Comment thread codex-rs/tui/src/app/session_lifecycle.rs Outdated
@etraut-openai
Copy link
Copy Markdown
Collaborator Author

Yes, good catch. The intended behavior is for startup-pending submissions to queue as individual messages rather than remain as separate draft lines. When I asked codex to do another round of code reviews, it reported that problem as well. I guess it just missed it the first few times I asked it for a review. The latest branch should fix the behavior you saw during your smoke test. I also fixed a couple of smaller holes that codex identified along the way.

Copy link
Copy Markdown
Contributor

@fcoury-oai fcoury-oai left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It now correctly enqueue items as expected. Looks good.

@etraut-openai etraut-openai merged commit c0f7e1b into main May 20, 2026
33 of 35 checks passed
@etraut-openai etraut-openai deleted the etraut/tui-startup-background-thread-start branch May 20, 2026 17:00
@github-actions github-actions Bot locked and limited conversation to collaborators May 20, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

2 participants