pub async fn execute_turn<F, Fut>( agent: Arc<Mutex<Agent>>, prompt: String, cancel: CancellationToken, attribution: TurnAttribution, on_event: F, ) -> Result<TurnOutcome, TurnError>where F: Fn(TurnEvent) -> Fut + Send + 'static, Fut: Future<Output = ()> + Send,