aboutsummaryrefslogtreecommitdiff
path: root/tests/cli_wrapper.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-06-09 15:59:34 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-06-09 15:59:34 +0300
commitdf7880c54b8b5d337421cb4b1dd8daea27008801 (patch)
tree4d0cc6290ad71c413bac71cfaab4ef41ea017ecb /tests/cli_wrapper.rs
parenteeacb45b4b6ab4446c5bea1331f743fee5e5b9f8 (diff)
feat: update agent lifecycle integrations
Diffstat (limited to 'tests/cli_wrapper.rs')
-rw-r--r--tests/cli_wrapper.rs169
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]