1use crate::types::{CliName, RunResult};
2use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7#[serde(tag = "type", rename_all = "snake_case")]
8#[non_exhaustive]
9pub enum StreamEvent {
10 TextDelta { text: String },
12
13 ThinkingDelta { text: String },
15
16 ToolStart {
18 #[serde(rename = "toolName")]
19 tool_name: String,
20 #[serde(rename = "toolId")]
21 tool_id: String,
22 #[serde(skip_serializing_if = "Option::is_none")]
23 args: Option<HashMap<String, serde_json::Value>>,
24 },
25
26 ToolEnd {
28 #[serde(rename = "toolId")]
29 tool_id: String,
30 success: bool,
31 #[serde(skip_serializing_if = "Option::is_none")]
32 output: Option<String>,
33 #[serde(skip_serializing_if = "Option::is_none")]
34 error: Option<String>,
35 },
36
37 TurnEnd,
39
40 Error {
42 message: String,
43 #[serde(skip_serializing_if = "Option::is_none")]
44 severity: Option<Severity>,
45 },
46
47 Done { result: RunResult },
49
50 Raw {
52 provider: CliName,
53 event: serde_json::Value,
54 },
55}
56
57#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
58#[serde(rename_all = "lowercase")]
59#[non_exhaustive]
60pub enum Severity {
61 Warning,
62 Error,
63}