//! Wire types for the Zesdex IPC protocol. use serde::{Deserialize, Serialize}; /// A resolved key press sent from the daemon to the client. #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub enum KeyAction { Char(char), Enter, Escape, Backspace, Delete, Tab, Up, Down, Left, Right, Home, End, PageUp, PageDown, Function(u8), } /// A message sent from the TUI client to the daemon over the IPC socket. #[derive(Debug, Clone, Serialize, Deserialize)] pub enum ClientRequest { Tick, KeyPress { key: KeyAction, ctrl: bool, alt: bool, shift: bool, }, Submit(String), Paste(String), Resize(u16, u16), Close, ScrollUp, ScrollDown, } /// A single chat message within a session. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct MessageEntry { pub role: String, pub content: String, pub timestamp: i64, } /// A transient toast notification sent to the client. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ToastEntry { pub kind: String, pub message: String, pub created_at: i64, pub lifetime_ms: u64, } /// Full UI state snapshot pushed from the daemon to the client. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct StatePayload { pub session_id: String, pub messages: Vec, pub edit_count: u32, pub message_count: usize, pub overlay: Option, pub toasts: Vec, pub dirty: bool, pub input_buffer: String, pub input_cursor: usize, } /// A frame sent from the daemon to the client. #[derive(Debug, Clone, Serialize, Deserialize)] pub enum DaemonFrame { StateUpdate(Box), StreamToken(String), SystemNote { kind: String, message: String, }, ClipboardCopy(String), Closed, }