@acorex/modules 21.0.0-next.46 → 21.0.0-next.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/fesm2022/acorex-modules-ai-management.mjs +52 -164
  2. package/fesm2022/acorex-modules-ai-management.mjs.map +1 -1
  3. package/fesm2022/{acorex-modules-common-search-popup.component-BbRyjGia.mjs → acorex-modules-common-search-popup.component-CVuE0xgM.mjs} +14 -7
  4. package/fesm2022/acorex-modules-common-search-popup.component-CVuE0xgM.mjs.map +1 -0
  5. package/fesm2022/acorex-modules-common.mjs +2 -2
  6. package/fesm2022/{acorex-modules-conversation-acorex-modules-conversation-Dm9D7la2.mjs → acorex-modules-conversation-acorex-modules-conversation-F7nQo1GU.mjs} +364 -112
  7. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-F7nQo1GU.mjs.map +1 -0
  8. package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-DnKfkEg1.mjs → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-BB5Uyydt.mjs} +2 -2
  9. package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-DnKfkEg1.mjs.map → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-BB5Uyydt.mjs.map} +1 -1
  10. package/fesm2022/{acorex-modules-conversation-comments-page.component-JPIzhBys.mjs → acorex-modules-conversation-comments-page.component-QnDogSDy.mjs} +2 -2
  11. package/fesm2022/{acorex-modules-conversation-comments-page.component-JPIzhBys.mjs.map → acorex-modules-conversation-comments-page.component-QnDogSDy.mjs.map} +1 -1
  12. package/fesm2022/acorex-modules-conversation-start-assist-chat.command-DRlWzEDp.mjs +45 -0
  13. package/fesm2022/acorex-modules-conversation-start-assist-chat.command-DRlWzEDp.mjs.map +1 -0
  14. package/fesm2022/acorex-modules-conversation.mjs +1 -1
  15. package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-D11VudG8.mjs → acorex-modules-dashboard-management-acorex-modules-dashboard-management-kk0CINL1.mjs} +5 -5
  16. package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-kk0CINL1.mjs.map +1 -0
  17. package/fesm2022/{acorex-modules-dashboard-management-index-DB3Uh1wL.mjs → acorex-modules-dashboard-management-index-Bhm8mAON.mjs} +2 -2
  18. package/fesm2022/{acorex-modules-dashboard-management-index-DB3Uh1wL.mjs.map → acorex-modules-dashboard-management-index-Bhm8mAON.mjs.map} +1 -1
  19. package/fesm2022/acorex-modules-dashboard-management.mjs +1 -1
  20. package/fesm2022/acorex-modules-person-core.mjs +4 -0
  21. package/fesm2022/acorex-modules-person-core.mjs.map +1 -1
  22. package/fesm2022/{acorex-modules-platform-dev-tools-menu.provider-BFueKnuF.mjs → acorex-modules-platform-dev-tools-menu.provider-DDjYvQr7.mjs} +6 -2
  23. package/fesm2022/acorex-modules-platform-dev-tools-menu.provider-DDjYvQr7.mjs.map +1 -0
  24. package/fesm2022/acorex-modules-platform-dev-tools.mjs +42 -5
  25. package/fesm2022/acorex-modules-platform-dev-tools.mjs.map +1 -1
  26. package/fesm2022/acorex-modules-project-management.mjs +33 -3
  27. package/fesm2022/acorex-modules-project-management.mjs.map +1 -1
  28. package/fesm2022/acorex-modules-report-management.mjs +12 -8
  29. package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
  30. package/fesm2022/{acorex-modules-task-management-acorex-modules-task-management-BIEMYKVF.mjs → acorex-modules-task-management-acorex-modules-task-management-BL2IOcx3.mjs} +2 -2
  31. package/fesm2022/{acorex-modules-task-management-acorex-modules-task-management-BIEMYKVF.mjs.map → acorex-modules-task-management-acorex-modules-task-management-BL2IOcx3.mjs.map} +1 -1
  32. package/fesm2022/{acorex-modules-task-management-task-board.page-CkVHYIl5.mjs → acorex-modules-task-management-task-board.page-DUIHtqnr.mjs} +138 -68
  33. package/fesm2022/acorex-modules-task-management-task-board.page-DUIHtqnr.mjs.map +1 -0
  34. package/fesm2022/acorex-modules-task-management.mjs +1 -1
  35. package/fesm2022/{acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-Dj6LkQeZ.mjs → acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-CYyr1kQk.mjs} +3 -3
  36. package/fesm2022/{acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-Dj6LkQeZ.mjs.map → acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-CYyr1kQk.mjs.map} +1 -1
  37. package/fesm2022/{acorex-modules-workflow-management-index-Eh5DDK-V.mjs → acorex-modules-workflow-management-index-DC_9M9dk.mjs} +3 -3
  38. package/fesm2022/{acorex-modules-workflow-management-index-Eh5DDK-V.mjs.map → acorex-modules-workflow-management-index-DC_9M9dk.mjs.map} +1 -1
  39. package/fesm2022/{acorex-modules-workflow-management-index-V4OesZTq.mjs → acorex-modules-workflow-management-index-jin24dmb.mjs} +3 -3
  40. package/fesm2022/{acorex-modules-workflow-management-index-V4OesZTq.mjs.map → acorex-modules-workflow-management-index-jin24dmb.mjs.map} +1 -1
  41. package/fesm2022/{acorex-modules-workflow-management-workflow-instance.entity-B_V3uMSI.mjs → acorex-modules-workflow-management-workflow-instance.entity-BnKT3Wgh.mjs} +2 -2
  42. package/fesm2022/{acorex-modules-workflow-management-workflow-instance.entity-B_V3uMSI.mjs.map → acorex-modules-workflow-management-workflow-instance.entity-BnKT3Wgh.mjs.map} +1 -1
  43. package/fesm2022/acorex-modules-workflow-management.mjs +8 -15
  44. package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
  45. package/package.json +2 -2
  46. package/types/acorex-modules-ai-management.d.ts +17 -22
  47. package/types/acorex-modules-conversation.d.ts +7 -1
  48. package/types/acorex-modules-dashboard-management.d.ts +2 -2
  49. package/types/acorex-modules-platform-dev-tools.d.ts +16 -2
  50. package/types/acorex-modules-report-management.d.ts +8 -1
  51. package/types/acorex-modules-workflow-management.d.ts +2 -3
  52. package/fesm2022/acorex-modules-common-search-popup.component-BbRyjGia.mjs.map +0 -1
  53. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-Dm9D7la2.mjs.map +0 -1
  54. package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-D11VudG8.mjs.map +0 -1
  55. package/fesm2022/acorex-modules-platform-dev-tools-menu.provider-BFueKnuF.mjs.map +0 -1
  56. package/fesm2022/acorex-modules-task-management-task-board.page-CkVHYIl5.mjs.map +0 -1
  57. package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-l37iXJIY.mjs +0 -362
  58. package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-l37iXJIY.mjs.map +0 -1
