voice: introduce Voice Mode with a first-run card above the chat input - #5
Closed
eli-w-king wants to merge 1 commit into
Closed
voice: introduce Voice Mode with a first-run card above the chat input#5eli-w-king wants to merge 1 commit into
eli-w-king wants to merge 1 commit into
Conversation
Voice Mode can speak back, and it does so in one of four model voices - but nothing in the product says so. The setting exists, the voices are only names in a dropdown, and nobody hears one before committing to it. Anyone who does not want to be spoken to at all is never told that dictation is the alternative. Show a small card above the chat input the first time a Voice Mode session starts. It says what Voice Mode is, that it costs nothing, and offers the four voices to audition. Clicking a voice plays a short sample recorded with that exact model voice and adopts it in the same gesture, so what you hear is what you get and there is nothing to confirm afterwards. The leading icon carries that story: play before the click, animating bars while it speaks, a check once it is yours. The card is deliberately no taller than the input it sits above, and survives down to a 240px panel. Its waveform is drawn with Voice Mode's own instrument - the same thin bars and rounded caps as the toolbar equalizer, just many more of them - so the introduction and the feature it introduces read as one thing. It appears exactly once, gated on an application-scoped storage key that is only written once a card is actually shown, so a session started with no chat panel open does not silently burn the one appearance. The trigger watches the voice session's connection state rather than any single entry point, because Voice Mode can be started from the input-mode pill, a command, a keybinding or the Agents window. While the card is up, Voice Mode is connected but not listening: nobody should be recorded while still reading. Dismissing hands the session back - hands-free starts listening, push-to-talk waits for the mic. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Owner
Author
|
Superseded by microsoft#327853 — this belongs on the product repo, not the fork. |
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.
The gap
Voice Mode can speak back, in one of four model voices — but nothing in the product says so. The setting exists, the voices are only names in a dropdown, and nobody hears one before committing to it. Anyone who would rather not be spoken to is never told dictation is the alternative.
What this adds
A small card above the chat input, the first time a Voice Mode session starts.
It says what Voice Mode is, that it costs nothing, and offers the four voices to audition. Clicking a voice plays it and adopts it in the same gesture — the sample is pre-recorded with that exact model voice, so what you hear is what you get, and there is nothing to confirm afterwards. The leading icon carries that whole story:
The icon slot is collapsed to
width: 0until hover or selection. Four named buttons plus permanent icons need 261px; the default panel row is 206px, so the slot slides open instead of forcing a wrap.Details worth calling out
It uses Voice Mode's own instrument. The waveform is the same thin bars and rounded caps as the toolbar equalizer (
voiceInputMode.css), just many more of them, so the introduction and the feature it introduces read as one thing. Bars are drawn on canvas rather than as DOM spans — ~50 spans would mean ~50 style writes per frame.It appears exactly once, gated on an application-scoped storage key. The key is written only once a card is actually shown, so a session started with no chat panel open doesn't silently burn the one appearance.
The trigger watches connection state, not any single entry point. Voice Mode can be started from the input-mode pill, a command, a keybinding or the Agents window; all of them land on
isConnecting/isConnected.Nobody is recorded while reading. While the card is up Voice Mode is connected but not listening. Dismissing hands the session back — hands-free starts listening, push-to-talk waits for the mic.
Hosts. Both the workbench chat input and the Agents window register a container; the most recently focused visible one wins.
Accessibility
role="region"with a label; the voices are aradiogroupofradios witharia-checkedand a single tab stop, arrows moving between them. Selection is announced withstatus(). Escape dismisses. The canvas isaria-hidden, and the animation honours reduced motion.Validation
npm run typecheck-client,npm run valid-layers-check, eslint, stylelint, hygiene — all cleanNote
npm run compilecurrently fails onextensions/markdown-language-features/markdown-editor-src/editor.ts(Property 'revealComment' does not exist). That is pre-existing onmainfrom aac8a5a and untouched by this branch, which changes nothing underextensions/.