Protecteddestroy$Detail-pane (turns) error, shown in the right pane when set.
Master-list load error, shown in the body when set.
True while a selected session's turns are loading.
True while the master list is loading.
ProtectednavigationTab ID for query param notification scoping. Set by resource wrappers that render child dashboards, so the child knows which tab it belongs to. If not set, falls back to Data.Configuration.tabId.
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.
Active client-side text filter applied to the list (empty when none).
Transcript cues for the selected session, built from its turns (passed to the media player).
The session currently selected for playback, or null.
Transcript turns for the selected session (used to build the cues).
All recorded sessions (master list), newest first.
Active client-side sort direction for the list.
Active client-side sort field for the list.
StaticɵdirStaticɵfacReturns 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
The recordings currently visible — the master list narrowed by the active client-side
text filter and ordered by the active sort field + direction. Pure derivation from
Sessions / SearchQuery / SortField / SortDirection; drives both the list UI and
the agent context, so the agent's "what's selectable" view matches the screen exactly.
Clears the current playback selection, returning the surface to the empty playback state.
ProtectedGetRead current query params from tab configuration. Use in initDashboard() / ngOnInit() to get initial URL state.
Get this component's tab ID. Checks ParentTabId input first (set by resource wrappers for child dashboards), then falls back to Data.Configuration.tabId.
Loads the master list of recorded sessions.
After the view initializes, publish the initial agent context and register the read-only playback-navigation tools the AI agent can invoke against this surface. The ongoing context re-emit happens after every meaningful state change (load, select, deselect).
A callback method that performs custom clean-up, invoked immediately before a directive, pipe, or service instance is destroyed.
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.
ProtectedNotifyAsk the host shell to close/dismiss this resource (typically: close the tab). Called by subclasses that hosted a form that emitted a 'dismiss' navigation event — most often, a brand-new record where the user clicked Discard. The record was never saved, the form is empty, and leaving it open serves no purpose. The tab-container listens for this and closes the workspace tab.
ProtectedNotifyCall this to notify the tab system that the resource's display name has changed. The tab container will update the tab title and browser title accordingly.
ProtectedNotifyProtectedNotifyProtectedOnCalled by the framework when query params change from an external source (browser back/forward, deep link navigation). Override in subclasses to react to query param changes.
The new query params from the URL
'popstate' for back/forward, 'deeplink' for external URL entry
Keyboard activation for a list row (Enter / Space select it).
ProtectedRefreshMarks this component's view (and its ancestors) as needing change detection and schedules a tick — the reliable way for a resource component to re-render after updating state from async work (RunView/RunQuery continuations, timers, websocket pushes, RxJS subscriptions).
WHY THIS EXISTS: the Explorer shell hosts resource components dynamically — createComponent()
ApplicationRef.attachView() — because tab content mounts into Golden Layout / cached DOM
containers, not into an Angular template. Since Angular 18's change-detection scheduler
rework (Explorer is on Angular 21), ApplicationRef.tick() only refreshes attached views
that are FLAGGED dirty; a root-level attached view whose component mutates plain fields from
an async continuation is never flagged, so the view silently never re-renders — even though
the component uses default (non-OnPush) change detection (issue #3106).The framework calls this automatically from NotifyLoadStarted() / NotifyLoadComplete(), so the standard load lifecycle re-renders without any subclass action. Call it yourself after any LATER async state change that must reach the DOM outside those signals.
ProtectedResourceSelects a session and loads its transcript into the playback pane (the player resolves audio).
A short, localized date/time label for a session row.
Stable @for track for the session list.
ProtectedUpdatePush query param changes to the URL. Creates a browser history entry. Safe to call during OnQueryParamsChanged — auto-suppressed to prevent loops.
REALTIME RECORDINGS — an Explorer resource dashboard for reviewing & replaying historical realtime sessions that were recorded. The left pane lists every recorded session (agent · date · duration · conversation); selecting one loads its time-aligned transcript turns and resolves the recording's builds transcript cues, then hands the recording's
RecordingFileID+ cues to MJStorageMediaPlayerComponent in the right pane — the player resolves the authenticated audio itself for synchronized audio + transcript playback.Data sources:
RunView('MJ: AI Agent Sessions', RecordingFileID IS NOT NULL)—simplerows.RunView('MJ: Conversation Details', AgentSessionID = <id>)—entity_objectrows.RecordingFileID(authenticated bytes → blob).