dashboard: generic <ToolCard> — header/pill/duration/caret, errors+approvals open, successes collapsed #960
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Blocks
Depends on
#964 dashboard: persistent Plan/Todo panel — sticky pinned, diff successive TodoWrite/UpdateTodos calls
charles/claude-hooks
#965 dashboard: subagent tree (rail) + swimlane (timeline) for parallel agent runs
charles/claude-hooks
#966 dashboard: inline approval card — Approve/Deny with Y/N kbd, redacted preview, 5-min auto-deny, audit event
charles/claude-hooks
#970 dashboard: artifact side panel — pinnable PR previews, file edits, Penpot frames, design-review screenshots
charles/claude-hooks
#971 dashboard: aggregated multi-file diff review pane (Cursor 3 style) for an agent run
charles/claude-hooks
#975 dashboard: mobile / narrow-viewport layout for agent run view
charles/claude-hooks
Reference
charles/claude-hooks#960
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
User story
As a frontend engineer, I want a single
<ToolCard>primitive every tool widget composes into, so error/approval cards stay open by default while plain successes auto-collapse to a one-liner — matching the Vercel AI ElementsToolergonomics.Acceptance criteria
<ToolCard>inapps/web/src/components/agent/tool-card.tsx. Composition:<ToolCardHeader>— tool icon (lucide; chosen byToolKind), tool name, target chip (file path / URL / command head),<StatusPill>driven by the SSEstateenum, live duration counter, caret toggle.<ToolCardBody>— collapsible. Slots:inputViewandoutputView.state === "output-available"and no error.stateisoutput-error,approval-requested, oroutput-denied.stateisinput-streamingorinput-available.prefers-reduced-motion— no caret rotation animation when set.rounded-card,border border-border,shadow-none, hover stateshadow-subtle. Status pill isrounded-pill.<button>for the caret — use existing<Button>primitive withtone="ghost".Out of scope
ToolKindwidget).Dependencies
References
<Tool>: https://elements.ai-sdk.dev/components/tool — start by copying its JSX, repaint to Tokyo Night, replace icons with lucide.apps/web/CLAUDE.md.🤖 Auto-assigned to dev (heuristic: area:dashboard + body 1763 bytes (≤ 2 KB) — code role). Reply
/unassignto reroute.🧹 janitor: this ticket has been idle-assigned since 2026-05-08T18:26:12.000Z. Re-dispatching.
🦵 @charles kicked the queue — re-running implement on @dev.