aboutsummaryrefslogtreecommitdiff
path: root/src/persist/restore.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-07-17 23:55:08 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-07-17 23:59:56 +0300
commite0758c32118f2aa006db3d8fa4b41833fe6e7ead (patch)
tree2b29dd61ebf870db8d0ac95cc0b4515178c834c4 /src/persist/restore.rs
parent040956531f673c8fb7720037494ed4e61b123c6c (diff)
feat: harden named agent cli workflows
refs #1525
Diffstat (limited to 'src/persist/restore.rs')
-rw-r--r--src/persist/restore.rs35
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,
},