diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-19 23:52:20 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-19 23:56:07 +0300 |
| commit | 3f80947678a9723434aa7fddfe23750b5393e24c (patch) | |
| tree | 6f463797132acfc51dfb6e135820a052954b4f13 /tests/live_handoff.rs | |
| parent | f76f895efe5b9f19aa9db909354c6c0f2195630b (diff) | |
feat: make agent automation a first-class cli primitive
Diffstat (limited to 'tests/live_handoff.rs')
| -rw-r--r-- | tests/live_handoff.rs | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/tests/live_handoff.rs b/tests/live_handoff.rs index 9f607195..c93898b6 100644 --- a/tests/live_handoff.rs +++ b/tests/live_handoff.rs @@ -1212,6 +1212,94 @@ fn live_handoff_accepts_canonical_pane_id_from_child_env() { } #[test] +fn live_handoff_keeps_unmanaged_agent_name_bound_to_saved_session() { + let _lock = test_lock(); + let base = unique_test_dir(); + let config_home = base.join("config"); + let runtime_dir = base.join("runtime"); + let api_socket = runtime_dir.join("herdr.sock"); + let old_session = base.join("old-session.jsonl"); + let new_session = base.join("new-session.jsonl"); + + let spawned = spawn_server(&config_home, &runtime_dir, &api_socket); + wait_for_socket(&api_socket, Duration::from_secs(10)); + register_runtime_dir(&runtime_dir); + let created = request( + &api_socket, + serde_json::json!({ + "id": "test:workspace:create", + "method": "workspace.create", + "params": {"cwd": "/tmp", "focus": true} + }), + ); + let pane_id = created["result"]["root_pane"]["pane_id"] + .as_str() + .unwrap() + .to_string(); + assert_ok(request( + &api_socket, + serde_json::json!({ + "id": "test:agent:report", + "method": "pane.report_agent", + "params": { + "pane_id": pane_id, + "source": "herdr:pi", + "agent": "pi", + "state": "idle", + "seq": 1, + "agent_session_path": old_session + } + }), + )); + assert_ok(request( + &api_socket, + serde_json::json!({ + "id": "test:agent:rename", + "method": "agent.rename", + "params": {"target": pane_id, "name": "reviewer"} + }), + )); + + assert_ok(request( + &api_socket, + serde_json::json!({"id":"test:handoff","method":"server.live_handoff","params":{}}), + )); + drop(spawned); + wait_for_api(&api_socket, Duration::from_secs(10)); + + assert_ok(request( + &api_socket, + serde_json::json!({ + "id": "test:agent:new-session", + "method": "pane.report_agent_session", + "params": { + "pane_id": pane_id, + "source": "herdr:pi", + "agent": "pi", + "seq": 2, + "agent_session_path": new_session, + "session_start_source": "new" + } + }), + )); + let old_name = request( + &api_socket, + serde_json::json!({ + "id": "test:agent:get-old-name", + "method": "agent.get", + "params": {"target": "reviewer"} + }), + ); + assert_eq!(old_name["error"]["code"], "agent_not_found", "{old_name}"); + + let _ = request( + &api_socket, + serde_json::json!({"id":"test:stop","method":"server.stop","params":{}}), + ); + cleanup_test_base(&base); +} + +#[test] fn live_handoff_keeps_agent_started_pane_after_agent_exits() { use std::os::unix::fs::PermissionsExt; |
