From 862e733ef53c381be9adb4df1996c43adb29ee65 Mon Sep 17 00:00:00 2001 From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> Date: Wed, 9 Jul 2025 19:28:46 -0300 Subject: [PATCH] agent: Make all icons used for tool calls consistent (#34160) Starting to use the `Tool...` family of icons dedicated & designed for the agent panel. Release Notes: - N/A --- assets/icons/clipboard.svg | 1 - assets/icons/file_delete.svg | 5 ----- assets/icons/search_code.svg | 1 - assets/icons/tool_copy.svg | 4 ++++ assets/icons/tool_delete_file.svg | 5 +++++ assets/icons/tool_diagnostics.svg | 5 +++++ assets/icons/tool_notification.svg | 4 ++++ crates/agent_ui/src/active_thread.rs | 6 +++--- crates/assistant_tools/src/copy_path_tool.rs | 2 +- crates/assistant_tools/src/create_directory_tool.rs | 2 +- crates/assistant_tools/src/delete_path_tool.rs | 2 +- crates/assistant_tools/src/diagnostics_tool.rs | 2 +- crates/assistant_tools/src/edit_file_tool.rs | 6 +++--- crates/assistant_tools/src/fetch_tool.rs | 2 +- crates/assistant_tools/src/find_path_tool.rs | 4 ++-- crates/assistant_tools/src/grep_tool.rs | 2 +- crates/assistant_tools/src/list_directory_tool.rs | 2 +- crates/assistant_tools/src/project_notifications_tool.rs | 2 +- crates/assistant_tools/src/read_file_tool.rs | 2 +- crates/assistant_tools/src/terminal_tool.rs | 2 +- crates/assistant_tools/src/thinking_tool.rs | 2 +- crates/assistant_tools/src/ui/tool_call_card_header.rs | 2 +- crates/assistant_tools/src/web_search_tool.rs | 9 +++++---- crates/icons/src/icons.rs | 7 ++++--- 24 files changed, 47 insertions(+), 34 deletions(-) delete mode 100644 assets/icons/clipboard.svg delete mode 100644 assets/icons/file_delete.svg delete mode 100644 assets/icons/search_code.svg create mode 100644 assets/icons/tool_copy.svg create mode 100644 assets/icons/tool_delete_file.svg create mode 100644 assets/icons/tool_diagnostics.svg create mode 100644 assets/icons/tool_notification.svg diff --git a/assets/icons/clipboard.svg b/assets/icons/clipboard.svg deleted file mode 100644 index 5c8842f3b7898cc59386679d572abb73378d4332..0000000000000000000000000000000000000000 --- a/assets/icons/clipboard.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/assets/icons/file_delete.svg b/assets/icons/file_delete.svg deleted file mode 100644 index b84f79958f39dd205742e945c44859a6f1000881..0000000000000000000000000000000000000000 --- a/assets/icons/file_delete.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/assets/icons/search_code.svg b/assets/icons/search_code.svg deleted file mode 100644 index 1cc9affeb80fe8111de1417a0241497de663ee90..0000000000000000000000000000000000000000 --- a/assets/icons/search_code.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/assets/icons/tool_copy.svg b/assets/icons/tool_copy.svg new file mode 100644 index 0000000000000000000000000000000000000000..e722d8a022fca603b87fc1859436fcc060355095 --- /dev/null +++ b/assets/icons/tool_copy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/tool_delete_file.svg b/assets/icons/tool_delete_file.svg new file mode 100644 index 0000000000000000000000000000000000000000..3276f3d78e8ca1bb6d79a58845577cb150f545aa --- /dev/null +++ b/assets/icons/tool_delete_file.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/tool_diagnostics.svg b/assets/icons/tool_diagnostics.svg new file mode 100644 index 0000000000000000000000000000000000000000..0ca18d63cc1366af88affc3a0b7f3d7d0195cf2b --- /dev/null +++ b/assets/icons/tool_diagnostics.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/tool_notification.svg b/assets/icons/tool_notification.svg new file mode 100644 index 0000000000000000000000000000000000000000..7510b3204000d714e8fb120179cbfc521e1abdd8 --- /dev/null +++ b/assets/icons/tool_notification.svg @@ -0,0 +1,4 @@ + + + + diff --git a/crates/agent_ui/src/active_thread.rs b/crates/agent_ui/src/active_thread.rs index 0e0e3756e3792cd36a7a32663a0d2f7a10d290df..e8651e0c5f6d0a17378b327bed2ad5df983fb813 100644 --- a/crates/agent_ui/src/active_thread.rs +++ b/crates/agent_ui/src/active_thread.rs @@ -2581,8 +2581,8 @@ impl ActiveThread { h_flex() .gap_1p5() .child( - Icon::new(IconName::LightBulb) - .size(IconSize::XSmall) + Icon::new(IconName::ToolBulb) + .size(IconSize::Small) .color(Color::Muted), ) .child(LoadingLabel::new("Thinking").size(LabelSize::Small)), @@ -2995,7 +2995,7 @@ impl ActiveThread { .overflow_x_scroll() .child( Icon::new(tool_use.icon) - .size(IconSize::XSmall) + .size(IconSize::Small) .color(Color::Muted), ) .child( diff --git a/crates/assistant_tools/src/copy_path_tool.rs b/crates/assistant_tools/src/copy_path_tool.rs index 28d6bef9dd899360cd08e28b876830f81a5bb50a..1922b5677a94e0eff8fef2bc12bdab8a0971f395 100644 --- a/crates/assistant_tools/src/copy_path_tool.rs +++ b/crates/assistant_tools/src/copy_path_tool.rs @@ -57,7 +57,7 @@ impl Tool for CopyPathTool { } fn icon(&self) -> IconName { - IconName::Clipboard + IconName::ToolCopy } fn input_schema(&self, format: LanguageModelToolSchemaFormat) -> Result { diff --git a/crates/assistant_tools/src/create_directory_tool.rs b/crates/assistant_tools/src/create_directory_tool.rs index b3e198c1b5e276032846dc8a6c2b67b02c917379..224e8357e5a6de98b088aede62daaa8524f2b6c2 100644 --- a/crates/assistant_tools/src/create_directory_tool.rs +++ b/crates/assistant_tools/src/create_directory_tool.rs @@ -46,7 +46,7 @@ impl Tool for CreateDirectoryTool { } fn icon(&self) -> IconName { - IconName::Folder + IconName::ToolFolder } fn input_schema(&self, format: LanguageModelToolSchemaFormat) -> Result { diff --git a/crates/assistant_tools/src/delete_path_tool.rs b/crates/assistant_tools/src/delete_path_tool.rs index e45c1976d1f32642b4091e9fad75385a5b4a7c93..b13f9863c9f7203ceb5e236c8a06903be4b93b68 100644 --- a/crates/assistant_tools/src/delete_path_tool.rs +++ b/crates/assistant_tools/src/delete_path_tool.rs @@ -46,7 +46,7 @@ impl Tool for DeletePathTool { } fn icon(&self) -> IconName { - IconName::FileDelete + IconName::ToolDeleteFile } fn input_schema(&self, format: LanguageModelToolSchemaFormat) -> Result { diff --git a/crates/assistant_tools/src/diagnostics_tool.rs b/crates/assistant_tools/src/diagnostics_tool.rs index 3b6d38fc06c0e9f8b95f031cb900ace74c5c6b04..84595a37b7069a194694cb70482928148116d465 100644 --- a/crates/assistant_tools/src/diagnostics_tool.rs +++ b/crates/assistant_tools/src/diagnostics_tool.rs @@ -59,7 +59,7 @@ impl Tool for DiagnosticsTool { } fn icon(&self) -> IconName { - IconName::XCircle + IconName::ToolDiagnostics } fn input_schema(&self, format: LanguageModelToolSchemaFormat) -> Result { diff --git a/crates/assistant_tools/src/edit_file_tool.rs b/crates/assistant_tools/src/edit_file_tool.rs index baf62c11f26cbefd0fcaecc6c99b0ebb71e42c93..0423f56145bc484108ff958419353e2378a3779a 100644 --- a/crates/assistant_tools/src/edit_file_tool.rs +++ b/crates/assistant_tools/src/edit_file_tool.rs @@ -139,7 +139,7 @@ impl Tool for EditFileTool { } fn icon(&self) -> IconName { - IconName::Pencil + IconName::ToolPencil } fn input_schema(&self, format: LanguageModelToolSchemaFormat) -> Result { @@ -783,8 +783,8 @@ impl ToolCard for EditFileToolCard { .child( h_flex() .child( - Icon::new(IconName::Pencil) - .size(IconSize::XSmall) + Icon::new(IconName::ToolPencil) + .size(IconSize::Small) .color(Color::Muted), ) .child( diff --git a/crates/assistant_tools/src/fetch_tool.rs b/crates/assistant_tools/src/fetch_tool.rs index 82b15b7a86905219167d4f4fb630e6c9bab2c79d..c8fa600e831e60ea22bfbaa8b54a9be3b142c567 100644 --- a/crates/assistant_tools/src/fetch_tool.rs +++ b/crates/assistant_tools/src/fetch_tool.rs @@ -130,7 +130,7 @@ impl Tool for FetchTool { } fn icon(&self) -> IconName { - IconName::Globe + IconName::ToolWeb } fn input_schema(&self, format: LanguageModelToolSchemaFormat) -> Result { diff --git a/crates/assistant_tools/src/find_path_tool.rs b/crates/assistant_tools/src/find_path_tool.rs index 86e67a8f58cd71aedd163e15cb95aeb9e3357a87..fd0e44e42cbe6fad373de21be6e263620c07d3d6 100644 --- a/crates/assistant_tools/src/find_path_tool.rs +++ b/crates/assistant_tools/src/find_path_tool.rs @@ -68,7 +68,7 @@ impl Tool for FindPathTool { } fn icon(&self) -> IconName { - IconName::SearchCode + IconName::ToolSearch } fn input_schema(&self, format: LanguageModelToolSchemaFormat) -> Result { @@ -313,7 +313,7 @@ impl ToolCard for FindPathToolCard { .mb_2() .gap_1() .child( - ToolCallCardHeader::new(IconName::SearchCode, matches_label) + ToolCallCardHeader::new(IconName::ToolSearch, matches_label) .with_code_path(&self.glob) .disclosure_slot( Disclosure::new("path-search-disclosure", self.expanded) diff --git a/crates/assistant_tools/src/grep_tool.rs b/crates/assistant_tools/src/grep_tool.rs index eb4c8d38e5a586ca7d236906ab537754deb36f1f..053273d71bc01191c19fa1e498290d77e8caac7c 100644 --- a/crates/assistant_tools/src/grep_tool.rs +++ b/crates/assistant_tools/src/grep_tool.rs @@ -70,7 +70,7 @@ impl Tool for GrepTool { } fn icon(&self) -> IconName { - IconName::Regex + IconName::ToolRegex } fn input_schema(&self, format: LanguageModelToolSchemaFormat) -> Result { diff --git a/crates/assistant_tools/src/list_directory_tool.rs b/crates/assistant_tools/src/list_directory_tool.rs index aef186b9ae5adcc0e7d1625d483b1e4d6d9d51ca..723416e2ce1048d42ceca2af18667817a467d1f2 100644 --- a/crates/assistant_tools/src/list_directory_tool.rs +++ b/crates/assistant_tools/src/list_directory_tool.rs @@ -58,7 +58,7 @@ impl Tool for ListDirectoryTool { } fn icon(&self) -> IconName { - IconName::Folder + IconName::ToolFolder } fn input_schema(&self, format: LanguageModelToolSchemaFormat) -> Result { diff --git a/crates/assistant_tools/src/project_notifications_tool.rs b/crates/assistant_tools/src/project_notifications_tool.rs index 01dcbba4ac54c34358de9f851aaca6e6db5201e1..168ec61ae98529e1c82dcbe1d4334436457bab44 100644 --- a/crates/assistant_tools/src/project_notifications_tool.rs +++ b/crates/assistant_tools/src/project_notifications_tool.rs @@ -31,7 +31,7 @@ impl Tool for ProjectNotificationsTool { } fn icon(&self) -> IconName { - IconName::Envelope + IconName::ToolNotification } fn input_schema(&self, format: LanguageModelToolSchemaFormat) -> Result { diff --git a/crates/assistant_tools/src/read_file_tool.rs b/crates/assistant_tools/src/read_file_tool.rs index 4d40fc6a7c71fc41cb23f689f3e9dc6b699f81c1..65122a847a114f89ad57a98c5f8559f2b5994460 100644 --- a/crates/assistant_tools/src/read_file_tool.rs +++ b/crates/assistant_tools/src/read_file_tool.rs @@ -68,7 +68,7 @@ impl Tool for ReadFileTool { } fn icon(&self) -> IconName { - IconName::FileSearch + IconName::ToolSearch } fn input_schema(&self, format: LanguageModelToolSchemaFormat) -> Result { diff --git a/crates/assistant_tools/src/terminal_tool.rs b/crates/assistant_tools/src/terminal_tool.rs index 6641873182b311c5a28cb975b7327adcb30a16df..03e76f6a5b657a706c2337087984757b62d0ab84 100644 --- a/crates/assistant_tools/src/terminal_tool.rs +++ b/crates/assistant_tools/src/terminal_tool.rs @@ -90,7 +90,7 @@ impl Tool for TerminalTool { } fn icon(&self) -> IconName { - IconName::Terminal + IconName::ToolTerminal } fn input_schema(&self, format: LanguageModelToolSchemaFormat) -> Result { diff --git a/crates/assistant_tools/src/thinking_tool.rs b/crates/assistant_tools/src/thinking_tool.rs index 4641b7359e1039cefb80e2a4f97ec5db94bfd90e..422204f97d46a487032534a846fce455c5bdc0b3 100644 --- a/crates/assistant_tools/src/thinking_tool.rs +++ b/crates/assistant_tools/src/thinking_tool.rs @@ -37,7 +37,7 @@ impl Tool for ThinkingTool { } fn icon(&self) -> IconName { - IconName::LightBulb + IconName::ToolBulb } fn input_schema(&self, format: LanguageModelToolSchemaFormat) -> Result { diff --git a/crates/assistant_tools/src/ui/tool_call_card_header.rs b/crates/assistant_tools/src/ui/tool_call_card_header.rs index a19ea8f2b7a8ac4a3281a8abb81311937fcf0449..b71453373feb84d91168576a5bc7c22f8d883aa9 100644 --- a/crates/assistant_tools/src/ui/tool_call_card_header.rs +++ b/crates/assistant_tools/src/ui/tool_call_card_header.rs @@ -82,7 +82,7 @@ impl RenderOnce for ToolCallCardHeader { .child( h_flex().h(line_height).justify_center().child( Icon::new(self.icon) - .size(IconSize::XSmall) + .size(IconSize::Small) .color(Color::Muted), ), ) diff --git a/crates/assistant_tools/src/web_search_tool.rs b/crates/assistant_tools/src/web_search_tool.rs index 9430ac9d9e245d4f8871fcf120cba9ed48a5ba97..24bc8e9cba36d09a301a5a398e268ff530bdd072 100644 --- a/crates/assistant_tools/src/web_search_tool.rs +++ b/crates/assistant_tools/src/web_search_tool.rs @@ -143,6 +143,8 @@ impl ToolCard for WebSearchToolCard { _workspace: WeakEntity, cx: &mut Context, ) -> impl IntoElement { + let icon = IconName::ToolWeb; + let header = match self.response.as_ref() { Some(Ok(response)) => { let text: SharedString = if response.results.len() == 1 { @@ -150,13 +152,12 @@ impl ToolCard for WebSearchToolCard { } else { format!("{} results", response.results.len()).into() }; - ToolCallCardHeader::new(IconName::Globe, "Searched the Web") - .with_secondary_text(text) + ToolCallCardHeader::new(icon, "Searched the Web").with_secondary_text(text) } Some(Err(error)) => { - ToolCallCardHeader::new(IconName::Globe, "Web Search").with_error(error.to_string()) + ToolCallCardHeader::new(icon, "Web Search").with_error(error.to_string()) } - None => ToolCallCardHeader::new(IconName::Globe, "Searching the Web").loading(), + None => ToolCallCardHeader::new(icon, "Searching the Web").loading(), }; let content = self.response.as_ref().and_then(|response| match response { diff --git a/crates/icons/src/icons.rs b/crates/icons/src/icons.rs index 9848cc9cee8fd6be8373e597362245def553fde3..cbb7d69209a0f9b1488e3f9ee16fb22914b2697e 100644 --- a/crates/icons/src/icons.rs +++ b/crates/icons/src/icons.rs @@ -66,7 +66,6 @@ pub enum IconName { Circle, CircleOff, CircleHelp, - Clipboard, Close, Cloud, Code, @@ -118,7 +117,6 @@ pub enum IconName { File, FileCode, FileCreate, - FileDelete, FileDiff, FileDoc, FileGeneric, @@ -215,7 +213,6 @@ pub enum IconName { Scissors, Screen, ScrollText, - SearchCode, SearchSelection, SelectAll, Send, @@ -254,8 +251,12 @@ pub enum IconName { ThumbsDown, ThumbsUp, ToolBulb, + ToolCopy, + ToolDeleteFile, + ToolDiagnostics, ToolFolder, ToolHammer, + ToolNotification, ToolPencil, ToolRegex, ToolSearch,