@acorex-platform/module-conversation-client 0.0.21

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 (35) hide show
  1. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-DsjrXRZ6.mjs +12766 -0
  2. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-DsjrXRZ6.mjs.map +1 -0
  3. package/fesm2022/acorex-platform-module-conversation-client-after-message-sent.command-D-DZ9ylV.mjs +35 -0
  4. package/fesm2022/acorex-platform-module-conversation-client-after-message-sent.command-D-DZ9ylV.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-BfjJCQ-e.mjs +492 -0
  6. package/fesm2022/acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-BfjJCQ-e.mjs.map +1 -0
  7. package/fesm2022/acorex-platform-module-conversation-client-assist-tool-detail-popup.component-GC58B_n0.mjs +120 -0
  8. package/fesm2022/acorex-platform-module-conversation-client-assist-tool-detail-popup.component-GC58B_n0.mjs.map +1 -0
  9. package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-DkX4JSbN.mjs +871 -0
  10. package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-DkX4JSbN.mjs.map +1 -0
  11. package/fesm2022/acorex-platform-module-conversation-client-chat-call-start-popup.component-D4go5xbr.mjs +89 -0
  12. package/fesm2022/acorex-platform-module-conversation-client-chat-call-start-popup.component-D4go5xbr.mjs.map +1 -0
  13. package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-BVJdVPke.mjs +108 -0
  14. package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-BVJdVPke.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-module-conversation-client-comments-page.component-Bq4SdK0_.mjs +83 -0
  16. package/fesm2022/acorex-platform-module-conversation-client-comments-page.component-Bq4SdK0_.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-module-conversation-client-contracts.mjs +225 -0
  18. package/fesm2022/acorex-platform-module-conversation-client-contracts.mjs.map +1 -0
  19. package/fesm2022/acorex-platform-module-conversation-client-emit-typing-indicator.command-BzsN1_ns.mjs +29 -0
  20. package/fesm2022/acorex-platform-module-conversation-client-emit-typing-indicator.command-BzsN1_ns.mjs.map +1 -0
  21. package/fesm2022/acorex-platform-module-conversation-client-mark-conversation-unread.command-BlYDwGVe.mjs +30 -0
  22. package/fesm2022/acorex-platform-module-conversation-client-mark-conversation-unread.command-BlYDwGVe.mjs.map +1 -0
  23. package/fesm2022/acorex-platform-module-conversation-client-open-chat.command-B03q60Qx.mjs +42 -0
  24. package/fesm2022/acorex-platform-module-conversation-client-open-chat.command-B03q60Qx.mjs.map +1 -0
  25. package/fesm2022/acorex-platform-module-conversation-client-retry-assist-response.command-BQLK6F69.mjs +34 -0
  26. package/fesm2022/acorex-platform-module-conversation-client-retry-assist-response.command-BQLK6F69.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-module-conversation-client-start-direct-chat.command-CfSIVHDu.mjs +80 -0
  28. package/fesm2022/acorex-platform-module-conversation-client-start-direct-chat.command-CfSIVHDu.mjs.map +1 -0
  29. package/fesm2022/acorex-platform-module-conversation-client-sync-read-state.command-B1Z_gZ6O.mjs +142 -0
  30. package/fesm2022/acorex-platform-module-conversation-client-sync-read-state.command-B1Z_gZ6O.mjs.map +1 -0
  31. package/fesm2022/acorex-platform-module-conversation-client.mjs +2 -0
  32. package/fesm2022/acorex-platform-module-conversation-client.mjs.map +1 -0
  33. package/package.json +28 -0
  34. package/types/acorex-platform-module-conversation-client-contracts.d.ts +497 -0
  35. package/types/acorex-platform-module-conversation-client.d.ts +1614 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-BfjJCQ-e.mjs","sources":["../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/utils/assist-debug-information.util.ts","../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/utils/assist-delegated-agent-detail-export.util.ts","../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/utils/assist-delegated-agent-transcript-view.util.ts","../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/message-renderers/assist-delegated-agent-transcript-view.component.ts","../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/message-renderers/assist-delegated-agent-transcript-view.component.html","../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/message-renderers/assist-delegated-agent-detail-popup.component.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport type { AXConversation, AXConversationMessage } from '@acorex/components/conversation';\nimport type {\n AXPAiChatMessage,\n AXPAiDelegatedAgentTranscriptEntry,\n AXPAiEngineLastProviderPayload,\n AXPAiEngineRunResult,\n AXPAiEngineUsageTotals,\n} from '@acorex-platform/module-ai-management-client';\nimport { axpAiChatTextMessage, axpSanitizeLastProviderPayloadForPersistence } from '@acorex-platform/module-ai-management-client';\n\nimport { axmReadAssistAiTranscript, axmReadAssistAiTranscriptRaw } from './assist-bot-transcript.util';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** One conversation turn exported as an engine run result (user or assist). */\nexport interface AXMAssistConversationDebugTurn {\n messageId: string;\n timestamp: string;\n result: AXPAiEngineRunResult;\n}\n\n/** Full assist conversation debug export (chronological turns). */\nexport interface AXMAssistConversationDebugExport {\n exportedAt: string;\n conversation: {\n id: string;\n title?: string;\n type?: string;\n metadata?: unknown;\n participants?: unknown;\n };\n turns: AXMAssistConversationDebugTurn[];\n}\n\n//#endregion\n\n//#region ---- Message classification ----\n\n/** True when the message carries assist / AI debug payload worth exporting. */\nexport function axmIsAssistDebugMessage(message: AXConversationMessage | null | undefined): boolean {\n if (!message) {\n return false;\n }\n if (message.type === 'assist-response') {\n return true;\n }\n const meta = message.metadata as Record<string, unknown> | undefined;\n if (meta?.['isAssistResponse'] === true) {\n return true;\n }\n const transcript = axmReadAssistAiTranscript(meta);\n return transcript != null && transcript.length > 0;\n}\n\n//#endregion\n\n//#region ---- Serialization ----\n\nfunction toIsoTimestamp(value: AXConversationMessage['timestamp']): string {\n if (value instanceof Date) {\n return value.toISOString();\n }\n if (typeof value === 'string' || typeof value === 'number') {\n const parsed = new Date(value);\n if (!Number.isNaN(parsed.getTime())) {\n return parsed.toISOString();\n }\n }\n return String(value ?? '');\n}\n\nfunction readRecord(meta: Record<string, unknown> | undefined, key: string): unknown {\n return meta?.[key];\n}\n\n/**\n * Reconstructs {@link AXPAiEngineRunResult} from assist message metadata\n * (same shape returned by {@link AXPAiEngine.run}).\n */\nexport function axmBuildAssistEngineRunResult(message: AXConversationMessage): AXPAiEngineRunResult {\n const meta =\n typeof message.metadata === 'object' && message.metadata != null\n ? (message.metadata as Record<string, unknown>)\n : undefined;\n\n const result: AXPAiEngineRunResult = {\n messages: axmReadAssistAiTranscriptRaw(meta),\n };\n\n const usage = readRecord(meta, 'assistRunUsageTotals');\n if (usage != null && typeof usage === 'object') {\n result.usageTotals = usage as AXPAiEngineUsageTotals;\n }\n\n const lastProvider = readRecord(meta, 'assistRunLastProviderResult');\n if (lastProvider != null && typeof lastProvider === 'object') {\n result.lastProviderResult = axpSanitizeLastProviderPayloadForPersistence(\n lastProvider as AXPAiEngineLastProviderPayload,\n );\n }\n\n const delegated = readRecord(meta, 'assistRunDelegatedTranscriptsByCallId');\n if (delegated != null && typeof delegated === 'object' && !Array.isArray(delegated)) {\n result.delegatedTranscriptsByCallId = delegated as Record<string, AXPAiDelegatedAgentTranscriptEntry>;\n }\n\n return result;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction extractUserChatText(message: AXConversationMessage): string {\n const payload = message.payload;\n if (!isRecord(payload)) {\n return '';\n }\n const text = payload['text'];\n return typeof text === 'string' ? text.trim() : '';\n}\n\n/** User chat line as a minimal engine run result (`messages` only). */\nexport function axmBuildUserTurnEngineRunResult(message: AXConversationMessage): AXPAiEngineRunResult {\n const text = extractUserChatText(message);\n return {\n messages: text ? [axpAiChatTextMessage('user', text)] : [],\n };\n}\n\n/**\n * Pretty-printed JSON for clipboard export (single assist run — {@link AXPAiEngineRunResult}).\n */\nexport function axmFormatAssistMessageDebugText(message: AXConversationMessage): string {\n const run = axmIsAssistDebugMessage(message)\n ? axmBuildAssistEngineRunResult(message)\n : axmBuildUserTurnEngineRunResult(message);\n return JSON.stringify(run, null, 2);\n}\n\n/**\n * Pretty-printed JSON for clipboard export (conversation turns as engine run results).\n */\nexport function axmFormatAssistConversationDebugText(\n conversation: AXConversation | { id?: string; title?: string; type?: string; metadata?: unknown; participants?: unknown },\n messages: AXConversationMessage[],\n): string {\n const chronological = [...messages].sort(\n (a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime(),\n );\n\n const turns: AXMAssistConversationDebugTurn[] = chronological.map((message) => ({\n messageId: message.id,\n timestamp: toIsoTimestamp(message.timestamp),\n result: axmIsAssistDebugMessage(message)\n ? axmBuildAssistEngineRunResult(message)\n : axmBuildUserTurnEngineRunResult(message),\n }));\n\n const snapshot: AXMAssistConversationDebugExport = {\n exportedAt: new Date().toISOString(),\n conversation: {\n id: conversation.id ?? '',\n title: conversation.title,\n type: conversation.type,\n metadata: conversation.metadata,\n participants: conversation.participants,\n },\n turns,\n };\n\n return JSON.stringify(snapshot, null, 2);\n}\n\n/** Safe fragment for debug export filenames. */\nexport function axmSanitizeDebugFilenamePart(id: string): string {\n const sanitized = id.replace(/[^\\w.-]+/g, '_').slice(0, 80).trim();\n return sanitized.length > 0 ? sanitized : 'debug';\n}\n\n/** Triggers a browser download of pretty-printed JSON debug export. */\nexport function axmDownloadDebugJson(filename: string, text: string): void {\n if (!text.trim() || typeof document === 'undefined') {\n return;\n }\n const blob = new Blob([text], { type: 'application/json;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = filename.endsWith('.json') ? filename : `${filename}.json`;\n anchor.rel = 'noopener';\n anchor.click();\n URL.revokeObjectURL(url);\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n AXPAiChatMessage,\n AXPAiDelegatedAgentTranscriptRunInput,\n} from '@acorex-platform/module-ai-management-client';\n\nimport { axmDownloadDebugJson, axmSanitizeDebugFilenamePart } from './assist-debug-information.util';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** JSON shape for delegated specialist detail download. */\nexport interface AXMAssistDelegatedAgentDetailExport {\n exportedAt: string;\n delegationCallId: string;\n agentName?: string;\n runInput?: AXPAiDelegatedAgentTranscriptRunInput;\n messages: AXPAiChatMessage[];\n}\n\n//#endregion\n\n//#region ---- Export ----\n\nexport function axmFormatDelegatedAgentDetailExportJson(\n delegationCallId: string,\n messages: AXPAiChatMessage[],\n runInput?: AXPAiDelegatedAgentTranscriptRunInput,\n agentName?: string,\n): string {\n const snapshot: AXMAssistDelegatedAgentDetailExport = {\n exportedAt: new Date().toISOString(),\n delegationCallId: delegationCallId.trim(),\n ...(agentName?.trim() ? { agentName: agentName.trim() } : {}),\n ...(runInput ? { runInput } : {}),\n messages,\n };\n return JSON.stringify(snapshot, null, 2);\n}\n\nexport function axmDownloadDelegatedAgentDetailJson(\n delegationCallId: string,\n messages: AXPAiChatMessage[],\n runInput?: AXPAiDelegatedAgentTranscriptRunInput,\n agentName?: string,\n): void {\n const text = axmFormatDelegatedAgentDetailExportJson(delegationCallId, messages, runInput, agentName);\n const filename = `assist-delegated-agent-${axmSanitizeDebugFilenamePart(delegationCallId)}.json`;\n axmDownloadDebugJson(filename, text);\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXConversationMessage } from '@acorex/components/conversation';\nimport type { AXPAiChatMessage } from '@acorex-platform/module-ai-management-client';\n\n//#endregion\n\n//#region ---- Tool result index ----\n\n/** Maps tool_call id → tool-role line carrying {@code tool_result} / {@code agent_result}. */\nexport function axmBuildToolResultByCallId(messages: AXPAiChatMessage[]): Map<string, AXPAiChatMessage> {\n const map = new Map<string, AXPAiChatMessage>();\n for (const line of messages) {\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 map.set(callId, line);\n }\n }\n }\n return map;\n}\n\n//#endregion\n\n//#region ---- Formatters ----\n\nexport function axmTryPrettyJson(raw: string): string {\n const trimmed = raw.trim();\n if (!trimmed) {\n return '';\n }\n try {\n return JSON.stringify(JSON.parse(trimmed), null, 2);\n } catch {\n return trimmed;\n }\n}\n\nexport function axmFormatTranscriptArgs(args: unknown): string {\n if (args == null) {\n return '';\n }\n if (typeof args === 'string') {\n return axmTryPrettyJson(args);\n }\n try {\n return JSON.stringify(args, null, 2);\n } catch {\n return String(args);\n }\n}\n\nexport function axmFormatTranscriptFallbackSegment(seg: unknown): string {\n try {\n return JSON.stringify(seg, null, 2);\n } catch {\n return String(seg);\n }\n}\n\n//#endregion\n\n//#region ---- Embed parent stub ----\n\n/** Minimal parent message for synthetic embed renderers inside the detail popup. */\nexport function axmDelegatedTranscriptEmbedParentStub(): AXConversationMessage {\n return {\n id: 'assist-delegated-transcript-embed',\n conversationId: '',\n senderId: 'assist',\n type: 'text',\n payload: { type: 'text', text: '' },\n status: 'sent',\n metadata: { assistEmbed: true },\n } as unknown as AXConversationMessage;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXCodeEditorDefaultLanguage, AXCodeEditorModule } from '@acorex/components/code-editor';\nimport type { AXConversationMessage, AXConversationMessagePayload } from '@acorex/components/conversation';\nimport { AXConversationTextRendererComponent } from '@acorex/components/conversation';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport type {\n AXPAiChatMessage,\n AXPAiChatResponse,\n AXPAiDelegatedAgentResultSegment,\n} from '@acorex-platform/module-ai-management-client';\nimport {\n axpAiChatToolOrAgentResultBodyJson,\n axpAiDelegatedAgentPromptPreview,\n axpAiDelegatedAgentResultSegments,\n axpAiParseSupervisorAgentToolName,\n} from '@acorex-platform/module-ai-management-client';\nimport { AXPMarkdownTemplateDirective, AXPMarkdownViewerComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport {\n axmAssistWidgetNodeFromUnknown,\n axmParseAssistTranscriptTextEnvelope,\n axmPartitionAssistAnswerText,\n axmSyntheticEmbedMessage,\n} from '../utils/assist-bot-transcript.util';\nimport {\n axmBuildToolResultByCallId,\n axmFormatTranscriptArgs,\n axmFormatTranscriptFallbackSegment,\n axmTryPrettyJson,\n} from '../utils/assist-delegated-agent-transcript-view.util';\nimport { axmAssistSegmentDirection } from '../utils/assist-segment-direction.util';\nimport { AXMAssistBotFileLineComponent } from './assist-bot-file-line.component';\nimport { AXMAssistSuggestionChipsComponent } from '../shared/assist-suggestion-chips.component';\nimport { AXMNodeMessageRendererComponent } from './node-message-renderer.component';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Read-only {@link AXPAiChatMessage} transcript (role + responses[]) for delegated specialist detail.\n */\n@Component({\n selector: 'axm-assist-delegated-agent-transcript-view',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXConversationTextRendererComponent,\n AXMNodeMessageRendererComponent,\n AXMAssistBotFileLineComponent,\n AXMAssistSuggestionChipsComponent,\n AXCodeEditorModule,\n AXPMarkdownViewerComponent,\n AXPMarkdownTemplateDirective,\n FormsModule,\n AXTranslationModule,\n AsyncPipe,\n ],\n templateUrl: './assist-delegated-agent-transcript-view.component.html',\n styleUrls: [\n './assist-message-renderer.component.css',\n './assist-delegated-agent-transcript-view.component.css',\n ],\n})\nexport class AXMAssistDelegatedAgentTranscriptViewComponent {\n //#region ---- Inputs ----\n\n readonly messages = input<AXPAiChatMessage[]>([]);\n readonly embedParent = input.required<AXConversationMessage>();\n readonly emptyHint = input<string | undefined>(undefined);\n readonly agentTitleById = input<Record<string, string>>({});\n\n //#endregion\n\n //#region ---- Template helpers ----\n\n protected readonly segmentDir = axmAssistSegmentDirection;\n protected readonly parseAssistLineText = axmParseAssistTranscriptTextEnvelope;\n protected readonly axmAssistWidgetNodeFromUnknown = axmAssistWidgetNodeFromUnknown;\n protected readonly partitionAnswerText = axmPartitionAssistAnswerText;\n protected readonly isDelegatedAgentCommand = (command: string): boolean =>\n axpAiParseSupervisorAgentToolName(command) != null;\n\n //#endregion\n\n //#region ---- Computed ----\n\n readonly hasMessages = computed(() => this.messages().length > 0);\n\n readonly toolResultByCallId = computed(() => axmBuildToolResultByCallId(this.messages()));\n\n readonly displayLines = computed(() =>\n this.messages().map((line, lineIndex) => ({ line, lineIndex })),\n );\n\n //#endregion\n\n //#region ---- Segment renderers ----\n\n protected roleTranslationKey(role: AXPAiChatMessage['role']): string {\n return `@conversation:chat.assist-renderer.delegated-agent.roles.${role}`;\n }\n\n protected resolveToolDisplayTitle(command: string): string {\n const agentId = axpAiParseSupervisorAgentToolName(command);\n if (agentId) {\n const title = this.agentTitleById()[agentId];\n if (title?.trim()) {\n return title.trim();\n }\n return agentId;\n }\n return command?.trim() || 'Tool';\n }\n\n protected toolResultForCallId(callId: string | undefined): AXPAiChatMessage | null {\n if (!callId?.trim()) {\n return null;\n }\n return this.toolResultByCallId().get(callId.trim()) ?? 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 delegatedPromptPreview(argumentsValue: unknown): string {\n return axpAiDelegatedAgentPromptPreview(argumentsValue);\n }\n\n protected formatArgs(args: unknown): string {\n return axmFormatTranscriptArgs(args);\n }\n\n protected formatToolResultBody(line: AXPAiChatMessage): string {\n return axmTryPrettyJson(axpAiChatToolOrAgentResultBodyJson(line));\n }\n\n protected formatFallbackSegment(seg: AXPAiChatResponse): string {\n return axmFormatTranscriptFallbackSegment(seg);\n }\n\n protected syntheticTextMessage(lineIndex: number, segIndex: number, text: string): AXConversationMessage {\n return axmSyntheticEmbedMessage(this.embedParent(), `dt-${lineIndex}-${segIndex}`, {\n type: 'text',\n payload: { type: 'text', text },\n });\n }\n\n protected syntheticNodeEmbedMessage(lineIndex: number, segIndex: number, content: unknown): AXConversationMessage {\n return axmSyntheticEmbedMessage(this.embedParent(), `dn-${lineIndex}-${segIndex}`, {\n type: 'node',\n payload: { type: 'node', content } as unknown as AXConversationMessagePayload,\n });\n }\n\n protected syntheticNodeFromCode(code: string, suffix: string): AXConversationMessage {\n return axmSyntheticEmbedMessage(this.embedParent(), `dc-${suffix}`, {\n type: 'node',\n payload: { type: 'node', content: this.parseCodeAsWidgetContent(code) } as unknown as AXConversationMessagePayload,\n });\n }\n\n protected parseCodeAsWidgetContent(code: string): unknown {\n try {\n return JSON.parse(code.trim());\n } catch {\n return code;\n }\n }\n\n protected widgetNodeFromCode(code: string): ReturnType<typeof axmAssistWidgetNodeFromUnknown> {\n try {\n return axmAssistWidgetNodeFromUnknown(JSON.parse(code.trim()));\n } catch {\n return axmAssistWidgetNodeFromUnknown(code);\n }\n }\n\n protected sectionCollapseKey(lineIndex: number, segIndex: number, section: string): string {\n return `line-${lineIndex}-seg-${segIndex}-${section}`;\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 private isMarkdownCodeSegment(segment: unknown): segment is { type: 'code'; language: string; code: string } {\n if (!segment || typeof segment !== 'object') {\n return false;\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 //#endregion\n}\n\n//#endregion\n","<div class=\"axm-delegated-transcript\">\n @if (!hasMessages() && emptyHint()) {\n <p class=\"axm-delegated-transcript__empty\">{{ emptyHint() }}</p>\n } @else {\n <div class=\"axm-delegated-transcript__lines\" role=\"list\">\n @for (item of displayLines(); track item.lineIndex) {\n @let line = item.line;\n @let lineIndex = item.lineIndex;\n <details\n class=\"axm-delegated-transcript__line-collapse\"\n role=\"listitem\"\n [class.axm-delegated-transcript__line-collapse--user]=\"line.role === 'user'\"\n [class.axm-delegated-transcript__line-collapse--assistant]=\"line.role === 'assistant'\"\n [attr.data-role]=\"line.role\"\n [open]=\"lineIndex === displayLines().length - 1 ? true : null\"\n >\n <summary class=\"axm-delegated-transcript__line-summary\">\n <span class=\"axm-delegated-transcript__role-pill\">{{ roleTranslationKey(line.role) | translate | async }}</span>\n @if (line.delegatedReflection) {\n <span class=\"axm-delegated-transcript__reflection-badge\">{{\n '@conversation:chat.assist-renderer.delegated-agent.reflection' | translate | async\n }}</span>\n }\n @if (line.name?.trim()) {\n <span class=\"axm-delegated-transcript__name\">{{ line.name }}</span>\n }\n </summary>\n\n <div class=\"axm-delegated-transcript__segments\">\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]=\"embedParent()\" [fileId]=\"seg.content.fileId\" />\n } @else if (line.role === 'user' && seg.type === 'text') {\n <details class=\"axm-delegated-transcript__section-collapse\">\n <summary class=\"axm-delegated-transcript__section-summary\">\n {{ '@conversation:chat.assist-renderer.sections.agent-answer' | translate | async }}\n </summary>\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 </details>\n } @else if (line.role === 'assistant' && seg.type === 'think') {\n <details class=\"axm-delegated-transcript__think\">\n <summary class=\"axm-delegated-transcript__think-summary\">\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 </summary>\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(seg.content)\"\n >\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\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n </details>\n } @else if (line.role === 'assistant' && seg.type === 'text') {\n @let parsedLine = parseAssistLineText(seg.content);\n @if (parsedLine.thinking?.trim()) {\n <details class=\"axm-delegated-transcript__think\">\n <summary class=\"axm-delegated-transcript__think-summary\">\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 </summary>\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(parsedLine.thinking ?? '')\"\n >\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\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n </details>\n }\n @if (parsedLine.body.trim()) {\n @let partitionedLine = partitionAnswerText(parsedLine.body);\n <details class=\"axm-delegated-transcript__section-collapse\" open>\n <summary class=\"axm-delegated-transcript__section-summary\">\n {{ '@conversation:chat.assist-renderer.sections.agent-answer' | translate | async }}\n </summary>\n @if (partitionedLine.markdown.trim()) {\n <div\n class=\"axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(partitionedLine.markdown)\"\n >\n <axp-markdown-viewer [markdown]=\"partitionedLine.markdown\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n @if (widgetNodeFromCode(markdownCodeValue(segment))) {\n <div class=\"axm-assist-bot__segment axm-delegated-transcript__widget-embed\" dir=\"auto\">\n <axm-chat-user-form-renderer\n [message]=\"\n syntheticNodeFromCode(\n markdownCodeValue(segment),\n sectionCollapseKey(lineIndex, segIndex, 'md-code')\n )\n \"\n />\n </div>\n } @else {\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n @for (renderable of partitionedLine.renderable; track $index) {\n @switch (renderable.type) {\n @case ('node') {\n @if (axmAssistWidgetNodeFromUnknown(renderable.content)) {\n <div class=\"axm-assist-bot__segment axm-delegated-transcript__widget-embed\" dir=\"auto\">\n <axm-chat-user-form-renderer\n [message]=\"\n syntheticNodeEmbedMessage(lineIndex, segIndex * 100 + $index, renderable.content)\n \"\n />\n </div>\n }\n }\n @case ('followUp') {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-assist-suggestion-chips [items]=\"renderable.content\" />\n </div>\n }\n @case ('file') {\n <axm-assist-bot-file-line\n [parentMessage]=\"embedParent()\"\n [fileId]=\"renderable.content.fileId\"\n />\n }\n }\n }\n </details>\n }\n } @else if (\n line.role === 'assistant' &&\n (seg.type === 'agent' || seg.type === 'tool') &&\n isDelegatedAgentCommand(seg.content.command)\n ) {\n <details class=\"axm-delegated-transcript__tool-collapse\">\n <summary class=\"axm-delegated-transcript__tool-panel-header\">\n <i class=\"fa-light fa-people-group axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n <span class=\"axm-delegated-transcript__tool-panel-title\">{{\n resolveToolDisplayTitle(seg.content.command)\n }}</span>\n </summary>\n <div class=\"axm-delegated-transcript__tool-panel-body\">\n <details class=\"axm-delegated-transcript__section-collapse\">\n <summary class=\"axm-delegated-transcript__section-summary\">\n {{ '@conversation:chat.assist-renderer.sections.agent-prompt' | translate | async }}\n </summary>\n <div\n class=\"axm-delegated-transcript__prompt axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(delegatedPromptPreview(seg.content.arguments))\"\n >\n {{ delegatedPromptPreview(seg.content.arguments) }}\n </div>\n </details>\n <details class=\"axm-delegated-transcript__section-collapse\">\n <summary class=\"axm-delegated-transcript__section-summary\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </summary>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(seg.content.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </details>\n @if (toolResultForCallId(seg.callId); as resultLine) {\n @let outcomeSegs = delegatedAgentOutcomeSegmentsForCall(resultLine);\n @if (outcomeSegs.length > 0) {\n <details class=\"axm-delegated-transcript__section-collapse\" open>\n <summary class=\"axm-delegated-transcript__section-summary\">\n {{ '@conversation:chat.assist-renderer.sections.agent-answer' | translate | async }}\n </summary>\n @for (outSeg of outcomeSegs; track $index; let outcomeIndex = $index) {\n @switch (outSeg.type) {\n @case ('text') {\n @let parsedOut = parseAssistLineText(outSeg.content);\n @if (parsedOut.thinking?.trim()) {\n <details class=\"axm-delegated-transcript__think\">\n <summary class=\"axm-delegated-transcript__think-summary\">\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 </summary>\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(parsedOut.thinking ?? '')\"\n >\n <axp-markdown-viewer [markdown]=\"parsedOut.thinking ?? ''\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n </details>\n }\n @if (parsedOut.body.trim()) {\n @let partitionedOut = partitionAnswerText(parsedOut.body);\n @if (partitionedOut.markdown.trim()) {\n <div\n class=\"axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(partitionedOut.markdown)\"\n >\n <axp-markdown-viewer [markdown]=\"partitionedOut.markdown\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n @if (widgetNodeFromCode(markdownCodeValue(segment))) {\n <div\n class=\"axm-assist-bot__segment axm-delegated-transcript__widget-embed\"\n dir=\"auto\"\n >\n <axm-chat-user-form-renderer\n [message]=\"\n syntheticNodeFromCode(\n markdownCodeValue(segment),\n sectionCollapseKey(\n lineIndex,\n segIndex * 1000 + outcomeIndex,\n 'out-code'\n )\n )\n \"\n />\n </div>\n } @else {\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n @for (renderable of partitionedOut.renderable; track $index; let renderableIndex = $index) {\n @switch (renderable.type) {\n @case ('node') {\n @if (axmAssistWidgetNodeFromUnknown(renderable.content)) {\n <div\n class=\"axm-assist-bot__segment axm-delegated-transcript__widget-embed\"\n dir=\"auto\"\n >\n <axm-chat-user-form-renderer\n [message]=\"\n syntheticNodeEmbedMessage(\n lineIndex,\n segIndex * 1000 + outcomeIndex * 10 + renderableIndex,\n renderable.content\n )\n \"\n />\n </div>\n }\n }\n @case ('followUp') {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-assist-suggestion-chips [items]=\"renderable.content\" />\n </div>\n }\n @case ('file') {\n <axm-assist-bot-file-line\n [parentMessage]=\"embedParent()\"\n [fileId]=\"renderable.content.fileId\"\n />\n }\n }\n }\n }\n }\n @case ('think') {\n <details class=\"axm-delegated-transcript__think\">\n <summary class=\"axm-delegated-transcript__think-summary\">\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 </summary>\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(outSeg.content)\"\n >\n <axp-markdown-viewer [markdown]=\"outSeg.content\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n </details>\n }\n @case ('file') {\n <axm-assist-bot-file-line [parentMessage]=\"embedParent()\" [fileId]=\"outSeg.content.fileId\" />\n }\n @case ('node') {\n @if (axmAssistWidgetNodeFromUnknown(outSeg.content)) {\n <div class=\"axm-assist-bot__segment axm-delegated-transcript__widget-embed\" dir=\"auto\">\n <axm-chat-user-form-renderer\n [message]=\"\n syntheticNodeEmbedMessage(lineIndex, segIndex * 1000 + outcomeIndex, outSeg.content)\n \"\n />\n </div>\n }\n }\n @case ('followUp') {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-assist-suggestion-chips [items]=\"outSeg.content\" />\n </div>\n }\n }\n }\n </details>\n } @else {\n <details class=\"axm-delegated-transcript__section-collapse\">\n <summary class=\"axm-delegated-transcript__section-summary\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </summary>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatToolResultBody(resultLine)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </details>\n }\n }\n </div>\n </details>\n } @else if (line.role === 'assistant' && (seg.type === 'agent' || seg.type === 'tool')) {\n <details class=\"axm-delegated-transcript__tool-collapse\">\n <summary class=\"axm-delegated-transcript__tool-panel-header\">\n <i class=\"fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n <span class=\"axm-delegated-transcript__tool-panel-title\">{{\n resolveToolDisplayTitle(seg.content.command)\n }}</span>\n </summary>\n <div class=\"axm-delegated-transcript__tool-panel-body\">\n <details class=\"axm-delegated-transcript__section-collapse\">\n <summary class=\"axm-delegated-transcript__section-summary\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </summary>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(seg.content.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </details>\n @if (toolResultForCallId(seg.callId); as resultLine) {\n <details class=\"axm-delegated-transcript__section-collapse\" open>\n <summary class=\"axm-delegated-transcript__section-summary\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </summary>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatToolResultBody(resultLine)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </details>\n }\n </div>\n </details>\n } @else if (line.role === 'assistant' && seg.type === 'node') {\n @if (axmAssistWidgetNodeFromUnknown(seg.content)) {\n <details class=\"axm-delegated-transcript__section-collapse\" open>\n <summary class=\"axm-delegated-transcript__section-summary\">\n {{ '@conversation:chat.assist-renderer.sections.agent-answer' | translate | async }}\n </summary>\n <div class=\"axm-assist-bot__segment axm-delegated-transcript__widget-embed\" dir=\"auto\">\n <axm-chat-user-form-renderer\n [message]=\"syntheticNodeEmbedMessage(lineIndex, segIndex, seg.content)\"\n />\n </div>\n </details>\n }\n } @else if (line.role === 'assistant' && seg.type === 'file') {\n <axm-assist-bot-file-line [parentMessage]=\"embedParent()\" [fileId]=\"seg.content.fileId\" />\n } @else if (line.role === 'tool' && (seg.type === 'tool_result' || seg.type === 'agent_result')) {\n <!-- Shown on the matching tool/agent block above -->\n } @else if (line.role === 'system' && seg.type === 'text') {\n <details class=\"axm-delegated-transcript__section-collapse\">\n <summary class=\"axm-delegated-transcript__section-summary\">\n {{ '@conversation:chat.assist-renderer.delegated-agent.roles.system' | translate | async }}\n </summary>\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 </details>\n } @else {\n <details class=\"axm-delegated-transcript__section-collapse\">\n <summary class=\"axm-delegated-transcript__section-summary\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </summary>\n <div\n class=\"axm-assist-bot__fallback axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(formatFallbackSegment(seg))\"\n >\n {{ formatFallbackSegment(seg) }}\n </div>\n </details>\n }\n }\n </div>\n </details>\n }\n </div>\n }\n</div>\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport type { AXPAiChatMessage, AXPAiDelegatedAgentTranscriptRunInput } from '@acorex-platform/module-ai-management-client';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { axmDownloadDelegatedAgentDetailJson } from '../utils/assist-delegated-agent-detail-export.util';\nimport { axmDelegatedTranscriptEmbedParentStub } from '../utils/assist-delegated-agent-transcript-view.util';\nimport { AXMAssistDelegatedAgentTranscriptViewComponent } from './assist-delegated-agent-transcript-view.component';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMAssistDelegatedAgentDetailPopupData {\n delegationCallId: string;\n messages: AXPAiChatMessage[];\n runInput?: AXPAiDelegatedAgentTranscriptRunInput;\n agentName?: string;\n emptyHint?: string;\n agentTitleById?: Record<string, string>;\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-assist-delegated-agent-detail-popup',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXMAssistDelegatedAgentTranscriptViewComponent,\n AXButtonModule,\n AXTranslationModule,\n AsyncPipe,\n AXDecoratorModule,\n ],\n template: `\n <div class=\"axm-assist-delegated-detail-popup\">\n <axm-assist-delegated-agent-transcript-view\n [messages]=\"messages\"\n [embedParent]=\"embedParent\"\n [emptyHint]=\"emptyHint\"\n [agentTitleById]=\"agentTitleById\"\n />\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"outline\"\n color=\"primary\"\n icon=\"fa-light fa-download\"\n [text]=\"'@conversation:chat.assist-renderer.delegated-agent.download-json' | translate | async\"\n [disabled]=\"!messages.length\"\n (onClick)=\"downloadJson()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@general:actions.close.title' | translate | async\"\n (onClick)=\"close()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n </div>\n `,\n styles: [\n `\n .axm-assist-delegated-detail-popup {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n min-block-size: 0;\n }\n\n .axm-assist-delegated-detail-popup ax-footer ax-suffix {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: 0.5rem;\n }\n `,\n ],\n})\nexport class AXMAssistDelegatedAgentDetailPopupComponent extends AXBasePageComponent {\n /** Set by {@link AXPopupService} from `data`. */\n delegationCallId = '';\n\n messages: AXPAiChatMessage[] = [];\n\n runInput?: AXPAiDelegatedAgentTranscriptRunInput;\n\n agentName?: string;\n\n emptyHint?: string;\n\n agentTitleById: Record<string, string> = {};\n\n embedParent = axmDelegatedTranscriptEmbedParentStub();\n\n protected downloadJson(): void {\n axmDownloadDelegatedAgentDetailJson(\n this.delegationCallId,\n this.messages,\n this.runInput,\n this.agentName,\n );\n }\n}\n\n//#endregion\n"],"names":["i1","i2","i3"],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ import * as i1 from '@acorex/components/button';
