Files
herdr/src/api/schema/panes.rs
T

395 lines
12 KiB
Rust

use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use super::{AgentSessionInfo, AgentStatus, PaneAgentState, ReadFormat, ReadSource};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PaneSplitParams {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub workspace_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub target_pane_id: Option<String>,
pub direction: SplitDirection,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ratio: Option<f32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cwd: Option<String>,
#[serde(default)]
pub focus: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum SplitDirection {
Right,
Down,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum PaneDirection {
Left,
Right,
Up,
Down,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct PaneSwapParams {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub pane_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub direction: Option<PaneDirection>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub source_pane_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub target_pane_id: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct PaneZoomParams {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub pane_id: Option<String>,
#[serde(default)]
pub mode: PaneZoomMode,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum PaneZoomMode {
#[default]
Toggle,
On,
Off,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct PaneLayoutParams {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub pane_id: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneNeighborParams {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub pane_id: Option<String>,
pub direction: PaneDirection,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct PaneEdgesParams {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub pane_id: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneFocusDirectionParams {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub pane_id: Option<String>,
pub direction: PaneDirection,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PaneResizeParams {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub pane_id: Option<String>,
pub direction: PaneDirection,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub amount: Option<f32>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct PaneListParams {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub workspace_id: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneRenameParams {
pub pane_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub label: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneSendTextParams {
pub pane_id: String,
pub text: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneSendKeysParams {
pub pane_id: String,
pub keys: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
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<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneReadParams {
pub pane_id: String,
pub source: ReadSource,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub lines: Option<u32>,
#[serde(default)]
pub format: ReadFormat,
#[serde(default = "super::default_true")]
pub strip_ansi: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
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<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub custom_status: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub seq: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub agent_session_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub agent_session_path: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneReportAgentSessionParams {
pub pane_id: String,
pub source: String,
pub agent: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub seq: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub agent_session_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub agent_session_path: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneReportMetadataParams {
pub pane_id: String,
pub source: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub agent: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub applies_to_source: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub display_agent: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub custom_status: Option<String>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub state_labels: HashMap<String, String>,
#[serde(default)]
pub clear_title: bool,
#[serde(default)]
pub clear_display_agent: bool,
#[serde(default)]
pub clear_custom_status: bool,
#[serde(default)]
pub clear_state_labels: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub seq: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ttl_ms: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneClearAgentAuthorityParams {
pub pane_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub source: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub seq: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneReleaseAgentParams {
pub pane_id: String,
pub source: String,
pub agent: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub seq: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
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<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub foreground_cwd: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub label: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub agent: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub display_agent: Option<String>,
pub agent_status: AgentStatus,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub custom_status: Option<String>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub state_labels: HashMap<String, String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub agent_session: Option<AgentSessionInfo>,
pub revision: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PaneSwapResult {
pub changed: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reason: Option<PaneSwapReason>,
pub source_pane_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub target_pane_id: Option<String>,
pub focused_pane_id: String,
pub layout: PaneLayoutSnapshot,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum PaneSwapReason {
NoNeighbor,
SamePane,
NotFound,
CrossTab,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
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<PaneZoomReason>,
pub pane_id: String,
pub focused_pane_id: String,
pub zoomed: bool,
pub layout: PaneLayoutSnapshot,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum PaneZoomReason {
SinglePane,
AlreadyZoomed,
AlreadyUnzoomed,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
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<PaneLayoutPane>,
pub splits: Vec<PaneLayoutSplit>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneLayoutRect {
pub x: u16,
pub y: u16,
pub width: u16,
pub height: u16,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneLayoutPane {
pub pane_id: String,
pub focused: bool,
pub rect: PaneLayoutRect,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PaneLayoutSplit {
pub id: String,
pub direction: SplitDirection,
pub ratio: f32,
pub rect: PaneLayoutRect,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PaneNeighborResult {
pub pane_id: String,
pub direction: PaneDirection,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub neighbor_pane_id: Option<String>,
pub layout: PaneLayoutSnapshot,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
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)]
pub struct PaneFocusDirectionResult {
pub changed: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reason: Option<PaneFocusDirectionReason>,
pub source_pane_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub focused_pane_id: Option<String>,
pub layout: PaneLayoutSnapshot,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum PaneFocusDirectionReason {
NoNeighbor,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PaneResizeResult {
pub changed: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reason: Option<PaneResizeReason>,
pub pane_id: String,
pub focused_pane_id: String,
pub layout: PaneLayoutSnapshot,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum PaneResizeReason {
Unchanged,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
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,
}