#[cfg(unix)] use serde::{Deserialize, Serialize}; /// Long-lived pane runtime transferred during server replacement. /// /// Handoff preserves server-owned session state such as PTYs, processes, agent /// identity, and durable plugin/session metadata. It intentionally does not /// preserve transient coordination such as in-flight requests, waits, /// subscriptions, client sockets, or pane-to-pane messages; clients reconnect /// and retry those operations after replacement. #[cfg(unix)] #[derive(Debug, Clone, Serialize, Deserialize)] pub(crate) struct HandoffRuntimeState { pub pane_id: u32, pub child_pid: u32, pub rows: u16, pub cols: u16, pub cell_width_px: u32, pub cell_height_px: u32, #[serde(default)] pub keyboard_protocol_flags: u16, #[serde(default, skip_serializing_if = "Option::is_none")] pub keyboard_protocol_ansi: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub input_state: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub terminal_title: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub initial_history_ansi: Option, } #[cfg(unix)] impl HandoffRuntimeState { pub fn with_pane_id(mut self, pane_id: crate::layout::PaneId) -> Self { self.pane_id = pane_id.raw(); self } } #[derive(Debug)] pub(crate) struct ImportedHandoffRuntime { #[cfg(unix)] pub master_fd: std::os::fd::RawFd, #[cfg(unix)] pub state: HandoffRuntimeState, }