@acorex-platform/module-conversation-client 0.0.38 → 0.0.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/fesm2022/{acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-XTzQQhii.mjs → acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-DUR2oyfP.mjs} +9727 -8104
  2. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-DUR2oyfP.mjs.map +1 -0
  3. package/fesm2022/{acorex-platform-module-conversation-client-after-message-sent.command-BMGagKtP.mjs → acorex-platform-module-conversation-client-after-message-sent.command-qTWATpgC.mjs} +2 -2
  4. package/fesm2022/{acorex-platform-module-conversation-client-after-message-sent.command-BMGagKtP.mjs.map → acorex-platform-module-conversation-client-after-message-sent.command-qTWATpgC.mjs.map} +1 -1
  5. package/fesm2022/{acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-D1SDsHvl.mjs → acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-DQWhOmBE.mjs} +8 -7
  6. package/fesm2022/{acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-D1SDsHvl.mjs.map → acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-DQWhOmBE.mjs.map} +1 -1
  7. package/fesm2022/acorex-platform-module-conversation-client-assist-message-renderer.component-DyVepuaW.mjs +1756 -0
  8. package/fesm2022/acorex-platform-module-conversation-client-assist-message-renderer.component-DyVepuaW.mjs.map +1 -0
  9. package/fesm2022/acorex-platform-module-conversation-client-assist-tool-detail-popup.component-D8na_1QJ.mjs +120 -0
  10. package/fesm2022/{acorex-platform-module-conversation-client-assist-tool-detail-popup.component-BV1YH96m.mjs.map → acorex-platform-module-conversation-client-assist-tool-detail-popup.component-D8na_1QJ.mjs.map} +1 -1
  11. package/fesm2022/{acorex-platform-module-conversation-client-chat-call-session-page.component-nE7xP4bF.mjs → acorex-platform-module-conversation-client-chat-call-session-page.component-BeS4Duip.mjs} +747 -25
  12. package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-BeS4Duip.mjs.map +1 -0
  13. package/fesm2022/{acorex-platform-module-conversation-client-chat-call-start-popup.component-DXkqkS50.mjs → acorex-platform-module-conversation-client-chat-call-start-popup.component-BbEhkLLh.mjs} +4 -4
  14. package/fesm2022/{acorex-platform-module-conversation-client-chat-call-start-popup.component-DXkqkS50.mjs.map → acorex-platform-module-conversation-client-chat-call-start-popup.component-BbEhkLLh.mjs.map} +1 -1
  15. package/fesm2022/{acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-SYCtAqcV.mjs → acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-Bnbj0e6M.mjs} +3 -3
  16. package/fesm2022/{acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-SYCtAqcV.mjs.map → acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-Bnbj0e6M.mjs.map} +1 -1
  17. package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-panel.component-bwT1-lAn.mjs +497 -0
  18. package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-panel.component-bwT1-lAn.mjs.map +1 -0
  19. package/fesm2022/{acorex-platform-module-conversation-client-comments-page.component-Dv_x3ztZ.mjs → acorex-platform-module-conversation-client-comments-page.component-BxUz9jTX.mjs} +2 -2
  20. package/fesm2022/{acorex-platform-module-conversation-client-comments-page.component-Dv_x3ztZ.mjs.map → acorex-platform-module-conversation-client-comments-page.component-BxUz9jTX.mjs.map} +1 -1
  21. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-audience.mjs +277 -0
  22. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-audience.mjs.map +1 -0
  23. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-post.mjs +530 -0
  24. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-post.mjs.map +1 -0
  25. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-receipt.mjs +206 -0
  26. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-receipt.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-message.mjs +65 -17
  28. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-message.mjs.map +1 -1
  29. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-room.mjs +231 -59
  30. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-room.mjs.map +1 -1
  31. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-CV_sCYGf.mjs +87 -0
  32. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-CV_sCYGf.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-audience.entity-DyaUcESJ.mjs +213 -0
  34. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-audience.entity-DyaUcESJ.mjs.map +1 -0
  35. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-post.entity-CbBcChEt.mjs +466 -0
  36. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-post.entity-CbBcChEt.mjs.map +1 -0
  37. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-receipt.entity-DtRFj8zV.mjs +142 -0
  38. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-receipt.entity-DtRFj8zV.mjs.map +1 -0
  39. package/fesm2022/{acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-Dz7cO1P4.mjs → acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-CJk1wEvA.mjs} +35 -19
  40. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-CJk1wEvA.mjs.map +1 -0
  41. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-Ctt7qzfF.mjs +403 -0
  42. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-Ctt7qzfF.mjs.map +1 -0
  43. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog.mjs +1 -1
  44. package/fesm2022/acorex-platform-module-conversation-client-contracts.mjs +846 -4
  45. package/fesm2022/acorex-platform-module-conversation-client-contracts.mjs.map +1 -1
  46. package/fesm2022/acorex-platform-module-conversation-client-local-entities.mjs +3 -0
  47. package/fesm2022/acorex-platform-module-conversation-client-local-entities.mjs.map +1 -1
  48. package/fesm2022/{acorex-platform-module-conversation-client-mark-conversation-unread.command-8NoSuUwe.mjs → acorex-platform-module-conversation-client-mark-conversation-unread.command-juoWxu7I.mjs} +2 -2
  49. package/fesm2022/{acorex-platform-module-conversation-client-mark-conversation-unread.command-8NoSuUwe.mjs.map → acorex-platform-module-conversation-client-mark-conversation-unread.command-juoWxu7I.mjs.map} +1 -1
  50. package/fesm2022/{acorex-platform-module-conversation-client-open-chat.command-BgJ0Z36e.mjs → acorex-platform-module-conversation-client-open-chat.command-ridcdmj7.mjs} +2 -2
  51. package/fesm2022/{acorex-platform-module-conversation-client-open-chat.command-BgJ0Z36e.mjs.map → acorex-platform-module-conversation-client-open-chat.command-ridcdmj7.mjs.map} +1 -1
  52. package/fesm2022/{acorex-platform-module-conversation-client-retry-assist-response.command-lcNz4Hpu.mjs → acorex-platform-module-conversation-client-retry-assist-response.command-BsYxaH3g.mjs} +2 -2
  53. package/fesm2022/{acorex-platform-module-conversation-client-retry-assist-response.command-lcNz4Hpu.mjs.map → acorex-platform-module-conversation-client-retry-assist-response.command-BsYxaH3g.mjs.map} +1 -1
  54. package/fesm2022/{acorex-platform-module-conversation-client-sync-read-state.command-DxccFsD9.mjs → acorex-platform-module-conversation-client-sync-read-state.command-DsCyIdEk.mjs} +7 -2
  55. package/fesm2022/acorex-platform-module-conversation-client-sync-read-state.command-DsCyIdEk.mjs.map +1 -0
  56. package/fesm2022/acorex-platform-module-conversation-client.mjs +1 -1
  57. package/package.json +14 -2
  58. package/types/acorex-platform-module-conversation-client-contracts-entities-channel-audience.d.ts +5 -0
  59. package/types/acorex-platform-module-conversation-client-contracts-entities-channel-post.d.ts +5 -0
  60. package/types/acorex-platform-module-conversation-client-contracts-entities-channel-receipt.d.ts +5 -0
  61. package/types/acorex-platform-module-conversation-client-contracts.d.ts +432 -2
  62. package/types/acorex-platform-module-conversation-client.d.ts +676 -161
  63. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-XTzQQhii.mjs.map +0 -1
  64. package/fesm2022/acorex-platform-module-conversation-client-assist-tool-detail-popup.component-BV1YH96m.mjs +0 -120
  65. package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-nE7xP4bF.mjs.map +0 -1
  66. package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-panel.component-51PtojIM.mjs +0 -482
  67. package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-panel.component-51PtojIM.mjs.map +0 -1
  68. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-Cy3LwYMZ.mjs +0 -52
  69. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-Cy3LwYMZ.mjs.map +0 -1
  70. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-Dz7cO1P4.mjs.map +0 -1
  71. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-B9txvc3y.mjs +0 -263
  72. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-B9txvc3y.mjs.map +0 -1
  73. package/fesm2022/acorex-platform-module-conversation-client-sync-read-state.command-DxccFsD9.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-conversation-client-assist-message-renderer.component-DyVepuaW.mjs","sources":["../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/utils/assist-delegated-agent-detail.dialog.ts","../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/utils/assist-tool-detail.dialog.ts","../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/utils/assist-entity-card-refs.util.ts","../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/message-renderers/chat-entity-card.component.ts","../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/message-renderers/chat-entity-card.component.html","../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/utils/assist-segment-direction.util.ts","../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/message-renderers/assist-bot-audio-line.component.ts","../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/message-renderers/assist-bot-image-line.component.ts","../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/message-renderers/assist-bot-file-line.component.ts","../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/message-renderers/assist-message-renderer.component.ts","../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/message-renderers/assist-message-renderer.component.html"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n axpAiParseSupervisorAgentToolName,\n type AXPAiDelegatedAgentTranscriptEntry,\n} from '@acorex-platform/module-ai-management-client';\nimport type { AXMAssistDelegatedAgentDetailPopupData } from '../message-renderers/assist-delegated-agent-detail-popup.component';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMOpenAssistDelegatedAgentDetailOptions {\n callId: string;\n toolName: string;\n delegatedTranscriptsByCallId: Record<string, AXPAiDelegatedAgentTranscriptEntry>;\n resolvedAgentLabel?: string;\n resolveCatalogTitle?: (agentCatalogId: string) => string | undefined;\n agentTitleById?: Record<string, string>;\n translationService: AXTranslationService;\n popupService: AXPopupService;\n}\n\n//#endregion\n\n//#region ---- Dialog ----\n\n/**\n * Opens a read-only specialist sub-run transcript for one delegated {@code agent:*} tool call.\n * Renders {@link AXPAiChatMessage} lines (role + responses[]) in conversation-owned UI.\n */\nexport async function axmOpenAssistDelegatedAgentDetailDialog(\n options: AXMOpenAssistDelegatedAgentDetailOptions,\n): Promise<void> {\n const callId = options.callId?.trim() ?? '';\n if (!callId) {\n return;\n }\n\n const entry = options.delegatedTranscriptsByCallId[callId];\n const catalogId = axpAiParseSupervisorAgentToolName(options.toolName);\n const catalogTitle =\n catalogId != null ? options.resolveCatalogTitle?.(catalogId)?.trim() : undefined;\n const titleBase =\n options.resolvedAgentLabel?.trim() ||\n entry?.agentName?.trim() ||\n catalogTitle ||\n options.toolName.trim() ||\n callId;\n\n const [titleSuffix, missingHint] = await Promise.all([\n options.translationService.translateAsync(\n '@conversation:chat.assist-renderer.delegated-agent.dialog-title-suffix',\n ),\n options.translationService.translateAsync(\n '@conversation:chat.assist-renderer.delegated-agent.transcript-missing',\n ),\n ]);\n\n const comp = (await import('../message-renderers/assist-delegated-agent-detail-popup.component'))\n .AXMAssistDelegatedAgentDetailPopupComponent;\n\n const data: AXMAssistDelegatedAgentDetailPopupData = {\n delegationCallId: callId,\n messages: entry?.messages ?? [],\n runInput: entry?.runInput,\n agentName: entry?.agentName?.trim() || titleBase,\n emptyHint: entry?.messages?.length ? undefined : missingHint,\n agentTitleById: options.agentTitleById ?? (catalogId && catalogTitle ? { [catalogId]: catalogTitle } : {}),\n };\n\n await options.popupService.open(comp, {\n title: `${titleBase} — ${titleSuffix ?? 'Full Specialist Run'}`,\n size: 'lg',\n data,\n });\n}\n\n//#endregion\n","//#region ---- Imports -----\n\nimport { AXPopupService } from '@acorex/components/popup';\nimport type { AXMAssistToolDetailPopupData } from '../message-renderers/assist-tool-detail-popup.component';\n\n//#endregion\n\n//#region ---- Dialog -----\n\nexport interface AXMOpenAssistToolDetailOptions {\n toolTitle: string;\n inputJson: string;\n outputJson?: string;\n popupService: AXPopupService;\n}\n\nexport async function axmOpenAssistToolDetailDialog(options: AXMOpenAssistToolDetailOptions): Promise<void> {\n const comp = (await import('../message-renderers/assist-tool-detail-popup.component'))\n .AXMAssistToolDetailPopupComponent;\n\n const data: AXMAssistToolDetailPopupData = {\n toolTitle: options.toolTitle.trim() || 'Tool',\n inputJson: options.inputJson,\n outputJson: options.outputJson,\n };\n\n await options.popupService.open(comp, {\n title: data.toolTitle,\n size: 'md',\n data,\n });\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXPAiChatMessage } from '@acorex-platform/module-ai-management-client';\nimport type { AXPPageContextSnapshot } from '@acorex-platform/framework-client/core';\nimport { axmResolveI18nLabel } from './assist-i18n-label.util';\n\n//#endregion\n\n//#region ----- Types -----\n\n/** One entity row to render as {@link axp-entity-card} in an assist answer. */\nexport interface AxmAssistEntityCardRef {\n entity: string;\n id: string;\n variant: 'card' | 'compact';\n}\n\n/** Visible page-chrome action result (filter/search) shown above entity cards. */\nexport interface AxmAssistPageActionResult {\n kind: 'filter' | 'search' | 'view' | 'other';\n label: string;\n undoActionId?: string;\n undoArgs?: Record<string, unknown>;\n}\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst ENTITY_CARD_COMMANDS = new Set([\n 'Entity:Query:Default',\n 'Entity:GetDetails',\n 'Entity:Insert:Default',\n 'Entity:Create',\n 'Entity:Update:Default',\n]);\n\nconst PAGE_ACTION_COMMAND = 'Page:RunAction';\n\nconst MAX_ENTITY_CARDS = 3;\n\n//#endregion\n\n//#region ----- Public API -----\n\n/**\n * Collects unique entity rows from assist tool calls so the transcript can render\n * {@link axp-entity-card} instead of dumping query JSON.\n */\nexport function axmAssistCollectEntityCardRefs(transcript: AXPAiChatMessage[]): AxmAssistEntityCardRef[] {\n const resultsByCallId = collectToolResultsByCallId(transcript);\n const refs: AxmAssistEntityCardRef[] = [];\n const seen = new Set<string>();\n\n for (const line of transcript) {\n if (line.role !== 'assistant') {\n continue;\n }\n for (const seg of line.responses) {\n if (seg.type !== 'tool' && seg.type !== 'agent') {\n continue;\n }\n const command = seg.content.command?.trim();\n if (!command || !ENTITY_CARD_COMMANDS.has(command)) {\n continue;\n }\n const entity = readEntityName(seg.content.arguments);\n if (!entity) {\n continue;\n }\n const result = typeof seg.callId === 'string' ? resultsByCallId.get(seg.callId.trim()) : undefined;\n const ids = collectRecordIds(seg.content.arguments, result);\n for (const id of ids) {\n const key = `${entity}:${id}`;\n if (seen.has(key) || refs.length >= MAX_ENTITY_CARDS) {\n continue;\n }\n seen.add(key);\n refs.push({ entity, id, variant: 'compact' });\n }\n }\n }\n\n if (refs.length === 1) {\n refs[0].variant = 'card';\n }\n return refs;\n}\n\n/** Reads a successful Page:RunAction tool result for the compact “filter applied” strip. */\nexport function axmAssistReadPageActionResult(transcript: AXPAiChatMessage[]): AxmAssistPageActionResult | null {\n const resultsByCallId = collectToolResultsByCallId(transcript);\n for (let i = transcript.length - 1; i >= 0; i -= 1) {\n const line = transcript[i];\n if (line.role !== 'assistant') {\n continue;\n }\n for (let s = line.responses.length - 1; s >= 0; s -= 1) {\n const seg = line.responses[s];\n if (seg.type !== 'tool' && seg.type !== 'agent') {\n continue;\n }\n if (seg.content.command?.trim() !== PAGE_ACTION_COMMAND) {\n continue;\n }\n const callId = typeof seg.callId === 'string' ? seg.callId.trim() : '';\n const parsed = parseUnknown(resultsByCallId.get(callId));\n const snapshot = readSnapshot(parsed);\n const args = asRecord(seg.content.arguments);\n const actionId = readString(args?.['actionId']) ?? readString(args?.['id']);\n const result = toPageActionResult(actionId, snapshot);\n if (result) {\n return result;\n }\n }\n }\n return null;\n}\n\n//#endregion\n\n//#region ----- Parsing -----\n\nfunction collectToolResultsByCallId(transcript: AXPAiChatMessage[]): Map<string, unknown> {\n const map = new Map<string, unknown>();\n for (const line of transcript) {\n if (line.role !== 'tool') {\n continue;\n }\n for (const seg of line.responses) {\n if (seg.type !== 'tool_result' && seg.type !== 'agent_result') {\n continue;\n }\n const callId = seg.callId?.trim();\n if (!callId) {\n continue;\n }\n map.set(callId, seg.type === 'tool_result' ? seg.content : seg.content);\n }\n }\n return map;\n}\n\nfunction readEntityName(args: unknown): string | null {\n const rec = asRecord(args);\n if (!rec) {\n return null;\n }\n return (\n readModuleEntity(rec['entity']) ??\n readModuleEntity(rec['entityFullName']) ??\n readModuleEntity(rec['entityName']) ??\n combineModuleEntity(rec['moduleName'], rec['entityName'])\n );\n}\n\nfunction collectRecordIds(args: unknown, result: unknown): string[] {\n const fromArgs = readId(asRecord(args)?.['id']);\n const unwrapped = unwrapData(parseUnknown(result));\n const fromResult = collectIdsFromValue(unwrapped);\n const ids = fromResult.length > 0 ? fromResult : fromArgs ? [fromArgs] : [];\n return ids.slice(0, MAX_ENTITY_CARDS);\n}\n\nfunction collectIdsFromValue(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.map((item) => readId(asRecord(item)?.['id'])).filter((id): id is string => Boolean(id));\n }\n const rec = asRecord(value);\n if (!rec) {\n return [];\n }\n if (Array.isArray(rec['items'])) {\n return collectIdsFromValue(rec['items']);\n }\n const entityData = asRecord(rec['entityData']);\n const nestedId = readId(entityData?.['id']) ?? readId(rec['id']);\n return nestedId ? [nestedId] : [];\n}\n\nfunction toPageActionResult(actionId: string | null, snapshot: AXPPageContextSnapshot | null): AxmAssistPageActionResult | null {\n if (!snapshot && !actionId) {\n return null;\n }\n const kind = resolvePageActionKind(actionId);\n const label = resolvePageActionLabel(kind, snapshot);\n if (!label) {\n return null;\n }\n const undo = resolveUndo(kind, snapshot);\n return {\n kind,\n label,\n ...(undo ? { undoActionId: undo.actionId, undoArgs: undo.args } : {}),\n };\n}\n\nfunction resolvePageActionKind(actionId: string | null): AxmAssistPageActionResult['kind'] {\n const id = (actionId ?? '').toLowerCase();\n if (id.includes('search')) {\n return 'search';\n }\n if (id.includes('filter')) {\n return 'filter';\n }\n if (id.includes('view')) {\n return 'view';\n }\n return 'other';\n}\n\nfunction resolvePageActionLabel(kind: AxmAssistPageActionResult['kind'], snapshot: AXPPageContextSnapshot | null): string {\n if (kind === 'search') {\n const search = snapshot?.quickSearch?.trim();\n return search || '';\n }\n const filters = (snapshot?.filters ?? []).filter((item) => item.hidden !== true);\n if (filters.length === 0) {\n return axmResolveI18nLabel(kind === 'filter' ? '' : snapshot?.view?.title || snapshot?.title);\n }\n return filters\n .map((item) => {\n const title = axmResolveI18nLabel(item.title) || item.field;\n const value = formatFilterValue(item.value);\n return value ? `${title} ${value}` : title;\n })\n .filter(Boolean)\n .join(', ');\n}\n\nfunction resolveUndo(\n kind: AxmAssistPageActionResult['kind'],\n snapshot: AXPPageContextSnapshot | null,\n): { actionId: string; args: Record<string, unknown> } | null {\n const actions = snapshot?.actions ?? [];\n const has = (id: string) => actions.some((action) => action.id === id);\n if (kind === 'search' && has('set-search')) {\n return { actionId: 'set-search', args: { value: '' } };\n }\n if (kind === 'filter' && has('clear-filters')) {\n return { actionId: 'clear-filters', args: {} };\n }\n if (kind === 'filter' && has('remove-filter')) {\n const field = snapshot?.filters?.find((item) => item.hidden !== true)?.field;\n if (field) {\n return { actionId: 'remove-filter', args: { field } };\n }\n }\n return null;\n}\n\nfunction readSnapshot(value: unknown): AXPPageContextSnapshot | null {\n const rec = asRecord(unwrapData(value));\n if (!rec) {\n return null;\n }\n const snapshot = asRecord(rec['snapshot']) ?? (typeof rec['kind'] === 'string' ? rec : null);\n if (!snapshot || typeof snapshot['kind'] !== 'string') {\n return null;\n }\n return snapshot as unknown as AXPPageContextSnapshot;\n}\n\nfunction unwrapData(value: unknown): unknown {\n const rec = asRecord(value);\n if (!rec) {\n return value;\n }\n if ('data' in rec && rec['data'] != null) {\n return unwrapData(rec['data']);\n }\n if ('payload' in rec && rec['payload'] != null) {\n return unwrapData(rec['payload']);\n }\n return rec;\n}\n\nfunction parseUnknown(value: unknown): unknown {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) {\n return null;\n }\n try {\n return JSON.parse(trimmed) as unknown;\n } catch {\n return value;\n }\n }\n return value;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (typeof value !== 'object' || value == null || Array.isArray(value)) {\n return null;\n }\n return value as Record<string, unknown>;\n}\n\nfunction readString(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n const trimmed = value.trim();\n return trimmed || null;\n}\n\nfunction readModuleEntity(value: unknown): string | null {\n const text = readString(value);\n if (!text || !text.includes('.')) {\n return null;\n }\n return text;\n}\n\nfunction combineModuleEntity(moduleName: unknown, entityName: unknown): string | null {\n const module = readString(moduleName);\n const entity = readString(entityName);\n if (!module || !entity) {\n return null;\n }\n return entity.includes('.') ? entity : `${module}.${entity}`;\n}\n\nfunction readId(value: unknown): string | null {\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n if (typeof value === 'number' && Number.isFinite(value)) {\n return String(value);\n }\n return null;\n}\n\nfunction formatFilterValue(value: unknown): string {\n if (typeof value === 'string') {\n return value.trim();\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n if (Array.isArray(value)) {\n return value.map((item) => formatFilterValue(item)).filter(Boolean).join(', ');\n }\n return '';\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSystemActionType, runtimeQueryPayloadData } from '@acorex-platform/framework-shared/core';\nimport {\n AXPEntityCommandScope,\n buildDefaultEntityCardLayout,\n resolveEntityCardAvatarPath,\n resolveEntityCardLayout,\n type AXPEntity,\n type AXPEntityCardLayout,\n} from '@acorex-platform/framework-shared/entity';\nimport { AXPCommandService, AXPQueryService } from '@acorex-platform/framework-client/runtime';\nimport {\n AXPEntityCardComponent,\n AXPEntityCardFieldsResolver,\n AXPEntityCardSkeletonComponent,\n AXPEntityCommandTriggerViewModel,\n type AXPEntityCardVariant,\n type AXPEntityListViewCardFieldViewModel,\n} from '@acorex-platform/framework-client/layout/entity';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\n\n//#endregion\n\n//#region ----- Component -----\n\n/**\n * Loads one entity row and renders it with the shared {@link axp-entity-card}\n * used by list and lookup popovers (Open Details stays the card footer action).\n */\n@Component({\n selector: 'axm-chat-entity-card',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, AXTranslationModule, AXPEntityCardComponent, AXPEntityCardSkeletonComponent],\n templateUrl: './chat-entity-card.component.html',\n styleUrl: './chat-entity-card.component.css',\n})\nexport class AXMChatEntityCardComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly commandService = inject(AXPCommandService);\n\n private readonly queryService = inject(AXPQueryService);\n\n private readonly cardFieldsResolver = inject(AXPEntityCardFieldsResolver);\n\n //#endregion\n\n //#region ----- Inputs -----\n\n readonly entity = input.required<string>();\n\n readonly entityId = input.required<string>();\n\n readonly variant = input<AXPEntityCardVariant>('card');\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly entityDefinition = signal<AXPEntity | null>(null);\n\n protected readonly entityData = signal<Record<string, unknown> | null>(null);\n\n protected readonly isLoading = signal(false);\n\n protected readonly loadFailed = signal(false);\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly cardLayout = computed((): AXPEntityCardLayout | undefined => {\n const definition = this.entityDefinition();\n if (!definition) {\n return undefined;\n }\n return resolveEntityCardLayout(definition) ?? buildDefaultEntityCardLayout(definition, definition.columns) ?? undefined;\n });\n\n protected readonly cardFields = computed((): AXPEntityListViewCardFieldViewModel[] => {\n const definition = this.entityDefinition();\n const layout = this.cardLayout();\n if (!definition) {\n return [];\n }\n return this.cardFieldsResolver.resolve(definition, layout);\n });\n\n protected readonly showSkeletonAvatar = computed(() => {\n const definition = this.entityDefinition();\n const layout = this.cardLayout();\n if (layout?.header?.avatar) {\n return true;\n }\n return !!definition && !!resolveEntityCardAvatarPath(definition, definition.columns);\n });\n\n protected readonly openDetailsActions = computed((): AXPEntityCommandTriggerViewModel[] => {\n const definition = this.entityDefinition();\n if (!definition) {\n return [];\n }\n return [\n new AXPEntityCommandTriggerViewModel(definition, {\n title: '@general:actions.open-details.title',\n command: 'Entity:OpenDetails',\n priority: 'primary',\n type: AXPSystemActionType.View,\n scope: AXPEntityCommandScope.Individual,\n default: true,\n }),\n ];\n });\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n effect(() => {\n const entity = this.entity().trim();\n const id = this.entityId().trim();\n if (!entity || !id) {\n return;\n }\n void this.loadDetails(entity, id);\n });\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected onCardCommandClick(actionName: string): void {\n const commandName = actionName.split('&')[0];\n if (commandName === 'Entity:OpenDetails') {\n void this.navigateToDetails();\n }\n }\n\n //#endregion\n\n //#region ----- Data Loading -----\n\n private async loadDetails(entity: string, id: string): Promise<void> {\n this.isLoading.set(true);\n this.loadFailed.set(false);\n this.entityDefinition.set(null);\n this.entityData.set(null);\n\n try {\n const result = await this.queryService.fetch('Entity:GetDetails', { entity, id });\n const data = runtimeQueryPayloadData(result) as\n | { entityDefinition?: AXPEntity; entityData?: Record<string, unknown> }\n | undefined;\n if (data?.entityDefinition) {\n this.entityDefinition.set(data.entityDefinition);\n }\n if (data?.entityData && typeof data.entityData === 'object') {\n this.entityData.set(data.entityData);\n }\n if (!data?.entityDefinition || !data?.entityData) {\n this.loadFailed.set(true);\n }\n } catch {\n this.loadFailed.set(true);\n } finally {\n this.isLoading.set(false);\n }\n }\n\n private async navigateToDetails(): Promise<void> {\n const id = this.entityId().trim();\n if (!id) {\n return;\n }\n await this.commandService.execute('Entity:OpenDetails', {\n entity: this.entity().trim(),\n data: { id },\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axm-chat-entity-card\">\n @if (isLoading()) {\n <!-- ----- Loading placeholder while Entity:GetDetails is fetched ----- -->\n <axp-entity-card-skeleton\n [fieldCount]=\"3\"\n [badgeCount]=\"1\"\n [showContent]=\"variant() === 'card'\"\n [showFooter]=\"true\"\n [showAvatar]=\"showSkeletonAvatar()\"\n [embedded]=\"true\"\n />\n }\n <!-- ----- Shared entity card when the row has loaded ----- -->\n @else if (entityDefinition(); as definition) {\n <!---->\n <!-- ----- Render the card when row details are present ----- -->\n @if (entityData(); as row) {\n <axp-entity-card\n [entity]=\"definition\"\n [layout]=\"cardLayout()\"\n [row]=\"row\"\n [fields]=\"cardFields()\"\n [variant]=\"variant()\"\n [interactive]=\"false\"\n [embedded]=\"true\"\n [disableLookupPopover]=\"true\"\n primaryActionLook=\"outline\"\n [primaryActions]=\"openDetailsActions()\"\n (commandClick)=\"onCardCommandClick($event)\"\n />\n }\n }\n <!-- ----- Quiet fallback when the row cannot be loaded ----- -->\n @else if (loadFailed()) {\n <p class=\"axm-chat-entity-card__error\">\n {{ '@conversation:mini-chat.entity-card.load-error' | translate | async }}\n </p>\n }\n</div>\n","/**\n * Detects strong RTL scripts (Arabic / Persian / Hebrew and related blocks) in a string\n * so each assist transcript segment can set `dir` independently of the app locale.\n */\nconst ASSIST_SEGMENT_STRONG_RTL =\n /[\\u0591-\\u08FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFC]/u;\n\n/**\n * Returns `rtl` when the segment contains any character from RTL scripts (e.g. Persian/Farsi),\n * otherwise `ltr`. Empty or whitespace-only strings are `ltr`.\n */\nexport function axmAssistSegmentDirection(text: string | null | undefined): 'rtl' | 'ltr' {\n if (text == null) return 'ltr';\n const s = String(text);\n if (!s.trim()) return 'ltr';\n return ASSIST_SEGMENT_STRONG_RTL.test(s) ? 'rtl' : 'ltr';\n}\n","//#region ---- Imports ----\n\nimport type { AXConversationMessage } from '@acorex/components/conversation';\nimport { AXConversationVoiceRendererComponent } from '@acorex/components/conversation';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPFileStorageService } from '@acorex-platform/framework-client/common';\nimport { AsyncPipe } from '@angular/common';\n\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, signal } from '@angular/core';\n\nimport { axmSyntheticEmbedMessage } from '../utils/assist-bot-transcript.util';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Renders an assist {@code fileId} via {@link AXConversationVoiceRendererComponent} using {@code mediaId} so\n * {@link AXUploaderService} resolves a playback URL (conversation rejects persisted {@code data:} URLs).\n */\n@Component({\n selector: 'axm-assist-bot-audio-line',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXConversationVoiceRendererComponent, AXTranslationModule, AsyncPipe],\n template: `\n @if (syntheticMessage(); as sm) {\n <ax-conversation-voice-renderer [message]=\"sm\" />\n } @else if (errorText()) {\n <p class=\"axm-assist-bot-audio-line__err\">{{ (errorText() ?? '' | translate | async) ?? '' }}</p>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n max-inline-size: min(100%, 28rem);\n }\n\n .axm-assist-bot-audio-line__err {\n margin: 0;\n font-size: 0.8125rem;\n color: rgb(var(--ax-sys-color-danger-600, 220 38 38));\n }\n `,\n ],\n})\nexport class AXMAssistBotAudioLineComponent {\n //#region ---- Inputs ----\n\n readonly parentMessage = input.required<AXConversationMessage>();\n readonly fileId = input.required<string>();\n readonly mimeType = input<string>('audio/mpeg');\n\n //#endregion\n\n //#region ---- Services ----\n\n private readonly fileStorage = inject(AXPFileStorageService);\n\n //#endregion\n\n //#region ---- State ----\n\n private readonly fileReady = signal(false);\n private readonly resolvedMimeType = signal<string>('audio/mpeg');\n readonly errorText = signal<string | null>(null);\n private loadGeneration = 0;\n\n //#endregion\n\n //#region ---- Synthetic message ----\n\n readonly syntheticMessage = computed(() => {\n const fileId = this.fileId()?.trim() ?? '';\n const parent = this.parentMessage();\n if (!this.fileReady() || !fileId) {\n return null;\n }\n return axmSyntheticEmbedMessage(parent, `voice-${fileId}`, {\n type: 'voice',\n payload: {\n type: 'voice',\n url: '',\n mediaId: fileId,\n duration: 0,\n },\n });\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n effect(() => {\n const id = this.fileId()?.trim() ?? '';\n const gen = ++this.loadGeneration;\n this.fileReady.set(false);\n this.errorText.set(null);\n if (!id) {\n return;\n }\n\n void this.fileStorage\n .getInfo(id)\n .then((info) => {\n if (gen !== this.loadGeneration) {\n return;\n }\n const storedMime = info.mimeType?.trim();\n const fallbackMime = this.mimeType().trim();\n const mimeType =\n storedMime && storedMime.startsWith('audio/')\n ? storedMime\n : fallbackMime.startsWith('audio/')\n ? fallbackMime\n : 'audio/mpeg';\n this.resolvedMimeType.set(mimeType);\n this.fileReady.set(true);\n })\n .catch(() => {\n if (gen !== this.loadGeneration) {\n return;\n }\n this.errorText.set('@conversation:chat.assist-renderer.errors.audio-load');\n });\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXConversationMessage } from '@acorex/components/conversation';\nimport { AXConversationImageRendererComponent } from '@acorex/components/conversation';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPFileStorageService } from '@acorex-platform/framework-client/common';\nimport { AsyncPipe } from '@angular/common';\n\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, signal } from '@angular/core';\n\nimport { axmSyntheticEmbedMessage } from '../utils/assist-bot-transcript.util';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Renders an assist {@code fileId} via {@link AXConversationImageRendererComponent} using {@code mediaId} so\n * {@link AXUploaderService} resolves a display URL (conversation rejects persisted {@code data:} URLs).\n */\n@Component({\n selector: 'axm-assist-bot-image-line',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXConversationImageRendererComponent, AXTranslationModule, AsyncPipe],\n template: `\n @if (syntheticMessage(); as sm) {\n <ax-conversation-image-renderer [message]=\"sm\" />\n } @else if (errorText()) {\n <p class=\"axm-assist-bot-image-line__err\">{{ (errorText() ?? '' | translate | async) ?? '' }}</p>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n max-inline-size: min(100%, 40rem);\n }\n\n .axm-assist-bot-image-line__err {\n margin: 0;\n font-size: 0.8125rem;\n color: rgb(var(--ax-sys-color-danger-600, 220 38 38));\n }\n `,\n ],\n})\nexport class AXMAssistBotImageLineComponent {\n //#region ---- Inputs ----\n\n readonly parentMessage = input.required<AXConversationMessage>();\n readonly fileId = input.required<string>();\n readonly mimeType = input<string>('application/octet-stream');\n readonly name = input<string | undefined>(undefined);\n\n //#endregion\n\n //#region ---- Services ----\n\n private readonly fileStorage = inject(AXPFileStorageService);\n\n //#endregion\n\n //#region ---- State ----\n\n private readonly fileReady = signal(false);\n private readonly resolvedMimeType = signal<string>('image/png');\n readonly errorText = signal<string | null>(null);\n private loadGeneration = 0;\n\n //#endregion\n\n //#region ---- Synthetic message ----\n\n readonly syntheticMessage = computed(() => {\n const fileId = this.fileId()?.trim() ?? '';\n const parent = this.parentMessage();\n if (!this.fileReady() || !fileId) {\n return null;\n }\n return axmSyntheticEmbedMessage(parent, `img-${fileId}`, {\n type: 'image',\n payload: {\n type: 'image',\n images: [\n {\n mediaId: fileId,\n url: '',\n thumbnailUrl: '',\n width: 400,\n height: 300,\n mimeType: this.resolvedMimeType(),\n },\n ],\n caption: undefined,\n },\n });\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n effect(() => {\n const id = this.fileId()?.trim() ?? '';\n const gen = ++this.loadGeneration;\n this.fileReady.set(false);\n this.errorText.set(null);\n if (!id) {\n return;\n }\n\n void this.fileStorage\n .getInfo(id)\n .then((info) => {\n if (gen !== this.loadGeneration) {\n return;\n }\n const storedMime = info.mimeType?.trim();\n const fallbackMime = this.mimeType().trim();\n const mimeType =\n storedMime && storedMime.startsWith('image/')\n ? storedMime\n : fallbackMime.startsWith('image/')\n ? fallbackMime\n : 'image/png';\n this.resolvedMimeType.set(mimeType);\n this.fileReady.set(true);\n })\n .catch(() => {\n if (gen !== this.loadGeneration) {\n return;\n }\n this.errorText.set('@conversation:chat.assist-renderer.errors.image-load');\n });\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AI_CHAT_GENERATED_IMAGE_REF_TYPE, AI_CHAT_GENERATED_SPEECH_REF_TYPE } from '@acorex-platform/module-ai-management-client';\nimport { AXPFileStorageService } from '@acorex-platform/framework-client/common';\nimport type { AXConversationMessage } from '@acorex/components/conversation';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\n\nimport { ChangeDetectionStrategy, Component, effect, inject, input, signal } from '@angular/core';\n\nimport { AXMAssistBotAudioLineComponent } from './assist-bot-audio-line.component';\nimport { AXMAssistBotImageLineComponent } from './assist-bot-image-line.component';\n\n//#endregion\n\n//#region ---- Types ----\n\ntype AssistBotFileMediaKind = 'image' | 'audio' | 'unknown';\n\n//#endregion\n\n//#region ---- Component ----\n\n/** Routes assist {@code fileId} segments to image or voice renderers based on stored file metadata. */\n@Component({\n selector: 'axm-assist-bot-file-line',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXMAssistBotAudioLineComponent, AXMAssistBotImageLineComponent, AXTranslationModule, AsyncPipe],\n template: `\n @switch (mediaKind()) {\n @case ('image') {\n <axm-assist-bot-image-line [parentMessage]=\"parentMessage()\" [fileId]=\"fileId()\" />\n }\n @case ('audio') {\n <axm-assist-bot-audio-line [parentMessage]=\"parentMessage()\" [fileId]=\"fileId()\" />\n }\n @default {\n @if (errorText()) {\n <p class=\"axm-assist-bot-file-line__err\">{{ (errorText() ?? '' | translate | async) ?? '' }}</p>\n }\n }\n }\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .axm-assist-bot-file-line__err {\n margin: 0;\n font-size: 0.8125rem;\n color: rgb(var(--ax-sys-color-danger-600, 220 38 38));\n }\n `,\n ],\n})\nexport class AXMAssistBotFileLineComponent {\n //#region ---- Inputs ----\n\n readonly parentMessage = input.required<AXConversationMessage>();\n readonly fileId = input.required<string>();\n\n //#endregion\n\n //#region ---- Services ----\n\n private readonly fileStorage = inject(AXPFileStorageService);\n\n //#endregion\n\n //#region ---- State ----\n\n readonly mediaKind = signal<AssistBotFileMediaKind>('unknown');\n readonly errorText = signal<string | null>(null);\n private loadGeneration = 0;\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n effect(() => {\n const id = this.fileId()?.trim() ?? '';\n const gen = ++this.loadGeneration;\n this.mediaKind.set('unknown');\n this.errorText.set(null);\n if (!id) {\n return;\n }\n\n void this.fileStorage\n .getInfo(id)\n .then((info) => {\n if (gen !== this.loadGeneration) {\n return;\n }\n this.mediaKind.set(resolveAssistBotFileMediaKind(info.mimeType, info.category, info.refType));\n if (this.mediaKind() === 'unknown') {\n this.errorText.set('@conversation:chat.assist-renderer.errors.file-load');\n }\n })\n .catch(() => {\n if (gen !== this.loadGeneration) {\n return;\n }\n this.errorText.set('@conversation:chat.assist-renderer.errors.file-load');\n });\n });\n }\n\n //#endregion\n}\n\n//#region ---- Helpers ----\n\nfunction resolveAssistBotFileMediaKind(\n mimeType: string | undefined,\n category: string | undefined,\n refType: string | undefined,\n): AssistBotFileMediaKind {\n const mime = mimeType?.trim().toLowerCase() ?? '';\n if (mime.startsWith('audio/') || category === 'ai-generated-speech' || refType === AI_CHAT_GENERATED_SPEECH_REF_TYPE) {\n return 'audio';\n }\n if (mime.startsWith('image/') || category === 'ai-generated-image' || refType === AI_CHAT_GENERATED_IMAGE_REF_TYPE) {\n return 'image';\n }\n return 'unknown';\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPMarkdownTemplateDirective, AXPMarkdownViewerComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport type { AXPAiChatMessage, AXPAiChatResponse, AXPAiDelegatedAgentResultSegment, AXPAiDelegatedAgentTranscriptEntry, AXPAiEngineUsageTotals } from '@acorex-platform/module-ai-management-client';\nimport {\n AXPAiAssistChatModelCatalogService,\n axpAiChatMessageGetText,\n axpAiChatMessageIsDelegatedReflectionExcluded,\n axpAiChatToolOrAgentResultBodyJson,\n axpAiDelegatedAgentOutcomeResponsesPlainText,\n axpAiDelegatedAgentPromptPreview,\n axpAiDelegatedAgentResultSegments,\n axpAiParseSupervisorAgentToolName,\n} from '@acorex-platform/module-ai-management-client';\nimport { AXAccordionCdkModule } from '@acorex/cdk/accordion';\nimport { AXAlertModule } from '@acorex/components/alert';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCodeEditorDefaultLanguage, AXCodeEditorModule } from '@acorex/components/code-editor';\nimport type { AXConversationMessage, AXConversationMessagePayload, AXConversationMessageRendererComponent, AXConversationMessageRendererContentState, AXConversationMessageRendererState } from '@acorex/components/conversation';\nimport { AXConversationService } from '@acorex/components/conversation';\nimport { AXConversationTextRendererComponent } from '@acorex/components/conversation';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\n\nimport { AsyncPipe, DecimalPipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, signal, ViewEncapsulation, type Signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { axmIsFormTemplateDesignerAssistLaunch } from '@acorex-platform/module-conversation-client/contracts';\nimport { AXMAssistChatDebugModeService } from '../actions/assist-chat-debug-mode.service';\nimport { AXMChatMessageApi } from '../services/chat-conversation-apis.abstract';\nimport { AXMAssistSuggestionChipsComponent } from '../shared/assist-suggestion-chips.component';\nimport { AXM_AI_MANAGEMENT_AGENT_ENTITY_NAME, AXM_AI_MANAGEMENT_MODULE_NAME } from '../utils/ai-management.constants';\nimport {\n axmAssistUserFacingPayloadLine,\n axmAssistUserVisibleItemsForLine,\n axmChatRenderableAssistWidgetNode,\n axmPartitionAssistAnswerText,\n axmParseAssistTranscriptLinePayload,\n axmParseAssistTranscriptTextEnvelope,\n axmReadAssistAiTranscript,\n axmReadAssistAiTranscriptRaw,\n axmReadPlainTextMessagePayload,\n axmSanitizeAssistUserAnswerText,\n axmSyntheticEmbedMessage,\n type AxmAssistUserVisibleItem,\n} from '../utils/assist-bot-transcript.util';\nimport { axmOpenAssistDelegatedAgentDetailDialog } from '../utils/assist-delegated-agent-detail.dialog';\nimport { axmOpenAssistToolDetailDialog } from '../utils/assist-tool-detail.dialog';\nimport {\n axmAssistCollectEntityCardRefs,\n axmAssistReadPageActionResult,\n} from '../utils/assist-entity-card-refs.util';\nimport { axmResolveI18nLabel } from '../utils/assist-i18n-label.util';\nimport { AXPPageContextRegistry } from '@acorex-platform/framework-client/core';\nimport { AXMChatEntityCardComponent } from './chat-entity-card.component';\nimport { axmAssistHasFinalizeMetadata, axmIsAssistRetryableStatus, axmIsAssistStreamingStatus, axmReadAssistFollowUpStatus, axmReadAssistResponseError, axmReadAssistResponseStatus, type AxmAssistResponseStatus } from '../utils/assist-response-status.util';\nimport { axmAssistSegmentDirection } from '../utils/assist-segment-direction.util';\nimport { AXMConversationFocusService } from '../../services/conversation-focus.service';\nimport { AXMAssistBotFileLineComponent } from './assist-bot-file-line.component';\nimport { AXMNodeMessageRendererComponent } from './node-message-renderer.component';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** Shape of a single tool call stored in message metadata (legacy). */\ninterface AssistToolCallEntry {\n id: string;\n name: string;\n arguments: unknown;\n output?: string;\n state: 'running' | 'done';\n /** Streamed specialist text during a delegated agent sub-run (conversation placeholder metadata). */\n nestedStreamText?: string;\n nestedTools?: AssistToolCallEntry[];\n /** Provider API model id for delegated agent sub-runs (e.g. gpt-5). */\n modelLabel?: string;\n}\n\n/** User toggles for assist accordions (thinking, agent, tool); persisted on the message. */\ninterface AssistMessageUiMetadata {\n openByKey?: Record<string, boolean>;\n}\n\n/** Parsed thinking + body from assistant content (legacy). */\ntype ParsedAssistContent = ReturnType<typeof axmParseAssistTranscriptTextEnvelope>;\n\ninterface AXMAiAgentLookupRow {\n id: string;\n title?: string;\n name?: string;\n}\n\n/** Debug strip: persisted assist run metadata (see mock {@code assistRun*} keys). */\ninterface AssistRunDebugView {\n usage?: AXPAiEngineUsageTotals;\n durationMs?: number;\n modelEntityId?: string;\n modelTitle?: string;\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-assist-message-renderer',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXConversationTextRendererComponent,\n AXMNodeMessageRendererComponent,\n AXMAssistBotFileLineComponent,\n AXMAssistSuggestionChipsComponent,\n AXMChatEntityCardComponent,\n AXAccordionCdkModule,\n AXAlertModule,\n AXButtonModule,\n AXDecoratorModule,\n AXCodeEditorModule,\n AXPMarkdownViewerComponent,\n AXPMarkdownTemplateDirective,\n FormsModule,\n AXTranslationModule,\n AsyncPipe,\n DecimalPipe,\n NgTemplateOutlet,\n ],\n templateUrl: './assist-message-renderer.component.html',\n styleUrls: ['./assist-message-renderer.component.css'],\n})\nexport class AXMAssistMessageRendererComponent implements AXConversationMessageRendererComponent {\n //#region ---- Inputs ----\n\n readonly message = input.required<AXConversationMessage>();\n\n //#endregion\n\n //#region ---- Template helpers (exposed for template) ----\n\n protected readonly axpAiChatMessageGetText = axpAiChatMessageGetText;\n\n protected readonly axmAssistWidgetNodeFromUnknown = axmChatRenderableAssistWidgetNode;\n\n protected readonly partitionAnswerText = axmPartitionAssistAnswerText;\n\n protected readonly parseAssistLineText = axmParseAssistTranscriptTextEnvelope;\n\n protected readonly segmentDir = axmAssistSegmentDirection;\n\n /**\n * Assistant text shown in the transcript: hides delegated sub-run reflection lines from the main markdown stream\n * unless debug mode is on.\n */\n protected assistTranscriptAssistantTextBodyForDisplay(line: AXPAiChatMessage, body: string): string {\n if (this.assistHideTranscriptAnswerSegments()) {\n return '';\n }\n if (axpAiChatMessageIsDelegatedReflectionExcluded(line) && !this.showDebugUi()) {\n return '';\n }\n return body ?? '';\n }\n\n //#endregion\n\n //#region ---- State ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly pageContext = inject(AXPPageContextRegistry);\n private readonly assistDebugMode = inject(AXMAssistChatDebugModeService);\n private readonly translation = inject(AXTranslationService);\n private readonly popupService = inject(AXPopupService);\n private readonly messageApi = inject(AXMChatMessageApi);\n private readonly focus = inject(AXMConversationFocusService);\n private readonly conversationService = inject(AXConversationService);\n private readonly modelCatalog = inject(AXPAiAssistChatModelCatalogService);\n private readonly agentData = this.entityService.withEntity(AXM_AI_MANAGEMENT_MODULE_NAME, AXM_AI_MANAGEMENT_AGENT_ENTITY_NAME).data<string, AXMAiAgentLookupRow, AXMAiAgentLookupRow, AXMAiAgentLookupRow, AXMAiAgentLookupRow>();\n\n private readonly loadingAgentIds = new Set<string>();\n private readonly loadingModelIds = new Set<string>();\n\n private readonly agentTitleById = signal<Record<string, string>>({});\n private readonly modelTitleById = signal<Record<string, string>>({});\n\n private readonly contentState = signal<AXConversationMessageRendererContentState>('ready');\n readonly isRetrying = signal(false);\n\n /** Debug transcript/tools UI — only after settings resolve and debug is on. */\n readonly showDebugUi = computed(() => this.assistDebugMode.resolved() && this.assistDebugMode.active());\n\n /** User-facing UI (no tools/thinking accordions); used while unresolved and when debug is off. */\n readonly showNonDebugUi = computed(() => !this.showDebugUi());\n\n /** Persisted assist run metadata (mock writes {@code assistRun*} keys on finalize). */\n readonly assistRunDebug = computed((): AssistRunDebugView | null => {\n const meta = this.message().metadata as Record<string, unknown> | undefined;\n if (!meta) {\n return null;\n }\n const usage = meta['assistRunUsageTotals'] as AXPAiEngineUsageTotals | undefined;\n const durationRaw = meta['assistRunDurationMs'];\n const modelEntityId = meta['assistRunModelEntityId'];\n const modelTitle = meta['assistRunModelTitle'];\n const durationMs = typeof durationRaw === 'number' && Number.isFinite(durationRaw) ? durationRaw : undefined;\n const id = typeof modelEntityId === 'string' && modelEntityId.trim() ? modelEntityId.trim() : undefined;\n const storedTitle = typeof modelTitle === 'string' && modelTitle.trim() ? modelTitle.trim() : undefined;\n const resolvedTitle = id ? this.modelTitleById()[id] : undefined;\n const title = storedTitle || resolvedTitle;\n if (!usage && durationMs == null && !id && !title) {\n return null;\n }\n return { usage, durationMs, modelEntityId: id, modelTitle: title };\n });\n\n private readonly ensureRunModelTitleLoaded = effect(() => {\n if (!this.showDebugUi()) {\n return;\n }\n const meta = this.message().metadata as Record<string, unknown> | undefined;\n if (!meta) {\n return;\n }\n const storedTitle =\n typeof meta['assistRunModelTitle'] === 'string' ? meta['assistRunModelTitle'].trim() : '';\n if (storedTitle) {\n return;\n }\n const modelEntityId =\n typeof meta['assistRunModelEntityId'] === 'string' ? meta['assistRunModelEntityId'].trim() : '';\n if (!modelEntityId) {\n return;\n }\n this.ensureModelTitleLoaded(modelEntityId);\n });\n\n readonly assistResponseStatus = computed((): AxmAssistResponseStatus => axmReadAssistResponseStatus(this.message().metadata));\n\n readonly showRetryScreen = computed(() => {\n const message = this.message();\n if (this.focus.focusedConversationIdSignal() !== message.conversationId) {\n return false;\n }\n return axmIsAssistRetryableStatus(this.assistResponseStatus()) && !this.isRetrying();\n });\n\n readonly assistResponseError = computed(() => axmReadAssistResponseError(this.message().metadata));\n\n readonly assistRetryTitleKey = computed(() => (this.assistResponseStatus() === 'failed' ? '@conversation:chat.assist-renderer.retry.failed.title' : '@conversation:chat.assist-renderer.retry.incomplete.title'));\n\n readonly assistRetryDescriptionKey = computed(() => (this.assistResponseStatus() === 'failed' ? '@conversation:chat.assist-renderer.retry.failed.description' : '@conversation:chat.assist-renderer.retry.incomplete.description'));\n\n readonly assistRetryAlertIcon = computed(() => (this.assistResponseStatus() === 'failed' ? 'fa-light fa-circle-exclamation' : 'fa-light fa-circle-pause'));\n\n readonly rendererState: Signal<AXConversationMessageRendererState> = computed(() => ({\n deliveryStatus: this.message().status,\n contentState: this.showRetryScreen() ? 'error' : this.contentState(),\n }));\n\n //#endregion\n\n //#region ---- Transcript UI ----\n\n readonly transcriptLines = computed((): AXPAiChatMessage[] => {\n return axmReadAssistAiTranscript(this.message().metadata) ?? [];\n });\n\n readonly delegatedTranscriptsByCallId = computed((): Record<string, AXPAiDelegatedAgentTranscriptEntry> => {\n const meta = this.message().metadata;\n if (typeof meta !== 'object' || meta == null) {\n return {};\n }\n const delegated = (meta as Record<string, unknown>)['assistRunDelegatedTranscriptsByCallId'];\n if (typeof delegated !== 'object' || delegated == null || Array.isArray(delegated)) {\n return {};\n }\n return delegated as Record<string, AXPAiDelegatedAgentTranscriptEntry>;\n });\n\n readonly toolResultByCallId = computed(() => {\n const map = new Map<string, AXPAiChatMessage>();\n for (const line of this.transcriptLines()) {\n if (line.role !== 'tool') {\n continue;\n }\n for (const seg of line.responses) {\n if (seg.type === 'tool_result' || seg.type === 'agent_result') {\n const callId = seg.callId;\n if (typeof callId === 'string' && callId.trim()) {\n map.set(callId.trim(), line);\n }\n }\n }\n }\n return map;\n });\n\n readonly useTranscriptUi = computed(() => this.transcriptLines().length > 0);\n\n /** Last transcript line for the non-debug bubble ({@link axmParseAssistTranscriptLinePayload} or engine transcript). */\n readonly assistPayloadLine = computed((): AXPAiChatMessage | null => {\n const fromPayload = axmParseAssistTranscriptLinePayload(this.message().payload);\n if (fromPayload) {\n return fromPayload;\n }\n const raw = axmReadAssistAiTranscriptRaw(this.message().metadata);\n if (raw.length > 0) {\n return axmAssistUserFacingPayloadLine(raw);\n }\n return null;\n });\n\n /**\n * Debug transcript hides user-facing answer segments when the unified payload bubble is shown.\n */\n readonly assistHideTranscriptAnswerSegments = computed(() => !this.isStreaming() && this.assistPayloadLine() != null);\n\n /**\n * Transcript lines that render at least one visible segment. Skips e.g. {@code tool} role lines\n * whose results are merged into assistant tool UI (would otherwise produce empty {@code axm-assist-bot__line}).\n */\n readonly visibleTranscriptLines = computed((): { line: AXPAiChatMessage; lineIndex: number }[] => {\n const lines = this.transcriptLines();\n const out: { line: AXPAiChatMessage; lineIndex: number }[] = [];\n for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {\n const line = lines[lineIndex];\n if (this.transcriptLineHasVisibleUi(line)) {\n out.push({ line, lineIndex });\n }\n }\n return out;\n });\n\n private transcriptLineHasVisibleUi(line: AXPAiChatMessage): boolean {\n const debug = this.showDebugUi();\n for (const seg of line.responses) {\n if (this.transcriptSegmentHasVisibleUi(line, seg, debug)) {\n return true;\n }\n }\n return false;\n }\n\n private transcriptSegmentHasVisibleUi(line: AXPAiChatMessage, seg: AXPAiChatResponse, debug: boolean): boolean {\n if (line.role === 'user' && seg.type === 'file') {\n return true;\n }\n if (line.role === 'user' && seg.type === 'text') {\n return true;\n }\n if (line.role === 'assistant' && seg.type === 'think' && debug) {\n return true;\n }\n if (line.role === 'assistant' && seg.type === 'text') {\n const parsed = this.parseAssistLineText(seg.content);\n if (debug && parsed.thinking) {\n return true;\n }\n if (debug && this.assistHideTranscriptAnswerSegments()) {\n return false;\n }\n return parsed.body.trim().length > 0;\n }\n if (line.role === 'assistant' && (seg.type === 'agent' || seg.type === 'tool') && this.isDelegatedAgentCommand(seg.content.command)) {\n if (debug) {\n return true;\n }\n const res = this.toolResultForCallId(seg.callId);\n const outcomeSegs = this.delegatedAgentOutcomeSegmentsForCall(res);\n const hasRenderableOutcome = outcomeSegs.some((s) => {\n if (s.type === 'file' || s.type === 'node') {\n return true;\n }\n if (s.type === 'text' || s.type === 'think') {\n return s.content.trim().length > 0;\n }\n if (s.type === 'followUp') {\n return s.content.length > 0;\n }\n return false;\n });\n if (hasRenderableOutcome) {\n return true;\n }\n return this.delegatedAgentAnswerForCall(res).trim().length > 0;\n }\n if (line.role === 'assistant' && seg.type === 'tool' && debug) {\n return true;\n }\n if (line.role === 'assistant' && seg.type === 'node') {\n if (debug && this.assistHideTranscriptAnswerSegments()) {\n return false;\n }\n return axmChatRenderableAssistWidgetNode(seg.content) != null;\n }\n if (line.role === 'assistant' && seg.type === 'file') {\n if (debug && this.assistHideTranscriptAnswerSegments()) {\n return false;\n }\n return true;\n }\n if (line.role === 'assistant' && seg.type === 'followUp') {\n if (debug) {\n return false;\n }\n return seg.content.length > 0;\n }\n if (line.role === 'tool' && (seg.type === 'tool_result' || seg.type === 'agent_result')) {\n return false;\n }\n if (line.role === 'system' && seg.type === 'text' && debug) {\n return true;\n }\n return debug || line.role !== 'assistant';\n }\n\n private readonly syncAgentTitles = effect(() => {\n const ids = new Set<string>();\n\n for (const line of this.transcriptLines()) {\n if (line.role !== 'assistant') {\n continue;\n }\n for (const seg of line.responses) {\n if (seg.type !== 'tool' && seg.type !== 'agent') {\n continue;\n }\n const agentId = this.extractAgentIdFromCommand(seg.content.command);\n if (agentId) {\n ids.add(agentId);\n }\n }\n }\n\n for (const tc of this.toolCalls()) {\n const agentId = this.extractAgentIdFromCommand(tc.name);\n if (agentId) {\n ids.add(agentId);\n }\n }\n\n for (const id of ids) {\n this.ensureAgentTitleLoaded(id);\n }\n });\n\n syntheticTextMessage(lineIndex: number, segIndex: number, text: string): AXConversationMessage {\n return axmSyntheticEmbedMessage(this.message(), `ut-${lineIndex}-${segIndex}`, {\n type: 'text',\n payload: { type: 'text', text },\n });\n }\n\n syntheticNodeEmbedMessage(lineIndex: number, segIndex: number, content: unknown): AXConversationMessage {\n return axmSyntheticEmbedMessage(this.message(), `node-${lineIndex}-${segIndex}`, {\n type: 'node',\n payload: { type: 'node', content } as unknown as AXConversationMessagePayload,\n });\n }\n\n syntheticAppendNodeMessage(itemIndex: number, content: unknown): AXConversationMessage {\n return axmSyntheticEmbedMessage(this.message(), `append-node-${itemIndex}`, {\n type: 'node',\n payload: { type: 'node', content } as unknown as AXConversationMessagePayload,\n });\n }\n\n protected markdownCodeLanguage(segment: unknown): AXCodeEditorDefaultLanguage {\n if (this.isMarkdownCodeSegment(segment) && segment.language.trim()) {\n return segment.language as AXCodeEditorDefaultLanguage;\n }\n return 'javascript';\n }\n\n protected markdownCodeValue(segment: unknown): string {\n if (this.isMarkdownCodeSegment(segment)) {\n return segment.code;\n }\n return '';\n }\n\n resolveToolDisplayTitle(command: string): string {\n const agentId = this.extractAgentIdFromCommand(command);\n if (!agentId) {\n return command?.trim() || 'Tool';\n }\n const title = this.agentTitleById()[agentId];\n if (title) {\n return title;\n }\n return agentId;\n }\n\n /** Faint label for the provider model used by a delegated agent (or tool call metadata). */\n resolveToolModelLabel(command: string, callId?: string): string | undefined {\n const fromCall = this.toolCallEntryFor(callId)?.modelLabel?.trim();\n if (fromCall) {\n return fromCall;\n }\n const scopedCallId = callId?.trim();\n if (scopedCallId) {\n const fromTranscript = this.delegatedTranscriptsByCallId()[scopedCallId]?.modelLabel?.trim();\n if (fromTranscript) {\n return fromTranscript;\n }\n }\n return undefined;\n }\n\n resolveToolBadge(command: string, fallback: string): string {\n return this.extractAgentIdFromCommand(command) ? '@conversation:chat.assist-renderer.badges.agent' : fallback;\n }\n\n toolResultForCallId(callId: string | undefined): AXPAiChatMessage | null {\n if (!callId || !callId.trim()) {\n return null;\n }\n return this.toolResultByCallId().get(callId.trim()) ?? null;\n }\n\n protected toolCallEntryFor(callId: string | undefined): AssistToolCallEntry | undefined {\n if (!callId?.trim()) {\n return undefined;\n }\n return this.toolCalls().find((t) => t.id === callId.trim());\n }\n\n protected delegatedPromptPreview(argumentsValue: unknown): string {\n return axpAiDelegatedAgentPromptPreview(argumentsValue);\n }\n\n protected isDelegatedAgentCommand(command: string): boolean {\n return axpAiParseSupervisorAgentToolName(command) != null;\n }\n\n protected delegatedAgentOutcomeSegmentsForCall(res: AXPAiChatMessage | null): AXPAiDelegatedAgentResultSegment[] {\n if (!res) {\n return [];\n }\n const raw = axpAiChatToolOrAgentResultBodyJson(res);\n if (!raw.trim()) {\n return [];\n }\n try {\n const o = JSON.parse(raw) as Record<string, unknown>;\n if (o['success'] === false) {\n return [];\n }\n return axpAiDelegatedAgentResultSegments(o as { success?: boolean; data?: { responses?: AXPAiDelegatedAgentResultSegment[] } });\n } catch {\n return [];\n }\n }\n\n protected delegatedAnswerFromToolResult(resultLine: AXPAiChatMessage | null): string {\n if (!resultLine) {\n return '';\n }\n const raw = axpAiChatToolOrAgentResultBodyJson(resultLine);\n try {\n const o = JSON.parse(raw) as Record<string, unknown>;\n if (o['success'] === false) {\n const err = o['error'];\n return typeof err === 'string' && err.trim() ? err.trim() : 'Request failed.';\n }\n const segs = axpAiDelegatedAgentResultSegments(o as { success?: boolean; data?: { responses?: AXPAiDelegatedAgentResultSegment[] } });\n return axpAiDelegatedAgentOutcomeResponsesPlainText(segs);\n } catch {\n return raw.trim();\n }\n }\n\n private isMarkdownCodeSegment(segment: unknown): segment is { type: 'code'; language: string; code: string } {\n if (!segment || typeof segment !== 'object') {\n return false;\n }\n\n const candidate = segment as { type?: unknown; language?: unknown; code?: unknown };\n return candidate.type === 'code' && typeof candidate.language === 'string' && typeof candidate.code === 'string';\n }\n\n /**\n * Parses the same agent JSON body shape as {@link delegatedAnswerFromToolResult} from raw tool `output` stored in metadata.\n */\n protected delegatedAnswerFromToolOutputString(output: string | undefined): string {\n if (!output?.trim()) {\n return '';\n }\n const raw = output.trim();\n try {\n const o = JSON.parse(raw) as Record<string, unknown>;\n if (o['success'] === false) {\n const err = o['error'];\n return typeof err === 'string' && err.trim() ? err.trim() : 'Request failed.';\n }\n const segs = axpAiDelegatedAgentResultSegments(o as { success?: boolean; data?: { responses?: AXPAiDelegatedAgentResultSegment[] } });\n return axpAiDelegatedAgentOutcomeResponsesPlainText(segs);\n } catch {\n return raw;\n }\n }\n\n protected delegatedAgentAnswerForCall(res: AXPAiChatMessage | null): string {\n return this.delegatedAnswerFromToolResult(res);\n }\n\n protected delegatedAgentLabelForCall(callId: string | undefined): string | undefined {\n const resultLine = this.toolResultForCallId(callId);\n if (!resultLine) {\n return undefined;\n }\n return this.parseDelegatedAgentToolResult(axpAiChatToolOrAgentResultBodyJson(resultLine)).agentName;\n }\n\n protected async openDelegatedAgentTranscriptDialog(callId: string | undefined, toolName: string, resolvedAgentLabel?: string): Promise<void> {\n await axmOpenAssistDelegatedAgentDetailDialog({\n callId: callId ?? '',\n toolName,\n delegatedTranscriptsByCallId: this.delegatedTranscriptsByCallId(),\n resolvedAgentLabel: resolvedAgentLabel ?? this.delegatedAgentLabelForCall(callId),\n resolveCatalogTitle: (agentId) => this.agentTitleById()[agentId],\n agentTitleById: this.agentTitleById(),\n popupService: this.popupService,\n translationService: this.translation,\n });\n }\n\n protected async openAssistToolDetailDialog(options: {\n toolTitle: string;\n argumentsValue: unknown;\n output?: string;\n resultLine?: AXPAiChatMessage | null;\n }): Promise<void> {\n const outputJson =\n options.output?.trim() ||\n (options.resultLine ? this.formatToolResultBody(options.resultLine) : '');\n await axmOpenAssistToolDetailDialog({\n toolTitle: options.toolTitle,\n inputJson: this.formatArgs(options.argumentsValue),\n outputJson: outputJson.trim() || undefined,\n popupService: this.popupService,\n });\n }\n\n protected async openTranscriptToolDetail(\n callId: string | undefined,\n command: string,\n argumentsValue: unknown,\n resolvedAgentLabel?: string,\n ): Promise<void> {\n if (this.isDelegatedAgentCommand(command)) {\n await this.openDelegatedAgentTranscriptDialog(callId, command, resolvedAgentLabel);\n return;\n }\n await this.openAssistToolDetailDialog({\n toolTitle: this.resolveToolDisplayTitle(command),\n argumentsValue,\n resultLine: this.toolResultForCallId(callId),\n });\n }\n\n protected async openLegacyToolDetail(tc: AssistToolCallEntry): Promise<void> {\n if (this.isDelegatedAgentCommand(tc.name)) {\n await this.openDelegatedAgentTranscriptDialog(tc.id, tc.name, this.delegatedAgentLabelForCall(tc.id));\n return;\n }\n await this.openAssistToolDetailDialog({\n toolTitle: this.resolveToolDisplayTitle(tc.name),\n argumentsValue: tc.arguments,\n output: tc.output,\n });\n }\n\n private parseDelegatedAgentToolResult(content: string): { agentName?: string } {\n const trimmed = content?.trim() ?? '';\n if (!trimmed) {\n return {};\n }\n try {\n const o = JSON.parse(trimmed) as Record<string, unknown>;\n if (o['success'] === false || o['success'] !== true) {\n return {};\n }\n const data = o['data'];\n if (data == null || typeof data !== 'object' || Array.isArray(data)) {\n return {};\n }\n const agentName = (data as Record<string, unknown>)['agentName'];\n return typeof agentName === 'string' && agentName.trim() ? { agentName: agentName.trim() } : {};\n } catch {\n return {};\n }\n }\n\n /**\n * Human-readable wall time for the assist API run (mock stores {@code assistRunDurationMs}).\n */\n formatAssistRunDuration(ms: number): string {\n if (!Number.isFinite(ms) || ms < 0) {\n return '—';\n }\n if (ms < 1000) {\n return `${Math.round(ms)} ms`;\n }\n return `${(ms / 1000).toFixed(1)} s`;\n }\n\n formatFallbackSegment(seg: AXPAiChatMessage['responses'][number]): string {\n try {\n return JSON.stringify(seg, null, 2);\n } catch {\n return String(seg);\n }\n }\n\n formatToolResultBody(line: AXPAiChatMessage): string {\n return this.formatJson(axpAiChatToolOrAgentResultBodyJson(line));\n }\n\n protected assistThinkKey(lineIndex: number, segIndex: number): string {\n return `think:${lineIndex}-${segIndex}`;\n }\n\n protected assistThinkStreamKey(): string {\n return 'think:stream';\n }\n\n protected assistThinkFinalKey(): string {\n return 'think:final';\n }\n\n protected assistRunMetaKey(): string {\n return 'run-meta';\n }\n\n protected assistAgentKey(callId: string | undefined): string {\n return `agent:${(callId ?? '').trim() || 'unknown'}`;\n }\n\n protected assistToolKey(callId: string | undefined): string {\n return `tool:${(callId ?? '').trim() || 'unknown'}`;\n }\n\n protected assistLegacyToolAccordionKey(tc: AssistToolCallEntry): string {\n return this.isDelegatedAgentCommand(tc.name) ? this.assistAgentKey(tc.id) : this.assistToolKey(tc.id);\n }\n\n protected onAssistLegacyAccordionClick(event: unknown, tc: AssistToolCallEntry): void {\n this.onAssistAccordionClick(event, this.assistLegacyToolAccordionKey(tc));\n }\n\n /**\n * Accordion is collapsed by default; open only when the user has persisted `open: true` for this key.\n */\n protected assistSectionIsCollapsed(key: string): boolean {\n return !this.isAssistSectionOpen(key);\n }\n\n private isAssistSectionOpen(key: string): boolean {\n const m = this.message().metadata;\n if (typeof m !== 'object' || m == null) {\n return false;\n }\n const assistUi = (m as Record<string, unknown>)['assistUi'] as AssistMessageUiMetadata | undefined;\n return assistUi?.openByKey?.[key] === true;\n }\n\n protected onAssistAccordionClick(event: unknown, key: string): void {\n const c = (event as { component?: { isCollapsed: () => boolean } } | null)?.component;\n if (!c) {\n return;\n }\n const open = !c.isCollapsed();\n void this.persistAssistUiOpenKey(key, open);\n }\n\n private async persistAssistUiOpenKey(key: string, open: boolean): Promise<void> {\n const message = this.message();\n const prev = (message.metadata ?? {}) as Record<string, unknown>;\n const prevUi = (prev['assistUi'] as AssistMessageUiMetadata | undefined) ?? {};\n const openByKey: Record<string, boolean> = { ...(prevUi.openByKey ?? {}) };\n if (open) {\n openByKey[key] = true;\n } else {\n delete openByKey[key];\n }\n const nextMeta: Record<string, unknown> = { ...prev, assistUi: { ...prevUi, openByKey } };\n const updated: AXConversationMessage = { ...message, metadata: nextMeta };\n await this.messageApi.updateMessageMetadata(message.id, nextMeta);\n }\n\n //#endregion\n\n //#region ---- Legacy computed ----\n\n readonly isStreaming = computed(() => {\n const status = this.assistResponseStatus();\n if (!axmIsAssistStreamingStatus(status)) {\n return false;\n }\n const meta = this.message().metadata;\n if (axmAssistHasFinalizeMetadata(meta)) {\n return false;\n }\n const transcripts = (meta as Record<string, unknown> | undefined)?.['transcripts'];\n return !(Array.isArray(transcripts) && transcripts.length > 0);\n });\n\n /** Phase label for the streaming activity strip (translation key suffix via {@link assistActivityMessageKey}). */\n readonly assistStreamingPhase = computed((): 'starting' | 'planning' | 'using-tools' | 'responding' => {\n if (!this.isStreaming()) {\n return 'starting';\n }\n const tools = this.toolCalls();\n if (tools.some((t) => t.state === 'running')) {\n return 'using-tools';\n }\n const think = this.streamThink().trim();\n const text = this.streamText().trim();\n if (think && !text) {\n return 'planning';\n }\n if (text) {\n return 'responding';\n }\n return 'starting';\n });\n\n readonly assistActivityMessageKey = computed(() => {\n const phase = this.assistStreamingPhase();\n return `@conversation:chat.assist-renderer.activity.${phase}`;\n });\n\n readonly streamThink = computed(() => {\n const v = this.readMeta('streamDraftThink');\n return typeof v === 'string' ? v : '';\n });\n\n readonly streamText = computed(() => {\n const d = this.readMeta('streamDraftText');\n return typeof d === 'string' ? d : '';\n });\n\n /** Answer markdown while streaming (draft) or after finalize (payload); shared by debug and non-debug. */\n readonly assistAnswerMarkdown = computed(() => {\n const live = axmSanitizeAssistUserAnswerText(this.streamText());\n if (this.isStreaming()) {\n return live;\n }\n return axmSanitizeAssistUserAnswerText(this.parsed().body.trim() || live);\n });\n\n private assistLineVisibilityOptions(): { hideWidgetNodes?: boolean } {\n const conversationId = this.message().conversationId?.trim() ?? '';\n const active = this.conversationService.activeConversation();\n const conversation =\n active?.id === conversationId\n ? active\n : this.conversationService.conversations().find((item) => item.id === conversationId);\n const metadata = conversation?.metadata as Record<string, unknown> | undefined;\n return axmIsFormTemplateDesignerAssistLaunch(metadata) ? { hideWidgetNodes: true } : {};\n }\n\n /** Non-text payload segments shown below the answer after finalize. */\n readonly assistPayloadAppendItems = computed((): AxmAssistUserVisibleItem[] => {\n if (this.isStreaming()) {\n return [];\n }\n const line = this.assistPayloadLine();\n if (!line) {\n return [];\n }\n return axmAssistUserVisibleItemsForLine(line, this.assistLineVisibilityOptions())\n .filter((item) => item.kind !== 'text')\n .sort((a, b) => {\n if (a.kind === 'followUp') {\n return 1;\n }\n if (b.kind === 'followUp') {\n return -1;\n }\n return 0;\n });\n });\n\n readonly isFollowUpPreparing = computed(() => {\n if (this.isStreaming()) {\n return false;\n }\n return axmReadAssistFollowUpStatus(this.message().metadata) === 'preparing';\n });\n\n protected readonly assistEntityCardRefs = computed(() => {\n if (this.isStreaming() || this.showDebugUi()) {\n return [];\n }\n return axmAssistCollectEntityCardRefs(this.transcriptLines());\n });\n\n protected readonly assistPageActionResult = computed(() => {\n if (this.isStreaming() || this.showDebugUi()) {\n return null;\n }\n return axmAssistReadPageActionResult(this.transcriptLines());\n });\n\n protected readonly assistPageActionLabel = computed(() => {\n const result = this.assistPageActionResult();\n if (!result?.label) {\n return '';\n }\n return axmResolveI18nLabel(result.label, (key) => this.translation.translateSync(key));\n });\n\n protected readonly pageActionUndoBusy = signal(false);\n\n /**\n * Non-debug stream panel: skip the empty wrapper when there is no answer, append content, or live stream.\n */\n readonly showNonDebugStreamPanel = computed(\n () =>\n this.isStreaming() ||\n this.assistAnswerMarkdown().trim().length > 0 ||\n this.assistPayloadAppendItems().length > 0 ||\n this.assistEntityCardRefs().length > 0 ||\n this.assistPageActionResult() != null ||\n this.isFollowUpPreparing(),\n );\n\n readonly toolCalls = computed<AssistToolCallEntry[]>(() => {\n const raw = this.readMeta('toolCalls');\n return Array.isArray(raw) ? raw : [];\n });\n\n readonly parsed = computed<ParsedAssistContent>(() => {\n if (this.isStreaming()) {\n return { thinking: null, body: '' };\n }\n const line = this.assistPayloadLine();\n if (line) {\n const textParts = axmAssistUserVisibleItemsForLine(line, this.assistLineVisibilityOptions())\n .filter((i): i is { kind: 'text'; content: string } => i.kind === 'text')\n .map((i) => axmParseAssistTranscriptTextEnvelope(i.content).body.trim())\n .filter((t) => t.length > 0);\n return { thinking: null, body: axmSanitizeAssistUserAnswerText(textParts.join('\\n\\n')) };\n }\n const plainText = axmReadPlainTextMessagePayload(this.message().payload);\n if (plainText.trim()) {\n const envelope = axmParseAssistTranscriptTextEnvelope(plainText);\n return {\n thinking: envelope.thinking,\n body: axmSanitizeAssistUserAnswerText(envelope.body.trim()),\n };\n }\n return { thinking: null, body: '' };\n });\n\n //#endregion\n\n //#region ----- Page Action -----\n\n protected async onUndoPageAction(): Promise<void> {\n const result = this.assistPageActionResult();\n const actionId = result?.undoActionId?.trim();\n if (!result || !actionId || this.pageActionUndoBusy()) {\n return;\n }\n this.pageActionUndoBusy.set(true);\n try {\n await this.pageContext.runAction(actionId, result.undoArgs ?? {});\n } finally {\n this.pageActionUndoBusy.set(false);\n }\n }\n\n //#endregion\n\n //#region ---- Retry ----\n\n protected async onRetryAssistResponse(): Promise<void> {\n if (this.isRetrying() || !this.showRetryScreen()) {\n return;\n }\n\n const message = this.message();\n this.isRetrying.set(true);\n try {\n await this.messageApi.retryAssistResponse(message.conversationId, message.id);\n } catch (error) {\n console.error('Failed to retry assist response:', error);\n } finally {\n this.isRetrying.set(false);\n }\n }\n\n //#endregion\n\n //#region ---- Formatters ----\n\n formatArgs(args: unknown): string {\n if (args == null) return '';\n if (typeof args === 'string') return this.tryPrettyJson(args);\n try {\n return JSON.stringify(args, null, 2);\n } catch {\n return String(args);\n }\n }\n\n formatJson(raw: string): string {\n return this.tryPrettyJson(raw);\n }\n\n //#endregion\n\n //#region ---- Utilities ----\n\n private readMeta(key: string): unknown {\n const meta = this.message().metadata;\n if (typeof meta !== 'object' || meta == null) return undefined;\n return (meta as Record<string, unknown>)[key];\n }\n\n private tryPrettyJson(raw: string): string {\n const trimmed = raw.trim();\n if (!trimmed) return '';\n try {\n return JSON.stringify(JSON.parse(trimmed), null, 2);\n } catch {\n return raw;\n }\n }\n\n private extractAgentIdFromCommand(command: unknown): string | null {\n if (typeof command !== 'string') {\n return null;\n }\n const [prefix, id] = command.split(':');\n if (prefix?.trim().toLowerCase() !== 'agent') {\n return null;\n }\n const resolvedId = id?.trim();\n return resolvedId ? resolvedId : null;\n }\n\n private ensureAgentTitleLoaded(agentId: string): void {\n if (!agentId || this.agentTitleById()[agentId] || this.loadingAgentIds.has(agentId)) {\n return;\n }\n this.loadingAgentIds.add(agentId);\n void this.agentData\n .byKey(agentId)\n .then((agent) => {\n const title = (this.translation.resolve(agent?.title as AXPMultiLanguageString)?.trim() || agent?.name?.trim() || agent?.id || agentId).trim();\n this.agentTitleById.update((current) => ({ ...current, [agentId]: title }));\n })\n .catch(() => {\n this.agentTitleById.update((current) => ({ ...current, [agentId]: agentId }));\n })\n .finally(() => {\n this.loadingAgentIds.delete(agentId);\n });\n }\n\n private ensureModelTitleLoaded(modelEntityId: string): void {\n if (!modelEntityId || this.modelTitleById()[modelEntityId] || this.loadingModelIds.has(modelEntityId)) {\n return;\n }\n this.loadingModelIds.add(modelEntityId);\n void this.modelCatalog\n .listModels()\n .then((rows) => {\n const match = rows.find((row) => row.id === modelEntityId);\n const title = match?.title?.trim() || match?.name?.trim() || modelEntityId;\n this.modelTitleById.update((current) => ({ ...current, [modelEntityId]: title }));\n })\n .catch(() => {\n this.modelTitleById.update((current) => ({ ...current, [modelEntityId]: modelEntityId }));\n })\n .finally(() => {\n this.loadingModelIds.delete(modelEntityId);\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axm-assist-renderer\">\n @if (showDebugUi() && useTranscriptUi() && !isStreaming()) {\n <div class=\"axm-assist-bot\" role=\"region\" [attr.aria-label]=\"('@conversation:chat.assist-renderer.aria.assistant-response' | translate | async) ?? ''\">\n @for (item of visibleTranscriptLines(); track item.lineIndex) {\n @let line = item.line;\n @let lineIndex = item.lineIndex;\n <div class=\"axm-assist-bot__line\" [class.axm-assist-bot__line--user]=\"line.role === 'user'\" [class.axm-assist-bot__line--tool-role]=\"line.role === 'tool'\">\n @for (seg of line.responses; track segIndex; let segIndex = $index) {\n @if (line.role === 'user' && seg.type === 'file') {\n <axm-assist-bot-file-line [parentMessage]=\"message()\" [fileId]=\"seg.content.fileId\" />\n } @else if (line.role === 'user' && seg.type === 'text') {\n <div class=\"axm-assist-bot__segment\" [attr.dir]=\"segmentDir(seg.content)\">\n <ax-conversation-text-renderer [message]=\"syntheticTextMessage(lineIndex, segIndex, seg.content)\" />\n </div>\n } @else if (line.role === 'assistant' && seg.type === 'think' && showDebugUi()) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__thinking-accordion axm-assist-renderer__collapse-shell mb-0!\"\n axAccordionItem\n #thinkAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistThinkKey(lineIndex, segIndex))\"\n (onClick)=\"onAssistAccordionClick($event, assistThinkKey(lineIndex, segIndex))\"\n >\n <div class=\"axm-assist-renderer__accordion-header\" axAccordionItemHeader role=\"button\" [attr.aria-expanded]=\"!thinkAcc.isCollapsed()\">\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\" [class.axm-assist-renderer__thinking-chevron--expanded]=\"!thinkAcc.isCollapsed()\" aria-hidden=\"true\"></i>\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment axm-assist-renderer__markdown\" [attr.dir]=\"segmentDir(seg.content)\">\n <axp-markdown-viewer [markdown]=\"seg.content\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor [ngModel]=\"markdownCodeValue(segment)\" [readonly]=\"true\" [language]=\"markdownCodeLanguage(segment)\" [lineNumbers]=\"true\" class=\"axm-assist-renderer__tool-editor\"></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n </div>\n </div>\n </div>\n </div>\n } @else if (line.role === 'assistant' && seg.type === 'text') {\n @let parsedLine = parseAssistLineText(seg.content);\n @let displayBody = assistTranscriptAssistantTextBodyForDisplay(line, parsedLine.body);\n @let partitionedLine = partitionAnswerText(displayBody);\n @if (showDebugUi() && parsedLine.thinking) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__thinking-accordion axm-assist-renderer__collapse-shell mb-0!\"\n axAccordionItem\n #thinkAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistThinkKey(lineIndex, segIndex))\"\n (onClick)=\"onAssistAccordionClick($event, assistThinkKey(lineIndex, segIndex))\"\n >\n <div class=\"axm-assist-renderer__accordion-header\" axAccordionItemHeader role=\"button\" [attr.aria-expanded]=\"!thinkAcc.isCollapsed()\">\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\" [class.axm-assist-renderer__thinking-chevron--expanded]=\"!thinkAcc.isCollapsed()\" aria-hidden=\"true\"></i>\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment axm-assist-renderer__markdown\" [attr.dir]=\"segmentDir(parsedLine.thinking)\">\n <axp-markdown-viewer [markdown]=\"parsedLine.thinking ?? ''\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor [ngModel]=\"markdownCodeValue(segment)\" [readonly]=\"true\" [language]=\"markdownCodeLanguage(segment)\" [lineNumbers]=\"true\" class=\"axm-assist-renderer__tool-editor\"></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n @if (partitionedLine.markdown.trim()) {\n <div class=\"axm-assist-bot__segment axm-assist-renderer__markdown\" [attr.dir]=\"segmentDir(partitionedLine.markdown)\">\n <axp-markdown-viewer [markdown]=\"partitionedLine.markdown\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor [ngModel]=\"markdownCodeValue(segment)\" [readonly]=\"true\" [language]=\"markdownCodeLanguage(segment)\" [lineNumbers]=\"true\" class=\"axm-assist-renderer__tool-editor\"></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n @for (renderable of partitionedLine.renderable; track $index) {\n @if (renderable.type === 'node' && axmAssistWidgetNodeFromUnknown(renderable.content)) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer [message]=\"syntheticNodeEmbedMessage(lineIndex, segIndex * 100 + $index, renderable.content)\" />\n </div>\n }\n }\n } @else if (line.role === 'assistant' && (seg.type === 'agent' || seg.type === 'tool') && isDelegatedAgentCommand(seg.content.command)) {\n @if (showDebugUi()) {\n <div class=\"axm-assist-renderer__tool-row\">\n <div class=\"axm-assist-renderer__tool-row-main\">\n <i class=\"fa-light fa-people-group axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n <span class=\"axm-assist-renderer__tool-row-title\">{{ resolveToolDisplayTitle(seg.content.command) }}</span>\n @if (resolveToolModelLabel(seg.content.command, seg.callId); as modelLabel) {\n <span class=\"axm-assist-renderer__tool-model-label\">{{ modelLabel }}</span>\n }\n </div>\n <ax-button\n look=\"outline\"\n color=\"primary\"\n class=\"ax-xs\"\n [text]=\"('@conversation:chat.assist-renderer.delegated-agent.detail' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@conversation:chat.assist-renderer.delegated-agent.detail-aria' | translate | async) ?? ''\"\n (onClick)=\"openTranscriptToolDetail(seg.callId, seg.content.command, seg.content.arguments, delegatedAgentLabelForCall(seg.callId))\"\n ></ax-button>\n </div>\n } @else {\n <div class=\"axm-assist-renderer__tool-row\">\n <div class=\"axm-assist-renderer__tool-row-main\">\n <i class=\"fa-light fa-people-group axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n <span class=\"axm-assist-renderer__tool-row-title\">{{ resolveToolDisplayTitle(seg.content.command) }}</span>\n @if (resolveToolModelLabel(seg.content.command, seg.callId); as modelLabel) {\n <span class=\"axm-assist-renderer__tool-model-label\">{{ modelLabel }}</span>\n }\n </div>\n <ax-button\n look=\"outline\"\n color=\"primary\"\n class=\"ax-xs\"\n [text]=\"('@conversation:chat.assist-renderer.delegated-agent.detail' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@conversation:chat.assist-renderer.delegated-agent.detail-aria' | translate | async) ?? ''\"\n (onClick)=\"openTranscriptToolDetail(seg.callId, seg.content.command, seg.content.arguments, delegatedAgentLabelForCall(seg.callId))\"\n ></ax-button>\n </div>\n @let res = toolResultForCallId(seg.callId);\n @let outcomeSegs = delegatedAgentOutcomeSegmentsForCall(res);\n @if (outcomeSegs.length > 0) {\n @for (outSeg of outcomeSegs; track outSegIndex; let outSegIndex = $index) {\n @switch (outSeg.type) {\n @case ('text') {\n @let parsedOut = parseAssistLineText(outSeg.content);\n @let partitionedOut = partitionAnswerText(parsedOut.body);\n @if (partitionedOut.markdown.trim()) {\n <div class=\"axm-assist-bot__segment axm-assist-renderer__markdown\" [attr.dir]=\"segmentDir(partitionedOut.markdown)\">\n <axp-markdown-viewer [markdown]=\"partitionedOut.markdown\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor [ngModel]=\"markdownCodeValue(segment)\" [readonly]=\"true\" [language]=\"markdownCodeLanguage(segment)\" [lineNumbers]=\"true\" class=\"axm-assist-renderer__tool-editor\"></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n @for (renderable of partitionedOut.renderable; track renderableIndex; let renderableIndex = $index) {\n @if (renderable.type === 'node' && axmAssistWidgetNodeFromUnknown(renderable.content)) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer [message]=\"syntheticNodeEmbedMessage(lineIndex, segIndex * 1000 + outSegIndex * 10 + renderableIndex, renderable.content)\" />\n </div>\n }\n }\n }\n @case ('think') {\n @if (showDebugUi()) {\n <div class=\"axm-assist-bot__segment\" [attr.dir]=\"segmentDir(outSeg.content)\">\n {{ outSeg.content }}\n </div>\n }\n }\n @case ('file') {\n <axm-assist-bot-file-line [parentMessage]=\"message()\" [fileId]=\"outSeg.content.fileId\" />\n }\n @case ('node') {\n @let assistNodeWidget = axmAssistWidgetNodeFromUnknown(outSeg.content);\n @if (assistNodeWidget) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer [message]=\"syntheticNodeEmbedMessage(lineIndex, segIndex * 1000 + outSegIndex, outSeg.content)\" />\n </div>\n }\n }\n }\n }\n } @else if (delegatedAgentAnswerForCall(res).trim()) {\n @let agentFallbackText = delegatedAgentAnswerForCall(res);\n <div class=\"axm-assist-bot__segment axm-assist-renderer__markdown\" [attr.dir]=\"segmentDir(agentFallbackText)\">\n <axp-markdown-viewer [markdown]=\"agentFallbackText\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor [ngModel]=\"markdownCodeValue(segment)\" [readonly]=\"true\" [language]=\"markdownCodeLanguage(segment)\" [lineNumbers]=\"true\" class=\"axm-assist-renderer__tool-editor\"></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n }\n } @else if (line.role === 'assistant' && seg.type === 'tool' && showDebugUi()) {\n <div class=\"axm-assist-renderer__tool-row\">\n <div class=\"axm-assist-renderer__tool-row-main\">\n <i class=\"fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n <span class=\"axm-assist-renderer__tool-row-title\">{{ resolveToolDisplayTitle(seg.content.command) }}</span>\n </div>\n <ax-button\n look=\"outline\"\n color=\"primary\"\n class=\"ax-xs\"\n [text]=\"('@conversation:chat.assist-renderer.delegated-agent.detail' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@conversation:chat.assist-renderer.delegated-agent.detail-aria' | translate | async) ?? ''\"\n (onClick)=\"openTranscriptToolDetail(seg.callId, seg.content.command, seg.content.arguments)\"\n ></ax-button>\n </div>\n } @else if (line.role === 'assistant' && seg.type === 'node') {\n @let assistNodeWidget = axmAssistWidgetNodeFromUnknown(seg.content);\n @if (assistNodeWidget) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer [message]=\"syntheticNodeEmbedMessage(lineIndex, segIndex, seg.content)\" />\n </div>\n }\n } @else if (line.role === 'assistant' && seg.type === 'file' && !assistHideTranscriptAnswerSegments()) {\n <axm-assist-bot-file-line [parentMessage]=\"message()\" [fileId]=\"seg.content.fileId\" />\n } @else if (line.role === 'tool' && (seg.type === 'tool_result' || seg.type === 'agent_result')) {\n <!-- merged into the corresponding tool/agent accordion -->\n } @else if (line.role === 'system' && seg.type === 'text' && showDebugUi()) {\n <div class=\"axm-assist-bot__segment\" [attr.dir]=\"segmentDir(seg.content)\">\n <ax-conversation-text-renderer [message]=\"syntheticTextMessage(lineIndex, segIndex, seg.content)\" />\n </div>\n } @else {\n @if (showDebugUi() || line.role !== 'assistant') {\n <div class=\"axm-assist-bot__fallback axm-assist-bot__segment\" [attr.dir]=\"segmentDir(formatFallbackSegment(seg))\">\n {{ formatFallbackSegment(seg) }}\n </div>\n }\n }\n }\n </div>\n }\n </div>\n <ng-container *ngTemplateOutlet=\"assistUnifiedAnswerBlock\" />\n } @else if (!showDebugUi() && showNonDebugStreamPanel()) {\n <div class=\"axm-assist-renderer__stream-content axm-assist-renderer__stream-content--non-debug\" role=\"region\" [attr.aria-label]=\"('@conversation:chat.assist-renderer.aria.assistant-response' | translate | async) ?? ''\">\n @if (isStreaming()) {\n <div class=\"axm-assist-renderer__streaming-activity\" role=\"status\" aria-live=\"polite\">\n <span class=\"axm-assist-renderer__activity-spin inline-block w-3 h-3 rounded-full border-2 border-primary-500 border-t-transparent fa-spin shrink-0\" aria-hidden=\"true\"></span>\n <span class=\"axm-assist-renderer__activity-label text-xs text-muted italic\">{{ assistActivityMessageKey() | translate | async }}</span>\n </div>\n }\n <ng-container *ngTemplateOutlet=\"assistUnifiedAnswerBlock\" />\n @if (isStreaming() && !assistAnswerMarkdown()) {\n <div class=\"axm-assist-renderer__waiting\">\n <span class=\"axm-assist-renderer__dot\"></span>\n <span class=\"axm-assist-renderer__dot\"></span>\n <span class=\"axm-assist-renderer__dot\"></span>\n </div>\n }\n </div>\n } @else if (showDebugUi()) {\n @if (isStreaming()) {\n <div class=\"axm-assist-renderer__stream-content\">\n <div class=\"axm-assist-renderer__streaming-activity\" role=\"status\" aria-live=\"polite\">\n <span class=\"axm-assist-renderer__activity-spin inline-block w-3 h-3 rounded-full border-2 border-primary-500 border-t-transparent fa-spin shrink-0\" aria-hidden=\"true\"></span>\n <span class=\"axm-assist-renderer__activity-label text-xs text-muted italic\">{{ assistActivityMessageKey() | translate | async }}</span>\n </div>\n @if (streamThink().trim()) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__thinking-accordion axm-assist-renderer__collapse-shell mb-0!\"\n axAccordionItem\n #thinkAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistThinkStreamKey())\"\n (onClick)=\"onAssistAccordionClick($event, assistThinkStreamKey())\"\n >\n <div class=\"axm-assist-renderer__accordion-header\" axAccordionItemHeader role=\"button\" [attr.aria-expanded]=\"!thinkAcc.isCollapsed()\">\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\" [class.axm-assist-renderer__thinking-chevron--expanded]=\"!thinkAcc.isCollapsed()\" aria-hidden=\"true\"></i>\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment axm-assist-renderer__markdown\" [attr.dir]=\"segmentDir(streamThink())\">\n <axp-markdown-viewer [markdown]=\"streamThink()\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor [ngModel]=\"markdownCodeValue(segment)\" [readonly]=\"true\" [language]=\"markdownCodeLanguage(segment)\" [lineNumbers]=\"true\" class=\"axm-assist-renderer__tool-editor\"></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n <ng-container *ngTemplateOutlet=\"assistUnifiedAnswerBlock\" />\n @if (toolCalls().length) {\n <div class=\"axm-assist-renderer__tools\">\n @for (tc of toolCalls(); track tc.id) {\n @if (isDelegatedAgentCommand(tc.name)) {\n <div class=\"axm-assist-renderer__tool-row\">\n <div class=\"axm-assist-renderer__tool-row-main\">\n @if (tc.state === 'running') {\n <span class=\"axm-assist-renderer__agent-live-spin inline-block w-3 h-3 rounded-full border-2 border-primary-500 border-t-transparent fa-spin shrink-0\" aria-hidden=\"true\"></span>\n } @else {\n <span class=\"inline-block w-3 h-3 rounded-full bg-success-500 shrink-0\" aria-hidden=\"true\"></span>\n }\n <i class=\"fa-light fa-people-group axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n <span class=\"axm-assist-renderer__tool-row-title\">{{ resolveToolDisplayTitle(tc.name) }}</span>\n @if (resolveToolModelLabel(tc.name, tc.id); as modelLabel) {\n <span class=\"axm-assist-renderer__tool-model-label\">{{ modelLabel }}</span>\n }\n </div>\n <ax-button\n look=\"outline\"\n color=\"primary\"\n class=\"ax-xs\"\n [disabled]=\"tc.state === 'running'\"\n [text]=\"('@conversation:chat.assist-renderer.delegated-agent.detail' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@conversation:chat.assist-renderer.delegated-agent.detail-aria' | translate | async) ?? ''\"\n (onClick)=\"openLegacyToolDetail(tc)\"\n ></ax-button>\n </div>\n @if (tc.nestedStreamText?.trim()) {\n <div class=\"axm-assist-renderer__agent-live-stream\" [attr.dir]=\"segmentDir(tc.nestedStreamText ?? '')\">\n {{ tc.nestedStreamText }}\n </div>\n }\n } @else {\n <div class=\"axm-assist-renderer__tool-row\">\n <div class=\"axm-assist-renderer__tool-row-main\">\n @if (tc.state === 'running') {\n <span class=\"axm-assist-renderer__agent-live-spin inline-block w-3 h-3 rounded-full border-2 border-primary-500 border-t-transparent fa-spin shrink-0\" aria-hidden=\"true\"></span>\n } @else {\n <span class=\"inline-block w-3 h-3 rounded-full bg-success-500 shrink-0\" aria-hidden=\"true\"></span>\n }\n <i class=\"fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n <span class=\"axm-assist-renderer__tool-row-title\">{{ resolveToolDisplayTitle(tc.name) }}</span>\n </div>\n <ax-button\n look=\"outline\"\n color=\"primary\"\n class=\"ax-xs\"\n [disabled]=\"tc.state === 'running'\"\n [text]=\"('@conversation:chat.assist-renderer.delegated-agent.detail' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@conversation:chat.assist-renderer.delegated-agent.detail-aria' | translate | async) ?? ''\"\n (onClick)=\"openLegacyToolDetail(tc)\"\n ></ax-button>\n </div>\n }\n }\n </div>\n }\n @if (isStreaming() && !assistAnswerMarkdown() && !streamThink().trim() && !toolCalls().length) {\n <div class=\"axm-assist-renderer__waiting\">\n <span class=\"axm-assist-renderer__dot\"></span>\n <span class=\"axm-assist-renderer__dot\"></span>\n <span class=\"axm-assist-renderer__dot\"></span>\n </div>\n }\n </div>\n } @else if (!useTranscriptUi()) {\n @if (parsed().thinking) {\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__thinking-accordion axm-assist-renderer__collapse-shell mb-0!\"\n axAccordionItem\n #thinkAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistThinkFinalKey())\"\n (onClick)=\"onAssistAccordionClick($event, assistThinkFinalKey())\"\n >\n <div class=\"axm-assist-renderer__accordion-header\" axAccordionItemHeader role=\"button\" [attr.aria-expanded]=\"!thinkAcc.isCollapsed()\">\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\" [class.axm-assist-renderer__thinking-chevron--expanded]=\"!thinkAcc.isCollapsed()\" aria-hidden=\"true\"></i>\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </span>\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment axm-assist-renderer__markdown\" [attr.dir]=\"segmentDir(parsed().thinking)\">\n <axp-markdown-viewer [markdown]=\"parsed().thinking ?? ''\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor [ngModel]=\"markdownCodeValue(segment)\" [readonly]=\"true\" [language]=\"markdownCodeLanguage(segment)\" [lineNumbers]=\"true\" class=\"axm-assist-renderer__tool-editor\"></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n @if (toolCalls().length) {\n <div class=\"axm-assist-renderer__tools\">\n @for (tc of toolCalls(); track tc.id) {\n <div class=\"axm-assist-renderer__tool-row\">\n <div class=\"axm-assist-renderer__tool-row-main\">\n <i class=\"fa-light axm-assist-renderer__tool-title-icon\" [class.fa-people-group]=\"isDelegatedAgentCommand(tc.name)\" [class.fa-screwdriver-wrench]=\"!isDelegatedAgentCommand(tc.name)\" aria-hidden=\"true\"></i>\n <span class=\"axm-assist-renderer__tool-row-title\">{{ resolveToolDisplayTitle(tc.name) }}</span>\n @if (isDelegatedAgentCommand(tc.name) && resolveToolModelLabel(tc.name, tc.id); as modelLabel) {\n <span class=\"axm-assist-renderer__tool-model-label\">{{ modelLabel }}</span>\n }\n </div>\n <ax-button\n look=\"outline\"\n color=\"primary\"\n class=\"ax-xs\"\n [text]=\"('@conversation:chat.assist-renderer.delegated-agent.detail' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@conversation:chat.assist-renderer.delegated-agent.detail-aria' | translate | async) ?? ''\"\n (onClick)=\"openLegacyToolDetail(tc)\"\n ></ax-button>\n </div>\n }\n </div>\n }\n <ng-container *ngTemplateOutlet=\"assistUnifiedAnswerBlock\" />\n }\n }\n @if (showDebugUi() && assistRunDebug(); as dbg) {\n <footer class=\"axm-assist-renderer__run-meta-wrap\" role=\"region\" [attr.aria-label]=\"('@conversation:chat.assist-renderer.aria.run-usage' | translate | async) ?? ''\">\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n <div\n class=\"axm-assist-renderer__thinking-accordion axm-assist-renderer__collapse-shell axm-assist-renderer__run-meta-accordion mb-0!\"\n axAccordionItem\n #runMetaAcc=\"axAccordionItem\"\n [isCollapsed]=\"assistSectionIsCollapsed(assistRunMetaKey())\"\n (onClick)=\"onAssistAccordionClick($event, assistRunMetaKey())\"\n >\n <div class=\"axm-assist-renderer__accordion-header\" axAccordionItemHeader role=\"button\" [attr.aria-expanded]=\"!runMetaAcc.isCollapsed()\">\n <div class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\" [class.axm-assist-renderer__thinking-chevron--expanded]=\"!runMetaAcc.isCollapsed()\" aria-hidden=\"true\"></i>\n <i class=\"fa-light fa-chart-line axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.run-meta.title' | translate | async }}\n </span>\n <!-- @if (dbg.modelTitle || dbg.modelEntityId) {\n <span class=\"axm-assist-renderer__run-meta-header-sub\">{{ dbg.modelTitle || dbg.modelEntityId }}</span>\n } -->\n </div>\n </div>\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__run-meta axm-assist-renderer__run-meta--panel\">\n <div class=\"axm-assist-renderer__run-meta-grid\">\n @if (dbg.modelTitle || dbg.modelEntityId) {\n <div class=\"axm-assist-renderer__meta-tile axm-assist-renderer__meta-tile--wide\">\n <div class=\"axm-assist-renderer__meta-tile-label\">\n {{ '@conversation:chat.assist-renderer.run-meta.model' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__meta-tile-value\">{{ dbg.modelTitle || dbg.modelEntityId }}</div>\n <!-- @if (dbg.modelTitle && dbg.modelEntityId) {\n <div class=\"axm-assist-renderer__meta-tile-sub\">{{ dbg.modelEntityId }}</div>\n } -->\n </div>\n }\n @if (dbg.durationMs != null) {\n <div class=\"axm-assist-renderer__meta-tile\">\n <div class=\"axm-assist-renderer__meta-tile-label\">\n {{ '@conversation:chat.assist-renderer.run-meta.duration' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__meta-tile-value axm-assist-renderer__meta-tile-value--mono\">\n {{ formatAssistRunDuration(dbg.durationMs) }}\n </div>\n </div>\n }\n @if (dbg.usage; as totals) {\n <div class=\"axm-assist-renderer__meta-tile\">\n <div class=\"axm-assist-renderer__meta-tile-label\">\n {{ '@ai-management:chat.usage-prompt' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__meta-tile-value axm-assist-renderer__meta-tile-value--mono\">\n {{ totals.promptTokens | number }}\n @if (totals.cachedPromptTokens) {\n <span class=\"axm-assist-renderer__meta-tile-note\">(+{{ totals.cachedPromptTokens | number }} {{ '@ai-management:chat.usage-cached' | translate | async }})</span>\n }\n </div>\n </div>\n <div class=\"axm-assist-renderer__meta-tile\">\n <div class=\"axm-assist-renderer__meta-tile-label\">\n {{ '@ai-management:chat.usage-completion' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__meta-tile-value axm-assist-renderer__meta-tile-value--mono\">\n {{ totals.completionTokens | number }}\n </div>\n </div>\n <div class=\"axm-assist-renderer__meta-tile axm-assist-renderer__meta-tile--accent\">\n <div class=\"axm-assist-renderer__meta-tile-label\">\n {{ '@conversation:chat.assist-renderer.run-meta.total-tokens' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__meta-tile-value axm-assist-renderer__meta-tile-value--mono\">\n {{ totals.totalTokens | number }}\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </footer>\n }\n\n <ng-template #assistUnifiedAnswerBlock>\n @if (assistAnswerMarkdown()) {\n <div class=\"axm-assist-renderer__text axm-assist-bot__segment axm-assist-renderer__markdown\" [attr.dir]=\"segmentDir(assistAnswerMarkdown())\">\n <axp-markdown-viewer [markdown]=\"assistAnswerMarkdown()\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor [ngModel]=\"markdownCodeValue(segment)\" [readonly]=\"true\" [language]=\"markdownCodeLanguage(segment)\" [lineNumbers]=\"true\" class=\"axm-assist-renderer__tool-editor\"></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n <!-- @if (isStreaming()) {\n <span class=\"axm-assist-renderer__cursor\"></span>\n } -->\n }\n @if (!isStreaming()) {\n @if (assistPageActionResult(); as pageAction) {\n <!-- ----- Live page chrome result (filter / search) ----- -->\n <div class=\"axm-assist-renderer__page-action\" role=\"status\">\n <span class=\"axm-assist-renderer__page-action-icon\" aria-hidden=\"true\">\n <i class=\"fa-solid fa-circle-check\"></i>\n </span>\n <div class=\"axm-assist-renderer__page-action-copy\">\n <span class=\"axm-assist-renderer__page-action-title\">\n {{\n (pageAction.kind === 'search'\n ? '@conversation:mini-chat.page-action.search-applied'\n : '@conversation:mini-chat.page-action.filter-applied') | translate | async\n }}\n </span>\n @if (assistPageActionLabel(); as actionLabel) {\n <span class=\"axm-assist-renderer__page-action-label\">{{ (actionLabel | translate | async) ?? actionLabel }}</span>\n }\n </div>\n @if (pageAction.undoActionId) {\n <ax-button\n class=\"ax-xs\"\n look=\"blank\"\n color=\"primary\"\n [disabled]=\"pageActionUndoBusy()\"\n [text]=\"('@conversation:mini-chat.page-action.undo' | translate | async) ?? ''\"\n (onClick)=\"onUndoPageAction()\"\n ></ax-button>\n }\n </div>\n }\n @if (assistEntityCardRefs().length > 0) {\n <!-- ----- Entity rows from query/get tools, rendered as shared cards ----- -->\n <div class=\"axm-assist-renderer__entity-cards\">\n @for (ref of assistEntityCardRefs(); track ref.entity + ':' + ref.id) {\n <axm-chat-entity-card [entity]=\"ref.entity\" [entityId]=\"ref.id\" [variant]=\"ref.variant\" />\n }\n </div>\n }\n @for (item of assistPayloadAppendItems(); track $index; let itemIndex = $index) {\n @switch (item.kind) {\n @case ('node') {\n @if (axmAssistWidgetNodeFromUnknown(item.content)) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer [message]=\"syntheticAppendNodeMessage(itemIndex, item.content)\" />\n </div>\n }\n }\n @case ('file') {\n <axm-assist-bot-file-line [parentMessage]=\"message()\" [fileId]=\"item.fileId\" />\n }\n @case ('followUp') {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-assist-suggestion-chips [items]=\"item.items\" />\n </div>\n }\n }\n }\n <!---->\n <!-- ----- Follow-up suggestions preparing ----- -->\n @if (isFollowUpPreparing()) {\n <div\n class=\"axm-assist-renderer__streaming-activity axm-assist-renderer__follow-up-preparing\"\n role=\"status\"\n aria-live=\"polite\"\n [attr.aria-label]=\"('@conversation:chat.assist-renderer.follow-up.aria' | translate | async) ?? ''\"\n >\n <span class=\"axm-assist-renderer__activity-spin inline-block w-3 h-3 rounded-full border-2 border-primary-500 border-t-transparent fa-spin shrink-0\" aria-hidden=\"true\"></span>\n <span class=\"axm-assist-renderer__activity-label text-xs text-muted italic\">{{ '@conversation:chat.assist-renderer.follow-up.preparing' | translate | async }}</span>\n </div>\n }\n }\n </ng-template>\n\n @if (showRetryScreen()) {\n <ax-alert class=\"axm-assist-renderer__retry-alert\" color=\"danger\" role=\"alert\" [attr.aria-label]=\"('@conversation:chat.assist-renderer.retry.aria.panel' | translate | async) ?? ''\">\n <ax-icon><i [class]=\"assistRetryAlertIcon()\"></i></ax-icon>\n <ax-title>{{ assistRetryTitleKey() | translate | async }}</ax-title>\n <ax-content>\n <div class=\"axm-assist-renderer__retry-alert-body\">\n <div class=\"axm-assist-renderer__retry-alert-text\">\n <p class=\"axm-assist-renderer__retry-description\">\n {{ assistRetryDescriptionKey() | translate | async }}\n </p>\n <!---->\n <!-- ----- Technical error text only in debug mode ----- -->\n @if (showDebugUi() && assistResponseError()) {\n <p class=\"axm-assist-renderer__retry-error-detail\">\n {{ assistResponseError() }}\n </p>\n }\n </div>\n\n <ax-button class=\"axm-assist-renderer__retry-action ax-sm\" color=\"danger\" look=\"solid\" [disabled]=\"isRetrying()\" [text]=\"('@conversation:chat.assist-renderer.retry.action' | translate | async) ?? ''\" (onClick)=\"onRetryAssistResponse()\">\n <i class=\"fa-light fa-arrows-rotate\" prefix></i>\n </ax-button>\n </div>\n </ax-content>\n </ax-alert>\n }\n</div>\n"],"names":["i3","i4","i6","i7"],"mappings":"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"}