# v1.0.6

## Mobile & PWA

- **Fixed mobile viewport height** — replaced `height: 100%` and `100vh` with `100dvh` (dynamic viewport height) across the app. On real phones, the browser address bar dynamically hides/shows; `100dvh` resizes correctly whereas `100%` and `100vh` do not.
- **Fixed touch scroll-to-free** — added `touchstart`/`touchmove` listeners to the virtualized chat transcript. Swiping up on mobile now automatically disables auto-follow mode (same as the `wheel` event on desktop). Previously, touch scrolling was trapped in follow mode and required manually tapping the follow button.
- **Fixed `useIsMobile`/`useIsCompact` layout flash** — hooks now initialize synchronously instead of starting as `undefined`, preventing a brief desktop layout render on mobile.
- **Added `touch-action: manipulation`** on `html` — eliminates the 300ms tap delay on mobile browsers.
- **Fixed mobile header z-index** — reduced from `z-[60]` to `z-40` so it no longer bleeds through overlays (sheets, dialogs, dropdowns) which use `z-50`.
- **Fixed PWA safe-area double-padding** — removed duplicate `safe-area-inset-top` on main content (header already accounts for it). Removed height subtraction of `safe-area-inset-bottom` from sheets and sidebars — backgrounds now extend to screen edge with padding only on scrollable inner content.
- **Fixed PWA bottom card spacing** — reduced main content bottom padding to `0.5rem` so the card's rounded border has breathing room without wasting space for the home indicator.
- **Fixed PromptsPanel mobile overflow** — replaced `truncate` (forces nowrap) with `line-clamp-1` for descriptions. Reduced action button size from `size-8` to `size-icon-xs`. Textarea: `h-48 sm:h-64`. Added `min-w-0 overflow-hidden` to prompt list items.

## PWA Support (New)

- Added `vite-plugin-pwa` with full offline caching via Workbox.
- `navigateFallback: 'index.html'` with API/WebSocket denylist — SPA deep links work offline.
- Cache strategies: `CacheFirst` for static assets (30-day expiry), `NetworkFirst` for HTML navigations.
- Web app manifest with standalone display mode, theme color, and icons at 192px, 512px, and 180px (apple-touch-icon).
- Service worker auto-update mode — new versions activate on next visit.

## Tauri Removal

- Removed all Tauri dependencies (`@tauri-apps/api`, `@tauri-apps/plugin-store`, `@tauri-apps/cli`).
- Stripped Tauri platform detection, storage paths, notification sound paths, keyboard handler accelerators, and client identity labels.
- Removed Tauri env variables and build conditionals from `vite.config.ts`.
- Deleted `README-ios.md`.

## Assets & Build

- **Fixed absolute asset paths for deep-link refreshes** — changed `base` from `'./'` (relative, breaks on `/server/:id` routes) to `'/'` (absolute). Electron builds override with `VITE_BASE='./'` for `file://` protocol compatibility.
- Moved `favicon.ico` to `public/` directory and added `<link rel="icon">` to `index.html`.
- Added HTTPS `preview` config in `vite.config.ts` (mirrors `server` config).
- Added root-level `preview` and `preview:https` scripts.

## Model Selector Fixes

- **Fixed model selector not showing selection for overlapping model IDs** — uses composite `providerId:modelId` keys for items, values, and selection tracking instead of bare `modelId`. Selecting `gpt-5.5` under OpenAI no longer conflicts with `gpt-5.5` under Codex.
- **Fixed model selector checkmark visibility** — `CommandItem` now uses `showCheck={false}` (disabling cmdk's built-in checkmark) and renders explicit `<Check>` icons computed directly from props. This bypasses cmdk's internal `data-[checked=true]` state which was unreliable when the Popover remounts.
- **Fixed `ChatHeader` not passing `selectedProviderId`** — `ModelSelector` now receives `selectedProviderId={session.selectedProvider}` and uses provider-aware model lookups for both the selected-model display and the `currentModelInfo` context window calculation.
