use std::path::PathBuf;
use std::time::Duration;
#[derive(Debug, Clone)]
pub enum TurnEvent {
TextDelta(String),
ReasoningDelta(String),
ToolCallStreaming { name: String, hint: String },
ToolCallStarted {
id: String,
name: String,
arguments: String,
},
ToolBatchStarted {
batch_id: String,
calls: Vec<ToolBatchCall>,
},
ToolBatchCompleted {
batch_id: String,
ok: usize,
total: usize,
elapsed_ms: u64,
},
ToolOutputChunk {
call_id: String,
chunk: String,
},
ToolCallResult {
call_id: String,
name: String,
output: String,
success: bool,
duration: Duration,
},
Error(String),
Warning(String),
TokenUsage {
prompt_tokens: usize,
completion_tokens: usize,
total_tokens: usize,
cached_tokens: usize,
},
ContextStats {
system_tokens: usize,
sent_tokens: usize,
dropped_tokens: usize,
working_set_tokens: usize,
total_messages: usize,
},
WorkingDirChanged(PathBuf),
ApprovalRequested {
tool_name: String,
reason: String,
call: crate::tool::ToolCall,
messages: Vec<crate::conversation::message::Message>,
},
}
#[derive(Debug, Clone, serde::Serialize)]
pub struct ToolBatchCall {
pub id: String,
pub name: String,
pub arguments: String,
}
#[derive(Debug)]
pub enum TurnResult {
Responded {
text: String,
tokens: usize,
truncated: bool,
},
UsedTools {
text: Option<String>,
tool_count: usize,
tokens: usize,
},
Failed(String),
Cancelled,
}
impl TurnResult {
pub fn is_failed(&self) -> bool {
matches!(self, TurnResult::Failed(_))
}
}