@acorex-platform/extension-ai-conversation-client 0.0.32 → 0.0.37
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.
- package/fesm2022/{acorex-platform-extension-ai-conversation-client-acorex-platform-extension-ai-conversation-client-PyjS3LJH.mjs → acorex-platform-extension-ai-conversation-client-acorex-platform-extension-ai-conversation-client-CRjLZIU5.mjs} +20 -10
- package/fesm2022/acorex-platform-extension-ai-conversation-client-acorex-platform-extension-ai-conversation-client-CRjLZIU5.mjs.map +1 -0
- package/fesm2022/{acorex-platform-extension-ai-conversation-client-send-assist-chat-message.command-DuNwjggd.mjs → acorex-platform-extension-ai-conversation-client-send-assist-chat-message.command-B3rJWdsz.mjs} +2 -2
- package/fesm2022/{acorex-platform-extension-ai-conversation-client-send-assist-chat-message.command-DuNwjggd.mjs.map → acorex-platform-extension-ai-conversation-client-send-assist-chat-message.command-B3rJWdsz.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-extension-ai-conversation-client-start-assist-chat.command-CdHIrGj8.mjs → acorex-platform-extension-ai-conversation-client-start-assist-chat.command-qYtaBoTP.mjs} +2 -2
- package/fesm2022/{acorex-platform-extension-ai-conversation-client-start-assist-chat.command-CdHIrGj8.mjs.map → acorex-platform-extension-ai-conversation-client-start-assist-chat.command-qYtaBoTP.mjs.map} +1 -1
- package/fesm2022/acorex-platform-extension-ai-conversation-client.mjs +1 -1
- package/package.json +1 -1
- package/fesm2022/acorex-platform-extension-ai-conversation-client-acorex-platform-extension-ai-conversation-client-PyjS3LJH.mjs.map +0 -1
|
@@ -4,7 +4,7 @@ import { AXPComponentSlotModule, provideAppStartUpTask, AXP_APP_STARTUP_PRIORITY
|
|
|
4
4
|
import { AXPRuntimeTransportService, AXPCommandService, provideCommandSetups } from '@acorex-platform/framework-client/runtime';
|
|
5
5
|
import { AXM_AI_MANAGEMENT_MODULE_NAME, AXM_AI_MANAGEMENT_ASSIST_ENTITY_NAME, AXMConversationEntityStoreService, axmChatAiTargetDisplayName, axmChatAiTargetDisplayDescription, axmChatAiTargetAvatarUrl, axmFilterChatAiTargets, axmChatAiPeerParticipantId, axmBuildAiChatConversationMetadata, CONVERSATION_START_ASSIST_CHAT_COMMAND, axmChatAiTargetShortcutDescriptionKey, AXM_ASSIST_DEFAULT_RESOLVER_PORT, axmAssistStarterPromptChipItems, AXMAssistSuggestionChipsComponent, AXM_CHAT_EMPTY_STATE_COMPONENT, AXM_MINI_CHAT_INBOX_CONVERSATION_FILTER, axmConversationHasAiChat, AXMConversationFocusService, axmIsAssistRetryableStatus, axmReadAssistResponseStatus, axmReadReplyToUserMessageId, axmMessageEntityToMessage, axmAssistPersistedMessageLooksComplete, axmShouldPreferPersistedAssistOverLiveCache, axmRoomWithAssistPeerDisplayName, axmSyncAssistPeerDisplayName, axmRoomEntityToConversation, axmIsAssistTerminalStatus, CONVERSATION_SYNC_READ_STATE_COMMAND, axmAssistHasFinalizeMetadata, AXM_CHAT_SIDEBAR_ACTION_PROVIDER, AXMMiniChatHeaderSlotComponent, AXM_CONVERSATION_ASSIST_RESPONSE_PORT, AXM_CHAT_ASSIST_CATALOG_PORT, AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS, CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND } from '@acorex-platform/module-conversation-client';
|
|
6
6
|
import * as i0 from '@angular/core';
|
|
7
|
-
import { inject, Injectable, output, input, signal,
|
|
7
|
+
import { inject, Injectable, computed, output, input, signal, viewChild, effect, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
8
8
|
import { AXPSystemActionType, runtimeCommandPayloadData } from '@acorex-platform/framework-shared/core';
|
|
9
9
|
import { sortBy } from 'lodash-es';
|
|
10
10
|
import { AXConversationService } from '@acorex/components/conversation';
|
|
@@ -22,8 +22,10 @@ import { AXDecoratorModule, AXDecoratorGenericComponent } from '@acorex/componen
|
|
|
22
22
|
import * as i3 from '@acorex/components/dropdown';
|
|
23
23
|
import { AXDropdownModule } from '@acorex/components/dropdown';
|
|
24
24
|
import { AXTextBoxModule } from '@acorex/components/text-box';
|
|
25
|
+
import { AXLocaleService } from '@acorex/core/locale';
|
|
25
26
|
import * as i5 from '@angular/common';
|
|
26
27
|
import { CommonModule } from '@angular/common';
|
|
28
|
+
import { toSignal } from '@angular/core/rxjs-interop';
|
|
27
29
|
import * as i1 from '@angular/forms';
|
|
28
30
|
import { FormsModule } from '@angular/forms';
|
|
29
31
|
import { AXPAiManagerService } from '@acorex-platform/module-ai-management-client';
|
|
@@ -323,9 +325,15 @@ class AXMChatEmptyAssistComposerComponent {
|
|
|
323
325
|
this.conversationService = inject(AXConversationService);
|
|
324
326
|
this.toastService = inject(AXToastService);
|
|
325
327
|
this.translationService = inject(AXTranslationService);
|
|
328
|
+
this.localeService = inject(AXLocaleService);
|
|
326
329
|
this.assistCatalog = inject(AXMChatAssistCatalogService);
|
|
327
330
|
this.layoutTheme = inject(AXPLayoutThemeService);
|
|
328
331
|
this.defaultAssistResolver = inject(AXM_ASSIST_DEFAULT_RESOLVER_PORT, { optional: true });
|
|
332
|
+
this.localeProfile = toSignal(this.localeService.profileChanged$, {
|
|
333
|
+
initialValue: this.localeService.activeProfile(),
|
|
334
|
+
});
|
|
335
|
+
this.textDirection = computed(() => this.localeProfile()?.i18nMeta?.rtl === true ? 'rtl' : 'ltr', /* @ts-ignore */
|
|
336
|
+
...(ngDevMode ? [{ debugName: "textDirection" }] : /* istanbul ignore next */ []));
|
|
329
337
|
this.conversationCreated = output();
|
|
330
338
|
this.initialAssistId = input(undefined, /* @ts-ignore */
|
|
331
339
|
...(ngDevMode ? [{ debugName: "initialAssistId" }] : /* istanbul ignore next */ []));
|
|
@@ -510,7 +518,7 @@ class AXMChatEmptyAssistComposerComponent {
|
|
|
510
518
|
}
|
|
511
519
|
}
|
|
512
520
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatEmptyAssistComposerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
513
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMChatEmptyAssistComposerComponent, isStandalone: true, selector: "axm-chat-empty-assist-composer", inputs: { initialAssistId: { classPropertyName: "initialAssistId", publicName: "initialAssistId", isSignal: true, isRequired: false, transformFunction: null }, entityId: { classPropertyName: "entityId", publicName: "entityId", isSignal: true, isRequired: false, transformFunction: null }, entityType: { classPropertyName: "entityType", publicName: "entityType", isSignal: true, isRequired: false, transformFunction: null }, sendStarterPromptsInPlace: { classPropertyName: "sendStarterPromptsInPlace", publicName: "sendStarterPromptsInPlace", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { conversationCreated: "conversationCreated" }, host: { properties: { "class.axm-chat-empty-assist-composer-host--compact": "compact()" }, classAttribute: "axm-chat-empty-assist-composer-host" }, viewQueries: [{ propertyName: "draftInput", first: true, predicate: ["draftInput"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
521
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMChatEmptyAssistComposerComponent, isStandalone: true, selector: "axm-chat-empty-assist-composer", inputs: { initialAssistId: { classPropertyName: "initialAssistId", publicName: "initialAssistId", isSignal: true, isRequired: false, transformFunction: null }, entityId: { classPropertyName: "entityId", publicName: "entityId", isSignal: true, isRequired: false, transformFunction: null }, entityType: { classPropertyName: "entityType", publicName: "entityType", isSignal: true, isRequired: false, transformFunction: null }, sendStarterPromptsInPlace: { classPropertyName: "sendStarterPromptsInPlace", publicName: "sendStarterPromptsInPlace", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { conversationCreated: "conversationCreated" }, host: { properties: { "class.axm-chat-empty-assist-composer-host--compact": "compact()", "attr.dir": "textDirection()", "style.direction": "textDirection()" }, classAttribute: "axm-chat-empty-assist-composer-host" }, viewQueries: [{ propertyName: "draftInput", first: true, predicate: ["draftInput"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
514
522
|
<div class="axm-chat-empty-assist-composer">
|
|
515
523
|
<div class="axm-chat-empty-assist-composer__hero">
|
|
516
524
|
@if (compact()) {
|
|
@@ -604,13 +612,15 @@ class AXMChatEmptyAssistComposerComponent {
|
|
|
604
612
|
</div>
|
|
605
613
|
}
|
|
606
614
|
</div>
|
|
607
|
-
`, isInline: true, styles: [":host{display:block;width:100%}.axm-chat-empty-assist-composer{display:flex;flex-direction:column;gap:1rem;width:min(100%,64rem);margin-inline:auto}.axm-chat-empty-assist-composer__hero{display:flex;flex-direction:column;align-items:center;gap:.625rem}.axm-chat-empty-assist-composer__hero-icon{display:grid;place-items:center;width:2.5rem;height:2.5rem;border-radius:.875rem;color:rgb(var(--ax-sys-color-primary-600));background:linear-gradient(145deg,rgba(var(--ax-sys-color-primary-500),.14),rgba(var(--ax-sys-color-primary-500),.04));border:1px solid rgba(var(--ax-sys-color-primary-500),.18)}.axm-chat-empty-assist-composer__caption{margin-bottom:3rem;text-align:center;font-size:clamp(1.9rem,3.4vw,2.7rem);line-height:1.15;font-weight:700;letter-spacing:-.02em;color:rgb(var(--ax-sys-color-on-surface))}.axm-chat-empty-assist-composer__composer-row{display:flex;gap:.375rem;align-items:flex-end;padding:.5rem;border-radius:2em;border:1px solid rgb(var(--ax-sys-color-border-light-surface));background:rgb(var(--ax-sys-color-lightest-surface))}.axm-chat-empty-assist-composer__assist-text{display:inline-block;max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.axm-chat-empty-assist-composer__send{flex-shrink:0}.axm-chat-empty-assist-composer__suggestions{display:flex;flex-direction:column;gap:.5rem}.axm-chat-empty-assist-composer__suggestions-label{margin:0;padding-inline:.125rem;font-size:.6875rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:rgb(var(--ax-sys-color-on-surface));opacity:.52}.axm-chat-empty-assist-composer__textarea{resize:none;overflow:hidden;background:transparent;min-height:2.25rem;max-height:14rem;line-height:1.5;padding-block:.25rem;font-size:inherit;color:rgb(var(--ax-sys-color-on-surface))}.axm-chat-empty-assist-composer__textarea::placeholder{color:rgb(var(--ax-sys-color-on-surface));opacity:.45}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer{width:100%;max-width:none;gap:.875rem}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__hero{gap:.5rem}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__caption{margin-bottom:0;font-size:1.125rem;line-height:1.35;font-weight:600;letter-spacing:-.015em}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__composer-row{gap:.25rem;align-items:center;padding:.375rem .4375rem
|
|
615
|
+
`, isInline: true, styles: [":host{display:block;width:100%}.axm-chat-empty-assist-composer{display:flex;flex-direction:column;gap:1rem;width:min(100%,64rem);margin-inline:auto}.axm-chat-empty-assist-composer__hero{display:flex;flex-direction:column;align-items:center;gap:.625rem}.axm-chat-empty-assist-composer__hero-icon{display:grid;place-items:center;width:2.5rem;height:2.5rem;border-radius:.875rem;color:rgb(var(--ax-sys-color-primary-600));background:linear-gradient(145deg,rgba(var(--ax-sys-color-primary-500),.14),rgba(var(--ax-sys-color-primary-500),.04));border:1px solid rgba(var(--ax-sys-color-primary-500),.18)}.axm-chat-empty-assist-composer__caption{margin-bottom:3rem;text-align:center;font-size:clamp(1.9rem,3.4vw,2.7rem);line-height:1.15;font-weight:700;letter-spacing:-.02em;color:rgb(var(--ax-sys-color-on-surface))}.axm-chat-empty-assist-composer__composer-row{display:flex;gap:.375rem;align-items:flex-end;padding:.5rem;border-radius:2em;border:1px solid rgb(var(--ax-sys-color-border-light-surface));background:rgb(var(--ax-sys-color-lightest-surface))}.axm-chat-empty-assist-composer__assist-text{display:inline-block;max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.axm-chat-empty-assist-composer__send{flex-shrink:0}.axm-chat-empty-assist-composer__suggestions{display:flex;flex-direction:column;gap:.5rem}.axm-chat-empty-assist-composer__suggestions-label{margin:0;padding-inline:.125rem;font-size:.6875rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:rgb(var(--ax-sys-color-on-surface));opacity:.52}.axm-chat-empty-assist-composer__textarea{resize:none;overflow:hidden;background:transparent;min-height:2.25rem;max-height:14rem;line-height:1.5;padding-block:.25rem;font-size:inherit;text-align:start;color:rgb(var(--ax-sys-color-on-surface))}.axm-chat-empty-assist-composer__textarea::placeholder{color:rgb(var(--ax-sys-color-on-surface));opacity:.45}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer{width:100%;max-width:none;gap:.875rem}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__hero{gap:.5rem}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__caption{margin-bottom:0;font-size:1.125rem;line-height:1.35;font-weight:600;letter-spacing:-.015em}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__composer-row{gap:.25rem;align-items:center;padding-block:.375rem;padding-inline:.375rem .4375rem;border-radius:1.5rem;border-color:rgba(var(--ax-sys-color-border-light-surface),.95);background:rgba(var(--ax-sys-color-surface),.35)}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__assist-trigger{color:rgb(var(--ax-sys-color-primary-600));opacity:.9}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__assist-text{max-width:5.5rem;font-size:.8125rem}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__textarea{min-height:1.625rem;max-height:8rem;line-height:1.4;font-size:.875rem;padding-block:.125rem}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__suggestions{gap:.375rem;margin-top:.125rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i2.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i3.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXMAssistSuggestionChipsComponent, selector: "axm-assist-suggestion-chips", inputs: ["items", "compact", "sendInPlace", "disabled"], outputs: ["conversationCreated"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
608
616
|
}
|
|
609
617
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatEmptyAssistComposerComponent, decorators: [{
|
|
610
618
|
type: Component,
|
|
611
619
|
args: [{ selector: 'axm-chat-empty-assist-composer', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
612
620
|
class: 'axm-chat-empty-assist-composer-host',
|
|
613
621
|
'[class.axm-chat-empty-assist-composer-host--compact]': 'compact()',
|
|
622
|
+
'[attr.dir]': 'textDirection()',
|
|
623
|
+
'[style.direction]': 'textDirection()',
|
|
614
624
|
}, imports: [CommonModule, FormsModule, AXButtonModule, AXDropdownModule, AXTextBoxModule, AXDecoratorModule, AXTranslationModule, AXMAssistSuggestionChipsComponent], template: `
|
|
615
625
|
<div class="axm-chat-empty-assist-composer">
|
|
616
626
|
<div class="axm-chat-empty-assist-composer__hero">
|
|
@@ -705,7 +715,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
705
715
|
</div>
|
|
706
716
|
}
|
|
707
717
|
</div>
|
|
708
|
-
`, styles: [":host{display:block;width:100%}.axm-chat-empty-assist-composer{display:flex;flex-direction:column;gap:1rem;width:min(100%,64rem);margin-inline:auto}.axm-chat-empty-assist-composer__hero{display:flex;flex-direction:column;align-items:center;gap:.625rem}.axm-chat-empty-assist-composer__hero-icon{display:grid;place-items:center;width:2.5rem;height:2.5rem;border-radius:.875rem;color:rgb(var(--ax-sys-color-primary-600));background:linear-gradient(145deg,rgba(var(--ax-sys-color-primary-500),.14),rgba(var(--ax-sys-color-primary-500),.04));border:1px solid rgba(var(--ax-sys-color-primary-500),.18)}.axm-chat-empty-assist-composer__caption{margin-bottom:3rem;text-align:center;font-size:clamp(1.9rem,3.4vw,2.7rem);line-height:1.15;font-weight:700;letter-spacing:-.02em;color:rgb(var(--ax-sys-color-on-surface))}.axm-chat-empty-assist-composer__composer-row{display:flex;gap:.375rem;align-items:flex-end;padding:.5rem;border-radius:2em;border:1px solid rgb(var(--ax-sys-color-border-light-surface));background:rgb(var(--ax-sys-color-lightest-surface))}.axm-chat-empty-assist-composer__assist-text{display:inline-block;max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.axm-chat-empty-assist-composer__send{flex-shrink:0}.axm-chat-empty-assist-composer__suggestions{display:flex;flex-direction:column;gap:.5rem}.axm-chat-empty-assist-composer__suggestions-label{margin:0;padding-inline:.125rem;font-size:.6875rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:rgb(var(--ax-sys-color-on-surface));opacity:.52}.axm-chat-empty-assist-composer__textarea{resize:none;overflow:hidden;background:transparent;min-height:2.25rem;max-height:14rem;line-height:1.5;padding-block:.25rem;font-size:inherit;color:rgb(var(--ax-sys-color-on-surface))}.axm-chat-empty-assist-composer__textarea::placeholder{color:rgb(var(--ax-sys-color-on-surface));opacity:.45}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer{width:100%;max-width:none;gap:.875rem}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__hero{gap:.5rem}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__caption{margin-bottom:0;font-size:1.125rem;line-height:1.35;font-weight:600;letter-spacing:-.015em}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__composer-row{gap:.25rem;align-items:center;padding:.375rem .4375rem
|
|
718
|
+
`, styles: [":host{display:block;width:100%}.axm-chat-empty-assist-composer{display:flex;flex-direction:column;gap:1rem;width:min(100%,64rem);margin-inline:auto}.axm-chat-empty-assist-composer__hero{display:flex;flex-direction:column;align-items:center;gap:.625rem}.axm-chat-empty-assist-composer__hero-icon{display:grid;place-items:center;width:2.5rem;height:2.5rem;border-radius:.875rem;color:rgb(var(--ax-sys-color-primary-600));background:linear-gradient(145deg,rgba(var(--ax-sys-color-primary-500),.14),rgba(var(--ax-sys-color-primary-500),.04));border:1px solid rgba(var(--ax-sys-color-primary-500),.18)}.axm-chat-empty-assist-composer__caption{margin-bottom:3rem;text-align:center;font-size:clamp(1.9rem,3.4vw,2.7rem);line-height:1.15;font-weight:700;letter-spacing:-.02em;color:rgb(var(--ax-sys-color-on-surface))}.axm-chat-empty-assist-composer__composer-row{display:flex;gap:.375rem;align-items:flex-end;padding:.5rem;border-radius:2em;border:1px solid rgb(var(--ax-sys-color-border-light-surface));background:rgb(var(--ax-sys-color-lightest-surface))}.axm-chat-empty-assist-composer__assist-text{display:inline-block;max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.axm-chat-empty-assist-composer__send{flex-shrink:0}.axm-chat-empty-assist-composer__suggestions{display:flex;flex-direction:column;gap:.5rem}.axm-chat-empty-assist-composer__suggestions-label{margin:0;padding-inline:.125rem;font-size:.6875rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:rgb(var(--ax-sys-color-on-surface));opacity:.52}.axm-chat-empty-assist-composer__textarea{resize:none;overflow:hidden;background:transparent;min-height:2.25rem;max-height:14rem;line-height:1.5;padding-block:.25rem;font-size:inherit;text-align:start;color:rgb(var(--ax-sys-color-on-surface))}.axm-chat-empty-assist-composer__textarea::placeholder{color:rgb(var(--ax-sys-color-on-surface));opacity:.45}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer{width:100%;max-width:none;gap:.875rem}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__hero{gap:.5rem}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__caption{margin-bottom:0;font-size:1.125rem;line-height:1.35;font-weight:600;letter-spacing:-.015em}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__composer-row{gap:.25rem;align-items:center;padding-block:.375rem;padding-inline:.375rem .4375rem;border-radius:1.5rem;border-color:rgba(var(--ax-sys-color-border-light-surface),.95);background:rgba(var(--ax-sys-color-surface),.35)}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__assist-trigger{color:rgb(var(--ax-sys-color-primary-600));opacity:.9}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__assist-text{max-width:5.5rem;font-size:.8125rem}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__textarea{min-height:1.625rem;max-height:8rem;line-height:1.4;font-size:.875rem;padding-block:.125rem}:host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__suggestions{gap:.375rem;margin-top:.125rem}\n"] }]
|
|
709
719
|
}], ctorParameters: () => [], propDecorators: { conversationCreated: [{ type: i0.Output, args: ["conversationCreated"] }], initialAssistId: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialAssistId", required: false }] }], entityId: [{ type: i0.Input, args: [{ isSignal: true, alias: "entityId", required: false }] }], entityType: [{ type: i0.Input, args: [{ isSignal: true, alias: "entityType", required: false }] }], sendStarterPromptsInPlace: [{ type: i0.Input, args: [{ isSignal: true, alias: "sendStarterPromptsInPlace", required: false }] }], compact: [{ type: i0.Input, args: [{ isSignal: true, alias: "compact", required: false }] }], draftInput: [{ type: i0.ViewChild, args: ['draftInput', { isSignal: true }] }] } });
|
|
710
720
|
|
|
711
721
|
const AXE_CHAT_EMPTY_STATE_PROVIDERS = [
|
|
@@ -1754,7 +1764,7 @@ class AXMChatWithAssistDialogComponent extends AXBasePageComponent {
|
|
|
1754
1764
|
</div>
|
|
1755
1765
|
}
|
|
1756
1766
|
</ng-template>
|
|
1757
|
-
`, isInline: true, styles: [":host{display:block}.new-conversation-panel{display:flex;flex-direction:column;width:100%;overflow:hidden}.new-conversation-dialog-content{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;gap:.75rem}.form-field--grow{flex:1;min-height:0;display:flex;flex-direction:column}.form-field{display:flex;flex-direction:column;gap:.35rem}.users-list-wrap{display:flex;flex-direction:column;height:min(50vh,36rem);overflow:hidden}.users-list-search{flex:0 0 auto;padding:.5rem .75rem;border-bottom:1px solid rgb(var(--ax-sys-color-border-light-surface));background:rgb(var(--ax-sys-color-lighter-surface))}.users-list{display:block;flex:1 1 auto;min-height:0}.user-item-content{display:flex;align-items:center;gap:.75rem;height:100%;padding:.5rem .75rem;min-width:0}.user-item-text{display:flex;flex-direction:column;justify-content:center;min-width:0;flex:1;gap:.125rem}.user-name-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.875rem;line-height:1.25rem;font-weight:500;color:rgb(var(--ax-sys-color-on-surface))}.user-description-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.875rem;line-height:1.25rem;font-weight:400;opacity:.72;color:rgb(var(--ax-sys-color-on-surface))}.users-list-empty{padding:1rem;text-align:center;font-size:.85rem;opacity:.7}.user-item-skeleton{display:flex;align-items:center;gap:.75rem;height:60px;padding:.5rem 1.25rem;min-width:0}.skeleton-avatar{flex:0 0 auto;width:3rem;height:3rem;border-radius:9999px}.skeleton-text{display:flex;flex-direction:column;min-width:0;flex:1;gap:.5rem}.skeleton-name{height:1rem;width:60%;border-radius:.25rem}.skeleton-description{height:.75rem;width:40%;border-radius:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "
|
|
1767
|
+
`, isInline: true, styles: [":host{display:block}.new-conversation-panel{display:flex;flex-direction:column;width:100%;overflow:hidden}.new-conversation-dialog-content{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;gap:.75rem}.form-field--grow{flex:1;min-height:0;display:flex;flex-direction:column}.form-field{display:flex;flex-direction:column;gap:.35rem}.users-list-wrap{display:flex;flex-direction:column;height:min(50vh,36rem);overflow:hidden}.users-list-search{flex:0 0 auto;padding:.5rem .75rem;border-bottom:1px solid rgb(var(--ax-sys-color-border-light-surface));background:rgb(var(--ax-sys-color-lighter-surface))}.users-list{display:block;flex:1 1 auto;min-height:0}.user-item-content{display:flex;align-items:center;gap:.75rem;height:100%;padding:.5rem .75rem;min-width:0}.user-item-text{display:flex;flex-direction:column;justify-content:center;min-width:0;flex:1;gap:.125rem}.user-name-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.875rem;line-height:1.25rem;font-weight:500;color:rgb(var(--ax-sys-color-on-surface))}.user-description-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.875rem;line-height:1.25rem;font-weight:400;opacity:.72;color:rgb(var(--ax-sys-color-on-surface))}.users-list-empty{padding:1rem;text-align:center;font-size:.85rem;opacity:.7}.user-item-skeleton{display:flex;align-items:center;gap:.75rem;height:60px;padding:.5rem 1.25rem;min-width:0}.skeleton-avatar{flex:0 0 auto;width:3rem;height:3rem;border-radius:9999px}.skeleton-text{display:flex;flex-direction:column;min-width:0;flex:1;gap:.5rem}.skeleton-name{height:1rem;width:60%;border-radius:.25rem}.skeleton-description{height:.75rem;width:40%;border-radius:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: AXListComponent, selector: "ax-list", inputs: ["id", "name", "disabled", "readonly", "valueField", "textField", "textTemplate", "disabledField", "multiple", "selectionMode", "isItemTruncated", "showItemTooltip", "dataSource", "itemHeight", "itemTemplate", "emptyTemplate", "loadingTemplate", "checkbox"], outputs: ["onValueChanged", "disabledChange", "readonlyChange", "onBlur", "onFocus", "onItemClick", "onItemSelected", "onScrolledIndexChanged"] }, { kind: "component", type: AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "component", type: AXPAvatarComponent, selector: "axp-avatar", inputs: ["size", "src", "fullName", "showTitle", "fallbackText", "placeholder"] }, { kind: "component", type: AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "component", type: AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1758
1768
|
}
|
|
1759
1769
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatWithAssistDialogComponent, decorators: [{
|
|
1760
1770
|
type: Component,
|
|
@@ -1907,11 +1917,11 @@ class AXEAIConversationExtensionModule {
|
|
|
1907
1917
|
provideCommandSetups([
|
|
1908
1918
|
{
|
|
1909
1919
|
key: CONVERSATION_START_ASSIST_CHAT_COMMAND,
|
|
1910
|
-
command: () => import('./acorex-platform-extension-ai-conversation-client-start-assist-chat.command-
|
|
1920
|
+
command: () => import('./acorex-platform-extension-ai-conversation-client-start-assist-chat.command-qYtaBoTP.mjs').then((m) => m.AXMConversationStartAssistChatCommand),
|
|
1911
1921
|
},
|
|
1912
1922
|
{
|
|
1913
1923
|
key: CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND,
|
|
1914
|
-
command: () => import('./acorex-platform-extension-ai-conversation-client-send-assist-chat-message.command-
|
|
1924
|
+
command: () => import('./acorex-platform-extension-ai-conversation-client-send-assist-chat-message.command-B3rJWdsz.mjs').then((m) => m.AXMConversationSendAssistChatMessageCommand),
|
|
1915
1925
|
},
|
|
1916
1926
|
]),
|
|
1917
1927
|
], imports: [AXPComponentSlotModule.forChild({
|
|
@@ -1975,11 +1985,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1975
1985
|
provideCommandSetups([
|
|
1976
1986
|
{
|
|
1977
1987
|
key: CONVERSATION_START_ASSIST_CHAT_COMMAND,
|
|
1978
|
-
command: () => import('./acorex-platform-extension-ai-conversation-client-start-assist-chat.command-
|
|
1988
|
+
command: () => import('./acorex-platform-extension-ai-conversation-client-start-assist-chat.command-qYtaBoTP.mjs').then((m) => m.AXMConversationStartAssistChatCommand),
|
|
1979
1989
|
},
|
|
1980
1990
|
{
|
|
1981
1991
|
key: CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND,
|
|
1982
|
-
command: () => import('./acorex-platform-extension-ai-conversation-client-send-assist-chat-message.command-
|
|
1992
|
+
command: () => import('./acorex-platform-extension-ai-conversation-client-send-assist-chat-message.command-B3rJWdsz.mjs').then((m) => m.AXMConversationSendAssistChatMessageCommand),
|
|
1983
1993
|
},
|
|
1984
1994
|
]),
|
|
1985
1995
|
],
|
|
@@ -1991,4 +2001,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1991
2001
|
*/
|
|
1992
2002
|
|
|
1993
2003
|
export { AXMChatAssistLauncherService as A, AXCConversationAssistResponseService as a, AXEAIConversationExtensionModule as b, AXEConversationAssistResponseService as c };
|
|
1994
|
-
//# sourceMappingURL=acorex-platform-extension-ai-conversation-client-acorex-platform-extension-ai-conversation-client-
|
|
2004
|
+
//# sourceMappingURL=acorex-platform-extension-ai-conversation-client-acorex-platform-extension-ai-conversation-client-CRjLZIU5.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-extension-ai-conversation-client-acorex-platform-extension-ai-conversation-client-CRjLZIU5.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 { AXLocaleService } from '@acorex/core/locale';\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 { toSignal } from '@angular/core/rxjs-interop';\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 '[attr.dir]': 'textDirection()',\n '[style.direction]': 'textDirection()',\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__hero\">\n @if (compact()) {\n <span class=\"axm-chat-empty-assist-composer__hero-icon\" aria-hidden=\"true\">\n <ax-icon icon=\"fa-regular fa-sparkles\"></ax-icon>\n </span>\n }\n <div class=\"axm-chat-empty-assist-composer__caption\">\n {{ '@conversation:chat.empty-assist.caption' | translate | async }}\n </div>\n </div>\n\n <div class=\"axm-chat-empty-assist-composer__composer-row\">\n @if (!compact()) {\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 } @else {\n <ax-button\n color=\"default\"\n look=\"blank\"\n class=\"axm-chat-empty-assist-composer__assist-trigger rounded-full\"\n [iconOnly]=\"true\"\n [disabled]=\"isBusy()\"\n [attr.aria-label]=\"('@conversation:chat.empty-assist.assist-default' | translate | async) ?? ''\"\n >\n <ax-icon icon=\"fa-regular fa-sparkles\"></ax-icon>\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\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\n color=\"primary\"\n class=\"axm-chat-empty-assist-composer__send rounded-full\"\n [disabled]=\"!canSend()\"\n [text]=\"sending() ? '…' : ''\"\n [attr.aria-label]=\"('@conversation:comments.actions.send.title' | translate | async) ?? ''\"\n (onClick)=\"send()\"\n >\n @if (!sending()) {\n <ax-icon icon=\"fa-light fa-arrow-up\"></ax-icon>\n }\n </ax-button>\n </div>\n\n @if (starterPromptItems().length > 0) {\n <div class=\"axm-chat-empty-assist-composer__suggestions\">\n @if (compact()) {\n <p class=\"axm-chat-empty-assist-composer__suggestions-label\">\n {{ '@conversation:chat.starter-prompts.section-label' | translate | async }}\n </p>\n }\n <axm-assist-suggestion-chips [items]=\"starterPromptItems()\" [compact]=\"compact()\" [sendInPlace]=\"sendStarterPromptsInPlace()\" [disabled]=\"isBusy()\" (conversationCreated)=\"conversationCreated.emit($event)\" />\n </div>\n }\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__hero {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.625rem;\n }\n\n .axm-chat-empty-assist-composer__hero-icon {\n display: grid;\n place-items: center;\n width: 2.5rem;\n height: 2.5rem;\n border-radius: 0.875rem;\n color: rgb(var(--ax-sys-color-primary-600));\n background: linear-gradient(145deg, rgba(var(--ax-sys-color-primary-500), 0.14), rgba(var(--ax-sys-color-primary-500), 0.04));\n border: 1px solid rgba(var(--ax-sys-color-primary-500), 0.18);\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 color: rgb(var(--ax-sys-color-on-surface));\n }\n\n .axm-chat-empty-assist-composer__composer-row {\n display: flex;\n gap: 0.375rem;\n align-items: flex-end;\n padding: 0.5rem;\n border-radius: 2em;\n border: 1px solid rgb(var(--ax-sys-color-border-light-surface));\n background: rgb(var(--ax-sys-color-lightest-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__send {\n flex-shrink: 0;\n }\n\n .axm-chat-empty-assist-composer__suggestions {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n }\n\n .axm-chat-empty-assist-composer__suggestions-label {\n margin: 0;\n padding-inline: 0.125rem;\n font-size: 0.6875rem;\n font-weight: 600;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: rgb(var(--ax-sys-color-on-surface));\n opacity: 0.52;\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 text-align: start;\n color: rgb(var(--ax-sys-color-on-surface));\n }\n\n .axm-chat-empty-assist-composer__textarea::placeholder {\n color: rgb(var(--ax-sys-color-on-surface));\n opacity: 0.45;\n }\n\n :host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer {\n width: 100%;\n max-width: none;\n gap: 0.875rem;\n }\n\n :host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__hero {\n gap: 0.5rem;\n }\n\n :host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__caption {\n margin-bottom: 0;\n font-size: 1.125rem;\n line-height: 1.35;\n font-weight: 600;\n letter-spacing: -0.015em;\n }\n\n :host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__composer-row {\n gap: 0.25rem;\n align-items: center;\n padding-block: 0.375rem;\n padding-inline: 0.375rem 0.4375rem;\n border-radius: 1.5rem;\n border-color: rgba(var(--ax-sys-color-border-light-surface), 0.95);\n background: rgba(var(--ax-sys-color-surface), 0.35);\n }\n\n :host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__assist-trigger {\n color: rgb(var(--ax-sys-color-primary-600));\n opacity: 0.9;\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 :host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__suggestions {\n gap: 0.375rem;\n margin-top: 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 localeService = inject(AXLocaleService);\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 private readonly localeProfile = toSignal(this.localeService.profileChanged$, {\n initialValue: this.localeService.activeProfile(),\n });\n\n readonly textDirection = computed(() =>\n this.localeProfile()?.i18nMeta?.rtl === true ? 'rtl' : 'ltr',\n );\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 { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, 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\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.markComposerGenerating(null, false);\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 return;\n }\n\n if (!generating) {\n this.composerGenerationConversationId = null;\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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"}
|
|
@@ -6,7 +6,7 @@ import { AXMEntityChatService, CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND } f
|
|
|
6
6
|
import * as i0 from '@angular/core';
|
|
7
7
|
import { inject, Injectable } from '@angular/core';
|
|
8
8
|
import { Router } from '@angular/router';
|
|
9
|
-
import { A as AXMChatAssistLauncherService } from './acorex-platform-extension-ai-conversation-client-acorex-platform-extension-ai-conversation-client-
|
|
9
|
+
import { A as AXMChatAssistLauncherService } from './acorex-platform-extension-ai-conversation-client-acorex-platform-extension-ai-conversation-client-CRjLZIU5.mjs';
|
|
10
10
|
|
|
11
11
|
class AXMConversationSendAssistChatMessageCommand {
|
|
12
12
|
constructor() {
|
|
@@ -93,4 +93,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
93
93
|
}] });
|
|
94
94
|
|
|
95
95
|
export { AXMConversationSendAssistChatMessageCommand };
|
|
96
|
-
//# sourceMappingURL=acorex-platform-extension-ai-conversation-client-send-assist-chat-message.command-
|
|
96
|
+
//# sourceMappingURL=acorex-platform-extension-ai-conversation-client-send-assist-chat-message.command-B3rJWdsz.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-extension-ai-conversation-client-send-assist-chat-message.command-
|
|
1
|
+
{"version":3,"file":"acorex-platform-extension-ai-conversation-client-send-assist-chat-message.command-B3rJWdsz.mjs","sources":["../../../../libs/extensions/ai/conversation/client/src/lib/commands/send-assist-chat-message.command.ts"],"sourcesContent":["import { AXToastService } from '@acorex/components/toast';\nimport { AXConversationService, type AXConversationMessagePayload } from '@acorex/components/conversation';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport {\n AXMEntityChatService,\n CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND,\n} from '@acorex-platform/module-conversation-client';\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AXMChatAssistLauncherService } from '../services/assist-chat-launcher.service';\n\nexport interface AXMSendAssistChatMessageOptions {\n text: string;\n conversationId?: string;\n assistId?: string;\n targetId?: string;\n navigate?: boolean;\n /** When provided (with {@link entityType}), a new chat is created as an entity-scoped conversation. */\n entityId?: string;\n entityType?: string;\n}\n\nexport interface AXMSendAssistChatMessageResult {\n conversationId: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationSendAssistChatMessageCommand\n implements AXPCommand<AXMSendAssistChatMessageOptions, AXMSendAssistChatMessageResult>\n{\n private readonly conversationService = inject(AXConversationService);\n private readonly launcher = inject(AXMChatAssistLauncherService);\n private readonly entityChatService = inject(AXMEntityChatService);\n private readonly translationService = inject(AXTranslationService);\n private readonly toastService = inject(AXToastService);\n private readonly router = inject(Router);\n private readonly sessionService = inject(AXPSessionService);\n\n async execute(\n input: AXMSendAssistChatMessageOptions | unknown,\n ): AXPCommandExecuteResultPromise<AXMSendAssistChatMessageResult> {\n const raw = input as { options?: Partial<AXMSendAssistChatMessageOptions> } & Record<string, unknown>;\n const options: Partial<AXMSendAssistChatMessageOptions> = {\n ...(raw.options ?? {}),\n ...(raw as unknown as Partial<AXMSendAssistChatMessageOptions>),\n };\n\n const text = (typeof options.text === 'string' ? options.text : '').trim();\n if (!text) {\n return {\n success: false,\n message: { text: 'text is required for Conversation:SendAssistChatMessage.' },\n };\n }\n\n let conversationId =\n (typeof options.conversationId === 'string' ? options.conversationId.trim() : '') ||\n this.conversationService.activeConversationId()?.trim() ||\n '';\n\n try {\n if (!conversationId) {\n const assistId =\n (typeof options.assistId === 'string' ? options.assistId.trim() : '') ||\n (typeof options.targetId === 'string' ? options.targetId.trim() : '');\n if (!assistId) {\n return {\n success: false,\n message: {\n text: 'conversationId or assistId is required for Conversation:SendAssistChatMessage.',\n },\n };\n }\n\n const entityId = typeof options.entityId === 'string' ? options.entityId.trim() : '';\n const entityType = typeof options.entityType === 'string' ? options.entityType.trim() : '';\n\n if (entityId && entityType) {\n const conversation = await this.entityChatService.createEntityChat({ entityId, entityType }, assistId);\n conversationId = conversation.id;\n } else {\n const started = await this.launcher.startAssistChat({\n targetId: assistId,\n navigate: false,\n });\n if (!started?.conversation.id) {\n return { success: false };\n }\n conversationId = started.conversation.id;\n }\n }\n\n const payload: AXConversationMessagePayload = { type: 'text', text };\n await this.conversationService.sendMessage({\n conversationId,\n type: 'text',\n payload,\n });\n\n if (options.navigate !== false) {\n await this.router.navigate([this.#applicationRouteSegment(), 'chat', conversationId]);\n }\n\n return { success: true, kind: 'object', data: { conversationId } };\n } catch (error: unknown) {\n console.error(`[${CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND}] Failed:`, error);\n const message = await this.translationService.translateAsync(\n '@conversation:chat.starter-prompts.errors.send',\n );\n this.toastService.danger(message);\n return { success: false };\n }\n }\n\n #applicationRouteSegment(): string {\n return this.sessionService.application?.name ?? 'platform';\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, Injectable } from '@angular/core';
|
|
3
|
-
import { A as AXMChatAssistLauncherService } from './acorex-platform-extension-ai-conversation-client-acorex-platform-extension-ai-conversation-client-
|
|
3
|
+
import { A as AXMChatAssistLauncherService } from './acorex-platform-extension-ai-conversation-client-acorex-platform-extension-ai-conversation-client-CRjLZIU5.mjs';
|
|
4
4
|
|
|
5
5
|
class AXMConversationStartAssistChatCommand {
|
|
6
6
|
constructor() {
|
|
@@ -38,4 +38,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
38
38
|
}] });
|
|
39
39
|
|
|
40
40
|
export { AXMConversationStartAssistChatCommand };
|
|
41
|
-
//# sourceMappingURL=acorex-platform-extension-ai-conversation-client-start-assist-chat.command-
|
|
41
|
+
//# sourceMappingURL=acorex-platform-extension-ai-conversation-client-start-assist-chat.command-qYtaBoTP.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-extension-ai-conversation-client-start-assist-chat.command-
|
|
1
|
+
{"version":3,"file":"acorex-platform-extension-ai-conversation-client-start-assist-chat.command-qYtaBoTP.mjs","sources":["../../../../libs/extensions/ai/conversation/client/src/lib/commands/start-assist-chat.command.ts"],"sourcesContent":["import { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { Injectable, inject } from '@angular/core';\nimport { AXMChatAssistLauncherService } from '../services/assist-chat-launcher.service';\nimport type { AXMStartAssistChatOptions, AXMStartAssistChatResult } from '../services/assist-chat-launcher.types';\n\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationStartAssistChatCommand\n implements AXPCommand<AXMStartAssistChatOptions, AXMStartAssistChatResult | null>\n{\n private readonly launcher = inject(AXMChatAssistLauncherService);\n\n async execute(\n input: AXMStartAssistChatOptions | unknown,\n ): AXPCommandExecuteResultPromise<AXMStartAssistChatResult | null> {\n const raw = input as { options?: Partial<AXMStartAssistChatOptions> } & Record<string, unknown>;\n const options: Partial<AXMStartAssistChatOptions> = {\n ...(raw.options ?? {}),\n ...(raw as unknown as Partial<AXMStartAssistChatOptions>),\n };\n\n const targetId =\n (typeof options.targetId === 'string' ? options.targetId.trim() : '') ||\n (typeof options.assistId === 'string' ? options.assistId.trim() : '');\n if (!targetId) {\n return {\n success: false,\n message: { text: 'targetId is required for Conversation:StartAssistChat.' },\n };\n }\n\n const result = await this.launcher.startAssistChat({\n targetId,\n navigate: options.navigate,\n });\n\n if (!result) {\n return { success: false };\n }\n\n return { success: true, kind: 'object', data: result };\n }\n}\n"],"names":[],"mappings":";;;;MAOa,qCAAqC,CAAA;AADlD,IAAA,WAAA,GAAA;AAImB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAgCjE,IAAA;IA9BC,MAAM,OAAO,CACX,KAA0C,EAAA;QAE1C,MAAM,GAAG,GAAG,KAAmF;AAC/F,QAAA,MAAM,OAAO,GAAuC;AAClD,YAAA,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;AACtB,YAAA,GAAI,GAAqD;SAC1D;QAED,MAAM,QAAQ,GACZ,CAAC,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE;aACnE,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;QACvE,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,wDAAwD,EAAE;aAC5E;QACH;QAEA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;YACjD,QAAQ;YACR,QAAQ,EAAE,OAAO,CAAC,QAAQ;AAC3B,SAAA,CAAC;QAEF,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3B;AAEA,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;IACxD;8GAlCW,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qCAAqC,cADxB,MAAM,EAAA,CAAA,CAAA;;2FACnB,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBADjD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { a as AXCConversationAssistResponseService, b as AXEAIConversationExtensionModule, c as AXEConversationAssistResponseService } from './acorex-platform-extension-ai-conversation-client-acorex-platform-extension-ai-conversation-client-
|
|
1
|
+
export { a as AXCConversationAssistResponseService, b as AXEAIConversationExtensionModule, c as AXEConversationAssistResponseService } from './acorex-platform-extension-ai-conversation-client-acorex-platform-extension-ai-conversation-client-CRjLZIU5.mjs';
|
|
2
2
|
//# sourceMappingURL=acorex-platform-extension-ai-conversation-client.mjs.map
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-extension-ai-conversation-client-acorex-platform-extension-ai-conversation-client-PyjS3LJH.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__hero\">\n @if (compact()) {\n <span class=\"axm-chat-empty-assist-composer__hero-icon\" aria-hidden=\"true\">\n <ax-icon icon=\"fa-regular fa-sparkles\"></ax-icon>\n </span>\n }\n <div class=\"axm-chat-empty-assist-composer__caption\">\n {{ '@conversation:chat.empty-assist.caption' | translate | async }}\n </div>\n </div>\n\n <div class=\"axm-chat-empty-assist-composer__composer-row\">\n @if (!compact()) {\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 } @else {\n <ax-button\n color=\"default\"\n look=\"blank\"\n class=\"axm-chat-empty-assist-composer__assist-trigger rounded-full\"\n [iconOnly]=\"true\"\n [disabled]=\"isBusy()\"\n [attr.aria-label]=\"('@conversation:chat.empty-assist.assist-default' | translate | async) ?? ''\"\n >\n <ax-icon icon=\"fa-regular fa-sparkles\"></ax-icon>\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\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\n color=\"primary\"\n class=\"axm-chat-empty-assist-composer__send rounded-full\"\n [disabled]=\"!canSend()\"\n [text]=\"sending() ? '…' : ''\"\n [attr.aria-label]=\"('@conversation:comments.actions.send.title' | translate | async) ?? ''\"\n (onClick)=\"send()\"\n >\n @if (!sending()) {\n <ax-icon icon=\"fa-light fa-arrow-up\"></ax-icon>\n }\n </ax-button>\n </div>\n\n @if (starterPromptItems().length > 0) {\n <div class=\"axm-chat-empty-assist-composer__suggestions\">\n @if (compact()) {\n <p class=\"axm-chat-empty-assist-composer__suggestions-label\">\n {{ '@conversation:chat.starter-prompts.section-label' | translate | async }}\n </p>\n }\n <axm-assist-suggestion-chips [items]=\"starterPromptItems()\" [compact]=\"compact()\" [sendInPlace]=\"sendStarterPromptsInPlace()\" [disabled]=\"isBusy()\" (conversationCreated)=\"conversationCreated.emit($event)\" />\n </div>\n }\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__hero {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.625rem;\n }\n\n .axm-chat-empty-assist-composer__hero-icon {\n display: grid;\n place-items: center;\n width: 2.5rem;\n height: 2.5rem;\n border-radius: 0.875rem;\n color: rgb(var(--ax-sys-color-primary-600));\n background: linear-gradient(145deg, rgba(var(--ax-sys-color-primary-500), 0.14), rgba(var(--ax-sys-color-primary-500), 0.04));\n border: 1px solid rgba(var(--ax-sys-color-primary-500), 0.18);\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 color: rgb(var(--ax-sys-color-on-surface));\n }\n\n .axm-chat-empty-assist-composer__composer-row {\n display: flex;\n gap: 0.375rem;\n align-items: flex-end;\n padding: 0.5rem;\n border-radius: 2em;\n border: 1px solid rgb(var(--ax-sys-color-border-light-surface));\n background: rgb(var(--ax-sys-color-lightest-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__send {\n flex-shrink: 0;\n }\n\n .axm-chat-empty-assist-composer__suggestions {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n }\n\n .axm-chat-empty-assist-composer__suggestions-label {\n margin: 0;\n padding-inline: 0.125rem;\n font-size: 0.6875rem;\n font-weight: 600;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: rgb(var(--ax-sys-color-on-surface));\n opacity: 0.52;\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 color: rgb(var(--ax-sys-color-on-surface));\n }\n\n .axm-chat-empty-assist-composer__textarea::placeholder {\n color: rgb(var(--ax-sys-color-on-surface));\n opacity: 0.45;\n }\n\n :host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer {\n width: 100%;\n max-width: none;\n gap: 0.875rem;\n }\n\n :host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__hero {\n gap: 0.5rem;\n }\n\n :host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__caption {\n margin-bottom: 0;\n font-size: 1.125rem;\n line-height: 1.35;\n font-weight: 600;\n letter-spacing: -0.015em;\n }\n\n :host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__composer-row {\n gap: 0.25rem;\n align-items: center;\n padding: 0.375rem 0.4375rem 0.375rem 0.375rem;\n border-radius: 1.5rem;\n border-color: rgba(var(--ax-sys-color-border-light-surface), 0.95);\n background: rgba(var(--ax-sys-color-surface), 0.35);\n }\n\n :host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__assist-trigger {\n color: rgb(var(--ax-sys-color-primary-600));\n opacity: 0.9;\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 :host(.axm-chat-empty-assist-composer-host--compact) .axm-chat-empty-assist-composer__suggestions {\n gap: 0.375rem;\n margin-top: 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 { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, 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\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.markComposerGenerating(null, false);\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 return;\n }\n\n if (!generating) {\n this.composerGenerationConversationId = null;\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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"}
|