use std::collections::HashMap; use serde::{Deserialize, Serialize}; pub(crate) const PANE_GRAPHICS_SET_MAX_BYTES: usize = 512 * 1024; pub(crate) const PANE_GRAPHICS_STREAM_MAX_BYTES: usize = 16 * 1024 * 1024; pub(crate) const PANE_GRAPHICS_DIRECT_FILE_MAX_BYTES: usize = 400 * 1024 * 1024; pub(crate) const PANE_GRAPHICS_MAX_LAYERS_PER_PANE: usize = 16; pub(crate) const PANE_GRAPHICS_MAX_LAYERS_TOTAL: usize = 64; pub(crate) const PANE_GRAPHICS_MAX_INLINE_BYTES_TOTAL: usize = 64 * 1024 * 1024; pub(crate) const PANE_GRAPHICS_PRIMARY_LAYER_ID: &str = "primary"; use super::agents::AgentSessionInfo; use super::common::{AgentStatus, PaneAgentState, ReadFormat, ReadSource, SplitDirection}; #[derive( Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema, Default, )] #[serde(rename_all = "snake_case")] pub enum PaneRightClickTarget { #[default] Herdr, Pane, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneSplitParams { #[serde(default, skip_serializing_if = "Option::is_none")] pub workspace_id: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub target_pane_id: Option, pub direction: SplitDirection, #[serde(default, skip_serializing_if = "Option::is_none")] pub ratio: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub cwd: Option, #[serde(default)] pub focus: bool, #[serde(default)] pub right_click: PaneRightClickTarget, #[serde(default, skip_serializing_if = "HashMap::is_empty")] pub env: HashMap, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneInputSetParams { pub pane_id: String, pub right_click: PaneRightClickTarget, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneLinkActivateParams { pub pane_id: String, pub viewport_row: u16, pub col: u16, #[serde(default, skip_serializing_if = "Option::is_none")] pub content_revision: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub offset_from_bottom: Option, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] #[serde(rename_all = "snake_case")] pub enum PaneDirection { Left, Right, Up, Down, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema, Default)] pub struct PaneSwapParams { #[serde(default, skip_serializing_if = "Option::is_none")] pub pane_id: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub direction: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub source_pane_id: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub target_pane_id: Option, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneMoveParams { pub pane_id: String, pub destination: PaneMoveDestination, #[serde(default)] pub focus: bool, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)] #[serde(tag = "type", rename_all = "snake_case")] pub enum PaneMoveDestination { Tab { tab_id: String, #[serde(default, skip_serializing_if = "Option::is_none")] target_pane_id: Option, split: SplitDirection, #[serde(default, skip_serializing_if = "Option::is_none")] ratio: Option, }, NewTab { #[serde(default, skip_serializing_if = "Option::is_none")] workspace_id: Option, #[serde(default, skip_serializing_if = "Option::is_none")] label: Option, }, NewWorkspace { #[serde(default, skip_serializing_if = "Option::is_none")] label: Option, #[serde(default, skip_serializing_if = "Option::is_none")] tab_label: Option, }, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema, Default)] pub struct PaneZoomParams { #[serde(default, skip_serializing_if = "Option::is_none")] pub pane_id: Option, #[serde(default)] pub mode: PaneZoomMode, } #[derive( Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema, Default, )] #[serde(rename_all = "snake_case")] pub enum PaneZoomMode { #[default] Toggle, On, Off, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema, Default)] pub struct PaneLayoutParams { #[serde(default, skip_serializing_if = "Option::is_none")] pub pane_id: Option, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema, Default)] pub struct PaneProcessInfoParams { #[serde(default, skip_serializing_if = "Option::is_none")] pub pane_id: Option, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema, Default)] pub struct LayoutExportParams { #[serde(default, skip_serializing_if = "Option::is_none")] pub tab_id: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub pane_id: Option, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)] pub struct LayoutApplyParams { #[serde(default, skip_serializing_if = "Option::is_none")] pub workspace_id: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub tab_id: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub tab_label: Option, #[serde(default)] pub focus: bool, pub root: LayoutNode, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)] pub struct LayoutSetSplitRatioParams { #[serde(default, skip_serializing_if = "Option::is_none")] pub tab_id: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub pane_id: Option, pub path: Vec, pub ratio: f32, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)] pub struct LayoutDescription { pub workspace_id: String, pub tab_id: String, pub zoomed: bool, pub focused_pane_id: String, pub root: LayoutNode, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)] #[serde(tag = "type", rename_all = "snake_case")] pub enum LayoutNode { Pane { #[serde(flatten)] pane: LayoutPane, }, Split { direction: SplitDirection, ratio: f32, first: Box, second: Box, }, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema, Default)] pub struct LayoutPane { #[serde(default, skip_serializing_if = "Option::is_none")] pub pane_id: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub label: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub cwd: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub command: Option>, #[serde(default, skip_serializing_if = "HashMap::is_empty")] pub env: HashMap, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneNeighborParams { #[serde(default, skip_serializing_if = "Option::is_none")] pub pane_id: Option, pub direction: PaneDirection, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema, Default)] pub struct PaneEdgesParams { #[serde(default, skip_serializing_if = "Option::is_none")] pub pane_id: Option, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneFocusDirectionParams { #[serde(default, skip_serializing_if = "Option::is_none")] pub pane_id: Option, pub direction: PaneDirection, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneResizeParams { #[serde(default, skip_serializing_if = "Option::is_none")] pub pane_id: Option, pub direction: PaneDirection, #[serde(default, skip_serializing_if = "Option::is_none")] pub amount: Option, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneScrollParams { pub pane_id: String, pub offset_from_bottom: u64, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneTextPoint { pub row: u32, pub col: u16, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneSelectionReadParams { pub pane_id: String, pub anchor: PaneTextPoint, pub cursor: PaneTextPoint, #[serde(default, skip_serializing_if = "Option::is_none")] pub content_revision: Option, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] #[serde(rename_all = "snake_case")] pub enum PaneCopyMotion { LineEnd, FirstNonBlank, NextWordStart, PreviousWordStart, NextWordEnd, NextBigWordStart, PreviousBigWordStart, NextBigWordEnd, PreviousParagraph, NextParagraph, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneCopyMotionParams { pub pane_id: String, pub cursor: PaneTextPoint, pub motion: PaneCopyMotion, #[serde(default, skip_serializing_if = "Option::is_none")] pub content_revision: Option, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] #[serde(rename_all = "snake_case")] pub enum PaneCopySearchDirection { Forward, Backward, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneTextRange { pub start: PaneTextPoint, pub end: PaneTextPoint, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneCopySearchParams { pub pane_id: String, pub query: String, pub direction: PaneCopySearchDirection, pub cursor: PaneTextPoint, pub content_revision: u64, #[serde(default, skip_serializing_if = "Option::is_none")] pub previous: Option, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema, Default)] pub struct PaneListParams { #[serde(default, skip_serializing_if = "Option::is_none")] pub workspace_id: Option, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema, Default)] pub struct PaneCurrentParams { #[serde(default, skip_serializing_if = "Option::is_none")] pub caller_pane_id: Option, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneRenameParams { pub pane_id: String, #[serde(default, skip_serializing_if = "Option::is_none")] pub label: Option, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneSendTextParams { pub pane_id: String, pub text: String, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneSendKeysParams { pub pane_id: String, pub keys: Vec, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneSendInputParams { pub pane_id: String, #[serde(default, skip_serializing_if = "String::is_empty")] pub text: String, #[serde(default, skip_serializing_if = "Vec::is_empty")] pub keys: Vec, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneReadParams { pub pane_id: String, pub source: ReadSource, #[serde(default, skip_serializing_if = "Option::is_none")] pub lines: Option, #[serde(default)] pub format: ReadFormat, #[serde(default = "super::default_true")] pub strip_ansi: bool, #[serde(skip)] #[schemars(skip)] pub(crate) intent: super::common::ReadIntent, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] #[serde(rename_all = "snake_case")] pub enum PaneGraphicsFormat { Png, Rgb, Rgba, Bgra, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneGraphicsSetParams { pub pane_id: String, #[serde(default, skip_serializing_if = "Option::is_none")] pub layer_id: Option, #[serde(default)] pub z_index: i32, #[serde(skip)] #[schemars(skip)] pub owner: String, pub format: PaneGraphicsFormat, pub image_width: u32, pub image_height: u32, #[serde(skip)] pub data: Option>, #[serde(default)] pub data_base64: String, #[serde(default)] pub placement: PaneGraphicsPlacementParams, } #[derive( Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema, Default, )] pub struct PaneGraphicsPlacementParams { #[serde(default)] pub viewport_col: i32, #[serde(default)] pub viewport_row: i32, #[serde(default)] pub grid_cols: u32, #[serde(default)] pub grid_rows: u32, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneGraphicsClearParams { pub pane_id: String, #[serde(default, skip_serializing_if = "Option::is_none")] pub layer_id: Option, } #[derive(Debug, Clone, PartialEq, Eq)] pub struct PaneGraphicsDirectParams { pub pane_id: String, pub layer_id: Option, pub z_index: i32, pub owner: String, pub image_width: u32, pub image_height: u32, pub format: PaneGraphicsFormat, pub path: String, pub sequence: u64, pub revision: u64, pub placement: PaneGraphicsPlacementParams, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneGraphicsStreamParams { pub pane_id: String, #[serde(default, skip_serializing_if = "Option::is_none")] pub layer_id: Option, #[serde(default)] pub z_index: i32, #[serde(skip)] #[schemars(skip)] pub owner: String, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneReportAgentParams { pub pane_id: String, pub source: String, pub agent: String, pub state: PaneAgentState, #[serde(default, skip_serializing_if = "Option::is_none")] pub message: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub seq: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub agent_session_id: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub agent_session_path: Option, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneReportAgentSessionParams { pub pane_id: String, pub source: String, pub agent: String, #[serde(default, skip_serializing_if = "Option::is_none")] pub seq: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub agent_session_id: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub agent_session_path: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub session_start_source: Option, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneReportMetadataParams { pub pane_id: String, pub source: String, #[serde(default, skip_serializing_if = "Option::is_none")] pub agent: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub applies_to_source: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub title: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub display_agent: Option, #[serde(default, skip_serializing_if = "HashMap::is_empty")] pub state_labels: HashMap, #[serde(default, skip_serializing_if = "HashMap::is_empty")] #[schemars(schema_with = "super::common::metadata_token_patch_schema")] pub tokens: HashMap>, #[serde(default)] pub clear_title: bool, #[serde(default)] pub clear_display_agent: bool, #[serde(default)] pub clear_state_labels: bool, #[serde(default, skip_serializing_if = "Option::is_none")] pub seq: Option, #[serde(default, skip_serializing_if = "Option::is_none")] #[schemars(range(min = 1, max = 86_400_000))] pub ttl_ms: Option, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneClearAgentAuthorityParams { pub pane_id: String, #[serde(default, skip_serializing_if = "Option::is_none")] pub source: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub seq: Option, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneReleaseAgentParams { pub pane_id: String, pub source: String, pub agent: String, #[serde(default, skip_serializing_if = "Option::is_none")] pub seq: Option, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneInfo { pub pane_id: String, pub terminal_id: String, pub workspace_id: String, pub tab_id: String, pub focused: bool, #[serde(default, skip_serializing_if = "Option::is_none")] pub cwd: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub foreground_cwd: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub label: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub agent: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub title: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub terminal_title: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub terminal_title_stripped: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub display_agent: Option, pub agent_status: AgentStatus, #[serde(default, skip_serializing_if = "HashMap::is_empty")] pub state_labels: HashMap, #[serde(default, skip_serializing_if = "HashMap::is_empty")] #[schemars(schema_with = "super::common::metadata_token_values_schema")] pub tokens: HashMap, #[serde(default, skip_serializing_if = "Option::is_none")] pub agent_session: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub scroll: Option, pub revision: u64, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneScrollInfo { pub offset_from_bottom: u64, pub max_offset_from_bottom: u64, pub viewport_rows: u64, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneProcessInfo { pub pane_id: String, #[serde(default, skip_serializing_if = "Option::is_none")] pub shell_pid: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub foreground_process_group_id: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub tty: Option, #[serde(default, skip_serializing_if = "Vec::is_empty")] pub foreground_processes: Vec, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneProcessInfoProcess { pub pid: u32, pub name: String, #[serde(default, skip_serializing_if = "Option::is_none")] pub argv0: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub argv: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] pub cmdline: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub cwd: Option, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneSwapResult { pub changed: bool, #[serde(default, skip_serializing_if = "Option::is_none")] pub reason: Option, pub source_pane_id: String, #[serde(default, skip_serializing_if = "Option::is_none")] pub target_pane_id: Option, pub focused_pane_id: String, pub layout: PaneLayoutSnapshot, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] #[serde(rename_all = "snake_case")] pub enum PaneSwapReason { NoNeighbor, SamePane, NotFound, CrossTab, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneMoveResult { pub changed: bool, #[serde(default, skip_serializing_if = "Option::is_none")] pub reason: Option, pub previous_pane_id: String, pub previous_workspace_id: String, pub previous_tab_id: String, pub pane: Box, #[serde(default, skip_serializing_if = "Option::is_none")] pub source_layout: Option>, pub target_layout: Box, #[serde(default, skip_serializing_if = "Option::is_none")] pub created_workspace: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub created_tab: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub closed_workspace_id: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub closed_tab_id: Option, pub focused_pane_id: String, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] #[serde(rename_all = "snake_case")] pub enum PaneMoveReason { SameTab, ZoomedTab, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneZoomResult { pub changed: bool, pub zoom_changed: bool, pub focus_changed: bool, #[serde(default, skip_serializing_if = "Option::is_none")] pub reason: Option, pub pane_id: String, pub focused_pane_id: String, pub zoomed: bool, pub layout: PaneLayoutSnapshot, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] #[serde(rename_all = "snake_case")] pub enum PaneZoomReason { SinglePane, AlreadyZoomed, AlreadyUnzoomed, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneLayoutSnapshot { pub workspace_id: String, pub tab_id: String, pub zoomed: bool, pub area: PaneLayoutRect, pub focused_pane_id: String, pub panes: Vec, pub splits: Vec, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneLayoutRect { pub x: u16, pub y: u16, pub width: u16, pub height: u16, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneLayoutPane { pub pane_id: String, pub focused: bool, pub rect: PaneLayoutRect, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneLayoutSplit { pub id: String, pub direction: SplitDirection, pub ratio: f32, pub rect: PaneLayoutRect, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneNeighborResult { pub pane_id: String, pub direction: PaneDirection, #[serde(default, skip_serializing_if = "Option::is_none")] pub neighbor_pane_id: Option, pub layout: PaneLayoutSnapshot, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneEdgesResult { pub pane_id: String, pub left: bool, pub right: bool, pub up: bool, pub down: bool, pub layout: PaneLayoutSnapshot, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneFocusDirectionResult { pub changed: bool, #[serde(default, skip_serializing_if = "Option::is_none")] pub reason: Option, pub source_pane_id: String, #[serde(default, skip_serializing_if = "Option::is_none")] pub focused_pane_id: Option, pub layout: PaneLayoutSnapshot, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] #[serde(rename_all = "snake_case")] pub enum PaneFocusDirectionReason { NoNeighbor, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneResizeResult { pub changed: bool, #[serde(default, skip_serializing_if = "Option::is_none")] pub reason: Option, pub pane_id: String, pub focused_pane_id: String, pub layout: PaneLayoutSnapshot, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] #[serde(rename_all = "snake_case")] pub enum PaneResizeReason { Unchanged, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct PaneReadResult { pub pane_id: String, pub workspace_id: String, pub tab_id: String, pub source: ReadSource, pub format: ReadFormat, pub text: String, pub revision: u64, pub truncated: bool, }