use async_trait::async_trait;
use crate::event_emitter::EventEmitter;
use crate::execution_context::ExecutionContext;
use crate::tool_types::{ToolCall, ToolDefinition};
use crate::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()
}
}