AbstractProtectedfeaturesThe 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 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.
AbstractConnectJoins the meeting / places or accepts the call and brings the bot participant online.
The driver records the context (features, provider name) for later capability gating and
returns the platform handles the engine persists. Implementations must normalize the
provider's capability flags into BaseRealtimeBridge.features (typically by calling
this.applyContext(ctx) first).
The host services and connection parameters for this session.
A promise resolving to the bot participant + external connection identifiers.
AbstractDisconnectLeaves the meeting / hangs up the call cleanly and releases all platform resources.
Why the disconnect is happening; drivers may shortcut graceful teardown on Error/Shutdown.
A promise that resolves once the bot has fully left the endpoint.
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 a Meeting Controls event source adapting this driver's native participant / speaking
/ hand-raise stream into the server-side channel plane, or null when the driver contributes no
such surface. Unlike the capability-gated virtuals above this does not throw by default — it
is a contribution hook, and most drivers (and all telephony drivers) legitimately contribute
nothing. The engine wires the Meeting Controls channel only for drivers that return a non-null
source, so the base default of null means "no facilitator surface".
A meeting driver (e.g. ZoomBridge) overrides this to return an IBridgeMeetingControlsEventSource
fed by its roster/speaking/hand-raise events; the engine hands it to the channel plane's
MeetingControlsChannelServer so the agent gains the facilitator tool vocabulary + perception.
Typically only meaningful when the provider also has SpeakerDiarization (a roster to facilitate).
The driver's Meeting Controls event source, or null (the default — no facilitator surface).
Returns the current participant roster for the endpoint.
Capability-gated by SupportedFeatures.SpeakerDiarization (roster + diarization mapping).
Throws BridgeCapabilityNotSupportedError unless a driver overrides it.
A promise resolving to 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.
AbstractOnRegisters a handler for inbound media frames — what the agent hears/sees from the endpoint
(routed to IRealtimeSession.SendInput). When the provider diarizes, inbound audio frames
carry BridgeMediaFrame.SpeakerLabel.
Invoked with each inbound media frame.
Registers a handler invoked when the endpoint's roster changes (join / leave / role change).
Capability-gated by SupportedFeatures.SpeakerDiarization. Throws unless overridden.
Invoked with the updated participant list on each change.
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.
AbstractSendSends an outbound media frame into the meeting/call — the agent's voice/video/screen
(fed from IRealtimeSession.OnOutput). Audio is just one track; the frame's
BridgeMediaFrame.Track selects which.
The outbound track the frame is destined for (must be an *-out kind).
The media frame to send.
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.
Abstract base class for a Realtime Bridge driver — a pluggable media transport that connects the one realtime agent engine to an external endpoint (a Zoom/Teams/Slack/Meet/Webex/Discord meeting, or a Twilio/Vonage/RingCentral/VOIP phone call).
A concrete driver (
ZoomBridge,TwilioBridge, …) implements only the irreducibly platform-specific primitives; everything that can be done generically (session wiring, frame normalization, turn-taking, participant bookkeeping, reconnect/teardown) lives in the engine above. Drivers self-register with the MemberJunctionClassFactoryexactly as realtime model drivers do — e.g.@RegisterClass(BaseRealtimeBridge, 'ZoomBridge'). The base class itself is abstract and unregistered; the engine resolves a driver viaMJGlobal.ClassFactory.CreateInstance(BaseRealtimeBridge, provider.DriverClass).Capability gating (two layers, defense-in-depth). The engine FIRST checks a provider's
SupportedFeaturesflag and never calls a driver method whose feature is off. The driver's own virtual methods are the SECOND layer: every optional method throws BridgeCapabilityNotSupportedError by default, so a driver that has not overridden a method — or a metadata flag that lied — fails loudly rather than silently degrading. The protected BaseRealtimeBridge.RequireFeature helper lets an overriding driver re-assert the flag at the top of its implementation.Media-agnostic. BaseRealtimeBridge.SendMedia / BaseRealtimeBridge.OnMedia carry typed, directional media frames — audio is just one track. Video and screen tracks ride the same two methods, gated by the directional feature flags.
See
/plans/realtime/realtime-bridges-architecture.md§3 and §9 (Phase 0/1).