Simplify settings update diffing logic

This commit is contained in:
Charles Cunningham
2026-02-17 17:21:05 -08:00
parent 8a4e7dab76
commit 2b225dcade
2 changed files with 18 additions and 31 deletions

View File

@@ -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("<personality_spec>")
)
})
})
});
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("<personality_spec>")
)
})
})
.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 {
&current_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() {

View File

@@ -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 {