@acorex-platform/module-ai-management-client 0.0.28 → 0.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/acorex-platform-module-ai-management-client-contracts.mjs +10 -1
- package/fesm2022/acorex-platform-module-ai-management-client-contracts.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-ai-management-client.mjs +24 -49
- package/fesm2022/acorex-platform-module-ai-management-client.mjs.map +1 -1
- package/package.json +1 -1
- package/types/acorex-platform-module-ai-management-client-contracts.d.ts +36 -4
- package/types/acorex-platform-module-ai-management-client.d.ts +4 -9
|
@@ -6,7 +6,7 @@ import { axpContextDefinitionIsAiPrompt, resolveMultiLanguageString } from '@aco
|
|
|
6
6
|
* `ManageCatalog` is Platform Console only (Intelligence config menu).
|
|
7
7
|
*/
|
|
8
8
|
const AXPAiManagementFeatureKeys = {
|
|
9
|
-
/** Configuration → Intelligence (agents, assists, models, endpoints, rules). */
|
|
9
|
+
/** Configuration → Intelligence (agents, assists, models, endpoints, rules, skills). */
|
|
10
10
|
ManageCatalog: 'AiManagement:Feature:ManageCatalog',
|
|
11
11
|
};
|
|
12
12
|
//#endregion
|
|
@@ -29,6 +29,8 @@ const AXPAiManagementMenuKeys = {
|
|
|
29
29
|
Agents: 'AiManagement:Menu:Agents',
|
|
30
30
|
/** Reusable system-prompt rules (Markdown fragments). */
|
|
31
31
|
Rules: 'AiManagement:Menu:Rules',
|
|
32
|
+
/** Playbooks (FLOWs) the Assist follows in the same turn. */
|
|
33
|
+
Skills: 'AiManagement:Menu:Skills',
|
|
32
34
|
};
|
|
33
35
|
//#endregion
|
|
34
36
|
|
|
@@ -146,6 +148,13 @@ const RootConfig = {
|
|
|
146
148
|
titlePlural: '@ai-management:rules.entities.rule.plural',
|
|
147
149
|
icon: 'fa-light fa-list-check',
|
|
148
150
|
},
|
|
151
|
+
skill: {
|
|
152
|
+
name: 'AiSkill',
|
|
153
|
+
fullName: `${config.module}.AiSkill`,
|
|
154
|
+
title: '@ai-management:skills.entities.skill.title',
|
|
155
|
+
titlePlural: '@ai-management:skills.entities.skill.plural',
|
|
156
|
+
icon: 'fa-light fa-signs-post',
|
|
157
|
+
},
|
|
149
158
|
mcpServer: {
|
|
150
159
|
name: 'McpServer',
|
|
151
160
|
fullName: `${config.module}.McpServer`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-ai-management-client-contracts.mjs","sources":["../../../../libs/modules/ai-management/contracts/src/features.keys.ts","../../../../libs/modules/ai-management/contracts/src/menu.keys.ts","../../../../libs/modules/ai-management/contracts/src/permission.keys.ts","../../../../libs/modules/ai-management/contracts/src/settings.keys.ts","../../../../libs/modules/ai-management/contracts/src/root-config.ts","../../../../libs/modules/ai-management/contracts/src/entities/mcp-server/mcp-server.types.ts","../../../../libs/modules/ai-management/contracts/src/lib/engine/ai-platform-runtime-context.definitions.ts","../../../../libs/modules/ai-management/contracts/src/lib/engine/ai-engine.types.ts","../../../../libs/modules/ai-management/contracts/src/lib/engine/ai-platform-runtime-context.util.ts","../../../../libs/modules/ai-management/contracts/src/lib/engine/ai-agent-output-contract.types.ts","../../../../libs/modules/ai-management/contracts/src/lib/engine/ai-effective-output-contract.ts","../../../../libs/modules/ai-management/contracts/src/lib/engine/ai-structured-output-schemas.util.ts","../../../../libs/modules/ai-management/contracts/src/lib/engine/ai-response-format.util.ts","../../../../libs/modules/ai-management/contracts/src/lib/engine/ai-chat-structured-output.util.ts","../../../../libs/modules/ai-management/contracts/src/lib/engine/ai-engine.normalize.ts","../../../../libs/modules/ai-management/contracts/src/lib/wire/ai-engine-wire.events.ts","../../../../libs/modules/ai-management/contracts/src/lib/ai-document-extract.util.ts","../../../../libs/modules/ai-management/contracts/src/lib/provider.types.ts","../../../../libs/modules/ai-management/contracts/src/lib/command-keys.ts","../../../../libs/modules/ai-management/contracts/src/lib/transport.keys.ts","../../../../libs/modules/ai-management/contracts/src/lib/model-catalog.util.ts","../../../../libs/modules/ai-management/contracts/src/lib/chat.util.ts","../../../../libs/modules/ai-management/contracts/src/index.ts","../../../../libs/modules/ai-management/contracts/src/acorex-platform-module-ai-management-client-contracts.ts"],"sourcesContent":["//#region ---- Feature keys ----\n\n/**\n * Edition / feature flags for AI Management.\n * `ManageCatalog` is Platform Console only (Intelligence config menu).\n */\nexport const AXPAiManagementFeatureKeys = {\n /** Configuration → Intelligence (agents, assists, models, endpoints, rules). */\n ManageCatalog: 'AiManagement:Feature:ManageCatalog',\n} as const;\n\n//#endregion\n","//#region ---- Menu Keys ----\n\n/**\n * AI Management menu keys.\n * Pattern: AiManagement:Menu:{Path}\n */\nexport const AXPAiManagementMenuKeys = {\n /** Configuration > AI Management (models, assists) */\n AiManagementConfig: 'Common:Menu:Configuration:AiManagement',\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","/**\n * Administration capabilities used by this module.\n * Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).\n */\nexport const AXPAdministrationPermissionKeys = {\n Access: 'Administration:Permission:Access',\n MaintainUsersAndRoles: 'Administration:Permission:MaintainUsersAndRoles',\n ManageSessions: 'Administration:Permission:ManageSessions',\n MaintainPolicies: 'Administration:Permission:MaintainPolicies',\n ViewIntegrations: 'Administration:Permission:ViewIntegrations',\n MaintainConnections: 'Administration:Permission:MaintainConnections',\n MaintainWorkflows: 'Administration:Permission:MaintainWorkflows',\n ManageWorkflowActions: 'Administration:Permission:ManageWorkflowActions',\n ViewRules: 'Administration:Permission:ViewRules',\n MaintainRules: 'Administration:Permission:MaintainRules',\n ManageRuleActions: 'Administration:Permission:ManageRuleActions',\n MaintainAi: 'Administration:Permission:MaintainAi',\n UseAiAssist: 'Administration:Permission:UseAiAssist',\n MaintainDashboards: 'Administration:Permission:MaintainDashboards',\n ViewJobs: 'Administration:Permission:ViewJobs',\n ManageJobActions: 'Administration:Permission:ManageJobActions',\n ViewObservability: 'Administration:Permission:ViewObservability',\n MaintainObservability: 'Administration:Permission:MaintainObservability',\n} as const;\n\n/**\n * Dynamic assist access permissions (`Assist.{name}.Use`) as children of UseAiAssist.\n * Parent Assist.Use maps to {@link AXPAdministrationPermissionKeys.UseAiAssist}.\n */\nexport const AXMAiAssistPermissionKeys = {\n Use: AXPAdministrationPermissionKeys.UseAiAssist,\n useForAssist: (assistName: string): string => `AiManagement:Permission:Assist.${assistName}.Use`,\n} as const;\n\n/**\n * @deprecated Prefer {@link AXPAdministrationPermissionKeys}.\n * Legacy nested shape kept so existing imports compile during migration.\n */\nexport const AXMPermissionsKeys = {\n AiManagement: {\n Management: AXPAdministrationPermissionKeys.MaintainAi,\n Assist: AXMAiAssistPermissionKeys,\n },\n} as const;\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 },\n} as const;\n\n//#endregion\n","//#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 mcpServer: {\n name: 'McpServer',\n fullName: `${config.module}.McpServer`,\n title: '@ai-management:mcp-servers.entities.mcp-server.title',\n titlePlural: '@ai-management:mcp-servers.entities.mcp-server.plural',\n icon: 'fa-light fa-plug-circle-bolt',\n },\n },\n};\n\n//#endregion\n","import { AXPEntityModel } from '@acorex-platform/framework-shared/entity';\n\n//#region ---- MCP server types ----\n\nexport type AXMAiManagementMcpServerTransport = 'http' | 'sse';\n\n/**\n * Persisted external MCP server catalog row.\n */\nexport interface AXMAiManagementMcpServerEntityModel extends AXPEntityModel<string> {\n name: string;\n title: string;\n transport: AXMAiManagementMcpServerTransport;\n url: string;\n apiKey?: string | null;\n isDisabled?: boolean;\n /** Optional prefix applied to tool names exposed to the AI engine. */\n toolPrefix?: string | null;\n /** When set, only these upstream MCP tool names may be called. */\n allowedToolNames?: string[] | null;\n}\n\n//#endregion\n","import type { AXPContextDefinition } from '@acorex-platform/framework-shared/core';\n\n//#region ---- Platform runtime time & notes ----\n\nexport const AXM_AI_PLATFORM_RUNTIME_CONTEXT_DEFINITIONS: AXPContextDefinition[] = [\n {\n name: 'currentInstant',\n title: 'Current instant (UTC)',\n description:\n 'Current moment as ISO 8601 UTC, built when platform runtime context is assembled before an AI engine run.',\n order: 80,\n capabilities: ['ai'],\n },\n {\n name: 'currentLocalDateTime',\n title: 'Current local date and time',\n description:\n 'Current date and time formatted in the user IANA time zone for natural-language interpretation in system prompts.',\n order: 90,\n capabilities: ['ai'],\n },\n {\n name: 'notes',\n title: 'Runtime notes',\n description:\n 'Optional free-text or structured notes merged into platform runtime context for a specific AI run (caller-supplied).',\n order: 100,\n capabilities: ['ai'],\n },\n];\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPMetaData, AXPMultiLanguageString } from '@acorex-platform/framework-shared/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 * Live platform context for AI runs: keys match {@link AXPContextDefinition.name}, values are opaque.\n * Built by {@link AXPAiPlatformRuntimeContextBuilder}. Display facts go into the system prompt; identity ids are not included.\n */\nexport type AXPAiPlatformRuntimeContext = Record<string, unknown>;\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};\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//#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 * MIME type and display name are resolved from {@link fileId} via file storage — not carried on the segment.\n */\nexport interface AXPAiChatFileResponse {\n type: 'file';\n content: {\n fileId: string;\n /** When true, UI offers download; default false (inline preview / playback). Set by the model when the user asks for a downloadable file. */\n isDownloadable?: boolean;\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 /** Provider-specific replay data (e.g. Gemini `thought_signature` under a provider-owned metadata key). */\n metadata?: AXPMetaData;\n}\n\nexport interface AXPAiChatAgentAssistantResponse {\n type: 'agent';\n content: AXPAiChatToolInvocationContent;\n callId?: string;\n metadata?: AXPMetaData;\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 metadata?: AXPMetaData;\n}\n\n//#endregion\n\n//#region ---- Engine run contract (UI ↔ connectivity) ----\n\nexport interface AXPAiEngineUsageTotals {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n cachedPromptTokens?: number;\n}\n\nexport interface AXPAiEngineLastProviderPayload {\n messages: AXPAiChatMessage[];\n toolCalls?: AXPAiToolCall[];\n /** Platform-neutral usage from the Vercel adapter. Engine must not parse vendor `rawResponse`. */\n usage?: AXPAiEngineUsageTotals;\n rawResponse?: unknown;\n}\n\n/** Serializable {@link AXPAiEngineRunOptions} passed to a delegated specialist sub-run (debug export). */\nexport interface AXPAiDelegatedAgentTranscriptRunInput {\n delegationCallId: string;\n agentId: string;\n agentName?: string;\n specialistArguments: unknown;\n run: Omit<AXPAiEngineRunOptions, 'onRunEvent'>;\n}\n\nexport interface AXPAiDelegatedAgentTranscriptEntry {\n agentName?: string;\n messages: AXPAiChatMessage[];\n runInput?: AXPAiDelegatedAgentTranscriptRunInput;\n /** Provider API model id used for this specialist sub-run (e.g. `gpt-5`). */\n modelLabel?: string;\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 | {\n type: 'tool_call_end';\n call: AXPAiToolCall;\n resultMessage: AXPAiChatMessage;\n /** Present when the tool was a delegated specialist — available immediately after the sub-run finishes. */\n delegatedTranscript?: AXPAiDelegatedAgentTranscriptEntry;\n }\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 /** Adds delegated specialists for this run only (AiAgent catalog `id` or programmatic `name`). */\n includeAgents?: string[];\n /** Removes delegated specialists for this run (matches catalog `id` or `name`, case-insensitive). */\n excludeAgents?: string[];\n platformRuntimeContext?: AXPAiPlatformRuntimeContext | null;\n outputContract?: AXPAiAgentOutputContract;\n onRunEvent?: (event: AXPAiEngineRunEvent) => void;\n /** When aborted, provider streams and multi-step loops should stop promptly. */\n abortSignal?: AbortSignal;\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 { axpContextDefinitionIsAiPrompt, type AXPContextDefinition } from '@acorex-platform/framework-shared/core';\nimport type { AXPAiPlatformRuntimeContext } from './ai-engine.types';\nimport type { AXPAiChatOptions } from '../provider.types';\n\n//#endregion\n\n//#region ----- Prompt vs SDK runtime split -----\n\nexport interface AXPAiSdkChatContextBundle {\n runtimeContext?: Record<string, string>;\n toolsContext?: Record<string, string>;\n promptAddendum: string;\n}\n\nexport const AXP_AI_SDK_TOOL_CONTEXT_JSON_SCHEMA: Record<string, unknown> = {\n type: 'object',\n properties: {\n runId: { type: 'string' },\n assistId: { type: 'string' },\n agentId: { type: 'string' },\n chatTransport: { type: 'string' },\n modelEntityId: { type: 'string' },\n },\n additionalProperties: false,\n};\n\nfunction stringifyRuntimeValue(value: unknown): string | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value === 'string') {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n try {\n const json = JSON.stringify(value);\n return json && json !== '{}' && json !== '[]' ? json : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction compactStringRecord(input: Record<string, string | undefined>): Record<string, string> | undefined {\n const out: Record<string, string> = {};\n for (const [key, value] of Object.entries(input)) {\n const trimmed = value?.trim();\n if (trimmed) {\n out[key] = trimmed;\n }\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\n/**\n * Turns registered AI-capable context definitions + live values into the\n * `## Platform runtime` system-prompt block. Identity ids are never assembled into values.\n */\nexport function formatAxpAiPlatformRuntimePrompt(\n platformRuntimeContext: AXPAiPlatformRuntimeContext | null | undefined,\n definitions: readonly AXPContextDefinition[] | null | undefined,\n): string {\n if (!platformRuntimeContext || !definitions?.length) {\n return '';\n }\n const lines = definitions\n .filter(axpContextDefinitionIsAiPrompt)\n .slice()\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\n .map((field) => {\n const value = stringifyRuntimeValue(platformRuntimeContext[field.name]);\n return value ? `- ${field.title}: ${value}` : null;\n })\n .filter((line): line is string => line != null);\n if (lines.length === 0) {\n return '';\n }\n return ['## Platform runtime', ...lines].join('\\n');\n}\n\nexport function buildAxpAiSdkChatContextBundle(input: {\n platformRuntimeContext?: AXPAiPlatformRuntimeContext | null;\n contextDefinitions?: readonly AXPContextDefinition[] | null;\n runId?: string;\n assistId?: string;\n agentId?: string;\n agentName?: string;\n chatTransport?: string;\n modelEntityId?: string;\n demisSessionUuid?: string;\n}): AXPAiSdkChatContextBundle {\n const runtimeContext = compactStringRecord({\n runId: input.runId,\n assistId: input.assistId,\n agentId: input.agentId,\n agentName: input.agentName,\n chatTransport: input.chatTransport,\n modelEntityId: input.modelEntityId,\n demisSessionUuid: input.demisSessionUuid,\n });\n const toolsContext = compactStringRecord({\n runId: input.runId,\n assistId: input.assistId,\n agentId: input.agentId,\n chatTransport: input.chatTransport,\n modelEntityId: input.modelEntityId,\n });\n return {\n ...(runtimeContext ? { runtimeContext } : {}),\n ...(toolsContext ? { toolsContext } : {}),\n promptAddendum: formatAxpAiPlatformRuntimePrompt(\n input.platformRuntimeContext,\n input.contextDefinitions,\n ),\n };\n}\n\nexport function attachAxpAiSdkChatContext<T extends AXPAiChatOptions>(\n options: T,\n bundle: AXPAiSdkChatContextBundle,\n): T {\n const hasTools = Boolean(options.tools && options.tools.length > 0);\n return {\n ...options,\n ...(bundle.runtimeContext ? { runtimeContext: bundle.runtimeContext } : {}),\n ...(hasTools && bundle.toolsContext ? { toolsContext: bundle.toolsContext } : {}),\n };\n}\n\nexport interface AXPAiPlatformRuntimeContextSources {\n userDisplayName?: string;\n tenantTitle?: string;\n applicationTitle?: string;\n locale?: string;\n calendarSystem?: string;\n timeZone?: string;\n country?: string;\n notes?: string;\n now?: Date;\n}\n\nexport function formatAxpAiPlatformRuntimeLocalDateTime(now: Date, ianaTimeZone?: string): 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\nexport function assembleAxpAiPlatformRuntimeContext(\n sources: AXPAiPlatformRuntimeContextSources,\n): AXPAiPlatformRuntimeContext {\n const now = sources.now ?? new Date();\n const ctx: AXPAiPlatformRuntimeContext = {};\n const set = (key: string, value: unknown): void => {\n if (value == null) {\n return;\n }\n const asString = typeof value === 'string' ? value.trim() : String(value).trim();\n if (asString.length > 0) {\n ctx[key] = typeof value === 'string' ? asString : value;\n }\n };\n set('userDisplayName', sources.userDisplayName);\n set('tenantTitle', sources.tenantTitle);\n set('applicationTitle', sources.applicationTitle);\n set('locale', sources.locale);\n set('calendarSystem', sources.calendarSystem);\n set('timeZone', sources.timeZone);\n set('country', sources.country);\n set('notes', sources.notes);\n set('currentInstant', now.toISOString());\n set('currentLocalDateTime', formatAxpAiPlatformRuntimeLocalDateTime(now, sources.timeZone));\n return ctx;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPAgentOutputKind, AXPOutputTranscriptSegmentId } from '@acorex-platform/framework-shared/core';\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/**\n * Minimal JSON-Schema-like object for native provider hints and local validation.\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/** 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/**\n * Catalog row contract for specialist final output (separate from domain `systemPrompt`).\n * Field paths align with agent/assist entity `outputContract` JSON.\n */\nexport interface AXPAiAgentOutputContract {\n kind: AXPAiAgentOutputKind;\n /**\n * When `kind` is `object`: `text` = generic JSON object as text; `node` = inner widget node in chat;\n * `followUp` = `{\"type\":\"followUp\",\"content\":[...]}` envelope.\n */\n transcriptSegment?: AXPAiOutputTranscriptSegment;\n instruction?: string;\n schemaSummary?: string;\n schema?: AXPAiJsonSchemaLike;\n schemaName?: string;\n schemaStrict?: boolean;\n validationCommandName?: string;\n structuredRetries?: number;\n providerResponseFormat?: AXPAiResponseFormat;\n}\n\n/** Default structured retry count when `structuredRetries` is omitted on structured kinds. */\nexport const AXPAI_AGENT_OUTPUT_CONTRACT_DEFAULT_STRUCTURED_RETRIES = 2;\n\n//#endregion\n\n//#region ---- Schema / response format parsers ----\n\nfunction isJsonSchemaLike(value: unknown): value is AXPAiJsonSchemaLike {\n return value != null && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport function parseJsonSchemaLike(raw: unknown): AXPAiJsonSchemaLike | undefined {\n if (!isJsonSchemaLike(raw)) {\n return undefined;\n }\n return raw;\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//#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' || value === 'file';\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 './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 | unknown | null;\n /** Assist `run` / `show` input. */\n input?: AXPAiAgentOutputContract | unknown | null;\n /** Active AiAgent catalog row. */\n agent?: AXPAiAgentOutputContract | unknown | null;\n /** Active Assist catalog row. */\n assist?: AXPAiAgentOutputContract | unknown | null;\n}\n\nfunction isSegmentPresetId(value: string): value is 'text' | 'node' | 'followUp' | 'file' {\n return value === 'text' || value === 'node' || value === 'followUp' || value === 'file';\n}\n\nfunction contractFromSegmentPresetId(id: string): AXPAiAgentOutputContract | null {\n if (id === 'text' || id === 'file') {\n return { kind: 'string' };\n }\n if (id === 'node') {\n return { kind: 'object', transcriptSegment: 'node' };\n }\n if (id === 'followUp') {\n return { kind: 'object', transcriptSegment: 'followUp' };\n }\n return null;\n}\n\nfunction contractFromUnknown(raw: unknown): AXPAiAgentOutputContract | null {\n if (raw == null) {\n return null;\n }\n if (typeof raw === 'string') {\n const id = raw.trim();\n if (!id.length) {\n return null;\n }\n const preset = isSegmentPresetId(id) ? contractFromSegmentPresetId(id) : null;\n if (preset) {\n return preset;\n }\n return parseAgentOutputContract(raw);\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 { AXPAiAgentOutputContract, AXPAiJsonSchemaLike } from './ai-agent-output-contract.types';\nimport { resolveOutputTranscriptSegment } from './ai-agent-output-contract.types';\n\n//#endregion\n\n//#region ---- AXPWidgetNode (provider JSON Schema hint) ----\n\n/**\n * JSON Schema hint for {@link AXPWidgetNode} roots returned by layout specialists.\n * Intentionally permissive (`additionalProperties`) — strict validation runs via\n * `AiFormbuilder:ValidateLayoutJsonForAi` when configured on the agent contract.\n */\nexport const AXP_WIDGET_NODE_JSON_SCHEMA: AXPAiJsonSchemaLike = {\n type: 'object',\n required: ['type'],\n additionalProperties: true,\n properties: {\n type: {\n type: 'string',\n description: 'AXPWidgetNode.type — widget registry name (e.g. block-layout, table-layout).',\n },\n mode: {\n type: 'string',\n enum: ['view', 'edit', 'designer', 'print', 'column', 'filter'],\n description: 'AXPWidgetNode.mode render surface.',\n },\n path: { type: 'string' },\n name: { type: 'string' },\n visible: { description: 'boolean or AXPExpression object.' },\n defaultValue: { description: 'Widget default value.' },\n children: {\n type: 'array',\n description: 'Nested AXPWidgetNode[]',\n items: {\n type: 'object',\n required: ['type'],\n additionalProperties: true,\n properties: {\n type: { type: 'string' },\n mode: { type: 'string' },\n children: { type: 'array', items: { type: 'object', additionalProperties: true } },\n options: { type: 'object', additionalProperties: true },\n },\n },\n },\n options: { type: 'object', additionalProperties: true },\n triggers: { type: 'object', additionalProperties: true },\n meta: { type: 'object', additionalProperties: true },\n valueTransforms: { type: 'object', additionalProperties: true },\n },\n};\n\n//#endregion\n\n//#region ---- followUp envelope ----\n\n/** JSON Schema for the followUp transcript envelope (`type` + `content` chips). */\nexport const AXP_FOLLOW_UP_ENVELOPE_JSON_SCHEMA: AXPAiJsonSchemaLike = {\n type: 'object',\n required: ['type', 'content'],\n additionalProperties: false,\n properties: {\n type: { type: 'string', enum: ['followUp'] },\n content: {\n type: 'array',\n minItems: 2,\n maxItems: 5,\n description:\n 'Suggestion chips: each item is either a plain string label or { text, command: { name, options? } }.',\n items: {\n oneOf: [\n { type: 'string', minLength: 1 },\n {\n type: 'object',\n required: ['text', 'command'],\n additionalProperties: false,\n properties: {\n text: { type: 'string' },\n command: {\n type: 'object',\n required: ['name'],\n additionalProperties: true,\n properties: {\n name: { type: 'string' },\n options: { type: 'object', additionalProperties: true },\n },\n },\n },\n },\n ],\n },\n },\n },\n};\n\n//#endregion\n\n//#region ---- Resolve builtin schema ----\n\n/** Built-in JSON Schema for known transcript segments when the contract omits `schema`. */\nexport function resolveBuiltinSchemaForOutputContract(\n contract: AXPAiAgentOutputContract,\n): AXPAiJsonSchemaLike | undefined {\n if (contract.kind !== 'object') {\n return undefined;\n }\n const segment = resolveOutputTranscriptSegment(contract);\n if (segment === 'node') {\n return AXP_WIDGET_NODE_JSON_SCHEMA;\n }\n if (segment === 'followUp') {\n return AXP_FOLLOW_UP_ENVELOPE_JSON_SCHEMA;\n }\n return undefined;\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';\nimport type { AXPAiJsonSchemaLike, AXPAiResponseFormat } from './ai-agent-output-contract.types';\nimport { parseResponseFormat } from './ai-agent-output-contract.types';\nimport { resolveBuiltinSchemaForOutputContract } from './ai-structured-output-schemas.util';\n\n//#endregion\n\n//#region ---- Structured output kinds ----\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\nfunction isJsonSchemaLike(value: unknown): value is AXPAiJsonSchemaLike {\n return value != null && typeof value === 'object' && !Array.isArray(value);\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\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 const schema =\n (contract.schema && isJsonSchemaLike(contract.schema) ? contract.schema : undefined) ??\n resolveBuiltinSchemaForOutputContract(contract);\n\n if (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,\n name,\n strict: contract.schemaStrict === true,\n };\n }\n\n return { type: 'json_object' };\n}\n\nexport { parseResponseFormat };\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPAiResponseFormat } from './ai-agent-output-contract.types';\n\n//#endregion\n\n//#region ---- Provider structured-output gate ----\n\nexport type AXPAiChatStructuredOutputGate = {\n responseFormat?: AXPAiResponseFormat;\n hasTools?: boolean;\n toolChoice?: 'auto' | 'none' | { type: 'tool'; name: string };\n};\n\n/**\n * Native structured output (AI SDK `output` / provider schema) must not run on tool-calling\n * turns — only when tools are absent or explicitly disabled (`toolChoice: 'none'`).\n */\nexport function axpAiShouldApplyChatStructuredOutput(params: AXPAiChatStructuredOutputGate): boolean {\n const format = params.responseFormat;\n if (!format || format.type === 'text') {\n return false;\n }\n if (!params.hasTools) {\n return true;\n }\n return params.toolChoice === 'none';\n}\n\n//#endregion\n\n//#region ---- Duplicate JSON in text ----\n\nfunction stripJsonFences(raw: string): string {\n const fence = raw.match(/```(?:json)?\\s*([\\s\\S]*?)```/i);\n return fence ? fence[1].trim() : raw.trim();\n}\n\nexport function axpAiTryParseJsonValueFromAssistantText(text: string): unknown | undefined {\n const trimmed = stripJsonFences(text.trim());\n if (!trimmed) {\n return undefined;\n }\n if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) {\n return undefined;\n }\n try {\n return JSON.parse(trimmed) as unknown;\n } catch {\n return undefined;\n }\n}\n\nfunction isFollowUpEnvelope(value: unknown): boolean {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n const o = value as Record<string, unknown>;\n return o['type'] === 'followUp' && Array.isArray(o['content']);\n}\n\nfunction isLikelyWidgetRoot(value: unknown): boolean {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n const t = (value as Record<string, unknown>)['type'];\n return typeof t === 'string' && t.trim().length > 0 && t !== 'node' && t !== 'followUp';\n}\n\nfunction isNodeEnvelope(value: unknown): boolean {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n const o = value as Record<string, unknown>;\n return o['type'] === 'node' && o['content'] != null;\n}\n\n/** True when assistant `text` duplicates a structured segment already attached as `node` / `followUp`. */\nexport function axpAiTextDuplicatesStructuredSegment(text: string, segment: 'node' | 'followUp'): boolean {\n const parsed = axpAiTryParseJsonValueFromAssistantText(text);\n if (parsed === undefined) {\n return false;\n }\n if (segment === 'followUp') {\n return isFollowUpEnvelope(parsed);\n }\n return isLikelyWidgetRoot(parsed) || isNodeEnvelope(parsed);\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPAiChatMessage } from './ai-engine.types';\n\n//#endregion\n\n//#region ---- Supervisor delegated-agent helpers ----\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 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 ---- Message builders ----\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 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\n//#endregion\n\n//#region ---- Transcript read helpers ----\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//#endregion\n\n//#region ---- Tool result normalization ----\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, kind: 'object', data: handlerResult };\n }\n }\n if (typeof handlerResult === 'object' && !Array.isArray(handlerResult)) {\n return handlerResult;\n }\n return { success: true, kind: 'object', data: handlerResult };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n AXPAiEngineRunEvent,\n AXPAiEngineRunOptions,\n AXPAiEngineRunResult,\n AXPAiToolCall,\n} from '../engine/ai-engine.types';\n\n//#endregion\n\n//#region ---- Wire events (client ↔ server) ----\n\nexport type AXPAiEngineWireEvent =\n | AXPAiEngineRunEvent\n | { type: 'run_started'; runId: string }\n | { type: 'frontend_tool_call'; runId: string; call: AXPAiToolCall }\n | { type: 'run_completed'; result: AXPAiEngineRunResult }\n | { type: 'run_failed'; error: string };\n\nexport type AXPAiEngineRunRequest = Omit<AXPAiEngineRunOptions, 'onRunEvent'>;\n\n//#endregion\n","//#region ----- Types -----\n\nexport type AXPAiExtractDocumentKind = 'image' | 'pdf' | 'text' | 'unsupported';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst IMAGE_MIME_TYPES = new Set([\n 'image/jpeg',\n 'image/png',\n 'image/webp',\n 'image/gif',\n 'image/bmp',\n 'image/tiff',\n]);\n\nconst IMAGE_EXTENSION_PATTERN = /\\.(png|jpe?g|gif|webp|bmp|tif|tiff)$/i;\n\nconst TEXT_MIME_TYPES = new Set([\n 'text/plain',\n 'text/markdown',\n 'text/csv',\n 'application/json',\n]);\n\nconst TEXT_EXTENSION_PATTERN = /\\.(txt|md|csv|json)$/i;\n\nconst PDF_MIME = 'application/pdf';\nconst PDF_EXTENSION_PATTERN = /\\.pdf$/i;\n\n//#endregion\n\n//#region ----- Helpers -----\n\nfunction normalizeMime(mimeType: string | undefined | null): string {\n return typeof mimeType === 'string' ? mimeType.trim().toLowerCase() : '';\n}\n\nfunction isTextMime(mime: string): boolean {\n if (TEXT_MIME_TYPES.has(mime)) {\n return true;\n }\n return mime.startsWith('text/');\n}\n\nfunction classifyByFilename(filename: string | undefined | null): AXPAiExtractDocumentKind {\n const name = typeof filename === 'string' ? filename.trim() : '';\n if (!name) {\n return 'unsupported';\n }\n if (IMAGE_EXTENSION_PATTERN.test(name)) {\n return 'image';\n }\n if (PDF_EXTENSION_PATTERN.test(name)) {\n return 'pdf';\n }\n if (TEXT_EXTENSION_PATTERN.test(name)) {\n return 'text';\n }\n return 'unsupported';\n}\n\n//#endregion\n\n//#region ----- Classification -----\n\n/**\n * Classifies a document for AI text extraction (image OCR, PDF file part, or UTF-8 text).\n * Does not include Office formats.\n */\nexport function classifyAiExtractDocument(\n mimeType: string | undefined | null,\n filename?: string | null,\n): AXPAiExtractDocumentKind {\n const mime = normalizeMime(mimeType);\n if (mime && mime !== 'application/octet-stream') {\n if (mime.startsWith('image/') || IMAGE_MIME_TYPES.has(mime)) {\n return 'image';\n }\n if (mime === PDF_MIME) {\n return 'pdf';\n }\n if (isTextMime(mime)) {\n return 'text';\n }\n }\n return classifyByFilename(filename);\n}\n\nexport function canAiExtractDocument(\n mimeType: string | undefined | null,\n filename?: string | null,\n): boolean {\n return classifyAiExtractDocument(mimeType, filename) !== 'unsupported';\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n AXPAiChatMessage,\n AXPAiChatTransport,\n AXPAiEngineLastProviderPayload,\n} from './engine/ai-engine.types';\nimport type { AXPAiResponseFormat } from './engine/ai-agent-output-contract.types';\n\n//#endregion\n\n//#region ---- Provider request/response ----\n\nexport type AXPAiChatResult = AXPAiEngineLastProviderPayload;\n\nexport type AXPAiChatToolChoice =\n | 'auto'\n | 'none'\n | {\n type: 'tool';\n name: string;\n };\n\nexport interface AXPAiToolSchema {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n}\n\nexport interface AXPAiChatOptionsDemis {\n /** Demisco bearer token; when omitted the server loads tenant settings. */\n bearerToken?: string;\n /** Demisco `agent_uuid` (`/core/agent/chat/` body field). */\n agentUuid?: string;\n /** Demisco `session_uuid` for server-side conversation history. */\n sessionUuid?: string;\n /** Demisco transcribe `language` form field (e.g. `FA`, `EN`). */\n transcribeLanguage?: string;\n /** Catalog model id for inline audio transcription before chat. */\n speechModelEntityId?: string;\n}\n\nexport interface AXPAiChatOptions {\n messages: AXPAiChatMessage[];\n /** Catalog model entity id — preferred; adapter resolves credentials server-side. */\n modelEntityId?: string;\n /** API model id override; when omitted, resolved from `modelEntityId`. */\n modelId?: string | { value?: string };\n /** Catalog transport metadata for runtime context only — not for credential loading. */\n chatTransport?: AXPAiChatTransport;\n /** @deprecated Adapter resolves credentials from `modelEntityId`; do not pass from Engine. */\n openAi?: {\n apiBase: string;\n apiKey: string;\n stream?: boolean;\n };\n /** @deprecated Adapter resolves credentials from `modelEntityId`; do not pass from Engine. */\n geminiApiKey?: string;\n /** @deprecated Demis runtime is disabled; kept for contract compatibility. */\n demis?: AXPAiChatOptionsDemis;\n tools?: AXPAiToolSchema[];\n toolChoice?: AXPAiChatToolChoice;\n maxTokens?: number;\n temperature?: number;\n stream?: boolean;\n responseFormat?: AXPAiResponseFormat;\n onStreamDelta?: (delta: string) => void;\n /** Cancels in-flight generateText / streamText when aborted. */\n abortSignal?: AbortSignal;\n /**\n * AI SDK `runtimeContext` — run metadata that must not be added to the model prompt\n * (ids, transport, catalog keys). Not used to execute tools.\n */\n runtimeContext?: Record<string, string>;\n /**\n * Unused for execution. SDK tools have no `execute`; ToolCoordinator runs tools.\n * Kept only so the adapter can forward a payload if present — do not add `tool.execute`.\n */\n toolsContext?: Record<string, string>;\n}\n\nexport interface AXPAiExtractDocumentTextOptions {\n /** Catalog model entity id — preferred; adapter resolves credentials server-side. */\n modelEntityId?: string;\n modelId?: string | { value?: string };\n chatTransport?: AXPAiChatTransport;\n /** @deprecated Adapter resolves from `modelEntityId`. */\n openAi?: {\n apiBase: string;\n apiKey: string;\n };\n /** @deprecated Adapter resolves from `modelEntityId`. */\n geminiApiKey?: string;\n /** Agent catalog prompt. Omitted or empty: no system message is sent. */\n systemPrompt?: string;\n userInstruction: string;\n mimeType: string;\n /** Raw document bytes from file storage. */\n bytes: Uint8Array;\n filename?: string;\n}\n\nexport interface AXPAiGenerateImageOptions {\n modelEntityId?: string;\n chatTransport?: AXPAiChatTransport;\n catalogApiModelName?: string;\n prompt: string;\n size?: string;\n openAi?: {\n apiBase: string;\n apiKey: string;\n };\n geminiApiKey?: string;\n}\n\nexport interface AXPAiGenerateVideoOptions {\n modelEntityId?: string;\n chatTransport?: AXPAiChatTransport;\n catalogApiModelName?: string;\n prompt: string;\n aspectRatio?: string;\n duration?: number;\n openAi?: {\n apiBase: string;\n apiKey: string;\n };\n geminiApiKey?: string;\n}\n\nexport interface AXPAiTranscribeSpeechOptions {\n modelEntityId?: string;\n chatTransport?: AXPAiChatTransport;\n catalogApiModelName?: string;\n audioBytes: ArrayBuffer;\n mimeType: string;\n fileName?: string;\n language?: string;\n openAi?: {\n apiBase: string;\n apiKey: string;\n };\n geminiApiKey?: string;\n}\n\nexport interface AXPAiSynthesizeSpeechOptions {\n modelEntityId?: string;\n chatTransport?: AXPAiChatTransport;\n catalogApiModelName?: string;\n text: string;\n voice?: string;\n responseFormat?: string;\n openAi?: {\n apiBase: string;\n apiKey: string;\n };\n geminiApiKey?: string;\n}\n\n//#endregion\n","//#region ---- AI chat registry command keys ----\n\nexport const AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY = 'AiManagement:ChatGenerateImage';\nexport const AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY = 'AiManagement:ChatTranscribeSpeech';\nexport const AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY = 'AiManagement:ChatSynthesizeSpeech';\nexport const AIMANAGEMENT_EXTRACT_DOCUMENT_TEXT_COMMAND_KEY = 'AiManagement:ExtractDocumentText';\nexport const AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY =\n 'AiManagement:StructuredTextCompletion';\n\n//#endregion\n","//#region ---- AI engine runtime transport keys ----\n\nexport const AXMAiManagementTransportKeys = {\n Engine: {\n Run: 'AiManagement:Engine:Run',\n SubmitToolResult: 'AiManagement:Engine:SubmitToolResult',\n },\n ConversationAssist: {\n Subscribe: 'ConversationManagement:Assist:Subscribe',\n AssistSync: 'ConversationManagement:Assist:AssistSync',\n RetryAssist: 'ConversationManagement:Assist:RetryAssist',\n CancelAssist: 'ConversationManagement:Assist:CancelAssist',\n },\n} as const;\n\n//#endregion\n","//#region ---- Model catalog helpers ----\n\nexport type AXMAiModelPurposeSlug = 'chat' | 'vision' | 'image' | 'speech' | 'tts' | 'video';\n\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\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\n//#endregion\n\n//#region ---- Transport parsing ----\n\nimport type { AXPAiChatTransport } from './engine/ai-engine.types';\n\nexport function parseChatTransport(raw: unknown): AXPAiChatTransport | undefined {\n let v = '';\n if (typeof raw === 'string') {\n v = raw.trim().toLowerCase();\n } else if (raw != null && typeof raw === 'object' && 'value' in raw) {\n const inner = (raw as { value?: unknown }).value;\n v = inner == null ? '' : String(inner).trim().toLowerCase();\n }\n if (v === 'gemini' || v === 'openai' || v === 'demis') {\n return v;\n }\n return undefined;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { resolveMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport type { AXPAiChatMessage, AXPAiChatResponse, AXPAiToolCall } from './engine/ai-engine.types';\nimport { axpAiParseSupervisorAgentToolName } from './engine/ai-engine.normalize';\n\n//#endregion\n\n//#region ---- Transcript helpers ----\n\nexport function axpAiChatMessagesFromProviderAssistant(\n text: string,\n toolCalls?: AXPAiToolCall[],\n): AXPAiChatMessage[] {\n const normalized = (text ?? '')\n .replace(/<(\\/?redacted_thinking)>/gi, '<$1>')\n .replace(/<(\\/?think)>/gi, '<$1>');\n\n const responses: AXPAiChatResponse[] = [];\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 const plain = normalized.slice(last, m.index).trim();\n if (plain.length > 0) {\n responses.push({ type: 'text', content: plain });\n }\n const think = (m[2] ?? '').trim();\n if (think.length > 0) {\n responses.push({ type: 'think', content: think });\n }\n last = m.index + m[0].length;\n }\n const tail = normalized.slice(last).trim();\n if (tail.length > 0) {\n responses.push({ type: 'text', content: tail });\n }\n\n const out: AXPAiChatMessage[] = [];\n if (responses.length > 0) {\n out.push({ role: 'assistant', responses });\n }\n\n for (const tc of toolCalls ?? []) {\n const isDelegatedAgent = axpAiParseSupervisorAgentToolName(tc.name) != null;\n out.push({\n role: 'assistant',\n responses: [\n isDelegatedAgent\n ? {\n type: 'agent',\n content: { command: tc.name, arguments: tc.arguments },\n callId: tc.id,\n ...(tc.metadata ? { metadata: { ...tc.metadata } } : {}),\n }\n : {\n type: 'tool',\n content: { command: tc.name, arguments: tc.arguments },\n callId: tc.id,\n ...(tc.metadata ? { metadata: { ...tc.metadata } } : {}),\n },\n ],\n });\n }\n\n return out;\n}\n\nexport function axcResolveAiMlOrPlainString(value: unknown, locale = 'en-US'): string {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value.trim();\n }\n return resolveMultiLanguageString(value as AXPMultiLanguageString, locale).trim();\n}\n\n//#endregion\n","//#region ---- Contracts barrel ----\n\nexport * from './features.keys';\nexport * from './menu.keys';\nexport * from './permission.keys';\nexport * from './settings.keys';\n\nexport * from './root-config';\n\n//#endregion\n\nexport * from './entities';\n\nexport * from './lib/engine/ai-platform-runtime-context.definitions';\nexport * from './lib/engine/ai-engine.types';\nexport * from './lib/engine/ai-platform-runtime-context.util';\nexport * from './lib/engine/ai-agent-output-contract.types';\nexport * from './lib/engine/ai-effective-output-contract';\nexport * from './lib/engine/ai-response-format.util';\nexport * from './lib/engine/ai-structured-output-schemas.util';\nexport * from './lib/engine/ai-chat-structured-output.util';\nexport * from './lib/engine/ai-engine.normalize';\nexport * from './lib/wire/ai-engine-wire.events';\nexport * from './lib/ai-document-extract.util';\nexport * from './lib/provider.types';\nexport * from './lib/command-keys';\nexport * from './lib/transport.keys';\nexport * from './lib/model-catalog.util';\nexport * from './lib/chat.util';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["isJsonSchemaLike","STRUCTURED_OUTPUT_KINDS"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-ai-management-client-contracts.mjs","sources":["../../../../libs/modules/ai-management/contracts/src/features.keys.ts","../../../../libs/modules/ai-management/contracts/src/menu.keys.ts","../../../../libs/modules/ai-management/contracts/src/permission.keys.ts","../../../../libs/modules/ai-management/contracts/src/settings.keys.ts","../../../../libs/modules/ai-management/contracts/src/root-config.ts","../../../../libs/modules/ai-management/contracts/src/entities/mcp-server/mcp-server.types.ts","../../../../libs/modules/ai-management/contracts/src/lib/engine/ai-platform-runtime-context.definitions.ts","../../../../libs/modules/ai-management/contracts/src/lib/engine/ai-engine.types.ts","../../../../libs/modules/ai-management/contracts/src/lib/engine/ai-platform-runtime-context.util.ts","../../../../libs/modules/ai-management/contracts/src/lib/engine/ai-agent-output-contract.types.ts","../../../../libs/modules/ai-management/contracts/src/lib/engine/ai-effective-output-contract.ts","../../../../libs/modules/ai-management/contracts/src/lib/engine/ai-structured-output-schemas.util.ts","../../../../libs/modules/ai-management/contracts/src/lib/engine/ai-response-format.util.ts","../../../../libs/modules/ai-management/contracts/src/lib/engine/ai-chat-structured-output.util.ts","../../../../libs/modules/ai-management/contracts/src/lib/engine/ai-engine.normalize.ts","../../../../libs/modules/ai-management/contracts/src/lib/wire/ai-engine-wire.events.ts","../../../../libs/modules/ai-management/contracts/src/lib/ai-document-extract.util.ts","../../../../libs/modules/ai-management/contracts/src/lib/provider.types.ts","../../../../libs/modules/ai-management/contracts/src/lib/command-keys.ts","../../../../libs/modules/ai-management/contracts/src/lib/transport.keys.ts","../../../../libs/modules/ai-management/contracts/src/lib/model-catalog.util.ts","../../../../libs/modules/ai-management/contracts/src/lib/chat.util.ts","../../../../libs/modules/ai-management/contracts/src/index.ts","../../../../libs/modules/ai-management/contracts/src/acorex-platform-module-ai-management-client-contracts.ts"],"sourcesContent":["//#region ---- Feature keys ----\r\n\r\n/**\r\n * Edition / feature flags for AI Management.\r\n * `ManageCatalog` is Platform Console only (Intelligence config menu).\r\n */\r\nexport const AXPAiManagementFeatureKeys = {\r\n /** Configuration → Intelligence (agents, assists, models, endpoints, rules, skills). */\r\n ManageCatalog: 'AiManagement:Feature:ManageCatalog',\r\n} as const;\r\n\r\n//#endregion\r\n","//#region ---- Menu Keys ----\r\n\r\n/**\r\n * AI Management menu keys.\r\n * Pattern: AiManagement:Menu:{Path}\r\n */\r\nexport const AXPAiManagementMenuKeys = {\r\n /** Configuration > AI Management (models, assists) */\r\n AiManagementConfig: 'Common:Menu:Configuration:AiManagement',\r\n /** OpenAI-compatible HTTP endpoints (base URL + API key). */\r\n OpenAiEndpoints: 'AiManagement:Menu:OpenAiEndpoints',\r\n /** List of AI models (from providers). */\r\n Models: 'AiManagement:Menu:Models',\r\n /** List of Assists. */\r\n Assists: 'AiManagement:Menu:Assists',\r\n /** Delegated specialist agents (supervisor routing). */\r\n Agents: 'AiManagement:Menu:Agents',\r\n /** Reusable system-prompt rules (Markdown fragments). */\r\n Rules: 'AiManagement:Menu:Rules',\r\n /** Playbooks (FLOWs) the Assist follows in the same turn. */\r\n Skills: 'AiManagement:Menu:Skills',\r\n} as const;\r\n\r\n//#endregion\r\n","/**\n * Administration capabilities used by this module.\n * Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).\n */\nexport const AXPAdministrationPermissionKeys = {\n Access: 'Administration:Permission:Access',\n MaintainUsersAndRoles: 'Administration:Permission:MaintainUsersAndRoles',\n ManageSessions: 'Administration:Permission:ManageSessions',\n MaintainPolicies: 'Administration:Permission:MaintainPolicies',\n ViewIntegrations: 'Administration:Permission:ViewIntegrations',\n MaintainConnections: 'Administration:Permission:MaintainConnections',\n MaintainWorkflows: 'Administration:Permission:MaintainWorkflows',\n ManageWorkflowActions: 'Administration:Permission:ManageWorkflowActions',\n ViewRules: 'Administration:Permission:ViewRules',\n MaintainRules: 'Administration:Permission:MaintainRules',\n ManageRuleActions: 'Administration:Permission:ManageRuleActions',\n MaintainAi: 'Administration:Permission:MaintainAi',\n UseAiAssist: 'Administration:Permission:UseAiAssist',\n MaintainDashboards: 'Administration:Permission:MaintainDashboards',\n ViewJobs: 'Administration:Permission:ViewJobs',\n ManageJobActions: 'Administration:Permission:ManageJobActions',\n ViewObservability: 'Administration:Permission:ViewObservability',\n MaintainObservability: 'Administration:Permission:MaintainObservability',\n} as const;\n\n/**\n * Dynamic assist access permissions (`Assist.{name}.Use`) as children of UseAiAssist.\n * Parent Assist.Use maps to {@link AXPAdministrationPermissionKeys.UseAiAssist}.\n */\nexport const AXMAiAssistPermissionKeys = {\n Use: AXPAdministrationPermissionKeys.UseAiAssist,\n useForAssist: (assistName: string): string => `AiManagement:Permission:Assist.${assistName}.Use`,\n} as const;\n\n/**\n * @deprecated Prefer {@link AXPAdministrationPermissionKeys}.\n * Legacy nested shape kept so existing imports compile during migration.\n */\nexport const AXMPermissionsKeys = {\n AiManagement: {\n Management: AXPAdministrationPermissionKeys.MaintainAi,\n Assist: AXMAiAssistPermissionKeys,\n },\n} as const;\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 },\n} as const;\n\n//#endregion\n","//#region ---- Module Config ----\r\n\r\nconst config = {\r\n i18n: 'ai-management',\r\n module: 'AiManagement',\r\n route: 'ai-management',\r\n};\r\n\r\nexport const RootConfig = {\r\n config,\r\n module: {\r\n name: config.module,\r\n route: config.route,\r\n title: `@${config.i18n}:module.title`,\r\n icon: 'fa-light fa-robot',\r\n },\r\n entities: {\r\n model: {\r\n name: 'AiModel',\r\n fullName: `${config.module}.AiModel`,\r\n title: '@ai-management:models.entities.model.title',\r\n titlePlural: '@ai-management:models.entities.model.plural',\r\n icon: 'fa-light fa-microchip',\r\n },\r\n assist: {\r\n name: 'Assist',\r\n fullName: `${config.module}.Assist`,\r\n title: '@ai-management:assists.entities.assist.title',\r\n titlePlural: '@ai-management:assists.entities.assist.plural',\r\n icon: 'fa-light fa-user-robot',\r\n },\r\n agent: {\r\n name: 'AiAgent',\r\n fullName: `${config.module}.AiAgent`,\r\n title: '@ai-management:agents.entities.agent.title',\r\n titlePlural: '@ai-management:agents.entities.agent.plural',\r\n icon: 'fa-light fa-people-group',\r\n },\r\n openAiEndpoint: {\r\n name: 'OpenAiEndpoint',\r\n fullName: `${config.module}.OpenAiEndpoint`,\r\n title: '@ai-management:open-ai-endpoints.entities.endpoint.title',\r\n titlePlural: '@ai-management:open-ai-endpoints.entities.endpoint.plural',\r\n icon: 'fa-light fa-plug',\r\n },\r\n rule: {\r\n name: 'AiRule',\r\n fullName: `${config.module}.AiRule`,\r\n title: '@ai-management:rules.entities.rule.title',\r\n titlePlural: '@ai-management:rules.entities.rule.plural',\r\n icon: 'fa-light fa-list-check',\r\n },\r\n skill: {\r\n name: 'AiSkill',\r\n fullName: `${config.module}.AiSkill`,\r\n title: '@ai-management:skills.entities.skill.title',\r\n titlePlural: '@ai-management:skills.entities.skill.plural',\r\n icon: 'fa-light fa-signs-post',\r\n },\r\n mcpServer: {\r\n name: 'McpServer',\r\n fullName: `${config.module}.McpServer`,\r\n title: '@ai-management:mcp-servers.entities.mcp-server.title',\r\n titlePlural: '@ai-management:mcp-servers.entities.mcp-server.plural',\r\n icon: 'fa-light fa-plug-circle-bolt',\r\n },\r\n },\r\n};\r\n\r\n//#endregion\r\n","import { AXPEntityModel } from '@acorex-platform/framework-shared/entity';\n\n//#region ---- MCP server types ----\n\nexport type AXMAiManagementMcpServerTransport = 'http' | 'sse';\n\n/**\n * Persisted external MCP server catalog row.\n */\nexport interface AXMAiManagementMcpServerEntityModel extends AXPEntityModel<string> {\n name: string;\n title: string;\n transport: AXMAiManagementMcpServerTransport;\n url: string;\n apiKey?: string | null;\n isDisabled?: boolean;\n /** Optional prefix applied to tool names exposed to the AI engine. */\n toolPrefix?: string | null;\n /** When set, only these upstream MCP tool names may be called. */\n allowedToolNames?: string[] | null;\n}\n\n//#endregion\n","import type { AXPContextDefinition } from '@acorex-platform/framework-shared/core';\n\n//#region ---- Platform runtime time & notes ----\n\nexport const AXM_AI_PLATFORM_RUNTIME_CONTEXT_DEFINITIONS: AXPContextDefinition[] = [\n {\n name: 'currentInstant',\n title: 'Current instant (UTC)',\n description:\n 'Current moment as ISO 8601 UTC, built when platform runtime context is assembled before an AI engine run.',\n order: 80,\n capabilities: ['ai'],\n },\n {\n name: 'currentLocalDateTime',\n title: 'Current local date and time',\n description:\n 'Current date and time formatted in the user IANA time zone for natural-language interpretation in system prompts.',\n order: 90,\n capabilities: ['ai'],\n },\n {\n name: 'notes',\n title: 'Runtime notes',\n description:\n 'Optional free-text or structured notes merged into platform runtime context for a specific AI run (caller-supplied).',\n order: 100,\n capabilities: ['ai'],\n },\n];\n\n//#endregion\n","//#region ---- Imports ----\r\n\r\nimport type { AXPMetaData, AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\r\nimport type { AXMAiManagementAgentEntityModel } from '../../entities/agent/agent.types';\r\nimport type { AXMAiManagementAssistEntityModel } from '../../entities/assist/assist.types';\r\nimport type { AXPAiAgentOutputContract } from './ai-agent-output-contract.types';\r\n\r\n//#endregion\r\n\r\n//#region ---- Core aliases ----\r\n\r\nexport type AXPAiChatTransport = 'openai' | 'gemini' | 'demis';\r\n\r\n//#endregion\r\n\r\n//#region ---- Platform runtime context ----\r\n\r\n/**\r\n * Live platform context for AI runs: keys match {@link AXPContextDefinition.name}, values are opaque.\r\n * Built by {@link AXPAiPlatformRuntimeContextBuilder}. Display facts go into the system prompt; identity ids are not included.\r\n */\r\nexport type AXPAiPlatformRuntimeContext = Record<string, unknown>;\r\n\r\n//#endregion\r\n\r\n//#region ---- Catalog / entity row shapes (effective rows) ----\r\n\r\n/**\r\n * Effective Assist entity row (chat policy, prompts, delegated routing).\r\n * Fields are partial except `id` because API payloads may omit unused slices.\r\n */\r\nexport type AXPAiEffectiveAssistRow = Partial<Omit<AXMAiManagementAssistEntityModel, 'id'>> & {\r\n id: string;\r\n};\r\n\r\n/**\r\n * Effective AiAgent catalog row for UI and engine requests.\r\n * Engine-specific fields are normalized in connectivity (mock / API).\r\n */\r\nexport type AXPAiEffectiveAgentRow = Partial<Omit<AXMAiManagementAgentEntityModel, 'id'>> & {\r\n id: string;\r\n outputContract?: AXPAiAgentOutputContract | null;\r\n};\r\n\r\n//#endregion\r\n//#region ---- Model list (picker service) ----\r\n\r\nexport interface AXPAiChatModelListRequest {\r\n assistId?: string | null;\r\n}\r\n\r\nexport interface AXPAiChatModelListItem {\r\n id: string;\r\n name: string;\r\n title: string;\r\n /** `modelPurposes` from the catalog row (provided by the API). */\r\n modelPurposes?: string[];\r\n chatTransport?: string;\r\n maxContextTokens?: number;\r\n inputPricePerMillion?: number;\r\n outputPricePerMillion?: number;\r\n cachedInputPricePerMillion?: number;\r\n}\r\n\r\n//#endregion\r\n\r\n//#region ---- Chat transcript: responses & messages ----\r\n\r\nexport interface AXPAiChatTextResponse {\r\n type: 'text';\r\n content: string;\r\n}\r\n\r\n/** Model reasoning / planning segment; paired with {@link AXPAiChatTextResponse} in assistant messages. */\r\nexport interface AXPAiChatThinkResponse {\r\n type: 'think';\r\n content: string;\r\n}\r\n\r\n/**\r\n * Stored binary in tenant file storage (user attachment or assistant/tool output replay).\r\n * MIME type and display name are resolved from {@link fileId} via file storage — not carried on the segment.\r\n */\r\nexport interface AXPAiChatFileResponse {\r\n type: 'file';\r\n content: {\r\n fileId: string;\r\n /** When true, UI offers download; default false (inline preview / playback). Set by the model when the user asks for a downloadable file. */\r\n isDownloadable?: boolean;\r\n };\r\n}\r\n\r\nexport interface AXPAiChatNodeResponse {\r\n type: 'node';\r\n content: unknown;\r\n}\r\n\r\nexport interface AXPAiChatFollowUpCommand {\r\n name: string;\r\n options?: unknown;\r\n}\r\n\r\nexport interface AXPAiChatFollowUpItem {\r\n text: string | AXPMultiLanguageString;\r\n command: AXPAiChatFollowUpCommand;\r\n}\r\n\r\nexport interface AXPAiChatFollowUpResponse {\r\n type: 'followUp';\r\n content: AXPAiChatFollowUpItem[];\r\n}\r\n\r\nexport interface AXPAiChatToolInvocationContent {\r\n command: string;\r\n arguments: unknown;\r\n}\r\n\r\nexport interface AXPAiChatToolAssistantResponse {\r\n type: 'tool';\r\n content: AXPAiChatToolInvocationContent;\r\n callId?: string;\r\n /** Provider-specific replay data (e.g. Gemini `thought_signature` under a provider-owned metadata key). */\r\n metadata?: AXPMetaData;\r\n}\r\n\r\nexport interface AXPAiChatAgentAssistantResponse {\r\n type: 'agent';\r\n content: AXPAiChatToolInvocationContent;\r\n callId?: string;\r\n metadata?: AXPMetaData;\r\n}\r\n\r\nexport interface AXPAiChatToolResultResponse {\r\n type: 'tool_result';\r\n callId: string;\r\n content: unknown;\r\n}\r\n\r\n/** Segments a delegated specialist returns to the supervisor (replayable in UI). */\r\nexport type AXPAiDelegatedAgentResultSegment =\r\n | AXPAiChatTextResponse\r\n | AXPAiChatThinkResponse\r\n | AXPAiChatFileResponse\r\n | AXPAiChatNodeResponse\r\n | AXPAiChatFollowUpResponse;\r\n\r\n/** Tool-role `agent_result` body from the engine (normalized by connectivity). */\r\nexport interface AXPAiDelegatedAgentResultPayload {\r\n success: boolean;\r\n error?: string;\r\n data?: {\r\n agentName?: string;\r\n agentId?: string;\r\n responses: AXPAiDelegatedAgentResultSegment[];\r\n };\r\n}\r\n\r\nexport interface AXPAiChatAgentResultResponse {\r\n type: 'agent_result';\r\n callId: string;\r\n name?: string;\r\n content: AXPAiDelegatedAgentResultPayload;\r\n}\r\n\r\nexport type AXPAiChatResponse =\r\n | AXPAiChatTextResponse\r\n | AXPAiChatThinkResponse\r\n | AXPAiChatFileResponse\r\n | AXPAiChatNodeResponse\r\n | AXPAiChatFollowUpResponse\r\n | AXPAiChatToolAssistantResponse\r\n | AXPAiChatAgentAssistantResponse\r\n | AXPAiChatToolResultResponse\r\n | AXPAiChatAgentResultResponse;\r\n\r\n/**\r\n * One chat line in the persisted transcript (`user` / `assistant` / `system` / `tool`).\r\n */\r\nexport interface AXPAiChatMessage {\r\n role: 'system' | 'user' | 'assistant' | 'tool';\r\n responses: AXPAiChatResponse[];\r\n name?: string;\r\n /** Ephemeral delegated sub-run reflection (excluded from user-facing replay). */\r\n delegatedReflection?: boolean;\r\n}\r\n\r\n//#endregion\r\n\r\n//#region ---- Tool calls (streaming / run events) ----\r\n\r\nexport interface AXPAiToolCall {\r\n id: string;\r\n name: string;\r\n arguments: unknown;\r\n metadata?: AXPMetaData;\r\n}\r\n\r\n//#endregion\r\n\r\n//#region ---- Engine run contract (UI ↔ connectivity) ----\r\n\r\nexport interface AXPAiEngineUsageTotals {\r\n promptTokens: number;\r\n completionTokens: number;\r\n totalTokens: number;\r\n cachedPromptTokens?: number;\r\n}\r\n\r\nexport interface AXPAiEngineLastProviderPayload {\r\n messages: AXPAiChatMessage[];\r\n toolCalls?: AXPAiToolCall[];\r\n /** Platform-neutral usage from the Vercel adapter. Engine must not parse vendor `rawResponse`. */\r\n usage?: AXPAiEngineUsageTotals;\r\n rawResponse?: unknown;\r\n}\r\n\r\n/** Serializable {@link AXPAiEngineRunOptions} passed to a delegated specialist sub-run (debug export). */\r\nexport interface AXPAiDelegatedAgentTranscriptRunInput {\r\n delegationCallId: string;\r\n agentId: string;\r\n agentName?: string;\r\n specialistArguments: unknown;\r\n run: Omit<AXPAiEngineRunOptions, 'onRunEvent'>;\r\n}\r\n\r\nexport interface AXPAiDelegatedAgentTranscriptEntry {\r\n agentName?: string;\r\n messages: AXPAiChatMessage[];\r\n runInput?: AXPAiDelegatedAgentTranscriptRunInput;\r\n /** Provider API model id used for this specialist sub-run (e.g. `gpt-5`). */\r\n modelLabel?: string;\r\n}\r\n\r\nexport interface AXPAiDelegatedNestedToolCallContext {\r\n delegationCallId: string;\r\n agentId: string;\r\n agentName?: string;\r\n}\r\n\r\nexport type AXPAiEngineRunEvent =\r\n | { type: 'assistant_stream_reset' }\r\n | {\r\n type: 'assistant_stream_delta';\r\n delta: string;\r\n segment?: 'text' | 'think';\r\n }\r\n | { type: 'tool_call_start'; call: AXPAiToolCall }\r\n | {\r\n type: 'tool_call_end';\r\n call: AXPAiToolCall;\r\n resultMessage: AXPAiChatMessage;\r\n /** Present when the tool was a delegated specialist — available immediately after the sub-run finishes. */\r\n delegatedTranscript?: AXPAiDelegatedAgentTranscriptEntry;\r\n }\r\n | {\r\n type: 'delegated_agent_nested_tool_call_start';\r\n ctx: AXPAiDelegatedNestedToolCallContext;\r\n call: AXPAiToolCall;\r\n }\r\n | {\r\n type: 'delegated_agent_nested_tool_call_end';\r\n ctx: AXPAiDelegatedNestedToolCallContext;\r\n call: AXPAiToolCall;\r\n resultMessage: AXPAiChatMessage;\r\n }\r\n | {\r\n type: 'delegated_agent_nested_stream_reset';\r\n ctx: AXPAiDelegatedNestedToolCallContext;\r\n }\r\n | {\r\n type: 'delegated_agent_nested_stream_delta';\r\n ctx: AXPAiDelegatedNestedToolCallContext;\r\n delta: string;\r\n }\r\n | { type: 'delegated_agent_reflection_phase'; active: boolean };\r\n\r\nexport interface AXPAiEngineRunOptions {\r\n messages: AXPAiChatMessage[];\r\n /** Catalog Assist id. When omitted, the platform/default Assist is used. */\r\n assistId?: string;\r\n demisSessionUuid?: string;\r\n modelEntityId?: string;\r\n modelId?: string;\r\n maxSteps?: number;\r\n maxTokens?: number;\r\n temperature?: number;\r\n planningMode?: 'off' | 'once' | 'when-needed';\r\n includeRules?: string[];\r\n excludeRules?: string[];\r\n /** Adds delegated specialists for this run only (AiAgent catalog `id` or programmatic `name`). */\r\n includeAgents?: string[];\r\n /** Removes delegated specialists for this run (matches catalog `id` or `name`, case-insensitive). */\r\n excludeAgents?: string[];\r\n platformRuntimeContext?: AXPAiPlatformRuntimeContext | null;\r\n outputContract?: AXPAiAgentOutputContract;\r\n onRunEvent?: (event: AXPAiEngineRunEvent) => void;\r\n /** When aborted, provider streams and multi-step loops should stop promptly. */\r\n abortSignal?: AbortSignal;\r\n}\r\n\r\nexport interface AXPAiEngineRunResult {\r\n messages: AXPAiChatMessage[];\r\n lastProviderResult?: AXPAiEngineLastProviderPayload;\r\n usageTotals?: AXPAiEngineUsageTotals;\r\n delegatedTranscriptsByCallId?: Record<string, AXPAiDelegatedAgentTranscriptEntry>;\r\n}\r\n\r\n//#endregion\r\n","//#region ----- Imports -----\n\nimport { axpContextDefinitionIsAiPrompt, type AXPContextDefinition } from '@acorex-platform/framework-shared/core';\nimport type { AXPAiPlatformRuntimeContext } from './ai-engine.types';\nimport type { AXPAiChatOptions } from '../provider.types';\n\n//#endregion\n\n//#region ----- Prompt vs SDK runtime split -----\n\nexport interface AXPAiSdkChatContextBundle {\n runtimeContext?: Record<string, string>;\n toolsContext?: Record<string, string>;\n promptAddendum: string;\n}\n\nexport const AXP_AI_SDK_TOOL_CONTEXT_JSON_SCHEMA: Record<string, unknown> = {\n type: 'object',\n properties: {\n runId: { type: 'string' },\n assistId: { type: 'string' },\n agentId: { type: 'string' },\n chatTransport: { type: 'string' },\n modelEntityId: { type: 'string' },\n },\n additionalProperties: false,\n};\n\nfunction stringifyRuntimeValue(value: unknown): string | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value === 'string') {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n try {\n const json = JSON.stringify(value);\n return json && json !== '{}' && json !== '[]' ? json : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction compactStringRecord(input: Record<string, string | undefined>): Record<string, string> | undefined {\n const out: Record<string, string> = {};\n for (const [key, value] of Object.entries(input)) {\n const trimmed = value?.trim();\n if (trimmed) {\n out[key] = trimmed;\n }\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\n/**\n * Turns registered AI-capable context definitions + live values into the\n * `## Platform runtime` system-prompt block. Identity ids are never assembled into values.\n */\nexport function formatAxpAiPlatformRuntimePrompt(\n platformRuntimeContext: AXPAiPlatformRuntimeContext | null | undefined,\n definitions: readonly AXPContextDefinition[] | null | undefined,\n): string {\n if (!platformRuntimeContext || !definitions?.length) {\n return '';\n }\n const lines = definitions\n .filter(axpContextDefinitionIsAiPrompt)\n .slice()\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\n .map((field) => {\n const value = stringifyRuntimeValue(platformRuntimeContext[field.name]);\n return value ? `- ${field.title}: ${value}` : null;\n })\n .filter((line): line is string => line != null);\n if (lines.length === 0) {\n return '';\n }\n return ['## Platform runtime', ...lines].join('\\n');\n}\n\nexport function buildAxpAiSdkChatContextBundle(input: {\n platformRuntimeContext?: AXPAiPlatformRuntimeContext | null;\n contextDefinitions?: readonly AXPContextDefinition[] | null;\n runId?: string;\n assistId?: string;\n agentId?: string;\n agentName?: string;\n chatTransport?: string;\n modelEntityId?: string;\n demisSessionUuid?: string;\n}): AXPAiSdkChatContextBundle {\n const runtimeContext = compactStringRecord({\n runId: input.runId,\n assistId: input.assistId,\n agentId: input.agentId,\n agentName: input.agentName,\n chatTransport: input.chatTransport,\n modelEntityId: input.modelEntityId,\n demisSessionUuid: input.demisSessionUuid,\n });\n const toolsContext = compactStringRecord({\n runId: input.runId,\n assistId: input.assistId,\n agentId: input.agentId,\n chatTransport: input.chatTransport,\n modelEntityId: input.modelEntityId,\n });\n return {\n ...(runtimeContext ? { runtimeContext } : {}),\n ...(toolsContext ? { toolsContext } : {}),\n promptAddendum: formatAxpAiPlatformRuntimePrompt(\n input.platformRuntimeContext,\n input.contextDefinitions,\n ),\n };\n}\n\nexport function attachAxpAiSdkChatContext<T extends AXPAiChatOptions>(\n options: T,\n bundle: AXPAiSdkChatContextBundle,\n): T {\n const hasTools = Boolean(options.tools && options.tools.length > 0);\n return {\n ...options,\n ...(bundle.runtimeContext ? { runtimeContext: bundle.runtimeContext } : {}),\n ...(hasTools && bundle.toolsContext ? { toolsContext: bundle.toolsContext } : {}),\n };\n}\n\nexport interface AXPAiPlatformRuntimeContextSources {\n userDisplayName?: string;\n tenantTitle?: string;\n applicationTitle?: string;\n locale?: string;\n calendarSystem?: string;\n timeZone?: string;\n country?: string;\n notes?: string;\n now?: Date;\n}\n\nexport function formatAxpAiPlatformRuntimeLocalDateTime(now: Date, ianaTimeZone?: string): 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\nexport function assembleAxpAiPlatformRuntimeContext(\n sources: AXPAiPlatformRuntimeContextSources,\n): AXPAiPlatformRuntimeContext {\n const now = sources.now ?? new Date();\n const ctx: AXPAiPlatformRuntimeContext = {};\n const set = (key: string, value: unknown): void => {\n if (value == null) {\n return;\n }\n const asString = typeof value === 'string' ? value.trim() : String(value).trim();\n if (asString.length > 0) {\n ctx[key] = typeof value === 'string' ? asString : value;\n }\n };\n set('userDisplayName', sources.userDisplayName);\n set('tenantTitle', sources.tenantTitle);\n set('applicationTitle', sources.applicationTitle);\n set('locale', sources.locale);\n set('calendarSystem', sources.calendarSystem);\n set('timeZone', sources.timeZone);\n set('country', sources.country);\n set('notes', sources.notes);\n set('currentInstant', now.toISOString());\n set('currentLocalDateTime', formatAxpAiPlatformRuntimeLocalDateTime(now, sources.timeZone));\n return ctx;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPAgentOutputKind, AXPOutputTranscriptSegmentId } from '@acorex-platform/framework-shared/core';\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/**\n * Minimal JSON-Schema-like object for native provider hints and local validation.\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/** 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/**\n * Catalog row contract for specialist final output (separate from domain `systemPrompt`).\n * Field paths align with agent/assist entity `outputContract` JSON.\n */\nexport interface AXPAiAgentOutputContract {\n kind: AXPAiAgentOutputKind;\n /**\n * When `kind` is `object`: `text` = generic JSON object as text; `node` = inner widget node in chat;\n * `followUp` = `{\"type\":\"followUp\",\"content\":[...]}` envelope.\n */\n transcriptSegment?: AXPAiOutputTranscriptSegment;\n instruction?: string;\n schemaSummary?: string;\n schema?: AXPAiJsonSchemaLike;\n schemaName?: string;\n schemaStrict?: boolean;\n validationCommandName?: string;\n structuredRetries?: number;\n providerResponseFormat?: AXPAiResponseFormat;\n}\n\n/** Default structured retry count when `structuredRetries` is omitted on structured kinds. */\nexport const AXPAI_AGENT_OUTPUT_CONTRACT_DEFAULT_STRUCTURED_RETRIES = 2;\n\n//#endregion\n\n//#region ---- Schema / response format parsers ----\n\nfunction isJsonSchemaLike(value: unknown): value is AXPAiJsonSchemaLike {\n return value != null && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport function parseJsonSchemaLike(raw: unknown): AXPAiJsonSchemaLike | undefined {\n if (!isJsonSchemaLike(raw)) {\n return undefined;\n }\n return raw;\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//#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' || value === 'file';\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 './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 | unknown | null;\n /** Assist `run` / `show` input. */\n input?: AXPAiAgentOutputContract | unknown | null;\n /** Active AiAgent catalog row. */\n agent?: AXPAiAgentOutputContract | unknown | null;\n /** Active Assist catalog row. */\n assist?: AXPAiAgentOutputContract | unknown | null;\n}\n\nfunction isSegmentPresetId(value: string): value is 'text' | 'node' | 'followUp' | 'file' {\n return value === 'text' || value === 'node' || value === 'followUp' || value === 'file';\n}\n\nfunction contractFromSegmentPresetId(id: string): AXPAiAgentOutputContract | null {\n if (id === 'text' || id === 'file') {\n return { kind: 'string' };\n }\n if (id === 'node') {\n return { kind: 'object', transcriptSegment: 'node' };\n }\n if (id === 'followUp') {\n return { kind: 'object', transcriptSegment: 'followUp' };\n }\n return null;\n}\n\nfunction contractFromUnknown(raw: unknown): AXPAiAgentOutputContract | null {\n if (raw == null) {\n return null;\n }\n if (typeof raw === 'string') {\n const id = raw.trim();\n if (!id.length) {\n return null;\n }\n const preset = isSegmentPresetId(id) ? contractFromSegmentPresetId(id) : null;\n if (preset) {\n return preset;\n }\n return parseAgentOutputContract(raw);\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 { AXPAiAgentOutputContract, AXPAiJsonSchemaLike } from './ai-agent-output-contract.types';\nimport { resolveOutputTranscriptSegment } from './ai-agent-output-contract.types';\n\n//#endregion\n\n//#region ---- AXPWidgetNode (provider JSON Schema hint) ----\n\n/**\n * JSON Schema hint for {@link AXPWidgetNode} roots returned by layout specialists.\n * Intentionally permissive (`additionalProperties`) — strict validation runs via\n * `AiFormbuilder:ValidateLayoutJsonForAi` when configured on the agent contract.\n */\nexport const AXP_WIDGET_NODE_JSON_SCHEMA: AXPAiJsonSchemaLike = {\n type: 'object',\n required: ['type'],\n additionalProperties: true,\n properties: {\n type: {\n type: 'string',\n description: 'AXPWidgetNode.type — widget registry name (e.g. block-layout, table-layout).',\n },\n mode: {\n type: 'string',\n enum: ['view', 'edit', 'designer', 'print', 'column', 'filter'],\n description: 'AXPWidgetNode.mode render surface.',\n },\n path: { type: 'string' },\n name: { type: 'string' },\n visible: { description: 'boolean or AXPExpression object.' },\n defaultValue: { description: 'Widget default value.' },\n children: {\n type: 'array',\n description: 'Nested AXPWidgetNode[]',\n items: {\n type: 'object',\n required: ['type'],\n additionalProperties: true,\n properties: {\n type: { type: 'string' },\n mode: { type: 'string' },\n children: { type: 'array', items: { type: 'object', additionalProperties: true } },\n options: { type: 'object', additionalProperties: true },\n },\n },\n },\n options: { type: 'object', additionalProperties: true },\n triggers: { type: 'object', additionalProperties: true },\n meta: { type: 'object', additionalProperties: true },\n valueTransforms: { type: 'object', additionalProperties: true },\n },\n};\n\n//#endregion\n\n//#region ---- followUp envelope ----\n\n/** JSON Schema for the followUp transcript envelope (`type` + `content` chips). */\nexport const AXP_FOLLOW_UP_ENVELOPE_JSON_SCHEMA: AXPAiJsonSchemaLike = {\n type: 'object',\n required: ['type', 'content'],\n additionalProperties: false,\n properties: {\n type: { type: 'string', enum: ['followUp'] },\n content: {\n type: 'array',\n minItems: 2,\n maxItems: 5,\n description:\n 'Suggestion chips: each item is either a plain string label or { text, command: { name, options? } }.',\n items: {\n oneOf: [\n { type: 'string', minLength: 1 },\n {\n type: 'object',\n required: ['text', 'command'],\n additionalProperties: false,\n properties: {\n text: { type: 'string' },\n command: {\n type: 'object',\n required: ['name'],\n additionalProperties: true,\n properties: {\n name: { type: 'string' },\n options: { type: 'object', additionalProperties: true },\n },\n },\n },\n },\n ],\n },\n },\n },\n};\n\n//#endregion\n\n//#region ---- Resolve builtin schema ----\n\n/** Built-in JSON Schema for known transcript segments when the contract omits `schema`. */\nexport function resolveBuiltinSchemaForOutputContract(\n contract: AXPAiAgentOutputContract,\n): AXPAiJsonSchemaLike | undefined {\n if (contract.kind !== 'object') {\n return undefined;\n }\n const segment = resolveOutputTranscriptSegment(contract);\n if (segment === 'node') {\n return AXP_WIDGET_NODE_JSON_SCHEMA;\n }\n if (segment === 'followUp') {\n return AXP_FOLLOW_UP_ENVELOPE_JSON_SCHEMA;\n }\n return undefined;\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';\nimport type { AXPAiJsonSchemaLike, AXPAiResponseFormat } from './ai-agent-output-contract.types';\nimport { parseResponseFormat } from './ai-agent-output-contract.types';\nimport { resolveBuiltinSchemaForOutputContract } from './ai-structured-output-schemas.util';\n\n//#endregion\n\n//#region ---- Structured output kinds ----\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\nfunction isJsonSchemaLike(value: unknown): value is AXPAiJsonSchemaLike {\n return value != null && typeof value === 'object' && !Array.isArray(value);\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\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 const schema =\n (contract.schema && isJsonSchemaLike(contract.schema) ? contract.schema : undefined) ??\n resolveBuiltinSchemaForOutputContract(contract);\n\n if (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,\n name,\n strict: contract.schemaStrict === true,\n };\n }\n\n return { type: 'json_object' };\n}\n\nexport { parseResponseFormat };\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPAiResponseFormat } from './ai-agent-output-contract.types';\n\n//#endregion\n\n//#region ---- Provider structured-output gate ----\n\nexport type AXPAiChatStructuredOutputGate = {\n responseFormat?: AXPAiResponseFormat;\n hasTools?: boolean;\n toolChoice?: 'auto' | 'none' | { type: 'tool'; name: string };\n};\n\n/**\n * Native structured output (AI SDK `output` / provider schema) must not run on tool-calling\n * turns — only when tools are absent or explicitly disabled (`toolChoice: 'none'`).\n */\nexport function axpAiShouldApplyChatStructuredOutput(params: AXPAiChatStructuredOutputGate): boolean {\n const format = params.responseFormat;\n if (!format || format.type === 'text') {\n return false;\n }\n if (!params.hasTools) {\n return true;\n }\n return params.toolChoice === 'none';\n}\n\n//#endregion\n\n//#region ---- Duplicate JSON in text ----\n\nfunction stripJsonFences(raw: string): string {\n const fence = raw.match(/```(?:json)?\\s*([\\s\\S]*?)```/i);\n return fence ? fence[1].trim() : raw.trim();\n}\n\nexport function axpAiTryParseJsonValueFromAssistantText(text: string): unknown | undefined {\n const trimmed = stripJsonFences(text.trim());\n if (!trimmed) {\n return undefined;\n }\n if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) {\n return undefined;\n }\n try {\n return JSON.parse(trimmed) as unknown;\n } catch {\n return undefined;\n }\n}\n\nfunction isFollowUpEnvelope(value: unknown): boolean {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n const o = value as Record<string, unknown>;\n return o['type'] === 'followUp' && Array.isArray(o['content']);\n}\n\nfunction isLikelyWidgetRoot(value: unknown): boolean {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n const t = (value as Record<string, unknown>)['type'];\n return typeof t === 'string' && t.trim().length > 0 && t !== 'node' && t !== 'followUp';\n}\n\nfunction isNodeEnvelope(value: unknown): boolean {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n const o = value as Record<string, unknown>;\n return o['type'] === 'node' && o['content'] != null;\n}\n\n/** True when assistant `text` duplicates a structured segment already attached as `node` / `followUp`. */\nexport function axpAiTextDuplicatesStructuredSegment(text: string, segment: 'node' | 'followUp'): boolean {\n const parsed = axpAiTryParseJsonValueFromAssistantText(text);\n if (parsed === undefined) {\n return false;\n }\n if (segment === 'followUp') {\n return isFollowUpEnvelope(parsed);\n }\n return isLikelyWidgetRoot(parsed) || isNodeEnvelope(parsed);\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPAiChatMessage } from './ai-engine.types';\n\n//#endregion\n\n//#region ---- Supervisor delegated-agent helpers ----\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 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 ---- Message builders ----\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 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\n//#endregion\n\n//#region ---- Transcript read helpers ----\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//#endregion\n\n//#region ---- Tool result normalization ----\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, kind: 'object', data: handlerResult };\n }\n }\n if (typeof handlerResult === 'object' && !Array.isArray(handlerResult)) {\n return handlerResult;\n }\n return { success: true, kind: 'object', data: handlerResult };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n AXPAiEngineRunEvent,\n AXPAiEngineRunOptions,\n AXPAiEngineRunResult,\n AXPAiToolCall,\n} from '../engine/ai-engine.types';\n\n//#endregion\n\n//#region ---- Wire events (client ↔ server) ----\n\nexport type AXPAiEngineWireEvent =\n | AXPAiEngineRunEvent\n | { type: 'run_started'; runId: string }\n | { type: 'frontend_tool_call'; runId: string; call: AXPAiToolCall }\n | { type: 'run_completed'; result: AXPAiEngineRunResult }\n | { type: 'run_failed'; error: string };\n\nexport type AXPAiEngineRunRequest = Omit<AXPAiEngineRunOptions, 'onRunEvent'>;\n\n//#endregion\n","//#region ----- Types -----\n\nexport type AXPAiExtractDocumentKind = 'image' | 'pdf' | 'text' | 'unsupported';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst IMAGE_MIME_TYPES = new Set([\n 'image/jpeg',\n 'image/png',\n 'image/webp',\n 'image/gif',\n 'image/bmp',\n 'image/tiff',\n]);\n\nconst IMAGE_EXTENSION_PATTERN = /\\.(png|jpe?g|gif|webp|bmp|tif|tiff)$/i;\n\nconst TEXT_MIME_TYPES = new Set([\n 'text/plain',\n 'text/markdown',\n 'text/csv',\n 'application/json',\n]);\n\nconst TEXT_EXTENSION_PATTERN = /\\.(txt|md|csv|json)$/i;\n\nconst PDF_MIME = 'application/pdf';\nconst PDF_EXTENSION_PATTERN = /\\.pdf$/i;\n\n//#endregion\n\n//#region ----- Helpers -----\n\nfunction normalizeMime(mimeType: string | undefined | null): string {\n return typeof mimeType === 'string' ? mimeType.trim().toLowerCase() : '';\n}\n\nfunction isTextMime(mime: string): boolean {\n if (TEXT_MIME_TYPES.has(mime)) {\n return true;\n }\n return mime.startsWith('text/');\n}\n\nfunction classifyByFilename(filename: string | undefined | null): AXPAiExtractDocumentKind {\n const name = typeof filename === 'string' ? filename.trim() : '';\n if (!name) {\n return 'unsupported';\n }\n if (IMAGE_EXTENSION_PATTERN.test(name)) {\n return 'image';\n }\n if (PDF_EXTENSION_PATTERN.test(name)) {\n return 'pdf';\n }\n if (TEXT_EXTENSION_PATTERN.test(name)) {\n return 'text';\n }\n return 'unsupported';\n}\n\n//#endregion\n\n//#region ----- Classification -----\n\n/**\n * Classifies a document for AI text extraction (image OCR, PDF file part, or UTF-8 text).\n * Does not include Office formats.\n */\nexport function classifyAiExtractDocument(\n mimeType: string | undefined | null,\n filename?: string | null,\n): AXPAiExtractDocumentKind {\n const mime = normalizeMime(mimeType);\n if (mime && mime !== 'application/octet-stream') {\n if (mime.startsWith('image/') || IMAGE_MIME_TYPES.has(mime)) {\n return 'image';\n }\n if (mime === PDF_MIME) {\n return 'pdf';\n }\n if (isTextMime(mime)) {\n return 'text';\n }\n }\n return classifyByFilename(filename);\n}\n\nexport function canAiExtractDocument(\n mimeType: string | undefined | null,\n filename?: string | null,\n): boolean {\n return classifyAiExtractDocument(mimeType, filename) !== 'unsupported';\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n AXPAiChatMessage,\n AXPAiChatTransport,\n AXPAiEngineLastProviderPayload,\n} from './engine/ai-engine.types';\nimport type { AXPAiResponseFormat } from './engine/ai-agent-output-contract.types';\n\n//#endregion\n\n//#region ---- Provider request/response ----\n\nexport type AXPAiChatResult = AXPAiEngineLastProviderPayload;\n\nexport type AXPAiChatToolChoice =\n | 'auto'\n | 'none'\n | {\n type: 'tool';\n name: string;\n };\n\nexport interface AXPAiToolSchema {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n}\n\nexport interface AXPAiChatOptionsDemis {\n /** Demisco bearer token; when omitted the server loads tenant settings. */\n bearerToken?: string;\n /** Demisco `agent_uuid` (`/core/agent/chat/` body field). */\n agentUuid?: string;\n /** Demisco `session_uuid` for server-side conversation history. */\n sessionUuid?: string;\n /** Demisco transcribe `language` form field (e.g. `FA`, `EN`). */\n transcribeLanguage?: string;\n /** Catalog model id for inline audio transcription before chat. */\n speechModelEntityId?: string;\n}\n\nexport interface AXPAiChatOptions {\n messages: AXPAiChatMessage[];\n /** Catalog model entity id — preferred; adapter resolves credentials server-side. */\n modelEntityId?: string;\n /** API model id override; when omitted, resolved from `modelEntityId`. */\n modelId?: string | { value?: string };\n /** Catalog transport metadata for runtime context only — not for credential loading. */\n chatTransport?: AXPAiChatTransport;\n /** @deprecated Adapter resolves credentials from `modelEntityId`; do not pass from Engine. */\n openAi?: {\n apiBase: string;\n apiKey: string;\n stream?: boolean;\n };\n /** @deprecated Adapter resolves credentials from `modelEntityId`; do not pass from Engine. */\n geminiApiKey?: string;\n /** @deprecated Demis runtime is disabled; kept for contract compatibility. */\n demis?: AXPAiChatOptionsDemis;\n tools?: AXPAiToolSchema[];\n toolChoice?: AXPAiChatToolChoice;\n maxTokens?: number;\n temperature?: number;\n stream?: boolean;\n responseFormat?: AXPAiResponseFormat;\n onStreamDelta?: (delta: string) => void;\n /** Cancels in-flight generateText / streamText when aborted. */\n abortSignal?: AbortSignal;\n /**\n * AI SDK `runtimeContext` — run metadata that must not be added to the model prompt\n * (ids, transport, catalog keys). Not used to execute tools.\n */\n runtimeContext?: Record<string, string>;\n /**\n * Unused for execution. SDK tools have no `execute`; ToolCoordinator runs tools.\n * Kept only so the adapter can forward a payload if present — do not add `tool.execute`.\n */\n toolsContext?: Record<string, string>;\n}\n\nexport interface AXPAiExtractDocumentTextOptions {\n /** Catalog model entity id — preferred; adapter resolves credentials server-side. */\n modelEntityId?: string;\n modelId?: string | { value?: string };\n chatTransport?: AXPAiChatTransport;\n /** @deprecated Adapter resolves from `modelEntityId`. */\n openAi?: {\n apiBase: string;\n apiKey: string;\n };\n /** @deprecated Adapter resolves from `modelEntityId`. */\n geminiApiKey?: string;\n /** Agent catalog prompt. Omitted or empty: no system message is sent. */\n systemPrompt?: string;\n userInstruction: string;\n mimeType: string;\n /** Raw document bytes from file storage. */\n bytes: Uint8Array;\n filename?: string;\n}\n\nexport interface AXPAiGenerateImageOptions {\n modelEntityId?: string;\n chatTransport?: AXPAiChatTransport;\n catalogApiModelName?: string;\n prompt: string;\n size?: string;\n openAi?: {\n apiBase: string;\n apiKey: string;\n };\n geminiApiKey?: string;\n}\n\nexport interface AXPAiGenerateVideoOptions {\n modelEntityId?: string;\n chatTransport?: AXPAiChatTransport;\n catalogApiModelName?: string;\n prompt: string;\n aspectRatio?: string;\n duration?: number;\n openAi?: {\n apiBase: string;\n apiKey: string;\n };\n geminiApiKey?: string;\n}\n\nexport interface AXPAiTranscribeSpeechOptions {\n modelEntityId?: string;\n chatTransport?: AXPAiChatTransport;\n catalogApiModelName?: string;\n audioBytes: ArrayBuffer;\n mimeType: string;\n fileName?: string;\n language?: string;\n openAi?: {\n apiBase: string;\n apiKey: string;\n };\n geminiApiKey?: string;\n}\n\nexport interface AXPAiSynthesizeSpeechOptions {\n modelEntityId?: string;\n chatTransport?: AXPAiChatTransport;\n catalogApiModelName?: string;\n text: string;\n voice?: string;\n responseFormat?: string;\n openAi?: {\n apiBase: string;\n apiKey: string;\n };\n geminiApiKey?: string;\n}\n\n//#endregion\n","//#region ---- AI chat registry command keys ----\n\nexport const AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY = 'AiManagement:ChatGenerateImage';\nexport const AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY = 'AiManagement:ChatTranscribeSpeech';\nexport const AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY = 'AiManagement:ChatSynthesizeSpeech';\nexport const AIMANAGEMENT_EXTRACT_DOCUMENT_TEXT_COMMAND_KEY = 'AiManagement:ExtractDocumentText';\nexport const AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY =\n 'AiManagement:StructuredTextCompletion';\n\n//#endregion\n","//#region ---- AI engine runtime transport keys ----\n\nexport const AXMAiManagementTransportKeys = {\n Engine: {\n Run: 'AiManagement:Engine:Run',\n SubmitToolResult: 'AiManagement:Engine:SubmitToolResult',\n },\n ConversationAssist: {\n Subscribe: 'ConversationManagement:Assist:Subscribe',\n AssistSync: 'ConversationManagement:Assist:AssistSync',\n RetryAssist: 'ConversationManagement:Assist:RetryAssist',\n CancelAssist: 'ConversationManagement:Assist:CancelAssist',\n },\n} as const;\n\n//#endregion\n","//#region ---- Model catalog helpers ----\n\nexport type AXMAiModelPurposeSlug = 'chat' | 'vision' | 'image' | 'speech' | 'tts' | 'video';\n\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\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\n//#endregion\n\n//#region ---- Transport parsing ----\n\nimport type { AXPAiChatTransport } from './engine/ai-engine.types';\n\nexport function parseChatTransport(raw: unknown): AXPAiChatTransport | undefined {\n let v = '';\n if (typeof raw === 'string') {\n v = raw.trim().toLowerCase();\n } else if (raw != null && typeof raw === 'object' && 'value' in raw) {\n const inner = (raw as { value?: unknown }).value;\n v = inner == null ? '' : String(inner).trim().toLowerCase();\n }\n if (v === 'gemini' || v === 'openai' || v === 'demis') {\n return v;\n }\n return undefined;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { resolveMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport type { AXPAiChatMessage, AXPAiChatResponse, AXPAiToolCall } from './engine/ai-engine.types';\nimport { axpAiParseSupervisorAgentToolName } from './engine/ai-engine.normalize';\n\n//#endregion\n\n//#region ---- Transcript helpers ----\n\nexport function axpAiChatMessagesFromProviderAssistant(\n text: string,\n toolCalls?: AXPAiToolCall[],\n): AXPAiChatMessage[] {\n const normalized = (text ?? '')\n .replace(/<(\\/?redacted_thinking)>/gi, '<$1>')\n .replace(/<(\\/?think)>/gi, '<$1>');\n\n const responses: AXPAiChatResponse[] = [];\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 const plain = normalized.slice(last, m.index).trim();\n if (plain.length > 0) {\n responses.push({ type: 'text', content: plain });\n }\n const think = (m[2] ?? '').trim();\n if (think.length > 0) {\n responses.push({ type: 'think', content: think });\n }\n last = m.index + m[0].length;\n }\n const tail = normalized.slice(last).trim();\n if (tail.length > 0) {\n responses.push({ type: 'text', content: tail });\n }\n\n const out: AXPAiChatMessage[] = [];\n if (responses.length > 0) {\n out.push({ role: 'assistant', responses });\n }\n\n for (const tc of toolCalls ?? []) {\n const isDelegatedAgent = axpAiParseSupervisorAgentToolName(tc.name) != null;\n out.push({\n role: 'assistant',\n responses: [\n isDelegatedAgent\n ? {\n type: 'agent',\n content: { command: tc.name, arguments: tc.arguments },\n callId: tc.id,\n ...(tc.metadata ? { metadata: { ...tc.metadata } } : {}),\n }\n : {\n type: 'tool',\n content: { command: tc.name, arguments: tc.arguments },\n callId: tc.id,\n ...(tc.metadata ? { metadata: { ...tc.metadata } } : {}),\n },\n ],\n });\n }\n\n return out;\n}\n\nexport function axcResolveAiMlOrPlainString(value: unknown, locale = 'en-US'): string {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value.trim();\n }\n return resolveMultiLanguageString(value as AXPMultiLanguageString, locale).trim();\n}\n\n//#endregion\n","//#region ---- Contracts barrel ----\n\nexport * from './features.keys';\nexport * from './menu.keys';\nexport * from './permission.keys';\nexport * from './settings.keys';\n\nexport * from './root-config';\n\n//#endregion\n\nexport * from './entities';\n\nexport * from './lib/engine/ai-platform-runtime-context.definitions';\nexport * from './lib/engine/ai-engine.types';\nexport * from './lib/engine/ai-platform-runtime-context.util';\nexport * from './lib/engine/ai-agent-output-contract.types';\nexport * from './lib/engine/ai-effective-output-contract';\nexport * from './lib/engine/ai-response-format.util';\nexport * from './lib/engine/ai-structured-output-schemas.util';\nexport * from './lib/engine/ai-chat-structured-output.util';\nexport * from './lib/engine/ai-engine.normalize';\nexport * from './lib/wire/ai-engine-wire.events';\nexport * from './lib/ai-document-extract.util';\nexport * from './lib/provider.types';\nexport * from './lib/command-keys';\nexport * from './lib/transport.keys';\nexport * from './lib/model-catalog.util';\nexport * from './lib/chat.util';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["isJsonSchemaLike","STRUCTURED_OUTPUT_KINDS"],"mappings":"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"}
|