Skip to content

Fix multi-agent voice routing and add CLI controls - #4637

Open
lynford-u wants to merge 1 commit into
block:mainfrom
lynford-u:codex-native-voice
Open

Fix multi-agent voice routing and add CLI controls#4637
lynford-u wants to merge 1 commit into
block:mainfrom
lynford-u:codex-native-voice

Conversation

@lynford-u

Copy link
Copy Markdown

Summary

  • fix name-led specialist routing for concise spoken requests
  • add multi-agent voice rooms with speaker leases, mix-minus, and distinct voices
  • add authenticated buzz voice join/remove/mute/voice controls

Validation

  • 4,054 frontend tests
  • 2,150 native tests + 3 mixer diagnostics (14 expected ignores)
  • 319 CLI tests
  • typecheck, production build, formatting, static source gates
  • live pre-restart CLI remove/join state transition

Originating Buzz channel: 702ede50-175f-4a33-b62b-0ebec8f34d25

Co-authored-by: Lynford Ulrich <lynford@eop.tech>
Signed-off-by: Lynford Ulrich <lynford@eop.tech>
@lynford-u
lynford-u requested a review from a team as a code owner August 3, 2026 23:26

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c083e97112

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +129 to +133
let activeTargets: CodexVoiceTarget[] = readTargets(ACTIVE_STORAGE_KEY);
let savedTargets: CodexVoiceTarget[] = readTargets(SAVED_STORAGE_KEY);
let sessionStates: Record<string, CodexVoiceSessionState> = {};
let roomTranscript: VoiceRoomTranscriptEntry[] = [];
let roomTranscriptSequence = 0;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Reset voice-room state when switching communities

When the user switches to another community, these module-level targets, transcripts, directed turns, and speaker lease survive the React remount; I checked resetCommunityState() in useCommunityInit.ts, and it does not clear this registry. Because CodexVoiceController remounts docks from activeTargets, the new community can immediately reconnect an old community's agent using its previous relay, channel, and thread, while also displaying the old transcript. Add a registry reset and invoke it at the community boundary.

AGENTS.md reference: AGENTS.md:L488-L492

Useful? React with 👍 / 👎.

Comment on lines +361 to +363
let audio_media_type = unsafe { AVMediaTypeAudio }
.ok_or_else(|| "AVFoundation audio capture is unavailable.".to_string())?;
let status = unsafe { AVCaptureDevice::authorizationStatusForMediaType(audio_media_type) };

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Replace the unsafe microphone permission calls

On macOS, this permission path introduces new unsafe blocks for AVFoundation access despite the repository's explicit prohibition on unsafe code. Route microphone authorization through a safe wrapper or existing permission abstraction rather than adding these unchecked FFI calls.

AGENTS.md reference: AGENTS.md:L113-L116

Useful? React with 👍 / 👎.

buzz voice join --agent-name "Architect"
buzz voice mute --agent-name "Architect"
buzz voice unmute --agent-name "Architect"
buzz voice set-voice --agent-name "Architect" --voice "verse"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Use a supported voice in the agent skill example

When an agent follows this newly seeded skill, the documented command fails during Clap parsing because VoiceName accepts sol, cove, ember, breeze, arbor, vale, juniper, maple, or spruce, but not verse. Replace the example with one of the accepted values so the primary instructions do not teach a command that can never execute.

Useful? React with 👍 / 👎.

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.

1 participant