diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-04-27 21:13:14 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-04-27 21:13:14 +0300 |
| commit | 0ef94cdbc1b49af82f48ca4c7eec3eb0d73ae091 (patch) | |
| tree | fcaf72315c50cde448659b8e30438a8f2cd10f00 /tests | |
| parent | 19be0a6ca78bca0579a96143532c687b7a90420f (diff) | |
fix: improve claude subagent hook lifecycle
fixes #58
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/cli_wrapper.rs | 33 |
1 files changed, 27 insertions, 6 deletions
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<serde_json::Value> } #[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] |
