Features
Mobile Navigation Overhaul
- Bottom Tab Bar: New route-aware mobile tab navigation with repo context awareness
- MoreDrawer: Rebuilt as a route-aware menu with URL-based dialog state
- RepoQuickSwitchSheet: Fast repo switching with integrated search in header
- NotificationsSheet: Dedicated mobile sheet for notifications
- MobileSheetHost: Centralized mobile sheet orchestration
- Path-aware Swipe Back: Improved swipe-back navigation with path-based target resolution
- Split Swipe Hooks: Refactored
useSwipeToCloseinto focuseduseSwipeBackanduseSwipeDismisshooks - SwipeNavigationContext: Centralized swipe gesture coordination, replacing the navigation store
OpenCode Authentication
- Server-side Auth: Added
OPENCODE_SERVER_USERNAMEandOPENCODE_SERVER_PASSWORDenv vars for securing the OpenCode server - Basic Auth Proxying: Backend proxy automatically injects auth headers for authenticated OpenCode servers
Voice & TTS Improvements
- Lazy Mic Initialization: STT audio worklet loads on demand to reduce startup cost
- Session Cleanup: Better cleanup of audio resources across session transitions
- TTS Accessibility: Cleaner button titles with separate ARIA labels
- Improved Voice Controls: Better mobile voice controls with clearer state indication
Fixes
- Model ID Slashes: Correctly handle model IDs containing slashes (#186)
- Session Title Generation: Removed custom title generation in favor of OpenCode's native handling (#187)
- Markdown Image Sanitization: Safer rendering of markdown image content
- Mobile Button Sizing: Consistent touch targets across mobile UI
- Tab Bar Visibility: Hide tab bar on session pages to maximize content space
- Safe Area Padding: Proper safe area insets for notched devices
UI & UX Refinements
- Bottom Sheet: New reusable bottom sheet component with safe area handling
- Side Drawer: New side drawer component
- Error Boundary: New error boundary component for graceful error handling
- Schedule Scrolling: Mask gradients on schedule and run history lists
- Repos Page: Adjusted bottom padding to avoid overlap with mobile tab bar
Technical Improvements
- Added
useMobileTabBaranduseDialogParamhooks for URL-driven dialog state - Added
useMemoryPluginStatushook - Removed dead code:
PageTransition,useNavigationDirection,navigationStore,list-toolbar - Docker: Added cache and opencode directories to setup, fixed SQLite volume permissions
- Extensive test coverage added for new mobile navigation components
Full Changelog: v0.9.16...v0.9.20