diff --git a/ui/src/components/task-chat/TaskChatBubble.tsx b/ui/src/components/task-chat/TaskChatBubble.tsx
index 82478bcf0a0..714e7c2628a 100644
--- a/ui/src/components/task-chat/TaskChatBubble.tsx
+++ b/ui/src/components/task-chat/TaskChatBubble.tsx
@@ -41,7 +41,7 @@ export function TaskChatBubble({ item }: TaskChatBubbleProps) {
return (
{
it("maps each family to its icon and verb", () => {
expect(toolTaxonomy("Bash")).toEqual({
family: "terminal",
- icon: SquareTerminal,
+ icon: Terminal,
verbLabel: "Running a command",
});
expect(toolTaxonomy("Shell").family).toBe("terminal");
@@ -38,14 +37,15 @@ describe("toolTaxonomy", () => {
expect(toolTaxonomy("Read")).toEqual({
family: "read",
- icon: Book,
+ icon: BookOpen,
verbLabel: "Reading files",
});
expect(toolTaxonomy("NotebookRead").family).toBe("read");
+ // Round-4 board feedback: edits share the terminal glyph.
expect(toolTaxonomy("Edit")).toEqual({
family: "edit",
- icon: SquarePen,
+ icon: Terminal,
verbLabel: "Editing files",
});
expect(toolTaxonomy("Write").family).toBe("edit");
@@ -87,10 +87,10 @@ describe("toolTaxonomy", () => {
describe("toolTaxonomy multi-word ACP titles", () => {
it("classifies by the first word", () => {
- expect(toolTaxonomy("Read File").icon).toBe(Book);
- expect(toolTaxonomy("Edit File").icon).toBe(SquarePen);
- expect(toolTaxonomy("Write File").icon).toBe(SquarePen);
- expect(toolTaxonomy("Terminal").icon).toBe(SquareTerminal);
+ expect(toolTaxonomy("Read File").icon).toBe(BookOpen);
+ expect(toolTaxonomy("Edit File").icon).toBe(Terminal);
+ expect(toolTaxonomy("Write File").icon).toBe(Terminal);
+ expect(toolTaxonomy("Terminal").icon).toBe(Terminal);
});
});
diff --git a/ui/src/components/task-chat/tool-taxonomy.ts b/ui/src/components/task-chat/tool-taxonomy.ts
index 9364519f844..c9ee6579f75 100644
--- a/ui/src/components/task-chat/tool-taxonomy.ts
+++ b/ui/src/components/task-chat/tool-taxonomy.ts
@@ -6,15 +6,14 @@
* tools.
*/
import {
- Book,
+ BookOpen,
Brain,
ChevronsLeftRightEllipsis,
MessageSquareReply,
Network,
Search,
SearchCode,
- SquarePen,
- SquareTerminal,
+ Terminal,
Wrench,
} from "lucide-react";
import type { ComponentType, SVGProps } from "react";
@@ -70,11 +69,12 @@ export function mcpToolSegment(name: string): string | null {
}
const FAMILY_META: Record, Omit> = {
- terminal: { icon: SquareTerminal, verbLabel: "Running a command" },
+ terminal: { icon: Terminal, verbLabel: "Running a command" },
grep: { icon: SearchCode, verbLabel: "Grepping" },
search: { icon: Search, verbLabel: "Searching" },
- read: { icon: Book, verbLabel: "Reading files" },
- edit: { icon: SquarePen, verbLabel: "Editing files" },
+ read: { icon: BookOpen, verbLabel: "Reading files" },
+ // Board round-4 feedback asked for the terminal glyph on edits as well.
+ edit: { icon: Terminal, verbLabel: "Editing files" },
web: { icon: ChevronsLeftRightEllipsis, verbLabel: "Fetching the web" },
agent: { icon: Network, verbLabel: "Delegating" },
other: { icon: Wrench, verbLabel: "Working" },
diff --git a/ui/src/index.css b/ui/src/index.css
index b2efaa013b1..7957c605b72 100644
--- a/ui/src/index.css
+++ b/ui/src/index.css
@@ -592,6 +592,10 @@
CSS-only typewriter, no per-char timers. Text appended to an existing block
lands instantly; history omits the class entirely. */
.tc-typewriter-stream .paperclip-markdown > * { animation: tc-typewriter var(--motion-typewriter-reveal) var(--motion-typewriter-steps) both; }
+/* Interstitial narration matches the tool rows (text-xs): prose-sm sets its
+ own font-size on .paperclip-markdown, so the wrapper's text-xs alone can't
+ shrink it — this scoped override wins on specificity. */
+.tc-interstitial .paperclip-markdown { font-size: var(--text-xs); line-height: var(--text-xs--line-height); }
/* Scroll-to-latest pill (stock shadcn MessageScrollerButton motion, tokenized).
The pill is centered with translateX(-50%), so the keyframes carry the X