cmux NEXT Settings > Chief: a Voice input row on home.voiceInput (builds with Debug Settings)

Merged
TE
16d ago
+465-6

Summary

In builds with Debug Settings (DEV and NIGHTLY), Settings > Chief has a Voice input row: "The mic in the message box dictates into it, on this Mac. Off shows the waveform instead." Its switch is the Debug toggle home.voiceInput itself. There is no new setting and no new default: the switch stays on, as Leo set it on 10-20. Release has no Debug Settings, so it shows no row and keeps the code default.

  • ChiefVoiceInputPageRoute (cmux.settings.voice_input.set {on}):
    • writes the tunable to TunableStore.shared;
    • refuses while the store is inactive;
    • only takes the person's own click on the Settings page, like the Mobile ops.
  • The host lists carry voice_input: {on}, or null without the tunable. Reading it registers the tunable's Observation dependency, so a change made in Debug Settings reaches the page.
  • SettingsPageLayout.Card.voiceInput, after the Chief Pet card. VoiceInputCard.tsx draws nothing when voice_input is null.
  • Two settingsWindow.chief.voiceInput.* strings in all 21 locales.
  • settings-schema.json is generated; the PR autofix regenerates the export's page.
  • Chief read-aloud is out of scope.

No capture: one web settings row, which shows in the gallery's pages.settings Chief state once the schema regenerates (the mock is a DEV host).

Tests

  • webviews/src/pages/settings/chiefVoiceInput.test.tsx:
    • with voice_input: null, there is no row;
    • with {on: true}, the switch is checked, and clicking it sends cmux.settings.voice_input.set {on: false} and unchecks it.
  • ChiefVoiceInputPageRouteTests:
    • an inactive store gives null and refuses the write;
    • an active store reads on by default and writes off, then on;
    • a call without a gesture, from another page, or without on is refused and leaves the tunable on.
  • ChiefSettingsPageTests: the Chief lead is chiefs, chiefPet, voiceInput.

Observed / Not run

  • At a33ee1b6cb6 (red), the web test fails with "Received: undefined" for the row title.
  • At the head, with the export's Chief lead patched by hand as the regeneration will write it, the voice, categories, chiefPet, chiefs, mockProvider and hostCards tests pass: 37 pass. scripts/web-lint.sh and prepush-gate.py pass.
  • Not run locally: the Swift tests (no local Swift); CI and a fleet compile check run them.

Changelog

  • Added: Settings > Chief has a Voice input switch for the message box's mic in DEV and NIGHTLY builds.

Agent session: huge-blue

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Adds a Voice input row to Settings > Chief that toggles the cmux message box mic's home.voiceInput tunable directly, in builds with Debug Settings.

  • The switch reads and writes the existing home.voiceInput tunable; there is no new setting, and it starts on, matching the default Leo set.
  • Release builds have no Debug Settings, so they show no row and keep the code default.
  • Writes are accepted only from the person's own click on the Settings page while the tunable store is active.
  • Includes the Swift page route, web settings card, localized strings, regenerated settings exports, and tests for both.