feat(voice): keep conversations active in background - #150
feat(voice): keep conversations active in background#150johnmatthewtennant wants to merge 47 commits into
Conversation
6ff1951 to
5218bcd
Compare
morgmart
left a comment
There was a problem hiding this comment.
🤖 Automated code review
REQUEST_CHANGES. Fresh static review completed for exact three-dot range 6f059be...5e2f97b after running both code-review and wes-review. Final self-check covered every changed voice/background-control, navigation/archive, notification, mute, transcript-delivery, and assistant-speech flow; accessibility; English/Spanish localization; navigation and consent guards; async errors, never-completes, lifecycle transitions, and races; test honesty; design-system/project rules; duplicate overlap; and concrete user effects for blocking severity. Six publishable findings remain: five blocking and one non-blocking. Supplied GitHub evidence was inspected and reports all eight captured check runs completed successfully; required checks still independently govern merge readiness.
Deterministic publication result: 5 blocking and 1 non-blocking finding(s) publishable; 0 duplicate(s) suppressed.
5e2f97b to
bda46df
Compare
morgmart
left a comment
There was a problem hiding this comment.
🤖 Automated code review
REQUEST_CHANGES. Fresh static review completed for exact three-dot range 5e57275...bda46df after explicitly running code-review and wes-review. The final self-check covered every changed background-voice, floating-control, mute, transcript/TTS, notification, archive, navigation, and berdctl flow; accessibility; English/Spanish localization; navigation and consent guards; async errors, never-completes, lifecycle transitions, and races; test honesty; design-system/project rules; duplicate overlap; and concrete evidence plus user effect for blocking severity. Seven publishable findings remain: three blocking and four non-blocking. One additional proposed finding was suppressed because it maps to a resolved thread with a substantive human-account reply. Supplied GitHub evidence was inspected: five captured checks passed and the Linux, macOS, and Windows Tauri Rust checks failed; required checks independently govern merge readiness.
Deterministic publication result: 3 blocking and 4 non-blocking finding(s) publishable; 1 duplicate(s) suppressed.
bda46df to
49e7b94
Compare
Summary
Previously, a voice conversation ended automatically when the user switched away from the session that started it. This PR keeps the conversation running in the background and bound to its original session.
When the owner session is not visible and focused, Berd shows a compact always-on-top control with a drag handle, a button that opens the exact owner session, microphone mute, and hang-up. The microphone background pulses while the user is speaking, and the Berd background pulses while assistant audio is playing. The same mute, hang-up, and activity states appear in the session composer.
Clicking the voice button in another session opens the active owner instead of starting a second conversation. Completion notifications are suppressed only for the session with active voice.
Reviewer-reproducible examples
With Pocket voice installed:
The full flow above was verified manually on macOS using this PR build.