@acorex/modules 21.0.0-next.53 → 21.0.0-next.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai-management/README.md +3 -2
- package/fesm2022/{acorex-modules-ai-management-agent.entity-D6-0_Ms3.mjs → acorex-modules-ai-management-agent.entity-X51GLTdi.mjs} +69 -6
- package/fesm2022/acorex-modules-ai-management-agent.entity-X51GLTdi.mjs.map +1 -0
- package/fesm2022/{acorex-modules-ai-management-assist.entity-CnyoIO-Z.mjs → acorex-modules-ai-management-assist.entity-2h5KE9UH.mjs} +58 -4
- package/fesm2022/acorex-modules-ai-management-assist.entity-2h5KE9UH.mjs.map +1 -0
- package/fesm2022/acorex-modules-ai-management-rule.entity-CQNx4QEB.mjs +121 -0
- package/fesm2022/acorex-modules-ai-management-rule.entity-CQNx4QEB.mjs.map +1 -0
- package/fesm2022/acorex-modules-ai-management.mjs +864 -945
- package/fesm2022/acorex-modules-ai-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-conversation-acorex-modules-conversation-Bnjyq-wp.mjs → acorex-modules-conversation-acorex-modules-conversation-UNhA-qi5.mjs} +71 -41
- package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-UNhA-qi5.mjs.map +1 -0
- package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-Df5LmYZI.mjs → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-Be58gcns.mjs} +6 -6
- package/fesm2022/acorex-modules-conversation-assist-delegated-agent-detail-popup.component-Be58gcns.mjs.map +1 -0
- package/fesm2022/{acorex-modules-conversation-comments-page.component-BXI4smIr.mjs → acorex-modules-conversation-comments-page.component-3XBLeMW8.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-comments-page.component-BXI4smIr.mjs.map → acorex-modules-conversation-comments-page.component-3XBLeMW8.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-B5qJnpCK.mjs → acorex-modules-conversation-send-assist-chat-message.command-CSu-lJuu.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-B5qJnpCK.mjs.map → acorex-modules-conversation-send-assist-chat-message.command-CSu-lJuu.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-DI3LAaDF.mjs → acorex-modules-conversation-start-assist-chat.command-CyoncQB1.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-DI3LAaDF.mjs.map → acorex-modules-conversation-start-assist-chat.command-CyoncQB1.mjs.map} +1 -1
- package/fesm2022/acorex-modules-conversation.mjs +1 -1
- package/package.json +2 -2
- package/types/acorex-modules-ai-management.d.ts +721 -582
- package/types/acorex-modules-conversation.d.ts +2 -0
- package/fesm2022/acorex-modules-ai-management-agent.entity-D6-0_Ms3.mjs.map +0 -1
- package/fesm2022/acorex-modules-ai-management-assist.entity-CnyoIO-Z.mjs.map +0 -1
- package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-Bnjyq-wp.mjs.map +0 -1
- package/fesm2022/acorex-modules-conversation-assist-delegated-agent-detail-popup.component-Df5LmYZI.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-modules-ai-management.mjs","sources":["../../../../libs/modules/ai-management/src/lib/const.ts","../../../../libs/modules/ai-management/src/lib/manifest.ts","../../../../libs/modules/ai-management/src/lib/entity.provider.ts","../../../../libs/modules/ai-management/src/lib/menu.keys.ts","../../../../libs/modules/ai-management/src/lib/permission.keys.ts","../../../../libs/modules/ai-management/src/lib/menu.provider.ts","../../../../libs/modules/ai-management/src/lib/assist-permission-definition.builder.ts","../../../../libs/modules/ai-management/src/lib/permission-definition.provider.ts","../../../../libs/modules/ai-management/src/lib/settings.keys.ts","../../../../libs/modules/ai-management/src/lib/settings.provider.ts","../../../../libs/modules/ai-management/src/lib/features/datasources/ai-agent-catalog.datasource.ts","../../../../libs/modules/ai-management/src/lib/features/datasources/ai-registry-catalog.datasource.ts","../../../../libs/modules/ai-management/src/lib/features/datasources/ai-model-catalog.datasource.ts","../../../../libs/modules/ai-management/src/lib/features/tags/ai-model-purpose-tag.provider.ts","../../../../libs/modules/ai-management/src/lib/features/services/ai-assist.abstract.ts","../../../../libs/modules/ai-management/src/lib/features/types/ai-assist.types.ts","../../../../libs/modules/ai-management/src/lib/features/engine/ai-engine.ts","../../../../libs/modules/ai-management/src/lib/features/engine/ai-engine.types.ts","../../../../libs/modules/ai-management/src/lib/features/engine/ai-platform-runtime-context.builder.ts","../../../../libs/modules/ai-management/src/lib/features/chat/ai-generated-image-persist.ts","../../../../libs/modules/ai-management/src/lib/features/assist/ai-chat-composer-media.helpers.ts","../../../../libs/modules/ai-management/src/lib/features/assist/ai-assist-prompt-box/ai-assist-prompt-box.component.ts","../../../../libs/modules/ai-management/src/lib/features/assist/ai-assist-prompt-box/ai-assist-prompt-box.component.html","../../../../libs/modules/ai-management/src/lib/features/assist/ai-assist-prompt-box.service.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/extract-last-assistant-plain-text.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/build-structured-output-retry-user-text.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/parse-structured-assistant-text.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/repair-structured-assistant-parse.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/validate-structured-assistant-response.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/run-structured-output-pipeline.ts","../../../../libs/modules/ai-management/src/lib/features/services/ai-manager.service.ts","../../../../libs/modules/ai-management/src/lib/features/widgets/agent-registry-tool-configurator/agent-registry-tool-configurator-widget.config.ts","../../../../libs/modules/ai-management/src/lib/features/widgets/assist-delegated-agent-configurator/assist-delegated-agent-configurator-widget.config.ts","../../../../libs/modules/ai-management/src/lib/widget-definition.provider.ts","../../../../libs/modules/ai-management/src/lib/ai-management.module.ts","../../../../libs/modules/ai-management/src/lib/features/utils/ai-delegated-agent-prompt-preview.util.ts","../../../../libs/modules/ai-management/src/lib/features/utils/ai-tool-command-args-normalize.ts","../../../../libs/modules/ai-management/src/lib/features/utils/assist-initial-messages.util.ts","../../../../libs/modules/ai-management/src/lib/features/utils/assist-starter-prompts.util.ts","../../../../libs/modules/ai-management/src/lib/features/tools/chat-generate-image.command.definition.ts","../../../../libs/modules/ai-management/src/lib/features/tools/chat-transcribe-speech.command.definition.ts","../../../../libs/modules/ai-management/src/lib/features/tools/chat-synthesize-speech.command.definition.ts","../../../../libs/modules/ai-management/src/lib/features/tools/extract-document-text.command.definition.ts","../../../../libs/modules/ai-management/src/lib/features/tools/structured-text-completion.command.definition.ts","../../../../libs/modules/ai-management/src/lib/features/tools/ai-chat-tool.command-keys.ts","../../../../libs/modules/ai-management/src/lib/features/tools/ai-chat-tool-run-context.service.ts","../../../../libs/modules/ai-management/src/lib/features/tools/ai-chat-tool.llm-parameters.ts","../../../../libs/modules/ai-management/src/lib/features/services/ai-assist-chat-model-catalog.service.ts","../../../../libs/modules/ai-management/src/lib/features/services/ai-default-model-picker.service.ts","../../../../libs/modules/ai-management/src/acorex-modules-ai-management.ts"],"sourcesContent":["//#region ---- Module Config ----\n\nconst config = {\n i18n: 'ai-management',\n module: 'AiManagement',\n route: 'ai-management',\n};\n\nexport const RootConfig = {\n config,\n module: {\n name: config.module,\n route: config.route,\n title: `@${config.i18n}:module.title`,\n icon: 'fa-light fa-robot',\n },\n entities: {\n model: {\n name: 'AiModel',\n fullName: `${config.module}.AiModel`,\n title: '@ai-management:models.entities.model.title',\n titlePlural: '@ai-management:models.entities.model.plural',\n icon: 'fa-light fa-microchip',\n },\n assist: {\n name: 'Assist',\n fullName: `${config.module}.Assist`,\n title: '@ai-management:assists.entities.assist.title',\n titlePlural: '@ai-management:assists.entities.assist.plural',\n icon: 'fa-light fa-user-robot',\n },\n agent: {\n name: 'AiAgent',\n fullName: `${config.module}.AiAgent`,\n title: '@ai-management:agents.entities.agent.title',\n titlePlural: '@ai-management:agents.entities.agent.plural',\n icon: 'fa-light fa-people-group',\n },\n openAiEndpoint: {\n name: 'OpenAiEndpoint',\n fullName: `${config.module}.OpenAiEndpoint`,\n title: '@ai-management:open-ai-endpoints.entities.endpoint.title',\n titlePlural: '@ai-management:open-ai-endpoints.entities.endpoint.plural',\n icon: 'fa-light fa-plug',\n },\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex/platform/core';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * AI Management Module Manifest.\n * Defines module metadata for AI provider and API key management.\n */\nexport const AiManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n dependencies: [],\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPEntity } from '@acorex/platform/common';\nimport { AXPEntityDefinitionLoader, AXPEntityPreloadEntity } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Entity Provider ----\n\n@Injectable()\nexport class AXMAiManagementEntityProvider implements AXPEntityDefinitionLoader {\n preload(): AXPEntityPreloadEntity[] {\n const module = RootConfig.module.name;\n return Object.values(RootConfig.entities).map((entity: { name: string }) => ({\n module,\n entity: entity.name,\n }));\n }\n\n async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\n if (moduleName !== RootConfig.module.name) return null;\n switch (entityName) {\n case RootConfig.entities.model.name:\n return (await import('./entities/model/model.entity')).factory();\n case RootConfig.entities.assist.name:\n return (await import('./entities/assist/assist.entity')).assistFactory();\n case RootConfig.entities.agent.name:\n return (await import('./entities/agent/agent.entity')).agentFactory();\n case RootConfig.entities.openAiEndpoint.name:\n return (await import('./entities/open-ai-endpoint/open-ai-endpoint.entity')).openAiEndpointFactory();\n default:\n return null;\n }\n }\n\n async list(): Promise<{ name: string; module: string }[]> {\n const m = RootConfig.module.name;\n return Promise.resolve(\n Object.values(RootConfig.entities).map((e) => ({ name: e.name, module: m }))\n );\n }\n}\n\n//#endregion\n","//#region ---- Menu Keys ----\n\n/**\n * AI Management menu keys.\n * Pattern: AiManagement:Menu:{Path}\n */\nexport const AXPAiManagementMenuKeys = {\n /** OpenAI-compatible HTTP endpoints (base URL + API key). */\n OpenAiEndpoints: 'AiManagement:Menu:OpenAiEndpoints',\n /** List of AI models (from providers). */\n Models: 'AiManagement:Menu:Models',\n /** List of Assists. */\n Assists: 'AiManagement:Menu:Assists',\n /** Delegated specialist agents (supervisor routing). */\n Agents: 'AiManagement:Menu:Agents',\n} as const;\n\n//#endregion\n","//#region ---- Permission keys ----\n\n/** Dynamic assist access permissions (`Assist.{name}.Use`). */\nexport const AXMAiAssistPermissionKeys = {\n Use: 'AiManagement:Permission:Assist.Use',\n useForAssist: (assistName: string): string => `AiManagement:Permission:Assist.${assistName}.Use`,\n} as const;\n\nexport const AXMPermissionsKeys = {\n AiManagement: {\n Management: 'AiManagement:Permission:Management',\n Assist: AXMAiAssistPermissionKeys,\n },\n} as const;\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPCommonMenuKeys } from '@acorex/modules/common';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex/platform/common';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from './const';\nimport { AXPAiManagementMenuKeys } from './menu.keys';\nimport { AXMPermissionsKeys } from './permission.keys';\n\n//#endregion\n\n//#region ---- Menu Provider ----\n\n@Injectable()\nexport class AXMAiManagementMenuProvider implements AXPMenuProvider {\n private readonly entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const module = RootConfig.module;\n\n //#region ---- Configuration > AI Management (assists, models) ----\n\n const aiManagementConfigMenu = context.find(AXPCommonMenuKeys.AiManagementConfig);\n if (!aiManagementConfigMenu.exists) {\n context.find(AXPCommonMenuKeys.Configuration).addItems([\n {\n name: AXPCommonMenuKeys.AiManagementConfig,\n text: '@general:menus.ai-management.title',\n icon: module.icon,\n type: 'menu',\n priority: 8941,\n policy: {\n features: [module.name],\n permissions: [AXMPermissionsKeys.AiManagement.Management],\n },\n children: [],\n },\n ]);\n }\n\n const aiMenuPolicy = {\n features: [module.name],\n permissions: [AXMPermissionsKeys.AiManagement.Management],\n };\n\n context.find(AXPCommonMenuKeys.AiManagementConfig).addItems([\n {\n name: AXPAiManagementMenuKeys.Agents,\n text: '@ai-management:module.menus.agents.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.agent.name),\n icon: RootConfig.entities.agent.icon,\n priority: -1,\n policy: aiMenuPolicy,\n },\n {\n name: AXPAiManagementMenuKeys.Assists,\n text: '@ai-management:module.menus.assists.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.assist.name),\n icon: RootConfig.entities.assist.icon,\n priority: 0,\n policy: aiMenuPolicy,\n },\n {\n name: AXPAiManagementMenuKeys.OpenAiEndpoints,\n text: '@ai-management:module.menus.open-ai-endpoints.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.openAiEndpoint.name),\n icon: RootConfig.entities.openAiEndpoint.icon,\n priority: 2,\n policy: aiMenuPolicy,\n },\n {\n name: AXPAiManagementMenuKeys.Models,\n text: '@ai-management:module.menus.models.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.model.name),\n icon: RootConfig.entities.model.icon,\n priority: 1,\n policy: aiMenuPolicy,\n },\n ]);\n\n //#endregion\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\n\nimport type { AXMAiManagementAssistEntityModel } from './entities/assist/assist.types';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** One assist row mapped for permission definition children. */\nexport interface AXMAiAssistPermissionRow {\n name: string;\n title: string;\n description?: string;\n}\n\n//#endregion\n\n//#region ---- Catalog load ----\n\n/**\n * Loads assist catalog rows for dynamic permission definitions.\n * Skips rows without a stable programmatic `name`.\n */\nexport async function loadAssistPermissionRows(\n entityService: AXPEntityService,\n localeId: string,\n): Promise<AXMAiAssistPermissionRow[]> {\n const assistData = entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assist.name)\n .data<\n string,\n AXMAiManagementAssistEntityModel,\n AXMAiManagementAssistEntityModel,\n AXMAiManagementAssistEntityModel,\n AXMAiManagementAssistEntityModel\n >();\n\n const queryResult = await assistData.query({\n skip: 0,\n take: 500,\n sort: [{ field: 'name', dir: 'asc' }],\n });\n\n const items = (queryResult?.items ?? []) as AXMAiManagementAssistEntityModel[];\n const rows: AXMAiAssistPermissionRow[] = [];\n\n for (const item of items) {\n const name = item.name?.trim();\n if (!name) {\n continue;\n }\n\n const title = resolveMultiLanguageString(item.title, localeId).trim() || name;\n const descriptionRaw = item.description\n ? resolveMultiLanguageString(item.description, localeId).trim()\n : '';\n const description = descriptionRaw || undefined;\n\n rows.push({ name, title, description });\n }\n\n return rows.sort((a, b) => a.title.localeCompare(b.title, localeId, { sensitivity: 'base' }));\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex/platform/auth';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject, Injectable, LOCALE_ID } from '@angular/core';\n\nimport { loadAssistPermissionRows } from './assist-permission-definition.builder';\nimport { RootConfig } from './const';\nimport { AXMPermissionsKeys } from './permission.keys';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n private readonly entityService = inject(AXPEntityService);\n private readonly localeId = inject(LOCALE_ID);\n\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXMPermissionsKeys.AiManagement;\n const modulePermissions = '@ai-management:module.permissions';\n\n let assistRows = await loadAssistPermissionRows(this.entityService, this.localeId).catch(() => []);\n\n const groupBuilder = context\n .addGroup(\n RootConfig.module.name,\n `${modulePermissions}.title`,\n `${modulePermissions}.description`,\n )\n .addPermission(\n keys.Management,\n `${modulePermissions}.manage.title`,\n `${modulePermissions}.manage.description`,\n )\n .endPermission();\n\n let assistPermissionBuilder = groupBuilder.addPermission(\n keys.Assist.Use,\n `${modulePermissions}.assist-use.title`,\n `${modulePermissions}.assist-use.description`,\n );\n\n for (const row of assistRows) {\n assistPermissionBuilder = assistPermissionBuilder.addChild(\n keys.Assist.useForAssist(row.name),\n row.title,\n row.description,\n );\n }\n\n assistPermissionBuilder.endPermission().endGroup();\n }\n}\n\n//#endregion\n","//#region ---- Setting Keys ----\n\n/**\n * AI Management setting keys.\n * Pattern: AiManagement:Setting:{Path}\n */\nexport const AXPAiManagementSettings = {\n /** Assist primary key (`id`) used when no assist is explicitly selected (tenant-scoped). */\n DefaultAssistId: 'AiManagement:Setting:DefaultAssistId',\n\n /**\n * System instructions prepended to every assist/agent chat system prompt in {@link AXPAiEngine}.\n * Empty string means no global layer (default).\n */\n GlobalSystemPrompt: 'AiManagement:Setting:GlobalSystemPrompt',\n\n Providers: {\n Gemini: {\n ApiKey: 'AiManagement:Setting:Providers.Gemini.ApiKey',\n },\n Demis: {\n BearerToken: 'AiManagement:Setting:Providers.Demis.BearerToken',\n },\n },\n} as const;\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPSettingDefinitionProvider,\n AXPSettingDefinitionProviderContext,\n} from '@acorex/platform/common';\nimport { AXPWidgetsList } from '@acorex/modules/common';\nimport { RootConfig } from './const';\nimport { AXPAiManagementSettings } from './settings.keys';\nimport { objectKeyValueTransforms } from '@acorex/platform/core';\n\n//#endregion\n\n//#region ---- Settings Provider ----\n\nconst I18N = '@ai-management:settings';\n\nexport class AXMAiManagementSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n context\n .addGroup(\n 'ai-settings',\n `${I18N}.group.nav-title`,\n `${I18N}.group.description`,\n 'fa-light fa-robot',\n `${I18N}.group.title`,\n 60,\n )\n .addSection(\n 'global-ai',\n `${I18N}.section.global-ai.title`,\n `${I18N}.section.global-ai.description`,\n )\n .addSetting({\n key: AXPAiManagementSettings.DefaultAssistId,\n title: `${I18N}.default-assist.name.title`,\n scope: 'T',\n isInherited: true,\n valueTransforms: objectKeyValueTransforms('name'),\n widget: {\n type: AXPWidgetsList.Editors.LookupBox,\n options: {\n entity: `${RootConfig.module.name}.${RootConfig.entities.assist.name}`,\n look: 'select',\n multiple: false,\n textField: 'title',\n valueField: 'name',\n hasClearButton: true,\n },\n },\n description: `${I18N}.default-assist.name.description`,\n })\n .addSetting({\n key: AXPAiManagementSettings.GlobalSystemPrompt,\n title: `${I18N}.global-system-prompt.prefix.title`,\n scope: 'T',\n isInherited: true,\n defaultValue: '',\n widget: {\n type: AXPWidgetsList.Editors.LargeTextBox,\n layout: {\n stacked: true,\n },\n options: {\n rows: 8,\n placeholder: `${I18N}.global-system-prompt.prefix.placeholder`,\n },\n },\n description: `${I18N}.global-system-prompt.prefix.description`,\n })\n .endSection()\n .addSection('gemini', `${I18N}.section.gemini.title`, `${I18N}.section.gemini.description`)\n .addSetting({\n key: AXPAiManagementSettings.Providers.Gemini.ApiKey,\n title: `${I18N}.gemini.api-key.title`,\n scope: 'T',\n isInherited: true,\n defaultValue: '',\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n options: {\n placeholder: `${I18N}.gemini.api-key.placeholder`,\n },\n },\n description: `${I18N}.gemini.api-key.description`,\n })\n .endSection()\n .addSection('demis', `${I18N}.section.demis.title`, `${I18N}.section.demis.description`)\n .addSetting({\n key: AXPAiManagementSettings.Providers.Demis.BearerToken,\n title: `${I18N}.demis.bearer-token.title`,\n scope: 'T',\n isInherited: true,\n defaultValue: '',\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n options: {\n placeholder: `${I18N}.demis.bearer-token.placeholder`,\n },\n },\n description: `${I18N}.demis.bearer-token.description`,\n })\n .endSection()\n .endGroup();\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPWidgetsList } from '@acorex/modules/common';\nimport { AXDataSource } from '@acorex/cdk/common';\nimport { AXPDataSourceDefinition, AXPDataSourceDefinitionProvider, AXPFilterDefinition } from '@acorex/platform/core';\nimport { AXPEntityDetailDto, AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\n\n//#endregion\n\n/** Registry name for AiAgent catalog rows (delegated specialist definitions). */\nexport const AI_AGENT_CATALOG_DATASOURCE_NAME = 'ai-management-agent-catalog';\n\n//#region ---- Provider ----\n\n@Injectable()\nexport class AXMAiAgentCatalogDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n private readonly entityService = inject(AXPEntityService);\n\n items(): Promise<AXPDataSourceDefinition[]> {\n const accessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.agent.name)\n .data<string, AXPEntityDetailDto<string>, AXPEntityDetailDto<string>>();\n\n const columns = [\n { name: 'id', title: 'ID', datatype: 'uuid', type: AXPWidgetsList.Editors.TextBox },\n { name: 'title', title: 'Title', datatype: 'string', type: AXPWidgetsList.Editors.TextBox },\n { name: 'name', title: 'Name', datatype: 'string', type: AXPWidgetsList.Editors.TextBox },\n ];\n\n const filters = [\n {\n field: 'title',\n title: 'Title',\n operator: { type: 'contains' },\n widget: { type: AXPWidgetsList.Editors.TextBox },\n filterType: { advance: true, inline: true },\n } as AXPFilterDefinition,\n ];\n\n return Promise.resolve([\n {\n name: AI_AGENT_CATALOG_DATASOURCE_NAME,\n title: 'AI Agents (delegated specialists)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => {\n const res = await accessor.query({\n skip: e?.skip ?? 0,\n take: e?.take ?? 500,\n sort: [{ field: 'title', dir: 'asc' }],\n });\n return {\n items: (res.items ?? []) as unknown[],\n total: res.total ?? (res.items?.length ?? 0),\n };\n },\n byKey: async (key: unknown) => {\n return (await accessor.byKey(key as string)) as unknown;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n ]);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXDataSource, type AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { RootConfig as PlatformManagementRootConfig } from '@acorex/modules/platform-management';\nimport {\n AXPDataSourceDefinition,\n AXPDataSourceDefinitionProvider,\n AXPFilterDefinition,\n type AXPQueryRequest,\n} from '@acorex/platform/core';\nimport { AXPEntityDetailDto, AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { inject, Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Constants ----\n\n/** AI-capable command definitions for specialist registry scope (matches AiAgent entity lookup filter). */\nexport const AI_COMMAND_REGISTRY_CATALOG_DATASOURCE_NAME = 'ai-management-command-registry-catalog';\n\n/** AI-capable query definitions for specialist registry scope. */\nexport const AI_QUERY_REGISTRY_CATALOG_DATASOURCE_NAME = 'ai-management-query-registry-catalog';\n\n/** Typed so nested `operator.type` literals are not widened to `string` (required by {@link AXDataSourceFilterOption}). */\nconst AI_CAPABILITY_FILTER: AXDataSourceFilterOption = {\n logic: 'and',\n filters: [\n { field: 'active', operator: { type: 'equal' }, value: true },\n {\n logic: 'or',\n filters: [\n { field: 'capabilities', operator: { type: 'equal' }, value: 'ai' },\n { field: 'capabilities', operator: { type: 'startsWith' }, value: 'ai,' },\n { field: 'capabilities', operator: { type: 'contains' }, value: ', ai' },\n ],\n },\n ],\n};\n\n//#endregion\n\n//#region ---- Command catalog ----\n\n@Injectable()\nexport class AXMAiCommandRegistryCatalogDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n private readonly entityService = inject(AXPEntityService);\n\n items(): Promise<AXPDataSourceDefinition[]> {\n const accessor = this.entityService\n .withEntity(PlatformManagementRootConfig.module.name, PlatformManagementRootConfig.entities.commandDefinition.name)\n .data<string, AXPEntityDetailDto<string>, AXPEntityDetailDto<string>>();\n\n const columns = [\n { name: 'id', title: 'ID', datatype: 'uuid', type: AXPWidgetsCatalog.text },\n { name: 'catalogTitle', title: 'Title', datatype: 'string', type: AXPWidgetsCatalog.text },\n { name: 'name', title: 'Name', datatype: 'string', type: AXPWidgetsCatalog.text },\n ];\n\n const filters = [\n {\n field: 'catalogTitle',\n title: 'Title',\n operator: { type: 'contains' },\n widget: { type: AXPWidgetsCatalog.text },\n filterType: { advance: true, inline: true },\n } as AXPFilterDefinition,\n ];\n\n return Promise.resolve([\n {\n name: AI_COMMAND_REGISTRY_CATALOG_DATASOURCE_NAME,\n title: 'Command definitions (AI registry)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => {\n const request: AXPQueryRequest = {\n skip: e?.skip ?? 0,\n take: e?.take ?? 500,\n sort: [{ field: 'catalogTitle', dir: 'asc' }],\n filter: AI_CAPABILITY_FILTER,\n };\n const res = await accessor.query(request);\n return {\n items: (res.items ?? []) as unknown[],\n total: res.total ?? (res.items?.length ?? 0),\n };\n },\n byKey: async (key: unknown) => {\n return (await accessor.byKey(key as string)) as unknown;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'catalogTitle', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n ]);\n }\n}\n\n//#endregion\n\n//#region ---- Query catalog ----\n\n@Injectable()\nexport class AXMAiQueryRegistryCatalogDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n private readonly entityService = inject(AXPEntityService);\n\n items(): Promise<AXPDataSourceDefinition[]> {\n const accessor = this.entityService\n .withEntity(PlatformManagementRootConfig.module.name, PlatformManagementRootConfig.entities.queryDefinition.name)\n .data<string, AXPEntityDetailDto<string>, AXPEntityDetailDto<string>>();\n\n const columns = [\n { name: 'id', title: 'ID', datatype: 'uuid', type: AXPWidgetsCatalog.text },\n { name: 'catalogTitle', title: 'Title', datatype: 'string', type: AXPWidgetsCatalog.text },\n { name: 'name', title: 'Name', datatype: 'string', type: AXPWidgetsCatalog.text },\n ];\n\n const filters = [\n {\n field: 'catalogTitle',\n title: 'Title',\n operator: { type: 'contains' },\n widget: { type: AXPWidgetsCatalog.text },\n filterType: { advance: true, inline: true },\n } as AXPFilterDefinition,\n ];\n\n return Promise.resolve([\n {\n name: AI_QUERY_REGISTRY_CATALOG_DATASOURCE_NAME,\n title: 'Query definitions (AI registry)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => {\n const request: AXPQueryRequest = {\n skip: e?.skip ?? 0,\n take: e?.take ?? 500,\n sort: [{ field: 'catalogTitle', dir: 'asc' }],\n filter: AI_CAPABILITY_FILTER,\n };\n const res = await accessor.query(request);\n return {\n items: (res.items ?? []) as unknown[],\n total: res.total ?? (res.items?.length ?? 0),\n };\n },\n byKey: async (key: unknown) => {\n return (await accessor.byKey(key as string)) as unknown;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'catalogTitle', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n ]);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPWidgetsList } from '@acorex/modules/common';\nimport { AXDataSource } from '@acorex/cdk/common';\nimport { AXPDataSourceDefinition, AXPDataSourceDefinitionProvider, AXPFilterDefinition } from '@acorex/platform/core';\nimport { AXPEntityDetailDto, AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\n\n//#endregion\n\n/**\n * Full AI model catalog for chat (rows that include `chat` or `vision` in `modelPurposes`).\n * Registry name: {@link AI_MODEL_CATALOG_DATASOURCE_NAME}.\n */\nexport const AI_MODEL_CATALOG_DATASOURCE_NAME = 'ai-management-model-catalog';\n\n/**\n * Image-generation models only (`modelPurposes` includes `image`).\n * Registry name: {@link AI_MODEL_IMAGE_CATALOG_DATASOURCE_NAME}.\n */\nexport const AI_MODEL_IMAGE_CATALOG_DATASOURCE_NAME = 'ai-management-model-catalog-image';\n\n/**\n * Speech-to-text models only (`modelPurposes` includes `speech`).\n * Registry name: {@link AI_MODEL_SPEECH_CATALOG_DATASOURCE_NAME}.\n */\nexport const AI_MODEL_SPEECH_CATALOG_DATASOURCE_NAME = 'ai-management-model-catalog-speech';\n\n/**\n * Text-to-speech models only (`modelPurposes` includes `tts`).\n * Registry name: {@link AI_MODEL_TTS_CATALOG_DATASOURCE_NAME}.\n */\nexport const AI_MODEL_TTS_CATALOG_DATASOURCE_NAME = 'ai-management-model-catalog-tts';\n\nexport type AXMAiModelPurposeSlug = 'chat' | 'vision' | 'image' | 'speech' | 'tts';\n\n/** Normalizes `modelPurposes` (and legacy `modelPurpose`) to unique non-empty slugs. */\nexport function normalizeModelPurposes(row: Record<string, unknown> | null | undefined): string[] {\n if (!row) {\n return ['chat'];\n }\n const multi = row['modelPurposes'];\n if (Array.isArray(multi) && multi.length > 0) {\n const out = multi\n .map((x) => String(x).trim())\n .filter((x) => x.length > 0);\n return [...new Set(out)];\n }\n const legacy = row['modelPurpose'];\n if (legacy == null || legacy === '') {\n return ['chat'];\n }\n return [String(legacy)];\n}\n\nexport function modelRowHasPurpose(\n row: Record<string, unknown> | null | undefined,\n purpose: AXMAiModelPurposeSlug,\n): boolean {\n return normalizeModelPurposes(row).includes(purpose);\n}\n\n/** Rows usable in chat / completion pickers: include `chat` or `vision`; not image/speech/tts-only. */\nexport function isChatPurposeModelRow(row: Record<string, unknown> | null | undefined): boolean {\n const p = normalizeModelPurposes(row);\n return p.includes('chat') || p.includes('vision');\n}\n\nexport function isImagePurposeModelRow(row: Record<string, unknown> | null | undefined): boolean {\n return modelRowHasPurpose(row, 'image');\n}\n\nexport function isSpeechPurposeModelRow(row: Record<string, unknown> | null | undefined): boolean {\n return modelRowHasPurpose(row, 'speech');\n}\n\nexport function isTtsPurposeModelRow(row: Record<string, unknown> | null | undefined): boolean {\n return modelRowHasPurpose(row, 'tts');\n}\n\n//#region ---- Provider ----\n\n@Injectable()\nexport class AXMAiModelCatalogDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n private readonly entityService = inject(AXPEntityService);\n\n items(): Promise<AXPDataSourceDefinition[]> {\n const accessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.model.name)\n .data<string, AXPEntityDetailDto<string>, AXPEntityDetailDto<string>>();\n\n const columns = [\n {\n name: 'id',\n title: 'ID',\n datatype: 'uuid',\n type: AXPWidgetsList.Editors.TextBox,\n },\n {\n name: 'title',\n title: 'Title',\n datatype: 'string',\n type: AXPWidgetsList.Editors.TextBox,\n },\n ];\n\n const filters = [\n {\n field: 'title',\n title: 'Title',\n operator: { type: 'contains' },\n widget: { type: AXPWidgetsList.Editors.TextBox },\n filterType: { advance: true, inline: true },\n } as AXPFilterDefinition,\n ];\n\n const loadFiltered = async (\n e: { skip?: number; take?: number } | undefined,\n keep: (row: Record<string, unknown>) => boolean,\n ) => {\n const res = await accessor.query({\n skip: e?.skip ?? 0,\n take: e?.take ?? 500,\n sort: [{ field: 'title', dir: 'asc' }],\n });\n const all = (res.items ?? []) as unknown as Record<string, unknown>[];\n const items = all.filter(keep);\n return {\n items,\n total: items.length,\n };\n };\n\n return Promise.resolve([\n {\n name: AI_MODEL_CATALOG_DATASOURCE_NAME,\n title: 'AI Models (chat)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => loadFiltered(e, isChatPurposeModelRow),\n byKey: async (key: unknown) => {\n const row = (await accessor.byKey(key as string)) as unknown as Record<string, unknown> | null;\n if (!row || !isChatPurposeModelRow(row)) {\n return null;\n }\n return row;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n {\n name: AI_MODEL_IMAGE_CATALOG_DATASOURCE_NAME,\n title: 'AI Models (image)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => loadFiltered(e, (row) => isImagePurposeModelRow(row)),\n byKey: async (key: unknown) => {\n const row = (await accessor.byKey(key as string)) as unknown as Record<string, unknown> | null;\n if (!row || !isImagePurposeModelRow(row)) {\n return null;\n }\n return row;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n {\n name: AI_MODEL_SPEECH_CATALOG_DATASOURCE_NAME,\n title: 'AI Models (speech)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => loadFiltered(e, (row) => isSpeechPurposeModelRow(row)),\n byKey: async (key: unknown) => {\n const row = (await accessor.byKey(key as string)) as unknown as Record<string, unknown> | null;\n if (!row || !isSpeechPurposeModelRow(row)) {\n return null;\n }\n return row;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n {\n name: AI_MODEL_TTS_CATALOG_DATASOURCE_NAME,\n title: 'AI Models (text-to-speech)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => loadFiltered(e, (row) => isTtsPurposeModelRow(row)),\n byKey: async (key: unknown) => {\n const row = (await accessor.byKey(key as string)) as unknown as Record<string, unknown> | null;\n if (!row || !isTtsPurposeModelRow(row)) {\n return null;\n }\n return row;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n ]);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPTag, AXPTagProvider } from '@acorex/platform/core';\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n/**\n * System tags for the AiModel entity `modelPurposes` field (tag-editor).\n * `title` values are stored as-is on the entity; keep them stable slugs.\n */\nconst AI_MODEL_PURPOSE_TAGS: AXPTag[] = [\n {\n id: 'ai-model-purpose-chat',\n title: 'chat',\n color: '#0284c7',\n description: 'Chat / text completion',\n scope: 'system',\n },\n {\n id: 'ai-model-purpose-vision',\n title: 'vision',\n color: '#7c3aed',\n description: 'Multimodal (image input in chat)',\n scope: 'system',\n },\n {\n id: 'ai-model-purpose-image',\n title: 'image',\n color: '#db2777',\n description: 'Image generation',\n scope: 'system',\n },\n {\n id: 'ai-model-purpose-speech',\n title: 'speech',\n color: '#16a34a',\n description: 'Speech to text',\n scope: 'system',\n },\n {\n id: 'ai-model-purpose-tts',\n title: 'tts',\n color: '#ea580c',\n description: 'Text to speech',\n scope: 'system',\n },\n];\n\n//#region ---- Provider ----\n\n@Injectable()\nexport class AXMAiModelPurposeTagProvider extends AXPTagProvider {\n readonly name = 'ai-model-purpose';\n\n override provide(): Promise<AXPTag[]> {\n return Promise.resolve(AI_MODEL_PURPOSE_TAGS);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { Injectable } from '@angular/core';\nimport type { AXPAiAssistRunInput, AXPAiAssistRunResult, AXPAiAssistShowOptions } from '../types/ai-assist.types';\n\n//#endregion\n\n//#region ---- Abstract token ----\n\n/**\n * Optional cross-cutting AI assist: programmatic {@link run} and dialog {@link show}.\n * Implemented by {@link AXPAiManagerService}. Consumers outside ai-management should prefer hooks or optional injection.\n */\n@Injectable()\nexport abstract class AXPAiAssistService {\n abstract run(input: AXPAiAssistRunInput): Promise<AXPAiAssistRunResult>;\n\n /** Opens prompt UI; on Send runs {@link run} and closes the dialog. Cancel resolves `null`. */\n abstract show(options: AXPAiAssistShowOptions): Promise<AXPAiAssistRunResult | null>;\n}\n\n//#endregion\n","//#region ---- Structured output ----\n\n/** Default max completion tokens when the AiModel row has no `maxOutputTokens` and the caller omits `maxTokens`. */\nexport const AXPAiAssistDefaultStructuredMaxTokens = 128_000;\n\n/** Default maximum follow-up turns after the first model response when validating structured JSON (implementation may use this). */\nexport const AXPAiAssistDefaultMaxStructuredRetries = 3;\n\n/**\n * Validates parsed JSON from the assistant. Return the validated value (possibly narrowed), or throw with a message\n * the pipeline can send back to the model on retry.\n */\nexport type AXPAiStructuredValidator<T = unknown> = (parsed: unknown) => T | Promise<T>;\n\n/**\n * Thrown when {@link AXPAiAssistRunInput.expectStructuredOutput} is true but the assistant output could not be\n * parsed and optionally validated after all attempts.\n */\nexport class AXPAiStructuredOutputError extends Error {\n /** 1-based count of engine runs performed for this structured-output session. */\n readonly attempts: number;\n\n /** Truncated snapshot of the last assistant plain text (for debugging). */\n readonly lastAssistantText: string;\n\n /** Human-readable validation or parse failure detail. */\n readonly validationMessage: string;\n\n /** Why the pipeline stopped. */\n readonly code?: 'duplicate_assistant_output' | 'validation_exhausted';\n\n constructor(options: {\n message: string;\n attempts: number;\n lastAssistantText: string;\n validationMessage: string;\n cause?: unknown;\n code?: 'duplicate_assistant_output' | 'validation_exhausted';\n }) {\n super(options.message, options.cause !== undefined ? { cause: options.cause } : undefined);\n this.name = 'AXPAiStructuredOutputError';\n this.attempts = options.attempts;\n this.lastAssistantText = options.lastAssistantText;\n this.validationMessage = options.validationMessage;\n this.code = options.code;\n }\n}\n\n//#endregion\n\n//#region ---- Prompt surface ----\n\n/** One persisted user attachment (same storage contract as the AI chat composer). */\nexport interface AXPAiAssistUserMediaAttachment {\n /** `image` / `audio` / `file` (PDF, text, spreadsheets, and other document MIME types). */\n kind: 'image' | 'audio' | 'file';\n fileId: string;\n mimeType: string;\n name?: string;\n}\n\n/**\n * Payload when submitting the assist prompt box (text, optional target assist/agent, optional media).\n */\nexport interface AXPAiAssistPromptSubmitPayload {\n prompt: string;\n assistId?: string;\n directAgentId?: string;\n userMediaAttachments: AXPAiAssistUserMediaAttachment[];\n}\n\n//#endregion\n\n//#region ---- Context & run ----\n\n/**\n * Optional structured hints for a single assist run (serialized into the user message by the implementation).\n */\nexport interface AXPAiAssistRunContext {\n /** Short bullet hints appended to the prompt for the model. */\n hints?: string[];\n /** Extra system-level instruction for this run (implementation may emit a system message). */\n systemInstruction?: string;\n /** Arbitrary structured payload (JSON-serialized in the user message when present). */\n structuredContext?: unknown;\n}\n\n/**\n * Input for the AI assist `run` API (implemented in ai-management).\n */\nexport interface AXPAiAssistRunInput {\n prompt: string;\n /**\n * Optional images, audio, or documents (`fileId` from tenant storage). When non-empty, the implementation builds one multimodal\n * user message (same shape as the AI chat composer) plus the serialized prompt body as text segments.\n */\n userMediaAttachments?: AXPAiAssistUserMediaAttachment[];\n context?: AXPAiAssistRunContext;\n /**\n * Catalog assist id. When omitted together with {@link directAgentId}, the platform default assist is used.\n */\n assistId?: string;\n directAgentId?: string;\n maxSteps?: number;\n temperature?: number;\n /**\n * Max completion tokens for this engine run (when the provider supports it). Structured JSON runs apply a higher\n * default unless {@link structuredOutputMaxTokens} is set.\n */\n maxTokens?: number;\n /** When true, implementation tries to parse assistant text as JSON into {@link AXPAiAssistRunResult.structured}. */\n expectStructuredOutput?: boolean;\n /** Extra instruction appended so the model returns JSON (used when {@link expectStructuredOutput} is true). */\n structuredOutputInstruction?: string;\n /**\n * Shallow merge over built-in platform runtime context fields (see ai-management implementation).\n */\n platformRuntimeNotes?: Record<string, unknown>;\n\n /**\n * Max extra engine turns after the first response when structured output is invalid (default {@link AXPAiAssistDefaultMaxStructuredRetries}).\n * Total attempts = 1 + maxStructuredRetries.\n */\n maxStructuredRetries?: number;\n\n /** Optional schema or domain validation after JSON parse. */\n structuredValidator?: AXPAiStructuredValidator;\n\n /**\n * When false, only one engine run is performed; invalid structured output throws {@link AXPAiStructuredOutputError}.\n * When true (default for {@link expectStructuredOutput}), invalid output triggers follow-up user messages in the same transcript.\n */\n retryOnInvalidStructure?: boolean;\n\n /**\n * Optional description of the expected JSON shape (TypeScript-style or JSON schema summary), appended to the first\n * user message and to retry prompts so the model stays aligned and retries are more accurate.\n */\n structuredOutputSchemaSummary?: string;\n\n /**\n * Overrides {@link maxTokens} for {@link expectStructuredOutput} runs only. Prefer setting this or leaving defaults so\n * the implementation can apply {@link AXPAiAssistDefaultStructuredMaxTokens} and avoid truncated JSON.\n */\n structuredOutputMaxTokens?: number;\n}\n\n/**\n * Result of the AI assist `run` API.\n */\nexport interface AXPAiAssistRunResult {\n /** Primary assistant reply text (extracted from the engine transcript). */\n text: string;\n /**\n * Present when {@link AXPAiAssistRunInput.expectStructuredOutput} is true: validated structured payload\n * (parse + optional {@link AXPAiAssistRunInput.structuredValidator}). On failure the implementation throws\n * {@link AXPAiStructuredOutputError} instead of returning.\n */\n structured?: unknown;\n /**\n * When {@link AXPAiAssistRunInput.expectStructuredOutput} is false: engine usage / provider payload for that single run.\n * When true: {@link AXPAiAssistStructuredOutputRunRaw} with per-attempt usage and totals for debugging.\n */\n raw?: unknown;\n}\n\n//#endregion\n\n//#region ---- Structured run raw (debugging) ----\n\n/**\n * Token usage for a single engine run; numeric fields align with {@link AXPAiEngineUsageTotals} in this module\n * for stable client-side debugging contracts.\n */\nexport interface AXPAiAssistTokenUsageSnapshot {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n cachedPromptTokens?: number;\n}\n\n/**\n * One engine execution within a structured-output session.\n */\nexport interface AXPAiAssistStructuredOutputAttemptRecord {\n /** 1-based index of this engine run. */\n attemptIndex: number;\n /** Usage reported for this run only. */\n usage?: AXPAiAssistTokenUsageSnapshot;\n /** Whether a last-provider payload was present for this run. */\n hasLastProviderResult: boolean;\n}\n\n/**\n * Explicit `raw` shape for {@link AXPAiAssistRunResult} when {@link AXPAiAssistRunInput.expectStructuredOutput} is true.\n */\nexport interface AXPAiAssistStructuredOutputRunRaw {\n kind: 'structured-output';\n /** One entry per engine call (`runEngine` / structured-output retries). */\n attempts: AXPAiAssistStructuredOutputAttemptRecord[];\n /** Cumulative usage across all attempts. */\n totalUsage?: AXPAiAssistTokenUsageSnapshot;\n /** Count of engine runs in this session (same as the last `attemptIndex`). */\n finalAttempt: number;\n lastProviderResult?: unknown;\n}\n\n//#endregion\n\n//#region ---- Show prompt surface ----\n\n/**\n * Typical max width of the prompt box column inside the bottom overlay (maps to `contentMaxWidthPx`).\n */\nexport type AXPAiAssistPopupSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n/**\n * Indeterminate loading dialog shown while the prompt box executes an assist run after Send (model work /\n * structured-output retries).\n */\nexport interface AXPAiAssistRunLoadingDialogSpec {\n title: string;\n text: string;\n}\n\n/**\n * Options for the AI assist `show` prompt API: same run-related fields as {@link AXPAiAssistRunInput} except `prompt`,\n * plus UI chrome. The user-entered prompt from the surface is merged on Send.\n */\nexport interface AXPAiAssistShowOptions {\n /**\n * Prompt box header; must be translated by the caller. Entity list assist uses\n * `@extensions-ai-entity:assist.dialog-title.{type-level|selected|individual}`.\n */\n title: string;\n placeholder?: string;\n initialPrompt?: string;\n size?: AXPAiAssistPopupSize;\n context?: AXPAiAssistRunContext;\n /**\n * Optional catalog assist. When omitted (and {@link directAgentId} is not set), the tenant/platform default assist applies.\n */\n assistId?: string;\n directAgentId?: string;\n maxSteps?: number;\n temperature?: number;\n maxTokens?: number;\n expectStructuredOutput?: boolean;\n structuredOutputInstruction?: string;\n platformRuntimeNotes?: Record<string, unknown>;\n maxStructuredRetries?: number;\n structuredValidator?: AXPAiStructuredValidator;\n retryOnInvalidStructure?: boolean;\n structuredOutputSchemaSummary?: string;\n structuredOutputMaxTokens?: number;\n\n /**\n * When set, shows an indeterminate loading dialog for the duration of each submitted run until `run` settles.\n * Callers supply translated strings.\n */\n runLoadingDialog?: AXPAiAssistRunLoadingDialogSpec;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { Injectable } from '@angular/core';\nimport type { AXPAiEngineRunOptions, AXPAiEngineRunResult } from './ai-engine.types';\n\n//#endregion\n\n//#region ---- Engine (abstract service) ----\n\n/**\n * Backend boundary for AI assist runs (chat + tool rounds). Connectivity implementations execute registry\n * commands/queries during the run loop.\n * Wire a concrete implementation via Angular providers (for example `provide: AXPAiEngine` with `useClass`).\n */\n@Injectable()\nexport abstract class AXPAiEngine {\n /**\n * Sends the conversation to the AI backend and returns updated messages (including tool rounds).\n */\n abstract run(options: AXPAiEngineRunOptions): Promise<AXPAiEngineRunResult>;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport type { AXMAiManagementAgentEntityModel } from '../../entities/agent/agent.types';\nimport type { AXMAiManagementAssistEntityModel } from '../../entities/assist/assist.types';\n\n//#endregion\n\n//#region ---- Constants ----\n\n/** Prefix for supervisor-delegated specialist tools (`${AXPAI_SUPERVISOR_AGENT_TOOL_PREFIX}${agentId}`). */\nexport const AXPAI_SUPERVISOR_AGENT_TOOL_PREFIX = 'agent:' as const;\n\n/** Catalog `name` of the conversation follow-up delegated agent (engine auto-invoke). */\nexport const AXPAI_CONVERSATION_FOLLOW_UP_AGENT_NAME = 'follow-up-prompt-generator' as const;\n\n/** Default cap for main assist / direct-agent chat tool rounds (one provider call per step). */\nexport const AXPAI_ENGINE_DEFAULT_MAX_STEPS = 16;\n\n/** Default cap for delegated specialist sub-runs when the agent row has no positive `maxSteps`. */\nexport const AXPAI_DELEGATED_AGENT_DEFAULT_MAX_STEPS = 8;\n\n/** System prompt for vision OCR / document text extraction. */\nexport const AXPAI_DOCUMENT_VISION_EXTRACTION_SYSTEM =\n 'You are a precise document-reading assistant. Extract readable plain text from the attached file. Preserve headings and lists where obvious. If the content is unreadable, return a short explanation. Output plain text only, no markdown code fences.';\n\n/** Default user line when the caller passes an empty instruction for vision extraction. */\nexport const AXPAI_DOCUMENT_VISION_DEFAULT_USER_INSTRUCTION =\n 'Extract all readable text from this document. Return plain text only.';\n\n//#endregion\n\n//#region ---- Core aliases ----\n\nexport type AXPAiChatTransport = 'openai' | 'gemini' | 'demis';\n\nexport type AXPAiPlanningMode = 'off' | 'once' | 'when-needed';\n\n//#endregion\n\n//#region ---- Platform runtime context ----\n\n/**\n * Snapshot of session / tenant / regional defaults injected into system prompts.\n * Built by {@link AXPAiPlatformRuntimeContextBuilder}.\n */\nexport interface AXPAiPlatformRuntimeContext {\n userId?: string;\n userDisplayName?: string;\n tenantId?: string;\n tenantTitle?: string;\n applicationId?: string;\n applicationTitle?: string;\n locale?: string;\n calendarSystem?: string;\n timeZone?: string;\n country?: string;\n currentInstant?: string;\n currentLocalDateTime?: string;\n notes?: string;\n}\n\n//#endregion\n\n//#region ---- Delegated agent parameter bindings (supervisor / assist) ----\n\n/** Who supplies a delegated `agent:<id>` tool argument at runtime. */\nexport type AXPAiDelegatedParameterBinding = 'assist_locked' | 'assist_default' | 'supervisor';\n\n/**\n * Per-field policy for arguments the supervisor passes when calling a delegated specialist.\n * Names are the tool argument keys; the runtime builds supervisor JSON Schema from this list.\n */\nexport interface AXPAiDelegatedParameterDefinition {\n name: string;\n title?: string;\n description?: string;\n binding: AXPAiDelegatedParameterBinding;\n /** Used when assist row has no value for an `assist_default` key (optional fallback). */\n defaultValue?: unknown;\n /**\n * Optional UI grouping for property viewer / assist parameter editor (collapsible groups in one tab).\n */\n group?: {\n name: string;\n title: string;\n order?: number;\n };\n}\n\n//#endregion\n\n//#region ---- Catalog / entity row shapes (effective rows) ----\n\n/**\n * Effective Assist entity row (chat policy, prompts, delegated routing).\n * Fields are partial except `id` because runtime/query payloads may omit unused slices.\n */\nexport type AXPAiEffectiveAssistRow = Partial<Omit<AXMAiManagementAssistEntityModel, 'id'>> & {\n id: string;\n /** Optional catalog row not persisted on the assist entity; used by mock seeds. */\n imageModelId?: string;\n};\n\n/**\n * Effective AiAgent catalog row (registry scope + optional supervisor JSON schema).\n * Fields are partial except `id` because runtime/query payloads may omit unused slices.\n */\nexport type AXPAiEffectiveAgentRow = Partial<Omit<AXMAiManagementAgentEntityModel, 'id'>> & {\n id: string;\n /** Defines keys, bindings, and drives supervisor JSON Schema (empty or omitted → default `query` only). */\n parameterDefinitions?: AXPAiDelegatedParameterDefinition[] | null;\n};\n\n//#endregion\n\n//#region ---- Model list (picker service) ----\n\nexport interface AXPAiChatModelListRequest {\n assistId?: string | null;\n directAgentId?: string | null;\n}\n\nexport interface AXPAiChatModelListItem {\n id: string;\n name: string;\n title: string;\n /** Normalized `modelPurposes` from the catalog row (for tenant default / capability checks). */\n modelPurposes?: string[];\n chatTransport?: string;\n maxContextTokens?: number;\n inputPricePerMillion?: number;\n outputPricePerMillion?: number;\n cachedInputPricePerMillion?: number;\n}\n\n//#endregion\n\n//#region ---- Chat transcript: responses & messages ----\n\nexport interface AXPAiChatTextResponse {\n type: 'text';\n content: string;\n}\n\n/** Model reasoning / planning segment; paired with {@link AXPAiChatTextResponse} in assistant messages. Persisted in the transcript; a future setting may omit it from storage. */\nexport interface AXPAiChatThinkResponse {\n type: 'think';\n content: string;\n}\n\n/**\n * Stored binary in tenant file storage (user attachment or assistant/tool output replay).\n * Interpretation is by {@link AXPAiChatFileResponse.content.mimeType} (e.g. image/*, audio/*, application/pdf).\n */\nexport interface AXPAiChatFileResponse {\n type: 'file';\n content: {\n fileId: string;\n mimeType: string;\n name?: string;\n };\n}\n\nexport interface AXPAiChatNodeResponse {\n type: 'node';\n content: unknown;\n}\n\nexport interface AXPAiChatFollowUpCommand {\n name: string;\n options?: unknown;\n}\n\nexport interface AXPAiChatFollowUpItem {\n text: string | AXPMultiLanguageString;\n command: AXPAiChatFollowUpCommand;\n}\n\nexport interface AXPAiChatFollowUpResponse {\n type: 'followUp';\n content: AXPAiChatFollowUpItem[];\n}\n\n/** Assistant-side tool / agent invocation segment (replay + OpenAI `tool_calls`). */\nexport interface AXPAiChatToolInvocationContent {\n command: string;\n arguments: unknown;\n}\n\nexport interface AXPAiChatToolAssistantResponse {\n type: 'tool';\n content: AXPAiChatToolInvocationContent;\n callId?: string;\n}\n\nexport interface AXPAiChatAgentAssistantResponse {\n type: 'agent';\n content: AXPAiChatToolInvocationContent;\n callId?: string;\n}\n\nexport interface AXPAiChatToolResultResponse {\n type: 'tool_result';\n callId: string;\n content: unknown;\n}\n\n/**\n * Segments a delegated specialist returns to the supervisor (replayable in UI; no tool-call shapes).\n */\nexport type AXPAiDelegatedAgentResultSegment =\n | AXPAiChatTextResponse\n | AXPAiChatThinkResponse\n | AXPAiChatFileResponse\n | AXPAiChatNodeResponse\n | AXPAiChatFollowUpResponse;\n\n/**\n * Tool-role {@code agent_result} JSON body: either an error or ordered {@code data.responses} from the specialist run.\n */\nexport interface AXPAiDelegatedAgentResultPayload {\n success: boolean;\n error?: string;\n data?: {\n agentName?: string;\n agentId?: string;\n /** Ordered specialist output (e.g. text only, file only, node only, or mixed). */\n responses: AXPAiDelegatedAgentResultSegment[];\n };\n}\n\nexport interface AXPAiChatAgentResultResponse {\n type: 'agent_result';\n callId: string;\n name?: string;\n content: AXPAiDelegatedAgentResultPayload;\n}\n\nexport type AXPAiChatResponse =\n | AXPAiChatTextResponse\n | AXPAiChatThinkResponse\n | AXPAiChatFileResponse\n | AXPAiChatNodeResponse\n | AXPAiChatFollowUpResponse\n | AXPAiChatToolAssistantResponse\n | AXPAiChatAgentAssistantResponse\n | AXPAiChatToolResultResponse\n | AXPAiChatAgentResultResponse;\n\n/**\n * One chat line in the persisted transcript (`user` / `assistant` / `system` / `tool`).\n * Optional {@link AXPAiChatMessage.delegatedReflection} marks ephemeral delegated sub-run reflections.\n */\nexport interface AXPAiChatMessage {\n role: 'system' | 'user' | 'assistant' | 'tool';\n responses: AXPAiChatResponse[];\n /** OpenAI `name` on tool results / some provider echoes. */\n name?: string;\n /** When true, excluded from delegated outcome {@code data.responses} synthesis (see {@link axpAiChatMessageIsDelegatedReflectionExcluded}). */\n delegatedReflection?: boolean;\n}\n\n//#endregion\n\n//#region ---- Tool calls & schemas ----\n\nexport interface AXPAiToolCall {\n id: string;\n name: string;\n arguments: unknown;\n}\n\nexport interface AXPAiToolSchema {\n name: string;\n description?: string;\n parameters: Record<string, unknown>;\n}\n\n/** Registry allow-list on an assist or agent (command ids / query ids). */\nexport interface AXPAiEngineRegistryToolFields {\n /** Same persistence shapes as {@link AXPAiEffectiveAgentRow.toolIds}. */\n toolIds?: unknown;\n /** Same persistence shapes as {@link AXPAiEffectiveAgentRow.queryIds}. */\n queryIds?: unknown;\n}\n\n//#endregion\n\n//#region ---- Engine: last provider snapshot (mock / future real API) ----\n\n/**\n * Normalized payload from the last underlying LLM/vendor call during an engine run.\n * Detailed chat/extract/image request types live in connectivity mock (`ai-chat-provider.types`).\n */\nexport interface AXPAiEngineLastProviderPayload {\n messages: AXPAiChatMessage[];\n toolCalls?: AXPAiToolCall[];\n rawResponse?: unknown;\n}\n\n//#endregion\n\n//#region ---- Engine run: usage, options, results ----\n\nexport interface AXPAiEngineUsageTotals {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n cachedPromptTokens?: number;\n}\n\n/** Cached specialist transcript for a supervisor `agent:*` tool_call id (mock LRU / future server mirror). */\nexport interface AXPAiDelegatedAgentTranscriptEntry {\n agentName?: string;\n messages: AXPAiChatMessage[];\n}\n\nexport interface AXPAiDelegatedNestedToolCallContext {\n delegationCallId: string;\n agentId: string;\n agentName?: string;\n}\n\nexport type AXPAiEngineRunEvent =\n | { type: 'assistant_stream_reset' }\n | {\n type: 'assistant_stream_delta';\n delta: string;\n /**\n * `think` = planning-only stream (no tags required). Omitted or `text` = main assistant stream.\n * Raw `delta` strings are the same as from the provider; this field is the engine’s semantic.\n */\n segment?: 'text' | 'think';\n }\n | { type: 'tool_call_start'; call: AXPAiToolCall }\n | { type: 'tool_call_end'; call: AXPAiToolCall; resultMessage: AXPAiChatMessage }\n | {\n type: 'delegated_agent_nested_tool_call_start';\n ctx: AXPAiDelegatedNestedToolCallContext;\n call: AXPAiToolCall;\n }\n | {\n type: 'delegated_agent_nested_tool_call_end';\n ctx: AXPAiDelegatedNestedToolCallContext;\n call: AXPAiToolCall;\n resultMessage: AXPAiChatMessage;\n }\n | {\n type: 'delegated_agent_nested_stream_reset';\n ctx: AXPAiDelegatedNestedToolCallContext;\n }\n | {\n type: 'delegated_agent_nested_stream_delta';\n ctx: AXPAiDelegatedNestedToolCallContext;\n delta: string;\n }\n | { type: 'delegated_agent_reflection_phase'; active: boolean };\n\nexport interface AXPAiEngineRunOptions {\n messages: AXPAiChatMessage[];\n assistId?: string;\n /** Demisco multipart `session_uuid` when using Demis transport (optional). */\n demisSessionUuid?: string;\n /** Direct AiAgent thread (registry tools only); uses tenant default assist for model policy when assist id omitted. */\n directAgentId?: string;\n modelEntityId?: string;\n /** Legacy catalog `name` (API id) before entity ids were used. */\n modelId?: string;\n maxSteps?: number;\n maxTokens?: number;\n temperature?: number;\n /** Overrides assist-stored planning for this run (UI / tests). */\n planningMode?: AXPAiPlanningMode;\n platformRuntimeContext?: AXPAiPlatformRuntimeContext | null;\n onRunEvent?: (event: AXPAiEngineRunEvent) => void;\n}\n\nexport interface AXPAiEngineRunResult {\n messages: AXPAiChatMessage[];\n lastProviderResult?: AXPAiEngineLastProviderPayload;\n usageTotals?: AXPAiEngineUsageTotals;\n delegatedTranscriptsByCallId?: Record<string, AXPAiDelegatedAgentTranscriptEntry>;\n}\n\n//#endregion\n\n//#region ---- Structured text & media requests ----\n\nexport interface AXPAiStructuredTextCompletionOptions {\n assistId?: string;\n modelEntityId?: string;\n modelId?: string;\n messages: AXPAiChatMessage[];\n maxTokens?: number;\n temperature?: number;\n platformRuntimeContext?: AXPAiPlatformRuntimeContext | null;\n}\n\nexport interface AXPAiExtractDocumentTextFromStoredFileRequest {\n assistId: string;\n chatTransport: AXPAiChatTransport;\n fileId: string;\n instruction?: string;\n modelEntityId?: string;\n}\n\n//#endregion\n\n//#region ---- Loose tool/agent result bodies (persisted tool output JSON) ----\n\nexport type AXPAiChatToolResultBody = unknown;\n\nexport type AXPAiChatAgentResultBody = AXPAiDelegatedAgentResultPayload;\n\n//#endregion\n\n//#region ---- Transcript helpers ----\n\n/**\n * Reads a stored-file artifact from a normalized tool handler body (`{ success, data }`) or a flat `data` object.\n */\nexport function axpAiExtractStoredFileArtifactFromUnknown(content: unknown): AXPAiChatFileResponse['content'] | null {\n if (content == null || typeof content !== 'object' || Array.isArray(content)) {\n return null;\n }\n const o = content as Record<string, unknown>;\n const dataRaw = o['data'];\n if (o['success'] === true && dataRaw != null && typeof dataRaw === 'object' && !Array.isArray(dataRaw)) {\n return axpAiExtractStoredFileArtifactFromDataRecord(dataRaw as Record<string, unknown>);\n }\n return axpAiExtractStoredFileArtifactFromDataRecord(o);\n}\n\nfunction axpAiExtractStoredFileArtifactFromDataRecord(d: Record<string, unknown>): AXPAiChatFileResponse['content'] | null {\n const fileId = typeof d['fileId'] === 'string' ? d['fileId'].trim() : '';\n const mimeType = typeof d['mimeType'] === 'string' ? d['mimeType'].trim() : '';\n if (!fileId || !mimeType) {\n return null;\n }\n const nameRaw = d['name'];\n const name = typeof nameRaw === 'string' && nameRaw.trim() ? nameRaw.trim() : undefined;\n return { fileId, mimeType, ...(name ? { name } : {}) };\n}\n\n/**\n * Returns the last stored-file artifact announced in any `tool` → `tool_result` segment (delegated sub-runs, main chat).\n */\nexport function axpAiExtractLastStoredFileArtifactFromChatMessages(\n messages: AXPAiChatMessage[],\n): AXPAiChatFileResponse['content'] | null {\n let last: AXPAiChatFileResponse['content'] | null = null;\n for (const m of messages) {\n if (m.role !== 'tool') {\n continue;\n }\n for (const r of m.responses) {\n if (r.type !== 'tool_result') {\n continue;\n }\n const hit = axpAiExtractStoredFileArtifactFromUnknown(r.content);\n if (hit) {\n last = hit;\n }\n }\n }\n return last;\n}\n\nfunction axpAiCloneChatMessages(messages: AXPAiChatMessage[]): AXPAiChatMessage[] {\n try {\n return structuredClone(messages);\n } catch {\n return JSON.parse(JSON.stringify(messages)) as AXPAiChatMessage[];\n }\n}\n\n/**\n * Ensures the delegated specialist transcript replays stored files in assistant `responses`\n * (not only prose that points at tool JSON).\n */\nexport function axpAiDelegatedSubTranscriptAppendFileArtifactFromToolResults(\n messages: AXPAiChatMessage[],\n): AXPAiChatMessage[] {\n const artifact = axpAiExtractLastStoredFileArtifactFromChatMessages(messages);\n if (!artifact) {\n return messages;\n }\n const out = axpAiCloneChatMessages(messages);\n let lastAssistant = -1;\n for (let i = out.length - 1; i >= 0; i--) {\n if (out[i].role === 'assistant') {\n lastAssistant = i;\n break;\n }\n }\n if (lastAssistant < 0) {\n return out;\n }\n const msg = out[lastAssistant];\n const duplicate = msg.responses.some(\n (r) => r.type === 'file' && r.content.fileId === artifact.fileId && r.content.mimeType === artifact.mimeType,\n );\n if (duplicate) {\n return out;\n }\n out[lastAssistant] = {\n ...msg,\n responses: [...msg.responses, { type: 'file', content: artifact }],\n };\n return out;\n}\n\nfunction axpAiIsDelegatedAgentResultSegment(value: unknown): value is AXPAiDelegatedAgentResultSegment {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n const o = value as Record<string, unknown>;\n const t = o['type'];\n if (t === 'text' && typeof o['content'] === 'string') {\n return true;\n }\n if (t === 'think' && typeof o['content'] === 'string') {\n return true;\n }\n if (t === 'node') {\n return 'content' in o;\n }\n if (t === 'file' && o['content'] != null && typeof o['content'] === 'object' && !Array.isArray(o['content'])) {\n const c = o['content'] as Record<string, unknown>;\n return typeof c['fileId'] === 'string' && typeof c['mimeType'] === 'string';\n }\n if (t === 'followUp' && Array.isArray(o['content'])) {\n return axpAiNormalizeFollowUpContent(o['content']).length > 0;\n }\n return false;\n}\n\n/**\n * Parses a JSON-like array of specialist segments (e.g. from persisted tool output). Invalid entries are skipped.\n */\nexport function axpAiParseDelegatedAgentResultSegmentsFromUnknown(raw: unknown): AXPAiDelegatedAgentResultSegment[] {\n if (!Array.isArray(raw)) {\n return [];\n }\n const out: AXPAiDelegatedAgentResultSegment[] = [];\n for (const item of raw) {\n if (axpAiIsDelegatedAgentResultSegment(item)) {\n out.push(item);\n }\n }\n return out;\n}\n\n/**\n * Collects ordered {@link AXPAiDelegatedAgentResultSegment} from a delegated sub-run transcript\n * (excludes {@link AXPAiChatMessage.delegatedReflection} lines).\n */\nexport function axpAiCollectDelegatedAgentOutcomeResponses(messages: AXPAiChatMessage[]): AXPAiDelegatedAgentResultSegment[] {\n const out: AXPAiDelegatedAgentResultSegment[] = [];\n for (const m of messages) {\n if (m.role !== 'assistant' || axpAiChatMessageIsDelegatedReflectionExcluded(m)) {\n continue;\n }\n for (const r of m.responses) {\n if (r.type === 'text' || r.type === 'think' || r.type === 'file' || r.type === 'node' || r.type === 'followUp') {\n out.push(r);\n }\n }\n }\n return out;\n}\n\n/**\n * Plain text from {@link AXPAiDelegatedAgentResultSegment} (text + think only; for provider hints / markdown fallbacks).\n */\nexport function axpAiDelegatedAgentOutcomeResponsesPlainText(segments: AXPAiDelegatedAgentResultSegment[]): string {\n const parts: string[] = [];\n for (const s of segments) {\n if (s.type === 'text' || s.type === 'think') {\n const t = s.content.trim();\n if (t.length > 0) {\n parts.push(t);\n }\n }\n }\n return parts.join('\\n\\n').trim();\n}\n\nexport function axpAiChatTextMessage(role: AXPAiChatMessage['role'], text: string): AXPAiChatMessage {\n return {\n role,\n responses: [{ type: 'text', content: text }],\n };\n}\n\nexport function axpAiChatUserMessage(responses: AXPAiChatResponse[]): AXPAiChatMessage {\n return {\n role: 'user',\n responses,\n };\n}\n\nexport function axpAiChatMessageGetText(message: AXPAiChatMessage): string {\n const parts: string[] = [];\n for (const r of message.responses) {\n if (r.type === 'text') {\n parts.push(r.content);\n } else if (r.type === 'node' || r.type === 'followUp') {\n try {\n parts.push(JSON.stringify({ type: r.type, content: r.content }));\n } catch {\n parts.push(`[${r.type}]`);\n }\n }\n }\n return parts.join('\\n\\n');\n}\n\n/**\n * Planning-only assistant output is always internal reasoning. Provider text may be untagged;\n * the engine maps `text` responses to `think` so the transcript and UI are correct without\n * requiring `<think>` / `<think>` in the model output.\n */\nexport function axpAiCoercePlanningAssistantTextToThink(\n planningMessages: AXPAiChatMessage[],\n): AXPAiChatMessage[] {\n return planningMessages.map((m) => {\n if (m.role !== 'assistant') {\n return m;\n }\n return {\n ...m,\n responses: m.responses.map((r) => {\n if (r.type === 'text') {\n return { type: 'think', content: r.content };\n }\n return r;\n }),\n };\n });\n}\n\n//#region ---- Assistant plain text: embedded node JSON envelopes ----\n\nfunction isAssistantNodeTypeEnvelope(o: unknown): o is { type: 'node'; content: unknown } {\n if (!o || typeof o !== 'object' || Array.isArray(o)) {\n return false;\n }\n const r = o as Record<string, unknown>;\n return r['type'] === 'node' && 'content' in r;\n}\n\nfunction isAssistantFollowUpTypeEnvelope(o: unknown): o is AXPAiChatFollowUpResponse {\n return axpAiIsDelegatedAgentResultSegment(o) && o.type === 'followUp';\n}\n\n/**\n * Parses one balanced `{ ... }` JSON object starting at `start` (must point at `{`).\n */\nfunction tryParseBalancedJsonObjectAt(s: string, start: number): { value: unknown; end: number } | null {\n if (s[start] !== '{') {\n return null;\n }\n let depth = 0;\n let inString = false;\n let escape = false;\n for (let i = start; i < s.length; i++) {\n const c = s[i];\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (c === '\\\\') {\n escape = true;\n continue;\n }\n if (c === '\"') {\n inString = false;\n }\n continue;\n }\n if (c === '\"') {\n inString = true;\n continue;\n }\n if (c === '{') {\n depth++;\n } else if (c === '}') {\n depth--;\n if (depth === 0) {\n const slice = s.slice(start, i + 1);\n try {\n return { value: JSON.parse(slice) as unknown, end: i + 1 };\n } catch {\n return null;\n }\n }\n }\n }\n return null;\n}\n\nfunction mergeAdjacentAssistantTextResponses(seq: AXPAiChatResponse[]): AXPAiChatResponse[] {\n const out: AXPAiChatResponse[] = [];\n for (const r of seq) {\n if (r.type !== 'text') {\n out.push(r);\n continue;\n }\n const prev = out[out.length - 1];\n const v = r.content.trim();\n if (!v.length) {\n continue;\n }\n if (prev && prev.type === 'text') {\n const joined = `${prev.content}\\n\\n${v}`.trim();\n out[out.length - 1] = { type: 'text', content: joined };\n } else {\n out.push({ type: 'text', content: v });\n }\n }\n return out;\n}\n\n/**\n * Splits raw assistant prose into ordered `text` / `node` responses by detecting JSON objects\n * shaped like `{ \"type\": \"node\", \"content\": <AXPWidgetNode> }` anywhere in the string.\n */\n/** Removes markdown ```json fences so specialist-only JSON replies still parse as envelopes. */\nfunction axpAiStripMarkdownJsonFences(raw: string): string {\n return raw.replace(/```(?:json)?\\s*([\\s\\S]*?)```/gi, (_match, inner: string) => inner.trim());\n}\n\nfunction axpAiExpandPlainAssistantTextToResponses(raw: string): AXPAiChatResponse[] {\n const normalized = axpAiStripMarkdownJsonFences(raw);\n const parts: AXPAiChatResponse[] = [];\n let i = 0;\n const pushText = (value: string): void => {\n const v = value.trim();\n if (v.length > 0) {\n parts.push({ type: 'text', content: v });\n }\n };\n\n while (i < normalized.length) {\n const braceIdx = normalized.indexOf('{', i);\n if (braceIdx < 0) {\n pushText(normalized.slice(i));\n break;\n }\n pushText(normalized.slice(i, braceIdx));\n const parsed = tryParseBalancedJsonObjectAt(normalized, braceIdx);\n if (parsed && isAssistantFollowUpTypeEnvelope(parsed.value)) {\n const normalized = axpAiNormalizeFollowUpContent(parsed.value.content);\n if (normalized.length > 0) {\n parts.push({ type: 'followUp', content: normalized });\n }\n i = parsed.end;\n } else if (parsed && isAssistantNodeTypeEnvelope(parsed.value)) {\n parts.push({ type: 'node', content: parsed.value.content });\n i = parsed.end;\n } else if (parsed) {\n pushText(normalized.slice(braceIdx, parsed.end));\n i = parsed.end;\n } else {\n pushText(normalized.slice(braceIdx, braceIdx + 1));\n i = braceIdx + 1;\n }\n }\n return mergeAdjacentAssistantTextResponses(parts);\n}\n\n//#endregion\n\nexport function axpAiChatMessagesFromProviderAssistant(\n text: string,\n toolCalls?: AXPAiToolCall[],\n): AXPAiChatMessage[] {\n const normalizeThinkingTags = (raw: string): string =>\n raw\n .replace(/<(\\/?redacted_thinking)>/gi, '<$1>')\n .replace(/<(\\/?think)>/gi, '<$1>');\n\n const splitAssistantResponses = (raw: string): AXPAiChatResponse[] => {\n const normalized = normalizeThinkingTags(raw ?? '');\n if (!normalized) {\n return [];\n }\n const out: AXPAiChatResponse[] = [];\n const appendPlainSlice = (value: string): void => {\n out.push(...axpAiExpandPlainAssistantTextToResponses(value));\n };\n const pushThink = (value: string): void => {\n const v = value.trim();\n if (v.length > 0) {\n out.push({ type: 'think', content: v });\n }\n };\n\n const thinkRe = /<(redacted_thinking|think)>([\\s\\S]*?)<\\/\\1>/gi;\n let last = 0;\n let m: RegExpExecArray | null;\n while ((m = thinkRe.exec(normalized)) !== null) {\n appendPlainSlice(normalized.slice(last, m.index));\n pushThink(m[2] ?? '');\n last = m.index + m[0].length;\n }\n appendPlainSlice(normalized.slice(last));\n return mergeAdjacentAssistantTextResponses(out);\n };\n\n const parsedResponses = splitAssistantResponses(text);\n const calls = toolCalls ?? [];\n const out: AXPAiChatMessage[] = [];\n if (parsedResponses.length > 0) {\n out.push({\n role: 'assistant',\n responses: parsedResponses,\n });\n }\n for (const tc of calls) {\n const isDelegatedAgent = axpAiParseSupervisorAgentToolName(tc.name) != null;\n out.push({\n role: 'assistant',\n responses: [\n isDelegatedAgent\n ? {\n type: 'agent',\n content: {\n command: tc.name,\n arguments: tc.arguments,\n },\n callId: tc.id,\n }\n : {\n type: 'tool',\n content: {\n command: tc.name,\n arguments: tc.arguments,\n },\n callId: tc.id,\n },\n ],\n });\n }\n if (out.length === 0) {\n out.push(axpAiChatTextMessage('assistant', ''));\n }\n return out;\n}\n\nexport function axpAiToolCallFromAssistantToolMessage(message: AXPAiChatMessage): AXPAiToolCall | null {\n if (message.role !== 'assistant') {\n return null;\n }\n for (const r of message.responses) {\n if (r.type === 'tool' || r.type === 'agent') {\n const callId = r.callId?.trim() ?? '';\n const command = r.content.command?.trim() ?? '';\n if (!command) {\n return null;\n }\n return {\n id: callId || `call_${command}`,\n name: command,\n arguments: r.content.arguments,\n };\n }\n }\n return null;\n}\n\nexport function axpAiChatToolResultMessage(callId: string, content: unknown, toolName?: string): AXPAiChatMessage {\n const id = callId.trim();\n return {\n role: 'tool',\n ...(toolName?.trim() ? { name: toolName.trim() } : {}),\n responses: [\n {\n type: 'tool_result',\n callId: id,\n content,\n },\n ],\n };\n}\n\nexport function axpAiChatAgentResultMessage(\n callId: string,\n content: AXPAiDelegatedAgentResultPayload,\n toolName?: string,\n): AXPAiChatMessage {\n const id = callId.trim();\n return {\n role: 'tool',\n ...(toolName?.trim() ? { name: toolName.trim() } : {}),\n responses: [\n {\n type: 'agent_result',\n callId: id,\n content,\n },\n ],\n };\n}\n\nexport function axpAiNormalizeHandlerResultToToolBody(handlerResult: unknown): unknown {\n if (handlerResult === undefined || handlerResult === null) {\n return { success: false, error: 'Tool returned no result.' };\n }\n if (typeof handlerResult === 'string') {\n const t = handlerResult.trim();\n if (!t) {\n return { success: false, error: 'Tool returned an empty string.' };\n }\n try {\n return JSON.parse(t) as unknown;\n } catch {\n return { success: true, data: handlerResult };\n }\n }\n if (typeof handlerResult === 'object' && !Array.isArray(handlerResult)) {\n return handlerResult;\n }\n return { success: true, data: handlerResult };\n}\n\nexport function axpAiChatToolOrAgentResultBodyJson(message: AXPAiChatMessage): string {\n const tr = message.responses.find((r) => r.type === 'tool_result' || r.type === 'agent_result');\n if (!tr || (tr.type !== 'tool_result' && tr.type !== 'agent_result')) {\n return '';\n }\n try {\n return JSON.stringify(tr.content);\n } catch {\n return String(tr.content);\n }\n}\n\n/**\n * Compact JSON string of a tool-role message’s `tool_result` body (transcript tail / logs).\n */\nexport function axpAiChatToolResultBodyJson(message: AXPAiChatMessage): string {\n return axpAiChatToolOrAgentResultBodyJson(message);\n}\n\n//#endregion\n\n//#region ---- Supervisor delegated-agent helpers ----\n\nexport function axpAiSupervisorAgentToolName(agentCatalogId: string): string {\n return `${AXPAI_SUPERVISOR_AGENT_TOOL_PREFIX}${agentCatalogId.trim()}`;\n}\n\nexport function axpAiParseSupervisorAgentToolName(toolName: string): string | null {\n const n = toolName.trim();\n if (!n.startsWith(AXPAI_SUPERVISOR_AGENT_TOOL_PREFIX)) {\n return null;\n }\n const id = n.slice(AXPAI_SUPERVISOR_AGENT_TOOL_PREFIX.length).trim();\n return id.length > 0 ? id : null;\n}\n\n//#endregion\n\n//#region ---- Assistant message transforms (delegated sub-run) ----\n\nexport function axpAiMergePlainAssistantTextTurn(messages: AXPAiChatMessage[]): AXPAiChatMessage[] {\n const chunks: string[] = [];\n for (const m of messages) {\n if (m.role !== 'assistant') {\n continue;\n }\n const textParts = m.responses\n .filter((r): r is AXPAiChatTextResponse => r.type === 'text')\n .map((r) => r.content.trim())\n .filter((s) => s.length > 0);\n const thinkParts = m.responses\n .filter((r): r is AXPAiChatThinkResponse => r.type === 'think')\n .map((r) => r.content.trim())\n .filter((s) => s.length > 0);\n const serialized = axpAiChatMessageGetText(m).trim();\n const t =\n textParts.join('\\n\\n').trim() ||\n thinkParts.join('\\n\\n').trim() ||\n serialized;\n if (t.length > 0) {\n chunks.push(t);\n }\n }\n const joined = chunks.join('\\n\\n').trim();\n if (!joined) {\n return [];\n }\n return axpAiChatMessagesFromProviderAssistant(joined, undefined);\n}\n\n//#region ---- Follow-up normalization ----\n\n/** Normalizes one follow-up chip command object from model JSON. */\nexport function axpAiNormalizeFollowUpCommand(raw: unknown): AXPAiChatFollowUpCommand | null {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {\n return null;\n }\n const o = raw as Record<string, unknown>;\n const name = typeof o['name'] === 'string' ? o['name'].trim() : '';\n if (!name) {\n return null;\n }\n if (!('options' in o)) {\n return { name };\n }\n return { name, options: o['options'] };\n}\n\n/** Normalizes one follow-up chip row (`text` + `command`). */\nexport function axpAiNormalizeFollowUpItem(raw: unknown): AXPAiChatFollowUpItem | null {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {\n return null;\n }\n const o = raw as Record<string, unknown>;\n const text = typeof o['text'] === 'string' ? o['text'].trim() : '';\n const command = axpAiNormalizeFollowUpCommand(o['command']);\n if (!text || !command) {\n return null;\n }\n return { text, command };\n}\n\n/** Normalizes follow-up `content` arrays; invalid rows are skipped. */\nexport function axpAiNormalizeFollowUpContent(raw: unknown): AXPAiChatFollowUpItem[] {\n if (!Array.isArray(raw)) {\n return [];\n }\n const out: AXPAiChatFollowUpItem[] = [];\n for (const item of raw) {\n const row = axpAiNormalizeFollowUpItem(item);\n if (row) {\n out.push(row);\n }\n }\n return out;\n}\n\n//#endregion\n\n//#region ---- Follow-up auto-invoke (supervisor turn) ----\n\nfunction axpAiLastUserTranscriptTextLocal(messages: AXPAiChatMessage[]): string {\n for (let i = messages.length - 1; i >= 0; i--) {\n if (messages[i].role === 'user') {\n return axpAiChatMessageGetText(messages[i]).trim();\n }\n }\n return '';\n}\n\nfunction axpAiIndexOfLastUserMessage(messages: AXPAiChatMessage[]): number {\n for (let i = messages.length - 1; i >= 0; i--) {\n if (messages[i].role === 'user') {\n return i;\n }\n }\n return -1;\n}\n\nfunction axpAiTranscriptTailSinceLastUser(messages: AXPAiChatMessage[]): AXPAiChatMessage[] {\n const idx = axpAiIndexOfLastUserMessage(messages);\n return idx < 0 ? messages : messages.slice(idx);\n}\n\n/**\n * Whether the current user turn already has a usable {@code followUp} segment from the follow-up specialist.\n */\nexport function axpAiTranscriptAlreadyHasFollowUpInTurn(\n messages: AXPAiChatMessage[],\n followUpAgentId: string,\n): boolean {\n const tail = axpAiTranscriptTailSinceLastUser(messages);\n for (const m of tail) {\n if (m.role === 'assistant' && m.responses.some((r) => r.type === 'followUp')) {\n return true;\n }\n if (m.role !== 'tool') {\n continue;\n }\n for (const r of m.responses) {\n if (r.type !== 'agent_result') {\n continue;\n }\n const payload = r.content;\n if (payload.success !== true || payload.data?.responses == null) {\n continue;\n }\n const agentId = payload.data.agentId?.trim() ?? '';\n const agentName = payload.data.agentName?.trim() ?? '';\n const isFollowUpAgent =\n agentId === followUpAgentId.trim() || agentName === AXPAI_CONVERSATION_FOLLOW_UP_AGENT_NAME;\n if (!isFollowUpAgent) {\n continue;\n }\n if (payload.data.responses.some((s) => s.type === 'followUp')) {\n return true;\n }\n }\n }\n return false;\n}\n\nconst AXPAI_GREETING_ONLY_USER_RE =\n /^(?:hi|hello|hey|howdy|thanks|thank\\s*you|ok(?:ay)?|bye|goodbye|سلام|درود|وقت\\s*بخیر|ممنون|متشکرم|مرسی)(?:[!.\\s?،]*)*$/iu;\n\n/**\n * Engine may auto-call the follow-up specialist after the supervisor finishes, unless the turn is trivial.\n */\nexport function axpAiShouldAutoInvokeFollowUpAgent(messages: AXPAiChatMessage[]): boolean {\n const userText = axpAiLastUserTranscriptTextLocal(messages).trim();\n if (userText.length === 0) {\n return false;\n }\n if (AXPAI_GREETING_ONLY_USER_RE.test(userText)) {\n return false;\n }\n const tail = axpAiTranscriptTailSinceLastUser(messages);\n for (const m of tail) {\n if (m.role !== 'assistant' || axpAiChatMessageIsDelegatedReflectionExcluded(m)) {\n continue;\n }\n const plain = m.responses\n .filter((r): r is AXPAiChatTextResponse => r.type === 'text')\n .map((r) => r.content.trim())\n .join('\\n')\n .trim();\n const serialized = axpAiChatMessageGetText(m).trim();\n if (plain.length > 0 || serialized.length > 0) {\n return true;\n }\n if (m.responses.some((r) => r.type === 'node' || r.type === 'file')) {\n return true;\n }\n }\n return false;\n}\n\n/** Builds the `query` argument for an automatic follow-up specialist sub-run. */\nexport function axpAiBuildAutoFollowUpAgentQuery(messages: AXPAiChatMessage[]): string {\n const userText = axpAiLastUserTranscriptTextLocal(messages);\n const tail = axpAiTranscriptTailSinceLastUser(messages);\n const answerParts: string[] = [];\n for (const m of tail) {\n if (m.role !== 'assistant' || axpAiChatMessageIsDelegatedReflectionExcluded(m)) {\n continue;\n }\n const t = axpAiChatMessageGetText(m).trim();\n if (t.length > 0) {\n answerParts.push(t);\n }\n }\n const answer = answerParts.join('\\n\\n').trim().slice(0, 4000);\n return [\n 'Propose 2–5 short next-step chips for the user after this exchange.',\n '',\n `User message: ${userText}`,\n '',\n answer.length > 0 ? `Assistant answer so far:\\n${answer}` : 'Assistant answer so far: (none yet)',\n ].join('\\n');\n}\n\n//#endregion\n\n/**\n * Appends delegated {@code followUp} / {@code node} / {@code file} segments from tool {@code agent_result}\n * lines onto the final supervisor assistant message when the model omitted them.\n */\nexport function axpAiReconcileSupervisorFinalAssistantWithDelegatedOutcomes(\n messages: AXPAiChatMessage[],\n): AXPAiChatMessage[] {\n let lastAssistantIdx = -1;\n for (let i = messages.length - 1; i >= 0; i--) {\n const m = messages[i];\n if (m.role !== 'assistant' || axpAiChatMessageIsDelegatedReflectionExcluded(m)) {\n continue;\n }\n if (\n m.responses.some(\n (r) => r.type === 'text' || r.type === 'node' || r.type === 'file' || r.type === 'followUp',\n )\n ) {\n lastAssistantIdx = i;\n break;\n }\n }\n if (lastAssistantIdx < 0) {\n return messages;\n }\n\n const delegatedStructured: AXPAiChatResponse[] = [];\n for (const m of messages) {\n if (m.role !== 'tool') {\n continue;\n }\n for (const r of m.responses) {\n if (r.type !== 'agent_result') {\n continue;\n }\n const payload = r.content;\n if (payload.success !== true || payload.data?.responses == null) {\n continue;\n }\n for (const seg of payload.data.responses) {\n if (seg.type === 'followUp' || seg.type === 'node' || seg.type === 'file') {\n delegatedStructured.push(seg);\n }\n }\n }\n }\n if (delegatedStructured.length === 0) {\n return messages;\n }\n\n const last = messages[lastAssistantIdx];\n let followUpPresent = last.responses.some((r) => r.type === 'followUp');\n let nodePresent = last.responses.some((r) => r.type === 'node');\n const fileIds = new Set(\n last.responses\n .filter((r): r is AXPAiChatFileResponse => r.type === 'file')\n .map((r) => r.content.fileId),\n );\n\n const toAppend: AXPAiChatResponse[] = [];\n for (const seg of delegatedStructured) {\n if (seg.type === 'followUp' && !followUpPresent) {\n toAppend.push(seg);\n followUpPresent = true;\n } else if (seg.type === 'node' && !nodePresent) {\n toAppend.push(seg);\n nodePresent = true;\n } else if (seg.type === 'file' && !fileIds.has(seg.content.fileId)) {\n toAppend.push(seg);\n fileIds.add(seg.content.fileId);\n }\n }\n if (toAppend.length === 0) {\n return messages;\n }\n\n const out = [...messages];\n out[lastAssistantIdx] = {\n ...last,\n responses: [...last.responses, ...toAppend],\n };\n return out;\n}\n\nexport function axpAiPruneAssistantPiecesToFirstToolOnly(messages: AXPAiChatMessage[]): AXPAiChatMessage[] {\n const out: AXPAiChatMessage[] = [];\n let keptTool = false;\n for (const m of messages) {\n if (m.role !== 'assistant') {\n out.push(m);\n continue;\n }\n const idx = m.responses.findIndex((r) => r.type === 'tool' || r.type === 'agent');\n if (idx < 0) {\n out.push(m);\n continue;\n }\n if (!keptTool) {\n out.push({\n ...m,\n responses: m.responses.slice(0, idx + 1),\n });\n keptTool = true;\n }\n }\n return out;\n}\n\nexport function axpAiChatDelegatedReflectionAssistantMessage(reflectionText: string): AXPAiChatMessage {\n return {\n role: 'assistant',\n delegatedReflection: true,\n responses: [{ type: 'text', content: reflectionText }],\n };\n}\n\nexport function axpAiChatMessageIsDelegatedReflectionExcluded(message: AXPAiChatMessage): boolean {\n return message.delegatedReflection === true;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPRegionalSetting, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { Injectable, inject } from '@angular/core';\nimport type { AXPAiPlatformRuntimeContext } from './ai-engine.types';\n\n//#endregion\n\n//#region ---- Local time formatting ----\n\n/**\n * Formats {@link now} in {@link ianaTimeZone} for English system prompts; falls back to UTC on invalid zone.\n */\nfunction formatNowForRuntimeContext(now: Date, ianaTimeZone: string | undefined): string {\n const tz = ianaTimeZone?.trim() || 'UTC';\n try {\n return (\n now.toLocaleString('en-US', {\n timeZone: tz,\n dateStyle: 'full',\n timeStyle: 'long',\n }) + ` (${tz})`\n );\n } catch {\n return now.toISOString() + ' (UTC)';\n }\n}\n\n//#endregion\n\n//#region ---- Builder ----\n\n/**\n * Builds {@link AXPAiPlatformRuntimeContext} from session and user-scoped regional settings.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPAiPlatformRuntimeContextBuilder {\n //#region ---- Services & Dependencies ----\n\n private readonly session = inject(AXPSessionService);\n private readonly settings = inject(AXPSettingsService);\n private readonly translation = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Resolves current user, tenant, application, UI language, and regional preferences from storage.\n */\n async build(): Promise<AXPAiPlatformRuntimeContext> {\n const user = this.session.user;\n const tenant = this.session.tenant;\n const application = this.session.application;\n const userScope = this.settings.scope(AXPPlatformScope.User);\n\n const [calendarRaw, tzRaw, countryRaw] = await Promise.all([\n userScope.get(AXPRegionalSetting.Calendar),\n userScope.get(AXPRegionalSetting.TimeZone),\n userScope.get(AXPRegionalSetting.Country),\n ]);\n\n const calendarSystem = typeof calendarRaw === 'string' && calendarRaw.trim() ? calendarRaw.trim() : undefined;\n const timeZone = typeof tzRaw === 'string' && tzRaw.trim() ? tzRaw.trim() : undefined;\n const country = typeof countryRaw === 'string' && countryRaw.trim() ? countryRaw.trim() : undefined;\n\n const locale = this.translation.getActiveLang();\n const now = new Date();\n\n return {\n userId: user?.id,\n userDisplayName: [user?.name?.trim(), user?.title?.trim()].find((s) => s && s.length > 0),\n tenantId: tenant?.id,\n tenantTitle: tenant?.title?.trim() || tenant?.name?.trim(),\n applicationId: application?.id,\n applicationTitle: application?.title?.trim() || application?.name?.trim(),\n locale,\n calendarSystem,\n timeZone,\n country,\n currentInstant: now.toISOString(),\n currentLocalDateTime: formatNowForRuntimeContext(now, timeZone),\n };\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { RootConfig } from '../../const';\nimport {\n type AXPFileStorageService,\n AXPFileStorageStatus,\n} from '@acorex/platform/common';\n\n//#endregion\n\n//#region ---- Constants ----\n\n/** Max length for relaying an https image URL in tool_result when persistence fails (CORS, etc.). */\nexport const AI_GENERATED_IMAGE_MAX_REMOTE_URL_IN_TOOL = 2048;\n\n/** refType for files created from in-chat image tool output. */\nexport const AI_CHAT_GENERATED_IMAGE_REF_TYPE = `${RootConfig.module.name}.AiChatGeneratedImage`;\n\n/** refType for files created from in-chat text-to-speech tool output. */\nexport const AI_CHAT_GENERATED_SPEECH_REF_TYPE = `${RootConfig.module.name}.AiChatGeneratedSpeech`;\n\n/** refType for user-attached images in AI chat; {@link persistAiChatAttachmentImage} uses a batch ref id. */\nexport const AI_CHAT_ATTACHMENT_REF_TYPE = `${RootConfig.module.name}.AiChatAttachment`;\n\n/** File storage category for user chat image attachments. */\nexport const AI_CHAT_ATTACHMENT_CATEGORY = 'ai-chat-attachment';\n\n//#endregion\n\n//#region ---- URL / File conversion ----\n\n/**\n * Builds a File from a vendor image URL (https) or data URL (base64 image).\n */\nexport async function blobOrFileFromImageResult(\n imageUrl: string,\n defaultName = 'ai-generated.png',\n): Promise<File> {\n const trimmed = imageUrl.trim();\n if (!trimmed) {\n throw new Error('Image URL is empty.');\n }\n\n if (trimmed.startsWith('data:')) {\n const res = await fetch(trimmed);\n if (!res.ok) {\n throw new Error(`Failed to read data URL (${res.status}).`);\n }\n const blob = await res.blob();\n const mime = blob.type || parseDataUrlMime(trimmed) || 'image/png';\n return new File([blob], defaultName, { type: mime });\n }\n\n if (trimmed.startsWith('https://') || trimmed.startsWith('http://')) {\n const res = await fetch(trimmed);\n if (!res.ok) {\n throw new Error(`Failed to fetch image (${res.status}).`);\n }\n const blob = await res.blob();\n const mime =\n blob.type ||\n res.headers.get('Content-Type')?.split(';')[0]?.trim() ||\n 'image/png';\n const ext = mime.includes('jpeg') || mime.includes('jpg') ? 'jpg' : mime.includes('webp') ? 'webp' : 'png';\n return new File([blob], defaultName.replace(/\\.[^.]+$/, '') + '.' + ext, { type: mime });\n }\n\n throw new Error('Unsupported image URL scheme (expected https: or data:).');\n}\n\nfunction parseDataUrlMime(dataUrl: string): string | undefined {\n const m = /^data:([^;,]+)[;,]/.exec(dataUrl);\n return m?.[1]?.trim();\n}\n\n//#endregion\n\n//#region ---- Persistence ----\n\n/**\n * Saves the file and commits it so it appears in storage queries as committed.\n */\nexport async function persistAiGeneratedImage(\n fileStorage: AXPFileStorageService,\n file: File,\n ref: { refId: string; refType: string },\n): Promise<{ fileId: string }> {\n const info = await fileStorage.save({\n file,\n name: file.name,\n refId: ref.refId,\n refType: ref.refType,\n category: 'ai-generated-image',\n status: AXPFileStorageStatus.Temporary,\n });\n const fileId = info.fileId?.trim();\n if (!fileId) {\n throw new Error('File storage did not return a fileId.');\n }\n await fileStorage.commit(fileId);\n return { fileId };\n}\n\n/**\n * Persists a user-selected chat image; refId groups files uploaded in the same composer batch.\n */\nexport async function persistAiChatAttachmentImage(\n fileStorage: AXPFileStorageService,\n file: File,\n refId: string,\n): Promise<{ fileId: string }> {\n const trimmed = refId.trim();\n if (!trimmed) {\n throw new Error('refId is required for chat attachment persistence.');\n }\n const info = await fileStorage.save({\n file,\n name: file.name,\n refId: trimmed,\n refType: AI_CHAT_ATTACHMENT_REF_TYPE,\n category: AI_CHAT_ATTACHMENT_CATEGORY,\n status: AXPFileStorageStatus.Temporary,\n });\n const fileId = info.fileId?.trim();\n if (!fileId) {\n throw new Error('File storage did not return a fileId.');\n }\n await fileStorage.commit(fileId);\n return { fileId };\n}\n\n/**\n * Saves synthesized speech bytes and commits so the file id can be replayed in chat.\n */\nexport async function persistAiGeneratedSpeech(\n fileStorage: AXPFileStorageService,\n file: File,\n ref: { refId: string; refType: string },\n): Promise<{ fileId: string }> {\n const info = await fileStorage.save({\n file,\n name: file.name,\n refId: ref.refId,\n refType: ref.refType,\n category: 'ai-generated-speech',\n status: AXPFileStorageStatus.Temporary,\n });\n const fileId = info.fileId?.trim();\n if (!fileId) {\n throw new Error('File storage did not return a fileId.');\n }\n await fileStorage.commit(fileId);\n return { fileId };\n}\n\n//#endregion\n","//#region ---- Limits ----\n\n/** Max image file size for AI chat / assist composer attachments (bytes). */\nexport const AXM_AI_CHAT_COMPOSER_MAX_IMAGE_BYTES = 20 * 1024 * 1024;\n\n/** Max images per composer batch (same cap as chat page). */\nexport const AXM_AI_CHAT_COMPOSER_MAX_IMAGES_PER_TURN = 20;\n\n/** Max audio file size (bytes). */\nexport const AXM_AI_CHAT_COMPOSER_MAX_AUDIO_BYTES = 25 * 1024 * 1024;\n\n/** Max audio files per composer batch. */\nexport const AXM_AI_CHAT_COMPOSER_MAX_AUDIO_PER_TURN = 5;\n\n/** Max document file size for PDF / text / office-style attachments (bytes). */\nexport const AXM_AI_CHAT_COMPOSER_MAX_DOCUMENT_BYTES = 35 * 1024 * 1024;\n\n/** Max document files per composer batch. */\nexport const AXM_AI_CHAT_COMPOSER_MAX_DOCUMENTS_PER_TURN = 10;\n\n//#endregion\n\n//#region ---- Patterns ----\n\nconst CHAT_IMAGE_NAME_EXT_PATTERN = /\\.(png|jpe?g|gif|webp|bmp|svg|ico|heic|heif)$/i;\n\nconst CHAT_AUDIO_NAME_EXT_PATTERN = /\\.(mp3|m4a|aac|wav|webm|ogg|opus|flac)$/i;\n\nconst CHAT_DOCUMENT_NAME_EXT_PATTERN =\n /\\.(pdf|txt|md|markdown|csv|tsv|json|jsonl|xml|html?|yaml|yml|log|rtf|docx?|xlsx?|pptx?|odt|ods|odp)$/i;\n\n//#endregion\n\n//#region ---- Public API ----\n\n/**\n * Returns true for normal `image/*` types and for empty/octet-stream when the file name looks like an image.\n */\nexport function axmIsLikelyChatImageFile(file: File): boolean {\n const t = file.type?.trim() ?? '';\n if (t.startsWith('image/')) {\n return true;\n }\n if (t === 'application/octet-stream' || t === '') {\n return CHAT_IMAGE_NAME_EXT_PATTERN.test(file.name);\n }\n return false;\n}\n\n/**\n * Returns true for normal `audio/*` types and for empty/octet-stream when the file name looks like audio.\n */\nexport function axmIsLikelyChatAudioFile(file: File): boolean {\n const t = file.type?.trim() ?? '';\n if (t.startsWith('audio/')) {\n return true;\n }\n if (t === 'application/octet-stream' || t === '') {\n return CHAT_AUDIO_NAME_EXT_PATTERN.test(file.name);\n }\n return false;\n}\n\n/**\n * Returns true for PDF, plain text, common code/markup, CSV, and typical Office/OpenDocument uploads.\n */\nexport function axmIsLikelyChatDocumentFile(file: File): boolean {\n const t = file.type?.trim().toLowerCase() ?? '';\n if (t === 'application/pdf' || t.startsWith('text/')) {\n return true;\n }\n if (\n t === 'application/json' ||\n t === 'application/xml' ||\n t === 'application/javascript' ||\n t === 'application/typescript' ||\n t === 'text/csv' ||\n t === 'application/csv' ||\n t === 'text/tsv' ||\n t === 'application/rtf' ||\n t === 'text/rtf' ||\n t.includes('wordprocessingml') ||\n t.includes('spreadsheetml') ||\n t.includes('presentationml') ||\n t.includes('msword') ||\n t.includes('ms-excel') ||\n t.includes('ms-powerpoint') ||\n t.includes('opendocument')\n ) {\n return true;\n }\n if (t === 'application/octet-stream' || t === '') {\n return CHAT_DOCUMENT_NAME_EXT_PATTERN.test(file.name);\n }\n return false;\n}\n\n/**\n * MIME for storage/API when the browser omits or misreports `file.type` (images and common audio extensions).\n */\nexport function axmMimeTypeForChatAttachment(file: File): string {\n const t = file.type?.trim() ?? '';\n if (t.startsWith('image/')) {\n return t;\n }\n if (t.startsWith('audio/')) {\n return t;\n }\n if (t.startsWith('text/') || t === 'application/pdf' || t === 'application/json' || t === 'application/xml') {\n return t;\n }\n const m = /\\.([^.]+)$/i.exec(file.name);\n const ext = (m?.[1] ?? '').toLowerCase();\n const imageByExt: Record<string, string> = {\n png: 'image/png',\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n gif: 'image/gif',\n webp: 'image/webp',\n bmp: 'image/bmp',\n svg: 'image/svg+xml',\n ico: 'image/x-icon',\n heic: 'image/heic',\n heif: 'image/heif',\n };\n const audioByExt: Record<string, string> = {\n mp3: 'audio/mpeg',\n m4a: 'audio/mp4',\n aac: 'audio/aac',\n wav: 'audio/wav',\n webm: 'audio/webm',\n ogg: 'audio/ogg',\n opus: 'audio/opus',\n flac: 'audio/flac',\n };\n const docByExt: Record<string, string> = {\n pdf: 'application/pdf',\n txt: 'text/plain',\n md: 'text/markdown',\n markdown: 'text/markdown',\n csv: 'text/csv',\n tsv: 'text/tab-separated-values',\n json: 'application/json',\n jsonl: 'application/jsonl',\n xml: 'application/xml',\n html: 'text/html',\n htm: 'text/html',\n yaml: 'text/yaml',\n yml: 'text/yaml',\n log: 'text/plain',\n rtf: 'application/rtf',\n doc: 'application/msword',\n docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n xls: 'application/vnd.ms-excel',\n xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n ppt: 'application/vnd.ms-powerpoint',\n pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n odt: 'application/vnd.oasis.opendocument.text',\n ods: 'application/vnd.oasis.opendocument.spreadsheet',\n odp: 'application/vnd.oasis.opendocument.presentation',\n };\n return imageByExt[ext] ?? audioByExt[ext] ?? docByExt[ext] ?? 'application/octet-stream';\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXTextAreaModule } from '@acorex/components/text-area';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport type {\n AXPAiAssistPromptSubmitPayload,\n AXPAiAssistRunResult,\n AXPAiAssistUserMediaAttachment,\n} from '../../types/ai-assist.types';\nimport { persistAiChatAttachmentImage } from '../../chat/ai-generated-image-persist';\nimport {\n AXM_AI_CHAT_COMPOSER_MAX_AUDIO_BYTES,\n AXM_AI_CHAT_COMPOSER_MAX_AUDIO_PER_TURN,\n AXM_AI_CHAT_COMPOSER_MAX_DOCUMENT_BYTES,\n AXM_AI_CHAT_COMPOSER_MAX_DOCUMENTS_PER_TURN,\n AXM_AI_CHAT_COMPOSER_MAX_IMAGE_BYTES,\n AXM_AI_CHAT_COMPOSER_MAX_IMAGES_PER_TURN,\n axmIsLikelyChatAudioFile,\n axmIsLikelyChatDocumentFile,\n axmIsLikelyChatImageFile,\n axmMimeTypeForChatAttachment,\n} from '../ai-chat-composer-media.helpers';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n ViewEncapsulation,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n//#endregion\n\n//#region ---- Draft types ----\n\ninterface AXMAiAssistDraftImage {\n clientId: string;\n previewUrl: string;\n mimeType: string;\n name?: string;\n fileId?: string;\n}\n\ninterface AXMAiAssistDraftAudio {\n clientId: string;\n mimeType: string;\n name?: string;\n fileId?: string;\n}\n\ninterface AXMAiAssistDraftFile {\n clientId: string;\n mimeType: string;\n name?: string;\n fileId?: string;\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Floating prompt UI for AI assist: gradient chrome, inner composer, and image/audio/document attachments. Target assist/agent comes from optional initial ids on open.\n */\n@Component({\n selector: 'axm-ai-assist-prompt-box',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '(document:keydown.escape)': 'onDocumentEscape()',\n },\n templateUrl: './ai-assist-prompt-box.component.html',\n styleUrl: './ai-assist-prompt-box.component.scss',\n imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXDecoratorModule,\n AXDropdownModule,\n AXDropdownButtonModule,\n AXTextAreaModule,\n AXTranslationModule,\n ],\n})\nexport class AXMAiAssistPromptBoxComponent implements OnInit, OnDestroy {\n //#region ---- Services & Dependencies ----\n\n private readonly toastService = inject(AXToastService);\n private readonly translation = inject(AXTranslationService);\n private readonly fileStorage = inject(AXPFileStorageService);\n private readonly fileService = inject(AXFileService);\n private readonly platformId = inject(PLATFORM_ID);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n readonly title = input.required<string>();\n\n readonly placeholder = input<string>('');\n\n readonly initialPrompt = input<string>('');\n\n readonly contentMaxWidthPx = input<number>(680);\n\n readonly initialAssistId = input<string | undefined>(undefined);\n\n readonly initialDirectAgentId = input<string | undefined>(undefined);\n\n readonly runPrompt = input.required<(payload: AXPAiAssistPromptSubmitPayload) => Promise<AXPAiAssistRunResult>>();\n\n readonly requestClose = input.required<(result: AXPAiAssistRunResult | null) => void>();\n\n //#endregion\n\n //#region ---- State ----\n\n readonly promptDraft = signal('');\n\n readonly busy = signal(false);\n\n readonly isComposerSaving = signal(false);\n\n readonly draftAttachmentGroupId = signal<string | null>(null);\n\n readonly draftComposerImages = signal<AXMAiAssistDraftImage[]>([]);\n\n readonly draftComposerAudios = signal<AXMAiAssistDraftAudio[]>([]);\n\n readonly draftComposerFiles = signal<AXMAiAssistDraftFile[]>([]);\n\n readonly assistTargetKey = signal('');\n\n //#endregion\n\n //#region ---- Computed ----\n\n readonly canSend = computed(() => {\n if (this.busy() || this.isComposerSaving()) {\n return false;\n }\n const textOk = this.promptDraft().trim().length > 0;\n const draftImg = this.draftComposerImages();\n const draftAud = this.draftComposerAudios();\n const draftFiles = this.draftComposerFiles();\n const allImagesSaved = draftImg.length === 0 || draftImg.every((s) => Boolean(s.fileId?.trim()));\n const allAudiosSaved = draftAud.length === 0 || draftAud.every((s) => Boolean(s.fileId?.trim()));\n const allFilesSaved = draftFiles.length === 0 || draftFiles.every((s) => Boolean(s.fileId?.trim()));\n if (!allImagesSaved || !allAudiosSaved || !allFilesSaved) {\n return false;\n }\n if (draftImg.length === 0 && draftAud.length === 0 && draftFiles.length === 0) {\n return textOk;\n }\n return textOk || draftImg.length > 0 || draftAud.length > 0 || draftFiles.length > 0;\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n async ngOnInit(): Promise<void> {\n this.promptDraft.set(this.initialPrompt().trim());\n\n const d = this.initialDirectAgentId()?.trim();\n const a = this.initialAssistId()?.trim();\n if (d) {\n this.assistTargetKey.set(`agent:${d}`);\n } else if (a) {\n this.assistTargetKey.set(`assist:${a}`);\n } else {\n this.assistTargetKey.set('');\n }\n }\n\n ngOnDestroy(): void {\n for (const s of this.draftComposerImages()) {\n URL.revokeObjectURL(s.previewUrl);\n }\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n onPromptDraftChange(value: string | null | undefined): void {\n this.promptDraft.set((value ?? '').toString());\n }\n\n /**\n * Enter sends; Shift+Enter inserts a newline. IME composition Enter is left unchanged.\n */\n onPromptKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Enter' || event.shiftKey || event.isComposing) {\n return;\n }\n event.preventDefault();\n void this.onSend();\n }\n\n onCancel(): void {\n this.requestClose()(null);\n }\n\n onMenuCancel(panel: { close: () => void }): void {\n panel.close();\n if (this.busy()) {\n return;\n }\n this.onCancel();\n }\n\n /**\n * Dismisses the prompt box like Cancel (disabled while a run is in flight, same as footer Cancel).\n */\n onDocumentEscape(): void {\n if (!isPlatformBrowser(this.platformId) || this.busy()) {\n return;\n }\n this.onCancel();\n }\n\n openImagePicker(): void {\n void this.pickComposerImages();\n }\n\n openAudioPicker(): void {\n void this.pickComposerAudios();\n }\n\n openDocumentPicker(): void {\n void this.pickComposerDocuments();\n }\n\n async onSend(): Promise<void> {\n if (!this.canSend()) {\n return;\n }\n const text = this.promptDraft().trim();\n const draftImg = this.draftComposerImages();\n const draftAud = this.draftComposerAudios();\n const draftFiles = this.draftComposerFiles();\n for (const s of draftImg) {\n if (!s.fileId?.trim()) {\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const msg = await this.translation.translateAsync('@ai-management:chat.images-still-saving');\n await this.toastService.show({ color: 'warning', title: errTitle, content: msg });\n return;\n }\n }\n for (const s of draftAud) {\n if (!s.fileId?.trim()) {\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const msg = await this.translation.translateAsync('@ai-management:chat.audio-still-saving');\n await this.toastService.show({ color: 'warning', title: errTitle, content: msg });\n return;\n }\n }\n for (const s of draftFiles) {\n if (!s.fileId?.trim()) {\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const msg = await this.translation.translateAsync('@ai-management:chat.documents-still-saving');\n await this.toastService.show({ color: 'warning', title: errTitle, content: msg });\n return;\n }\n }\n\n const key = this.assistTargetKey().trim();\n let assistId: string | undefined;\n let directAgentId: string | undefined;\n if (key.startsWith('assist:')) {\n assistId = key.slice('assist:'.length).trim() || undefined;\n } else if (key.startsWith('agent:')) {\n directAgentId = key.slice('agent:'.length).trim() || undefined;\n }\n\n const userMediaAttachments: AXPAiAssistUserMediaAttachment[] = [\n ...draftImg.map((s) => ({\n kind: 'image' as const,\n fileId: s.fileId!.trim(),\n mimeType: s.mimeType.trim(),\n ...(s.name?.trim() ? { name: s.name.trim() } : {}),\n })),\n ...draftAud.map((s) => ({\n kind: 'audio' as const,\n fileId: s.fileId!.trim(),\n mimeType: s.mimeType.trim(),\n ...(s.name?.trim() ? { name: s.name.trim() } : {}),\n })),\n ...draftFiles.map((s) => ({\n kind: 'file' as const,\n fileId: s.fileId!.trim(),\n mimeType: s.mimeType.trim(),\n ...(s.name?.trim() ? { name: s.name.trim() } : {}),\n })),\n ];\n\n const payload: AXPAiAssistPromptSubmitPayload = {\n prompt: text,\n assistId,\n directAgentId,\n userMediaAttachments,\n };\n\n this.busy.set(true);\n try {\n const result = await this.runPrompt()(payload);\n this.requestClose()(result);\n } catch (err) {\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const fallback = await this.translation.translateAsync('@ai-management:assist-popup.run-error');\n const content = err instanceof Error ? err.message : fallback;\n await this.toastService.show({ color: 'danger', title: errTitle, content });\n } finally {\n this.busy.set(false);\n }\n }\n\n removeDraftImage(clientId: string): void {\n const id = clientId.trim();\n if (!id) {\n return;\n }\n this.draftComposerImages.update((prev) => {\n const slot = prev.find((s) => s.clientId === id);\n if (slot) {\n URL.revokeObjectURL(slot.previewUrl);\n }\n const next = prev.filter((s) => s.clientId !== id);\n if (\n next.length === 0 &&\n this.draftComposerAudios().length === 0 &&\n this.draftComposerFiles().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n return next;\n });\n }\n\n removeDraftAudio(clientId: string): void {\n const id = clientId.trim();\n if (!id) {\n return;\n }\n this.draftComposerAudios.update((prev) => {\n const next = prev.filter((s) => s.clientId !== id);\n if (\n next.length === 0 &&\n this.draftComposerImages().length === 0 &&\n this.draftComposerFiles().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n return next;\n });\n }\n\n removeDraftFile(clientId: string): void {\n const id = clientId.trim();\n if (!id) {\n return;\n }\n this.draftComposerFiles.update((prev) => {\n const next = prev.filter((s) => s.clientId !== id);\n if (\n next.length === 0 &&\n this.draftComposerImages().length === 0 &&\n this.draftComposerAudios().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n return next;\n });\n }\n\n //#endregion\n\n //#region ---- Composer media (mirrors chat page) ----\n\n private async pickComposerImages(): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n if (this.busy() || this.isComposerSaving()) {\n return;\n }\n try {\n const files = await this.fileService.choose({\n multiple: true,\n accept: 'image/*',\n });\n if (files.length === 0) {\n return;\n }\n await this.processComposerImageFiles(files);\n } catch {\n /* user cancelled */\n }\n }\n\n private async pickComposerAudios(): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n if (this.busy() || this.isComposerSaving()) {\n return;\n }\n try {\n const files = await this.fileService.choose({\n multiple: true,\n accept: 'audio/*',\n });\n if (files.length === 0) {\n return;\n }\n await this.processComposerAudioFiles(files);\n } catch {\n /* user cancelled */\n }\n }\n\n private async pickComposerDocuments(): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n if (this.busy() || this.isComposerSaving()) {\n return;\n }\n try {\n const files = await this.fileService.choose({\n multiple: true,\n accept:\n '.pdf,.txt,.md,.csv,.tsv,.json,.jsonl,.xml,.html,.htm,.yaml,.yml,.log,.rtf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.odt,.ods,.odp,application/pdf,text/*,application/json',\n });\n if (files.length === 0) {\n return;\n }\n await this.processComposerDocumentFiles(files);\n } catch {\n /* user cancelled */\n }\n }\n\n private async processComposerImageFiles(files: File[]): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n let groupId = this.draftAttachmentGroupId();\n if (!groupId?.trim()) {\n groupId = globalThis.crypto.randomUUID();\n this.draftAttachmentGroupId.set(groupId);\n }\n const gid = groupId.trim();\n\n const existing = this.draftComposerImages().length;\n if (existing + files.length > AXM_AI_CHAT_COMPOSER_MAX_IMAGES_PER_TURN) {\n await this.showUploadWarning('@ai-management:chat.upload-too-many');\n return;\n }\n\n const newSlots: AXMAiAssistDraftImage[] = [];\n const filesForPersist: File[] = [];\n\n for (const file of files) {\n if (!axmIsLikelyChatImageFile(file)) {\n await this.showUploadWarning('@ai-management:chat.upload-invalid-type');\n return;\n }\n if (file.size > AXM_AI_CHAT_COMPOSER_MAX_IMAGE_BYTES) {\n await this.showUploadWarning('@ai-management:chat.upload-too-large');\n return;\n }\n const mimeType = axmMimeTypeForChatAttachment(file);\n const fileForStorage =\n file.type.trim().startsWith('image/') && file.type.trim().length > 0\n ? file\n : new File([file], file.name, { type: mimeType });\n newSlots.push({\n clientId: globalThis.crypto.randomUUID(),\n previewUrl: URL.createObjectURL(file),\n mimeType,\n name: file.name,\n });\n filesForPersist.push(fileForStorage);\n }\n\n this.draftComposerImages.update((prev) => [...prev, ...newSlots]);\n\n this.isComposerSaving.set(true);\n try {\n for (let i = 0; i < filesForPersist.length; i++) {\n const file = filesForPersist[i];\n const clientId = newSlots[i].clientId;\n try {\n const { fileId } = await persistAiChatAttachmentImage(this.fileStorage, file, gid);\n this.draftComposerImages.update((prev) =>\n prev.map((s) => (s.clientId === clientId ? { ...s, fileId } : s)),\n );\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n this.draftComposerImages.update((prev) => {\n const slot = prev.find((s) => s.clientId === clientId);\n if (slot) {\n URL.revokeObjectURL(slot.previewUrl);\n }\n return prev.filter((s) => s.clientId !== clientId);\n });\n if (\n this.draftComposerImages().length === 0 &&\n this.draftComposerAudios().length === 0 &&\n this.draftComposerFiles().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const uploadFailed = await this.translation.translateAsync('@ai-management:chat.upload-error');\n await this.toastService.show({\n color: 'danger',\n title: errTitle,\n content: `${uploadFailed} ${msg}`,\n });\n return;\n }\n }\n } finally {\n this.isComposerSaving.set(false);\n }\n }\n\n private async processComposerAudioFiles(files: File[]): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n let groupId = this.draftAttachmentGroupId();\n if (!groupId?.trim()) {\n groupId = globalThis.crypto.randomUUID();\n this.draftAttachmentGroupId.set(groupId);\n }\n const gid = groupId.trim();\n\n const existing = this.draftComposerAudios().length;\n if (existing + files.length > AXM_AI_CHAT_COMPOSER_MAX_AUDIO_PER_TURN) {\n await this.showUploadWarning('@ai-management:chat.upload-audio-too-many');\n return;\n }\n\n const newSlots: AXMAiAssistDraftAudio[] = [];\n const filesForPersist: File[] = [];\n\n for (const file of files) {\n if (!axmIsLikelyChatAudioFile(file)) {\n await this.showUploadWarning('@ai-management:chat.upload-audio-invalid-type');\n return;\n }\n if (file.size > AXM_AI_CHAT_COMPOSER_MAX_AUDIO_BYTES) {\n await this.showUploadWarning('@ai-management:chat.upload-audio-too-large');\n return;\n }\n const mimeType = axmMimeTypeForChatAttachment(file);\n const fileForStorage =\n file.type.trim().startsWith('audio/') && file.type.trim().length > 0\n ? file\n : new File([file], file.name, { type: mimeType });\n newSlots.push({\n clientId: globalThis.crypto.randomUUID(),\n mimeType,\n name: file.name,\n });\n filesForPersist.push(fileForStorage);\n }\n\n this.draftComposerAudios.update((prev) => [...prev, ...newSlots]);\n\n this.isComposerSaving.set(true);\n try {\n for (let i = 0; i < filesForPersist.length; i++) {\n const file = filesForPersist[i];\n const clientId = newSlots[i].clientId;\n try {\n const { fileId } = await persistAiChatAttachmentImage(this.fileStorage, file, gid);\n this.draftComposerAudios.update((prev) =>\n prev.map((s) => (s.clientId === clientId ? { ...s, fileId } : s)),\n );\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n this.draftComposerAudios.update((prev) => prev.filter((s) => s.clientId !== clientId));\n if (\n this.draftComposerAudios().length === 0 &&\n this.draftComposerImages().length === 0 &&\n this.draftComposerFiles().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const uploadFailed = await this.translation.translateAsync('@ai-management:chat.upload-audio-error');\n await this.toastService.show({\n color: 'danger',\n title: errTitle,\n content: `${uploadFailed} ${msg}`,\n });\n return;\n }\n }\n } finally {\n this.isComposerSaving.set(false);\n }\n }\n\n private async processComposerDocumentFiles(files: File[]): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n let groupId = this.draftAttachmentGroupId();\n if (!groupId?.trim()) {\n groupId = globalThis.crypto.randomUUID();\n this.draftAttachmentGroupId.set(groupId);\n }\n const gid = groupId.trim();\n\n const existing = this.draftComposerFiles().length;\n if (existing + files.length > AXM_AI_CHAT_COMPOSER_MAX_DOCUMENTS_PER_TURN) {\n await this.showUploadWarning('@ai-management:chat.upload-documents-too-many');\n return;\n }\n\n const newSlots: AXMAiAssistDraftFile[] = [];\n const filesForPersist: File[] = [];\n\n for (const file of files) {\n if (!axmIsLikelyChatDocumentFile(file)) {\n await this.showUploadWarning('@ai-management:chat.upload-documents-invalid-type');\n return;\n }\n if (file.size > AXM_AI_CHAT_COMPOSER_MAX_DOCUMENT_BYTES) {\n await this.showUploadWarning('@ai-management:chat.upload-documents-too-large');\n return;\n }\n const mimeType = axmMimeTypeForChatAttachment(file);\n const fileForStorage =\n file.type.trim().length > 0 && file.type.trim() !== 'application/octet-stream'\n ? file\n : new File([file], file.name, { type: mimeType });\n newSlots.push({\n clientId: globalThis.crypto.randomUUID(),\n mimeType,\n name: file.name,\n });\n filesForPersist.push(fileForStorage);\n }\n\n this.draftComposerFiles.update((prev) => [...prev, ...newSlots]);\n\n this.isComposerSaving.set(true);\n try {\n for (let i = 0; i < filesForPersist.length; i++) {\n const file = filesForPersist[i];\n const clientId = newSlots[i].clientId;\n try {\n const { fileId } = await persistAiChatAttachmentImage(this.fileStorage, file, gid);\n this.draftComposerFiles.update((prev) =>\n prev.map((s) => (s.clientId === clientId ? { ...s, fileId } : s)),\n );\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n this.draftComposerFiles.update((prev) => prev.filter((s) => s.clientId !== clientId));\n if (\n this.draftComposerFiles().length === 0 &&\n this.draftComposerImages().length === 0 &&\n this.draftComposerAudios().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const uploadFailed = await this.translation.translateAsync('@ai-management:chat.upload-documents-error');\n await this.toastService.show({\n color: 'danger',\n title: errTitle,\n content: `${uploadFailed} ${msg}`,\n });\n return;\n }\n }\n } finally {\n this.isComposerSaving.set(false);\n }\n }\n\n private async showUploadWarning(translationKey: string): Promise<void> {\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const content = await this.translation.translateAsync(translationKey);\n await this.toastService.show({ color: 'warning', title: errTitle, content });\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axm-ai-assist-prompt-box ax-flex ax-flex-col ax-gap-2.5 ax-min-h-0 ax-w-full\"\n [style.max-width.px]=\"contentMaxWidthPx()\">\n <div\n class=\"axm-ai-assist-prompt-box__eyebrow ax-flex ax-items-center ax-justify-between ax-gap-3 ax-shrink-0 ax-px-0.5\">\n <div class=\"axm-ai-assist-prompt-box__brand ax-inline-flex ax-min-w-0 ax-items-center ax-gap-2\">\n <span class=\"axm-ai-assist-prompt-box__brand-mark\" aria-hidden=\"true\">\n <i class=\"fa-light fa-sparkles\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"axm-ai-assist-prompt-box__brand-title ax-truncate\">{{ title() }}</span>\n </div>\n <ax-button class=\"ax-shrink-0 ax-xs\" look=\"blank\" color=\"default\" type=\"button\" [iconOnly]=\"true\"\n [disabled]=\"busy()\" [attr.aria-label]=\"('@general:actions.close.title' | translate | async) ?? ''\"\n (onClick)=\"onCancel()\">\n <ax-prefix>\n <i class=\"fa-light fa-xmark\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n\n <div class=\"axm-ai-assist-prompt-box__sheet ax-flex ax-min-h-0 ax-flex-col ax-gap-2\">\n @if (\n draftComposerImages().length > 0 ||\n draftComposerAudios().length > 0 ||\n draftComposerFiles().length > 0 ||\n isComposerSaving()\n ) {\n <div\n class=\"ax-shrink-0 ax-rounded-xl ax-border ax-border-default/45 dark:ax-border-darker ax-bg-lightest/90 ax-p-1.5 ax-flex ax-flex-col ax-gap-1.5\"\n [attr.aria-label]=\"('@ai-management:chat.composer-attachments-region' | translate | async) ?? ''\">\n <div class=\"ax-flex ax-flex-wrap ax-items-center ax-justify-between ax-gap-1.5 ax-text-[0.65rem] ax-text-muted\">\n <span>\n @if (isComposerSaving()) {\n {{ '@ai-management:chat.composer-uploading' | translate | async }}\n } @else {\n @if (draftComposerImages().length > 0) {\n <span>{{ draftComposerImages().length }}\n {{ '@ai-management:chat.composer-images-count' | translate | async }}</span>\n }\n @if (draftComposerImages().length > 0 && draftComposerAudios().length > 0) {\n <span class=\"ax-mx-1\">·</span>\n }\n @if (draftComposerAudios().length > 0) {\n <span>{{ draftComposerAudios().length }}\n {{ '@ai-management:chat.composer-audio-count' | translate | async }}</span>\n }\n @if (draftComposerFiles().length > 0) {\n @if (draftComposerImages().length > 0 || draftComposerAudios().length > 0) {\n <span class=\"ax-mx-1\">·</span>\n }\n <span>{{ draftComposerFiles().length }}\n {{ '@ai-management:chat.composer-documents-count' | translate | async }}</span>\n }\n }\n </span>\n </div>\n @if (draftComposerImages().length > 0) {\n <div class=\"ax-flex ax-flex-wrap ax-gap-1.5\">\n @for (slot of draftComposerImages(); track slot.clientId) {\n <div\n class=\"ax-relative ax-h-12 ax-w-12 ax-shrink-0 ax-overflow-hidden ax-rounded-md ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest\">\n <img [src]=\"slot.previewUrl\" [alt]=\"slot.name ?? ''\" class=\"ax-h-full ax-w-full ax-object-cover\" />\n @if (!slot.fileId) {\n <span\n class=\"ax-absolute ax-inset-0 ax-flex ax-items-center ax-justify-center ax-bg-default/40 ax-text-[0.6rem] ax-font-medium ax-text-on-lightest\">…</span>\n }\n <button type=\"button\"\n class=\"ax-absolute ax-end-0.5 ax-top-0.5 ax-flex ax-h-4 ax-w-4 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.65rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-image' | translate | async) ?? ''\"\n (click)=\"removeDraftImage(slot.clientId)\">\n ×\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerAudios().length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n @for (slot of draftComposerAudios(); track slot.clientId) {\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-1.5 ax-rounded ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest ax-px-1.5 ax-py-1 ax-text-[0.65rem] ax-min-w-0\">\n <span class=\"ax-truncate ax-text-on-lightest\" [attr.title]=\"slot.name ?? ''\">\n {{ '@ai-management:chat.attached-audio-label' | translate | async }}:\n {{ slot.name?.trim() || ('@ai-management:chat.audio-untitled' | translate | async) }}\n </span>\n @if (!slot.fileId) {\n <span class=\"ax-text-muted ax-shrink-0\">…</span>\n }\n <button type=\"button\"\n class=\"ax-shrink-0 ax-flex ax-h-5 ax-w-5 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.75rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-audio' | translate | async) ?? ''\"\n (click)=\"removeDraftAudio(slot.clientId)\">\n ×\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerFiles().length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n @for (slot of draftComposerFiles(); track slot.clientId) {\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-1.5 ax-rounded ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest ax-px-1.5 ax-py-1 ax-text-[0.65rem] ax-min-w-0\">\n <span class=\"ax-truncate ax-text-on-lightest\" [attr.title]=\"slot.name ?? ''\">\n {{ '@ai-management:chat.attached-document-label' | translate | async }}:\n {{ slot.name?.trim() || ('@ai-management:chat.document-untitled' | translate | async) }}\n </span>\n @if (!slot.fileId) {\n <span class=\"ax-text-muted ax-shrink-0\">…</span>\n }\n <button type=\"button\"\n class=\"ax-shrink-0 ax-flex ax-h-5 ax-w-5 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.75rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-document' | translate | async) ?? ''\"\n (click)=\"removeDraftFile(slot.clientId)\">\n ×\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <div class=\"axm-ai-assist-prompt-box__body ax-flex ax-min-h-0 ax-flex-col\">\n <ax-text-area class=\"axm-ai-assist-prompt-box__prompt-input ax-w-full ax-min-h-0\" [rows]=\"3\"\n [disabled]=\"busy()\" [ngModel]=\"promptDraft()\" (ngModelChange)=\"onPromptDraftChange($event)\"\n (keydown)=\"onPromptKeydown($event)\" [placeholder]=\"\n placeholder().trim().length > 0\n ? placeholder()\n : ((('@ai-management:assist-popup.placeholder' | translate | async) ?? ''))\n \"></ax-text-area>\n </div>\n\n <div\n class=\"axm-ai-assist-prompt-box__footer ax-flex ax-shrink-0 ax-items-center ax-justify-between ax-gap-2\">\n <ax-button class=\"axm-ai-assist-prompt-box__menu-trigger\" look=\"solid\" color=\"primary\" type=\"button\"\n [iconOnly]=\"true\" [disabled]=\"busy()\"\n [attr.aria-label]=\"('@ai-management:assist-popup.composer-menu-aria' | translate | async) ?? ''\">\n <ax-prefix>\n <i class=\"fa-light fa-plus ax-text-sm\" aria-hidden=\"true\"></i>\n </ax-prefix>\n <ax-dropdown-panel #composerMenu>\n <ax-button-item-list class=\"ax-min-w-56\">\n <ax-button-item [text]=\"('@ai-management:chat.upload-images' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-images-aria' | translate | async) ?? ''\"\n (onClick)=\"openImagePicker(); composerMenu.close()\">\n <ax-prefix>\n <i class=\"fa-light fa-image ax-size-4 ax-text-center\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item [text]=\"('@ai-management:chat.upload-audio' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-audio-aria' | translate | async) ?? ''\"\n (onClick)=\"openAudioPicker(); composerMenu.close()\">\n <ax-prefix>\n <i class=\"fa-light fa-microphone ax-size-4 ax-text-center\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item [text]=\"('@ai-management:chat.upload-documents' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-documents-aria' | translate | async) ?? ''\"\n (onClick)=\"openDocumentPicker(); composerMenu.close()\">\n <ax-prefix>\n <i class=\"fa-light fa-paperclip ax-size-4 ax-text-center\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <ax-button class=\"axm-ai-assist-prompt-box__send axm-ai-assist-prompt-box__send-gradient\"\n color=\"primary\" type=\"button\" [disabled]=\"busy() || !canSend()\" [text]=\"\n busy()\n ? (('@ai-management:assist-popup.generating' | translate | async) ?? '')\n : (('@ai-management:assist-popup.generate' | translate | async) ?? '')\n \" (onClick)=\"onSend()\"></ax-button>\n </div>\n </div>\n</div>","//#region ---- Imports ----\n\nimport type {\n AXPAiAssistPromptSubmitPayload,\n AXPAiAssistRunResult,\n AXPAiAssistShowOptions,\n} from '../types/ai-assist.types';\nimport { AXMAiAssistPromptBoxComponent } from './ai-assist-prompt-box/ai-assist-prompt-box.component';\nimport { AXOverlayService, type AXOverlayRef } from '@acorex/cdk/overlay';\nimport { Injectable, inject } from '@angular/core';\n\n//#endregion\n\n\n\n//#region ---- Service ----\n\n/**\n * Opens the AI assist prompt box in a bottom overlay using {@link AXOverlayService} (`centered: false`, panel CSS).\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMAiAssistPromptBoxService {\n //#region ---- Services & Dependencies ----\n\n private readonly overlayService = inject(AXOverlayService);\n\n //#endregion\n\n //#region ---- Private Properties ----\n\n private overlayRef: AXOverlayRef<AXMAiAssistPromptBoxComponent> | null = null;\n\n private pendingResolve: ((value: AXPAiAssistRunResult | null) => void) | null = null;\n\n private settled = false;\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Presents the assist prompt box and resolves when the user submits, cancels, or dismisses the overlay.\n */\n open(\n options: AXPAiAssistShowOptions,\n executeRun: (payload: AXPAiAssistPromptSubmitPayload) => Promise<AXPAiAssistRunResult>,\n ): Promise<AXPAiAssistRunResult | null> {\n if (this.pendingResolve) {\n const superseded = this.pendingResolve;\n this.pendingResolve = null;\n superseded(null);\n }\n this.disposeOverlayOnly();\n\n return new Promise<AXPAiAssistRunResult | null>((resolve) => {\n this.pendingResolve = resolve;\n this.settled = false;\n\n const requestClose = (result: AXPAiAssistRunResult | null): void => {\n this.settle(result);\n this.overlayRef?.dispose();\n };\n\n void this.overlayService\n .create(AXMAiAssistPromptBoxComponent, {\n centered: false,\n width: 'auto',\n actionSheetStyle: false,\n panelClass: ['axm-ai-assist-prompt-box-shell'],\n backdrop: {\n enabled: false,\n background: false,\n closeOnClick: false,\n },\n closeOnEscape: true,\n closeOnOutsideClick: true,\n inputs: {\n title: options.title,\n placeholder: options.placeholder ?? '',\n initialPrompt: options.initialPrompt ?? '',\n initialAssistId: options.assistId,\n initialDirectAgentId: options.directAgentId,\n runPrompt: executeRun,\n requestClose,\n },\n onDispose: () => {\n this.overlayRef = null;\n if (!this.settled && this.pendingResolve) {\n this.settle(null);\n }\n },\n })\n .then((ref) => {\n this.overlayRef = ref;\n })\n .catch(() => {\n this.settle(null);\n });\n });\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private settle(result: AXPAiAssistRunResult | null): void {\n if (this.settled) {\n return;\n }\n const done = this.pendingResolve;\n if (!done) {\n return;\n }\n this.settled = true;\n this.pendingResolve = null;\n done(result);\n }\n\n private disposeOverlayOnly(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Transcript ----\n\nimport type { AXPAiChatMessage } from '../../engine/ai-engine.types';\nimport { axpAiChatMessageGetText } from '../../engine/ai-engine.types';\n\n/**\n * Text segments from the last assistant message (`type: 'text'` only).\n * Omits `think` and `node` segments so JSON parsing is not polluted by widget envelopes or reasoning blocks stored separately.\n */\nexport function extractLastAssistantTextSegments(messages: AXPAiChatMessage[]): string[] {\n for (let i = messages.length - 1; i >= 0; i--) {\n const m = messages[i];\n if (m.role !== 'assistant') {\n continue;\n }\n const parts: string[] = [];\n for (const r of m.responses) {\n if (r.type === 'text') {\n parts.push(r.content);\n }\n }\n return parts;\n }\n return [];\n}\n\n/**\n * Combined text for structured JSON extraction (text segments only).\n */\nexport function extractLastAssistantStructuredParts(messages: AXPAiChatMessage[]): {\n combined: string;\n segments: string[];\n} {\n const segments = extractLastAssistantTextSegments(messages);\n const combined = segments.join('\\n\\n').trim();\n return { combined, segments };\n}\n\n/**\n * Concatenated plain text from the last assistant message in the transcript (includes `node` payloads like {@link axpAiChatMessageGetText}).\n */\nexport function extractLastAssistantPlainText(messages: AXPAiChatMessage[]): string {\n for (let i = messages.length - 1; i >= 0; i--) {\n const m = messages[i];\n if (m.role === 'assistant') {\n return axpAiChatMessageGetText(m).trim();\n }\n }\n return '';\n}\n\n//#endregion\n","//#region ---- Retry prompt ----\n\n/**\n * User follow-up appended to the transcript when structured JSON parse/validation fails.\n *\n * @param validationDetail - Parse or schema validation error text.\n * @param schemaSummary - Optional expected shape (e.g. TypeScript-style) to improve retry quality.\n * @param failurePhase - Parse failures get stronger anti-truncation wording; validator failures focus on schema/rules.\n */\nexport function buildStructuredOutputRetryUserText(\n validationDetail: string,\n schemaSummary?: string,\n failurePhase?: 'parse' | 'validator',\n): string {\n const detail = validationDetail.trim() || 'Unknown validation error.';\n const lines: string[] = [\n 'The previous response could not be parsed or validated:',\n detail,\n '',\n ];\n if (failurePhase === 'parse') {\n lines.push(\n 'Likely causes: incomplete/truncated JSON, extra prose around the value, or unclosed strings/brackets.',\n 'Reply with ONE complete JSON value only — fully closed strings, braces, and brackets. Do not stop until the JSON is valid.',\n '',\n );\n } else if (failurePhase === 'validator') {\n lines.push(\n 'The JSON was parsed but did not match the required rules or shape. Fix the structure and values; keep the reply as a single JSON value only.',\n '',\n );\n }\n const shape = schemaSummary?.trim();\n if (shape && shape.length > 0) {\n lines.push('Expected JSON shape (summary):', shape, '');\n }\n lines.push(\n 'Return ONLY valid JSON matching the requested structure.',\n 'Do not include markdown fences or explanations.',\n );\n return lines.join('\\n');\n}\n\n//#endregion\n","//#region ---- Parse structured assistant text ----\n\n/**\n * Parses assistant plain text as JSON, supporting optional ```json fences.\n */\nexport function tryParseStructuredAssistantText(text: string): unknown | undefined {\n const t = text.trim();\n if (!t) {\n return undefined;\n }\n try {\n return JSON.parse(t) as unknown;\n } catch {\n const fence = /^```(?:json)?\\s*([\\s\\S]*?)```$/im.exec(t);\n if (fence?.[1]) {\n try {\n return JSON.parse(fence[1].trim()) as unknown;\n } catch {\n return undefined;\n }\n }\n return undefined;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { tryParseStructuredAssistantText } from './parse-structured-assistant-text';\n\n//#endregion\n\n//#region ---- Balanced JSON extraction ----\n\nfunction tryParseBalancedJsonObjectAt(s: string, start: number): { value: unknown; end: number } | null {\n if (s[start] !== '{') {\n return null;\n }\n let depth = 0;\n let inString = false;\n let escape = false;\n for (let i = start; i < s.length; i++) {\n const c = s[i];\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (c === '\\\\') {\n escape = true;\n continue;\n }\n if (c === '\"') {\n inString = false;\n }\n continue;\n }\n if (c === '\"') {\n inString = true;\n continue;\n }\n if (c === '{') {\n depth++;\n } else if (c === '}') {\n depth--;\n if (depth === 0) {\n const slice = s.slice(start, i + 1);\n try {\n return { value: JSON.parse(slice) as unknown, end: i + 1 };\n } catch {\n return null;\n }\n }\n }\n }\n return null;\n}\n\nfunction tryParseBalancedJsonArrayAt(s: string, start: number): { value: unknown; end: number } | null {\n if (s[start] !== '[') {\n return null;\n }\n let depth = 0;\n let inString = false;\n let escape = false;\n for (let i = start; i < s.length; i++) {\n const c = s[i];\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (c === '\\\\') {\n escape = true;\n continue;\n }\n if (c === '\"') {\n inString = false;\n }\n continue;\n }\n if (c === '\"') {\n inString = true;\n continue;\n }\n if (c === '[') {\n depth++;\n } else if (c === ']') {\n depth--;\n if (depth === 0) {\n const slice = s.slice(start, i + 1);\n try {\n return { value: JSON.parse(slice) as unknown, end: i + 1 };\n } catch {\n return null;\n }\n }\n }\n }\n return null;\n}\n\n/**\n * Finds first top-level JSON object or array and returns balanced slice text.\n */\nfunction extractFirstBalancedJsonSlice(s: string): string | undefined {\n const iObj = s.indexOf('{');\n const iArr = s.indexOf('[');\n let start = -1;\n let kind: 'obj' | 'arr' | null = null;\n if (iObj >= 0 && iArr >= 0) {\n if (iObj <= iArr) {\n start = iObj;\n kind = 'obj';\n } else {\n start = iArr;\n kind = 'arr';\n }\n } else if (iObj >= 0) {\n start = iObj;\n kind = 'obj';\n } else if (iArr >= 0) {\n start = iArr;\n kind = 'arr';\n }\n if (start < 0 || !kind) {\n return undefined;\n }\n const parsed =\n kind === 'obj' ? tryParseBalancedJsonObjectAt(s, start) : tryParseBalancedJsonArrayAt(s, start);\n if (!parsed) {\n return undefined;\n }\n return s.slice(start, parsed.end);\n}\n\n//#endregion\n\n//#region ---- Lightweight repair ----\n\n/**\n * Removes assistant reasoning tags when they appear inside the text channel (they break JSON extraction).\n */\nexport function stripAssistantThinkingXml(raw: string): string {\n return raw\n .replace(/<(?:redacted_thinking|think)\\b[^>]*>[\\s\\S]*?<\\/(?:redacted_thinking|think)>/gi, '')\n .replace(/<\\/?(?:redacted_thinking|think)>/gi, '')\n .trim();\n}\n\nfunction stripOuterMarkdownFence(s: string): string {\n const t = s.trim();\n const fence = /^```(?:json)?\\s*([\\s\\S]*?)```$/im.exec(t);\n if (fence?.[1]) {\n return fence[1].trim();\n }\n return t;\n}\n\n/** Removes trailing commas before `}` or `]` outside of strings (best-effort for LLM JSON). */\nfunction removeTrailingCommasBeforeBrackets(jsonLike: string): string {\n return jsonLike.replace(/,(\\s*[}\\]])/g, '$1');\n}\n\nfunction tryParseJsonLenient(slice: string): unknown | undefined {\n const t = slice.trim();\n if (!t) {\n return undefined;\n }\n try {\n return JSON.parse(t) as unknown;\n } catch {\n try {\n return JSON.parse(removeTrailingCommasBeforeBrackets(t)) as unknown;\n } catch {\n return undefined;\n }\n }\n}\n\n/**\n * Best-effort parse when the model stopped mid-JSON (truncated completion): closes `{` `[` using a delimiter stack\n * with string awareness. Unsafe inside unclosed strings; last resort after normal repair.\n */\nfunction tryRepairTruncatedJsonWithDelimiterStack(raw: string): unknown | undefined {\n const s = raw.trim();\n if (!s.length) {\n return undefined;\n }\n const stack: ('{' | '[')[] = [];\n let inStr = false;\n let esc = false;\n for (let i = 0; i < s.length; i++) {\n const c = s[i];\n if (inStr) {\n if (esc) {\n esc = false;\n continue;\n }\n if (c === '\\\\') {\n esc = true;\n continue;\n }\n if (c === '\"') {\n inStr = false;\n }\n continue;\n }\n if (c === '\"') {\n inStr = true;\n continue;\n }\n if (c === '{') {\n stack.push('{');\n } else if (c === '[') {\n stack.push('[');\n } else if (c === '}') {\n if (stack.length > 0 && stack[stack.length - 1] === '{') {\n stack.pop();\n }\n } else if (c === ']') {\n if (stack.length > 0 && stack[stack.length - 1] === '[') {\n stack.pop();\n }\n }\n }\n let suffix = '';\n if (inStr) {\n suffix = '\"';\n }\n for (let k = stack.length - 1; k >= 0; k--) {\n suffix += stack[k] === '{' ? '}' : ']';\n }\n if (!suffix.length) {\n return undefined;\n }\n try {\n return JSON.parse(s + suffix) as unknown;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Parses assistant text after cheap local repairs (fences, trailing commas, first JSON value slice).\n * Does not call the model.\n */\nexport function parseStructuredAssistantWithLocalRepair(raw: string): unknown | undefined {\n const cleaned = stripAssistantThinkingXml(raw);\n const direct = tryParseStructuredAssistantText(cleaned);\n if (direct !== undefined) {\n return direct;\n }\n\n const stripped = stripOuterMarkdownFence(cleaned);\n let v = tryParseJsonLenient(stripped);\n if (v !== undefined) {\n return v;\n }\n\n const slice = extractFirstBalancedJsonSlice(cleaned) ?? extractFirstBalancedJsonSlice(stripped);\n if (slice !== undefined) {\n v = tryParseJsonLenient(slice);\n if (v !== undefined) {\n return v;\n }\n v = tryRepairTruncatedJsonWithDelimiterStack(slice);\n if (v !== undefined) {\n return v;\n }\n }\n\n v = tryRepairTruncatedJsonWithDelimiterStack(cleaned) ?? tryRepairTruncatedJsonWithDelimiterStack(stripped);\n if (v !== undefined) {\n return v;\n }\n\n return undefined;\n}\n\n/**\n * Tries combined assistant text, then each text segment from last to first (models often put JSON only in the last paragraph).\n */\nexport function parseStructuredAssistantWithSegmentFallback(combined: string, segments: readonly string[]): unknown | undefined {\n let v = parseStructuredAssistantWithLocalRepair(combined);\n if (v !== undefined) {\n return v;\n }\n const seen = new Set<string>();\n const mark = stripAssistantThinkingXml(combined).trim();\n if (mark.length > 0) {\n seen.add(mark);\n }\n for (let i = segments.length - 1; i >= 0; i--) {\n const seg = stripAssistantThinkingXml(segments[i] ?? '').trim();\n if (!seg.length || seen.has(seg)) {\n continue;\n }\n seen.add(seg);\n v = parseStructuredAssistantWithLocalRepair(seg);\n if (v !== undefined) {\n return v;\n }\n }\n return undefined;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPAiStructuredValidator } from '../../types/ai-assist.types';\n\nimport { parseStructuredAssistantWithSegmentFallback } from './repair-structured-assistant-parse';\n\n//#endregion\n\n//#region ---- Validation ----\n\nexport type StructuredAssistantValidation =\n | { ok: true; value: unknown }\n | { ok: false; errorMessage: string; failurePhase: 'parse' | 'validator' };\n\nfunction hasAnyStructuredContent(combined: string, segments: readonly string[] | undefined): boolean {\n if (combined.trim().length > 0) {\n return true;\n }\n if (!segments?.length) {\n return false;\n }\n return segments.some((s) => (s ?? '').trim().length > 0);\n}\n\n/**\n * Parses JSON from assistant text (including lightweight local repair), then optionally runs a custom validator.\n *\n * @param textSegmentsFallback - When provided, each segment is tried after combined text (last segment first); helps when prose and JSON sit in separate assistant text blocks.\n */\nexport async function validateStructuredAssistantResponse(\n assistantPlainText: string,\n structuredValidator: AXPAiStructuredValidator | undefined,\n textSegmentsFallback?: readonly string[],\n): Promise<StructuredAssistantValidation> {\n if (!hasAnyStructuredContent(assistantPlainText, textSegmentsFallback)) {\n return {\n ok: false,\n errorMessage: 'Assistant returned empty output.',\n failurePhase: 'parse',\n };\n }\n\n const parsed = parseStructuredAssistantWithSegmentFallback(assistantPlainText, textSegmentsFallback ?? []);\n if (parsed === undefined) {\n return {\n ok: false,\n errorMessage:\n 'Could not parse assistant output as JSON (expected a JSON object or array; optional markdown fence; segment fallback, local repair, and truncation repair also failed).',\n failurePhase: 'parse',\n };\n }\n\n if (!structuredValidator) {\n return { ok: true, value: parsed };\n }\n\n try {\n const value = await structuredValidator(parsed);\n return { ok: true, value };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n return {\n ok: false,\n errorMessage: msg.trim().length > 0 ? msg : 'Structured validation failed.',\n failurePhase: 'validator',\n };\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPAiStructuredOutputError,\n type AXPAiAssistStructuredOutputRunRaw,\n type AXPAiStructuredValidator,\n type AXPAiAssistTokenUsageSnapshot,\n} from '../../types/ai-assist.types';\n\nimport { axpAiChatTextMessage } from '../../engine/ai-engine.types';\nimport type {\n AXPAiChatMessage,\n AXPAiEngineLastProviderPayload,\n AXPAiEngineRunResult,\n AXPAiEngineUsageTotals,\n} from '../../engine/ai-engine.types';\nimport { buildStructuredOutputRetryUserText } from './build-structured-output-retry-user-text';\nimport {\n extractLastAssistantPlainText,\n extractLastAssistantStructuredParts,\n} from './extract-last-assistant-plain-text';\nimport { stripAssistantThinkingXml } from './repair-structured-assistant-parse';\nimport { validateStructuredAssistantResponse } from './validate-structured-assistant-response';\n\n//#endregion\n\n//#region ---- Usage aggregation ----\n\nfunction mergeEngineUsageTotals(\n acc: AXPAiEngineUsageTotals | undefined,\n next: AXPAiEngineUsageTotals | undefined,\n): AXPAiEngineUsageTotals | undefined {\n if (!acc && !next) {\n return undefined;\n }\n const promptTokens = (acc?.promptTokens ?? 0) + (next?.promptTokens ?? 0);\n const completionTokens = (acc?.completionTokens ?? 0) + (next?.completionTokens ?? 0);\n const totalTokens = (acc?.totalTokens ?? 0) + (next?.totalTokens ?? 0);\n const cachedPromptTokens = (acc?.cachedPromptTokens ?? 0) + (next?.cachedPromptTokens ?? 0);\n return {\n promptTokens,\n completionTokens,\n totalTokens,\n ...(cachedPromptTokens > 0 ? { cachedPromptTokens } : {}),\n };\n}\n\nfunction engineTotalsToSnapshot(totals: AXPAiEngineUsageTotals | undefined): AXPAiAssistTokenUsageSnapshot | undefined {\n if (!totals) {\n return undefined;\n }\n return {\n promptTokens: totals.promptTokens,\n completionTokens: totals.completionTokens,\n totalTokens: totals.totalTokens,\n ...(totals.cachedPromptTokens != null && totals.cachedPromptTokens > 0\n ? { cachedPromptTokens: totals.cachedPromptTokens }\n : {}),\n };\n}\n\n//#endregion\n\n//#region ---- Error snapshot ----\n\nconst STRUCTURED_OUTPUT_ERROR_TEXT_MAX = 8000;\n\nfunction truncateForStructuredOutputError(text: string): string {\n if (text.length <= STRUCTURED_OUTPUT_ERROR_TEXT_MAX) {\n return text;\n }\n return `${text.slice(0, STRUCTURED_OUTPUT_ERROR_TEXT_MAX)}…`;\n}\n\n//#endregion\n\n//#region ---- Pipeline ----\n\nexport interface RunStructuredOutputPipelineParams {\n /** Initial transcript (system + user, etc.). */\n initialMessages: AXPAiChatMessage[];\n\n /** Runs the engine with the given full message list. */\n executeRun: (messages: AXPAiChatMessage[]) => Promise<AXPAiEngineRunResult>;\n\n /**\n * Extra turns after the first response. Total attempts = 1 + maxStructuredRetries.\n * Use 0 for a single attempt.\n */\n maxStructuredRetries: number;\n\n /** When false, only one attempt is made. */\n retryOnInvalidStructure: boolean;\n\n structuredValidator?: AXPAiStructuredValidator;\n\n /** Appended to retry user messages (and should be reflected in the initial user prompt by the caller). */\n structuredOutputSchemaSummary?: string;\n}\n\nexport interface RunStructuredOutputPipelineResult {\n text: string;\n structured: unknown;\n structuredRunRaw: AXPAiAssistStructuredOutputRunRaw;\n}\n\n/**\n * Runs the engine, validates JSON (+ optional custom validator), and appends user retry messages on failure.\n */\nexport async function runStructuredOutputPipeline(\n params: RunStructuredOutputPipelineParams,\n): Promise<RunStructuredOutputPipelineResult> {\n const maxAttempts = params.retryOnInvalidStructure\n ? 1 + Math.max(0, params.maxStructuredRetries)\n : 1;\n\n let messages = params.initialMessages;\n let mergedUsage: AXPAiEngineUsageTotals | undefined;\n let lastProvider: AXPAiEngineLastProviderPayload | undefined;\n let prevFailureStructuredFingerprint: string | undefined;\n let prevFailurePhase: 'parse' | 'validator' | undefined;\n\n const perAttemptUsage: { attemptIndex: number; usage?: AXPAiAssistTokenUsageSnapshot; hasLastProviderResult: boolean }[] =\n [];\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n const result = await params.executeRun(messages);\n mergedUsage = mergeEngineUsageTotals(mergedUsage, result.usageTotals);\n\n if (result.lastProviderResult !== undefined) {\n lastProvider = result.lastProviderResult;\n }\n messages = result.messages;\n\n const displayText = extractLastAssistantPlainText(messages);\n const structuredParts = extractLastAssistantStructuredParts(messages);\n const structuredFingerprint = stripAssistantThinkingXml(structuredParts.combined).trim();\n\n const attemptUsageSnapshot = engineTotalsToSnapshot(result.usageTotals);\n perAttemptUsage.push({\n attemptIndex: attempt,\n usage: attemptUsageSnapshot,\n hasLastProviderResult: result.lastProviderResult !== undefined,\n });\n\n if (\n attempt > 1 &&\n prevFailureStructuredFingerprint !== undefined &&\n structuredFingerprint === prevFailureStructuredFingerprint &&\n prevFailurePhase === 'validator'\n ) {\n throw new AXPAiStructuredOutputError({\n message:\n 'Assistant returned the same output as the previous attempt while schema validation still failed; stopped to avoid excess token usage.',\n attempts: attempt,\n lastAssistantText: truncateForStructuredOutputError(displayText),\n validationMessage:\n 'The model repeated identical assistant text after a successful JSON parse; no further retries will be requested for this run.',\n code: 'duplicate_assistant_output',\n });\n }\n\n const validation = await validateStructuredAssistantResponse(\n structuredParts.combined,\n params.structuredValidator,\n structuredParts.segments,\n );\n\n if (validation.ok) {\n const structuredRunRaw: AXPAiAssistStructuredOutputRunRaw = {\n kind: 'structured-output',\n attempts: perAttemptUsage,\n totalUsage: engineTotalsToSnapshot(mergedUsage),\n finalAttempt: attempt,\n lastProviderResult: lastProvider,\n };\n return {\n text: displayText,\n structured: validation.value,\n structuredRunRaw,\n };\n }\n\n prevFailureStructuredFingerprint = structuredFingerprint;\n prevFailurePhase = validation.failurePhase;\n\n const canRetry = params.retryOnInvalidStructure && attempt < maxAttempts;\n if (!canRetry) {\n throw new AXPAiStructuredOutputError({\n message: `Structured output validation failed after ${attempt} attempt(s).`,\n attempts: attempt,\n lastAssistantText: truncateForStructuredOutputError(displayText),\n validationMessage: validation.errorMessage,\n code: 'validation_exhausted',\n });\n }\n\n messages = [\n ...result.messages,\n axpAiChatTextMessage(\n 'user',\n buildStructuredOutputRetryUserText(\n validation.errorMessage,\n params.structuredOutputSchemaSummary,\n validation.failurePhase,\n ),\n ),\n ];\n }\n\n throw new AXPAiStructuredOutputError({\n message: 'Structured output validation failed (unexpected end of retry loop).',\n attempts: maxAttempts,\n lastAssistantText: '',\n validationMessage: 'Unexpected pipeline state.',\n code: 'validation_exhausted',\n });\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXLoadingDialogService } from '@acorex/components/loading-dialog';\nimport { AXPSettingsService } from '@acorex/platform/common';\nimport {\n AXPAiAssistDefaultMaxStructuredRetries,\n AXPAiAssistDefaultStructuredMaxTokens,\n type AXPAiAssistRunInput,\n type AXPAiAssistRunResult,\n type AXPAiAssistShowOptions,\n} from '../types/ai-assist.types';\nimport { Injectable, LOCALE_ID, inject } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../const';\nimport { AXPAiManagementSettings } from '../../settings.keys';\nimport { AXPAiAssistService } from './ai-assist.abstract';\nimport { AXPAiEngine } from '../engine/ai-engine';\nimport {\n axpAiChatTextMessage,\n axpAiChatUserMessage,\n type AXPAiChatMessage,\n type AXPAiChatResponse,\n type AXPAiEffectiveAgentRow,\n type AXPAiEffectiveAssistRow,\n type AXPAiEngineRunOptions,\n type AXPAiEngineRunResult,\n type AXPAiPlatformRuntimeContext,\n} from '../engine/ai-engine.types';\nimport { AXPAiPlatformRuntimeContextBuilder } from '../engine/ai-platform-runtime-context.builder';\nimport { AXMAiAssistPromptBoxService } from '../assist/ai-assist-prompt-box.service';\nimport { extractLastAssistantPlainText } from '../assist/structured-output/extract-last-assistant-plain-text';\nimport { runStructuredOutputPipeline } from '../assist/structured-output/run-structured-output-pipeline';\n\n//#endregion\n\n//#region ---- Row types (UI / queries) ----\n\ntype AXMAiAssistRow = AXPAiEffectiveAssistRow;\n\n//#endregion\n\n//#region ---- Assist prompt run loading dialog ----\n\nconst AI_ASSIST_RUN_LOADING_DIALOG_CLOSE_DELAY_MS = 200;\n\ntype AiAssistRunLoadingProgressColor = 'primary' | 'danger' | 'success';\n\n/** Indeterminate loading dialog ref used while the prompt box executes `run`. */\ninterface AiAssistRunLoadingDialogRef {\n close: () => void;\n setProgressText: (text: string) => void;\n setProgressColor: (color: AiAssistRunLoadingProgressColor) => void;\n}\n\n//#endregion\n\n//#region ---- Assist run helpers ----\n\nfunction mergePlatformRuntimeContext(\n base: AXPAiPlatformRuntimeContext,\n notes: Record<string, unknown> | undefined | null,\n): AXPAiPlatformRuntimeContext {\n if (!notes || Object.keys(notes).length === 0) {\n return base;\n }\n return { ...base, ...notes };\n}\n\nfunction buildUserPromptBody(input: AXPAiAssistRunInput): string {\n const parts: string[] = [];\n const prompt = input.prompt?.trim() ?? '';\n if (prompt.length > 0) {\n parts.push(prompt);\n }\n\n const hints = input.context?.hints?.filter((h) => (h ?? '').toString().trim().length > 0) ?? [];\n if (hints.length > 0) {\n parts.push('', 'Hints:', ...hints.map((h) => `- ${String(h).trim()}`));\n }\n\n const structured = input.context?.structuredContext;\n if (structured !== undefined && structured !== null) {\n let serialized: string;\n try {\n serialized = typeof structured === 'string' ? structured : JSON.stringify(structured, null, 2);\n } catch {\n serialized = String(structured);\n }\n parts.push('', 'Context (structured):', serialized);\n }\n\n if (input.expectStructuredOutput) {\n const extra = input.structuredOutputInstruction?.trim();\n parts.push(\n '',\n 'Structured output requirements:',\n '- Reply with exactly one JSON value (a single object or array). It must be complete and valid: close every string, bracket, and brace.',\n '- Do not truncate — finish the entire structure in one message.',\n '- No markdown code fences, no text or commentary before or after the JSON.',\n ...(extra && extra.length > 0 ? ['', 'Additional output rules from the task:', extra] : []),\n );\n const schemaSummary = input.structuredOutputSchemaSummary?.trim();\n if (schemaSummary && schemaSummary.length > 0) {\n parts.push('', 'Expected JSON shape (summary):', schemaSummary);\n }\n }\n\n return parts.join('\\n').trim();\n}\n\nfunction buildChatMessages(input: AXPAiAssistRunInput): AXPAiChatMessage[] {\n const messages: AXPAiChatMessage[] = [];\n const systemInstruction = input.context?.systemInstruction?.trim();\n if (systemInstruction) {\n messages.push(axpAiChatTextMessage('system', systemInstruction));\n }\n const body = buildUserPromptBody(input);\n const media = (input.userMediaAttachments ?? []).filter((a) => a.fileId?.trim() && a.mimeType?.trim());\n if (media.length > 0) {\n const responses: AXPAiChatResponse[] = [];\n for (const a of media) {\n const fileId = a.fileId.trim();\n const mimeType = a.mimeType.trim();\n const name = a.name?.trim();\n responses.push({\n type: 'file',\n content: { fileId, mimeType, ...(name ? { name } : {}) },\n });\n }\n const textBody = body.trim().length > 0 ? body : '(empty prompt)';\n responses.push({ type: 'text', content: textBody });\n messages.push(axpAiChatUserMessage(responses));\n } else {\n messages.push(axpAiChatTextMessage('user', body.trim().length > 0 ? body : '(empty prompt)'));\n }\n return messages;\n}\n\ninterface AXMAiModelMaxTokensRow {\n id: string;\n maxOutputTokens?: number;\n}\n\n//#endregion\n\n/**\n * Frontend facade for AI: assist catalog, tenant defaults, engine runs, structured assist runs, and prompt UI.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPAiManagerService extends AXPAiAssistService {\n //#region ---- Services & Dependencies ----\n\n private readonly aiEngine = inject(AXPAiEngine);\n private readonly entityService = inject(AXPEntityService);\n private readonly settings = inject(AXPSettingsService);\n private readonly runtimeContextBuilder = inject(AXPAiPlatformRuntimeContextBuilder);\n private readonly assistPromptBox = inject(AXMAiAssistPromptBoxService);\n private readonly localeId = inject(LOCALE_ID);\n private readonly loadingDialog = inject(AXLoadingDialogService);\n\n private readonly assistData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assist.name)\n .data<string, AXMAiAssistRow, AXMAiAssistRow, AXMAiAssistRow, AXMAiAssistRow>();\n\n private readonly modelEntityData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.model.name)\n .data<string, AXMAiModelMaxTokensRow, AXMAiModelMaxTokensRow, AXMAiModelMaxTokensRow, AXMAiModelMaxTokensRow>();\n\n private readonly agentEntityData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.agent.name)\n .data<string, AXPAiEffectiveAgentRow, AXPAiEffectiveAgentRow, AXPAiEffectiveAgentRow, AXPAiEffectiveAgentRow>();\n\n //#endregion\n\n //#region ---- Assist catalog (frontend) ----\n\n /**\n * Loads the effective assist from `DefaultAssistId` (tenant setting), or the assist named `platform-assistant`.\n */\n async getEffectiveAssist(): Promise<AXPAiEffectiveAssistRow> {\n const raw = await this.settings.get<unknown>(AXPAiManagementSettings.DefaultAssistId);\n const assistId =\n typeof raw === 'string'\n ? raw.trim()\n : (raw as { value?: string })?.value != null\n ? String((raw as { value?: string }).value).trim()\n : '';\n\n if (assistId) {\n const byId = await this.assistData.byKey(assistId);\n if (byId) {\n return byId;\n }\n throw new Error(\n `AI assist with id \"${assistId}\" was not found. Open AI Management → AI Settings and pick a valid default assist.`,\n );\n }\n\n const queryResult = await this.assistData.query({\n skip: 0,\n take: 1,\n filter: {\n field: 'name',\n operator: { type: 'equal' },\n value: 'platform-assistant',\n },\n });\n\n const items = (queryResult?.items ?? []) as AXPAiEffectiveAssistRow[];\n const record = items[0];\n\n if (!record) {\n throw new Error(\n 'No default assist is configured. Create an assist named \"platform-assistant\" or select one under AI Settings.',\n );\n }\n\n return record;\n }\n\n /**\n * Resolves the assist row for chat: explicit primary key, otherwise the effective default from settings.\n */\n async getAssistForChat(assistId?: string | null): Promise<AXPAiEffectiveAssistRow> {\n const id = assistId?.trim();\n if (id) {\n const row = await this.assistData.byKey(id);\n if (!row) {\n throw new Error(\n `Assist \"${id}\" was not found. Open AI Management → Assists or clear the assist id in the chat URL.`,\n );\n }\n return row;\n }\n return this.getEffectiveAssist();\n }\n\n //#endregion\n\n //#region ---- Engine delegation ----\n\n /**\n * Low-level engine run (chat streaming and tool orchestration).\n */\n runEngine(options: AXPAiEngineRunOptions): Promise<AXPAiEngineRunResult> {\n return this.aiEngine.run(options);\n }\n\n //#endregion\n\n //#region ---- Assist API (run / show) ----\n\n /**\n * Normalizes AiModel.maxOutputTokens from the catalog.\n */\n private normalizeMaxOutputTokens(value: unknown): number | undefined {\n if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0) {\n return undefined;\n }\n return Math.floor(value);\n }\n\n /**\n * Reads {@link AXMAiModelMaxTokensRow.maxOutputTokens} for the model bound to the assist or direct agent.\n */\n private async resolveCatalogMaxOutputTokens(\n assistId: string,\n directAgentId: string | undefined,\n ): Promise<number | undefined> {\n try {\n if (directAgentId) {\n const agent = await this.agentEntityData.byKey(directAgentId);\n const modelEntityId = agent?.modelEntityId?.trim();\n if (!modelEntityId) {\n return undefined;\n }\n const model = await this.modelEntityData.byKey(modelEntityId);\n return this.normalizeMaxOutputTokens(model?.maxOutputTokens);\n }\n const assist = await this.getAssistForChat(assistId);\n const modelEntityId = assist.modelId?.trim();\n if (!modelEntityId) {\n return undefined;\n }\n const model = await this.modelEntityData.byKey(modelEntityId);\n return this.normalizeMaxOutputTokens(model?.maxOutputTokens);\n } catch {\n return undefined;\n }\n }\n\n /** @inheritdoc */\n override async run(input: AXPAiAssistRunInput): Promise<AXPAiAssistRunResult> {\n const baseCtx = await this.runtimeContextBuilder.build();\n const platformRuntimeContext = mergePlatformRuntimeContext(baseCtx, input.platformRuntimeNotes ?? null);\n\n const directAgentId = input.directAgentId?.trim();\n let assistId = input.assistId?.trim();\n\n if (!directAgentId && !assistId) {\n const assist = await this.getEffectiveAssist();\n assistId = assist.id;\n }\n\n const messages = buildChatMessages(input);\n\n const catalogMax = await this.resolveCatalogMaxOutputTokens(assistId as string, directAgentId);\n const effectiveMaxTokens = input.maxTokens ?? catalogMax ?? AXPAiAssistDefaultStructuredMaxTokens;\n\n const runOptions: Omit<AXPAiEngineRunOptions, 'messages'> = {\n platformRuntimeContext,\n ...(directAgentId ? { directAgentId } : { assistId: assistId as string }),\n ...(input.maxSteps !== undefined ? { maxSteps: input.maxSteps } : {}),\n ...(input.temperature !== undefined ? { temperature: input.temperature } : {}),\n maxTokens: effectiveMaxTokens,\n };\n\n if (!input.expectStructuredOutput) {\n const result = await this.runEngine({ ...runOptions, messages });\n const text = extractLastAssistantPlainText(result.messages);\n return {\n text,\n raw: { usageTotals: result.usageTotals, lastProviderResult: result.lastProviderResult },\n };\n }\n\n const retryOnInvalidStructure = input.retryOnInvalidStructure !== false;\n const maxStructuredRetries = input.maxStructuredRetries ?? AXPAiAssistDefaultMaxStructuredRetries;\n\n const structuredMaxTokens = input.structuredOutputMaxTokens ?? effectiveMaxTokens;\n\n const pipelineResult = await runStructuredOutputPipeline({\n initialMessages: messages,\n executeRun: (nextMessages) =>\n this.runEngine({ ...runOptions, maxTokens: structuredMaxTokens, messages: nextMessages }),\n maxStructuredRetries,\n retryOnInvalidStructure,\n structuredValidator: input.structuredValidator,\n structuredOutputSchemaSummary: input.structuredOutputSchemaSummary,\n });\n\n return {\n text: pipelineResult.text,\n structured: pipelineResult.structured,\n raw: pipelineResult.structuredRunRaw,\n };\n }\n\n /** @inheritdoc */\n override async show(options: AXPAiAssistShowOptions): Promise<AXPAiAssistRunResult | null> {\n const runLoadingSpec = options.runLoadingDialog;\n const data = await this.assistPromptBox.open(options, async (payload) => {\n let progressDialog: AiAssistRunLoadingDialogRef | undefined;\n if (runLoadingSpec) {\n progressDialog = this.loadingDialog.show({\n title: runLoadingSpec.title,\n mode: 'indeterminate',\n progressColor: 'primary',\n text: runLoadingSpec.text,\n }) as AiAssistRunLoadingDialogRef;\n }\n try {\n return await this.run({\n prompt: payload.prompt,\n userMediaAttachments:\n payload.userMediaAttachments.length > 0 ? payload.userMediaAttachments : undefined,\n context: options.context,\n assistId: payload.assistId,\n directAgentId: payload.directAgentId,\n maxSteps: options.maxSteps,\n temperature: options.temperature,\n maxTokens: options.maxTokens,\n expectStructuredOutput: options.expectStructuredOutput,\n structuredOutputInstruction: options.structuredOutputInstruction,\n platformRuntimeNotes: options.platformRuntimeNotes,\n maxStructuredRetries: options.maxStructuredRetries,\n structuredValidator: options.structuredValidator,\n retryOnInvalidStructure: options.retryOnInvalidStructure,\n structuredOutputSchemaSummary: options.structuredOutputSchemaSummary,\n structuredOutputMaxTokens: options.structuredOutputMaxTokens,\n });\n } catch (err) {\n if (progressDialog !== undefined) {\n try {\n progressDialog.setProgressColor('danger');\n progressDialog.setProgressText(err instanceof Error ? err.message : String(err));\n } catch {\n // Ignore dialog update failures.\n }\n }\n throw err;\n } finally {\n if (progressDialog !== undefined) {\n const dlg = progressDialog;\n setTimeout(() => dlg.close(), AI_ASSIST_RUN_LOADING_DIALOG_CLOSE_DELAY_MS);\n }\n }\n });\n\n return data ?? null;\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { AXP_DATA_PATH_PROPERTY, AXP_NAME_PROPERTY } from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_EDITOR_CATEGORY, AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core';\n//#endregion\n\n//#region ---- Config ----\n\nexport const AXMAgentRegistryToolConfiguratorWidget: AXPWidgetConfig = {\n name: 'agent-registry-tool-configurator',\n title: 'Agent registry tool (command / query)',\n icon: 'fa-light fa-screwdriver-wrench',\n description:\n 'Select a command or query definition from the platform registry and optionally set default argument values (persisted with the agent).',\n categories: AXP_WIDGETS_EDITOR_CATEGORY,\n groups: [AXPWidgetGroupEnum.UtilityWidget],\n type: 'editor',\n defaultFilterWidgetName: 'string-filter',\n properties: [\n AXP_NAME_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n {\n name: 'label',\n title: 'Label',\n visible: true,\n group: { name: 'general', title: 'General', order: 1 },\n schema: {\n dataType: 'string',\n defaultValue: '',\n interface: {\n path: 'label',\n type: 'text-box',\n options: {\n placeholder: 'Field label',\n },\n },\n },\n },\n {\n name: 'registryKind',\n title: 'Registry kind',\n visible: true,\n group: { name: 'behavior', title: 'Behavior', order: 2 },\n schema: {\n dataType: 'string',\n defaultValue: 'command',\n interface: {\n path: 'options.registryKind',\n type: 'select-editor',\n options: {\n items: [\n { id: 'command', title: 'Command' },\n { id: 'query', title: 'Query' },\n ],\n valueField: 'id',\n textField: 'title',\n },\n },\n },\n },\n {\n name: 'readonly',\n title: 'Readonly',\n visible: true,\n group: { name: 'behavior', title: 'Behavior', order: 2 },\n schema: {\n dataType: 'string',\n interface: {\n path: 'options.readonly',\n type: 'text-box',\n options: {\n placeholder: 'true / false / expression',\n },\n },\n },\n },\n {\n name: 'dataSource',\n title: 'Data source override',\n visible: true,\n group: { name: 'data', title: 'Data', order: 3 },\n schema: {\n dataType: 'string',\n interface: {\n path: 'options.dataSource',\n type: 'text-box',\n options: {\n placeholder: 'Optional; defaults by registry kind',\n },\n },\n },\n },\n ],\n components: {\n edit: {\n component: () =>\n import('./agent-registry-tool-configurator-widget-edit.component').then(\n (c) => c.AXMAgentRegistryToolConfiguratorWidgetEditComponent,\n ),\n },\n designer: {\n component: () =>\n import('./agent-registry-tool-configurator-widget-edit.component').then(\n (c) => c.AXMAgentRegistryToolConfiguratorWidgetEditComponent,\n ),\n },\n column: {\n component: () =>\n import('./agent-registry-tool-configurator-widget-column.component').then(\n (c) => c.AXMAgentRegistryToolConfiguratorWidgetColumnComponent,\n ),\n },\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXP_DATA_PATH_PROPERTY, AXP_NAME_PROPERTY } from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_EDITOR_CATEGORY, AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core';\nimport { AI_AGENT_CATALOG_DATASOURCE_NAME } from '../../datasources/ai-agent-catalog.datasource';\n\n//#endregion\n\n//#region ---- Config ----\n\nexport const AXMAssistDelegatedAgentConfiguratorWidget: AXPWidgetConfig = {\n name: 'assist-delegated-agent-configurator',\n title: 'Assist Delegated Agent Configurator',\n icon: 'fa-light fa-user-robot',\n description: 'Select a delegated agent and configure injected delegated parameters.',\n categories: AXP_WIDGETS_EDITOR_CATEGORY,\n groups: [AXPWidgetGroupEnum.UtilityWidget],\n type: 'editor',\n defaultFilterWidgetName: 'string-filter',\n properties: [\n AXP_NAME_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n {\n name: 'label',\n title: 'Label',\n visible: true,\n group: { name: 'general', title: 'General', order: 1 },\n schema: {\n dataType: 'string',\n defaultValue: '@ai-management:assists.entities.assist.fields.delegated-agent.title',\n interface: {\n path: 'label',\n type: 'text-box',\n options: {\n placeholder: 'Field label',\n },\n },\n },\n },\n {\n name: 'readonly',\n title: 'Readonly',\n visible: true,\n group: { name: 'behavior', title: 'Behavior', order: 2 },\n schema: {\n dataType: 'string',\n interface: {\n path: 'options.readonly',\n type: 'text-box',\n options: {\n placeholder: 'true / false / expression',\n },\n },\n },\n },\n {\n name: 'dataSource',\n title: 'Data Source',\n visible: true,\n group: { name: 'data', title: 'Data', order: 3 },\n schema: {\n dataType: 'string',\n defaultValue: AI_AGENT_CATALOG_DATASOURCE_NAME,\n interface: {\n path: 'options.dataSource',\n type: 'text-box',\n },\n },\n },\n ],\n components: {\n edit: {\n component: () =>\n import('./assist-delegated-agent-configurator-widget-edit.component').then(\n (c) => c.AXMAssistDelegatedAgentConfiguratorWidgetEditComponent,\n ),\n },\n designer: {\n component: () =>\n import('./assist-delegated-agent-configurator-widget-edit.component').then(\n (c) => c.AXMAssistDelegatedAgentConfiguratorWidgetEditComponent,\n ),\n },\n column: {\n component: () =>\n import('./assist-delegated-agent-configurator-widget-column.component').then(\n (c) => c.AXMAssistDelegatedAgentConfiguratorWidgetColumnComponent,\n ),\n },\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex/platform/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXMAgentRegistryToolConfiguratorWidget } from './features/widgets/agent-registry-tool-configurator/agent-registry-tool-configurator-widget.config';\nimport { AXMAssistDelegatedAgentConfiguratorWidget } from './features/widgets/assist-delegated-agent-configurator/assist-delegated-agent-configurator-widget.config';\n\n//#endregion\n\n//#region ---- AI Management Widgets Provider ----\n\nconst AI_MANAGEMENT_WIDGETS = [\n AXMAssistDelegatedAgentConfiguratorWidget,\n AXMAgentRegistryToolConfiguratorWidget,\n];\n\n@Injectable()\nexport class AXMAiManagementWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return AI_MANAGEMENT_WIDGETS;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';\nimport { AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER } from '@acorex/platform/common';\nimport {\n AXPComponentSlotModule,\n AXP_DATASOURCE_DEFINITION_PROVIDER,\n AXP_MODULE_MANIFEST_PROVIDER,\n AXP_TAG_PROVIDER,\n} from '@acorex/platform/core';\nimport { AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';\nimport { AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex/platform/layout/widget-core';\nimport { AXPWidgetsModule } from '@acorex/platform/layout/widgets';\nimport { NgModule } from '@angular/core';\nimport { ROUTES, Routes } from '@angular/router';\nimport { AiManagementManifest } from './manifest';\nimport { AXMAiManagementEntityProvider } from './entity.provider';\nimport { AXMAiManagementMenuProvider } from './menu.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMAiManagementSettingProvider } from './settings.provider';\nimport { AXMAiAgentCatalogDataSourceDefinition } from './features/datasources/ai-agent-catalog.datasource';\nimport {\n AXMAiCommandRegistryCatalogDataSourceDefinition,\n AXMAiQueryRegistryCatalogDataSourceDefinition,\n} from './features/datasources/ai-registry-catalog.datasource';\nimport { AXMAiModelCatalogDataSourceDefinition } from './features/datasources/ai-model-catalog.datasource';\nimport { AXMAiModelPurposeTagProvider } from './features/tags/ai-model-purpose-tag.provider';\nimport { AXPAiAssistService } from './features/services/ai-assist.abstract';\nimport { AXPAiManagerService } from './features/services/ai-manager.service';\nimport { AXMAiManagementWidgetsProvider } from './widget-definition.provider';\n\n//#endregion\n\n//#region ---- Routes ----\n\nfunction routesFactory(): Routes {\n return [];\n}\n\n//#endregion\n\n//#region ---- Module ----\n\n@NgModule({\n imports: [\n AXPComponentSlotModule.forChild({\n }),\n AXPWidgetsModule,\n ],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMAiManagementEntityProvider,\n multi: true,\n },\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: AiManagementManifest,\n multi: true,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMAiManagementMenuProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXMAiManagementSettingProvider,\n multi: true,\n },\n {\n provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXMAiModelCatalogDataSourceDefinition,\n multi: true,\n },\n {\n provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXMAiAgentCatalogDataSourceDefinition,\n multi: true,\n },\n {\n provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXMAiCommandRegistryCatalogDataSourceDefinition,\n multi: true,\n },\n {\n provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXMAiQueryRegistryCatalogDataSourceDefinition,\n multi: true,\n },\n {\n provide: AXP_WIDGET_DEFINITION_PROVIDER,\n useClass: AXMAiManagementWidgetsProvider,\n multi: true,\n },\n {\n provide: AXP_TAG_PROVIDER,\n useClass: AXMAiModelPurposeTagProvider,\n multi: true,\n },\n {\n provide: AXPAiAssistService,\n useExisting: AXPAiManagerService,\n },\n ],\n})\nexport class AXMAiManagementModule {}\n\n//#endregion\n","//#region ---- Delegated agent prompt preview ----\n\nfunction normalizeDelegatedAgentToolArgs(argumentsValue: unknown): Record<string, unknown> | null {\n if (argumentsValue == null) {\n return null;\n }\n if (typeof argumentsValue === 'object' && !Array.isArray(argumentsValue)) {\n return { ...(argumentsValue as Record<string, unknown>) };\n }\n if (typeof argumentsValue === 'string') {\n const t = argumentsValue.trim();\n if (!t) {\n return null;\n }\n try {\n const p = JSON.parse(t) as unknown;\n if (p != null && typeof p === 'object' && !Array.isArray(p)) {\n return p as Record<string, unknown>;\n }\n } catch {\n return null;\n }\n }\n return null;\n}\n\nfunction formatArgsFallback(argumentsValue: unknown): string {\n if (argumentsValue == null) {\n return '';\n }\n if (typeof argumentsValue === 'string') {\n return argumentsValue;\n }\n try {\n return JSON.stringify(argumentsValue, null, 2);\n } catch {\n return String(argumentsValue);\n }\n}\n\n/**\n * Human-readable specialist prompt from delegated-agent tool arguments (conversation / mini-chat UI).\n */\nexport function axpAiDelegatedAgentPromptPreview(argumentsValue: unknown): string {\n const obj = normalizeDelegatedAgentToolArgs(argumentsValue);\n if (!obj) {\n return formatArgsFallback(argumentsValue);\n }\n const preferKeys = ['query', 'task', 'prompt', 'message', 'userMessage', 'instruction', 'goal'] as const;\n for (const k of preferKeys) {\n const v = obj[k];\n if (typeof v === 'string' && v.trim()) {\n return v.trim();\n }\n }\n const keys = Object.keys(obj);\n if (keys.length === 1) {\n const only = obj[keys[0]!];\n if (typeof only === 'string' && only.trim()) {\n return only.trim();\n }\n }\n try {\n return JSON.stringify(obj, null, 2);\n } catch {\n return formatArgsFallback(argumentsValue);\n }\n}\n\n//#endregion\n","//#region ---- AI tool command args ----\n\nimport { axpCreateEntityAiToolInputDefaults } from '@acorex/platform/layout/entity';\n\n/**\n * Recursively parses string values that look like JSON objects or arrays, then\n * normalizes nested values the same way.\n *\n * LLM tool calls often stringify nested payloads (e.g. `__context__` for\n * `Entity:Create`). Use this before passing args to the command or query service\n * from AI paths only — not inside generic command infrastructure.\n *\n * @param toolName When set, command-specific AI defaults from command definitions are merged (e.g. `Entity:Create` redirect).\n */\nexport function normalizeAiToolCommandArgs(value: unknown, toolName?: string): unknown {\n const normalized = normalizeLikelyJsonStringValuesRecursive(value);\n return applyAiToolInputDefaultsByCommandName(toolName, normalized);\n}\n\nfunction normalizeLikelyJsonStringValuesRecursive(value: unknown): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (\n (trimmed.startsWith('{') && trimmed.endsWith('}')) ||\n (trimmed.startsWith('[') && trimmed.endsWith(']'))\n ) {\n try {\n const parsed: unknown = JSON.parse(trimmed);\n return normalizeLikelyJsonStringValuesRecursive(parsed);\n } catch {\n return value;\n }\n }\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => normalizeLikelyJsonStringValuesRecursive(item));\n }\n\n if (typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n out[key] = normalizeLikelyJsonStringValuesRecursive(obj[key]);\n }\n return out;\n }\n\n return value;\n}\n\nfunction applyAiToolInputDefaultsByCommandName(toolName: string | undefined, payload: unknown): unknown {\n if (toolName !== 'Entity:Create') {\n return payload;\n }\n return mergeEntityCreateAiToolDefaults(payload);\n}\n\n/** Applies `axpCreateEntityAiToolInputDefaults` so AI flows do not trigger post-create navigation. */\nfunction mergeEntityCreateAiToolDefaults(payload: unknown): unknown {\n if (payload == null || typeof payload !== 'object' || Array.isArray(payload)) {\n return payload;\n }\n const p = payload as Record<string, unknown>;\n const ctx = (p['__context__'] as Record<string, unknown> | undefined) ?? {};\n const opts = (ctx['options'] as Record<string, unknown> | undefined) ?? {};\n const proc = (opts['process'] as Record<string, unknown> | undefined) ?? {};\n const defProcess = axpCreateEntityAiToolInputDefaults.__context__.options.process;\n p['__context__'] = {\n ...ctx,\n options: {\n ...opts,\n process: {\n ...proc,\n ...defProcess,\n },\n },\n };\n return p;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { axpAiChatTextMessage, type AXPAiChatMessage } from '../engine/ai-engine.types';\n\n//#endregion\n\n/** Maximum length for assist initial transcript text after HTML strip (characters). */\nconst ASSIST_INITIAL_MESSAGES_MAX_LENGTH = 16_000;\n\n//#region ---- HTML / rich text to plain ----\n\n/**\n * Strips HTML tags and decodes a few common entities for safe plain-text transcript lines.\n * Used for Assist `initialMessages` (may be stored as rich text HTML).\n */\nexport function axpAiStripAssistInitialHtmlToPlain(raw: string): string {\n let s = raw\n .replace(/<\\/p>\\s*(?:<br\\s*\\/?>\\s*)*<p[^>]*>/gi, '\\n\\n')\n .replace(/<\\/p>\\s*<p[^>]*>/gi, '\\n\\n')\n .replace(/<br\\s*\\/?>/gi, '\\n');\n s = s.replace(/<\\/(div|h[1-6]|li|tr)>/gi, '\\n');\n s = s.replace(/<[^>]+>/g, '');\n s = s\n .replace(/ /gi, ' ')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\");\n s = s.replace(/\\r\\n/g, '\\n').trim();\n if (s.length > ASSIST_INITIAL_MESSAGES_MAX_LENGTH) {\n s = s.slice(0, ASSIST_INITIAL_MESSAGES_MAX_LENGTH).trimEnd() + '…';\n }\n return s;\n}\n\n//#endregion\n\n//#region ---- Transcript messages ----\n\n/**\n * Converts assist `initialMessages` (HTML or plain) into one or more `assistant` transcript lines.\n * Non-empty paragraphs (split by blank lines) become separate messages; single block stays one message.\n */\nexport function axpAiAssistInitialMessagesToTranscript(\n raw: string | null | undefined,\n): AXPAiChatMessage[] {\n const trimmed = raw?.trim() ?? '';\n if (!trimmed) {\n return [];\n }\n const plain = axpAiStripAssistInitialHtmlToPlain(trimmed);\n if (!plain) {\n return [];\n }\n const blocks = plain\n .split(/\\n{2,}/)\n .map((b) => b.replace(/\\n+/g, ' ').trim())\n .filter((b) => b.length > 0);\n if (blocks.length === 0) {\n return [];\n }\n return blocks.map((text) => axpAiChatTextMessage('assistant', text));\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { resolveMultiLanguageString } from '@acorex/core/translation';\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport type { AXMAiManagementAssistEntityModel } from '../../entities/assist/assist.types';\nimport type { AXPAiEffectiveAssistRow } from '../engine/ai-engine.types';\n\n//#endregion\n\n//#region ---- Types ----\n\ntype AssistStarterPromptsSource =\n | Pick<AXMAiManagementAssistEntityModel, 'starterPrompts'>\n | Pick<AXPAiEffectiveAssistRow, 'starterPrompts'>\n | null\n | undefined;\n\n//#endregion\n\n//#region ---- Extraction ----\n\n/**\n * Returns non-empty starter prompt labels, preserving repeater order.\n * Resolve locale in the template via the translate pipe.\n */\nexport function axpAiAssistStarterPromptLabels(\n source: AssistStarterPromptsSource,\n): Array<string | AXPMultiLanguageString> {\n const items = source?.starterPrompts;\n if (!Array.isArray(items) || items.length === 0) {\n return [];\n }\n\n const labels: Array<string | AXPMultiLanguageString> = [];\n for (const item of items) {\n const text = item?.text;\n if (!axpAiAssistStarterPromptLabelIsNonEmpty(text)) {\n continue;\n }\n labels.push(text);\n }\n return labels;\n}\n\n/**\n * Returns non-empty starter prompt strings for the active locale, preserving repeater order.\n */\nexport function axpAiAssistStarterPromptTexts(\n source: AssistStarterPromptsSource,\n locale: string,\n): string[] {\n return axpAiAssistStarterPromptLabels(source)\n .map((text) => (typeof text === 'string' ? text : resolveMultiLanguageString(text, locale)).trim())\n .filter((text) => text.length > 0);\n}\n\nfunction axpAiAssistStarterPromptLabelIsNonEmpty(\n text: string | AXPMultiLanguageString | null | undefined,\n): text is string | AXPMultiLanguageString {\n if (text == null) {\n return false;\n }\n if (typeof text === 'string') {\n return text.trim().length > 0;\n }\n return Object.values(text).some((value) => typeof value === 'string' && value.trim().length > 0);\n}\n\n//#endregion\n","/**\n * Build-time only. Do not import from Angular modules.\n */\nimport {\n AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS,\n defineCommand,\n} from '@acorex/platform/runtime';\n\n/** Generates an image from a text prompt; model resolution: explicit input, then delegated specialist `options.model`, then mock catalog default (OpenAI gpt-image-1). */\nexport const AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY = 'AiManagement:ChatGenerateImage' as const;\n\nexport const aiManagementChatGenerateImageCommandDefinition = defineCommand({\n key: AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY,\n title: 'Generate image (chat)',\n description:\n 'Generates an image from a text description. Pass catalog image model id, or use options.model on the image-generation delegated specialist; if both are unset, the mock uses the catalog default image model (OpenAI gpt-image-1). Routing follows the model row (transport and provider).',\n executionMode: 'both',\n inputs: [\n {\n name: 'model',\n title: 'Model',\n description:\n 'Optional AiModel catalog row id (image purpose). When omitted, uses delegatedAgents[].options.model for the active delegated specialist (agentId in run context), then the mock default image model if still unset.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'prompt',\n title: 'Prompt',\n description: 'Detailed description of the image to generate.',\n interface: { name: 'text-editor' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'size',\n title: 'Size',\n description: 'Optional size hint (e.g. 1024x1024). May be ignored.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'style',\n title: 'Style',\n description: 'Optional style hint merged into the prompt by the backend.',\n interface: { name: 'text-editor' },\n },\n ],\n outputs: [\n {\n name: 'fileId',\n title: 'File id',\n description: 'Persisted file id when storage succeeds.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'prompt',\n title: 'Prompt',\n description: 'Original prompt text.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'imageUrl',\n title: 'Image URL',\n description: 'Short https or data URL fallback when persistence fails.',\n interface: { name: 'text-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success'],\n },\n capabilities: ['ai'],\n ai: {\n tags: ['ai-tool', 'ai-chat', 'image'],\n },\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","/**\n * Build-time only. Do not import from Angular modules.\n */\nimport {\n AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS,\n defineCommand,\n} from '@acorex/platform/runtime';\n\n/** Transcribes audio from a stored file; default speech model comes from the delegated specialist row (`delegatedAgents[].options.model`). */\nexport const AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY = 'AiManagement:ChatTranscribeSpeech' as const;\n\nexport const aiManagementChatTranscribeSpeechCommandDefinition = defineCommand({\n key: AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY,\n title: 'Transcribe speech (chat)',\n description:\n 'Transcribes audio from a platform file id. Pass catalog speech model id or rely on options.model for the speech-to-text delegated specialist on this assist; routing uses the model row (transport and provider).',\n executionMode: 'both',\n inputs: [\n {\n name: 'model',\n title: 'Model',\n description:\n 'Optional AiModel catalog row id (speech purpose). When omitted, uses delegatedAgents[].options.model for the active delegated specialist (agentId in run context).',\n interface: { name: 'text-editor' },\n },\n {\n name: 'fileId',\n title: 'File id',\n description: 'Platform file storage id for the audio attachment.',\n interface: { name: 'text-editor' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'language',\n title: 'Language',\n description: 'Optional BCP-47 language hint (e.g. en) when supported by the provider.',\n interface: { name: 'text-editor' },\n },\n ],\n outputs: [\n {\n name: 'text',\n title: 'Text',\n description: 'Transcribed plain text.',\n interface: { name: 'text-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success'],\n },\n capabilities: ['ai'],\n ai: {\n tags: ['ai-tool', 'ai-chat', 'speech'],\n },\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","/**\n * Build-time only. Do not import from Angular modules.\n */\nimport {\n AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS,\n defineCommand,\n} from '@acorex/platform/runtime';\n\n/** Synthesizes speech audio from text; default TTS model comes from the delegated specialist row (`delegatedAgents[].options.model`). */\nexport const AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY = 'AiManagement:ChatSynthesizeSpeech' as const;\n\nexport const aiManagementChatSynthesizeSpeechCommandDefinition = defineCommand({\n key: AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY,\n title: 'Synthesize speech (chat)',\n description:\n 'Converts text to spoken audio and stores it in platform file storage. Pass catalog TTS model id or rely on options.model for the text-to-speech delegated specialist on this assist; routing uses the model row (transport and provider).',\n executionMode: 'both',\n inputs: [\n {\n name: 'model',\n title: 'Model',\n description:\n 'Optional AiModel catalog row id (tts purpose). When omitted, uses delegatedAgents[].options.model for the active delegated specialist (agentId in run context).',\n interface: { name: 'text-editor' },\n },\n {\n name: 'text',\n title: 'Text',\n description: 'Plain text to speak (provider input length limits apply, e.g. OpenAI 4096 characters).',\n interface: { name: 'text-editor' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'voice',\n title: 'Voice',\n description:\n 'Optional OpenAI voice id: alloy, echo, fable, onyx, nova, shimmer. When omitted, uses delegatedAgents[].options.voice or alloy.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'responseFormat',\n title: 'Response format',\n description: 'Optional audio format for OpenAI (mp3, opus, aac, flac, wav, pcm). Default mp3.',\n interface: { name: 'text-editor' },\n },\n ],\n outputs: [\n {\n name: 'fileId',\n title: 'File id',\n description: 'Persisted audio file id when storage succeeds.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'text',\n title: 'Text',\n description: 'Source text that was synthesized.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'mimeType',\n title: 'MIME type',\n description: 'Audio MIME type of the stored file.',\n interface: { name: 'text-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success'],\n },\n capabilities: ['ai'],\n ai: {\n tags: ['ai-tool', 'ai-chat', 'tts'],\n },\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","/**\n * Build-time only. Do not import from Angular modules.\n */\nimport {\n AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS,\n defineCommand,\n} from '@acorex/platform/runtime';\n\nexport const AIMANAGEMENT_EXTRACT_DOCUMENT_TEXT_COMMAND_KEY = 'AiManagement:ExtractDocumentText' as const;\n\nexport const aiManagementExtractDocumentTextCommandDefinition = defineCommand({\n key: AIMANAGEMENT_EXTRACT_DOCUMENT_TEXT_COMMAND_KEY,\n title: 'Extract text from document image',\n description:\n 'Transcribes visible text from an image stored in platform file storage (scans, photos of documents, forms, including medical paperwork). Uses the active chat model’s vision capability. Output is informational transcription only—not clinical interpretation.',\n executionMode: 'both',\n inputs: [\n {\n name: 'fileId',\n title: 'File id',\n description:\n 'Platform file storage id for the image (same as chat image attachments). Supported formats follow the active vision model (e.g. PNG, JPEG, WEBP).',\n interface: { name: 'text-editor' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'instruction',\n title: 'Instruction',\n description:\n 'Optional extra instructions (e.g. language, focus on lab values only, preserve table layout).',\n interface: { name: 'text-editor' },\n },\n ],\n outputs: [\n {\n name: 'text',\n title: 'Extracted text',\n description: 'Transcribed text with structure preserved where possible.',\n interface: { name: 'text-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success'],\n },\n capabilities: ['ai'],\n ai: {\n shortDescription:\n 'OCR-style transcription from an image file id using the chat vision model; preserves layout; no medical diagnosis.',\n tags: ['ai-tool', 'ai-chat', 'ocr', 'vision', 'document', 'multimodal'],\n },\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","/**\n * Build-time only. Do not import from Angular modules.\n */\nimport {\n AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS,\n defineCommand,\n} from '@acorex/platform/runtime';\n\nexport const AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY =\n 'AiManagement:StructuredTextCompletion' as const;\n\nexport const aiManagementStructuredTextCompletionCommandDefinition = defineCommand({\n key: AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY,\n title: 'Structured text completion',\n description:\n 'Single-turn chat completion without tools (e.g. map OCR text to JSON). Uses the resolved assist model.',\n executionMode: 'both',\n inputs: [],\n outputs: [\n {\n name: 'text',\n title: 'Assistant text',\n description: 'Plain text from the model.',\n interface: { name: 'large-text-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success'],\n },\n capabilities: ['ai'],\n ai: {\n shortDescription: 'Tool-free structured completion for metadata mapping and similar tasks.',\n tags: ['ai-tool', 'ai-chat', 'completion'],\n },\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","//#region ---- AI chat registry command keys (re-exports) ----\n\nexport { AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY } from './chat-generate-image.command.definition';\nexport { AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY } from './chat-transcribe-speech.command.definition';\nexport { AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY } from './chat-synthesize-speech.command.definition';\nexport { AIMANAGEMENT_EXTRACT_DOCUMENT_TEXT_COMMAND_KEY } from './extract-document-text.command.definition';\nexport { AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY } from './structured-text-completion.command.definition';\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { Injectable, signal } from '@angular/core';\nimport type { AXPAiChatTransport } from '../engine/ai-engine.types';\n\n//#endregion\n\n//#region ---- Run context ----\n\nexport interface AXPAiChatToolRunContext {\n assistId: string;\n chatTransport: AXPAiChatTransport;\n /** AiModel catalog row id for the active chat model (when resolved). */\n modelEntityId?: string;\n /** Set during a delegated agent sub-run (specialist executing registry tools). */\n agentId?: string;\n /** Assist or AiAgent catalog `name` (Demisco `agent_uuid` for Demis transport). */\n agentName?: string;\n /** Optional Demisco chat session id (`session_uuid` in multipart). */\n demisSessionUuid?: string;\n}\n\n/**\n * Per chat run: stores which assist and chat transport are active.\n * Injected commands (e.g. image generation) read this instead of receiving assist/transport inside tool args.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPAiChatToolRunContextService {\n private readonly runContext = signal<AXPAiChatToolRunContext | null>(null);\n\n setContext(ctx: AXPAiChatToolRunContext | null): void {\n this.runContext.set(ctx);\n }\n\n getContext(): AXPAiChatToolRunContext | null {\n return this.runContext();\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY } from './chat-generate-image.command.definition';\nimport { AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY } from './chat-synthesize-speech.command.definition';\nimport { AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY } from './chat-transcribe-speech.command.definition';\n\n//#endregion\n\n//#region ---- LLM JSON Schema overrides ----\n\n/**\n * Registry rows map inputs to string-typed JSON schemas. Override parameters for AI chat tools\n * so models receive accurate types (arrays, booleans, nested objects).\n */\nexport function getAiChatCommandLlmParametersOverride(\n commandName: string,\n): Record<string, unknown> | null {\n switch (commandName) {\n case AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY:\n return {\n type: 'object',\n properties: {\n model: {\n type: 'string',\n description:\n 'Optional catalog AiModel row id for image generation. Omit to use options.model on the image delegated specialist row.',\n },\n prompt: {\n type: 'string',\n description: 'Detailed text description of the image to generate.',\n },\n size: {\n type: 'string',\n description: 'Optional size hint for backends that support it (e.g. 1024x1024). May be ignored.',\n },\n style: {\n type: 'string',\n description:\n 'Optional style hint (e.g. photorealistic, flat vector). May be merged into the prompt by the backend.',\n },\n },\n required: ['prompt'],\n };\n case AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY:\n return {\n type: 'object',\n properties: {\n model: {\n type: 'string',\n description:\n 'Optional catalog AiModel row id for speech-to-text. Omit to use options.model on the speech delegated specialist row.',\n },\n fileId: {\n type: 'string',\n description: 'Platform file storage id for the audio file to transcribe.',\n },\n language: {\n type: 'string',\n description: 'Optional language hint (e.g. en) when supported by the provider.',\n },\n },\n required: ['fileId'],\n };\n case AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY:\n return {\n type: 'object',\n properties: {\n model: {\n type: 'string',\n description:\n 'Optional catalog AiModel row id for text-to-speech (purpose tts). Omit to use options.model on the TTS delegated specialist row.',\n },\n text: {\n type: 'string',\n description: 'Plain text to convert to speech.',\n },\n voice: {\n type: 'string',\n description:\n 'Optional OpenAI voice (alloy, echo, fable, onyx, nova, shimmer). Omit to use options.voice or alloy.',\n },\n responseFormat: {\n type: 'string',\n description: 'Optional audio format: mp3, opus, aac, flac, wav, pcm. Default mp3.',\n },\n },\n required: ['text'],\n };\n default:\n return null;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { Injectable, LOCALE_ID, inject } from '@angular/core';\nimport { resolveMultiLanguageString } from '@acorex/core/translation';\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../const';\nimport { isChatPurposeModelRow, normalizeModelPurposes } from '../datasources/ai-model-catalog.datasource';\nimport type {\n AXPAiChatModelListItem,\n AXPAiChatModelListRequest,\n} from '../engine/ai-engine.types';\n\n//#endregion\n\n//#region ---- Row types (entity query) ----\n\ninterface CatalogModelRow {\n id: string;\n name?: string;\n title?: string | AXPMultiLanguageString;\n chatTransport?: string;\n openAiEndpointId?: string;\n maxContextTokens?: number;\n inputPricePerMillion?: number;\n outputPricePerMillion?: number;\n cachedInputPricePerMillion?: number;\n isDisabled?: boolean;\n openAiEndpointIsDisabled?: boolean;\n}\n\ninterface CatalogOpenAiEndpointRow {\n id: string;\n isDisabled?: boolean;\n}\n\n//#endregion\n\n/**\n * Lists chat-purpose AI models (catalog), without using {@link AXPAiEngine}.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPAiAssistChatModelCatalogService {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly localeId = inject(LOCALE_ID);\n\n private readonly modelData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.model.name)\n .data<string, CatalogModelRow, CatalogModelRow, CatalogModelRow, CatalogModelRow>();\n\n private readonly openAiEndpointData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.openAiEndpoint.name)\n .data<\n string,\n CatalogOpenAiEndpointRow,\n CatalogOpenAiEndpointRow,\n CatalogOpenAiEndpointRow,\n CatalogOpenAiEndpointRow\n >();\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * All active chat-purpose models in the catalog (assist / agent policy is applied at engine runtime).\n */\n async listModels(_request?: AXPAiChatModelListRequest): Promise<AXPAiChatModelListItem[]> {\n const queryResult = await this.modelData.query({\n skip: 0,\n take: 500,\n });\n const items = (queryResult?.items ?? []) as CatalogModelRow[];\n let rows = items.filter((x) => isChatPurposeModelRow(x as unknown as Record<string, unknown>));\n\n rows = await this.filterModelsActiveForChat(rows);\n\n return rows.map((x) => ({\n id: x.id,\n name: x.name?.trim() ?? '',\n title:\n resolveMultiLanguageString((x.title ?? x.name ?? x.id) as AXPMultiLanguageString, this.localeId).trim() || x.id,\n modelPurposes: normalizeModelPurposes(x as unknown as Record<string, unknown>),\n chatTransport: x.chatTransport,\n maxContextTokens:\n typeof x.maxContextTokens === 'number' && x.maxContextTokens > 0\n ? x.maxContextTokens\n : undefined,\n inputPricePerMillion:\n typeof x.inputPricePerMillion === 'number' && x.inputPricePerMillion > 0\n ? x.inputPricePerMillion\n : undefined,\n outputPricePerMillion:\n typeof x.outputPricePerMillion === 'number' && x.outputPricePerMillion > 0\n ? x.outputPricePerMillion\n : undefined,\n cachedInputPricePerMillion:\n typeof x.cachedInputPricePerMillion === 'number' && x.cachedInputPricePerMillion > 0\n ? x.cachedInputPricePerMillion\n : undefined,\n }));\n }\n\n //#endregion\n\n //#region ---- Model filtering ----\n\n /**\n * Chat pickers only use models that are enabled and backed by an enabled OpenAI endpoint when applicable.\n */\n private async filterModelsActiveForChat(rows: CatalogModelRow[]): Promise<CatalogModelRow[]> {\n const endpointIds = [\n ...new Set(\n rows\n .filter((r) => String(r.chatTransport ?? '').toLowerCase() === 'openai' && r.openAiEndpointId?.trim())\n .map((r) => r.openAiEndpointId!.trim()),\n ),\n ];\n const endpointDisabled = new Map<string, boolean>();\n for (const id of endpointIds) {\n const ep = await this.openAiEndpointData.byKey(id);\n endpointDisabled.set(id, ep?.isDisabled === true);\n }\n\n return rows.filter((x) => {\n if (x.isDisabled === true) {\n return false;\n }\n if (x.openAiEndpointIsDisabled === true) {\n return false;\n }\n const transport = String(x.chatTransport ?? '').toLowerCase();\n if (transport === 'openai' && x.openAiEndpointId?.trim()) {\n if (endpointDisabled.get(x.openAiEndpointId.trim()) === true) {\n return false;\n }\n }\n return true;\n });\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { Injectable } from '@angular/core';\nimport type { AXPAiChatModelListItem } from '../engine/ai-engine.types';\n\n//#endregion\n\n//#region ---- Service ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXPAiDefaultModelPickerService {\n //#region ---- Public API ----\n\n /**\n * Picks a model from chat/vision catalog candidates: first entry that supports the purpose;\n * otherwise the first candidate.\n */\n pickFromChatCatalogForPurpose(\n models: AXPAiChatModelListItem[],\n purpose: 'chat' | 'vision',\n ): AXPAiChatModelListItem | undefined {\n if (!models.length) {\n return undefined;\n }\n const byPurpose = models.find((m) => modelItemSupportsChatCatalogPurpose(m, purpose));\n if (byPurpose) {\n return byPurpose;\n }\n return models[0];\n }\n\n //#endregion\n}\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction modelItemSupportsChatCatalogPurpose(m: AXPAiChatModelListItem, purpose: 'chat' | 'vision'): boolean {\n const p = m.modelPurposes?.length ? m.modelPurposes : [];\n if (purpose === 'vision') {\n return p.includes('vision');\n }\n return p.includes('chat');\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["PlatformManagementRootConfig","tryParseBalancedJsonObjectAt"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-modules-ai-management.mjs","sources":["../../../../libs/modules/ai-management/src/lib/const.ts","../../../../libs/modules/ai-management/src/lib/manifest.ts","../../../../libs/modules/ai-management/src/lib/entity.provider.ts","../../../../libs/modules/ai-management/src/lib/menu.keys.ts","../../../../libs/modules/ai-management/src/lib/permission.keys.ts","../../../../libs/modules/ai-management/src/lib/menu.provider.ts","../../../../libs/modules/ai-management/src/lib/assist-permission-definition.builder.ts","../../../../libs/modules/ai-management/src/lib/permission-definition.provider.ts","../../../../libs/modules/ai-management/src/lib/settings.keys.ts","../../../../libs/modules/ai-management/src/lib/settings.provider.ts","../../../../libs/modules/ai-management/src/lib/features/datasources/ai-agent-catalog.datasource.ts","../../../../libs/modules/ai-management/src/lib/features/datasources/ai-registry-catalog.datasource.ts","../../../../libs/modules/ai-management/src/lib/features/datasources/ai-model-catalog.datasource.ts","../../../../libs/modules/ai-management/src/lib/features/datasources/output-contract-transcript-segment.datasource.ts","../../../../libs/modules/ai-management/src/lib/features/tags/ai-model-purpose-tag.provider.ts","../../../../libs/modules/ai-management/src/lib/features/services/ai-assist.abstract.ts","../../../../libs/modules/ai-management/src/lib/features/types/ai-assist.types.ts","../../../../libs/modules/ai-management/src/lib/features/engine/ai-engine.ts","../../../../libs/modules/ai-management/src/lib/features/engine/ai-chat-display.util.ts","../../../../libs/modules/ai-management/src/lib/features/engine/ai-platform-runtime-context.builder.ts","../../../../libs/modules/ai-management/src/lib/features/chat/ai-generated-image-persist.ts","../../../../libs/modules/ai-management/src/lib/features/assist/ai-chat-composer-media.helpers.ts","../../../../libs/modules/ai-management/src/lib/features/assist/ai-assist-prompt-box/ai-assist-prompt-box.component.ts","../../../../libs/modules/ai-management/src/lib/features/assist/ai-assist-prompt-box/ai-assist-prompt-box.component.html","../../../../libs/modules/ai-management/src/lib/features/assist/ai-assist-prompt-box.service.ts","../../../../libs/modules/ai-management/src/lib/features/engine/ai-response-format.types.ts","../../../../libs/modules/ai-management/src/lib/features/engine/ai-agent-output-contract.types.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/assist-output-contract-from-input.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/extract-last-assistant-plain-text.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/build-structured-output-retry-user-text.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/parse-structured-assistant-text.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/repair-structured-assistant-parse.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/json-schema-mini-validator.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/validate-against-contract.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/run-structured-output-pipeline.ts","../../../../libs/modules/ai-management/src/lib/features/engine/output-contract-resolve.service.ts","../../../../libs/modules/ai-management/src/lib/features/services/ai-manager.service.ts","../../../../libs/modules/ai-management/src/lib/features/widgets/agent-registry-tool-configurator/agent-registry-tool-configurator-widget.config.ts","../../../../libs/modules/ai-management/src/lib/features/widgets/assist-delegated-agent-configurator/assist-delegated-agent-configurator-widget.config.ts","../../../../libs/modules/ai-management/src/lib/widget-definition.provider.ts","../../../../libs/modules/ai-management/src/lib/features/engine/output-contract-transcript-segment.builtin-providers.ts","../../../../libs/modules/ai-management/src/lib/ai-management.module.ts","../../../../libs/modules/ai-management/src/lib/features/utils/ai-delegated-agent-prompt-preview.util.ts","../../../../libs/modules/ai-management/src/lib/features/utils/assist-initial-messages.util.ts","../../../../libs/modules/ai-management/src/lib/features/utils/assist-starter-prompts.util.ts","../../../../libs/modules/ai-management/src/lib/features/tools/chat-generate-image.command.definition.ts","../../../../libs/modules/ai-management/src/lib/features/tools/chat-transcribe-speech.command.definition.ts","../../../../libs/modules/ai-management/src/lib/features/tools/chat-synthesize-speech.command.definition.ts","../../../../libs/modules/ai-management/src/lib/features/tools/extract-document-text.command.definition.ts","../../../../libs/modules/ai-management/src/lib/features/tools/structured-text-completion.command.definition.ts","../../../../libs/modules/ai-management/src/lib/features/tools/ai-chat-tool.command-keys.ts","../../../../libs/modules/ai-management/src/lib/features/tools/ai-chat-tool-run-context.service.ts","../../../../libs/modules/ai-management/src/lib/features/tools/ai-chat-tool.llm-parameters.ts","../../../../libs/modules/ai-management/src/lib/features/engine/ai-engine.types.ts","../../../../libs/modules/ai-management/src/lib/features/engine/ai-effective-output-contract.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/validate-structured-assistant-response.ts","../../../../libs/modules/ai-management/src/lib/features/services/ai-assist-chat-model-catalog.service.ts","../../../../libs/modules/ai-management/src/lib/features/services/ai-default-model-picker.service.ts","../../../../libs/modules/ai-management/src/acorex-modules-ai-management.ts"],"sourcesContent":["//#region ---- Module Config ----\n\nconst config = {\n i18n: 'ai-management',\n module: 'AiManagement',\n route: 'ai-management',\n};\n\nexport const RootConfig = {\n config,\n module: {\n name: config.module,\n route: config.route,\n title: `@${config.i18n}:module.title`,\n icon: 'fa-light fa-robot',\n },\n entities: {\n model: {\n name: 'AiModel',\n fullName: `${config.module}.AiModel`,\n title: '@ai-management:models.entities.model.title',\n titlePlural: '@ai-management:models.entities.model.plural',\n icon: 'fa-light fa-microchip',\n },\n assist: {\n name: 'Assist',\n fullName: `${config.module}.Assist`,\n title: '@ai-management:assists.entities.assist.title',\n titlePlural: '@ai-management:assists.entities.assist.plural',\n icon: 'fa-light fa-user-robot',\n },\n agent: {\n name: 'AiAgent',\n fullName: `${config.module}.AiAgent`,\n title: '@ai-management:agents.entities.agent.title',\n titlePlural: '@ai-management:agents.entities.agent.plural',\n icon: 'fa-light fa-people-group',\n },\n openAiEndpoint: {\n name: 'OpenAiEndpoint',\n fullName: `${config.module}.OpenAiEndpoint`,\n title: '@ai-management:open-ai-endpoints.entities.endpoint.title',\n titlePlural: '@ai-management:open-ai-endpoints.entities.endpoint.plural',\n icon: 'fa-light fa-plug',\n },\n rule: {\n name: 'AiRule',\n fullName: `${config.module}.AiRule`,\n title: '@ai-management:rules.entities.rule.title',\n titlePlural: '@ai-management:rules.entities.rule.plural',\n icon: 'fa-light fa-list-check',\n },\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex/platform/core';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * AI Management Module Manifest.\n * Defines module metadata for AI provider and API key management.\n */\nexport const AiManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n dependencies: [],\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPEntity } from '@acorex/platform/common';\nimport { AXPEntityDefinitionLoader, AXPEntityPreloadEntity } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Entity Provider ----\n\n@Injectable()\nexport class AXMAiManagementEntityProvider implements AXPEntityDefinitionLoader {\n preload(): AXPEntityPreloadEntity[] {\n const module = RootConfig.module.name;\n return Object.values(RootConfig.entities).map((entity: { name: string }) => ({\n module,\n entity: entity.name,\n }));\n }\n\n async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\n if (moduleName !== RootConfig.module.name) return null;\n switch (entityName) {\n case RootConfig.entities.model.name:\n return (await import('./entities/model/model.entity')).factory();\n case RootConfig.entities.assist.name:\n return (await import('./entities/assist/assist.entity')).assistFactory();\n case RootConfig.entities.agent.name:\n return (await import('./entities/agent/agent.entity')).agentFactory();\n case RootConfig.entities.openAiEndpoint.name:\n return (await import('./entities/open-ai-endpoint/open-ai-endpoint.entity')).openAiEndpointFactory();\n case RootConfig.entities.rule.name:\n return (await import('./entities/rule/rule.entity')).ruleFactory();\n default:\n return null;\n }\n }\n\n async list(): Promise<{ name: string; module: string }[]> {\n const m = RootConfig.module.name;\n return Promise.resolve(\n Object.values(RootConfig.entities).map((e) => ({ name: e.name, module: m }))\n );\n }\n}\n\n//#endregion\n","//#region ---- Menu Keys ----\n\n/**\n * AI Management menu keys.\n * Pattern: AiManagement:Menu:{Path}\n */\nexport const AXPAiManagementMenuKeys = {\n /** OpenAI-compatible HTTP endpoints (base URL + API key). */\n OpenAiEndpoints: 'AiManagement:Menu:OpenAiEndpoints',\n /** List of AI models (from providers). */\n Models: 'AiManagement:Menu:Models',\n /** List of Assists. */\n Assists: 'AiManagement:Menu:Assists',\n /** Delegated specialist agents (supervisor routing). */\n Agents: 'AiManagement:Menu:Agents',\n /** Reusable system-prompt rules (Markdown fragments). */\n Rules: 'AiManagement:Menu:Rules',\n} as const;\n\n//#endregion\n","//#region ---- Permission keys ----\n\n/** Dynamic assist access permissions (`Assist.{name}.Use`). */\nexport const AXMAiAssistPermissionKeys = {\n Use: 'AiManagement:Permission:Assist.Use',\n useForAssist: (assistName: string): string => `AiManagement:Permission:Assist.${assistName}.Use`,\n} as const;\n\nexport const AXMPermissionsKeys = {\n AiManagement: {\n Management: 'AiManagement:Permission:Management',\n Assist: AXMAiAssistPermissionKeys,\n },\n} as const;\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPCommonMenuKeys } from '@acorex/modules/common';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex/platform/common';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from './const';\nimport { AXPAiManagementMenuKeys } from './menu.keys';\nimport { AXMPermissionsKeys } from './permission.keys';\n\n//#endregion\n\n//#region ---- Menu Provider ----\n\n@Injectable()\nexport class AXMAiManagementMenuProvider implements AXPMenuProvider {\n private readonly entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const module = RootConfig.module;\n\n //#region ---- Configuration > AI Management (assists, models) ----\n\n const aiManagementConfigMenu = context.find(AXPCommonMenuKeys.AiManagementConfig);\n if (!aiManagementConfigMenu.exists) {\n context.find(AXPCommonMenuKeys.Configuration).addItems([\n {\n name: AXPCommonMenuKeys.AiManagementConfig,\n text: '@general:menus.ai-management.title',\n icon: module.icon,\n type: 'menu',\n priority: 8941,\n policy: {\n features: [module.name],\n permissions: [AXMPermissionsKeys.AiManagement.Management],\n },\n children: [],\n },\n ]);\n }\n\n const aiMenuPolicy = {\n features: [module.name],\n permissions: [AXMPermissionsKeys.AiManagement.Management],\n };\n\n context.find(AXPCommonMenuKeys.AiManagementConfig).addItems([\n {\n name: AXPAiManagementMenuKeys.Agents,\n text: '@ai-management:module.menus.agents.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.agent.name),\n icon: RootConfig.entities.agent.icon,\n priority: -1,\n policy: aiMenuPolicy,\n },\n {\n name: AXPAiManagementMenuKeys.Assists,\n text: '@ai-management:module.menus.assists.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.assist.name),\n icon: RootConfig.entities.assist.icon,\n priority: 0,\n policy: aiMenuPolicy,\n },\n {\n name: AXPAiManagementMenuKeys.OpenAiEndpoints,\n text: '@ai-management:module.menus.open-ai-endpoints.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.openAiEndpoint.name),\n icon: RootConfig.entities.openAiEndpoint.icon,\n priority: 2,\n policy: aiMenuPolicy,\n },\n {\n name: AXPAiManagementMenuKeys.Models,\n text: '@ai-management:module.menus.models.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.model.name),\n icon: RootConfig.entities.model.icon,\n priority: 1,\n policy: aiMenuPolicy,\n },\n {\n name: AXPAiManagementMenuKeys.Rules,\n text: '@ai-management:module.menus.rules.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.rule.name),\n icon: RootConfig.entities.rule.icon,\n priority: 3,\n policy: aiMenuPolicy,\n },\n ]);\n\n //#endregion\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\n\nimport type { AXMAiManagementAssistEntityModel } from './entities/assist/assist.types';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** One assist row mapped for permission definition children. */\nexport interface AXMAiAssistPermissionRow {\n name: string;\n title: string;\n description?: string;\n}\n\n//#endregion\n\n//#region ---- Catalog load ----\n\n/**\n * Loads assist catalog rows for dynamic permission definitions.\n * Skips rows without a stable programmatic `name`.\n */\nexport async function loadAssistPermissionRows(\n entityService: AXPEntityService,\n localeId: string,\n): Promise<AXMAiAssistPermissionRow[]> {\n const assistData = entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assist.name)\n .data<\n string,\n AXMAiManagementAssistEntityModel,\n AXMAiManagementAssistEntityModel,\n AXMAiManagementAssistEntityModel,\n AXMAiManagementAssistEntityModel\n >();\n\n const queryResult = await assistData.query({\n skip: 0,\n take: 500,\n sort: [{ field: 'name', dir: 'asc' }],\n });\n\n const items = (queryResult?.items ?? []) as AXMAiManagementAssistEntityModel[];\n const rows: AXMAiAssistPermissionRow[] = [];\n\n for (const item of items) {\n const name = item.name?.trim();\n if (!name) {\n continue;\n }\n\n const title = resolveMultiLanguageString(item.title, localeId).trim() || name;\n const descriptionRaw = item.description\n ? resolveMultiLanguageString(item.description, localeId).trim()\n : '';\n const description = descriptionRaw || undefined;\n\n rows.push({ name, title, description });\n }\n\n return rows.sort((a, b) => a.title.localeCompare(b.title, localeId, { sensitivity: 'base' }));\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex/platform/auth';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject, Injectable, LOCALE_ID } from '@angular/core';\n\nimport { loadAssistPermissionRows } from './assist-permission-definition.builder';\nimport { RootConfig } from './const';\nimport { AXMPermissionsKeys } from './permission.keys';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n private readonly entityService = inject(AXPEntityService);\n private readonly localeId = inject(LOCALE_ID);\n\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXMPermissionsKeys.AiManagement;\n const modulePermissions = '@ai-management:module.permissions';\n\n let assistRows = await loadAssistPermissionRows(this.entityService, this.localeId).catch(() => []);\n\n const groupBuilder = context\n .addGroup(\n RootConfig.module.name,\n `${modulePermissions}.title`,\n `${modulePermissions}.description`,\n )\n .addPermission(\n keys.Management,\n `${modulePermissions}.manage.title`,\n `${modulePermissions}.manage.description`,\n )\n .endPermission();\n\n let assistPermissionBuilder = groupBuilder.addPermission(\n keys.Assist.Use,\n `${modulePermissions}.assist-use.title`,\n `${modulePermissions}.assist-use.description`,\n );\n\n for (const row of assistRows) {\n assistPermissionBuilder = assistPermissionBuilder.addChild(\n keys.Assist.useForAssist(row.name),\n row.title,\n row.description,\n );\n }\n\n assistPermissionBuilder.endPermission().endGroup();\n }\n}\n\n//#endregion\n","//#region ---- Setting Keys ----\n\n/**\n * AI Management setting keys.\n * Pattern: AiManagement:Setting:{Path}\n */\nexport const AXPAiManagementSettings = {\n /** Assist primary key (`id`) used when no assist is explicitly selected (tenant-scoped). */\n DefaultAssistId: 'AiManagement:Setting:DefaultAssistId',\n\n /**\n * System instructions prepended to every assist/agent chat system prompt in {@link AXPAiEngine}.\n * Empty string means no global layer (default).\n */\n GlobalSystemPrompt: 'AiManagement:Setting:GlobalSystemPrompt',\n\n Providers: {\n Gemini: {\n ApiKey: 'AiManagement:Setting:Providers.Gemini.ApiKey',\n },\n Demis: {\n BearerToken: 'AiManagement:Setting:Providers.Demis.BearerToken',\n },\n },\n} as const;\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPSettingDefinitionProvider,\n AXPSettingDefinitionProviderContext,\n} from '@acorex/platform/common';\nimport { AXPWidgetsList } from '@acorex/modules/common';\nimport { RootConfig } from './const';\nimport { AXPAiManagementSettings } from './settings.keys';\nimport { objectKeyValueTransforms } from '@acorex/platform/core';\n\n//#endregion\n\n//#region ---- Settings Provider ----\n\nconst I18N = '@ai-management:settings';\n\nexport class AXMAiManagementSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n context\n .addGroup(\n 'ai-settings',\n `${I18N}.group.nav-title`,\n `${I18N}.group.description`,\n 'fa-light fa-robot',\n `${I18N}.group.title`,\n 60,\n )\n .addSection(\n 'global-ai',\n `${I18N}.section.global-ai.title`,\n `${I18N}.section.global-ai.description`,\n )\n .addSetting({\n key: AXPAiManagementSettings.DefaultAssistId,\n title: `${I18N}.default-assist.name.title`,\n scope: 'T',\n isInherited: true,\n valueTransforms: objectKeyValueTransforms('name'),\n widget: {\n type: AXPWidgetsList.Editors.LookupBox,\n options: {\n entity: `${RootConfig.module.name}.${RootConfig.entities.assist.name}`,\n look: 'select',\n multiple: false,\n textField: 'title',\n valueField: 'name',\n hasClearButton: true,\n },\n },\n description: `${I18N}.default-assist.name.description`,\n })\n .addSetting({\n key: AXPAiManagementSettings.GlobalSystemPrompt,\n title: `${I18N}.global-system-prompt.prefix.title`,\n scope: 'T',\n isInherited: true,\n defaultValue: '',\n widget: {\n type: AXPWidgetsList.Editors.LargeTextBox,\n layout: {\n stacked: true,\n },\n options: {\n rows: 8,\n placeholder: `${I18N}.global-system-prompt.prefix.placeholder`,\n },\n },\n description: `${I18N}.global-system-prompt.prefix.description`,\n })\n .endSection()\n .addSection('gemini', `${I18N}.section.gemini.title`, `${I18N}.section.gemini.description`)\n .addSetting({\n key: AXPAiManagementSettings.Providers.Gemini.ApiKey,\n title: `${I18N}.gemini.api-key.title`,\n scope: 'T',\n isInherited: true,\n defaultValue: '',\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n options: {\n placeholder: `${I18N}.gemini.api-key.placeholder`,\n },\n },\n description: `${I18N}.gemini.api-key.description`,\n })\n .endSection()\n .addSection('demis', `${I18N}.section.demis.title`, `${I18N}.section.demis.description`)\n .addSetting({\n key: AXPAiManagementSettings.Providers.Demis.BearerToken,\n title: `${I18N}.demis.bearer-token.title`,\n scope: 'T',\n isInherited: true,\n defaultValue: '',\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n options: {\n placeholder: `${I18N}.demis.bearer-token.placeholder`,\n },\n },\n description: `${I18N}.demis.bearer-token.description`,\n })\n .endSection()\n .endGroup();\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPWidgetsList } from '@acorex/modules/common';\nimport { AXDataSource } from '@acorex/cdk/common';\nimport { AXPDataSourceDefinition, AXPDataSourceDefinitionProvider, AXPFilterDefinition } from '@acorex/platform/core';\nimport { AXPEntityDetailDto, AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\n\n//#endregion\n\n/** Registry name for AiAgent catalog rows (delegated specialist definitions). */\nexport const AI_AGENT_CATALOG_DATASOURCE_NAME = 'ai-management-agent-catalog';\n\n//#region ---- Provider ----\n\n@Injectable()\nexport class AXMAiAgentCatalogDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n private readonly entityService = inject(AXPEntityService);\n\n items(): Promise<AXPDataSourceDefinition[]> {\n const accessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.agent.name)\n .data<string, AXPEntityDetailDto<string>, AXPEntityDetailDto<string>>();\n\n const columns = [\n { name: 'id', title: 'ID', datatype: 'uuid', type: AXPWidgetsList.Editors.TextBox },\n { name: 'title', title: 'Title', datatype: 'string', type: AXPWidgetsList.Editors.TextBox },\n { name: 'name', title: 'Name', datatype: 'string', type: AXPWidgetsList.Editors.TextBox },\n ];\n\n const filters = [\n {\n field: 'title',\n title: 'Title',\n operator: { type: 'contains' },\n widget: { type: AXPWidgetsList.Editors.TextBox },\n filterType: { advance: true, inline: true },\n } as AXPFilterDefinition,\n ];\n\n return Promise.resolve([\n {\n name: AI_AGENT_CATALOG_DATASOURCE_NAME,\n title: 'AI Agents (delegated specialists)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => {\n const res = await accessor.query({\n skip: e?.skip ?? 0,\n take: e?.take ?? 500,\n sort: [{ field: 'title', dir: 'asc' }],\n });\n return {\n items: (res.items ?? []) as unknown[],\n total: res.total ?? (res.items?.length ?? 0),\n };\n },\n byKey: async (key: unknown) => {\n return (await accessor.byKey(key as string)) as unknown;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n ]);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXDataSource, type AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { RootConfig as PlatformManagementRootConfig } from '@acorex/modules/platform-management';\nimport {\n AXPDataSourceDefinition,\n AXPDataSourceDefinitionProvider,\n AXPFilterDefinition,\n type AXPQueryRequest,\n} from '@acorex/platform/core';\nimport { AXPEntityDetailDto, AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { inject, Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Constants ----\n\n/** AI-capable command definitions for specialist registry scope (matches AiAgent entity lookup filter). */\nexport const AI_COMMAND_REGISTRY_CATALOG_DATASOURCE_NAME = 'ai-management-command-registry-catalog';\n\n/** AI-capable query definitions for specialist registry scope. */\nexport const AI_QUERY_REGISTRY_CATALOG_DATASOURCE_NAME = 'ai-management-query-registry-catalog';\n\n/** Typed so nested `operator.type` literals are not widened to `string` (required by {@link AXDataSourceFilterOption}). */\nconst AI_CAPABILITY_FILTER: AXDataSourceFilterOption = {\n logic: 'and',\n filters: [\n { field: 'active', operator: { type: 'equal' }, value: true },\n {\n logic: 'or',\n filters: [\n { field: 'capabilities', operator: { type: 'equal' }, value: 'ai' },\n { field: 'capabilities', operator: { type: 'startsWith' }, value: 'ai,' },\n { field: 'capabilities', operator: { type: 'contains' }, value: ', ai' },\n ],\n },\n ],\n};\n\n//#endregion\n\n//#region ---- Command catalog ----\n\n@Injectable()\nexport class AXMAiCommandRegistryCatalogDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n private readonly entityService = inject(AXPEntityService);\n\n items(): Promise<AXPDataSourceDefinition[]> {\n const accessor = this.entityService\n .withEntity(PlatformManagementRootConfig.module.name, PlatformManagementRootConfig.entities.commandDefinition.name)\n .data<string, AXPEntityDetailDto<string>, AXPEntityDetailDto<string>>();\n\n const columns = [\n { name: 'id', title: 'ID', datatype: 'uuid', type: AXPWidgetsCatalog.text },\n { name: 'catalogTitle', title: 'Title', datatype: 'string', type: AXPWidgetsCatalog.text },\n { name: 'name', title: 'Name', datatype: 'string', type: AXPWidgetsCatalog.text },\n ];\n\n const filters = [\n {\n field: 'catalogTitle',\n title: 'Title',\n operator: { type: 'contains' },\n widget: { type: AXPWidgetsCatalog.text },\n filterType: { advance: true, inline: true },\n } as AXPFilterDefinition,\n ];\n\n return Promise.resolve([\n {\n name: AI_COMMAND_REGISTRY_CATALOG_DATASOURCE_NAME,\n title: 'Command definitions (AI registry)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => {\n const request: AXPQueryRequest = {\n skip: e?.skip ?? 0,\n take: e?.take ?? 500,\n sort: [{ field: 'catalogTitle', dir: 'asc' }],\n filter: AI_CAPABILITY_FILTER,\n };\n const res = await accessor.query(request);\n return {\n items: (res.items ?? []) as unknown[],\n total: res.total ?? (res.items?.length ?? 0),\n };\n },\n byKey: async (key: unknown) => {\n return (await accessor.byKey(key as string)) as unknown;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'catalogTitle', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n ]);\n }\n}\n\n//#endregion\n\n//#region ---- Query catalog ----\n\n@Injectable()\nexport class AXMAiQueryRegistryCatalogDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n private readonly entityService = inject(AXPEntityService);\n\n items(): Promise<AXPDataSourceDefinition[]> {\n const accessor = this.entityService\n .withEntity(PlatformManagementRootConfig.module.name, PlatformManagementRootConfig.entities.queryDefinition.name)\n .data<string, AXPEntityDetailDto<string>, AXPEntityDetailDto<string>>();\n\n const columns = [\n { name: 'id', title: 'ID', datatype: 'uuid', type: AXPWidgetsCatalog.text },\n { name: 'catalogTitle', title: 'Title', datatype: 'string', type: AXPWidgetsCatalog.text },\n { name: 'name', title: 'Name', datatype: 'string', type: AXPWidgetsCatalog.text },\n ];\n\n const filters = [\n {\n field: 'catalogTitle',\n title: 'Title',\n operator: { type: 'contains' },\n widget: { type: AXPWidgetsCatalog.text },\n filterType: { advance: true, inline: true },\n } as AXPFilterDefinition,\n ];\n\n return Promise.resolve([\n {\n name: AI_QUERY_REGISTRY_CATALOG_DATASOURCE_NAME,\n title: 'Query definitions (AI registry)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => {\n const request: AXPQueryRequest = {\n skip: e?.skip ?? 0,\n take: e?.take ?? 500,\n sort: [{ field: 'catalogTitle', dir: 'asc' }],\n filter: AI_CAPABILITY_FILTER,\n };\n const res = await accessor.query(request);\n return {\n items: (res.items ?? []) as unknown[],\n total: res.total ?? (res.items?.length ?? 0),\n };\n },\n byKey: async (key: unknown) => {\n return (await accessor.byKey(key as string)) as unknown;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'catalogTitle', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n ]);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPWidgetsList } from '@acorex/modules/common';\nimport { AXDataSource } from '@acorex/cdk/common';\nimport { AXPDataSourceDefinition, AXPDataSourceDefinitionProvider, AXPFilterDefinition } from '@acorex/platform/core';\nimport { AXPEntityDetailDto, AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\n\n//#endregion\n\n/**\n * Full AI model catalog for chat (rows that include `chat` or `vision` in `modelPurposes`).\n * Registry name: {@link AI_MODEL_CATALOG_DATASOURCE_NAME}.\n */\nexport const AI_MODEL_CATALOG_DATASOURCE_NAME = 'ai-management-model-catalog';\n\n/**\n * Image-generation models only (`modelPurposes` includes `image`).\n * Registry name: {@link AI_MODEL_IMAGE_CATALOG_DATASOURCE_NAME}.\n */\nexport const AI_MODEL_IMAGE_CATALOG_DATASOURCE_NAME = 'ai-management-model-catalog-image';\n\n/**\n * Speech-to-text models only (`modelPurposes` includes `speech`).\n * Registry name: {@link AI_MODEL_SPEECH_CATALOG_DATASOURCE_NAME}.\n */\nexport const AI_MODEL_SPEECH_CATALOG_DATASOURCE_NAME = 'ai-management-model-catalog-speech';\n\n/**\n * Text-to-speech models only (`modelPurposes` includes `tts`).\n * Registry name: {@link AI_MODEL_TTS_CATALOG_DATASOURCE_NAME}.\n */\nexport const AI_MODEL_TTS_CATALOG_DATASOURCE_NAME = 'ai-management-model-catalog-tts';\n\nexport type AXMAiModelPurposeSlug = 'chat' | 'vision' | 'image' | 'speech' | 'tts';\n\n/** Reads `modelPurposes` from a catalog row (API/mock must provide the array). */\nexport function readModelPurposes(row: Record<string, unknown> | null | undefined): string[] {\n if (!row) {\n return [];\n }\n const multi = row['modelPurposes'];\n if (!Array.isArray(multi)) {\n return [];\n }\n const out = multi\n .map((x) => String(x).trim())\n .filter((x) => x.length > 0);\n return [...new Set(out)];\n}\n\nexport function modelRowHasPurpose(\n row: Record<string, unknown> | null | undefined,\n purpose: AXMAiModelPurposeSlug,\n): boolean {\n return readModelPurposes(row).includes(purpose);\n}\n\n/** Rows usable in chat / completion pickers: include `chat` or `vision`; not image/speech/tts-only. */\nexport function isChatPurposeModelRow(row: Record<string, unknown> | null | undefined): boolean {\n const p = readModelPurposes(row);\n return p.includes('chat') || p.includes('vision');\n}\n\nexport function isImagePurposeModelRow(row: Record<string, unknown> | null | undefined): boolean {\n return modelRowHasPurpose(row, 'image');\n}\n\nexport function isSpeechPurposeModelRow(row: Record<string, unknown> | null | undefined): boolean {\n return modelRowHasPurpose(row, 'speech');\n}\n\nexport function isTtsPurposeModelRow(row: Record<string, unknown> | null | undefined): boolean {\n return modelRowHasPurpose(row, 'tts');\n}\n\n//#region ---- Provider ----\n\n@Injectable()\nexport class AXMAiModelCatalogDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n private readonly entityService = inject(AXPEntityService);\n\n items(): Promise<AXPDataSourceDefinition[]> {\n const accessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.model.name)\n .data<string, AXPEntityDetailDto<string>, AXPEntityDetailDto<string>>();\n\n const columns = [\n {\n name: 'id',\n title: 'ID',\n datatype: 'uuid',\n type: AXPWidgetsList.Editors.TextBox,\n },\n {\n name: 'title',\n title: 'Title',\n datatype: 'string',\n type: AXPWidgetsList.Editors.TextBox,\n },\n ];\n\n const filters = [\n {\n field: 'title',\n title: 'Title',\n operator: { type: 'contains' },\n widget: { type: AXPWidgetsList.Editors.TextBox },\n filterType: { advance: true, inline: true },\n } as AXPFilterDefinition,\n ];\n\n const loadFiltered = async (\n e: { skip?: number; take?: number } | undefined,\n keep: (row: Record<string, unknown>) => boolean,\n ) => {\n const res = await accessor.query({\n skip: e?.skip ?? 0,\n take: e?.take ?? 500,\n sort: [{ field: 'title', dir: 'asc' }],\n });\n const all = (res.items ?? []) as unknown as Record<string, unknown>[];\n const items = all.filter(keep);\n return {\n items,\n total: items.length,\n };\n };\n\n return Promise.resolve([\n {\n name: AI_MODEL_CATALOG_DATASOURCE_NAME,\n title: 'AI Models (chat)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => loadFiltered(e, isChatPurposeModelRow),\n byKey: async (key: unknown) => {\n const row = (await accessor.byKey(key as string)) as unknown as Record<string, unknown> | null;\n if (!row || !isChatPurposeModelRow(row)) {\n return null;\n }\n return row;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n {\n name: AI_MODEL_IMAGE_CATALOG_DATASOURCE_NAME,\n title: 'AI Models (image)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => loadFiltered(e, (row) => isImagePurposeModelRow(row)),\n byKey: async (key: unknown) => {\n const row = (await accessor.byKey(key as string)) as unknown as Record<string, unknown> | null;\n if (!row || !isImagePurposeModelRow(row)) {\n return null;\n }\n return row;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n {\n name: AI_MODEL_SPEECH_CATALOG_DATASOURCE_NAME,\n title: 'AI Models (speech)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => loadFiltered(e, (row) => isSpeechPurposeModelRow(row)),\n byKey: async (key: unknown) => {\n const row = (await accessor.byKey(key as string)) as unknown as Record<string, unknown> | null;\n if (!row || !isSpeechPurposeModelRow(row)) {\n return null;\n }\n return row;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n {\n name: AI_MODEL_TTS_CATALOG_DATASOURCE_NAME,\n title: 'AI Models (text-to-speech)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => loadFiltered(e, (row) => isTtsPurposeModelRow(row)),\n byKey: async (key: unknown) => {\n const row = (await accessor.byKey(key as string)) as unknown as Record<string, unknown> | null;\n if (!row || !isTtsPurposeModelRow(row)) {\n return null;\n }\n return row;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n ]);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPWidgetsList } from '@acorex/modules/common';\nimport { AXDataSource } from '@acorex/cdk/common';\nimport {\n AXPDataSourceDefinition,\n AXPDataSourceDefinitionProvider,\n} from '@acorex/platform/core';\nimport {\n AXPOutputContractTranscriptSegmentService,\n type AXPOutputTranscriptSegmentId,\n} from '@acorex/platform/common';\nimport { inject, Injectable } from '@angular/core';\n\n//#endregion\n\n/** Registry name for transcript-segment presets ({@link AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER}). */\nexport const AI_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_DATASOURCE_NAME =\n 'ai-management-output-contract-transcript-segment';\n\n//#region ---- Row shape ----\n\nexport interface AXMOutputContractTranscriptSegmentDataSourceRow {\n id: AXPOutputTranscriptSegmentId;\n name: AXPOutputTranscriptSegmentId;\n title: string;\n description?: string;\n}\n\n//#endregion\n\n//#region ---- Provider ----\n\n@Injectable()\nexport class AXMOutputContractTranscriptSegmentDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n private readonly segmentService = inject(AXPOutputContractTranscriptSegmentService);\n\n items(): Promise<AXPDataSourceDefinition[]> {\n const columns = [\n { name: 'id', title: 'ID', datatype: 'string', type: AXPWidgetsList.Editors.TextBox },\n { name: 'title', title: 'Title', datatype: 'string', type: AXPWidgetsList.Editors.TextBox },\n ];\n\n return Promise.resolve([\n {\n name: AI_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_DATASOURCE_NAME,\n title: 'AI output contract (transcript segment)',\n source: () =>\n new AXDataSource({\n key: 'id',\n load: async () => {\n const definitions = await this.segmentService.getAll();\n const items: AXMOutputContractTranscriptSegmentDataSourceRow[] = definitions.map((d) => ({\n id: d.name,\n name: d.name,\n title: d.title,\n ...(d.description ? { description: d.description } : {}),\n }));\n return { items, total: items.length };\n },\n byKey: async (key) => {\n const definition = await this.segmentService.get(key as AXPOutputTranscriptSegmentId);\n if (!definition) {\n return null;\n }\n return {\n id: definition.name,\n name: definition.name,\n title: definition.title,\n ...(definition.description ? { description: definition.description } : {}),\n };\n },\n pageSize: 100,\n }),\n columns,\n filters: [],\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n ]);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPTag, AXPTagProvider } from '@acorex/platform/core';\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n/**\n * System tags for the AiModel entity `modelPurposes` field (tag-editor).\n * `title` values are stored as-is on the entity; keep them stable slugs.\n */\nconst AI_MODEL_PURPOSE_TAGS: AXPTag[] = [\n {\n id: 'ai-model-purpose-chat',\n title: 'chat',\n color: '#0284c7',\n description: 'Chat / text completion',\n scope: 'system',\n },\n {\n id: 'ai-model-purpose-vision',\n title: 'vision',\n color: '#7c3aed',\n description: 'Multimodal (image input in chat)',\n scope: 'system',\n },\n {\n id: 'ai-model-purpose-image',\n title: 'image',\n color: '#db2777',\n description: 'Image generation',\n scope: 'system',\n },\n {\n id: 'ai-model-purpose-speech',\n title: 'speech',\n color: '#16a34a',\n description: 'Speech to text',\n scope: 'system',\n },\n {\n id: 'ai-model-purpose-tts',\n title: 'tts',\n color: '#ea580c',\n description: 'Text to speech',\n scope: 'system',\n },\n];\n\n//#region ---- Provider ----\n\n@Injectable()\nexport class AXMAiModelPurposeTagProvider extends AXPTagProvider {\n readonly name = 'ai-model-purpose';\n\n override provide(): Promise<AXPTag[]> {\n return Promise.resolve(AI_MODEL_PURPOSE_TAGS);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { Injectable } from '@angular/core';\nimport type { AXPAiAssistRunInput, AXPAiAssistRunResult, AXPAiAssistShowOptions } from '../types/ai-assist.types';\n\n//#endregion\n\n//#region ---- Abstract token ----\n\n/**\n * Optional cross-cutting AI assist: programmatic {@link run} and dialog {@link show}.\n * Implemented by {@link AXPAiManagerService}. Consumers outside ai-management should prefer hooks or optional injection.\n */\n@Injectable()\nexport abstract class AXPAiAssistService {\n abstract run(input: AXPAiAssistRunInput): Promise<AXPAiAssistRunResult>;\n\n /** Opens prompt UI; on Send runs {@link run} and closes the dialog. Cancel resolves `null`. */\n abstract show(options: AXPAiAssistShowOptions): Promise<AXPAiAssistRunResult | null>;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPAiAgentOutputContract } from '../engine/ai-agent-output-contract.types';\n\n//#endregion\n\n//#region ---- Structured output ----\n\n/** Default max completion tokens when the AiModel row has no `maxOutputTokens` and the caller omits `maxTokens`. */\nexport const AXPAiAssistDefaultStructuredMaxTokens = 128_000;\n\n/** Default maximum follow-up turns after the first model response when validating structured JSON (implementation may use this). */\nexport const AXPAiAssistDefaultMaxStructuredRetries = 3;\n\n/**\n * Validates parsed JSON from the assistant. Return the validated value (possibly narrowed), or throw with a message\n * the pipeline can send back to the model on retry.\n */\nexport type AXPAiStructuredValidator<T = unknown> = (parsed: unknown) => T | Promise<T>;\n\n/**\n * Thrown when {@link AXPAiAssistRunInput.expectStructuredOutput} is true but the assistant output could not be\n * parsed and optionally validated after all attempts.\n */\nexport class AXPAiStructuredOutputError extends Error {\n /** 1-based count of engine runs performed for this structured-output session. */\n readonly attempts: number;\n\n /** Truncated snapshot of the last assistant plain text (for debugging). */\n readonly lastAssistantText: string;\n\n /** Human-readable validation or parse failure detail. */\n readonly validationMessage: string;\n\n /** Why the pipeline stopped. */\n readonly code?: 'duplicate_assistant_output' | 'validation_exhausted';\n\n constructor(options: {\n message: string;\n attempts: number;\n lastAssistantText: string;\n validationMessage: string;\n cause?: unknown;\n code?: 'duplicate_assistant_output' | 'validation_exhausted';\n }) {\n super(options.message, options.cause !== undefined ? { cause: options.cause } : undefined);\n this.name = 'AXPAiStructuredOutputError';\n this.attempts = options.attempts;\n this.lastAssistantText = options.lastAssistantText;\n this.validationMessage = options.validationMessage;\n this.code = options.code;\n }\n}\n\n//#endregion\n\n//#region ---- Prompt surface ----\n\n/** One persisted user attachment (same storage contract as the AI chat composer). */\nexport interface AXPAiAssistUserMediaAttachment {\n /** `image` / `audio` / `file` (PDF, text, spreadsheets, and other document MIME types). */\n kind: 'image' | 'audio' | 'file';\n fileId: string;\n mimeType: string;\n name?: string;\n}\n\n/**\n * Payload when submitting the assist prompt box (text, optional target assist/agent, optional media).\n */\nexport interface AXPAiAssistPromptSubmitPayload {\n prompt: string;\n assistId?: string;\n directAgentId?: string;\n userMediaAttachments: AXPAiAssistUserMediaAttachment[];\n}\n\n//#endregion\n\n//#region ---- Context & run ----\n\n/**\n * Optional structured hints for a single assist run (serialized into the user message by the implementation).\n */\nexport interface AXPAiAssistRunContext {\n /** Short bullet hints appended to the prompt for the model. */\n hints?: string[];\n /** Extra system-level instruction for this run (implementation may emit a system message). */\n systemInstruction?: string;\n /** Arbitrary structured payload (JSON-serialized in the user message when present). */\n structuredContext?: unknown;\n}\n\n/**\n * Input for the AI assist `run` API (implemented in ai-management).\n */\nexport interface AXPAiAssistRunInput {\n prompt: string;\n /**\n * Optional images, audio, or documents (`fileId` from tenant storage). When non-empty, the implementation builds one multimodal\n * user message (same shape as the AI chat composer) plus the serialized prompt body as text segments.\n */\n userMediaAttachments?: AXPAiAssistUserMediaAttachment[];\n context?: AXPAiAssistRunContext;\n /**\n * Catalog assist id. When omitted together with {@link directAgentId}, the platform default assist is used.\n */\n assistId?: string;\n directAgentId?: string;\n maxSteps?: number;\n temperature?: number;\n /**\n * Max completion tokens for this engine run (when the provider supports it). Structured JSON runs apply a higher\n * default unless {@link structuredOutputMaxTokens} is set.\n */\n maxTokens?: number;\n /**\n * Declarative output contract for this run (preferred over legacy {@link expectStructuredOutput} flags).\n * Resolved with agent/assist defaults via {@link resolveEffectiveOutputContract}.\n */\n outputContract?: AXPAiAgentOutputContract;\n /** When true, implementation tries to parse assistant text as JSON into {@link AXPAiAssistRunResult.structured}. */\n expectStructuredOutput?: boolean;\n /** Extra instruction appended so the model returns JSON (used when {@link expectStructuredOutput} is true). */\n structuredOutputInstruction?: string;\n /**\n * Shallow merge over built-in platform runtime context fields (see ai-management implementation).\n */\n platformRuntimeNotes?: Record<string, unknown>;\n\n /**\n * Max extra engine turns after the first response when structured output is invalid (default {@link AXPAiAssistDefaultMaxStructuredRetries}).\n * Total attempts = 1 + maxStructuredRetries.\n */\n maxStructuredRetries?: number;\n\n /** Optional schema or domain validation after JSON parse. */\n structuredValidator?: AXPAiStructuredValidator;\n\n /**\n * When false, only one engine run is performed; invalid structured output throws {@link AXPAiStructuredOutputError}.\n * When true (default for {@link expectStructuredOutput}), invalid output triggers follow-up user messages in the same transcript.\n */\n retryOnInvalidStructure?: boolean;\n\n /**\n * Optional description of the expected JSON shape (TypeScript-style or JSON schema summary), appended to the first\n * user message and to retry prompts so the model stays aligned and retries are more accurate.\n */\n structuredOutputSchemaSummary?: string;\n\n /**\n * Overrides {@link maxTokens} for {@link expectStructuredOutput} runs only. Prefer setting this or leaving defaults so\n * the implementation can apply {@link AXPAiAssistDefaultStructuredMaxTokens} and avoid truncated JSON.\n */\n structuredOutputMaxTokens?: number;\n}\n\n/**\n * Result of the AI assist `run` API.\n */\nexport interface AXPAiAssistRunResult {\n /** When false, structured validation exhausted or cannotComplete (future). */\n success?: boolean;\n /** Effective output contract kind for this run. */\n outputKind?: import('../engine/ai-agent-output-contract.types').AXPAiAgentOutputKind;\n /** Primary assistant reply text (extracted from the engine transcript). */\n text: string;\n /**\n * Present when {@link AXPAiAssistRunInput.expectStructuredOutput} is true: validated structured payload\n * (parse + optional {@link AXPAiAssistRunInput.structuredValidator}). On failure the implementation throws\n * {@link AXPAiStructuredOutputError} instead of returning.\n */\n structured?: unknown;\n /** Same as {@link structured} when using the execution-result envelope. */\n data?: unknown;\n /** Validation failures when returned without throwing (reserved). */\n validationErrors?: import('../assist/structured-output/execution-result.types').AXPAiAssistValidationError[];\n /** Full normalized transcript when available. */\n messages?: import('../engine/ai-engine.types').AXPAiChatMessage[];\n /**\n * When {@link AXPAiAssistRunInput.expectStructuredOutput} is false: engine usage / provider payload for that single run.\n * When true: {@link AXPAiAssistStructuredOutputRunRaw} with per-attempt usage and totals for debugging.\n */\n raw?: unknown;\n}\n\n//#endregion\n\n//#region ---- Structured run raw (debugging) ----\n\n/**\n * Token usage for a single engine run; numeric fields align with {@link AXPAiEngineUsageTotals} in this module\n * for stable client-side debugging contracts.\n */\nexport interface AXPAiAssistTokenUsageSnapshot {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n cachedPromptTokens?: number;\n}\n\n/**\n * One engine execution within a structured-output session.\n */\nexport interface AXPAiAssistStructuredOutputAttemptRecord {\n /** 1-based index of this engine run. */\n attemptIndex: number;\n /** Usage reported for this run only. */\n usage?: AXPAiAssistTokenUsageSnapshot;\n /** Whether a last-provider payload was present for this run. */\n hasLastProviderResult: boolean;\n}\n\n/**\n * Explicit `raw` shape for {@link AXPAiAssistRunResult} when {@link AXPAiAssistRunInput.expectStructuredOutput} is true.\n */\nexport interface AXPAiAssistStructuredOutputRunRaw {\n kind: 'structured-output';\n /** One entry per engine call (`runEngine` / structured-output retries). */\n attempts: AXPAiAssistStructuredOutputAttemptRecord[];\n /** Cumulative usage across all attempts. */\n totalUsage?: AXPAiAssistTokenUsageSnapshot;\n /** Count of engine runs in this session (same as the last `attemptIndex`). */\n finalAttempt: number;\n lastProviderResult?: unknown;\n}\n\n//#endregion\n\n//#region ---- Show prompt surface ----\n\n/**\n * Typical max width of the prompt box column inside the bottom overlay (maps to `contentMaxWidthPx`).\n */\nexport type AXPAiAssistPopupSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n/**\n * Indeterminate loading dialog shown while the prompt box executes an assist run after Send (model work /\n * structured-output retries).\n */\nexport interface AXPAiAssistRunLoadingDialogSpec {\n title: string;\n text: string;\n}\n\n/**\n * Options for the AI assist `show` prompt API: same run-related fields as {@link AXPAiAssistRunInput} except `prompt`,\n * plus UI chrome. The user-entered prompt from the surface is merged on Send.\n */\nexport interface AXPAiAssistShowOptions {\n /**\n * Prompt box header; must be translated by the caller. Entity list assist uses\n * `@extensions-ai-entity:assist.dialog-title.{type-level|selected|individual}`.\n */\n title: string;\n placeholder?: string;\n initialPrompt?: string;\n size?: AXPAiAssistPopupSize;\n context?: AXPAiAssistRunContext;\n /**\n * Optional catalog assist. When omitted (and {@link directAgentId} is not set), the tenant/platform default assist applies.\n */\n assistId?: string;\n directAgentId?: string;\n maxSteps?: number;\n temperature?: number;\n maxTokens?: number;\n outputContract?: AXPAiAgentOutputContract;\n expectStructuredOutput?: boolean;\n structuredOutputInstruction?: string;\n platformRuntimeNotes?: Record<string, unknown>;\n maxStructuredRetries?: number;\n structuredValidator?: AXPAiStructuredValidator;\n retryOnInvalidStructure?: boolean;\n structuredOutputSchemaSummary?: string;\n structuredOutputMaxTokens?: number;\n\n /**\n * When set, shows an indeterminate loading dialog for the duration of each submitted run until `run` settles.\n * Callers supply translated strings.\n */\n runLoadingDialog?: AXPAiAssistRunLoadingDialogSpec;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { Injectable } from '@angular/core';\nimport type { AXPAiEngineRunOptions, AXPAiEngineRunResult } from './ai-engine.types';\n\n//#endregion\n\n//#region ---- Engine (abstract service) ----\n\n/**\n * Backend boundary for AI assist runs (chat + tool rounds). Connectivity implementations execute registry\n * commands/queries during the run loop.\n * Wire a concrete implementation via Angular providers (for example `provide: AXPAiEngine` with `useClass`).\n */\n@Injectable()\nexport abstract class AXPAiEngine {\n /**\n * Sends the conversation to the AI backend and returns updated messages (including tool rounds).\n */\n abstract run(options: AXPAiEngineRunOptions): Promise<AXPAiEngineRunResult>;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n AXPAiChatMessage,\n AXPAiChatResponse,\n AXPAiDelegatedAgentResultSegment,\n} from './ai-engine.types';\n\n//#endregion\n\n//#region ---- Supervisor tool naming (display / routing) ----\n\n/** Prefix for supervisor-delegated specialist tools (`${AXPAI_SUPERVISOR_AGENT_TOOL_PREFIX}${agentId}`). */\nexport const AXPAI_SUPERVISOR_AGENT_TOOL_PREFIX = 'agent:' as const;\n\nexport function axpAiParseSupervisorAgentToolName(toolName: string): string | null {\n const n = toolName.trim();\n if (!n.startsWith(AXPAI_SUPERVISOR_AGENT_TOOL_PREFIX)) {\n return null;\n }\n const id = n.slice(AXPAI_SUPERVISOR_AGENT_TOOL_PREFIX.length).trim();\n return id.length > 0 ? id : null;\n}\n\n//#endregion\n\n//#region ---- Message builders (outbound / debug) ----\n\nexport function axpAiChatTextMessage(role: AXPAiChatMessage['role'], text: string): AXPAiChatMessage {\n return {\n role,\n responses: [{ type: 'text', content: text }],\n };\n}\n\nexport function axpAiChatUserMessage(responses: AXPAiChatResponse[]): AXPAiChatMessage {\n return {\n role: 'user',\n responses,\n };\n}\n\n//#endregion\n\n//#region ---- Transcript read helpers (display only) ----\n\nexport function axpAiChatMessageGetText(message: AXPAiChatMessage): string {\n const parts: string[] = [];\n for (const r of message.responses) {\n if (r.type === 'text') {\n parts.push(r.content);\n } else if (r.type === 'node' || r.type === 'followUp') {\n try {\n parts.push(JSON.stringify({ type: r.type, content: r.content }));\n } catch {\n parts.push(`[${r.type}]`);\n }\n }\n }\n return parts.join('\\n\\n');\n}\n\nexport function axpAiChatMessageIsDelegatedReflectionExcluded(message: AXPAiChatMessage): boolean {\n return message.delegatedReflection === true;\n}\n\n/** Reads typed specialist segments from a normalized {@code agent_result} payload. */\nexport function axpAiDelegatedAgentResultSegments(\n payload: { success?: boolean; data?: { responses?: AXPAiDelegatedAgentResultSegment[] } },\n): AXPAiDelegatedAgentResultSegment[] {\n if (payload.success !== true || !Array.isArray(payload.data?.responses)) {\n return [];\n }\n return payload.data.responses;\n}\n\n/** Plain text from specialist segments (text + think) for debug / preview UI. */\nexport function axpAiDelegatedAgentOutcomeResponsesPlainText(segments: AXPAiDelegatedAgentResultSegment[]): string {\n const parts: string[] = [];\n for (const s of segments) {\n if (s.type === 'text' || s.type === 'think') {\n const t = s.content.trim();\n if (t.length > 0) {\n parts.push(t);\n }\n }\n }\n return parts.join('\\n\\n').trim();\n}\n\nexport function axpAiChatToolResultBodyJson(message: AXPAiChatMessage): string {\n return axpAiChatToolOrAgentResultBodyJson(message);\n}\n\nexport function axpAiChatToolOrAgentResultBodyJson(message: AXPAiChatMessage): string {\n const tr = message.responses.find((r) => r.type === 'tool_result' || r.type === 'agent_result');\n if (!tr || (tr.type !== 'tool_result' && tr.type !== 'agent_result')) {\n return '';\n }\n try {\n return JSON.stringify(tr.content);\n } catch {\n return String(tr.content);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPRegionalSetting, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { Injectable, inject } from '@angular/core';\nimport type { AXPAiPlatformRuntimeContext } from './ai-engine.types';\n\n//#endregion\n\n//#region ---- Local time formatting ----\n\n/**\n * Formats {@link now} in {@link ianaTimeZone} for English system prompts; falls back to UTC on invalid zone.\n */\nfunction formatNowForRuntimeContext(now: Date, ianaTimeZone: string | undefined): string {\n const tz = ianaTimeZone?.trim() || 'UTC';\n try {\n return (\n now.toLocaleString('en-US', {\n timeZone: tz,\n dateStyle: 'full',\n timeStyle: 'long',\n }) + ` (${tz})`\n );\n } catch {\n return now.toISOString() + ' (UTC)';\n }\n}\n\n//#endregion\n\n//#region ---- Builder ----\n\n/**\n * Builds {@link AXPAiPlatformRuntimeContext} from session and user-scoped regional settings.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPAiPlatformRuntimeContextBuilder {\n //#region ---- Services & Dependencies ----\n\n private readonly session = inject(AXPSessionService);\n private readonly settings = inject(AXPSettingsService);\n private readonly translation = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Resolves current user, tenant, application, UI language, and regional preferences from storage.\n */\n async build(): Promise<AXPAiPlatformRuntimeContext> {\n const user = this.session.user;\n const tenant = this.session.tenant;\n const application = this.session.application;\n const userScope = this.settings.scope(AXPPlatformScope.User);\n\n const [calendarRaw, tzRaw, countryRaw] = await Promise.all([\n userScope.get(AXPRegionalSetting.Calendar),\n userScope.get(AXPRegionalSetting.TimeZone),\n userScope.get(AXPRegionalSetting.Country),\n ]);\n\n const calendarSystem = typeof calendarRaw === 'string' && calendarRaw.trim() ? calendarRaw.trim() : undefined;\n const timeZone = typeof tzRaw === 'string' && tzRaw.trim() ? tzRaw.trim() : undefined;\n const country = typeof countryRaw === 'string' && countryRaw.trim() ? countryRaw.trim() : undefined;\n\n const locale = this.translation.getActiveLang();\n const now = new Date();\n\n return {\n userId: user?.id,\n userDisplayName: [user?.name?.trim(), user?.title?.trim()].find((s) => s && s.length > 0),\n tenantId: tenant?.id,\n tenantTitle: tenant?.title?.trim() || tenant?.name?.trim(),\n applicationId: application?.id,\n applicationTitle: application?.title?.trim() || application?.name?.trim(),\n locale,\n calendarSystem,\n timeZone,\n country,\n currentInstant: now.toISOString(),\n currentLocalDateTime: formatNowForRuntimeContext(now, timeZone),\n };\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { RootConfig } from '../../const';\nimport {\n type AXPFileStorageService,\n AXPFileStorageStatus,\n} from '@acorex/platform/common';\n\n//#endregion\n\n//#region ---- Constants ----\n\n/** Max length for relaying an https image URL in tool_result when persistence fails (CORS, etc.). */\nexport const AI_GENERATED_IMAGE_MAX_REMOTE_URL_IN_TOOL = 2048;\n\n/** refType for files created from in-chat image tool output. */\nexport const AI_CHAT_GENERATED_IMAGE_REF_TYPE = `${RootConfig.module.name}.AiChatGeneratedImage`;\n\n/** refType for files created from in-chat text-to-speech tool output. */\nexport const AI_CHAT_GENERATED_SPEECH_REF_TYPE = `${RootConfig.module.name}.AiChatGeneratedSpeech`;\n\n/** refType for user-attached images in AI chat; {@link persistAiChatAttachmentImage} uses a batch ref id. */\nexport const AI_CHAT_ATTACHMENT_REF_TYPE = `${RootConfig.module.name}.AiChatAttachment`;\n\n/** File storage category for user chat image attachments. */\nexport const AI_CHAT_ATTACHMENT_CATEGORY = 'ai-chat-attachment';\n\n//#endregion\n\n//#region ---- URL / File conversion ----\n\n/**\n * Builds a File from a vendor image URL (https) or data URL (base64 image).\n */\nexport async function blobOrFileFromImageResult(\n imageUrl: string,\n defaultName = 'ai-generated.png',\n): Promise<File> {\n const trimmed = imageUrl.trim();\n if (!trimmed) {\n throw new Error('Image URL is empty.');\n }\n\n if (trimmed.startsWith('data:')) {\n const res = await fetch(trimmed);\n if (!res.ok) {\n throw new Error(`Failed to read data URL (${res.status}).`);\n }\n const blob = await res.blob();\n const mime = blob.type || parseDataUrlMime(trimmed) || 'image/png';\n return new File([blob], defaultName, { type: mime });\n }\n\n if (trimmed.startsWith('https://') || trimmed.startsWith('http://')) {\n const res = await fetch(trimmed);\n if (!res.ok) {\n throw new Error(`Failed to fetch image (${res.status}).`);\n }\n const blob = await res.blob();\n const mime =\n blob.type ||\n res.headers.get('Content-Type')?.split(';')[0]?.trim() ||\n 'image/png';\n const ext = mime.includes('jpeg') || mime.includes('jpg') ? 'jpg' : mime.includes('webp') ? 'webp' : 'png';\n return new File([blob], defaultName.replace(/\\.[^.]+$/, '') + '.' + ext, { type: mime });\n }\n\n throw new Error('Unsupported image URL scheme (expected https: or data:).');\n}\n\nfunction parseDataUrlMime(dataUrl: string): string | undefined {\n const m = /^data:([^;,]+)[;,]/.exec(dataUrl);\n return m?.[1]?.trim();\n}\n\n//#endregion\n\n//#region ---- Persistence ----\n\n/**\n * Saves the file and commits it so it appears in storage queries as committed.\n */\nexport async function persistAiGeneratedImage(\n fileStorage: AXPFileStorageService,\n file: File,\n ref: { refId: string; refType: string },\n): Promise<{ fileId: string }> {\n const info = await fileStorage.save({\n file,\n name: file.name,\n refId: ref.refId,\n refType: ref.refType,\n category: 'ai-generated-image',\n status: AXPFileStorageStatus.Temporary,\n });\n const fileId = info.fileId?.trim();\n if (!fileId) {\n throw new Error('File storage did not return a fileId.');\n }\n await fileStorage.commit(fileId);\n return { fileId };\n}\n\n/**\n * Persists a user-selected chat image; refId groups files uploaded in the same composer batch.\n */\nexport async function persistAiChatAttachmentImage(\n fileStorage: AXPFileStorageService,\n file: File,\n refId: string,\n): Promise<{ fileId: string }> {\n const trimmed = refId.trim();\n if (!trimmed) {\n throw new Error('refId is required for chat attachment persistence.');\n }\n const info = await fileStorage.save({\n file,\n name: file.name,\n refId: trimmed,\n refType: AI_CHAT_ATTACHMENT_REF_TYPE,\n category: AI_CHAT_ATTACHMENT_CATEGORY,\n status: AXPFileStorageStatus.Temporary,\n });\n const fileId = info.fileId?.trim();\n if (!fileId) {\n throw new Error('File storage did not return a fileId.');\n }\n await fileStorage.commit(fileId);\n return { fileId };\n}\n\n/**\n * Saves synthesized speech bytes and commits so the file id can be replayed in chat.\n */\nexport async function persistAiGeneratedSpeech(\n fileStorage: AXPFileStorageService,\n file: File,\n ref: { refId: string; refType: string },\n): Promise<{ fileId: string }> {\n const info = await fileStorage.save({\n file,\n name: file.name,\n refId: ref.refId,\n refType: ref.refType,\n category: 'ai-generated-speech',\n status: AXPFileStorageStatus.Temporary,\n });\n const fileId = info.fileId?.trim();\n if (!fileId) {\n throw new Error('File storage did not return a fileId.');\n }\n await fileStorage.commit(fileId);\n return { fileId };\n}\n\n//#endregion\n","//#region ---- Limits ----\n\n/** Max image file size for AI chat / assist composer attachments (bytes). */\nexport const AXM_AI_CHAT_COMPOSER_MAX_IMAGE_BYTES = 20 * 1024 * 1024;\n\n/** Max images per composer batch (same cap as chat page). */\nexport const AXM_AI_CHAT_COMPOSER_MAX_IMAGES_PER_TURN = 20;\n\n/** Max audio file size (bytes). */\nexport const AXM_AI_CHAT_COMPOSER_MAX_AUDIO_BYTES = 25 * 1024 * 1024;\n\n/** Max audio files per composer batch. */\nexport const AXM_AI_CHAT_COMPOSER_MAX_AUDIO_PER_TURN = 5;\n\n/** Max document file size for PDF / text / office-style attachments (bytes). */\nexport const AXM_AI_CHAT_COMPOSER_MAX_DOCUMENT_BYTES = 35 * 1024 * 1024;\n\n/** Max document files per composer batch. */\nexport const AXM_AI_CHAT_COMPOSER_MAX_DOCUMENTS_PER_TURN = 10;\n\n//#endregion\n\n//#region ---- Patterns ----\n\nconst CHAT_IMAGE_NAME_EXT_PATTERN = /\\.(png|jpe?g|gif|webp|bmp|svg|ico|heic|heif)$/i;\n\nconst CHAT_AUDIO_NAME_EXT_PATTERN = /\\.(mp3|m4a|aac|wav|webm|ogg|opus|flac)$/i;\n\nconst CHAT_DOCUMENT_NAME_EXT_PATTERN =\n /\\.(pdf|txt|md|markdown|csv|tsv|json|jsonl|xml|html?|yaml|yml|log|rtf|docx?|xlsx?|pptx?|odt|ods|odp)$/i;\n\n//#endregion\n\n//#region ---- Public API ----\n\n/**\n * Returns true for normal `image/*` types and for empty/octet-stream when the file name looks like an image.\n */\nexport function axmIsLikelyChatImageFile(file: File): boolean {\n const t = file.type?.trim() ?? '';\n if (t.startsWith('image/')) {\n return true;\n }\n if (t === 'application/octet-stream' || t === '') {\n return CHAT_IMAGE_NAME_EXT_PATTERN.test(file.name);\n }\n return false;\n}\n\n/**\n * Returns true for normal `audio/*` types and for empty/octet-stream when the file name looks like audio.\n */\nexport function axmIsLikelyChatAudioFile(file: File): boolean {\n const t = file.type?.trim() ?? '';\n if (t.startsWith('audio/')) {\n return true;\n }\n if (t === 'application/octet-stream' || t === '') {\n return CHAT_AUDIO_NAME_EXT_PATTERN.test(file.name);\n }\n return false;\n}\n\n/**\n * Returns true for PDF, plain text, common code/markup, CSV, and typical Office/OpenDocument uploads.\n */\nexport function axmIsLikelyChatDocumentFile(file: File): boolean {\n const t = file.type?.trim().toLowerCase() ?? '';\n if (t === 'application/pdf' || t.startsWith('text/')) {\n return true;\n }\n if (\n t === 'application/json' ||\n t === 'application/xml' ||\n t === 'application/javascript' ||\n t === 'application/typescript' ||\n t === 'text/csv' ||\n t === 'application/csv' ||\n t === 'text/tsv' ||\n t === 'application/rtf' ||\n t === 'text/rtf' ||\n t.includes('wordprocessingml') ||\n t.includes('spreadsheetml') ||\n t.includes('presentationml') ||\n t.includes('msword') ||\n t.includes('ms-excel') ||\n t.includes('ms-powerpoint') ||\n t.includes('opendocument')\n ) {\n return true;\n }\n if (t === 'application/octet-stream' || t === '') {\n return CHAT_DOCUMENT_NAME_EXT_PATTERN.test(file.name);\n }\n return false;\n}\n\n/**\n * MIME for storage/API when the browser omits or misreports `file.type` (images and common audio extensions).\n */\nexport function axmMimeTypeForChatAttachment(file: File): string {\n const t = file.type?.trim() ?? '';\n if (t.startsWith('image/')) {\n return t;\n }\n if (t.startsWith('audio/')) {\n return t;\n }\n if (t.startsWith('text/') || t === 'application/pdf' || t === 'application/json' || t === 'application/xml') {\n return t;\n }\n const m = /\\.([^.]+)$/i.exec(file.name);\n const ext = (m?.[1] ?? '').toLowerCase();\n const imageByExt: Record<string, string> = {\n png: 'image/png',\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n gif: 'image/gif',\n webp: 'image/webp',\n bmp: 'image/bmp',\n svg: 'image/svg+xml',\n ico: 'image/x-icon',\n heic: 'image/heic',\n heif: 'image/heif',\n };\n const audioByExt: Record<string, string> = {\n mp3: 'audio/mpeg',\n m4a: 'audio/mp4',\n aac: 'audio/aac',\n wav: 'audio/wav',\n webm: 'audio/webm',\n ogg: 'audio/ogg',\n opus: 'audio/opus',\n flac: 'audio/flac',\n };\n const docByExt: Record<string, string> = {\n pdf: 'application/pdf',\n txt: 'text/plain',\n md: 'text/markdown',\n markdown: 'text/markdown',\n csv: 'text/csv',\n tsv: 'text/tab-separated-values',\n json: 'application/json',\n jsonl: 'application/jsonl',\n xml: 'application/xml',\n html: 'text/html',\n htm: 'text/html',\n yaml: 'text/yaml',\n yml: 'text/yaml',\n log: 'text/plain',\n rtf: 'application/rtf',\n doc: 'application/msword',\n docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n xls: 'application/vnd.ms-excel',\n xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n ppt: 'application/vnd.ms-powerpoint',\n pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n odt: 'application/vnd.oasis.opendocument.text',\n ods: 'application/vnd.oasis.opendocument.spreadsheet',\n odp: 'application/vnd.oasis.opendocument.presentation',\n };\n return imageByExt[ext] ?? audioByExt[ext] ?? docByExt[ext] ?? 'application/octet-stream';\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXTextAreaModule } from '@acorex/components/text-area';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport type {\n AXPAiAssistPromptSubmitPayload,\n AXPAiAssistRunResult,\n AXPAiAssistUserMediaAttachment,\n} from '../../types/ai-assist.types';\nimport { persistAiChatAttachmentImage } from '../../chat/ai-generated-image-persist';\nimport {\n AXM_AI_CHAT_COMPOSER_MAX_AUDIO_BYTES,\n AXM_AI_CHAT_COMPOSER_MAX_AUDIO_PER_TURN,\n AXM_AI_CHAT_COMPOSER_MAX_DOCUMENT_BYTES,\n AXM_AI_CHAT_COMPOSER_MAX_DOCUMENTS_PER_TURN,\n AXM_AI_CHAT_COMPOSER_MAX_IMAGE_BYTES,\n AXM_AI_CHAT_COMPOSER_MAX_IMAGES_PER_TURN,\n axmIsLikelyChatAudioFile,\n axmIsLikelyChatDocumentFile,\n axmIsLikelyChatImageFile,\n axmMimeTypeForChatAttachment,\n} from '../ai-chat-composer-media.helpers';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n ViewEncapsulation,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n//#endregion\n\n//#region ---- Draft types ----\n\ninterface AXMAiAssistDraftImage {\n clientId: string;\n previewUrl: string;\n mimeType: string;\n name?: string;\n fileId?: string;\n}\n\ninterface AXMAiAssistDraftAudio {\n clientId: string;\n mimeType: string;\n name?: string;\n fileId?: string;\n}\n\ninterface AXMAiAssistDraftFile {\n clientId: string;\n mimeType: string;\n name?: string;\n fileId?: string;\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Floating prompt UI for AI assist: gradient chrome, inner composer, and image/audio/document attachments. Target assist/agent comes from optional initial ids on open.\n */\n@Component({\n selector: 'axm-ai-assist-prompt-box',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '(document:keydown.escape)': 'onDocumentEscape()',\n },\n templateUrl: './ai-assist-prompt-box.component.html',\n styleUrl: './ai-assist-prompt-box.component.scss',\n imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXDecoratorModule,\n AXDropdownModule,\n AXDropdownButtonModule,\n AXTextAreaModule,\n AXTranslationModule,\n ],\n})\nexport class AXMAiAssistPromptBoxComponent implements OnInit, OnDestroy {\n //#region ---- Services & Dependencies ----\n\n private readonly toastService = inject(AXToastService);\n private readonly translation = inject(AXTranslationService);\n private readonly fileStorage = inject(AXPFileStorageService);\n private readonly fileService = inject(AXFileService);\n private readonly platformId = inject(PLATFORM_ID);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n readonly title = input.required<string>();\n\n readonly placeholder = input<string>('');\n\n readonly initialPrompt = input<string>('');\n\n readonly contentMaxWidthPx = input<number>(680);\n\n readonly initialAssistId = input<string | undefined>(undefined);\n\n readonly initialDirectAgentId = input<string | undefined>(undefined);\n\n readonly runPrompt = input.required<(payload: AXPAiAssistPromptSubmitPayload) => Promise<AXPAiAssistRunResult>>();\n\n readonly requestClose = input.required<(result: AXPAiAssistRunResult | null) => void>();\n\n //#endregion\n\n //#region ---- State ----\n\n readonly promptDraft = signal('');\n\n readonly busy = signal(false);\n\n readonly isComposerSaving = signal(false);\n\n readonly draftAttachmentGroupId = signal<string | null>(null);\n\n readonly draftComposerImages = signal<AXMAiAssistDraftImage[]>([]);\n\n readonly draftComposerAudios = signal<AXMAiAssistDraftAudio[]>([]);\n\n readonly draftComposerFiles = signal<AXMAiAssistDraftFile[]>([]);\n\n readonly assistTargetKey = signal('');\n\n //#endregion\n\n //#region ---- Computed ----\n\n readonly canSend = computed(() => {\n if (this.busy() || this.isComposerSaving()) {\n return false;\n }\n const textOk = this.promptDraft().trim().length > 0;\n const draftImg = this.draftComposerImages();\n const draftAud = this.draftComposerAudios();\n const draftFiles = this.draftComposerFiles();\n const allImagesSaved = draftImg.length === 0 || draftImg.every((s) => Boolean(s.fileId?.trim()));\n const allAudiosSaved = draftAud.length === 0 || draftAud.every((s) => Boolean(s.fileId?.trim()));\n const allFilesSaved = draftFiles.length === 0 || draftFiles.every((s) => Boolean(s.fileId?.trim()));\n if (!allImagesSaved || !allAudiosSaved || !allFilesSaved) {\n return false;\n }\n if (draftImg.length === 0 && draftAud.length === 0 && draftFiles.length === 0) {\n return textOk;\n }\n return textOk || draftImg.length > 0 || draftAud.length > 0 || draftFiles.length > 0;\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n async ngOnInit(): Promise<void> {\n this.promptDraft.set(this.initialPrompt().trim());\n\n const d = this.initialDirectAgentId()?.trim();\n const a = this.initialAssistId()?.trim();\n if (d) {\n this.assistTargetKey.set(`agent:${d}`);\n } else if (a) {\n this.assistTargetKey.set(`assist:${a}`);\n } else {\n this.assistTargetKey.set('');\n }\n }\n\n ngOnDestroy(): void {\n for (const s of this.draftComposerImages()) {\n URL.revokeObjectURL(s.previewUrl);\n }\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n onPromptDraftChange(value: string | null | undefined): void {\n this.promptDraft.set((value ?? '').toString());\n }\n\n /**\n * Enter sends; Shift+Enter inserts a newline. IME composition Enter is left unchanged.\n */\n onPromptKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Enter' || event.shiftKey || event.isComposing) {\n return;\n }\n event.preventDefault();\n void this.onSend();\n }\n\n onCancel(): void {\n this.requestClose()(null);\n }\n\n onMenuCancel(panel: { close: () => void }): void {\n panel.close();\n if (this.busy()) {\n return;\n }\n this.onCancel();\n }\n\n /**\n * Dismisses the prompt box like Cancel (disabled while a run is in flight, same as footer Cancel).\n */\n onDocumentEscape(): void {\n if (!isPlatformBrowser(this.platformId) || this.busy()) {\n return;\n }\n this.onCancel();\n }\n\n openImagePicker(): void {\n void this.pickComposerImages();\n }\n\n openAudioPicker(): void {\n void this.pickComposerAudios();\n }\n\n openDocumentPicker(): void {\n void this.pickComposerDocuments();\n }\n\n async onSend(): Promise<void> {\n if (!this.canSend()) {\n return;\n }\n const text = this.promptDraft().trim();\n const draftImg = this.draftComposerImages();\n const draftAud = this.draftComposerAudios();\n const draftFiles = this.draftComposerFiles();\n for (const s of draftImg) {\n if (!s.fileId?.trim()) {\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const msg = await this.translation.translateAsync('@ai-management:chat.images-still-saving');\n await this.toastService.show({ color: 'warning', title: errTitle, content: msg });\n return;\n }\n }\n for (const s of draftAud) {\n if (!s.fileId?.trim()) {\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const msg = await this.translation.translateAsync('@ai-management:chat.audio-still-saving');\n await this.toastService.show({ color: 'warning', title: errTitle, content: msg });\n return;\n }\n }\n for (const s of draftFiles) {\n if (!s.fileId?.trim()) {\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const msg = await this.translation.translateAsync('@ai-management:chat.documents-still-saving');\n await this.toastService.show({ color: 'warning', title: errTitle, content: msg });\n return;\n }\n }\n\n const key = this.assistTargetKey().trim();\n let assistId: string | undefined;\n let directAgentId: string | undefined;\n if (key.startsWith('assist:')) {\n assistId = key.slice('assist:'.length).trim() || undefined;\n } else if (key.startsWith('agent:')) {\n directAgentId = key.slice('agent:'.length).trim() || undefined;\n }\n\n const userMediaAttachments: AXPAiAssistUserMediaAttachment[] = [\n ...draftImg.map((s) => ({\n kind: 'image' as const,\n fileId: s.fileId!.trim(),\n mimeType: s.mimeType.trim(),\n ...(s.name?.trim() ? { name: s.name.trim() } : {}),\n })),\n ...draftAud.map((s) => ({\n kind: 'audio' as const,\n fileId: s.fileId!.trim(),\n mimeType: s.mimeType.trim(),\n ...(s.name?.trim() ? { name: s.name.trim() } : {}),\n })),\n ...draftFiles.map((s) => ({\n kind: 'file' as const,\n fileId: s.fileId!.trim(),\n mimeType: s.mimeType.trim(),\n ...(s.name?.trim() ? { name: s.name.trim() } : {}),\n })),\n ];\n\n const payload: AXPAiAssistPromptSubmitPayload = {\n prompt: text,\n assistId,\n directAgentId,\n userMediaAttachments,\n };\n\n this.busy.set(true);\n try {\n const result = await this.runPrompt()(payload);\n this.requestClose()(result);\n } catch (err) {\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const fallback = await this.translation.translateAsync('@ai-management:assist-popup.run-error');\n const content = err instanceof Error ? err.message : fallback;\n await this.toastService.show({ color: 'danger', title: errTitle, content });\n } finally {\n this.busy.set(false);\n }\n }\n\n removeDraftImage(clientId: string): void {\n const id = clientId.trim();\n if (!id) {\n return;\n }\n this.draftComposerImages.update((prev) => {\n const slot = prev.find((s) => s.clientId === id);\n if (slot) {\n URL.revokeObjectURL(slot.previewUrl);\n }\n const next = prev.filter((s) => s.clientId !== id);\n if (\n next.length === 0 &&\n this.draftComposerAudios().length === 0 &&\n this.draftComposerFiles().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n return next;\n });\n }\n\n removeDraftAudio(clientId: string): void {\n const id = clientId.trim();\n if (!id) {\n return;\n }\n this.draftComposerAudios.update((prev) => {\n const next = prev.filter((s) => s.clientId !== id);\n if (\n next.length === 0 &&\n this.draftComposerImages().length === 0 &&\n this.draftComposerFiles().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n return next;\n });\n }\n\n removeDraftFile(clientId: string): void {\n const id = clientId.trim();\n if (!id) {\n return;\n }\n this.draftComposerFiles.update((prev) => {\n const next = prev.filter((s) => s.clientId !== id);\n if (\n next.length === 0 &&\n this.draftComposerImages().length === 0 &&\n this.draftComposerAudios().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n return next;\n });\n }\n\n //#endregion\n\n //#region ---- Composer media (mirrors chat page) ----\n\n private async pickComposerImages(): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n if (this.busy() || this.isComposerSaving()) {\n return;\n }\n try {\n const files = await this.fileService.choose({\n multiple: true,\n accept: 'image/*',\n });\n if (files.length === 0) {\n return;\n }\n await this.processComposerImageFiles(files);\n } catch {\n /* user cancelled */\n }\n }\n\n private async pickComposerAudios(): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n if (this.busy() || this.isComposerSaving()) {\n return;\n }\n try {\n const files = await this.fileService.choose({\n multiple: true,\n accept: 'audio/*',\n });\n if (files.length === 0) {\n return;\n }\n await this.processComposerAudioFiles(files);\n } catch {\n /* user cancelled */\n }\n }\n\n private async pickComposerDocuments(): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n if (this.busy() || this.isComposerSaving()) {\n return;\n }\n try {\n const files = await this.fileService.choose({\n multiple: true,\n accept:\n '.pdf,.txt,.md,.csv,.tsv,.json,.jsonl,.xml,.html,.htm,.yaml,.yml,.log,.rtf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.odt,.ods,.odp,application/pdf,text/*,application/json',\n });\n if (files.length === 0) {\n return;\n }\n await this.processComposerDocumentFiles(files);\n } catch {\n /* user cancelled */\n }\n }\n\n private async processComposerImageFiles(files: File[]): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n let groupId = this.draftAttachmentGroupId();\n if (!groupId?.trim()) {\n groupId = globalThis.crypto.randomUUID();\n this.draftAttachmentGroupId.set(groupId);\n }\n const gid = groupId.trim();\n\n const existing = this.draftComposerImages().length;\n if (existing + files.length > AXM_AI_CHAT_COMPOSER_MAX_IMAGES_PER_TURN) {\n await this.showUploadWarning('@ai-management:chat.upload-too-many');\n return;\n }\n\n const newSlots: AXMAiAssistDraftImage[] = [];\n const filesForPersist: File[] = [];\n\n for (const file of files) {\n if (!axmIsLikelyChatImageFile(file)) {\n await this.showUploadWarning('@ai-management:chat.upload-invalid-type');\n return;\n }\n if (file.size > AXM_AI_CHAT_COMPOSER_MAX_IMAGE_BYTES) {\n await this.showUploadWarning('@ai-management:chat.upload-too-large');\n return;\n }\n const mimeType = axmMimeTypeForChatAttachment(file);\n const fileForStorage =\n file.type.trim().startsWith('image/') && file.type.trim().length > 0\n ? file\n : new File([file], file.name, { type: mimeType });\n newSlots.push({\n clientId: globalThis.crypto.randomUUID(),\n previewUrl: URL.createObjectURL(file),\n mimeType,\n name: file.name,\n });\n filesForPersist.push(fileForStorage);\n }\n\n this.draftComposerImages.update((prev) => [...prev, ...newSlots]);\n\n this.isComposerSaving.set(true);\n try {\n for (let i = 0; i < filesForPersist.length; i++) {\n const file = filesForPersist[i];\n const clientId = newSlots[i].clientId;\n try {\n const { fileId } = await persistAiChatAttachmentImage(this.fileStorage, file, gid);\n this.draftComposerImages.update((prev) =>\n prev.map((s) => (s.clientId === clientId ? { ...s, fileId } : s)),\n );\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n this.draftComposerImages.update((prev) => {\n const slot = prev.find((s) => s.clientId === clientId);\n if (slot) {\n URL.revokeObjectURL(slot.previewUrl);\n }\n return prev.filter((s) => s.clientId !== clientId);\n });\n if (\n this.draftComposerImages().length === 0 &&\n this.draftComposerAudios().length === 0 &&\n this.draftComposerFiles().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const uploadFailed = await this.translation.translateAsync('@ai-management:chat.upload-error');\n await this.toastService.show({\n color: 'danger',\n title: errTitle,\n content: `${uploadFailed} ${msg}`,\n });\n return;\n }\n }\n } finally {\n this.isComposerSaving.set(false);\n }\n }\n\n private async processComposerAudioFiles(files: File[]): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n let groupId = this.draftAttachmentGroupId();\n if (!groupId?.trim()) {\n groupId = globalThis.crypto.randomUUID();\n this.draftAttachmentGroupId.set(groupId);\n }\n const gid = groupId.trim();\n\n const existing = this.draftComposerAudios().length;\n if (existing + files.length > AXM_AI_CHAT_COMPOSER_MAX_AUDIO_PER_TURN) {\n await this.showUploadWarning('@ai-management:chat.upload-audio-too-many');\n return;\n }\n\n const newSlots: AXMAiAssistDraftAudio[] = [];\n const filesForPersist: File[] = [];\n\n for (const file of files) {\n if (!axmIsLikelyChatAudioFile(file)) {\n await this.showUploadWarning('@ai-management:chat.upload-audio-invalid-type');\n return;\n }\n if (file.size > AXM_AI_CHAT_COMPOSER_MAX_AUDIO_BYTES) {\n await this.showUploadWarning('@ai-management:chat.upload-audio-too-large');\n return;\n }\n const mimeType = axmMimeTypeForChatAttachment(file);\n const fileForStorage =\n file.type.trim().startsWith('audio/') && file.type.trim().length > 0\n ? file\n : new File([file], file.name, { type: mimeType });\n newSlots.push({\n clientId: globalThis.crypto.randomUUID(),\n mimeType,\n name: file.name,\n });\n filesForPersist.push(fileForStorage);\n }\n\n this.draftComposerAudios.update((prev) => [...prev, ...newSlots]);\n\n this.isComposerSaving.set(true);\n try {\n for (let i = 0; i < filesForPersist.length; i++) {\n const file = filesForPersist[i];\n const clientId = newSlots[i].clientId;\n try {\n const { fileId } = await persistAiChatAttachmentImage(this.fileStorage, file, gid);\n this.draftComposerAudios.update((prev) =>\n prev.map((s) => (s.clientId === clientId ? { ...s, fileId } : s)),\n );\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n this.draftComposerAudios.update((prev) => prev.filter((s) => s.clientId !== clientId));\n if (\n this.draftComposerAudios().length === 0 &&\n this.draftComposerImages().length === 0 &&\n this.draftComposerFiles().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const uploadFailed = await this.translation.translateAsync('@ai-management:chat.upload-audio-error');\n await this.toastService.show({\n color: 'danger',\n title: errTitle,\n content: `${uploadFailed} ${msg}`,\n });\n return;\n }\n }\n } finally {\n this.isComposerSaving.set(false);\n }\n }\n\n private async processComposerDocumentFiles(files: File[]): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n let groupId = this.draftAttachmentGroupId();\n if (!groupId?.trim()) {\n groupId = globalThis.crypto.randomUUID();\n this.draftAttachmentGroupId.set(groupId);\n }\n const gid = groupId.trim();\n\n const existing = this.draftComposerFiles().length;\n if (existing + files.length > AXM_AI_CHAT_COMPOSER_MAX_DOCUMENTS_PER_TURN) {\n await this.showUploadWarning('@ai-management:chat.upload-documents-too-many');\n return;\n }\n\n const newSlots: AXMAiAssistDraftFile[] = [];\n const filesForPersist: File[] = [];\n\n for (const file of files) {\n if (!axmIsLikelyChatDocumentFile(file)) {\n await this.showUploadWarning('@ai-management:chat.upload-documents-invalid-type');\n return;\n }\n if (file.size > AXM_AI_CHAT_COMPOSER_MAX_DOCUMENT_BYTES) {\n await this.showUploadWarning('@ai-management:chat.upload-documents-too-large');\n return;\n }\n const mimeType = axmMimeTypeForChatAttachment(file);\n const fileForStorage =\n file.type.trim().length > 0 && file.type.trim() !== 'application/octet-stream'\n ? file\n : new File([file], file.name, { type: mimeType });\n newSlots.push({\n clientId: globalThis.crypto.randomUUID(),\n mimeType,\n name: file.name,\n });\n filesForPersist.push(fileForStorage);\n }\n\n this.draftComposerFiles.update((prev) => [...prev, ...newSlots]);\n\n this.isComposerSaving.set(true);\n try {\n for (let i = 0; i < filesForPersist.length; i++) {\n const file = filesForPersist[i];\n const clientId = newSlots[i].clientId;\n try {\n const { fileId } = await persistAiChatAttachmentImage(this.fileStorage, file, gid);\n this.draftComposerFiles.update((prev) =>\n prev.map((s) => (s.clientId === clientId ? { ...s, fileId } : s)),\n );\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n this.draftComposerFiles.update((prev) => prev.filter((s) => s.clientId !== clientId));\n if (\n this.draftComposerFiles().length === 0 &&\n this.draftComposerImages().length === 0 &&\n this.draftComposerAudios().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const uploadFailed = await this.translation.translateAsync('@ai-management:chat.upload-documents-error');\n await this.toastService.show({\n color: 'danger',\n title: errTitle,\n content: `${uploadFailed} ${msg}`,\n });\n return;\n }\n }\n } finally {\n this.isComposerSaving.set(false);\n }\n }\n\n private async showUploadWarning(translationKey: string): Promise<void> {\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const content = await this.translation.translateAsync(translationKey);\n await this.toastService.show({ color: 'warning', title: errTitle, content });\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axm-ai-assist-prompt-box ax-flex ax-flex-col ax-gap-2.5 ax-min-h-0 ax-w-full\"\n [style.max-width.px]=\"contentMaxWidthPx()\">\n <div\n class=\"axm-ai-assist-prompt-box__eyebrow ax-flex ax-items-center ax-justify-between ax-gap-3 ax-shrink-0 ax-px-0.5\">\n <div class=\"axm-ai-assist-prompt-box__brand ax-inline-flex ax-min-w-0 ax-items-center ax-gap-2\">\n <span class=\"axm-ai-assist-prompt-box__brand-mark\" aria-hidden=\"true\">\n <i class=\"fa-light fa-sparkles\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"axm-ai-assist-prompt-box__brand-title ax-truncate\">{{ title() }}</span>\n </div>\n <ax-button class=\"ax-shrink-0 ax-xs\" look=\"blank\" color=\"default\" type=\"button\" [iconOnly]=\"true\"\n [disabled]=\"busy()\" [attr.aria-label]=\"('@general:actions.close.title' | translate | async) ?? ''\"\n (onClick)=\"onCancel()\">\n <ax-prefix>\n <i class=\"fa-light fa-xmark\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n\n <div class=\"axm-ai-assist-prompt-box__sheet ax-flex ax-min-h-0 ax-flex-col ax-gap-2\">\n @if (\n draftComposerImages().length > 0 ||\n draftComposerAudios().length > 0 ||\n draftComposerFiles().length > 0 ||\n isComposerSaving()\n ) {\n <div\n class=\"ax-shrink-0 ax-rounded-xl ax-border ax-border-default/45 dark:ax-border-darker ax-bg-lightest/90 ax-p-1.5 ax-flex ax-flex-col ax-gap-1.5\"\n [attr.aria-label]=\"('@ai-management:chat.composer-attachments-region' | translate | async) ?? ''\">\n <div class=\"ax-flex ax-flex-wrap ax-items-center ax-justify-between ax-gap-1.5 ax-text-[0.65rem] ax-text-muted\">\n <span>\n @if (isComposerSaving()) {\n {{ '@ai-management:chat.composer-uploading' | translate | async }}\n } @else {\n @if (draftComposerImages().length > 0) {\n <span>{{ draftComposerImages().length }}\n {{ '@ai-management:chat.composer-images-count' | translate | async }}</span>\n }\n @if (draftComposerImages().length > 0 && draftComposerAudios().length > 0) {\n <span class=\"ax-mx-1\">·</span>\n }\n @if (draftComposerAudios().length > 0) {\n <span>{{ draftComposerAudios().length }}\n {{ '@ai-management:chat.composer-audio-count' | translate | async }}</span>\n }\n @if (draftComposerFiles().length > 0) {\n @if (draftComposerImages().length > 0 || draftComposerAudios().length > 0) {\n <span class=\"ax-mx-1\">·</span>\n }\n <span>{{ draftComposerFiles().length }}\n {{ '@ai-management:chat.composer-documents-count' | translate | async }}</span>\n }\n }\n </span>\n </div>\n @if (draftComposerImages().length > 0) {\n <div class=\"ax-flex ax-flex-wrap ax-gap-1.5\">\n @for (slot of draftComposerImages(); track slot.clientId) {\n <div\n class=\"ax-relative ax-h-12 ax-w-12 ax-shrink-0 ax-overflow-hidden ax-rounded-md ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest\">\n <img [src]=\"slot.previewUrl\" [alt]=\"slot.name ?? ''\" class=\"ax-h-full ax-w-full ax-object-cover\" />\n @if (!slot.fileId) {\n <span\n class=\"ax-absolute ax-inset-0 ax-flex ax-items-center ax-justify-center ax-bg-default/40 ax-text-[0.6rem] ax-font-medium ax-text-on-lightest\">…</span>\n }\n <button type=\"button\"\n class=\"ax-absolute ax-end-0.5 ax-top-0.5 ax-flex ax-h-4 ax-w-4 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.65rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-image' | translate | async) ?? ''\"\n (click)=\"removeDraftImage(slot.clientId)\">\n ×\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerAudios().length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n @for (slot of draftComposerAudios(); track slot.clientId) {\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-1.5 ax-rounded ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest ax-px-1.5 ax-py-1 ax-text-[0.65rem] ax-min-w-0\">\n <span class=\"ax-truncate ax-text-on-lightest\" [attr.title]=\"slot.name ?? ''\">\n {{ '@ai-management:chat.attached-audio-label' | translate | async }}:\n {{ slot.name?.trim() || ('@ai-management:chat.audio-untitled' | translate | async) }}\n </span>\n @if (!slot.fileId) {\n <span class=\"ax-text-muted ax-shrink-0\">…</span>\n }\n <button type=\"button\"\n class=\"ax-shrink-0 ax-flex ax-h-5 ax-w-5 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.75rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-audio' | translate | async) ?? ''\"\n (click)=\"removeDraftAudio(slot.clientId)\">\n ×\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerFiles().length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n @for (slot of draftComposerFiles(); track slot.clientId) {\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-1.5 ax-rounded ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest ax-px-1.5 ax-py-1 ax-text-[0.65rem] ax-min-w-0\">\n <span class=\"ax-truncate ax-text-on-lightest\" [attr.title]=\"slot.name ?? ''\">\n {{ '@ai-management:chat.attached-document-label' | translate | async }}:\n {{ slot.name?.trim() || ('@ai-management:chat.document-untitled' | translate | async) }}\n </span>\n @if (!slot.fileId) {\n <span class=\"ax-text-muted ax-shrink-0\">…</span>\n }\n <button type=\"button\"\n class=\"ax-shrink-0 ax-flex ax-h-5 ax-w-5 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.75rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-document' | translate | async) ?? ''\"\n (click)=\"removeDraftFile(slot.clientId)\">\n ×\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <div class=\"axm-ai-assist-prompt-box__body ax-flex ax-min-h-0 ax-flex-col\">\n <ax-text-area class=\"axm-ai-assist-prompt-box__prompt-input ax-w-full ax-min-h-0\" [rows]=\"3\"\n [disabled]=\"busy()\" [ngModel]=\"promptDraft()\" (ngModelChange)=\"onPromptDraftChange($event)\"\n (keydown)=\"onPromptKeydown($event)\" [placeholder]=\"\n placeholder().trim().length > 0\n ? placeholder()\n : ((('@ai-management:assist-popup.placeholder' | translate | async) ?? ''))\n \"></ax-text-area>\n </div>\n\n <div\n class=\"axm-ai-assist-prompt-box__footer ax-flex ax-shrink-0 ax-items-center ax-justify-between ax-gap-2\">\n <ax-button class=\"axm-ai-assist-prompt-box__menu-trigger\" look=\"solid\" color=\"primary\" type=\"button\"\n [iconOnly]=\"true\" [disabled]=\"busy()\"\n [attr.aria-label]=\"('@ai-management:assist-popup.composer-menu-aria' | translate | async) ?? ''\">\n <ax-prefix>\n <i class=\"fa-light fa-plus ax-text-sm\" aria-hidden=\"true\"></i>\n </ax-prefix>\n <ax-dropdown-panel #composerMenu>\n <ax-button-item-list class=\"ax-min-w-56\">\n <ax-button-item [text]=\"('@ai-management:chat.upload-images' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-images-aria' | translate | async) ?? ''\"\n (onClick)=\"openImagePicker(); composerMenu.close()\">\n <ax-prefix>\n <i class=\"fa-light fa-image ax-size-4 ax-text-center\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item [text]=\"('@ai-management:chat.upload-audio' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-audio-aria' | translate | async) ?? ''\"\n (onClick)=\"openAudioPicker(); composerMenu.close()\">\n <ax-prefix>\n <i class=\"fa-light fa-microphone ax-size-4 ax-text-center\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item [text]=\"('@ai-management:chat.upload-documents' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-documents-aria' | translate | async) ?? ''\"\n (onClick)=\"openDocumentPicker(); composerMenu.close()\">\n <ax-prefix>\n <i class=\"fa-light fa-paperclip ax-size-4 ax-text-center\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <ax-button class=\"axm-ai-assist-prompt-box__send axm-ai-assist-prompt-box__send-gradient\"\n color=\"primary\" type=\"button\" [disabled]=\"busy() || !canSend()\" [text]=\"\n busy()\n ? (('@ai-management:assist-popup.generating' | translate | async) ?? '')\n : (('@ai-management:assist-popup.generate' | translate | async) ?? '')\n \" (onClick)=\"onSend()\"></ax-button>\n </div>\n </div>\n</div>","//#region ---- Imports ----\n\nimport type {\n AXPAiAssistPromptSubmitPayload,\n AXPAiAssistRunResult,\n AXPAiAssistShowOptions,\n} from '../types/ai-assist.types';\nimport { AXMAiAssistPromptBoxComponent } from './ai-assist-prompt-box/ai-assist-prompt-box.component';\nimport { AXOverlayService, type AXOverlayRef } from '@acorex/cdk/overlay';\nimport { Injectable, inject } from '@angular/core';\n\n//#endregion\n\n\n\n//#region ---- Service ----\n\n/**\n * Opens the AI assist prompt box in a bottom overlay using {@link AXOverlayService} (`centered: false`, panel CSS).\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMAiAssistPromptBoxService {\n //#region ---- Services & Dependencies ----\n\n private readonly overlayService = inject(AXOverlayService);\n\n //#endregion\n\n //#region ---- Private Properties ----\n\n private overlayRef: AXOverlayRef<AXMAiAssistPromptBoxComponent> | null = null;\n\n private pendingResolve: ((value: AXPAiAssistRunResult | null) => void) | null = null;\n\n private settled = false;\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Presents the assist prompt box and resolves when the user submits, cancels, or dismisses the overlay.\n */\n open(\n options: AXPAiAssistShowOptions,\n executeRun: (payload: AXPAiAssistPromptSubmitPayload) => Promise<AXPAiAssistRunResult>,\n ): Promise<AXPAiAssistRunResult | null> {\n if (this.pendingResolve) {\n const superseded = this.pendingResolve;\n this.pendingResolve = null;\n superseded(null);\n }\n this.disposeOverlayOnly();\n\n return new Promise<AXPAiAssistRunResult | null>((resolve) => {\n this.pendingResolve = resolve;\n this.settled = false;\n\n const requestClose = (result: AXPAiAssistRunResult | null): void => {\n this.settle(result);\n this.overlayRef?.dispose();\n };\n\n void this.overlayService\n .create(AXMAiAssistPromptBoxComponent, {\n centered: false,\n width: 'auto',\n actionSheetStyle: false,\n panelClass: ['axm-ai-assist-prompt-box-shell'],\n backdrop: {\n enabled: false,\n background: false,\n closeOnClick: false,\n },\n closeOnEscape: true,\n closeOnOutsideClick: true,\n inputs: {\n title: options.title,\n placeholder: options.placeholder ?? '',\n initialPrompt: options.initialPrompt ?? '',\n initialAssistId: options.assistId,\n initialDirectAgentId: options.directAgentId,\n runPrompt: executeRun,\n requestClose,\n },\n onDispose: () => {\n this.overlayRef = null;\n if (!this.settled && this.pendingResolve) {\n this.settle(null);\n }\n },\n })\n .then((ref) => {\n this.overlayRef = ref;\n })\n .catch(() => {\n this.settle(null);\n });\n });\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private settle(result: AXPAiAssistRunResult | null): void {\n if (this.settled) {\n return;\n }\n const done = this.pendingResolve;\n if (!done) {\n return;\n }\n this.settled = true;\n this.pendingResolve = null;\n done(result);\n }\n\n private disposeOverlayOnly(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPAiAgentOutputContract, AXPAiAgentOutputKind } from './ai-agent-output-contract.types';\nimport {\n AXPAI_AGENT_OUTPUT_CONTRACT_DEFAULT_STRUCTURED_RETRIES,\n resolveOutputTranscriptSegment,\n} from './ai-agent-output-contract.types';\n\n//#endregion\n\nconst STRUCTURED_OUTPUT_KINDS = new Set<AXPAiAgentOutputKind>(['object', 'array']);\n\nfunction usesStructuredFinalize(kind: AXPAiAgentOutputKind): boolean {\n return STRUCTURED_OUTPUT_KINDS.has(kind);\n}\n\n//#region ---- JSON Schema (minimal subset) ----\n\n/**\n * Minimal JSON-Schema-like object for native provider hints and local validation.\n * Aligns with shapes emitted by {@link inputOptionDefinitionsToJsonSchema} in connectivity mock support.\n */\nexport interface AXPAiJsonSchemaLike {\n type?: 'object' | 'array' | 'string' | 'number' | 'integer' | 'boolean' | 'null';\n properties?: Record<string, AXPAiJsonSchemaLike>;\n items?: AXPAiJsonSchemaLike | AXPAiJsonSchemaLike[];\n required?: string[];\n enum?: unknown[];\n additionalProperties?: boolean | AXPAiJsonSchemaLike;\n description?: string;\n [key: string]: unknown;\n}\n\n//#endregion\n\n//#region ---- Derive provider format ----\n\n/** Provider-native structured output hint (OpenAI `response_format`, Gemini `responseMimeType`). */\nexport type AXPAiResponseFormat =\n | { type: 'text' }\n | { type: 'json_object' }\n | {\n type: 'json_schema';\n schema: AXPAiJsonSchemaLike;\n name?: string;\n strict?: boolean;\n };\n\n//#endregion\n\n//#region ---- Retry defaults ----\n\n/** Default structured retry count for a contract kind when `structuredRetries` is omitted. */\nexport function defaultRetriesForKind(kind: AXPAiAgentOutputKind): number {\n if (kind === 'string') {\n return 0;\n }\n return AXPAI_AGENT_OUTPUT_CONTRACT_DEFAULT_STRUCTURED_RETRIES;\n}\n\n//#endregion\n\n//#region ---- Derive provider format ----\n\nfunction isJsonSchemaLike(value: unknown): value is AXPAiJsonSchemaLike {\n return value != null && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport function parseResponseFormat(raw: unknown): AXPAiResponseFormat | undefined {\n if (raw == null || typeof raw !== 'object' || Array.isArray(raw)) {\n return undefined;\n }\n const o = raw as Record<string, unknown>;\n const t = o['type'];\n if (t === 'text') {\n return { type: 'text' };\n }\n if (t === 'json_object') {\n return { type: 'json_object' };\n }\n if (t === 'json_schema' && isJsonSchemaLike(o['schema'])) {\n const name = typeof o['name'] === 'string' ? o['name'].trim() : undefined;\n const strict = o['strict'] === true;\n return {\n type: 'json_schema',\n schema: o['schema'],\n ...(name && name.length > 0 ? { name } : {}),\n ...(strict ? { strict: true } : {}),\n };\n }\n return undefined;\n}\n\n/**\n * Maps an effective output contract to a provider request hint.\n * Explicit {@link AXPAiAgentOutputContract.providerResponseFormat} wins; otherwise derived from `kind` + `schema`.\n */\nexport function deriveProviderResponseFormat(contract: AXPAiAgentOutputContract): AXPAiResponseFormat | undefined {\n if (contract.providerResponseFormat) {\n return contract.providerResponseFormat;\n }\n\n if (!usesStructuredFinalize(contract.kind)) {\n return undefined;\n }\n\n if (contract.schema && isJsonSchemaLike(contract.schema)) {\n const segment = resolveOutputTranscriptSegment(contract);\n const name =\n contract.schemaName?.trim() ||\n (segment === 'node' ? 'widget_layout' : segment === 'followUp' ? 'follow_up' : 'structured_output');\n return {\n type: 'json_schema',\n schema: contract.schema,\n name,\n strict: contract.schemaStrict === true,\n };\n }\n\n return { type: 'json_object' };\n}\n\nexport function parseJsonSchemaLike(raw: unknown): AXPAiJsonSchemaLike | undefined {\n if (!isJsonSchemaLike(raw)) {\n return undefined;\n }\n return raw;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n AXPAgentOutputContract,\n AXPAgentOutputKind,\n AXPAgentResponseFormat,\n AXPJsonSchemaLike,\n AXPOutputTranscriptSegmentId,\n} from '@acorex/platform/common';\nimport { AXP_AGENT_OUTPUT_CONTRACT_DEFAULT_STRUCTURED_RETRIES } from '@acorex/platform/common';\nimport { parseJsonSchemaLike, parseResponseFormat } from './ai-response-format.types';\n\n//#endregion\n\n//#region ---- Re-exports (platform contract types) ----\n\n/** @see {@link AXPAgentOutputKind} */\nexport type AXPAiAgentOutputKind = AXPAgentOutputKind;\n\n/** @see {@link AXPOutputTranscriptSegmentId} */\nexport type AXPAiOutputTranscriptSegment = AXPOutputTranscriptSegmentId;\n\n/** @see {@link AXPAgentOutputContract} */\nexport type AXPAiAgentOutputContract = AXPAgentOutputContract;\n\n/** @see {@link AXPJsonSchemaLike} */\nexport type AXPAiJsonSchemaLike = AXPJsonSchemaLike;\n\n/** @see {@link AXPAgentResponseFormat} */\nexport type AXPAiResponseFormat = AXPAgentResponseFormat;\n\n/** @see {@link AXP_AGENT_OUTPUT_CONTRACT_DEFAULT_STRUCTURED_RETRIES} */\nexport const AXPAI_AGENT_OUTPUT_CONTRACT_DEFAULT_STRUCTURED_RETRIES =\n AXP_AGENT_OUTPUT_CONTRACT_DEFAULT_STRUCTURED_RETRIES;\n\n//#endregion\n\n//#region ---- Resolve helpers ----\n\nconst STRUCTURED_OUTPUT_KINDS = new Set<AXPAiAgentOutputKind>(['object', 'array']);\n\nfunction isOutputKind(value: unknown): value is AXPAiAgentOutputKind {\n return value === 'string' || value === 'object' || value === 'array';\n}\n\nfunction isTranscriptSegment(value: unknown): value is AXPAiOutputTranscriptSegment {\n return value === 'text' || value === 'node' || value === 'followUp';\n}\n\n/** Resolved transcript mapping for an object contract (defaults to `text`). */\nexport function resolveOutputTranscriptSegment(contract: AXPAiAgentOutputContract): AXPAiOutputTranscriptSegment {\n if (contract.kind !== 'object') {\n return 'text';\n }\n return contract.transcriptSegment ?? 'text';\n}\n\n//#endregion\n\n//#region ---- Parser ----\n\n/**\n * Normalizes persisted `outputContract` (object or JSON string from entity forms).\n * Returns `null` when absent or invalid (engine treats as implicit `string`).\n */\nexport function parseAgentOutputContract(raw: unknown): AXPAiAgentOutputContract | null {\n let value: unknown = raw;\n if (typeof raw === 'string') {\n const t = raw.trim();\n if (!t.length) {\n return null;\n }\n try {\n value = JSON.parse(t) as unknown;\n } catch {\n return null;\n }\n }\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return null;\n }\n const o = value as Record<string, unknown>;\n const kind = o['kind'];\n if (!isOutputKind(kind)) {\n return null;\n }\n const instruction = typeof o['instruction'] === 'string' ? o['instruction'].trim() : undefined;\n const schemaSummary = typeof o['schemaSummary'] === 'string' ? o['schemaSummary'].trim() : undefined;\n const validationCommandName =\n typeof o['validationCommandName'] === 'string' ? o['validationCommandName'].trim() : undefined;\n const schema = parseJsonSchemaLike(o['schema']);\n const schemaName = typeof o['schemaName'] === 'string' ? o['schemaName'].trim() : undefined;\n const schemaStrict = o['schemaStrict'] === true;\n const providerResponseFormat = parseResponseFormat(o['providerResponseFormat']);\n const transcriptSegment =\n kind === 'object' && isTranscriptSegment(o['transcriptSegment']) ? o['transcriptSegment'] : undefined;\n let structuredRetries: number | undefined;\n if (typeof o['structuredRetries'] === 'number' && !Number.isNaN(o['structuredRetries'])) {\n structuredRetries = Math.max(0, Math.min(10, Math.floor(o['structuredRetries'])));\n }\n return {\n kind,\n ...(transcriptSegment ? { transcriptSegment } : {}),\n ...(instruction && instruction.length > 0 ? { instruction } : {}),\n ...(schemaSummary && schemaSummary.length > 0 ? { schemaSummary } : {}),\n ...(schema ? { schema } : {}),\n ...(schemaName && schemaName.length > 0 ? { schemaName } : {}),\n ...(schemaStrict ? { schemaStrict: true } : {}),\n ...(validationCommandName && validationCommandName.length > 0 ? { validationCommandName } : {}),\n ...(structuredRetries !== undefined ? { structuredRetries } : {}),\n ...(providerResponseFormat ? { providerResponseFormat } : {}),\n };\n}\n\n/** Resolved contract for engine (never null; defaults to string). */\nexport function resolveAgentOutputContract(raw: unknown): AXPAiAgentOutputContract {\n const parsed = parseAgentOutputContract(raw);\n if (parsed) {\n return parsed;\n }\n return { kind: 'string' };\n}\n\nexport function axpAiAgentOutputContractUsesStructuredFinalize(contract: AXPAiAgentOutputContract): boolean {\n return STRUCTURED_OUTPUT_KINDS.has(contract.kind);\n}\n\n/** Structured kinds omit the string role baseline (Markdown prose hint) in the mock engine. */\nexport function axpAiAgentOutputContractOmitsRoleBaseline(contract: AXPAiAgentOutputContract): boolean {\n return axpAiAgentOutputContractUsesStructuredFinalize(contract);\n}\n\nexport function axpAiAgentOutputContractStructuredRetryCap(contract: AXPAiAgentOutputContract): number {\n if (!axpAiAgentOutputContractUsesStructuredFinalize(contract)) {\n return 0;\n }\n if (typeof contract.structuredRetries === 'number') {\n return Math.max(0, Math.min(10, Math.floor(contract.structuredRetries)));\n }\n return AXPAI_AGENT_OUTPUT_CONTRACT_DEFAULT_STRUCTURED_RETRIES;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPAiAgentOutputContract } from '../../engine/ai-agent-output-contract.types';\nimport { parseAgentOutputContract } from '../../engine/ai-agent-output-contract.types';\nimport type { AXPAiAssistRunInput } from '../../types/ai-assist.types';\n\n//#endregion\n\n//#region ---- Legacy → contract ----\n\n/**\n * Maps legacy `expectStructuredOutput` flags to an {@link AXPAiAgentOutputContract}, or returns explicit `outputContract`.\n */\nexport function outputContractFromAssistRunInput(input: AXPAiAssistRunInput): AXPAiAgentOutputContract | null {\n if (input.outputContract) {\n const parsed = parseAgentOutputContract(input.outputContract);\n if (parsed) {\n return parsed;\n }\n }\n if (!input.expectStructuredOutput) {\n return null;\n }\n const instruction = input.structuredOutputInstruction?.trim();\n const schemaSummary = input.structuredOutputSchemaSummary?.trim();\n let structuredRetries: number | undefined;\n if (typeof input.maxStructuredRetries === 'number' && !Number.isNaN(input.maxStructuredRetries)) {\n structuredRetries = Math.max(0, Math.min(10, Math.floor(input.maxStructuredRetries)));\n }\n return {\n kind: 'object',\n ...(instruction && instruction.length > 0 ? { instruction } : {}),\n ...(schemaSummary && schemaSummary.length > 0 ? { schemaSummary } : {}),\n ...(structuredRetries !== undefined ? { structuredRetries } : {}),\n };\n}\n\n//#endregion\n","//#region ---- Transcript ----\n\nimport type { AXPAiChatMessage } from '../../engine/ai-engine.types';\nimport { axpAiChatMessageGetText } from '../../engine/ai-chat-display.util';\n\n/**\n * Text segments from the last assistant message (`type: 'text'` only).\n * Omits `think` and `node` segments so JSON parsing is not polluted by widget envelopes or reasoning blocks stored separately.\n */\nexport function extractLastAssistantTextSegments(messages: AXPAiChatMessage[]): string[] {\n for (let i = messages.length - 1; i >= 0; i--) {\n const m = messages[i];\n if (m.role !== 'assistant') {\n continue;\n }\n const parts: string[] = [];\n for (const r of m.responses) {\n if (r.type === 'text') {\n parts.push(r.content);\n }\n }\n return parts;\n }\n return [];\n}\n\n/**\n * Combined text for structured JSON extraction (text segments only).\n */\nexport function extractLastAssistantStructuredParts(messages: AXPAiChatMessage[]): {\n combined: string;\n segments: string[];\n} {\n const segments = extractLastAssistantTextSegments(messages);\n const combined = segments.join('\\n\\n').trim();\n return { combined, segments };\n}\n\n/**\n * Concatenated plain text from the last assistant message in the transcript (includes `node` payloads like {@link axpAiChatMessageGetText}).\n */\nexport function extractLastAssistantPlainText(messages: AXPAiChatMessage[]): string {\n for (let i = messages.length - 1; i >= 0; i--) {\n const m = messages[i];\n if (m.role === 'assistant') {\n return axpAiChatMessageGetText(m).trim();\n }\n }\n return '';\n}\n\n//#endregion\n","//#region ---- Retry prompt ----\n\n/**\n * User follow-up appended to the transcript when structured JSON parse/validation fails.\n *\n * @param validationDetail - Parse or schema validation error text.\n * @param schemaSummary - Optional expected shape (e.g. TypeScript-style) to improve retry quality.\n * @param failurePhase - Parse failures get stronger anti-truncation wording; validator failures focus on schema/rules.\n */\nexport function buildStructuredOutputRetryUserText(\n validationDetail: string,\n schemaSummary?: string,\n failurePhase?: 'parse' | 'validator',\n): string {\n const detail = validationDetail.trim() || 'Unknown validation error.';\n const lines: string[] = [\n 'The previous response could not be parsed or validated:',\n detail,\n '',\n ];\n if (failurePhase === 'parse') {\n lines.push(\n 'Likely causes: incomplete/truncated JSON, extra prose around the value, or unclosed strings/brackets.',\n 'Reply with ONE complete JSON value only — fully closed strings, braces, and brackets. Do not stop until the JSON is valid.',\n '',\n );\n } else if (failurePhase === 'validator') {\n lines.push(\n 'The JSON was parsed but did not match the required rules or shape. Fix the structure and values; keep the reply as a single JSON value only.',\n '',\n );\n }\n const shape = schemaSummary?.trim();\n if (shape && shape.length > 0) {\n lines.push('Expected JSON shape (summary):', shape, '');\n }\n lines.push(\n 'Return ONLY valid JSON matching the requested structure.',\n 'Do not include markdown fences or explanations.',\n );\n return lines.join('\\n');\n}\n\n//#endregion\n","//#region ---- Parse structured assistant text ----\n\n/**\n * Parses assistant plain text as JSON, supporting optional ```json fences.\n */\nexport function tryParseStructuredAssistantText(text: string): unknown | undefined {\n const t = text.trim();\n if (!t) {\n return undefined;\n }\n try {\n return JSON.parse(t) as unknown;\n } catch {\n const fence = /^```(?:json)?\\s*([\\s\\S]*?)```$/im.exec(t);\n if (fence?.[1]) {\n try {\n return JSON.parse(fence[1].trim()) as unknown;\n } catch {\n return undefined;\n }\n }\n return undefined;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { tryParseStructuredAssistantText } from './parse-structured-assistant-text';\n\n//#endregion\n\n//#region ---- Balanced JSON extraction ----\n\nfunction tryParseBalancedJsonObjectAt(s: string, start: number): { value: unknown; end: number } | null {\n if (s[start] !== '{') {\n return null;\n }\n let depth = 0;\n let inString = false;\n let escape = false;\n for (let i = start; i < s.length; i++) {\n const c = s[i];\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (c === '\\\\') {\n escape = true;\n continue;\n }\n if (c === '\"') {\n inString = false;\n }\n continue;\n }\n if (c === '\"') {\n inString = true;\n continue;\n }\n if (c === '{') {\n depth++;\n } else if (c === '}') {\n depth--;\n if (depth === 0) {\n const slice = s.slice(start, i + 1);\n try {\n return { value: JSON.parse(slice) as unknown, end: i + 1 };\n } catch {\n return null;\n }\n }\n }\n }\n return null;\n}\n\nfunction tryParseBalancedJsonArrayAt(s: string, start: number): { value: unknown; end: number } | null {\n if (s[start] !== '[') {\n return null;\n }\n let depth = 0;\n let inString = false;\n let escape = false;\n for (let i = start; i < s.length; i++) {\n const c = s[i];\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (c === '\\\\') {\n escape = true;\n continue;\n }\n if (c === '\"') {\n inString = false;\n }\n continue;\n }\n if (c === '\"') {\n inString = true;\n continue;\n }\n if (c === '[') {\n depth++;\n } else if (c === ']') {\n depth--;\n if (depth === 0) {\n const slice = s.slice(start, i + 1);\n try {\n return { value: JSON.parse(slice) as unknown, end: i + 1 };\n } catch {\n return null;\n }\n }\n }\n }\n return null;\n}\n\n/**\n * Finds first top-level JSON object or array and returns balanced slice text.\n */\nfunction extractFirstBalancedJsonSlice(s: string): string | undefined {\n const iObj = s.indexOf('{');\n const iArr = s.indexOf('[');\n let start = -1;\n let kind: 'obj' | 'arr' | null = null;\n if (iObj >= 0 && iArr >= 0) {\n if (iObj <= iArr) {\n start = iObj;\n kind = 'obj';\n } else {\n start = iArr;\n kind = 'arr';\n }\n } else if (iObj >= 0) {\n start = iObj;\n kind = 'obj';\n } else if (iArr >= 0) {\n start = iArr;\n kind = 'arr';\n }\n if (start < 0 || !kind) {\n return undefined;\n }\n const parsed =\n kind === 'obj' ? tryParseBalancedJsonObjectAt(s, start) : tryParseBalancedJsonArrayAt(s, start);\n if (!parsed) {\n return undefined;\n }\n return s.slice(start, parsed.end);\n}\n\n//#endregion\n\n//#region ---- Lightweight repair ----\n\n/**\n * Removes assistant reasoning tags when they appear inside the text channel (they break JSON extraction).\n */\nexport function stripAssistantThinkingXml(raw: string): string {\n return raw\n .replace(/<(?:redacted_thinking|think)\\b[^>]*>[\\s\\S]*?<\\/(?:redacted_thinking|think)>/gi, '')\n .replace(/<\\/?(?:redacted_thinking|think)>/gi, '')\n .trim();\n}\n\nfunction stripOuterMarkdownFence(s: string): string {\n const t = s.trim();\n const fence = /^```(?:json)?\\s*([\\s\\S]*?)```$/im.exec(t);\n if (fence?.[1]) {\n return fence[1].trim();\n }\n return t;\n}\n\n/** Removes trailing commas before `}` or `]` outside of strings (best-effort for LLM JSON). */\nfunction removeTrailingCommasBeforeBrackets(jsonLike: string): string {\n return jsonLike.replace(/,(\\s*[}\\]])/g, '$1');\n}\n\nfunction tryParseJsonLenient(slice: string): unknown | undefined {\n const t = slice.trim();\n if (!t) {\n return undefined;\n }\n try {\n return JSON.parse(t) as unknown;\n } catch {\n try {\n return JSON.parse(removeTrailingCommasBeforeBrackets(t)) as unknown;\n } catch {\n return undefined;\n }\n }\n}\n\n/**\n * Best-effort parse when the model stopped mid-JSON (truncated completion): closes `{` `[` using a delimiter stack\n * with string awareness. Unsafe inside unclosed strings; last resort after normal repair.\n */\nfunction tryRepairTruncatedJsonWithDelimiterStack(raw: string): unknown | undefined {\n const s = raw.trim();\n if (!s.length) {\n return undefined;\n }\n const stack: ('{' | '[')[] = [];\n let inStr = false;\n let esc = false;\n for (let i = 0; i < s.length; i++) {\n const c = s[i];\n if (inStr) {\n if (esc) {\n esc = false;\n continue;\n }\n if (c === '\\\\') {\n esc = true;\n continue;\n }\n if (c === '\"') {\n inStr = false;\n }\n continue;\n }\n if (c === '\"') {\n inStr = true;\n continue;\n }\n if (c === '{') {\n stack.push('{');\n } else if (c === '[') {\n stack.push('[');\n } else if (c === '}') {\n if (stack.length > 0 && stack[stack.length - 1] === '{') {\n stack.pop();\n }\n } else if (c === ']') {\n if (stack.length > 0 && stack[stack.length - 1] === '[') {\n stack.pop();\n }\n }\n }\n let suffix = '';\n if (inStr) {\n suffix = '\"';\n }\n for (let k = stack.length - 1; k >= 0; k--) {\n suffix += stack[k] === '{' ? '}' : ']';\n }\n if (!suffix.length) {\n return undefined;\n }\n try {\n return JSON.parse(s + suffix) as unknown;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Parses assistant text after cheap local repairs (fences, trailing commas, first JSON value slice).\n * Does not call the model.\n */\nexport function parseStructuredAssistantWithLocalRepair(raw: string): unknown | undefined {\n const cleaned = stripAssistantThinkingXml(raw);\n const direct = tryParseStructuredAssistantText(cleaned);\n if (direct !== undefined) {\n return direct;\n }\n\n const stripped = stripOuterMarkdownFence(cleaned);\n let v = tryParseJsonLenient(stripped);\n if (v !== undefined) {\n return v;\n }\n\n const slice = extractFirstBalancedJsonSlice(cleaned) ?? extractFirstBalancedJsonSlice(stripped);\n if (slice !== undefined) {\n v = tryParseJsonLenient(slice);\n if (v !== undefined) {\n return v;\n }\n v = tryRepairTruncatedJsonWithDelimiterStack(slice);\n if (v !== undefined) {\n return v;\n }\n }\n\n v = tryRepairTruncatedJsonWithDelimiterStack(cleaned) ?? tryRepairTruncatedJsonWithDelimiterStack(stripped);\n if (v !== undefined) {\n return v;\n }\n\n return undefined;\n}\n\n/**\n * Tries combined assistant text, then each text segment from last to first (models often put JSON only in the last paragraph).\n */\nexport function parseStructuredAssistantWithSegmentFallback(combined: string, segments: readonly string[]): unknown | undefined {\n let v = parseStructuredAssistantWithLocalRepair(combined);\n if (v !== undefined) {\n return v;\n }\n const seen = new Set<string>();\n const mark = stripAssistantThinkingXml(combined).trim();\n if (mark.length > 0) {\n seen.add(mark);\n }\n for (let i = segments.length - 1; i >= 0; i--) {\n const seg = stripAssistantThinkingXml(segments[i] ?? '').trim();\n if (!seg.length || seen.has(seg)) {\n continue;\n }\n seen.add(seg);\n v = parseStructuredAssistantWithLocalRepair(seg);\n if (v !== undefined) {\n return v;\n }\n }\n return undefined;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPAiJsonSchemaLike } from '../../engine/ai-response-format.types';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface JsonSchemaMiniValidationError {\n path: string;\n message: string;\n}\n\nexport type JsonSchemaMiniValidationResult =\n | { ok: true }\n | { ok: false; errors: JsonSchemaMiniValidationError[] };\n\n//#endregion\n\n//#region ---- Validator ----\n\nfunction typeMatches(schemaType: string | undefined, value: unknown): boolean {\n if (schemaType === undefined) {\n return true;\n }\n switch (schemaType) {\n case 'object':\n return value != null && typeof value === 'object' && !Array.isArray(value);\n case 'array':\n return Array.isArray(value);\n case 'string':\n return typeof value === 'string';\n case 'number':\n return typeof value === 'number' && !Number.isNaN(value);\n case 'integer':\n return typeof value === 'number' && Number.isInteger(value);\n case 'boolean':\n return typeof value === 'boolean';\n case 'null':\n return value === null;\n default:\n return true;\n }\n}\n\nfunction validateNode(\n schema: AXPAiJsonSchemaLike,\n value: unknown,\n path: string,\n errors: JsonSchemaMiniValidationError[],\n): void {\n if (schema.enum && schema.enum.length > 0) {\n if (!schema.enum.some((e) => Object.is(e, value))) {\n errors.push({ path, message: `Value is not one of the allowed enum values.` });\n return;\n }\n }\n\n if (!typeMatches(schema.type, value)) {\n errors.push({\n path,\n message: `Expected type \"${schema.type ?? 'any'}\", got ${value === null ? 'null' : typeof value}.`,\n });\n return;\n }\n\n if (schema.type === 'object' && value != null && typeof value === 'object' && !Array.isArray(value)) {\n const o = value as Record<string, unknown>;\n const props = schema.properties ?? {};\n const required = schema.required ?? [];\n\n for (const key of required) {\n if (!(key in o) || o[key] === undefined) {\n errors.push({ path: path ? `${path}.${key}` : key, message: 'Required property is missing.' });\n }\n }\n\n for (const [key, propSchema] of Object.entries(props)) {\n if (key in o && o[key] !== undefined) {\n validateNode(propSchema, o[key], path ? `${path}.${key}` : key, errors);\n }\n }\n\n if (schema.additionalProperties === false) {\n for (const key of Object.keys(o)) {\n if (!(key in props)) {\n errors.push({\n path: path ? `${path}.${key}` : key,\n message: 'Additional property is not allowed.',\n });\n }\n }\n } else if (schema.additionalProperties && typeof schema.additionalProperties === 'object') {\n for (const [key, val] of Object.entries(o)) {\n if (!(key in props)) {\n validateNode(schema.additionalProperties, val, path ? `${path}.${key}` : key, errors);\n }\n }\n }\n }\n\n if (schema.type === 'array' && Array.isArray(value) && schema.items) {\n const itemSchema = Array.isArray(schema.items) ? schema.items[0] : schema.items;\n if (itemSchema) {\n value.forEach((item, index) => {\n validateNode(itemSchema, item, `${path}[${index}]`, errors);\n });\n }\n }\n}\n\n/**\n * Validates a value against a minimal JSON Schema subset (types, required, enum, properties, items).\n */\nexport function validateJsonSchemaMini(\n schema: AXPAiJsonSchemaLike,\n value: unknown,\n): JsonSchemaMiniValidationResult {\n const errors: JsonSchemaMiniValidationError[] = [];\n validateNode(schema, value, '', errors);\n if (errors.length > 0) {\n return { ok: false, errors };\n }\n return { ok: true };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPAiAgentOutputContract } from '../../engine/ai-agent-output-contract.types';\nimport { axpAiAgentOutputContractUsesStructuredFinalize } from '../../engine/ai-agent-output-contract.types';\nimport type { AXPAiStructuredValidator } from '../../types/ai-assist.types';\n\nimport { validateJsonSchemaMini } from './json-schema-mini-validator';\nimport {\n parseStructuredAssistantWithSegmentFallback,\n stripAssistantThinkingXml,\n} from './repair-structured-assistant-parse';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface ContractValidationError {\n phase: 'parse' | 'validator';\n message: string;\n details?: unknown;\n}\n\nexport type ContractValidationResult =\n | { ok: true; value: unknown }\n | { ok: false; errors: ContractValidationError[] };\n\nexport interface ValidateAgainstContractCommandExecutor {\n execute(commandName: string, args: Record<string, unknown>): Promise<unknown>;\n}\n\nexport interface ValidateAgainstContractParams {\n contract: AXPAiAgentOutputContract;\n assistantPlainText: string;\n textSegmentsFallback?: readonly string[];\n structuredValidator?: AXPAiStructuredValidator;\n commandExecutor?: ValidateAgainstContractCommandExecutor;\n /**\n * When the command returns `{ success, data: { valid, errors?, normalizedJson? } }` envelope shape.\n */\n parseCommandEnvelope?: (raw: unknown) => {\n valid: boolean;\n errorMessage?: string;\n normalizedJson?: string;\n };\n}\n\n//#endregion\n\n//#region ---- Parse + validate ----\n\nfunction defaultParseCommandEnvelope(raw: unknown): {\n valid: boolean;\n errorMessage?: string;\n normalizedJson?: string;\n} {\n if (raw == null || typeof raw !== 'object' || Array.isArray(raw)) {\n return { valid: false, errorMessage: 'Validation command returned an invalid envelope.' };\n }\n const o = raw as Record<string, unknown>;\n if (o['success'] !== true) {\n const err = typeof o['error'] === 'string' ? o['error'] : 'Validation command failed.';\n return { valid: false, errorMessage: err };\n }\n const data = o['data'] as { valid?: boolean; errors?: string[]; normalizedJson?: string } | undefined;\n if (!data?.valid) {\n const errs = Array.isArray(data?.errors) ? data.errors.join('; ') : 'Layout validation failed.';\n return { valid: false, errorMessage: errs };\n }\n const normalized = typeof data.normalizedJson === 'string' ? data.normalizedJson.trim() : '';\n return { valid: true, ...(normalized.length > 0 ? { normalizedJson: normalized } : {}) };\n}\n\n/**\n * Parses assistant text and validates against contract schema, registry command, and optional custom validator.\n */\nexport async function validateAgainstContract(\n params: ValidateAgainstContractParams,\n): Promise<ContractValidationResult> {\n const { contract, assistantPlainText, textSegmentsFallback } = params;\n\n if (!axpAiAgentOutputContractUsesStructuredFinalize(contract)) {\n const trimmed = stripAssistantThinkingXml(assistantPlainText).trim();\n if (!trimmed.length && !(textSegmentsFallback?.some((s) => (s ?? '').trim().length > 0))) {\n return {\n ok: false,\n errors: [{ phase: 'parse', message: 'Assistant returned empty output.' }],\n };\n }\n return { ok: true, value: trimmed };\n }\n\n const combined = stripAssistantThinkingXml(assistantPlainText);\n const parsed = parseStructuredAssistantWithSegmentFallback(combined, textSegmentsFallback ?? []);\n if (parsed === undefined) {\n return {\n ok: false,\n errors: [\n {\n phase: 'parse',\n message:\n 'Could not parse assistant output as JSON (expected a JSON object or array; optional markdown fence; segment fallback and local repair also failed).',\n },\n ],\n };\n }\n\n let value: unknown = parsed;\n\n if (contract.kind === 'array' && !Array.isArray(value)) {\n return {\n ok: false,\n errors: [{ phase: 'validator', message: 'Expected a JSON array as the root value.' }],\n };\n }\n if (contract.kind === 'object' && (value == null || typeof value !== 'object' || Array.isArray(value))) {\n return {\n ok: false,\n errors: [{ phase: 'validator', message: 'Expected a JSON object as the root value.' }],\n };\n }\n\n if (contract.schema) {\n const schemaResult = validateJsonSchemaMini(contract.schema, value);\n if (!schemaResult.ok) {\n const message = schemaResult.errors.map((e) => `${e.path || '(root)'}: ${e.message}`).join('; ');\n return {\n ok: false,\n errors: [{ phase: 'validator', message, details: schemaResult.errors }],\n };\n }\n }\n\n const cmd = contract.validationCommandName?.trim();\n if (cmd && params.commandExecutor) {\n try {\n const raw = await params.commandExecutor.execute(cmd, { json: value });\n const parseEnvelope = params.parseCommandEnvelope ?? defaultParseCommandEnvelope;\n const envelope = parseEnvelope(raw);\n if (!envelope.valid) {\n return {\n ok: false,\n errors: [\n {\n phase: 'validator',\n message: envelope.errorMessage ?? 'Validation command failed.',\n },\n ],\n };\n }\n if (envelope.normalizedJson) {\n try {\n value = JSON.parse(envelope.normalizedJson) as unknown;\n } catch {\n value = envelope.normalizedJson;\n }\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n return {\n ok: false,\n errors: [{ phase: 'validator', message: msg.trim().length > 0 ? msg : 'Validation command failed.' }],\n };\n }\n }\n\n if (params.structuredValidator) {\n try {\n value = await params.structuredValidator(value);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n return {\n ok: false,\n errors: [{ phase: 'validator', message: msg.trim().length > 0 ? msg : 'Structured validation failed.' }],\n };\n }\n }\n\n return { ok: true, value };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPAiStructuredOutputError,\n type AXPAiAssistStructuredOutputRunRaw,\n type AXPAiStructuredValidator,\n type AXPAiAssistTokenUsageSnapshot,\n} from '../../types/ai-assist.types';\n\nimport type { AXPAiAgentOutputContract } from '../../engine/ai-agent-output-contract.types';\nimport { axpAiAgentOutputContractStructuredRetryCap } from '../../engine/ai-agent-output-contract.types';\nimport { axpAiChatTextMessage } from '../../engine/ai-chat-display.util';\nimport type {\n AXPAiChatMessage,\n AXPAiEngineLastProviderPayload,\n AXPAiEngineRunResult,\n AXPAiEngineUsageTotals,\n} from '../../engine/ai-engine.types';\nimport type { AXPAiAssistExecutionResult } from './execution-result.types';\nimport { buildStructuredOutputRetryUserText } from './build-structured-output-retry-user-text';\nimport {\n extractLastAssistantPlainText,\n extractLastAssistantStructuredParts,\n} from './extract-last-assistant-plain-text';\nimport { stripAssistantThinkingXml } from './repair-structured-assistant-parse';\nimport {\n validateAgainstContract,\n type ValidateAgainstContractCommandExecutor,\n} from './validate-against-contract';\n\n//#endregion\n\n//#region ---- Usage aggregation ----\n\nfunction mergeEngineUsageTotals(\n acc: AXPAiEngineUsageTotals | undefined,\n next: AXPAiEngineUsageTotals | undefined,\n): AXPAiEngineUsageTotals | undefined {\n if (!acc && !next) {\n return undefined;\n }\n const promptTokens = (acc?.promptTokens ?? 0) + (next?.promptTokens ?? 0);\n const completionTokens = (acc?.completionTokens ?? 0) + (next?.completionTokens ?? 0);\n const totalTokens = (acc?.totalTokens ?? 0) + (next?.totalTokens ?? 0);\n const cachedPromptTokens = (acc?.cachedPromptTokens ?? 0) + (next?.cachedPromptTokens ?? 0);\n return {\n promptTokens,\n completionTokens,\n totalTokens,\n ...(cachedPromptTokens > 0 ? { cachedPromptTokens } : {}),\n };\n}\n\nfunction engineTotalsToSnapshot(totals: AXPAiEngineUsageTotals | undefined): AXPAiAssistTokenUsageSnapshot | undefined {\n if (!totals) {\n return undefined;\n }\n return {\n promptTokens: totals.promptTokens,\n completionTokens: totals.completionTokens,\n totalTokens: totals.totalTokens,\n ...(totals.cachedPromptTokens != null && totals.cachedPromptTokens > 0\n ? { cachedPromptTokens: totals.cachedPromptTokens }\n : {}),\n };\n}\n\n//#endregion\n\n//#region ---- Error snapshot ----\n\nconst STRUCTURED_OUTPUT_ERROR_TEXT_MAX = 8000;\n\nfunction truncateForStructuredOutputError(text: string): string {\n if (text.length <= STRUCTURED_OUTPUT_ERROR_TEXT_MAX) {\n return text;\n }\n return `${text.slice(0, STRUCTURED_OUTPUT_ERROR_TEXT_MAX)}…`;\n}\n\n//#endregion\n\n//#region ---- Pipeline ----\n\nexport interface RunStructuredOutputPipelineParams {\n /** Effective output contract for this session. */\n contract: AXPAiAgentOutputContract;\n\n /** Initial transcript (system + user, etc.). */\n initialMessages: AXPAiChatMessage[];\n\n /** Runs the engine with the given full message list. */\n executeRun: (messages: AXPAiChatMessage[]) => Promise<AXPAiEngineRunResult>;\n\n /**\n * Extra turns after the first response. Total attempts = 1 + maxStructuredRetries.\n * Use 0 for a single attempt. When omitted, uses {@link contract.structuredRetries}.\n */\n maxStructuredRetries?: number;\n\n /** When false, only one attempt is made. */\n retryOnInvalidStructure: boolean;\n\n structuredValidator?: AXPAiStructuredValidator;\n\n /** Appended to retry user messages (and should be reflected in the initial user prompt by the caller). */\n structuredOutputSchemaSummary?: string;\n\n commandExecutor?: ValidateAgainstContractCommandExecutor;\n}\n\nexport interface RunStructuredOutputPipelineResult extends AXPAiAssistExecutionResult {\n structured: unknown;\n structuredRunRaw: AXPAiAssistStructuredOutputRunRaw;\n}\n\n/**\n * Runs the engine, validates JSON (+ optional custom validator), and appends user retry messages on failure.\n */\nexport async function runStructuredOutputPipeline(\n params: RunStructuredOutputPipelineParams,\n): Promise<RunStructuredOutputPipelineResult> {\n const retryCap =\n params.maxStructuredRetries ?? axpAiAgentOutputContractStructuredRetryCap(params.contract);\n const maxAttempts = params.retryOnInvalidStructure ? 1 + Math.max(0, retryCap) : 1;\n const schemaSummary =\n params.structuredOutputSchemaSummary?.trim() || params.contract.schemaSummary?.trim();\n\n let messages = params.initialMessages;\n let mergedUsage: AXPAiEngineUsageTotals | undefined;\n let lastProvider: AXPAiEngineLastProviderPayload | undefined;\n let prevFailureStructuredFingerprint: string | undefined;\n let prevFailurePhase: 'parse' | 'validator' | undefined;\n\n const perAttemptUsage: { attemptIndex: number; usage?: AXPAiAssistTokenUsageSnapshot; hasLastProviderResult: boolean }[] =\n [];\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n const result = await params.executeRun(messages);\n mergedUsage = mergeEngineUsageTotals(mergedUsage, result.usageTotals);\n\n if (result.lastProviderResult !== undefined) {\n lastProvider = result.lastProviderResult;\n }\n messages = result.messages;\n\n const displayText = extractLastAssistantPlainText(messages);\n const structuredParts = extractLastAssistantStructuredParts(messages);\n const structuredFingerprint = stripAssistantThinkingXml(structuredParts.combined).trim();\n\n const attemptUsageSnapshot = engineTotalsToSnapshot(result.usageTotals);\n perAttemptUsage.push({\n attemptIndex: attempt,\n usage: attemptUsageSnapshot,\n hasLastProviderResult: result.lastProviderResult !== undefined,\n });\n\n if (\n attempt > 1 &&\n prevFailureStructuredFingerprint !== undefined &&\n structuredFingerprint === prevFailureStructuredFingerprint &&\n prevFailurePhase === 'validator'\n ) {\n throw new AXPAiStructuredOutputError({\n message:\n 'Assistant returned the same output as the previous attempt while schema validation still failed; stopped to avoid excess token usage.',\n attempts: attempt,\n lastAssistantText: truncateForStructuredOutputError(displayText),\n validationMessage:\n 'The model repeated identical assistant text after a successful JSON parse; no further retries will be requested for this run.',\n code: 'duplicate_assistant_output',\n });\n }\n\n const validation = await validateAgainstContract({\n contract: params.contract,\n assistantPlainText: structuredParts.combined,\n textSegmentsFallback: structuredParts.segments,\n structuredValidator: params.structuredValidator,\n commandExecutor: params.commandExecutor,\n });\n\n if (validation.ok) {\n const structuredRunRaw: AXPAiAssistStructuredOutputRunRaw = {\n kind: 'structured-output',\n attempts: perAttemptUsage,\n totalUsage: engineTotalsToSnapshot(mergedUsage),\n finalAttempt: attempt,\n lastProviderResult: lastProvider,\n };\n return {\n success: true,\n outputKind: params.contract.kind,\n text: displayText,\n data: validation.value,\n structured: validation.value,\n messages: result.messages,\n structuredRunRaw,\n };\n }\n\n const firstError = validation.errors[0];\n prevFailureStructuredFingerprint = structuredFingerprint;\n prevFailurePhase = firstError?.phase;\n\n const canRetry = params.retryOnInvalidStructure && attempt < maxAttempts;\n if (!canRetry) {\n throw new AXPAiStructuredOutputError({\n message: `Structured output validation failed after ${attempt} attempt(s).`,\n attempts: attempt,\n lastAssistantText: truncateForStructuredOutputError(displayText),\n validationMessage: firstError?.message ?? 'Validation failed.',\n code: 'validation_exhausted',\n });\n }\n\n messages = [\n ...result.messages,\n axpAiChatTextMessage(\n 'user',\n buildStructuredOutputRetryUserText(\n firstError?.message ?? 'Validation failed.',\n schemaSummary,\n firstError?.phase ?? 'parse',\n ),\n ),\n ];\n }\n\n throw new AXPAiStructuredOutputError({\n message: 'Structured output validation failed (unexpected end of retry loop).',\n attempts: maxAttempts,\n lastAssistantText: '',\n validationMessage: 'Unexpected pipeline state.',\n code: 'validation_exhausted',\n });\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport {\n AXPOutputContractTranscriptSegmentService,\n type AXPOutputTranscriptSegmentId,\n} from '@acorex/platform/common';\nimport type { AXPAiAgentOutputContract } from './ai-agent-output-contract.types';\nimport {\n parseAgentOutputContract,\n resolveAgentOutputContract,\n} from './ai-agent-output-contract.types';\nimport type { ResolveEffectiveOutputContractInput } from './ai-effective-output-contract';\n\n//#endregion\n\n//#region ---- Segment id ----\n\nfunction isOutputContractSegmentId(value: string): value is AXPOutputTranscriptSegmentId {\n return value === 'text' || value === 'node' || value === 'followUp';\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPAiOutputContractResolveService {\n //#region ---- Dependencies ----\n\n private readonly segmentService = inject(AXPOutputContractTranscriptSegmentService);\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Resolves a persisted agent/assist `outputContract` value (segment id string)\n * or a full contract object (runtime / programmatic).\n */\n async resolveFromPersisted(raw: unknown): Promise<AXPAiAgentOutputContract | null> {\n if (raw == null) {\n return null;\n }\n\n if (typeof raw === 'string') {\n const id = raw.trim();\n if (!id.length) {\n return null;\n }\n if (isOutputContractSegmentId(id)) {\n return (await this.segmentService.getContractPreset(id)) ?? null;\n }\n return parseAgentOutputContract(raw);\n }\n\n if (typeof raw === 'object' && !Array.isArray(raw)) {\n return parseAgentOutputContract(raw);\n }\n\n return null;\n }\n\n /**\n * Effective contract for one engine turn.\n * Priority: runtime > input > agent > assist > `{ kind: 'string' }`.\n */\n async resolveEffective(params: ResolveEffectiveOutputContractInput): Promise<AXPAiAgentOutputContract> {\n const runtime = await this.resolveFromPersisted(params.runtime);\n if (runtime) {\n return runtime;\n }\n const input = await this.resolveFromPersisted(params.input);\n if (input) {\n return input;\n }\n const agent = await this.resolveFromPersisted(params.agent);\n if (agent) {\n return agent;\n }\n const assist = await this.resolveFromPersisted(params.assist);\n if (assist) {\n return assist;\n }\n return resolveAgentOutputContract(null);\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { AXLoadingDialogService } from '@acorex/components/loading-dialog';\nimport { AXPSettingsService } from '@acorex/platform/common';\nimport {\n AXPAiAssistDefaultMaxStructuredRetries,\n AXPAiAssistDefaultStructuredMaxTokens,\n type AXPAiAssistRunInput,\n type AXPAiAssistRunResult,\n type AXPAiAssistShowOptions,\n} from '../types/ai-assist.types';\nimport { Injectable, LOCALE_ID, inject } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../const';\nimport { AXPAiManagementSettings } from '../../settings.keys';\nimport { AXPAiAssistService } from './ai-assist.abstract';\nimport { AXPAiEngine } from '../engine/ai-engine';\nimport { axpAiChatTextMessage, axpAiChatUserMessage } from '../engine/ai-chat-display.util';\nimport {\n type AXPAiChatMessage,\n type AXPAiChatResponse,\n type AXPAiEffectiveAgentRow,\n type AXPAiEffectiveAssistRow,\n type AXPAiChatTransport,\n type AXPAiEngineRunOptions,\n type AXPAiEngineRunResult,\n type AXPAiPlatformRuntimeContext,\n} from '../engine/ai-engine.types';\nimport { AXPAiPlatformRuntimeContextBuilder } from '../engine/ai-platform-runtime-context.builder';\nimport { AXMAiAssistPromptBoxService } from '../assist/ai-assist-prompt-box.service';\nimport { outputContractFromAssistRunInput } from '../assist/structured-output/assist-output-contract-from-input';\nimport { extractLastAssistantPlainText } from '../assist/structured-output/extract-last-assistant-plain-text';\nimport { runStructuredOutputPipeline } from '../assist/structured-output/run-structured-output-pipeline';\nimport { axpAiAgentOutputContractUsesStructuredFinalize } from '../engine/ai-agent-output-contract.types';\nimport { AXPAiOutputContractResolveService } from '../engine/output-contract-resolve.service';\n\n//#endregion\n\n//#region ---- Row types (UI / queries) ----\n\ntype AXMAiAssistRow = AXPAiEffectiveAssistRow;\n\n//#endregion\n\n//#region ---- Assist prompt run loading dialog ----\n\nconst AI_ASSIST_RUN_LOADING_DIALOG_CLOSE_DELAY_MS = 200;\n\ntype AiAssistRunLoadingProgressColor = 'primary' | 'danger' | 'success';\n\n/** Indeterminate loading dialog ref used while the prompt box executes `run`. */\ninterface AiAssistRunLoadingDialogRef {\n close: () => void;\n setProgressText: (text: string) => void;\n setProgressColor: (color: AiAssistRunLoadingProgressColor) => void;\n}\n\n//#endregion\n\n//#region ---- Assist run helpers ----\n\nfunction mergePlatformRuntimeContext(\n base: AXPAiPlatformRuntimeContext,\n notes: Record<string, unknown> | undefined | null,\n): AXPAiPlatformRuntimeContext {\n if (!notes || Object.keys(notes).length === 0) {\n return base;\n }\n return { ...base, ...notes };\n}\n\nfunction buildUserPromptBody(input: AXPAiAssistRunInput): string {\n const parts: string[] = [];\n const prompt = input.prompt?.trim() ?? '';\n if (prompt.length > 0) {\n parts.push(prompt);\n }\n\n const hints = input.context?.hints?.filter((h) => (h ?? '').toString().trim().length > 0) ?? [];\n if (hints.length > 0) {\n parts.push('', 'Hints:', ...hints.map((h) => `- ${String(h).trim()}`));\n }\n\n const structured = input.context?.structuredContext;\n if (structured !== undefined && structured !== null) {\n let serialized: string;\n try {\n serialized = typeof structured === 'string' ? structured : JSON.stringify(structured, null, 2);\n } catch {\n serialized = String(structured);\n }\n parts.push('', 'Context (structured):', serialized);\n }\n\n if (input.expectStructuredOutput) {\n const extra = input.structuredOutputInstruction?.trim();\n parts.push(\n '',\n 'Structured output requirements:',\n '- Reply with exactly one JSON value (a single object or array). It must be complete and valid: close every string, bracket, and brace.',\n '- Do not truncate — finish the entire structure in one message.',\n '- No markdown code fences, no text or commentary before or after the JSON.',\n ...(extra && extra.length > 0 ? ['', 'Additional output rules from the task:', extra] : []),\n );\n const schemaSummary = input.structuredOutputSchemaSummary?.trim();\n if (schemaSummary && schemaSummary.length > 0) {\n parts.push('', 'Expected JSON shape (summary):', schemaSummary);\n }\n }\n\n return parts.join('\\n').trim();\n}\n\nfunction buildChatMessages(input: AXPAiAssistRunInput): AXPAiChatMessage[] {\n const messages: AXPAiChatMessage[] = [];\n const systemInstruction = input.context?.systemInstruction?.trim();\n if (systemInstruction) {\n messages.push(axpAiChatTextMessage('system', systemInstruction));\n }\n const body = buildUserPromptBody(input);\n const media = (input.userMediaAttachments ?? []).filter((a) => a.fileId?.trim() && a.mimeType?.trim());\n if (media.length > 0) {\n const responses: AXPAiChatResponse[] = [];\n for (const a of media) {\n const fileId = a.fileId.trim();\n const mimeType = a.mimeType.trim();\n const name = a.name?.trim();\n responses.push({\n type: 'file',\n content: { fileId, mimeType, ...(name ? { name } : {}) },\n });\n }\n const textBody = body.trim().length > 0 ? body : '(empty prompt)';\n responses.push({ type: 'text', content: textBody });\n messages.push(axpAiChatUserMessage(responses));\n } else {\n messages.push(axpAiChatTextMessage('user', body.trim().length > 0 ? body : '(empty prompt)'));\n }\n return messages;\n}\n\ninterface AXMAiModelMaxTokensRow {\n id: string;\n chatTransport?: string;\n maxOutputTokens?: number;\n}\n\n//#endregion\n\n/**\n * Frontend facade for AI: assist catalog, tenant defaults, engine runs, structured assist runs, and prompt UI.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPAiManagerService extends AXPAiAssistService {\n //#region ---- Services & Dependencies ----\n\n private readonly aiEngine = inject(AXPAiEngine);\n private readonly outputContractResolve = inject(AXPAiOutputContractResolveService);\n private readonly entityService = inject(AXPEntityService);\n private readonly settings = inject(AXPSettingsService);\n private readonly runtimeContextBuilder = inject(AXPAiPlatformRuntimeContextBuilder);\n private readonly assistPromptBox = inject(AXMAiAssistPromptBoxService);\n private readonly localeId = inject(LOCALE_ID);\n private readonly loadingDialog = inject(AXLoadingDialogService);\n\n private readonly assistData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assist.name)\n .data<string, AXMAiAssistRow, AXMAiAssistRow, AXMAiAssistRow, AXMAiAssistRow>();\n\n private readonly modelEntityData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.model.name)\n .data<string, AXMAiModelMaxTokensRow, AXMAiModelMaxTokensRow, AXMAiModelMaxTokensRow, AXMAiModelMaxTokensRow>();\n\n private readonly agentEntityData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.agent.name)\n .data<string, AXPAiEffectiveAgentRow, AXPAiEffectiveAgentRow, AXPAiEffectiveAgentRow, AXPAiEffectiveAgentRow>();\n\n //#endregion\n\n //#region ---- Assist catalog (frontend) ----\n\n /**\n * Loads the effective assist from `DefaultAssistId` (tenant setting), or the assist named `platform-assistant`.\n */\n async getEffectiveAssist(): Promise<AXPAiEffectiveAssistRow> {\n const raw = await this.settings.get<unknown>(AXPAiManagementSettings.DefaultAssistId);\n const assistId =\n typeof raw === 'string'\n ? raw.trim()\n : (raw as { value?: string })?.value != null\n ? String((raw as { value?: string }).value).trim()\n : '';\n\n if (assistId) {\n const byId = await this.assistData.byKey(assistId);\n if (byId) {\n return byId;\n }\n throw new Error(\n `AI assist with id \"${assistId}\" was not found. Open AI Management → AI Settings and pick a valid default assist.`,\n );\n }\n\n const queryResult = await this.assistData.query({\n skip: 0,\n take: 1,\n filter: {\n field: 'name',\n operator: { type: 'equal' },\n value: 'platform-assistant',\n },\n });\n\n const items = (queryResult?.items ?? []) as AXPAiEffectiveAssistRow[];\n const record = items[0];\n\n if (!record) {\n throw new Error(\n 'No default assist is configured. Create an assist named \"platform-assistant\" or select one under AI Settings.',\n );\n }\n\n return record;\n }\n\n /**\n * Resolves the assist row for chat: explicit primary key, otherwise the effective default from settings.\n */\n async getAssistForChat(assistId?: string | null): Promise<AXPAiEffectiveAssistRow> {\n const id = assistId?.trim();\n if (id) {\n const row = await this.assistData.byKey(id);\n if (!row) {\n throw new Error(\n `Assist \"${id}\" was not found. Open AI Management → Assists or clear the assist id in the chat URL.`,\n );\n }\n return row;\n }\n return this.getEffectiveAssist();\n }\n\n /**\n * Primary catalog model transport for an assist (`modelId` row).\n */\n async getAssistPrimaryChatTransport(assistId?: string | null): Promise<AXPAiChatTransport | undefined> {\n const assist = await this.getAssistForChat(assistId);\n const modelEntityId = assist.modelId?.trim();\n if (!modelEntityId) {\n return undefined;\n }\n const model = await this.modelEntityData.byKey(modelEntityId);\n const raw = String(model?.chatTransport ?? '').toLowerCase();\n if (raw === 'openai' || raw === 'gemini' || raw === 'demis') {\n return raw;\n }\n return undefined;\n }\n\n //#endregion\n\n //#region ---- Engine delegation ----\n\n /**\n * Low-level engine run (chat streaming and tool orchestration).\n */\n runEngine(options: AXPAiEngineRunOptions): Promise<AXPAiEngineRunResult> {\n return this.aiEngine.run(options);\n }\n\n //#endregion\n\n //#region ---- Assist API (run / show) ----\n\n /**\n * Normalizes AiModel.maxOutputTokens from the catalog.\n */\n private normalizeMaxOutputTokens(value: unknown): number | undefined {\n if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0) {\n return undefined;\n }\n return Math.floor(value);\n }\n\n /**\n * Reads {@link AXMAiModelMaxTokensRow.maxOutputTokens} for the model bound to the assist or direct agent.\n */\n private async resolveCatalogMaxOutputTokens(\n assistId: string,\n directAgentId: string | undefined,\n ): Promise<number | undefined> {\n try {\n if (directAgentId) {\n const agent = await this.agentEntityData.byKey(directAgentId);\n const modelEntityId = agent?.modelEntityId?.trim();\n if (!modelEntityId) {\n return undefined;\n }\n const model = await this.modelEntityData.byKey(modelEntityId);\n return this.normalizeMaxOutputTokens(model?.maxOutputTokens);\n }\n const assist = await this.getAssistForChat(assistId);\n const modelEntityId = assist.modelId?.trim();\n if (!modelEntityId) {\n return undefined;\n }\n const model = await this.modelEntityData.byKey(modelEntityId);\n return this.normalizeMaxOutputTokens(model?.maxOutputTokens);\n } catch {\n return undefined;\n }\n }\n\n /** @inheritdoc */\n override async run(input: AXPAiAssistRunInput): Promise<AXPAiAssistRunResult> {\n const baseCtx = await this.runtimeContextBuilder.build();\n const platformRuntimeContext = mergePlatformRuntimeContext(baseCtx, input.platformRuntimeNotes ?? null);\n\n const directAgentId = input.directAgentId?.trim();\n let assistId = input.assistId?.trim();\n\n const assistRow = !directAgentId && !assistId\n ? await this.getEffectiveAssist()\n : await this.getAssistForChat(assistId);\n if (!directAgentId && !assistId) {\n assistId = assistRow.id;\n }\n\n const agentRow = directAgentId ? await this.agentEntityData.byKey(directAgentId) : null;\n const inputContract = outputContractFromAssistRunInput(input);\n const effectiveOutputContract = await this.outputContractResolve.resolveEffective({\n input: inputContract,\n assist: assistRow.outputContract,\n agent: agentRow?.outputContract,\n });\n const usesStructuredPipeline =\n input.expectStructuredOutput === true ||\n axpAiAgentOutputContractUsesStructuredFinalize(effectiveOutputContract);\n\n const messages = buildChatMessages(input);\n\n const catalogMax = await this.resolveCatalogMaxOutputTokens(assistId as string, directAgentId);\n const effectiveMaxTokens = input.maxTokens ?? catalogMax ?? AXPAiAssistDefaultStructuredMaxTokens;\n\n const runOptions: Omit<AXPAiEngineRunOptions, 'messages'> = {\n platformRuntimeContext,\n outputContract: effectiveOutputContract,\n ...(directAgentId ? { directAgentId } : { assistId: assistId as string }),\n ...(input.maxSteps !== undefined ? { maxSteps: input.maxSteps } : {}),\n ...(input.temperature !== undefined ? { temperature: input.temperature } : {}),\n maxTokens: effectiveMaxTokens,\n };\n\n if (!usesStructuredPipeline) {\n const result = await this.runEngine({ ...runOptions, messages });\n const text = extractLastAssistantPlainText(result.messages);\n return {\n success: true,\n outputKind: effectiveOutputContract.kind,\n text,\n raw: { usageTotals: result.usageTotals, lastProviderResult: result.lastProviderResult },\n messages: result.messages,\n };\n }\n\n const retryOnInvalidStructure = input.retryOnInvalidStructure !== false;\n const maxStructuredRetries = input.maxStructuredRetries ?? AXPAiAssistDefaultMaxStructuredRetries;\n\n const structuredMaxTokens = input.structuredOutputMaxTokens ?? effectiveMaxTokens;\n\n const pipelineResult = await runStructuredOutputPipeline({\n contract: effectiveOutputContract,\n initialMessages: messages,\n executeRun: (nextMessages) =>\n this.runEngine({ ...runOptions, maxTokens: structuredMaxTokens, messages: nextMessages }),\n maxStructuredRetries,\n retryOnInvalidStructure,\n structuredValidator: input.structuredValidator,\n structuredOutputSchemaSummary: input.structuredOutputSchemaSummary,\n });\n\n return {\n success: pipelineResult.success,\n outputKind: pipelineResult.outputKind,\n text: pipelineResult.text,\n structured: pipelineResult.structured,\n data: pipelineResult.data,\n validationErrors: pipelineResult.validationErrors,\n messages: pipelineResult.messages,\n raw: pipelineResult.structuredRunRaw,\n };\n }\n\n /** @inheritdoc */\n override async show(options: AXPAiAssistShowOptions): Promise<AXPAiAssistRunResult | null> {\n const runLoadingSpec = options.runLoadingDialog;\n const data = await this.assistPromptBox.open(options, async (payload) => {\n let progressDialog: AiAssistRunLoadingDialogRef | undefined;\n if (runLoadingSpec) {\n progressDialog = this.loadingDialog.show({\n title: runLoadingSpec.title,\n mode: 'indeterminate',\n progressColor: 'primary',\n text: runLoadingSpec.text,\n }) as AiAssistRunLoadingDialogRef;\n }\n try {\n return await this.run({\n prompt: payload.prompt,\n userMediaAttachments:\n payload.userMediaAttachments.length > 0 ? payload.userMediaAttachments : undefined,\n context: options.context,\n assistId: payload.assistId,\n directAgentId: payload.directAgentId,\n maxSteps: options.maxSteps,\n temperature: options.temperature,\n maxTokens: options.maxTokens,\n outputContract: options.outputContract,\n expectStructuredOutput: options.expectStructuredOutput,\n structuredOutputInstruction: options.structuredOutputInstruction,\n platformRuntimeNotes: options.platformRuntimeNotes,\n maxStructuredRetries: options.maxStructuredRetries,\n structuredValidator: options.structuredValidator,\n retryOnInvalidStructure: options.retryOnInvalidStructure,\n structuredOutputSchemaSummary: options.structuredOutputSchemaSummary,\n structuredOutputMaxTokens: options.structuredOutputMaxTokens,\n });\n } catch (err) {\n if (progressDialog !== undefined) {\n try {\n progressDialog.setProgressColor('danger');\n progressDialog.setProgressText(err instanceof Error ? err.message : String(err));\n } catch {\n // Ignore dialog update failures.\n }\n }\n throw err;\n } finally {\n if (progressDialog !== undefined) {\n const dlg = progressDialog;\n setTimeout(() => dlg.close(), AI_ASSIST_RUN_LOADING_DIALOG_CLOSE_DELAY_MS);\n }\n }\n });\n\n return data ?? null;\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { AXP_DATA_PATH_PROPERTY, AXP_NAME_PROPERTY } from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_EDITOR_CATEGORY, AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core';\n//#endregion\n\n//#region ---- Config ----\n\nexport const AXMAgentRegistryToolConfiguratorWidget: AXPWidgetConfig = {\n name: 'agent-registry-tool-configurator',\n title: 'Agent registry tool (command / query)',\n icon: 'fa-light fa-screwdriver-wrench',\n description:\n 'Select a command or query definition from the platform registry and optionally set default argument values (persisted with the agent).',\n categories: AXP_WIDGETS_EDITOR_CATEGORY,\n groups: [AXPWidgetGroupEnum.UtilityWidget],\n type: 'editor',\n defaultFilterWidgetName: 'string-filter',\n properties: [\n AXP_NAME_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n {\n name: 'label',\n title: 'Label',\n visible: true,\n group: { name: 'general', title: 'General', order: 1 },\n schema: {\n dataType: 'string',\n defaultValue: '',\n interface: {\n path: 'label',\n type: 'text-box',\n options: {\n placeholder: 'Field label',\n },\n },\n },\n },\n {\n name: 'registryKind',\n title: 'Registry kind',\n visible: true,\n group: { name: 'behavior', title: 'Behavior', order: 2 },\n schema: {\n dataType: 'string',\n defaultValue: 'command',\n interface: {\n path: 'options.registryKind',\n type: 'select-editor',\n options: {\n items: [\n { id: 'command', title: 'Command' },\n { id: 'query', title: 'Query' },\n ],\n valueField: 'id',\n textField: 'title',\n },\n },\n },\n },\n {\n name: 'readonly',\n title: 'Readonly',\n visible: true,\n group: { name: 'behavior', title: 'Behavior', order: 2 },\n schema: {\n dataType: 'string',\n interface: {\n path: 'options.readonly',\n type: 'text-box',\n options: {\n placeholder: 'true / false / expression',\n },\n },\n },\n },\n {\n name: 'dataSource',\n title: 'Data source override',\n visible: true,\n group: { name: 'data', title: 'Data', order: 3 },\n schema: {\n dataType: 'string',\n interface: {\n path: 'options.dataSource',\n type: 'text-box',\n options: {\n placeholder: 'Optional; defaults by registry kind',\n },\n },\n },\n },\n ],\n components: {\n edit: {\n component: () =>\n import('./agent-registry-tool-configurator-widget-edit.component').then(\n (c) => c.AXMAgentRegistryToolConfiguratorWidgetEditComponent,\n ),\n },\n designer: {\n component: () =>\n import('./agent-registry-tool-configurator-widget-edit.component').then(\n (c) => c.AXMAgentRegistryToolConfiguratorWidgetEditComponent,\n ),\n },\n column: {\n component: () =>\n import('./agent-registry-tool-configurator-widget-column.component').then(\n (c) => c.AXMAgentRegistryToolConfiguratorWidgetColumnComponent,\n ),\n },\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXP_DATA_PATH_PROPERTY, AXP_NAME_PROPERTY } from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_EDITOR_CATEGORY, AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core';\nimport { AI_AGENT_CATALOG_DATASOURCE_NAME } from '../../datasources/ai-agent-catalog.datasource';\n\n//#endregion\n\n//#region ---- Config ----\n\nexport const AXMAssistDelegatedAgentConfiguratorWidget: AXPWidgetConfig = {\n name: 'assist-delegated-agent-configurator',\n title: 'Assist Delegated Agent Configurator',\n icon: 'fa-light fa-user-robot',\n description: 'Select a delegated agent and configure injected delegated parameters.',\n categories: AXP_WIDGETS_EDITOR_CATEGORY,\n groups: [AXPWidgetGroupEnum.UtilityWidget],\n type: 'editor',\n defaultFilterWidgetName: 'string-filter',\n properties: [\n AXP_NAME_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n {\n name: 'label',\n title: 'Label',\n visible: true,\n group: { name: 'general', title: 'General', order: 1 },\n schema: {\n dataType: 'string',\n defaultValue: '@ai-management:assists.entities.assist.fields.delegated-agent.title',\n interface: {\n path: 'label',\n type: 'text-box',\n options: {\n placeholder: 'Field label',\n },\n },\n },\n },\n {\n name: 'readonly',\n title: 'Readonly',\n visible: true,\n group: { name: 'behavior', title: 'Behavior', order: 2 },\n schema: {\n dataType: 'string',\n interface: {\n path: 'options.readonly',\n type: 'text-box',\n options: {\n placeholder: 'true / false / expression',\n },\n },\n },\n },\n {\n name: 'dataSource',\n title: 'Data Source',\n visible: true,\n group: { name: 'data', title: 'Data', order: 3 },\n schema: {\n dataType: 'string',\n defaultValue: AI_AGENT_CATALOG_DATASOURCE_NAME,\n interface: {\n path: 'options.dataSource',\n type: 'text-box',\n },\n },\n },\n ],\n components: {\n edit: {\n component: () =>\n import('./assist-delegated-agent-configurator-widget-edit.component').then(\n (c) => c.AXMAssistDelegatedAgentConfiguratorWidgetEditComponent,\n ),\n },\n designer: {\n component: () =>\n import('./assist-delegated-agent-configurator-widget-edit.component').then(\n (c) => c.AXMAssistDelegatedAgentConfiguratorWidgetEditComponent,\n ),\n },\n column: {\n component: () =>\n import('./assist-delegated-agent-configurator-widget-column.component').then(\n (c) => c.AXMAssistDelegatedAgentConfiguratorWidgetColumnComponent,\n ),\n },\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex/platform/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXMAgentRegistryToolConfiguratorWidget } from './features/widgets/agent-registry-tool-configurator/agent-registry-tool-configurator-widget.config';\nimport { AXMAssistDelegatedAgentConfiguratorWidget } from './features/widgets/assist-delegated-agent-configurator/assist-delegated-agent-configurator-widget.config';\n\n//#endregion\n\n//#region ---- AI Management Widgets Provider ----\n\nconst AI_MANAGEMENT_WIDGETS = [\n AXMAssistDelegatedAgentConfiguratorWidget,\n AXMAgentRegistryToolConfiguratorWidget,\n];\n\n@Injectable()\nexport class AXMAiManagementWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return AI_MANAGEMENT_WIDGETS;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n AXPOutputContractTranscriptSegmentDefinition,\n AXPOutputContractTranscriptSegmentProvider,\n} from '@acorex/platform/common';\n\n//#endregion\n\n//#region ---- Built-in segment definitions ----\n\n/** Single source for entity select options and DI segment presets. */\nexport const AXM_BUILTIN_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_DEFINITIONS: AXPOutputContractTranscriptSegmentDefinition[] =\n [\n {\n name: 'text',\n title: '@ai-management:agents.entities.agent.fields.output-contract.transcript-segment.options.text',\n applicableKinds: ['object'],\n contract: {\n kind: 'object',\n transcriptSegment: 'text',\n structuredRetries: 2,\n },\n },\n {\n name: 'node',\n title: '@ai-management:agents.entities.agent.fields.output-contract.transcript-segment.options.node',\n applicableKinds: ['object'],\n contract: {\n kind: 'object',\n transcriptSegment: 'node',\n structuredRetries: 3,\n },\n },\n {\n name: 'followUp',\n title: '@ai-management:agents.entities.agent.fields.output-contract.transcript-segment.options.follow-up',\n applicableKinds: ['object'],\n contract: {\n kind: 'object',\n transcriptSegment: 'followUp',\n structuredRetries: 2,\n },\n },\n ];\n\n//#endregion\n\n//#region ---- Provider ----\n\nexport class AXMBuiltinOutputContractTranscriptSegmentProvider implements AXPOutputContractTranscriptSegmentProvider {\n provide(): AXPOutputContractTranscriptSegmentDefinition[] {\n return AXM_BUILTIN_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_DEFINITIONS;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';\nimport {\n AXP_MENU_PROVIDER,\n AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER,\n AXP_SETTING_DEFINITION_PROVIDER,\n} from '@acorex/platform/common';\nimport {\n AXPComponentSlotModule,\n AXP_DATASOURCE_DEFINITION_PROVIDER,\n AXP_MODULE_MANIFEST_PROVIDER,\n AXP_TAG_PROVIDER,\n} from '@acorex/platform/core';\nimport { AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';\nimport { AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex/platform/layout/widget-core';\nimport { AXPWidgetsModule } from '@acorex/platform/layout/widgets';\nimport { NgModule } from '@angular/core';\nimport { ROUTES, Routes } from '@angular/router';\nimport { AiManagementManifest } from './manifest';\nimport { AXMAiManagementEntityProvider } from './entity.provider';\nimport { AXMAiManagementMenuProvider } from './menu.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMAiManagementSettingProvider } from './settings.provider';\nimport { AXMAiAgentCatalogDataSourceDefinition } from './features/datasources/ai-agent-catalog.datasource';\nimport {\n AXMAiCommandRegistryCatalogDataSourceDefinition,\n AXMAiQueryRegistryCatalogDataSourceDefinition,\n} from './features/datasources/ai-registry-catalog.datasource';\nimport { AXMAiModelCatalogDataSourceDefinition } from './features/datasources/ai-model-catalog.datasource';\nimport { AXMOutputContractTranscriptSegmentDataSourceDefinition } from './features/datasources/output-contract-transcript-segment.datasource';\nimport { AXMAiModelPurposeTagProvider } from './features/tags/ai-model-purpose-tag.provider';\nimport { AXPAiAssistService } from './features/services/ai-assist.abstract';\nimport { AXPAiManagerService } from './features/services/ai-manager.service';\nimport { AXMAiManagementWidgetsProvider } from './widget-definition.provider';\nimport { AXMBuiltinOutputContractTranscriptSegmentProvider } from './features/engine/output-contract-transcript-segment.builtin-providers';\n\n//#endregion\n\n//#region ---- Routes ----\n\nfunction routesFactory(): Routes {\n return [];\n}\n\n//#endregion\n\n//#region ---- Module ----\n\n@NgModule({\n imports: [\n AXPComponentSlotModule.forChild({\n }),\n AXPWidgetsModule,\n ],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMAiManagementEntityProvider,\n multi: true,\n },\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: AiManagementManifest,\n multi: true,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMAiManagementMenuProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXMAiManagementSettingProvider,\n multi: true,\n },\n {\n provide: AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER,\n useClass: AXMBuiltinOutputContractTranscriptSegmentProvider,\n multi: true,\n },\n {\n provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXMAiModelCatalogDataSourceDefinition,\n multi: true,\n },\n {\n provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXMOutputContractTranscriptSegmentDataSourceDefinition,\n multi: true,\n },\n {\n provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXMAiAgentCatalogDataSourceDefinition,\n multi: true,\n },\n {\n provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXMAiCommandRegistryCatalogDataSourceDefinition,\n multi: true,\n },\n {\n provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXMAiQueryRegistryCatalogDataSourceDefinition,\n multi: true,\n },\n {\n provide: AXP_WIDGET_DEFINITION_PROVIDER,\n useClass: AXMAiManagementWidgetsProvider,\n multi: true,\n },\n {\n provide: AXP_TAG_PROVIDER,\n useClass: AXMAiModelPurposeTagProvider,\n multi: true,\n },\n {\n provide: AXPAiAssistService,\n useExisting: AXPAiManagerService,\n },\n ],\n})\nexport class AXMAiManagementModule {}\n\n//#endregion\n","//#region ---- Delegated agent prompt preview ----\n\nfunction normalizeDelegatedAgentToolArgs(argumentsValue: unknown): Record<string, unknown> | null {\n if (argumentsValue == null) {\n return null;\n }\n if (typeof argumentsValue === 'object' && !Array.isArray(argumentsValue)) {\n return { ...(argumentsValue as Record<string, unknown>) };\n }\n if (typeof argumentsValue === 'string') {\n const t = argumentsValue.trim();\n if (!t) {\n return null;\n }\n try {\n const p = JSON.parse(t) as unknown;\n if (p != null && typeof p === 'object' && !Array.isArray(p)) {\n return p as Record<string, unknown>;\n }\n } catch {\n return null;\n }\n }\n return null;\n}\n\nfunction formatArgsFallback(argumentsValue: unknown): string {\n if (argumentsValue == null) {\n return '';\n }\n if (typeof argumentsValue === 'string') {\n return argumentsValue;\n }\n try {\n return JSON.stringify(argumentsValue, null, 2);\n } catch {\n return String(argumentsValue);\n }\n}\n\n/**\n * Human-readable specialist prompt from delegated-agent tool arguments (conversation / mini-chat UI).\n */\nexport function axpAiDelegatedAgentPromptPreview(argumentsValue: unknown): string {\n const obj = normalizeDelegatedAgentToolArgs(argumentsValue);\n if (!obj) {\n return formatArgsFallback(argumentsValue);\n }\n const preferKeys = ['query', 'task', 'prompt', 'message', 'userMessage', 'instruction', 'goal'] as const;\n for (const k of preferKeys) {\n const v = obj[k];\n if (typeof v === 'string' && v.trim()) {\n return v.trim();\n }\n }\n const keys = Object.keys(obj);\n if (keys.length === 1) {\n const only = obj[keys[0]!];\n if (typeof only === 'string' && only.trim()) {\n return only.trim();\n }\n }\n try {\n return JSON.stringify(obj, null, 2);\n } catch {\n return formatArgsFallback(argumentsValue);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPAiChatMessage } from '../engine/ai-engine.types';\nimport { axpAiChatTextMessage } from '../engine/ai-chat-display.util';\n\n//#endregion\n\n/** Maximum length for assist initial transcript text after HTML strip (characters). */\nconst ASSIST_INITIAL_MESSAGES_MAX_LENGTH = 16_000;\n\n//#region ---- HTML / rich text to plain ----\n\n/**\n * Strips HTML tags and decodes a few common entities for safe plain-text transcript lines.\n * Used for Assist `initialMessages` (may be stored as rich text HTML).\n */\nexport function axpAiStripAssistInitialHtmlToPlain(raw: string): string {\n let s = raw\n .replace(/<\\/p>\\s*(?:<br\\s*\\/?>\\s*)*<p[^>]*>/gi, '\\n\\n')\n .replace(/<\\/p>\\s*<p[^>]*>/gi, '\\n\\n')\n .replace(/<br\\s*\\/?>/gi, '\\n');\n s = s.replace(/<\\/(div|h[1-6]|li|tr)>/gi, '\\n');\n s = s.replace(/<[^>]+>/g, '');\n s = s\n .replace(/ /gi, ' ')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\");\n s = s.replace(/\\r\\n/g, '\\n').trim();\n if (s.length > ASSIST_INITIAL_MESSAGES_MAX_LENGTH) {\n s = s.slice(0, ASSIST_INITIAL_MESSAGES_MAX_LENGTH).trimEnd() + '…';\n }\n return s;\n}\n\n//#endregion\n\n//#region ---- Transcript messages ----\n\n/**\n * Converts assist `initialMessages` (HTML or plain) into one or more `assistant` transcript lines.\n * Non-empty paragraphs (split by blank lines) become separate messages; single block stays one message.\n */\nexport function axpAiAssistInitialMessagesToTranscript(\n raw: string | null | undefined,\n): AXPAiChatMessage[] {\n const trimmed = raw?.trim() ?? '';\n if (!trimmed) {\n return [];\n }\n const plain = axpAiStripAssistInitialHtmlToPlain(trimmed);\n if (!plain) {\n return [];\n }\n const blocks = plain\n .split(/\\n{2,}/)\n .map((b) => b.replace(/\\n+/g, ' ').trim())\n .filter((b) => b.length > 0);\n if (blocks.length === 0) {\n return [];\n }\n return blocks.map((text) => axpAiChatTextMessage('assistant', text));\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { resolveMultiLanguageString } from '@acorex/core/translation';\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport type { AXMAiManagementAssistEntityModel } from '../../entities/assist/assist.types';\nimport type { AXPAiEffectiveAssistRow } from '../engine/ai-engine.types';\n\n//#endregion\n\n//#region ---- Types ----\n\ntype AssistStarterPromptsSource =\n | Pick<AXMAiManagementAssistEntityModel, 'starterPrompts'>\n | Pick<AXPAiEffectiveAssistRow, 'starterPrompts'>\n | null\n | undefined;\n\n//#endregion\n\n//#region ---- Extraction ----\n\n/**\n * Returns non-empty starter prompt labels, preserving repeater order.\n * Resolve locale in the template via the translate pipe.\n */\nexport function axpAiAssistStarterPromptLabels(\n source: AssistStarterPromptsSource,\n): Array<string | AXPMultiLanguageString> {\n const items = source?.starterPrompts;\n if (!Array.isArray(items) || items.length === 0) {\n return [];\n }\n\n const labels: Array<string | AXPMultiLanguageString> = [];\n for (const item of items) {\n const text = item?.text;\n if (!axpAiAssistStarterPromptLabelIsNonEmpty(text)) {\n continue;\n }\n labels.push(text);\n }\n return labels;\n}\n\n/**\n * Returns non-empty starter prompt strings for the active locale, preserving repeater order.\n */\nexport function axpAiAssistStarterPromptTexts(\n source: AssistStarterPromptsSource,\n locale: string,\n): string[] {\n return axpAiAssistStarterPromptLabels(source)\n .map((text) => (typeof text === 'string' ? text : resolveMultiLanguageString(text, locale)).trim())\n .filter((text) => text.length > 0);\n}\n\nfunction axpAiAssistStarterPromptLabelIsNonEmpty(\n text: string | AXPMultiLanguageString | null | undefined,\n): text is string | AXPMultiLanguageString {\n if (text == null) {\n return false;\n }\n if (typeof text === 'string') {\n return text.trim().length > 0;\n }\n return Object.values(text).some((value) => typeof value === 'string' && value.trim().length > 0);\n}\n\n//#endregion\n","/**\n * Build-time only. Do not import from Angular modules.\n */\nimport {\n AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS,\n defineCommand,\n} from '@acorex/platform/runtime';\n\n/** Generates an image from a text prompt; model resolution: explicit input, then delegated specialist `options.model`, then mock catalog default (OpenAI gpt-image-1). */\nexport const AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY = 'AiManagement:ChatGenerateImage' as const;\n\nexport const aiManagementChatGenerateImageCommandDefinition = defineCommand({\n key: AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY,\n title: 'Generate image (chat)',\n description:\n 'Generates an image from a text description. Pass catalog image model id, or use options.model on the image-generation delegated specialist; if both are unset, the mock uses the catalog default image model (OpenAI gpt-image-1). Routing follows the model row (transport and provider).',\n executionMode: 'both',\n inputs: [\n {\n name: 'model',\n title: 'Model',\n description:\n 'Optional AiModel catalog row id (image purpose). When omitted, uses delegatedAgents[].options.model for the active delegated specialist (agentId in run context), then the mock default image model if still unset.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'prompt',\n title: 'Prompt',\n description: 'Detailed description of the image to generate.',\n interface: { name: 'text-editor' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'size',\n title: 'Size',\n description: 'Optional size hint (e.g. 1024x1024). May be ignored.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'style',\n title: 'Style',\n description: 'Optional style hint merged into the prompt by the backend.',\n interface: { name: 'text-editor' },\n },\n ],\n outputs: [\n {\n name: 'fileId',\n title: 'File id',\n description: 'Persisted file id when storage succeeds.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'prompt',\n title: 'Prompt',\n description: 'Original prompt text.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'imageUrl',\n title: 'Image URL',\n description: 'Short https or data URL fallback when persistence fails.',\n interface: { name: 'text-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success'],\n },\n capabilities: ['ai'],\n ai: {\n tags: ['ai-tool', 'ai-chat', 'image'],\n },\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","/**\n * Build-time only. Do not import from Angular modules.\n */\nimport {\n AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS,\n defineCommand,\n} from '@acorex/platform/runtime';\n\n/** Transcribes audio from a stored file; default speech model comes from the delegated specialist row (`delegatedAgents[].options.model`). */\nexport const AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY = 'AiManagement:ChatTranscribeSpeech' as const;\n\nexport const aiManagementChatTranscribeSpeechCommandDefinition = defineCommand({\n key: AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY,\n title: 'Transcribe speech (chat)',\n description:\n 'Transcribes audio from a platform file id. Pass catalog speech model id or rely on options.model for the speech-to-text delegated specialist on this assist; routing uses the model row (transport and provider).',\n executionMode: 'both',\n inputs: [\n {\n name: 'model',\n title: 'Model',\n description:\n 'Optional AiModel catalog row id (speech purpose). When omitted, uses delegatedAgents[].options.model for the active delegated specialist (agentId in run context).',\n interface: { name: 'text-editor' },\n },\n {\n name: 'fileId',\n title: 'File id',\n description: 'Platform file storage id for the audio attachment.',\n interface: { name: 'text-editor' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'language',\n title: 'Language',\n description: 'Optional BCP-47 language hint (e.g. en) when supported by the provider.',\n interface: { name: 'text-editor' },\n },\n ],\n outputs: [\n {\n name: 'text',\n title: 'Text',\n description: 'Transcribed plain text.',\n interface: { name: 'text-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success'],\n },\n capabilities: ['ai'],\n ai: {\n tags: ['ai-tool', 'ai-chat', 'speech'],\n },\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","/**\n * Build-time only. Do not import from Angular modules.\n */\nimport {\n AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS,\n defineCommand,\n} from '@acorex/platform/runtime';\n\n/** Synthesizes speech audio from text; default TTS model comes from the delegated specialist row (`delegatedAgents[].options.model`). */\nexport const AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY = 'AiManagement:ChatSynthesizeSpeech' as const;\n\nexport const aiManagementChatSynthesizeSpeechCommandDefinition = defineCommand({\n key: AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY,\n title: 'Synthesize speech (chat)',\n description:\n 'Converts text to spoken audio and stores it in platform file storage. Pass catalog TTS model id or rely on options.model for the text-to-speech delegated specialist on this assist; routing uses the model row (transport and provider).',\n executionMode: 'both',\n inputs: [\n {\n name: 'model',\n title: 'Model',\n description:\n 'Optional AiModel catalog row id (tts purpose). When omitted, uses delegatedAgents[].options.model for the active delegated specialist (agentId in run context).',\n interface: { name: 'text-editor' },\n },\n {\n name: 'text',\n title: 'Text',\n description: 'Plain text to speak (provider input length limits apply, e.g. OpenAI 4096 characters).',\n interface: { name: 'text-editor' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'voice',\n title: 'Voice',\n description:\n 'Optional OpenAI voice id: alloy, echo, fable, onyx, nova, shimmer. When omitted, uses delegatedAgents[].options.voice or alloy.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'responseFormat',\n title: 'Response format',\n description: 'Optional audio format for OpenAI (mp3, opus, aac, flac, wav, pcm). Default mp3.',\n interface: { name: 'text-editor' },\n },\n ],\n outputs: [\n {\n name: 'fileId',\n title: 'File id',\n description: 'Persisted audio file id when storage succeeds.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'text',\n title: 'Text',\n description: 'Source text that was synthesized.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'mimeType',\n title: 'MIME type',\n description: 'Audio MIME type of the stored file.',\n interface: { name: 'text-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success'],\n },\n capabilities: ['ai'],\n ai: {\n tags: ['ai-tool', 'ai-chat', 'tts'],\n },\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","/**\n * Build-time only. Do not import from Angular modules.\n */\nimport {\n AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS,\n defineCommand,\n} from '@acorex/platform/runtime';\n\nexport const AIMANAGEMENT_EXTRACT_DOCUMENT_TEXT_COMMAND_KEY = 'AiManagement:ExtractDocumentText' as const;\n\nexport const aiManagementExtractDocumentTextCommandDefinition = defineCommand({\n key: AIMANAGEMENT_EXTRACT_DOCUMENT_TEXT_COMMAND_KEY,\n title: 'Extract text from document image',\n description:\n 'Transcribes visible text from an image stored in platform file storage (scans, photos of documents, forms, including medical paperwork). Uses the active chat model’s vision capability. Output is informational transcription only—not clinical interpretation.',\n executionMode: 'both',\n inputs: [\n {\n name: 'fileId',\n title: 'File id',\n description:\n 'Platform file storage id for the image (same as chat image attachments). Supported formats follow the active vision model (e.g. PNG, JPEG, WEBP).',\n interface: { name: 'text-editor' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'instruction',\n title: 'Instruction',\n description:\n 'Optional extra instructions (e.g. language, focus on lab values only, preserve table layout).',\n interface: { name: 'text-editor' },\n },\n ],\n outputs: [\n {\n name: 'text',\n title: 'Extracted text',\n description: 'Transcribed text with structure preserved where possible.',\n interface: { name: 'text-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success'],\n },\n capabilities: ['ai'],\n ai: {\n shortDescription:\n 'OCR-style transcription from an image file id using the chat vision model; preserves layout; no medical diagnosis.',\n tags: ['ai-tool', 'ai-chat', 'ocr', 'vision', 'document', 'multimodal'],\n },\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","/**\n * Build-time only. Do not import from Angular modules.\n */\nimport {\n AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS,\n defineCommand,\n} from '@acorex/platform/runtime';\n\nexport const AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY =\n 'AiManagement:StructuredTextCompletion' as const;\n\nexport const aiManagementStructuredTextCompletionCommandDefinition = defineCommand({\n key: AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY,\n title: 'Structured text completion',\n description:\n 'Single-turn chat completion without tools (e.g. map OCR text to JSON). Uses the resolved assist model.',\n executionMode: 'both',\n inputs: [],\n outputs: [\n {\n name: 'text',\n title: 'Assistant text',\n description: 'Plain text from the model.',\n interface: { name: 'large-text-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success'],\n },\n capabilities: ['ai'],\n ai: {\n shortDescription: 'Tool-free structured completion for metadata mapping and similar tasks.',\n tags: ['ai-tool', 'ai-chat', 'completion'],\n },\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","//#region ---- AI chat registry command keys (re-exports) ----\n\nexport { AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY } from './chat-generate-image.command.definition';\nexport { AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY } from './chat-transcribe-speech.command.definition';\nexport { AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY } from './chat-synthesize-speech.command.definition';\nexport { AIMANAGEMENT_EXTRACT_DOCUMENT_TEXT_COMMAND_KEY } from './extract-document-text.command.definition';\nexport { AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY } from './structured-text-completion.command.definition';\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { Injectable, signal } from '@angular/core';\nimport type { AXPAiChatTransport } from '../engine/ai-engine.types';\n\n//#endregion\n\n//#region ---- Run context ----\n\nexport interface AXPAiChatToolRunContext {\n assistId: string;\n chatTransport: AXPAiChatTransport;\n /** AiModel catalog row id for the active chat model (when resolved). */\n modelEntityId?: string;\n /** Set during a delegated agent sub-run (specialist executing registry tools). */\n agentId?: string;\n /** Assist or AiAgent catalog `name` (Demisco `agent_uuid` for Demis transport). */\n agentName?: string;\n /** Optional Demisco chat session id (`session_uuid` in multipart). */\n demisSessionUuid?: string;\n}\n\n/**\n * Per chat run: stores which assist and chat transport are active.\n * Injected commands (e.g. image generation) read this instead of receiving assist/transport inside tool args.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPAiChatToolRunContextService {\n private readonly runContext = signal<AXPAiChatToolRunContext | null>(null);\n\n setContext(ctx: AXPAiChatToolRunContext | null): void {\n this.runContext.set(ctx);\n }\n\n getContext(): AXPAiChatToolRunContext | null {\n return this.runContext();\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY } from './chat-generate-image.command.definition';\nimport { AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY } from './chat-synthesize-speech.command.definition';\nimport { AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY } from './chat-transcribe-speech.command.definition';\n\n//#endregion\n\n//#region ---- LLM JSON Schema overrides ----\n\n/**\n * Registry rows map inputs to string-typed JSON schemas. Override parameters for AI chat tools\n * so models receive accurate types (arrays, booleans, nested objects).\n */\nexport function getAiChatCommandLlmParametersOverride(\n commandName: string,\n): Record<string, unknown> | null {\n switch (commandName) {\n case AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY:\n return {\n type: 'object',\n properties: {\n model: {\n type: 'string',\n description:\n 'Optional catalog AiModel row id for image generation. Omit to use options.model on the image delegated specialist row.',\n },\n prompt: {\n type: 'string',\n description: 'Detailed text description of the image to generate.',\n },\n size: {\n type: 'string',\n description: 'Optional size hint for backends that support it (e.g. 1024x1024). May be ignored.',\n },\n style: {\n type: 'string',\n description:\n 'Optional style hint (e.g. photorealistic, flat vector). May be merged into the prompt by the backend.',\n },\n },\n required: ['prompt'],\n };\n case AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY:\n return {\n type: 'object',\n properties: {\n model: {\n type: 'string',\n description:\n 'Optional catalog AiModel row id for speech-to-text. Omit to use options.model on the speech delegated specialist row.',\n },\n fileId: {\n type: 'string',\n description: 'Platform file storage id for the audio file to transcribe.',\n },\n language: {\n type: 'string',\n description: 'Optional language hint (e.g. en) when supported by the provider.',\n },\n },\n required: ['fileId'],\n };\n case AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY:\n return {\n type: 'object',\n properties: {\n model: {\n type: 'string',\n description:\n 'Optional catalog AiModel row id for text-to-speech (purpose tts). Omit to use options.model on the TTS delegated specialist row.',\n },\n text: {\n type: 'string',\n description: 'Plain text to convert to speech.',\n },\n voice: {\n type: 'string',\n description:\n 'Optional OpenAI voice (alloy, echo, fable, onyx, nova, shimmer). Omit to use options.voice or alloy.',\n },\n responseFormat: {\n type: 'string',\n description: 'Optional audio format: mp3, opus, aac, flac, wav, pcm. Default mp3.',\n },\n },\n required: ['text'],\n };\n default:\n return null;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport type { AXMAiManagementAgentEntityModel } from '../../entities/agent/agent.types';\nimport type { AXMAiManagementAssistEntityModel } from '../../entities/assist/assist.types';\nimport type { AXPAiAgentOutputContract } from './ai-agent-output-contract.types';\n\n//#endregion\n\n//#region ---- Core aliases ----\n\nexport type AXPAiChatTransport = 'openai' | 'gemini' | 'demis';\n\n//#endregion\n\n//#region ---- Platform runtime context ----\n\n/**\n * Snapshot of session / tenant / regional defaults injected into system prompts.\n * Built by {@link AXPAiPlatformRuntimeContextBuilder} before calling {@link AXPAiEngine}.\n */\nexport interface AXPAiPlatformRuntimeContext {\n userId?: string;\n userDisplayName?: string;\n tenantId?: string;\n tenantTitle?: string;\n applicationId?: string;\n applicationTitle?: string;\n locale?: string;\n calendarSystem?: string;\n timeZone?: string;\n country?: string;\n currentInstant?: string;\n currentLocalDateTime?: string;\n notes?: string;\n}\n\n//#endregion\n\n//#region ---- Catalog / entity row shapes (effective rows) ----\n\n/**\n * Effective Assist entity row (chat policy, prompts, delegated routing).\n * Fields are partial except `id` because API payloads may omit unused slices.\n */\nexport type AXPAiEffectiveAssistRow = Partial<Omit<AXMAiManagementAssistEntityModel, 'id'>> & {\n id: string;\n imageModelId?: string;\n};\n\n/**\n * Effective AiAgent catalog row for UI and engine requests.\n * Engine-specific fields are normalized in connectivity (mock / API).\n */\nexport type AXPAiEffectiveAgentRow = Partial<Omit<AXMAiManagementAgentEntityModel, 'id'>> & {\n id: string;\n outputContract?: AXPAiAgentOutputContract | null;\n};\n\n//#endregion\n\n//#region ---- Model list (picker service) ----\n\nexport interface AXPAiChatModelListRequest {\n assistId?: string | null;\n directAgentId?: string | null;\n}\n\nexport interface AXPAiChatModelListItem {\n id: string;\n name: string;\n title: string;\n /** `modelPurposes` from the catalog row (provided by the API). */\n modelPurposes?: string[];\n chatTransport?: string;\n maxContextTokens?: number;\n inputPricePerMillion?: number;\n outputPricePerMillion?: number;\n cachedInputPricePerMillion?: number;\n}\n\n//#endregion\n\n//#region ---- Chat transcript: responses & messages ----\n\nexport interface AXPAiChatTextResponse {\n type: 'text';\n content: string;\n}\n\n/** Model reasoning / planning segment; paired with {@link AXPAiChatTextResponse} in assistant messages. */\nexport interface AXPAiChatThinkResponse {\n type: 'think';\n content: string;\n}\n\n/**\n * Stored binary in tenant file storage (user attachment or assistant/tool output replay).\n */\nexport interface AXPAiChatFileResponse {\n type: 'file';\n content: {\n fileId: string;\n mimeType: string;\n name?: string;\n };\n}\n\nexport interface AXPAiChatNodeResponse {\n type: 'node';\n content: unknown;\n}\n\nexport interface AXPAiChatFollowUpCommand {\n name: string;\n options?: unknown;\n}\n\nexport interface AXPAiChatFollowUpItem {\n text: string | AXPMultiLanguageString;\n command: AXPAiChatFollowUpCommand;\n}\n\nexport interface AXPAiChatFollowUpResponse {\n type: 'followUp';\n content: AXPAiChatFollowUpItem[];\n}\n\nexport interface AXPAiChatToolInvocationContent {\n command: string;\n arguments: unknown;\n}\n\nexport interface AXPAiChatToolAssistantResponse {\n type: 'tool';\n content: AXPAiChatToolInvocationContent;\n callId?: string;\n}\n\nexport interface AXPAiChatAgentAssistantResponse {\n type: 'agent';\n content: AXPAiChatToolInvocationContent;\n callId?: string;\n}\n\nexport interface AXPAiChatToolResultResponse {\n type: 'tool_result';\n callId: string;\n content: unknown;\n}\n\n/** Segments a delegated specialist returns to the supervisor (replayable in UI). */\nexport type AXPAiDelegatedAgentResultSegment =\n | AXPAiChatTextResponse\n | AXPAiChatThinkResponse\n | AXPAiChatFileResponse\n | AXPAiChatNodeResponse\n | AXPAiChatFollowUpResponse;\n\n/** Tool-role `agent_result` body from the engine (normalized by connectivity). */\nexport interface AXPAiDelegatedAgentResultPayload {\n success: boolean;\n error?: string;\n data?: {\n agentName?: string;\n agentId?: string;\n responses: AXPAiDelegatedAgentResultSegment[];\n };\n}\n\nexport interface AXPAiChatAgentResultResponse {\n type: 'agent_result';\n callId: string;\n name?: string;\n content: AXPAiDelegatedAgentResultPayload;\n}\n\nexport type AXPAiChatResponse =\n | AXPAiChatTextResponse\n | AXPAiChatThinkResponse\n | AXPAiChatFileResponse\n | AXPAiChatNodeResponse\n | AXPAiChatFollowUpResponse\n | AXPAiChatToolAssistantResponse\n | AXPAiChatAgentAssistantResponse\n | AXPAiChatToolResultResponse\n | AXPAiChatAgentResultResponse;\n\n/**\n * One chat line in the persisted transcript (`user` / `assistant` / `system` / `tool`).\n */\nexport interface AXPAiChatMessage {\n role: 'system' | 'user' | 'assistant' | 'tool';\n responses: AXPAiChatResponse[];\n name?: string;\n /** Ephemeral delegated sub-run reflection (excluded from user-facing replay). */\n delegatedReflection?: boolean;\n}\n\n//#endregion\n\n//#region ---- Tool calls (streaming / run events) ----\n\nexport interface AXPAiToolCall {\n id: string;\n name: string;\n arguments: unknown;\n}\n\n//#endregion\n\n//#region ---- Engine run contract (UI ↔ connectivity) ----\n\nexport interface AXPAiEngineLastProviderPayload {\n messages: AXPAiChatMessage[];\n toolCalls?: AXPAiToolCall[];\n rawResponse?: unknown;\n}\n\nexport interface AXPAiEngineUsageTotals {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n cachedPromptTokens?: number;\n}\n\nexport interface AXPAiDelegatedAgentTranscriptEntry {\n agentName?: string;\n messages: AXPAiChatMessage[];\n}\n\nexport interface AXPAiDelegatedNestedToolCallContext {\n delegationCallId: string;\n agentId: string;\n agentName?: string;\n}\n\nexport type AXPAiEngineRunEvent =\n | { type: 'assistant_stream_reset' }\n | {\n type: 'assistant_stream_delta';\n delta: string;\n segment?: 'text' | 'think';\n }\n | { type: 'tool_call_start'; call: AXPAiToolCall }\n | { type: 'tool_call_end'; call: AXPAiToolCall; resultMessage: AXPAiChatMessage }\n | {\n type: 'delegated_agent_nested_tool_call_start';\n ctx: AXPAiDelegatedNestedToolCallContext;\n call: AXPAiToolCall;\n }\n | {\n type: 'delegated_agent_nested_tool_call_end';\n ctx: AXPAiDelegatedNestedToolCallContext;\n call: AXPAiToolCall;\n resultMessage: AXPAiChatMessage;\n }\n | {\n type: 'delegated_agent_nested_stream_reset';\n ctx: AXPAiDelegatedNestedToolCallContext;\n }\n | {\n type: 'delegated_agent_nested_stream_delta';\n ctx: AXPAiDelegatedNestedToolCallContext;\n delta: string;\n }\n | { type: 'delegated_agent_reflection_phase'; active: boolean };\n\nexport interface AXPAiEngineRunOptions {\n messages: AXPAiChatMessage[];\n assistId?: string;\n demisSessionUuid?: string;\n directAgentId?: string;\n modelEntityId?: string;\n modelId?: string;\n maxSteps?: number;\n maxTokens?: number;\n temperature?: number;\n planningMode?: 'off' | 'once' | 'when-needed';\n includeRules?: string[];\n excludeRules?: string[];\n platformRuntimeContext?: AXPAiPlatformRuntimeContext | null;\n outputContract?: AXPAiAgentOutputContract;\n onRunEvent?: (event: AXPAiEngineRunEvent) => void;\n}\n\nexport interface AXPAiEngineRunResult {\n messages: AXPAiChatMessage[];\n lastProviderResult?: AXPAiEngineLastProviderPayload;\n usageTotals?: AXPAiEngineUsageTotals;\n delegatedTranscriptsByCallId?: Record<string, AXPAiDelegatedAgentTranscriptEntry>;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPAiAgentOutputContract } from './ai-agent-output-contract.types';\nimport { parseAgentOutputContract, resolveAgentOutputContract } from './ai-agent-output-contract.types';\n\n//#endregion\n\n//#region ---- Resolve effective contract ----\n\nexport interface ResolveEffectiveOutputContractInput {\n /** Highest priority: per engine run (programmatic / automation). */\n runtime?: AXPAiAgentOutputContract | null;\n /** Assist `run` / `show` input. */\n input?: AXPAiAgentOutputContract | null;\n /** Active AiAgent catalog row. */\n agent?: AXPAiAgentOutputContract | unknown | null;\n /** Active Assist catalog row. */\n assist?: AXPAiAgentOutputContract | unknown | null;\n}\n\nfunction contractFromUnknown(raw: unknown): AXPAiAgentOutputContract | null {\n if (raw == null) {\n return null;\n }\n if (typeof raw === 'object' && !Array.isArray(raw) && 'kind' in (raw as object)) {\n const parsed = parseAgentOutputContract(raw);\n if (parsed) {\n return parsed;\n }\n }\n return parseAgentOutputContract(raw);\n}\n\n/**\n * Resolves the effective output contract for one engine turn.\n *\n * Priority: runtime > input > agent > assist > `{ kind: 'string' }`.\n */\nexport function resolveEffectiveOutputContract(params: ResolveEffectiveOutputContractInput): AXPAiAgentOutputContract {\n const runtime = contractFromUnknown(params.runtime);\n if (runtime) {\n return runtime;\n }\n const input = contractFromUnknown(params.input);\n if (input) {\n return input;\n }\n const agent = contractFromUnknown(params.agent);\n if (agent) {\n return agent;\n }\n const assist = contractFromUnknown(params.assist);\n if (assist) {\n return assist;\n }\n return resolveAgentOutputContract(null);\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPAiStructuredValidator } from '../../types/ai-assist.types';\n\nimport { parseStructuredAssistantWithSegmentFallback } from './repair-structured-assistant-parse';\n\n//#endregion\n\n//#region ---- Validation ----\n\nexport type StructuredAssistantValidation =\n | { ok: true; value: unknown }\n | { ok: false; errorMessage: string; failurePhase: 'parse' | 'validator' };\n\nfunction hasAnyStructuredContent(combined: string, segments: readonly string[] | undefined): boolean {\n if (combined.trim().length > 0) {\n return true;\n }\n if (!segments?.length) {\n return false;\n }\n return segments.some((s) => (s ?? '').trim().length > 0);\n}\n\n/**\n * Parses JSON from assistant text (including lightweight local repair), then optionally runs a custom validator.\n *\n * @param textSegmentsFallback - When provided, each segment is tried after combined text (last segment first); helps when prose and JSON sit in separate assistant text blocks.\n */\nexport async function validateStructuredAssistantResponse(\n assistantPlainText: string,\n structuredValidator: AXPAiStructuredValidator | undefined,\n textSegmentsFallback?: readonly string[],\n): Promise<StructuredAssistantValidation> {\n if (!hasAnyStructuredContent(assistantPlainText, textSegmentsFallback)) {\n return {\n ok: false,\n errorMessage: 'Assistant returned empty output.',\n failurePhase: 'parse',\n };\n }\n\n const parsed = parseStructuredAssistantWithSegmentFallback(assistantPlainText, textSegmentsFallback ?? []);\n if (parsed === undefined) {\n return {\n ok: false,\n errorMessage:\n 'Could not parse assistant output as JSON (expected a JSON object or array; optional markdown fence; segment fallback, local repair, and truncation repair also failed).',\n failurePhase: 'parse',\n };\n }\n\n if (!structuredValidator) {\n return { ok: true, value: parsed };\n }\n\n try {\n const value = await structuredValidator(parsed);\n return { ok: true, value };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n return {\n ok: false,\n errorMessage: msg.trim().length > 0 ? msg : 'Structured validation failed.',\n failurePhase: 'validator',\n };\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { Injectable, LOCALE_ID, inject } from '@angular/core';\nimport { resolveMultiLanguageString } from '@acorex/core/translation';\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../const';\nimport { isChatPurposeModelRow, readModelPurposes } from '../datasources/ai-model-catalog.datasource';\nimport type {\n AXPAiChatModelListItem,\n AXPAiChatModelListRequest,\n} from '../engine/ai-engine.types';\n\n//#endregion\n\n//#region ---- Row types (entity query) ----\n\ninterface CatalogModelRow {\n id: string;\n name?: string;\n title?: string | AXPMultiLanguageString;\n chatTransport?: string;\n openAiEndpointId?: string;\n maxContextTokens?: number;\n inputPricePerMillion?: number;\n outputPricePerMillion?: number;\n cachedInputPricePerMillion?: number;\n isDisabled?: boolean;\n openAiEndpointIsDisabled?: boolean;\n}\n\ninterface CatalogOpenAiEndpointRow {\n id: string;\n isDisabled?: boolean;\n}\n\n//#endregion\n\n/**\n * Lists chat-purpose AI models (catalog), without using {@link AXPAiEngine}.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPAiAssistChatModelCatalogService {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly localeId = inject(LOCALE_ID);\n\n private readonly modelData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.model.name)\n .data<string, CatalogModelRow, CatalogModelRow, CatalogModelRow, CatalogModelRow>();\n\n private readonly openAiEndpointData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.openAiEndpoint.name)\n .data<\n string,\n CatalogOpenAiEndpointRow,\n CatalogOpenAiEndpointRow,\n CatalogOpenAiEndpointRow,\n CatalogOpenAiEndpointRow\n >();\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * All active chat-purpose models in the catalog (assist / agent policy is applied at engine runtime).\n */\n async listModels(_request?: AXPAiChatModelListRequest): Promise<AXPAiChatModelListItem[]> {\n const queryResult = await this.modelData.query({\n skip: 0,\n take: 500,\n });\n const items = (queryResult?.items ?? []) as CatalogModelRow[];\n let rows = items.filter((x) => isChatPurposeModelRow(x as unknown as Record<string, unknown>));\n\n rows = await this.filterModelsActiveForChat(rows);\n\n return rows.map((x) => ({\n id: x.id,\n name: x.name?.trim() ?? '',\n title:\n resolveMultiLanguageString((x.title ?? x.name ?? x.id) as AXPMultiLanguageString, this.localeId).trim() || x.id,\n modelPurposes: readModelPurposes(x as unknown as Record<string, unknown>),\n chatTransport: x.chatTransport,\n maxContextTokens:\n typeof x.maxContextTokens === 'number' && x.maxContextTokens > 0\n ? x.maxContextTokens\n : undefined,\n inputPricePerMillion:\n typeof x.inputPricePerMillion === 'number' && x.inputPricePerMillion > 0\n ? x.inputPricePerMillion\n : undefined,\n outputPricePerMillion:\n typeof x.outputPricePerMillion === 'number' && x.outputPricePerMillion > 0\n ? x.outputPricePerMillion\n : undefined,\n cachedInputPricePerMillion:\n typeof x.cachedInputPricePerMillion === 'number' && x.cachedInputPricePerMillion > 0\n ? x.cachedInputPricePerMillion\n : undefined,\n }));\n }\n\n //#endregion\n\n //#region ---- Model filtering ----\n\n /**\n * Chat pickers only use models that are enabled and backed by an enabled OpenAI endpoint when applicable.\n */\n private async filterModelsActiveForChat(rows: CatalogModelRow[]): Promise<CatalogModelRow[]> {\n const endpointIds = [\n ...new Set(\n rows\n .filter((r) => String(r.chatTransport ?? '').toLowerCase() === 'openai' && r.openAiEndpointId?.trim())\n .map((r) => r.openAiEndpointId!.trim()),\n ),\n ];\n const endpointDisabled = new Map<string, boolean>();\n for (const id of endpointIds) {\n const ep = await this.openAiEndpointData.byKey(id);\n endpointDisabled.set(id, ep?.isDisabled === true);\n }\n\n return rows.filter((x) => {\n if (x.isDisabled === true) {\n return false;\n }\n if (x.openAiEndpointIsDisabled === true) {\n return false;\n }\n const transport = String(x.chatTransport ?? '').toLowerCase();\n if (transport === 'openai' && x.openAiEndpointId?.trim()) {\n if (endpointDisabled.get(x.openAiEndpointId.trim()) === true) {\n return false;\n }\n }\n return true;\n });\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { Injectable } from '@angular/core';\nimport type { AXPAiChatModelListItem } from '../engine/ai-engine.types';\n\n//#endregion\n\n//#region ---- Service ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXPAiDefaultModelPickerService {\n //#region ---- Public API ----\n\n /**\n * Picks a model from chat/vision catalog candidates: first entry that supports the purpose;\n * otherwise the first candidate.\n */\n pickFromChatCatalogForPurpose(\n models: AXPAiChatModelListItem[],\n purpose: 'chat' | 'vision',\n ): AXPAiChatModelListItem | undefined {\n if (!models.length) {\n return undefined;\n }\n const byPurpose = models.find((m) => modelItemSupportsChatCatalogPurpose(m, purpose));\n if (byPurpose) {\n return byPurpose;\n }\n return models[0];\n }\n\n //#endregion\n}\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction modelItemSupportsChatCatalogPurpose(m: AXPAiChatModelListItem, purpose: 'chat' | 'vision'): boolean {\n const p = m.modelPurposes?.length ? m.modelPurposes : [];\n if (purpose === 'vision') {\n return p.includes('vision');\n }\n return p.includes('chat');\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["PlatformManagementRootConfig","STRUCTURED_OUTPUT_KINDS"],"mappings":"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"}
|