diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-06-09 15:59:34 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-06-09 15:59:34 +0300 |
| commit | df7880c54b8b5d337421cb4b1dd8daea27008801 (patch) | |
| tree | 4d0cc6290ad71c413bac71cfaab4ef41ea017ecb /tests/cli_wrapper.rs | |
| parent | eeacb45b4b6ab4446c5bea1331f743fee5e5b9f8 (diff) | |
feat: update agent lifecycle integrations
Diffstat (limited to 'tests/cli_wrapper.rs')
| -rw-r--r-- | tests/cli_wrapper.rs | 169 |
1 files changed, 22 insertions, 147 deletions
diff --git a/tests/cli_wrapper.rs b/tests/cli_wrapper.rs index 4407f54f..117afe97 100644 --- a/tests/cli_wrapper.rs +++ b/tests/cli_wrapper.rs @@ -622,166 +622,41 @@ fn codex_hook_reports_session_id_from_stdin() { } #[test] -fn copilot_hook_maps_turn_lifecycle() { - let session_start_idle = run_copilot_hook( +fn copilot_hook_reports_session_id_from_stdin() { + let request = run_copilot_hook( r#"{"hook_event_name":"SessionStart","session_id":"copilot-session","source":"resume"}"#, ) - .expect("copilot session start without prompt should report idle"); - assert_eq!(session_start_idle["method"], "pane.report_agent"); - assert_eq!(session_start_idle["params"]["state"], "idle"); - assert_eq!( - session_start_idle["params"]["agent_session_id"], - "copilot-session" - ); + .expect("copilot session start should report session identity"); - let session_start_working = run_copilot_hook( - r#"{"hook_event_name":"SessionStart","sessionId":"copilot-session","initialPrompt":"run tests"}"#, - ) - .expect("copilot session start with prompt should report working"); - assert_eq!(session_start_working["method"], "pane.report_agent"); - assert_eq!(session_start_working["params"]["state"], "working"); - assert_eq!( - session_start_working["params"]["agent_session_id"], - "copilot-session" - ); - - let working = run_copilot_hook( - r#"{"hook_event_name":"UserPromptSubmit","session_id":"copilot-session","prompt":"run tests"}"#, - ) - .expect("copilot prompt should report working"); - assert_eq!(working["method"], "pane.report_agent"); - assert_eq!(working["params"]["agent"], "copilot"); - assert_eq!(working["params"]["state"], "working"); - assert_eq!(working["params"]["agent_session_id"], "copilot-session"); - - let idle = run_copilot_hook( - r#"{"hook_event_name":"agentStop","session_id":"copilot-session","stop_reason":"end_turn"}"#, - ) - .expect("copilot stop should report idle"); - assert_eq!(idle["method"], "pane.report_agent"); - assert_eq!(idle["params"]["state"], "idle"); -} + assert_eq!(request["method"], "pane.report_agent_session"); + assert_eq!(request["params"]["agent"], "copilot"); + assert_eq!(request["params"]["agent_session_id"], "copilot-session"); + assert!(request["params"].get("state").is_none()); -#[test] -fn copilot_hook_maps_camel_case_payloads() { - let session_start = run_copilot_hook( + let camel = run_copilot_hook( r#"{"sessionId":"copilot-camel-session","source":"new","initialPrompt":"run tests"}"#, ) - .expect("copilot camelCase session start should report working"); - assert_eq!(session_start["method"], "pane.report_agent"); - assert_eq!(session_start["params"]["state"], "working"); - assert_eq!( - session_start["params"]["agent_session_id"], - "copilot-camel-session" - ); - - let prompt = - run_copilot_hook(r#"{"sessionId":"copilot-camel-session","prompt":"continue the task"}"#) - .expect("copilot camelCase prompt should report working"); - assert_eq!(prompt["method"], "pane.report_agent"); - assert_eq!(prompt["params"]["state"], "working"); - - let blocker = run_copilot_hook( - r#"{"sessionId":"copilot-camel-session","toolName":"ask_user","toolArgs":{}}"#, - ) - .expect("copilot camelCase ask_user should report blocked"); - assert_eq!(blocker["method"], "pane.report_agent"); - assert_eq!(blocker["params"]["state"], "blocked"); + .expect("copilot camelCase session start should report session identity"); - let answered = run_copilot_hook( - r#"{"sessionId":"copilot-camel-session","toolName":"ask_user","toolArgs":{},"toolResult":{"resultType":"success","textResultForLlm":"ok"}}"#, - ) - .expect("copilot camelCase postToolUse should report working"); - assert_eq!(answered["method"], "pane.report_agent"); - assert_eq!(answered["params"]["state"], "working"); - - let idle = run_copilot_hook( - r#"{"sessionId":"copilot-camel-session","stopReason":"end_turn","transcriptPath":"/tmp/transcript.jsonl"}"#, - ) - .expect("copilot camelCase agentStop should report idle"); - assert_eq!(idle["method"], "pane.report_agent"); - assert_eq!(idle["params"]["state"], "idle"); - - let user_exit = - run_copilot_hook(r#"{"sessionId":"copilot-camel-session","reason":"user_exit"}"#) - .expect("copilot camelCase user exit should release"); - assert_eq!(user_exit["method"], "pane.release_agent"); - assert_eq!(user_exit["params"]["agent"], "copilot"); + assert_eq!(camel["method"], "pane.report_agent_session"); + assert_eq!(camel["params"]["agent_session_id"], "copilot-camel-session"); + assert!(camel["params"].get("state").is_none()); } #[test] -fn copilot_hook_maps_user_prompts_and_notifications() { - let ask_user = run_copilot_hook( +fn copilot_hook_does_not_report_lifecycle_state() { + for payload in [ + r#"{"hook_event_name":"UserPromptSubmit","session_id":"copilot-session","prompt":"run tests"}"#, r#"{"hook_event_name":"PreToolUse","session_id":"copilot-session","tool_name":"ask_user"}"#, - ) - .expect("copilot ask_user should report blocked"); - assert_eq!(ask_user["method"], "pane.report_agent"); - assert_eq!(ask_user["params"]["state"], "blocked"); - - let stale_report_intent = run_copilot_hook( - r#"{"hook_event_name":"PostToolUse","session_id":"copilot-session","tool_name":"report_intent","tool_result":{"text_result_for_llm":"ok"}}"#, - ); - assert!( - stale_report_intent.is_none(), - "postToolUse report_intent must not clear a pending ask_user prompt" - ); - - let ask_user_answered = run_copilot_hook( - r#"{"hook_event_name":"PostToolUse","session_id":"copilot-session","tool_name":"ask_user","tool_result":{"text_result_for_llm":"Blue"}}"#, - ) - .expect("copilot answered ask_user should report working"); - assert_eq!(ask_user_answered["method"], "pane.report_agent"); - assert_eq!(ask_user_answered["params"]["state"], "working"); - - let exit_plan_mode = run_copilot_hook( - r#"{"hook_event_name":"PreToolUse","session_id":"copilot-session","tool_name":"exit_plan_mode"}"#, - ) - .expect("copilot exit_plan_mode should report blocked"); - assert_eq!(exit_plan_mode["method"], "pane.report_agent"); - assert_eq!(exit_plan_mode["params"]["state"], "blocked"); - - let exit_plan_answered = run_copilot_hook( - r#"{"hook_event_name":"PostToolUse","session_id":"copilot-session","tool_name":"exit_plan_mode","tool_result":{"text_result_for_llm":"Approved"}}"#, - ) - .expect("copilot answered exit_plan_mode should report working"); - assert_eq!(exit_plan_answered["method"], "pane.report_agent"); - assert_eq!(exit_plan_answered["params"]["state"], "working"); - - let notification = run_copilot_hook( r#"{"hook_event_name":"notification","session_id":"copilot-session","notification_type":"permission_prompt"}"#, - ) - .expect("copilot permission notification should report blocked"); - assert_eq!(notification["method"], "pane.report_agent"); - assert_eq!(notification["params"]["state"], "blocked"); - - let permission_approved_tool = run_copilot_hook( - r#"{"hook_event_name":"PostToolUse","session_id":"copilot-session","tool_name":"bash","tool_result":{"text_result_for_llm":"ok"}}"#, - ) - .expect("copilot completed tool should report working after permission prompt"); - assert_eq!(permission_approved_tool["method"], "pane.report_agent"); - assert_eq!(permission_approved_tool["params"]["state"], "working"); - - let agent_idle = run_copilot_hook( - r#"{"hook_event_name":"notification","session_id":"copilot-session","notification_type":"agent_idle"}"#, - ) - .expect("copilot agent_idle notification should report idle"); - assert_eq!(agent_idle["method"], "pane.report_agent"); - assert_eq!(agent_idle["params"]["state"], "idle"); -} - -#[test] -fn copilot_hook_releases_on_user_exit_only() { - let complete = run_copilot_hook( - r#"{"hook_event_name":"SessionEnd","session_id":"copilot-session","reason":"complete"}"#, - ); - assert!(complete.is_none()); - - let user_exit = run_copilot_hook( + r#"{"hook_event_name":"agentStop","session_id":"copilot-session","stop_reason":"end_turn"}"#, r#"{"hook_event_name":"SessionEnd","session_id":"copilot-session","reason":"user_exit"}"#, - ) - .expect("copilot user exit should release"); - assert_eq!(user_exit["method"], "pane.release_agent"); - assert_eq!(user_exit["params"]["agent"], "copilot"); + ] { + assert!( + run_copilot_hook(payload).is_none(), + "copilot session-only hook should ignore lifecycle payload {payload}" + ); + } } #[test] |
