Channel names the widget instance allows (from the minted session).
The perception seam channels use to feed the model (channel → agent notes).
The resolved channels (read-only) — used to build/reveal their surfaces.
True when at least one enabled channel resolved (so the controller declares tools + shows the surface).
Binds a channel's surface into a host element, once. The caller supplies a factory that creates/ returns the host element for a given channel name (the widget's demonstration slot). Idempotent.
Disposes every channel (clears surfaces + perception subscriptions).
The channel that owns a tool name (matched by prefix), or undefined when none does (the caller
then relays the tool to the server). Pure lookup — does NOT apply the tool, so the caller can bind
the channel's surface before applying.
Every enabled channel's client-tool definitions, flattened — declared to the model at session mint.
Routes a model tool call to the owning channel and APPLIES it. Returns { handled: false } when
no channel owns it. Convenience for callers that have already bound surfaces (and for tests).
Coordinates the set of interactive channels enabled for a voice session.