aboutsummaryrefslogtreecommitdiff
path: root/src/persist
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-07-19 23:52:20 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-07-19 23:56:07 +0300
commit3f80947678a9723434aa7fddfe23750b5393e24c (patch)
tree6f463797132acfc51dfb6e135820a052954b4f13 /src/persist
parentf76f895efe5b9f19aa9db909354c6c0f2195630b (diff)
feat: make agent automation a first-class cli primitive
Diffstat (limited to 'src/persist')
-rw-r--r--src/persist/restore.rs42
1 files changed, 18 insertions, 24 deletions
diff --git a/src/persist/restore.rs b/src/persist/restore.rs
index 2197e2bb..e442ac17 100644
--- a/src/persist/restore.rs
+++ b/src/persist/restore.rs
@@ -501,6 +501,8 @@ fn restore_tab(
};
pane_restore_startup(saved_agent_session, saved_history, &mut agent_restore)
};
+ let restored_agent_session =
+ restored_terminal_agent_session(saved_agent_session, startup.duplicate_agent_session);
let initial_restore_agent = startup
.restore_plan
.as_ref()
@@ -533,11 +535,14 @@ fn restore_tab(
if let Some(label) = saved_label {
terminal.set_manual_label(label);
}
+ if let Some(session) = restored_agent_session {
+ terminal.set_persisted_agent_session(session);
+ }
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),
+ (Some(_), None) => {}
(None, _) => {}
}
if let Some(agent) = initial_restore_agent {
@@ -551,12 +556,6 @@ fn restore_tab(
std::time::Instant::now(),
);
}
- if let Some(session) = restored_terminal_agent_session(
- saved_agent_session,
- startup.duplicate_agent_session,
- ) {
- terminal.set_persisted_agent_session(session);
- }
panes.insert(*id, PaneState::new(terminal_id));
terminals.push(terminal);
continue;
@@ -630,12 +629,16 @@ fn restore_tab(
if let Some(label) = saved_label {
terminal.set_manual_label(label);
}
+ if let Some(session) = restored_agent_session {
+ terminal.set_persisted_agent_session(session);
+ }
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),
+ (Some(agent_name), None) if was_imported => terminal.set_agent_name(agent_name),
+ (Some(_), None) => {}
(None, _) => {}
}
if let Some(agent) = initial_restore_agent {
@@ -649,12 +652,6 @@ fn restore_tab(
std::time::Instant::now(),
);
}
- if let Some(session) = restored_terminal_agent_session(
- saved_agent_session,
- startup.duplicate_agent_session,
- ) {
- terminal.set_persisted_agent_session(session);
- }
panes.insert(*id, PaneState::new(terminal_id.clone()));
terminal_runtimes.insert(terminal_id, runtime);
terminals.push(terminal);
@@ -1326,7 +1323,7 @@ mod tests {
}
#[tokio::test]
- async fn restore_with_gapped_public_tab_numbers_keeps_agent_panel_tab_indices() {
+ async fn cold_restore_with_gapped_public_tab_numbers_drops_unmanaged_agent_name() {
let cwd = std::env::current_dir().unwrap();
let pane_snap = |id: &str| {
(
@@ -1424,19 +1421,16 @@ mod tests {
);
let workspace = workspaces.first().expect("workspace should restore");
- let agent_pane = workspace.tabs[3].root_pane;
- let detail = workspace
- .pane_details(&terminals)
- .into_iter()
- .find(|detail| detail.pane_id == agent_pane)
- .expect("restored agent pane should be listed");
-
assert_eq!(workspace.active_tab, 3);
assert_eq!(workspace.tabs[3].number, 5);
- assert_eq!(detail.tab_idx, 3);
- assert_eq!(detail.agent_label, "planner");
+ let agent_pane = workspace.tabs[3].root_pane;
let terminal_id = &workspace.tabs[3].panes[&agent_pane].attached_terminal_id;
+ assert!(terminals[terminal_id].agent_name.is_none());
assert_eq!(terminals[terminal_id].managed_agent_kind(), None);
+ assert!(workspace
+ .pane_details(&terminals)
+ .into_iter()
+ .all(|detail| detail.pane_id != agent_pane));
}
#[test]