The Slack huddle SDK seam used only to actuate MuteParticipant — all perception
is fed in by the driver via the Ingest* methods so the SDK keeps a single subscriber per event.
ReadonlyCapabilitiesSlack supports huddle participant mute, so the facilitator MuteParticipant tool is offered.
Forwards a native hand-raise/lower signal from the driver to the channel.
⚠️ Slack huddle raise-hand is partial; this may never fire on workspaces/builds that don't surface the event to apps. The channel degrades gracefully (its software hand-raise still works).
The participant whose hand changed.
Whether the hand is now raised.
Replaces the roster with a fresh snapshot from the driver and emits it to the channel. Called by the driver after the initial join and on every participant join/leave.
The full current Slack huddle roster.
Forwards a diarized speaking-set change from the driver to the channel.
⚠️ Diarized speaking derives from the huddle media path, which is the gating unknown (see the
REAL-API RISK in slack-sdk.ts).
The ids currently speaking.
Mutes a participant on the platform (the actuation behind the agent's MuteParticipant tool).
Capability-gated by Capabilities; the channel checks the capability before calling this.
The participant to mute.
A promise resolving once the mute request has been issued.
Convenience alias for IngestSpeaking, kept because "notify" reads naturally at the driver's inbound-audio call site.
The ids currently speaking.
Registers a handler for hand-raise/lower signals the PLATFORM surfaces (e.g. a participant uses
the conferencing app's native "raise hand"). raised = true enqueues, false dequeues.
Invoked with the participant id and whether the hand is now raised.
Registers a handler for roster changes. Fired with the FULL current roster on every change.
Invoked with the full current roster on every change.
Registers a handler for diarized speaking changes — the set of participant ids currently speaking.
Invoked with the speaking participant ids on every change.
Slack's adapter to the Meeting Controls channel's event source. It maintains a live roster and mirrors native hand-raise (⚠️ partial on Slack) + diarized speaking signals (⚠️ from the gating-unknown huddle media path), and actuates mute through the SDK.
The driver owns the SDK subscriptions (the SDK seam is "latest handler wins", so it can have only one subscriber per event) and feeds this source imperatively via IngestRoster / IngestHandRaise / IngestSpeaking. This source only needs the SDK for the one action it actuates — MuteParticipant. The Meeting Controls channel subscribes the three
On*streams in turn.The driver constructs ONE of these per session (only when the provider has
SpeakerDiarization, i.e. there is a roster to facilitate) and returns it fromSlackBridge.GetMeetingControlsEventSource.