aeba004c7b
Sub-area #3 of the v0.6.6 UI redesign (issue #121). Introduces `crates/tui/src/tui/widgets/tool_card.rs` — a small, self-contained vocabulary module that owns: - `ToolFamily` enum (Read / Patch / Run / Find / Delegate / Fanout / Think / Generic) and the verb-glyph + label per family (▷ read, ◆ patch, ▶ run, ⌕ find, ◐ delegate, ⋮⋮ fanout, … think) - `tool_family_for_title` — maps the legacy header titles (`"Shell"`, `"Patch"`, `"Workspace"`, `"Search"`, `"Diff"`, `"Image"`) to a family, so existing call sites pick up the new glyph without re-architecture - `tool_family_for_name` — maps actual tool names (`agent_spawn`, `apply_patch`, etc.) for `GenericToolCell`, which shares the catch-all `"Tool"` title across every model-facing tool - `CardRail` + `rail_glyph` — the `╭ │ ╰` rail vocabulary, declared here so any future per-card refactor has the matching glyphs Wires the verb glyph + label into `render_tool_header` and adds a `render_tool_header_with_family` overload so `GenericToolCell` can route by tool name rather than the generic title. The header now reads `<spinner> <verb-glyph> <verb> <state>` instead of `<spinner> <Title-Case-Word> <state>`. Existing parity tests for ExecCell / PlanUpdate are updated to assert against the new header structure (verb + glyph) — the colour wiring is unchanged. New tests pin the verb-glyph format end-to-end: `agent_spawn` → `◐ delegate`, exec → `▶ run`. Spinner cadence (TOOL_STATUS_SYMBOL_MS = 720 ms) is unchanged — the spec already matched. Deferred to a follow-up: full per-card rail (`╭ │ ╰`) refactor that threads `CardRail` through every cell render path. The vocabulary is in place; the layout pass is the next bite. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>