aboutsummaryrefslogtreecommitdiff
path: root/src/persist
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-17 01:41:17 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-17 01:41:17 +0300
commitf7fe0f203e0f349df33819aab239c0aade016f79 (patch)
tree51540d4a040a1a2d32ecf73c5c2d9277a7d4efef /src/persist
parent3ecacfddae86d603bfd0d1a0c01602b1d34b1df3 (diff)
fix: polish terminal-core agent semantics
Diffstat (limited to 'src/persist')
-rw-r--r--src/persist/restore.rs7
-rw-r--r--src/persist/snapshot.rs22
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,
},
);