From 547c9a1aad9fecf24d49fd835f11d90349828c6d Mon Sep 17 00:00:00 2001 From: Eric Traut Date: Fri, 18 Sep 2026 04:17:20 +0000 Subject: [PATCH] Use catalog model display names throughout the TUI (#46503) ## Why Model pickers and session details show raw model IDs even when the catalog provides a display name. ## What changed - Use catalog display names in model and reasoning pickers, session headers, status displays, and terminal titles, retaining fallback labels for models absent from the catalog. - Keep model IDs for selection and persistence, and preserve picker highlights by ID when display names change or are shared by multiple models. - Remove the legacy-model instruction from the full model picker. ## Testing Add regression tests and snapshots for custom display names, startup and resumed session headers, fallback labels, terminal titles, and picker refreshes. Verify that selecting a display name still persists the original model ID. GitOrigin-RevId: 101fe82b20f7a8a90ceeff7999bd07ad42ca46db --- codex-rs/cli/tests/daemon_startup.rs | 4 +- codex-rs/tui/src/app/history_ui.rs | 2 +- codex-rs/tui/src/app/tests.rs | 2 + .../tests/background_task_defaults_tests.rs | 2 +- .../app/tests/session_lifecycle_requests.rs | 1 + ...d_replay__misalignment_replayed_input.snap | 2 +- ...ranscript_close_restores_inline_draft.snap | 2 +- .../src/app/tests/startup_defaults_tests.rs | 2 +- .../src/app/tests/startup_warnings_tests.rs | 1 + .../tui/src/chatwidget/luna_reserve_model.rs | 31 +++--- .../tui/src/chatwidget/model_popup_state.rs | 14 ++- codex-rs/tui/src/chatwidget/model_popups.rs | 59 +++++----- codex-rs/tui/src/chatwidget/session_flow.rs | 1 + codex-rs/tui/src/chatwidget/settings.rs | 4 +- ...vanced_only_reasoning_selection_popup.snap | 2 +- ..._review_denied_renders_denied_request.snap | 2 +- ...w_timed_out_renders_timed_out_request.snap | 2 +- ...artup_failure_renders_warning_history.snap | 2 +- ...tests__bedrock_mantle_astra_reasoning.snap | 2 +- ...twidget__tests__bedrock_mantle_models.snap | 14 +-- ...ests__bedrock_runtime_astra_reasoning.snap | 2 +- ...widget__tests__bedrock_runtime_models.snap | 17 ++- ...__catalog_model_session_header_resume.snap | 8 ++ ..._catalog_model_session_header_startup.snap | 16 +++ ...og_model_session_header_unknown_model.snap | 8 ++ ...i__chatwidget__tests__chatwidget_tall.snap | 2 +- ...compact_queues_user_messages_snapshot.snap | 2 +- ...chatwidget__tests__compaction_running.snap | 2 +- ...get__tests__compaction_running_narrow.snap | 2 +- ...h_output_flushes_immediately_snapshot.snap | 4 +- ...hook_output_survives_restart_snapshot.snap | 2 +- ...eted_turn_clears_visible_running_hook.snap | 4 +- ...__tests__connector_scope_invalidation.snap | 2 +- ..._custom_model_display_name_all_models.snap | 9 ++ ...ustom_model_display_name_quick_picker.snap | 12 ++ ...__custom_model_display_name_reasoning.snap | 10 ++ ...custom_model_display_name_status_line.snap | 9 ++ ...efault_footer_generating_thread_title.snap | 2 +- ...sts__esc_interrupt_goal_paused_footer.snap | 2 +- ..._interrupt_goal_paused_footer@windows.snap | 2 +- ..._approved_exec_is_hidden_from_history.snap | 2 +- ...issions_clears_status_without_history.snap | 2 +- ...ec_renders_warning_and_denied_request.snap | 2 +- ...goal_continuation_drops_stale_reviews.snap | 2 +- ...allel_reviews_render_aggregate_status.snap | 2 +- ...renders_warning_and_timed_out_request.snap | 2 +- ...s__guardian_write_stdin_review_status.snap | 2 +- ...ts__hidden_shell_paste_queued_preview.snap | 2 +- ..._hook_runs_while_exec_active_snapshot.snap | 6 +- ...eration_begin_restores_working_status.snap | 2 +- ..._tests__image_preparation_in_progress.snap | 2 +- ...sts__image_preparation_restored_input.snap | 2 +- ...pted_turn_clears_visible_running_hook.snap | 4 +- ...ng_hook_below_background_activity_row.snap | 4 +- ...get__tests__manual_compaction_pending.snap | 2 +- ...s__manual_thread_name_status_surfaces.snap | 2 +- ...et__tests__mcp_startup_header_booting.snap | 2 +- ...g_hooks_share_background_activity_row.snap | 4 +- ...s__model_picker_filters_hidden_models.snap | 1 - ...el_picker_refresh_preserves_highlight.snap | 8 +- ...s__model_picker_refreshes_auto_models.snap | 4 +- ...ests__model_reasoning_selection_popup.snap | 2 +- ...twidget__tests__model_selection_popup.snap | 11 +- ...__overlapping_hook_live_cell_snapshot.snap | 8 +- ..._tests__preamble_keeps_working_status.snap | 2 +- ...a_restores_recreated_status_indicator.snap | 2 +- ...get__tests__replayed_in_progress_turn.snap | 2 +- ..._review_queues_user_messages_snapshot.snap | 2 +- ...g_hooks_share_background_activity_row.snap | 4 +- ...get__tests__session_end_hook_activity.snap | 6 +- ...ion_end_hook_activity_without_message.snap | 6 +- ...e_context_label_preserves_status_line.snap | 2 +- ..._side_context_label_shows_hidden_side.snap | 2 +- ...idget__tests__slash_copy_whole_status.snap | 2 +- ...rked_side_question_while_task_running.snap | 2 +- ...tus_line_estimated_thread_cost_footer.snap | 2 +- ..._line_goal_active_token_budget_footer.snap | 2 +- ...tus_line_goal_complete_elapsed_footer.snap | 2 +- ...atwidget__tests__status_widget_active.snap | 2 +- ...ts__terminal_title_model_display_name.snap | 5 + ...ed_exec_begin_restores_working_status.snap | 2 +- ...renders_command_in_single_details_row.snap | 2 +- ...sts__voice_live_transcript_and_stream.snap | 2 +- ...ts__windows_sandbox_setup_fresh_clock.snap | 2 +- ...dget__tests__worktrees_command_remote.snap | 2 +- codex-rs/tui/src/chatwidget/tests.rs | 2 + .../tui/src/chatwidget/tests/app_server.rs | 33 ++++++ .../tests/model_display_name_tests.rs | 104 ++++++++++++++++++ .../chatwidget/tests/popups_and_settings.rs | 4 + .../src/chatwidget/tests/status_and_layout.rs | 5 +- .../chatwidget/tests/status_command_tests.rs | 2 +- codex-rs/tui/src/history_cell/session.rs | 6 +- codex-rs/tui/src/history_cell/tests.rs | 4 + codex-rs/tui/src/model_catalog.rs | 8 ++ ...ver_session__tests__resumed_plan_mode.snap | 2 +- 95 files changed, 412 insertions(+), 161 deletions(-) create mode 100644 codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__catalog_model_session_header_resume.snap create mode 100644 codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__catalog_model_session_header_startup.snap create mode 100644 codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__catalog_model_session_header_unknown_model.snap create mode 100644 codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__custom_model_display_name_all_models.snap create mode 100644 codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__custom_model_display_name_quick_picker.snap create mode 100644 codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__custom_model_display_name_reasoning.snap create mode 100644 codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__custom_model_display_name_status_line.snap create mode 100644 codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__terminal_title_model_display_name.snap create mode 100644 codex-rs/tui/src/chatwidget/tests/model_display_name_tests.rs diff --git a/codex-rs/cli/tests/daemon_startup.rs b/codex-rs/cli/tests/daemon_startup.rs index 309a665c12..d61f36fb22 100644 --- a/codex-rs/cli/tests/daemon_startup.rs +++ b/codex-rs/cli/tests/daemon_startup.rs @@ -116,14 +116,14 @@ async fn daemon_startup(command: &str) -> Result<()> { }; let expected = if command == "start" { // The draft header is visible before the session's command composer is ready. - steps.push_back(("gpt-5.6-terra", b"/status\r")); + steps.push_back(("GPT-5.6-Terra", b"/status\r")); "app-server-control.sock" } else if bedrock_onboarding { "UseAmazonBedrock" } else { args.extend([command.into(), "--strict-config".into()]); steps.push_back(("Nosessionsyet", b"\x1b")); - steps.push_back(("gpt-5.6-terra", b"\x14")); + steps.push_back(("GPT-5.6-Terra", b"\x14")); "Runningwithoutthesharedbackgroundserver:--strict-config" }; let spawned = codex_utils_pty::spawn_pty_process( diff --git a/codex-rs/tui/src/app/history_ui.rs b/codex-rs/tui/src/app/history_ui.rs index d79f83ff71..9096425ae8 100644 --- a/codex-rs/tui/src/app/history_ui.rs +++ b/codex-rs/tui/src/app/history_ui.rs @@ -247,7 +247,7 @@ impl App { version: &'static str, ) -> Vec> { history_cell::SessionHeaderHistoryCell::new( - self.chat_widget.current_model().to_string(), + self.chat_widget.model_display_name().to_string(), self.chat_widget.current_reasoning_effort(), self.chat_widget.should_show_fast_status( self.chat_widget.current_model(), diff --git a/codex-rs/tui/src/app/tests.rs b/codex-rs/tui/src/app/tests.rs index 1a8ac65ae6..9b8b3892d4 100644 --- a/codex-rs/tui/src/app/tests.rs +++ b/codex-rs/tui/src/app/tests.rs @@ -5780,6 +5780,7 @@ async fn render_clear_ui_header_after_long_transcript_for_snapshot() -> String { app.chat_widget.config_ref(), &app.local_settings, app.chat_widget.current_model(), + &session.model, &session, is_first, /*tooltip_override*/ None, @@ -7346,6 +7347,7 @@ async fn backtrack_selection_preserves_selected_prompt_and_requests_branch() { app.chat_widget.config_ref(), &app.local_settings, app.chat_widget.current_model(), + &session.model, &session, is_first, /*tooltip_override*/ None, diff --git a/codex-rs/tui/src/app/tests/background_task_defaults_tests.rs b/codex-rs/tui/src/app/tests/background_task_defaults_tests.rs index 4b22fe8da5..bcff6753f0 100644 --- a/codex-rs/tui/src/app/tests/background_task_defaults_tests.rs +++ b/codex-rs/tui/src/app/tests/background_task_defaults_tests.rs @@ -93,7 +93,7 @@ async fn review_regression_agents_overview_creation_is_fresh_but_returning_is_no let before_footer = |output: &str| { output .lines() - .take_while(|line| !line.contains("gpt-6-astra")) + .take_while(|line| !line.contains("GPT-6-Astra")) .collect::>() .join("\n") }; diff --git a/codex-rs/tui/src/app/tests/session_lifecycle_requests.rs b/codex-rs/tui/src/app/tests/session_lifecycle_requests.rs index 53fcfb4de5..f0a3502056 100644 --- a/codex-rs/tui/src/app/tests/session_lifecycle_requests.rs +++ b/codex-rs/tui/src/app/tests/session_lifecycle_requests.rs @@ -2625,6 +2625,7 @@ async fn underfilled_scrollback_fetches_older_pages_without_opening_the_transcri &app.config, &app.local_settings, started.session.model.as_str(), + started.session.model.as_str(), &started.session, /*is_first_event*/ false, Some("This is a test announcement".to_string()), diff --git a/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__buffered_replay__misalignment_replayed_input.snap b/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__buffered_replay__misalignment_replayed_input.snap index 2b4062523e..02cd67bd44 100644 --- a/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__buffered_replay__misalignment_replayed_input.snap +++ b/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__buffered_replay__misalignment_replayed_input.snap @@ -8,4 +8,4 @@ expression: "normalize_snapshot_paths(render_bottom_popup(&app.chat_widget, 80)) › keep draft - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__transcript_composer__transcript_close_restores_inline_draft.snap b/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__transcript_composer__transcript_close_restores_inline_draft.snap index 9888ce81a5..3962ea74f1 100644 --- a/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__transcript_composer__transcript_close_restores_inline_draft.snap +++ b/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__transcript_composer__transcript_close_restores_inline_draft.snap @@ -6,4 +6,4 @@ expression: "buffer_text(crate::custom_terminal::test_support::last_rendered_buf › EDGE-DRAFT-MUST-SURVIVE - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/app/tests/startup_defaults_tests.rs b/codex-rs/tui/src/app/tests/startup_defaults_tests.rs index 811db659dc..4c789caf5e 100644 --- a/codex-rs/tui/src/app/tests/startup_defaults_tests.rs +++ b/codex-rs/tui/src/app/tests/startup_defaults_tests.rs @@ -371,7 +371,7 @@ async fn fresh_startup_reads_destination_and_cleared_model_uses_catalog() -> Res insta::assert_snapshot!(rendered, @r" › Ask Codex to do anything - gpt-6-astra high · + GPT-6-Astra high · "); } let expected_cwd = if override_cwd { diff --git a/codex-rs/tui/src/app/tests/startup_warnings_tests.rs b/codex-rs/tui/src/app/tests/startup_warnings_tests.rs index e079c86ffb..9f76d19342 100644 --- a/codex-rs/tui/src/app/tests/startup_warnings_tests.rs +++ b/codex-rs/tui/src/app/tests/startup_warnings_tests.rs @@ -23,6 +23,7 @@ fn insert_splash(app: &mut App, tui: &mut tui::Tui) { &app.config, &app.local_settings, "gpt-test", + &session.model, &session, /*is_first_event*/ false, /*tooltip_override*/ None, diff --git a/codex-rs/tui/src/chatwidget/luna_reserve_model.rs b/codex-rs/tui/src/chatwidget/luna_reserve_model.rs index 8634932b72..3fe8f46625 100644 --- a/codex-rs/tui/src/chatwidget/luna_reserve_model.rs +++ b/codex-rs/tui/src/chatwidget/luna_reserve_model.rs @@ -43,20 +43,23 @@ impl ChatWidget { "Select Model", "Other models return when ordinary usage is available again.", ); - self.show_model_selection_view(SelectionViewParams { - view_id: Some(view_id), - header, - footer_hint: Some(self.bottom_pane.standard_popup_hint_line()), - items: vec![SelectionItem { - name, - description, - is_current: true, - actions, - dismiss_on_select: single_supported_effort, - dismiss_parent_on_child_accept: !single_supported_effort, + self.show_model_selection_view( + vec![LUNA_RESERVE_MODEL.to_string()], + SelectionViewParams { + view_id: Some(view_id), + header, + footer_hint: Some(self.bottom_pane.standard_popup_hint_line()), + items: vec![SelectionItem { + name, + description, + is_current: true, + actions, + dismiss_on_select: single_supported_effort, + dismiss_parent_on_child_accept: !single_supported_effort, + ..Default::default() + }], ..Default::default() - }], - ..Default::default() - }); + }, + ); } } diff --git a/codex-rs/tui/src/chatwidget/model_popup_state.rs b/codex-rs/tui/src/chatwidget/model_popup_state.rs index 7e74217680..c8601b241a 100644 --- a/codex-rs/tui/src/chatwidget/model_popup_state.rs +++ b/codex-rs/tui/src/chatwidget/model_popup_state.rs @@ -1,4 +1,5 @@ //! Accept current account-scoped model replies and refresh present pickers without reopening them. +//! Preserve highlighted models by wire slug, independent of their display names. use super::model_popups::ALL_MODELS_SELECTION_VIEW_ID; use super::model_popups::MODEL_SELECTION_VIEW_ID; @@ -54,16 +55,19 @@ impl ChatWidget { } } - pub(super) fn show_model_selection_view(&mut self, mut params: SelectionViewParams) { + pub(super) fn show_model_selection_view( + &mut self, + model_ids: Vec, + mut params: SelectionViewParams, + ) { let selected_index = params .view_id .and_then(|view_id| self.bottom_pane.selected_index_for_present_view(view_id)); let selected_model = selected_index.and_then(|index| self.model_popup_model_ids.get(index)); - params.initial_selected_idx = params - .items + params.initial_selected_idx = model_ids .iter() - .position(|item| Some(&item.name) == selected_model); - self.model_popup_model_ids = params.items.iter().map(|item| item.name.clone()).collect(); + .position(|model| Some(model) == selected_model); + self.model_popup_model_ids = model_ids; if let Some(view_id) = params.view_id.filter(|_| selected_index.is_some()) { self.bottom_pane .replace_selection_view_if_present(view_id, params); diff --git a/codex-rs/tui/src/chatwidget/model_popups.rs b/codex-rs/tui/src/chatwidget/model_popups.rs index 0f9ca10ec4..06fe99c841 100644 --- a/codex-rs/tui/src/chatwidget/model_popups.rs +++ b/codex-rs/tui/src/chatwidget/model_popups.rs @@ -44,7 +44,9 @@ impl ChatWidget { let subtitle = subtitle.to_string(); let mut header = ColumnRenderable::new(); header.push(Line::from(title.bold())); - header.push(Line::from(subtitle.dim())); + if !subtitle.is_empty() { + header.push(Line::from(subtitle.dim())); + } if let Some(warning) = self.model_menu_warning_line() { header.push(warning); } @@ -92,7 +94,7 @@ impl ChatWidget { let current_label = presets .iter() .find(|preset| preset.model.as_str() == current_model) - .map(|preset| preset.model.to_string()) + .map(|preset| preset.display_name.clone()) .unwrap_or_else(|| self.model_display_name().to_string()); let (mut auto_presets, other_presets): (Vec, Vec) = presets @@ -105,6 +107,10 @@ impl ChatWidget { } auto_presets.sort_by_key(|preset| Self::auto_model_order(&preset.model)); + let mut model_ids: Vec = auto_presets + .iter() + .map(|preset| preset.model.clone()) + .collect(); let mut items: Vec = auto_presets .into_iter() .map(|preset| { @@ -137,7 +143,7 @@ impl ChatWidget { ) }; SelectionItem { - name: model.clone(), + name: preset.display_name.clone(), description, is_current: model.as_str() == current_model, is_default: preset.is_default, @@ -158,6 +164,7 @@ impl ChatWidget { .collect(); if !other_presets.is_empty() { + model_ids.push("All models".to_string()); let actions: Vec = vec![Box::new(|tx| { tx.send(AppEvent::OpenAllModelsPopup); })]; @@ -181,13 +188,16 @@ impl ChatWidget { "Select Model", "Pick a quick auto mode or browse all models.", ); - self.show_model_selection_view(SelectionViewParams { - view_id: Some(MODEL_SELECTION_VIEW_ID), - footer_hint: Some(standard_popup_hint_line()), - items, - header, - ..Default::default() - }); + self.show_model_selection_view( + model_ids, + SelectionViewParams { + view_id: Some(MODEL_SELECTION_VIEW_ID), + footer_hint: Some(standard_popup_hint_line()), + items, + header, + ..Default::default() + }, + ); } pub(super) fn is_auto_model(model: &str) -> bool { @@ -236,6 +246,7 @@ impl ChatWidget { } let mut items: Vec = Vec::new(); + let model_ids = presets.iter().map(|preset| preset.model.clone()).collect(); for preset in presets.into_iter() { let description = (!preset.description.is_empty()).then_some(preset.description.to_string()); @@ -255,7 +266,7 @@ impl ChatWidget { }); })]; items.push(SelectionItem { - name: preset.model.clone(), + name: preset.display_name.clone(), description, is_current, is_default: preset.is_default, @@ -269,17 +280,17 @@ impl ChatWidget { }); } - let header = self.model_menu_header( - "Select Model and Effort", - "Access legacy models by running codex -m or in your config.toml", + let header = self.model_menu_header("Select Model and Effort", ""); + self.show_model_selection_view( + model_ids, + SelectionViewParams { + view_id: Some(view_id), + footer_hint: Some(self.bottom_pane.standard_popup_hint_line()), + items, + header, + ..Default::default() + }, ); - self.show_model_selection_view(SelectionViewParams { - view_id: Some(view_id), - footer_hint: Some(self.bottom_pane.standard_popup_hint_line()), - items, - header, - ..Default::default() - }); } fn model_selection_actions( @@ -530,11 +541,7 @@ impl ChatWidget { .then(|| default_effort.clone()); let model_slug = preset.model.to_string(); - let model_label = if model_slug == LUNA_RESERVE_MODEL { - preset.display_name.clone() - } else { - model_slug.clone() - }; + let model_label = preset.display_name.clone(); let is_current_model = self.current_model() == preset.model.as_str(); let highlight_choice = if is_current_model { if in_plan_mode { diff --git a/codex-rs/tui/src/chatwidget/session_flow.rs b/codex-rs/tui/src/chatwidget/session_flow.rs index d930015e4d..b788313049 100644 --- a/codex-rs/tui/src/chatwidget/session_flow.rs +++ b/codex-rs/tui/src/chatwidget/session_flow.rs @@ -206,6 +206,7 @@ impl ChatWidget { &self.config, &self.local_settings, &model_for_header, + self.model_catalog.display_name(&session.model), &session, self.show_welcome_banner, startup_tooltip_override, diff --git a/codex-rs/tui/src/chatwidget/settings.rs b/codex-rs/tui/src/chatwidget/settings.rs index 1e20308aba..24d4713b0f 100644 --- a/codex-rs/tui/src/chatwidget/settings.rs +++ b/codex-rs/tui/src/chatwidget/settings.rs @@ -543,12 +543,12 @@ impl ChatWidget { self.refresh_model_dependent_surfaces(); } - pub(super) fn model_display_name(&self) -> &str { + pub(crate) fn model_display_name(&self) -> &str { let model = self.current_model(); if model.is_empty() { DEFAULT_MODEL_DISPLAY_NAME } else { - crate::model_catalog::model_display_name(model) + self.model_catalog.display_name(model) } } diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__advanced_only_reasoning_selection_popup.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__advanced_only_reasoning_selection_popup.snap index c6acdd4d13..73953ef457 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__advanced_only_reasoning_selection_popup.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__advanced_only_reasoning_selection_popup.snap @@ -2,7 +2,7 @@ source: tui/src/chatwidget/tests/popups_and_settings.rs expression: popup --- - Select Reasoning Level for gpt-5.5 + Select Reasoning Level for GPT-5.5 › 1. More reasoning… Ultra consumes usage limits faster diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__app_server_guardian_review_denied_renders_denied_request.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__app_server_guardian_review_denied_renders_denied_request.snap index 6bbd8a657c..832d39d9d7 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__app_server_guardian_review_denied_renders_denied_request.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__app_server_guardian_review_denied_renders_denied_request.snap @@ -17,4 +17,4 @@ expression: normalize_snapshot_paths(term.backend().vt100().screen().contents()) › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__app_server_guardian_review_timed_out_renders_timed_out_request.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__app_server_guardian_review_timed_out_renders_timed_out_request.snap index 72c6586ad9..740c9a6fb8 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__app_server_guardian_review_timed_out_renders_timed_out_request.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__app_server_guardian_review_timed_out_renders_timed_out_request.snap @@ -17,4 +17,4 @@ expression: normalize_snapshot_paths(term.backend().vt100().screen().contents()) › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__app_server_mcp_startup_failure_renders_warning_history.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__app_server_mcp_startup_failure_renders_warning_history.snap index 7a74c0a052..844a0415ea 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__app_server_mcp_startup_failure_renders_warning_history.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__app_server_mcp_startup_failure_renders_warning_history.snap @@ -11,4 +11,4 @@ expression: normalize_snapshot_paths(term.backend().vt100().screen().contents()) › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__bedrock_mantle_astra_reasoning.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__bedrock_mantle_astra_reasoning.snap index 4d4a43494a..048edd15c0 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__bedrock_mantle_astra_reasoning.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__bedrock_mantle_astra_reasoning.snap @@ -2,7 +2,7 @@ source: tui/src/chatwidget/tests/bedrock_catalog_tests.rs expression: "render_bottom_popup(&chat, 100)" --- - Select Reasoning Level for openai.gpt-6-astra + Select Reasoning Level for GPT-6-Astra › 1. Low (default) Fast responses with lighter reasoning 2. Medium Balances speed and reasoning depth for everyday tasks diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__bedrock_mantle_models.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__bedrock_mantle_models.snap index d39fedf0f4..72da650f0b 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__bedrock_mantle_models.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__bedrock_mantle_models.snap @@ -3,14 +3,12 @@ source: tui/src/chatwidget/tests/bedrock_catalog_tests.rs expression: "render_bottom_popup(&chat, 100)" --- Select Model and Effort - Access legacy models by running codex -m or in your config.toml -› 1. openai.gpt-5.6-sol (current) Latest frontier agentic coding model. - 2. openai.gpt-6-astra Our most capable model for complex, demanding work. - 3. openai.gpt-5.6-terra Balanced agentic coding model for everyday work. - 4. openai.gpt-5.6-luna Fast and affordable agentic coding model. - 5. openai.gpt-5.5 Frontier model for complex coding, research, and real-world - work. - 6. openai.gpt-5.4 Strong model for everyday coding. +› 1. GPT-5.6 Sol (current) Latest frontier agentic coding model. + 2. GPT-6-Astra Our most capable model for complex, demanding work. + 3. GPT-5.6 Terra Balanced agentic coding model for everyday work. + 4. GPT-5.6 Luna Fast and affordable agentic coding model. + 5. GPT-5.5 Frontier model for complex coding, research, and real-world work. + 6. GPT-5.4 Strong model for everyday coding. Press enter to confirm or esc to go back diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__bedrock_runtime_astra_reasoning.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__bedrock_runtime_astra_reasoning.snap index a56c8ba016..22ac0f5924 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__bedrock_runtime_astra_reasoning.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__bedrock_runtime_astra_reasoning.snap @@ -2,7 +2,7 @@ source: tui/src/chatwidget/tests/bedrock_catalog_tests.rs expression: "render_bottom_popup(&chat, 100)" --- - Select Reasoning Level for global.openai.gpt-6-astra + Select Reasoning Level for GPT-6-Astra (Global) › 1. Low (default) Fast responses with lighter reasoning 2. Medium Balances speed and reasoning depth for everyday tasks diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__bedrock_runtime_models.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__bedrock_runtime_models.snap index d0d082629a..59417959c9 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__bedrock_runtime_models.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__bedrock_runtime_models.snap @@ -3,15 +3,14 @@ source: tui/src/chatwidget/tests/bedrock_catalog_tests.rs expression: "render_bottom_popup(&chat, 100)" --- Select Model and Effort - Access legacy models by running codex -m or in your config.toml -› 1. global.openai.gpt-5.6-sol (current) Latest frontier agentic coding model. - 2. global.openai.gpt-6-astra Our most capable model for complex, demanding work. - 3. global.openai.gpt-5.6-terra Balanced agentic coding model for everyday work. - 4. global.openai.gpt-5.6-luna Fast and affordable agentic coding model. - 5. us.openai.gpt-5.6-sol Latest frontier agentic coding model. - 6. us.openai.gpt-6-astra Our most capable model for complex, demanding work. - 7. us.openai.gpt-5.6-terra Balanced agentic coding model for everyday work. - 8. us.openai.gpt-5.6-luna Fast and affordable agentic coding model. +› 1. GPT-5.6 Sol (Global) (current) Latest frontier agentic coding model. + 2. GPT-6-Astra (Global) Our most capable model for complex, demanding work. + 3. GPT-5.6 Terra (Global) Balanced agentic coding model for everyday work. + 4. GPT-5.6 Luna (Global) Fast and affordable agentic coding model. + 5. GPT-5.6 Sol (US cross-region) Latest frontier agentic coding model. + 6. GPT-6-Astra (US cross-region) Our most capable model for complex, demanding work. + 7. GPT-5.6 Terra (US cross-region) Balanced agentic coding model for everyday work. + 8. GPT-5.6 Luna (US cross-region) Fast and affordable agentic coding model. Press enter to confirm or esc to go back diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__catalog_model_session_header_resume.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__catalog_model_session_header_resume.snap new file mode 100644 index 0000000000..915041d85f --- /dev/null +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__catalog_model_session_header_resume.snap @@ -0,0 +1,8 @@ +--- +source: tui/src/chatwidget/tests/app_server.rs +assertion_line: 99 +expression: rendered +--- +OpenAI Codex (v) +model: GPT-5.6 Luna high +directory: /tmp/thread-settings diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__catalog_model_session_header_startup.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__catalog_model_session_header_startup.snap new file mode 100644 index 0000000000..65f9035089 --- /dev/null +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__catalog_model_session_header_startup.snap @@ -0,0 +1,16 @@ +--- +source: tui/src/chatwidget/tests/app_server.rs +assertion_line: 99 +expression: rendered +--- +OpenAI Codex (v) +model: GPT-5.6 Luna high +directory: /tmp/thread-settings + + To get started, describe a task or try one of these commands: + + /init - create an AGENTS.md file with instructions for Codex + /status - show current session configuration + /permissions - choose what Codex is allowed to do + /model - choose what model and reasoning effort to use + /review - review any changes and find issues diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__catalog_model_session_header_unknown_model.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__catalog_model_session_header_unknown_model.snap new file mode 100644 index 0000000000..147a544c94 --- /dev/null +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__catalog_model_session_header_unknown_model.snap @@ -0,0 +1,8 @@ +--- +source: tui/src/chatwidget/tests/app_server.rs +assertion_line: 99 +expression: rendered +--- +OpenAI Codex (v) +model: us.openai.gpt-5.6-luna high +directory: /tmp/thread-settings diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__chatwidget_tall.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__chatwidget_tall.snap index 603033a275..8d0df9a9d2 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__chatwidget_tall.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__chatwidget_tall.snap @@ -25,4 +25,4 @@ expression: normalize_snapshot_paths(term.backend().vt100().screen().contents()) › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__compact_queues_user_messages_snapshot.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__compact_queues_user_messages_snapshot.snap index 0ff879f3a5..a4362becaa 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__compact_queues_user_messages_snapshot.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__compact_queues_user_messages_snapshot.snap @@ -19,4 +19,4 @@ expression: normalize_snapshot_paths(term.backend().vt100().screen().contents()) › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__compaction_running.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__compaction_running.snap index b24fd26b94..fff40163ad 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__compaction_running.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__compaction_running.snap @@ -8,4 +8,4 @@ expression: "normalize_compaction_snapshot(render_bottom_popup(&chat, 80))" › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__compaction_running_narrow.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__compaction_running_narrow.snap index f857139645..161bd517c2 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__compaction_running_narrow.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__compaction_running_narrow.snap @@ -8,4 +8,4 @@ expression: "normalize_compaction_snapshot(render_bottom_popup(&chat, 40))" › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__completed_hook_with_output_flushes_immediately_snapshot.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__completed_hook_with_output_flushes_immediately_snapshot.snap index bb8be43b02..2658f7c17d 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__completed_hook_with_output_flushes_immediately_snapshot.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__completed_hook_with_output_flushes_immediately_snapshot.snap @@ -10,7 +10,7 @@ activity: " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " history: @@ -20,7 +20,7 @@ activity: " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " history: • Blocked by hook └ command blocked by policy diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__completed_same_id_hook_output_survives_restart_snapshot.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__completed_same_id_hook_output_survives_restart_snapshot.snap index f56015d661..9fe87abc0f 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__completed_same_id_hook_output_survives_restart_snapshot.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__completed_same_id_hook_output_survives_restart_snapshot.snap @@ -10,7 +10,7 @@ activity: " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " history: • Hook stopped └ continue with more context diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__completed_turn_clears_visible_running_hook.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__completed_turn_clears_visible_running_hook.snap index 37e8d9eb86..749ed94a51 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__completed_turn_clears_visible_running_hook.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__completed_turn_clears_visible_running_hook.snap @@ -9,10 +9,10 @@ before completion: " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " after completion: " " " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__connector_scope_invalidation.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__connector_scope_invalidation.snap index b6ac615744..cc03687523 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__connector_scope_invalidation.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__connector_scope_invalidation.snap @@ -15,4 +15,4 @@ Before account change: After account change: › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__custom_model_display_name_all_models.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__custom_model_display_name_all_models.snap new file mode 100644 index 0000000000..42180c5300 --- /dev/null +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__custom_model_display_name_all_models.snap @@ -0,0 +1,9 @@ +--- +source: tui/src/chatwidget/tests/model_display_name_tests.rs +expression: "render_bottom_popup(&chat, 80)" +--- + Select Model and Effort + +› 1. GPT-5.6 Luna (current) Custom provider model + + Press enter to confirm or esc to go back diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__custom_model_display_name_quick_picker.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__custom_model_display_name_quick_picker.snap new file mode 100644 index 0000000000..0ad44a98ed --- /dev/null +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__custom_model_display_name_quick_picker.snap @@ -0,0 +1,12 @@ +--- +source: tui/src/chatwidget/tests/model_display_name_tests.rs +expression: "render_bottom_popup(&chat, 80)" +--- + Select Model + Pick a quick auto mode or browse all models. + + 1. Auto Fast Custom provider model +› 2. All models (current) Choose a specific model and reasoning level + (current: GPT-5.6 Luna) + + Press enter to confirm or esc to go back diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__custom_model_display_name_reasoning.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__custom_model_display_name_reasoning.snap new file mode 100644 index 0000000000..3cdae89d3b --- /dev/null +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__custom_model_display_name_reasoning.snap @@ -0,0 +1,10 @@ +--- +source: tui/src/chatwidget/tests/model_display_name_tests.rs +expression: "render_bottom_popup(&chat, 80)" +--- + Select Reasoning Level for GPT-5.6 Luna + + 1. Low Quick answers +› 2. High (default) (current) Deeper reasoning + + enter to set as default · s for this session · esc to go back diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__custom_model_display_name_status_line.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__custom_model_display_name_status_line.snap new file mode 100644 index 0000000000..cd133ee3c5 --- /dev/null +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__custom_model_display_name_status_line.snap @@ -0,0 +1,9 @@ +--- +source: tui/src/chatwidget/tests/model_display_name_tests.rs +expression: normalized_backend_snapshot(terminal.backend()) +--- +" " +" " +"› Ask Codex to do anything " +" " +" GPT-5.6 Luna · GPT-5.6 Luna high " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__default_footer_generating_thread_title.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__default_footer_generating_thread_title.snap index 46b2c060d6..cc63d0d488 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__default_footer_generating_thread_title.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__default_footer_generating_thread_title.snap @@ -4,4 +4,4 @@ expression: "render_bottom_popup(&chat, 100)" --- › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project · ⠋ + GPT-5.6-Sol default · /tmp/project · ⠋ diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__esc_interrupt_goal_paused_footer.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__esc_interrupt_goal_paused_footer.snap index fd9d023c36..d9aaa4e578 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__esc_interrupt_goal_paused_footer.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__esc_interrupt_goal_paused_footer.snap @@ -8,4 +8,4 @@ expression: snapshot " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project Goal paused (/goal resume) " +" GPT-5.6-Sol default · /tmp/project Goal paused (/goal resume) " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__esc_interrupt_goal_paused_footer@windows.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__esc_interrupt_goal_paused_footer@windows.snap index 80910bd6d3..b2b296cb6f 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__esc_interrupt_goal_paused_footer@windows.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__esc_interrupt_goal_paused_footer@windows.snap @@ -8,4 +8,4 @@ expression: snapshot " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project Goal paused (/goal resume) " +" GPT-5.6-Sol default · /tmp/project Goal paused (/goal resume) " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_approved_exec_is_hidden_from_history.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_approved_exec_is_hidden_from_history.snap index 651376f853..489c81b4f4 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_approved_exec_is_hidden_from_history.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_approved_exec_is_hidden_from_history.snap @@ -12,4 +12,4 @@ expression: normalize_snapshot_paths(term.backend().vt100().screen().contents()) › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_approved_request_permissions_clears_status_without_history.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_approved_request_permissions_clears_status_without_history.snap index 417c1164ea..9e552010ac 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_approved_request_permissions_clears_status_without_history.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_approved_request_permissions_clears_status_without_history.snap @@ -12,4 +12,4 @@ expression: normalize_snapshot_paths(term.backend().vt100().screen().contents()) › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_denied_exec_renders_warning_and_denied_request.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_denied_exec_renders_warning_and_denied_request.snap index b77d2ca174..c97ab12d2a 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_denied_exec_renders_warning_and_denied_request.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_denied_exec_renders_warning_and_denied_request.snap @@ -21,4 +21,4 @@ expression: normalize_snapshot_paths(term.backend().vt100().screen().contents()) › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_goal_continuation_drops_stale_reviews.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_goal_continuation_drops_stale_reviews.snap index 5e2806fb3d..f422c75d4f 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_goal_continuation_drops_stale_reviews.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_goal_continuation_drops_stale_reviews.snap @@ -8,4 +8,4 @@ expression: normalize_snapshot_paths(rendered) › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_parallel_reviews_render_aggregate_status.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_parallel_reviews_render_aggregate_status.snap index 71c92e26b1..cdadc018e9 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_parallel_reviews_render_aggregate_status.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_parallel_reviews_render_aggregate_status.snap @@ -9,4 +9,4 @@ expression: normalize_snapshot_paths(rendered) › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_timed_out_exec_renders_warning_and_timed_out_request.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_timed_out_exec_renders_warning_and_timed_out_request.snap index 748a3f85ff..0210b58f7b 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_timed_out_exec_renders_warning_and_timed_out_request.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_timed_out_exec_renders_warning_and_timed_out_request.snap @@ -21,4 +21,4 @@ expression: normalize_snapshot_paths(term.backend().vt100().screen().contents()) › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_write_stdin_review_status.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_write_stdin_review_status.snap index e805f92b49..01b02b2c92 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_write_stdin_review_status.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__guardian_write_stdin_review_status.snap @@ -8,4 +8,4 @@ expression: "normalize_snapshot_paths(render_bottom_popup(&chat, 80))" › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__hidden_shell_paste_queued_preview.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__hidden_shell_paste_queued_preview.snap index 6a631ff51c..6e4ac1c491 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__hidden_shell_paste_queued_preview.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__hidden_shell_paste_queued_preview.snap @@ -10,4 +10,4 @@ expression: normalize_snapshot_paths(render_bottom_popup(&chat, 80)) › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__hook_runs_while_exec_active_snapshot.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__hook_runs_while_exec_active_snapshot.snap index 01050a7906..a54331724c 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__hook_runs_while_exec_active_snapshot.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__hook_runs_while_exec_active_snapshot.snap @@ -14,7 +14,7 @@ exec and hook running: " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " history after exec: • Ran echo done └ done @@ -26,7 +26,7 @@ hook running after exec: " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " quiet hook completed: " " "• Working (0s • esc to interrupt) " @@ -34,4 +34,4 @@ quiet hook completed: " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__image_generation_begin_restores_working_status.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__image_generation_begin_restores_working_status.snap index 65070af637..16ef2322ce 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__image_generation_begin_restores_working_status.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__image_generation_begin_restores_working_status.snap @@ -8,4 +8,4 @@ expression: normalized_backend_snapshot(terminal.backend()) " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__image_preparation_in_progress.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__image_preparation_in_progress.snap index d19e4238e9..c634c4bca6 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__image_preparation_in_progress.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__image_preparation_in_progress.snap @@ -9,4 +9,4 @@ expression: "normalize_snapshot_paths(render_bottom_popup(&chat, 80))" › x - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__image_preparation_restored_input.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__image_preparation_restored_input.snap index 8d1fb0ac3b..decc9f5172 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__image_preparation_restored_input.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__image_preparation_restored_input.snap @@ -6,4 +6,4 @@ expression: "render_bottom_popup(&chat, 80)" › [Image #2] describe $file - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__interrupted_turn_clears_visible_running_hook.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__interrupted_turn_clears_visible_running_hook.snap index 80069ba40c..9e65facfba 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__interrupted_turn_clears_visible_running_hook.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__interrupted_turn_clears_visible_running_hook.snap @@ -9,10 +9,10 @@ before interrupt: " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " after interrupt: " " " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__long_running_hook_below_background_activity_row.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__long_running_hook_below_background_activity_row.snap index c35eeb638b..7c1ff48f5e 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__long_running_hook_below_background_activity_row.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__long_running_hook_below_background_activity_row.snap @@ -10,7 +10,7 @@ expression: "format!(\"80 columns:\\n{}\\n120 columns:\\n{}\", hook_status_frame " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " 120 columns: " " "• Working (0s • esc to interrupt) · 1 background terminal running · /ps to view · /stop to close " @@ -19,4 +19,4 @@ expression: "format!(\"80 columns:\\n{}\\n120 columns:\\n{}\", hook_status_frame " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__manual_compaction_pending.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__manual_compaction_pending.snap index b24fd26b94..fff40163ad 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__manual_compaction_pending.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__manual_compaction_pending.snap @@ -8,4 +8,4 @@ expression: "normalize_compaction_snapshot(render_bottom_popup(&chat, 80))" › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__manual_thread_name_status_surfaces.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__manual_thread_name_status_surfaces.snap index 0b59322dac..bff7d27f4f 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__manual_thread_name_status_surfaces.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__manual_thread_name_status_surfaces.snap @@ -7,5 +7,5 @@ transcript: footer: › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project · review-fix + GPT-5.6-Sol default · /tmp/project · review-fix title: review-fix | project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__mcp_startup_header_booting.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__mcp_startup_header_booting.snap index 32a728c406..f7988ba639 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__mcp_startup_header_booting.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__mcp_startup_header_booting.snap @@ -6,4 +6,4 @@ expression: normalized_backend_snapshot(terminal.backend()) " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__mixed_running_hooks_share_background_activity_row.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__mixed_running_hooks_share_background_activity_row.snap index 047611adf9..f8f8b45f20 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__mixed_running_hooks_share_background_activity_row.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__mixed_running_hooks_share_background_activity_row.snap @@ -10,7 +10,7 @@ expression: "format!(\"80 columns:\\n{}\\n120 columns:\\n{}\", hook_status_frame " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " 120 columns: " " "• Working (0s • esc to interrupt) · 1 background terminal running · /ps to view · /stop to close · Running hooks " @@ -18,4 +18,4 @@ expression: "format!(\"80 columns:\\n{}\\n120 columns:\\n{}\", hook_status_frame " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__model_picker_filters_hidden_models.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__model_picker_filters_hidden_models.snap index 2b1228c3f7..127e1ef1b7 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__model_picker_filters_hidden_models.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__model_picker_filters_hidden_models.snap @@ -3,7 +3,6 @@ source: tui/src/chatwidget/tests/popups_and_settings.rs expression: popup --- Select Model and Effort - Access legacy models by running codex -m or in your config.toml › 1. test-visible-model (current) test-visible-model description diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__model_picker_refresh_preserves_highlight.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__model_picker_refresh_preserves_highlight.snap index f3e94e965b..2042e97bb1 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__model_picker_refresh_preserves_highlight.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__model_picker_refresh_preserves_highlight.snap @@ -3,10 +3,10 @@ source: tui/src/chatwidget/tests/popups_and_settings.rs expression: "render_bottom_popup(&chat, 80)" --- Select Model and Effort - Access legacy models by running codex -m or in your config.toml -› 1. gpt-5.6-terra Balanced agentic coding model for everyday work. - 2. gpt-5.5 (current) Frontier model for complex coding, research, and real- - world work. +› 1. Renamed model Balanced agentic coding model for everyday + work. + 2. Shared display name (current) Frontier model for complex coding, + research, and real-world work. Press enter to confirm or esc to go back diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__model_picker_refreshes_auto_models.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__model_picker_refreshes_auto_models.snap index e7ed3413cf..9dbf5a4c37 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__model_picker_refreshes_auto_models.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__model_picker_refreshes_auto_models.snap @@ -5,8 +5,8 @@ expression: "render_bottom_popup(&chat, 80)" Select Model Pick a quick auto mode or browse all models. - 1. codex-auto-test Auto model + 1. GPT-5.5 Auto model › 2. All models (current) Choose a specific model and reasoning level - (current: gpt-5.5) + (current: GPT-5.5) Press enter to confirm or esc to go back diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__model_reasoning_selection_popup.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__model_reasoning_selection_popup.snap index e1589d1d3c..4a90e3a5f6 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__model_reasoning_selection_popup.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__model_reasoning_selection_popup.snap @@ -2,7 +2,7 @@ source: tui/src/chatwidget/tests/popups_and_settings.rs expression: popup --- - Select Reasoning Level for gpt-5.5 + Select Reasoning Level for GPT-5.5 1. Low Fast responses with lighter reasoning 2. Medium (default) Balances speed and reasoning depth for everyday tasks diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__model_selection_popup.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__model_selection_popup.snap index 838bf8f752..f9a4b15683 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__model_selection_popup.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__model_selection_popup.snap @@ -3,14 +3,13 @@ source: tui/src/chatwidget/tests/popups_and_settings.rs expression: "render_bottom_popup(&chat, 80)" --- Select Model and Effort - Access legacy models by running codex -m or in your config.toml - 1. gpt-6-astra (default) Our most capable model for complex, demanding + 1. GPT-6-Astra (default) Our most capable model for complex, demanding work. - 2. gpt-5.6-sol Latest frontier agentic coding model. - 3. gpt-5.6-terra Balanced agentic coding model for everyday work. - 4. gpt-5.6-luna Fast and affordable agentic coding model. -› 5. gpt-5.5 (current) Frontier model for complex coding, research, and + 2. GPT-5.6-Sol Latest frontier agentic coding model. + 3. GPT-5.6-Terra Balanced agentic coding model for everyday work. + 4. GPT-5.6-Luna Fast and affordable agentic coding model. +› 5. GPT-5.5 (current) Frontier model for complex coding, research, and real-world work. Press enter to confirm or esc to go back diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__overlapping_hook_live_cell_snapshot.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__overlapping_hook_live_cell_snapshot.snap index d7cf088ac6..25e7c7a13e 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__overlapping_hook_live_cell_snapshot.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__overlapping_hook_live_cell_snapshot.snap @@ -10,7 +10,7 @@ activity: " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " history: @@ -22,7 +22,7 @@ activity: " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " history: @@ -34,7 +34,7 @@ activity: " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " history: @@ -46,6 +46,6 @@ activity: " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " history: diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__preamble_keeps_working_status.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__preamble_keeps_working_status.snap index 65070af637..16ef2322ce 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__preamble_keeps_working_status.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__preamble_keeps_working_status.snap @@ -8,4 +8,4 @@ expression: normalized_backend_snapshot(terminal.backend()) " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__reasoning_delta_restores_recreated_status_indicator.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__reasoning_delta_restores_recreated_status_indicator.snap index c107219278..6303a9dd29 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__reasoning_delta_restores_recreated_status_indicator.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__reasoning_delta_restores_recreated_status_indicator.snap @@ -9,4 +9,4 @@ expression: normalized_backend_snapshot(terminal.backend()) " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__replayed_in_progress_turn.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__replayed_in_progress_turn.snap index 4ce4e7eff3..4661f024d7 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__replayed_in_progress_turn.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__replayed_in_progress_turn.snap @@ -7,4 +7,4 @@ expression: "normalize_completion_timestamps(& (render_bottom_popup(&chat, 80))) › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__review_queues_user_messages_snapshot.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__review_queues_user_messages_snapshot.snap index 691523b8d0..7f11c14a0c 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__review_queues_user_messages_snapshot.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__review_queues_user_messages_snapshot.snap @@ -19,4 +19,4 @@ expression: normalize_snapshot_paths(term.backend().vt100().screen().contents()) › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__running_hooks_share_background_activity_row.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__running_hooks_share_background_activity_row.snap index 18cab0743d..57e161155a 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__running_hooks_share_background_activity_row.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__running_hooks_share_background_activity_row.snap @@ -10,7 +10,7 @@ expression: "format!(\"80 columns:\\n{}\\n120 columns:\\n{}\", hook_status_frame " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " 120 columns: " " "• Working (0s • esc to interrupt) · 1 background terminal running · /ps to view · /stop to close " @@ -19,4 +19,4 @@ expression: "format!(\"80 columns:\\n{}\\n120 columns:\\n{}\", hook_status_frame " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__session_end_hook_activity.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__session_end_hook_activity.snap index 144e7bf8ae..ea69dee671 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__session_end_hook_activity.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__session_end_hook_activity.snap @@ -7,7 +7,7 @@ before reveal: " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " running: " " "• Saving session summary " @@ -15,10 +15,10 @@ running: " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " completed: " " " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__session_end_hook_activity_without_message.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__session_end_hook_activity_without_message.snap index b32dad2b4a..9a05181d30 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__session_end_hook_activity_without_message.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__session_end_hook_activity_without_message.snap @@ -7,7 +7,7 @@ before reveal: " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " running: " " "• Running hook " @@ -15,10 +15,10 @@ running: " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " completed: " " " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__side_context_label_preserves_status_line.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__side_context_label_preserves_status_line.snap index 454a67e000..38142b596c 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__side_context_label_preserves_status_line.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__side_context_label_preserves_status_line.snap @@ -6,4 +6,4 @@ expression: terminal.backend() " " "› Ask a follow-up question " " " -" gpt-5.6-sol Side from main thread · ctrl + / to switch · ctrl + c to close " +" GPT-5.6-Sol Side from main thread · ctrl + / to switch · ctrl + c to close " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__side_context_label_shows_hidden_side.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__side_context_label_shows_hidden_side.snap index 64931540dd..a698e57d44 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__side_context_label_shows_hidden_side.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__side_context_label_shows_hidden_side.snap @@ -6,4 +6,4 @@ expression: terminal.backend() " " "› Ask Codex to do anything " " " -" gpt-5.6-sol ctrl + / for side " +" GPT-5.6-Sol ctrl + / for side " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__slash_copy_whole_status.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__slash_copy_whole_status.snap index 6cb4e5437c..1e0665b374 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__slash_copy_whole_status.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__slash_copy_whole_status.snap @@ -7,7 +7,7 @@ expression: "whole_status.replace(&directory,\n\"[[workspace]]\").replace(crate: Visit https://chatgpt.com/codex/settings/usage for up-to-date information on rate limits and credits - Model: gpt-5.5 (reasoning medium, summaries auto) + Model: GPT-5.5 (reasoning medium, summaries auto) Model provider: openai Directory: [[workspace]] Permissions: Read Only (Ask for approval) diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__slash_side_requests_forked_side_question_while_task_running.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__slash_side_requests_forked_side_question_while_task_running.snap index 507e8bf10f..558a9e05b2 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__slash_side_requests_forked_side_question_while_task_running.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__slash_side_requests_forked_side_question_while_task_running.snap @@ -8,4 +8,4 @@ expression: normalized_backend_snapshot(terminal.backend()) " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default Side starting... " +" GPT-5.6-Sol default Side starting... " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__status_line_estimated_thread_cost_footer.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__status_line_estimated_thread_cost_footer.snap index d6e5058aec..d0d6e6d874 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__status_line_estimated_thread_cost_footer.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__status_line_estimated_thread_cost_footer.snap @@ -6,4 +6,4 @@ expression: normalized_backend_snapshot(terminal.backend()) " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · 5.2 credits · ~$0.21 " +" GPT-5.6-Sol default · 5.2 credits · ~$0.21 " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__status_line_goal_active_token_budget_footer.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__status_line_goal_active_token_budget_footer.snap index bbf2f9dea7..ace4815899 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__status_line_goal_active_token_budget_footer.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__status_line_goal_active_token_budget_footer.snap @@ -6,4 +6,4 @@ expression: normalized_backend_snapshot(terminal.backend()) " " "› Ask Codex to do anything " " " -" gpt-5.4 Pursuing goal (40K / 50K) " +" GPT-5.4 Pursuing goal (40K / 50K) " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__status_line_goal_complete_elapsed_footer.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__status_line_goal_complete_elapsed_footer.snap index 97253d2ec9..63cda5d1b1 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__status_line_goal_complete_elapsed_footer.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__status_line_goal_complete_elapsed_footer.snap @@ -6,4 +6,4 @@ expression: normalized_backend_snapshot(terminal.backend()) " " "› Ask Codex to do anything " " " -" gpt-5.4 Goal achieved (2d 23h 42m) " +" GPT-5.4 Goal achieved (2d 23h 42m) " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__status_widget_active.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__status_widget_active.snap index d87052b5e0..0bbc057620 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__status_widget_active.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__status_widget_active.snap @@ -8,4 +8,4 @@ expression: normalized_backend_snapshot(terminal.backend()) " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__terminal_title_model_display_name.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__terminal_title_model_display_name.snap new file mode 100644 index 0000000000..808735b45d --- /dev/null +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__terminal_title_model_display_name.snap @@ -0,0 +1,5 @@ +--- +source: tui/src/chatwidget/tests/status_and_layout.rs +expression: "chat.last_terminal_title.as_deref().expect(\"terminal title\")" +--- +GPT-5.4 diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__unified_exec_begin_restores_working_status.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__unified_exec_begin_restores_working_status.snap index d21f0481f4..68835e4e77 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__unified_exec_begin_restores_working_status.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__unified_exec_begin_restores_working_status.snap @@ -8,4 +8,4 @@ expression: normalized_backend_snapshot(terminal.backend()) " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__unified_exec_wait_status_renders_command_in_single_details_row.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__unified_exec_wait_status_renders_command_in_single_details_row.snap index e76f552444..980874d998 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__unified_exec_wait_status_renders_command_in_single_details_row.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__unified_exec_wait_status_renders_command_in_single_details_row.snap @@ -8,4 +8,4 @@ expression: normalize_snapshot_paths(rendered) › Ask Codex to do anything - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__voice_live_transcript_and_stream.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__voice_live_transcript_and_stream.snap index 1b7dcfb504..9fbbb09edd 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__voice_live_transcript_and_stream.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__voice_live_transcript_and_stream.snap @@ -16,4 +16,4 @@ expression: rendered " " "› Ask Codex to do anything " " " -" gpt-5.6-sol default · /tmp/project " +" GPT-5.6-Sol default · /tmp/project " diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__windows_sandbox_setup_fresh_clock.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__windows_sandbox_setup_fresh_clock.snap index b740b092cf..87abf3dba8 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__windows_sandbox_setup_fresh_clock.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__windows_sandbox_setup_fresh_clock.snap @@ -9,4 +9,4 @@ expression: "setup.replace(&chat.config.cwd.display().to_string(), \"[CWD]\")" › Input disabled until setup completes. - gpt-5.6-sol default · [CWD] + GPT-5.6-Sol default · [CWD] diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__worktrees_command_remote.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__worktrees_command_remote.snap index 38b1765f69..91076caee0 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__worktrees_command_remote.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__worktrees_command_remote.snap @@ -5,4 +5,4 @@ expression: popup --- › /work - gpt-5.6-sol default · /tmp/project + GPT-5.6-Sol default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/tests.rs b/codex-rs/tui/src/chatwidget/tests.rs index b129b5be4a..cb418f967d 100644 --- a/codex-rs/tui/src/chatwidget/tests.rs +++ b/codex-rs/tui/src/chatwidget/tests.rs @@ -258,6 +258,8 @@ mod luna_reserve_usage_tests; mod mcp_startup; #[path = "tests/misalignment_policy_tests.rs"] mod misalignment_policy; +#[path = "tests/model_display_name_tests.rs"] +mod model_display_name_tests; #[path = "tests/permission_shortcuts_tests.rs"] mod permission_shortcuts_tests; mod permissions; diff --git a/codex-rs/tui/src/chatwidget/tests/app_server.rs b/codex-rs/tui/src/chatwidget/tests/app_server.rs index c8f36ff0d2..5365996f90 100644 --- a/codex-rs/tui/src/chatwidget/tests/app_server.rs +++ b/codex-rs/tui/src/chatwidget/tests/app_server.rs @@ -68,6 +68,39 @@ fn configured_thread_session(thread_id: ThreadId) -> crate::session_state::Threa } } +#[tokio::test] +async fn session_header_uses_catalog_display_name_without_changing_model() { + let slug = "us.openai.gpt-5.6-luna"; + for (name, first_event, display_name) in [ + ("startup", true, Some("GPT-5.6 Luna")), + ("resume", false, Some("GPT-5.6 Luna")), + ("unknown_model", false, None), + ] { + let (mut chat, mut events, _ops) = make_chatwidget_manual(Some(slug)).await; + let mut preset = get_available_model(&chat, "gpt-5.5"); + preset.model = slug.to_string(); + preset.display_name = display_name.unwrap_or_default().to_string(); + chat.model_catalog = Arc::new(ModelCatalog::new( + display_name.map(|_| preset).into_iter().collect(), + )); + chat.show_welcome_banner = first_event; + chat.local_settings.tui.show_tooltips = false; + let mut session = configured_thread_session(ThreadId::new()); + session.model = slug.to_string(); + session.reasoning_effort = Some(ReasoningEffortConfig::High); + chat.handle_thread_session(session); + + let rendered = drain_insert_history_with(&mut events, HistoryCell::raw_lines) + .iter() + .map(|lines| lines_to_single_string(lines)) + .collect::() + .replace(CODEX_CLI_VERSION, "") + .replace("C:\\tmp\\thread-settings", "/tmp/thread-settings"); + assert_chatwidget_snapshot!(format!("catalog_model_session_header_{name}"), rendered); + assert_eq!(chat.current_model(), slug); + } +} + #[tokio::test] async fn session_and_settings_sync_server_provider_id() { let (mut chat, _rx, _op_rx) = make_chatwidget_manual(Some("gpt-5.2")).await; diff --git a/codex-rs/tui/src/chatwidget/tests/model_display_name_tests.rs b/codex-rs/tui/src/chatwidget/tests/model_display_name_tests.rs new file mode 100644 index 0000000000..596893d3da --- /dev/null +++ b/codex-rs/tui/src/chatwidget/tests/model_display_name_tests.rs @@ -0,0 +1,104 @@ +//! Catalog display names are presentation only; model selection retains wire slugs. + +use super::*; +use pretty_assertions::assert_eq; + +#[tokio::test] +async fn custom_model_display_name_in_pickers_preserves_selection_slug() { + let slug = "us.openai.gpt-5.6-luna"; + let (mut chat, mut events, _ops) = make_chatwidget_manual(Some(slug)).await; + let mut preset = get_available_model(&chat, "gpt-5.5"); + preset.id = slug.to_string(); + preset.model = slug.to_string(); + preset.display_name = "GPT-5.6 Luna".to_string(); + preset.description = "Custom provider model".to_string(); + preset.default_reasoning_effort = ReasoningEffortConfig::High; + preset.supported_reasoning_efforts = vec![ + ReasoningEffortPreset { + effort: ReasoningEffortConfig::Low, + description: "Quick answers".to_string(), + }, + ReasoningEffortPreset { + effort: ReasoningEffortConfig::High, + description: "Deeper reasoning".to_string(), + }, + ]; + let mut auto = preset.clone(); + auto.id = "codex-auto-fast".to_string(); + auto.model = auto.id.clone(); + auto.display_name = "Auto Fast".to_string(); + chat.model_catalog = Arc::new(ModelCatalog::new(vec![auto, preset.clone()])); + chat.set_reasoning_effort(Some(ReasoningEffortConfig::High)); + chat.open_model_popup_with_presets(chat.model_catalog.models.clone()); + assert_chatwidget_snapshot!( + "custom_model_display_name_quick_picker", + render_bottom_popup(&chat, /*width*/ 80) + ); + chat.handle_key_event(KeyCode::Enter.into()); + assert_matches!(events.try_recv(), Ok(AppEvent::OpenAllModelsPopup)); + chat.open_all_models_popup(); + assert_chatwidget_snapshot!( + "custom_model_display_name_all_models", + render_bottom_popup(&chat, /*width*/ 80) + ); + chat.handle_key_event(KeyCode::Enter.into()); + let selected = + assert_matches!(events.try_recv(), Ok(AppEvent::OpenReasoningPopup { model }) => model); + assert_eq!(selected, preset); + chat.open_reasoning_popup(selected); + assert_chatwidget_snapshot!( + "custom_model_display_name_reasoning", + render_bottom_popup(&chat, /*width*/ 80) + ); + chat.handle_key_event(KeyCode::Enter.into()); + assert_matches!(events.try_recv(), Ok(AppEvent::UpdateModel(model)) if model == slug); + assert_matches!( + events.try_recv(), + Ok(AppEvent::UpdateReasoningEffort(Some( + ReasoningEffortConfig::High + ))) + ); + let persisted = assert_matches!(events.try_recv(), Ok(AppEvent::PersistModelSelection { model, effort }) => (model, effort)); + assert_eq!( + persisted, + (slug.to_string(), Some(ReasoningEffortConfig::High)) + ); +} + +#[tokio::test] +async fn custom_model_display_name_in_status_line_and_fallback() { + use ratatui::Terminal; + use ratatui::backend::TestBackend; + + let slug = "us.openai.gpt-5.6-luna"; + let (mut chat, _events, _ops) = make_chatwidget_manual(Some(slug)).await; + let mut preset = get_available_model(&chat, "gpt-5.5"); + preset.model = slug.to_string(); + preset.display_name = "GPT-5.6 Luna".to_string(); + preset.show_in_picker = false; + chat.model_catalog = Arc::new(ModelCatalog::new(vec![preset])); + chat.show_welcome_banner = false; + chat.local_settings.tui.status_line = Some(vec![ + "model-name".to_string(), + "model-with-reasoning".to_string(), + ]); + chat.set_reasoning_effort(Some(ReasoningEffortConfig::High)); + chat.refresh_status_line(); + let width = 80; + let mut terminal = Terminal::new(TestBackend::new(width, chat.desired_height(width))) + .expect("create terminal"); + terminal + .draw(|frame| chat.render(frame.area(), frame.buffer_mut())) + .expect("draw model status line"); + assert_chatwidget_snapshot!( + "custom_model_display_name_status_line", + normalized_backend_snapshot(terminal.backend()) + ); + + Arc::make_mut(&mut chat.model_catalog).models.clear(); + assert_eq!(chat.model_display_name(), slug); + chat.set_model(crate::model_catalog::LUNA_RESERVE_MODEL); + assert_eq!(chat.model_display_name(), "Luna Reserve"); + chat.set_model(""); + assert_eq!(chat.model_display_name(), DEFAULT_MODEL_DISPLAY_NAME); +} diff --git a/codex-rs/tui/src/chatwidget/tests/popups_and_settings.rs b/codex-rs/tui/src/chatwidget/tests/popups_and_settings.rs index f9a9c44616..162d0d1ba3 100644 --- a/codex-rs/tui/src/chatwidget/tests/popups_and_settings.rs +++ b/codex-rs/tui/src/chatwidget/tests/popups_and_settings.rs @@ -3440,6 +3440,9 @@ async fn model_picker_refresh_preserves_highlight() { get_available_model(&chat, "gpt-5.5"), get_available_model(&chat, "gpt-5.6-terra"), ]; + for preset in &mut presets { + preset.display_name = "Shared display name".to_string(); + } chat.model_catalog = Arc::new(ModelCatalog::new(presets.clone())); chat.open_model_popup(); chat.handle_key_event(KeyEvent::from(KeyCode::Down)); @@ -3448,6 +3451,7 @@ async fn model_picker_refresh_preserves_highlight() { } let before = render_bottom_popup(&chat, /*width*/ 80); presets.reverse(); + presets[0].display_name = "Renamed model".to_string(); if remove_selected { presets.remove(/*index*/ 0); } diff --git a/codex-rs/tui/src/chatwidget/tests/status_and_layout.rs b/codex-rs/tui/src/chatwidget/tests/status_and_layout.rs index 94e2154536..34b88157e6 100644 --- a/codex-rs/tui/src/chatwidget/tests/status_and_layout.rs +++ b/codex-rs/tui/src/chatwidget/tests/status_and_layout.rs @@ -4022,7 +4022,10 @@ async fn terminal_title_model_updates_on_model_change_without_manual_refresh() { chat.local_settings.tui.terminal_title = Some(vec!["model".to_string()]); chat.refresh_terminal_title(); - assert_eq!(chat.last_terminal_title, Some("gpt-5.4".to_string())); + assert_chatwidget_snapshot!( + "terminal_title_model_display_name", + chat.last_terminal_title.as_deref().expect("terminal title") + ); chat.set_model("gpt-5.2"); diff --git a/codex-rs/tui/src/chatwidget/tests/status_command_tests.rs b/codex-rs/tui/src/chatwidget/tests/status_command_tests.rs index 0775d2c81a..a6036045ea 100644 --- a/codex-rs/tui/src/chatwidget/tests/status_command_tests.rs +++ b/codex-rs/tui/src/chatwidget/tests/status_command_tests.rs @@ -102,7 +102,7 @@ async fn status_command_uses_catalog_default_reasoning_when_config_empty() { other => panic!("expected status output, got {other:?}"), }; assert!( - rendered.contains("gpt-5.5 (reasoning medium, summaries auto)"), + rendered.contains("GPT-5.5 (reasoning medium, summaries auto)"), "expected /status to render the catalog default reasoning effort, got: {rendered}" ); } diff --git a/codex-rs/tui/src/history_cell/session.rs b/codex-rs/tui/src/history_cell/session.rs index 4af9a17fee..02d9edc938 100644 --- a/codex-rs/tui/src/history_cell/session.rs +++ b/codex-rs/tui/src/history_cell/session.rs @@ -130,6 +130,7 @@ pub(crate) fn new_session_info( config: &Config, local_settings: &crate::local_settings::LocalSettings, requested_model: &str, + model_display_name: &str, session: &ThreadSessionState, is_first_event: bool, tooltip_override: Option, @@ -138,7 +139,7 @@ pub(crate) fn new_session_info( ) -> SessionInfoCell { // Header box rendered as history (so it appears at the very top) let header = SessionHeaderHistoryCell::new( - session.model.clone(), + model_display_name.to_string(), session.reasoning_effort.clone(), show_fast_status, config.cwd.to_path_buf(), @@ -227,6 +228,7 @@ pub(crate) fn has_yolo_permissions( } ) } +/// Session banner with a model label already resolved for presentation by its caller. #[derive(Debug)] pub(crate) struct SessionHeaderHistoryCell { version: &'static str, @@ -266,7 +268,7 @@ impl SessionHeaderHistoryCell { ) -> Self { Self { version, - model: crate::model_catalog::model_display_name(&model).to_string(), + model, model_style, reasoning_effort, show_fast_status, diff --git a/codex-rs/tui/src/history_cell/tests.rs b/codex-rs/tui/src/history_cell/tests.rs index c2399a1028..ca0c58b558 100644 --- a/codex-rs/tui/src/history_cell/tests.rs +++ b/codex-rs/tui/src/history_cell/tests.rs @@ -730,6 +730,7 @@ async fn session_info_uses_availability_nux_tooltip_override() { &config, &crate::local_settings::LocalSettings::from(&config), "gpt-5", + "gpt-5", &session_configured_event("gpt-5"), /*is_first_event*/ false, Some("Model just became available".to_string()), @@ -753,6 +754,7 @@ async fn session_info_availability_nux_tooltip_snapshot() { &config, &crate::local_settings::LocalSettings::from(&config), "gpt-5", + "gpt-5", &session_configured_event("gpt-5"), /*is_first_event*/ false, Some("Model just became available".to_string()), @@ -771,6 +773,7 @@ async fn session_info_first_event_suppresses_tooltips_and_nux() { &config, &crate::local_settings::LocalSettings::from(&config), "gpt-5", + "gpt-5", &session_configured_event("gpt-5"), /*is_first_event*/ true, Some("Model just became available".to_string()), @@ -791,6 +794,7 @@ async fn session_info_hides_tooltips_when_disabled() { &config, &crate::local_settings::LocalSettings::from(&config), "gpt-5", + "gpt-5", &session_configured_event("gpt-5"), /*is_first_event*/ false, Some("Model just became available".to_string()), diff --git a/codex-rs/tui/src/model_catalog.rs b/codex-rs/tui/src/model_catalog.rs index 6b89c9aeb0..6f8a4e4ad9 100644 --- a/codex-rs/tui/src/model_catalog.rs +++ b/codex-rs/tui/src/model_catalog.rs @@ -37,4 +37,12 @@ impl ModelCatalog { pub(crate) fn try_list_models(&self) -> Result, Infallible> { Ok(self.models.clone()) } + + pub(crate) fn display_name<'a>(&'a self, model: &'a str) -> &'a str { + self.models + .iter() + .find(|preset| preset.model == model) + .map(|preset| preset.display_name.as_str()) + .unwrap_or_else(|| model_display_name(model)) + } } diff --git a/codex-rs/tui/src/snapshots/codex_tui__app_server_session__tests__resumed_plan_mode.snap b/codex-rs/tui/src/snapshots/codex_tui__app_server_session__tests__resumed_plan_mode.snap index 048a6f0f20..fa1f7e7374 100644 --- a/codex-rs/tui/src/snapshots/codex_tui__app_server_session__tests__resumed_plan_mode.snap +++ b/codex-rs/tui/src/snapshots/codex_tui__app_server_session__tests__resumed_plan_mode.snap @@ -4,4 +4,4 @@ expression: "crate::chatwidget::tests::helpers::render_bottom_popup(&chat, 40)" --- › Ask Codex to do anything - gpt-5.4 default · /tmp/pr… Plan mode + GPT-5.4 default · /tmp/pr… Plan mode