From 0ef94cdbc1b49af82f48ca4c7eec3eb0d73ae091 Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Mon, 27 Apr 2026 21:13:14 +0300 Subject: fix: improve claude subagent hook lifecycle fixes #58 --- tests/cli_wrapper.rs | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) (limited to 'tests/cli_wrapper.rs') diff --git a/tests/cli_wrapper.rs b/tests/cli_wrapper.rs index f3b02b9b..46f199b1 100644 --- a/tests/cli_wrapper.rs +++ b/tests/cli_wrapper.rs @@ -349,13 +349,34 @@ fn run_claude_hook(action: &str, hook_input: &str) -> Option } #[test] -fn claude_hook_suppresses_subagent_reports() { - let subagent_input = r#"{"hook_event_name":"PermissionRequest","agent_id":"agent-abc123","agent_type":"Explore"}"#; +fn claude_hook_reports_subagent_working_and_blocked() { + let subagent_input = r#"{"hook_event_name":"Notification","agent_id":"agent-abc123","agent_type":"Explore","notification_type":"permission_prompt"}"#; + + let working = + run_claude_hook("working", subagent_input).expect("subagent working should report working"); + assert_eq!(working["method"], "pane.report_agent"); + assert_eq!(working["params"]["state"], "working"); + + let blocked = + run_claude_hook("blocked", subagent_input).expect("subagent blocked should report blocked"); + assert_eq!(blocked["method"], "pane.report_agent"); + assert_eq!(blocked["params"]["state"], "blocked"); +} - assert!(run_claude_hook("working", subagent_input).is_none()); - assert!(run_claude_hook("blocked", subagent_input).is_none()); - assert!(run_claude_hook("idle", subagent_input).is_none()); - assert!(run_claude_hook("release", subagent_input).is_none()); +#[test] +fn claude_hook_converts_subagent_idle_and_release_to_working() { + let subagent_input = + r#"{"hook_event_name":"SubagentStop","agent_id":"agent-abc123","agent_type":"Explore"}"#; + + let idle = run_claude_hook("idle", subagent_input) + .expect("subagent idle should keep parent pane working"); + assert_eq!(idle["method"], "pane.report_agent"); + assert_eq!(idle["params"]["state"], "working"); + + let release = run_claude_hook("release", subagent_input) + .expect("subagent release should keep parent pane working"); + assert_eq!(release["method"], "pane.report_agent"); + assert_eq!(release["params"]["state"], "working"); } #[test] -- cgit v1.2.3