Skip to content

chore(server): revert hosted GPT-Live on the connected OpenCode Console - #58461

Merged
adamdotdevin merged 1 commit into
devfrom
revert-console-voice
Oct 23, 2026
Merged

adamdotdevin merged 1 commit into
devfrom
revert-console-voice

Conversation

@adamdotdevin

@adamdotdevin adamdotdevin commented Oct 23, 2026 •

Copy link
Copy Markdown
Member

Issue for this PR

Reverts #57735.

Type of change

  • Bug fix
  • New feature
  • Refactor / code improvement
  • Documentation

What does this PR do?

#57735 special-cased the OpenCode Console for voice: the server read a voice key from the Console's /api/v2/config and brokered GPT-Live sessions through the Console. We'd rather keep voice on plain primitives. Voice models will become ordinary provider models listed from models.dev (#58458 is the first step), so a Console-only path isn't worth keeping.

Removed:

  • consoleVoice in the opencode provider plugin, and the single host slot in Voice (host, instruct)
  • integration and workspace on voice models, and the optional session.id in the session response
  • POST /api/experimental/voice/session/:sessionID/instructions and client.voice.instructions()
  • The tests for all of the above. Generated clients and OpenAPI documents are regenerated.

Kept: the experimental /api/experimental/voice/session and /api/experimental/voice/models endpoints from #55951, #56888 and #57194, using the server's own provider keys. Their OpenAPI paths and schemas are identical to before #57735.

Hosted web search goes back to the inline active-connection check it had before #57735 moved it into resolveActive. Both compare the same fields, so its behavior doesn't change.

git revert applied cleanly, but the textual revert of the OpenAPI documents also dropped an unrelated retryAfterMs property that #57735's regeneration had picked up, so those are regenerated rather than reverted.

Coordination, nothing changed here:

  • Kit's Desktop "Voice calls" experiment (feat(desktop): experimental voice calls through Console #58249) is only on beta. Its packages/app/src/voice/transport.ts requires integration === "opencode", reads response.session?.id and calls api.voice.instructions, so it will fail typecheck at the next dev → beta merge.
  • The iOS app's Console route (anomalyco/opencode-ios#150) is being removed in a parallel iOS PR. Until then the app falls back to the server's or the phone's own keys.
  • The Console still sends voice in /api/v2/config. The server ignores it: the config is decoded with HttpClientResponse.schemaBodyJson(RemoteResponse) and no parse options, and Effect Schema's default onExcessProperty: "ignore" drops unknown keys. The existing test "ignores unsupported managed actions, effects, and keys…" already serves an unknown top-level key. I also ran a throwaway test with the exact voice payload, and the rest of the config (policies, providers) still loads.
  • Related: Kit's open feat(server): broker voice through Console credentials #57576 ("broker voice through Console credentials").

CHANGELOG.md is written at release time. The v2.1.4 notes announced Console-hosted sessions and client.voice.instructions(), so the next notes should mention they're gone.

How did you verify your code works?

  • The 9 hand-written source and test files are byte-identical to f7577a1f^.
  • bun run check:generated passes in packages/client, packages/protocol and services/www.
  • Tests: core voice and plugin/provider-opencode (45 pass), server voice (1), client promise (40), and all 53 core test files that use the shared plugin fixture (446 pass).
  • bun typecheck and bun run typecheck:tsc pass in core, protocol, server and client, and the pre-push bun run check passes on Bun 1.4.4.

Checklist

  • I have tested my changes locally
  • I have not included unrelated changes in this PR

Added by the opencode bot (AI-generated).

Related: #57576

Public API: removes experimental voice.instructions endpoint/client method, VoiceModel.integration/workspace and VoiceSessionResponse.session (breaking for their callers)

This reverts commit f7577a1 (#57735). The OpenAPI documents are regenerated rather than reverted, which keeps the retryAfterMs property #57735's regeneration had picked up from an earlier change.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a clean revert of #57735, and the voice routes from before it work unchanged. On dev, nothing still uses the removed pieces.

I started opencode serve from both checkouts. GET /api/experimental/voice/models and POST /api/experimental/voice/session give the same responses on both, and POST …/voice/session/:sessionID/instructions now returns 404 (400 on the base). The voice tests in core, server and client pass, and typecheck:tsc passes in core, protocol, server and client.

Public API impact (removals; these routes are experimental but shipped in v2.1.4):

  • POST /api/experimental/voice/session/:sessionID/instructions (experimental.voice.instructions) is removed, along with client.voice.instructions() in the promise and Effect clients (VoiceInstructionsInput/Output/Operation).
  • VoiceModel.integration and VoiceModel.workspace (both optional) are removed.
  • VoiceSessionResponse.data.session ({ id }, optional) is removed.
  • The Console's voice key in /api/v2/config is no longer read; unknown keys are ignored, so older Consoles still work.

This is not backwards compatible for callers of voice.instructions() or anything that reads integration, workspace or session.id. As you noted, the Desktop experiment on beta (#58249) needs updating before the next dev → beta merge. Callers that only use models/session with server keys are unaffected.

No other concerns.

Related: #57576

@adamdotdevin
adamdotdevin merged commit 8d95ef8 into dev Oct 23, 2026
22 checks passed
@adamdotdevin
adamdotdevin deleted the revert-console-voice branch October 23, 2026 21:31
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