From 23e218abaa19d7ea9b729e54f036c29436750dc6 Mon Sep 17 00:00:00 2001 From: Hare Date: Sat, 23 May 2026 12:51:40 +0900 Subject: [PATCH] chore: handle rolled back run result clients --- crates/pod/examples/pod_cli.rs | 1 + crates/pod/src/segment_log_sink.rs | 10 ++++++++++ crates/tui/src/app.rs | 4 +++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/crates/pod/examples/pod_cli.rs b/crates/pod/examples/pod_cli.rs index 92c0ded5..c5768170 100644 --- a/crates/pod/examples/pod_cli.rs +++ b/crates/pod/examples/pod_cli.rs @@ -62,6 +62,7 @@ async fn main() -> Result<(), Box> { PodRunResult::Finished => println!("(finished)"), PodRunResult::Paused => println!("(paused)"), PodRunResult::LimitReached => println!("(turn limit reached)"), + PodRunResult::RolledBack => println!("(empty turn rolled back)"), } // 5. Extract the assistant's reply from history diff --git a/crates/pod/src/segment_log_sink.rs b/crates/pod/src/segment_log_sink.rs index 16718f5a..ccd536e9 100644 --- a/crates/pod/src/segment_log_sink.rs +++ b/crates/pod/src/segment_log_sink.rs @@ -157,6 +157,16 @@ impl SegmentLogSink { *mirror = entries; } + /// Truncate the mirror without broadcasting. + pub fn truncate_silent(&self, entries_len: usize) { + let mut mirror = self + .inner + .mirror + .lock() + .expect("session log mirror mutex poisoned"); + mirror.truncate(entries_len); + } + /// Atomically read the current mirror and subscribe to subsequent /// commits. The returned snapshot and receiver split the entry /// timeline into a duplicate-free, gap-free prefix/suffix pair. diff --git a/crates/tui/src/app.rs b/crates/tui/src/app.rs index 4888db37..582e6612 100644 --- a/crates/tui/src/app.rs +++ b/crates/tui/src/app.rs @@ -677,7 +677,9 @@ impl App { }); self.set_pod_status(match result { RunResult::Paused => PodStatus::Paused, - RunResult::Finished | RunResult::LimitReached => PodStatus::Idle, + RunResult::Finished | RunResult::LimitReached | RunResult::RolledBack => { + PodStatus::Idle + } }); self.run_requests = 0; self.run_upload_tokens = 0;