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 /src/persist | |
| parent | f76f895efe5b9f19aa9db909354c6c0f2195630b (diff) | |
feat: make agent automation a first-class cli primitive
Diffstat (limited to 'src/persist')
| -rw-r--r-- | src/persist/restore.rs | 42 |
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] |
