Add a stop button to the plan's call, and show when the microphone is muted

Merged
CH
15d ago
+260-27

Summary

  • Stop button. A red stop sits at the right end of the Plans microphone row, in the panel and the desktop window, while a call about the open plan is in progress. It is separate from the microphone, so a mute never hangs up.
    • Where Luke is speaking, the host is told to stop first, so his voice does not run on through the graceful close (which can wait up to 15s).
    • The microphone closes, and the call is let go of at once, so the view reads no call before the close finishes behind it.
    • The next microphone press opens a new call. The host only reopens a session by itself for briefings, so a stopped plan call stays stopped.
    • Path: a new end-call voice command, forwarded by main to the voice window, which drives the new LiveVoiceOrchestrator.stopCall().
  • Muted state. While the plan's call stands with the developer unheard, the microphone button draws a struck-through glyph on the danger tint, reads "Unmute the microphone", and sets aria-pressed. Before, it looked the same as a call not yet begun.
  • The stop ends the voice call only. Planner or notetaker work already running on the service still finishes, so the plan can still change after a stop.

Evidence

  • ./scripts/check.sh: exit 0.
  • New tests, each failing without the change:
    • orchestrator: the stop tells the host to stop Luke before it mutes, ends the call, the view reads idle with no plan, and the next press opens a new call;
    • microphoneButton: the plan's own call muted or speaking unheard is muted; connecting or another plan's call is not;
    • MicrophoneRow: muted presses the button and draws the stop; no call draws no stop;
    • usePlansTab: the stop press sends the voice command.
  • CI could not verify the Plans tab. ./scripts/verify.sh was not run, because this work was done on Linux. It needs a Mac run before this lands.

šŸ¤– Generated with Claude Code


Open workspace in Conductor