Emitted with the chosen agent + optional explicit voice model / co-agent when the user confirms.
Agents the user can call — same cached set the
Emitted when the user dismisses without starting a call.
Whether the current user holds the Realtime: Advanced Session Controls
authorization. Gates the voice-model selector (and any future config-override
controls) — pure disclosure; the server enforces the authorization on the mint.
The ACTIVE Realtime-type co-agent candidates the user can run (host-filtered from the same cached, run-permission-filtered agent set as Agents). The co-agent selector renders only when MORE THAN ONE candidate exists — with zero or one there's nothing meaningful to choose and the server's resolution chain applies.
The agent the default resolution would pick — preselected and listed first.
The user's persisted co-agent preference (host-loaded via UserInfoEngine) —
preselected in the co-agent selector when it's still a valid candidate.
Active Realtime models the model selector offers (loaded only for authorized users).
The selected co-agent's pairing rows; empty = universal co-agent (no constraint).
If specified, this provider will be used for communication and for all metadata purposes. By default, if not provided, the Metadata and RunView classes are used for this and the default GraphQLDataProvider is used which is connected to the same back-end MJAPI instance as the Metadata and RunView classes. If you want to have this component connect to a different MJAPI back-end, create an instance of a ProviderBase sub-class like GraphQLDataProvider/etc, and configure it as appropriate to connect to the MJAPI back-end you want to use, and then pass it in here.
Whether the user has opted to record this call (mic + agent audio). Loaded from the
per-user persisted preference (mj.realtimeVoice.recordingConsent.v1) on init and
persisted cross-device on change. Defaults to off.
The explicitly chosen co-agent id, or null for "Auto (recommended)" (the server's chain).
The explicitly chosen voice model id, or null for "Auto (recommended)" (the default).
The explicitly chosen voice id, or null for the configured/default voice.
ReadonlyUUIPerforms a case-insensitive comparison of two UUID strings. Handles null/undefined gracefully — two nullish values are considered equal, but a nullish value is never equal to a non-nullish value.
First UUID to compare
Second UUID to compare
true if the UUIDs are equal (case-insensitive), false otherwise
Active Realtime models + their voices (for the voice selector); loaded only for authorized users.
StaticɵdirStaticɵfacThe visible target list: pairing-constrained first (a co-agent WITH pairing rows may only front its paired targets, kept in pairing Sequence order), then search-filtered. Unconstrained lists keep the default-first + alphabetical ordering.
True while the agent list is constrained to the selected co-agent's paired targets.
Returns either the default Metadata provider or the one specified in the Provider property, if it was specified
Returns either the default RunQuery provider or the one specified in the Provider property, if it was specified
Returns either the default RunReport provider or the one specified in the Provider property, if it was specified
Returns either the default RunView provider or the one specified in the Provider property, if it was specified
Voices for the currently-selected model (empty when no model picked or it declares none).
Co-agent selector visibility: only when there is a real choice to make.
Whether agent carries the "default" badge: under a pairing constraint that's the
co-agent's IsDefault target; otherwise the host-resolved default agent.
Arrow-key navigation through the filtered list.
A callback method that is invoked immediately after Angular has completed initialization of a component's view. It is invoked only once when the view is instantiated.
A callback method that is invoked immediately after the default change detector has checked the directive's data-bound properties for the first time, and before any of the view or content children have been checked. It is invoked only once when the directive is instantiated.
Records the co-agent choice ('' = Auto → null) and refreshes the pairing constraint.
Dismiss when the user clicks anywhere outside the popover. (The phone button that opens it stops propagation, so the opening click never reaches this handler.)
Records the voice-model choice ('' = Auto → null); clears the voice so it can't outlive a switch.
Records + persists (cross-device, debounced) the user's recording-consent choice.
Records the voice choice ('' = default → null).
Confirm a specific agent immediately (double-click shortcut).
Compact anchored popover that lets the user choose WHICH agent a realtime voice call should front — shown by MessageInputComponent when the phone button is clicked on a conversation with no prior agent participation (new / empty conversation), and on demand via the caret button next to the phone (any conversation), where it doubles as the way to pick a specific co-agent (the Realtime-type agent that voices the call) and — for authorized users — a specific voice model. The plain phone click on an existing conversation keeps its friction-free "call the resolved agent immediately" behavior.
Mostly dumb: the host supplies the agent list (the same cached set the
Mention
autocomplete / routing logic uses), the Realtime-type co-agent candidates (filtered from that same set), and the defaults to preselect; the picker emits the user's choice. The data it loads itself:
Realtime: Advanced Session Controlsauthorization (pure UX disclosure; the server enforces the authorization on the mint), andMJ: AI Agent Co Agents, Active 'CoAgent'-type rows): a co-agent with pairing rows may only front its paired targets, so the agent list constrains to those rows (Sequence order) with the IsDefault row preselected; a co-agent with zero rows is universal and the list is untouched.It does NOT persist anything (the host persists the co-agent preference via
UserInfoEngine;mj-conversation-agent-pickerpinsMJConversationEntity.DefaultAgentID— different jobs, which is why this is a separate component).Anchors itself bottom-right above the composer — the host's
.message-input-wrapperisposition: relative.