@acorex-platform/extension-ai-conversation-client 0.0.28 → 0.0.32

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 (10) hide show
  1. package/fesm2022/{acorex-platform-extension-ai-conversation-client-acorex-platform-extension-ai-conversation-client-ZUV9J76R.mjs → acorex-platform-extension-ai-conversation-client-acorex-platform-extension-ai-conversation-client-PyjS3LJH.mjs} +146 -65
  2. package/fesm2022/acorex-platform-extension-ai-conversation-client-acorex-platform-extension-ai-conversation-client-PyjS3LJH.mjs.map +1 -0
  3. package/fesm2022/{acorex-platform-extension-ai-conversation-client-send-assist-chat-message.command-CMKccVFQ.mjs → acorex-platform-extension-ai-conversation-client-send-assist-chat-message.command-DuNwjggd.mjs} +2 -2
  4. package/fesm2022/{acorex-platform-extension-ai-conversation-client-send-assist-chat-message.command-CMKccVFQ.mjs.map → acorex-platform-extension-ai-conversation-client-send-assist-chat-message.command-DuNwjggd.mjs.map} +1 -1
  5. package/fesm2022/{acorex-platform-extension-ai-conversation-client-start-assist-chat.command-BGICtlcW.mjs → acorex-platform-extension-ai-conversation-client-start-assist-chat.command-CdHIrGj8.mjs} +2 -2
  6. package/fesm2022/{acorex-platform-extension-ai-conversation-client-start-assist-chat.command-BGICtlcW.mjs.map → acorex-platform-extension-ai-conversation-client-start-assist-chat.command-CdHIrGj8.mjs.map} +1 -1
  7. package/fesm2022/acorex-platform-extension-ai-conversation-client.mjs +1 -1
  8. package/package.json +1 -1
  9. package/types/acorex-platform-extension-ai-conversation-client.d.ts +0 -3
  10. package/fesm2022/acorex-platform-extension-ai-conversation-client-acorex-platform-extension-ai-conversation-client-ZUV9J76R.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-platform-extension-ai-conversation-client-acorex-platform-extension-ai-conversation-client-ZUV9J76R.mjs","sources":["../../../../libs/extensions/ai/conversation/client/src/lib/services/chat-assist-catalog.service.ts","../../../../libs/extensions/ai/conversation/client/src/lib/services/assist-chat-launcher.service.ts","../../../../libs/extensions/ai/conversation/client/src/lib/assist-search.provider.ts","../../../../libs/extensions/ai/conversation/client/src/lib/assist-search-definition.provider.ts","../../../../libs/extensions/ai/conversation/client/src/lib/empty-state/chat-empty-assist-composer.component.ts","../../../../libs/extensions/ai/conversation/client/src/lib/empty-state/chat-empty-state.provider.ts","../../../../libs/extensions/ai/conversation/client/src/lib/mini-chat/mini-chat-inbox-filter.provider.ts","../../../../libs/extensions/ai/conversation/client/src/lib/ports/assist-default-resolver.provider.ts","../../../../libs/extensions/ai/conversation/client/src/lib/services/conversation-assist-response.service.ts","../../../../libs/extensions/ai/conversation/client/src/lib/side-bar/chat-with-assist-dialog.component.ts","../../../../libs/extensions/ai/conversation/client/src/lib/side-bar/chat-sidebar-assist-action.provider.ts","../../../../libs/extensions/ai/conversation/client/src/lib/ai-conversation-extension.module.ts","../../../../libs/extensions/ai/conversation/client/src/acorex-platform-extension-ai-conversation-client.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { Injectable, inject } from '@angular/core';\nimport type { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport type { AXMChatAiTargetRow } from '@acorex-platform/module-conversation-client';\nimport {\n AXM_AI_MANAGEMENT_ASSIST_ENTITY_NAME,\n AXM_AI_MANAGEMENT_MODULE_NAME,\n} from '@acorex-platform/module-conversation-client';\nimport type {\n AXMAssistConversationSnapshotLite,\n AXPAiEffectiveAssistRowLite,\n} from '@acorex-platform/module-conversation-client';\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * In-memory assist catalog for chat pickers and welcome UI (AI extension).\n * Loads assist rows once via Query and dedupes GetById for starter prompts / metadata.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMChatAssistCatalogService {\n //#region ---- Services & Dependencies -----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly assistData = this.entityService\n .withEntity(AXM_AI_MANAGEMENT_MODULE_NAME, AXM_AI_MANAGEMENT_ASSIST_ENTITY_NAME)\n .data<\n string,\n AXPAiEffectiveAssistRowLite,\n AXPAiEffectiveAssistRowLite,\n AXPAiEffectiveAssistRowLite,\n AXPAiEffectiveAssistRowLite\n >();\n\n //#endregion\n\n //#region ---- State Signals -----\n\n private catalogTargets: AXMChatAiTargetRow[] | null = null;\n private readonly fullRowsById = new Map<string, AXPAiEffectiveAssistRowLite>();\n private loadPromise: Promise<AXMChatAiTargetRow[]> | null = null;\n private readonly byKeyChains = new Map<string, Promise<AXPAiEffectiveAssistRowLite | null>>();\n\n //#endregion\n\n //#region ---- Catalog ----\n\n async loadCatalogTargets(force = false): Promise<AXMChatAiTargetRow[]> {\n // Never treat an empty first paint as a permanent cache — early opens can race entity readiness.\n if (!force && this.catalogTargets != null && this.catalogTargets.length > 0) {\n return this.catalogTargets;\n }\n if (!force && this.loadPromise) {\n return this.loadPromise;\n }\n\n this.loadPromise = this.fetchCatalogTargets();\n try {\n this.catalogTargets = await this.loadPromise;\n return this.catalogTargets;\n } finally {\n this.loadPromise = null;\n }\n }\n\n private async fetchCatalogTargets(): Promise<AXMChatAiTargetRow[]> {\n const queryResult = await this.assistData.query({\n skip: 0,\n take: 500,\n });\n const items = (queryResult?.items ?? []) as AXPAiEffectiveAssistRowLite[];\n const targets: AXMChatAiTargetRow[] = [];\n\n for (const item of items) {\n const id = String(item.id ?? '').trim();\n if (!id) {\n continue;\n }\n this.fullRowsById.set(id, item);\n targets.push(this.toTargetRow(item));\n }\n\n return targets.sort((a, b) => a.name.localeCompare(b.name, undefined, { sensitivity: 'base' }));\n }\n\n private toTargetRow(item: AXPAiEffectiveAssistRowLite): AXMChatAiTargetRow {\n const id = String(item.id ?? '').trim();\n return {\n id,\n name: String(item.name ?? ''),\n title: (item.title ?? item.name ?? id) as AXPMultiLanguageString | string,\n description: item.description as AXPMultiLanguageString | string | undefined,\n professionImageUrl:\n typeof item.professionImageUrl === 'string' ? item.professionImageUrl : undefined,\n };\n }\n\n //#endregion\n\n //#region ---- Assist reads ----\n\n getCachedAssist(assistId: string): AXPAiEffectiveAssistRowLite | null {\n const scoped = assistId?.trim();\n if (!scoped) {\n return null;\n }\n return this.fullRowsById.get(scoped) ?? null;\n }\n\n async getAssist(assistId: string): Promise<AXPAiEffectiveAssistRowLite | null> {\n const scoped = assistId?.trim();\n if (!scoped) {\n return null;\n }\n\n const cached = this.fullRowsById.get(scoped);\n if (cached) {\n return cached;\n }\n\n const inflight = this.byKeyChains.get(scoped);\n if (inflight) {\n return inflight;\n }\n\n const task = this.assistData.byKey(scoped).then((row) => {\n if (row) {\n this.fullRowsById.set(scoped, row);\n }\n return row ?? null;\n });\n this.byKeyChains.set(scoped, task);\n try {\n return await task;\n } finally {\n if (this.byKeyChains.get(scoped) === task) {\n this.byKeyChains.delete(scoped);\n }\n }\n }\n\n primeAssist(row: AXPAiEffectiveAssistRowLite): void {\n const id = row.id?.trim();\n if (!id) {\n return;\n }\n this.fullRowsById.set(id, row);\n }\n\n toSnapshot(row: AXPAiEffectiveAssistRowLite): AXMAssistConversationSnapshotLite {\n return {\n initialMessages: row.initialMessages,\n starterPrompts: row.starterPrompts,\n modelId: row.modelId,\n };\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXConversation, AXConversationService } from '@acorex/components/conversation';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport {\n axmBuildAiChatConversationMetadata,\n axmChatAiPeerParticipantId,\n axmChatAiTargetAvatarUrl,\n axmChatAiTargetDisplayDescription,\n axmChatAiTargetDisplayName,\n axmFilterChatAiTargets,\n AXMConversationEntityStoreService,\n type AXMChatAiTargetRow,\n} from '@acorex-platform/module-conversation-client';\nimport { AXMChatAssistCatalogService } from './chat-assist-catalog.service';\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport type { AXMStartAssistChatOptions, AXMStartAssistChatResult } from './assist-chat-launcher.types';\n\n@Injectable({ providedIn: 'root' })\nexport class AXMChatAssistLauncherService {\n private readonly conversationService = inject(AXConversationService);\n private readonly assistCatalog = inject(AXMChatAssistCatalogService);\n private readonly entityStore = inject(AXMConversationEntityStoreService);\n private readonly translationService = inject(AXTranslationService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly router = inject(Router);\n private readonly toastService = inject(AXToastService);\n\n async loadTargets(force = false): Promise<AXMChatAiTargetRow[]> {\n return this.assistCatalog.loadCatalogTargets(force);\n }\n\n displayName(row: AXMChatAiTargetRow): string {\n return axmChatAiTargetDisplayName(this.#resolveMl.bind(this), row);\n }\n\n displayDescription(row: AXMChatAiTargetRow): string | undefined {\n return axmChatAiTargetDisplayDescription(this.#resolveMl.bind(this), row);\n }\n\n targetAvatarUrl(row: AXMChatAiTargetRow): string | null {\n return axmChatAiTargetAvatarUrl(row);\n }\n\n filterTargets(rows: AXMChatAiTargetRow[], query: string): AXMChatAiTargetRow[] {\n return axmFilterChatAiTargets(this.#resolveMl.bind(this), rows, query);\n }\n\n async startAssistChat(options: AXMStartAssistChatOptions): Promise<AXMStartAssistChatResult | null> {\n const targetId = (options.targetId ?? options.assistId)?.trim();\n if (!targetId) {\n return null;\n }\n\n const row = options.targetRow ?? (await this.loadTargets()).find((r) => r.id === targetId);\n if (!row) {\n const message = await this.translationService.translateAsync('@conversation:chat.assist-dialog.errors.start-chat');\n this.toastService.danger(message);\n return null;\n }\n\n return this.startAssistChatFromRow(row, options.navigate !== false);\n }\n\n async startAssistChatFromRow(\n row: AXMChatAiTargetRow,\n navigate = true,\n ): Promise<AXMStartAssistChatResult | null> {\n try {\n const conversation = await this.#createTargetConversation(row);\n await this.conversationService.selectConversation(conversation.id);\n if (navigate) {\n await this.navigateToConversation(conversation.id);\n }\n\n return { conversation };\n } catch (error: unknown) {\n console.error('Failed to start AI chat:', error);\n const message = await this.translationService.translateAsync('@conversation:chat.assist-dialog.errors.start-chat');\n this.toastService.danger(message);\n return null;\n }\n }\n\n /** Navigate after the picker dialog has emitted close — avoids ObjectUnsubscribedError on popup teardown. */\n async navigateToConversation(conversationId: string): Promise<void> {\n const scoped = conversationId.trim();\n if (!scoped) {\n return;\n }\n await this.router.navigate([this.#applicationRouteSegment(), 'chat', scoped]);\n }\n\n async #createTargetConversation(row: AXMChatAiTargetRow): Promise<AXConversation> {\n await this.assistCatalog.loadCatalogTargets();\n const participantId = axmChatAiPeerParticipantId(row.id);\n const title = this.displayName(row);\n const avatar = this.targetAvatarUrl(row);\n const assistRow = this.assistCatalog.getCachedAssist(row.id);\n const assistSnapshot = assistRow ? this.assistCatalog.toSnapshot(assistRow) : undefined;\n\n const conversation = await this.conversationService.createConversation([participantId], 'bot', {\n title,\n ...(avatar ? { avatar } : {}),\n icon: 'fa-solid fa-robot',\n metadata: axmBuildAiChatConversationMetadata(row, assistSnapshot),\n });\n this.entityStore.cacheConversation(conversation);\n this.entityStore.cacheEmptyMessageList(conversation.id);\n return conversation;\n }\n\n #resolveMl(value: AXPMultiLanguageString): string | undefined {\n return this.translationService.resolve(value);\n }\n\n #applicationRouteSegment(): string {\n return this.sessionService.application?.name ?? 'platform';\n }\n}\n","import { AXPSearchProvider, AXPSearchResult } from '@acorex-platform/framework-client/common';\nimport {\n axmChatAiTargetShortcutDescriptionKey,\n type AXMChatAiTargetRow,\n CONVERSATION_START_ASSIST_CHAT_COMMAND,\n} from '@acorex-platform/module-conversation-client';\nimport { inject, Injectable } from '@angular/core';\nimport { sortBy } from 'lodash-es';\nimport { AXMChatAssistLauncherService } from './services/assist-chat-launcher.service';\n\n/** Search group key used by Conversation AI extension. */\nexport const AXM_CONVERSATION_ASSIST_SEARCH_GROUP = 'conversation-assist';\n\n@Injectable()\nexport class AXMConversationAssistSearchProvider implements AXPSearchProvider {\n private readonly launcher = inject(AXMChatAssistLauncherService);\n\n async search(text: string): Promise<AXPSearchResult[]> {\n let rows: AXMChatAiTargetRow[];\n try {\n rows = await this.launcher.loadTargets();\n } catch (error: unknown) {\n console.error('Failed to load AI chat targets for shortcut search:', error);\n return [];\n }\n\n const filtered = this.launcher.filterTargets(rows, text);\n const sorted = sortBy(filtered, (row) => this.launcher.displayName(row).toLowerCase());\n\n return sorted.map<AXPSearchResult>((row) => ({\n id: row.id,\n group: AXM_CONVERSATION_ASSIST_SEARCH_GROUP,\n title: row.title,\n description: row.description ?? axmChatAiTargetShortcutDescriptionKey(),\n icon: 'fa-solid fa-robot',\n data: { id: row.id, name: row.name },\n command: {\n name: CONVERSATION_START_ASSIST_CHAT_COMMAND,\n options: {\n targetId: row.id,\n },\n },\n }));\n }\n}\n","import { AXPSearchDefinitionProvider, AXPSearchDefinitionProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPSystemActionType } from '@acorex-platform/framework-shared/core';\nimport { Injectable } from '@angular/core';\nimport { AXM_CONVERSATION_ASSIST_SEARCH_GROUP } from './assist-search.provider';\n\n@Injectable()\nexport class AXMConversationAssistSearchDefinitionProvider implements AXPSearchDefinitionProvider {\n async provide(context: AXPSearchDefinitionProviderContext): Promise<void> {\n context.addDefinition(\n AXM_CONVERSATION_ASSIST_SEARCH_GROUP,\n '@conversation:search.assist.group-title',\n AXM_CONVERSATION_ASSIST_SEARCH_GROUP,\n 'fa-solid fa-robot',\n 4,\n {\n format: {\n id: '{{id}}',\n },\n actions: [\n {\n name: 'start-assist-chat',\n type: AXPSystemActionType.View,\n priority: 'primary',\n },\n ],\n },\n );\n }\n}\n","import { AXPLayoutThemeService } from '@acorex-platform/framework-client/themes/shared';\nimport { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport {\n AXMAssistSuggestionChipsComponent,\n AXM_ASSIST_DEFAULT_RESOLVER_PORT,\n axmAssistStarterPromptChipItems,\n axmBuildAiChatConversationMetadata,\n axmChatAiPeerParticipantId,\n type AXMChatAiTargetRow,\n type AXPAiChatFollowUpItemLite,\n} from '@acorex-platform/module-conversation-client';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXConversationService, type AXConversationMessagePayload } from '@acorex/components/conversation';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, computed, effect, inject, input, output, signal, viewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXMChatAssistCatalogService } from '../services/chat-assist-catalog.service';\n\n@Component({\n selector: 'axm-chat-empty-assist-composer',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'axm-chat-empty-assist-composer-host',\n '[class.axm-chat-empty-assist-composer-host--compact]': 'compact()',\n },\n imports: [CommonModule, FormsModule, AXButtonModule, AXDropdownModule, AXTextBoxModule, AXDecoratorModule, AXTranslationModule, AXMAssistSuggestionChipsComponent],\n template: `\n <div class=\"axm-chat-empty-assist-composer\">\n <div class=\"axm-chat-empty-assist-composer__caption\">\n {{ '@conversation:chat.empty-assist.caption' | translate | async }}\n </div>\n\n <div class=\"axm-chat-empty-assist-composer__composer-row\">\n <ax-button color=\"default\" look=\"blank\" class=\"rounded-full\" [disabled]=\"isBusy()\">\n <ax-icon icon=\"fa-regular fa-sparkles\"></ax-icon>\n <span class=\"axm-chat-empty-assist-composer__assist-text\">\n @if (selectedAssistLabel(); as assistLabel) {\n {{ assistLabel | translate | async }}\n } @else {\n {{ '@conversation:chat.empty-assist.assist-default' | translate | async }}\n }\n </span>\n @if (!isBusy()) {\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (row of rows(); track row.id) {\n <ax-button-item [text]=\"(row.title | translate | async)!\" [selected]=\"row.id === selectedAssistId()\" (onClick)=\"onAssistIdChange(row.id)\"></ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n }\n </ax-button>\n\n @let assistTitle = (selectedAssistLabel() | translate | async) ?? '';\n\n <textarea\n #draftInput\n rows=\"1\"\n class=\"axm-chat-empty-assist-composer__textarea border-none outline-none w-full flex-1\"\n [ngModel]=\"draftText()\"\n (ngModelChange)=\"draftText.set($event ?? '')\"\n (input)=\"resizeDraftInput()\"\n (keydown)=\"onDraftKeydown($event)\"\n [disabled]=\"isBusy()\"\n [placeholder]=\"('@conversation:chat.empty-assist.placeholder' | translate: { params: { assist: assistTitle } } | async) ?? ''\"\n ></textarea>\n <ax-button color=\"default\" class=\"rounded-full\" [disabled]=\"!canSend()\" [text]=\"sending() ? '…' : ''\" [attr.aria-label]=\"('@conversation:comments.actions.send.title' | translate | async) ?? ''\" (onClick)=\"send()\">\n @if (!sending()) {\n <ax-icon icon=\"fa-light fa-arrow-up\"></ax-icon>\n }\n </ax-button>\n </div>\n <axm-assist-suggestion-chips [items]=\"starterPromptItems()\" [compact]=\"compact()\" [sendInPlace]=\"sendStarterPromptsInPlace()\" [disabled]=\"isBusy()\" (conversationCreated)=\"conversationCreated.emit($event)\" />\n </div>\n `,\n styles: `\n :host {\n display: block;\n width: 100%;\n }\n\n .axm-chat-empty-assist-composer {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n width: min(100%, 64rem);\n margin-inline: auto;\n }\n\n .axm-chat-empty-assist-composer__caption {\n margin-bottom: 3rem;\n text-align: center;\n font-size: clamp(1.9rem, 3.4vw, 2.7rem);\n line-height: 1.15;\n font-weight: 700;\n letter-spacing: -0.02em;\n }\n\n .axm-chat-empty-assist-composer__composer-row {\n display: flex;\n gap: 0.375rem;\n align-items: center;\n padding: 0.5rem;\n border-radius: 2em;\n border: 1px solid rgb(var(--ax-sys-color-border-lighter-surface));\n }\n\n .axm-chat-empty-assist-composer__assist-text {\n display: inline-block;\n max-width: 12rem;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .axm-chat-empty-assist-composer__textarea {\n resize: none;\n overflow: hidden;\n background: transparent;\n min-height: 2.25rem;\n max-height: 14rem;\n line-height: 1.5;\n padding-block: 0.25rem;\n font-size: inherit;\n }\n\n :host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer {\n width: 100%;\n max-width: none;\n }\n\n :host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__caption {\n margin-bottom: 0.75rem;\n font-size: 1.0625rem;\n line-height: 1.35;\n font-weight: 600;\n letter-spacing: -0.01em;\n }\n\n :host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__composer-row {\n gap: 0.25rem;\n padding: 0.375rem 0.5rem;\n border-radius: 1.5rem;\n }\n\n :host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__assist-text {\n max-width: 5.5rem;\n font-size: 0.8125rem;\n }\n\n :host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__textarea {\n min-height: 1.625rem;\n max-height: 8rem;\n line-height: 1.4;\n font-size: 0.875rem;\n padding-block: 0.125rem;\n }\n `,\n})\nexport class AXMChatEmptyAssistComposerComponent {\n private readonly conversationService = inject(AXConversationService);\n private readonly toastService = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n private readonly assistCatalog = inject(AXMChatAssistCatalogService);\n private readonly layoutTheme = inject(AXPLayoutThemeService);\n private readonly defaultAssistResolver = inject(AXM_ASSIST_DEFAULT_RESOLVER_PORT, { optional: true });\n\n readonly conversationCreated = output<string>();\n readonly initialAssistId = input<string | undefined>(undefined);\n readonly entityId = input<string | undefined>(undefined);\n readonly entityType = input<string | undefined>(undefined);\n readonly sendStarterPromptsInPlace = input(false);\n readonly compact = input(false);\n readonly rows = signal<AXMChatAiTargetRow[]>([]);\n readonly loading = signal(true);\n readonly selectedAssistId = signal<string | undefined>(undefined);\n readonly starterPromptItems = signal<AXPAiChatFollowUpItemLite[]>([]);\n readonly draftText = signal('');\n readonly sending = signal(false);\n readonly isBusy = computed(() => this.sending() || this.loading());\n private readonly draftInput = viewChild<ElementRef<HTMLTextAreaElement>>('draftInput');\n readonly selectedAssistLabel = computed((): AXPMultiLanguageString | string | undefined => {\n const selected = this.rows().find((row) => row.id === this.selectedAssistId());\n return selected?.title;\n });\n private readonly maxDraftHeightPx = computed(() => (this.compact() ? 128 : 224));\n private assistsLoadPromise: Promise<void> | null = null;\n private starterPromptsLoadGeneration = 0;\n\n constructor() {\n void this.ensureAssistsLoaded();\n effect(() => {\n void this.loadStarterPromptsForAssist(this.selectedAssistId());\n });\n effect(() => {\n this.draftText();\n queueMicrotask(() => this.resizeDraftInput());\n });\n }\n\n onAssistIdChange(value: string | undefined | null): void {\n this.selectedAssistId.set(value?.trim() || undefined);\n }\n canSend(): boolean {\n return Boolean(this.selectedAssistId() && this.draftText().trim().length > 0 && !this.sending() && !this.loading());\n }\n resizeDraftInput(): void {\n const textarea = this.draftInput()?.nativeElement;\n if (!textarea) return;\n textarea.style.height = '0px';\n textarea.style.height = `${Math.min(textarea.scrollHeight, this.maxDraftHeightPx())}px`;\n }\n onDraftKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Enter' || event.shiftKey || event.isComposing) return;\n event.preventDefault();\n if (this.canSend()) void this.send();\n }\n\n async send(): Promise<void> {\n const assistId = this.selectedAssistId();\n const text = this.draftText().trim();\n if (!assistId || !text || this.sending()) return;\n const row = this.rows().find((r) => r.id === assistId);\n if (!row) return;\n this.sending.set(true);\n this.layoutTheme.setOverlayLoading(true);\n try {\n const participantId = axmChatAiPeerParticipantId(row.id);\n const avatar = row.professionImageUrl?.trim() || undefined;\n const entityId = this.entityId()?.trim();\n const entityType = this.entityType()?.trim();\n const assistRow = this.assistCatalog.getCachedAssist(row.id) ?? (await this.assistCatalog.getAssist(row.id));\n const assistSnapshot = assistRow ? this.assistCatalog.toSnapshot(assistRow) : undefined;\n const conversation = await this.conversationService.createConversation([participantId], 'bot', {\n title: this.translationService.resolve(row.title as AXPMultiLanguageString) ?? row.name,\n ...(avatar ? { avatar } : {}),\n icon: 'fa-solid fa-robot',\n metadata: {\n ...axmBuildAiChatConversationMetadata(row, assistSnapshot),\n ...(entityId && entityType ? { entityId, entityType } : {}),\n },\n });\n await this.conversationService.selectConversation(conversation.id);\n const payload: AXConversationMessagePayload = { type: 'text', text };\n await this.conversationService.sendMessage({ conversationId: conversation.id, type: 'text', payload });\n this.draftText.set('');\n this.conversationCreated.emit(conversation.id);\n } catch {\n const message = await this.translationService.translateAsync('@conversation:chat.empty-assist.errors.send');\n this.toastService.danger(message);\n } finally {\n this.sending.set(false);\n this.layoutTheme.setOverlayLoading(false);\n }\n }\n\n private async ensureAssistsLoaded(): Promise<void> {\n if (!this.assistsLoadPromise) this.assistsLoadPromise = this.loadAssistsFromApi();\n await this.assistsLoadPromise;\n }\n private async loadAssistsFromApi(): Promise<void> {\n this.loading.set(true);\n try {\n let rows = await this.assistCatalog.loadCatalogTargets();\n if (!rows.length) {\n rows = await this.assistCatalog.loadCatalogTargets(true);\n }\n this.rows.set(rows);\n this.selectedAssistId.set(await this.resolveInitialAssistId(rows));\n } catch (error: unknown) {\n console.error('Failed to load AI chat targets (empty composer):', error);\n const message = await this.translationService.translateAsync('@conversation:chat.empty-assist.errors.load-assists');\n this.toastService.danger(message);\n this.rows.set([]);\n this.selectedAssistId.set(undefined);\n } finally {\n this.loading.set(false);\n }\n }\n private async resolveInitialAssistId(rows: AXMChatAiTargetRow[]): Promise<string | undefined> {\n if (!rows.length) return undefined;\n const requestedId = this.initialAssistId()?.trim();\n if (requestedId && rows.some((row) => row.id === requestedId)) return requestedId;\n const defaultAssistId = await this.resolveDefaultAssistId();\n if (defaultAssistId && rows.some((row) => row.id === defaultAssistId)) return defaultAssistId;\n return rows[0]?.id;\n }\n private async resolveDefaultAssistId(): Promise<string | undefined> {\n if (!this.defaultAssistResolver) return undefined;\n try {\n return await this.defaultAssistResolver.getDefaultAssistId();\n } catch {\n return undefined;\n }\n }\n private async loadStarterPromptsForAssist(assistId: string | undefined): Promise<void> {\n const generation = ++this.starterPromptsLoadGeneration;\n const id = assistId?.trim();\n if (!id) {\n this.starterPromptItems.set([]);\n return;\n }\n try {\n const assist = await this.assistCatalog.getAssist(id);\n if (!assist || generation !== this.starterPromptsLoadGeneration) {\n if (generation === this.starterPromptsLoadGeneration && !assist) {\n this.starterPromptItems.set([]);\n }\n return;\n }\n const entityId = this.entityId()?.trim();\n const entityType = this.entityType()?.trim();\n const isEntityChat = Boolean(entityId && entityType);\n const sendInPlace = this.sendStarterPromptsInPlace();\n this.starterPromptItems.set(\n axmAssistStarterPromptChipItems(assist, {\n assistId: id,\n ...(isEntityChat ? { entityId, entityType } : {}),\n ...(sendInPlace || isEntityChat ? { navigate: false } : {}),\n }),\n );\n } catch {\n if (generation === this.starterPromptsLoadGeneration) this.starterPromptItems.set([]);\n }\n }\n}\n","import { AXM_CHAT_EMPTY_STATE_COMPONENT } from '@acorex-platform/module-conversation-client';\nimport { Provider } from '@angular/core';\nimport { AXMChatEmptyAssistComposerComponent } from './chat-empty-assist-composer.component';\n\nexport const AXE_CHAT_EMPTY_STATE_PROVIDERS: Provider[] = [\n {\n provide: AXM_CHAT_EMPTY_STATE_COMPONENT,\n useValue: AXMChatEmptyAssistComposerComponent,\n },\n];\n","import type { AXConversation } from '@acorex/components/conversation';\nimport { AXM_MINI_CHAT_INBOX_CONVERSATION_FILTER, axmConversationHasAiChat } from '@acorex-platform/module-conversation-client';\nimport { Provider } from '@angular/core';\n\nexport const AXE_MINI_CHAT_INBOX_FILTER_PROVIDERS: Provider[] = [\n {\n provide: AXM_MINI_CHAT_INBOX_CONVERSATION_FILTER,\n useValue: (conversation: AXConversation) => axmConversationHasAiChat(conversation.metadata),\n },\n];\n","import { AXPAiManagerService } from '@acorex-platform/module-ai-management-client';\nimport {\n AXM_ASSIST_DEFAULT_RESOLVER_PORT,\n type AXMAssistDefaultResolverPort,\n} from '@acorex-platform/module-conversation-client';\nimport { Provider, inject } from '@angular/core';\n\nclass AXEAssistDefaultResolver implements AXMAssistDefaultResolverPort {\n private readonly aiManager = inject(AXPAiManagerService);\n\n async getDefaultAssistId(): Promise<string | undefined> {\n const assist = await this.aiManager.getEffectiveAssist();\n return assist.id?.trim() || undefined;\n }\n}\n\nexport const AXE_ASSIST_DEFAULT_RESOLVER_PROVIDERS: Provider[] = [\n AXEAssistDefaultResolver,\n {\n provide: AXM_ASSIST_DEFAULT_RESOLVER_PORT,\n useExisting: AXEAssistDefaultResolver,\n },\n];\n","//#region ---- Imports ----\n\nimport { AXPCommandService, AXPRuntimeTransportService } from '@acorex-platform/framework-client/runtime';\nimport { runtimeCommandPayloadData } from '@acorex-platform/framework-shared/core';\nimport { AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY, AXMAiManagementTransportKeys, axpAiChatTextMessage } from '@acorex-platform/module-ai-management-client/contracts';\nimport type { AXMConversationAssistResponsePort } from '@acorex-platform/module-conversation-client';\nimport {\n AXMConversationEntityStoreService,\n AXMConversationFocusService,\n CONVERSATION_SYNC_READ_STATE_COMMAND,\n axmAssistHasFinalizeMetadata,\n axmAssistPersistedMessageLooksComplete,\n axmConversationHasAiChat,\n axmIsAssistRetryableStatus,\n axmIsAssistTerminalStatus,\n axmMessageEntityToMessage,\n axmReadAssistResponseStatus,\n axmReadReplyToUserMessageId,\n axmRoomEntityToConversation,\n axmRoomWithAssistPeerDisplayName,\n axmShouldPreferPersistedAssistOverLiveCache,\n axmSyncAssistPeerDisplayName,\n} from '@acorex-platform/module-conversation-client';\nimport type { AXMConversationRoom } from '@acorex-platform/module-conversation-client/contracts';\nimport type { ConversationAssistFrontendToolCall, ConversationAssistWireEvent } from '@acorex-platform/module-conversation-client/contracts';\nimport {\n AXM_ASSIST_CONVERSATION_TITLE_SYSTEM_PROMPT,\n axmCompareMessagesChronologically,\n axmEnsureAssistMessageSortsAfterReplyTarget,\n axmExtractAssistIdFromMetadata,\n axmSanitizeAiGeneratedConversationTitle,\n extractMessageTextFromPayload,\n} from '@acorex-platform/module-conversation-client/contracts';\nimport type { AXConversation, AXConversationMessage, AXConversationSendMessageCommand } from '@acorex/components/conversation';\nimport { AXConversationService } from '@acorex/components/conversation';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, Injector, inject } from '@angular/core';\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction coerceTimestampMs(value: Date | string | number | undefined): number {\n if (value instanceof Date) {\n return value.getTime();\n }\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n const parsed = Date.parse(value);\n return Number.isNaN(parsed) ? 0 : parsed;\n }\n return 0;\n}\n\n//#endregion\n\n//#region ---- Conversation assist response (SSE subscriber) ----\n\n/**\n * Subscribes to server-side assist SSE and forwards message patches to the in-memory realtime bus.\n * AI generation and entity persistence run on the server ({@link AiConversationAssistResponseService}).\n */\n@Injectable()\nexport class AXEConversationAssistResponseService implements AXMConversationAssistResponsePort {\n private readonly transportService = inject(AXPRuntimeTransportService);\n private readonly toastService = inject(AXToastService);\n private readonly translation = inject(AXTranslationService);\n private readonly store = inject(AXMConversationEntityStoreService);\n private readonly focus = inject(AXMConversationFocusService);\n private readonly commandService = inject(AXPCommandService);\n private readonly injector = inject(Injector);\n\n /** Lazy: `AXConversationService` constructs the message API, which injects this port. */\n private get conversationService(): AXConversationService {\n return this.injector.get(AXConversationService);\n }\n\n private readonly messageCache = new Map<string, AXConversationMessage>();\n private readonly conversationCache = new Map<string, AXConversation>();\n private readonly streamTasks = new Map<string, Promise<void>>();\n private readonly streamReconnectTimers = new Map<string, ReturnType<typeof setTimeout>>();\n private readonly lastAssistSyncAt = new Map<string, number>();\n private currentUserId = '';\n private composerGenerationConversationId: string | null = null;\n private cancelAssistRequest: Promise<void> | null = null;\n\n private static readonly ASSIST_SYNC_MIN_INTERVAL_MS = 2000;\n\n async handleAfterUserMessage(conversationId: string, _userMessageId: string, _command: AXConversationSendMessageCommand, currentUserId: string): Promise<void> {\n this.currentUserId = currentUserId;\n this.ensureAssistStreamSubscription(conversationId);\n const scoped = conversationId.trim();\n if (!this.conversationCache.has(scoped)) {\n const storeCached = this.store.getCachedConversation(scoped);\n if (storeCached) {\n this.conversationCache.set(scoped, storeCached);\n }\n }\n if (this.focus.isFocused(scoped)) {\n this.markComposerGenerating(scoped, true);\n }\n if (!this.streamTasks.has(scoped)) {\n void this.requestAssistSync(conversationId, { force: true });\n }\n }\n\n async retryAssistResponse(conversationId: string, messageId: string): Promise<AXConversationMessage> {\n await this.warmConversationCache(conversationId);\n await this.reconcileStaleAssistPlaceholders(conversationId);\n\n const cached = this.messageCache.get(messageId) ?? null;\n const persisted = await this.store.getMessage(messageId);\n const message = persisted ?? cached;\n if (!message) {\n throw new Error('Message not found');\n }\n if (!axmIsAssistRetryableStatus(axmReadAssistResponseStatus(message.metadata))) {\n throw new Error('Assist response is not retryable');\n }\n\n const replyToUserMessageId = axmReadReplyToUserMessageId(message.metadata);\n if (!persisted && !replyToUserMessageId) {\n this.messageCache.delete(messageId);\n throw new Error('Message not found');\n }\n if (!persisted) {\n this.messageCache.delete(messageId);\n }\n\n this.ensureAssistStreamSubscription(conversationId);\n if (this.focus.isFocused(conversationId)) {\n this.markComposerGenerating(conversationId, true);\n }\n\n try {\n const entity = await this.transportService.execute<{ conversationId: string; messageId: string; replyToUserMessageId?: string }, unknown>(AXMAiManagementTransportKeys.ConversationAssist.RetryAssist, {\n conversationId,\n messageId,\n ...(replyToUserMessageId ? { replyToUserMessageId } : {}),\n });\n const mapped = axmMessageEntityToMessage(entity as Parameters<typeof axmMessageEntityToMessage>[0]);\n this.applyLiveMessage(mapped, { isNew: false });\n return mapped;\n } catch (error) {\n if (this.focus.isFocused(conversationId)) {\n this.markComposerGenerating(conversationId, false);\n }\n throw error;\n }\n }\n\n async reconcileStaleAssistPlaceholders(conversationId?: string): Promise<void> {\n const scoped = conversationId?.trim();\n if (scoped) {\n const hasStreaming = await this.hasStreamingAssistPlaceholders(scoped);\n if (!hasStreaming) {\n return;\n }\n if (!this.conversationCache.has(scoped)) {\n await this.warmConversationCache(scoped);\n }\n // Show any drafts buffered while this chat was unfocused before sync may rewrite status.\n if (this.focus.isFocused(scoped)) {\n this.flushLiveCacheToBus(scoped);\n }\n this.ensureAssistStreamSubscription(scoped);\n await this.requestAssistSync(scoped, { force: true });\n } else {\n const streaming = await this.store.loadStreamingAssistPlaceholderMessages();\n for (const message of streaming) {\n this.messageCache.set(message.id, message);\n }\n const conversationIds = new Set(streaming.map((message) => message.conversationId).filter(Boolean));\n for (const id of conversationIds) {\n await this.syncAssistMessagesFromStore(id);\n await this.requestAssistSync(id);\n }\n }\n for (const message of this.messageCache.values()) {\n if (scoped && message.conversationId !== scoped) {\n continue;\n }\n const status = axmReadAssistResponseStatus(message.metadata);\n if (status === 'incomplete' && axmAssistPersistedMessageLooksComplete(message)) {\n await this.repairAssistResponseAsComplete(message);\n continue;\n }\n if (status !== 'streaming') {\n continue;\n }\n if (axmAssistPersistedMessageLooksComplete(message)) {\n await this.repairAssistResponseAsComplete(message);\n continue;\n }\n this.ensureAssistStreamSubscription(message.conversationId);\n }\n\n if (scoped && this.focus.isFocused(scoped)) {\n this.flushLiveCacheToBus(scoped);\n }\n }\n\n getLiveMessage(messageId: string): AXConversationMessage | null {\n const cached = this.messageCache.get(messageId);\n return cached ? this.withStreamDraftForDisplay(cached) : null;\n }\n\n async hasStreamingAssistPlaceholders(conversationId: string): Promise<boolean> {\n const scoped = conversationId?.trim();\n if (!scoped) {\n return false;\n }\n for (const message of this.messageCache.values()) {\n if (message.conversationId === scoped && axmReadAssistResponseStatus(message.metadata) === 'streaming') {\n return true;\n }\n }\n const cachedList = this.store.getCachedMessageList(scoped);\n if (cachedList?.some((message) => axmReadAssistResponseStatus(message.metadata) === 'streaming')) {\n return true;\n }\n const streaming = await this.store.loadStreamingAssistPlaceholderMessages(scoped);\n return streaming.length > 0;\n }\n\n mergeLiveConversationMessages(conversationId: string, persisted: AXConversationMessage[]): AXConversationMessage[] {\n const byId = new Map(persisted.map((message) => [message.id, message]));\n for (const message of this.messageCache.values()) {\n if (message.conversationId === conversationId && !message.deleted) {\n const existing = byId.get(message.id);\n if (existing && axmShouldPreferPersistedAssistOverLiveCache(existing, message)) {\n continue;\n }\n byId.set(message.id, this.withStreamDraftForDisplay(message));\n }\n }\n return [...byId.values()].sort((a, b) => axmCompareMessagesChronologically(a, b));\n }\n\n private ensureAssistStreamSubscription(conversationId: string): void {\n const key = conversationId.trim();\n if (!key || this.streamTasks.has(key)) {\n return;\n }\n\n const task = this.runAssistStream(key).finally(() => {\n this.streamTasks.delete(key);\n // Reattach in the background while placeholders are still streaming (e.g. after leaving the chat).\n this.scheduleAssistStreamReconnect(key, { allowUnfocused: true });\n });\n this.streamTasks.set(key, task);\n }\n\n private async runAssistStream(conversationId: string): Promise<void> {\n try {\n await this.transportService.execute(AXMAiManagementTransportKeys.ConversationAssist.Subscribe, {\n conversationId,\n onEvent: async (event: ConversationAssistWireEvent) => {\n await this.handleAssistWireEvent(event);\n },\n });\n } catch (error: unknown) {\n if (this.isBenignAssistStreamClose(conversationId, error)) {\n return;\n }\n const message = error instanceof Error ? error.message : String(error);\n await this.handleAssistStreamTransportFailure(conversationId, message);\n } finally {\n await this.syncAssistMessagesFromStore(conversationId);\n }\n }\n\n private async requestAssistSync(conversationId: string, options?: { force?: boolean }): Promise<void> {\n const key = conversationId.trim();\n if (!key) {\n return;\n }\n const now = Date.now();\n const last = this.lastAssistSyncAt.get(key) ?? 0;\n if (!options?.force && now - last < AXEConversationAssistResponseService.ASSIST_SYNC_MIN_INTERVAL_MS) {\n return;\n }\n this.lastAssistSyncAt.set(key, now);\n\n try {\n const body = await this.transportService.execute<{ conversationId: string }, { messages?: unknown[] }>(AXMAiManagementTransportKeys.ConversationAssist.AssistSync, { conversationId });\n const messages = Array.isArray(body.messages) ? body.messages : [];\n for (const raw of messages) {\n try {\n const mapped = axmMessageEntityToMessage(raw as Parameters<typeof axmMessageEntityToMessage>[0]);\n this.applyLiveMessage(mapped, { isNew: !this.messageCache.has(mapped.id) });\n } catch {\n // ignore malformed rows\n }\n }\n } catch {\n // Stream catch-up is best-effort; store sync still runs.\n }\n }\n\n private async handleAssistWireEvent(event: ConversationAssistWireEvent): Promise<void> {\n switch (event.type) {\n case 'assist_started': {\n void this.markUserMessageSeenByAssist(event.conversationId, event.userMessageId);\n const mapped = axmMessageEntityToMessage(event.message);\n this.applyLiveMessage(mapped, { isNew: !this.messageCache.has(mapped.id) });\n this.syncComposerGeneratingForConversation(event.conversationId, true);\n break;\n }\n case 'message_patch': {\n const mapped = axmMessageEntityToMessage(event.message);\n const isNew = !this.messageCache.has(mapped.id);\n this.applyLiveMessage(mapped, { isNew });\n if (axmReadAssistResponseStatus(mapped.metadata) === 'streaming') {\n this.syncComposerGeneratingForConversation(mapped.conversationId, true);\n } else if (axmIsAssistTerminalStatus(axmReadAssistResponseStatus(mapped.metadata))) {\n this.syncComposerGeneratingForConversation(mapped.conversationId, false);\n }\n break;\n }\n case 'conversation_patch': {\n const syncedRoom = axmRoomWithAssistPeerDisplayName(event.room);\n const conversation = axmSyncAssistPeerDisplayName(axmRoomEntityToConversation(syncedRoom, this.currentUserId));\n this.conversationCache.set(conversation.id, conversation);\n this.store.publishConversationUpdate(conversation);\n break;\n }\n case 'assist_completed': {\n const mapped = axmMessageEntityToMessage(event.message);\n this.applyLiveMessage(mapped, { isNew: false });\n void this.maybeMarkFocusedIncomingRead(mapped);\n if (event.room) {\n this.applyAssistConversationRoomPatch(event.room);\n }\n void this.maybeApplyAssistAutoTitleAfterComplete(mapped);\n this.syncComposerGeneratingForConversation(mapped.conversationId, false);\n break;\n }\n case 'assist_failed': {\n const mapped = axmMessageEntityToMessage(event.message);\n this.applyLiveMessage(mapped, { isNew: false });\n if (this.focus.isFocused(mapped.conversationId)) {\n void this.showAssistToast('@conversation:chat.assist.errors.title', event.error);\n }\n this.syncComposerGeneratingForConversation(mapped.conversationId, false);\n break;\n }\n case 'frontend_tool_call': {\n await this.submitFrontendToolResult(event.runId, event.call);\n break;\n }\n default:\n break;\n }\n }\n\n private async submitFrontendToolResult(runId: string, call: ConversationAssistFrontendToolCall): Promise<void> {\n try {\n await this.transportService.execute(AXMAiManagementTransportKeys.Engine.SubmitToolResult, { runId, call });\n } catch (error: unknown) {\n const text = error instanceof Error ? error.message : String(error);\n void this.showAssistToast('@conversation:chat.assist.errors.tool-title', text);\n }\n }\n\n private async showAssistToast(titleKey: string, content: string): Promise<void> {\n const title = await this.translation.translateAsync(titleKey);\n this.toastService.show({\n color: titleKey.includes('stream') ? 'warning' : 'danger',\n title,\n content,\n });\n }\n\n /** Server generates the title via AI; client applies `conversation_patch` / `assist_completed.room`. */\n private async applyAssistAiTitleFromUserText(conversationId: string, userText: string): Promise<void> {\n const scopedId = conversationId.trim();\n const scopedText = userText.trim();\n if (!scopedId || !scopedText) {\n return;\n }\n\n const conversation = this.conversationCache.get(scopedId) ?? (await this.store.getConversation(scopedId));\n if (!conversation || !axmConversationHasAiChat(conversation.metadata as Record<string, unknown> | undefined)) {\n return;\n }\n\n const metadata = (conversation.metadata ?? {}) as Record<string, unknown>;\n if (metadata['isTitleCustomized'] === true || metadata['isTitleAutoGenerated'] === true) {\n return;\n }\n\n const assistId = axmExtractAssistIdFromMetadata(metadata);\n const modelEntityId = typeof metadata['modelEntityId'] === 'string' && metadata['modelEntityId'].trim() ? metadata['modelEntityId'].trim() : undefined;\n\n const result = await this.commandService.execute(AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY, {\n assistId,\n modelEntityId,\n messages: [axpAiChatTextMessage('system', AXM_ASSIST_CONVERSATION_TITLE_SYSTEM_PROMPT), axpAiChatTextMessage('user', scopedText)],\n maxTokens: 48,\n temperature: 0.3,\n });\n\n const data = runtimeCommandPayloadData(result) as { text?: string } | undefined;\n const normalizedTitle = axmSanitizeAiGeneratedConversationTitle(data?.text ?? '');\n if (!normalizedTitle || normalizedTitle === conversation.title?.trim()) {\n return;\n }\n\n const updated = axmSyncAssistPeerDisplayName({\n ...conversation,\n title: normalizedTitle,\n metadata: {\n ...metadata,\n isTitleCustomized: false,\n isTitleAutoGenerated: true,\n },\n });\n this.conversationCache.set(updated.id, updated);\n this.store.publishConversationUpdate(updated);\n }\n\n /** After assist completes — memory update first; entity persist is async and must not block streaming UI. */\n private applyAssistConversationRoomPatch(room: AXMConversationRoom): void {\n const syncedRoom = axmRoomWithAssistPeerDisplayName(room);\n const conversation = axmSyncAssistPeerDisplayName(axmRoomEntityToConversation(syncedRoom, this.currentUserId));\n this.conversationCache.set(conversation.id, conversation);\n this.store.publishConversationUpdate(conversation);\n void this.store.persistAssistTitlePatch(syncedRoom);\n }\n\n /** Client fallback when server room patch is missing or peer display name is still the assist catalog label. */\n private async maybeApplyAssistAutoTitleAfterComplete(assistMessage: AXConversationMessage): Promise<void> {\n const conversationId = assistMessage.conversationId?.trim();\n if (!conversationId) {\n return;\n }\n\n const conversation = this.conversationCache.get(conversationId) ?? (await this.store.getConversation(conversationId));\n if (!conversation || !axmConversationHasAiChat(conversation.metadata as Record<string, unknown> | undefined)) {\n return;\n }\n\n const metadata = (conversation.metadata ?? {}) as Record<string, unknown>;\n if (metadata['isTitleCustomized'] === true || metadata['isTitleAutoGenerated'] === true) {\n const peerSynced = axmSyncAssistPeerDisplayName(conversation);\n if (peerSynced !== conversation) {\n this.conversationCache.set(peerSynced.id, peerSynced);\n this.store.publishConversationUpdate(peerSynced);\n }\n return;\n }\n\n let userText = '';\n const replyToId = axmReadReplyToUserMessageId(assistMessage.metadata);\n if (replyToId) {\n const userMessage = this.messageCache.get(replyToId) ?? (await this.store.getMessage(replyToId));\n if (userMessage?.type === 'text') {\n userText = extractMessageTextFromPayload(userMessage.payload).trim();\n }\n }\n if (!userText) {\n const cachedMessages = this.store.getCachedMessageList(conversationId);\n const firstUserText = cachedMessages?.find((message) => !message.deleted && message.senderId === this.currentUserId && message.type === 'text' && extractMessageTextFromPayload(message.payload).trim().length > 0);\n userText = firstUserText ? extractMessageTextFromPayload(firstUserText.payload).trim() : '';\n }\n if (!userText) {\n const loadedMessages = await this.store.loadConversationMessages(conversationId);\n const firstUserText = loadedMessages.find((message) => !message.deleted && message.senderId === this.currentUserId && message.type === 'text' && extractMessageTextFromPayload(message.payload).trim().length > 0);\n userText = firstUserText ? extractMessageTextFromPayload(firstUserText.payload).trim() : '';\n }\n\n if (!userText) {\n return;\n }\n\n void this.applyAssistAiTitleFromUserText(conversationId, userText);\n }\n\n private async markUserMessageSeenByAssist(conversationId: string, userMessageId: string): Promise<void> {\n const scopedId = userMessageId?.trim();\n if (!scopedId) {\n return;\n }\n\n const message = this.messageCache.get(scopedId) ?? (await this.store.getMessage(scopedId));\n if (!message || message.conversationId !== conversationId) {\n return;\n }\n if (message.senderId !== this.currentUserId || message.status === 'read') {\n return;\n }\n\n await this.store.updateMessage({ ...message, status: 'read' });\n }\n\n private async maybeMarkFocusedIncomingRead(message: AXConversationMessage): Promise<void> {\n const conversationId = message.conversationId?.trim();\n if (!conversationId || !this.focus.isFocused(conversationId)) {\n return;\n }\n if (message.senderId === this.currentUserId || message.status === 'read') {\n return;\n }\n\n await this.commandService.execute(CONVERSATION_SYNC_READ_STATE_COMMAND, {\n conversationId,\n messageIds: [message.id],\n currentUserId: this.currentUserId,\n });\n }\n\n private applyLiveMessage(message: AXConversationMessage, options: { isNew: boolean }): void {\n const normalized = this.coerceLaggyStreamingTerminal(message);\n if (this.shouldIgnoreStaleStreamingDowngrade(normalized)) {\n return;\n }\n if (this.shouldIgnoreStaleIncompleteWhileLiveStreaming(normalized)) {\n return;\n }\n if (axmReadAssistResponseStatus(normalized.metadata) === 'streaming' && axmAssistPersistedMessageLooksComplete(normalized)) {\n void this.repairAssistResponseAsComplete(normalized);\n return;\n }\n\n // Keep canonical streaming shape in cache (draft stays in metadata); mirror draft only for UI bus.\n const canonical = this.ensureAssistChronology(normalized);\n this.messageCache.set(canonical.id, canonical);\n if (!this.focus.isFocused(canonical.conversationId)) {\n return;\n }\n const forDisplay = this.withStreamDraftForDisplay(canonical);\n if (options.isNew) {\n this.store.publishNewMessage(forDisplay);\n return;\n }\n this.store.publishMessageUpdate(forDisplay);\n }\n\n /** Keeps assist bubbles below the linked user turn when client/server clocks disagree. */\n private ensureAssistChronology(message: AXConversationMessage): AXConversationMessage {\n const replyToId = axmReadReplyToUserMessageId(message.metadata);\n if (!replyToId) {\n return message;\n }\n const replyTarget = this.messageCache.get(replyToId);\n if (!replyTarget) {\n return message;\n }\n return axmEnsureAssistMessageSortsAfterReplyTarget(message, replyTarget.timestamp);\n }\n\n /** Status can lag behind finalize metadata or transcript payload on late patches. */\n private coerceLaggyStreamingTerminal(message: AXConversationMessage): AXConversationMessage {\n const status = axmReadAssistResponseStatus(message.metadata);\n if (status !== 'streaming') {\n return message;\n }\n\n const meta = message.metadata as Record<string, unknown> | undefined;\n const transcripts = meta?.['transcripts'];\n const hasTranscripts = Array.isArray(transcripts) && transcripts.length > 0;\n if (!axmAssistHasFinalizeMetadata(meta) && !hasTranscripts) {\n return message;\n }\n\n const nextMeta = { ...(meta ?? {}) } as Record<string, unknown>;\n nextMeta['isStreaming'] = false;\n nextMeta['assistResponseStatus'] = 'complete';\n delete nextMeta['assistResponseError'];\n delete nextMeta['streamDraftText'];\n delete nextMeta['streamDraftThink'];\n return { ...message, metadata: nextMeta };\n }\n\n /** Ignore out-of-order streaming patches after a terminal assist state was applied. */\n private shouldIgnoreStaleStreamingDowngrade(incoming: AXConversationMessage): boolean {\n if (axmReadAssistResponseStatus(incoming.metadata) !== 'streaming') {\n return false;\n }\n if (axmAssistHasFinalizeMetadata(incoming.metadata)) {\n return false;\n }\n\n const cached = this.messageCache.get(incoming.id);\n if (!cached) {\n return false;\n }\n\n const cachedStatus = axmReadAssistResponseStatus(cached.metadata);\n if (axmIsAssistTerminalStatus(cachedStatus)) {\n return true;\n }\n return axmAssistHasFinalizeMetadata(cached.metadata);\n }\n\n /**\n * Assist-sync may reclaim a row as incomplete while the live SSE subscription is still\n * receiving drafts (page refresh / server restart path). Never ignore cancel/supersede.\n */\n private shouldIgnoreStaleIncompleteWhileLiveStreaming(incoming: AXConversationMessage): boolean {\n const incomingStatus = axmReadAssistResponseStatus(incoming.metadata);\n if (incomingStatus !== 'incomplete' && incomingStatus !== 'failed') {\n return false;\n }\n const meta = incoming.metadata as Record<string, unknown> | undefined;\n const err = typeof meta?.['assistResponseError'] === 'string' ? meta['assistResponseError'] : '';\n // Real cancel / provider failures must always win over the live draft cache.\n if (!err.includes('page refresh or server restart')) {\n return false;\n }\n if (!this.streamTasks.has(incoming.conversationId.trim())) {\n return false;\n }\n const cached = this.messageCache.get(incoming.id);\n if (!cached || axmReadAssistResponseStatus(cached.metadata) !== 'streaming') {\n return false;\n }\n const cachedMeta = cached.metadata as Record<string, unknown> | undefined;\n const incomingMeta = incoming.metadata as Record<string, unknown> | undefined;\n const cachedDraft = typeof cachedMeta?.['streamDraftText'] === 'string' ? cachedMeta['streamDraftText'] : '';\n const incomingDraft = typeof incomingMeta?.['streamDraftText'] === 'string' ? incomingMeta['streamDraftText'] : '';\n const incomingText = (incoming.payload as { type?: string; text?: string } | undefined)?.type === 'text' ? String((incoming.payload as { text?: string }).text ?? '') : '';\n return cachedDraft.length >= Math.max(incomingDraft.length, incomingText.trim().length);\n }\n\n /** Maps streaming draft metadata into a display-friendly message for the chat renderer. */\n private withStreamDraftForDisplay(message: AXConversationMessage): AXConversationMessage {\n const meta = message.metadata as Record<string, unknown> | undefined;\n if (axmReadAssistResponseStatus(meta) !== 'streaming') {\n return message;\n }\n const streamDraftText = typeof meta?.['streamDraftText'] === 'string' ? meta['streamDraftText'] : '';\n if (!streamDraftText.trim()) {\n return message;\n }\n const payload = message.payload as unknown as Record<string, unknown> | undefined;\n const hasVisibleText = payload?.['type'] === 'text' && typeof payload['text'] === 'string' && (payload['text'] as string).trim().length > 0;\n if (hasVisibleText) {\n return message;\n }\n return {\n ...message,\n payload: { type: 'text', text: streamDraftText },\n metadata: { ...meta },\n };\n }\n\n private async repairAssistResponseAsComplete(message: AXConversationMessage): Promise<void> {\n const meta = { ...(message.metadata ?? {}) } as Record<string, unknown>;\n const streamDraftText = typeof meta['streamDraftText'] === 'string' ? meta['streamDraftText'] : '';\n const payload = message.payload as unknown as Record<string, unknown> | undefined;\n const hasPayloadContent = (payload?.['type'] === 'text' && typeof payload['text'] === 'string' && payload['text'].trim().length > 0) || (payload?.['type'] === 'assist-transcript-line' && payload['line'] != null);\n const next: AXConversationMessage = { ...message };\n if (!hasPayloadContent && streamDraftText.trim().length > 0) {\n next.payload = { type: 'text', text: streamDraftText.trim() };\n }\n const nextMeta = { ...(next.metadata ?? {}) } as Record<string, unknown>;\n nextMeta['isStreaming'] = false;\n nextMeta['assistResponseStatus'] = 'complete';\n delete nextMeta['assistResponseError'];\n delete nextMeta['streamDraftText'];\n delete nextMeta['streamDraftThink'];\n next.metadata = nextMeta;\n this.applyLiveMessage(next, { isNew: false });\n }\n\n private async warmConversationCache(conversationId: string): Promise<void> {\n if (this.conversationCache.has(conversationId)) {\n await this.syncAssistMessagesFromStore(conversationId);\n return;\n }\n const conversation = await this.store.getConversation(conversationId);\n if (conversation) {\n this.conversationCache.set(conversationId, conversation);\n if (axmConversationHasAiChat(conversation.metadata as Record<string, unknown> | undefined)) {\n this.ensureAssistStreamSubscription(conversationId);\n }\n }\n await this.syncAssistMessagesFromStore(conversationId);\n }\n\n private async syncAssistMessagesFromStore(conversationId: string): Promise<void> {\n const scoped = conversationId.trim();\n if (!scoped) {\n return;\n }\n\n const hasLiveStreaming = [...this.messageCache.values()].some((message) => message.conversationId === scoped && axmReadAssistResponseStatus(message.metadata) === 'streaming');\n const cachedList = this.store.getCachedMessageList(scoped);\n const hasCachedStreaming = cachedList?.some((message) => axmReadAssistResponseStatus(message.metadata) === 'streaming') ?? false;\n\n const persisted = cachedList && !hasLiveStreaming && !hasCachedStreaming ? cachedList : await this.store.loadConversationMessages(scoped);\n const persistedIds = new Set(persisted.map((message) => message.id));\n for (const [id, message] of this.messageCache.entries()) {\n if (message.conversationId !== scoped || persistedIds.has(id)) {\n continue;\n }\n const status = axmReadAssistResponseStatus(message.metadata);\n if (axmIsAssistTerminalStatus(status)) {\n this.messageCache.delete(id);\n }\n }\n for (const message of persisted) {\n const meta = message.metadata as Record<string, unknown> | undefined;\n if (meta?.['isAssistResponse'] !== true && message.type !== 'assist-response') {\n continue;\n }\n const cached = this.messageCache.get(message.id);\n if (cached && axmShouldPreferPersistedAssistOverLiveCache(message, cached)) {\n this.messageCache.delete(message.id);\n }\n const status = axmReadAssistResponseStatus(message.metadata);\n if (status === 'streaming') {\n if (axmAssistPersistedMessageLooksComplete(message)) {\n await this.repairAssistResponseAsComplete(message);\n } else {\n this.applyLiveMessage(message, { isNew: !this.messageCache.has(message.id) });\n }\n continue;\n }\n if (status === 'failed' || status === 'complete' || status === 'incomplete') {\n this.applyLiveMessage(message, { isNew: false });\n }\n }\n }\n\n private scheduleAssistStreamReconnect(conversationId: string, options?: { allowUnfocused?: boolean }): void {\n const key = conversationId.trim();\n if (!key) {\n return;\n }\n if (!options?.allowUnfocused && !this.focus.isFocused(key)) {\n return;\n }\n\n const hasStreaming = [...this.messageCache.values()].some((message) => message.conversationId === key && axmReadAssistResponseStatus(message.metadata) === 'streaming');\n if (!hasStreaming) {\n return;\n }\n\n const existing = this.streamReconnectTimers.get(key);\n if (existing) {\n clearTimeout(existing);\n }\n\n const timer = setTimeout(() => {\n this.streamReconnectTimers.delete(key);\n if (this.streamTasks.has(key)) {\n return;\n }\n const stillStreaming = [...this.messageCache.values()].some((message) => message.conversationId === key && axmReadAssistResponseStatus(message.metadata) === 'streaming');\n if (!stillStreaming) {\n return;\n }\n this.ensureAssistStreamSubscription(key);\n }, 2000);\n this.streamReconnectTimers.set(key, timer);\n }\n\n private isBenignAssistStreamClose(conversationId: string, error: unknown): boolean {\n if (!this.focus.isFocused(conversationId)) {\n return true;\n }\n const message = error instanceof Error ? error.message : String(error);\n if (message === 'BodyStreamBuffer was aborted') {\n return true;\n }\n return error instanceof DOMException && error.name === 'AbortError';\n }\n\n private flushLiveCacheToBus(conversationId: string): void {\n if (!this.focus.isFocused(conversationId)) {\n return;\n }\n for (const message of this.messageCache.values()) {\n if (message.conversationId !== conversationId || message.deleted) {\n continue;\n }\n const next = this.withStreamDraftForDisplay(message);\n this.store.publishMessageUpdate(next);\n }\n }\n\n private async handleAssistStreamTransportFailure(conversationId: string, errorMessage: string): Promise<void> {\n if (!this.focus.isFocused(conversationId)) {\n return;\n }\n await this.syncAssistMessagesFromStore(conversationId);\n await this.requestAssistSync(conversationId);\n const stillStreaming = [...this.messageCache.values()].filter((message) => message.conversationId === conversationId && axmReadAssistResponseStatus(message.metadata) === 'streaming');\n for (const message of stillStreaming) {\n const meta = { ...(message.metadata ?? {}) } as Record<string, unknown>;\n meta['isStreaming'] = false;\n meta['assistResponseStatus'] = 'incomplete';\n meta['assistResponseError'] = errorMessage;\n this.applyLiveMessage({ ...message, metadata: meta }, { isNew: false });\n }\n if (stillStreaming.length > 0) {\n void this.showAssistToast('@conversation:chat.assist.errors.stream-title', errorMessage);\n }\n this.syncComposerGeneratingForConversation(conversationId, false);\n }\n\n //#region ----- Composer generation state -----\n\n /** Syncs composer Stop / spinner with assist streaming for the focused conversation. */\n async syncComposerGenerationForFocus(conversationId: string | null): Promise<void> {\n const scoped = conversationId?.trim();\n if (!scoped) {\n this.markComposerGenerating(null, false);\n return;\n }\n const hasStreaming = await this.hasStreamingAssistPlaceholders(scoped);\n this.markComposerGenerating(scoped, hasStreaming);\n }\n\n async cancelAssistGeneration(conversationId: string): Promise<void> {\n if (this.cancelAssistRequest) {\n return this.cancelAssistRequest;\n }\n this.cancelAssistRequest = this.runCancelAssistGeneration(conversationId).finally(() => {\n this.cancelAssistRequest = null;\n });\n return this.cancelAssistRequest;\n }\n\n private async runCancelAssistGeneration(conversationId: string): Promise<void> {\n const scoped =\n conversationId.trim()\n || this.composerGenerationConversationId?.trim()\n || this.resolveActiveStreamingConversationId();\n\n if (!scoped) {\n this.conversationService.cancelGeneration();\n return;\n }\n\n try {\n await this.transportService.execute(AXMAiManagementTransportKeys.ConversationAssist.CancelAssist, {\n conversationId: scoped,\n });\n await this.requestAssistSync(scoped, { force: true });\n await this.syncAssistMessagesFromStore(scoped);\n } catch (error: unknown) {\n const text = error instanceof Error ? error.message : String(error);\n if (this.focus.isFocused(scoped)) {\n void this.showAssistToast('@conversation:chat.assist.errors.stream-title', text);\n }\n } finally {\n this.markComposerGenerating(scoped, false);\n }\n }\n\n private markComposerGenerating(conversationId: string | null, generating: boolean): void {\n if (generating && conversationId) {\n this.composerGenerationConversationId = conversationId;\n if (this.focus.isFocused(conversationId)) {\n this.conversationService.setGenerating(true);\n }\n return;\n }\n\n if (!generating) {\n this.composerGenerationConversationId = null;\n if (!conversationId || this.focus.isFocused(conversationId)) {\n this.conversationService.setGenerating(false);\n }\n }\n }\n\n private syncComposerGeneratingForConversation(conversationId: string, generating: boolean): void {\n if (!this.focus.isFocused(conversationId)) {\n return;\n }\n this.markComposerGenerating(conversationId, generating);\n }\n\n private resolveActiveStreamingConversationId(): string | null {\n for (const message of this.messageCache.values()) {\n if (axmReadAssistResponseStatus(message.metadata) === 'streaming') {\n return message.conversationId;\n }\n }\n return this.composerGenerationConversationId;\n }\n\n //#endregion\n}\n\n/** @deprecated Use {@link AXEConversationAssistResponseService}. */\nexport const AXCConversationAssistResponseService = AXEConversationAssistResponseService;\n\n//#endregion\n","import { AXPAvatarComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPLayoutThemeService } from '@acorex-platform/framework-client/themes/shared';\nimport {\n axmChatAiTargetAvatarUrl,\n axmChatAiTargetDisplayName,\n axmFilterChatAiTargets,\n type AXMChatAiTargetRow,\n} from '@acorex-platform/module-conversation-client';\nimport { AXClosableComponent, AXComponentCloseEvent, AXDataSource } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXConversation } from '@acorex/components/conversation';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXListComponent } from '@acorex/components/list';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport type { AXPopupRef } from '@acorex/components/popup';\nimport { AXSearchBoxComponent } from '@acorex/components/search-box';\nimport { AXSkeletonComponent } from '@acorex/components/skeleton';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, TemplateRef, effect, inject, input, signal, viewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXMChatAssistLauncherService } from '../services/assist-chat-launcher.service';\n\n@Component({\n selector: 'axm-chat-with-assist-dialog',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, FormsModule, AXButtonComponent, AXListComponent, AXSearchBoxComponent, AXPAvatarComponent, AXDecoratorGenericComponent, AXSkeletonComponent, AXTranslationModule],\n providers: [{ provide: AXClosableComponent, useExisting: AXMChatWithAssistDialogComponent }],\n template: `\n <div class=\"new-conversation-panel\">\n <div class=\"new-conversation-dialog-content\">\n <div class=\"form-field form-field--grow\">\n <div class=\"users-list-wrap\">\n <div class=\"users-list-search\">\n <ax-search-box [value]=\"searchQuery()\" (valueChange)=\"onSearchChange($event)\" [disabled]=\"starting()\" [placeholder]=\"('@conversation:chat.assist-dialog.search.placeholder' | translate | async) ?? ''\"></ax-search-box>\n </div>\n <ax-list\n #assistsList\n class=\"users-list\"\n [dataSource]=\"assistListDataSource\"\n [multiple]=\"false\"\n [checkbox]=\"false\"\n [disabled]=\"starting()\"\n [valueField]=\"'id'\"\n [textField]=\"'name'\"\n [itemHeight]=\"60\"\n [ngModel]=\"selectedTargetIds()\"\n (ngModelChange)=\"onSelectedTargetsChange($event ?? [])\"\n [emptyTemplate]=\"assistsListEmptyTpl()\"\n [loadingTemplate]=\"assistsListLoadingTpl()\"\n [itemTemplate]=\"assistItemTpl\"\n ></ax-list>\n </div>\n </div>\n </div>\n <ax-footer class=\"dialog-footer\">\n <ax-suffix>\n <ax-button [text]=\"('@conversation:comments.actions.cancel.title' | translate | async) ?? ''\" [look]=\"'solid'\" [disabled]=\"starting()\" (onClick)=\"onCancel()\"></ax-button>\n <ax-button\n [text]=\"('@conversation:chat.assist-dialog.actions.start-chat' | translate | async) ?? ''\"\n [look]=\"'solid'\"\n [color]=\"'primary'\"\n [disabled]=\"!selectedTargetIds().length || loading() || starting()\"\n (onClick)=\"onStartChat()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n </div>\n\n <ng-template #assistsListEmpty>\n <div class=\"users-list-empty\">\n @if (searchQuery()) {\n {{ '@conversation:chat.assist-dialog.states.no-search-result' | translate | async }}\n } @else {\n {{ '@conversation:chat.assist-dialog.states.no-assists' | translate | async }}\n }\n </div>\n </ng-template>\n\n <ng-template #assistsListLoading>\n <div class=\"user-item-skeleton\">\n <ax-skeleton class=\"skeleton-avatar\" [animated]=\"true\"></ax-skeleton>\n <div class=\"skeleton-text\">\n <ax-skeleton class=\"skeleton-name\" [animated]=\"true\"></ax-skeleton>\n <ax-skeleton class=\"skeleton-description\" [animated]=\"true\"></ax-skeleton>\n </div>\n </div>\n </ng-template>\n\n <ng-template #assistItemTpl let-item>\n @if (targetFromItem(item); as row) {\n <div class=\"user-item-content\">\n <axp-avatar [size]=\"48\" [fullName]=\"displayName(row)\" [src]=\"targetAvatarUrl(row) ?? ''\" />\n <div class=\"user-item-text\">\n <span class=\"truncated user-name-text\">{{ row.title | translate | async }}</span>\n @if (row.description) {\n <span class=\"user-description-text truncated\">{{ row.description | translate | async }}</span>\n }\n </div>\n </div>\n }\n </ng-template>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .new-conversation-panel {\n display: flex;\n flex-direction: column;\n width: 100%;\n overflow: hidden;\n }\n\n .new-conversation-dialog-content {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n }\n\n .form-field--grow {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n\n .form-field {\n display: flex;\n flex-direction: column;\n gap: 0.35rem;\n }\n\n .users-list-wrap {\n display: flex;\n flex-direction: column;\n height: min(50vh, 36rem);\n overflow: hidden;\n }\n\n .users-list-search {\n flex: 0 0 auto;\n padding: 0.5rem 0.75rem;\n border-bottom: 1px solid rgb(var(--ax-sys-color-border-light-surface));\n background: rgb(var(--ax-sys-color-lighter-surface));\n }\n\n .users-list {\n display: block;\n flex: 1 1 auto;\n min-height: 0;\n }\n\n .user-item-content {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n height: 100%;\n padding: 0.5rem 0.75rem;\n min-width: 0;\n }\n\n .user-item-text {\n display: flex;\n flex-direction: column;\n justify-content: center;\n min-width: 0;\n flex: 1;\n gap: 0.125rem;\n }\n\n .user-name-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 0.875rem;\n line-height: 1.25rem;\n font-weight: 500;\n color: rgb(var(--ax-sys-color-on-surface));\n }\n\n .user-description-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 0.875rem;\n line-height: 1.25rem;\n font-weight: 400;\n opacity: 0.72;\n color: rgb(var(--ax-sys-color-on-surface));\n }\n\n .users-list-empty {\n padding: 1rem;\n text-align: center;\n font-size: 0.85rem;\n opacity: 0.7;\n }\n\n .user-item-skeleton {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n height: 60px;\n padding: 0.5rem 1.25rem;\n min-width: 0;\n }\n\n .skeleton-avatar {\n flex: 0 0 auto;\n width: 3rem;\n height: 3rem;\n border-radius: 9999px;\n }\n\n .skeleton-text {\n display: flex;\n flex-direction: column;\n min-width: 0;\n flex: 1;\n gap: 0.5rem;\n }\n\n .skeleton-name {\n height: 1rem;\n width: 60%;\n border-radius: 0.25rem;\n }\n\n .skeleton-description {\n height: 0.75rem;\n width: 40%;\n border-radius: 0.25rem;\n }\n `,\n ],\n})\nexport class AXMChatWithAssistDialogComponent extends AXBasePageComponent {\n private readonly toastService = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n private readonly assistLauncher = inject(AXMChatAssistLauncherService);\n private readonly layoutTheme = inject(AXPLayoutThemeService);\n\n readonly __popup__ = input<AXPopupRef | undefined>(undefined);\n readonly embeddedInTabs = input(false);\n readonly rows = signal<AXMChatAiTargetRow[]>([]);\n readonly loading = signal(true);\n readonly starting = signal(false);\n readonly searchQuery = signal('');\n readonly selectedTargetIds = signal<string[]>([]);\n\n private targetsLoadPromise: Promise<void> | null = null;\n readonly assistListDataSource = new AXDataSource<unknown>({\n pageSize: 100,\n key: 'id',\n load: async (e) => {\n await this.ensureTargetsLoaded();\n const filtered = this.filteredTargetRows() as unknown[];\n return { items: filtered.slice(e.skip, e.skip + e.take), total: filtered.length };\n },\n byKey: (key) => Promise.resolve(this.rows().find((r) => r.id === key) ?? null),\n });\n\n readonly assistsListEmptyTpl = viewChild.required<TemplateRef<unknown>>('assistsListEmpty');\n readonly assistsListLoadingTpl = viewChild.required<TemplateRef<unknown>>('assistsListLoading');\n readonly assistsList = viewChild<AXListComponent>('assistsList');\n\n private readonly syncPopupTitle = effect(() => {\n if (this.embeddedInTabs()) return;\n const popupRef = this.__popup__();\n if (popupRef) {\n this.setTitle = (t: string) => popupRef.setTitle(t);\n void this.#updatePopupTitle(popupRef);\n }\n });\n\n targetFromItem(item: unknown): AXMChatAiTargetRow | null {\n if (!item || typeof item !== 'object') return null;\n const o = item as Record<string, unknown>;\n if ('data' in o && o['data'] && typeof o['data'] === 'object') return o['data'] as AXMChatAiTargetRow;\n if (typeof o['id'] === 'string' && typeof o['name'] === 'string') return o as unknown as AXMChatAiTargetRow;\n return null;\n }\n\n onSelectedTargetsChange(value: string[] | string | null): void {\n if (value == null) {\n this.selectedTargetIds.set([]);\n return;\n }\n this.selectedTargetIds.set(Array.isArray(value) ? value : [value]);\n }\n\n onSearchChange(value: string): void {\n this.searchQuery.set(value ?? '');\n this.assistsList()?.refresh(false);\n }\n\n private async ensureTargetsLoaded(): Promise<void> {\n if (!this.targetsLoadPromise) this.targetsLoadPromise = this.loadTargetsFromApi();\n await this.targetsLoadPromise;\n }\n\n private async loadTargetsFromApi(): Promise<void> {\n this.loading.set(true);\n try {\n let targets = await this.assistLauncher.loadTargets();\n if (!targets.length) {\n targets = await this.assistLauncher.loadTargets(true);\n }\n this.rows.set(targets);\n } catch (error: unknown) {\n console.error('Failed to load AI chat targets:', error);\n const message = await this.translationService.translateAsync('@conversation:chat.assist-dialog.errors.load-assists');\n this.toastService.danger(message);\n this.rows.set([]);\n } finally {\n this.loading.set(false);\n queueMicrotask(() => this.assistsList()?.refresh(false));\n }\n }\n\n private filteredTargetRows(): AXMChatAiTargetRow[] {\n return axmFilterChatAiTargets((value) => this.translationService.resolve(value), this.rows(), this.searchQuery());\n }\n\n displayName(row: AXMChatAiTargetRow): string {\n return axmChatAiTargetDisplayName((value) => this.translationService.resolve(value), row);\n }\n\n targetAvatarUrl(row: AXMChatAiTargetRow): string | null {\n return axmChatAiTargetAvatarUrl(row);\n }\n\n onCancel(): void {\n const event = new AXComponentCloseEvent();\n event.component = this;\n event.data = null;\n this.onClosed.emit(event);\n }\n\n async onStartChat(): Promise<void> {\n if (this.starting()) {\n return;\n }\n\n const targetId = this.selectedTargetIds()[0];\n if (!targetId) {\n return;\n }\n\n const row = this.rows().find((r) => r.id === targetId);\n if (!row) {\n return;\n }\n\n this.starting.set(true);\n this.layoutTheme.setOverlayLoading(true);\n try {\n // Create + select without route change first. Navigating while the popup is open\n // destroys this component and unsubscribes `onClosed` → ObjectUnsubscribedError toast.\n const result = await this.assistLauncher.startAssistChatFromRow(row, false);\n if (!result?.conversation) {\n return;\n }\n\n const event = new AXComponentCloseEvent();\n event.component = this;\n event.data = result.conversation as AXConversation;\n this.#emitClosed(event);\n await this.assistLauncher.navigateToConversation(result.conversation.id);\n } catch (error: unknown) {\n console.error('Failed to start assist chat:', error);\n const message = await this.translationService.translateAsync('@conversation:chat.assist-dialog.errors.start-chat');\n this.toastService.danger(message);\n } finally {\n this.starting.set(false);\n this.layoutTheme.setOverlayLoading(false);\n }\n }\n\n #emitClosed(event: AXComponentCloseEvent): void {\n try {\n this.onClosed.emit(event);\n } catch {\n // Popup may already be tearing down; conversation was created successfully.\n }\n }\n\n async #updatePopupTitle(popupRef: AXPopupRef): Promise<void> {\n const title = await this.translationService.translateAsync('@conversation:new-conversation.actions.chat-with-ai');\n popupRef.setTitle(title);\n }\n}\n","import { AXClickEvent } from '@acorex/cdk/common';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXM_CHAT_SIDEBAR_ACTION_PROVIDER,\n type AXMChatSidebarAction,\n} from '@acorex-platform/module-conversation-client';\nimport { Provider, inject } from '@angular/core';\nimport { AXMChatAssistLauncherService } from '../services/assist-chat-launcher.service';\nimport { AXMChatWithAssistDialogComponent } from './chat-with-assist-dialog.component';\n\nclass AXMChatSidebarAssistAction implements AXMChatSidebarAction {\n id = 'chat-with-ai';\n label = '@conversation:new-conversation.actions.chat-with-ai';\n icon = 'fa-light fa-robot';\n priority = 20;\n\n private readonly popupService = inject(AXPopupService);\n private readonly translationService = inject(AXTranslationService);\n private readonly assistLauncher = inject(AXMChatAssistLauncherService);\n\n async run(event?: AXClickEvent): Promise<null> {\n event?.nativeEvent?.stopPropagation();\n // Await catalog so the dialog's first AXList load is not racing an empty/incomplete query.\n await this.assistLauncher.loadTargets();\n const title = await this.translationService.translateAsync('@conversation:new-conversation.actions.chat-with-ai');\n await this.popupService.open(AXMChatWithAssistDialogComponent, {\n title,\n size: 'sm',\n closeButton: true,\n });\n return null;\n }\n}\n\nexport const AXM_CHAT_SIDEBAR_ASSIST_ACTION_PROVIDERS: Provider[] = [\n AXMChatSidebarAssistAction,\n {\n provide: AXM_CHAT_SIDEBAR_ACTION_PROVIDER,\n useExisting: AXMChatSidebarAssistAction,\n multi: true,\n },\n];\n","import { AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from '@acorex-platform/framework-client/common';\nimport { AXPComponentSlotModule, AXP_APP_STARTUP_PRIORITY, provideAppStartUpTask } from '@acorex-platform/framework-client/core';\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport {\n CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND,\n CONVERSATION_START_ASSIST_CHAT_COMMAND,\n AXM_CHAT_ASSIST_CATALOG_PORT,\n AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS,\n AXM_CONVERSATION_ASSIST_RESPONSE_PORT,\n AXMMiniChatHeaderSlotComponent,\n} from '@acorex-platform/module-conversation-client';\nimport { NgModule, inject } from '@angular/core';\nimport { AXMConversationAssistSearchDefinitionProvider } from './assist-search-definition.provider';\nimport { AXMConversationAssistSearchProvider } from './assist-search.provider';\nimport { AXE_CHAT_EMPTY_STATE_PROVIDERS } from './empty-state/chat-empty-state.provider';\nimport { AXE_MINI_CHAT_INBOX_FILTER_PROVIDERS } from './mini-chat/mini-chat-inbox-filter.provider';\nimport { AXE_ASSIST_DEFAULT_RESOLVER_PROVIDERS } from './ports/assist-default-resolver.provider';\nimport { AXEConversationAssistResponseService } from './services/conversation-assist-response.service';\nimport { AXM_CHAT_SIDEBAR_ASSIST_ACTION_PROVIDERS } from './side-bar/chat-sidebar-assist-action.provider';\nimport { AXMChatAssistLauncherService } from './services/assist-chat-launcher.service';\nimport { AXMChatAssistCatalogService } from './services/chat-assist-catalog.service';\n\n@NgModule({\n imports: [\n AXPComponentSlotModule.forChild({\n 'root-header-end': [\n {\n priority: 55,\n name: 'conversation-mini-chat',\n component: AXMMiniChatHeaderSlotComponent,\n },\n ],\n }),\n ],\n providers: [\n {\n provide: AXM_CONVERSATION_ASSIST_RESPONSE_PORT,\n useClass: AXEConversationAssistResponseService,\n },\n {\n provide: AXM_CHAT_ASSIST_CATALOG_PORT,\n useExisting: AXMChatAssistCatalogService,\n },\n ...AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS,\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXMConversationAssistSearchProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_DEFINITION_PROVIDER,\n useClass: AXMConversationAssistSearchDefinitionProvider,\n multi: true,\n },\n ...AXE_CHAT_EMPTY_STATE_PROVIDERS,\n ...AXE_MINI_CHAT_INBOX_FILTER_PROVIDERS,\n ...AXE_ASSIST_DEFAULT_RESOLVER_PROVIDERS,\n ...AXM_CHAT_SIDEBAR_ASSIST_ACTION_PROVIDERS,\n provideAppStartUpTask(() => {\n const launcher = inject(AXMChatAssistLauncherService);\n return {\n name: 'conversation-assist-catalog-warm',\n priority: AXP_APP_STARTUP_PRIORITY.conversationSessionSync + 1,\n run: async () => {\n void launcher.loadTargets();\n },\n };\n }),\n provideCommandSetups([\n {\n key: CONVERSATION_START_ASSIST_CHAT_COMMAND,\n command: () => import('./commands/start-assist-chat.command').then((m) => m.AXMConversationStartAssistChatCommand),\n },\n {\n key: CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND,\n command: () =>\n import('./commands/send-assist-chat-message.command').then((m) => m.AXMConversationSendAssistChatMessageCommand),\n },\n ]),\n ],\n})\nexport class AXEAIConversationExtensionModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i3","i1"],"mappings":"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"}