aboutsummaryrefslogtreecommitdiff
path: root/src/protocol
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-06-30 01:09:48 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-06-30 01:10:28 +0300
commitbffc4a82c81293f9836b375d6d5ef9f4b1674a95 (patch)
treee14b6b9bd35449bd2f2383724cdb8b5ed03bf50a /src/protocol
parent86857c903cde90c30db3feb52da66f5c31845a9a (diff)
feat: add terminal session observe stream
Diffstat (limited to 'src/protocol')
-rw-r--r--src/protocol/wire.rs23
1 files changed, 23 insertions, 0 deletions
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<ClientInputEvent> },
+
+ /// 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]
@@ -1121,6 +1133,17 @@ mod tests {
}
#[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 {
source: AttachScrollSource::Wheel,