I’ll check the route handler and confirm the limiter API first.
Components
Each component in isolation, rendered from AI SDK v7 message parts. Everything here is interactive and keyboard accessible.
<AgentStatus />
Run state in one pill, announced through a live region.
<ToolCallTimeline />
Every tool state with durations, a waterfall, and expandable input and output.
ENOENT: no such file or directory, open 'middleware.ts'
- !
<ApprovalCard />
Human-in-the-loop approval with risk, preview and Y / N shortcuts.
Approval required
High riskRun command
Installs a package from the npm registry and updates package.json and pnpm-lock.yaml.
<DiffReview />
Accept or reject agent edits hunk by hunk, unified or split.
Review changes
2 files · 4 hunks · +21 −1
2/4 reviewed · unreviewed hunks are skipped
Keyboard: J or K to move between hunks, A to accept, R to reject, U to reset, Shift A or Shift R for all hunks, Ctrl Enter to apply.
<RunMeter />
Tokens, estimated cost and latency; compact for headers, expanded for panels.
Run
mock-agent-1- Tokens
- 41.1k
- Est. cost
- $0.056
- Input 38.7k(28.8k cached)
- Output 2.41k(96 reasoning)
- TTFT
- 684ms
- Total
- 21.8s
- Cache hit
- 74%
$0.032 input · $0.024 output · $2.5/$10 per 1M
Pass totalUsage from streamText through message metadata, and timing from useRunTiming(status). Cost is an estimate from the pricing you supply.
<Sources />
Citations as compact chips or cards; inline [n] markers link to them.
Sources · 3
<Theming />
Every color, radius and font is a CSS variable. Light is the default, .dark switches, and any subtree can override tokens.
ENOENT: no such file or directory, open 'middleware.ts'
ENOENT: no such file or directory, open 'middleware.ts'
ENOENT: no such file or directory, open 'middleware.ts'
<AgentMessage />
A whole assistant UIMessage: reasoning, streaming markdown, grouped tool calls and sources.