core/src/agent/agent_resolver.rs
36 lines
use crate::function_tool::FunctionCallError;use crate::session::session::Session;use crate::session::turn_context::TurnContext;use codex_protocol::ThreadId;use std::sync::Arc;/// Resolves a single tool-facing agent target to a thread id.pub(crate) async fn resolve_agent_target( session: &Arc<Session>, turn: &Arc<TurnContext>, target: &str,) -> Result<ThreadId, FunctionCallError> { register_session_root(session, turn); if let Ok(thread_id) = ThreadId::from_string(target) { return Ok(thread_id); } session .services .agent_control .resolve_agent_reference(session.thread_id, &turn.session_source, target) .await .map_err(|err| match err { codex_protocol::error::CodexErr::UnsupportedOperation(message) => { FunctionCallError::RespondToModel(message) } other => FunctionCallError::RespondToModel(other.to_string()), })}fn register_session_root(session: &Arc<Session>, turn: &Arc<TurnContext>) { session .services .agent_control .register_session_root(session.thread_id, turn.parent_thread_id);}