ProtectedfeaturesThe capability flags for the provider this bridge instance serves. Populated from the RealtimeBridgeContext at BaseRealtimeBridge.Connect time (and may be set by the engine immediately after construction). Drives BaseRealtimeBridge.RequireFeature.
ProtectedproviderThe provider's display name for this bridge instance, used in capability-error messages. Populated from the RealtimeBridgeContext; falls back to the driver class name.
The bot's participant id in the joined huddle (or null before Connect).
The provider's supported-feature flags for this bridge instance.
Read-only accessor over the internally-held BaseRealtimeBridge.features. The engine consults this (and the underlying provider metadata) to decide which optional methods are safe to call; a driver consults it via BaseRealtimeBridge.RequireFeature.
ProtectedapplyCaptures the connection context onto the instance so BaseRealtimeBridge.Features, BaseRealtimeBridge.RequireFeature, and capability-error messages have the provider's flags and name. A concrete BaseRealtimeBridge.Connect should call this first.
The bridge context handed to Connect.
Joins the Slack huddle and brings the bot online. Captures the capability context, builds the SDK from the sdkFactory, wires the inbound raw-audio path and huddle-ended callback, joins, and (when the provider diarizes) constructs + seeds the Meeting Controls event source.
The bridge context (features, provider name, the huddle/channel link as Address, config).
The bot participant + huddle (external connection) identifiers, persisted by the engine.
Leaves the Slack huddle and releases all SDK resources. Tolerant of teardown errors.
Why the disconnect happened (Slack teardown is uniform; the bot simply leaves).
Flushes any outbound media the driver has queued for the endpoint — the agent's not-yet-played voice. The engine calls this on a true barge-in (the user interrupts the agent) so the agent stops talking immediately instead of draining already-buffered audio after the model was cut off.
No-op by default (NOT capability-gated): a driver with no client-side outbound buffer simply has nothing to flush, so calling this is always safe. Drivers that buffer outbound audio override it.
Returns the Slack Meeting Controls event source for this session (roster · hand-raise · speaking ·
mute), or null when diarization is off (no roster to facilitate). The engine wires the Meeting
Controls channel from this.
Returns the current Slack huddle participant roster (gated by SpeakerDiarization). Re-asserts the
flag (defense-in-depth) so even an engine-bypassing caller cannot pull a roster a disabled provider
forbids.
The current participants.
ProtectednotBuilds the standard BridgeCapabilityNotSupportedError for an un-overridden virtual method or a failed feature requirement, stamped with this bridge's provider name.
The feature / method name to report.
The error to throw or reject with.
Registers the inbound-media handler. The driver forwards each raw per-participant audio frame
(with its speaker label) to this handler; the engine routes it to IRealtimeSession.SendInput.
Invoked with each inbound media frame.
Registers a roster-change handler (gated by SpeakerDiarization). The driver fires it from the
SDK's participant join/leave stream with the full current roster.
Invoked with the updated participant list on each change.
Posts a message to the Slack huddle thread / channel. Exposed for the channel plane / turn-taking hybrid mode (the social-cost-free "raise hand"). Best-effort — a chat failure is logged, never fatal.
The chat message to post.
ProtectedRequireDefense-in-depth guard: asserts a SupportedFeatures flag is enabled before the driver
performs a capability-gated action, throwing BridgeCapabilityNotSupportedError if it
is false/omitted. An overriding driver method should call this at its top so that even a
direct (engine-bypassing) caller cannot run an action the metadata says is off.
The IBridgeProviderFeatures flag to require.
Sends DTMF tones on a telephony bridge.
Capability-gated by SupportedFeatures.DTMF. Throws unless overridden by a telephony driver.
The DTMF digit string to send (e.g. '1234#').
A promise that resolves once the tones have been sent.
Sends an outbound media frame into the huddle. Audio is fed to the SDK's huddle media path; video/screen frames are gated by the directional capability flags (the transport carries them, and the SDK send is a deployment-time binding TODO — today the models emit audio).
⚠️ REAL-API RISK: the audio send depends on the huddle media path (Chime), the gating unknown — see
the file header + slack-sdk.ts.
The outbound track the frame targets.
The media frame to send.
Sets the SlackHuddleSdkFactory this driver uses to construct its SDK seam at connect —
the creation seam (mirroring Gemini's overridable connectLiveSession). Production binds the real
Slack + huddle-media adapter here; tests inject a FakeSlackHuddleSdk.
🚨 REAL-API RISK: a production factory must wire a verified huddle media path (likely Chime-level);
see the file header + slack-sdk.ts.
The factory that builds the ISlackHuddleSdk for a session.
Transfers the call to another party on a telephony bridge.
Capability-gated by SupportedFeatures.CallTransfer. Throws unless overridden.
The transfer target (a phone number or platform endpoint identifier).
A promise that resolves once the transfer has been initiated.
Realtime Bridge driver for Slack huddles.
Construct the driver with the default constructor (the engine's
ClassFactorypath) — it lazily builds the Slack huddle SDK from the sdkFactory at Connect time. Tests inject aFakeSlackHuddleSdkby overriding the factory via SetSdkFactory (the creation seam) before connecting.🚨 See the REAL-API RISK in the file header +
slack-sdk.ts: the huddle media path this driver wires is the gating unknown for a live production binding.Registered via
@RegisterClass(BaseRealtimeBridge, 'SlackBridge').