- SSE recovery: retry syncSessionState on stream failure or natural close - Periodic 20s polling fallback while monitorJob is active in foreground - syncSessionState retries after 5s when runtime status fetch fails - isSending 5s safety timeout to prevent permanent send block - Prompt history and swipe hint colors changed to neutral grays - Swipe hint fades out/in inversely with waveform visibility - Session list excludes subagent sessions via roots=true API param
Mobile Voice
Expo app for voice dictation and OpenCode session monitoring.
Current monitoring behavior
- Foreground: app reads OpenCode SSE (
GET /event) and updates monitor status live. - Background/terminated: app relies on APNs notifications sent by
apn-relay. - The app registers its native APNs device token with relay route
POST /v1/device/register.
App requirements
- Use a development build or production build (not Expo Go).
expo-notificationsplugin is enabled withenableBackgroundRemoteNotifications: true.- Notification permission must be granted.
Server entry fields in app
When adding a server, provide:
- OpenCode URL
- APN relay URL
- Relay shared secret
Default APN relay URL: https://apn.dev.opencode.ai
The app uses these values to:
- send prompts to OpenCode
- register/unregister APNs token with relay
- receive background push updates for monitored sessions
Local dev
npx expo start
Use your machine LAN IP / reachable host values for OpenCode and relay when testing on a physical device.