- 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 |
||
|---|---|---|
| .. | ||
| .cursor | ||
| assets | ||
| relay | ||
| scripts | ||
| src | ||
| .gitignore | ||
| AGENTS.md | ||
| app.json | ||
| eas.json | ||
| eslint.config.js | ||
| metro.config.js | ||
| notes.md | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| refactor.md | ||
| tsconfig.json | ||
| tsconfig.typecheck.json | ||
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.