OptionalcallerOptionalcanOptionalcapacityOptionalcoResolves the co-agent (the Realtime-type agent that voices the target agent) via the metadata-driven co-agent resolution chain — first match wins:
explicitCoAgentID. A per-call override; an invalid candidate throws (the caller asked
for something specific, so there is no silent fallback).DefaultCoAgentID. An invalid reference logs and falls
through (stale metadata must degrade, never break live calls).AIAgentCoAgent row of Type 'CoAgent' whose TargetAgentTypeID is the
target's type (IsDefault first, then lowest Sequence). Same tolerant semantics as step 2.Every candidate from steps 1–3 must exist, be Active, and be of the REALTIME_AGENT_TYPE_NAME type.
The agent the co-agent will voice (drives steps 2–3).
The explicit co-agent choice, when supplied (step 1).
The user the metadata reads run as.
The request-scoped metadata provider.
The resolved co-agent's id (canonical casing from the metadata cache).
OptionalcoordinatorOptionalengineOptionalhandoffOptionalinboundOptional custom inbound handler (e.g. for Contact Center entry point routing).
OptionalsessionOptionalsipOptionalstarterOverrides the room-call starter (tests).
Injectable collaborators (production defaults are wired in the constructor; fakes in tests).