aboutsummaryrefslogtreecommitdiff
path: root/src/workspace
diff options
context:
space:
mode:
Diffstat (limited to 'src/workspace')
-rw-r--r--src/workspace/aggregate.rs28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/workspace/aggregate.rs b/src/workspace/aggregate.rs
index 3ac7ea9b..4024f081 100644
--- a/src/workspace/aggregate.rs
+++ b/src/workspace/aggregate.rs
@@ -36,7 +36,11 @@ impl Tab {
.filter_map(|id| {
let pane = self.panes.get(id)?;
let terminal = terminals.get(&pane.attached_terminal_id)?;
- let agent_label = terminal.effective_agent_label()?.to_string();
+ let agent_label = terminal
+ .agent_name
+ .as_deref()
+ .or_else(|| terminal.effective_agent_label())?
+ .to_string();
Some(PaneDetail {
pane_id: *id,
tab_idx: self.number.saturating_sub(1),
@@ -173,6 +177,28 @@ mod tests {
}
#[test]
+ fn pane_details_prefers_agent_name_over_detected_agent_label() {
+ let ws = Workspace::test_new("test");
+ let root_pane = ws.tabs[0].root_pane;
+ let mut terminals = HashMap::new();
+ let mut terminal = terminal_for_pane(&ws, root_pane);
+ terminal.set_detected_state(Some(Agent::Pi), AgentState::Working);
+ terminal.set_agent_name("planner".into());
+ terminals.insert(terminal.id.clone(), terminal);
+
+ let labels: Vec<_> = ws
+ .pane_details(&terminals)
+ .into_iter()
+ .map(|detail| (detail.label, detail.agent_label, detail.agent))
+ .collect();
+
+ assert_eq!(
+ labels,
+ vec![("planner".into(), "planner".into(), Some(Agent::Pi))]
+ );
+ }
+
+ #[test]
fn pane_details_includes_tab_context_for_multi_tab_workspace() {
let mut ws = Workspace::test_new("test");
ws.tabs[0].custom_name = Some("main".into());