From bffc4a82c81293f9836b375d6d5ef9f4b1674a95 Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Tue, 30 Jun 2026 01:09:48 +0300 Subject: feat: add terminal session observe stream --- src/protocol/wire.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src/protocol') diff --git a/src/protocol/wire.rs b/src/protocol/wire.rs index ac21df19..e6ba5746 100644 --- a/src/protocol/wire.rs +++ b/src/protocol/wire.rs @@ -381,6 +381,12 @@ pub enum ClientMessage { /// Structured input events from platform clients that do not expose Unix-style raw bytes. InputEvents { events: Vec }, + + /// Switch this connection into read-only terminal observe mode. + ObserveTerminal { + /// Pane, terminal, or agent target to observe. + target: String, + }, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] @@ -993,6 +999,12 @@ mod tests { 6 ); assert_eq!(tag(&ClientMessage::InputEvents { events: Vec::new() }), 7); + assert_eq!( + tag(&ClientMessage::ObserveTerminal { + target: "w1:p1".to_owned(), + }), + 8 + ); } #[test] @@ -1120,6 +1132,17 @@ mod tests { assert_eq!(msg, decoded); } + #[test] + fn client_observe_terminal_roundtrip() { + let msg = ClientMessage::ObserveTerminal { + target: "w1:p1".to_owned(), + }; + let encoded = bincode::serde::encode_to_vec(&msg, bincode::config::standard()).unwrap(); + let (decoded, _): (ClientMessage, _) = + bincode::serde::decode_from_slice(&encoded, bincode::config::standard()).unwrap(); + assert_eq!(msg, decoded); + } + #[test] fn client_attach_scroll_roundtrip() { let msg = ClientMessage::AttachScroll { -- cgit v1.2.3