@@ -1,15 +1,22 @@
1
1
  import { AXConversationModule } from '@acorex/components/conversation';
2
2
  import { AXPSessionService, AXPAuthGuard, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';
3
- import { createAllQueryView, AXPEntityQueryType, AXPSettingsService, AXPCommonSettings, AXPFilterOperatorMiddlewareService, AXPEntityCommandScope, AXPFileStorageService, AXP_MENU_PROVIDER } from '@acorex/platform/common';
4
- import { AXPDataGenerator, AXPPlatformScope, AXPDeviceService, AXP_MODULE_MANIFEST_PROVIDER } from '@acorex/platform/core';
3
+ import { createAllQueryView, AXPEntityQueryType, AXPSettingsService, AXPCommonSettings, AXPFilterOperatorMiddlewareService, AXPEntityCommandScope, AXPFileStorageService, AXP_MENU_PROVIDER, AXP_SEARCH_PROVIDER, AXP_SEARCH_DEFINITION_PROVIDER } from '@acorex/platform/common';
4
+ import { AXPSystemActionType, AXPDataGenerator, AXPPlatformScope, AXPDeviceService, AXP_MODULE_MANIFEST_PROVIDER } from '@acorex/platform/core';
5
5
  import { AXPThemeLayoutBlockComponent, AXPThemeLayoutStartSideComponent, AXPUserAvatarComponent, AXPMarkdownViewerComponent, AXPMarkdownTemplateDirective, AXP_PAGE_COMPONENT_PROVIDER, AXP_TASK_BADGE_PROVIDERS } from '@acorex/platform/layout/components';
6
- import { AXMEntityCrudServiceImpl, entityMasterCrudActions, entityMasterRecordActions, AXPEntityDefinitionRegistryService, cloneLayoutArrays, ensureLayoutSection, ensureLayoutPropertyView, resolveEntityPluginDetailPageOrder, ensureListActions, actionExists, AXPEntityService, AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';
6
+ import { AXPEntityDefinitionRegistryService, AXMEntityCrudServiceImpl, entityMasterCrudActions, entityMasterRecordActions, cloneLayoutArrays, ensureLayoutSection, ensureLayoutPropertyView, resolveEntityPluginDetailPageOrder, ensureListActions, actionExists, AXPEntityService, AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';
7
7
  import { AXPRootLayoutComponent } from '@acorex/platform/themes/default';
8
8
  import * as i5 from '@angular/common';
9
9
  import { CommonModule, AsyncPipe, DecimalPipe, DatePipe } from '@angular/common';
10
+ import { provideCommandSetups } from '@acorex/platform/runtime';
10
11
  import * as i0 from '@angular/core';
11
- import { Injectable, NgModule, inject, output, signal, viewChild, computed, effect, untracked, ChangeDetectionStrategy, Component, input, afterNextRender, DestroyRef, ElementRef, ViewEncapsulation, Injector, importProvidersFrom } from '@angular/core';
12
+ import { inject, Injectable, NgModule, output, signal, viewChild, computed, effect, untracked, ChangeDetectionStrategy, Component, input, afterNextRender, DestroyRef, ElementRef, ViewEncapsulation, Injector, importProvidersFrom } from '@angular/core';
12
13
  import { Router, ActivatedRoute, RouterModule, ROUTES } from '@angular/router';
14
+ import { sortBy } from 'lodash-es';
15
+ import { RootConfig as RootConfig$1, axpAiChatMessagesFromProviderAssistant, axpAiParseDelegatedAgentResultSegmentsFromUnknown, axpAiChatTextMessage, AXPAiAssistChatModelCatalogService, axpAiParseSupervisorAgentToolName, axpAiChatMessageGetText, axpAiChatMessageIsDelegatedReflectionExcluded, axpAiDelegatedAgentPromptPreview, axpAiChatToolOrAgentResultBodyJson, axpAiDelegatedAgentOutcomeResponsesPlainText } from '@acorex/modules/ai-management';
16
+ import { AXConversationService, AXNewConversationDialogComponent, AXConversationContainerDirective, AXSidebarComponent, AXInfoBarComponent, AXMessageListComponent, AXComposerComponent, AXUserApi, AXConversationApi, AXMessageApi, AXRealtimeApi, conversationSharedStorage, axConversationIndexedDbStorage, AXImageRendererComponent, AXTextRendererComponent, provideConversation, AX_CONVERSATION_ITEM_MUTE_ACTION, AX_CONVERSATION_ITEM_PIN_ACTION, AX_CONVERSATION_ITEM_MARK_READ_ACTION, AX_CONVERSATION_ITEM_DIVIDER, AX_CONVERSATION_ITEM_DELETE_ACTION, AX_CONVERSATION_ITEM_BLOCK_ACTION, AX_CONVERSATION_INFO_BAR_SEARCH_ACTION, AX_CONVERSATION_INFO_BAR_INFO_ACTION, AX_CONVERSATION_INFO_BAR_MUTE_ACTION, AX_CONVERSATION_INFO_BAR_DIVIDER, AX_CONVERSATION_INFO_BAR_DELETE_ACTION, AX_CONVERSATION_INFO_BAR_BLOCK_ACTION, AX_CONVERSATION_TAB_ALL, AX_CONVERSATION_TAB_PRIVATE, AX_CONVERSATION_TAB_GROUPS, AX_CONVERSATION_COMPOSER_EMOJI_TAB, AX_CONVERSATION_COMPOSER_STICKER_TAB, AX_CONVERSATION_COMPOSER_EMOJI_ACTION, AX_CONVERSATION_COMPOSER_IMAGE_ACTION, AX_CONVERSATION_COMPOSER_VIDEO_ACTION, AX_CONVERSATION_COMPOSER_FILE_ACTION, AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION, AX_CONVERSATION_COMPOSER_AUDIO_ACTION, AX_CONVERSATION_COMPOSER_LOCATION_ACTION, AX_CONVERSATION_MESSAGE_REPLY_ACTION, AX_CONVERSATION_MESSAGE_FORWARD_ACTION, AX_CONVERSATION_MESSAGE_EDIT_ACTION, AX_CONVERSATION_MESSAGE_DELETE_ACTION, AXComposerService, AX_CONVERSATION_TEXT_RENDERER, AX_CONVERSATION_IMAGE_RENDERER, AX_CONVERSATION_VIDEO_RENDERER, AX_CONVERSATION_AUDIO_RENDERER, AX_CONVERSATION_VOICE_RENDERER, AX_CONVERSATION_FILE_RENDERER, AX_CONVERSATION_LOCATION_RENDERER, AX_CONVERSATION_STICKER_RENDERER } from '@acorex/components/conversation2';
17
+ import { AXToastService } from '@acorex/components/toast';
18
+ import * as i3$1 from '@acorex/core/translation';
19
+ import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
13
20
  import * as i1$3 from '@acorex/platform/layout/widget-core';
14
21
  import { AXPWidgetsCatalog, AXPValueWidgetComponent, AXPWidgetGroupEnum, AXPWidgetCoreModule, AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex/platform/layout/widget-core';
15
22
  import * as i1$6 from '@acorex/platform/workflow';
@@ -19,19 +26,14 @@ import { AXMUsersEntityService } from '@acorex/modules/security-management';
19
26
  import { Subject, map, filter, merge, auditTime } from 'rxjs';
20
27
  import * as i2 from '@acorex/components/button';
21
28
  import { AXButtonModule, AXButtonComponent } from '@acorex/components/button';
22
- import { AXConversationService, AXNewConversationDialogComponent, AXConversationContainerDirective, AXSidebarComponent, AXInfoBarComponent, AXMessageListComponent, AXComposerComponent, AXUserApi, AXConversationApi, AXMessageApi, AXRealtimeApi, conversationSharedStorage, axConversationIndexedDbStorage, AXImageRendererComponent, AXTextRendererComponent, provideConversation, AX_CONVERSATION_ITEM_MUTE_ACTION, AX_CONVERSATION_ITEM_PIN_ACTION, AX_CONVERSATION_ITEM_MARK_READ_ACTION, AX_CONVERSATION_ITEM_DIVIDER, AX_CONVERSATION_ITEM_DELETE_ACTION, AX_CONVERSATION_ITEM_BLOCK_ACTION, AX_CONVERSATION_INFO_BAR_SEARCH_ACTION, AX_CONVERSATION_INFO_BAR_INFO_ACTION, AX_CONVERSATION_INFO_BAR_MUTE_ACTION, AX_CONVERSATION_INFO_BAR_DIVIDER, AX_CONVERSATION_INFO_BAR_DELETE_ACTION, AX_CONVERSATION_INFO_BAR_BLOCK_ACTION, AX_CONVERSATION_TAB_ALL, AX_CONVERSATION_TAB_PRIVATE, AX_CONVERSATION_TAB_GROUPS, AX_CONVERSATION_COMPOSER_EMOJI_TAB, AX_CONVERSATION_COMPOSER_STICKER_TAB, AX_CONVERSATION_COMPOSER_EMOJI_ACTION, AX_CONVERSATION_COMPOSER_IMAGE_ACTION, AX_CONVERSATION_COMPOSER_VIDEO_ACTION, AX_CONVERSATION_COMPOSER_FILE_ACTION, AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION, AX_CONVERSATION_COMPOSER_AUDIO_ACTION, AX_CONVERSATION_COMPOSER_LOCATION_ACTION, AX_CONVERSATION_MESSAGE_REPLY_ACTION, AX_CONVERSATION_MESSAGE_FORWARD_ACTION, AX_CONVERSATION_MESSAGE_EDIT_ACTION, AX_CONVERSATION_MESSAGE_DELETE_ACTION, AXComposerService, AX_CONVERSATION_TEXT_RENDERER, AX_CONVERSATION_IMAGE_RENDERER, AX_CONVERSATION_VIDEO_RENDERER, AX_CONVERSATION_AUDIO_RENDERER, AX_CONVERSATION_VOICE_RENDERER, AX_CONVERSATION_FILE_RENDERER, AX_CONVERSATION_LOCATION_RENDERER, AX_CONVERSATION_STICKER_RENDERER } from '@acorex/components/conversation2';
23
29
  import { AXDialogService } from '@acorex/components/dialog';
24
30
  import * as i1$1 from '@acorex/components/decorators';
25
31
  import { AXDecoratorModule } from '@acorex/components/decorators';
26
- import * as i3$1 from '@acorex/core/translation';
27
- import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
28
32
  import { AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';
29
33
  import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
30
34
  import * as i3 from '@acorex/components/dropdown';
31
35
  import { AXDropdownModule } from '@acorex/components/dropdown';
32
36
  import { AXTextBoxModule } from '@acorex/components/text-box';
33
- import { AXToastService } from '@acorex/components/toast';
34
- import { RootConfig as RootConfig$1, axpAiChatMessagesFromProviderAssistant, axpAiParseDelegatedAgentResultSegmentsFromUnknown, axpAiChatTextMessage, AXPAiAssistChatModelCatalogService, axpAiParseSupervisorAgentToolName, axpAiChatMessageGetText, axpAiChatMessageIsDelegatedReflectionExcluded, axpAiDelegatedAgentPromptPreview, axpAiChatToolOrAgentResultBodyJson, axpAiDelegatedAgentOutcomeResponsesPlainText } from '@acorex/modules/ai-management';
35
37
  import * as i1 from '@angular/forms';
36
38
  import { FormsModule } from '@angular/forms';
37
39
  import { AXFabComponent, AXFabItemComponent } from '@acorex/components/fab';
@@ -98,6 +100,298 @@ const RootConfig = {
98
100
  },
99
101
  };
100
102
 
103
+ /** Starts a new bot conversation with the given AI assist model. */
104
+ const CONVERSATION_START_ASSIST_CHAT_COMMAND = 'Conversation:StartAssistChat';
105
+
106
+ //#region ---- Imports ----
107
+ //#endregion
108
+ //#region ---- Participant & metadata ----
109
+ /** Synthetic bot participant id for assist or agent-as-assist chats. */
110
+ function axmChatAiPeerParticipantId(catalogId) {
111
+ return `assist-${catalogId.trim()}`;
112
+ }
113
+ /** Conversation metadata for starting an AI chat from a picker row. */
114
+ function axmBuildAiChatConversationMetadata(row) {
115
+ if (row.kind === 'agent') {
116
+ return { directAgentId: row.id };
117
+ }
118
+ return { assistId: row.id };
119
+ }
120
+ /** True when conversation metadata targets an assist row or a direct agent-as-assist chat. */
121
+ function axmConversationHasAiChat(conversation) {
122
+ const meta = conversation?.metadata;
123
+ if (!meta) {
124
+ return false;
125
+ }
126
+ const assistId = meta['assistId'];
127
+ if (typeof assistId === 'string' && assistId.trim()) {
128
+ return true;
129
+ }
130
+ const directAgentId = meta['directAgentId'];
131
+ return typeof directAgentId === 'string' && directAgentId.trim().length > 0;
132
+ }
133
+ /**
134
+ * Loads assist rows plus agents flagged with `isAssist` for Conversation AI chat pickers.
135
+ */
136
+ async function axmLoadChatAiTargets(entityRegistry) {
137
+ const [assists, agents] = await Promise.all([
138
+ axmQueryEntityList(entityRegistry, RootConfig$1.entities.assist.name),
139
+ axmQueryEntityList(entityRegistry, RootConfig$1.entities.agent.name),
140
+ ]);
141
+ const assistRows = assists.map((raw) => ({
142
+ id: String(raw['id'] ?? ''),
143
+ name: String(raw['name'] ?? ''),
144
+ title: raw['title'],
145
+ description: raw['description'],
146
+ professionImageUrl: typeof raw['professionImageUrl'] === 'string' ? raw['professionImageUrl'] : undefined,
147
+ kind: 'assist',
148
+ }));
149
+ const agentRows = agents
150
+ .filter((raw) => raw['isAssist'] === true)
151
+ .map((raw) => ({
152
+ id: String(raw['id'] ?? ''),
153
+ name: String(raw['name'] ?? ''),
154
+ title: raw['title'],
155
+ description: raw['description'],
156
+ kind: 'agent',
157
+ }));
158
+ return [...assistRows, ...agentRows]
159
+ .filter((row) => row.id.trim().length > 0)
160
+ .sort((a, b) => a.name.localeCompare(b.name, undefined, { sensitivity: 'base' }));
161
+ }
162
+ //#endregion
163
+ //#region ---- Display & filter (dialog + global search) ----
164
+ /** Resolves ML or plain string for search/display. */
165
+ function axmResolveChatAiTargetText(resolveMl, value) {
166
+ if (!value) {
167
+ return '';
168
+ }
169
+ if (typeof value === 'string') {
170
+ return value;
171
+ }
172
+ return resolveMl(value) ?? '';
173
+ }
174
+ function axmChatAiTargetDisplayName(resolveMl, row) {
175
+ return axmResolveChatAiTargetText(resolveMl, row.title).trim() || row.name.trim() || row.id;
176
+ }
177
+ function axmChatAiTargetDisplayDescription(resolveMl, row) {
178
+ if (!row.description) {
179
+ return undefined;
180
+ }
181
+ const text = axmResolveChatAiTargetText(resolveMl, row.description).trim();
182
+ return text || undefined;
183
+ }
184
+ function axmChatAiTargetAvatarUrl(row) {
185
+ const url = row.professionImageUrl?.trim();
186
+ return url ? url : null;
187
+ }
188
+ /** Fallback i18n key for rows with no catalog description. */
189
+ function axmChatAiTargetShortcutDescriptionKey(row) {
190
+ return row.kind === 'agent'
191
+ ? '@conversation:search.assist.shortcut-description-agent'
192
+ : '@conversation:search.assist.shortcut-description';
193
+ }
194
+ /** Same filter as {@link AXMChatWithAssistDialogComponent} target list search. */
195
+ function axmFilterChatAiTargets(resolveMl, rows, query) {
196
+ const q = query.trim().toLowerCase();
197
+ if (!q) {
198
+ return rows;
199
+ }
200
+ return rows.filter((r) => {
201
+ const titleText = axmResolveChatAiTargetText(resolveMl, r.title).toLowerCase();
202
+ return (r.name.toLowerCase().includes(q) ||
203
+ titleText.includes(q) ||
204
+ axmResolveChatAiTargetText(resolveMl, r.description).toLowerCase().includes(q));
205
+ });
206
+ }
207
+ //#endregion
208
+ //#region ---- Entity list query ----
209
+ async function axmQueryEntityList(entityRegistry, entityName) {
210
+ const entity = await entityRegistry.resolve(RootConfig$1.module.name, entityName);
211
+ const execute = entity.queries?.list?.execute;
212
+ if (!execute) {
213
+ throw new Error(`${entityName} entity has no list query.`);
214
+ }
215
+ const res = await execute({
216
+ skip: 0,
217
+ take: 500,
218
+ sort: [{ name: 'name', dir: 'asc' }],
219
+ });
220
+ return res.items ?? [];
221
+ }
222
+
223
+ //#region ---- Imports ----
224
+ //#endregion
225
+ //#region ---- Service ----
226
+ /**
227
+ * Starts bot conversations from AI target rows (assists + agents with `isAssist`),
228
+ * shared by global search shortcuts and {@link AXMConversationStartAssistChatCommand}.
229
+ */
230
+ class AXMChatAssistLauncherService {
231
+ constructor() {
232
+ this.conversationService = inject(AXConversationService);
233
+ this.entityRegistry = inject(AXPEntityDefinitionRegistryService);
234
+ this.translationService = inject(AXTranslationService);
235
+ this.sessionService = inject(AXPSessionService);
236
+ this.router = inject(Router);
237
+ this.toastService = inject(AXToastService);
238
+ this.targetsCache = null;
239
+ this.loadPromise = null;
240
+ }
241
+ async loadTargets(force = false) {
242
+ if (!force && this.targetsCache) {
243
+ return this.targetsCache;
244
+ }
245
+ if (!force && this.loadPromise) {
246
+ return this.loadPromise;
247
+ }
248
+ this.loadPromise = axmLoadChatAiTargets(this.entityRegistry);
249
+ try {
250
+ this.targetsCache = await this.loadPromise;
251
+ return this.targetsCache;
252
+ }
253
+ finally {
254
+ this.loadPromise = null;
255
+ }
256
+ }
257
+ displayName(row) {
258
+ return axmChatAiTargetDisplayName(this.#resolveMl.bind(this), row);
259
+ }
260
+ displayDescription(row) {
261
+ return axmChatAiTargetDisplayDescription(this.#resolveMl.bind(this), row);
262
+ }
263
+ targetAvatarUrl(row) {
264
+ return axmChatAiTargetAvatarUrl(row);
265
+ }
266
+ filterTargets(rows, query) {
267
+ return axmFilterChatAiTargets(this.#resolveMl.bind(this), rows, query);
268
+ }
269
+ async startAssistChat(options) {
270
+ const targetId = (options.targetId ?? options.assistId)?.trim();
271
+ if (!targetId) {
272
+ return null;
273
+ }
274
+ const rows = await this.loadTargets();
275
+ const row = rows.find((r) => r.id === targetId && (!options.targetKind || r.kind === options.targetKind)) ??
276
+ rows.find((r) => r.id === targetId);
277
+ if (!row) {
278
+ const message = await this.translationService.translateAsync('@conversation:chat.assist-dialog.errors.start-chat');
279
+ this.toastService.danger(message);
280
+ return null;
281
+ }
282
+ try {
283
+ const conversation = await this.#createTargetConversation(row);
284
+ await this.conversationService.selectConversation(conversation.id);
285
+ if (options.navigate !== false) {
286
+ await this.router.navigate([this.#applicationRouteSegment(), 'chat', conversation.id]);
287
+ }
288
+ return { conversation };
289
+ }
290
+ catch (error) {
291
+ console.error('Failed to start AI chat:', error);
292
+ const message = await this.translationService.translateAsync('@conversation:chat.assist-dialog.errors.start-chat');
293
+ this.toastService.danger(message);
294
+ return null;
295
+ }
296
+ }
297
+ async #createTargetConversation(row) {
298
+ const participantId = axmChatAiPeerParticipantId(row.id);
299
+ const title = this.displayName(row);
300
+ const avatar = this.targetAvatarUrl(row);
301
+ return this.conversationService.createConversation([participantId], 'bot', {
302
+ title,
303
+ ...(avatar ? { avatar } : {}),
304
+ icon: 'fa-solid fa-robot',
305
+ metadata: axmBuildAiChatConversationMetadata(row),
306
+ });
307
+ }
308
+ #resolveMl(value) {
309
+ return this.translationService.resolve(value);
310
+ }
311
+ #applicationRouteSegment() {
312
+ return this.sessionService.application?.name ?? 'platform';
313
+ }
314
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMChatAssistLauncherService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
315
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMChatAssistLauncherService, providedIn: 'root' }); }
316
+ }
317
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMChatAssistLauncherService, decorators: [{
318
+ type: Injectable,
319
+ args: [{ providedIn: 'root' }]
320
+ }] });
321
+
322
+ /** Search group key — AI chat targets (assists + agent-as-assist), not conversation history. */
323
+ const AXM_CONVERSATION_ASSIST_SEARCH_GROUP = 'conversation-assist';
324
+ //#endregion
325
+ //#region ---- Provider ----
326
+ /**
327
+ * Global search entries to start a new AI chat — same catalog as
328
+ * {@link AXMChatWithAssistDialogComponent} / {@link AXMChatSidebarNewActionsComponent}.
329
+ *
330
+ * Note: the shared global search popup only queries when the text length is > 2.
331
+ */
332
+ class AXMConversationAssistSearchProvider {
333
+ constructor() {
334
+ this.launcher = inject(AXMChatAssistLauncherService);
335
+ }
336
+ async search(text) {
337
+ let rows;
338
+ try {
339
+ rows = await this.launcher.loadTargets();
340
+ }
341
+ catch (error) {
342
+ console.error('Failed to load AI chat targets for shortcut search:', error);
343
+ return [];
344
+ }
345
+ const filtered = this.launcher.filterTargets(rows, text);
346
+ const sorted = sortBy(filtered, (row) => this.launcher.displayName(row).toLowerCase());
347
+ return sorted.map((row) => ({
348
+ id: row.id,
349
+ group: AXM_CONVERSATION_ASSIST_SEARCH_GROUP,
350
+ title: row.title,
351
+ description: row.description ?? axmChatAiTargetShortcutDescriptionKey(row),
352
+ icon: 'fa-solid fa-robot',
353
+ data: { id: row.id, name: row.name, kind: row.kind },
354
+ command: {
355
+ name: CONVERSATION_START_ASSIST_CHAT_COMMAND,
356
+ options: {
357
+ targetId: row.id,
358
+ targetKind: row.kind,
359
+ },
360
+ },
361
+ }));
362
+ }
363
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMConversationAssistSearchProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
364
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMConversationAssistSearchProvider }); }
365
+ }
366
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMConversationAssistSearchProvider, decorators: [{
367
+ type: Injectable
368
+ }] });
369
+
370
+ //#endregion
371
+ //#region ---- Provider ----
372
+ /** Search group for AI assist shortcut picker (not chat/conversation history). */
373
+ class AXMConversationAssistSearchDefinitionProvider {
374
+ async provide(context) {
375
+ context.addDefinition(AXM_CONVERSATION_ASSIST_SEARCH_GROUP, '@conversation:search.assist.group-title', AXM_CONVERSATION_ASSIST_SEARCH_GROUP, 'fa-solid fa-robot', 4, {
376
+ format: {
377
+ id: '{{id}}',
378
+ },
379
+ actions: [
380
+ {
381
+ name: 'start-assist-chat',
382
+ type: AXPSystemActionType.View,
383
+ priority: 'primary',
384
+ },
385
+ ],
386
+ });
387
+ }
388
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMConversationAssistSearchDefinitionProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
389
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMConversationAssistSearchDefinitionProvider }); }
390
+ }
391
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMConversationAssistSearchDefinitionProvider, decorators: [{
392
+ type: Injectable
393
+ }] });
394
+
101
395
  class AXMConversationTabService extends AXMEntityCrudServiceImpl {
102
396
  }
