feat(voice): add Codex subscription billing to native GPT-Live - #108940
TheSmokeDev wants to merge 4 commits into
Conversation
Signed-off-by: SmokeDev <degensmoke@gmail.com>
|
Comment assumes head KEEP — Native GPT-Live Codex subscription billing
CHECK
One-click close / ordering
Landing-evidence
|
|
Independent current-main and live-provider verification for head One rebase fix is required: after replaying this PR onto After that fix:
I also ran the missing live subscription canary with an existing Codex OAuth sign-in, without refreshing or changing the auth store:
This closes the PR body's manual provider/protocol uncertainty for the subscription handshake, transcription, and delegation legs. It does not claim a human microphone/speaker UX check. |
Signed-off-by: SmokeDev <degensmoke@gmail.com>
|
Tested this feature replayed onto 77ecc72: 331 related Python tests passed (23 skipped), 9 focused Desktop tests passed, and Desktop typechecks/production build passed. Found a subscription context-expiry edge case during silence; submitted the minimal two-file fix and red/green regression to your feature branch: TheSmokeDev#18 . Two broader voice-prefs tests also fail on unmodified main and were left untouched. No new live-provider or human mic validation of this PR is claimed. |
Co-authored-by: Daniel Alkurdi <13148507+l0cka@users.noreply.github.com>
|
@l0cka merged via TheSmokeDev#18 — head is now 9a3f694. Clean find: arrival-clocked fragments never aged out during silence, so the window anchor froze. Thanks for shipping the red/green regression with the fix. |
What does this PR do?
Adds an explicit ChatGPT/Codex subscription option to the native GPT-Live mode merged in #108137. Set
voice.gpt_live.auth: subscriptionto use the Hermes host's existing Codex OAuth sign-in. API billing remains the default; subscription authentication or transport failures never select the API route or chained STT/TTS.The server keeps the OAuth bearer and matching account identity private. The desktop uses the subscription WebRTC event format and returns Hermes replies through the corresponding context-append protocol. Hermes remains the agent, with the conversation's existing model, tools, memory and approvals.
Related Issue
Builds on the native GPT-Live mode merged in #108137.
Type of Change
Changes Made
hermes_cli.auth_codex.resolve_codex_runtime_credentials; keep API and subscription model/voice settings separate.How to Test
scripts/run_tests.sh tests/tools/test_voice_live_subscription.py tests/tui_gateway/test_voice_live_delegation.py -j 1 -q— 12 passed on Windows, Python 3.11.13.cd apps/desktop && npx vitest run src/lib/voice-live-subscription.test.ts --project ui. The same committed test file passed 3 cases locally with existing Vitest 4.1.10 and a temporary Node/module-alias configuration. It exercises the actual session/start-selection code with fake media and mocked network boundaries. The full desktop workspace configuration/build/typecheck was not run locally because this worktree has no installed workspace dependencies.git diff --checkpass.hermes auth, select subscription mode, start native Desktop voice, delegate a request to Hermes, hear the answer, mute/unmute and close. Repeat with explicit API mode. No live provider or microphone calls were made for this PR's local tests.Checklist
cli-config.yaml.example.Protocol Evidence
Wire shapes were verified against OpenAI Codex commit
c4017a87aacc7558002b7cb510025e967c1d765e: WebRTC call exchange, frameless events, context appends/history, and subscription model/headers.Signed-off-by: SmokeDev degensmoke@gmail.com