Error stream
Whether a search is in progress
Recent search history (persisted via UserInfoEngine, max 20 entries)
Cached list of scopes the current user can see. Populated lazily by LoadScopes().
Current search response
Build filter facets from a set of results.
Clear recent search history (memory and persisted)
Clear the current search results
Execute a search request via the SearchKnowledge GraphQL mutation.
Recently opened records for search empty states, newest first — same source as the omnibar's '#' empty state (MJ: User Record Logs via UserInfoEngine). Fail-soft: any error yields [] rather than blocking the surface. Display names resolve via GetEntityRecordNames with the record ID as fallback.
Get the icon for a given source type
Group flat results by source type for display.
Load persisted recent searches from UserInfoEngine. Safe to call multiple times — only loads once.
Load the list of search scopes available to the current user.
Cached after the first successful call; pass force=true to reload.
Lightweight preview search for autocomplete/typeahead. Does NOT update SearchResults$ or IsSearching$ observables, and does NOT add to recent search history.
Phase 2C streaming search. Returns an Observable that emits one notification per provider as it returns, plus a 'fused' / 'reranked' / 'final' terminal event. Same auth + permission behavior as ExecuteSearch — denials surface as an error on the Observable.
Consumers (typically the search composite component) should:
Returns rxjs Observable rather than awaiting a Promise — callers decide whether to subscribe + populate state, or unsubscribe on navigation. The service does NOT update its own SearchResults$ subject for streaming calls; the caller owns the partial-render state model.
Multi-provider note: callers under a non-default provider should set
service.Provider = component.ProviderToUsebefore invoking any methods.