diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-04 15:31:14 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-04 16:51:10 +0300 |
| commit | 15cab964f3494b77159caaea289e17e1596e0720 (patch) | |
| tree | d9614056c26b0d148771a464fc2eb0f0cabc60a2 /src/api/schema/events.rs | |
| parent | b78a8a5c565e66e7e5ba9a06d9cb7f3a771fc4b0 (diff) | |
feat: emit layout update events for runtime layout changes
Diffstat (limited to 'src/api/schema/events.rs')
| -rw-r--r-- | src/api/schema/events.rs | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/api/schema/events.rs b/src/api/schema/events.rs index 2fbce4d0..aff3d2a2 100644 --- a/src/api/schema/events.rs +++ b/src/api/schema/events.rs @@ -72,6 +72,8 @@ pub enum Subscription { #[serde(default, skip_serializing_if = "Option::is_none")] agent_status: Option<AgentStatus>, }, + #[serde(rename = "layout.updated")] + LayoutUpdated {}, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] @@ -204,6 +206,7 @@ pub enum EventKind { PaneExited, PaneAgentDetected, PaneAgentStatusChanged, + LayoutUpdated, } impl EventKind { @@ -231,6 +234,7 @@ impl EventKind { EventKind::PaneExited => "pane.exited", EventKind::PaneAgentDetected => "pane.agent_detected", EventKind::PaneAgentStatusChanged => "pane.agent_status_changed", + EventKind::LayoutUpdated => "layout.updated", } } } @@ -259,6 +263,7 @@ pub const KNOWN_EVENT_KINDS: &[EventKind] = &[ EventKind::PaneExited, EventKind::PaneAgentDetected, EventKind::PaneAgentStatusChanged, + EventKind::LayoutUpdated, ]; pub const PLUGIN_HOOK_EVENT_KINDS: &[EventKind] = &[ @@ -325,14 +330,15 @@ mod known_event_name_tests { } #[test] - fn plugin_hook_event_names_exclude_unemitted_output_change() { + fn plugin_hook_event_names_exclude_high_volume_events() { let names = plugin_hook_event_names(); assert!(!names.contains(&"pane.output_changed")); + assert!(!names.contains(&"layout.updated")); assert!(names.contains(&"pane.moved")); } } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)] pub struct EventEnvelope { pub event: EventKind, pub data: EventData, @@ -383,7 +389,7 @@ pub struct PaneAgentStatusChangedEvent { pub state_labels: HashMap<String, String>, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)] #[serde(tag = "type", rename_all = "snake_case")] pub enum EventData { WorkspaceCreated { @@ -502,4 +508,7 @@ pub enum EventData { #[serde(default, skip_serializing_if = "HashMap::is_empty")] state_labels: HashMap<String, String>, }, + LayoutUpdated { + layout: super::panes::PaneLayoutSnapshot, + }, } |
