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 --- tests/cli/agent_transport.rs | 43 +++++++++++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 12 deletions(-) (limited to 'tests/cli') diff --git a/tests/cli/agent_transport.rs b/tests/cli/agent_transport.rs index 42e67828..85419e90 100644 --- a/tests/cli/agent_transport.rs +++ b/tests/cli/agent_transport.rs @@ -1,7 +1,7 @@ use super::harness::*; #[test] -fn agent_start_accepts_durable_readiness_during_detection_gap() { +fn agent_start_waits_through_unknown_then_rejects_blocked() { let base = unique_test_dir(); fs::create_dir_all(&base).unwrap(); let socket_path = base.join("herdr.sock"); @@ -55,6 +55,32 @@ fn agent_start_accepts_durable_readiness_during_detection_gap() { ) .unwrap(); get_stream.flush().unwrap(); + + let (mut get_stream, get_line) = accept_fake_cli_operation(&listener); + let get: serde_json::Value = serde_json::from_str(&get_line).unwrap(); + assert_eq!(get["method"], "agent.get"); + assert_eq!(get["params"]["target"], "reviewer"); + writeln!( + get_stream, + "{}", + serde_json::json!({ + "id": get["id"], + "result": { + "type": "agent_info", + "agent": { + "agent": "opencode", + "agent_status": "blocked", + "interactive_ready": true, + "launch_pending": false, + "name": "reviewer", + "pane_id": "w1:p1", + "terminal_id": "term_1" + } + } + }) + ) + .unwrap(); + get_stream.flush().unwrap(); }); let started = run_cli( @@ -63,17 +89,10 @@ fn agent_start_accepts_durable_readiness_during_detection_gap() { "agent", "start", "reviewer", "--kind", "opencode", "--pane", "w1:p1", ], ); - assert!( - started.status.success(), - "stderr: {}", - String::from_utf8_lossy(&started.stderr) - ); - let started: serde_json::Value = serde_json::from_slice(&started.stdout).unwrap(); - assert_eq!(started["result"]["type"], "agent_started"); - assert_eq!(started["result"]["agent"]["name"], "reviewer"); - assert!(started["result"]["agent"]["interactive_ready"] - .as_bool() - .unwrap()); + assert_eq!(started.status.code(), Some(1)); + assert!(started.stdout.is_empty()); + let error: serde_json::Value = serde_json::from_slice(&started.stderr).unwrap(); + assert_eq!(error["error"]["code"], "agent_not_ready"); server.join().unwrap(); cleanup_test_base(&base); -- cgit v1.2.3