Skip to main content

apollo/agent/
stream.rs

1use serde::Serialize;
2use tokio::sync::mpsc;
3
4#[derive(Debug, Clone, Serialize)]
5#[serde(tag = "type", rename_all = "snake_case")]
6pub enum AgentStreamEvent {
7    Status {
8        message: String,
9    },
10    ToolStart {
11        name: String,
12        hint: String,
13    },
14    ToolEnd {
15        name: String,
16        ok: bool,
17        elapsed_secs: u64,
18    },
19    Delta {
20        text: String,
21    },
22    Done {
23        response: String,
24    },
25    Error {
26        message: String,
27    },
28}
29
30pub type AgentStreamTx = mpsc::UnboundedSender<AgentStreamEvent>;
31
32pub fn emit(tx: &Option<AgentStreamTx>, event: AgentStreamEvent) {
33    if let Some(tx) = tx {
34        let _ = tx.send(event);
35    }
36}