pub async fn run_agent_loop(
session: &mut Session,
initial_message: String,
event_tx: Sender<AgentEvent>,
llm: Arc<dyn LLMProvider>,
tools: Arc<dyn ToolExecutor>,
cancel_token: CancellationToken,
max_rounds: usize,
) -> Result<()>