summaryrefslogtreecommitdiff
path: root/src/protocol/wire.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-30 23:58:15 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-30 23:58:34 +0300
commitfc4e1bbf6b0fa2ec37445a5b72356514c7c6be6a (patch)
tree93af04af44a4dcc062a7886c51d70641c1903144 /src/protocol/wire.rs
parentd477341e6af816ff4396042b084a0378ef437b4a (diff)
perf: reduce sidebar git polling overhead
refs #353
Diffstat (limited to 'src/protocol/wire.rs')
-rw-r--r--src/protocol/wire.rs18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/protocol/wire.rs b/src/protocol/wire.rs
index e6c5624c..576c4135 100644
--- a/src/protocol/wire.rs
+++ b/src/protocol/wire.rs
@@ -13,7 +13,7 @@ use serde::{Deserialize, Serialize};
// ---------------------------------------------------------------------------
/// Current protocol version. Bumped when wire format changes incompatibly.
-pub const PROTOCOL_VERSION: u32 = 11;
+pub const PROTOCOL_VERSION: u32 = 12;
/// Maximum allowed frame payload size (2 MB). Frames larger than this are
/// rejected to prevent denial-of-service via oversized length prefixes.
@@ -52,6 +52,15 @@ pub enum ClientKeybindings {
Local { keys_toml: String },
}
+/// Client behavior requested at connection time.
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
+pub enum ClientLaunchMode {
+ /// Full app client.
+ App,
+ /// Direct terminal attach client.
+ TerminalAttach,
+}
+
/// Messages sent from the client to the server over the client protocol socket.
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ClientMessage {
@@ -71,6 +80,8 @@ pub enum ClientMessage {
requested_encoding: RenderEncoding,
/// Keybinding profile requested by the client.
keybindings: ClientKeybindings,
+ /// Whether this connection will render the full app or attach directly to a pane terminal.
+ launch_mode: ClientLaunchMode,
},
/// Raw input bytes read from the client's stdin.
@@ -651,6 +662,7 @@ mod tests {
cell_height_px: 16,
requested_encoding: RenderEncoding::SemanticFrame,
keybindings: ClientKeybindings::Server,
+ launch_mode: ClientLaunchMode::App,
};
let encoded = bincode::serde::encode_to_vec(&msg, bincode::config::standard()).unwrap();
let (decoded, _): (ClientMessage, _) =
@@ -952,6 +964,7 @@ mod tests {
cell_height_px: 16,
requested_encoding: RenderEncoding::SemanticFrame,
keybindings: ClientKeybindings::Server,
+ launch_mode: ClientLaunchMode::App,
};
let mut buf = Vec::new();
write_message(&mut buf, &msg).unwrap();
@@ -1025,6 +1038,7 @@ mod tests {
cell_height_px: 16,
requested_encoding: RenderEncoding::SemanticFrame,
keybindings: ClientKeybindings::Server,
+ launch_mode: ClientLaunchMode::App,
},
1 => ClientMessage::Input {
data: vec![(i % 256) as u8; (i as usize % 50) + 1],
@@ -1460,6 +1474,7 @@ mod tests {
cell_height_px: 16,
requested_encoding: RenderEncoding::SemanticFrame,
keybindings: ClientKeybindings::Server,
+ launch_mode: ClientLaunchMode::App,
};
let mut buf = Vec::new();
write_message(&mut buf, &msg).unwrap();
@@ -1494,6 +1509,7 @@ mod tests {
cell_height_px: 16,
requested_encoding: RenderEncoding::SemanticFrame,
keybindings: ClientKeybindings::Server,
+ launch_mode: ClientLaunchMode::App,
},
ClientMessage::Input {
data: b"hello world".to_vec(),