diff options
| author | JJ Liebig <jonathan.liebig@gmail.com> | 2026-08-11 02:24:02 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-08-11 03:24:02 +0300 |
| commit | 7ae4b056a0ca478e584fa282c45b528134cc80c9 (patch) | |
| tree | 5eb8da51353327f2bb1b7ef35f76cafe9b471dee /src/pane.rs | |
| parent | 350f001320ec4a119f09c38157973126962a6121 (diff) | |
fix: wait for agent prompt readiness (#2537)
* fix: wait for agent prompt readiness
refs #2410
* fix: return pane updates after tab bar command
refs #2410
---------
Co-authored-by: Can Celik <ogulcancelik@gmail.com>
Diffstat (limited to 'src/pane.rs')
| -rw-r--r-- | src/pane.rs | 46 |
1 files changed, 30 insertions, 16 deletions
diff --git a/src/pane.rs b/src/pane.rs index 1ade096e..c95da331 100644 --- a/src/pane.rs +++ b/src/pane.rs @@ -216,6 +216,28 @@ async fn publish_state_changed_event( } } +async fn publish_agent_process_detected_event( + state_events: mpsc::Sender<AppEvent>, + pane_id: PaneId, + agent: Agent, + observed_at: std::time::Instant, +) { + if let Err(e) = state_events + .send(AppEvent::AgentProcessDetected { + pane_id, + agent, + observed_at, + }) + .await + { + warn!( + pane = pane_id.raw(), + err = %e, + "failed to deliver AgentProcessDetected event" + ); + } +} + #[derive(Debug, Clone, Copy)] struct AgentDetectionPublishUpdate { state: AgentState, @@ -792,21 +814,17 @@ fn spawn_basic_detection_task( // A new foreground agent must not inherit OSC // title/progress evidence from the previous process. terminal.clear_agent_osc_state(); - if agent.is_some() { + if let Some(agent) = agent { agent_startup_grace_until = Some(now + AGENT_STARTUP_GRACE_WINDOW); - state = AgentState::Idle; - last_visible_idle = true; + state = AgentState::Unknown; + last_visible_idle = false; last_visible_blocker = false; last_visible_working = false; last_visible_signal_refresh = None; - publish_state_changed_event( + publish_agent_process_detected_event( state_events.clone(), pane_id, agent, - AgentState::Idle, - false, - false, - false, now, ) .await; @@ -2293,22 +2311,18 @@ impl PaneRuntime { // A new foreground agent must not inherit OSC // title/progress evidence from the previous process. terminal.clear_agent_osc_state(); - if agent.is_some() { + if let Some(agent) = agent { agent_startup_grace_until = Some(now + AGENT_STARTUP_GRACE_WINDOW); - state = AgentState::Idle; - last_visible_idle = true; + state = AgentState::Unknown; + last_visible_idle = false; last_visible_blocker = false; last_visible_working = false; last_visible_signal_refresh = None; - publish_state_changed_event( + publish_agent_process_detected_event( state_events.clone(), pane_id, agent, - AgentState::Idle, - false, - false, - false, now, ) .await; |
