diff --git a/crates/core-api/src/tool.rs b/crates/core-api/src/tool.rs index 629a730..8f15073 100644 --- a/crates/core-api/src/tool.rs +++ b/crates/core-api/src/tool.rs @@ -115,8 +115,8 @@ pub trait Tool: Send + Sync { /// 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 - /// meaning, never a look. Known keys: `edit`, `read`, `list`, `search`, `shell`, - /// `subagent`, `image`, `config`, `introspection`. The default derives from + /// meaning, never a look. Known keys: `edit`, `read`, `list`, `search`, `outline`, + /// `shell`, `subagent`, `image`, `config`, `introspection`. The default derives from /// [`category`](Self::category). fn icon(&self) -> &str { match self.category() { diff --git a/crates/skald-core/src/tools/ast_outline.rs b/crates/skald-core/src/tools/ast_outline.rs index 495b5a2..339c5e8 100644 --- a/crates/skald-core/src/tools/ast_outline.rs +++ b/crates/skald-core/src/tools/ast_outline.rs @@ -23,6 +23,8 @@ impl AstOutline { impl Tool for AstOutline { fn name(&self) -> &str { "get_ast_outline" } 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 { "Start here when you need to understand a source file you don't already know — especially a large one. \ diff --git a/web/components/copilot-render.js b/web/components/copilot-render.js index 42b5d0a..fba5edb 100644 --- a/web/components/copilot-render.js +++ b/web/components/copilot-render.js @@ -19,6 +19,7 @@ const TOOL_ICON = { read: { glyph: 'bi-file-earmark-text', cls: 'tool-ico--read' }, list: { glyph: 'bi-folder2-open', cls: 'tool-ico--list' }, 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' }, subagent: { glyph: 'bi-diagram-3', cls: 'tool-ico--subagent' }, image: { glyph: 'bi-image', cls: 'tool-ico--image' }, diff --git a/web/css/copilot-messages.css b/web/css/copilot-messages.css index 23bd881..d2f8f09 100644 --- a/web/css/copilot-messages.css +++ b/web/css/copilot-messages.css @@ -260,6 +260,7 @@ .tool-ico--read { color: var(--tool-read); } .tool-ico--list { color: var(--tool-list); } .tool-ico--search { color: var(--tool-search); } +.tool-ico--outline { color: var(--tool-outline); } .tool-ico--shell { color: var(--tool-shell); } .tool-ico--subagent { color: var(--tool-subagent); } .tool-ico--image { color: var(--tool-image); } diff --git a/web/css/variables.css b/web/css/variables.css index d8efea4..afbfdbf 100644 --- a/web/css/variables.css +++ b/web/css/variables.css @@ -18,6 +18,7 @@ --tool-read: #0891b2; --tool-list: #7c3aed; --tool-search: #9333ea; + --tool-outline: #0d9488; --tool-shell: #475569; --tool-subagent: #0d9488; --tool-image: #db2777; @@ -85,6 +86,7 @@ --tool-read: #22d3ee; --tool-list: #a78bfa; --tool-search: #c084fc; + --tool-outline: #2dd4bf; --tool-shell: #94a3b8; --tool-subagent: #2dd4bf; --tool-image: #f472b6;