ProtectedappThe conversation entity when it could be loaded (title, pinned agent); the chat area loads messages by ID either way.
The routine's conversation ID, bound to the embedded chat area.
The routine whose briefings the reader shows; null while the reader is closed.
ProtectedcdrProtectedchiefResolved once per load from the agent's metadata name; null until LoadChiefOfStaffData has run.
Protecteddestroy$The policy as the pages show it; the Governance page edits it.
ProtectednavigationProtected ReadonlyPageWhich page this component is.
Tab 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.
Filters requests and routines on pages that show a search box.
When true, the wake list also shows spent one-shots (reminders that have fired). Off by default.
StaticɵdirStaticɵfacThe application the routine conversation is filed under, so the chat area stays in that scope.
The environment the embedded chat area reads under.
Spent one-shots: reminders and one-time wakes that have already fired.
Approval requests awaiting a decision, filtered by the search text.
Returns either the default Metadata provider or the one specified in the Provider property, if it was specified
Wired by the tab container. true means the hosted form just entered edit
mode; the shell PROMOTES (pins) a records preview tab on that edge so the
record is never replaced by the next plain open — VS Code's
promote-on-modify. false is informational; promotion is sticky.
Returns either the default RunQuery 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
Routines in display order: next wake first, unscheduled next, spent one-shots last.
Routines that still have something ahead of them: everything but spent one-shots.
True when the routine has run at least once and so has a conversation to read.
Copies the draft as plain text (headers, blank line, body) for pasting into a mail client.
Optionalevent: EventThe outbound email an approval request carries, or null when the request is not an email.
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.
True when this resource holds in-progress user edits that a silent replacement would destroy.
Since #4345 the PRIMARY protection is promotion: the shell pins a records
preview tab on the ResourceEditModeChangedEvent(true) edge. This read
remains as the fallback the pool predicate consults for resources that
report edit state without raising that event, so such a tab still leaves
the consumption pool while editing.
Default false: most resources are read-only surfaces with nothing to lose. Resources that host an editable form override it.
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.
ProtectedNotifyTell the host shell the hosted form's edit mode changed. Subclasses that host an editable form call this from the form's EditModeChanged output.
ProtectedNotifyProtectedNotifyProtectedOnRuns after every load, before the agent context is published.
ProtectedOnRuns before the first load; a page reads its query params here.
ProtectedOnCalled 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
ProtectedonHook for a host that instantiates CHILD resource components: re-home them here.
A host stamps its children with its tab id when it creates them, which is a SNAPSHOT. A cache reattach moves the host to a different tab without recreating anything, so a child left holding the birth tab's id would go on reading and — worse — writing that tab's params from inside a tab it no longer belongs to. That is the same cross-tab corruption this class refuses elsewhere, just arriving by a slower route, so the stamp has to move when the host does.
Default is a no-op: a component with no children has nothing to re-home.
Opens the slide-in reader on the routine's conversation without leaving the page.
Optionalevent: EventOpens another Chief of Staff page through its nav item.
Opens the routine's conversation in the Chat app. The ID goes in the query params as well as the nav item configuration: an already-open Chat tab is reused and reacts only to a query-param change.
Optionalevent: EventOptionalevent: EventProtectedPageClient tools only this page offers, added to the shared ones.
ProtectedpublishRe-home this component to a different tab (cache reattach across tab ids). Replaces the reactive param subscription with one bound to the new tab and resets the duplicate-delivery key so the new tab's CURRENT params apply as a fresh mount would — the replay-on-subscribe delivers them immediately.
ProtectedrecalculateProtectedRefreshMarks 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.
ProtectedrehomeRe-homes a child this component created to tabId.
The ParentTabId stamp is cleared FIRST and deliberately: getTabId() prefers it over the
rebound id, so leaving the old stamp in place would make the child's own RebindTabId a
no-op — it early-returns when getTabId() already matches — and the child would keep
answering with the tab it was born in. Clearing it lets the rebind be the authority, and the
child re-delivers the NEW tab's current params exactly as a fresh mount would.
ProtectedResource'Fired' for a spent one-shot, otherwise the routine's Status.
ProtectedshowOptionalevent: EventOptionalevent: EventProtectedUpdatePush query param changes to the URL. Creates a browser history entry. Safe to call during OnQueryParamsChanged — auto-suppressed to prevent loops.
The write is ALWAYS scoped to this component's own tab. A component that cannot identify its tab does not write at all — see the guard below.
The Chief of Staff application's Approvals & Wakes page: every pending approval with its recent decisions, and every wake routine with Wake Now, pause and its briefings. The search box filters both lists and round-trips through the
searchquery param.