Pull Request Overview
- Opened on October 21, 2026
- Status Merged
- Commit count 5 with first commit October 21, 2026
Total Delta
Open Days
Test Delta
How long has this pull request spent in each phase of its lifecycle?
| Fraction of total time | Business days | Phase |
|---|---|---|
| N/A | -0.0 days | Issue creation to work beginning |
|
|
0.0 days | Authoring 1 commit before pull request opened for review |
|
|
0.0 days | Awaiting first review |
|
|
0.2 days | Revising work with 4 commits in response to 2 reviews that left 4 comments |
|
|
9.0 days | Merge to deploy (still awaiting deployment) |
Total time for pull request
0.2 business days
from first commit authored to merge
Still awaiting deployment
voice: unify connected animation and clarify GPT Live usage
Fixes #343323
Summary
Use one blue listening animation whenever Voice Mode is connected, rather than changing or hiding the animation between listening, speaking, idle, and processing. This shared behavior applies to both hosted voice and GPT Live.
- Keep the connected glow across chat inputs and the floating voice widget, including while muted. Preserve ownership gating, audio reactivity, theming, high contrast, and reduced motion.
- Remove the remaining purple speaking accents, the listening placeholder, and barge-in placeholder hints. Preserve transcripts, mute/manual-talk hints, and interruption behavior.
- Show the GPT Live/OpenAI model notice only on the first successful GPT Live connection, persisted per profile across reconnects and restarts. Cancelled startup does not consume the notice.
- Identify OpenAI GPT Live in both segmented and standalone Voice Mode hovers based on the active connection, not just configuration.
- Consolidate glow fixtures and add regression coverage, including legacy-class cleanup and explicit DOM synchronization in decoration tests.
Validation
-
npm run compile-client— passed, zero compilation errors for the GPT Live changes. -
npm run build-fast -- --client-only— passed after all follow-up changes. -
./scripts/test.sh --reporter dot --run src/vs/workbench/contrib/chat/test/browser/micButtonHovers.test.ts --run src/vs/workbench/contrib/chat/test/browser/voiceClient/voiceSessionController.test.ts --run src/vs/workbench/contrib/chat/test/browser/voiceInputMode.test.ts --run src/vs/workbench/contrib/chat/test/browser/voiceClient/voiceGlow.test.ts --run src/vs/workbench/contrib/chat/test/browser/voiceClient/voiceInputDecorations.test.ts— passed, 204 tests. -
git diff --name-only -z | xargs -0 node build/hygiene.ts— passed for all 10 files in the latest follow-up, including lint and formatting checks. -
npm run stylelint -- src/vs/workbench/contrib/chat/browser/voiceInputMode/media/voiceInputMode.css src/vs/workbench/contrib/chat/browser/voiceClient/media/voiceGlow.css— passed for the speaking-color changes. -
git diff --cached --check— passed before both latest commits. - Earlier validation: 26 targeted glow/decorations/onboarding tests passed. Connected-glow fixtures were inspected in Dark, Light, and DarkHighContrast; render/dispose checks passed for all three fixtures. Rendered voice control colors matched across connected idle, listening, and speaking states in Code OSS.
Manual testing
- Connect Voice Mode and verify the blue animation remains visible while idle, listening, processing, playing speech, and muted; it clears on disconnect.
- Verify no listening or barge-in placeholder appears. Confirm transcripts and mute/manual-talk hints still work and interruption is unaffected.
- Switch sessions and check that only the voice-owning input glows. Check reduced-motion and high-contrast behavior.
- Connect GPT Live for the first time: one OpenAI model information notice should appear after session initialization. Disconnect/reconnect and restart: it should not repeat. Cancel a first connection before session initialization: the next successful connection should still show the notice.
- While using GPT Live, hover Voice Mode and verify the description names OpenAI GPT Live. With hosted voice, verify the generic real-time voice description remains.
Live voice-provider conversation end-to-end testing was not performed.
<!-- ⚠️⚠️ Do Not Delete This! feature_request_template ⚠️⚠️ --> <!-- Please read our Rules of Conduct: https://opensource.microsoft.com/codeofconduct/ --> <!-- Please search existing issues to avoid creating duplicates. -->
<!-- Describe the feature you would like. --> Voice Mode should have a consistent connected appearance, without switching visual states between listening and speaking or showing repetitive placeholder hints. GPT Live usage should remain discoverable without showing a notification on every connection.
Requested Changes
- [ ] Always show the blue listening animation while Voice Mode is connected, including idle, processing, speaking, and muted states; clear it on disconnect and preserve ownership gating, audio reactivity, theming, high contrast, and reduced-motion support.
- [ ] Remove the purple speaking accent from voice controls and the floating voice widget so connected voice indicators stay blue.
- [ ] Remove the “Listening...” placeholder while preserving transcripts and useful mute/manual-talk hints.
- [ ] Remove barge-in placeholder hints and interruption wording from manual-talk hints, without changing interruption behavior.
- [ ] Show the GPT Live/OpenAI provider information notification only on the first successful GPT Live connection, remembering it across reconnects and restarts for the profile. Failed or cancelled startup must not consume the notice.
- [ ] Identify OpenAI GPT Live in the Voice Mode hover when the current connection uses it, across both segmented and standalone voice controls; retain the generic description for hosted voice.
The shared connection visuals and hint changes should apply to both hosted Voice Mode and GPT Live.
Implementation: #343315.
Comments Threads Pending Resolution
Resolved Comment Threads
No resolved comments have been left on this PR.
> [!WARNING]
> Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a `copilot-code-review.yml` file specifying one with the `runs-on` attribute. See the [docs](https://gh.io/AA11tgch) for more details.
## Copilot review overview
2 open issues
-
[The test reads DOM state immediately after observable/config changes (e.g. `state.set(...)`,…](https://github.com/microsoft/vscode/pull/343315#discussion_r4341229429) · New
[Now that the controller no longer manages per-state classes, `clear()` only removes `voice-active`…](https://github.com/microsoft/vscode/pull/343315#discussion_r4341229527) · New
-
What changed in this PR
This PR unifies Voice Mode’s ambient glow into a single “connected” blue animation, keeping it visible across voice states (idle/listening/processing/speaking) while connected, and simplifying theme tokens and UI hints accordingly.
**Changes:**
- Made the glow controller state-independent (render/clear now depend on connection/ownership, not voice state).
- Consolidated theme/color behavior so listening/speaking share the same (listening) accent; deprecated the speaking token.
- Updated fixtures/tests and removed “Listening…”/barge-in placeholders while preserving transcript/hints behavior.
| File | Description |
| ---- | ----------- |
| src/vs/workbench/test/browser/componentFixtures/chat/voiceGlow.fixture.ts | Consolidates fixture coverage into a single “connected” glow fixture. |
| src/vs/workbench/contrib/chat/test/browser/voiceClient/voiceInputDecorations.test.ts | Adds regression coverage for connected glow + transcript overlay hint behavior. |
| src/vs/workbench/contrib/chat/test/browser/voiceClient/voiceGlow.test.ts | Updates unit tests for new always-connected glow model and shared accent. |
| src/vs/workbench/contrib/chat/common/widget/chatColors.ts | Updates Voice Mode color token descriptions and deprecates the speaking glow token. |
| src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.ts | Keeps input glow running while connected, updates transcript hint logic and analyser selection. |
| src/vs/workbench/contrib/chat/browser/voiceInputMode/voiceInputModeActionViewItem.ts | Removes per-state pill colors and updates comments to match shared blue color. |
| src/vs/workbench/contrib/chat/browser/voiceInputMode/media/voiceInputMode.css | Makes connected/listening/speaking share the same blue color. |
| src/vs/workbench/contrib/chat/browser/voiceClient/voiceInputDecorations.ts | Starts/stops glow based on connected/active/owner only; removes listening placeholders except muted hint. |
| src/vs/workbench/contrib/chat/browser/voiceClient/voiceGlowController.ts | Refactors controller to a single connected rim, removing state-based cross-fades. |
| src/vs/w...