From 2b225dcadeb9c5155f8f9eaf811bc6a6a6578d73 Mon Sep 17 00:00:00 2001 From: Charles Cunningham Date: Tue, 17 Feb 2026 17:21:05 -0800 Subject: [PATCH] Simplify settings update diffing logic --- codex-rs/core/src/codex.rs | 43 ++++++++------------ codex-rs/core/src/context_manager/updates.rs | 6 +-- 2 files changed, 18 insertions(+), 31 deletions(-) diff --git a/codex-rs/core/src/codex.rs b/codex-rs/core/src/codex.rs index 5220f51221..02f047cdb6 100644 --- a/codex-rs/core/src/codex.rs +++ b/codex-rs/core/src/codex.rs @@ -3372,6 +3372,8 @@ mod handlers { use codex_protocol::config_types::Settings; use codex_protocol::dynamic_tools::DynamicToolResponse; use codex_protocol::mcp::RequestId as ProtocolRequestId; + use codex_protocol::models::ContentItem; + use codex_protocol::models::ResponseItem; use codex_protocol::user_input::UserInput; use codex_rmcp_client::ElicitationAction; use codex_rmcp_client::ElicitationResponse; @@ -3486,29 +3488,22 @@ mod handlers { // Rebase model-switch diffing on resume/fork model hydration so model-switch // updates reflect rollout history while other diffs (for example personality) still // use the real previous turn context. + update_items.retain(|item| !Session::is_model_switch_developer_message(item)); let model_switch_insert_index = update_items .iter() - .position(Session::is_model_switch_developer_message) - .or_else(|| { - update_items.iter().position(|item| { - let codex_protocol::models::ResponseItem::Message { - role, - content, - .. - } = item - else { - return false; - }; - role == "developer" - && content.iter().any(|content_item| { - matches!( - content_item, - codex_protocol::models::ContentItem::InputText { text } if text.starts_with("") - ) - }) - }) - }); - update_items.retain(|item| !Session::is_model_switch_developer_message(item)); + .position(|item| { + let ResponseItem::Message { role, content, .. } = item else { + return false; + }; + role == "developer" + && content.iter().any(|content_item| { + matches!( + content_item, + ContentItem::InputText { text } if text.starts_with("") + ) + }) + }) + .unwrap_or(update_items.len()); let mut previous_context_item_for_model_switch = previous_context_item.clone(); previous_context_item_for_model_switch.model = previous_model; @@ -3518,11 +3513,7 @@ mod handlers { ¤t_context_item, ) { - if let Some(index) = model_switch_insert_index { - update_items.insert(index, model_switch_item); - } else { - update_items.push(model_switch_item); - } + update_items.insert(model_switch_insert_index, model_switch_item); } } if !update_items.is_empty() { diff --git a/codex-rs/core/src/context_manager/updates.rs b/codex-rs/core/src/context_manager/updates.rs index f1044f1546..ee4af7eb7c 100644 --- a/codex-rs/core/src/context_manager/updates.rs +++ b/codex-rs/core/src/context_manager/updates.rs @@ -15,11 +15,7 @@ fn build_environment_update_item( } let cwd = (prev.cwd != next.cwd).then_some(&next.cwd); - let network = if prev.network != next.network { - next.network.as_ref() - } else { - prev.network.as_ref() - }; + let network = next.network.as_ref(); let shell = if next.shell.is_empty() { "unknown" } else {