Skip to content

feat(voice): keep conversations active in background - #150

Merged
johnmatthewtennant merged 74 commits into
mainfrom
jtennant/background-voice-menu-bar
Aug 22, 2026
Merged

feat(voice): keep conversations active in background#150
johnmatthewtennant merged 74 commits into
mainfrom
jtennant/background-voice-menu-bar

Conversation

@johnmatthewtennant

@johnmatthewtennant johnmatthewtennant commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

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:

  1. Start voice in session A, then switch to session B. Confirm the conversation continues and the floating control appears.
  2. Click the phone button in B. Confirm Berd opens A without starting another conversation or crashing, and the floating control hides while A is focused.
  3. Switch to Home or another app. Confirm the floating control reappears, can be dragged from its left handle, and its Berd button returns to A.
  4. Speak and confirm the microphone backgrounds pulse in both voice surfaces. Let Berd answer and confirm the Berd background pulses only while its audio plays.
  5. Mute and unmute from either surface, then hang up. Confirm both surfaces stay synchronized and the floating control disappears.
  6. Confirm A does not send a completion notification while voice is active, while unrelated sessions retain their normal notifications.

The full flow above was verified manually on macOS using this PR build.

@johnmatthewtennant
johnmatthewtennant force-pushed the jtennant/background-voice-menu-bar branch from 6ff1951 to 5218bcd Compare August 21, 2026 20:30
@johnmatthewtennant
johnmatthewtennant marked this pull request as ready for review August 21, 2026 22:14
@johnmatthewtennant
johnmatthewtennant requested a review from a team August 21, 2026 22:14

@morgmart morgmart left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 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.

Comment thread src-tauri/src/commands/voice_buddy.rs Outdated
Comment thread src-tauri/src/commands/voice_buddy.rs
Comment thread src-tauri/src/commands/native_voice.rs
Comment thread src-tauri/src/commands/native_voice.rs Outdated
Comment thread src/app/AppShell.tsx Outdated
Comment thread src/features/chat/ui/ChatInputToolbar.tsx Outdated
@johnmatthewtennant
johnmatthewtennant marked this pull request as draft August 21, 2026 22:58
@johnmatthewtennant
johnmatthewtennant marked this pull request as ready for review August 21, 2026 22:58
@johnmatthewtennant
johnmatthewtennant force-pushed the jtennant/background-voice-menu-bar branch from 5e2f97b to bda46df Compare August 22, 2026 00:26

@morgmart morgmart left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Automated code review

REQUEST_CHANGES. Fresh static review completed for exact three-dot range 874e078...a5cafe7 after explicitly running code-review and wes-review. The final self-check covered every changed background-voice, floating-control, microphone/hardware-mute, transcript-delivery, assistant-speech, notification, archive, navigation, berdctl, model-removal, and design-system 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. One blocking publishable finding remains and no proposed finding was suppressed as a duplicate. Supplied GitHub evidence was inspected and all eight captured checks completed successfully; required checks independently govern merge readiness.

Deterministic publication result: 1 blocking and 0 non-blocking finding(s) publishable; 0 duplicate(s) suppressed.

Comment thread src-tauri/src/commands/native_voice.rs Outdated

@morgmart morgmart left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Automated code review

REQUEST_CHANGES. Fresh static review completed for exact three-dot range 874e078...19d612f after explicitly running code-review and wes-review. The final self-check covered every changed background-voice, floating-control, microphone/hardware-mute, transcript-delivery, assistant-speech, notification, archive, navigation, berdctl, model-removal, and design-system 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. Two blocking publishable findings remain and no proposed finding was suppressed as a duplicate. Supplied GitHub evidence was inspected: Linux and Windows Tauri checks, DCO, and clean-room install passed; macOS Tauri and frontend checks were in progress; required checks independently govern merge readiness.

Deterministic publication result: 2 blocking and 0 non-blocking finding(s) publishable; 0 duplicate(s) suppressed.

Comment thread src-tauri/src/commands/native_voice.rs
Comment thread src-tauri/src/commands/voice_buddy.rs

@morgmart morgmart left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Automated code review

COMMENT. Fresh static review completed for exact three-dot range 874e078...c7b4e63 after explicitly running code-review and wes-review. The final self-check covered every changed background-voice, floating-control, microphone/hardware-mute, transcript-delivery, assistant-speech, notification, archive, navigation, berdctl, model-removal, window lifecycle, and design-system 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. One non-blocking publishable finding remains, with no blocking findings and no proposed finding suppressed as a duplicate. Supplied GitHub evidence was inspected and all eight captured checks completed successfully; required checks independently govern merge readiness.

Deterministic publication result: 0 blocking and 1 non-blocking finding(s) publishable; 0 duplicate(s) suppressed.

Comment thread src-tauri/src/commands/native_voice.rs Outdated

@morgmart morgmart left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Automated code review

REQUEST_CHANGES. Fresh static review completed for exact three-dot range 874e078...5f46d11 after explicitly running code-review and wes-review. The final self-check covered every changed background-voice, floating-control, microphone/hardware-mute, transcript-delivery, assistant-speech, notification, archive, navigation, berdctl, model-removal, owner-window, window-close, and design-system 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. Two blocking publishable findings remain and no proposed finding was suppressed as a duplicate. Supplied GitHub evidence was inspected: DCO and clean-room install passed; Linux, macOS, and Windows Tauri checks plus frontend checks were in progress; required checks independently govern merge readiness.

Deterministic publication result: 2 blocking and 0 non-blocking finding(s) publishable; 0 duplicate(s) suppressed.

Comment thread src-tauri/src/commands/native_voice.rs
Comment thread src-tauri/src/lib.rs Outdated

@morgmart morgmart left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Automated code review

APPROVE. Fresh static review completed for exact three-dot range 874e078...80892ad after explicitly running code-review and wes-review. The final self-check covered every changed background-voice, floating-control, microphone/hardware-mute, transcript-delivery, assistant-speech, notification, archive, navigation, berdctl, model-removal, owner-window, window-close, and design-system 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. No publishable findings remain and no proposed finding was suppressed as a duplicate. All supplied automation threads are resolved with substantive human-account replies, and there are no unresolved prior automated findings. Supplied GitHub evidence was inspected and all eight captured checks completed successfully; required checks independently govern merge readiness.

Deterministic publication result: 0 blocking and 0 non-blocking finding(s) publishable; 0 duplicate(s) suppressed.

Pending checks: 1 check(s) are not complete.

This approval reflects the completed code review only; merge readiness remains governed by the repository's required checks.

@johnmatthewtennant
johnmatthewtennant merged commit 969e57e into main Aug 22, 2026
8 checks passed
@johnmatthewtennant
johnmatthewtennant deleted the jtennant/background-voice-menu-bar branch August 22, 2026 23:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants