Skip to main content

flow_core/
event.rs

1use serde::{Deserialize, Serialize};
2
3/// Unified event type for broadcasting across TUI, SSE, and WebSocket.
4#[derive(Debug, Clone, Serialize, Deserialize)]
5#[serde(tag = "type", rename_all = "camelCase")]
6pub enum FlowEvent {
7    /// A task JSON file was created, modified, or deleted.
8    #[serde(rename = "update")]
9    TaskUpdate {
10        event: String,
11        #[serde(skip_serializing_if = "Option::is_none")]
12        session_id: Option<String>,
13        #[serde(skip_serializing_if = "Option::is_none")]
14        file: Option<String>,
15    },
16
17    /// A feature in `SQLite` was updated.
18    #[serde(rename = "feature_update")]
19    FeatureUpdate {
20        id: i64,
21        #[serde(skip_serializing_if = "Option::is_none")]
22        passes: Option<bool>,
23        #[serde(skip_serializing_if = "Option::is_none")]
24        in_progress: Option<bool>,
25    },
26
27    /// Agent status change.
28    #[serde(rename = "agent-status")]
29    AgentStatus {
30        #[serde(skip_serializing_if = "Option::is_none")]
31        agent: Option<String>,
32        #[serde(skip_serializing_if = "Option::is_none")]
33        status: Option<String>,
34        #[serde(skip_serializing_if = "Option::is_none")]
35        task: Option<String>,
36    },
37
38    /// Progress snapshot.
39    #[serde(rename = "progress")]
40    Progress {
41        passing: usize,
42        total: usize,
43        in_progress: usize,
44    },
45
46    /// Session metadata changed.
47    #[serde(rename = "metadata-update")]
48    MetadataUpdate,
49
50    /// Initial connection acknowledgment.
51    #[serde(rename = "connected")]
52    Connected,
53}