Repository navigation
Desktop: the voice bar says what voice mode is doing, and what is wrong when it can't (#345) - #347
Merged
Merged
Conversation
Red first: what the voice bar says in each state and each problem, the header pill, the new-conversation marker, the mic store's problem and "someone is talking" state, and the 30-second window as the hook reports it. None of it exists yet. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014L9pxjp1MTSJe5DZG9A9sv
…is wrong (#345) Section 1 of the Claude Design mockup "Kurisu - Voice Mode v1": - The header's control is a grey icon off and a blue "Voice mode on" / "On" pill on, with a dot while voice mode has a problem. - The voice bar shows one state at a time (voiceBarPhase): waiting, listening with the live mic level, transcribing, thinking, speaking, and the 30-second window, whose top line drains from when it opened. What was last said stays for the whole interaction. - A mic that cannot start is a state, not a toast: no microphone, access blocked, speech recognition that did not load, each with its fix; no wake word set sends the user to Assistant settings. - Talking and transcribing hold the window shut; it reopens full. - End voice mode is a labelled outline button; ending it shows a snackbar. An interaction's new conversation opens on a marker that points to Conversations. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014L9pxjp1MTSJe5DZG9A9sv
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #345
The desktop half of the Claude Design mockup "Kurisu - Voice Mode v1", section 1 (the owner's design project "agentic app design"). Sections 2 (personas) and 3 (Android, #341) follow in their own PRs.
What changes
VoiceModeToggle): a grey headset icon when voice mode is off; a solid blue pill when it is on — "Voice mode on", or "On" when the chat column is under 480 px — with an amber dot while the bar shows a problem.VoiceModeBar): one state at a time, decided in one place (voiceBarPhasein@kurisu/hooks): waiting (Say "Kurisu" to start), listening with the live mic level, transcribing, " is thinking", " is speaking", and the 30-second window. The second line is what was last said, kept for the whole interaction (it used to vanish after 3 s). A line along the top edge is faint while waiting, solid in an interaction, and drains over the window, from when it opened, with "Ends soon unless you say something". No countdown.userSpeaking, from the VAD's speech start to its end or misfire); talking and transcribing hold the 30-second timer, and it restarts full when they are over.classifyMicFailure): access blocked, no microphone found, or speech recognition didn't load, each with its fix (Try again / Voice settings / Retry →retryListening()). No wake word set is amber and opens Settings → Assistant. A failed transcription is still a toast.NewInteractionMarker): an interaction's conversation opens on "New conversation — You said "Kurisu" at 7:42 PM. The last one is in Conversations."Tests
Written first and committed on their own (
bce1528), red against the old code:state/micProblem.test.ts(9): the three failure classes, no toast, retry clears, ending clears,userSpeakingfrom speech start to end/misfire and on stop.hooks/voiceBarPhase.test.ts(8): the state order.ui/components/chat/voiceMode.test.tsx(+5): the transcript stays for the interaction,wokeAt, the window opens only once the reply is done, talking and transcribing hold it.ui/components/VoiceModeBar.test.tsx(22),VoiceModeToggle.test.tsx(4),NewInteractionMarker.test.tsx(3): copy, actions and End voice mode in every state. One of them caught a real fault on the way: MUI's Tooltip had renamed the End button "Turns the mic off"; the tooltip now describes it (describeChild).voiceMode.spec.ts: the pill ("On" at the default 400 px), the bar as a "Voice mode" region, End → snackbar, restored after reload.Locally: state 73, hooks 49, ui 155, platform 24; typecheck clean;
voiceMode.spec.ts+settings.spec.ts13/13 in Electron under Xvfb. Screenshots at 400/600 px, light and dark, checked against the mockup.Found on the way
A built app never loads speech recognition — onnxruntime resolves
./vad/against the bundle'sassets/folder — so the e2e run shows "Speech recognition didn't load" (which the bar now says, instead of claiming to wait). Filed as #346, next.🤖 Generated with Claude Code
https://claude.ai/code/session_014L9pxjp1MTSJe5DZG9A9sv