Files
opencode/packages/mobile-voice
Ryan Vogel 057208e022 fix: prevent spurious session-complete notifications from APN relay
Remove message.updated -> complete classification in the mobile foreground
SSE monitor. The processor cleanup stamps time.completed on every assistant
message after each LLM step, not just at session end, causing premature
complete events. The sole reliable signal is session.status with type idle.

Remove the redundant status.set(idle) from the processor halt() path. The
Runner onIdle callback already transitions to idle when the loop exits,
so the explicit set in halt was firing a duplicate complete notification
alongside the error notification.
2026-04-04 19:43:50 +00:00
..
2026-03-28 13:30:21 -04:00
2026-03-28 13:30:21 -04:00
2026-03-28 13:30:21 -04:00
2026-03-28 13:30:21 -04:00
2026-03-28 13:30:21 -04:00
2026-03-28 13:30:21 -04:00

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-notifications plugin is enabled with enableBackgroundRemoteNotifications: 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.