diff --git a/codex-rs/app-server-protocol/schema/json/EventMsg.json b/codex-rs/app-server-protocol/schema/json/EventMsg.json index ad420594b1..1a2a1078e8 100644 --- a/codex-rs/app-server-protocol/schema/json/EventMsg.json +++ b/codex-rs/app-server-protocol/schema/json/EventMsg.json @@ -3015,16 +3015,10 @@ "description": "Identifier for the collab tool call.", "type": "string" }, - "model": { - "type": "string" - }, "prompt": { "description": "Initial prompt sent to the agent. Can be empty to prevent CoT leaking at the beginning.", "type": "string" }, - "reasoning_effort": { - "$ref": "#/definitions/ReasoningEffort" - }, "sender_thread_id": { "allOf": [ { @@ -3043,9 +3037,7 @@ }, "required": [ "call_id", - "model", "prompt", - "reasoning_effort", "sender_thread_id", "type" ], @@ -3505,6 +3497,24 @@ "description": "Identifier for the collab tool call.", "type": "string" }, + "model": { + "description": "Model configured for the receiver agent when available.", + "type": [ + "string", + "null" + ] + }, + "reasoning_effort": { + "anyOf": [ + { + "$ref": "#/definitions/ReasoningEffort" + }, + { + "type": "null" + } + ], + "description": "Reasoning effort configured for the receiver agent when available." + }, "receiver_agent_nickname": { "description": "Optional nickname assigned to the receiver agent.", "type": [ @@ -9248,16 +9258,10 @@ "description": "Identifier for the collab tool call.", "type": "string" }, - "model": { - "type": "string" - }, "prompt": { "description": "Initial prompt sent to the agent. Can be empty to prevent CoT leaking at the beginning.", "type": "string" }, - "reasoning_effort": { - "$ref": "#/definitions/ReasoningEffort" - }, "sender_thread_id": { "allOf": [ { @@ -9276,9 +9280,7 @@ }, "required": [ "call_id", - "model", "prompt", - "reasoning_effort", "sender_thread_id", "type" ], @@ -9738,6 +9740,24 @@ "description": "Identifier for the collab tool call.", "type": "string" }, + "model": { + "description": "Model configured for the receiver agent when available.", + "type": [ + "string", + "null" + ] + }, + "reasoning_effort": { + "anyOf": [ + { + "$ref": "#/definitions/ReasoningEffort" + }, + { + "type": "null" + } + ], + "description": "Reasoning effort configured for the receiver agent when available." + }, "receiver_agent_nickname": { "description": "Optional nickname assigned to the receiver agent.", "type": [ diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json index 3e88ff54d1..37017ee318 100644 --- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json +++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json @@ -4378,16 +4378,10 @@ "description": "Identifier for the collab tool call.", "type": "string" }, - "model": { - "type": "string" - }, "prompt": { "description": "Initial prompt sent to the agent. Can be empty to prevent CoT leaking at the beginning.", "type": "string" }, - "reasoning_effort": { - "$ref": "#/definitions/v2/ReasoningEffort" - }, "sender_thread_id": { "allOf": [ { @@ -4406,9 +4400,7 @@ }, "required": [ "call_id", - "model", "prompt", - "reasoning_effort", "sender_thread_id", "type" ], @@ -4868,6 +4860,24 @@ "description": "Identifier for the collab tool call.", "type": "string" }, + "model": { + "description": "Model configured for the receiver agent when available.", + "type": [ + "string", + "null" + ] + }, + "reasoning_effort": { + "anyOf": [ + { + "$ref": "#/definitions/v2/ReasoningEffort" + }, + { + "type": "null" + } + ], + "description": "Reasoning effort configured for the receiver agent when available." + }, "receiver_agent_nickname": { "description": "Optional nickname assigned to the receiver agent.", "type": [ diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json index 704e6d12f7..df8306ebda 100644 --- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json +++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json @@ -6180,16 +6180,10 @@ "description": "Identifier for the collab tool call.", "type": "string" }, - "model": { - "type": "string" - }, "prompt": { "description": "Initial prompt sent to the agent. Can be empty to prevent CoT leaking at the beginning.", "type": "string" }, - "reasoning_effort": { - "$ref": "#/definitions/ReasoningEffort" - }, "sender_thread_id": { "allOf": [ { @@ -6208,9 +6202,7 @@ }, "required": [ "call_id", - "model", "prompt", - "reasoning_effort", "sender_thread_id", "type" ], @@ -6670,6 +6662,24 @@ "description": "Identifier for the collab tool call.", "type": "string" }, + "model": { + "description": "Model configured for the receiver agent when available.", + "type": [ + "string", + "null" + ] + }, + "reasoning_effort": { + "anyOf": [ + { + "$ref": "#/definitions/ReasoningEffort" + }, + { + "type": "null" + } + ], + "description": "Reasoning effort configured for the receiver agent when available." + }, "receiver_agent_nickname": { "description": "Optional nickname assigned to the receiver agent.", "type": [ diff --git a/codex-rs/app-server-protocol/schema/typescript/CollabAgentSpawnBeginEvent.ts b/codex-rs/app-server-protocol/schema/typescript/CollabAgentSpawnBeginEvent.ts index 5f86922442..a86598e20c 100644 --- a/codex-rs/app-server-protocol/schema/typescript/CollabAgentSpawnBeginEvent.ts +++ b/codex-rs/app-server-protocol/schema/typescript/CollabAgentSpawnBeginEvent.ts @@ -1,7 +1,6 @@ // GENERATED CODE! DO NOT MODIFY BY HAND! // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { ReasoningEffort } from "./ReasoningEffort"; import type { ThreadId } from "./ThreadId"; export type CollabAgentSpawnBeginEvent = { @@ -17,4 +16,4 @@ sender_thread_id: ThreadId, * Initial prompt sent to the agent. Can be empty to prevent CoT leaking at the * beginning. */ -prompt: string, model: string, reasoning_effort: ReasoningEffort, }; +prompt: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/CollabResumeEndEvent.ts b/codex-rs/app-server-protocol/schema/typescript/CollabResumeEndEvent.ts index caf970ec28..51f4499e0e 100644 --- a/codex-rs/app-server-protocol/schema/typescript/CollabResumeEndEvent.ts +++ b/codex-rs/app-server-protocol/schema/typescript/CollabResumeEndEvent.ts @@ -2,6 +2,7 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { AgentStatus } from "./AgentStatus"; +import type { ReasoningEffort } from "./ReasoningEffort"; import type { ThreadId } from "./ThreadId"; export type CollabResumeEndEvent = { @@ -25,6 +26,14 @@ receiver_agent_nickname?: string | null, * Optional role assigned to the receiver agent. */ receiver_agent_role?: string | null, +/** + * Model configured for the receiver agent when available. + */ +model?: string | null, +/** + * Reasoning effort configured for the receiver agent when available. + */ +reasoning_effort?: ReasoningEffort | null, /** * Last known status of the receiver agent reported to the sender agent after * resume. diff --git a/codex-rs/exec/tests/event_processor_with_json_output.rs b/codex-rs/exec/tests/event_processor_with_json_output.rs index 082a99905f..7705e81ed1 100644 --- a/codex-rs/exec/tests/event_processor_with_json_output.rs +++ b/codex-rs/exec/tests/event_processor_with_json_output.rs @@ -548,8 +548,6 @@ fn collab_spawn_begin_and_end_emit_item_events() { call_id: "call-10".to_string(), sender_thread_id, prompt: prompt.clone(), - model: "gpt-5".to_string(), - reasoning_effort: ReasoningEffortConfig::default(), }), ); let begin_events = ep.collect_thread_events(&begin); diff --git a/codex-rs/tui/src/chatwidget.rs b/codex-rs/tui/src/chatwidget.rs index 7f3831a404..fa552cc4c1 100644 --- a/codex-rs/tui/src/chatwidget.rs +++ b/codex-rs/tui/src/chatwidget.rs @@ -580,7 +580,6 @@ pub(crate) struct ChatWidget { // Latest completed user-visible Codex output that `/copy` should place on the clipboard. last_copyable_output: Option, running_commands: HashMap, - pending_collab_spawn_requests: HashMap, suppressed_exec_calls: HashSet, skills_all: Vec, skills_initial_state: Option>, @@ -3257,7 +3256,6 @@ impl ChatWidget { plan_stream_controller: None, last_copyable_output: None, running_commands: HashMap::new(), - pending_collab_spawn_requests: HashMap::new(), suppressed_exec_calls: HashSet::new(), last_unified_wait: None, unified_exec_wait_streak: None, @@ -3442,7 +3440,6 @@ impl ChatWidget { plan_stream_controller: None, last_copyable_output: None, running_commands: HashMap::new(), - pending_collab_spawn_requests: HashMap::new(), suppressed_exec_calls: HashSet::new(), last_unified_wait: None, unified_exec_wait_streak: None, @@ -3619,7 +3616,6 @@ impl ChatWidget { plan_stream_controller: None, last_copyable_output: None, running_commands: HashMap::new(), - pending_collab_spawn_requests: HashMap::new(), suppressed_exec_calls: HashSet::new(), last_unified_wait: None, unified_exec_wait_streak: None, @@ -5020,23 +5016,9 @@ impl ChatWidget { } EventMsg::ExitedReviewMode(review) => self.on_exited_review_mode(review), EventMsg::ContextCompacted(_) => self.on_agent_message("Context compacted".to_owned()), - EventMsg::CollabAgentSpawnBegin(CollabAgentSpawnBeginEvent { - call_id, - model, - reasoning_effort, - .. - }) => { - self.pending_collab_spawn_requests.insert( - call_id, - multi_agents::SpawnRequestSummary { - model, - reasoning_effort, - }, - ); - } + EventMsg::CollabAgentSpawnBegin(CollabAgentSpawnBeginEvent { .. }) => {} EventMsg::CollabAgentSpawnEnd(ev) => { - let spawn_request = self.pending_collab_spawn_requests.remove(&ev.call_id); - self.on_collab_event(multi_agents::spawn_end(ev, spawn_request.as_ref())); + self.on_collab_event(multi_agents::spawn_end(ev)); } EventMsg::CollabAgentInteractionBegin(_) => {} EventMsg::CollabAgentInteractionEnd(ev) => { diff --git a/codex-rs/tui/src/chatwidget/tests.rs b/codex-rs/tui/src/chatwidget/tests.rs index e7a0ac1442..c732a2b9c8 100644 --- a/codex-rs/tui/src/chatwidget/tests.rs +++ b/codex-rs/tui/src/chatwidget/tests.rs @@ -1841,7 +1841,6 @@ async fn make_chatwidget_manual( plan_stream_controller: None, last_copyable_output: None, running_commands: HashMap::new(), - pending_collab_spawn_requests: HashMap::new(), suppressed_exec_calls: HashSet::new(), skills_all: Vec::new(), skills_initial_state: None, @@ -2027,8 +2026,6 @@ async fn collab_spawn_end_shows_requested_model_and_effort() { call_id: "call-spawn".to_string(), sender_thread_id, prompt: "Explore the repo".to_string(), - model: "gpt-5".to_string(), - reasoning_effort: ReasoningEffortConfig::High, }), }); chat.handle_codex_event(Event { diff --git a/codex-rs/tui/src/multi_agents.rs b/codex-rs/tui/src/multi_agents.rs index 00a1c0429c..8ff2020c85 100644 --- a/codex-rs/tui/src/multi_agents.rs +++ b/codex-rs/tui/src/multi_agents.rs @@ -171,10 +171,7 @@ fn next_agent_word_motion_fallback( false } -pub(crate) fn spawn_end( - ev: CollabAgentSpawnEndEvent, - spawn_request: Option<&SpawnRequestSummary>, -) -> PlainHistoryCell { +pub(crate) fn spawn_end(ev: CollabAgentSpawnEndEvent) -> PlainHistoryCell { let CollabAgentSpawnEndEvent { call_id: _, sender_thread_id: _, @@ -182,9 +179,14 @@ pub(crate) fn spawn_end( new_agent_nickname, new_agent_role, prompt, + model, + reasoning_effort, status: _, - .. } = ev; + let spawn_summary = SpawnRequestSummary { + model, + reasoning_effort, + }; let title = match new_thread_id { Some(thread_id) => title_with_agent( @@ -194,7 +196,7 @@ pub(crate) fn spawn_end( nickname: new_agent_nickname.as_deref(), role: new_agent_role.as_deref(), }, - spawn_request, + Some(&spawn_summary), ), None => title_text("Agent spawn failed"), }; @@ -327,6 +329,7 @@ pub(crate) fn resume_end(ev: CollabResumeEndEvent) -> PlainHistoryCell { receiver_agent_nickname, receiver_agent_role, status, + .. } = ev; collab_event( @@ -594,23 +597,17 @@ mod tests { let bob_id = ThreadId::from_string("00000000-0000-0000-0000-000000000003") .expect("valid bob thread id"); - let spawn = spawn_end( - CollabAgentSpawnEndEvent { - call_id: "call-spawn".to_string(), - sender_thread_id, - new_thread_id: Some(robie_id), - new_agent_nickname: Some("Robie".to_string()), - new_agent_role: Some("explorer".to_string()), - prompt: "Compute 11! and reply with just the integer result.".to_string(), - model: "gpt-5".to_string(), - reasoning_effort: ReasoningEffortConfig::High, - status: AgentStatus::PendingInit, - }, - Some(&SpawnRequestSummary { - model: "gpt-5".to_string(), - reasoning_effort: ReasoningEffortConfig::High, - }), - ); + let spawn = spawn_end(CollabAgentSpawnEndEvent { + call_id: "call-spawn".to_string(), + sender_thread_id, + new_thread_id: Some(robie_id), + new_agent_nickname: Some("Robie".to_string()), + new_agent_role: Some("explorer".to_string()), + prompt: "Compute 11! and reply with just the integer result.".to_string(), + model: "gpt-5".to_string(), + reasoning_effort: ReasoningEffortConfig::High, + status: AgentStatus::PendingInit, + }); let send = interaction_end(CollabAgentInteractionEndEvent { call_id: "call-send".to_string(), @@ -732,23 +729,17 @@ mod tests { .expect("valid sender thread id"); let robie_id = ThreadId::from_string("00000000-0000-0000-0000-000000000002") .expect("valid robie thread id"); - let cell = spawn_end( - CollabAgentSpawnEndEvent { - call_id: "call-spawn".to_string(), - sender_thread_id, - new_thread_id: Some(robie_id), - new_agent_nickname: Some("Robie".to_string()), - new_agent_role: Some("explorer".to_string()), - prompt: String::new(), - model: "gpt-5".to_string(), - reasoning_effort: ReasoningEffortConfig::High, - status: AgentStatus::PendingInit, - }, - Some(&SpawnRequestSummary { - model: "gpt-5".to_string(), - reasoning_effort: ReasoningEffortConfig::High, - }), - ); + let cell = spawn_end(CollabAgentSpawnEndEvent { + call_id: "call-spawn".to_string(), + sender_thread_id, + new_thread_id: Some(robie_id), + new_agent_nickname: Some("Robie".to_string()), + new_agent_role: Some("explorer".to_string()), + prompt: String::new(), + model: "gpt-5".to_string(), + reasoning_effort: ReasoningEffortConfig::High, + status: AgentStatus::PendingInit, + }); let lines = cell.display_lines(200); let title = &lines[0];