Skip to main content

cli_agents/
events.rs

1use crate::types::{CliName, RunResult};
2use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4
5/// Unified stream event emitted by all adapters.
6#[derive(Debug, Clone, Serialize, Deserialize)]
7#[serde(tag = "type", rename_all = "snake_case")]
8#[non_exhaustive]
9pub enum StreamEvent {
10    /// Incremental text output.
11    TextDelta { text: String },
12
13    /// Incremental reasoning/thinking output.
14    ThinkingDelta { text: String },
15
16    /// A tool call has started.
17    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    /// A tool call has completed.
27    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    /// A full agent turn has completed.
38    TurnEnd,
39
40    /// An error or warning.
41    Error {
42        message: String,
43        #[serde(skip_serializing_if = "Option::is_none")]
44        severity: Option<Severity>,
45    },
46
47    /// The run has completed. Contains the final result.
48    Done { result: RunResult },
49
50    /// Escape hatch for provider-specific events.
51    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}