103
397
  class AXMConversationTabServiceImpl extends AXMConversationTabService {
@@ -922,6 +1216,12 @@ const AXPConversationMenuKeys = {
922
1216
  Conversations: 'Conversation:Menu:Conversations',
923
1217
  };
924
1218
 
1219
+ const AXMPermissionsKeys = {
1220
+ Conversation: {
1221
+ Management: 'Conversation:Permission:Management',
1222
+ },
1223
+ };
1224
+
925
1225
  class AXMMenuProvider {
926
1226
  constructor() {
927
1227
  this.sessionService = inject(AXPSessionService);
@@ -937,6 +1237,9 @@ class AXMMenuProvider {
937
1237
  priority: 30,
938
1238
  icon: RootConfig.entities.room.icon,
939
1239
  badgeKey: 'badge-chat',
1240
+ policy: {
1241
+ permissions: [AXMPermissionsKeys.Conversation.Management],
1242
+ },
940
1243
  },
941
1244
  ]);
942
1245
  }
@@ -947,9 +1250,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
947
1250
  type: Injectable
948
1251
  }] });
949
1252
 
1253
+ //#endregion
1254
+ //#region ---- Permission Definition Provider ----
950
1255
  class AXMPermissionDefinitionProvider {
951
1256
  async define(context) {
952
- // TODO: Define permissions when needed
1257
+ const keys = AXMPermissionsKeys.Conversation;
1258
+ const modulePermissions = '@conversation:module.permissions';
1259
+ context
1260
+ .addGroup(RootConfig.module.name, `${modulePermissions}.title`, `${modulePermissions}.description`)
1261
+ .addPermission(keys.Management, `${modulePermissions}.manage.title`, `${modulePermissions}.manage.description`)
1262
+ .endPermission()
1263
+ .endGroup();
953
1264
  }
954
1265
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMPermissionDefinitionProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
955
1266
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMPermissionDefinitionProvider }); }
@@ -1635,77 +1946,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1635
1946
  args: [{ providedIn: 'root' }]
