TranscriptPanel
The outer chat-transcript card — header with a live turn count, the turn-navigator rail (hidden for a single turn), and the scrolling turn stack. Self-contained: sizing is shrink-to-fit by default (max-h-full, not h-full) so a short transcript takes its natural height and a long one fills the ancestor's available space and scrolls internally past that, never the outer page. minHeight is a floor under both.
Chat Transcript
9 turnsCan you bump our webhook rate limit? We keep getting throttled during traffic spikes.
Sure — I'll check the current config and raise maxPerSecond and burst for the webhooks entry.
Running as svc-deploy-bot, which has write access to proj/config. I'll update rate-limits.json next.
Updating the webhooks block now.
Okie, let's run it again to see if we can get better results.
Zero throttled requests over the 60s replay window, p95 latency held at 118ms.
Before we ship this — does raising the limit change behavior for any other consumer of the webhooks queue, like the billing webhook or the retry worker?
Checking — rate-limits.json scopes limits per integration key, so this only touches 'webhooks'.
The billing entry is untouched — its limits stay at 10/20. Retry worker reads the same webhooks limit, so it benefits from the same headroom.
Looks good, thanks!
Webhook rate limits raised to 50 req/s (burst 100), verified against a 2x traffic replay with zero throttled requests, and confirmed the change is scoped to the webhooks integration only.
Usage
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| transcript | Object | (required) | Transcript — { user: string, agent: string, turns: TranscriptTurn[] }. See app/data/transcript-fixtures.ts in the design repo for the full type + example fixtures. |
| minHeight | String | '480px' | CSS length floor under the shrink-to-fit / fill-available-space sizing. |