diff --git a/codex-rs/core/src/codex.rs b/codex-rs/core/src/codex.rs index c82c50e45d..f77e6a40c3 100644 --- a/codex-rs/core/src/codex.rs +++ b/codex-rs/core/src/codex.rs @@ -505,6 +505,7 @@ impl Session { msg: EventMsg::SessionConfigured(SessionConfiguredEvent { session_id: conversation_id, model, + reasoning_effort: model_reasoning_effort, history_log_id, history_entry_count, initial_messages, diff --git a/codex-rs/exec/src/event_processor_with_human_output.rs b/codex-rs/exec/src/event_processor_with_human_output.rs index c80117706b..3856e05bf5 100644 --- a/codex-rs/exec/src/event_processor_with_human_output.rs +++ b/codex-rs/exec/src/event_processor_with_human_output.rs @@ -520,6 +520,7 @@ impl EventProcessor for EventProcessorWithHumanOutput { let SessionConfiguredEvent { session_id: conversation_id, model, + reasoning_effort: _, history_log_id: _, history_entry_count: _, initial_messages: _, diff --git a/codex-rs/mcp-server/src/codex_message_processor.rs b/codex-rs/mcp-server/src/codex_message_processor.rs index 858bb99c24..b7b2b0f95f 100644 --- a/codex-rs/mcp-server/src/codex_message_processor.rs +++ b/codex-rs/mcp-server/src/codex_message_processor.rs @@ -593,6 +593,7 @@ impl CodexMessageProcessor { let response = NewConversationResponse { conversation_id, model: session_configured.model, + reasoning_effort: session_configured.reasoning_effort, rollout_path: session_configured.rollout_path, }; self.outgoing.send_response(request_id, response).await; diff --git a/codex-rs/mcp-server/src/outgoing_message.rs b/codex-rs/mcp-server/src/outgoing_message.rs index 939d986aec..04e99516ce 100644 --- a/codex-rs/mcp-server/src/outgoing_message.rs +++ b/codex-rs/mcp-server/src/outgoing_message.rs @@ -258,6 +258,7 @@ pub(crate) struct OutgoingError { mod tests { use codex_core::protocol::EventMsg; use codex_core::protocol::SessionConfiguredEvent; + use codex_protocol::config_types::ReasoningEffort; use codex_protocol::mcp_protocol::ConversationId; use codex_protocol::mcp_protocol::LoginChatGptCompleteNotification; use pretty_assertions::assert_eq; @@ -279,6 +280,7 @@ mod tests { msg: EventMsg::SessionConfigured(SessionConfiguredEvent { session_id: conversation_id, model: "gpt-4o".to_string(), + reasoning_effort: ReasoningEffort::default(), history_log_id: 1, history_entry_count: 1000, initial_messages: None, @@ -312,6 +314,7 @@ mod tests { let session_configured_event = SessionConfiguredEvent { session_id: conversation_id, model: "gpt-4o".to_string(), + reasoning_effort: ReasoningEffort::default(), history_log_id: 1, history_entry_count: 1000, initial_messages: None, @@ -342,6 +345,7 @@ mod tests { "msg": { "session_id": session_configured_event.session_id, "model": session_configured_event.model, + "reasoning_effort": session_configured_event.reasoning_effort, "history_log_id": session_configured_event.history_log_id, "history_entry_count": session_configured_event.history_entry_count, "type": "session_configured", diff --git a/codex-rs/mcp-server/tests/suite/codex_message_processor_flow.rs b/codex-rs/mcp-server/tests/suite/codex_message_processor_flow.rs index 7737c49af3..49d9ab1807 100644 --- a/codex-rs/mcp-server/tests/suite/codex_message_processor_flow.rs +++ b/codex-rs/mcp-server/tests/suite/codex_message_processor_flow.rs @@ -90,6 +90,7 @@ async fn test_codex_jsonrpc_conversation_flow() { let NewConversationResponse { conversation_id, model, + reasoning_effort: _, rollout_path: _, } = new_conv_resp; assert_eq!(model, "mock-model"); diff --git a/codex-rs/mcp-server/tests/suite/create_conversation.rs b/codex-rs/mcp-server/tests/suite/create_conversation.rs index 5071868c85..1b62d01d46 100644 --- a/codex-rs/mcp-server/tests/suite/create_conversation.rs +++ b/codex-rs/mcp-server/tests/suite/create_conversation.rs @@ -59,6 +59,7 @@ async fn test_conversation_create_and_send_message_ok() { let NewConversationResponse { conversation_id, model, + reasoning_effort: _, rollout_path: _, } = to_response::(new_conv_resp) .expect("deserialize newConversation response"); diff --git a/codex-rs/protocol/src/mcp_protocol.rs b/codex-rs/protocol/src/mcp_protocol.rs index 26887aa59b..a382b8bc7a 100644 --- a/codex-rs/protocol/src/mcp_protocol.rs +++ b/codex-rs/protocol/src/mcp_protocol.rs @@ -217,6 +217,8 @@ pub struct NewConversationParams { pub struct NewConversationResponse { pub conversation_id: ConversationId, pub model: String, + /// Note this could be ignored by the model. + pub reasoning_effort: ReasoningEffort, pub rollout_path: PathBuf, } diff --git a/codex-rs/protocol/src/protocol.rs b/codex-rs/protocol/src/protocol.rs index 2eb3d1e808..e1a9920e78 100644 --- a/codex-rs/protocol/src/protocol.rs +++ b/codex-rs/protocol/src/protocol.rs @@ -1081,6 +1081,9 @@ pub struct SessionConfiguredEvent { /// Tell the client what model is being queried. pub model: String, + /// The effort the model is putting into reasoning about the user's request. + pub reasoning_effort: ReasoningEffortConfig, + /// Identifier of the history log file (inode on Unix, 0 otherwise). pub history_log_id: u64, @@ -1169,6 +1172,7 @@ mod tests { msg: EventMsg::SessionConfigured(SessionConfiguredEvent { session_id: conversation_id, model: "codex-mini-latest".to_string(), + reasoning_effort: ReasoningEffortConfig::default(), history_log_id: 0, history_entry_count: 0, initial_messages: None, diff --git a/codex-rs/tui/src/chatwidget/tests.rs b/codex-rs/tui/src/chatwidget/tests.rs index c148b8670b..dc1da26eb4 100644 --- a/codex-rs/tui/src/chatwidget/tests.rs +++ b/codex-rs/tui/src/chatwidget/tests.rs @@ -138,6 +138,7 @@ fn resumed_initial_messages_render_history() { let configured = codex_core::protocol::SessionConfiguredEvent { session_id: conversation_id, model: "test-model".to_string(), + reasoning_effort: ReasoningEffortConfig::default(), history_log_id: 0, history_entry_count: 0, initial_messages: Some(vec![ diff --git a/codex-rs/tui/src/history_cell.rs b/codex-rs/tui/src/history_cell.rs index b3b45774c1..8bfe9c277f 100644 --- a/codex-rs/tui/src/history_cell.rs +++ b/codex-rs/tui/src/history_cell.rs @@ -601,6 +601,7 @@ pub(crate) fn new_session_info( ) -> PlainHistoryCell { let SessionConfiguredEvent { model, + reasoning_effort: _, session_id: _, history_log_id: _, history_entry_count: _,