1636
1947
  }], ctorParameters: () => [] });
1637
1948
 
1638
- //#region ---- Imports ----
1639
- //#endregion
1640
- //#region ---- Participant & metadata ----
1641
- /** Synthetic bot participant id for assist or agent-as-assist chats. */
1642
- function axmChatAiPeerParticipantId(catalogId) {
1643
- return `assist-${catalogId.trim()}`;
1644
- }
1645
- /** Conversation metadata for starting an AI chat from a picker row. */
1646
- function axmBuildAiChatConversationMetadata(row) {
1647
- if (row.kind === 'agent') {
1648
- return { directAgentId: row.id };
1649
- }
1650
- return { assistId: row.id };
1651
- }
1652
- /** True when conversation metadata targets an assist row or a direct agent-as-assist chat. */
1653
- function axmConversationHasAiChat(conversation) {
1654
- const meta = conversation?.metadata;
1655
- if (!meta) {
1656
- return false;
1657
- }
1658
- const assistId = meta['assistId'];
1659
- if (typeof assistId === 'string' && assistId.trim()) {
1660
- return true;
1661
- }
1662
- const directAgentId = meta['directAgentId'];
1663
- return typeof directAgentId === 'string' && directAgentId.trim().length > 0;
1664
- }
1665
- /**
1666
- * Loads assist rows plus agents flagged with `isAssist` for Conversation AI chat pickers.
1667
- */
1668
- async function axmLoadChatAiTargets(entityRegistry) {
1669
- const [assists, agents] = await Promise.all([
1670
- axmQueryEntityList(entityRegistry, RootConfig$1.entities.assist.name),
1671
- axmQueryEntityList(entityRegistry, RootConfig$1.entities.agent.name),
1672
- ]);
1673
- const assistRows = assists.map((raw) => ({
1674
- id: String(raw['id'] ?? ''),
1675
- name: String(raw['name'] ?? ''),
1676
- title: raw['title'],
1677
- description: raw['description'],
1678
- professionImageUrl: typeof raw['professionImageUrl'] === 'string' ? raw['professionImageUrl'] : undefined,
1679
- kind: 'assist',
1680
- }));
1681
- const agentRows = agents
1682
- .filter((raw) => raw['isAssist'] === true)
1683
- .map((raw) => ({
1684
- id: String(raw['id'] ?? ''),
1685
- name: String(raw['name'] ?? ''),
1686
- title: raw['title'],
1687
- description: raw['description'],
1688
- kind: 'agent',
1689
- }));
1690
- return [...assistRows, ...agentRows]
1691
- .filter((row) => row.id.trim().length > 0)
1692
- .sort((a, b) => a.name.localeCompare(b.name, undefined, { sensitivity: 'base' }));
1693
- }
1694
- async function axmQueryEntityList(entityRegistry, entityName) {
1695
- const entity = await entityRegistry.resolve(RootConfig$1.module.name, entityName);
1696
- const execute = entity.queries?.list?.execute;
1697
- if (!execute) {
1698
- throw new Error(`${entityName} entity has no list query.`);
1699
- }
1700
- const res = await execute({
1701
- skip: 0,
1702
- take: 500,
1703
- sort: [{ name: 'name', dir: 'asc' }],
1704
- });
1705
- return res.items ?? [];
1706
- }
1707
- //#endregion
1708
-
1709
1949
  class AXMChatEmptyAssistComposerComponent {
1710
1950
  constructor() {
1711
1951
  this.conversationService = inject(AXConversationService);
@@ -2035,33 +2275,13 @@ class AXMChatWithAssistDialogComponent extends AXBasePageComponent {
2035
2275
  }
2036
2276
  }
2037
2277
  filteredTargetRows() {
2038
- const q = this.searchQuery().toLowerCase().trim();
2039
- const list = this.rows();
2040
- if (!q) {
2041
- return list;
2042
- }
2043
- return list.filter((r) => {
2044
- const titleText = this.resolveSearchableTitle(r.title).toLowerCase();
2045
- return (r.name.toLowerCase().includes(q) ||
2046
- titleText.includes(q) ||
2047
- this.resolveSearchableTitle(r.description).toLowerCase().includes(q));
2048
- });
2049
- }
2050
- resolveSearchableTitle(value) {
2051
- if (!value) {
2052
- return '';
2053
- }
2054
- if (typeof value === 'string') {
2055
- return value;
2056
- }
2057
- return this.translationService.resolve(value) ?? '';
2278
+ return axmFilterChatAiTargets((value) => this.translationService.resolve(value), this.rows(), this.searchQuery());
2058
2279
  }
2059
2280
  displayName(row) {
2060
- return this.resolveSearchableTitle(row.title).trim() || row.name?.trim() || row.id;
2281
+ return axmChatAiTargetDisplayName((value) => this.translationService.resolve(value), row);
2061
2282
  }
2062
2283
  targetAvatarUrl(row) {
2063
- const avatarUrl = row.professionImageUrl?.trim();
2064
- return avatarUrl ? avatarUrl : null;
2284
+ return axmChatAiTargetAvatarUrl(row);
2065
2285
  }
2066
2286
  onCancel() {
2067
2287
  const event = new AXComponentCloseEvent();
@@ -2171,7 +2391,7 @@ class AXMChatWithAssistDialogComponent extends AXBasePageComponent {
2171
2391
  <div class="user-item-content">
2172
2392
  <ax-avatar [size]="54">
2173
2393
  @if (targetAvatarUrl(row); as avatarUrl) {
2174
- <ax-image [src]="avatarUrl" [alt]="displayName(row) | translate | async"></ax-image>
2394
+ <ax-image [src]="avatarUrl" [alt]="row.title | translate | async"></ax-image>
2175
2395
  } @else {
2176
2396
  <ax-icon
2177
2397
  ><i
@@ -2188,7 +2408,7 @@ class AXMChatWithAssistDialogComponent extends AXBasePageComponent {
2188
2408
  }
2189
2409
  </ax-avatar>
2190
2410
  <div class="user-item-text">
2191
- <span class="ax-truncated user-name-text">{{ displayName(row) | translate | async }}</span>
2411
+ <span class="ax-truncated user-name-text">{{ row.title | translate | async }}</span>
2192
2412
  @if (row.description) {
2193
2413
  <span class="user-description-text ax-truncated">{{ row.description | translate | async }}</span>
2194
2414
  }
@@ -2277,7 +2497,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
2277
2497
  <div class="user-item-content">
2278
2498
  <ax-avatar [size]="54">
2279
2499
  @if (targetAvatarUrl(row); as avatarUrl) {
2280
- <ax-image [src]="avatarUrl" [alt]="displayName(row) | translate | async"></ax-image>
2500
+ <ax-image [src]="avatarUrl" [alt]="row.title | translate | async"></ax-image>
2281
2501
  } @else {
2282
2502
  <ax-icon
2283
2503
  ><i
@@ -2294,7 +2514,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
2294
2514
  }
2295
2515
  </ax-avatar>
2296
2516
  <div class="user-item-text">
2297
- <span class="ax-truncated user-name-text">{{ displayName(row) | translate | async }}</span>
2517
+ <span class="ax-truncated user-name-text">{{ row.title | translate | async }}</span>
2298
2518
  @if (row.description) {
2299
2519
  <span class="user-description-text ax-truncated">{{ row.description | translate | async }}</span>
2300
2520
  }
@@ -4981,7 +5201,7 @@ async function axmOpenAssistDelegatedAgentDetailDialog(options) {
4981
5201
  options.translationService.translateAsync('@conversation:chat.assist-renderer.delegated-agent.dialog-title-suffix'),
4982
5202
  options.translationService.translateAsync('@conversation:chat.assist-renderer.delegated-agent.transcript-missing'),
4983
5203
  ]);
4984
- const comp = (await import('./acorex-modules-conversation-assist-delegated-agent-detail-popup.component-DnKfkEg1.mjs'))
5204
+ const comp = (await import('./acorex-modules-conversation-assist-delegated-agent-detail-popup.component-BB5Uyydt.mjs'))
4985
5205
  .AXMAssistDelegatedAgentDetailPopupComponent;
4986
5206
  const data = {
4987
5207
  messages: entry?.messages ?? [],
@@ -6028,7 +6248,7 @@ class AXMCommentsPageComponentProvider {
6028
6248
  return [
6029
6249
  {
6030
6250
  key: COMMENTS_PAGE_COMPONENT_KEY,
6031
- loader: () => import('./acorex-modules-conversation-comments-page.component-JPIzhBys.mjs').then((m) => m.AXMCommentsPageComponent),
6251
+ loader: () => import('./acorex-modules-conversation-comments-page.component-QnDogSDy.mjs').then((m) => m.AXMCommentsPageComponent),
6032
6252
  },
6033
6253
  ];
6034
6254
  }
@@ -6194,6 +6414,22 @@ class AXMConversationModule {
6194
6414
  useClass: AXMConversationWidgetsProvider,
6195
6415
  multi: true,
6196
6416
  },
6417
+ {
6418
+ provide: AXP_SEARCH_PROVIDER,
6419
+ useClass: AXMConversationAssistSearchProvider,
6420
+ multi: true,
6421
+ },
6422
+ {
6423
+ provide: AXP_SEARCH_DEFINITION_PROVIDER,
6424
+ useClass: AXMConversationAssistSearchDefinitionProvider,
6425
+ multi: true,
6426
+ },
6427
+ provideCommandSetups([
6428
+ {
6429
+ key: CONVERSATION_START_ASSIST_CHAT_COMMAND,
6430
+ command: () => import('./acorex-modules-conversation-start-assist-chat.command-DRlWzEDp.mjs').then((m) => m.AXMConversationStartAssistChatCommand),
6431
+ },
6432
+ ]),
6197
6433
  ], imports: [AXPWidgetCoreModule,
6198
6434
  AXPWorkflowModule.forChild({
6199
6435
  actions: {
@@ -6305,6 +6541,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
6305
6541
  useClass: AXMConversationWidgetsProvider,
6306
6542
  multi: true,
6307
6543
  },
6544
+ {
6545
+ provide: AXP_SEARCH_PROVIDER,
6546
+ useClass: AXMConversationAssistSearchProvider,
6547
+ multi: true,
6548
+ },
6549
+ {
6550
+ provide: AXP_SEARCH_DEFINITION_PROVIDER,
6551
+ useClass: AXMConversationAssistSearchDefinitionProvider,
6552
+ multi: true,
6553
+ },
6554
+ provideCommandSetups([
6555
+ {
6556
+ key: CONVERSATION_START_ASSIST_CHAT_COMMAND,
6557
+ command: () => import('./acorex-modules-conversation-start-assist-chat.command-DRlWzEDp.mjs').then((m) => m.AXMConversationStartAssistChatCommand),
6558
+ },
6559
+ ]),
6308
6560
  ],
6309
6561
  }]
6310
6562
  }] });
