Skip to content

Refactor chatwidget orchestration into modules (phase 5)#22537

Merged
etraut-openai merged 1 commit into
mainfrom
etraut/chatwidget-refactor-phase-5
May 13, 2026
Merged

Refactor chatwidget orchestration into modules (phase 5)#22537
etraut-openai merged 1 commit into
mainfrom
etraut/chatwidget-refactor-phase-5

Conversation

@etraut-openai
Copy link
Copy Markdown
Collaborator

Why

chatwidget.rs is still carrying too many unrelated responsibilities in one file. #22269 started a five-phase cleanup to move coherent behavior domains into focused modules while keeping chatwidget.rs as the composition layer. #22407 completed phase 2 by extracting input and submission flow, #22433 completed phase 3 by extracting protocol, replay, streaming, and tool lifecycle handling, and #22518 completed phase 4 by extracting settings, popups, and status surfaces.

This PR is phase 5. It cleans up the remaining constructor and orchestration code now that the larger behavior domains have moved out, leaving chatwidget.rs much closer to the composition layer the cleanup was aiming for. This is once again a mechanical movement of existing functions. No functional changes.

What Changed

  • Added focused modules for widget construction and initial wiring, session configuration flow, key/composer interaction routing, review popup orchestration, desktop notification coalescing, and render composition.
  • Moved the remaining constructor, session setup, interaction, notification, review picker, and rendering helpers out of codex-rs/tui/src/chatwidget.rs.
  • Preserved the existing startup/session behavior, keyboard handling, review picker flow, notification priority behavior, and render composition while shrinking the central widget module substantially.
  • Left codex-rs/tui/src/chatwidget.rs as the registration and composition surface for the extracted behavior modules.

Cleanup Phases

The five-phase cleanup plan from #22269 is:

  1. Phase 1: mechanical helper and state moves. Completed in Refactor chatwidget state into modules #22269.
  2. Phase 2: extract input and submission flow, including queued user messages, shell prompt submission, pending steer restoration, and thread input snapshot/restore behavior. Completed in Refactor chatwidget input flow into modules #22407.
  3. Phase 3: extract protocol, replay, streaming, and tool lifecycle handling, while preserving active-cell grouping, transcript invalidation, interrupt deferral, and final-message separator behavior. Completed in Refactor chatwidget protocol flows into modules (phase 3) #22433.
  4. Phase 4: extract settings, popups, and status surfaces, including model/reasoning/collaboration/personality popups, permission prompts, rate-limit UI, and connectors helpers. Completed in Refactor chatwidget settings surfaces into modules (phase 4) #22518.
  5. Phase 5: clean up the remaining constructor and orchestration code once the larger behavior domains have moved out, leaving chatwidget.rs as the composition layer. This PR.

Verification

  • cargo check -p codex-tui
  • cargo test -p codex-tui chatwidget::tests::popups_and_settings
  • cargo test -p codex-tui chatwidget::tests::plan_mode
  • cargo test -p codex-tui chatwidget::tests::review_mode
  • cargo test -p codex-tui chatwidget::tests::status_and_layout

cargo test -p codex-tui also compiles and begins running, but aborts in the unchanged app-side test app::tests::discard_side_thread_keeps_local_state_when_server_close_fails with the same reproducible stack overflow noted in phase 4.

@etraut-openai etraut-openai marked this pull request as ready for review May 13, 2026 18:51
@etraut-openai etraut-openai merged commit 3c3e18c into main May 13, 2026
27 checks passed
@etraut-openai etraut-openai deleted the etraut/chatwidget-refactor-phase-5 branch May 13, 2026 22:40
@github-actions github-actions Bot locked and limited conversation to collaborators May 13, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants