Skip to content

Voice through the account: the daemon uses voice v1 with the session - #169

Merged
longzhi merged 1 commit into
mainfrom
claude/voice-v1-daemon
Oct 24, 2026
Merged

longzhi merged 1 commit into
mainfrom
claude/voice-v1-daemon

Conversation

@longzhi

@longzhi longzhi commented Oct 23, 2026

Copy link
Copy Markdown
Collaborator

Closes #161. Stacked on #168 (sign-in), so the base is its branch; once #168 merges, GitHub retargets this to main.

What changes

  • Recognition and synthesis call /v1/voice/transcribe and /v1/voice/speak with Authorization: Bearer <session> (docs/api.md).
  • No session: nothing is sent. Recognition fails as signed_out, and synthesis leaves the reply as text.
  • 401: the daemon forgets the session, which signs out. The App sees it through the status stream, and the box is told voice is off.
  • 429: passed to the box as voice.error with reason allowance or global_cap, and a short message that current firmware shows as a voice error. What the box should really say is Voice commands: talk to your Agents through the box #132. A refused spoken reply stays text, as any synthesis failure does.
  • voice.available: with the voice service, it is on only while signed in (Recognizer::ready). The user's own recognizer needs no account. Signing in or out, here or by a 401, tells the box again (follow_account).
  • Recognizer errors now carry the reason the box is told (RecognitionError). Plain failures stay unavailable.
  • docs/protocol.md lists the three new voice.error reasons.

Two choices against the ticket's text, for review

  • Release builds still have no service. The ticket says they should use https://api.korekore.ai, but production has no route until vibebuddy-cloud#11. Pointing a release there now would show "Sign in" in a release and then fail. feat(app): 用菜单栏的像素脸生成 App 图标 #11 should flip service_base when production opens.
  • voice.available stays on after an allowance or cap refusal. Turning it off would need a timer to turn it back on at 00:00 UTC. Each turn gets the reason anyway.

Checked

  • cargo test --workspace --locked: all pass. The daemon has 337, 3 of them new:
    • the session header, and ready() turning false once signed out with nothing sent;
    • 401, 429 allowance and global_cap and an unparsable 429 each mapped to its reason, with only a 401 forgetting the session;
    • synthesis carrying the session, forgetting it on a 401, then sending nothing more.
  • The existing v0 path tests were moved to v1.
  • cargo clippy --workspace --all-targets --locked: no new warnings.
  • Not checked on a box. A voice command with a signed-in daemon on staging needs the box and the resident session. The service side is checked (vibebuddy-cloud#13), and so is sign-in (Sign in to the VibeBuddy account from the Apps #168).

🤖 Generated with Claude Code

Recognition and synthesis go to /v1/voice/* with the session. A 401
forgets it, which signs out; a 429 is passed to the box as voice.error
allowance or global_cap, and no session as signed_out. With the voice
service, voice is offered only while signed in, and signing in or out
tells the box again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 23, 2026 11:13

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.

@longzhi
longzhi deleted the branch claude/account-sign-in October 23, 2026 23:38
@longzhi longzhi closed this Oct 23, 2026
@longzhi longzhi reopened this Oct 23, 2026
@longzhi
longzhi changed the base branch from claude/account-sign-in to main October 23, 2026 23:39
@longzhi
longzhi merged commit bf4a9ff into main Oct 24, 2026
4 checks passed
@longzhi
longzhi deleted the claude/voice-v1-daemon branch October 24, 2026 00: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.

Accounts: the daemon uses voice v1 with the session

2 participants