diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-17 01:41:17 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-17 01:41:17 +0300 |
| commit | f7fe0f203e0f349df33819aab239c0aade016f79 (patch) | |
| tree | 51540d4a040a1a2d32ecf73c5c2d9277a7d4efef /src/persist | |
| parent | 3ecacfddae86d603bfd0d1a0c01602b1d34b1df3 (diff) | |
fix: polish terminal-core agent semantics
Diffstat (limited to 'src/persist')
| -rw-r--r-- | src/persist/restore.rs | 7 | ||||
| -rw-r--r-- | src/persist/snapshot.rs | 22 |
2 files changed, 27 insertions, 2 deletions
diff --git a/src/persist/restore.rs b/src/persist/restore.rs index e53a61d9..0ac49e80 100644 --- a/src/persist/restore.rs +++ b/src/persist/restore.rs @@ -169,6 +169,10 @@ fn restore_tab( .get(id) .and_then(|old_id| snap.panes.get(old_id)) .and_then(|p| p.label.clone()); + let saved_agent_name = reverse_id_map + .get(id) + .and_then(|old_id| snap.panes.get(old_id)) + .and_then(|p| p.agent_name.clone()); match TerminalRuntime::spawn( *id, @@ -187,6 +191,9 @@ 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); + } panes.insert(*id, PaneState::new(terminal_id.clone())); terminal_runtimes.insert(terminal_id, runtime); terminals.push(terminal); diff --git a/src/persist/snapshot.rs b/src/persist/snapshot.rs index 245fbb76..f9198e16 100644 --- a/src/persist/snapshot.rs +++ b/src/persist/snapshot.rs @@ -70,6 +70,8 @@ pub struct PaneSnapshot { pub cwd: PathBuf, #[serde(default, skip_serializing_if = "Option::is_none")] pub label: Option<String>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub agent_name: Option<String>, } /// Serializable BSP tree. @@ -238,7 +240,7 @@ fn capture_workspace( id: Some(ws.id.clone()), custom_name: ws.custom_name.clone(), identity_cwd: ws - .resolved_identity_cwd() + .resolved_identity_cwd_from(terminals, terminal_runtimes) .unwrap_or_else(|| ws.identity_cwd.clone()), tabs: ws .tabs @@ -270,7 +272,19 @@ fn capture_tab( .get(id) .and_then(|pane| terminals.get(&pane.attached_terminal_id)) .and_then(|terminal| terminal.manual_label.clone()); - panes.insert(id.raw(), PaneSnapshot { cwd, label }); + let agent_name = tab + .panes + .get(id) + .and_then(|pane| terminals.get(&pane.attached_terminal_id)) + .and_then(|terminal| terminal.agent_name.clone()); + panes.insert( + id.raw(), + PaneSnapshot { + cwd, + label, + agent_name, + }, + ); } TabSnapshot { custom_name: tab.custom_name.clone(), @@ -427,6 +441,7 @@ mod tests { PaneSnapshot { cwd: PathBuf::from("/home/can/Projects/herdr"), label: None, + agent_name: None, }, ); panes.insert( @@ -434,6 +449,7 @@ mod tests { PaneSnapshot { cwd: PathBuf::from("/home/can/Projects/website"), label: Some("website".into()), + agent_name: None, }, ); @@ -747,6 +763,7 @@ mod tests { PaneSnapshot { cwd: PathBuf::from("/tmp/this-directory-does-not-exist-for-herdr-test"), label: None, + agent_name: None, }, ); panes.insert( @@ -756,6 +773,7 @@ mod tests { .map(PathBuf::from) .unwrap_or_else(|_| PathBuf::from("/tmp")), label: None, + agent_name: None, }, ); |
