use async_trait::async_trait;
use crate::runtime::event_emitter::EventEmitter;
use crate::runtime::execution_context::ExecutionContext;
use crate::runtime::tool_types::{ToolCall, ToolDefinition};
use crate::runtime::typed_id::SessionId;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct FinalizedToolCallRejection {
pub tool_call_id: String,
pub error: String,
}
pub struct FinalizedToolCallsContext<'a> {
pub event_emitter: &'a dyn EventEmitter,
pub session_id: SessionId,
pub execution_context: &'a ExecutionContext,
pub tool_definitions: &'a [ToolDefinition],
pub iteration: u32,
}
#[async_trait]
pub trait FinalizedToolCallsHook: Send + Sync {
async fn apply(&self, context: &FinalizedToolCallsContext<'_>, calls: &mut [ToolCall]);
async fn apply_with_rejections(
&self,
context: &FinalizedToolCallsContext<'_>,
calls: &mut [ToolCall],
) -> Vec<FinalizedToolCallRejection> {
self.apply(context, calls).await;
Vec::new()
}
}