Skip to content

Refactor chatwidget settings surfaces into modules (phase 4)#22518

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

Refactor chatwidget settings surfaces into modules (phase 4)#22518
etraut-openai merged 1 commit into
mainfrom
etraut/chatwidget-refactor-phase-4

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, and #22433 completed phase 3 by extracting protocol, replay, streaming, and tool lifecycle handling.

This PR is phase 4. It keeps moving high-churn UI coordination out of the central widget by extracting settings, popups, and status surfaces without changing the visible behavior those flows already provide. This is once again a mechanical movement of existing functions. No functional changes.

What Changed

  • Added focused modules for runtime settings/model coordination, model/reasoning/collaboration popups, settings/personality/theme/audio/experimental popups, permission prompts, status setup/output controls, and Windows sandbox prompt flows.
  • Moved the remaining rate-limit nudge/status helpers and connectors popup/loading/update helpers into their existing focused modules.
  • Preserved the existing picker flows, approval behavior, status/title setup previews, rate-limit notices, and connectors/app list behavior while shrinking chatwidget.rs back toward orchestration.
  • Left codex-rs/tui/src/chatwidget.rs as the registration and composition surface for these extracted behaviors.

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. This PR.
  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.

Verification

  • cargo check -p codex-tui
  • cargo test -p codex-tui chatwidget::tests::permissions
  • cargo test -p codex-tui chatwidget::tests::status_surface_previews
  • cargo test -p codex-tui chatwidget::tests::popups_and_settings
  • 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 a reproducible stack overflow.

Copy link
Copy Markdown
Contributor

@canvrno-oai canvrno-oai left a comment

Choose a reason for hiding this comment

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

Same review process as the other mechanical PRs that are a part of this series- spot checked a few functions on chatwidget.rs to confirm they were moved elsewhere, asked Codex to review, and compiled locally.

@etraut-openai etraut-openai merged commit 1ae811d into main May 13, 2026
38 of 39 checks passed
@etraut-openai etraut-openai deleted the etraut/chatwidget-refactor-phase-4 branch May 13, 2026 18:26
@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