
### Changed
- **Per-session auto-approve severity selector** — users can now choose the maximum risk level for auto-approved tool permissions per session: Off, None, Low, Medium, or High. Critical is intentionally never auto-approvable. Default is Low (backward compatible with original behavior). The setting persists in localStorage keyed by session ID.
- **Chat input redesigned as a unified card** — the message input, attachments, file mentions, toolbar, and send button are now contained in a single rounded card with a lighter background (`bg-input/30`). The previous `border-t` separator between chat and input has been removed for a seamless look. The card shows a subtle focus ring when the textarea is active.
- **Send button updated** — replaced the `Send` icon with an `ArrowUp` chevron in a compact round button (`size-8 rounded-full`). The button is primary-colored when content is present and muted when empty.
- **Auto-approve selector moved to input toolbar** — the shield icon dropdown now lives in the card's bottom toolbar row (next to the paperclip), eliminating icon collision with session controls in the chat header.
- **Textarea background unified with card** — added `dark:bg-transparent` override so the textarea no longer shows a different background tint than the surrounding card in dark mode.
- **Assistant message bubbles removed** — assistant messages now render directly on the page background without a card container, border, or padding. Only user messages retain their styled bubbles. This gives the assistant output a cleaner, more integrated feel.
- **Assistant content stretches full width** — assistant messages, tool calls, and visualizations now fill the full available width of the chat area instead of being shrink-wrapped to their natural width.
- **Tool call status icons moved to the start** — status indicators (pending spinner, success check, error cross, interrupted pause) now appear at the beginning of each tool call row instead of at the end, making the current state immediately visible at a glance.
- **Disabled chat input no longer changes color** — the textarea now maintains its transparent background when disabled (e.g., while streaming), instead of shifting to a different background color with reduced opacity.
- **Removed hardcoded width constraints on code blocks and visualizations** — `pre` elements and `.visualization-container` no longer have viewport-based `max-width` rules that artificially capped content width. They now naturally fill the available space within their parent container.
- **Fixed code block and diff viewer overflow** — DiffViewer and CodeBlock visualizations now properly contain long code lines with `max-w-full` and `overflow-hidden` on code content, preventing them from pushing the entire chat area wide. File path headers now truncate with an ellipsis on long paths.
- **Fixed MarkdownRenderer word breaking** — replaced invalid `wrap-break-words` with proper `break-words` class so long unbroken strings (e.g., file paths) wrap correctly instead of overflowing the chat area.
