(tried to) prioritize terminal input

refresh interactive sessions
This commit is contained in:
lda
2026-07-15 09:17:01 +07:00 Verified
parent f459bb6914
commit 7ac482431a
7 changed files with 206 additions and 88 deletions
+18 -4
View File
@@ -274,6 +274,7 @@ async fn handle_agent_terminal_socket(state: AppState, terminal_id: String, mut
}
loop {
tokio::select! {
biased;
outbound_frame = outbound.recv() => {
let Some(frame) = outbound_frame else { break; };
if send_relay_frame(&mut write, frame).await.is_err() { break; }
@@ -332,6 +333,15 @@ async fn handle_operator_terminal_socket(
}
};
info!(terminal_id, "operator terminal socket attached");
let refresh = serde_json::to_string(&TerminalControl::Refresh)
.expect("terminal refresh control serializes");
if let Err(code) = state
.terminals
.relay_to_agent(&terminal_id, TerminalRelayFrame::Text(refresh))
.await
{
warn!(terminal_id, code, "failed to request terminal redraw");
}
let summary = state.terminals.summary(&terminal_id).await;
if let Some((agent_id, _, _, _)) = &summary {
append_terminal_audit(
@@ -370,10 +380,7 @@ async fn handle_operator_terminal_socket(
let mut explicit_close = false;
loop {
tokio::select! {
outbound_frame = outbound.recv() => {
let Some(frame) = outbound_frame else { break; };
if send_relay_frame(&mut write, frame).await.is_err() { break; }
}
biased;
incoming = read.next() => {
let Some(Ok(message)) = incoming else { break; };
match operator_relay_frame(message) {
@@ -389,6 +396,10 @@ async fn handle_operator_terminal_socket(
}
}
}
outbound_frame = outbound.recv() => {
let Some(frame) = outbound_frame else { break; };
if send_relay_frame(&mut write, frame).await.is_err() { break; }
}
}
}
@@ -645,5 +656,8 @@ mod tests {
let ready = serde_json::to_string(&TerminalControl::Ready).expect("ready json");
assert!(operator_relay_frame(Message::Text(ready.into())).is_err());
let refresh = serde_json::to_string(&TerminalControl::Refresh).expect("refresh json");
assert!(operator_relay_frame(Message::Text(refresh.into())).is_err());
}
}