aboutsummaryrefslogtreecommitdiff
path: root/src/pane.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-06-06 17:21:12 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-06-06 17:21:20 +0300
commit048d8a29195d580014b24ee3fc7e89ac6bdfee8a (patch)
tree39570ad6d9fea6036d0b4474c35fd9b26e483e93 /src/pane.rs
parentb7619db085eb4054a071b51159eda65d6b60f3fe (diff)
fix: debounce droid working detection
refs #488
Diffstat (limited to 'src/pane.rs')
-rw-r--r--src/pane.rs23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/pane.rs b/src/pane.rs
index 214eeef2..66517ab4 100644
--- a/src/pane.rs
+++ b/src/pane.rs
@@ -413,6 +413,7 @@ fn spawn_basic_detection_task(
let mut last_visible_idle = false;
let mut last_visible_working = false;
let mut last_visible_signal_refresh = None;
+ let mut last_screen_working_at = None;
let mut last_process_check = std::time::Instant::now();
let mut last_foreground_pgid = None;
let mut has_process_probe = false;
@@ -431,6 +432,7 @@ fn spawn_basic_detection_task(
last_visible_idle = false;
last_visible_working = false;
last_visible_signal_refresh = None;
+ last_screen_working_at = None;
last_process_check = std::time::Instant::now();
last_foreground_pgid = None;
has_process_probe = false;
@@ -514,13 +516,23 @@ fn spawn_basic_detection_task(
if agent_presence.observe_process_probe(new_agent) {
agent = agent_presence.current_agent();
agent_changed = previous_agent != agent;
+ if agent_changed {
+ last_screen_working_at = None;
+ }
}
}
let Some(detection) = detection_update_for_publish(agent, &content, false) else {
continue;
};
- let new_state = detection.state;
+ let new_state = crate::terminal::state::stabilize_agent_detection(
+ agent,
+ state,
+ detection,
+ false,
+ now,
+ &mut last_screen_working_at,
+ );
let visible_blocker = detection.visible_blocker && new_state == AgentState::Blocked;
let visible_idle = detection.visible_idle && new_state == AgentState::Idle;
let visible_working = detection.visible_working && new_state == AgentState::Working;
@@ -1529,7 +1541,7 @@ impl PaneRuntime {
let mut foreground_shell_exit_reported = false;
let mut release_was_active = false;
let mut pending_restore_probe = initial_state.detected_agent.is_some();
- let mut last_claude_working_at = None;
+ let mut last_screen_working_at = None;
let mut last_visible_blocker = false;
let mut last_visible_idle = false;
let mut last_visible_working = false;
@@ -1562,7 +1574,7 @@ impl PaneRuntime {
foreground_shell_exit_reported = false;
release_was_active = false;
pending_restore_probe = false;
- last_claude_working_at = None;
+ last_screen_working_at = None;
last_visible_blocker = false;
last_visible_idle = false;
last_visible_working = false;
@@ -1675,6 +1687,9 @@ impl PaneRuntime {
}
if changed {
agent = agent_presence.current_agent();
+ if agent != previous_agent {
+ last_screen_working_at = None;
+ }
if let Some(process_name) = process_name {
info!(
pane = pane_id.raw(),
@@ -1722,7 +1737,7 @@ impl PaneRuntime {
detection,
process_exited,
now,
- &mut last_claude_working_at,
+ &mut last_screen_working_at,
);
let visible_blocker =
detection.visible_blocker && new_state == AgentState::Blocked;