Skip to content

[Feat] Enter the voice API key from Settings > Integrations - #2487

Merged
mrubens merged 4 commits into
developfrom
feat/voice-integration-key
Sep 10, 2026
Merged

[Feat] Enter the voice API key from Settings > Integrations#2487
mrubens merged 4 commits into
developfrom
feat/voice-integration-key

Conversation

@mrubens

@mrubens mrubens commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

What changed

  • Adds Voice to Settings > Integrations as a credential-only, deployment-wide integration, following the ElevenLabs pattern. An admin enters an OpenAI API key with GPT-Live access; it is encrypted in the connection row, consumed only by the control plane, and never delivered to agents or task sandboxes.
  • Voice key resolution now checks R_VOICE_OPENAI_API_KEY first and falls back to the stored connection, so voice works on deployments that cannot set environment variables, while operators who set the variable keep control. Only the environment-provided key is cached; the stored key is read on every call so saves, rotations, and disconnects apply immediately.
  • When the environment provides the key, the Voice card shows under Connected with a note saying so and no configure or disconnect action.
  • New voice integration entry, config type and guard, get/save commands and router procedures, hooks, the card and dialog in Settings, a waveform icon, and setup-catalog capabilities.
  • Docs: a Voice integration page, nav and overview entries, and the voice guide now points to Settings as the primary setup path.

Why this change was made

Voice shipped requiring R_VOICE_OPENAI_API_KEY. Managed deployments and admins without environment access had no way to turn it on. Integrations is where deployment-wide credentials already live, and ElevenLabs established the credential-only shape.

Impact

Admins can enable voice from the UI. Nothing changes for deployments that already set the environment variable. The general OPENAI_API_KEY is still never used for voice.

Verification

Types, cloud-agents, and web typecheck; oxlint, residual ESLint, and knip clean. Tests: types integration catalog and guard, web Integrations page (new admin dialog case), voice server and command suites, mcp-connections commands, and the sdk delivery test confirming credential-only connections never reach agents. Verified in a local deployment that the Voice card renders in Settings > Integrations, the Connect dialog opens with the key field, and with R_VOICE_OPENAI_API_KEY set the card appears under Connected with the environment note.

…ttings

Voice previously required the R_VOICE_OPENAI_API_KEY environment variable.
Deployments can now enter the OpenAI key from Settings > Integrations > Voice,
following the ElevenLabs credential-only pattern: the key is encrypted in the
deployment-wide connection row, never delivered to agents, and consumed only
by the control plane. The environment variable still takes precedence when
set; the stored key is the fallback.

- New `voice` credential_only integration entry, config type and guard
- get/save commands, router procedures, and hooks
- Voice card and dialog in Settings > Integrations, with a waveform icon
- Key resolution falls back to the stored connection after the env var
- Docs: integration page, nav, overview row, and the voice guide
@roomote-community

roomote-community Bot commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

No new code issues found. See task

  • Voice key cache remains stale after save, rotation, or disconnect (apps/web/src/lib/server/voice.ts:120).

Reviewed c14e03c

Comment thread apps/web/src/lib/server/voice.ts Outdated
Only an environment-provided key is cached. The stored connection is read on
every call, so saving, rotating, or disconnecting the Voice integration takes
effect immediately instead of after the 30-second cache window.
The voice connection query reports where the key comes from. With
R_VOICE_OPENAI_API_KEY set, the card sits under Connected with a note and no
configure or disconnect action, since there is nothing to manage in Settings.
@mrubens
mrubens merged commit b0e6843 into develop Sep 10, 2026
18 checks passed
@mrubens
mrubens deleted the feat/voice-integration-key branch September 10, 2026 23:07
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