diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-18 04:24:24 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-19 14:27:41 +0300 |
| commit | b04c4ca3dab872b3e9dfe05f1af767e5b6af1127 (patch) | |
| tree | 4ada71a7ae58c2a5862b81c1f6d2db9a56f42cf4 /src | |
| parent | d616bcd6b86742762fec5f0696a5c13701fe717c (diff) | |
fix: show agent names in sidebar
refs #145
Diffstat (limited to 'src')
| -rw-r--r-- | src/ui/sidebar.rs | 28 | ||||
| -rw-r--r-- | src/workspace/aggregate.rs | 28 |
2 files changed, 55 insertions, 1 deletions
diff --git a/src/ui/sidebar.rs b/src/ui/sidebar.rs index 3d51cc51..116010d1 100644 --- a/src/ui/sidebar.rs +++ b/src/ui/sidebar.rs @@ -938,6 +938,34 @@ mod tests { } #[test] + fn all_workspaces_agent_panel_entries_prefer_agent_names_for_agent_identity() { + let mut app = crate::app::state::AppState::test_new(); + let workspace = Workspace::test_new("bridge"); + let first_pane = workspace.tabs[0].root_pane; + + app.workspaces = vec![workspace]; + app.ensure_test_terminals(); + let first_terminal_id = app.workspaces[0].tabs[0].panes[&first_pane] + .attached_terminal_id + .clone(); + app.terminals + .get_mut(&first_terminal_id) + .unwrap() + .detected_agent = Some(Agent::Pi); + app.terminals + .get_mut(&first_terminal_id) + .unwrap() + .set_agent_name("planner".into()); + app.active = Some(0); + app.selected = 0; + app.agent_panel_scope = AgentPanelScope::AllWorkspaces; + + let entries = agent_panel_entries(&app); + assert_eq!(entries[0].primary_label, "bridge"); + assert_eq!(entries[0].agent_label.as_deref(), Some("planner")); + } + + #[test] fn all_workspaces_primary_label_truncates_workspace_and_tab() { let entry = AgentPanelEntry { ws_idx: 0, 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()); |
