use serde::Deserialize;
use std::collections::HashMap;
#[derive(Debug, Clone, Deserialize, Default)]
pub struct RunStartEvent {
#[serde(default)]
pub run_id: String,
#[serde(default)]
pub thread_id: String,
}
#[derive(Debug, Clone, Deserialize, Default)]
pub struct RunEndEvent {
#[serde(default)]
pub run_id: String,
#[serde(default)]
pub thread_id: String,
}
#[derive(Debug, Clone, Deserialize, Default)]
pub struct MessageChunkEvent {
#[serde(default)]
pub content: String,
#[serde(default)]
pub id: String,
}
#[derive(Debug, Clone, Deserialize, Default)]
pub struct ToolStartEvent {
#[serde(default)]
pub id: String,
#[serde(default)]
pub name: String,
#[serde(default)]
pub args: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Deserialize, Default)]
pub struct ToolEndEvent {
#[serde(default)]
pub id: String,
#[serde(default)]
pub name: String,
#[serde(default)]
pub result: String,
#[serde(default)]
pub error: bool,
}
#[derive(Debug, Clone, Deserialize, Default)]
pub struct SubagentStartEvent {
#[serde(default)]
pub id: String,
#[serde(default)]
pub agent_name: String,
}
#[derive(Debug, Clone, Deserialize, Default)]
pub struct SubagentEndEvent {
#[serde(default)]
pub id: String,
#[serde(default)]
pub agent_name: String,
#[serde(default)]
pub error: bool,
}
#[derive(Debug, Clone, Deserialize, Default)]
pub struct HitlInterruptEvent {
#[serde(default)]
pub id: String,
#[serde(default)]
pub action_name: String,
#[serde(default)]
pub action_args: HashMap<String, serde_json::Value>,
#[serde(default)]
pub description: String,
}
#[derive(Debug, Clone, Deserialize, Default)]
pub struct ErrorEvent {
#[serde(default)]
pub message: String,
#[serde(default)]
pub error_code: String,
}
#[derive(Debug, Clone, Deserialize, Default)]
pub struct CancelledEvent {
#[serde(default)]
pub reason: String,
}
#[derive(Debug, Clone, Default)]
pub struct HeartbeatEvent;
#[derive(Debug, Clone)]
pub enum StreamEvent {
RunStart(RunStartEvent),
RunEnd(RunEndEvent),
MessageChunk(MessageChunkEvent),
ToolStart(ToolStartEvent),
ToolEnd(ToolEndEvent),
SubagentStart(SubagentStartEvent),
SubagentEnd(SubagentEndEvent),
HitlInterrupt(HitlInterruptEvent),
Error(ErrorEvent),
Cancelled(CancelledEvent),
Heartbeat,
}