diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-17 23:55:08 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-17 23:59:56 +0300 |
| commit | e0758c32118f2aa006db3d8fa4b41833fe6e7ead (patch) | |
| tree | 2b29dd61ebf870db8d0ac95cc0b4515178c834c4 /src/persist/restore.rs | |
| parent | 040956531f673c8fb7720037494ed4e61b123c6c (diff) | |
feat: harden named agent cli workflows
refs #1525
Diffstat (limited to 'src/persist/restore.rs')
| -rw-r--r-- | src/persist/restore.rs | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/src/persist/restore.rs b/src/persist/restore.rs index bd4d8382..2197e2bb 100644 --- a/src/persist/restore.rs +++ b/src/persist/restore.rs @@ -487,6 +487,9 @@ fn restore_tab( let saved_label = saved_pane.and_then(|p| p.label.clone()); let saved_agent_name = saved_pane.and_then(|p| p.agent_name.clone()); + let saved_managed_agent = saved_pane + .and_then(|pane| pane.managed_agent_kind.as_deref()) + .and_then(crate::detect::parse_canonical_agent_label); let saved_launch_argv = saved_pane.and_then(|p| p.launch_argv.clone()); let saved_agent_session = saved_pane.and_then(|p| p.agent_session.as_ref()); let saved_history = @@ -530,8 +533,12 @@ fn restore_tab( if let Some(label) = saved_label { terminal.set_manual_label(label); } - if let Some(agent_name) = saved_agent_name { - terminal.set_agent_name(agent_name); + match (saved_agent_name, saved_managed_agent) { + (Some(agent_name), Some(agent)) => { + terminal.restore_managed_agent(agent_name, agent) + } + (Some(agent_name), None) => terminal.set_agent_name(agent_name), + (None, _) => {} } if let Some(agent) = initial_restore_agent { let _ = terminal.set_detected_state_with_screen_signals_at( @@ -623,8 +630,13 @@ fn restore_tab( if let Some(label) = saved_label { terminal.set_manual_label(label); } - if let Some(agent_name) = saved_agent_name { - terminal.set_agent_name(agent_name); + match (saved_agent_name, saved_managed_agent) { + (Some(agent_name), Some(agent)) if was_imported => { + terminal.restore_managed_agent(agent_name, agent) + } + (Some(_), Some(_)) => {} + (Some(agent_name), None) => terminal.set_agent_name(agent_name), + (None, _) => {} } if let Some(agent) = initial_restore_agent { let _ = terminal.set_detected_state_with_screen_signals_at( @@ -1171,8 +1183,9 @@ mod tests { 0, super::super::snapshot::PaneSnapshot { cwd, - label: None, - agent_name: None, + label: Some("reviewer".into()), + agent_name: Some("reviewer".into()), + managed_agent_kind: Some("opencode".into()), agent_session: Some(super::super::snapshot::PaneAgentSessionSnapshot { source: "herdr:opencode".into(), agent: "opencode".into(), @@ -1218,6 +1231,8 @@ mod tests { !terminal.respawn_shell_on_exit, "agent sessions should not use native restore lifecycle when resume_agents_on_restore is disabled" ); + assert_eq!(terminal.agent_name, None); + assert_eq!(terminal.manual_label.as_deref(), Some("reviewer")); let session = terminal .persisted_agent_session .as_ref() @@ -1256,6 +1271,7 @@ mod tests { cwd: cwd.clone(), label: None, agent_name: None, + managed_agent_kind: None, agent_session: None, launch_argv: None, }, @@ -1266,6 +1282,7 @@ mod tests { cwd: cwd.clone(), label: None, agent_name: None, + managed_agent_kind: None, agent_session: None, launch_argv: None, }, @@ -1318,6 +1335,7 @@ mod tests { cwd: cwd.clone(), label: None, agent_name: None, + managed_agent_kind: None, agent_session: None, launch_argv: None, }, @@ -1327,6 +1345,7 @@ mod tests { cwd: cwd.clone(), label: Some("planner".into()), agent_name: Some("planner".into()), + managed_agent_kind: None, agent_session: Some(super::super::snapshot::PaneAgentSessionSnapshot { source: "herdr:codex".into(), agent: "codex".into(), @@ -1416,6 +1435,8 @@ mod tests { assert_eq!(workspace.tabs[3].number, 5); assert_eq!(detail.tab_idx, 3); assert_eq!(detail.agent_label, "planner"); + let terminal_id = &workspace.tabs[3].panes[&agent_pane].attached_terminal_id; + assert_eq!(terminals[terminal_id].managed_agent_kind(), None); } #[test] @@ -1478,6 +1499,7 @@ mod tests { cwd, label: None, agent_name: None, + managed_agent_kind: None, agent_session: Some(super::super::snapshot::PaneAgentSessionSnapshot { source: "herdr:codex".into(), agent: "codex".into(), @@ -1643,6 +1665,7 @@ mod tests { cwd: cwd.clone(), label: None, agent_name: None, + managed_agent_kind: None, agent_session: None, launch_argv: None, }, |
