use std::collections::HashMap;
use std::sync::Arc;
use tokio::sync::Mutex;
use crate::cm_mcp::McpClientSession;
use crate::cm_mcp::parse_mcp_openai_tool_name;
pub struct McpTurnSessions {
pub tool_timeout_secs: u64,
sessions: HashMap<String, Arc<Mutex<McpClientSession>>>,
}
impl McpTurnSessions {
pub fn new(
tool_timeout_secs: u64,
sessions: HashMap<String, Arc<Mutex<McpClientSession>>>,
) -> Self {
Self {
tool_timeout_secs,
sessions,
}
}
pub fn session_for_openai_tool(
&self,
openai_name: &str,
) -> Option<(Arc<Mutex<McpClientSession>>, String)> {
let (slug, remote) = parse_mcp_openai_tool_name(openai_name)?;
let sess = self.sessions.get(&slug)?;
Some((Arc::clone(sess), remote))
}
}
pub type McpTurnHandle = Arc<McpTurnSessions>;