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
..
.cursor mobile-voice commit 2026-03-28 13:30:21 -04:00
assets update to the apn and server management 2026-03-29 16:17:57 -04:00
relay mobile-voice commit 2026-03-28 13:30:21 -04:00
scripts mobile-voice commit 2026-03-28 13:30:21 -04:00
src fix: prevent spurious session-complete notifications from APN relay 2026-04-04 19:43:50 +00:00
.gitignore mobile-voice commit 2026-03-28 13:30:21 -04:00
AGENTS.md feat: enhance mobile voice build and UI layout 2026-04-02 13:01:17 +00:00
app.json fix: advertise MagicDNS hosts for Tailscale pairing 2026-04-03 13:02:58 +00:00
eas.json fix: unblock mobile EAS installs with Bun 2026-04-03 13:18:13 +00:00
eslint.config.js update mobile voice quality guardrails 2026-03-30 08:15:29 -04:00
metro.config.js mobile-voice commit 2026-03-28 13:30:21 -04:00
notes.md update mobile pairing flow and audio session handling 2026-03-30 16:53:35 -04:00
package-lock.json mobile-voice commit 2026-03-28 13:30:21 -04:00
package.json feat: enhance mobile voice build and UI layout 2026-04-02 13:01:17 +00:00
README.md feat: improve mobile model download UX and relay defaults 2026-03-28 14:03:57 -04:00
refactor.md update mobile voice quality guardrails 2026-03-30 08:15:29 -04:00
tsconfig.json refactor mobile screen orchestration 2026-03-30 08:57:35 -04:00
tsconfig.typecheck.json refactor mobile screen orchestration 2026-03-30 08:57:35 -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.