aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-18 04:24:24 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-19 14:27:41 +0300
commitb04c4ca3dab872b3e9dfe05f1af767e5b6af1127 (patch)
tree4ada71a7ae58c2a5862b81c1f6d2db9a56f42cf4 /src
parentd616bcd6b86742762fec5f0696a5c13701fe717c (diff)
fix: show agent names in sidebar
refs #145
Diffstat (limited to 'src')
-rw-r--r--src/ui/sidebar.rs28
-rw-r--r--src/workspace/aggregate.rs28
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());