v0.12.0
Features
- Provider presets — Add connections via preset cards (OpenAI, OpenRouter, Groq, Together, DeepSeek, Ollama, Custom) in a 2-column grid dialog. Each preset pre-fills the base URL, API key requirement, custom HTTP headers, and suggested models.
- Multi-connection support — Add and manage multiple independent OpenAI-compatible connections simultaneously. Each connection gets its own edit state, health cache, and delete capability. OllamaLocal is pinned (no delete).
- Web search settings moved — API key management (Exa, Tavily, Ollama) moved from General tab to Connections tab alongside the LLM providers.
- Custom HTTP headers — OpenRouter preset passes HTTP-Referer and X-Title headers via reqwest client. Extensible for any provider that needs custom headers.
Bug Fixes
- API key 401s now show proper error state — Invalid API keys no longer produce a completed message with raw error text. The message bubble now shows a red "Generation Error" banner with the error details. Fixed both startup errors (before streaming) and mid-stream errors.
- #45: Provider polling stutter — setProviders now returns the same state object when data hasn't changed, preventing unnecessary subscriber notifications that caused edit fields to reset mid-typing.
- #50, #46 — Fixed.
- #52: Can't select text in chat — Restored text selection in the chat area.
- #44: Thinking shimmer freeze — Replaced Motion-based thinking shimmer animation with CSS opacity pulse to fix the freeze bug.
- Lazy loading for settings tab — Fixed settings modal lazy loading.
Performance
- CSS animations — Replaced simple Motion animations with CSS classes (fade-in, slide-in, popover, thinking-pulse, shimmer) across the app: main.tsx, StartupLoadingScreen, ProfileMenu, ChatInput, SlashCommandMenu, ThinkingDisclosure, chain-of-thought. Retained Motion only for complex layout animations (sidebar, toasts, feature badges, attachments).
Chores
- Bumped version to v0.12.0
- Deleted deprecated ProviderTab.tsx
- Added src/services/providers/presets.ts
Full Changelog: v0.11.1...v0.12.0