use crate::config::MultiAgentV2Config; use crate::session::turn_context::TurnContext; use codex_protocol::config_types::MultiAgentMode; use codex_protocol::openai_models::ReasoningEffort; use codex_protocol::protocol::MultiAgentVersion; use codex_protocol::protocol::SessionSource; use codex_protocol::protocol::SubAgentSource; pub(super) fn usage_hint_text<'a>( turn_context: &'a TurnContext, session_source: &SessionSource, ) -> Option<&'a str> { if turn_context.multi_agent_version != MultiAgentVersion::V2 { return None; } let multi_agent_v2 = &turn_context.config.multi_agent_v2; configured_usage_hint_text_for_source(multi_agent_v2, session_source) } fn configured_usage_hint_text_for_source<'a>( multi_agent_v2: &'a MultiAgentV2Config, session_source: &SessionSource, ) -> Option<&'a str> { match session_source { SessionSource::SubAgent(SubAgentSource::ThreadSpawn { .. }) => { multi_agent_v2.subagent_usage_hint_text.as_deref() } SessionSource::Cli | SessionSource::VSCode | SessionSource::Exec | SessionSource::Mcp | SessionSource::Custom(_) | SessionSource::Unknown => multi_agent_v2.root_agent_usage_hint_text.as_deref(), SessionSource::Internal(_) | SessionSource::SubAgent(_) => None, } } pub(crate) fn effective_multi_agent_mode(turn_context: &TurnContext) -> Option { if turn_context.multi_agent_version != MultiAgentVersion::V2 { return None; } let multi_agent_mode = match turn_context.effective_reasoning_effort() { Some(ReasoningEffort::Ultra) => MultiAgentMode::Proactive, _ => MultiAgentMode::ExplicitRequestOnly, }; match &turn_context.session_source { SessionSource::SubAgent(SubAgentSource::ThreadSpawn { .. }) | SessionSource::Cli | SessionSource::VSCode | SessionSource::Exec | SessionSource::Mcp | SessionSource::Custom(_) | SessionSource::Unknown => Some(multi_agent_mode), SessionSource::Internal(_) | SessionSource::SubAgent(_) => None, } }