synwire_core/agents/
streaming.rs1use crate::agents::usage::Usage;
4use crate::tools::ToolOutput;
5use serde::{Deserialize, Serialize};
6use serde_json::Value;
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
10#[serde(tag = "type")]
11#[non_exhaustive]
12pub enum AgentEvent {
13 #[serde(rename = "text_delta")]
15 TextDelta {
16 content: String,
18 },
19
20 #[serde(rename = "tool_call_start")]
22 ToolCallStart {
23 id: String,
25 name: String,
27 },
28
29 #[serde(rename = "tool_call_delta")]
31 ToolCallDelta {
32 id: String,
34 arguments_delta: String,
36 },
37
38 #[serde(rename = "tool_call_end")]
40 ToolCallEnd {
41 id: String,
43 },
44
45 #[serde(rename = "tool_result")]
47 ToolResult {
48 id: String,
50 output: ToolOutput,
52 },
53
54 #[serde(rename = "tool_progress")]
56 ToolProgress {
57 id: String,
59 message: String,
61 progress_pct: Option<f32>,
63 },
64
65 #[serde(rename = "state_update")]
67 StateUpdate {
68 patch: Value,
70 },
71
72 #[serde(rename = "directive_emitted")]
74 DirectiveEmitted {
75 directive: Value,
77 },
78
79 #[serde(rename = "status_update")]
81 StatusUpdate {
82 status: String,
84 progress_pct: Option<f32>,
86 },
87
88 #[serde(rename = "usage_update")]
90 UsageUpdate {
91 usage: Usage,
93 },
94
95 #[serde(rename = "rate_limit_info")]
97 RateLimitInfo {
98 utilization_pct: f32,
100 reset_at: i64,
102 allowed: bool,
104 },
105
106 #[serde(rename = "task_notification")]
108 TaskNotification {
109 task_id: String,
111 kind: TaskEventKind,
113 payload: Value,
115 },
116
117 #[serde(rename = "prompt_suggestion")]
119 PromptSuggestion {
120 suggestions: Vec<String>,
122 },
123
124 #[serde(rename = "turn_complete")]
126 TurnComplete {
127 reason: TerminationReason,
129 },
130
131 #[serde(rename = "error")]
133 Error {
134 message: String,
136 },
137}
138
139impl AgentEvent {
140 #[must_use]
142 pub const fn is_final_response(&self) -> bool {
143 matches!(self, Self::TurnComplete { .. } | Self::Error { .. })
144 }
145}
146
147#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
149#[non_exhaustive]
150pub enum TaskEventKind {
151 #[serde(rename = "started")]
153 Started,
154 #[serde(rename = "progress")]
156 Progress,
157 #[serde(rename = "completed")]
159 Completed,
160 #[serde(rename = "failed")]
162 Failed,
163}
164
165#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
167#[non_exhaustive]
168pub enum TerminationReason {
169 #[serde(rename = "complete")]
171 Complete,
172 #[serde(rename = "max_turns_exceeded")]
174 MaxTurnsExceeded,
175 #[serde(rename = "budget_exceeded")]
177 BudgetExceeded,
178 #[serde(rename = "stopped")]
180 Stopped,
181 #[serde(rename = "aborted")]
183 Aborted,
184 #[serde(rename = "error")]
186 Error,
187}