From 7ae4b056a0ca478e584fa282c45b528134cc80c9 Mon Sep 17 00:00:00 2001 From: JJ Liebig Date: Tue, 11 Aug 2026 02:24:02 +0200 Subject: 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 --- src/cli/agent.rs | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'src/cli') diff --git a/src/cli/agent.rs b/src/cli/agent.rs index e1271f48..362c9ab1 100644 --- a/src/cli/agent.rs +++ b/src/cli/agent.rs @@ -543,16 +543,26 @@ fn wait_for_named_agent( ))) } else if agent["name"].as_str() != Some(name) { Some(Err(agent_name_lost_error("cli:agent:start", name))) - } else if agent["interactive_ready"].as_bool().unwrap_or(false) { - Some(Ok(agent.clone())) - } else if !agent["launch_pending"].as_bool().unwrap_or(false) { - Some(Err(cli_agent_error( - "cli:agent:start", - "agent_start_failed", - "agent process exited before becoming interactive", - ))) } else { - None + match agent["agent_status"].as_str() { + Some("blocked") => Some(Err(cli_agent_error( + "cli:agent:start", + "agent_not_ready", + format!("agent {name} is blocked during startup and is not ready for prompts"), + ))), + Some("working" | "unknown") => None, + Some("idle" | "done") if agent["interactive_ready"].as_bool() == Some(true) => { + Some(Ok(agent.clone())) + } + Some("idle" | "done") if !agent["launch_pending"].as_bool().unwrap_or(false) => { + Some(Err(cli_agent_error( + "cli:agent:start", + "agent_start_failed", + "agent process exited before becoming interactive", + ))) + } + _ => None, + } }; if let Some(outcome) = outcome { return Ok(outcome); -- cgit v1.2.3