Skip to content

Desktop embed contract and Pairable status for host apps - #52

Draft
jatinkrmalik wants to merge 3 commits into
mainfrom
jatin/desktop-embed-mvp
Draft

Desktop embed contract and Pairable status for host apps#52
jatinkrmalik wants to merge 3 commits into
mainfrom
jatin/desktop-embed-mvp

Conversation

@jatinkrmalik

Copy link
Copy Markdown
Member

Summary

Draft spike for Planned desktop embed of VocaGateway (VocaMac / VocaWin / VocaLinux). Host apps need a frozen pairing and readiness contract before they ship Compose or native launchers.

This PR documents that contract and adds a thin authenticated status surface so a desktop UI can show Pair / QR while a model is still downloading.

Out of scope: idle offload / whisper-server (#50) stays separate and is not folded in.

What desktop apps get

  • docs/desktop-embed.md: platform matrix (Mac native-primary, Win Compose-primary, Linux podman-first), pair-v1 payload rules, Pairable-before-Ready state machine, Compose pin to release tag v0.1.0, and data-dir ownership under VOCAGATEWAY_DATA_DIR (never under the host app's Application Support).
  • Links from the README Planned desktop rows, docs index, configuration, and deployment.
  • GET /v1/admin/status now includes pairable, pairing_url (no bearer token), and ready_for_dictation.
  • Loopback / link-local VOCAGATEWAY_PUBLIC_URL / VOCAGATEWAY_PAIRING_URL values are dropped from discovery; when no phone-reachable candidate remains, pairing fails loud with the bad env key named in the 503 detail.

Clients must keep decoding payload from GET /v1/admin/pairing for {v,url,token}. Status never carries the secret.

Pairable-before-Ready

GET /health/live means the process is up. GET /health/ready means the engine can transcribe. Show Pair / QR when live and a non-loopback pairing URL exists, even if ready is still 503. Dictation waits for Ready; pairing does not.

Test plan

NOTES (known limits)

  • The Compose pin documents tagging/pulling vocagateway:v0.1.0 from the published GitHub Release; a public registry path is not assumed.
  • DiagnosticsBundle does not mirror the new status fields; desktop should use /v1/admin/status.
  • Stay draft. HQ does not merge this as a product ship by itself.

Freeze the Planned desktop embed contract for VocaMac/VocaWin/VocaLinux,
reject loopback PUBLIC_URL overrides from pairing discovery, and add
pairable / pairing_url / ready_for_dictation on authenticated status so
host apps can show Pair before Ready without reading the bearer token.
@netlify

netlify Bot commented Sep 4, 2026

Copy link
Copy Markdown

Deploy Preview for voca-gateway canceled.

Name Link
🔨 Latest commit 420a4d1
🔍 Latest deploy log https://app.netlify.com/projects/voca-gateway/deploys/6a9a74642067df0008c59a55

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant