fix(ui): friendly name and icon for the get_ast_outline tool card
Nightly Build / build (push) Successful in 7m54s

get_ast_outline was the one registry tool with no Tool::display_name and no
Tool::icon, so its chat card fell back to the raw function id and the generic
Filesystem glyph. It now declares "Code Outline" plus a new semantic icon key
'outline', mapped frontend-side to bi-list-nested with its own accent var in
both themes.
This commit is contained in:
2026-08-07 20:48:33 +01:00
parent 8013022321
commit e1b3d1c2ae
5 changed files with 8 additions and 2 deletions
+2 -2
View File
@@ -115,8 +115,8 @@ pub trait Tool: Send + Sync {
/// Semantic icon key for the chat card — **not** a glyph. The frontend maps the /// Semantic icon key for the chat card — **not** a glyph. The frontend maps the
/// key to a concrete icon + accent color (themeable), so the core commits to a /// key to a concrete icon + accent color (themeable), so the core commits to a
/// meaning, never a look. Known keys: `edit`, `read`, `list`, `search`, `shell`, /// meaning, never a look. Known keys: `edit`, `read`, `list`, `search`, `outline`,
/// `subagent`, `image`, `config`, `introspection`. The default derives from /// `shell`, `subagent`, `image`, `config`, `introspection`. The default derives from
/// [`category`](Self::category). /// [`category`](Self::category).
fn icon(&self) -> &str { fn icon(&self) -> &str {
match self.category() { match self.category() {
@@ -23,6 +23,8 @@ impl AstOutline {
impl Tool for AstOutline { impl Tool for AstOutline {
fn name(&self) -> &str { "get_ast_outline" } fn name(&self) -> &str { "get_ast_outline" }
fn category(&self) -> crate::tools::ToolCategory { crate::tools::ToolCategory::Filesystem } fn category(&self) -> crate::tools::ToolCategory { crate::tools::ToolCategory::Filesystem }
fn display_name(&self) -> &str { "Code Outline" }
fn icon(&self) -> &str { "outline" }
fn description(&self) -> &str { fn description(&self) -> &str {
"Start here when you need to understand a source file you don't already know — especially a large one. \ "Start here when you need to understand a source file you don't already know — especially a large one. \
+1
View File
@@ -19,6 +19,7 @@ const TOOL_ICON = {
read: { glyph: 'bi-file-earmark-text', cls: 'tool-ico--read' }, read: { glyph: 'bi-file-earmark-text', cls: 'tool-ico--read' },
list: { glyph: 'bi-folder2-open', cls: 'tool-ico--list' }, list: { glyph: 'bi-folder2-open', cls: 'tool-ico--list' },
search: { glyph: 'bi-search', cls: 'tool-ico--search' }, search: { glyph: 'bi-search', cls: 'tool-ico--search' },
outline: { glyph: 'bi-list-nested', cls: 'tool-ico--outline' },
shell: { glyph: 'bi-terminal', cls: 'tool-ico--shell' }, shell: { glyph: 'bi-terminal', cls: 'tool-ico--shell' },
subagent: { glyph: 'bi-diagram-3', cls: 'tool-ico--subagent' }, subagent: { glyph: 'bi-diagram-3', cls: 'tool-ico--subagent' },
image: { glyph: 'bi-image', cls: 'tool-ico--image' }, image: { glyph: 'bi-image', cls: 'tool-ico--image' },
+1
View File
@@ -260,6 +260,7 @@
.tool-ico--read { color: var(--tool-read); } .tool-ico--read { color: var(--tool-read); }
.tool-ico--list { color: var(--tool-list); } .tool-ico--list { color: var(--tool-list); }
.tool-ico--search { color: var(--tool-search); } .tool-ico--search { color: var(--tool-search); }
.tool-ico--outline { color: var(--tool-outline); }
.tool-ico--shell { color: var(--tool-shell); } .tool-ico--shell { color: var(--tool-shell); }
.tool-ico--subagent { color: var(--tool-subagent); } .tool-ico--subagent { color: var(--tool-subagent); }
.tool-ico--image { color: var(--tool-image); } .tool-ico--image { color: var(--tool-image); }
+2
View File
@@ -18,6 +18,7 @@
--tool-read: #0891b2; --tool-read: #0891b2;
--tool-list: #7c3aed; --tool-list: #7c3aed;
--tool-search: #9333ea; --tool-search: #9333ea;
--tool-outline: #0d9488;
--tool-shell: #475569; --tool-shell: #475569;
--tool-subagent: #0d9488; --tool-subagent: #0d9488;
--tool-image: #db2777; --tool-image: #db2777;
@@ -85,6 +86,7 @@
--tool-read: #22d3ee; --tool-read: #22d3ee;
--tool-list: #a78bfa; --tool-list: #a78bfa;
--tool-search: #c084fc; --tool-search: #c084fc;
--tool-outline: #2dd4bf;
--tool-shell: #94a3b8; --tool-shell: #94a3b8;
--tool-subagent: #2dd4bf; --tool-subagent: #2dd4bf;
--tool-image: #f472b6; --tool-image: #f472b6;