@@ -6313,5 +6565,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
6313
6565
  * Generated bundle index. Do not edit.
6314
6566
  */
6315
6567
 
6316
- export { AXMCommentComponent as A, AXMConversationTabEntityModule as B, AXMConversationTabService as C, AXMConversationTabServiceImpl as D, AXMMessageEntityModule as E, AXMMessageService as F, AXMMessageServiceImpl as G, AXMRoomEntityModule as H, AXMRoomService as I, AXMRoomServiceImpl as J, AXM_ASSIST_TRANSCRIPT_LINE_PAYLOAD_TYPE as K, AXPCommentWidget as L, COMMENTS_PAGE_COMPONENT_KEY as M, axmAssistLastTranscriptLine as N, axmAssistUserVisibleItemsForLine as O, axmBuildAssistTranscriptLinePayload as P, axmIsAssistPeerParticipant as Q, RootConfig as R, axmNormalizeAssistTranscriptForChatUi as S, axmNormalizeAssistTranscriptLineResponses as T, axmParseAssistTranscriptLinePayload as U, axmReadAssistAiTranscript as V, axmReadAssistAiTranscriptRaw as W, commentsPlugin as X, messageFactory as Y, roomFactory as Z, tabFactory as _, axmAssistSegmentDirection as a, axmParseAssistTranscriptTextEnvelope as b, axmAssistWidgetNodeFromUnknown as c, axmSyntheticEmbedMessage as d, AXMNodeMessageRendererComponent as e, AXMAssistBotImageLineComponent as f, AXMChatComponent as g, AXMChatConversationApi as h, AXMChatManagementService as i, AXMChatMessageApi as j, AXMChatRealtimeApi as k, AXMChatRealtimeService as l, AXMChatRealtimeServiceImpl as m, AXMChatService as n, AXMChatServiceImpl as o, AXMChatUserApi as p, AXMCommentManagementService as q, AXMCommentPopupComponent as r, AXMCommentPopupStartAction as s, AXMCommentPopupWorkflow as t, AXMCommentRealtimeService as u, AXMCommentRealtimeServiceImpl as v, AXMCommentService as w, AXMCommentServiceImpl as x, AXMCommentWidgetViewComponent as y, AXMConversationModule as z };
6317
- //# sourceMappingURL=acorex-modules-conversation-acorex-modules-conversation-Dm9D7la2.mjs.map
6568
+ export { roomFactory as $, AXMChatAssistLauncherService as A, AXMConversationModule as B, AXMConversationTabEntityModule as C, AXMConversationTabService as D, AXMConversationTabServiceImpl as E, AXMMessageEntityModule as F, AXMMessageService as G, AXMMessageServiceImpl as H, AXMPermissionsKeys as I, AXMRoomEntityModule as J, AXMRoomService as K, AXMRoomServiceImpl as L, AXM_ASSIST_TRANSCRIPT_LINE_PAYLOAD_TYPE as M, AXPCommentWidget as N, COMMENTS_PAGE_COMPONENT_KEY as O, axmAssistLastTranscriptLine as P, axmAssistUserVisibleItemsForLine as Q, RootConfig as R, axmBuildAssistTranscriptLinePayload as S, axmIsAssistPeerParticipant as T, axmNormalizeAssistTranscriptForChatUi as U, axmNormalizeAssistTranscriptLineResponses as V, axmParseAssistTranscriptLinePayload as W, axmReadAssistAiTranscript as X, axmReadAssistAiTranscriptRaw as Y, commentsPlugin as Z, messageFactory as _, AXMCommentComponent as a, tabFactory as a0, axmAssistSegmentDirection as b, axmParseAssistTranscriptTextEnvelope as c, axmAssistWidgetNodeFromUnknown as d, axmSyntheticEmbedMessage as e, AXMNodeMessageRendererComponent as f, AXMAssistBotImageLineComponent as g, AXMChatComponent as h, AXMChatConversationApi as i, AXMChatManagementService as j, AXMChatMessageApi as k, AXMChatRealtimeApi as l, AXMChatRealtimeService as m, AXMChatRealtimeServiceImpl as n, AXMChatService as o, AXMChatServiceImpl as p, AXMChatUserApi as q, AXMCommentManagementService as r, AXMCommentPopupComponent as s, AXMCommentPopupStartAction as t, AXMCommentPopupWorkflow as u, AXMCommentRealtimeService as v, AXMCommentRealtimeServiceImpl as w, AXMCommentService as x, AXMCommentServiceImpl as y, AXMCommentWidgetViewComponent as z };
6569
+ //# sourceMappingURL=acorex-modules-conversation-acorex-modules-conversation-F7nQo1GU.mjs.map