
### Changed
- **Refactored HTTP data fetching from manual `useEffect`/`useCallback` patterns to TanStack React Query** — added `@tanstack/react-query@5` with a centralized `QueryClient`, query key factory, and query/mutation hooks for all config panels (Tools, Models, Preconfigs, Prompts, Providers, MCP), file browsing (FileTree, FolderPickerDialog, file preview), session lists, and workspace CRUD. WebSocket event handlers now invalidate relevant query caches to keep them in sync with real-time state. Config mutations sync updated data back to the Zustand `serverDataStore` so components reading from either source stay consistent.
- **API token validation relaxed to accept any non-empty string** — `isValidTokenFormat()` now checks `token.trim().length > 0` instead of requiring exactly 64 hex characters. Token input forms no longer show format errors; the server's `verifyToken` call is the sole authority on validity.
- **Optional API token across SDK and client** — the token is no longer required to connect. The SDK (`HttpClient`, `WebSocketTransport`, terminal namespace) and client (all server forms) now accept an empty/undefined token, enabling seamless connections to servers with authentication disabled (default).
- **API token field hidden behind a toggle** — all server forms (`AddServerDialog`, `FirstServerScreen`, `TokenPrompt`) now hide the token input behind a toggle switch. The field only appears when the user enables it, keeping the form clean for the common case (no auth). When editing a server that already has a token, the toggle starts enabled.
- **No auto-redirect to first server** — the landing page at `/` no longer automatically redirects to the first saved server. Users always see the server selection screen.
- **Stale server URL redirects to home** — navigating to a `/server/$serverId` that no longer exists now redirects to `/` instead of trying the first server.
- **New `/add-server` route** — the add-server form (formerly `FirstServerScreen` only shown when no servers exist) is now a dedicated route accessible from the server selection screen's "Add a Server" button. Includes a back button for desktop/web navigation.

### Added
- **Inline error messages in the chat stream** — assistant messages that fail with an error (rate limit, server error, timeout, auth failure, context overflow, etc.) now render as styled inline error bubbles instead of empty messages. A new `ErrorMessageContent` component classifies errors by type and displays contextual icons, labels, and descriptions.
- **Simplified server connection error screen** — replaced "Remove This Server", "Go to Home", and "Switch Server" buttons with a single "Back to Server Selection" button.
- **Server status indicators on selection screen** — each saved server now shows a colored dot (green = online, red = offline) next to its name. Status is checked on page load via `/api/info`, with a refresh button to re-check.
- **Delete servers from selection screen** — added a trash icon (visible on hover) to each server card on the landing page, with a confirmation dialog.

### Fixed
- **Error messages no longer appear as empty bubbles** — when an LLM request fails (rate limit, server error, timeout, etc.), the assistant message in the chat now shows the actual error information inline instead of rendering as an empty message.
- **Sound no longer plays on error messages** — the chat finish sound is now suppressed when the assistant message status is `error`, so users don't hear a false-positive "completion" chime on failures.
- **Settings > Account shows logout for no-auth servers** — the Account tab previously showed "No active session" when connected to a server without auth. It now correctly shows the logout button with an "Auth disabled" label, using connection state (`isConnected`) instead of token presence.
- **Overview view missing card styling** — the overview (all workspaces) view now matches the single workspace view's card layout with proper padding, rounded corners, shadow, and border ring.
- **Tooltips hidden behind Windows native window controls** — on Windows Electron, the tooltips for "Single workspace", "Overview", and "More" buttons in the app header were rendered behind the OS-level window control overlay. Tooltips now appear below the buttons on Windows to avoid the overlay area.
- **Missing tooltip on workspace "More" dropdown** — the 3-dot dropdown button in the workspace header now shows a "More" tooltip on hover, consistent with the app header.
