agent_ui: Fix fallback icon used for external agents (#44777)
Danilo Leal
created 2 weeks ago
When an external agent doesn't provide an icon, we were using different
fallback icons in all the places we display icons (settings view, thread
new menu, and the thread view toolbar itself).
Release Notes:
- N/A
Change summary
crates/agent_ui/src/agent_configuration.rs | 3 ++-
crates/agent_ui/src/agent_panel.rs | 21 +++++++++++----------
2 files changed, 13 insertions(+), 11 deletions(-)
Detailed changes
@@ -975,7 +975,7 @@ impl AgentConfiguration {
let icon = if let Some(icon_path) = agent_server_store.agent_icon(&name) {
AgentIcon::Path(icon_path)
} else {
- AgentIcon::Name(IconName::Ai)
+ AgentIcon::Name(IconName::Sparkle)
};
let display_name = agent_server_store
.agent_display_name(&name)
@@ -1137,6 +1137,7 @@ impl AgentConfiguration {
) -> impl IntoElement {
let id = id.into();
let display_name = display_name.into();
+
let icon = match icon {
AgentIcon::Name(icon_name) => Icon::new(icon_name)
.size(IconSize::Small)
@@ -259,7 +259,7 @@ impl AgentType {
Self::Gemini => Some(IconName::AiGemini),
Self::ClaudeCode => Some(IconName::AiClaude),
Self::Codex => Some(IconName::AiOpenAi),
- Self::Custom { .. } => Some(IconName::Terminal),
+ Self::Custom { .. } => Some(IconName::Sparkle),
}
}
}
@@ -1851,14 +1851,17 @@ impl AgentPanel {
let agent_server_store = self.project.read(cx).agent_server_store().clone();
let focus_handle = self.focus_handle(cx);
- // Get custom icon path for selected agent before building menu (to avoid borrow issues)
- let selected_agent_custom_icon =
+ let (selected_agent_custom_icon, selected_agent_label) =
if let AgentType::Custom { name, .. } = &self.selected_agent {
- agent_server_store
- .read(cx)
- .agent_icon(&ExternalAgentServerName(name.clone()))
+ let store = agent_server_store.read(cx);
+ let icon = store.agent_icon(&ExternalAgentServerName(name.clone()));
+
+ let label = store
+ .agent_display_name(&ExternalAgentServerName(name.clone()))
+ .unwrap_or_else(|| self.selected_agent.label());
+ (icon, label)
} else {
- None
+ (None, self.selected_agent.label())
};
let active_thread = match &self.active_view {
@@ -2090,7 +2093,7 @@ impl AgentPanel {
if let Some(icon_path) = icon_path {
entry = entry.custom_icon_svg(icon_path);
} else {
- entry = entry.icon(IconName::Terminal);
+ entry = entry.icon(IconName::Sparkle);
}
entry = entry
.when(
@@ -2154,8 +2157,6 @@ impl AgentPanel {
}
});
- let selected_agent_label = self.selected_agent.label();
-
let is_thread_loading = self
.active_thread_view()
.map(|thread| thread.read(cx).is_loading())