ProtectedconstructorTrue once the caches have loaded (agents/users/entities/queries/skills).
StaticInstanceThe process-wide shared instance (Global Object Store backed).
Use GetAvailableAgents.
Get available agents for parsing
Use GetAvailableEntities.
Get available entities for parsing
Use GetAvailableQueries.
Get available queries for parsing
Use GetAvailableUsers.
Get available users for parsing
The Global Object Store is a place to store global objects that need to be shared across the application. Depending on the execution environment, this could be the window object in a browser, or the global object in a node environment, or something else in other contexts. The key here is that in some cases static variables are not truly shared because it is possible that a given class might have copies of its code in multiple paths in a deployed application. This approach ensures that no matter how many code copies might exist, there is only one instance of the object in question by using the Global Object Store.
Use GetQueriesEntityIcon.
Get the generic icon used for all query mentions.
Use GetSuggestions.
Get suggestions based on search query
The search text after the trigger character
Whether to include users in suggestions
'@' (agents + users), '#' (entities + queries) or '/' (skills)
When the host knows which agent the message will go to (the '/' trigger
only), skill suggestions are narrowed to what THAT agent accepts — AcceptsSkills + its
MJ: AI Agent Skills grants — via AIEngineBase.GetSkillsForAgent. Without it (or for an
agent not in the user's runnable set) the user's full runnable catalog is shown, as before, and
the server's RequestedSkills guard is the backstop.
Narrows the '@' list for one composer: the agents it may offer and the people it offers. Passed per call, never stored, because this engine is shared by every composer on the page. Omitted keeps today's list: every agent the user can run, and the current user.
Filtered and ranked suggestions
Initialize the service by loading agents and users Prevents concurrent initialization with promise lock
Optionalprovider: IMetadataProviderRefresh the caches Resets initialization state and reloads agents
Protected StaticgetReturns the singleton instance of the class. If the instance does not exist, it is created and stored in the Global Object Store. If className is provided it will be used as part of the key in the Global Object Store, otherwise the actual class name will be used. NOTE: the class name used by default is the lowest level of the object hierarchy, so if you have a class that extends another class, the lowest level class name will be used.
OptionalclassName: string
Shared engine behind the conversations composer plugins (the agent-mentions / record-mentions / skill-commands
ComposerTriggerProviders) and the mention-parsing consumers (message routing, saved-message badge rendering). Loads the permission-filtered agent / user / entity / query / skill caches once per session and serves rankedMentionSuggestionlists per trigger char.Framework-agnostic by construction: a
BaseSingletonwith no Angular, no DOM and no renderer in its graph. That is what lets the ClassFactory-instantiated trigger providers (which live outside Angular DI), the Angular components, and a React Native host all share ONE instance and one cache warm-up.It previously lived in
@memberjunction/ng-conversationsand was Angular-coupled only by location — no import from@angular/*, no decorator. A native host cannot depend on an Angular library, so the same permission filtering, skill narrowing and ranking would have had to be written a second time to reach mobile, and a second copy of a permission rule is the copy that drifts. Angular keeps a thin DI shim over this so its call sites are unchanged.