use crate::message::AgentMessage;
pub type AgentEventSink = Box<dyn Fn(AgentEvent) + Send + Sync>;
#[non_exhaustive]
#[derive(Debug)]
pub enum AgentEvent {
AgentStart,
AgentEnd { messages: Vec<AgentMessage> },
TurnStart,
TurnEnd {
message: AgentMessage,
tool_results: Vec<opi_ai::message::ToolResultMessage>,
},
MessageStart { message: AgentMessage },
MessageUpdate {
message: AgentMessage,
assistant_event: Box<opi_ai::stream::AssistantStreamEvent>,
},
MessageEnd { message: AgentMessage },
ToolExecutionStart {
tool_call_id: String,
tool_name: String,
args: serde_json::Value,
},
ToolExecutionUpdate {
tool_call_id: String,
tool_name: String,
args: serde_json::Value,
partial_result: serde_json::Value,
},
ToolExecutionEnd {
tool_call_id: String,
tool_name: String,
result: serde_json::Value,
is_error: bool,
},
QueueUpdate {
steering: Vec<String>,
follow_up: Vec<String>,
},
}