aboutsummaryrefslogtreecommitdiff
path: root/tests/cli
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-07-20 15:21:46 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-07-20 15:22:26 +0300
commit6f7ef04e7dd5a8ec35c5aac8c9b6be1447290399 (patch)
treec050b566f61964fd7cdaca6aad24d7fe82053079 /tests/cli
parent28b628d79d755afbb3ac45f9184a03c204c26784 (diff)
fix: bound stalled agent prompt waits
Diffstat (limited to 'tests/cli')
-rw-r--r--tests/cli/agents.rs21
1 files changed, 20 insertions, 1 deletions
diff --git a/tests/cli/agents.rs b/tests/cli/agents.rs
index e06d0ee5..8a08826f 100644
--- a/tests/cli/agents.rs
+++ b/tests/cli/agents.rs
@@ -16,7 +16,7 @@ fn agent_start_command_works() {
fs::write(
&fake_pi,
format!(
- "#!/bin/sh\nprintf '%s\\n' \"$@\" > '{}'\nexport HERDR_AGENT=pi\n'{}' pane report-agent \"$HERDR_PANE_ID\" --source custom:fake-pi --agent pi --state idle >/dev/null\nwhile IFS= read -r prompt; do\n [ \"$prompt\" = \"do not transition\" ] && continue\n '{}' pane report-agent \"$HERDR_PANE_ID\" --source custom:fake-pi --agent pi --state working >/dev/null\n '{}' pane report-agent \"$HERDR_PANE_ID\" --source custom:fake-pi --agent pi --state idle >/dev/null\n printf '%s\\n' \"$prompt\" >> '{}'\ndone\n",
+ "#!/bin/sh\nprintf '%s\\n' \"$@\" > '{}'\nexport HERDR_AGENT=pi\n'{}' pane report-agent \"$HERDR_PANE_ID\" --source custom:fake-pi --agent pi --state idle >/dev/null\nwhile IFS= read -r prompt; do\n case \"$prompt\" in \"do not transition\"|\"stall\") continue ;; esac\n '{}' pane report-agent \"$HERDR_PANE_ID\" --source custom:fake-pi --agent pi --state working >/dev/null\n '{}' pane report-agent \"$HERDR_PANE_ID\" --source custom:fake-pi --agent pi --state idle >/dev/null\n printf '%s\\n' \"$prompt\" >> '{}'\ndone\n",
captured_args.display(),
env!("CARGO_BIN_EXE_herdr"),
env!("CARGO_BIN_EXE_herdr"),
@@ -164,6 +164,25 @@ fn agent_start_command_works() {
let stale_idle: serde_json::Value = serde_json::from_slice(&stale_idle.stderr).unwrap();
assert_eq!(stale_idle["error"]["code"], "timeout");
+ let stalled = run_cli(
+ &socket_path,
+ &[
+ "agent",
+ "prompt",
+ "main",
+ "stall",
+ "--wait",
+ "--timeout",
+ "6000",
+ ],
+ );
+ assert_eq!(stalled.status.code(), Some(1));
+ let stalled: serde_json::Value = serde_json::from_slice(&stalled.stderr).unwrap();
+ assert_eq!(stalled["error"]["code"], "agent_prompt_stalled");
+ assert!(stalled["error"]["message"]
+ .as_str()
+ .is_some_and(|message| message.contains("state_change_seq remained")));
+
let prompted = run_cli(
&socket_path,
&[