ProtectedContextThe bound session context, available from Initialize until Dispose.
null outside that window — guard with ?. in any code that can run early/late.
Matches the seeded MJ: AI Agent Channels row's Name.
The shared name prefix of every server-executed tool this channel contributes (e.g.
'MeetingControls_'). The host routes any tool call whose name starts with this prefix to
THIS plugin's ExecuteServerTool, which is what prevents tool-name collisions when
multiple channels are active in one session. A channel that contributes no server tools may
leave the default empty string (the host then never routes any call to it).
Mirrors the client half's ToolNamePrefix. Default: '' (no server tools).
Tears the plugin down: release any per-session resources, then drop the context. Subclasses
overriding this MUST call super.Dispose(). Invoked by the host after the post-close linger
window elapses (or immediately when the host is configured with no linger).
Executes ONE of this channel's server-side tools (a tool whose name starts with
ToolNamePrefix) and returns the result fed back to the model as the tool_response.
Implementations should NOT throw — return a { Success: false, Output } result so the model can
narrate the failure. The host additionally wraps anything thrown into a structured error, so a
throwing implementation can never break the live session. The default implementation returns a
structured "not implemented" error, so a channel that declares tools via
GetServerToolDefinitions but forgets to implement execution fails safely and visibly.
The full tool name the model invoked (begins with ToolNamePrefix).
The raw arguments JSON string the model emitted for the call.
The execution result (or a structured error), synchronously or as a promise.
Returns this channel's server-executed tool declarations — the tools the agent can invoke
on this channel that run server-side (a bot has no browser). May be runtime-computed: the
returned set can depend on the live session, the connected platform, or current channel state,
so a bridge-contributed channel can declare a vocabulary that only exists because of the live
connection. Every tool's Name SHOULD start with ToolNamePrefix so the host can route
its execution back here unambiguously.
Invoked by RealtimeChannelServerHost when assembling the session's tool set (after the
plugin's OnSessionStarted). Default: [] (a state-only channel contributes none).
The channel's server-executed tool definitions (possibly empty).
Binds the session context and invokes the OnInitialize hook. Called exactly once per session by the host, right after ClassFactory instantiation and before any lifecycle hook.
Validates + canonicalizes a landed media-state save (see the class doc for the contract).
The serialized media state the client submitted ({ Items, ActiveItemId }).
The compact canonical JSON when the payload is a valid object and differs from the
input; null (= keep the original) otherwise.
ProtectedOnSubclass hook invoked from Initialize once Context is bound — allocate any per-session state here. Default: no-op.
Invoked when the session is closed — from ANY close path: the user's explicit hang-up, the janitor's orphan/staleness sweeps, the graceful shutdown drain, or an error-path teardown (the reason says which). Fired once per session; Dispose follows after the host's brief post-close linger window (during which late state saves still route here first). Default: no-op.
The persisted close provenance, or null for legacy/unstamped rows.
Resolves the agent's curated media kit (a bound MJ: Collections of artifacts) into a manifest
and feeds it to the live model as a background context note, so the agent knows what it can show
(and surfaces items via the existing Media_ShowMedia tool). Best-effort: any failure is logged
and the session proceeds with no kit (the host also wraps this in try/catch).
Receives the session's MJ data context from the host (between Initialize and
OnSessionStarted) — used by OnSessionStarted to resolve the agent's media kit.
Server half of the Media interactive channel. One instance per realtime session (created by
RealtimeChannelServerHostfrom the channel registry — never construct directly).On each landed state save (OnChannelStateSave):
RestoreStateis tolerant of bad payloads, so flag-don't-drop is the safe posture, matchingWhiteboardChannelServer).