2
+ import { AXButtonModule } from '@acorex/components/button';
3
+ import * as i5 from '@acorex/components/code-editor';
4
+ import { AXCodeEditorModule } from '@acorex/components/code-editor';
5
+ import * as i2 from '@acorex/components/decorators';
6
+ import { AXDecoratorModule } from '@acorex/components/decorators';
7
+ import { AXBasePageComponent } from '@acorex/components/page';
8
+ import * as i1$2 from '@acorex/core/translation';
9
+ import { AXTranslationModule } from '@acorex/core/translation';
10
+ import { AsyncPipe } from '@angular/common';
11
+ import * as i0 from '@angular/core';
12
+ import { ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
13
+ import * as i1$1 from '@angular/forms';
14
+ import { FormsModule } from '@angular/forms';
15
+
16
+ //#region ---- Imports -----
17
+ //#endregion
18
+ //#region ---- Component -----
19
+ class AXMAssistToolDetailPopupComponent extends AXBasePageComponent {
20
+ constructor() {
21
+ super(...arguments);
22
+ this.toolTitle = '';
23
+ this.inputJson = '';
24
+ }
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMAssistToolDetailPopupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
26
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMAssistToolDetailPopupComponent, isStandalone: true, selector: "axm-assist-tool-detail-popup", usesInheritance: true, ngImport: i0, template: `
27
+ <div class="axm-assist-tool-detail-popup">
28
+ <div class="axm-assist-tool-detail-popup__section">
29
+ <div class="axm-assist-renderer__tool-section-label">
30
+ {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}
31
+ </div>
32
+ <div class="axm-assist-renderer__tool-editor-wrap" style="direction: ltr">
33
+ <ax-code-editor
34
+ [ngModel]="inputJson"
35
+ [readonly]="true"
36
+ language="json"
37
+ [lineNumbers]="true"
38
+ class="axm-assist-renderer__tool-editor"
39
+ ></ax-code-editor>
40
+ </div>
41
+ </div>
42
+ @if (outputJson?.trim()) {
43
+ <div class="axm-assist-tool-detail-popup__section">
44
+ <div class="axm-assist-renderer__tool-section-label">
45
+ {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}
46
+ </div>
47
+ <div class="axm-assist-renderer__tool-editor-wrap" style="direction: ltr">
48
+ <ax-code-editor
49
+ [ngModel]="outputJson"
50
+ [readonly]="true"
51
+ language="json"
52
+ [lineNumbers]="true"
53
+ class="axm-assist-renderer__tool-editor"
54
+ ></ax-code-editor>
55
+ </div>
56
+ </div>
57
+ }
58
+ <ax-footer>
59
+ <ax-suffix>
60
+ <ax-button
61
+ look="solid"
62
+ color="primary"
63
+ [text]="'@general:actions.close.title' | translate | async"
64
+ (onClick)="close()"
65
+ ></ax-button>
66
+ </ax-suffix>
67
+ </ax-footer>
68
+ </div>
69
+ `, isInline: true, styles: ["@layer properties;.axm-assist-renderer{display:flex;flex-direction:column;gap:.25rem}.axm-assist-renderer axm-assist-suggestion-chips>div{padding:0;padding-top:calc(var(--spacing, .25rem) * 4)}.axm-assist-renderer .axm-assist-renderer__cursor{display:inline-block;inline-size:6px;block-size:1em;margin-inline-start:2px;background:rgb(var(--ax-sys-color-primary-500));border-radius:1px;animation:axm-blink .8s steps(2) infinite;vertical-align:text-bottom}.axm-assist-renderer .axm-assist-renderer__stream-content{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}.axm-assist-renderer .axm-assist-renderer__streaming-activity{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 2);padding-block:.15rem}.axm-assist-renderer .axm-assist-renderer__activity-label{line-height:1.45}.axm-assist-renderer .axm-assist-renderer__text{white-space:pre-line;word-break:break-word;line-height:1.85;font-size:.95rem;letter-spacing:.002em;text-wrap:pretty}.axm-assist-renderer .axm-assist-renderer__markdown .axp-markdown-viewer__content :is(p,ul,ol){margin-block:.45rem}.axm-assist-renderer .axm-assist-renderer__markdown .axp-markdown-viewer__content li{line-height:1.8}.axm-assist-renderer .axm-assist-renderer__accordion-group{width:100%}.axm-assist-renderer .axm-assist-renderer__collapse-shell{border-radius:.625rem;overflow:hidden;background:rgb(var(--ax-sys-color-lighter-surface))}.axm-assist-renderer .axm-assist-renderer__collapse-shell>.axm-assist-renderer__accordion-header:hover{background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer .axm-assist-renderer__collapse-body{margin:0;padding:0;border-radius:0 0 .5rem .5rem;background:transparent}.axm-assist-renderer .axm-assist-renderer__collapse-body>.axm-assist-renderer__agent-live-block--in-accordion{padding-inline:.5rem;padding-block-end:.35rem}.axm-assist-renderer .axm-assist-renderer__accordion-header{display:flex;cursor:pointer;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);--tw-border-style: none;border-style:none;padding:.5rem .75rem;background:transparent;border-radius:.625rem .625rem 0 0;transition:background-color .15s ease}.axm-assist-renderer .axm-assist-renderer__accordion-header-main{display:flex;flex-direction:column;min-inline-size:0;gap:.1rem}.axm-assist-renderer .axm-assist-renderer__accordion-header-title{display:inline-flex;align-items:center;--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);font-size:.8125rem;line-height:1.25;color:rgb(var(--ax-sys-color-on-surface));gap:.4rem}.axm-assist-renderer .axm-assist-renderer__header-trailing{display:inline-flex;flex-shrink:0;align-items:center;gap:.35rem}.axm-assist-renderer .axm-assist-renderer__delegated-agent-detail-link{text-decoration-line:underline;padding:.25rem;padding-top:0}.axm-assist-renderer .axm-assist-renderer__badge{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;overflow:hidden;border-radius:calc(infinity * 1px);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);text-overflow:ellipsis;white-space:nowrap;max-width:min(100%,14rem);padding:.1875rem .65rem;font-size:.6875rem;line-height:1.3;letter-spacing:.03em}.axm-assist-renderer .axm-assist-renderer__badge--warning{background:rgb(var(--ax-sys-color-warning-100))}.axm-assist-renderer .axm-assist-renderer__badge--primary{background:rgb(var(--ax-sys-color-primary-100))}.axm-assist-renderer .axm-assist-renderer__badge--success{background:rgb(var(--ax-sys-color-success-100))}.axm-assist-renderer .axm-assist-renderer__thinking-chevron{display:inline-block;flex-shrink:0;font-size:.65rem;opacity:.65;transition:transform .2s ease;line-height:1}.axm-assist-renderer .axm-assist-renderer__thinking-chevron--expanded{transform:rotate(180deg)}.axm-assist-renderer .axm-assist-renderer__thinking-body{padding:.625rem .75rem .75rem;font-size:.78rem;color:rgb(var(--ax-sys-color-neutral-700));word-break:break-word;line-height:1.55}.axm-assist-renderer .axm-assist-renderer__thinking-body.axm-assist-renderer__markdown .axp-markdown-viewer__content{font-size:inherit;color:inherit;line-height:inherit}.axm-assist-renderer .axm-assist-renderer__thinking-body.axm-assist-renderer__markdown .axp-markdown-viewer__content :is(p,ul,ol){margin-block:.35rem}.axm-assist-renderer .axm-assist-renderer__thinking-body.axm-assist-renderer__markdown .axp-markdown-viewer__content li{line-height:inherit}.axm-assist-renderer .axm-assist-renderer__tools{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}.axm-assist-renderer .axm-assist-renderer__tool-row{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);padding:.5rem .65rem;border-radius:.625rem;background:rgb(var(--ax-sys-color-lighter-surface));border:1px solid rgb(var(--ax-sys-color-border-lighter-surface))}.axm-assist-renderer .axm-assist-renderer__tool-row-main{display:flex;min-width:0px;align-items:center;gap:.45rem}.axm-assist-renderer .axm-assist-renderer__tool-row-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);color:rgb(var(--ax-sys-color-on-surface))}.axm-assist-renderer .axm-assist-renderer__tool-model-label{flex-shrink:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-font-weight: var(--font-weight-normal, 400);font-weight:var(--font-weight-normal, 400);max-width:9rem;letter-spacing:.01em;color:rgb(var(--ax-sys-color-neutral-600));opacity:.78}.axm-assist-renderer .axm-assist-renderer__tool-card{border-radius:.625rem;overflow:hidden}.axm-assist-renderer .axm-assist-renderer__tool-body{display:flex;flex-direction:column;padding:.625rem .75rem .75rem;gap:.35rem}.axm-assist-renderer .axm-assist-renderer__tool-section-label{--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);text-transform:uppercase;font-size:.625rem;letter-spacing:.06em;color:rgb(var(--ax-sys-color-neutral-700))}.axm-assist-renderer .axm-assist-renderer__tool-pre{margin:0;overflow:auto;border-radius:var(--radius-md, .375rem);max-block-size:10rem;background:rgb(var(--ax-sys-color-light-surface));padding:.5rem;font-family:var(--ax-font-mono, monospace);font-size:.675rem;line-height:1.45;word-break:break-word}.axm-assist-renderer .axm-assist-renderer__run-meta-wrap{margin-block-start:.45rem}.axm-assist-renderer .axm-assist-renderer__run-meta-header-sub{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.7rem;line-height:1.35;color:rgb(var(--ax-sys-color-neutral-700));max-width:100%}.axm-assist-renderer .axm-assist-renderer__run-meta{display:flex;flex-direction:column;margin-block-start:.45rem;padding:.55rem .65rem .6rem;border-radius:.625rem;background:rgb(var(--ax-sys-color-lighter-surface));gap:.45rem}.axm-assist-renderer .axm-assist-renderer__run-meta--panel{margin-block-start:0;padding:.45rem .5rem .55rem;background:transparent;border-radius:0}.axm-assist-renderer .axm-assist-renderer__run-meta-grid{display:flex;gap:.4rem}.axm-assist-renderer .axm-assist-renderer__meta-tile{min-width:0px;padding:.4rem .5rem .45rem;border-radius:.45rem;background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer .axm-assist-renderer__meta-tile--wide{grid-column:1/-1}.axm-assist-renderer .axm-assist-renderer__meta-tile--accent{background:rgb(var(--ax-sys-color-primary-50))}.axm-assist-renderer .axm-assist-renderer__meta-tile-label{--tw-font-weight: var(--font-weight-bold, 700);font-weight:var(--font-weight-bold, 700);text-transform:uppercase;font-size:.6rem;letter-spacing:.06em;color:rgb(var(--ax-sys-color-neutral-700));margin-block-end:.2rem}.axm-assist-renderer .axm-assist-renderer__meta-tile-value{--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);font-size:.78rem;line-height:1.35;color:rgb(var(--ax-sys-color-on-surface));word-break:break-word}.axm-assist-renderer .axm-assist-renderer__meta-tile-value--mono{font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\" 1}.axm-assist-renderer .axm-assist-renderer__meta-tile-sub{margin-block-start:.15rem;font-size:.65rem;line-height:1.3;color:rgb(var(--ax-sys-color-neutral-700));font-family:var(--ax-font-mono, ui-monospace, monospace);word-break:break-all}.axm-assist-renderer .axm-assist-renderer__meta-tile-note{display:inline;--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);margin-inline-start:.2rem;font-size:.65rem;color:rgb(var(--ax-sys-color-success-700))}.axm-assist-renderer .axm-assist-renderer__tool-editor-wrap{overflow:hidden;border-radius:var(--radius-md, .375rem);background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer .axm-assist-renderer__waiting{display:flex;gap:.25rem;padding:.25rem 0}.axm-assist-renderer .axm-assist-renderer__dot{inline-size:6px;block-size:6px;border-radius:50%;background:rgb(var(--ax-sys-color-neutral-500));animation:axm-blink 1.2s ease-in-out infinite}.axm-assist-renderer .axm-assist-renderer__dot:nth-child(2){animation-delay:.2s}.axm-assist-renderer .axm-assist-renderer__dot:nth-child(3){animation-delay:.4s}.axm-assist-renderer .axm-assist-renderer__agent-live-block{display:flex;flex-direction:column;border-radius:.75rem;background:rgb(var(--ax-sys-color-lighter-surface));padding:.75rem .875rem;gap:.65rem;max-inline-size:min(42rem,100%)}.axm-assist-renderer .axm-assist-renderer__agent-live-block--in-accordion{background:rgb(var(--ax-sys-color-light-surface));border-radius:.5rem;padding:.5rem .55rem .55rem;max-inline-size:none}.axm-assist-renderer .axm-assist-renderer__agent-live-header{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem}.axm-assist-renderer .axm-assist-renderer__agent-live-title{flex:1;--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);font-size:.8125rem;color:rgb(var(--ax-sys-color-on-surface));min-inline-size:0}.axm-assist-renderer .axm-assist-renderer__agent-live-prompt{align-self:flex-end;font-size:.8125rem;line-height:1.55;word-break:break-word;padding:.5rem .75rem;border-radius:1.25rem;background:rgb(var(--ax-sys-color-lightest-surface));max-inline-size:min(92%,36rem)}.axm-assist-renderer .axm-assist-renderer__agent-live-stream{font-size:.8125rem;line-height:1.55;white-space:pre-line;word-break:break-word;padding-block-start:.15rem}.axm-assist-renderer .axm-assist-renderer__agent-live-nested-tools{display:flex;flex-direction:column;gap:.35rem;padding-block-start:.35rem}.axm-assist-renderer .axm-assist-renderer__agent-live-nested-row{display:flex;align-items:center;gap:.45rem;font-size:.72rem}.axm-assist-renderer .axm-assist-renderer__agent-live-nested-name{flex:1;overflow:hidden;text-overflow:ellipsis;font-family:var(--ax-font-mono, monospace);font-size:.7rem;min-inline-size:0}.axm-assist-renderer .axm-assist-renderer__agent-live-nested-status{flex-shrink:0;color:rgb(var(--ax-sys-color-neutral-600))}.axm-assist-renderer .axm-assist-renderer__retry-alert-body{display:flex;align-items:flex-start;gap:.75rem}.axm-assist-renderer .axm-assist-renderer__retry-alert-text{display:flex;flex:1;flex-direction:column;min-inline-size:0;gap:.3rem}.axm-assist-renderer .axm-assist-renderer__retry-description{margin:0;font-size:.8125rem;line-height:1.5;opacity:.92}.axm-assist-renderer .axm-assist-renderer__retry-error-detail{margin:.15rem 0 0;font-size:.75rem;line-height:1.45;font-family:var(--ax-font-mono, ui-monospace, monospace);word-break:break-word;opacity:.88}.axm-assist-renderer .axm-assist-renderer__retry-action{flex-shrink:0;align-self:center}.axm-assist-bot,.axm-assist-bot .axm-assist-bot__final-line{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 3)}.axm-assist-bot .axm-assist-bot__segment{unicode-bidi:isolate;font-size:.95rem;line-height:1.8;letter-spacing:.002em;color:rgb(var(--ax-sys-color-on-surface));text-wrap:pretty}.axm-assist-bot .axm-assist-bot__segment:has(axm-chat-user-form-renderer){inline-size:100%;max-inline-size:100%}.axm-assist-bot .axm-assist-bot__segment ax-conversation-text-renderer{display:block}.axm-assist-bot .axm-assist-bot__segment ax-conversation-text-renderer :is(p,ul,ol){margin-block:.45rem}.axm-assist-bot .axm-assist-bot__segment ax-conversation-text-renderer li{line-height:1.8}.axm-assist-bot .axm-assist-bot__line--user{align-self:flex-end}.axm-assist-bot .axm-assist-bot__line--tool-role{align-self:stretch}.axm-assist-bot .axm-assist-bot__tool-result{border-radius:var(--radius-lg, .5rem);background:rgb(var(--ax-sys-color-lighter-surface));padding:.5rem .75rem}.axm-assist-bot .axm-assist-bot__fallback{font-size:.88rem;line-height:1.75;word-break:break-word;opacity:.9}@keyframes axm-blink{0%{opacity:1}50%{opacity:0}}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n", ".axm-assist-tool-detail-popup{display:flex;flex-direction:column;gap:.75rem;min-block-size:0}.axm-assist-tool-detail-popup__section{display:flex;flex-direction:column;gap:.35rem}.axm-assist-tool-detail-popup ax-footer ax-suffix{display:flex;justify-content:flex-end}\n"], dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXCodeEditorModule }, { kind: "component", type: i5.AXCodeEditorComponent, selector: "ax-code-editor", inputs: ["disabled", "value", "state", "name", "id", "language", "readonly", "placeholder", "lineNumbers", "lineWrapping", "tabSize", "indentWithTab", "theme", "extensions", "ariaLabel", "focusOnReady", "formatOnSave", "minRow", "customCompletions"], outputs: ["onValueChanged", "valueChange", "stateChange", "readonlyChange", "disabledChange", "ready", "save"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "pipe", type: i1$2.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
70
+ }
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMAssistToolDetailPopupComponent, decorators: [{
72
+ type: Component,
73
+ args: [{ selector: 'axm-assist-tool-detail-popup', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [AXButtonModule, AXCodeEditorModule, AXTranslationModule, AsyncPipe, FormsModule, AXDecoratorModule], template: `
74
+ <div class="axm-assist-tool-detail-popup">
75
+ <div class="axm-assist-tool-detail-popup__section">
76
+ <div class="axm-assist-renderer__tool-section-label">
77
+ {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}
78
+ </div>
79
+ <div class="axm-assist-renderer__tool-editor-wrap" style="direction: ltr">
80
+ <ax-code-editor
81
+ [ngModel]="inputJson"
82
+ [readonly]="true"
83
+ language="json"
84
+ [lineNumbers]="true"
85
+ class="axm-assist-renderer__tool-editor"
86
+ ></ax-code-editor>
87
+ </div>
88
+ </div>
89
+ @if (outputJson?.trim()) {
90
+ <div class="axm-assist-tool-detail-popup__section">
91
+ <div class="axm-assist-renderer__tool-section-label">
92
+ {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}
93
+ </div>
94
+ <div class="axm-assist-renderer__tool-editor-wrap" style="direction: ltr">
95
+ <ax-code-editor
96
+ [ngModel]="outputJson"
97
+ [readonly]="true"
98
+ language="json"
99
+ [lineNumbers]="true"
100
+ class="axm-assist-renderer__tool-editor"
101
+ ></ax-code-editor>
102
+ </div>
103
+ </div>
104
+ }
105
+ <ax-footer>
106
+ <ax-suffix>
107
+ <ax-button
108
+ look="solid"
109
+ color="primary"
110
+ [text]="'@general:actions.close.title' | translate | async"
111
+ (onClick)="close()"
112
+ ></ax-button>
113
+ </ax-suffix>
114
+ </ax-footer>
115
+ </div>
116
+ `, styles: ["@layer properties;.axm-assist-renderer{display:flex;flex-direction:column;gap:.25rem}.axm-assist-renderer axm-assist-suggestion-chips>div{padding:0;padding-top:calc(var(--spacing, .25rem) * 4)}.axm-assist-renderer .axm-assist-renderer__cursor{display:inline-block;inline-size:6px;block-size:1em;margin-inline-start:2px;background:rgb(var(--ax-sys-color-primary-500));border-radius:1px;animation:axm-blink .8s steps(2) infinite;vertical-align:text-bottom}.axm-assist-renderer .axm-assist-renderer__stream-content{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}.axm-assist-renderer .axm-assist-renderer__streaming-activity{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 2);padding-block:.15rem}.axm-assist-renderer .axm-assist-renderer__activity-label{line-height:1.45}.axm-assist-renderer .axm-assist-renderer__text{white-space:pre-line;word-break:break-word;line-height:1.85;font-size:.95rem;letter-spacing:.002em;text-wrap:pretty}.axm-assist-renderer .axm-assist-renderer__markdown .axp-markdown-viewer__content :is(p,ul,ol){margin-block:.45rem}.axm-assist-renderer .axm-assist-renderer__markdown .axp-markdown-viewer__content li{line-height:1.8}.axm-assist-renderer .axm-assist-renderer__accordion-group{width:100%}.axm-assist-renderer .axm-assist-renderer__collapse-shell{border-radius:.625rem;overflow:hidden;background:rgb(var(--ax-sys-color-lighter-surface))}.axm-assist-renderer .axm-assist-renderer__collapse-shell>.axm-assist-renderer__accordion-header:hover{background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer .axm-assist-renderer__collapse-body{margin:0;padding:0;border-radius:0 0 .5rem .5rem;background:transparent}.axm-assist-renderer .axm-assist-renderer__collapse-body>.axm-assist-renderer__agent-live-block--in-accordion{padding-inline:.5rem;padding-block-end:.35rem}.axm-assist-renderer .axm-assist-renderer__accordion-header{display:flex;cursor:pointer;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);--tw-border-style: none;border-style:none;padding:.5rem .75rem;background:transparent;border-radius:.625rem .625rem 0 0;transition:background-color .15s ease}.axm-assist-renderer .axm-assist-renderer__accordion-header-main{display:flex;flex-direction:column;min-inline-size:0;gap:.1rem}.axm-assist-renderer .axm-assist-renderer__accordion-header-title{display:inline-flex;align-items:center;--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);font-size:.8125rem;line-height:1.25;color:rgb(var(--ax-sys-color-on-surface));gap:.4rem}.axm-assist-renderer .axm-assist-renderer__header-trailing{display:inline-flex;flex-shrink:0;align-items:center;gap:.35rem}.axm-assist-renderer .axm-assist-renderer__delegated-agent-detail-link{text-decoration-line:underline;padding:.25rem;padding-top:0}.axm-assist-renderer .axm-assist-renderer__badge{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;overflow:hidden;border-radius:calc(infinity * 1px);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);text-overflow:ellipsis;white-space:nowrap;max-width:min(100%,14rem);padding:.1875rem .65rem;font-size:.6875rem;line-height:1.3;letter-spacing:.03em}.axm-assist-renderer .axm-assist-renderer__badge--warning{background:rgb(var(--ax-sys-color-warning-100))}.axm-assist-renderer .axm-assist-renderer__badge--primary{background:rgb(var(--ax-sys-color-primary-100))}.axm-assist-renderer .axm-assist-renderer__badge--success{background:rgb(var(--ax-sys-color-success-100))}.axm-assist-renderer .axm-assist-renderer__thinking-chevron{display:inline-block;flex-shrink:0;font-size:.65rem;opacity:.65;transition:transform .2s ease;line-height:1}.axm-assist-renderer .axm-assist-renderer__thinking-chevron--expanded{transform:rotate(180deg)}.axm-assist-renderer .axm-assist-renderer__thinking-body{padding:.625rem .75rem .75rem;font-size:.78rem;color:rgb(var(--ax-sys-color-neutral-700));word-break:break-word;line-height:1.55}.axm-assist-renderer .axm-assist-renderer__thinking-body.axm-assist-renderer__markdown .axp-markdown-viewer__content{font-size:inherit;color:inherit;line-height:inherit}.axm-assist-renderer .axm-assist-renderer__thinking-body.axm-assist-renderer__markdown .axp-markdown-viewer__content :is(p,ul,ol){margin-block:.35rem}.axm-assist-renderer .axm-assist-renderer__thinking-body.axm-assist-renderer__markdown .axp-markdown-viewer__content li{line-height:inherit}.axm-assist-renderer .axm-assist-renderer__tools{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}.axm-assist-renderer .axm-assist-renderer__tool-row{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);padding:.5rem .65rem;border-radius:.625rem;background:rgb(var(--ax-sys-color-lighter-surface));border:1px solid rgb(var(--ax-sys-color-border-lighter-surface))}.axm-assist-renderer .axm-assist-renderer__tool-row-main{display:flex;min-width:0px;align-items:center;gap:.45rem}.axm-assist-renderer .axm-assist-renderer__tool-row-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);color:rgb(var(--ax-sys-color-on-surface))}.axm-assist-renderer .axm-assist-renderer__tool-model-label{flex-shrink:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-font-weight: var(--font-weight-normal, 400);font-weight:var(--font-weight-normal, 400);max-width:9rem;letter-spacing:.01em;color:rgb(var(--ax-sys-color-neutral-600));opacity:.78}.axm-assist-renderer .axm-assist-renderer__tool-card{border-radius:.625rem;overflow:hidden}.axm-assist-renderer .axm-assist-renderer__tool-body{display:flex;flex-direction:column;padding:.625rem .75rem .75rem;gap:.35rem}.axm-assist-renderer .axm-assist-renderer__tool-section-label{--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);text-transform:uppercase;font-size:.625rem;letter-spacing:.06em;color:rgb(var(--ax-sys-color-neutral-700))}.axm-assist-renderer .axm-assist-renderer__tool-pre{margin:0;overflow:auto;border-radius:var(--radius-md, .375rem);max-block-size:10rem;background:rgb(var(--ax-sys-color-light-surface));padding:.5rem;font-family:var(--ax-font-mono, monospace);font-size:.675rem;line-height:1.45;word-break:break-word}.axm-assist-renderer .axm-assist-renderer__run-meta-wrap{margin-block-start:.45rem}.axm-assist-renderer .axm-assist-renderer__run-meta-header-sub{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.7rem;line-height:1.35;color:rgb(var(--ax-sys-color-neutral-700));max-width:100%}.axm-assist-renderer .axm-assist-renderer__run-meta{display:flex;flex-direction:column;margin-block-start:.45rem;padding:.55rem .65rem .6rem;border-radius:.625rem;background:rgb(var(--ax-sys-color-lighter-surface));gap:.45rem}.axm-assist-renderer .axm-assist-renderer__run-meta--panel{margin-block-start:0;padding:.45rem .5rem .55rem;background:transparent;border-radius:0}.axm-assist-renderer .axm-assist-renderer__run-meta-grid{display:flex;gap:.4rem}.axm-assist-renderer .axm-assist-renderer__meta-tile{min-width:0px;padding:.4rem .5rem .45rem;border-radius:.45rem;background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer .axm-assist-renderer__meta-tile--wide{grid-column:1/-1}.axm-assist-renderer .axm-assist-renderer__meta-tile--accent{background:rgb(var(--ax-sys-color-primary-50))}.axm-assist-renderer .axm-assist-renderer__meta-tile-label{--tw-font-weight: var(--font-weight-bold, 700);font-weight:var(--font-weight-bold, 700);text-transform:uppercase;font-size:.6rem;letter-spacing:.06em;color:rgb(var(--ax-sys-color-neutral-700));margin-block-end:.2rem}.axm-assist-renderer .axm-assist-renderer__meta-tile-value{--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);font-size:.78rem;line-height:1.35;color:rgb(var(--ax-sys-color-on-surface));word-break:break-word}.axm-assist-renderer .axm-assist-renderer__meta-tile-value--mono{font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\" 1}.axm-assist-renderer .axm-assist-renderer__meta-tile-sub{margin-block-start:.15rem;font-size:.65rem;line-height:1.3;color:rgb(var(--ax-sys-color-neutral-700));font-family:var(--ax-font-mono, ui-monospace, monospace);word-break:break-all}.axm-assist-renderer .axm-assist-renderer__meta-tile-note{display:inline;--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);margin-inline-start:.2rem;font-size:.65rem;color:rgb(var(--ax-sys-color-success-700))}.axm-assist-renderer .axm-assist-renderer__tool-editor-wrap{overflow:hidden;border-radius:var(--radius-md, .375rem);background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer .axm-assist-renderer__waiting{display:flex;gap:.25rem;padding:.25rem 0}.axm-assist-renderer .axm-assist-renderer__dot{inline-size:6px;block-size:6px;border-radius:50%;background:rgb(var(--ax-sys-color-neutral-500));animation:axm-blink 1.2s ease-in-out infinite}.axm-assist-renderer .axm-assist-renderer__dot:nth-child(2){animation-delay:.2s}.axm-assist-renderer .axm-assist-renderer__dot:nth-child(3){animation-delay:.4s}.axm-assist-renderer .axm-assist-renderer__agent-live-block{display:flex;flex-direction:column;border-radius:.75rem;background:rgb(var(--ax-sys-color-lighter-surface));padding:.75rem .875rem;gap:.65rem;max-inline-size:min(42rem,100%)}.axm-assist-renderer .axm-assist-renderer__agent-live-block--in-accordion{background:rgb(var(--ax-sys-color-light-surface));border-radius:.5rem;padding:.5rem .55rem .55rem;max-inline-size:none}.axm-assist-renderer .axm-assist-renderer__agent-live-header{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem}.axm-assist-renderer .axm-assist-renderer__agent-live-title{flex:1;--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);font-size:.8125rem;color:rgb(var(--ax-sys-color-on-surface));min-inline-size:0}.axm-assist-renderer .axm-assist-renderer__agent-live-prompt{align-self:flex-end;font-size:.8125rem;line-height:1.55;word-break:break-word;padding:.5rem .75rem;border-radius:1.25rem;background:rgb(var(--ax-sys-color-lightest-surface));max-inline-size:min(92%,36rem)}.axm-assist-renderer .axm-assist-renderer__agent-live-stream{font-size:.8125rem;line-height:1.55;white-space:pre-line;word-break:break-word;padding-block-start:.15rem}.axm-assist-renderer .axm-assist-renderer__agent-live-nested-tools{display:flex;flex-direction:column;gap:.35rem;padding-block-start:.35rem}.axm-assist-renderer .axm-assist-renderer__agent-live-nested-row{display:flex;align-items:center;gap:.45rem;font-size:.72rem}.axm-assist-renderer .axm-assist-renderer__agent-live-nested-name{flex:1;overflow:hidden;text-overflow:ellipsis;font-family:var(--ax-font-mono, monospace);font-size:.7rem;min-inline-size:0}.axm-assist-renderer .axm-assist-renderer__agent-live-nested-status{flex-shrink:0;color:rgb(var(--ax-sys-color-neutral-600))}.axm-assist-renderer .axm-assist-renderer__retry-alert-body{display:flex;align-items:flex-start;gap:.75rem}.axm-assist-renderer .axm-assist-renderer__retry-alert-text{display:flex;flex:1;flex-direction:column;min-inline-size:0;gap:.3rem}.axm-assist-renderer .axm-assist-renderer__retry-description{margin:0;font-size:.8125rem;line-height:1.5;opacity:.92}.axm-assist-renderer .axm-assist-renderer__retry-error-detail{margin:.15rem 0 0;font-size:.75rem;line-height:1.45;font-family:var(--ax-font-mono, ui-monospace, monospace);word-break:break-word;opacity:.88}.axm-assist-renderer .axm-assist-renderer__retry-action{flex-shrink:0;align-self:center}.axm-assist-bot,.axm-assist-bot .axm-assist-bot__final-line{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 3)}.axm-assist-bot .axm-assist-bot__segment{unicode-bidi:isolate;font-size:.95rem;line-height:1.8;letter-spacing:.002em;color:rgb(var(--ax-sys-color-on-surface));text-wrap:pretty}.axm-assist-bot .axm-assist-bot__segment:has(axm-chat-user-form-renderer){inline-size:100%;max-inline-size:100%}.axm-assist-bot .axm-assist-bot__segment ax-conversation-text-renderer{display:block}.axm-assist-bot .axm-assist-bot__segment ax-conversation-text-renderer :is(p,ul,ol){margin-block:.45rem}.axm-assist-bot .axm-assist-bot__segment ax-conversation-text-renderer li{line-height:1.8}.axm-assist-bot .axm-assist-bot__line--user{align-self:flex-end}.axm-assist-bot .axm-assist-bot__line--tool-role{align-self:stretch}.axm-assist-bot .axm-assist-bot__tool-result{border-radius:var(--radius-lg, .5rem);background:rgb(var(--ax-sys-color-lighter-surface));padding:.5rem .75rem}.axm-assist-bot .axm-assist-bot__fallback{font-size:.88rem;line-height:1.75;word-break:break-word;opacity:.9}@keyframes axm-blink{0%{opacity:1}50%{opacity:0}}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n", ".axm-assist-tool-detail-popup{display:flex;flex-direction:column;gap:.75rem;min-block-size:0}.axm-assist-tool-detail-popup__section{display:flex;flex-direction:column;gap:.35rem}.axm-assist-tool-detail-popup ax-footer ax-suffix{display:flex;justify-content:flex-end}\n"] }]
117
+ }] });
118
+
119
+ export { AXMAssistToolDetailPopupComponent };
120
+ //# sourceMappingURL=acorex-platform-module-conversation-client-assist-tool-detail-popup.component-GC58B_n0.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-conversation-client-assist-tool-detail-popup.component-GC58B_n0.mjs","sources":["../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/message-renderers/assist-tool-detail-popup.component.ts"],"sourcesContent":["//#region ---- Imports -----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCodeEditorModule } from '@acorex/components/code-editor';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n//#endregion\n\n//#region ---- Types -----\n\nexport interface AXMAssistToolDetailPopupData {\n toolTitle: string;\n inputJson: string;\n outputJson?: string;\n}\n\n//#endregion\n\n//#region ---- Component -----\n\n@Component({\n selector: 'axm-assist-tool-detail-popup',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonModule, AXCodeEditorModule, AXTranslationModule, AsyncPipe, FormsModule, AXDecoratorModule],\n styleUrls: ['./assist-message-renderer.component.css'],\n template: `\n <div class=\"axm-assist-tool-detail-popup\">\n <div class=\"axm-assist-tool-detail-popup__section\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"inputJson\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </div>\n @if (outputJson?.trim()) {\n <div class=\"axm-assist-tool-detail-popup__section\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"outputJson\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </div>\n }\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@general:actions.close.title' | translate | async\"\n (onClick)=\"close()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n </div>\n `,\n styles: [\n `\n .axm-assist-tool-detail-popup {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n min-block-size: 0;\n }\n\n .axm-assist-tool-detail-popup__section {\n display: flex;\n flex-direction: column;\n gap: 0.35rem;\n }\n\n .axm-assist-tool-detail-popup ax-footer ax-suffix {\n display: flex;\n justify-content: flex-end;\n }\n `,\n ],\n})\nexport class AXMAssistToolDetailPopupComponent extends AXBasePageComponent {\n toolTitle = '';\n\n inputJson = '';\n\n outputJson?: string;\n}\n\n//#endregion\n"],"names":["i2","i3","i4","i5"],"mappings":"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"}