@mozaik-ai/core 4.0.5 → 4.0.6

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/domain/model-context/model-context.ts","../src/domain/model-context/context-item/context-item.ts","../src/domain/model-context/context-item/item-content/item-content.ts","../src/domain/model-context/context-item/item-content/input-text.ts","../src/domain/model-context/context-item/client-item/user-message.ts","../src/domain/model-context/context-item/client-item/developer-message.ts","../src/domain/model-context/context-item/item-content/output-text.ts","../src/domain/model-context/context-item/model-item/model-message.ts","../src/domain/model-context/context-item/model-item/function-call.ts","../src/domain/model-context/context-item/model-item/reasoning.ts","../src/domain/generative-model/request-validation/structured-output.ts","../src/domain/model-context/context-item/client-item/function-call-output.ts","../src/domain/generative-model/token-usage.ts","../src/infrastructure/mcp/mcp-client.ts","../src/infrastructure/mcp/mcp-tool-registry.ts","../src/domain/model-context/context-item/client-item/system-message.ts","../src/domain/agentic-environment/semantic-event/event.ts","../src/application/states/inference.ts","../src/domain/agentic-environment/participant/participant.ts","../src/domain/agentic-environment/participant/memory.ts","../src/domain/agentic-environment/participant/agent.ts","../src/application/use-cases/create-agent.ts","../src/domain/agentic-environment/participant/human.ts","../src/application/use-cases/create-human.ts","../src/domain/agentic-environment/runtime-state.ts","../src/application/services/runtime.ts","../src/domain/agentic-environment/semantic-event/event-processor.ts","../src/application/use-cases/join.ts","../src/application/use-cases/leave.ts","../src/application/use-cases/send-message.ts","../src/domain/agentic-environment/loop/agent-loop.ts","../src/domain/agentic-environment/loop/state-executor.ts","../src/application/states/function-call.ts","../src/application/states/message-received.ts","../src/application/states/model-message.ts","../src/domain/agentic-environment/loop/transition-resolver.ts","../src/domain/agentic-environment/loop/transition-specification.ts","../src/domain/agentic-environment/loop/transition-rule.ts","../src/domain/agentic-environment/loop/event-publisher-visitor.ts","../src/application/states/inference-streaming.ts","../src/application/use-cases/run-loop.ts","../src/infrastructure/providers/anthropic/endpoints/anthropic-messages-mapper.ts","../src/infrastructure/providers/anthropic/endpoints/anthropic-messages.ts","../src/infrastructure/providers/openai/endpoints/openai-responses.ts","../src/domain/model-context/context-item/item-content/summary-text.ts","../src/infrastructure/providers/openai/endpoints/openai-responses-mapper.ts","../src/infrastructure/providers/gemini/endpoints/gemini-generate-content.ts","../src/infrastructure/providers/gemini/endpoints/gemini-generate-content-mapper.ts","../src/infrastructure/providers/openai/endpoints/openai-chat-completions-mapper.ts","../src/infrastructure/providers/openai/endpoints/openai-chat-completions.ts","../src/infrastructure/providers/anthropic/models/claude-4-6-sonnet.ts","../src/infrastructure/providers/anthropic/models/claude-4-8-opus.ts","../src/infrastructure/providers/anthropic/models/claude-4-7-opus.ts","../src/infrastructure/providers/gemini/models/gemini-3-5-flash.ts","../src/infrastructure/providers/gemini/models/gemini-3-1-pro.ts","../src/infrastructure/providers/deepseek/models/deepseek-v4-flash.ts","../src/infrastructure/providers/deepseek/models/deepseek-v4-pro.ts","../src/infrastructure/providers/openai/models/gpt-5-4.ts","../src/infrastructure/providers/openai/models/gpt-5-4-mini.ts","../src/infrastructure/providers/openai/models/gpt-5-4-nano.ts","../src/infrastructure/providers/openai/models/gpt-5-5.ts","../src/infrastructure/providers/anthropic/models/claude-4-5-haiku.ts","../src/application/services/models.ts","../src/domain/generative-model/request-validation/reasoning-effort.ts","../src/domain/generative-model/request-validation/tool-calling.ts","../src/domain/generative-model/request-validation/streaming.ts","../src/domain/generative-model/request-validation/context.ts","../src/domain/generative-model/request-validation/inference-request-validator.ts","../src/application/services/inference-runner.ts","../src/application/services/function-call.ts","../src/application/use-cases/send-event.ts","../src/define-runtime.ts","../src/domain/agentic-environment/situation/situation-specification.ts"],"sourcesContent":["import { ModelContext } from \"@domain/model-context/model-context\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { UserMessageItem } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { DeveloperMessageItem } from \"@domain/model-context/context-item/client-item/developer-message\"\nimport { ModelMessageItem } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { FunctionCallItem } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { ReasoningItem } from \"@domain/model-context/context-item/model-item/reasoning\"\nimport { StructuredOutputFormat } from \"@domain/generative-model/request-validation/structured-output\"\nimport { FunctionCallOutputItem } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { ModelContextRepository } from \"@domain/model-context/model-context-repository\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/generative-model/token-usage\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { McpClient, type McpServerConfig, type McpToolSpec } from \"@infra/mcp/mcp-client\"\nimport { McpToolRegistry } from \"@infra/mcp/mcp-tool-registry\"\nimport { SystemMessageItem } from \"@domain/model-context/context-item/client-item/system-message\"\nimport { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\nimport { Endpoint } from \"@domain/generative-model/endpoint\"\nimport { InferenceInput, InferenceOutput, InferenceRunner } from \"@app/states/inference\"\nimport { Participant } from \"@domain/agentic-environment/participant/participant\"\nimport { createAgent } from \"@app/use-cases/create-agent\"\nimport { createHuman } from \"@app/use-cases/create-human\"\nimport { RuntimeState } from \"@domain/agentic-environment/runtime-state\"\nimport { defineRuntime, type InferenceRunnerConfig } from \"./define-runtime\"\nimport { supportedModels } from \"@app/services/models\"\nimport { OpenAIResponses } from \"@infra/providers/openai/endpoints/openai-responses\"\nimport { OpenAIChatCompletions } from \"@infra/providers/openai/endpoints/openai-chat-completions\"\nimport { AnthropicMessages } from \"@infra/providers/anthropic/endpoints/anthropic-messages\"\nimport { GeminiGenerateContent } from \"@infra/providers/gemini/endpoints/gemini-generate-content\"\nimport { Agent } from \"@domain/agentic-environment/participant/agent\"\nimport { Human } from \"@domain/agentic-environment/participant/human\"\nimport {\n\tSituationContext,\n\tSituationHandler,\n\tSituationProcessor,\n} from \"@domain/agentic-environment/situation/situation-handler\"\nimport { SituationSpecification } from \"@domain/agentic-environment/situation/situation-specification\"\nimport { DefaultInferenceRunner } from \"@app/services/inference-runner\"\nimport { InterceptionHandler } from \"@domain/agentic-environment/loop/interception\"\nimport {\n\tExecutableLoopStateId,\n\tExecutableTransition,\n\tLoopStateExecution,\n\tLoopTransition,\n} from \"@domain/agentic-environment/loop/loop-state\"\n\nexport {\n\tdefineRuntime,\n\tRuntimeState,\n\tcreateAgent,\n\tcreateHuman,\n\tModelContext,\n\tModelContextRepository,\n\tContextItem,\n\tSemanticEvent,\n\tUserMessageItem,\n\tDeveloperMessageItem,\n\tSystemMessageItem,\n\tModelMessageItem,\n\tFunctionCallItem,\n\tFunctionCallOutputItem,\n\tReasoningItem,\n\tStructuredOutputFormat,\n\tTokenUsage,\n\tInputTokenDetails,\n\tOutputTokenDetails,\n\tTool,\n\tMcpClient,\n\ttype McpServerConfig,\n\ttype McpToolSpec,\n\tMcpToolRegistry,\n\tEndpoint,\n\tsupportedModels,\n\tOpenAIResponses,\n\tOpenAIChatCompletions,\n\tAnthropicMessages,\n\tGeminiGenerateContent,\n\tParticipant,\n\tAgent,\n\tHuman,\n\tSituationHandler,\n\tSituationProcessor,\n\tSituationSpecification,\n\tSituationContext,\n\tInterceptionHandler,\n\tLoopStateExecution,\n\tLoopTransition,\n\tExecutableLoopStateId,\n\tExecutableTransition,\n\tInferenceOutput,\n\tInferenceInput,\n\tInferenceRunner,\n\tDefaultInferenceRunner,\n\tInferenceRunnerConfig,\n}\n","import type { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { FunctionCallItem } from \"./context-item/model-item/function-call\"\nimport { ModelMessageItem } from \"./context-item/model-item/model-message\"\nimport { ReasoningItem } from \"./context-item/model-item/reasoning\"\n\nexport type ModelContextItem = ModelMessageItem | FunctionCallItem | ReasoningItem\n\nexport class ModelContext {\n\treadonly id: string\n\treadonly items: ContextItem[]\n\n\tconstructor(id: string, items: ContextItem[]) {\n\t\tthis.id = id\n\t\tthis.items = items\n\t}\n\n\tgetItems(): ContextItem[] {\n\t\treturn this.items\n\t}\n\n\taddContextItems(contextItems: ContextItem[]): ModelContext {\n\t\tthis.items.push(...contextItems)\n\t\treturn this\n\t}\n\n\taddContextItem(item: ContextItem): ModelContext {\n\t\tthis.items.push(item)\n\t\treturn this\n\t}\n\n\tstatic create(): ModelContext {\n\t\tconst id = crypto.randomUUID()\n\t\treturn new ModelContext(id, [])\n\t}\n\n\tstatic rehydrate(data: { id: string; items: ContextItem[] }): ModelContext {\n\t\treturn new ModelContext(data.id, data.items)\n\t}\n}\n","export abstract class ContextItem {\n\tabstract readonly type: string\n\n\tgetType(): string {\n\t\treturn this.type\n\t}\n}\n","export abstract class ItemContent {\n\tabstract readonly type: string\n}\n","import { ItemContent } from \"@domain/model-context/context-item/item-content/item-content\"\n\nexport class InputText extends ItemContent {\n\treadonly type = \"input_text\"\n\n\tprivate constructor(public readonly text: string) {\n\t\tsuper()\n\t}\n\n\tstatic create(text: string): InputText {\n\t\treturn new InputText(text)\n\t}\n\n\tstatic rehydrate(data: { text: string }): InputText {\n\t\treturn new InputText(data.text)\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\n\nexport class UserMessageItem extends ContextItem {\n\treadonly type = \"message\"\n\treadonly role = \"user\"\n\treadonly content: InputText\n\n\tprivate constructor(content: InputText) {\n\t\tsuper()\n\t\tthis.content = content\n\t}\n\n\tstatic create(text: string): UserMessageItem {\n\t\tconst content = InputText.create(text)\n\t\treturn new UserMessageItem(content)\n\t}\n\n\tstatic rehydrate(data: { text: string }): UserMessageItem {\n\t\tconst content = InputText.rehydrate(data)\n\t\treturn new UserMessageItem(content)\n\t}\n}\n","import { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class DeveloperMessageItem extends ContextItem {\n\treadonly type = \"message\"\n\treadonly role = \"developer\"\n\treadonly content: InputText\n\n\tprivate constructor(content: InputText) {\n\t\tsuper()\n\t\tthis.content = content\n\t}\n\n\tstatic create(text: string): DeveloperMessageItem {\n\t\tconst content = InputText.create(text)\n\t\treturn new DeveloperMessageItem(content)\n\t}\n\n\tstatic rehydrate(data: { text: string }): DeveloperMessageItem {\n\t\tconst content = InputText.rehydrate(data)\n\t\treturn new DeveloperMessageItem(content)\n\t}\n}\n","import { ItemContent } from \"@domain/model-context/context-item/item-content/item-content\"\n\nexport class OutputText extends ItemContent {\n\treadonly type = \"output_text\"\n\n\tprivate constructor(public readonly text: string) {\n\t\tsuper()\n\t}\n\n\tstatic rehydrate(data: { text: string }): OutputText {\n\t\treturn new OutputText(data.text)\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { OutputText } from \"@domain/model-context/context-item/item-content/output-text\"\n\nexport class ModelMessageItem extends ContextItem {\n\treadonly type = \"message\"\n\treadonly role = \"assistant\"\n\treadonly content: OutputText\n\n\tprivate constructor(content: OutputText) {\n\t\tsuper()\n\t\tthis.content = content\n\t}\n\n\tstatic rehydrate(data: { text: string }): ModelMessageItem {\n\t\tconst content = OutputText.rehydrate(data)\n\t\treturn new ModelMessageItem(content)\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class FunctionCallItem extends ContextItem {\n\treadonly type = \"function_call\"\n\treadonly callId: string\n\treadonly name: string\n\treadonly args: string\n\n\tprivate constructor(callId: string, name: string, args: string) {\n\t\tsuper()\n\t\tthis.callId = callId\n\t\tthis.name = name\n\t\tthis.args = args\n\t}\n\n\tstatic rehydrate(data: { callId: string; name: string; args: string }): FunctionCallItem {\n\t\treturn new FunctionCallItem(data.callId, data.name, data.args)\n\t}\n}\n","import type { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\nimport type { SummaryText } from \"@domain/model-context/context-item/item-content/summary-text\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class ReasoningItem extends ContextItem {\n\treadonly type = \"reasoning\"\n\treadonly content: InputText | undefined\n\treadonly encryptedContent: string | undefined\n\treadonly summary: SummaryText[]\n\n\tprivate constructor(\n\t\tcontent: InputText | undefined,\n\t\tencryptedContent?: string | undefined,\n\t\tsummary: SummaryText[] = [],\n\t) {\n\t\tsuper()\n\t\tthis.content = content\n\t\tthis.encryptedContent = encryptedContent\n\t\tthis.summary = summary\n\t}\n\n\tstatic rehydrate(data: {\n\t\tcontent: InputText | undefined\n\t\tencryptedContent: string | undefined\n\t\tsummary: SummaryText[]\n\t}): ReasoningItem {\n\t\treturn new ReasoningItem(data.content, data.encryptedContent, data.summary)\n\t}\n}\n","import type { InferenceInput } from \"@app/states/inference\"\nimport type { ModelSpecification } from \"../generative-model\"\nimport type { RequestValidationRule } from \"./rule\"\n\nexport type StructuredOutputFormat = {\n\tname?: string\n\tschema: Record<string, any>\n\tstrict?: boolean\n}\n\nexport class StructuredOutputValidation implements RequestValidationRule {\n\treadonly name = \"structured-output\"\n\n\tisValid(inferenceInput: InferenceInput, model: ModelSpecification): boolean {\n\t\tif (inferenceInput.structuredOutput === undefined) {\n\t\t\treturn true\n\t\t}\n\n\t\treturn model.supportsStructuredOutput\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\n\nexport class FunctionCallOutputItem extends ContextItem {\n\treadonly type = \"function_call_output\"\n\treadonly callId: string\n\treadonly output: InputText\n\n\tprivate constructor(callId: string, output: InputText) {\n\t\tsuper()\n\t\tthis.callId = callId\n\t\tthis.output = output\n\t}\n\n\tstatic create(callId: string, output: string): FunctionCallOutputItem {\n\t\tconst outputText = InputText.create(output)\n\t\treturn new FunctionCallOutputItem(callId, outputText)\n\t}\n\n\tstatic rehydrate(data: { callId: string; output: InputText }): FunctionCallOutputItem {\n\t\treturn new FunctionCallOutputItem(data.callId, data.output)\n\t}\n}\n","export class InputTokenDetails {\n\treadonly cached_tokens: number\n\n\tconstructor(cached_tokens: number) {\n\t\tthis.cached_tokens = cached_tokens\n\t}\n}\n\nexport class OutputTokenDetails {\n\treadonly reasoning_tokens: number\n\n\tconstructor(reasoning_tokens: number) {\n\t\tthis.reasoning_tokens = reasoning_tokens\n\t}\n}\n\nexport class TokenUsage {\n\treadonly inputTokens: number\n\treadonly outputTokens: number\n\treadonly totalTokens: number\n\treadonly inputTokenDetails: InputTokenDetails\n\treadonly outputTokenDetails: OutputTokenDetails\n\n\tconstructor(\n\t\tinputTokens: number,\n\t\toutputTokens: number,\n\t\ttotalTokens: number,\n\t\tinputTokenDetails: InputTokenDetails,\n\t\toutputTokenDetails: OutputTokenDetails,\n\t) {\n\t\tthis.inputTokens = inputTokens\n\t\tthis.outputTokens = outputTokens\n\t\tthis.totalTokens = totalTokens\n\t\tthis.inputTokenDetails = inputTokenDetails\n\t\tthis.outputTokenDetails = outputTokenDetails\n\t}\n}\n","import { Client } from \"@modelcontextprotocol/sdk/client/index.js\"\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\"\n\nexport interface McpServerConfig {\n\t/** The MCP server URL, e.g. https://api.githubcopilot.com/mcp/ */\n\turl: string\n\t/** Bearer token sent as `Authorization: Bearer <token>` (e.g. a GitHub token). */\n\tauthToken?: string\n\t/** Extra headers merged into every request (overridden by `authToken` for Authorization). */\n\theaders?: Record<string, string>\n\t/** Client name reported to the server (defaults to \"mozaik\"). */\n\tname?: string\n}\n\nexport interface McpToolSpec {\n\tname: string\n\tdescription: string\n\t/** JSON Schema for the tool's arguments (maps 1:1 to FunctionTool.parameters). */\n\tinputSchema: Record<string, any>\n}\n\n/**\n * A thin wrapper over the MCP TypeScript SDK using the Streamable HTTP transport — what\n * remote MCP servers (e.g. GitHub's `api.githubcopilot.com/mcp/`) speak. One client per\n * server; lazily connects on first use. Infrastructure-only: the domain never sees this.\n */\nexport class McpClient {\n\tprivate readonly client: Client\n\tprivate readonly transport: StreamableHTTPClientTransport\n\tprivate connected = false\n\n\tconstructor(private readonly config: McpServerConfig) {\n\t\tconst headers: Record<string, string> = { ...(config.headers ?? {}) }\n\t\tif (config.authToken) headers.Authorization = `Bearer ${config.authToken}`\n\t\tthis.transport = new StreamableHTTPClientTransport(\n\t\t\tnew URL(config.url),\n\t\t\tObject.keys(headers).length > 0 ? { requestInit: { headers } } : undefined,\n\t\t)\n\t\tthis.client = new Client({ name: config.name ?? \"mozaik\", version: \"1.0.0\" }, { capabilities: {} })\n\t}\n\n\tasync connect(): Promise<void> {\n\t\tif (this.connected) return\n\t\tawait this.client.connect(this.transport)\n\t\tthis.connected = true\n\t}\n\n\t/** The tools this server exposes. */\n\tasync listTools(): Promise<McpToolSpec[]> {\n\t\tawait this.connect()\n\t\tconst res = await this.client.listTools()\n\t\treturn (res.tools ?? []).map((t) => ({\n\t\t\tname: t.name,\n\t\t\tdescription: t.description ?? \"\",\n\t\t\tinputSchema: (t.inputSchema as Record<string, any>) ?? { type: \"object\", properties: {} },\n\t\t}))\n\t}\n\n\t/** Call a tool by name; returns its text output. Throws if the server flags an error. */\n\tasync callTool(name: string, args: Record<string, any>): Promise<string> {\n\t\tawait this.connect()\n\t\tconst res = await this.client.callTool({ name, arguments: args ?? {} })\n\t\tconst text = extractText(res)\n\t\tif ((res as { isError?: boolean }).isError) {\n\t\t\tthrow new Error(`MCP tool \"${name}\" failed: ${text || \"unknown error\"}`)\n\t\t}\n\t\treturn text\n\t}\n\n\tasync close(): Promise<void> {\n\t\tif (!this.connected) return\n\t\ttry {\n\t\t\tawait this.client.close()\n\t\t} catch {\n\t\t\t// best-effort teardown — the transport may already be gone\n\t\t}\n\t\tthis.connected = false\n\t}\n}\n\n/** Concatenate the text blocks of an MCP tool result (ignores non-text content). */\nfunction extractText(res: unknown): string {\n\tconst content = (res as { content?: unknown }).content\n\tif (!Array.isArray(content)) return \"\"\n\treturn content\n\t\t.filter((c): c is { type: \"text\"; text: string } => (c as { type?: string })?.type === \"text\" && typeof (c as { text?: unknown }).text === \"string\")\n\t\t.map((c) => c.text)\n\t\t.join(\"\\n\")\n}\n","import type { FunctionTool } from \"@domain/generative-model/tool\"\nimport { McpClient, type McpServerConfig } from \"./mcp-client.js\"\n\n/** The slice of an MCP client the registry needs — lets tests inject a fake. */\nexport interface McpClientLike {\n\tlistTools(): Promise<Array<{ name: string; description: string; inputSchema: Record<string, any> }>>\n\tcallTool(name: string, args: Record<string, any>): Promise<string>\n\tclose(): Promise<void>\n}\n\n/**\n * Connects to one or more MCP servers and exposes their tools as mozaik `FunctionTool`s.\n * Each tool's `invoke()` proxies the call back to its MCP server. Because they are plain\n * FunctionTools, every provider mapper and the existing function-call loop handle them\n * with no changes — MCP support adds no new tool type and touches no provider code.\n *\n * `strict` is false: MCP servers publish arbitrary JSON Schemas that won't always satisfy\n * a provider's strict function-calling mode.\n */\nexport class McpToolRegistry {\n\tprivate readonly clients: McpClientLike[] = []\n\n\tconstructor(\n\t\tprivate readonly servers: McpServerConfig[],\n\t\tprivate readonly createClient: (config: McpServerConfig) => McpClientLike = (config) => new McpClient(config),\n\t) {}\n\n\t/** Discover every tool across the configured servers, as FunctionTools ready to pass to a model. */\n\tasync discoverTools(): Promise<FunctionTool[]> {\n\t\tconst tools: FunctionTool[] = []\n\t\tfor (const server of this.servers) {\n\t\t\tconst client = this.createClient(server)\n\t\t\tthis.clients.push(client)\n\t\t\tfor (const spec of await client.listTools()) {\n\t\t\t\ttools.push({\n\t\t\t\t\ttype: \"function\",\n\t\t\t\t\tname: spec.name,\n\t\t\t\t\tdescription: spec.description,\n\t\t\t\t\tparameters: spec.inputSchema,\n\t\t\t\t\tstrict: false,\n\t\t\t\t\tinvoke: (args: unknown) => client.callTool(spec.name, (args as Record<string, any>) ?? {}),\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\treturn tools\n\t}\n\n\t/** Close all underlying MCP connections. */\n\tasync close(): Promise<void> {\n\t\tawait Promise.all(this.clients.map((c) => c.close()))\n\t}\n}\n","import { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class SystemMessageItem extends ContextItem {\n\treadonly type = \"message\"\n\treadonly role = \"system\"\n\treadonly content: InputText\n\n\tprivate constructor(content: InputText) {\n\t\tsuper()\n\t\tthis.content = content\n\t}\n\n\tstatic create(text: string): SystemMessageItem {\n\t\tconst content = InputText.create(text)\n\t\treturn new SystemMessageItem(content)\n\t}\n\n\tstatic rehydrate(data: { text: string }): SystemMessageItem {\n\t\tconst content = InputText.rehydrate(data)\n\t\treturn new SystemMessageItem(content)\n\t}\n}\n","import { ParticipantManifest } from \"../participant/participant\"\n\nexport class SemanticEvent<TType extends string = string, TPayload = unknown> {\n\treadonly type: TType\n\treadonly producerId: string\n\treadonly occurredAt: Date\n\treadonly payload: TPayload\n\n\tconstructor(type: TType, producerId: string, occurredAt: Date, payload: TPayload) {\n\t\tthis.type = type\n\t\tthis.producerId = producerId\n\t\tthis.occurredAt = occurredAt\n\t\tthis.payload = payload\n\t}\n\n\tstatic create<TType extends string = string, TPayload = unknown>(\n\t\ttype: TType,\n\t\tproducerId: string,\n\t\tpayload: TPayload,\n\t): SemanticEvent<TType, TPayload> {\n\t\tconst occurredAt = new Date()\n\t\treturn new SemanticEvent(type, producerId, occurredAt, payload)\n\t}\n}\n\nexport class ParticipantJoinedEvent extends SemanticEvent<\"participant.joined\", ParticipantManifest> {\n\tstatic init(manifest: ParticipantManifest): ParticipantJoinedEvent {\n\t\treturn SemanticEvent.create(\"participant.joined\", manifest.id, manifest)\n\t}\n}\n\nexport class ParticipantLeftEvent extends SemanticEvent<\"participant.left\", ParticipantManifest> {\n\tstatic init(manifest: ParticipantManifest): ParticipantLeftEvent {\n\t\treturn SemanticEvent.create(\"participant.left\", manifest.id, manifest)\n\t}\n}\n\nexport class MessageSentEvent extends SemanticEvent<\"message.sent\", { message: string }> {\n\tstatic init(producerId: string, message: string): MessageSentEvent {\n\t\treturn SemanticEvent.create(\"message.sent\", producerId, { message })\n\t}\n}\n\nexport class ModelAnswerEvent extends SemanticEvent<\"model.answer\", { answer: string }> {\n\tstatic init(producerId: string, answer: string): ModelAnswerEvent {\n\t\treturn ModelAnswerEvent.create(\"model.answer\", producerId, { answer })\n\t}\n}\n","import { LoopState, LoopStateExecution } from \"@domain/agentic-environment/loop/loop-state\"\nimport { ModelMessageItem } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { ReasoningItem } from \"@domain/model-context/context-item/model-item/reasoning\"\nimport { FunctionCallItem } from \"@domain/model-context/context-item/model-item/function-call\"\n\nimport type { Tool } from \"@domain/generative-model/tool\"\nimport type { ModelContext } from \"@domain/model-context/model-context\"\nimport type { StructuredOutputFormat } from \"@domain/generative-model/request-validation/structured-output\"\nimport { LoopVisitor } from \"@domain/agentic-environment/loop/loop-visitor\"\nimport { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\nimport { TokenUsage } from \"@domain/generative-model/token-usage\"\n\nexport type InferenceInput = {\n\tmodel: string\n\tmaxOutputTokens?: number\n\treasoningEffort?: string\n\ttools?: Tool[]\n\tstreaming?: boolean\n\tstructuredOutput?: StructuredOutputFormat\n\tcontext: ModelContext\n}\n\nexport type InferenceItem = FunctionCallItem | ReasoningItem | ModelMessageItem\n\nexport type InferenceOutput = {\n\titems: InferenceItem[]\n\ttokenUsage: TokenUsage | undefined\n\trowResponse: any\n}\n\nexport interface InferenceRunner {\n\trun(request: InferenceInput): Promise<InferenceOutput>\n\tstream(request: InferenceInput): AsyncGenerator<SemanticEvent>\n}\n\nexport class InferenceState implements LoopState<InferenceInput, LoopStateExecution<\"inference\">> {\n\treadonly id = \"inference\"\n\n\tconstructor(private readonly inferenceRunner: InferenceRunner) {}\n\n\tasync run(input: InferenceInput, loopVisitor: LoopVisitor): Promise<LoopStateExecution<\"inference\">> {\n\t\tloopVisitor.visitInferenceStarted(input)\n\n\t\tconst output = await this.inferenceRunner.run(input)\n\n\t\tloopVisitor.visitInferenceCompleted(output)\n\t\treturn {\n\t\t\tstateId: this.id,\n\t\t\tinput,\n\t\t\toutput,\n\t\t}\n\t}\n}\n","import { SituationHandler } from \"../situation/situation-handler\"\n\nexport type ParticipantRole = \"agent\" | \"human\"\n\nexport type ParticipantManifest = {\n\treadonly id: string\n\treadonly name: string\n\treadonly role: ParticipantRole\n\treadonly capabilities?: readonly string[]\n}\n\nexport abstract class Participant {\n\tprivate readonly manifest: ParticipantManifest\n\tprivate handlers: SituationHandler[]\n\n\tprotected constructor(manifest: ParticipantManifest, handlers: SituationHandler[]) {\n\t\tthis.manifest = manifest\n\t\tthis.handlers = handlers\n\t}\n\n\tgetManifest(): ParticipantManifest {\n\t\treturn this.manifest\n\t}\n\n\tgetId(): string {\n\t\treturn this.manifest.id\n\t}\n\n\tgetHandlers(): SituationHandler[] {\n\t\treturn this.handlers\n\t}\n\n\tsetHandlers(handlers: SituationHandler[]): void {\n\t\tthis.handlers = handlers\n\t}\n}\n","import { ModelContext } from \"@domain/model-context/model-context\"\n\nexport class Memory {\n\tprivate readonly context: ModelContext\n\tprivate constructor(context: ModelContext) {\n\t\tthis.context = context\n\t}\n\n\tgetContext(): ModelContext {\n\t\treturn this.context\n\t}\n\n\tstatic create(): Memory {\n\t\tconst context = ModelContext.create()\n\t\treturn new Memory(context)\n\t}\n}\n","import { Memory } from \"./memory\"\nimport { Participant, ParticipantManifest } from \"./participant\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { SituationHandler } from \"../situation/situation-handler\"\nimport { DeveloperMessageItem } from \"@domain/model-context/context-item/client-item/developer-message\"\n\nexport class Agent extends Participant {\n\tprivate memory: Memory\n\tprivate developerMessage: string\n\tprivate tools: Tool[]\n\n\tconstructor(\n\t\tmanifest: ParticipantManifest,\n\t\tdeveloperMessage: string,\n\t\ttools: Tool[],\n\t\tmemory: Memory,\n\t\thandlers: SituationHandler[],\n\t) {\n\t\tsuper(manifest, handlers)\n\t\tthis.memory = memory\n\t\tthis.developerMessage = developerMessage\n\t\tthis.tools = tools\n\t}\n\n\tstatic create({\n\t\tname,\n\t\tinstruction,\n\t\ttools,\n\t\tcapabilities,\n\t\thandlers,\n\t}: {\n\t\tinstruction: string\n\t\ttools: Tool[]\n\t\tname: string\n\t\tcapabilities: readonly string[]\n\t\thandlers: SituationHandler[]\n\t}): Agent {\n\t\tconst id = crypto.randomUUID()\n\t\tconst memory = Memory.create()\n\t\tconst manifest: ParticipantManifest = { id, name, capabilities, role: \"agent\" }\n\n\t\tconst developerMessage = DeveloperMessageItem.create(instruction)\n\t\tmemory.getContext().addContextItem(developerMessage)\n\t\treturn new Agent(manifest, instruction, tools, memory, handlers)\n\t}\n\n\tgetTools(): Tool[] {\n\t\treturn this.tools\n\t}\n\n\tgetDeveloperMessage(): string {\n\t\treturn this.developerMessage\n\t}\n\n\tgetMemory(): Memory {\n\t\treturn this.memory\n\t}\n}\n","import { Agent } from \"@domain/agentic-environment/participant/agent\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { SituationHandler } from \"@domain/agentic-environment/situation/situation-handler\"\n\nexport function createAgent({\n\tname,\n\tcapabilities,\n\tinstruction,\n\ttools,\n\thandlers,\n}: {\n\tname: string\n\tcapabilities: readonly string[]\n\tinstruction: string\n\ttools: Tool[]\n\thandlers: SituationHandler[]\n}): Agent {\n\treturn Agent.create({ name, instruction, capabilities, tools, handlers })\n}\n","import { Participant, ParticipantManifest } from \"./participant\"\nimport { SituationHandler } from \"../situation/situation-handler\"\n\nexport class Human extends Participant {\n\tconstructor(manifest: ParticipantManifest, handlers: SituationHandler[]) {\n\t\tsuper(manifest, handlers)\n\t}\n\n\tstatic create({\n\t\tname,\n\t\tcapabilities,\n\t\thandlers,\n\t}: {\n\t\tname: string\n\t\tcapabilities: readonly string[]\n\t\thandlers: SituationHandler[]\n\t}): Human {\n\t\tconst id = crypto.randomUUID()\n\t\tconst manifest: ParticipantManifest = { id, name, capabilities, role: \"human\" }\n\t\treturn new Human(manifest, handlers)\n\t}\n}\n","import { Human } from \"@domain/agentic-environment/participant/human\"\nimport { SituationHandler } from \"@domain/agentic-environment/situation/situation-handler\"\n\nexport function createHuman({\n\tname,\n\tcapabilities,\n\thandlers,\n}: {\n\tname: string\n\tcapabilities: readonly string[]\n\thandlers: SituationHandler[]\n}): Human {\n\treturn Human.create({ name, capabilities, handlers })\n}\n","import { Participant } from \"./participant/participant\"\n\nexport abstract class RuntimeState {\n\tparticipants: Map<string, Participant> = new Map()\n\n\taddParticipant(participant: Participant): void {\n\t\tconst isExists = this.participants.get(participant.getId())\n\n\t\tif (isExists) return\n\n\t\tthis.participants.set(participant.getId(), participant)\n\t}\n\n\tremoveParticipant(participant: Participant): void {\n\t\tthis.participants.delete(participant.getId())\n\t}\n\n\tgetParticipant(id: string): Participant | undefined {\n\t\treturn this.participants.get(id)\n\t}\n\n\tgetParticipants(): readonly Participant[] {\n\t\treturn [...this.participants.values()]\n\t}\n}\n","import { Participant } from \"@domain/agentic-environment/participant/participant\"\nimport { RuntimeState } from \"@domain/agentic-environment/runtime-state\"\nimport { EventProcessor } from \"@domain/agentic-environment/semantic-event/event-processor\"\nimport {\n\tParticipantJoinedEvent,\n\tParticipantLeftEvent,\n\tSemanticEvent,\n} from \"@domain/agentic-environment/semantic-event/event\"\nimport { InferenceRunner } from \"@app/states/inference\"\nimport { FunctionCallRunner } from \"@app/states/function-call\"\n\nexport class RuntimeService<TRuntimeState extends RuntimeState> {\n\tconstructor(\n\t\tpublic readonly state: TRuntimeState,\n\t\tprivate readonly processor: EventProcessor,\n\t\tprivate readonly inferenceRunner: InferenceRunner,\n\t\tprivate readonly functionCallRunner: FunctionCallRunner,\n\t) {}\n\n\tjoin(participant: Participant): void {\n\t\tthis.state.addParticipant(participant)\n\t\tthis.publish(ParticipantJoinedEvent.init(participant.getManifest()))\n\t}\n\n\tleave(participant: Participant): void {\n\t\tthis.state.removeParticipant(participant)\n\t\tthis.publish(ParticipantLeftEvent.init(participant.getManifest()))\n\t}\n\n\tpublish(event: SemanticEvent): void {\n\t\tfor (const participant of this.state.getParticipants()) {\n\t\t\tthis.processor.process(event, participant)\n\t\t}\n\t}\n\n\tgetParticipant(id: string): Participant | undefined {\n\t\tif (!this.state.getParticipant(id)) {\n\t\t\tthrow new Error(`Participant ${id} not found`)\n\t\t}\n\n\t\treturn this.state.getParticipant(id)\n\t}\n\n\tgetInferenceRunner(): InferenceRunner {\n\t\treturn this.inferenceRunner\n\t}\n\n\tgetFunctionCallRunner(): FunctionCallRunner {\n\t\treturn this.functionCallRunner\n\t}\n}\n","import { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\nimport { Participant } from \"../participant/participant\"\n\nexport class EventProcessor {\n\tprocess(event: SemanticEvent, consumer: Participant): void {\n\t\tfor (const handler of consumer.getHandlers()) {\n\t\t\tconst isSatisfied = handler.specification.isSatisfiedBy({\n\t\t\t\tevent,\n\t\t\t\tparticipant: consumer,\n\t\t\t})\n\t\t\tif (isSatisfied) {\n\t\t\t\thandler.processor.apply({ event, participant: consumer })\n\t\t\t}\n\t\t}\n\t}\n}\n","import { RuntimeService } from \"@app/services/runtime\"\nimport { Participant } from \"@domain/agentic-environment/participant/participant\"\nimport { RuntimeState } from \"@domain/agentic-environment/runtime-state\"\n\nexport function createJoin<TRuntimeState extends RuntimeState>(resolveRuntime: () => RuntimeService<TRuntimeState>) {\n\treturn function join(participant: Participant): void {\n\t\tresolveRuntime().join(participant)\n\t}\n}\n","import { RuntimeService } from \"@app/services/runtime\"\nimport { Participant } from \"@domain/agentic-environment/participant/participant\"\nimport { RuntimeState } from \"@domain/agentic-environment/runtime-state\"\n\nexport function createLeave<TRuntimeState extends RuntimeState>(resolveRuntime: () => RuntimeService<TRuntimeState>) {\n\treturn function leave(participant: Participant): void {\n\t\tresolveRuntime().leave(participant)\n\t}\n}\n","import { RuntimeService } from \"@app/services/runtime\"\nimport { RuntimeState } from \"@domain/agentic-environment/runtime-state\"\nimport { MessageSentEvent } from \"@domain/agentic-environment/semantic-event/event\"\n\nexport function createSendMessage<TRuntimeState extends RuntimeState>(\n\tresolveRuntime: () => RuntimeService<TRuntimeState>,\n) {\n\treturn function sendMessage(message: string, senderId: string): void {\n\t\tconst runtime = resolveRuntime()\n\t\tconst participant = runtime.getParticipant(senderId)\n\t\tif (!participant) {\n\t\t\tthrow new Error(`Participant ${senderId} not found`)\n\t\t}\n\n\t\tconst userMessage: MessageSentEvent = MessageSentEvent.init(senderId, message)\n\t\truntime.publish(userMessage)\n\t}\n}\n","import { InterceptionHandler } from \"./interception\"\nimport { LoopTransition, ReceivedMessage } from \"./loop-state\"\nimport { LoopVisitor } from \"./loop-visitor\"\nimport { LoopStateExecutor } from \"./state-executor\"\nimport { TransitionResolver } from \"./transition-resolver\"\n\nexport class AgentLoop {\n\tprivate constructor(\n\t\tprivate readonly loopId: string,\n\t\tprivate readonly stateExecutor: LoopStateExecutor,\n\t\tprivate readonly transitionResolver: TransitionResolver,\n\t\tprivate readonly interceptionHandler?: InterceptionHandler,\n\t) {}\n\n\tasync run(message: ReceivedMessage, loopVisitor: LoopVisitor): Promise<void> {\n\t\tlet transition: LoopTransition = {\n\t\t\tnextStateId: \"message_received\",\n\t\t\tinput: message,\n\t\t}\n\n\t\twhile (transition.nextStateId !== \"idle\") {\n\t\t\tconst isInterceptionSatisfied = this.interceptionHandler?.isSatisfiedBy(transition)\n\n\t\t\tif (isInterceptionSatisfied && this.interceptionHandler) {\n\t\t\t\tloopVisitor.visitInterceptionStarted(transition)\n\t\t\t\ttransition = await this.interceptionHandler.handle(transition)\n\t\t\t\tloopVisitor.visitInterceptionFinished(transition)\n\t\t\t}\n\n\t\t\tconst execution = await this.stateExecutor.execute(transition, loopVisitor)\n\t\t\ttransition = this.transitionResolver.resolve(execution)\n\t\t}\n\t}\n\n\tgetLoopId(): string {\n\t\treturn this.loopId\n\t}\n\n\tstatic create(\n\t\tstateExecutor: LoopStateExecutor,\n\t\ttransitionResolver: TransitionResolver,\n\t\tinterceptionHandler?: InterceptionHandler,\n\t): AgentLoop {\n\t\tconst loopId = crypto.randomUUID()\n\t\treturn new AgentLoop(loopId, stateExecutor, transitionResolver, interceptionHandler)\n\t}\n}\n","import { ExecutableLoopStateId, LoopStateExecution, LoopTransition } from \"./loop-state\"\nimport { LoopVisitor } from \"./loop-visitor\"\nimport { FunctionCallState } from \"@app/states/function-call\"\nimport { InferenceState } from \"@app/states/inference\"\nimport { MessageReceivedState } from \"@app/states/message-received\"\nimport { ModelMessageState } from \"@app/states/model-message\"\nimport { InferenceStreamingState } from \"@app/states/inference-streaming\"\n\nexport class LoopStateExecutor {\n\tconstructor(\n\t\tprivate readonly messageReceivedState: MessageReceivedState,\n\t\tprivate readonly inferenceState: InferenceState,\n\t\tprivate readonly inferenceStreamingState: InferenceStreamingState,\n\t\tprivate readonly functionCallState: FunctionCallState,\n\t\tprivate readonly modelMessageState: ModelMessageState,\n\t) {}\n\n\texecute(\n\t\ttransition: LoopTransition<\"message_received\">,\n\t\tloopVisitor: LoopVisitor,\n\t): Promise<LoopStateExecution<\"message_received\">>\n\n\texecute(transition: LoopTransition<\"inference\">, loopVisitor: LoopVisitor): Promise<LoopStateExecution<\"inference\">>\n\n\texecute(\n\t\ttransition: LoopTransition<\"function_call\">,\n\t\tloopVisitor: LoopVisitor,\n\t): Promise<LoopStateExecution<\"function_call\">>\n\n\texecute(\n\t\ttransition: LoopTransition<\"model_message\">,\n\t\tloopVisitor: LoopVisitor,\n\t): Promise<LoopStateExecution<\"model_message\">>\n\n\texecute(transition: LoopTransition<ExecutableLoopStateId>, loopVisitor: LoopVisitor): Promise<LoopStateExecution>\n\n\tasync execute(\n\t\ttransition: LoopTransition<ExecutableLoopStateId>,\n\t\tloopVisitor: LoopVisitor,\n\t): Promise<LoopStateExecution> {\n\t\tswitch (transition.nextStateId) {\n\t\t\tcase \"message_received\":\n\t\t\t\treturn await this.messageReceivedState.run(transition.input, loopVisitor)\n\n\t\t\tcase \"inference\":\n\t\t\t\treturn await this.inferenceState.run(transition.input, loopVisitor)\n\n\t\t\tcase \"inference_streaming\":\n\t\t\t\treturn await this.inferenceStreamingState.run(transition.input, loopVisitor)\n\n\t\t\tcase \"function_call\":\n\t\t\t\treturn await this.functionCallState.run(transition.input, loopVisitor)\n\n\t\t\tcase \"model_message\":\n\t\t\t\treturn await this.modelMessageState.run(transition.input, loopVisitor)\n\t\t}\n\t}\n}\n","import { FunctionCallItem } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { LoopState, LoopStateExecution } from \"@domain/agentic-environment/loop/loop-state\"\nimport { FunctionCallOutputItem } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { InferenceInput } from \"./inference\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { LoopVisitor } from \"@domain/agentic-environment/loop/loop-visitor\"\n\nexport interface FunctionCallRunner {\n\trun(call: FunctionCallItem, tool: Tool): Promise<FunctionCallOutputItem>\n}\n\nexport interface FunctionCallParams {\n\tcall: FunctionCallItem\n\tinferenceInput: InferenceInput\n}\n\nexport class FunctionCallState implements LoopState<FunctionCallParams, LoopStateExecution<\"function_call\">> {\n\treadonly id = \"function_call\"\n\n\tconstructor(private readonly functionCallRunner: FunctionCallRunner) {}\n\n\tasync run(input: FunctionCallParams, loopVisitor: LoopVisitor): Promise<LoopStateExecution<\"function_call\">> {\n\t\tloopVisitor.visitFunctionCallStarted(input)\n\n\t\tconst { call, inferenceInput } = input\n\n\t\tlet tool: Tool | undefined = inferenceInput.tools?.find((tool) => tool.name === call.name)\n\n\t\tif (!tool) {\n\t\t\treturn {\n\t\t\t\tstateId: this.id,\n\t\t\t\tinput,\n\t\t\t\toutput: {\n\t\t\t\t\titem: FunctionCallOutputItem.create(call.callId, `Error: unknown tool \"${call.name}\"`),\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tconst item = await this.functionCallRunner.run(call, tool)\n\n\t\tloopVisitor.visitFunctionCallCompleted(item)\n\t\treturn {\n\t\t\tstateId: this.id,\n\t\t\tinput,\n\t\t\toutput: {\n\t\t\t\titem,\n\t\t\t},\n\t\t}\n\t}\n}\n","import { InferenceInput } from \"@app/states/inference\"\nimport { UserMessageItem } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { LoopState, LoopStateExecution, ReceivedMessage } from \"@domain/agentic-environment/loop/loop-state\"\nimport { LoopVisitor } from \"@domain/agentic-environment/loop/loop-visitor\"\n\nexport class MessageReceivedState implements LoopState<ReceivedMessage, LoopStateExecution<\"message_received\">> {\n\treadonly id = \"message_received\"\n\n\tasync run(input: ReceivedMessage, loopVisitor: LoopVisitor): Promise<LoopStateExecution<\"message_received\">> {\n\t\tloopVisitor.visitMessageReceivedStarted(input)\n\n\t\tconst userMessage = UserMessageItem.create(input.content)\n\n\t\tconst output: InferenceInput = {\n\t\t\t...input.input,\n\t\t\tcontext: input.input.context.addContextItems([userMessage]),\n\t\t}\n\n\t\tloopVisitor.visitMessageReceivedCompleted(output)\n\t\treturn {\n\t\t\tstateId: this.id,\n\t\t\tinput,\n\t\t\toutput,\n\t\t}\n\t}\n}\n","import { LoopState, LoopStateExecution, ModelMessageParams } from \"@domain/agentic-environment/loop/loop-state\"\nimport { LoopVisitor } from \"@domain/agentic-environment/loop/loop-visitor\"\n\nexport class ModelMessageState implements LoopState<ModelMessageParams, LoopStateExecution<\"model_message\">> {\n\treadonly id = \"model_message\"\n\n\tasync run(input: ModelMessageParams, loopVisitor: LoopVisitor): Promise<LoopStateExecution<\"model_message\">> {\n\t\tloopVisitor.visitModelAnswer(input)\n\t\treturn {\n\t\t\tstateId: this.id,\n\t\t\tinput,\n\t\t\toutput: undefined,\n\t\t}\n\t}\n}\n","import { LoopTransitionRule } from \"./transition-rule\"\nimport { LoopStateExecution, LoopTransition } from \"./loop-state\"\n\nexport class TransitionResolver {\n\tconstructor(private readonly rules: LoopTransitionRule[]) {}\n\n\tresolve(execution: LoopStateExecution): LoopTransition {\n\t\tconst rule = this.rules.find((rule) => rule.specification.isSatisfiedBy(execution))\n\n\t\tif (!rule) {\n\t\t\tthrow new Error(`No transition rule found after \"${execution.stateId}\"`)\n\t\t}\n\n\t\treturn rule.createTransition(execution)\n\t}\n}\n","import { LoopStateExecution } from \"./loop-state\"\n\nexport interface TransitionSpecification {\n\tisSatisfiedBy(execution: LoopStateExecution): boolean\n}\n\nexport class AndSpecification implements TransitionSpecification {\n\tconstructor(\n\t\tprivate readonly left: TransitionSpecification,\n\t\tprivate readonly right: TransitionSpecification,\n\t) {}\n\n\tisSatisfiedBy(execution: LoopStateExecution): boolean {\n\t\treturn this.left.isSatisfiedBy(execution) && this.right.isSatisfiedBy(execution)\n\t}\n}\n\nexport class OrSpecification implements TransitionSpecification {\n\tconstructor(\n\t\tprivate readonly left: TransitionSpecification,\n\t\tprivate readonly right: TransitionSpecification,\n\t) {}\n\n\tisSatisfiedBy(execution: LoopStateExecution): boolean {\n\t\treturn this.left.isSatisfiedBy(execution) || this.right.isSatisfiedBy(execution)\n\t}\n}\n\nexport class NotSpecification implements TransitionSpecification {\n\tconstructor(private readonly specification: TransitionSpecification) {}\n\n\tisSatisfiedBy(execution: LoopStateExecution): boolean {\n\t\treturn !this.specification.isSatisfiedBy(execution)\n\t}\n}\n\n// ============================================================\n// Concrete transition specifications\n// ============================================================\n\nexport class MessageReceivedSpecification implements TransitionSpecification {\n\tisSatisfiedBy(execution: LoopStateExecution): boolean {\n\t\treturn execution.stateId === \"message_received\"\n\t}\n}\n\ntype InferenceExecution = Extract<LoopStateExecution, { stateId: \"inference\" | \"inference_streaming\" }>\n\n/** Buffered and streaming inference produce the same output, so both satisfy the inference specifications. */\nfunction isInferenceExecution(execution: LoopStateExecution): execution is InferenceExecution {\n\treturn execution.stateId === \"inference\" || execution.stateId === \"inference_streaming\"\n}\n\nexport class InferenceProducedFunctionCallSpecification implements TransitionSpecification {\n\tisSatisfiedBy(execution: LoopStateExecution): boolean {\n\t\treturn isInferenceExecution(execution) && execution.output.items.some((item) => item.type === \"function_call\")\n\t}\n}\n\nexport class InferenceProducedModelMessageSpecification implements TransitionSpecification {\n\tisSatisfiedBy(execution: LoopStateExecution): boolean {\n\t\treturn (\n\t\t\tisInferenceExecution(execution) &&\n\t\t\texecution.output.items.some((item) => item.type === \"message\" && item.role === \"assistant\")\n\t\t)\n\t}\n}\n\nexport class FunctionCallCompletedSpecification implements TransitionSpecification {\n\tisSatisfiedBy(execution: LoopStateExecution): boolean {\n\t\treturn execution.stateId === \"function_call\"\n\t}\n}\n\nexport class ModelMessageCompletedSpecification implements TransitionSpecification {\n\tisSatisfiedBy(execution: LoopStateExecution): boolean {\n\t\treturn execution.stateId === \"model_message\"\n\t}\n}\n\nexport class StreamingInferenceSpecification implements TransitionSpecification {\n\tisSatisfiedBy(execution: LoopStateExecution): boolean {\n\t\treturn execution.stateId === \"inference\" && execution.input.streaming === true\n\t}\n}\n","import { ModelMessageItem } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { LoopStateExecution, LoopTransition } from \"./loop-state\"\nimport {\n\tFunctionCallCompletedSpecification,\n\tInferenceProducedFunctionCallSpecification,\n\tInferenceProducedModelMessageSpecification,\n\tMessageReceivedSpecification,\n\tModelMessageCompletedSpecification,\n\tTransitionSpecification,\n} from \"./transition-specification\"\n\nexport interface LoopTransitionRule {\n\treadonly specification: TransitionSpecification\n\n\tcreateTransition(execution: LoopStateExecution): LoopTransition\n}\n\nexport class ContextPreparationToInferenceRule implements LoopTransitionRule {\n\treadonly specification = new MessageReceivedSpecification()\n\n\tcreateTransition(execution: LoopStateExecution): LoopTransition<\"inference\" | \"inference_streaming\"> {\n\t\tif (execution.stateId !== \"message_received\") {\n\t\t\tthrow new Error(\"Expected context_preparation execution\")\n\t\t}\n\n\t\tconst nextStateId = execution.output.streaming ? \"inference_streaming\" : \"inference\"\n\n\t\treturn {\n\t\t\tnextStateId,\n\t\t\tinput: execution.output,\n\t\t}\n\t}\n}\n\nexport class InferenceToFunctionCallRule implements LoopTransitionRule {\n\treadonly specification = new InferenceProducedFunctionCallSpecification()\n\n\tcreateTransition(execution: LoopStateExecution): LoopTransition<\"function_call\"> {\n\t\tif (\n\t\t\t(execution.stateId !== \"inference\" && execution.stateId !== \"inference_streaming\") ||\n\t\t\t!execution.output.items.some((item) => item.type === \"function_call\")\n\t\t) {\n\t\t\tthrow new Error(\"Expected inference function-call output\")\n\t\t}\n\n\t\tconst functionCallItem = execution.output.items.find((item) => item.type === \"function_call\")\n\n\t\tif (!functionCallItem) {\n\t\t\tthrow new Error(\"Expected inference function-call output\")\n\t\t}\n\n\t\treturn {\n\t\t\tnextStateId: \"function_call\",\n\t\t\tinput: {\n\t\t\t\tcall: functionCallItem,\n\t\t\t\tinferenceInput: execution.input,\n\t\t\t},\n\t\t}\n\t}\n}\n\nexport class InferenceToModelMessageRule implements LoopTransitionRule {\n\treadonly specification = new InferenceProducedModelMessageSpecification()\n\n\tcreateTransition(execution: LoopStateExecution): LoopTransition<\"model_message\"> {\n\t\tif (\n\t\t\t(execution.stateId !== \"inference\" && execution.stateId !== \"inference_streaming\") ||\n\t\t\t!execution.output.items.some((item) => item.type === \"message\" && item.role === \"assistant\")\n\t\t) {\n\t\t\tthrow new Error(\"Expected inference model-message output\")\n\t\t}\n\t\tconst modelMessageItem = execution.output.items.find(\n\t\t\t(item) => item.type === \"message\" && item.role === \"assistant\",\n\t\t) as ModelMessageItem\n\n\t\tif (!modelMessageItem) {\n\t\t\tthrow new Error(\"Expected inference model-message output\")\n\t\t}\n\t\texecution.input.context.addContextItem(modelMessageItem)\n\n\t\treturn {\n\t\t\tnextStateId: \"model_message\",\n\t\t\tinput: {\n\t\t\t\tanswer: modelMessageItem,\n\t\t\t},\n\t\t}\n\t}\n}\n\nexport class FunctionCallToInferenceRule implements LoopTransitionRule {\n\treadonly specification = new FunctionCallCompletedSpecification()\n\n\tcreateTransition(execution: LoopStateExecution): LoopTransition<\"inference\" | \"inference_streaming\"> {\n\t\tif (execution.stateId !== \"function_call\") {\n\t\t\tthrow new Error(\"Expected function_call execution\")\n\t\t}\n\n\t\tconst previousRequest = execution.input.inferenceInput\n\n\t\tpreviousRequest.context.addContextItems([execution.input.call, execution.output.item])\n\n\t\treturn {\n\t\t\tnextStateId: previousRequest.streaming ? \"inference_streaming\" : \"inference\",\n\t\t\tinput: {\n\t\t\t\t...previousRequest,\n\t\t\t},\n\t\t}\n\t}\n}\n\nexport class ModelMessageToIdleRule implements LoopTransitionRule {\n\treadonly specification = new ModelMessageCompletedSpecification()\n\n\tcreateTransition(execution: LoopStateExecution): LoopTransition<\"idle\"> {\n\t\tif (execution.stateId !== \"model_message\") {\n\t\t\tthrow new Error(\"Expected model_message execution\")\n\t\t}\n\n\t\treturn {\n\t\t\tnextStateId: \"idle\",\n\t\t\tinput: undefined,\n\t\t}\n\t}\n}\n","import { InferenceInput, InferenceOutput } from \"@app/states/inference\"\nimport { LoopTransition, ModelMessageParams, ReceivedMessage } from \"./loop-state\"\nimport { LoopVisitor } from \"./loop-visitor\"\nimport { FunctionCallOutputItem } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { FunctionCallParams } from \"@app/states/function-call\"\nimport { RuntimeService } from \"@app/services/runtime\"\nimport { RuntimeState } from \"../runtime-state\"\nimport { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\nimport { CloudClient, createCloudClient } from \"@mozaik-ai/cloud-sdk\"\nimport { Agent } from \"../participant/agent\"\n\nexport class EventPublisherLoopVisitor implements LoopVisitor {\n\tprivate readonly cloud: CloudClient\n\tconstructor(\n\t\tprivate readonly agentId: string,\n\t\tprivate readonly loopId: string,\n\t\tprivate readonly runtime: RuntimeService<RuntimeState>,\n\t) {\n\t\tthis.cloud = createCloudClient()\n\t}\n\n\tvisitMessageReceivedStarted(input: ReceivedMessage): void {\n\t\tthis.publish(\"message_received.started\", input)\n\t}\n\n\tvisitMessageReceivedCompleted(output: InferenceInput): void {\n\t\tthis.publish(\"message_received.completed\", output)\n\t}\n\n\tvisitInferenceStarted(input: InferenceInput): void {\n\t\tthis.publish(\"inference.started\", input)\n\t}\n\n\tvisitInferenceEvent(event: SemanticEvent): void {\n\t\tthis.publish(\"inference.stream\", event)\n\t}\n\n\tvisitInferenceCompleted(output: InferenceOutput): void {\n\t\tthis.publish(\"inference.completed\", output)\n\t}\n\n\tvisitFunctionCallStarted(input: FunctionCallParams): void {\n\t\tthis.publish(\"function_call.started\", input)\n\t}\n\n\tvisitFunctionCallCompleted(output: FunctionCallOutputItem): void {\n\t\tthis.publish(\"function_call.completed\", output)\n\t}\n\n\tvisitModelAnswer(input: ModelMessageParams): void {\n\t\tthis.publish(\"model.answer\", input)\n\t}\n\n\tvisitInterceptionStarted(transition: LoopTransition): void {\n\t\tthis.publish(\"interception.started\", transition)\n\t}\n\n\tvisitInterceptionFinished(transition: LoopTransition): void {\n\t\tthis.publish(\"interception.finished\", transition)\n\t}\n\n\tprivate publish<TPayload>(type: string, payload: TPayload): void {\n\t\tconst event = new SemanticEvent(type, this.agentId, new Date(), {\n\t\t\t...payload,\n\t\t\tloopId: this.loopId,\n\t\t})\n\t\tthis.runtime.publish(event)\n\n\t\tif (this.cloud.enabled) {\n\t\t\tconst participant = this.runtime.getParticipant(this.agentId)\n\t\t\tconst agent = participant as Agent\n\t\t\tif (agent) {\n\t\t\t\tthis.cloud.send({\n\t\t\t\t\t...event,\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\t...payload,\n\t\t\t\t\t\tloopId: this.loopId,\n\t\t\t\t\t\tagent: {\n\t\t\t\t\t\t\tmanifest: agent.getManifest(),\n\t\t\t\t\t\t\tdeveloperMessage: agent.getDeveloperMessage(),\n\t\t\t\t\t\t\ttools: agent.getTools(),\n\t\t\t\t\t\t\tmemory: agent.getMemory().getContext().getItems(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n}\n","import { LoopVisitor } from \"@domain/agentic-environment/loop/loop-visitor\"\nimport { LoopState } from \"@domain/agentic-environment/loop/loop-state\"\nimport { InferenceInput, InferenceOutput } from \"./inference\"\nimport { LoopStateExecution } from \"@domain/agentic-environment/loop/loop-state\"\nimport { InferenceRunner } from \"./inference\"\n\nexport class InferenceStreamingState implements LoopState<InferenceInput, LoopStateExecution<\"inference_streaming\">> {\n\treadonly id = \"inference_streaming\"\n\n\tconstructor(private readonly inferenceRunner: InferenceRunner) {}\n\n\tasync run(input: InferenceInput, loopVisitor: LoopVisitor): Promise<LoopStateExecution<\"inference_streaming\">> {\n\t\tloopVisitor.visitInferenceStarted(input)\n\n\t\tlet output: InferenceOutput | undefined = undefined\n\n\t\tfor await (const event of this.inferenceRunner.stream(input)) {\n\t\t\tloopVisitor.visitInferenceEvent(event)\n\n\t\t\tif (event.type === \"inference.output\") {\n\t\t\t\toutput = event.payload as InferenceOutput\n\t\t\t}\n\t\t}\n\n\t\tif (!output) {\n\t\t\tthrow new Error(\"Inference output not found\")\n\t\t}\n\n\t\tloopVisitor.visitInferenceCompleted(output)\n\n\t\treturn {\n\t\t\tstateId: \"inference_streaming\",\n\t\t\tinput,\n\t\t\toutput,\n\t\t}\n\t}\n}\n","import { RuntimeService } from \"@app/services/runtime\"\nimport { AgentLoop } from \"@domain/agentic-environment/loop/agent-loop\"\nimport { LoopStateExecutor } from \"@domain/agentic-environment/loop/state-executor\"\nimport { FunctionCallState } from \"@app/states/function-call\"\nimport { InferenceInput, InferenceState } from \"@app/states/inference\"\nimport { MessageReceivedState } from \"@app/states/message-received\"\nimport { ModelMessageState } from \"@app/states/model-message\"\nimport { TransitionResolver } from \"@domain/agentic-environment/loop/transition-resolver\"\nimport {\n\tFunctionCallToInferenceRule,\n\tInferenceToFunctionCallRule,\n\tInferenceToModelMessageRule,\n\tContextPreparationToInferenceRule,\n\tModelMessageToIdleRule,\n} from \"@domain/agentic-environment/loop/transition-rule\"\nimport { RuntimeState } from \"@domain/agentic-environment/runtime-state\"\nimport { EventPublisherLoopVisitor } from \"@domain/agentic-environment/loop/event-publisher-visitor\"\nimport { InferenceStreamingState } from \"@app/states/inference-streaming\"\nimport { InterceptionHandler } from \"@domain/agentic-environment/loop/interception\"\n\nexport function createRunLoop<TRuntimeState extends RuntimeState>(resolveRuntime: () => RuntimeService<TRuntimeState>) {\n\treturn function runLoop(\n\t\tagentId: string,\n\t\tmessage: string,\n\t\tinferenceInput: InferenceInput,\n\t\tinterceptionHandler?: InterceptionHandler,\n\t) {\n\t\tconst runtime = resolveRuntime()\n\t\tconst inferenceRunner = runtime.getInferenceRunner()\n\t\tconst functionCallRunner = runtime.getFunctionCallRunner()\n\n\t\tconst transitionResolver = new TransitionResolver([\n\t\t\t// High-priority interception rules would go first.\n\t\t\tnew ContextPreparationToInferenceRule(),\n\t\t\tnew InferenceToFunctionCallRule(),\n\t\t\tnew InferenceToModelMessageRule(),\n\t\t\tnew FunctionCallToInferenceRule(),\n\t\t\tnew ModelMessageToIdleRule(),\n\t\t])\n\n\t\tconst stateExecutor = new LoopStateExecutor(\n\t\t\tnew MessageReceivedState(),\n\t\t\tnew InferenceState(inferenceRunner),\n\t\t\tnew InferenceStreamingState(inferenceRunner),\n\t\t\tnew FunctionCallState(functionCallRunner),\n\t\t\tnew ModelMessageState(),\n\t\t)\n\n\t\tconst agentLoop = AgentLoop.create(stateExecutor, transitionResolver, interceptionHandler)\n\n\t\tconst loopVisitor = new EventPublisherLoopVisitor(agentId, agentLoop.getLoopId(), runtime)\n\n\t\tagentLoop.run(\n\t\t\t{\n\t\t\t\tcontent: message,\n\t\t\t\tinput: inferenceInput,\n\t\t\t},\n\t\t\tloopVisitor,\n\t\t)\n\t}\n}\n","import type { InferenceInput, InferenceItem, InferenceOutput } from \"@app/states/inference\"\nimport { DeveloperMessageItem } from \"@domain/model-context/context-item/client-item/developer-message\"\nimport { FunctionCallOutputItem } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { SystemMessageItem } from \"@domain/model-context/context-item/client-item/system-message\"\nimport { UserMessageItem } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { FunctionCallItem } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { ModelMessageItem } from \"@domain/model-context/context-item/model-item/model-message\"\nimport type { InferenceEndpointMapper } from \"@domain/generative-model/inference-endpoint-mapper\"\nimport { ReasoningItem } from \"@domain/model-context/context-item/model-item/reasoning\"\nimport { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/generative-model/token-usage\"\nimport type Anthropic from \"@anthropic-ai/sdk\"\n\nexport class AnthropicMessagesMapper implements InferenceEndpointMapper {\n\ttoRequest(inferenceInput: InferenceInput) {\n\t\tconst { messages, system } = this.mapContextItems(inferenceInput)\n\t\tconst outputConfig: any = {}\n\n\t\tconst request: any = {\n\t\t\tmodel: inferenceInput.model,\n\t\t\tmessages,\n\t\t}\n\n\t\trequest.max_tokens = inferenceInput.maxOutputTokens!\n\n\t\tif (system) {\n\t\t\trequest.system = system\n\t\t}\n\n\t\tif (inferenceInput.tools && inferenceInput.tools.length > 0) {\n\t\t\trequest.tools = inferenceInput.tools.map((tool) => ({\n\t\t\t\tname: tool.name,\n\t\t\t\tdescription: tool.description,\n\t\t\t\tinput_schema: tool.parameters,\n\t\t\t}))\n\t\t}\n\n\t\tif (inferenceInput.structuredOutput) {\n\t\t\toutputConfig.format = {\n\t\t\t\ttype: \"json_schema\",\n\t\t\t\tschema: inferenceInput.structuredOutput.schema,\n\t\t\t}\n\t\t}\n\n\t\tif (inferenceInput.reasoningEffort) {\n\t\t\trequest.thinking = { type: \"adaptive\" }\n\t\t\toutputConfig.effort = inferenceInput.reasoningEffort\n\t\t}\n\n\t\tif (Object.keys(outputConfig).length > 0) {\n\t\t\trequest.output_config = outputConfig\n\t\t}\n\n\t\tif (inferenceInput.streaming) {\n\t\t\trequest.stream = inferenceInput.streaming\n\t\t}\n\n\t\treturn request\n\t}\n\n\tprivate addContentBlock(messages: any[], role: \"user\" | \"assistant\", block: any): void {\n\t\tconst lastMessage = messages[messages.length - 1]\n\t\tif (lastMessage?.role === role) {\n\t\t\tlastMessage.content.push(block)\n\t\t\treturn\n\t\t}\n\n\t\tmessages.push({\n\t\t\trole: role,\n\t\t\tcontent: [block],\n\t\t})\n\t}\n\n\tmapContextItems(inferenceInput: InferenceInput): { messages: any[]; system?: string } {\n\t\tconst context = inferenceInput.context\n\t\tconst messages: any[] = []\n\t\tconst system: string[] = []\n\n\t\tfor (const item of context.getItems()) {\n\t\t\tif (item instanceof DeveloperMessageItem || item instanceof SystemMessageItem) {\n\t\t\t\tsystem.push(item.content.text)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof UserMessageItem) {\n\t\t\t\tthis.addContentBlock(messages, \"user\", { type: \"text\", text: item.content.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof ModelMessageItem) {\n\t\t\t\tthis.addContentBlock(messages, \"assistant\", { type: \"text\", text: item.content.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof ReasoningItem) {\n\t\t\t\tthis.addContentBlock(messages, \"assistant\", {\n\t\t\t\t\ttype: \"thinking\",\n\t\t\t\t\tthinking: item.content?.text ?? \"\",\n\t\t\t\t\tsignature: item.encryptedContent ?? \"\",\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof FunctionCallItem) {\n\t\t\t\tlet input: any\n\t\t\t\ttry {\n\t\t\t\t\tinput = JSON.parse(item.args)\n\t\t\t\t} catch {\n\t\t\t\t\tinput = item.args\n\t\t\t\t}\n\t\t\t\tthis.addContentBlock(messages, \"assistant\", {\n\t\t\t\t\ttype: \"tool_use\",\n\t\t\t\t\tid: item.callId,\n\t\t\t\t\tname: item.name,\n\t\t\t\t\tinput: input,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof FunctionCallOutputItem) {\n\t\t\t\tthis.addContentBlock(messages, \"user\", {\n\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\ttool_use_id: item.callId,\n\t\t\t\t\tcontent: item.output.text,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tmessages: messages,\n\t\t\tsystem: system.length > 0 ? system.join(\"\\n\\n\") : undefined,\n\t\t}\n\t}\n\n\textractTokenUsage(response: Anthropic.Messages.Message): TokenUsage | undefined {\n\t\tif (!response.usage) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn new TokenUsage(\n\t\t\tresponse.usage.input_tokens,\n\t\t\tresponse.usage.output_tokens,\n\t\t\tresponse.usage.input_tokens + response.usage.output_tokens,\n\t\t\tnew InputTokenDetails(\n\t\t\t\t(response.usage.cache_creation_input_tokens ?? 0) + (response.usage.cache_read_input_tokens ?? 0),\n\t\t\t),\n\t\t\tnew OutputTokenDetails(0),\n\t\t)\n\t}\n\n\ttoResponse(response: Anthropic.Messages.Message): InferenceOutput {\n\t\tconst items: InferenceItem[] = []\n\n\t\tfor (const block of response.content as any[]) {\n\t\t\tif (block.type === \"text\") {\n\t\t\t\titems.push(ModelMessageItem.rehydrate({ text: block.text }))\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (block.type === \"tool_use\") {\n\t\t\t\titems.push(\n\t\t\t\t\tFunctionCallItem.rehydrate({\n\t\t\t\t\t\tcallId: block.id,\n\t\t\t\t\t\tname: block.name,\n\t\t\t\t\t\targs: JSON.stringify(block.input ?? {}),\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (block.type === \"thinking\") {\n\t\t\t\titems.push(\n\t\t\t\t\tReasoningItem.rehydrate({\n\t\t\t\t\t\tcontent: block.thinking ? InputText.rehydrate({ text: block.thinking }) : undefined,\n\t\t\t\t\t\tencryptedContent: block.signature,\n\t\t\t\t\t\tsummary: [],\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\treturn { items, tokenUsage: this.extractTokenUsage(response), rowResponse: response }\n\t}\n}\n","import { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\nimport type { Endpoint } from \"@domain/generative-model/endpoint\"\nimport type { InferenceInput, InferenceOutput } from \"@app/states/inference\"\nimport { AnthropicMessagesMapper } from \"./anthropic-messages-mapper\"\nimport Anthropic from \"@anthropic-ai/sdk\"\nimport type { InferenceEndpointMapper } from \"@domain/generative-model/inference-endpoint-mapper\"\n\nexport interface AnthropicConnectionConfig {\n\tbaseURL?: string\n\tapiKey?: string\n}\n\n/**\n * Native Anthropic adapter on the `@anthropic-ai/sdk` (`messages.create`).\n * Maps domain context to Anthropic's `messages`/`content` blocks shape,\n * system prompt, tools, adaptive thinking, and structured output config.\n */\nexport class AnthropicMessages implements Endpoint {\n\tendpointMapper: InferenceEndpointMapper\n\tprivate _client?: Anthropic\n\tprivate readonly clientConfig: AnthropicConnectionConfig\n\n\tconstructor(\n\t\tendpointMapper: InferenceEndpointMapper = new AnthropicMessagesMapper(),\n\t\tconfig: AnthropicConnectionConfig = {},\n\t) {\n\t\tthis.endpointMapper = endpointMapper\n\t\tthis.clientConfig = config\n\t}\n\n\tprivate get client(): Anthropic {\n\t\treturn (this._client ??= new Anthropic({\n\t\t\tbaseURL: this.clientConfig.baseURL,\n\t\t\tapiKey: this.clientConfig.apiKey,\n\t\t}))\n\t}\n\n\tasync infer(inferenceInput: InferenceInput): Promise<InferenceOutput> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceInput)\n\t\tconst response = await this.client.messages.create(request)\n\n\t\treturn this.endpointMapper.toResponse(response)\n\t}\n\n\tasync *stream(inferenceInput: InferenceInput): AsyncIterable<SemanticEvent> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceInput)\n\t\tconst stream = this.client.messages.stream(request)\n\n\t\tfor await (const event of stream) {\n\t\t\tyield event as unknown as SemanticEvent\n\t\t}\n\n\t\tconst output = this.endpointMapper.toResponse(await stream.finalMessage())\n\n\t\tyield {\n\t\t\ttype: \"inference.output\",\n\t\t\tproducerId: request.model,\n\t\t\toccurredAt: new Date(),\n\t\t\tpayload: output,\n\t\t}\n\t}\n}\n","import { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\nimport type { InferenceOutput } from \"@app/states/inference\"\nimport type { Endpoint } from \"@domain/generative-model/endpoint\"\nimport OpenAI from \"openai\"\nimport type { InferenceInput } from \"@app/states/inference\"\nimport { OpenAIResponsesMapper } from \"./openai-responses-mapper\"\nimport type { InferenceEndpointMapper } from \"@domain/generative-model/inference-endpoint-mapper\"\n\nexport class OpenAIResponses implements Endpoint {\n\tendpointMapper: InferenceEndpointMapper\n\tprivate _client?: OpenAI\n\n\tconstructor(endpointMapper: InferenceEndpointMapper = new OpenAIResponsesMapper()) {\n\t\tthis.endpointMapper = endpointMapper\n\t}\n\n\tprivate get client(): OpenAI {\n\t\treturn (this._client ??= new OpenAI())\n\t}\n\n\tasync infer(inferenceInput: InferenceInput): Promise<InferenceOutput> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceInput)\n\t\tconst response = await this.client.responses.create(request)\n\n\t\treturn this.endpointMapper.toResponse(response)\n\t}\n\n\tasync *stream(inferenceInput: InferenceInput): AsyncIterable<SemanticEvent> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceInput)\n\t\tconst stream: any = await this.client.responses.create({ ...request, stream: true })\n\n\t\t// Only the terminal `response.completed` event carries the assembled\n\t\t// response; the deltas before it cannot be mapped to an InferenceOutput.\n\t\tlet completedResponse: any = undefined\n\t\tfor await (const event of stream) {\n\t\t\tif (event.type === \"response.completed\") {\n\t\t\t\tcompletedResponse = event.response\n\t\t\t}\n\n\t\t\tyield event\n\t\t}\n\n\t\tif (!completedResponse) {\n\t\t\tthrow new Error(\"Stream ended without a completed response\")\n\t\t}\n\n\t\tconst output = this.endpointMapper.toResponse(completedResponse)\n\n\t\tyield {\n\t\t\ttype: \"inference.output\",\n\t\t\tpayload: output,\n\t\t\toccurredAt: new Date(),\n\t\t\tproducerId: inferenceInput.model,\n\t\t}\n\t}\n}\n","import { ItemContent } from \"@domain/model-context/context-item/item-content/item-content\"\n\nexport class SummaryText extends ItemContent {\n\treadonly type = \"summary_text\"\n\n\tprivate constructor(public readonly text: string) {\n\t\tsuper()\n\t}\n\n\tstatic rehydrate(data: { text: string }): SummaryText {\n\t\treturn new SummaryText(data.text)\n\t}\n}\n","import type { InferenceInput, InferenceItem } from \"@app/states/inference\"\nimport type { InferenceEndpointMapper } from \"@domain/generative-model/inference-endpoint-mapper\"\nimport { DeveloperMessageItem } from \"@domain/model-context/context-item/client-item/developer-message\"\nimport { FunctionCallOutputItem } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { SystemMessageItem } from \"@domain/model-context/context-item/client-item/system-message\"\nimport { UserMessageItem } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { FunctionCallItem } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { ModelMessageItem } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { ReasoningItem } from \"@domain/model-context/context-item/model-item/reasoning\"\nimport { SummaryText } from \"@domain/model-context/context-item/item-content/summary-text\"\nimport { InferenceOutput } from \"@app/states/inference\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/generative-model/token-usage\"\nimport type OpenAI from \"openai\"\n\nexport class OpenAIResponsesMapper implements InferenceEndpointMapper {\n\ttoRequest(inferenceInput: InferenceInput): any {\n\t\tconst request: any = {\n\t\t\tmodel: inferenceInput.model,\n\t\t\tinput: this.mapContextItems(inferenceInput),\n\t\t}\n\n\t\tif (inferenceInput.tools && inferenceInput.tools.length > 0) {\n\t\t\trequest.tools = inferenceInput.tools.map((tool) => ({\n\t\t\t\ttype: tool.type,\n\t\t\t\tname: tool.name,\n\t\t\t\tdescription: tool.description,\n\t\t\t\tparameters: tool.parameters,\n\t\t\t}))\n\t\t}\n\n\t\tif (inferenceInput.reasoningEffort) {\n\t\t\trequest.reasoning = {\n\t\t\t\teffort: inferenceInput.reasoningEffort,\n\t\t\t}\n\t\t}\n\n\t\tif (inferenceInput.structuredOutput) {\n\t\t\tconst format = inferenceInput.structuredOutput\n\t\t\trequest.text = {\n\t\t\t\tformat: {\n\t\t\t\t\ttype: \"json_schema\",\n\t\t\t\t\tname: format.name ?? \"response\",\n\t\t\t\t\tschema: format.schema,\n\t\t\t\t\tstrict: format.strict ?? true,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tif (inferenceInput.streaming) {\n\t\t\trequest.stream = inferenceInput.streaming\n\t\t}\n\n\t\treturn request\n\t}\n\n\tmapContextItems(inferenceInput: InferenceInput): any[] {\n\t\tconst input: any[] = []\n\n\t\tfor (const item of inferenceInput.context.getItems()) {\n\t\t\tif (\n\t\t\t\titem instanceof DeveloperMessageItem ||\n\t\t\t\titem instanceof SystemMessageItem ||\n\t\t\t\titem instanceof UserMessageItem\n\t\t\t) {\n\t\t\t\tinput.push({\n\t\t\t\t\ttype: item.type,\n\t\t\t\t\trole: item.role,\n\t\t\t\t\tcontent: [{ type: \"input_text\", text: item.content.text }],\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof ModelMessageItem) {\n\t\t\t\tinput.push({\n\t\t\t\t\ttype: item.type,\n\t\t\t\t\trole: item.role,\n\t\t\t\t\tcontent: [{ type: \"output_text\", text: item.content.text }],\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof FunctionCallItem) {\n\t\t\t\tinput.push({\n\t\t\t\t\ttype: item.type,\n\t\t\t\t\tcall_id: item.callId,\n\t\t\t\t\tname: item.name,\n\t\t\t\t\targuments: item.args,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof FunctionCallOutputItem) {\n\t\t\t\tinput.push({\n\t\t\t\t\ttype: item.type,\n\t\t\t\t\tcall_id: item.callId,\n\t\t\t\t\toutput: [{ type: \"input_text\", text: item.output.text }],\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof ReasoningItem) {\n\t\t\t\tconst reasoningInput: Record<string, unknown> = {\n\t\t\t\t\ttype: item.type,\n\t\t\t\t\tsummary: item.summary.map((summary) => ({ type: \"summary_text\", text: summary.text })),\n\t\t\t\t}\n\t\t\t\tif (item.encryptedContent !== undefined) {\n\t\t\t\t\treasoningInput.encrypted_content = item.encryptedContent\n\t\t\t\t}\n\t\t\t\tinput.push(reasoningInput)\n\t\t\t}\n\t\t}\n\n\t\treturn input\n\t}\n\n\textractTokenUsage(response: OpenAI.Responses.Response): TokenUsage | undefined {\n\t\tif (!response.usage) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn new TokenUsage(\n\t\t\tresponse.usage.input_tokens,\n\t\t\tresponse.usage.output_tokens,\n\t\t\tresponse.usage.total_tokens,\n\t\t\tnew InputTokenDetails(response.usage.input_tokens_details?.cached_tokens ?? 0),\n\t\t\tnew OutputTokenDetails(response.usage.output_tokens_details?.reasoning_tokens ?? 0),\n\t\t)\n\t}\n\n\ttoResponse(response: any): InferenceOutput {\n\t\tconst items: InferenceItem[] = []\n\n\t\tfor (const item of response.output ?? []) {\n\t\t\tif (item.type === \"message\" && item.role === \"assistant\") {\n\t\t\t\tconst firstContent = item.content?.[0]\n\t\t\t\tif (firstContent) {\n\t\t\t\t\titems.push(ModelMessageItem.rehydrate(firstContent as { text: string }))\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (item.type === \"function_call\") {\n\t\t\t\titems.push(\n\t\t\t\t\tFunctionCallItem.rehydrate({\n\t\t\t\t\t\tcallId: item.call_id,\n\t\t\t\t\t\tname: item.name,\n\t\t\t\t\t\targs: item.arguments,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (item.type === \"reasoning\") {\n\t\t\t\titems.push(\n\t\t\t\t\tReasoningItem.rehydrate({\n\t\t\t\t\t\tcontent: undefined,\n\t\t\t\t\t\tencryptedContent: item.encrypted_content,\n\t\t\t\t\t\tsummary: (item.summary ?? []).map((summary: { text: string }) =>\n\t\t\t\t\t\t\tSummaryText.rehydrate({ text: summary.text }),\n\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\titems,\n\t\t\ttokenUsage: this.extractTokenUsage(response),\n\t\t\trowResponse: response,\n\t\t}\n\t}\n}\n","import { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\nimport { GoogleGenAI } from \"@google/genai\"\nimport type { Endpoint } from \"@domain/generative-model/endpoint\"\nimport type { InferenceInput, InferenceOutput } from \"@app/states/inference\"\nimport { GeminiGenerateContentMapper } from \"./gemini-generate-content-mapper\"\nimport type { InferenceEndpointMapper } from \"@domain/generative-model/inference-endpoint-mapper\"\n\nexport interface GeminiConnectionConfig {\n\tbaseURL?: string\n\tapiKey?: string\n}\n\n/**\n * Native Gemini adapter on the `@google/genai` SDK (`generateContent` /\n * `generateContentStream`). Unlike an OpenAI-compat shim this maps our\n * domain context to Gemini's native `contents`/`parts` shape, system\n * instruction, `functionDeclarations`, and `thinkingConfig`, and reads\n * thought parts + native usage metadata back out. Another `ModelRuntime`\n * — no runner or port changes.\n */\nexport class GeminiGenerateContent implements Endpoint {\n\tendpointMapper: InferenceEndpointMapper\n\tprivate _client?: GoogleGenAI\n\tprivate readonly clientConfig: GeminiConnectionConfig\n\n\tconstructor(\n\t\tendpointMapper: InferenceEndpointMapper = new GeminiGenerateContentMapper(),\n\t\tconfig: GeminiConnectionConfig = {},\n\t) {\n\t\tthis.endpointMapper = endpointMapper\n\t\tthis.clientConfig = config\n\t}\n\n\tprivate get client(): GoogleGenAI {\n\t\treturn (this._client ??= new GoogleGenAI({\n\t\t\tapiKey: this.clientConfig.apiKey ?? process.env.GEMINI_API_KEY,\n\t\t\t...(this.clientConfig.baseURL ? { httpOptions: { baseUrl: this.clientConfig.baseURL } } : {}),\n\t\t}))\n\t}\n\n\tasync infer(inferenceInput: InferenceInput): Promise<InferenceOutput> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceInput)\n\t\tconst response = await this.client.models.generateContent(request)\n\n\t\treturn this.endpointMapper.toResponse(response)\n\t}\n\n\tasync *stream(inferenceInput: InferenceInput): AsyncIterable<SemanticEvent> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceInput)\n\t\tconst stream: any = await this.client.models.generateContentStream(request)\n\n\t\tlet lastEvent: SemanticEvent | undefined = undefined\n\t\tfor await (const chunk of stream) {\n\t\t\tlastEvent = chunk\n\t\t\tyield chunk\n\t\t}\n\n\t\tif (!lastEvent) {\n\t\t\tthrow new Error(\"Last event not found\")\n\t\t}\n\n\t\tconst output = this.endpointMapper.toResponse(lastEvent)\n\n\t\tyield {\n\t\t\ttype: \"inference.output\",\n\t\t\tproducerId: request.model,\n\t\t\toccurredAt: new Date(),\n\t\t\tpayload: output,\n\t\t}\n\t}\n}\n","import type { InferenceInput, InferenceItem, InferenceOutput } from \"@app/states/inference\"\nimport type { InferenceEndpointMapper } from \"@domain/generative-model/inference-endpoint-mapper\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/generative-model/token-usage\"\nimport { DeveloperMessageItem } from \"@domain/model-context/context-item/client-item/developer-message\"\nimport { FunctionCallOutputItem } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { SystemMessageItem } from \"@domain/model-context/context-item/client-item/system-message\"\nimport { UserMessageItem } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\nimport { FunctionCallItem } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { ModelMessageItem } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { ReasoningItem } from \"@domain/model-context/context-item/model-item/reasoning\"\n\nexport class GeminiGenerateContentMapper implements InferenceEndpointMapper {\n\ttoRequest(inferenceInput: InferenceInput) {\n\t\tconst { contents, systemInstruction } = this.mapContextItems(inferenceInput)\n\t\tconst config: any = {}\n\n\t\tif (systemInstruction) {\n\t\t\tconfig.systemInstruction = systemInstruction\n\t\t}\n\n\t\tif (inferenceInput.tools && inferenceInput.tools.length > 0) {\n\t\t\tconfig.tools = [\n\t\t\t\t{\n\t\t\t\t\tfunctionDeclarations: inferenceInput.tools.map((tool) => ({\n\t\t\t\t\t\tname: tool.name,\n\t\t\t\t\t\tdescription: tool.description,\n\t\t\t\t\t\tparametersJsonSchema: tool.parameters,\n\t\t\t\t\t})),\n\t\t\t\t},\n\t\t\t]\n\t\t}\n\n\t\tif (inferenceInput.structuredOutput) {\n\t\t\tconfig.responseMimeType = \"application/json\"\n\t\t\tconfig.responseSchema = inferenceInput.structuredOutput.schema\n\t\t}\n\n\t\tif (inferenceInput.reasoningEffort) {\n\t\t\tconfig.thinkingConfig = {\n\t\t\t\tthinkingLevel: inferenceInput.reasoningEffort,\n\t\t\t\tincludeThoughts: true,\n\t\t\t}\n\t\t}\n\n\t\tconst request: any = {\n\t\t\tmodel: inferenceInput.model,\n\t\t\tcontents,\n\t\t\tconfig,\n\t\t}\n\n\t\tif (inferenceInput.streaming) {\n\t\t\trequest.stream = inferenceInput.streaming\n\t\t}\n\n\t\treturn request\n\t}\n\n\tmapContextItems(inferenceInput: InferenceInput): { contents: any[]; systemInstruction?: string } {\n\t\tconst context = inferenceInput.context\n\t\tconst contents: any[] = []\n\t\tconst system: string[] = []\n\t\tconst callNames = new Map<string, string>()\n\n\t\tfor (const item of context.getItems()) {\n\t\t\tif (item instanceof DeveloperMessageItem || item instanceof SystemMessageItem) {\n\t\t\t\tsystem.push(item.content.text)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof UserMessageItem) {\n\t\t\t\tthis.addPart(contents, \"user\", { text: item.content.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof ModelMessageItem) {\n\t\t\t\tthis.addPart(contents, \"model\", { text: item.content.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof FunctionCallItem) {\n\t\t\t\tcallNames.set(item.callId, item.name)\n\t\t\t\tlet args: any\n\t\t\t\ttry {\n\t\t\t\t\targs = JSON.parse(item.args)\n\t\t\t\t} catch {\n\t\t\t\t\targs = {}\n\t\t\t\t}\n\t\t\t\tthis.addPart(contents, \"model\", { functionCall: { id: item.callId, name: item.name, args } })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof FunctionCallOutputItem) {\n\t\t\t\tthis.addPart(contents, \"user\", {\n\t\t\t\t\tfunctionResponse: {\n\t\t\t\t\t\tid: item.callId,\n\t\t\t\t\t\tname: callNames.get(item.callId) ?? \"\",\n\t\t\t\t\t\tresponse: this.parseResponse(item.output.text),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tcontents,\n\t\t\tsystemInstruction: system.length > 0 ? system.join(\"\\n\\n\") : undefined,\n\t\t}\n\t}\n\n\tprivate addPart(contents: any[], role: \"user\" | \"model\", part: any): void {\n\t\tconst last = contents[contents.length - 1]\n\t\tif (last?.role === role) {\n\t\t\tlast.parts.push(part)\n\t\t\treturn\n\t\t}\n\n\t\tcontents.push({ role, parts: [part] })\n\t}\n\n\tprivate parseResponse(output: string): any {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(output)\n\t\t\treturn parsed && typeof parsed === \"object\" ? parsed : { output }\n\t\t} catch {\n\t\t\treturn { output }\n\t\t}\n\t}\n\n\textractTokenUsage(response: any): TokenUsage | undefined {\n\t\tconst usage = response.usageMetadata\n\t\tif (!usage) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn new TokenUsage(\n\t\t\tusage.promptTokenCount ?? 0,\n\t\t\tusage.candidatesTokenCount ?? 0,\n\t\t\tusage.totalTokenCount ?? 0,\n\t\t\tnew InputTokenDetails(usage.cachedContentTokenCount ?? 0),\n\t\t\tnew OutputTokenDetails(usage.thoughtsTokenCount ?? 0),\n\t\t)\n\t}\n\n\ttoResponse(response: any): InferenceOutput {\n\t\tconst items: InferenceItem[] = []\n\t\tconst parts = response.candidates?.[0]?.content?.parts ?? []\n\n\t\tfor (const part of parts) {\n\t\t\tif (part.thought && part.text) {\n\t\t\t\titems.push(\n\t\t\t\t\tReasoningItem.rehydrate({\n\t\t\t\t\t\tcontent: InputText.rehydrate({ text: part.text }),\n\t\t\t\t\t\tencryptedContent: undefined,\n\t\t\t\t\t\tsummary: [],\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (part.text) {\n\t\t\t\titems.push(ModelMessageItem.rehydrate({ text: part.text }))\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (part.functionCall) {\n\t\t\t\titems.push(\n\t\t\t\t\tFunctionCallItem.rehydrate({\n\t\t\t\t\t\tcallId: part.functionCall.id ?? \"\",\n\t\t\t\t\t\tname: part.functionCall.name,\n\t\t\t\t\t\targs: JSON.stringify(part.functionCall.args ?? {}),\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\treturn { items, tokenUsage: this.extractTokenUsage(response), rowResponse: response }\n\t}\n}\n","import type { InferenceInput, InferenceItem, InferenceOutput } from \"@app/states/inference\"\nimport type { InferenceEndpointMapper } from \"@domain/generative-model/inference-endpoint-mapper\"\nimport { DeveloperMessageItem } from \"@domain/model-context/context-item/client-item/developer-message\"\nimport { FunctionCallOutputItem } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { SystemMessageItem } from \"@domain/model-context/context-item/client-item/system-message\"\nimport { UserMessageItem } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { FunctionCallItem } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { ModelMessageItem } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\nimport { ReasoningItem } from \"@domain/model-context/context-item/model-item/reasoning\"\nimport type { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/generative-model/token-usage\"\n\nexport class OpenAIChatCompletionsMapper implements InferenceEndpointMapper {\n\ttoRequest(inferenceInput: InferenceInput) {\n\t\tconst request: any = {\n\t\t\tmodel: inferenceInput.model,\n\t\t\tmessages: this.mapContextItems(inferenceInput),\n\t\t}\n\n\t\tif (inferenceInput.tools && inferenceInput.tools.length > 0) {\n\t\t\trequest.tools = inferenceInput.tools.map((tool) => ({\n\t\t\t\ttype: \"function\",\n\t\t\t\tfunction: {\n\t\t\t\t\tname: tool.name,\n\t\t\t\t\tdescription: tool.description,\n\t\t\t\t\tparameters: tool.parameters,\n\t\t\t\t},\n\t\t\t}))\n\t\t}\n\n\t\tif (inferenceInput.reasoningEffort) {\n\t\t\trequest.reasoning_effort = inferenceInput.reasoningEffort\n\t\t}\n\n\t\tif (inferenceInput.streaming) {\n\t\t\trequest.stream = inferenceInput.streaming\n\t\t}\n\n\t\treturn request\n\t}\n\n\tmapContextItems(inferenceInput: InferenceInput): any[] {\n\t\tconst messages: any[] = []\n\n\t\tfor (const item of inferenceInput.context.getItems()) {\n\t\t\tif (item instanceof DeveloperMessageItem || item instanceof SystemMessageItem) {\n\t\t\t\tmessages.push({ role: \"system\", content: item.content.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof UserMessageItem) {\n\t\t\t\tmessages.push({ role: \"user\", content: item.content.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof ModelMessageItem) {\n\t\t\t\tmessages.push({ role: \"assistant\", content: item.content.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof FunctionCallItem) {\n\t\t\t\tconst toolCall = {\n\t\t\t\t\tid: item.callId,\n\t\t\t\t\ttype: \"function\",\n\t\t\t\t\tfunction: { name: item.name, arguments: item.args },\n\t\t\t\t}\n\t\t\t\tconst last = messages[messages.length - 1]\n\t\t\t\tif (last?.role === \"assistant\") {\n\t\t\t\t\tlast.tool_calls = last.tool_calls ?? []\n\t\t\t\t\tlast.tool_calls.push(toolCall)\n\t\t\t\t} else {\n\t\t\t\t\tmessages.push({ role: \"assistant\", content: null, tool_calls: [toolCall] })\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof FunctionCallOutputItem) {\n\t\t\t\tmessages.push({ role: \"tool\", tool_call_id: item.callId, content: item.output.text })\n\t\t\t}\n\t\t}\n\n\t\treturn messages\n\t}\n\n\textractTokenUsage(response: any): TokenUsage | undefined {\n\t\tif (!response.usage) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn new TokenUsage(\n\t\t\tresponse.usage.prompt_tokens,\n\t\t\tresponse.usage.completion_tokens,\n\t\t\tresponse.usage.total_tokens,\n\t\t\tnew InputTokenDetails(response.usage.prompt_tokens_details?.cached_tokens ?? 0),\n\t\t\tnew OutputTokenDetails(response.usage.completion_tokens_details?.reasoning_tokens ?? 0),\n\t\t)\n\t}\n\n\ttoResponse(response: any): InferenceOutput {\n\t\tconst items: InferenceItem[] = []\n\t\tconst message = response.choices?.[0]?.message\n\t\tif (!message) {\n\t\t\treturn { items: [], tokenUsage: this.extractTokenUsage(response), rowResponse: response }\n\t\t}\n\n\t\tif (message.reasoning_content) {\n\t\t\titems.push(\n\t\t\t\tReasoningItem.rehydrate({\n\t\t\t\t\tcontent: InputText.rehydrate({ text: message.reasoning_content }),\n\t\t\t\t\tencryptedContent: undefined,\n\t\t\t\t\tsummary: [],\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\n\t\tif (message.content) {\n\t\t\titems.push(ModelMessageItem.rehydrate({ text: message.content }))\n\t\t}\n\n\t\tfor (const toolCall of message.tool_calls ?? []) {\n\t\t\titems.push(\n\t\t\t\tFunctionCallItem.rehydrate({\n\t\t\t\t\tcallId: toolCall.id,\n\t\t\t\t\tname: toolCall.function.name,\n\t\t\t\t\targs: toolCall.function.arguments,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\n\t\treturn { items, tokenUsage: this.extractTokenUsage(response), rowResponse: response }\n\t}\n}\n","import type { InferenceOutput } from \"@app/states/inference\"\nimport { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\nimport type { Endpoint } from \"@domain/generative-model/endpoint\"\nimport { OpenAIChatCompletionsMapper } from \"./openai-chat-completions-mapper\"\nimport type { InferenceInput } from \"@app/states/inference\"\nimport OpenAI from \"openai\"\nimport type { InferenceEndpointMapper } from \"@domain/generative-model/inference-endpoint-mapper\"\n\n/**\n * Optional connection config. When omitted, the `openai` SDK reads\n * `OPENAI_API_KEY` and `OPENAI_BASE_URL` from the environment, so the\n * default-constructed runtime targets whatever `OPENAI_BASE_URL` points\n * at (real OpenAI when unset). Provider presets (e.g. DeepSeek) pass an\n * explicit base URL + credential.\n */\nexport interface OpenAICompatibleConfig {\n\tbaseURL?: string\n\tapiKey?: string\n\t/**\n\t * Extra request-body fields merged into every `chat.completions`\n\t * call. This is how provider-specific quirks are handled **without\n\t * a per-provider subclass in mozaik** — the consumer supplies the\n\t * vendor-only fields (e.g. DeepSeek's `{ thinking: { type } }`,\n\t * safety flags, routing hints). Standard fields the runtime already\n\t * sets (`model`, `messages`, `tools`, `reasoning_effort`) take\n\t * precedence and are not overwritten.\n\t */\n\textraBody?: Record<string, unknown>\n}\n\n/**\n * Generic adapter for any **OpenAI Chat Completions**-compatible\n * endpoint — real OpenAI, DeepSeek, Xiaomi MiMo, OpenRouter, vLLM,\n * Ollama, etc. It speaks `/chat/completions` (not the Responses API),\n * which is the dialect third-party OpenAI-compatible providers expose.\n *\n * The base URL and credential are configurable; everything else (the\n * `ModelContext` ⇄ chat-message conversion, tool-call round-trip, token\n * usage extraction) is provider-agnostic. Provider-specific request\n * shaping (e.g. DeepSeek's `thinking` field) is supplied by the\n * consumer via {@link OpenAICompatibleConfig.extraBody} — mozaik stays\n * generic and gains no per-provider subclasses.\n *\n * Was `DeepSeekChatCompletions`; generalized so consumers can point it\n * at any OpenAI-compatible endpoint.\n */\nexport class OpenAIChatCompletions implements Endpoint {\n\tendpointMapper: InferenceEndpointMapper\n\tprivate _client?: OpenAI\n\tprivate readonly clientConfig: OpenAICompatibleConfig\n\tprivate readonly extraBody: Record<string, unknown>\n\n\tconstructor(\n\t\tendpointMapper: InferenceEndpointMapper = new OpenAIChatCompletionsMapper(),\n\t\tconfig: OpenAICompatibleConfig = {},\n\t) {\n\t\tthis.endpointMapper = endpointMapper\n\t\tthis.clientConfig = config\n\t\tthis.extraBody = config.extraBody ?? {}\n\t}\n\n\tprivate get client(): OpenAI {\n\t\t// Passing `undefined` for baseURL/apiKey lets the SDK fall back\n\t\t// to OPENAI_BASE_URL / OPENAI_API_KEY from the environment.\n\t\treturn (this._client ??= new OpenAI({\n\t\t\tbaseURL: this.clientConfig.baseURL,\n\t\t\tapiKey: this.clientConfig.apiKey,\n\t\t}))\n\t}\n\n\tprivate buildRequest(inferenceInput: InferenceInput): any {\n\t\treturn {\n\t\t\t...this.extraBody,\n\t\t\t...this.endpointMapper.toRequest(inferenceInput),\n\t\t}\n\t}\n\n\tasync infer(inferenceInput: InferenceInput): Promise<InferenceOutput> {\n\t\tconst response = await this.client.chat.completions.create(this.buildRequest(inferenceInput))\n\n\t\treturn this.endpointMapper.toResponse(response)\n\t}\n\n\tasync *stream(inferenceInput: InferenceInput): AsyncIterable<SemanticEvent> {\n\t\tconst stream = this.client.chat.completions.stream(this.buildRequest(inferenceInput))\n\n\t\tfor await (const chunk of stream) {\n\t\t\tyield chunk as unknown as SemanticEvent\n\t\t}\n\n\t\tconst output = this.endpointMapper.toResponse(await stream.finalChatCompletion())\n\n\t\tyield {\n\t\t\ttype: \"inference.output\",\n\t\t\tpayload: output,\n\t\t\toccurredAt: new Date(),\n\t\t\tproducerId: inferenceInput.model,\n\t\t}\n\t}\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const claudeSonnet46Specification: ModelSpecification = {\n\tname: \"claude-sonnet-4-6\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 200_000,\n\tmaxOutputTokens: 64_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const claudeOpus48Specification: ModelSpecification = {\n\tname: \"claude-opus-4-8\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 200_000,\n\tmaxOutputTokens: 32_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const claudeOpus47Specification: ModelSpecification = {\n\tname: \"claude-opus-4-7\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 200_000,\n\tmaxOutputTokens: 32_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const gemini35FlashSpecification: ModelSpecification = {\n\tname: \"gemini-3.5-flash\",\n\tprovider: \"google\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"high\", \"medium\", \"low\", \"minimal\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_048_576,\n\tmaxOutputTokens: 64_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const gemini31ProSpecification: ModelSpecification = {\n\tname: \"gemini-3.1-pro-preview\",\n\tprovider: \"google\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"high\", \"medium\", \"low\", \"minimal\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_048_576,\n\tmaxOutputTokens: 64_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const deepSeekV4FlashSpecification: ModelSpecification = {\n\tname: \"deepseek-v4-flash\",\n\tprovider: \"deepseek\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_000_000,\n\tmaxOutputTokens: 384_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: false,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const deepSeekV4ProSpecification: ModelSpecification = {\n\tname: \"deepseek-v4-pro\",\n\tprovider: \"deepseek\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_000_000,\n\tmaxOutputTokens: 384_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: false,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const gpt54Specification: ModelSpecification = {\n\tname: \"gpt-5.4\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"xhigh\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_050_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const gpt54MiniSpecification: ModelSpecification = {\n\tname: \"gpt-5.4-mini\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"xhigh\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 400_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const gpt54NanoSpecification: ModelSpecification = {\n\tname: \"gpt-5.4-nano\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"xhigh\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 400_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const gpt55Specification: ModelSpecification = {\n\tname: \"gpt-5.5\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"xhigh\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_050_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const claudeHaiku45Specification: ModelSpecification = {\n\tname: \"claude-haiku-4-5\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 200_000,\n\tmaxOutputTokens: 64_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import { AnthropicMessages } from \"@infra/providers/anthropic/endpoints/anthropic-messages\"\nimport { OpenAIResponses } from \"@infra/providers/openai/endpoints/openai-responses\"\nimport { GeminiGenerateContent } from \"@infra/providers/gemini/endpoints/gemini-generate-content\"\nimport { OpenAIChatCompletions } from \"@infra/providers/openai/endpoints/openai-chat-completions\"\nimport { claudeSonnet46Specification } from \"@infra/providers/anthropic/models/claude-4-6-sonnet\"\nimport { claudeOpus48Specification } from \"@infra/providers/anthropic/models/claude-4-8-opus\"\nimport { claudeOpus47Specification } from \"@infra/providers/anthropic/models/claude-4-7-opus\"\nimport { gemini35FlashSpecification } from \"@infra/providers/gemini/models/gemini-3-5-flash\"\nimport { gemini31ProSpecification } from \"@infra/providers/gemini/models/gemini-3-1-pro\"\nimport { deepSeekV4FlashSpecification } from \"@infra/providers/deepseek/models/deepseek-v4-flash\"\nimport { deepSeekV4ProSpecification } from \"@infra/providers/deepseek/models/deepseek-v4-pro\"\nimport { gpt54Specification } from \"@infra/providers/openai/models/gpt-5-4\"\nimport { gpt54MiniSpecification } from \"@infra/providers/openai/models/gpt-5-4-mini\"\nimport { gpt54NanoSpecification } from \"@infra/providers/openai/models/gpt-5-4-nano\"\nimport { gpt55Specification } from \"@infra/providers/openai/models/gpt-5-5\"\nimport { claudeHaiku45Specification } from \"@infra/providers/anthropic/models/claude-4-5-haiku\"\nimport type { GenerativeModel } from \"@domain/generative-model/generative-model\"\n\nexport const supportedModels: GenerativeModel[] = [\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt54Specification,\n\t},\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt54MiniSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt54NanoSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt55Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeHaiku45Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeSonnet46Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeOpus47Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeOpus48Specification,\n\t},\n\t{\n\t\tendpoint: new GeminiGenerateContent(),\n\t\tspecification: gemini35FlashSpecification,\n\t},\n\t{\n\t\tendpoint: new GeminiGenerateContent(),\n\t\tspecification: gemini31ProSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIChatCompletions(),\n\t\tspecification: deepSeekV4FlashSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIChatCompletions(),\n\t\tspecification: deepSeekV4ProSpecification,\n\t},\n]\n","import type { InferenceInput } from \"@app/states/inference\"\nimport type { RequestValidationRule } from \"./rule\"\nimport type { ModelSpecification } from \"../generative-model\"\n\nexport class ReasoningEffortValidation implements RequestValidationRule {\n\treadonly name = \"reasoning-effort\"\n\n\tisValid(inferenceInput: InferenceInput, model: ModelSpecification): boolean {\n\t\tif (inferenceInput.reasoningEffort === undefined) {\n\t\t\treturn true\n\t\t}\n\n\t\tif (!model.supportsReasoningEffort) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn model.supportedReasoningEfforts.includes(inferenceInput.reasoningEffort)\n\t}\n}\n","import type { RequestValidationRule } from \"./rule\"\nimport type { ModelSpecification } from \"../generative-model\"\nimport type { InferenceInput } from \"@app/states/inference\"\n\nexport class ToolCallingValidation implements RequestValidationRule {\n\treadonly name = \"tool-calling\"\n\n\tisValid(inferenceInput: InferenceInput, model: ModelSpecification): boolean {\n\t\tif (inferenceInput.tools === undefined) {\n\t\t\treturn true\n\t\t}\n\n\t\treturn model.supportsFunctionCalling\n\t}\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\nimport type { RequestValidationRule } from \"./rule\"\nimport type { InferenceInput } from \"@app/states/inference\"\n\nexport class StreamingValidation implements RequestValidationRule {\n\treadonly name = \"streaming\"\n\n\tisValid(inferenceInput: InferenceInput, model: ModelSpecification): boolean {\n\t\tif (!inferenceInput.streaming) {\n\t\t\treturn true\n\t\t}\n\n\t\treturn model.supportsStreaming\n\t}\n}\n","import type { InferenceInput } from \"@app/states/inference\"\nimport type { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { DeveloperMessageItem } from \"@domain/model-context/context-item/client-item/developer-message\"\nimport { SystemMessageItem } from \"@domain/model-context/context-item/client-item/system-message\"\nimport { UserMessageItem } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { ModelMessageItem } from \"@domain/model-context/context-item/model-item/model-message\"\nimport type { RequestValidationRule } from \"./rule\"\nimport type { ModelSpecification } from \"../generative-model\"\n\nfunction getContextItemValidationKey(item: ContextItem): string {\n\tif (item instanceof UserMessageItem) {\n\t\treturn \"user_message\"\n\t}\n\tif (item instanceof SystemMessageItem) {\n\t\treturn \"system_message\"\n\t}\n\tif (item instanceof DeveloperMessageItem) {\n\t\treturn \"developer_message\"\n\t}\n\tif (item instanceof ModelMessageItem) {\n\t\treturn \"model_message\"\n\t}\n\treturn item.getType()\n}\n\nexport class ContextValidation implements RequestValidationRule {\n\treadonly name = \"context\"\n\n\tisValid(inferenceInput: InferenceInput, model: ModelSpecification): boolean {\n\t\treturn inferenceInput.context.items.every((item) =>\n\t\t\tmodel.supportedContextItemTypes.includes(getContextItemValidationKey(item)),\n\t\t)\n\t}\n}\n","import type { InferenceInput } from \"@app/states/inference\"\nimport type { ModelSpecification } from \"../generative-model\"\nimport type { RequestValidationRule } from \"./rule\"\nimport { ReasoningEffortValidation } from \"./reasoning-effort\"\nimport { ToolCallingValidation } from \"./tool-calling\"\nimport { StreamingValidation } from \"./streaming\"\nimport { StructuredOutputValidation } from \"./structured-output\"\nimport { ContextValidation } from \"./context\"\n\nexport const defaultRequestValidationRules: RequestValidationRule[] = [\n\tnew ReasoningEffortValidation(),\n\tnew ToolCallingValidation(),\n\tnew StreamingValidation(),\n\tnew StructuredOutputValidation(),\n\tnew ContextValidation(),\n]\n\nexport class InferenceInputValidator {\n\tconstructor(private readonly rules: RequestValidationRule[] = defaultRequestValidationRules) {}\n\n\tvalidate(inferenceInput: InferenceInput, model: ModelSpecification): void {\n\t\tfor (const rule of this.rules) {\n\t\t\tif (!rule.isValid(inferenceInput, model)) {\n\t\t\t\tthrow new Error(`Request validation \"${rule.name}\" failed for model \"${model.name}\"`)\n\t\t\t}\n\t\t}\n\t}\n}\n","import type { InferenceInput, InferenceOutput, InferenceRunner } from \"@app/states/inference\"\nimport type { InferenceInputValidator } from \"@domain/generative-model/request-validation/inference-request-validator\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\n\nexport type InferenceCompletedParams = { answer: string; producerId: string; price?: number }\n\nexport class DefaultInferenceRunner implements InferenceRunner {\n\tconstructor(\n\t\tprivate readonly supportedModels: GenerativeModel[],\n\t\tprivate readonly requestValidator: InferenceInputValidator,\n\t) {}\n\n\tasync run(input: InferenceInput): Promise<InferenceOutput> {\n\t\tconst generativeModel = this.supportedModels.find((model) => model.specification.name === input.model)\n\t\tif (!generativeModel) {\n\t\t\tthrow new Error(`Unsupported model: ${input.model}`)\n\t\t}\n\n\t\tthis.requestValidator.validate(input, generativeModel.specification)\n\n\t\treturn await generativeModel.endpoint.infer(input)\n\t}\n\n\tasync *stream(input: InferenceInput): AsyncGenerator<SemanticEvent> {\n\t\tconst generativeModel = this.supportedModels.find((model) => model.specification.name === input.model)\n\t\tif (!generativeModel) {\n\t\t\tthrow new Error(`Unsupported model: ${input.model}`)\n\t\t}\n\n\t\tthis.requestValidator.validate(input, generativeModel.specification)\n\n\t\tyield* generativeModel.endpoint.stream(input)\n\t}\n}\n","import { FunctionCallRunner } from \"@app/states/function-call\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { FunctionCallOutputItem } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { FunctionCallItem } from \"@domain/model-context/context-item/model-item/function-call\"\n\nexport class DefaultFunctionCallRunner implements FunctionCallRunner {\n\tasync run(input: FunctionCallItem, tool: Tool): Promise<FunctionCallOutputItem> {\n\t\ttry {\n\t\t\tconst result = await tool.invoke(JSON.parse(input.args))\n\t\t\treturn FunctionCallOutputItem.create(input.callId, JSON.stringify(result))\n\t\t} catch (error) {\n\t\t\treturn FunctionCallOutputItem.create(input.callId, `Error calling tool: ${error}`)\n\t\t}\n\t}\n}\n","import { RuntimeService } from \"@app/services/runtime\"\nimport { RuntimeState } from \"@domain/agentic-environment/runtime-state\"\nimport { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\n\nexport function createSendEvent<TRuntimeState extends RuntimeState>(\n\tresolveRuntime: () => RuntimeService<TRuntimeState>,\n) {\n\treturn function sendEvent(event: SemanticEvent, senderId: string): void {\n\t\tconst runtime = resolveRuntime()\n\t\tconst participant = runtime.getParticipant(senderId)\n\t\tif (!participant) {\n\t\t\tthrow new Error(`Participant ${senderId} not found`)\n\t\t}\n\n\t\truntime.publish(event)\n\t}\n}\n","import { RuntimeService } from \"@app/services/runtime\"\nimport { Participant } from \"@domain/agentic-environment/participant/participant\"\nimport { RuntimeState } from \"@domain/agentic-environment/runtime-state\"\nimport { EventProcessor } from \"@domain/agentic-environment/semantic-event/event-processor\"\nimport { createJoin } from \"./application/use-cases/join\"\nimport { createLeave } from \"./application/use-cases/leave\"\nimport { createSendMessage } from \"./application/use-cases/send-message\"\nimport { createRunLoop } from \"@app/use-cases/run-loop\"\nimport { InferenceRunner } from \"@app/states/inference\"\nimport { supportedModels } from \"@app/services/models\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { InferenceInputValidator } from \"@domain/generative-model/request-validation/inference-request-validator\"\nimport { DefaultInferenceRunner } from \"@app/services/inference-runner\"\nimport { DefaultFunctionCallRunner } from \"@app/services/function-call\"\nimport { createSendEvent } from \"@app/use-cases/send-event\"\n\nexport type InferenceRunnerConfig = {\n\tsupportedModels?: GenerativeModel[]\n\trunner?: InferenceRunner\n}\n\nexport function defineRuntime<TRuntimeState extends RuntimeState>() {\n\tlet runtime: RuntimeService<TRuntimeState> | null = null\n\tconst processor = new EventProcessor()\n\n\tfunction initializeRuntime(config: {\n\t\tstate: TRuntimeState\n\t\tinferenceRunnerConfig?: InferenceRunnerConfig\n\t}): RuntimeService<TRuntimeState> {\n\t\tif (runtime) {\n\t\t\tthrow new Error(\"Runtime already initialized\")\n\t\t}\n\n\t\tconst inferenceRunner =\n\t\t\tconfig.inferenceRunnerConfig?.runner ??\n\t\t\tnew DefaultInferenceRunner(\n\t\t\t\tconfig.inferenceRunnerConfig?.supportedModels ?? supportedModels,\n\t\t\t\tnew InferenceInputValidator(),\n\t\t\t)\n\n\t\tconst functionCallRunner = new DefaultFunctionCallRunner()\n\n\t\truntime = new RuntimeService(config.state, processor, inferenceRunner, functionCallRunner)\n\n\t\treturn runtime\n\t}\n\n\tfunction resolveRuntime(): RuntimeService<TRuntimeState> {\n\t\tif (!runtime) {\n\t\t\tthrow new Error(\"Runtime not initialized\")\n\t\t}\n\n\t\treturn runtime\n\t}\n\n\tfunction resolveParticipant(id: string): Participant {\n\t\tif (!runtime) {\n\t\t\tthrow new Error(\"Runtime not initialized\")\n\t\t}\n\n\t\tconst participant = runtime.state.getParticipant(id)\n\n\t\tif (!participant) {\n\t\t\tthrow new Error(`Participant ${id} not found`)\n\t\t}\n\n\t\treturn participant\n\t}\n\n\tconst join = createJoin(resolveRuntime)\n\tconst leave = createLeave(resolveRuntime)\n\tconst sendMessage = createSendMessage(resolveRuntime)\n\tconst sendEvent = createSendEvent(resolveRuntime)\n\tconst runLoop = createRunLoop(resolveRuntime)\n\n\treturn {\n\t\tinitializeRuntime,\n\t\tresolveRuntime,\n\t\tresolveParticipant,\n\t\tjoin,\n\t\tleave,\n\t\tsendMessage,\n\t\tsendEvent,\n\t\trunLoop,\n\t}\n}\n","import { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\nimport { Participant } from \"../participant/participant\"\n\nexport type SituationContext<TEvent extends SemanticEvent = SemanticEvent> = {\n\treadonly event: TEvent\n\treadonly participant: Participant\n}\n\nexport abstract class SituationSpecification<TEvent extends SemanticEvent = SemanticEvent> {\n\tabstract isSatisfiedBy(situationContext: SituationContext<TEvent>): boolean\n\n\tand(other: SituationSpecification<TEvent>): SituationSpecification<TEvent> {\n\t\treturn new AndSituationSpecification(this, other)\n\t}\n\n\tor(other: SituationSpecification<TEvent>): SituationSpecification<TEvent> {\n\t\treturn new OrSituationSpecification(this, other)\n\t}\n\n\tnot(): SituationSpecification<TEvent> {\n\t\treturn new NotSituationSpecification(this)\n\t}\n}\n\nclass AndSituationSpecification<TEvent extends SemanticEvent> extends SituationSpecification<TEvent> {\n\tconstructor(\n\t\tprivate readonly left: SituationSpecification<TEvent>,\n\t\tprivate readonly right: SituationSpecification<TEvent>,\n\t) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(situationContext: SituationContext<TEvent>): boolean {\n\t\treturn this.left.isSatisfiedBy(situationContext) && this.right.isSatisfiedBy(situationContext)\n\t}\n}\n\nclass OrSituationSpecification<TEvent extends SemanticEvent> extends SituationSpecification<TEvent> {\n\tconstructor(\n\t\tprivate readonly left: SituationSpecification<TEvent>,\n\t\tprivate readonly right: SituationSpecification<TEvent>,\n\t) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(situationContext: SituationContext<TEvent>): boolean {\n\t\treturn this.left.isSatisfiedBy(situationContext) || this.right.isSatisfiedBy(situationContext)\n\t}\n}\n\nclass NotSituationSpecification<TEvent extends SemanticEvent> extends SituationSpecification<TEvent> {\n\tconstructor(private readonly rule: SituationSpecification<TEvent>) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(situationContext: SituationContext<TEvent>): boolean {\n\t\treturn !this.rule.isSatisfiedBy(situationContext)\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACOO,IAAM,eAAN,MAAM,cAAa;AAAA,EAIzB,YAAY,IAAY,OAAsB;AAC7C,SAAK,KAAK;AACV,SAAK,QAAQ;AAAA,EACd;AAAA,EAEA,WAA0B;AACzB,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,gBAAgB,cAA2C;AAC1D,SAAK,MAAM,KAAK,GAAG,YAAY;AAC/B,WAAO;AAAA,EACR;AAAA,EAEA,eAAe,MAAiC;AAC/C,SAAK,MAAM,KAAK,IAAI;AACpB,WAAO;AAAA,EACR;AAAA,EAEA,OAAO,SAAuB;AAC7B,UAAM,KAAK,OAAO,WAAW;AAC7B,WAAO,IAAI,cAAa,IAAI,CAAC,CAAC;AAAA,EAC/B;AAAA,EAEA,OAAO,UAAU,MAA0D;AAC1E,WAAO,IAAI,cAAa,KAAK,IAAI,KAAK,KAAK;AAAA,EAC5C;AACD;;;ACtCO,IAAe,cAAf,MAA2B;AAAA,EAGjC,UAAkB;AACjB,WAAO,KAAK;AAAA,EACb;AACD;;;ACNO,IAAe,cAAf,MAA2B;AAElC;;;ACAO,IAAM,YAAN,MAAM,mBAAkB,YAAY;AAAA,EAGlC,YAA4B,MAAc;AACjD,UAAM;AAD6B;AAFpC,SAAS,OAAO;AAAA,EAIhB;AAAA,EAEA,OAAO,OAAO,MAAyB;AACtC,WAAO,IAAI,WAAU,IAAI;AAAA,EAC1B;AAAA,EAEA,OAAO,UAAU,MAAmC;AACnD,WAAO,IAAI,WAAU,KAAK,IAAI;AAAA,EAC/B;AACD;;;ACbO,IAAM,kBAAN,MAAM,yBAAwB,YAAY;AAAA,EAKxC,YAAY,SAAoB;AACvC,UAAM;AALP,SAAS,OAAO;AAChB,SAAS,OAAO;AAKf,SAAK,UAAU;AAAA,EAChB;AAAA,EAEA,OAAO,OAAO,MAA+B;AAC5C,UAAM,UAAU,UAAU,OAAO,IAAI;AACrC,WAAO,IAAI,iBAAgB,OAAO;AAAA,EACnC;AAAA,EAEA,OAAO,UAAU,MAAyC;AACzD,UAAM,UAAU,UAAU,UAAU,IAAI;AACxC,WAAO,IAAI,iBAAgB,OAAO;AAAA,EACnC;AACD;;;ACnBO,IAAM,uBAAN,MAAM,8BAA6B,YAAY;AAAA,EAK7C,YAAY,SAAoB;AACvC,UAAM;AALP,SAAS,OAAO;AAChB,SAAS,OAAO;AAKf,SAAK,UAAU;AAAA,EAChB;AAAA,EAEA,OAAO,OAAO,MAAoC;AACjD,UAAM,UAAU,UAAU,OAAO,IAAI;AACrC,WAAO,IAAI,sBAAqB,OAAO;AAAA,EACxC;AAAA,EAEA,OAAO,UAAU,MAA8C;AAC9D,UAAM,UAAU,UAAU,UAAU,IAAI;AACxC,WAAO,IAAI,sBAAqB,OAAO;AAAA,EACxC;AACD;;;ACpBO,IAAM,aAAN,MAAM,oBAAmB,YAAY;AAAA,EAGnC,YAA4B,MAAc;AACjD,UAAM;AAD6B;AAFpC,SAAS,OAAO;AAAA,EAIhB;AAAA,EAEA,OAAO,UAAU,MAAoC;AACpD,WAAO,IAAI,YAAW,KAAK,IAAI;AAAA,EAChC;AACD;;;ACTO,IAAM,mBAAN,MAAM,0BAAyB,YAAY;AAAA,EAKzC,YAAY,SAAqB;AACxC,UAAM;AALP,SAAS,OAAO;AAChB,SAAS,OAAO;AAKf,SAAK,UAAU;AAAA,EAChB;AAAA,EAEA,OAAO,UAAU,MAA0C;AAC1D,UAAM,UAAU,WAAW,UAAU,IAAI;AACzC,WAAO,IAAI,kBAAiB,OAAO;AAAA,EACpC;AACD;;;ACfO,IAAM,mBAAN,MAAM,0BAAyB,YAAY;AAAA,EAMzC,YAAY,QAAgB,MAAc,MAAc;AAC/D,UAAM;AANP,SAAS,OAAO;AAOf,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACb;AAAA,EAEA,OAAO,UAAU,MAAwE;AACxF,WAAO,IAAI,kBAAiB,KAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AAAA,EAC9D;AACD;;;ACdO,IAAM,gBAAN,MAAM,uBAAsB,YAAY;AAAA,EAMtC,YACP,SACA,kBACA,UAAyB,CAAC,GACzB;AACD,UAAM;AAVP,SAAS,OAAO;AAWf,SAAK,UAAU;AACf,SAAK,mBAAmB;AACxB,SAAK,UAAU;AAAA,EAChB;AAAA,EAEA,OAAO,UAAU,MAIC;AACjB,WAAO,IAAI,eAAc,KAAK,SAAS,KAAK,kBAAkB,KAAK,OAAO;AAAA,EAC3E;AACD;;;AClBO,IAAM,6BAAN,MAAkE;AAAA,EAAlE;AACN,SAAS,OAAO;AAAA;AAAA,EAEhB,QAAQ,gBAAgC,OAAoC;AAC3E,QAAI,eAAe,qBAAqB,QAAW;AAClD,aAAO;AAAA,IACR;AAEA,WAAO,MAAM;AAAA,EACd;AACD;;;ACjBO,IAAM,yBAAN,MAAM,gCAA+B,YAAY;AAAA,EAK/C,YAAY,QAAgB,QAAmB;AACtD,UAAM;AALP,SAAS,OAAO;AAMf,SAAK,SAAS;AACd,SAAK,SAAS;AAAA,EACf;AAAA,EAEA,OAAO,OAAO,QAAgB,QAAwC;AACrE,UAAM,aAAa,UAAU,OAAO,MAAM;AAC1C,WAAO,IAAI,wBAAuB,QAAQ,UAAU;AAAA,EACrD;AAAA,EAEA,OAAO,UAAU,MAAqE;AACrF,WAAO,IAAI,wBAAuB,KAAK,QAAQ,KAAK,MAAM;AAAA,EAC3D;AACD;;;ACtBO,IAAM,oBAAN,MAAwB;AAAA,EAG9B,YAAY,eAAuB;AAClC,SAAK,gBAAgB;AAAA,EACtB;AACD;AAEO,IAAM,qBAAN,MAAyB;AAAA,EAG/B,YAAY,kBAA0B;AACrC,SAAK,mBAAmB;AAAA,EACzB;AACD;AAEO,IAAM,aAAN,MAAiB;AAAA,EAOvB,YACC,aACA,cACA,aACA,mBACA,oBACC;AACD,SAAK,cAAc;AACnB,SAAK,eAAe;AACpB,SAAK,cAAc;AACnB,SAAK,oBAAoB;AACzB,SAAK,qBAAqB;AAAA,EAC3B;AACD;;;ACpCA,oBAAuB;AACvB,4BAA8C;AAyBvC,IAAM,YAAN,MAAgB;AAAA,EAKtB,YAA6B,QAAyB;AAAzB;AAF7B,SAAQ,YAAY;AA7BrB;AAgCE,UAAM,UAAkC,EAAE,IAAI,YAAO,YAAP,YAAkB,CAAC,EAAG;AACpE,QAAI,OAAO,UAAW,SAAQ,gBAAgB,UAAU,OAAO,SAAS;AACxE,SAAK,YAAY,IAAI;AAAA,MACpB,IAAI,IAAI,OAAO,GAAG;AAAA,MAClB,OAAO,KAAK,OAAO,EAAE,SAAS,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI;AAAA,IAClE;AACA,SAAK,SAAS,IAAI,qBAAO,EAAE,OAAM,YAAO,SAAP,YAAe,UAAU,SAAS,QAAQ,GAAG,EAAE,cAAc,CAAC,EAAE,CAAC;AAAA,EACnG;AAAA,EAEA,MAAM,UAAyB;AAC9B,QAAI,KAAK,UAAW;AACpB,UAAM,KAAK,OAAO,QAAQ,KAAK,SAAS;AACxC,SAAK,YAAY;AAAA,EAClB;AAAA;AAAA,EAGA,MAAM,YAAoC;AAhD3C;AAiDE,UAAM,KAAK,QAAQ;AACnB,UAAM,MAAM,MAAM,KAAK,OAAO,UAAU;AACxC,aAAQ,SAAI,UAAJ,YAAa,CAAC,GAAG,IAAI,CAAC,MAAG;AAnDnC,UAAAA,KAAA;AAmDuC;AAAA,QACpC,MAAM,EAAE;AAAA,QACR,cAAaA,MAAA,EAAE,gBAAF,OAAAA,MAAiB;AAAA,QAC9B,cAAc,OAAE,gBAAF,YAAyC,EAAE,MAAM,UAAU,YAAY,CAAC,EAAE;AAAA,MACzF;AAAA,KAAE;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAS,MAAc,MAA4C;AACxE,UAAM,KAAK,QAAQ;AACnB,UAAM,MAAM,MAAM,KAAK,OAAO,SAAS,EAAE,MAAM,WAAW,sBAAQ,CAAC,EAAE,CAAC;AACtE,UAAM,OAAO,YAAY,GAAG;AAC5B,QAAK,IAA8B,SAAS;AAC3C,YAAM,IAAI,MAAM,aAAa,IAAI,aAAa,QAAQ,eAAe,EAAE;AAAA,IACxE;AACA,WAAO;AAAA,EACR;AAAA,EAEA,MAAM,QAAuB;AAC5B,QAAI,CAAC,KAAK,UAAW;AACrB,QAAI;AACH,YAAM,KAAK,OAAO,MAAM;AAAA,IACzB,SAAQ;AAAA,IAER;AACA,SAAK,YAAY;AAAA,EAClB;AACD;AAGA,SAAS,YAAY,KAAsB;AAC1C,QAAM,UAAW,IAA8B;AAC/C,MAAI,CAAC,MAAM,QAAQ,OAAO,EAAG,QAAO;AACpC,SAAO,QACL,OAAO,CAAC,OAA4C,uBAAyB,UAAS,UAAU,OAAQ,EAAyB,SAAS,QAAQ,EAClJ,IAAI,CAAC,MAAM,EAAE,IAAI,EACjB,KAAK,IAAI;AACZ;;;ACrEO,IAAM,kBAAN,MAAsB;AAAA,EAG5B,YACkB,SACA,eAA2D,CAAC,WAAW,IAAI,UAAU,MAAM,GAC3G;AAFgB;AACA;AAJlB,SAAiB,UAA2B,CAAC;AAAA,EAK1C;AAAA;AAAA,EAGH,MAAM,gBAAyC;AAC9C,UAAM,QAAwB,CAAC;AAC/B,eAAW,UAAU,KAAK,SAAS;AAClC,YAAM,SAAS,KAAK,aAAa,MAAM;AACvC,WAAK,QAAQ,KAAK,MAAM;AACxB,iBAAW,QAAQ,MAAM,OAAO,UAAU,GAAG;AAC5C,cAAM,KAAK;AAAA,UACV,MAAM;AAAA,UACN,MAAM,KAAK;AAAA,UACX,aAAa,KAAK;AAAA,UAClB,YAAY,KAAK;AAAA,UACjB,QAAQ;AAAA,UACR,QAAQ,CAAC,SAAkB,OAAO,SAAS,KAAK,MAAO,sBAAgC,CAAC,CAAC;AAAA,QAC1F,CAAC;AAAA,MACF;AAAA,IACD;AACA,WAAO;AAAA,EACR;AAAA;AAAA,EAGA,MAAM,QAAuB;AAC5B,UAAM,QAAQ,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAAA,EACrD;AACD;;;AChDO,IAAM,oBAAN,MAAM,2BAA0B,YAAY;AAAA,EAK1C,YAAY,SAAoB;AACvC,UAAM;AALP,SAAS,OAAO;AAChB,SAAS,OAAO;AAKf,SAAK,UAAU;AAAA,EAChB;AAAA,EAEA,OAAO,OAAO,MAAiC;AAC9C,UAAM,UAAU,UAAU,OAAO,IAAI;AACrC,WAAO,IAAI,mBAAkB,OAAO;AAAA,EACrC;AAAA,EAEA,OAAO,UAAU,MAA2C;AAC3D,UAAM,UAAU,UAAU,UAAU,IAAI;AACxC,WAAO,IAAI,mBAAkB,OAAO;AAAA,EACrC;AACD;;;ACpBO,IAAM,gBAAN,MAAM,eAAiE;AAAA,EAM7E,YAAY,MAAa,YAAoB,YAAkB,SAAmB;AACjF,SAAK,OAAO;AACZ,SAAK,aAAa;AAClB,SAAK,aAAa;AAClB,SAAK,UAAU;AAAA,EAChB;AAAA,EAEA,OAAO,OACN,MACA,YACA,SACiC;AACjC,UAAM,aAAa,oBAAI,KAAK;AAC5B,WAAO,IAAI,eAAc,MAAM,YAAY,YAAY,OAAO;AAAA,EAC/D;AACD;AAEO,IAAM,yBAAN,cAAqC,cAAyD;AAAA,EACpG,OAAO,KAAK,UAAuD;AAClE,WAAO,cAAc,OAAO,sBAAsB,SAAS,IAAI,QAAQ;AAAA,EACxE;AACD;AAEO,IAAM,uBAAN,cAAmC,cAAuD;AAAA,EAChG,OAAO,KAAK,UAAqD;AAChE,WAAO,cAAc,OAAO,oBAAoB,SAAS,IAAI,QAAQ;AAAA,EACtE;AACD;AAEO,IAAM,mBAAN,cAA+B,cAAmD;AAAA,EACxF,OAAO,KAAK,YAAoB,SAAmC;AAClE,WAAO,cAAc,OAAO,gBAAgB,YAAY,EAAE,QAAQ,CAAC;AAAA,EACpE;AACD;;;ACNO,IAAM,iBAAN,MAA2F;AAAA,EAGjG,YAA6B,iBAAkC;AAAlC;AAF7B,SAAS,KAAK;AAAA,EAEkD;AAAA,EAEhE,MAAM,IAAI,OAAuB,aAAoE;AACpG,gBAAY,sBAAsB,KAAK;AAEvC,UAAM,SAAS,MAAM,KAAK,gBAAgB,IAAI,KAAK;AAEnD,gBAAY,wBAAwB,MAAM;AAC1C,WAAO;AAAA,MACN,SAAS,KAAK;AAAA,MACd;AAAA,MACA;AAAA,IACD;AAAA,EACD;AACD;;;ACzCO,IAAe,cAAf,MAA2B;AAAA,EAIvB,YAAY,UAA+B,UAA8B;AAClF,SAAK,WAAW;AAChB,SAAK,WAAW;AAAA,EACjB;AAAA,EAEA,cAAmC;AAClC,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,QAAgB;AACf,WAAO,KAAK,SAAS;AAAA,EACtB;AAAA,EAEA,cAAkC;AACjC,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,YAAY,UAAoC;AAC/C,SAAK,WAAW;AAAA,EACjB;AACD;;;ACjCO,IAAM,SAAN,MAAM,QAAO;AAAA,EAEX,YAAY,SAAuB;AAC1C,SAAK,UAAU;AAAA,EAChB;AAAA,EAEA,aAA2B;AAC1B,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,OAAO,SAAiB;AACvB,UAAM,UAAU,aAAa,OAAO;AACpC,WAAO,IAAI,QAAO,OAAO;AAAA,EAC1B;AACD;;;ACVO,IAAM,QAAN,MAAM,eAAc,YAAY;AAAA,EAKtC,YACC,UACA,kBACA,OACA,QACA,UACC;AACD,UAAM,UAAU,QAAQ;AACxB,SAAK,SAAS;AACd,SAAK,mBAAmB;AACxB,SAAK,QAAQ;AAAA,EACd;AAAA,EAEA,OAAO,OAAO;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,GAMU;AACT,UAAM,KAAK,OAAO,WAAW;AAC7B,UAAM,SAAS,OAAO,OAAO;AAC7B,UAAM,WAAgC,EAAE,IAAI,MAAM,cAAc,MAAM,QAAQ;AAE9E,UAAM,mBAAmB,qBAAqB,OAAO,WAAW;AAChE,WAAO,WAAW,EAAE,eAAe,gBAAgB;AACnD,WAAO,IAAI,OAAM,UAAU,aAAa,OAAO,QAAQ,QAAQ;AAAA,EAChE;AAAA,EAEA,WAAmB;AAClB,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,sBAA8B;AAC7B,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,YAAoB;AACnB,WAAO,KAAK;AAAA,EACb;AACD;;;ACrDO,SAAS,YAAY;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAMU;AACT,SAAO,MAAM,OAAO,EAAE,MAAM,aAAa,cAAc,OAAO,SAAS,CAAC;AACzE;;;ACfO,IAAM,QAAN,MAAM,eAAc,YAAY;AAAA,EACtC,YAAY,UAA+B,UAA8B;AACxE,UAAM,UAAU,QAAQ;AAAA,EACzB;AAAA,EAEA,OAAO,OAAO;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,EACD,GAIU;AACT,UAAM,KAAK,OAAO,WAAW;AAC7B,UAAM,WAAgC,EAAE,IAAI,MAAM,cAAc,MAAM,QAAQ;AAC9E,WAAO,IAAI,OAAM,UAAU,QAAQ;AAAA,EACpC;AACD;;;AClBO,SAAS,YAAY;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AACD,GAIU;AACT,SAAO,MAAM,OAAO,EAAE,MAAM,cAAc,SAAS,CAAC;AACrD;;;ACXO,IAAe,eAAf,MAA4B;AAAA,EAA5B;AACN,wBAAyC,oBAAI,IAAI;AAAA;AAAA,EAEjD,eAAe,aAAgC;AAC9C,UAAM,WAAW,KAAK,aAAa,IAAI,YAAY,MAAM,CAAC;AAE1D,QAAI,SAAU;AAEd,SAAK,aAAa,IAAI,YAAY,MAAM,GAAG,WAAW;AAAA,EACvD;AAAA,EAEA,kBAAkB,aAAgC;AACjD,SAAK,aAAa,OAAO,YAAY,MAAM,CAAC;AAAA,EAC7C;AAAA,EAEA,eAAe,IAAqC;AACnD,WAAO,KAAK,aAAa,IAAI,EAAE;AAAA,EAChC;AAAA,EAEA,kBAA0C;AACzC,WAAO,CAAC,GAAG,KAAK,aAAa,OAAO,CAAC;AAAA,EACtC;AACD;;;ACbO,IAAM,iBAAN,MAAyD;AAAA,EAC/D,YACiB,OACC,WACA,iBACA,oBAChB;AAJe;AACC;AACA;AACA;AAAA,EACf;AAAA,EAEH,KAAK,aAAgC;AACpC,SAAK,MAAM,eAAe,WAAW;AACrC,SAAK,QAAQ,uBAAuB,KAAK,YAAY,YAAY,CAAC,CAAC;AAAA,EACpE;AAAA,EAEA,MAAM,aAAgC;AACrC,SAAK,MAAM,kBAAkB,WAAW;AACxC,SAAK,QAAQ,qBAAqB,KAAK,YAAY,YAAY,CAAC,CAAC;AAAA,EAClE;AAAA,EAEA,QAAQ,OAA4B;AACnC,eAAW,eAAe,KAAK,MAAM,gBAAgB,GAAG;AACvD,WAAK,UAAU,QAAQ,OAAO,WAAW;AAAA,IAC1C;AAAA,EACD;AAAA,EAEA,eAAe,IAAqC;AACnD,QAAI,CAAC,KAAK,MAAM,eAAe,EAAE,GAAG;AACnC,YAAM,IAAI,MAAM,eAAe,EAAE,YAAY;AAAA,IAC9C;AAEA,WAAO,KAAK,MAAM,eAAe,EAAE;AAAA,EACpC;AAAA,EAEA,qBAAsC;AACrC,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,wBAA4C;AAC3C,WAAO,KAAK;AAAA,EACb;AACD;;;AC/CO,IAAM,iBAAN,MAAqB;AAAA,EAC3B,QAAQ,OAAsB,UAA6B;AAC1D,eAAW,WAAW,SAAS,YAAY,GAAG;AAC7C,YAAM,cAAc,QAAQ,cAAc,cAAc;AAAA,QACvD;AAAA,QACA,aAAa;AAAA,MACd,CAAC;AACD,UAAI,aAAa;AAChB,gBAAQ,UAAU,MAAM,EAAE,OAAO,aAAa,SAAS,CAAC;AAAA,MACzD;AAAA,IACD;AAAA,EACD;AACD;;;ACXO,SAAS,WAA+C,gBAAqD;AACnH,SAAO,SAAS,KAAK,aAAgC;AACpD,mBAAe,EAAE,KAAK,WAAW;AAAA,EAClC;AACD;;;ACJO,SAAS,YAAgD,gBAAqD;AACpH,SAAO,SAAS,MAAM,aAAgC;AACrD,mBAAe,EAAE,MAAM,WAAW;AAAA,EACnC;AACD;;;ACJO,SAAS,kBACf,gBACC;AACD,SAAO,SAAS,YAAY,SAAiB,UAAwB;AACpE,UAAM,UAAU,eAAe;AAC/B,UAAM,cAAc,QAAQ,eAAe,QAAQ;AACnD,QAAI,CAAC,aAAa;AACjB,YAAM,IAAI,MAAM,eAAe,QAAQ,YAAY;AAAA,IACpD;AAEA,UAAM,cAAgC,iBAAiB,KAAK,UAAU,OAAO;AAC7E,YAAQ,QAAQ,WAAW;AAAA,EAC5B;AACD;;;ACXO,IAAM,YAAN,MAAM,WAAU;AAAA,EACd,YACU,QACA,eACA,oBACA,qBAChB;AAJgB;AACA;AACA;AACA;AAAA,EACf;AAAA,EAEH,MAAM,IAAI,SAA0B,aAAyC;AAd9E;AAeE,QAAI,aAA6B;AAAA,MAChC,aAAa;AAAA,MACb,OAAO;AAAA,IACR;AAEA,WAAO,WAAW,gBAAgB,QAAQ;AACzC,YAAM,2BAA0B,UAAK,wBAAL,mBAA0B,cAAc;AAExE,UAAI,2BAA2B,KAAK,qBAAqB;AACxD,oBAAY,yBAAyB,UAAU;AAC/C,qBAAa,MAAM,KAAK,oBAAoB,OAAO,UAAU;AAC7D,oBAAY,0BAA0B,UAAU;AAAA,MACjD;AAEA,YAAM,YAAY,MAAM,KAAK,cAAc,QAAQ,YAAY,WAAW;AAC1E,mBAAa,KAAK,mBAAmB,QAAQ,SAAS;AAAA,IACvD;AAAA,EACD;AAAA,EAEA,YAAoB;AACnB,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,OAAO,OACN,eACA,oBACA,qBACY;AACZ,UAAM,SAAS,OAAO,WAAW;AACjC,WAAO,IAAI,WAAU,QAAQ,eAAe,oBAAoB,mBAAmB;AAAA,EACpF;AACD;;;ACtCO,IAAM,oBAAN,MAAwB;AAAA,EAC9B,YACkB,sBACA,gBACA,yBACA,mBACA,mBAChB;AALgB;AACA;AACA;AACA;AACA;AAAA,EACf;AAAA,EAqBH,MAAM,QACL,YACA,aAC8B;AAC9B,YAAQ,WAAW,aAAa;AAAA,MAC/B,KAAK;AACJ,eAAO,MAAM,KAAK,qBAAqB,IAAI,WAAW,OAAO,WAAW;AAAA,MAEzE,KAAK;AACJ,eAAO,MAAM,KAAK,eAAe,IAAI,WAAW,OAAO,WAAW;AAAA,MAEnE,KAAK;AACJ,eAAO,MAAM,KAAK,wBAAwB,IAAI,WAAW,OAAO,WAAW;AAAA,MAE5E,KAAK;AACJ,eAAO,MAAM,KAAK,kBAAkB,IAAI,WAAW,OAAO,WAAW;AAAA,MAEtE,KAAK;AACJ,eAAO,MAAM,KAAK,kBAAkB,IAAI,WAAW,OAAO,WAAW;AAAA,IACvE;AAAA,EACD;AACD;;;ACzCO,IAAM,oBAAN,MAAsG;AAAA,EAG5G,YAA6B,oBAAwC;AAAxC;AAF7B,SAAS,KAAK;AAAA,EAEwD;AAAA,EAEtE,MAAM,IAAI,OAA2B,aAAwE;AArB9G;AAsBE,gBAAY,yBAAyB,KAAK;AAE1C,UAAM,EAAE,MAAM,eAAe,IAAI;AAEjC,QAAI,QAAyB,oBAAe,UAAf,mBAAsB,KAAK,CAACC,UAASA,MAAK,SAAS,KAAK;AAErF,QAAI,CAAC,MAAM;AACV,aAAO;AAAA,QACN,SAAS,KAAK;AAAA,QACd;AAAA,QACA,QAAQ;AAAA,UACP,MAAM,uBAAuB,OAAO,KAAK,QAAQ,wBAAwB,KAAK,IAAI,GAAG;AAAA,QACtF;AAAA,MACD;AAAA,IACD;AAEA,UAAM,OAAO,MAAM,KAAK,mBAAmB,IAAI,MAAM,IAAI;AAEzD,gBAAY,2BAA2B,IAAI;AAC3C,WAAO;AAAA,MACN,SAAS,KAAK;AAAA,MACd;AAAA,MACA,QAAQ;AAAA,QACP;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD;;;AC5CO,IAAM,uBAAN,MAAyG;AAAA,EAAzG;AACN,SAAS,KAAK;AAAA;AAAA,EAEd,MAAM,IAAI,OAAwB,aAA2E;AAC5G,gBAAY,4BAA4B,KAAK;AAE7C,UAAM,cAAc,gBAAgB,OAAO,MAAM,OAAO;AAExD,UAAM,SAAyB;AAAA,MAC9B,GAAG,MAAM;AAAA,MACT,SAAS,MAAM,MAAM,QAAQ,gBAAgB,CAAC,WAAW,CAAC;AAAA,IAC3D;AAEA,gBAAY,8BAA8B,MAAM;AAChD,WAAO;AAAA,MACN,SAAS,KAAK;AAAA,MACd;AAAA,MACA;AAAA,IACD;AAAA,EACD;AACD;;;ACtBO,IAAM,oBAAN,MAAsG;AAAA,EAAtG;AACN,SAAS,KAAK;AAAA;AAAA,EAEd,MAAM,IAAI,OAA2B,aAAwE;AAC5G,gBAAY,iBAAiB,KAAK;AAClC,WAAO;AAAA,MACN,SAAS,KAAK;AAAA,MACd;AAAA,MACA,QAAQ;AAAA,IACT;AAAA,EACD;AACD;;;ACXO,IAAM,qBAAN,MAAyB;AAAA,EAC/B,YAA6B,OAA6B;AAA7B;AAAA,EAA8B;AAAA,EAE3D,QAAQ,WAA+C;AACtD,UAAM,OAAO,KAAK,MAAM,KAAK,CAACC,UAASA,MAAK,cAAc,cAAc,SAAS,CAAC;AAElF,QAAI,CAAC,MAAM;AACV,YAAM,IAAI,MAAM,mCAAmC,UAAU,OAAO,GAAG;AAAA,IACxE;AAEA,WAAO,KAAK,iBAAiB,SAAS;AAAA,EACvC;AACD;;;ACyBO,IAAM,+BAAN,MAAsE;AAAA,EAC5E,cAAc,WAAwC;AACrD,WAAO,UAAU,YAAY;AAAA,EAC9B;AACD;AAKA,SAAS,qBAAqB,WAAgE;AAC7F,SAAO,UAAU,YAAY,eAAe,UAAU,YAAY;AACnE;AAEO,IAAM,6CAAN,MAAoF;AAAA,EAC1F,cAAc,WAAwC;AACrD,WAAO,qBAAqB,SAAS,KAAK,UAAU,OAAO,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,eAAe;AAAA,EAC9G;AACD;AAEO,IAAM,6CAAN,MAAoF;AAAA,EAC1F,cAAc,WAAwC;AACrD,WACC,qBAAqB,SAAS,KAC9B,UAAU,OAAO,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,aAAa,KAAK,SAAS,WAAW;AAAA,EAE5F;AACD;AAEO,IAAM,qCAAN,MAA4E;AAAA,EAClF,cAAc,WAAwC;AACrD,WAAO,UAAU,YAAY;AAAA,EAC9B;AACD;AAEO,IAAM,qCAAN,MAA4E;AAAA,EAClF,cAAc,WAAwC;AACrD,WAAO,UAAU,YAAY;AAAA,EAC9B;AACD;;;AC7DO,IAAM,oCAAN,MAAsE;AAAA,EAAtE;AACN,SAAS,gBAAgB,IAAI,6BAA6B;AAAA;AAAA,EAE1D,iBAAiB,WAAoF;AACpG,QAAI,UAAU,YAAY,oBAAoB;AAC7C,YAAM,IAAI,MAAM,wCAAwC;AAAA,IACzD;AAEA,UAAM,cAAc,UAAU,OAAO,YAAY,wBAAwB;AAEzE,WAAO;AAAA,MACN;AAAA,MACA,OAAO,UAAU;AAAA,IAClB;AAAA,EACD;AACD;AAEO,IAAM,8BAAN,MAAgE;AAAA,EAAhE;AACN,SAAS,gBAAgB,IAAI,2CAA2C;AAAA;AAAA,EAExE,iBAAiB,WAAgE;AAChF,QACE,UAAU,YAAY,eAAe,UAAU,YAAY,yBAC5D,CAAC,UAAU,OAAO,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,eAAe,GACnE;AACD,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC1D;AAEA,UAAM,mBAAmB,UAAU,OAAO,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,eAAe;AAE5F,QAAI,CAAC,kBAAkB;AACtB,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC1D;AAEA,WAAO;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,QACN,MAAM;AAAA,QACN,gBAAgB,UAAU;AAAA,MAC3B;AAAA,IACD;AAAA,EACD;AACD;AAEO,IAAM,8BAAN,MAAgE;AAAA,EAAhE;AACN,SAAS,gBAAgB,IAAI,2CAA2C;AAAA;AAAA,EAExE,iBAAiB,WAAgE;AAChF,QACE,UAAU,YAAY,eAAe,UAAU,YAAY,yBAC5D,CAAC,UAAU,OAAO,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,aAAa,KAAK,SAAS,WAAW,GAC1F;AACD,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC1D;AACA,UAAM,mBAAmB,UAAU,OAAO,MAAM;AAAA,MAC/C,CAAC,SAAS,KAAK,SAAS,aAAa,KAAK,SAAS;AAAA,IACpD;AAEA,QAAI,CAAC,kBAAkB;AACtB,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC1D;AACA,cAAU,MAAM,QAAQ,eAAe,gBAAgB;AAEvD,WAAO;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,QACN,QAAQ;AAAA,MACT;AAAA,IACD;AAAA,EACD;AACD;AAEO,IAAM,8BAAN,MAAgE;AAAA,EAAhE;AACN,SAAS,gBAAgB,IAAI,mCAAmC;AAAA;AAAA,EAEhE,iBAAiB,WAAoF;AACpG,QAAI,UAAU,YAAY,iBAAiB;AAC1C,YAAM,IAAI,MAAM,kCAAkC;AAAA,IACnD;AAEA,UAAM,kBAAkB,UAAU,MAAM;AAExC,oBAAgB,QAAQ,gBAAgB,CAAC,UAAU,MAAM,MAAM,UAAU,OAAO,IAAI,CAAC;AAErF,WAAO;AAAA,MACN,aAAa,gBAAgB,YAAY,wBAAwB;AAAA,MACjE,OAAO;AAAA,QACN,GAAG;AAAA,MACJ;AAAA,IACD;AAAA,EACD;AACD;AAEO,IAAM,yBAAN,MAA2D;AAAA,EAA3D;AACN,SAAS,gBAAgB,IAAI,mCAAmC;AAAA;AAAA,EAEhE,iBAAiB,WAAuD;AACvE,QAAI,UAAU,YAAY,iBAAiB;AAC1C,YAAM,IAAI,MAAM,kCAAkC;AAAA,IACnD;AAEA,WAAO;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACR;AAAA,EACD;AACD;;;ACnHA,uBAA+C;AAGxC,IAAM,4BAAN,MAAuD;AAAA,EAE7D,YACkB,SACA,QACA,SAChB;AAHgB;AACA;AACA;AAEjB,SAAK,YAAQ,oCAAkB;AAAA,EAChC;AAAA,EAEA,4BAA4B,OAA8B;AACzD,SAAK,QAAQ,4BAA4B,KAAK;AAAA,EAC/C;AAAA,EAEA,8BAA8B,QAA8B;AAC3D,SAAK,QAAQ,8BAA8B,MAAM;AAAA,EAClD;AAAA,EAEA,sBAAsB,OAA6B;AAClD,SAAK,QAAQ,qBAAqB,KAAK;AAAA,EACxC;AAAA,EAEA,oBAAoB,OAA4B;AAC/C,SAAK,QAAQ,oBAAoB,KAAK;AAAA,EACvC;AAAA,EAEA,wBAAwB,QAA+B;AACtD,SAAK,QAAQ,uBAAuB,MAAM;AAAA,EAC3C;AAAA,EAEA,yBAAyB,OAAiC;AACzD,SAAK,QAAQ,yBAAyB,KAAK;AAAA,EAC5C;AAAA,EAEA,2BAA2B,QAAsC;AAChE,SAAK,QAAQ,2BAA2B,MAAM;AAAA,EAC/C;AAAA,EAEA,iBAAiB,OAAiC;AACjD,SAAK,QAAQ,gBAAgB,KAAK;AAAA,EACnC;AAAA,EAEA,yBAAyB,YAAkC;AAC1D,SAAK,QAAQ,wBAAwB,UAAU;AAAA,EAChD;AAAA,EAEA,0BAA0B,YAAkC;AAC3D,SAAK,QAAQ,yBAAyB,UAAU;AAAA,EACjD;AAAA,EAEQ,QAAkB,MAAc,SAAyB;AAChE,UAAM,QAAQ,IAAI,cAAc,MAAM,KAAK,SAAS,oBAAI,KAAK,GAAG;AAAA,MAC/D,GAAG;AAAA,MACH,QAAQ,KAAK;AAAA,IACd,CAAC;AACD,SAAK,QAAQ,QAAQ,KAAK;AAE1B,QAAI,KAAK,MAAM,SAAS;AACvB,YAAM,cAAc,KAAK,QAAQ,eAAe,KAAK,OAAO;AAC5D,YAAM,QAAQ;AACd,UAAI,OAAO;AACV,aAAK,MAAM,KAAK;AAAA,UACf,GAAG;AAAA,UACH,SAAS;AAAA,YACR,GAAG;AAAA,YACH,QAAQ,KAAK;AAAA,YACb,OAAO;AAAA,cACN,UAAU,MAAM,YAAY;AAAA,cAC5B,kBAAkB,MAAM,oBAAoB;AAAA,cAC5C,OAAO,MAAM,SAAS;AAAA,cACtB,QAAQ,MAAM,UAAU,EAAE,WAAW,EAAE,SAAS;AAAA,YACjD;AAAA,UACD;AAAA,QACD,CAAC;AAAA,MACF;AAAA,IACD;AAAA,EACD;AACD;;;AClFO,IAAM,0BAAN,MAA8G;AAAA,EAGpH,YAA6B,iBAAkC;AAAlC;AAF7B,SAAS,KAAK;AAAA,EAEkD;AAAA,EAEhE,MAAM,IAAI,OAAuB,aAA8E;AAC9G,gBAAY,sBAAsB,KAAK;AAEvC,QAAI,SAAsC;AAE1C,qBAAiB,SAAS,KAAK,gBAAgB,OAAO,KAAK,GAAG;AAC7D,kBAAY,oBAAoB,KAAK;AAErC,UAAI,MAAM,SAAS,oBAAoB;AACtC,iBAAS,MAAM;AAAA,MAChB;AAAA,IACD;AAEA,QAAI,CAAC,QAAQ;AACZ,YAAM,IAAI,MAAM,4BAA4B;AAAA,IAC7C;AAEA,gBAAY,wBAAwB,MAAM;AAE1C,WAAO;AAAA,MACN,SAAS;AAAA,MACT;AAAA,MACA;AAAA,IACD;AAAA,EACD;AACD;;;AChBO,SAAS,cAAkD,gBAAqD;AACtH,SAAO,SAAS,QACf,SACA,SACA,gBACA,qBACC;AACD,UAAM,UAAU,eAAe;AAC/B,UAAM,kBAAkB,QAAQ,mBAAmB;AACnD,UAAM,qBAAqB,QAAQ,sBAAsB;AAEzD,UAAM,qBAAqB,IAAI,mBAAmB;AAAA;AAAA,MAEjD,IAAI,kCAAkC;AAAA,MACtC,IAAI,4BAA4B;AAAA,MAChC,IAAI,4BAA4B;AAAA,MAChC,IAAI,4BAA4B;AAAA,MAChC,IAAI,uBAAuB;AAAA,IAC5B,CAAC;AAED,UAAM,gBAAgB,IAAI;AAAA,MACzB,IAAI,qBAAqB;AAAA,MACzB,IAAI,eAAe,eAAe;AAAA,MAClC,IAAI,wBAAwB,eAAe;AAAA,MAC3C,IAAI,kBAAkB,kBAAkB;AAAA,MACxC,IAAI,kBAAkB;AAAA,IACvB;AAEA,UAAM,YAAY,UAAU,OAAO,eAAe,oBAAoB,mBAAmB;AAEzF,UAAM,cAAc,IAAI,0BAA0B,SAAS,UAAU,UAAU,GAAG,OAAO;AAEzF,cAAU;AAAA,MACT;AAAA,QACC,SAAS;AAAA,QACT,OAAO;AAAA,MACR;AAAA,MACA;AAAA,IACD;AAAA,EACD;AACD;;;AC/CO,IAAM,0BAAN,MAAiE;AAAA,EACvE,UAAU,gBAAgC;AACzC,UAAM,EAAE,UAAU,OAAO,IAAI,KAAK,gBAAgB,cAAc;AAChE,UAAM,eAAoB,CAAC;AAE3B,UAAM,UAAe;AAAA,MACpB,OAAO,eAAe;AAAA,MACtB;AAAA,IACD;AAEA,YAAQ,aAAa,eAAe;AAEpC,QAAI,QAAQ;AACX,cAAQ,SAAS;AAAA,IAClB;AAEA,QAAI,eAAe,SAAS,eAAe,MAAM,SAAS,GAAG;AAC5D,cAAQ,QAAQ,eAAe,MAAM,IAAI,CAAC,UAAU;AAAA,QACnD,MAAM,KAAK;AAAA,QACX,aAAa,KAAK;AAAA,QAClB,cAAc,KAAK;AAAA,MACpB,EAAE;AAAA,IACH;AAEA,QAAI,eAAe,kBAAkB;AACpC,mBAAa,SAAS;AAAA,QACrB,MAAM;AAAA,QACN,QAAQ,eAAe,iBAAiB;AAAA,MACzC;AAAA,IACD;AAEA,QAAI,eAAe,iBAAiB;AACnC,cAAQ,WAAW,EAAE,MAAM,WAAW;AACtC,mBAAa,SAAS,eAAe;AAAA,IACtC;AAEA,QAAI,OAAO,KAAK,YAAY,EAAE,SAAS,GAAG;AACzC,cAAQ,gBAAgB;AAAA,IACzB;AAEA,QAAI,eAAe,WAAW;AAC7B,cAAQ,SAAS,eAAe;AAAA,IACjC;AAEA,WAAO;AAAA,EACR;AAAA,EAEQ,gBAAgB,UAAiB,MAA4B,OAAkB;AACtF,UAAM,cAAc,SAAS,SAAS,SAAS,CAAC;AAChD,SAAI,2CAAa,UAAS,MAAM;AAC/B,kBAAY,QAAQ,KAAK,KAAK;AAC9B;AAAA,IACD;AAEA,aAAS,KAAK;AAAA,MACb;AAAA,MACA,SAAS,CAAC,KAAK;AAAA,IAChB,CAAC;AAAA,EACF;AAAA,EAEA,gBAAgB,gBAAsE;AAzEvF;AA0EE,UAAM,UAAU,eAAe;AAC/B,UAAM,WAAkB,CAAC;AACzB,UAAM,SAAmB,CAAC;AAE1B,eAAW,QAAQ,QAAQ,SAAS,GAAG;AACtC,UAAI,gBAAgB,wBAAwB,gBAAgB,mBAAmB;AAC9E,eAAO,KAAK,KAAK,QAAQ,IAAI;AAC7B;AAAA,MACD;AAEA,UAAI,gBAAgB,iBAAiB;AACpC,aAAK,gBAAgB,UAAU,QAAQ,EAAE,MAAM,QAAQ,MAAM,KAAK,QAAQ,KAAK,CAAC;AAChF;AAAA,MACD;AAEA,UAAI,gBAAgB,kBAAkB;AACrC,aAAK,gBAAgB,UAAU,aAAa,EAAE,MAAM,QAAQ,MAAM,KAAK,QAAQ,KAAK,CAAC;AACrF;AAAA,MACD;AAEA,UAAI,gBAAgB,eAAe;AAClC,aAAK,gBAAgB,UAAU,aAAa;AAAA,UAC3C,MAAM;AAAA,UACN,WAAU,gBAAK,YAAL,mBAAc,SAAd,YAAsB;AAAA,UAChC,YAAW,UAAK,qBAAL,YAAyB;AAAA,QACrC,CAAC;AACD;AAAA,MACD;AAEA,UAAI,gBAAgB,kBAAkB;AACrC,YAAI;AACJ,YAAI;AACH,kBAAQ,KAAK,MAAM,KAAK,IAAI;AAAA,QAC7B,SAAQ;AACP,kBAAQ,KAAK;AAAA,QACd;AACA,aAAK,gBAAgB,UAAU,aAAa;AAAA,UAC3C,MAAM;AAAA,UACN,IAAI,KAAK;AAAA,UACT,MAAM,KAAK;AAAA,UACX;AAAA,QACD,CAAC;AACD;AAAA,MACD;AAEA,UAAI,gBAAgB,wBAAwB;AAC3C,aAAK,gBAAgB,UAAU,QAAQ;AAAA,UACtC,MAAM;AAAA,UACN,aAAa,KAAK;AAAA,UAClB,SAAS,KAAK,OAAO;AAAA,QACtB,CAAC;AAAA,MACF;AAAA,IACD;AAEA,WAAO;AAAA,MACN;AAAA,MACA,QAAQ,OAAO,SAAS,IAAI,OAAO,KAAK,MAAM,IAAI;AAAA,IACnD;AAAA,EACD;AAAA,EAEA,kBAAkB,UAA8D;AAtIjF;AAuIE,QAAI,CAAC,SAAS,OAAO;AACpB,aAAO;AAAA,IACR;AACA,WAAO,IAAI;AAAA,MACV,SAAS,MAAM;AAAA,MACf,SAAS,MAAM;AAAA,MACf,SAAS,MAAM,eAAe,SAAS,MAAM;AAAA,MAC7C,IAAI;AAAA,UACF,cAAS,MAAM,gCAAf,YAA8C,OAAM,cAAS,MAAM,4BAAf,YAA0C;AAAA,MAChG;AAAA,MACA,IAAI,mBAAmB,CAAC;AAAA,IACzB;AAAA,EACD;AAAA,EAEA,WAAW,UAAuD;AArJnE;AAsJE,UAAM,QAAyB,CAAC;AAEhC,eAAW,SAAS,SAAS,SAAkB;AAC9C,UAAI,MAAM,SAAS,QAAQ;AAC1B,cAAM,KAAK,iBAAiB,UAAU,EAAE,MAAM,MAAM,KAAK,CAAC,CAAC;AAC3D;AAAA,MACD;AACA,UAAI,MAAM,SAAS,YAAY;AAC9B,cAAM;AAAA,UACL,iBAAiB,UAAU;AAAA,YAC1B,QAAQ,MAAM;AAAA,YACd,MAAM,MAAM;AAAA,YACZ,MAAM,KAAK,WAAU,WAAM,UAAN,YAAe,CAAC,CAAC;AAAA,UACvC,CAAC;AAAA,QACF;AACA;AAAA,MACD;AACA,UAAI,MAAM,SAAS,YAAY;AAC9B,cAAM;AAAA,UACL,cAAc,UAAU;AAAA,YACvB,SAAS,MAAM,WAAW,UAAU,UAAU,EAAE,MAAM,MAAM,SAAS,CAAC,IAAI;AAAA,YAC1E,kBAAkB,MAAM;AAAA,YACxB,SAAS,CAAC;AAAA,UACX,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAEA,WAAO,EAAE,OAAO,YAAY,KAAK,kBAAkB,QAAQ,GAAG,aAAa,SAAS;AAAA,EACrF;AACD;;;AChLA,iBAAsB;AAaf,IAAM,oBAAN,MAA4C;AAAA,EAKlD,YACC,iBAA0C,IAAI,wBAAwB,GACtE,SAAoC,CAAC,GACpC;AACD,SAAK,iBAAiB;AACtB,SAAK,eAAe;AAAA,EACrB;AAAA,EAEA,IAAY,SAAoB;AA9BjC;AA+BE,YAAQ,UAAK,YAAL,iBAAK,UAAY,IAAI,WAAAC,QAAU;AAAA,MACtC,SAAS,KAAK,aAAa;AAAA,MAC3B,QAAQ,KAAK,aAAa;AAAA,IAC3B,CAAC;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,gBAA0D;AACrE,UAAM,UAAU,KAAK,eAAe,UAAU,cAAc;AAC5D,UAAM,WAAW,MAAM,KAAK,OAAO,SAAS,OAAO,OAAO;AAE1D,WAAO,KAAK,eAAe,WAAW,QAAQ;AAAA,EAC/C;AAAA,EAEA,OAAO,OAAO,gBAA8D;AAC3E,UAAM,UAAU,KAAK,eAAe,UAAU,cAAc;AAC5D,UAAM,SAAS,KAAK,OAAO,SAAS,OAAO,OAAO;AAElD,qBAAiB,SAAS,QAAQ;AACjC,YAAM;AAAA,IACP;AAEA,UAAM,SAAS,KAAK,eAAe,WAAW,MAAM,OAAO,aAAa,CAAC;AAEzE,UAAM;AAAA,MACL,MAAM;AAAA,MACN,YAAY,QAAQ;AAAA,MACpB,YAAY,oBAAI,KAAK;AAAA,MACrB,SAAS;AAAA,IACV;AAAA,EACD;AACD;;;AC1DA,oBAAmB;;;ACDZ,IAAM,cAAN,MAAM,qBAAoB,YAAY;AAAA,EAGpC,YAA4B,MAAc;AACjD,UAAM;AAD6B;AAFpC,SAAS,OAAO;AAAA,EAIhB;AAAA,EAEA,OAAO,UAAU,MAAqC;AACrD,WAAO,IAAI,aAAY,KAAK,IAAI;AAAA,EACjC;AACD;;;ACEO,IAAM,wBAAN,MAA+D;AAAA,EACrE,UAAU,gBAAqC;AAfhD;AAgBE,UAAM,UAAe;AAAA,MACpB,OAAO,eAAe;AAAA,MACtB,OAAO,KAAK,gBAAgB,cAAc;AAAA,IAC3C;AAEA,QAAI,eAAe,SAAS,eAAe,MAAM,SAAS,GAAG;AAC5D,cAAQ,QAAQ,eAAe,MAAM,IAAI,CAAC,UAAU;AAAA,QACnD,MAAM,KAAK;AAAA,QACX,MAAM,KAAK;AAAA,QACX,aAAa,KAAK;AAAA,QAClB,YAAY,KAAK;AAAA,MAClB,EAAE;AAAA,IACH;AAEA,QAAI,eAAe,iBAAiB;AACnC,cAAQ,YAAY;AAAA,QACnB,QAAQ,eAAe;AAAA,MACxB;AAAA,IACD;AAEA,QAAI,eAAe,kBAAkB;AACpC,YAAM,SAAS,eAAe;AAC9B,cAAQ,OAAO;AAAA,QACd,QAAQ;AAAA,UACP,MAAM;AAAA,UACN,OAAM,YAAO,SAAP,YAAe;AAAA,UACrB,QAAQ,OAAO;AAAA,UACf,SAAQ,YAAO,WAAP,YAAiB;AAAA,QAC1B;AAAA,MACD;AAAA,IACD;AAEA,QAAI,eAAe,WAAW;AAC7B,cAAQ,SAAS,eAAe;AAAA,IACjC;AAEA,WAAO;AAAA,EACR;AAAA,EAEA,gBAAgB,gBAAuC;AACtD,UAAM,QAAe,CAAC;AAEtB,eAAW,QAAQ,eAAe,QAAQ,SAAS,GAAG;AACrD,UACC,gBAAgB,wBAChB,gBAAgB,qBAChB,gBAAgB,iBACf;AACD,cAAM,KAAK;AAAA,UACV,MAAM,KAAK;AAAA,UACX,MAAM,KAAK;AAAA,UACX,SAAS,CAAC,EAAE,MAAM,cAAc,MAAM,KAAK,QAAQ,KAAK,CAAC;AAAA,QAC1D,CAAC;AACD;AAAA,MACD;AAEA,UAAI,gBAAgB,kBAAkB;AACrC,cAAM,KAAK;AAAA,UACV,MAAM,KAAK;AAAA,UACX,MAAM,KAAK;AAAA,UACX,SAAS,CAAC,EAAE,MAAM,eAAe,MAAM,KAAK,QAAQ,KAAK,CAAC;AAAA,QAC3D,CAAC;AACD;AAAA,MACD;AAEA,UAAI,gBAAgB,kBAAkB;AACrC,cAAM,KAAK;AAAA,UACV,MAAM,KAAK;AAAA,UACX,SAAS,KAAK;AAAA,UACd,MAAM,KAAK;AAAA,UACX,WAAW,KAAK;AAAA,QACjB,CAAC;AACD;AAAA,MACD;AAEA,UAAI,gBAAgB,wBAAwB;AAC3C,cAAM,KAAK;AAAA,UACV,MAAM,KAAK;AAAA,UACX,SAAS,KAAK;AAAA,UACd,QAAQ,CAAC,EAAE,MAAM,cAAc,MAAM,KAAK,OAAO,KAAK,CAAC;AAAA,QACxD,CAAC;AACD;AAAA,MACD;AAEA,UAAI,gBAAgB,eAAe;AAClC,cAAM,iBAA0C;AAAA,UAC/C,MAAM,KAAK;AAAA,UACX,SAAS,KAAK,QAAQ,IAAI,CAAC,aAAa,EAAE,MAAM,gBAAgB,MAAM,QAAQ,KAAK,EAAE;AAAA,QACtF;AACA,YAAI,KAAK,qBAAqB,QAAW;AACxC,yBAAe,oBAAoB,KAAK;AAAA,QACzC;AACA,cAAM,KAAK,cAAc;AAAA,MAC1B;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AAAA,EAEA,kBAAkB,UAA6D;AAnHhF;AAoHE,QAAI,CAAC,SAAS,OAAO;AACpB,aAAO;AAAA,IACR;AACA,WAAO,IAAI;AAAA,MACV,SAAS,MAAM;AAAA,MACf,SAAS,MAAM;AAAA,MACf,SAAS,MAAM;AAAA,MACf,IAAI,mBAAkB,oBAAS,MAAM,yBAAf,mBAAqC,kBAArC,YAAsD,CAAC;AAAA,MAC7E,IAAI,oBAAmB,oBAAS,MAAM,0BAAf,mBAAsC,qBAAtC,YAA0D,CAAC;AAAA,IACnF;AAAA,EACD;AAAA,EAEA,WAAW,UAAgC;AAhI5C;AAiIE,UAAM,QAAyB,CAAC;AAEhC,eAAW,SAAQ,cAAS,WAAT,YAAmB,CAAC,GAAG;AACzC,UAAI,KAAK,SAAS,aAAa,KAAK,SAAS,aAAa;AACzD,cAAM,gBAAe,UAAK,YAAL,mBAAe;AACpC,YAAI,cAAc;AACjB,gBAAM,KAAK,iBAAiB,UAAU,YAAgC,CAAC;AAAA,QACxE;AACA;AAAA,MACD;AACA,UAAI,KAAK,SAAS,iBAAiB;AAClC,cAAM;AAAA,UACL,iBAAiB,UAAU;AAAA,YAC1B,QAAQ,KAAK;AAAA,YACb,MAAM,KAAK;AAAA,YACX,MAAM,KAAK;AAAA,UACZ,CAAC;AAAA,QACF;AACA;AAAA,MACD;AACA,UAAI,KAAK,SAAS,aAAa;AAC9B,cAAM;AAAA,UACL,cAAc,UAAU;AAAA,YACvB,SAAS;AAAA,YACT,kBAAkB,KAAK;AAAA,YACvB,WAAU,UAAK,YAAL,YAAgB,CAAC,GAAG;AAAA,cAAI,CAAC,YAClC,YAAY,UAAU,EAAE,MAAM,QAAQ,KAAK,CAAC;AAAA,YAC7C;AAAA,UACD,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAEA,WAAO;AAAA,MACN;AAAA,MACA,YAAY,KAAK,kBAAkB,QAAQ;AAAA,MAC3C,aAAa;AAAA,IACd;AAAA,EACD;AACD;;;AFhKO,IAAM,kBAAN,MAA0C;AAAA,EAIhD,YAAY,iBAA0C,IAAI,sBAAsB,GAAG;AAClF,SAAK,iBAAiB;AAAA,EACvB;AAAA,EAEA,IAAY,SAAiB;AAhB9B;AAiBE,YAAQ,UAAK,YAAL,iBAAK,UAAY,IAAI,cAAAC,QAAO;AAAA,EACrC;AAAA,EAEA,MAAM,MAAM,gBAA0D;AACrE,UAAM,UAAU,KAAK,eAAe,UAAU,cAAc;AAC5D,UAAM,WAAW,MAAM,KAAK,OAAO,UAAU,OAAO,OAAO;AAE3D,WAAO,KAAK,eAAe,WAAW,QAAQ;AAAA,EAC/C;AAAA,EAEA,OAAO,OAAO,gBAA8D;AAC3E,UAAM,UAAU,KAAK,eAAe,UAAU,cAAc;AAC5D,UAAM,SAAc,MAAM,KAAK,OAAO,UAAU,OAAO,EAAE,GAAG,SAAS,QAAQ,KAAK,CAAC;AAInF,QAAI,oBAAyB;AAC7B,qBAAiB,SAAS,QAAQ;AACjC,UAAI,MAAM,SAAS,sBAAsB;AACxC,4BAAoB,MAAM;AAAA,MAC3B;AAEA,YAAM;AAAA,IACP;AAEA,QAAI,CAAC,mBAAmB;AACvB,YAAM,IAAI,MAAM,2CAA2C;AAAA,IAC5D;AAEA,UAAM,SAAS,KAAK,eAAe,WAAW,iBAAiB;AAE/D,UAAM;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,MACT,YAAY,oBAAI,KAAK;AAAA,MACrB,YAAY,eAAe;AAAA,IAC5B;AAAA,EACD;AACD;;;AGtDA,mBAA4B;;;ACWrB,IAAM,8BAAN,MAAqE;AAAA,EAC3E,UAAU,gBAAgC;AACzC,UAAM,EAAE,UAAU,kBAAkB,IAAI,KAAK,gBAAgB,cAAc;AAC3E,UAAM,SAAc,CAAC;AAErB,QAAI,mBAAmB;AACtB,aAAO,oBAAoB;AAAA,IAC5B;AAEA,QAAI,eAAe,SAAS,eAAe,MAAM,SAAS,GAAG;AAC5D,aAAO,QAAQ;AAAA,QACd;AAAA,UACC,sBAAsB,eAAe,MAAM,IAAI,CAAC,UAAU;AAAA,YACzD,MAAM,KAAK;AAAA,YACX,aAAa,KAAK;AAAA,YAClB,sBAAsB,KAAK;AAAA,UAC5B,EAAE;AAAA,QACH;AAAA,MACD;AAAA,IACD;AAEA,QAAI,eAAe,kBAAkB;AACpC,aAAO,mBAAmB;AAC1B,aAAO,iBAAiB,eAAe,iBAAiB;AAAA,IACzD;AAEA,QAAI,eAAe,iBAAiB;AACnC,aAAO,iBAAiB;AAAA,QACvB,eAAe,eAAe;AAAA,QAC9B,iBAAiB;AAAA,MAClB;AAAA,IACD;AAEA,UAAM,UAAe;AAAA,MACpB,OAAO,eAAe;AAAA,MACtB;AAAA,MACA;AAAA,IACD;AAEA,QAAI,eAAe,WAAW;AAC7B,cAAQ,SAAS,eAAe;AAAA,IACjC;AAEA,WAAO;AAAA,EACR;AAAA,EAEA,gBAAgB,gBAAiF;AA1DlG;AA2DE,UAAM,UAAU,eAAe;AAC/B,UAAM,WAAkB,CAAC;AACzB,UAAM,SAAmB,CAAC;AAC1B,UAAM,YAAY,oBAAI,IAAoB;AAE1C,eAAW,QAAQ,QAAQ,SAAS,GAAG;AACtC,UAAI,gBAAgB,wBAAwB,gBAAgB,mBAAmB;AAC9E,eAAO,KAAK,KAAK,QAAQ,IAAI;AAC7B;AAAA,MACD;AAEA,UAAI,gBAAgB,iBAAiB;AACpC,aAAK,QAAQ,UAAU,QAAQ,EAAE,MAAM,KAAK,QAAQ,KAAK,CAAC;AAC1D;AAAA,MACD;AAEA,UAAI,gBAAgB,kBAAkB;AACrC,aAAK,QAAQ,UAAU,SAAS,EAAE,MAAM,KAAK,QAAQ,KAAK,CAAC;AAC3D;AAAA,MACD;AAEA,UAAI,gBAAgB,kBAAkB;AACrC,kBAAU,IAAI,KAAK,QAAQ,KAAK,IAAI;AACpC,YAAI;AACJ,YAAI;AACH,iBAAO,KAAK,MAAM,KAAK,IAAI;AAAA,QAC5B,SAAQ;AACP,iBAAO,CAAC;AAAA,QACT;AACA,aAAK,QAAQ,UAAU,SAAS,EAAE,cAAc,EAAE,IAAI,KAAK,QAAQ,MAAM,KAAK,MAAM,KAAK,EAAE,CAAC;AAC5F;AAAA,MACD;AAEA,UAAI,gBAAgB,wBAAwB;AAC3C,aAAK,QAAQ,UAAU,QAAQ;AAAA,UAC9B,kBAAkB;AAAA,YACjB,IAAI,KAAK;AAAA,YACT,OAAM,eAAU,IAAI,KAAK,MAAM,MAAzB,YAA8B;AAAA,YACpC,UAAU,KAAK,cAAc,KAAK,OAAO,IAAI;AAAA,UAC9C;AAAA,QACD,CAAC;AAAA,MACF;AAAA,IACD;AAEA,WAAO;AAAA,MACN;AAAA,MACA,mBAAmB,OAAO,SAAS,IAAI,OAAO,KAAK,MAAM,IAAI;AAAA,IAC9D;AAAA,EACD;AAAA,EAEQ,QAAQ,UAAiB,MAAwB,MAAiB;AACzE,UAAM,OAAO,SAAS,SAAS,SAAS,CAAC;AACzC,SAAI,6BAAM,UAAS,MAAM;AACxB,WAAK,MAAM,KAAK,IAAI;AACpB;AAAA,IACD;AAEA,aAAS,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;AAAA,EACtC;AAAA,EAEQ,cAAc,QAAqB;AAC1C,QAAI;AACH,YAAM,SAAS,KAAK,MAAM,MAAM;AAChC,aAAO,UAAU,OAAO,WAAW,WAAW,SAAS,EAAE,OAAO;AAAA,IACjE,SAAQ;AACP,aAAO,EAAE,OAAO;AAAA,IACjB;AAAA,EACD;AAAA,EAEA,kBAAkB,UAAuC;AAhI1D;AAiIE,UAAM,QAAQ,SAAS;AACvB,QAAI,CAAC,OAAO;AACX,aAAO;AAAA,IACR;AACA,WAAO,IAAI;AAAA,OACV,WAAM,qBAAN,YAA0B;AAAA,OAC1B,WAAM,yBAAN,YAA8B;AAAA,OAC9B,WAAM,oBAAN,YAAyB;AAAA,MACzB,IAAI,mBAAkB,WAAM,4BAAN,YAAiC,CAAC;AAAA,MACxD,IAAI,oBAAmB,WAAM,uBAAN,YAA4B,CAAC;AAAA,IACrD;AAAA,EACD;AAAA,EAEA,WAAW,UAAgC;AA9I5C;AA+IE,UAAM,QAAyB,CAAC;AAChC,UAAM,SAAQ,gCAAS,eAAT,mBAAsB,OAAtB,mBAA0B,YAA1B,mBAAmC,UAAnC,YAA4C,CAAC;AAE3D,eAAW,QAAQ,OAAO;AACzB,UAAI,KAAK,WAAW,KAAK,MAAM;AAC9B,cAAM;AAAA,UACL,cAAc,UAAU;AAAA,YACvB,SAAS,UAAU,UAAU,EAAE,MAAM,KAAK,KAAK,CAAC;AAAA,YAChD,kBAAkB;AAAA,YAClB,SAAS,CAAC;AAAA,UACX,CAAC;AAAA,QACF;AACA;AAAA,MACD;AACA,UAAI,KAAK,MAAM;AACd,cAAM,KAAK,iBAAiB,UAAU,EAAE,MAAM,KAAK,KAAK,CAAC,CAAC;AAC1D;AAAA,MACD;AACA,UAAI,KAAK,cAAc;AACtB,cAAM;AAAA,UACL,iBAAiB,UAAU;AAAA,YAC1B,SAAQ,UAAK,aAAa,OAAlB,YAAwB;AAAA,YAChC,MAAM,KAAK,aAAa;AAAA,YACxB,MAAM,KAAK,WAAU,UAAK,aAAa,SAAlB,YAA0B,CAAC,CAAC;AAAA,UAClD,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAEA,WAAO,EAAE,OAAO,YAAY,KAAK,kBAAkB,QAAQ,GAAG,aAAa,SAAS;AAAA,EACrF;AACD;;;AD1JO,IAAM,wBAAN,MAAgD;AAAA,EAKtD,YACC,iBAA0C,IAAI,4BAA4B,GAC1E,SAAiC,CAAC,GACjC;AACD,SAAK,iBAAiB;AACtB,SAAK,eAAe;AAAA,EACrB;AAAA,EAEA,IAAY,SAAsB;AAjCnC;AAkCE,YAAQ,UAAK,YAAL,iBAAK,UAAY,IAAI,yBAAY;AAAA,MACxC,SAAQ,UAAK,aAAa,WAAlB,YAA4B,QAAQ,IAAI;AAAA,MAChD,GAAI,KAAK,aAAa,UAAU,EAAE,aAAa,EAAE,SAAS,KAAK,aAAa,QAAQ,EAAE,IAAI,CAAC;AAAA,IAC5F,CAAC;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,gBAA0D;AACrE,UAAM,UAAU,KAAK,eAAe,UAAU,cAAc;AAC5D,UAAM,WAAW,MAAM,KAAK,OAAO,OAAO,gBAAgB,OAAO;AAEjE,WAAO,KAAK,eAAe,WAAW,QAAQ;AAAA,EAC/C;AAAA,EAEA,OAAO,OAAO,gBAA8D;AAC3E,UAAM,UAAU,KAAK,eAAe,UAAU,cAAc;AAC5D,UAAM,SAAc,MAAM,KAAK,OAAO,OAAO,sBAAsB,OAAO;AAE1E,QAAI,YAAuC;AAC3C,qBAAiB,SAAS,QAAQ;AACjC,kBAAY;AACZ,YAAM;AAAA,IACP;AAEA,QAAI,CAAC,WAAW;AACf,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACvC;AAEA,UAAM,SAAS,KAAK,eAAe,WAAW,SAAS;AAEvD,UAAM;AAAA,MACL,MAAM;AAAA,MACN,YAAY,QAAQ;AAAA,MACpB,YAAY,oBAAI,KAAK;AAAA,MACrB,SAAS;AAAA,IACV;AAAA,EACD;AACD;;;AEzDO,IAAM,8BAAN,MAAqE;AAAA,EAC3E,UAAU,gBAAgC;AACzC,UAAM,UAAe;AAAA,MACpB,OAAO,eAAe;AAAA,MACtB,UAAU,KAAK,gBAAgB,cAAc;AAAA,IAC9C;AAEA,QAAI,eAAe,SAAS,eAAe,MAAM,SAAS,GAAG;AAC5D,cAAQ,QAAQ,eAAe,MAAM,IAAI,CAAC,UAAU;AAAA,QACnD,MAAM;AAAA,QACN,UAAU;AAAA,UACT,MAAM,KAAK;AAAA,UACX,aAAa,KAAK;AAAA,UAClB,YAAY,KAAK;AAAA,QAClB;AAAA,MACD,EAAE;AAAA,IACH;AAEA,QAAI,eAAe,iBAAiB;AACnC,cAAQ,mBAAmB,eAAe;AAAA,IAC3C;AAEA,QAAI,eAAe,WAAW;AAC7B,cAAQ,SAAS,eAAe;AAAA,IACjC;AAEA,WAAO;AAAA,EACR;AAAA,EAEA,gBAAgB,gBAAuC;AA1CxD;AA2CE,UAAM,WAAkB,CAAC;AAEzB,eAAW,QAAQ,eAAe,QAAQ,SAAS,GAAG;AACrD,UAAI,gBAAgB,wBAAwB,gBAAgB,mBAAmB;AAC9E,iBAAS,KAAK,EAAE,MAAM,UAAU,SAAS,KAAK,QAAQ,KAAK,CAAC;AAC5D;AAAA,MACD;AAEA,UAAI,gBAAgB,iBAAiB;AACpC,iBAAS,KAAK,EAAE,MAAM,QAAQ,SAAS,KAAK,QAAQ,KAAK,CAAC;AAC1D;AAAA,MACD;AAEA,UAAI,gBAAgB,kBAAkB;AACrC,iBAAS,KAAK,EAAE,MAAM,aAAa,SAAS,KAAK,QAAQ,KAAK,CAAC;AAC/D;AAAA,MACD;AAEA,UAAI,gBAAgB,kBAAkB;AACrC,cAAM,WAAW;AAAA,UAChB,IAAI,KAAK;AAAA,UACT,MAAM;AAAA,UACN,UAAU,EAAE,MAAM,KAAK,MAAM,WAAW,KAAK,KAAK;AAAA,QACnD;AACA,cAAM,OAAO,SAAS,SAAS,SAAS,CAAC;AACzC,aAAI,6BAAM,UAAS,aAAa;AAC/B,eAAK,cAAa,UAAK,eAAL,YAAmB,CAAC;AACtC,eAAK,WAAW,KAAK,QAAQ;AAAA,QAC9B,OAAO;AACN,mBAAS,KAAK,EAAE,MAAM,aAAa,SAAS,MAAM,YAAY,CAAC,QAAQ,EAAE,CAAC;AAAA,QAC3E;AACA;AAAA,MACD;AAEA,UAAI,gBAAgB,wBAAwB;AAC3C,iBAAS,KAAK,EAAE,MAAM,QAAQ,cAAc,KAAK,QAAQ,SAAS,KAAK,OAAO,KAAK,CAAC;AAAA,MACrF;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AAAA,EAEA,kBAAkB,UAAuC;AArF1D;AAsFE,QAAI,CAAC,SAAS,OAAO;AACpB,aAAO;AAAA,IACR;AACA,WAAO,IAAI;AAAA,MACV,SAAS,MAAM;AAAA,MACf,SAAS,MAAM;AAAA,MACf,SAAS,MAAM;AAAA,MACf,IAAI,mBAAkB,oBAAS,MAAM,0BAAf,mBAAsC,kBAAtC,YAAuD,CAAC;AAAA,MAC9E,IAAI,oBAAmB,oBAAS,MAAM,8BAAf,mBAA0C,qBAA1C,YAA8D,CAAC;AAAA,IACvF;AAAA,EACD;AAAA,EAEA,WAAW,UAAgC;AAlG5C;AAmGE,UAAM,QAAyB,CAAC;AAChC,UAAM,WAAU,oBAAS,YAAT,mBAAmB,OAAnB,mBAAuB;AACvC,QAAI,CAAC,SAAS;AACb,aAAO,EAAE,OAAO,CAAC,GAAG,YAAY,KAAK,kBAAkB,QAAQ,GAAG,aAAa,SAAS;AAAA,IACzF;AAEA,QAAI,QAAQ,mBAAmB;AAC9B,YAAM;AAAA,QACL,cAAc,UAAU;AAAA,UACvB,SAAS,UAAU,UAAU,EAAE,MAAM,QAAQ,kBAAkB,CAAC;AAAA,UAChE,kBAAkB;AAAA,UAClB,SAAS,CAAC;AAAA,QACX,CAAC;AAAA,MACF;AAAA,IACD;AAEA,QAAI,QAAQ,SAAS;AACpB,YAAM,KAAK,iBAAiB,UAAU,EAAE,MAAM,QAAQ,QAAQ,CAAC,CAAC;AAAA,IACjE;AAEA,eAAW,aAAY,aAAQ,eAAR,YAAsB,CAAC,GAAG;AAChD,YAAM;AAAA,QACL,iBAAiB,UAAU;AAAA,UAC1B,QAAQ,SAAS;AAAA,UACjB,MAAM,SAAS,SAAS;AAAA,UACxB,MAAM,SAAS,SAAS;AAAA,QACzB,CAAC;AAAA,MACF;AAAA,IACD;AAEA,WAAO,EAAE,OAAO,YAAY,KAAK,kBAAkB,QAAQ,GAAG,aAAa,SAAS;AAAA,EACrF;AACD;;;AC9HA,IAAAC,iBAAmB;AAyCZ,IAAM,wBAAN,MAAgD;AAAA,EAMtD,YACC,iBAA0C,IAAI,4BAA4B,GAC1E,SAAiC,CAAC,GACjC;AAvDH;AAwDE,SAAK,iBAAiB;AACtB,SAAK,eAAe;AACpB,SAAK,aAAY,YAAO,cAAP,YAAoB,CAAC;AAAA,EACvC;AAAA,EAEA,IAAY,SAAiB;AA7D9B;AAgEE,YAAQ,UAAK,YAAL,iBAAK,UAAY,IAAI,eAAAC,QAAO;AAAA,MACnC,SAAS,KAAK,aAAa;AAAA,MAC3B,QAAQ,KAAK,aAAa;AAAA,IAC3B,CAAC;AAAA,EACF;AAAA,EAEQ,aAAa,gBAAqC;AACzD,WAAO;AAAA,MACN,GAAG,KAAK;AAAA,MACR,GAAG,KAAK,eAAe,UAAU,cAAc;AAAA,IAChD;AAAA,EACD;AAAA,EAEA,MAAM,MAAM,gBAA0D;AACrE,UAAM,WAAW,MAAM,KAAK,OAAO,KAAK,YAAY,OAAO,KAAK,aAAa,cAAc,CAAC;AAE5F,WAAO,KAAK,eAAe,WAAW,QAAQ;AAAA,EAC/C;AAAA,EAEA,OAAO,OAAO,gBAA8D;AAC3E,UAAM,SAAS,KAAK,OAAO,KAAK,YAAY,OAAO,KAAK,aAAa,cAAc,CAAC;AAEpF,qBAAiB,SAAS,QAAQ;AACjC,YAAM;AAAA,IACP;AAEA,UAAM,SAAS,KAAK,eAAe,WAAW,MAAM,OAAO,oBAAoB,CAAC;AAEhF,UAAM;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,MACT,YAAY,oBAAI,KAAK;AAAA,MACrB,YAAY,eAAe;AAAA,IAC5B;AAAA,EACD;AACD;;;ACjGO,IAAM,8BAAkD;AAAA,EAC9D,MAAM;AAAA,EACN,UAAU;AAAA,EACV,yBAAyB;AAAA,EACzB,2BAA2B,CAAC,OAAO,QAAQ,UAAU,KAAK;AAAA,EAC1D,2BAA2B;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,0BAA0B;AAC3B;;;ACnBO,IAAM,4BAAgD;AAAA,EAC5D,MAAM;AAAA,EACN,UAAU;AAAA,EACV,yBAAyB;AAAA,EACzB,2BAA2B,CAAC,OAAO,SAAS,QAAQ,UAAU,KAAK;AAAA,EACnE,2BAA2B;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,0BAA0B;AAC3B;;;ACnBO,IAAM,4BAAgD;AAAA,EAC5D,MAAM;AAAA,EACN,UAAU;AAAA,EACV,yBAAyB;AAAA,EACzB,2BAA2B,CAAC,OAAO,SAAS,QAAQ,UAAU,KAAK;AAAA,EACnE,2BAA2B;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,0BAA0B;AAC3B;;;ACnBO,IAAM,6BAAiD;AAAA,EAC7D,MAAM;AAAA,EACN,UAAU;AAAA,EACV,yBAAyB;AAAA,EACzB,2BAA2B,CAAC,QAAQ,UAAU,OAAO,WAAW,MAAM;AAAA,EACtE,2BAA2B;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,0BAA0B;AAC3B;;;ACnBO,IAAM,2BAA+C;AAAA,EAC3D,MAAM;AAAA,EACN,UAAU;AAAA,EACV,yBAAyB;AAAA,EACzB,2BAA2B,CAAC,QAAQ,UAAU,OAAO,WAAW,MAAM;AAAA,EACtE,2BAA2B;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,0BAA0B;AAC3B;;;ACnBO,IAAM,+BAAmD;AAAA,EAC/D,MAAM;AAAA,EACN,UAAU;AAAA,EACV,yBAAyB;AAAA,EACzB,2BAA2B,CAAC,OAAO,QAAQ,UAAU,OAAO,MAAM;AAAA,EAClE,2BAA2B;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,0BAA0B;AAC3B;;;ACnBO,IAAM,6BAAiD;AAAA,EAC7D,MAAM;AAAA,EACN,UAAU;AAAA,EACV,yBAAyB;AAAA,EACzB,2BAA2B,CAAC,OAAO,QAAQ,UAAU,OAAO,MAAM;AAAA,EAClE,2BAA2B;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,0BAA0B;AAC3B;;;ACnBO,IAAM,qBAAyC;AAAA,EACrD,MAAM;AAAA,EACN,UAAU;AAAA,EACV,yBAAyB;AAAA,EACzB,2BAA2B,CAAC,SAAS,QAAQ,UAAU,OAAO,MAAM;AAAA,EACpE,2BAA2B;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,0BAA0B;AAC3B;;;ACnBO,IAAM,yBAA6C;AAAA,EACzD,MAAM;AAAA,EACN,UAAU;AAAA,EACV,yBAAyB;AAAA,EACzB,2BAA2B,CAAC,SAAS,QAAQ,UAAU,OAAO,MAAM;AAAA,EACpE,2BAA2B;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,0BAA0B;AAC3B;;;ACnBO,IAAM,yBAA6C;AAAA,EACzD,MAAM;AAAA,EACN,UAAU;AAAA,EACV,yBAAyB;AAAA,EACzB,2BAA2B,CAAC,SAAS,QAAQ,UAAU,OAAO,MAAM;AAAA,EACpE,2BAA2B;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,0BAA0B;AAC3B;;;ACnBO,IAAM,qBAAyC;AAAA,EACrD,MAAM;AAAA,EACN,UAAU;AAAA,EACV,yBAAyB;AAAA,EACzB,2BAA2B,CAAC,SAAS,QAAQ,UAAU,OAAO,MAAM;AAAA,EACpE,2BAA2B;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,0BAA0B;AAC3B;;;ACnBO,IAAM,6BAAiD;AAAA,EAC7D,MAAM;AAAA,EACN,UAAU;AAAA,EACV,yBAAyB;AAAA,EACzB,2BAA2B,CAAC,QAAQ,UAAU,OAAO,MAAM;AAAA,EAC3D,2BAA2B;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,0BAA0B;AAC3B;;;ACHO,IAAM,kBAAqC;AAAA,EACjD;AAAA,IACC,UAAU,IAAI,gBAAgB;AAAA,IAC9B,eAAe;AAAA,EAChB;AAAA,EACA;AAAA,IACC,UAAU,IAAI,gBAAgB;AAAA,IAC9B,eAAe;AAAA,EAChB;AAAA,EACA;AAAA,IACC,UAAU,IAAI,gBAAgB;AAAA,IAC9B,eAAe;AAAA,EAChB;AAAA,EACA;AAAA,IACC,UAAU,IAAI,gBAAgB;AAAA,IAC9B,eAAe;AAAA,EAChB;AAAA,EACA;AAAA,IACC,UAAU,IAAI,kBAAkB;AAAA,IAChC,eAAe;AAAA,EAChB;AAAA,EACA;AAAA,IACC,UAAU,IAAI,kBAAkB;AAAA,IAChC,eAAe;AAAA,EAChB;AAAA,EACA;AAAA,IACC,UAAU,IAAI,kBAAkB;AAAA,IAChC,eAAe;AAAA,EAChB;AAAA,EACA;AAAA,IACC,UAAU,IAAI,kBAAkB;AAAA,IAChC,eAAe;AAAA,EAChB;AAAA,EACA;AAAA,IACC,UAAU,IAAI,sBAAsB;AAAA,IACpC,eAAe;AAAA,EAChB;AAAA,EACA;AAAA,IACC,UAAU,IAAI,sBAAsB;AAAA,IACpC,eAAe;AAAA,EAChB;AAAA,EACA;AAAA,IACC,UAAU,IAAI,sBAAsB;AAAA,IACpC,eAAe;AAAA,EAChB;AAAA,EACA;AAAA,IACC,UAAU,IAAI,sBAAsB;AAAA,IACpC,eAAe;AAAA,EAChB;AACD;;;AC/DO,IAAM,4BAAN,MAAiE;AAAA,EAAjE;AACN,SAAS,OAAO;AAAA;AAAA,EAEhB,QAAQ,gBAAgC,OAAoC;AAC3E,QAAI,eAAe,oBAAoB,QAAW;AACjD,aAAO;AAAA,IACR;AAEA,QAAI,CAAC,MAAM,yBAAyB;AACnC,aAAO;AAAA,IACR;AAEA,WAAO,MAAM,0BAA0B,SAAS,eAAe,eAAe;AAAA,EAC/E;AACD;;;ACdO,IAAM,wBAAN,MAA6D;AAAA,EAA7D;AACN,SAAS,OAAO;AAAA;AAAA,EAEhB,QAAQ,gBAAgC,OAAoC;AAC3E,QAAI,eAAe,UAAU,QAAW;AACvC,aAAO;AAAA,IACR;AAEA,WAAO,MAAM;AAAA,EACd;AACD;;;ACVO,IAAM,sBAAN,MAA2D;AAAA,EAA3D;AACN,SAAS,OAAO;AAAA;AAAA,EAEhB,QAAQ,gBAAgC,OAAoC;AAC3E,QAAI,CAAC,eAAe,WAAW;AAC9B,aAAO;AAAA,IACR;AAEA,WAAO,MAAM;AAAA,EACd;AACD;;;ACLA,SAAS,4BAA4B,MAA2B;AAC/D,MAAI,gBAAgB,iBAAiB;AACpC,WAAO;AAAA,EACR;AACA,MAAI,gBAAgB,mBAAmB;AACtC,WAAO;AAAA,EACR;AACA,MAAI,gBAAgB,sBAAsB;AACzC,WAAO;AAAA,EACR;AACA,MAAI,gBAAgB,kBAAkB;AACrC,WAAO;AAAA,EACR;AACA,SAAO,KAAK,QAAQ;AACrB;AAEO,IAAM,oBAAN,MAAyD;AAAA,EAAzD;AACN,SAAS,OAAO;AAAA;AAAA,EAEhB,QAAQ,gBAAgC,OAAoC;AAC3E,WAAO,eAAe,QAAQ,MAAM;AAAA,MAAM,CAAC,SAC1C,MAAM,0BAA0B,SAAS,4BAA4B,IAAI,CAAC;AAAA,IAC3E;AAAA,EACD;AACD;;;ACxBO,IAAM,gCAAyD;AAAA,EACrE,IAAI,0BAA0B;AAAA,EAC9B,IAAI,sBAAsB;AAAA,EAC1B,IAAI,oBAAoB;AAAA,EACxB,IAAI,2BAA2B;AAAA,EAC/B,IAAI,kBAAkB;AACvB;AAEO,IAAM,0BAAN,MAA8B;AAAA,EACpC,YAA6B,QAAiC,+BAA+B;AAAhE;AAAA,EAAiE;AAAA,EAE9F,SAAS,gBAAgC,OAAiC;AACzE,eAAW,QAAQ,KAAK,OAAO;AAC9B,UAAI,CAAC,KAAK,QAAQ,gBAAgB,KAAK,GAAG;AACzC,cAAM,IAAI,MAAM,uBAAuB,KAAK,IAAI,uBAAuB,MAAM,IAAI,GAAG;AAAA,MACrF;AAAA,IACD;AAAA,EACD;AACD;;;ACpBO,IAAM,yBAAN,MAAwD;AAAA,EAC9D,YACkBC,kBACA,kBAChB;AAFgB,2BAAAA;AACA;AAAA,EACf;AAAA,EAEH,MAAM,IAAI,OAAiD;AAC1D,UAAM,kBAAkB,KAAK,gBAAgB,KAAK,CAAC,UAAU,MAAM,cAAc,SAAS,MAAM,KAAK;AACrG,QAAI,CAAC,iBAAiB;AACrB,YAAM,IAAI,MAAM,sBAAsB,MAAM,KAAK,EAAE;AAAA,IACpD;AAEA,SAAK,iBAAiB,SAAS,OAAO,gBAAgB,aAAa;AAEnE,WAAO,MAAM,gBAAgB,SAAS,MAAM,KAAK;AAAA,EAClD;AAAA,EAEA,OAAO,OAAO,OAAsD;AACnE,UAAM,kBAAkB,KAAK,gBAAgB,KAAK,CAAC,UAAU,MAAM,cAAc,SAAS,MAAM,KAAK;AACrG,QAAI,CAAC,iBAAiB;AACrB,YAAM,IAAI,MAAM,sBAAsB,MAAM,KAAK,EAAE;AAAA,IACpD;AAEA,SAAK,iBAAiB,SAAS,OAAO,gBAAgB,aAAa;AAEnE,WAAO,gBAAgB,SAAS,OAAO,KAAK;AAAA,EAC7C;AACD;;;AC7BO,IAAM,4BAAN,MAA8D;AAAA,EACpE,MAAM,IAAI,OAAyB,MAA6C;AAC/E,QAAI;AACH,YAAM,SAAS,MAAM,KAAK,OAAO,KAAK,MAAM,MAAM,IAAI,CAAC;AACvD,aAAO,uBAAuB,OAAO,MAAM,QAAQ,KAAK,UAAU,MAAM,CAAC;AAAA,IAC1E,SAAS,OAAO;AACf,aAAO,uBAAuB,OAAO,MAAM,QAAQ,uBAAuB,KAAK,EAAE;AAAA,IAClF;AAAA,EACD;AACD;;;ACVO,SAAS,gBACf,gBACC;AACD,SAAO,SAAS,UAAU,OAAsB,UAAwB;AACvE,UAAM,UAAU,eAAe;AAC/B,UAAM,cAAc,QAAQ,eAAe,QAAQ;AACnD,QAAI,CAAC,aAAa;AACjB,YAAM,IAAI,MAAM,eAAe,QAAQ,YAAY;AAAA,IACpD;AAEA,YAAQ,QAAQ,KAAK;AAAA,EACtB;AACD;;;ACKO,SAAS,gBAAoD;AACnE,MAAI,UAAgD;AACpD,QAAM,YAAY,IAAI,eAAe;AAErC,WAAS,kBAAkB,QAGO;AA5BnC;AA6BE,QAAI,SAAS;AACZ,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC9C;AAEA,UAAM,mBACL,kBAAO,0BAAP,mBAA8B,WAA9B,YACA,IAAI;AAAA,OACH,kBAAO,0BAAP,mBAA8B,oBAA9B,YAAiD;AAAA,MACjD,IAAI,wBAAwB;AAAA,IAC7B;AAED,UAAM,qBAAqB,IAAI,0BAA0B;AAEzD,cAAU,IAAI,eAAe,OAAO,OAAO,WAAW,iBAAiB,kBAAkB;AAEzF,WAAO;AAAA,EACR;AAEA,WAAS,iBAAgD;AACxD,QAAI,CAAC,SAAS;AACb,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC1C;AAEA,WAAO;AAAA,EACR;AAEA,WAAS,mBAAmB,IAAyB;AACpD,QAAI,CAAC,SAAS;AACb,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC1C;AAEA,UAAM,cAAc,QAAQ,MAAM,eAAe,EAAE;AAEnD,QAAI,CAAC,aAAa;AACjB,YAAM,IAAI,MAAM,eAAe,EAAE,YAAY;AAAA,IAC9C;AAEA,WAAO;AAAA,EACR;AAEA,QAAM,OAAO,WAAW,cAAc;AACtC,QAAM,QAAQ,YAAY,cAAc;AACxC,QAAM,cAAc,kBAAkB,cAAc;AACpD,QAAM,YAAY,gBAAgB,cAAc;AAChD,QAAM,UAAU,cAAc,cAAc;AAE5C,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;AC7EO,IAAe,yBAAf,MAAoF;AAAA,EAG1F,IAAI,OAAuE;AAC1E,WAAO,IAAI,0BAA0B,MAAM,KAAK;AAAA,EACjD;AAAA,EAEA,GAAG,OAAuE;AACzE,WAAO,IAAI,yBAAyB,MAAM,KAAK;AAAA,EAChD;AAAA,EAEA,MAAsC;AACrC,WAAO,IAAI,0BAA0B,IAAI;AAAA,EAC1C;AACD;AAEA,IAAM,4BAAN,cAAsE,uBAA+B;AAAA,EACpG,YACkB,MACA,OAChB;AACD,UAAM;AAHW;AACA;AAAA,EAGlB;AAAA,EAEA,cAAc,kBAAqD;AAClE,WAAO,KAAK,KAAK,cAAc,gBAAgB,KAAK,KAAK,MAAM,cAAc,gBAAgB;AAAA,EAC9F;AACD;AAEA,IAAM,2BAAN,cAAqE,uBAA+B;AAAA,EACnG,YACkB,MACA,OAChB;AACD,UAAM;AAHW;AACA;AAAA,EAGlB;AAAA,EAEA,cAAc,kBAAqD;AAClE,WAAO,KAAK,KAAK,cAAc,gBAAgB,KAAK,KAAK,MAAM,cAAc,gBAAgB;AAAA,EAC9F;AACD;AAEA,IAAM,4BAAN,cAAsE,uBAA+B;AAAA,EACpG,YAA6B,MAAsC;AAClE,UAAM;AADsB;AAAA,EAE7B;AAAA,EAEA,cAAc,kBAAqD;AAClE,WAAO,CAAC,KAAK,KAAK,cAAc,gBAAgB;AAAA,EACjD;AACD;","names":["_a","tool","rule","Anthropic","OpenAI","import_openai","OpenAI","supportedModels"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/domain/model-context/model-context.ts","../src/domain/model-context/context-item/context-item.ts","../src/domain/model-context/context-item/item-content/item-content.ts","../src/domain/model-context/context-item/item-content/input-text.ts","../src/domain/model-context/context-item/client-item/user-message.ts","../src/domain/model-context/context-item/client-item/developer-message.ts","../src/domain/model-context/context-item/item-content/output-text.ts","../src/domain/model-context/context-item/model-item/model-message.ts","../src/domain/model-context/context-item/model-item/function-call.ts","../src/domain/model-context/context-item/model-item/reasoning.ts","../src/domain/generative-model/request-validation/structured-output.ts","../src/domain/model-context/context-item/client-item/function-call-output.ts","../src/domain/generative-model/token-usage.ts","../src/infrastructure/mcp/mcp-client.ts","../src/infrastructure/mcp/mcp-tool-registry.ts","../src/domain/model-context/context-item/client-item/system-message.ts","../src/domain/agentic-environment/semantic-event/event.ts","../src/application/states/inference.ts","../src/domain/agentic-environment/participant/participant.ts","../src/domain/agentic-environment/participant/memory.ts","../src/domain/agentic-environment/participant/agent.ts","../src/application/use-cases/create-agent.ts","../src/domain/agentic-environment/participant/human.ts","../src/application/use-cases/create-human.ts","../src/domain/agentic-environment/runtime-state.ts","../src/application/services/runtime.ts","../src/domain/agentic-environment/semantic-event/event-processor.ts","../src/application/use-cases/join.ts","../src/application/use-cases/leave.ts","../src/application/use-cases/send-message.ts","../src/domain/agentic-environment/loop/agent-loop.ts","../src/domain/agentic-environment/loop/state-executor.ts","../src/application/states/function-call.ts","../src/application/states/message-received.ts","../src/application/states/model-message.ts","../src/domain/agentic-environment/loop/transition-resolver.ts","../src/domain/agentic-environment/loop/transition-specification.ts","../src/domain/agentic-environment/loop/transition-rule.ts","../src/domain/agentic-environment/loop/event-publisher-visitor.ts","../src/application/states/inference-streaming.ts","../src/application/use-cases/run-loop.ts","../src/infrastructure/providers/anthropic/endpoints/anthropic-messages-mapper.ts","../src/infrastructure/providers/anthropic/endpoints/anthropic-messages.ts","../src/infrastructure/providers/openai/endpoints/openai-responses.ts","../src/domain/model-context/context-item/item-content/summary-text.ts","../src/infrastructure/providers/openai/endpoints/openai-responses-mapper.ts","../src/infrastructure/providers/gemini/endpoints/gemini-generate-content.ts","../src/infrastructure/providers/gemini/endpoints/gemini-generate-content-mapper.ts","../src/infrastructure/providers/openai/endpoints/openai-chat-completions-mapper.ts","../src/infrastructure/providers/openai/endpoints/openai-chat-completions.ts","../src/infrastructure/providers/anthropic/models/claude-4-6-sonnet.ts","../src/infrastructure/providers/anthropic/models/claude-4-8-opus.ts","../src/infrastructure/providers/anthropic/models/claude-4-7-opus.ts","../src/infrastructure/providers/gemini/models/gemini-3-5-flash.ts","../src/infrastructure/providers/gemini/models/gemini-3-1-pro.ts","../src/infrastructure/providers/deepseek/models/deepseek-v4-flash.ts","../src/infrastructure/providers/deepseek/models/deepseek-v4-pro.ts","../src/infrastructure/providers/openai/models/gpt-5-4.ts","../src/infrastructure/providers/openai/models/gpt-5-4-mini.ts","../src/infrastructure/providers/openai/models/gpt-5-4-nano.ts","../src/infrastructure/providers/openai/models/gpt-5-5.ts","../src/infrastructure/providers/anthropic/models/claude-4-5-haiku.ts","../src/application/services/models.ts","../src/domain/generative-model/request-validation/reasoning-effort.ts","../src/domain/generative-model/request-validation/tool-calling.ts","../src/domain/generative-model/request-validation/streaming.ts","../src/domain/generative-model/request-validation/context.ts","../src/domain/generative-model/request-validation/inference-request-validator.ts","../src/application/services/inference-runner.ts","../src/application/services/function-call.ts","../src/application/use-cases/send-event.ts","../src/define-runtime.ts","../src/domain/agentic-environment/situation/situation-specification.ts"],"sourcesContent":["import { ModelContext } from \"@domain/model-context/model-context\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { UserMessageItem } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { DeveloperMessageItem } from \"@domain/model-context/context-item/client-item/developer-message\"\nimport { ModelMessageItem } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { FunctionCallItem } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { ReasoningItem } from \"@domain/model-context/context-item/model-item/reasoning\"\nimport { StructuredOutputFormat } from \"@domain/generative-model/request-validation/structured-output\"\nimport { FunctionCallOutputItem } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { ModelContextRepository } from \"@domain/model-context/model-context-repository\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/generative-model/token-usage\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { McpClient, type McpServerConfig, type McpToolSpec } from \"@infra/mcp/mcp-client\"\nimport { McpToolRegistry } from \"@infra/mcp/mcp-tool-registry\"\nimport { SystemMessageItem } from \"@domain/model-context/context-item/client-item/system-message\"\nimport { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\nimport { Endpoint } from \"@domain/generative-model/endpoint\"\nimport { InferenceInput, InferenceOutput, InferenceRunner } from \"@app/states/inference\"\nimport { Participant } from \"@domain/agentic-environment/participant/participant\"\nimport { createAgent } from \"@app/use-cases/create-agent\"\nimport { createHuman } from \"@app/use-cases/create-human\"\nimport { RuntimeState } from \"@domain/agentic-environment/runtime-state\"\nimport { defineRuntime, type InferenceRunnerConfig } from \"./define-runtime\"\nimport { supportedModels } from \"@app/services/models\"\nimport { OpenAIResponses } from \"@infra/providers/openai/endpoints/openai-responses\"\nimport { OpenAIChatCompletions } from \"@infra/providers/openai/endpoints/openai-chat-completions\"\nimport { AnthropicMessages } from \"@infra/providers/anthropic/endpoints/anthropic-messages\"\nimport { GeminiGenerateContent } from \"@infra/providers/gemini/endpoints/gemini-generate-content\"\nimport { Agent } from \"@domain/agentic-environment/participant/agent\"\nimport { Human } from \"@domain/agentic-environment/participant/human\"\nimport {\n\tSituationContext,\n\tSituationHandler,\n\tSituationProcessor,\n} from \"@domain/agentic-environment/situation/situation-handler\"\nimport { SituationSpecification } from \"@domain/agentic-environment/situation/situation-specification\"\nimport { DefaultInferenceRunner } from \"@app/services/inference-runner\"\nimport { InterceptionHandler } from \"@domain/agentic-environment/loop/interception\"\nimport {\n\tExecutableLoopStateId,\n\tExecutableTransition,\n\tLoopStateExecution,\n\tLoopTransition,\n} from \"@domain/agentic-environment/loop/loop-state\"\n\nexport {\n\tdefineRuntime,\n\tRuntimeState,\n\tcreateAgent,\n\tcreateHuman,\n\tModelContext,\n\tModelContextRepository,\n\tContextItem,\n\tSemanticEvent,\n\tUserMessageItem,\n\tDeveloperMessageItem,\n\tSystemMessageItem,\n\tModelMessageItem,\n\tFunctionCallItem,\n\tFunctionCallOutputItem,\n\tReasoningItem,\n\tStructuredOutputFormat,\n\tTokenUsage,\n\tInputTokenDetails,\n\tOutputTokenDetails,\n\tTool,\n\tMcpClient,\n\ttype McpServerConfig,\n\ttype McpToolSpec,\n\tMcpToolRegistry,\n\tEndpoint,\n\tsupportedModels,\n\tOpenAIResponses,\n\tOpenAIChatCompletions,\n\tAnthropicMessages,\n\tGeminiGenerateContent,\n\tParticipant,\n\tAgent,\n\tHuman,\n\tSituationHandler,\n\tSituationProcessor,\n\tSituationSpecification,\n\tSituationContext,\n\tInterceptionHandler,\n\tLoopStateExecution,\n\tLoopTransition,\n\tExecutableLoopStateId,\n\tExecutableTransition,\n\tInferenceOutput,\n\tInferenceInput,\n\tInferenceRunner,\n\tDefaultInferenceRunner,\n\tInferenceRunnerConfig,\n}\n","import type { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { FunctionCallItem } from \"./context-item/model-item/function-call\"\nimport { ModelMessageItem } from \"./context-item/model-item/model-message\"\nimport { ReasoningItem } from \"./context-item/model-item/reasoning\"\n\nexport type ModelContextItem = ModelMessageItem | FunctionCallItem | ReasoningItem\n\nexport class ModelContext {\n\treadonly id: string\n\treadonly items: ContextItem[]\n\n\tconstructor(id: string, items: ContextItem[]) {\n\t\tthis.id = id\n\t\tthis.items = items\n\t}\n\n\tgetItems(): ContextItem[] {\n\t\treturn this.items\n\t}\n\n\taddContextItems(contextItems: ContextItem[]): ModelContext {\n\t\tthis.items.push(...contextItems)\n\t\treturn this\n\t}\n\n\taddContextItem(item: ContextItem): ModelContext {\n\t\tthis.items.push(item)\n\t\treturn this\n\t}\n\n\tstatic create(): ModelContext {\n\t\tconst id = crypto.randomUUID()\n\t\treturn new ModelContext(id, [])\n\t}\n\n\tstatic rehydrate(data: { id: string; items: ContextItem[] }): ModelContext {\n\t\treturn new ModelContext(data.id, data.items)\n\t}\n}\n","export abstract class ContextItem {\n\tabstract readonly type: string\n\n\tgetType(): string {\n\t\treturn this.type\n\t}\n}\n","export abstract class ItemContent {\n\tabstract readonly type: string\n}\n","import { ItemContent } from \"@domain/model-context/context-item/item-content/item-content\"\n\nexport class InputText extends ItemContent {\n\treadonly type = \"input_text\"\n\n\tprivate constructor(public readonly text: string) {\n\t\tsuper()\n\t}\n\n\tstatic create(text: string): InputText {\n\t\treturn new InputText(text)\n\t}\n\n\tstatic rehydrate(data: { text: string }): InputText {\n\t\treturn new InputText(data.text)\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\n\nexport class UserMessageItem extends ContextItem {\n\treadonly type = \"message\"\n\treadonly role = \"user\"\n\treadonly content: InputText\n\n\tprivate constructor(content: InputText) {\n\t\tsuper()\n\t\tthis.content = content\n\t}\n\n\tstatic create(text: string): UserMessageItem {\n\t\tconst content = InputText.create(text)\n\t\treturn new UserMessageItem(content)\n\t}\n\n\tstatic rehydrate(data: { text: string }): UserMessageItem {\n\t\tconst content = InputText.rehydrate(data)\n\t\treturn new UserMessageItem(content)\n\t}\n}\n","import { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class DeveloperMessageItem extends ContextItem {\n\treadonly type = \"message\"\n\treadonly role = \"developer\"\n\treadonly content: InputText\n\n\tprivate constructor(content: InputText) {\n\t\tsuper()\n\t\tthis.content = content\n\t}\n\n\tstatic create(text: string): DeveloperMessageItem {\n\t\tconst content = InputText.create(text)\n\t\treturn new DeveloperMessageItem(content)\n\t}\n\n\tstatic rehydrate(data: { text: string }): DeveloperMessageItem {\n\t\tconst content = InputText.rehydrate(data)\n\t\treturn new DeveloperMessageItem(content)\n\t}\n}\n","import { ItemContent } from \"@domain/model-context/context-item/item-content/item-content\"\n\nexport class OutputText extends ItemContent {\n\treadonly type = \"output_text\"\n\n\tprivate constructor(public readonly text: string) {\n\t\tsuper()\n\t}\n\n\tstatic rehydrate(data: { text: string }): OutputText {\n\t\treturn new OutputText(data.text)\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { OutputText } from \"@domain/model-context/context-item/item-content/output-text\"\n\nexport class ModelMessageItem extends ContextItem {\n\treadonly type = \"message\"\n\treadonly role = \"assistant\"\n\treadonly content: OutputText\n\n\tprivate constructor(content: OutputText) {\n\t\tsuper()\n\t\tthis.content = content\n\t}\n\n\tstatic rehydrate(data: { text: string }): ModelMessageItem {\n\t\tconst content = OutputText.rehydrate(data)\n\t\treturn new ModelMessageItem(content)\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class FunctionCallItem extends ContextItem {\n\treadonly type = \"function_call\"\n\treadonly callId: string\n\treadonly name: string\n\treadonly args: string\n\n\tprivate constructor(callId: string, name: string, args: string) {\n\t\tsuper()\n\t\tthis.callId = callId\n\t\tthis.name = name\n\t\tthis.args = args\n\t}\n\n\tstatic rehydrate(data: { callId: string; name: string; args: string }): FunctionCallItem {\n\t\treturn new FunctionCallItem(data.callId, data.name, data.args)\n\t}\n}\n","import type { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\nimport type { SummaryText } from \"@domain/model-context/context-item/item-content/summary-text\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class ReasoningItem extends ContextItem {\n\treadonly type = \"reasoning\"\n\treadonly content: InputText | undefined\n\treadonly encryptedContent: string | undefined\n\treadonly summary: SummaryText[]\n\n\tprivate constructor(\n\t\tcontent: InputText | undefined,\n\t\tencryptedContent?: string | undefined,\n\t\tsummary: SummaryText[] = [],\n\t) {\n\t\tsuper()\n\t\tthis.content = content\n\t\tthis.encryptedContent = encryptedContent\n\t\tthis.summary = summary\n\t}\n\n\tstatic rehydrate(data: {\n\t\tcontent: InputText | undefined\n\t\tencryptedContent: string | undefined\n\t\tsummary: SummaryText[]\n\t}): ReasoningItem {\n\t\treturn new ReasoningItem(data.content, data.encryptedContent, data.summary)\n\t}\n}\n","import type { InferenceInput } from \"@app/states/inference\"\nimport type { ModelSpecification } from \"../generative-model\"\nimport type { RequestValidationRule } from \"./rule\"\n\nexport type StructuredOutputFormat = {\n\tname?: string\n\tschema: Record<string, any>\n\tstrict?: boolean\n}\n\nexport class StructuredOutputValidation implements RequestValidationRule {\n\treadonly name = \"structured-output\"\n\n\tisValid(inferenceInput: InferenceInput, model: ModelSpecification): boolean {\n\t\tif (inferenceInput.structuredOutput === undefined) {\n\t\t\treturn true\n\t\t}\n\n\t\treturn model.supportsStructuredOutput\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\n\nexport class FunctionCallOutputItem extends ContextItem {\n\treadonly type = \"function_call_output\"\n\treadonly callId: string\n\treadonly output: InputText\n\n\tprivate constructor(callId: string, output: InputText) {\n\t\tsuper()\n\t\tthis.callId = callId\n\t\tthis.output = output\n\t}\n\n\tstatic create(callId: string, output: string): FunctionCallOutputItem {\n\t\tconst outputText = InputText.create(output)\n\t\treturn new FunctionCallOutputItem(callId, outputText)\n\t}\n\n\tstatic rehydrate(data: { callId: string; output: InputText }): FunctionCallOutputItem {\n\t\treturn new FunctionCallOutputItem(data.callId, data.output)\n\t}\n}\n","export class InputTokenDetails {\n\treadonly cached_tokens: number\n\n\tconstructor(cached_tokens: number) {\n\t\tthis.cached_tokens = cached_tokens\n\t}\n}\n\nexport class OutputTokenDetails {\n\treadonly reasoning_tokens: number\n\n\tconstructor(reasoning_tokens: number) {\n\t\tthis.reasoning_tokens = reasoning_tokens\n\t}\n}\n\nexport class TokenUsage {\n\treadonly inputTokens: number\n\treadonly outputTokens: number\n\treadonly totalTokens: number\n\treadonly inputTokenDetails: InputTokenDetails\n\treadonly outputTokenDetails: OutputTokenDetails\n\n\tconstructor(\n\t\tinputTokens: number,\n\t\toutputTokens: number,\n\t\ttotalTokens: number,\n\t\tinputTokenDetails: InputTokenDetails,\n\t\toutputTokenDetails: OutputTokenDetails,\n\t) {\n\t\tthis.inputTokens = inputTokens\n\t\tthis.outputTokens = outputTokens\n\t\tthis.totalTokens = totalTokens\n\t\tthis.inputTokenDetails = inputTokenDetails\n\t\tthis.outputTokenDetails = outputTokenDetails\n\t}\n}\n","import { Client } from \"@modelcontextprotocol/sdk/client/index.js\"\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\"\n\nexport interface McpServerConfig {\n\t/** The MCP server URL, e.g. https://api.githubcopilot.com/mcp/ */\n\turl: string\n\t/** Bearer token sent as `Authorization: Bearer <token>` (e.g. a GitHub token). */\n\tauthToken?: string\n\t/** Extra headers merged into every request (overridden by `authToken` for Authorization). */\n\theaders?: Record<string, string>\n\t/** Client name reported to the server (defaults to \"mozaik\"). */\n\tname?: string\n}\n\nexport interface McpToolSpec {\n\tname: string\n\tdescription: string\n\t/** JSON Schema for the tool's arguments (maps 1:1 to FunctionTool.parameters). */\n\tinputSchema: Record<string, any>\n}\n\n/**\n * A thin wrapper over the MCP TypeScript SDK using the Streamable HTTP transport — what\n * remote MCP servers (e.g. GitHub's `api.githubcopilot.com/mcp/`) speak. One client per\n * server; lazily connects on first use. Infrastructure-only: the domain never sees this.\n */\nexport class McpClient {\n\tprivate readonly client: Client\n\tprivate readonly transport: StreamableHTTPClientTransport\n\tprivate connected = false\n\n\tconstructor(private readonly config: McpServerConfig) {\n\t\tconst headers: Record<string, string> = { ...(config.headers ?? {}) }\n\t\tif (config.authToken) headers.Authorization = `Bearer ${config.authToken}`\n\t\tthis.transport = new StreamableHTTPClientTransport(\n\t\t\tnew URL(config.url),\n\t\t\tObject.keys(headers).length > 0 ? { requestInit: { headers } } : undefined,\n\t\t)\n\t\tthis.client = new Client({ name: config.name ?? \"mozaik\", version: \"1.0.0\" }, { capabilities: {} })\n\t}\n\n\tasync connect(): Promise<void> {\n\t\tif (this.connected) return\n\t\tawait this.client.connect(this.transport)\n\t\tthis.connected = true\n\t}\n\n\t/** The tools this server exposes. */\n\tasync listTools(): Promise<McpToolSpec[]> {\n\t\tawait this.connect()\n\t\tconst res = await this.client.listTools()\n\t\treturn (res.tools ?? []).map((t) => ({\n\t\t\tname: t.name,\n\t\t\tdescription: t.description ?? \"\",\n\t\t\tinputSchema: (t.inputSchema as Record<string, any>) ?? { type: \"object\", properties: {} },\n\t\t}))\n\t}\n\n\t/** Call a tool by name; returns its text output. Throws if the server flags an error. */\n\tasync callTool(name: string, args: Record<string, any>): Promise<string> {\n\t\tawait this.connect()\n\t\tconst res = await this.client.callTool({ name, arguments: args ?? {} })\n\t\tconst text = extractText(res)\n\t\tif ((res as { isError?: boolean }).isError) {\n\t\t\tthrow new Error(`MCP tool \"${name}\" failed: ${text || \"unknown error\"}`)\n\t\t}\n\t\treturn text\n\t}\n\n\tasync close(): Promise<void> {\n\t\tif (!this.connected) return\n\t\ttry {\n\t\t\tawait this.client.close()\n\t\t} catch {\n\t\t\t// best-effort teardown — the transport may already be gone\n\t\t}\n\t\tthis.connected = false\n\t}\n}\n\n/** Concatenate the text blocks of an MCP tool result (ignores non-text content). */\nfunction extractText(res: unknown): string {\n\tconst content = (res as { content?: unknown }).content\n\tif (!Array.isArray(content)) return \"\"\n\treturn content\n\t\t.filter((c): c is { type: \"text\"; text: string } => (c as { type?: string })?.type === \"text\" && typeof (c as { text?: unknown }).text === \"string\")\n\t\t.map((c) => c.text)\n\t\t.join(\"\\n\")\n}\n","import type { FunctionTool } from \"@domain/generative-model/tool\"\nimport { McpClient, type McpServerConfig } from \"./mcp-client.js\"\n\n/** The slice of an MCP client the registry needs — lets tests inject a fake. */\nexport interface McpClientLike {\n\tlistTools(): Promise<Array<{ name: string; description: string; inputSchema: Record<string, any> }>>\n\tcallTool(name: string, args: Record<string, any>): Promise<string>\n\tclose(): Promise<void>\n}\n\n/**\n * Connects to one or more MCP servers and exposes their tools as mozaik `FunctionTool`s.\n * Each tool's `invoke()` proxies the call back to its MCP server. Because they are plain\n * FunctionTools, every provider mapper and the existing function-call loop handle them\n * with no changes — MCP support adds no new tool type and touches no provider code.\n *\n * `strict` is false: MCP servers publish arbitrary JSON Schemas that won't always satisfy\n * a provider's strict function-calling mode.\n */\nexport class McpToolRegistry {\n\tprivate readonly clients: McpClientLike[] = []\n\n\tconstructor(\n\t\tprivate readonly servers: McpServerConfig[],\n\t\tprivate readonly createClient: (config: McpServerConfig) => McpClientLike = (config) => new McpClient(config),\n\t) {}\n\n\t/** Discover every tool across the configured servers, as FunctionTools ready to pass to a model. */\n\tasync discoverTools(): Promise<FunctionTool[]> {\n\t\tconst tools: FunctionTool[] = []\n\t\tfor (const server of this.servers) {\n\t\t\tconst client = this.createClient(server)\n\t\t\tthis.clients.push(client)\n\t\t\tfor (const spec of await client.listTools()) {\n\t\t\t\ttools.push({\n\t\t\t\t\ttype: \"function\",\n\t\t\t\t\tname: spec.name,\n\t\t\t\t\tdescription: spec.description,\n\t\t\t\t\tparameters: spec.inputSchema,\n\t\t\t\t\tstrict: false,\n\t\t\t\t\tinvoke: (args: unknown) => client.callTool(spec.name, (args as Record<string, any>) ?? {}),\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\treturn tools\n\t}\n\n\t/** Close all underlying MCP connections. */\n\tasync close(): Promise<void> {\n\t\tawait Promise.all(this.clients.map((c) => c.close()))\n\t}\n}\n","import { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class SystemMessageItem extends ContextItem {\n\treadonly type = \"message\"\n\treadonly role = \"system\"\n\treadonly content: InputText\n\n\tprivate constructor(content: InputText) {\n\t\tsuper()\n\t\tthis.content = content\n\t}\n\n\tstatic create(text: string): SystemMessageItem {\n\t\tconst content = InputText.create(text)\n\t\treturn new SystemMessageItem(content)\n\t}\n\n\tstatic rehydrate(data: { text: string }): SystemMessageItem {\n\t\tconst content = InputText.rehydrate(data)\n\t\treturn new SystemMessageItem(content)\n\t}\n}\n","import { ParticipantManifest } from \"../participant/participant\"\n\nexport class SemanticEvent<TType extends string = string, TPayload = unknown> {\n\treadonly type: TType\n\treadonly producerId: string\n\treadonly occurredAt: Date\n\treadonly payload: TPayload\n\n\tconstructor(type: TType, producerId: string, occurredAt: Date, payload: TPayload) {\n\t\tthis.type = type\n\t\tthis.producerId = producerId\n\t\tthis.occurredAt = occurredAt\n\t\tthis.payload = payload\n\t}\n\n\tstatic create<TType extends string = string, TPayload = unknown>(\n\t\ttype: TType,\n\t\tproducerId: string,\n\t\tpayload: TPayload,\n\t): SemanticEvent<TType, TPayload> {\n\t\tconst occurredAt = new Date()\n\t\treturn new SemanticEvent(type, producerId, occurredAt, payload)\n\t}\n}\n\nexport class ParticipantJoinedEvent extends SemanticEvent<\"participant.joined\", ParticipantManifest> {\n\tstatic init(manifest: ParticipantManifest): ParticipantJoinedEvent {\n\t\treturn SemanticEvent.create(\"participant.joined\", manifest.id, manifest)\n\t}\n}\n\nexport class ParticipantLeftEvent extends SemanticEvent<\"participant.left\", ParticipantManifest> {\n\tstatic init(manifest: ParticipantManifest): ParticipantLeftEvent {\n\t\treturn SemanticEvent.create(\"participant.left\", manifest.id, manifest)\n\t}\n}\n\nexport class MessageSentEvent extends SemanticEvent<\"message.sent\", { message: string }> {\n\tstatic init(producerId: string, message: string): MessageSentEvent {\n\t\treturn SemanticEvent.create(\"message.sent\", producerId, { message })\n\t}\n}\n\nexport class ModelAnswerEvent extends SemanticEvent<\"model.answer\", { answer: string }> {\n\tstatic init(producerId: string, answer: string): ModelAnswerEvent {\n\t\treturn ModelAnswerEvent.create(\"model.answer\", producerId, { answer })\n\t}\n}\n","import { LoopState, LoopStateExecution } from \"@domain/agentic-environment/loop/loop-state\"\nimport { ModelMessageItem } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { ReasoningItem } from \"@domain/model-context/context-item/model-item/reasoning\"\nimport { FunctionCallItem } from \"@domain/model-context/context-item/model-item/function-call\"\n\nimport type { Tool } from \"@domain/generative-model/tool\"\nimport type { ModelContext } from \"@domain/model-context/model-context\"\nimport type { StructuredOutputFormat } from \"@domain/generative-model/request-validation/structured-output\"\nimport { LoopVisitor } from \"@domain/agentic-environment/loop/loop-visitor\"\nimport { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\nimport { TokenUsage } from \"@domain/generative-model/token-usage\"\n\nexport type InferenceInput = {\n\tmodel: string\n\tmaxOutputTokens?: number\n\treasoningEffort?: string\n\ttools?: Tool[]\n\tstreaming?: boolean\n\tstructuredOutput?: StructuredOutputFormat\n\tcontext: ModelContext\n}\n\nexport type InferenceItem = FunctionCallItem | ReasoningItem | ModelMessageItem\n\nexport type InferenceOutput = {\n\titems: InferenceItem[]\n\ttokenUsage: TokenUsage | undefined\n\trowResponse: any\n}\n\nexport interface InferenceRunner {\n\trun(request: InferenceInput): Promise<InferenceOutput>\n\tstream(request: InferenceInput): AsyncGenerator<SemanticEvent>\n}\n\nexport class InferenceState implements LoopState<InferenceInput, LoopStateExecution<\"inference\">> {\n\treadonly id = \"inference\"\n\n\tconstructor(private readonly inferenceRunner: InferenceRunner) {}\n\n\tasync run(input: InferenceInput, loopVisitor: LoopVisitor): Promise<LoopStateExecution<\"inference\">> {\n\t\tloopVisitor.visitInferenceStarted(input)\n\n\t\tconst output = await this.inferenceRunner.run(input)\n\n\t\tloopVisitor.visitInferenceCompleted(output)\n\t\treturn {\n\t\t\tstateId: this.id,\n\t\t\tinput,\n\t\t\toutput,\n\t\t}\n\t}\n}\n","import { SituationHandler } from \"../situation/situation-handler\"\n\nexport type ParticipantRole = \"agent\" | \"human\"\n\nexport type ParticipantManifest = {\n\treadonly id: string\n\treadonly name: string\n\treadonly role: ParticipantRole\n\treadonly capabilities?: readonly string[]\n}\n\nexport abstract class Participant {\n\tprivate readonly manifest: ParticipantManifest\n\tprivate handlers: SituationHandler[]\n\n\tprotected constructor(manifest: ParticipantManifest, handlers: SituationHandler[]) {\n\t\tthis.manifest = manifest\n\t\tthis.handlers = handlers\n\t}\n\n\tgetManifest(): ParticipantManifest {\n\t\treturn this.manifest\n\t}\n\n\tgetId(): string {\n\t\treturn this.manifest.id\n\t}\n\n\tgetHandlers(): SituationHandler[] {\n\t\treturn this.handlers\n\t}\n\n\tsetHandlers(handlers: SituationHandler[]): void {\n\t\tthis.handlers = handlers\n\t}\n}\n","import { ModelContext } from \"@domain/model-context/model-context\"\n\nexport class Memory {\n\tprivate readonly context: ModelContext\n\tprivate constructor(context: ModelContext) {\n\t\tthis.context = context\n\t}\n\n\tgetContext(): ModelContext {\n\t\treturn this.context\n\t}\n\n\tstatic create(): Memory {\n\t\tconst context = ModelContext.create()\n\t\treturn new Memory(context)\n\t}\n}\n","import { Memory } from \"./memory\"\nimport { Participant, ParticipantManifest } from \"./participant\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { SituationHandler } from \"../situation/situation-handler\"\nimport { DeveloperMessageItem } from \"@domain/model-context/context-item/client-item/developer-message\"\n\nexport class Agent extends Participant {\n\tprivate memory: Memory\n\tprivate developerMessage: string\n\tprivate tools: Tool[]\n\n\tconstructor(\n\t\tmanifest: ParticipantManifest,\n\t\tdeveloperMessage: string,\n\t\ttools: Tool[],\n\t\tmemory: Memory,\n\t\thandlers: SituationHandler[],\n\t) {\n\t\tsuper(manifest, handlers)\n\t\tthis.memory = memory\n\t\tthis.developerMessage = developerMessage\n\t\tthis.tools = tools\n\t}\n\n\tstatic create({\n\t\tname,\n\t\tinstruction,\n\t\ttools,\n\t\tcapabilities,\n\t\thandlers,\n\t}: {\n\t\tinstruction: string\n\t\ttools: Tool[]\n\t\tname: string\n\t\tcapabilities: readonly string[]\n\t\thandlers: SituationHandler[]\n\t}): Agent {\n\t\tconst id = crypto.randomUUID()\n\t\tconst memory = Memory.create()\n\t\tconst manifest: ParticipantManifest = { id, name, capabilities, role: \"agent\" }\n\n\t\tconst developerMessage = DeveloperMessageItem.create(instruction)\n\t\tmemory.getContext().addContextItem(developerMessage)\n\t\treturn new Agent(manifest, instruction, tools, memory, handlers)\n\t}\n\n\tgetTools(): Tool[] {\n\t\treturn this.tools\n\t}\n\n\tgetDeveloperMessage(): string {\n\t\treturn this.developerMessage\n\t}\n\n\tgetMemory(): Memory {\n\t\treturn this.memory\n\t}\n}\n","import { Agent } from \"@domain/agentic-environment/participant/agent\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { SituationHandler } from \"@domain/agentic-environment/situation/situation-handler\"\n\nexport function createAgent({\n\tname,\n\tcapabilities,\n\tinstruction,\n\ttools,\n\thandlers,\n}: {\n\tname: string\n\tcapabilities: readonly string[]\n\tinstruction: string\n\ttools: Tool[]\n\thandlers: SituationHandler[]\n}): Agent {\n\treturn Agent.create({ name, instruction, capabilities, tools, handlers })\n}\n","import { Participant, ParticipantManifest } from \"./participant\"\nimport { SituationHandler } from \"../situation/situation-handler\"\n\nexport class Human extends Participant {\n\tconstructor(manifest: ParticipantManifest, handlers: SituationHandler[]) {\n\t\tsuper(manifest, handlers)\n\t}\n\n\tstatic create({\n\t\tname,\n\t\tcapabilities,\n\t\thandlers,\n\t}: {\n\t\tname: string\n\t\tcapabilities: readonly string[]\n\t\thandlers: SituationHandler[]\n\t}): Human {\n\t\tconst id = crypto.randomUUID()\n\t\tconst manifest: ParticipantManifest = { id, name, capabilities, role: \"human\" }\n\t\treturn new Human(manifest, handlers)\n\t}\n}\n","import { Human } from \"@domain/agentic-environment/participant/human\"\nimport { SituationHandler } from \"@domain/agentic-environment/situation/situation-handler\"\n\nexport function createHuman({\n\tname,\n\tcapabilities,\n\thandlers,\n}: {\n\tname: string\n\tcapabilities: readonly string[]\n\thandlers: SituationHandler[]\n}): Human {\n\treturn Human.create({ name, capabilities, handlers })\n}\n","import { Participant } from \"./participant/participant\"\n\nexport abstract class RuntimeState {\n\tparticipants: Map<string, Participant> = new Map()\n\n\taddParticipant(participant: Participant): void {\n\t\tconst isExists = this.participants.get(participant.getId())\n\n\t\tif (isExists) return\n\n\t\tthis.participants.set(participant.getId(), participant)\n\t}\n\n\tremoveParticipant(participant: Participant): void {\n\t\tthis.participants.delete(participant.getId())\n\t}\n\n\tgetParticipant(id: string): Participant | undefined {\n\t\treturn this.participants.get(id)\n\t}\n\n\tgetParticipants(): readonly Participant[] {\n\t\treturn [...this.participants.values()]\n\t}\n}\n","import { Participant } from \"@domain/agentic-environment/participant/participant\"\nimport { RuntimeState } from \"@domain/agentic-environment/runtime-state\"\nimport { EventProcessor } from \"@domain/agentic-environment/semantic-event/event-processor\"\nimport {\n\tParticipantJoinedEvent,\n\tParticipantLeftEvent,\n\tSemanticEvent,\n} from \"@domain/agentic-environment/semantic-event/event\"\nimport { InferenceRunner } from \"@app/states/inference\"\nimport { FunctionCallRunner } from \"@app/states/function-call\"\n\nexport class RuntimeService<TRuntimeState extends RuntimeState> {\n\tconstructor(\n\t\tpublic readonly state: TRuntimeState,\n\t\tprivate readonly processor: EventProcessor,\n\t\tprivate readonly inferenceRunner: InferenceRunner,\n\t\tprivate readonly functionCallRunner: FunctionCallRunner,\n\t) {}\n\n\tjoin(participant: Participant): void {\n\t\tthis.state.addParticipant(participant)\n\t\tthis.publish(ParticipantJoinedEvent.init(participant.getManifest()))\n\t}\n\n\tleave(participant: Participant): void {\n\t\tthis.state.removeParticipant(participant)\n\t\tthis.publish(ParticipantLeftEvent.init(participant.getManifest()))\n\t}\n\n\tpublish(event: SemanticEvent): void {\n\t\tfor (const participant of this.state.getParticipants()) {\n\t\t\tthis.processor.process(event, participant)\n\t\t}\n\t}\n\n\tgetParticipant(id: string): Participant | undefined {\n\t\tif (!this.state.getParticipant(id)) {\n\t\t\tthrow new Error(`Participant ${id} not found`)\n\t\t}\n\n\t\treturn this.state.getParticipant(id)\n\t}\n\n\tgetInferenceRunner(): InferenceRunner {\n\t\treturn this.inferenceRunner\n\t}\n\n\tgetFunctionCallRunner(): FunctionCallRunner {\n\t\treturn this.functionCallRunner\n\t}\n}\n","import { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\nimport { Participant } from \"../participant/participant\"\n\nexport class EventProcessor {\n\tprocess(event: SemanticEvent, consumer: Participant): void {\n\t\tfor (const handler of consumer.getHandlers()) {\n\t\t\tconst isSatisfied = handler.specification.isSatisfiedBy({\n\t\t\t\tevent,\n\t\t\t\tparticipant: consumer,\n\t\t\t})\n\t\t\tif (isSatisfied) {\n\t\t\t\thandler.processor.apply({ event, participant: consumer })\n\t\t\t}\n\t\t}\n\t}\n}\n","import { RuntimeService } from \"@app/services/runtime\"\nimport { Participant } from \"@domain/agentic-environment/participant/participant\"\nimport { RuntimeState } from \"@domain/agentic-environment/runtime-state\"\n\nexport function createJoin<TRuntimeState extends RuntimeState>(resolveRuntime: () => RuntimeService<TRuntimeState>) {\n\treturn function join(participant: Participant): void {\n\t\tresolveRuntime().join(participant)\n\t}\n}\n","import { RuntimeService } from \"@app/services/runtime\"\nimport { Participant } from \"@domain/agentic-environment/participant/participant\"\nimport { RuntimeState } from \"@domain/agentic-environment/runtime-state\"\n\nexport function createLeave<TRuntimeState extends RuntimeState>(resolveRuntime: () => RuntimeService<TRuntimeState>) {\n\treturn function leave(participant: Participant): void {\n\t\tresolveRuntime().leave(participant)\n\t}\n}\n","import { RuntimeService } from \"@app/services/runtime\"\nimport { RuntimeState } from \"@domain/agentic-environment/runtime-state\"\nimport { MessageSentEvent } from \"@domain/agentic-environment/semantic-event/event\"\n\nexport function createSendMessage<TRuntimeState extends RuntimeState>(\n\tresolveRuntime: () => RuntimeService<TRuntimeState>,\n) {\n\treturn function sendMessage(message: string, senderId: string): void {\n\t\tconst runtime = resolveRuntime()\n\t\tconst participant = runtime.getParticipant(senderId)\n\t\tif (!participant) {\n\t\t\tthrow new Error(`Participant ${senderId} not found`)\n\t\t}\n\n\t\tconst userMessage: MessageSentEvent = MessageSentEvent.init(senderId, message)\n\t\truntime.publish(userMessage)\n\t}\n}\n","import { InterceptionHandler } from \"./interception\"\nimport { LoopTransition, ReceivedMessage } from \"./loop-state\"\nimport { LoopVisitor } from \"./loop-visitor\"\nimport { LoopStateExecutor } from \"./state-executor\"\nimport { TransitionResolver } from \"./transition-resolver\"\n\nexport class AgentLoop {\n\tprivate constructor(\n\t\tprivate readonly loopId: string,\n\t\tprivate readonly stateExecutor: LoopStateExecutor,\n\t\tprivate readonly transitionResolver: TransitionResolver,\n\t\tprivate readonly interceptionHandler?: InterceptionHandler,\n\t) {}\n\n\tasync run(message: ReceivedMessage, loopVisitor: LoopVisitor): Promise<void> {\n\t\tlet transition: LoopTransition = {\n\t\t\tnextStateId: \"message_received\",\n\t\t\tinput: message,\n\t\t}\n\n\t\twhile (transition.nextStateId !== \"idle\") {\n\t\t\tconst isInterceptionSatisfied = this.interceptionHandler?.isSatisfiedBy(transition)\n\n\t\t\tif (isInterceptionSatisfied && this.interceptionHandler) {\n\t\t\t\tloopVisitor.visitInterceptionStarted(transition)\n\t\t\t\ttransition = await this.interceptionHandler.handle(transition)\n\t\t\t\tloopVisitor.visitInterceptionFinished(transition)\n\t\t\t}\n\n\t\t\tconst execution = await this.stateExecutor.execute(transition, loopVisitor)\n\t\t\ttransition = this.transitionResolver.resolve(execution)\n\t\t}\n\t}\n\n\tgetLoopId(): string {\n\t\treturn this.loopId\n\t}\n\n\tstatic create(\n\t\tstateExecutor: LoopStateExecutor,\n\t\ttransitionResolver: TransitionResolver,\n\t\tinterceptionHandler?: InterceptionHandler,\n\t): AgentLoop {\n\t\tconst loopId = crypto.randomUUID()\n\t\treturn new AgentLoop(loopId, stateExecutor, transitionResolver, interceptionHandler)\n\t}\n}\n","import { ExecutableLoopStateId, LoopStateExecution, LoopTransition } from \"./loop-state\"\nimport { LoopVisitor } from \"./loop-visitor\"\nimport { FunctionCallState } from \"@app/states/function-call\"\nimport { InferenceState } from \"@app/states/inference\"\nimport { MessageReceivedState } from \"@app/states/message-received\"\nimport { ModelMessageState } from \"@app/states/model-message\"\nimport { InferenceStreamingState } from \"@app/states/inference-streaming\"\n\nexport class LoopStateExecutor {\n\tconstructor(\n\t\tprivate readonly messageReceivedState: MessageReceivedState,\n\t\tprivate readonly inferenceState: InferenceState,\n\t\tprivate readonly inferenceStreamingState: InferenceStreamingState,\n\t\tprivate readonly functionCallState: FunctionCallState,\n\t\tprivate readonly modelMessageState: ModelMessageState,\n\t) {}\n\n\texecute(\n\t\ttransition: LoopTransition<\"message_received\">,\n\t\tloopVisitor: LoopVisitor,\n\t): Promise<LoopStateExecution<\"message_received\">>\n\n\texecute(transition: LoopTransition<\"inference\">, loopVisitor: LoopVisitor): Promise<LoopStateExecution<\"inference\">>\n\n\texecute(\n\t\ttransition: LoopTransition<\"function_call\">,\n\t\tloopVisitor: LoopVisitor,\n\t): Promise<LoopStateExecution<\"function_call\">>\n\n\texecute(\n\t\ttransition: LoopTransition<\"model_message\">,\n\t\tloopVisitor: LoopVisitor,\n\t): Promise<LoopStateExecution<\"model_message\">>\n\n\texecute(transition: LoopTransition<ExecutableLoopStateId>, loopVisitor: LoopVisitor): Promise<LoopStateExecution>\n\n\tasync execute(\n\t\ttransition: LoopTransition<ExecutableLoopStateId>,\n\t\tloopVisitor: LoopVisitor,\n\t): Promise<LoopStateExecution> {\n\t\tswitch (transition.nextStateId) {\n\t\t\tcase \"message_received\":\n\t\t\t\treturn await this.messageReceivedState.run(transition.input, loopVisitor)\n\n\t\t\tcase \"inference\":\n\t\t\t\treturn await this.inferenceState.run(transition.input, loopVisitor)\n\n\t\t\tcase \"inference_streaming\":\n\t\t\t\treturn await this.inferenceStreamingState.run(transition.input, loopVisitor)\n\n\t\t\tcase \"function_call\":\n\t\t\t\treturn await this.functionCallState.run(transition.input, loopVisitor)\n\n\t\t\tcase \"model_message\":\n\t\t\t\treturn await this.modelMessageState.run(transition.input, loopVisitor)\n\t\t}\n\t}\n}\n","import { FunctionCallItem } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { LoopState, LoopStateExecution } from \"@domain/agentic-environment/loop/loop-state\"\nimport { FunctionCallOutputItem } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { InferenceInput } from \"./inference\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { LoopVisitor } from \"@domain/agentic-environment/loop/loop-visitor\"\n\nexport interface FunctionCallRunner {\n\trun(call: FunctionCallItem, tool: Tool): Promise<FunctionCallOutputItem>\n}\n\nexport interface FunctionCallParams {\n\tcall: FunctionCallItem\n\tinferenceInput: InferenceInput\n}\n\nexport class FunctionCallState implements LoopState<FunctionCallParams, LoopStateExecution<\"function_call\">> {\n\treadonly id = \"function_call\"\n\n\tconstructor(private readonly functionCallRunner: FunctionCallRunner) {}\n\n\tasync run(input: FunctionCallParams, loopVisitor: LoopVisitor): Promise<LoopStateExecution<\"function_call\">> {\n\t\tloopVisitor.visitFunctionCallStarted(input)\n\n\t\tconst { call, inferenceInput } = input\n\n\t\tlet tool: Tool | undefined = inferenceInput.tools?.find((tool) => tool.name === call.name)\n\n\t\tif (!tool) {\n\t\t\treturn {\n\t\t\t\tstateId: this.id,\n\t\t\t\tinput,\n\t\t\t\toutput: {\n\t\t\t\t\titem: FunctionCallOutputItem.create(call.callId, `Error: unknown tool \"${call.name}\"`),\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tconst item = await this.functionCallRunner.run(call, tool)\n\n\t\tloopVisitor.visitFunctionCallCompleted(item)\n\t\treturn {\n\t\t\tstateId: this.id,\n\t\t\tinput,\n\t\t\toutput: {\n\t\t\t\titem,\n\t\t\t},\n\t\t}\n\t}\n}\n","import { InferenceInput } from \"@app/states/inference\"\nimport { UserMessageItem } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { LoopState, LoopStateExecution, ReceivedMessage } from \"@domain/agentic-environment/loop/loop-state\"\nimport { LoopVisitor } from \"@domain/agentic-environment/loop/loop-visitor\"\n\nexport class MessageReceivedState implements LoopState<ReceivedMessage, LoopStateExecution<\"message_received\">> {\n\treadonly id = \"message_received\"\n\n\tasync run(input: ReceivedMessage, loopVisitor: LoopVisitor): Promise<LoopStateExecution<\"message_received\">> {\n\t\tloopVisitor.visitMessageReceivedStarted(input)\n\n\t\tconst userMessage = UserMessageItem.create(input.content)\n\n\t\tconst output: InferenceInput = {\n\t\t\t...input.input,\n\t\t\tcontext: input.input.context.addContextItems([userMessage]),\n\t\t}\n\n\t\tloopVisitor.visitMessageReceivedCompleted(output)\n\t\treturn {\n\t\t\tstateId: this.id,\n\t\t\tinput,\n\t\t\toutput,\n\t\t}\n\t}\n}\n","import { LoopState, LoopStateExecution, ModelMessageParams } from \"@domain/agentic-environment/loop/loop-state\"\nimport { LoopVisitor } from \"@domain/agentic-environment/loop/loop-visitor\"\n\nexport class ModelMessageState implements LoopState<ModelMessageParams, LoopStateExecution<\"model_message\">> {\n\treadonly id = \"model_message\"\n\n\tasync run(input: ModelMessageParams, loopVisitor: LoopVisitor): Promise<LoopStateExecution<\"model_message\">> {\n\t\tloopVisitor.visitModelAnswer(input)\n\t\treturn {\n\t\t\tstateId: this.id,\n\t\t\tinput,\n\t\t\toutput: undefined,\n\t\t}\n\t}\n}\n","import { LoopTransitionRule } from \"./transition-rule\"\nimport { LoopStateExecution, LoopTransition } from \"./loop-state\"\n\nexport class TransitionResolver {\n\tconstructor(private readonly rules: LoopTransitionRule[]) {}\n\n\tresolve(execution: LoopStateExecution): LoopTransition {\n\t\tconst rule = this.rules.find((rule) => rule.specification.isSatisfiedBy(execution))\n\n\t\tif (!rule) {\n\t\t\tthrow new Error(`No transition rule found after \"${execution.stateId}\"`)\n\t\t}\n\n\t\treturn rule.createTransition(execution)\n\t}\n}\n","import { LoopStateExecution } from \"./loop-state\"\n\nexport interface TransitionSpecification {\n\tisSatisfiedBy(execution: LoopStateExecution): boolean\n}\n\nexport class AndSpecification implements TransitionSpecification {\n\tconstructor(\n\t\tprivate readonly left: TransitionSpecification,\n\t\tprivate readonly right: TransitionSpecification,\n\t) {}\n\n\tisSatisfiedBy(execution: LoopStateExecution): boolean {\n\t\treturn this.left.isSatisfiedBy(execution) && this.right.isSatisfiedBy(execution)\n\t}\n}\n\nexport class OrSpecification implements TransitionSpecification {\n\tconstructor(\n\t\tprivate readonly left: TransitionSpecification,\n\t\tprivate readonly right: TransitionSpecification,\n\t) {}\n\n\tisSatisfiedBy(execution: LoopStateExecution): boolean {\n\t\treturn this.left.isSatisfiedBy(execution) || this.right.isSatisfiedBy(execution)\n\t}\n}\n\nexport class NotSpecification implements TransitionSpecification {\n\tconstructor(private readonly specification: TransitionSpecification) {}\n\n\tisSatisfiedBy(execution: LoopStateExecution): boolean {\n\t\treturn !this.specification.isSatisfiedBy(execution)\n\t}\n}\n\n// ============================================================\n// Concrete transition specifications\n// ============================================================\n\nexport class MessageReceivedSpecification implements TransitionSpecification {\n\tisSatisfiedBy(execution: LoopStateExecution): boolean {\n\t\treturn execution.stateId === \"message_received\"\n\t}\n}\n\ntype InferenceExecution = Extract<LoopStateExecution, { stateId: \"inference\" | \"inference_streaming\" }>\n\n/** Buffered and streaming inference produce the same output, so both satisfy the inference specifications. */\nfunction isInferenceExecution(execution: LoopStateExecution): execution is InferenceExecution {\n\treturn execution.stateId === \"inference\" || execution.stateId === \"inference_streaming\"\n}\n\nexport class InferenceProducedFunctionCallSpecification implements TransitionSpecification {\n\tisSatisfiedBy(execution: LoopStateExecution): boolean {\n\t\treturn isInferenceExecution(execution) && execution.output.items.some((item) => item.type === \"function_call\")\n\t}\n}\n\nexport class InferenceProducedModelMessageSpecification implements TransitionSpecification {\n\tisSatisfiedBy(execution: LoopStateExecution): boolean {\n\t\treturn (\n\t\t\tisInferenceExecution(execution) &&\n\t\t\texecution.output.items.some((item) => item.type === \"message\" && item.role === \"assistant\")\n\t\t)\n\t}\n}\n\nexport class FunctionCallCompletedSpecification implements TransitionSpecification {\n\tisSatisfiedBy(execution: LoopStateExecution): boolean {\n\t\treturn execution.stateId === \"function_call\"\n\t}\n}\n\nexport class ModelMessageCompletedSpecification implements TransitionSpecification {\n\tisSatisfiedBy(execution: LoopStateExecution): boolean {\n\t\treturn execution.stateId === \"model_message\"\n\t}\n}\n\nexport class StreamingInferenceSpecification implements TransitionSpecification {\n\tisSatisfiedBy(execution: LoopStateExecution): boolean {\n\t\treturn execution.stateId === \"inference\" && execution.input.streaming === true\n\t}\n}\n","import { ModelMessageItem } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { LoopStateExecution, LoopTransition } from \"./loop-state\"\nimport {\n\tFunctionCallCompletedSpecification,\n\tInferenceProducedFunctionCallSpecification,\n\tInferenceProducedModelMessageSpecification,\n\tMessageReceivedSpecification,\n\tModelMessageCompletedSpecification,\n\tTransitionSpecification,\n} from \"./transition-specification\"\n\nexport interface LoopTransitionRule {\n\treadonly specification: TransitionSpecification\n\n\tcreateTransition(execution: LoopStateExecution): LoopTransition\n}\n\nexport class ContextPreparationToInferenceRule implements LoopTransitionRule {\n\treadonly specification = new MessageReceivedSpecification()\n\n\tcreateTransition(execution: LoopStateExecution): LoopTransition<\"inference\" | \"inference_streaming\"> {\n\t\tif (execution.stateId !== \"message_received\") {\n\t\t\tthrow new Error(\"Expected context_preparation execution\")\n\t\t}\n\n\t\tconst nextStateId = execution.output.streaming ? \"inference_streaming\" : \"inference\"\n\n\t\treturn {\n\t\t\tnextStateId,\n\t\t\tinput: execution.output,\n\t\t}\n\t}\n}\n\nexport class InferenceToFunctionCallRule implements LoopTransitionRule {\n\treadonly specification = new InferenceProducedFunctionCallSpecification()\n\n\tcreateTransition(execution: LoopStateExecution): LoopTransition<\"function_call\"> {\n\t\tif (\n\t\t\t(execution.stateId !== \"inference\" && execution.stateId !== \"inference_streaming\") ||\n\t\t\t!execution.output.items.some((item) => item.type === \"function_call\")\n\t\t) {\n\t\t\tthrow new Error(\"Expected inference function-call output\")\n\t\t}\n\n\t\tconst functionCallItem = execution.output.items.find((item) => item.type === \"function_call\")\n\n\t\tif (!functionCallItem) {\n\t\t\tthrow new Error(\"Expected inference function-call output\")\n\t\t}\n\n\t\treturn {\n\t\t\tnextStateId: \"function_call\",\n\t\t\tinput: {\n\t\t\t\tcall: functionCallItem,\n\t\t\t\tinferenceInput: execution.input,\n\t\t\t},\n\t\t}\n\t}\n}\n\nexport class InferenceToModelMessageRule implements LoopTransitionRule {\n\treadonly specification = new InferenceProducedModelMessageSpecification()\n\n\tcreateTransition(execution: LoopStateExecution): LoopTransition<\"model_message\"> {\n\t\tif (\n\t\t\t(execution.stateId !== \"inference\" && execution.stateId !== \"inference_streaming\") ||\n\t\t\t!execution.output.items.some((item) => item.type === \"message\" && item.role === \"assistant\")\n\t\t) {\n\t\t\tthrow new Error(\"Expected inference model-message output\")\n\t\t}\n\t\tconst modelMessageItem = execution.output.items.find(\n\t\t\t(item) => item.type === \"message\" && item.role === \"assistant\",\n\t\t) as ModelMessageItem\n\n\t\tif (!modelMessageItem) {\n\t\t\tthrow new Error(\"Expected inference model-message output\")\n\t\t}\n\t\texecution.input.context.addContextItem(modelMessageItem)\n\n\t\treturn {\n\t\t\tnextStateId: \"model_message\",\n\t\t\tinput: {\n\t\t\t\tanswer: modelMessageItem,\n\t\t\t},\n\t\t}\n\t}\n}\n\nexport class FunctionCallToInferenceRule implements LoopTransitionRule {\n\treadonly specification = new FunctionCallCompletedSpecification()\n\n\tcreateTransition(execution: LoopStateExecution): LoopTransition<\"inference\" | \"inference_streaming\"> {\n\t\tif (execution.stateId !== \"function_call\") {\n\t\t\tthrow new Error(\"Expected function_call execution\")\n\t\t}\n\n\t\tconst previousRequest = execution.input.inferenceInput\n\n\t\tpreviousRequest.context.addContextItems([execution.input.call, execution.output.item])\n\n\t\treturn {\n\t\t\tnextStateId: previousRequest.streaming ? \"inference_streaming\" : \"inference\",\n\t\t\tinput: {\n\t\t\t\t...previousRequest,\n\t\t\t},\n\t\t}\n\t}\n}\n\nexport class ModelMessageToIdleRule implements LoopTransitionRule {\n\treadonly specification = new ModelMessageCompletedSpecification()\n\n\tcreateTransition(execution: LoopStateExecution): LoopTransition<\"idle\"> {\n\t\tif (execution.stateId !== \"model_message\") {\n\t\t\tthrow new Error(\"Expected model_message execution\")\n\t\t}\n\n\t\treturn {\n\t\t\tnextStateId: \"idle\",\n\t\t\tinput: undefined,\n\t\t}\n\t}\n}\n","import { InferenceInput, InferenceOutput } from \"@app/states/inference\"\nimport { LoopTransition, ModelMessageParams, ReceivedMessage } from \"./loop-state\"\nimport { LoopVisitor } from \"./loop-visitor\"\nimport { FunctionCallOutputItem } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { FunctionCallParams } from \"@app/states/function-call\"\nimport { RuntimeService } from \"@app/services/runtime\"\nimport { RuntimeState } from \"../runtime-state\"\nimport { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\nimport { CloudClient, createCloudClient } from \"@mozaik-ai/cloud-sdk\"\nimport { Agent } from \"../participant/agent\"\n\nexport class EventPublisherLoopVisitor implements LoopVisitor {\n\tprivate readonly cloud: CloudClient\n\tconstructor(\n\t\tprivate readonly agentId: string,\n\t\tprivate readonly loopId: string,\n\t\tprivate readonly runtime: RuntimeService<RuntimeState>,\n\t) {\n\t\tthis.cloud = createCloudClient()\n\t}\n\n\tvisitMessageReceivedStarted(input: ReceivedMessage): void {\n\t\tthis.publish(\"message_received.started\", input)\n\t}\n\n\tvisitMessageReceivedCompleted(output: InferenceInput): void {\n\t\tthis.publish(\"message_received.completed\", output)\n\t}\n\n\tvisitInferenceStarted(input: InferenceInput): void {\n\t\tthis.publish(\"inference.started\", input)\n\t}\n\n\tvisitInferenceEvent(event: SemanticEvent): void {\n\t\tthis.publish(\"inference.stream\", event)\n\t}\n\n\tvisitInferenceCompleted(output: InferenceOutput): void {\n\t\tthis.publish(\"inference.completed\", output)\n\t}\n\n\tvisitFunctionCallStarted(input: FunctionCallParams): void {\n\t\tthis.publish(\"function_call.started\", input)\n\t}\n\n\tvisitFunctionCallCompleted(output: FunctionCallOutputItem): void {\n\t\tthis.publish(\"function_call.completed\", output)\n\t}\n\n\tvisitModelAnswer(input: ModelMessageParams): void {\n\t\tthis.publish(\"model.answer\", input)\n\t}\n\n\tvisitInterceptionStarted(transition: LoopTransition): void {\n\t\tthis.publish(\"interception.started\", transition)\n\t}\n\n\tvisitInterceptionFinished(transition: LoopTransition): void {\n\t\tthis.publish(\"interception.finished\", transition)\n\t}\n\n\tprivate publish<TPayload>(type: string, payload: TPayload): void {\n\t\tconst event = new SemanticEvent(type, this.agentId, new Date(), {\n\t\t\t...payload,\n\t\t\tloopId: this.loopId,\n\t\t})\n\t\tthis.runtime.publish(event)\n\n\t\tif (this.cloud.enabled) {\n\t\t\tconst participant = this.runtime.getParticipant(this.agentId)\n\t\t\tconst agent = participant as Agent\n\t\t\tif (agent) {\n\t\t\t\tthis.cloud.send({\n\t\t\t\t\t...event,\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\t...payload,\n\t\t\t\t\t\tloopId: this.loopId,\n\t\t\t\t\t\tagent: {\n\t\t\t\t\t\t\tmanifest: agent.getManifest(),\n\t\t\t\t\t\t\tdeveloperMessage: agent.getDeveloperMessage(),\n\t\t\t\t\t\t\ttools: agent.getTools(),\n\t\t\t\t\t\t\tmemory: agent.getMemory().getContext().getItems(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n}\n","import { LoopVisitor } from \"@domain/agentic-environment/loop/loop-visitor\"\nimport { LoopState } from \"@domain/agentic-environment/loop/loop-state\"\nimport { InferenceInput, InferenceOutput } from \"./inference\"\nimport { LoopStateExecution } from \"@domain/agentic-environment/loop/loop-state\"\nimport { InferenceRunner } from \"./inference\"\n\nexport class InferenceStreamingState implements LoopState<InferenceInput, LoopStateExecution<\"inference_streaming\">> {\n\treadonly id = \"inference_streaming\"\n\n\tconstructor(private readonly inferenceRunner: InferenceRunner) {}\n\n\tasync run(input: InferenceInput, loopVisitor: LoopVisitor): Promise<LoopStateExecution<\"inference_streaming\">> {\n\t\tloopVisitor.visitInferenceStarted(input)\n\n\t\tlet output: InferenceOutput | undefined = undefined\n\n\t\tfor await (const event of this.inferenceRunner.stream(input)) {\n\t\t\tloopVisitor.visitInferenceEvent(event)\n\n\t\t\tif (event.type === \"inference.output\") {\n\t\t\t\toutput = event.payload as InferenceOutput\n\t\t\t}\n\t\t}\n\n\t\tif (!output) {\n\t\t\tthrow new Error(\"Inference output not found\")\n\t\t}\n\n\t\tloopVisitor.visitInferenceCompleted(output)\n\n\t\treturn {\n\t\t\tstateId: \"inference_streaming\",\n\t\t\tinput,\n\t\t\toutput,\n\t\t}\n\t}\n}\n","import { RuntimeService } from \"@app/services/runtime\"\nimport { AgentLoop } from \"@domain/agentic-environment/loop/agent-loop\"\nimport { LoopStateExecutor } from \"@domain/agentic-environment/loop/state-executor\"\nimport { FunctionCallState } from \"@app/states/function-call\"\nimport { InferenceInput, InferenceState } from \"@app/states/inference\"\nimport { MessageReceivedState } from \"@app/states/message-received\"\nimport { ModelMessageState } from \"@app/states/model-message\"\nimport { TransitionResolver } from \"@domain/agentic-environment/loop/transition-resolver\"\nimport {\n\tFunctionCallToInferenceRule,\n\tInferenceToFunctionCallRule,\n\tInferenceToModelMessageRule,\n\tContextPreparationToInferenceRule,\n\tModelMessageToIdleRule,\n} from \"@domain/agentic-environment/loop/transition-rule\"\nimport { RuntimeState } from \"@domain/agentic-environment/runtime-state\"\nimport { EventPublisherLoopVisitor } from \"@domain/agentic-environment/loop/event-publisher-visitor\"\nimport { InferenceStreamingState } from \"@app/states/inference-streaming\"\nimport { InterceptionHandler } from \"@domain/agentic-environment/loop/interception\"\n\nexport function createRunLoop<TRuntimeState extends RuntimeState>(resolveRuntime: () => RuntimeService<TRuntimeState>) {\n\treturn function runLoop(\n\t\tagentId: string,\n\t\tmessage: string,\n\t\tinferenceInput: InferenceInput,\n\t\tinterceptionHandler?: InterceptionHandler,\n\t) {\n\t\tconst runtime = resolveRuntime()\n\t\tconst inferenceRunner = runtime.getInferenceRunner()\n\t\tconst functionCallRunner = runtime.getFunctionCallRunner()\n\n\t\tconst transitionResolver = new TransitionResolver([\n\t\t\t// High-priority interception rules would go first.\n\t\t\tnew ContextPreparationToInferenceRule(),\n\t\t\tnew InferenceToFunctionCallRule(),\n\t\t\tnew InferenceToModelMessageRule(),\n\t\t\tnew FunctionCallToInferenceRule(),\n\t\t\tnew ModelMessageToIdleRule(),\n\t\t])\n\n\t\tconst stateExecutor = new LoopStateExecutor(\n\t\t\tnew MessageReceivedState(),\n\t\t\tnew InferenceState(inferenceRunner),\n\t\t\tnew InferenceStreamingState(inferenceRunner),\n\t\t\tnew FunctionCallState(functionCallRunner),\n\t\t\tnew ModelMessageState(),\n\t\t)\n\n\t\tconst agentLoop = AgentLoop.create(stateExecutor, transitionResolver, interceptionHandler)\n\n\t\tconst loopVisitor = new EventPublisherLoopVisitor(agentId, agentLoop.getLoopId(), runtime)\n\n\t\tagentLoop.run(\n\t\t\t{\n\t\t\t\tcontent: message,\n\t\t\t\tinput: inferenceInput,\n\t\t\t},\n\t\t\tloopVisitor,\n\t\t)\n\t}\n}\n","import type { InferenceInput, InferenceItem, InferenceOutput } from \"@app/states/inference\"\nimport { DeveloperMessageItem } from \"@domain/model-context/context-item/client-item/developer-message\"\nimport { FunctionCallOutputItem } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { SystemMessageItem } from \"@domain/model-context/context-item/client-item/system-message\"\nimport { UserMessageItem } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { FunctionCallItem } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { ModelMessageItem } from \"@domain/model-context/context-item/model-item/model-message\"\nimport type { InferenceEndpointMapper } from \"@domain/generative-model/inference-endpoint-mapper\"\nimport { ReasoningItem } from \"@domain/model-context/context-item/model-item/reasoning\"\nimport { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/generative-model/token-usage\"\nimport type Anthropic from \"@anthropic-ai/sdk\"\n\nexport class AnthropicMessagesMapper implements InferenceEndpointMapper {\n\ttoRequest(inferenceInput: InferenceInput) {\n\t\tconst { messages, system } = this.mapContextItems(inferenceInput)\n\t\tconst outputConfig: any = {}\n\n\t\tconst request: any = {\n\t\t\tmodel: inferenceInput.model,\n\t\t\tmessages,\n\t\t}\n\n\t\trequest.max_tokens = inferenceInput.maxOutputTokens!\n\n\t\tif (system) {\n\t\t\trequest.system = system\n\t\t}\n\n\t\tif (inferenceInput.tools && inferenceInput.tools.length > 0) {\n\t\t\trequest.tools = inferenceInput.tools.map((tool) => ({\n\t\t\t\tname: tool.name,\n\t\t\t\tdescription: tool.description,\n\t\t\t\tinput_schema: tool.parameters,\n\t\t\t}))\n\t\t}\n\n\t\tif (inferenceInput.structuredOutput) {\n\t\t\toutputConfig.format = {\n\t\t\t\ttype: \"json_schema\",\n\t\t\t\tschema: inferenceInput.structuredOutput.schema,\n\t\t\t}\n\t\t}\n\n\t\tif (inferenceInput.reasoningEffort) {\n\t\t\trequest.thinking = { type: \"adaptive\" }\n\t\t\toutputConfig.effort = inferenceInput.reasoningEffort\n\t\t}\n\n\t\tif (Object.keys(outputConfig).length > 0) {\n\t\t\trequest.output_config = outputConfig\n\t\t}\n\n\t\tif (inferenceInput.streaming) {\n\t\t\trequest.stream = inferenceInput.streaming\n\t\t}\n\n\t\treturn request\n\t}\n\n\tprivate addContentBlock(messages: any[], role: \"user\" | \"assistant\", block: any): void {\n\t\tconst lastMessage = messages[messages.length - 1]\n\t\tif (lastMessage?.role === role) {\n\t\t\tlastMessage.content.push(block)\n\t\t\treturn\n\t\t}\n\n\t\tmessages.push({\n\t\t\trole: role,\n\t\t\tcontent: [block],\n\t\t})\n\t}\n\n\tmapContextItems(inferenceInput: InferenceInput): { messages: any[]; system?: string } {\n\t\tconst context = inferenceInput.context\n\t\tconst messages: any[] = []\n\t\tconst system: string[] = []\n\n\t\tfor (const item of context.getItems()) {\n\t\t\tif (item instanceof DeveloperMessageItem || item instanceof SystemMessageItem) {\n\t\t\t\tsystem.push(item.content.text)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof UserMessageItem) {\n\t\t\t\tthis.addContentBlock(messages, \"user\", { type: \"text\", text: item.content.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof ModelMessageItem) {\n\t\t\t\tthis.addContentBlock(messages, \"assistant\", { type: \"text\", text: item.content.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof ReasoningItem) {\n\t\t\t\tthis.addContentBlock(messages, \"assistant\", {\n\t\t\t\t\ttype: \"thinking\",\n\t\t\t\t\tthinking: item.content?.text ?? \"\",\n\t\t\t\t\tsignature: item.encryptedContent ?? \"\",\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof FunctionCallItem) {\n\t\t\t\tlet input: any\n\t\t\t\ttry {\n\t\t\t\t\tinput = JSON.parse(item.args)\n\t\t\t\t} catch {\n\t\t\t\t\tinput = item.args\n\t\t\t\t}\n\t\t\t\tthis.addContentBlock(messages, \"assistant\", {\n\t\t\t\t\ttype: \"tool_use\",\n\t\t\t\t\tid: item.callId,\n\t\t\t\t\tname: item.name,\n\t\t\t\t\tinput: input,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof FunctionCallOutputItem) {\n\t\t\t\tthis.addContentBlock(messages, \"user\", {\n\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\ttool_use_id: item.callId,\n\t\t\t\t\tcontent: item.output.text,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tmessages: messages,\n\t\t\tsystem: system.length > 0 ? system.join(\"\\n\\n\") : undefined,\n\t\t}\n\t}\n\n\textractTokenUsage(response: Anthropic.Messages.Message): TokenUsage | undefined {\n\t\tif (!response.usage) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn new TokenUsage(\n\t\t\tresponse.usage.input_tokens,\n\t\t\tresponse.usage.output_tokens,\n\t\t\tresponse.usage.input_tokens + response.usage.output_tokens,\n\t\t\tnew InputTokenDetails(\n\t\t\t\t(response.usage.cache_creation_input_tokens ?? 0) + (response.usage.cache_read_input_tokens ?? 0),\n\t\t\t),\n\t\t\tnew OutputTokenDetails(0),\n\t\t)\n\t}\n\n\ttoResponse(response: Anthropic.Messages.Message): InferenceOutput {\n\t\tconst items: InferenceItem[] = []\n\n\t\tfor (const block of response.content as any[]) {\n\t\t\tif (block.type === \"text\") {\n\t\t\t\titems.push(ModelMessageItem.rehydrate({ text: block.text }))\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (block.type === \"tool_use\") {\n\t\t\t\titems.push(\n\t\t\t\t\tFunctionCallItem.rehydrate({\n\t\t\t\t\t\tcallId: block.id,\n\t\t\t\t\t\tname: block.name,\n\t\t\t\t\t\targs: JSON.stringify(block.input ?? {}),\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (block.type === \"thinking\") {\n\t\t\t\titems.push(\n\t\t\t\t\tReasoningItem.rehydrate({\n\t\t\t\t\t\tcontent: block.thinking ? InputText.rehydrate({ text: block.thinking }) : undefined,\n\t\t\t\t\t\tencryptedContent: block.signature,\n\t\t\t\t\t\tsummary: [],\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\treturn { items, tokenUsage: this.extractTokenUsage(response), rowResponse: response }\n\t}\n}\n","import { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\nimport type { Endpoint } from \"@domain/generative-model/endpoint\"\nimport type { InferenceInput, InferenceOutput } from \"@app/states/inference\"\nimport { AnthropicMessagesMapper } from \"./anthropic-messages-mapper\"\nimport Anthropic from \"@anthropic-ai/sdk\"\nimport type { InferenceEndpointMapper } from \"@domain/generative-model/inference-endpoint-mapper\"\n\nexport interface AnthropicConnectionConfig {\n\tbaseURL?: string\n\tapiKey?: string\n}\n\n/**\n * Native Anthropic adapter on the `@anthropic-ai/sdk` (`messages.create`).\n * Maps domain context to Anthropic's `messages`/`content` blocks shape,\n * system prompt, tools, adaptive thinking, and structured output config.\n */\nexport class AnthropicMessages implements Endpoint {\n\tendpointMapper: InferenceEndpointMapper\n\tprivate _client?: Anthropic\n\tprivate readonly clientConfig: AnthropicConnectionConfig\n\n\tconstructor(\n\t\tendpointMapper: InferenceEndpointMapper = new AnthropicMessagesMapper(),\n\t\tconfig: AnthropicConnectionConfig = {},\n\t) {\n\t\tthis.endpointMapper = endpointMapper\n\t\tthis.clientConfig = config\n\t}\n\n\tprivate get client(): Anthropic {\n\t\treturn (this._client ??= new Anthropic({\n\t\t\tbaseURL: this.clientConfig.baseURL,\n\t\t\tapiKey: this.clientConfig.apiKey,\n\t\t}))\n\t}\n\n\tasync infer(inferenceInput: InferenceInput): Promise<InferenceOutput> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceInput)\n\t\tconst response = await this.client.messages.create(request)\n\n\t\treturn this.endpointMapper.toResponse(response)\n\t}\n\n\tasync *stream(inferenceInput: InferenceInput): AsyncIterable<SemanticEvent> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceInput)\n\t\tconst stream = this.client.messages.stream(request)\n\n\t\tfor await (const event of stream) {\n\t\t\tyield event as unknown as SemanticEvent\n\t\t}\n\n\t\tconst output = this.endpointMapper.toResponse(await stream.finalMessage())\n\n\t\tyield {\n\t\t\ttype: \"inference.output\",\n\t\t\tproducerId: request.model,\n\t\t\toccurredAt: new Date(),\n\t\t\tpayload: output,\n\t\t}\n\t}\n}\n","import { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\nimport type { InferenceOutput } from \"@app/states/inference\"\nimport type { Endpoint } from \"@domain/generative-model/endpoint\"\nimport OpenAI from \"openai\"\nimport type { InferenceInput } from \"@app/states/inference\"\nimport { OpenAIResponsesMapper } from \"./openai-responses-mapper\"\nimport type { InferenceEndpointMapper } from \"@domain/generative-model/inference-endpoint-mapper\"\n\nexport class OpenAIResponses implements Endpoint {\n\tendpointMapper: InferenceEndpointMapper\n\tprivate _client?: OpenAI\n\n\tconstructor(endpointMapper: InferenceEndpointMapper = new OpenAIResponsesMapper()) {\n\t\tthis.endpointMapper = endpointMapper\n\t}\n\n\tprivate get client(): OpenAI {\n\t\treturn (this._client ??= new OpenAI())\n\t}\n\n\tasync infer(inferenceInput: InferenceInput): Promise<InferenceOutput> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceInput)\n\t\tconst response = await this.client.responses.create(request)\n\n\t\treturn this.endpointMapper.toResponse(response)\n\t}\n\n\tasync *stream(inferenceInput: InferenceInput): AsyncIterable<SemanticEvent> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceInput)\n\t\tconst stream: any = await this.client.responses.create({ ...request, stream: true })\n\n\t\t// Only the terminal `response.completed` event carries the assembled\n\t\t// response; the deltas before it cannot be mapped to an InferenceOutput.\n\t\tlet completedResponse: any = undefined\n\t\tfor await (const event of stream) {\n\t\t\tif (event.type === \"response.completed\") {\n\t\t\t\tcompletedResponse = event.response\n\t\t\t}\n\n\t\t\tyield event\n\t\t}\n\n\t\tif (!completedResponse) {\n\t\t\tthrow new Error(\"Stream ended without a completed response\")\n\t\t}\n\n\t\tconst output = this.endpointMapper.toResponse(completedResponse)\n\n\t\tyield {\n\t\t\ttype: \"inference.output\",\n\t\t\tpayload: output,\n\t\t\toccurredAt: new Date(),\n\t\t\tproducerId: inferenceInput.model,\n\t\t}\n\t}\n}\n","import { ItemContent } from \"@domain/model-context/context-item/item-content/item-content\"\n\nexport class SummaryText extends ItemContent {\n\treadonly type = \"summary_text\"\n\n\tprivate constructor(public readonly text: string) {\n\t\tsuper()\n\t}\n\n\tstatic rehydrate(data: { text: string }): SummaryText {\n\t\treturn new SummaryText(data.text)\n\t}\n}\n","import type { InferenceInput, InferenceItem } from \"@app/states/inference\"\nimport type { InferenceEndpointMapper } from \"@domain/generative-model/inference-endpoint-mapper\"\nimport { DeveloperMessageItem } from \"@domain/model-context/context-item/client-item/developer-message\"\nimport { FunctionCallOutputItem } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { SystemMessageItem } from \"@domain/model-context/context-item/client-item/system-message\"\nimport { UserMessageItem } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { FunctionCallItem } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { ModelMessageItem } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { ReasoningItem } from \"@domain/model-context/context-item/model-item/reasoning\"\nimport { SummaryText } from \"@domain/model-context/context-item/item-content/summary-text\"\nimport { InferenceOutput } from \"@app/states/inference\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/generative-model/token-usage\"\nimport type OpenAI from \"openai\"\n\nexport class OpenAIResponsesMapper implements InferenceEndpointMapper {\n\ttoRequest(inferenceInput: InferenceInput): any {\n\t\tconst request: any = {\n\t\t\tmodel: inferenceInput.model,\n\t\t\tinput: this.mapContextItems(inferenceInput),\n\t\t}\n\n\t\tif (inferenceInput.tools && inferenceInput.tools.length > 0) {\n\t\t\trequest.tools = inferenceInput.tools.map((tool) => ({\n\t\t\t\ttype: tool.type,\n\t\t\t\tname: tool.name,\n\t\t\t\tdescription: tool.description,\n\t\t\t\tparameters: tool.parameters,\n\t\t\t}))\n\t\t}\n\n\t\tif (inferenceInput.reasoningEffort) {\n\t\t\trequest.reasoning = {\n\t\t\t\teffort: inferenceInput.reasoningEffort,\n\t\t\t}\n\t\t}\n\n\t\tif (inferenceInput.structuredOutput) {\n\t\t\tconst format = inferenceInput.structuredOutput\n\t\t\trequest.text = {\n\t\t\t\tformat: {\n\t\t\t\t\ttype: \"json_schema\",\n\t\t\t\t\tname: format.name ?? \"response\",\n\t\t\t\t\tschema: format.schema,\n\t\t\t\t\tstrict: format.strict ?? true,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tif (inferenceInput.streaming) {\n\t\t\trequest.stream = inferenceInput.streaming\n\t\t}\n\n\t\treturn request\n\t}\n\n\tmapContextItems(inferenceInput: InferenceInput): any[] {\n\t\tconst input: any[] = []\n\n\t\tfor (const item of inferenceInput.context.getItems()) {\n\t\t\tif (\n\t\t\t\titem instanceof DeveloperMessageItem ||\n\t\t\t\titem instanceof SystemMessageItem ||\n\t\t\t\titem instanceof UserMessageItem\n\t\t\t) {\n\t\t\t\tinput.push({\n\t\t\t\t\ttype: item.type,\n\t\t\t\t\trole: item.role,\n\t\t\t\t\tcontent: [{ type: \"input_text\", text: item.content.text }],\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof ModelMessageItem) {\n\t\t\t\tinput.push({\n\t\t\t\t\ttype: item.type,\n\t\t\t\t\trole: item.role,\n\t\t\t\t\tcontent: [{ type: \"output_text\", text: item.content.text }],\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof FunctionCallItem) {\n\t\t\t\tinput.push({\n\t\t\t\t\ttype: item.type,\n\t\t\t\t\tcall_id: item.callId,\n\t\t\t\t\tname: item.name,\n\t\t\t\t\targuments: item.args,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof FunctionCallOutputItem) {\n\t\t\t\tinput.push({\n\t\t\t\t\ttype: item.type,\n\t\t\t\t\tcall_id: item.callId,\n\t\t\t\t\toutput: [{ type: \"input_text\", text: item.output.text }],\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof ReasoningItem) {\n\t\t\t\tconst reasoningInput: Record<string, unknown> = {\n\t\t\t\t\ttype: item.type,\n\t\t\t\t\tsummary: item.summary.map((summary) => ({ type: \"summary_text\", text: summary.text })),\n\t\t\t\t}\n\t\t\t\tif (item.encryptedContent !== undefined) {\n\t\t\t\t\treasoningInput.encrypted_content = item.encryptedContent\n\t\t\t\t}\n\t\t\t\tinput.push(reasoningInput)\n\t\t\t}\n\t\t}\n\n\t\treturn input\n\t}\n\n\textractTokenUsage(response: OpenAI.Responses.Response): TokenUsage | undefined {\n\t\tif (!response.usage) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn new TokenUsage(\n\t\t\tresponse.usage.input_tokens,\n\t\t\tresponse.usage.output_tokens,\n\t\t\tresponse.usage.total_tokens,\n\t\t\tnew InputTokenDetails(response.usage.input_tokens_details?.cached_tokens ?? 0),\n\t\t\tnew OutputTokenDetails(response.usage.output_tokens_details?.reasoning_tokens ?? 0),\n\t\t)\n\t}\n\n\ttoResponse(response: any): InferenceOutput {\n\t\tconst items: InferenceItem[] = []\n\n\t\tfor (const item of response.output ?? []) {\n\t\t\tif (item.type === \"message\" && item.role === \"assistant\") {\n\t\t\t\tconst firstContent = item.content?.[0]\n\t\t\t\tif (firstContent) {\n\t\t\t\t\titems.push(ModelMessageItem.rehydrate(firstContent as { text: string }))\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (item.type === \"function_call\") {\n\t\t\t\titems.push(\n\t\t\t\t\tFunctionCallItem.rehydrate({\n\t\t\t\t\t\tcallId: item.call_id,\n\t\t\t\t\t\tname: item.name,\n\t\t\t\t\t\targs: item.arguments,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (item.type === \"reasoning\") {\n\t\t\t\titems.push(\n\t\t\t\t\tReasoningItem.rehydrate({\n\t\t\t\t\t\tcontent: undefined,\n\t\t\t\t\t\tencryptedContent: item.encrypted_content,\n\t\t\t\t\t\tsummary: (item.summary ?? []).map((summary: { text: string }) =>\n\t\t\t\t\t\t\tSummaryText.rehydrate({ text: summary.text }),\n\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\titems,\n\t\t\ttokenUsage: this.extractTokenUsage(response),\n\t\t\trowResponse: response,\n\t\t}\n\t}\n}\n","import { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\nimport { GoogleGenAI } from \"@google/genai\"\nimport type { Endpoint } from \"@domain/generative-model/endpoint\"\nimport type { InferenceInput, InferenceOutput } from \"@app/states/inference\"\nimport { GeminiGenerateContentMapper } from \"./gemini-generate-content-mapper\"\nimport type { InferenceEndpointMapper } from \"@domain/generative-model/inference-endpoint-mapper\"\n\nexport interface GeminiConnectionConfig {\n\tbaseURL?: string\n\tapiKey?: string\n}\n\n/**\n * Native Gemini adapter on the `@google/genai` SDK (`generateContent` /\n * `generateContentStream`). Unlike an OpenAI-compat shim this maps our\n * domain context to Gemini's native `contents`/`parts` shape, system\n * instruction, `functionDeclarations`, and `thinkingConfig`, and reads\n * thought parts + native usage metadata back out. Another `ModelRuntime`\n * — no runner or port changes.\n */\nexport class GeminiGenerateContent implements Endpoint {\n\tendpointMapper: InferenceEndpointMapper\n\tprivate _client?: GoogleGenAI\n\tprivate readonly clientConfig: GeminiConnectionConfig\n\n\tconstructor(\n\t\tendpointMapper: InferenceEndpointMapper = new GeminiGenerateContentMapper(),\n\t\tconfig: GeminiConnectionConfig = {},\n\t) {\n\t\tthis.endpointMapper = endpointMapper\n\t\tthis.clientConfig = config\n\t}\n\n\tprivate get client(): GoogleGenAI {\n\t\treturn (this._client ??= new GoogleGenAI({\n\t\t\tapiKey: this.clientConfig.apiKey ?? process.env.GEMINI_API_KEY,\n\t\t\t...(this.clientConfig.baseURL ? { httpOptions: { baseUrl: this.clientConfig.baseURL } } : {}),\n\t\t}))\n\t}\n\n\tasync infer(inferenceInput: InferenceInput): Promise<InferenceOutput> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceInput)\n\t\tconst response = await this.client.models.generateContent(request)\n\n\t\treturn this.endpointMapper.toResponse(response)\n\t}\n\n\tasync *stream(inferenceInput: InferenceInput): AsyncIterable<SemanticEvent> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceInput)\n\t\tconst stream: any = await this.client.models.generateContentStream(request)\n\n\t\tlet lastEvent: SemanticEvent | undefined = undefined\n\t\tfor await (const chunk of stream) {\n\t\t\tlastEvent = chunk\n\t\t\tyield chunk\n\t\t}\n\n\t\tif (!lastEvent) {\n\t\t\tthrow new Error(\"Last event not found\")\n\t\t}\n\n\t\tconst output = this.endpointMapper.toResponse(lastEvent)\n\n\t\tyield {\n\t\t\ttype: \"inference.output\",\n\t\t\tproducerId: request.model,\n\t\t\toccurredAt: new Date(),\n\t\t\tpayload: output,\n\t\t}\n\t}\n}\n","import type { InferenceInput, InferenceItem, InferenceOutput } from \"@app/states/inference\"\nimport type { InferenceEndpointMapper } from \"@domain/generative-model/inference-endpoint-mapper\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/generative-model/token-usage\"\nimport { DeveloperMessageItem } from \"@domain/model-context/context-item/client-item/developer-message\"\nimport { FunctionCallOutputItem } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { SystemMessageItem } from \"@domain/model-context/context-item/client-item/system-message\"\nimport { UserMessageItem } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\nimport { FunctionCallItem } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { ModelMessageItem } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { ReasoningItem } from \"@domain/model-context/context-item/model-item/reasoning\"\n\nexport class GeminiGenerateContentMapper implements InferenceEndpointMapper {\n\ttoRequest(inferenceInput: InferenceInput) {\n\t\tconst { contents, systemInstruction } = this.mapContextItems(inferenceInput)\n\t\tconst config: any = {}\n\n\t\tif (systemInstruction) {\n\t\t\tconfig.systemInstruction = systemInstruction\n\t\t}\n\n\t\tif (inferenceInput.tools && inferenceInput.tools.length > 0) {\n\t\t\tconfig.tools = [\n\t\t\t\t{\n\t\t\t\t\tfunctionDeclarations: inferenceInput.tools.map((tool) => ({\n\t\t\t\t\t\tname: tool.name,\n\t\t\t\t\t\tdescription: tool.description,\n\t\t\t\t\t\tparametersJsonSchema: tool.parameters,\n\t\t\t\t\t})),\n\t\t\t\t},\n\t\t\t]\n\t\t}\n\n\t\tif (inferenceInput.structuredOutput) {\n\t\t\tconfig.responseMimeType = \"application/json\"\n\t\t\tconfig.responseSchema = inferenceInput.structuredOutput.schema\n\t\t}\n\n\t\tif (inferenceInput.reasoningEffort) {\n\t\t\tconfig.thinkingConfig = {\n\t\t\t\tthinkingLevel: inferenceInput.reasoningEffort,\n\t\t\t\tincludeThoughts: true,\n\t\t\t}\n\t\t}\n\n\t\tconst request: any = {\n\t\t\tmodel: inferenceInput.model,\n\t\t\tcontents,\n\t\t\tconfig,\n\t\t}\n\n\t\tif (inferenceInput.streaming) {\n\t\t\trequest.stream = inferenceInput.streaming\n\t\t}\n\n\t\treturn request\n\t}\n\n\tmapContextItems(inferenceInput: InferenceInput): { contents: any[]; systemInstruction?: string } {\n\t\tconst context = inferenceInput.context\n\t\tconst contents: any[] = []\n\t\tconst system: string[] = []\n\t\tconst callNames = new Map<string, string>()\n\n\t\tfor (const item of context.getItems()) {\n\t\t\tif (item instanceof DeveloperMessageItem || item instanceof SystemMessageItem) {\n\t\t\t\tsystem.push(item.content.text)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof UserMessageItem) {\n\t\t\t\tthis.addPart(contents, \"user\", { text: item.content.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof ModelMessageItem) {\n\t\t\t\tthis.addPart(contents, \"model\", { text: item.content.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof FunctionCallItem) {\n\t\t\t\tcallNames.set(item.callId, item.name)\n\t\t\t\tlet args: any\n\t\t\t\ttry {\n\t\t\t\t\targs = JSON.parse(item.args)\n\t\t\t\t} catch {\n\t\t\t\t\targs = {}\n\t\t\t\t}\n\t\t\t\tthis.addPart(contents, \"model\", { functionCall: { id: item.callId, name: item.name, args } })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof FunctionCallOutputItem) {\n\t\t\t\tthis.addPart(contents, \"user\", {\n\t\t\t\t\tfunctionResponse: {\n\t\t\t\t\t\tid: item.callId,\n\t\t\t\t\t\tname: callNames.get(item.callId) ?? \"\",\n\t\t\t\t\t\tresponse: this.parseResponse(item.output.text),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tcontents,\n\t\t\tsystemInstruction: system.length > 0 ? system.join(\"\\n\\n\") : undefined,\n\t\t}\n\t}\n\n\tprivate addPart(contents: any[], role: \"user\" | \"model\", part: any): void {\n\t\tconst last = contents[contents.length - 1]\n\t\tif (last?.role === role) {\n\t\t\tlast.parts.push(part)\n\t\t\treturn\n\t\t}\n\n\t\tcontents.push({ role, parts: [part] })\n\t}\n\n\tprivate parseResponse(output: string): any {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(output)\n\t\t\treturn parsed && typeof parsed === \"object\" ? parsed : { output }\n\t\t} catch {\n\t\t\treturn { output }\n\t\t}\n\t}\n\n\textractTokenUsage(response: any): TokenUsage | undefined {\n\t\tconst usage = response.usageMetadata\n\t\tif (!usage) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn new TokenUsage(\n\t\t\tusage.promptTokenCount ?? 0,\n\t\t\tusage.candidatesTokenCount ?? 0,\n\t\t\tusage.totalTokenCount ?? 0,\n\t\t\tnew InputTokenDetails(usage.cachedContentTokenCount ?? 0),\n\t\t\tnew OutputTokenDetails(usage.thoughtsTokenCount ?? 0),\n\t\t)\n\t}\n\n\ttoResponse(response: any): InferenceOutput {\n\t\tconst items: InferenceItem[] = []\n\t\tconst parts = response.candidates?.[0]?.content?.parts ?? []\n\n\t\tfor (const part of parts) {\n\t\t\tif (part.thought && part.text) {\n\t\t\t\titems.push(\n\t\t\t\t\tReasoningItem.rehydrate({\n\t\t\t\t\t\tcontent: InputText.rehydrate({ text: part.text }),\n\t\t\t\t\t\tencryptedContent: undefined,\n\t\t\t\t\t\tsummary: [],\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (part.text) {\n\t\t\t\titems.push(ModelMessageItem.rehydrate({ text: part.text }))\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (part.functionCall) {\n\t\t\t\titems.push(\n\t\t\t\t\tFunctionCallItem.rehydrate({\n\t\t\t\t\t\tcallId: part.functionCall.id ?? \"\",\n\t\t\t\t\t\tname: part.functionCall.name,\n\t\t\t\t\t\targs: JSON.stringify(part.functionCall.args ?? {}),\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\treturn { items, tokenUsage: this.extractTokenUsage(response), rowResponse: response }\n\t}\n}\n","import type { InferenceInput, InferenceItem, InferenceOutput } from \"@app/states/inference\"\nimport type { InferenceEndpointMapper } from \"@domain/generative-model/inference-endpoint-mapper\"\nimport { DeveloperMessageItem } from \"@domain/model-context/context-item/client-item/developer-message\"\nimport { FunctionCallOutputItem } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { SystemMessageItem } from \"@domain/model-context/context-item/client-item/system-message\"\nimport { UserMessageItem } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { FunctionCallItem } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { ModelMessageItem } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\nimport { ReasoningItem } from \"@domain/model-context/context-item/model-item/reasoning\"\nimport type { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/generative-model/token-usage\"\n\nexport class OpenAIChatCompletionsMapper implements InferenceEndpointMapper {\n\ttoRequest(inferenceInput: InferenceInput) {\n\t\tconst request: any = {\n\t\t\tmodel: inferenceInput.model,\n\t\t\tmessages: this.mapContextItems(inferenceInput),\n\t\t}\n\n\t\tif (inferenceInput.tools && inferenceInput.tools.length > 0) {\n\t\t\trequest.tools = inferenceInput.tools.map((tool) => ({\n\t\t\t\ttype: \"function\",\n\t\t\t\tfunction: {\n\t\t\t\t\tname: tool.name,\n\t\t\t\t\tdescription: tool.description,\n\t\t\t\t\tparameters: tool.parameters,\n\t\t\t\t},\n\t\t\t}))\n\t\t}\n\n\t\tif (inferenceInput.reasoningEffort) {\n\t\t\trequest.reasoning_effort = inferenceInput.reasoningEffort\n\t\t}\n\n\t\tif (inferenceInput.streaming) {\n\t\t\trequest.stream = inferenceInput.streaming\n\t\t}\n\n\t\treturn request\n\t}\n\n\tmapContextItems(inferenceInput: InferenceInput): any[] {\n\t\tconst messages: any[] = []\n\n\t\tfor (const item of inferenceInput.context.getItems()) {\n\t\t\tif (item instanceof DeveloperMessageItem || item instanceof SystemMessageItem) {\n\t\t\t\tmessages.push({ role: \"system\", content: item.content.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof UserMessageItem) {\n\t\t\t\tmessages.push({ role: \"user\", content: item.content.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof ModelMessageItem) {\n\t\t\t\tmessages.push({ role: \"assistant\", content: item.content.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof FunctionCallItem) {\n\t\t\t\tconst toolCall = {\n\t\t\t\t\tid: item.callId,\n\t\t\t\t\ttype: \"function\",\n\t\t\t\t\tfunction: { name: item.name, arguments: item.args },\n\t\t\t\t}\n\t\t\t\tconst last = messages[messages.length - 1]\n\t\t\t\tif (last?.role === \"assistant\") {\n\t\t\t\t\tlast.tool_calls = last.tool_calls ?? []\n\t\t\t\t\tlast.tool_calls.push(toolCall)\n\t\t\t\t} else {\n\t\t\t\t\tmessages.push({ role: \"assistant\", content: null, tool_calls: [toolCall] })\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item instanceof FunctionCallOutputItem) {\n\t\t\t\tmessages.push({ role: \"tool\", tool_call_id: item.callId, content: item.output.text })\n\t\t\t}\n\t\t}\n\n\t\treturn messages\n\t}\n\n\textractTokenUsage(response: any): TokenUsage | undefined {\n\t\tif (!response.usage) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn new TokenUsage(\n\t\t\tresponse.usage.prompt_tokens,\n\t\t\tresponse.usage.completion_tokens,\n\t\t\tresponse.usage.total_tokens,\n\t\t\tnew InputTokenDetails(response.usage.prompt_tokens_details?.cached_tokens ?? 0),\n\t\t\tnew OutputTokenDetails(response.usage.completion_tokens_details?.reasoning_tokens ?? 0),\n\t\t)\n\t}\n\n\ttoResponse(response: any): InferenceOutput {\n\t\tconst items: InferenceItem[] = []\n\t\tconst message = response.choices?.[0]?.message\n\t\tif (!message) {\n\t\t\treturn { items: [], tokenUsage: this.extractTokenUsage(response), rowResponse: response }\n\t\t}\n\n\t\tif (message.reasoning_content) {\n\t\t\titems.push(\n\t\t\t\tReasoningItem.rehydrate({\n\t\t\t\t\tcontent: InputText.rehydrate({ text: message.reasoning_content }),\n\t\t\t\t\tencryptedContent: undefined,\n\t\t\t\t\tsummary: [],\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\n\t\tif (message.content) {\n\t\t\titems.push(ModelMessageItem.rehydrate({ text: message.content }))\n\t\t}\n\n\t\tfor (const toolCall of message.tool_calls ?? []) {\n\t\t\titems.push(\n\t\t\t\tFunctionCallItem.rehydrate({\n\t\t\t\t\tcallId: toolCall.id,\n\t\t\t\t\tname: toolCall.function.name,\n\t\t\t\t\targs: toolCall.function.arguments,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\n\t\treturn { items, tokenUsage: this.extractTokenUsage(response), rowResponse: response }\n\t}\n}\n","import type { InferenceOutput } from \"@app/states/inference\"\nimport { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\nimport type { Endpoint } from \"@domain/generative-model/endpoint\"\nimport { OpenAIChatCompletionsMapper } from \"./openai-chat-completions-mapper\"\nimport type { InferenceInput } from \"@app/states/inference\"\nimport OpenAI from \"openai\"\nimport type { InferenceEndpointMapper } from \"@domain/generative-model/inference-endpoint-mapper\"\n\n/**\n * Optional connection config. When omitted, the `openai` SDK reads\n * `OPENAI_API_KEY` and `OPENAI_BASE_URL` from the environment, so the\n * default-constructed runtime targets whatever `OPENAI_BASE_URL` points\n * at (real OpenAI when unset). Provider presets (e.g. DeepSeek) pass an\n * explicit base URL + credential.\n */\nexport interface OpenAICompatibleConfig {\n\tbaseURL?: string\n\tapiKey?: string\n\t/**\n\t * Extra request-body fields merged into every `chat.completions`\n\t * call. This is how provider-specific quirks are handled **without\n\t * a per-provider subclass in mozaik** — the consumer supplies the\n\t * vendor-only fields (e.g. DeepSeek's `{ thinking: { type } }`,\n\t * safety flags, routing hints). Standard fields the runtime already\n\t * sets (`model`, `messages`, `tools`, `reasoning_effort`) take\n\t * precedence and are not overwritten.\n\t */\n\textraBody?: Record<string, unknown>\n}\n\n/**\n * Generic adapter for any **OpenAI Chat Completions**-compatible\n * endpoint — real OpenAI, DeepSeek, Xiaomi MiMo, OpenRouter, vLLM,\n * Ollama, etc. It speaks `/chat/completions` (not the Responses API),\n * which is the dialect third-party OpenAI-compatible providers expose.\n *\n * The base URL and credential are configurable; everything else (the\n * `ModelContext` ⇄ chat-message conversion, tool-call round-trip, token\n * usage extraction) is provider-agnostic. Provider-specific request\n * shaping (e.g. DeepSeek's `thinking` field) is supplied by the\n * consumer via {@link OpenAICompatibleConfig.extraBody} — mozaik stays\n * generic and gains no per-provider subclasses.\n *\n * Was `DeepSeekChatCompletions`; generalized so consumers can point it\n * at any OpenAI-compatible endpoint.\n */\nexport class OpenAIChatCompletions implements Endpoint {\n\tendpointMapper: InferenceEndpointMapper\n\tprivate _client?: OpenAI\n\tprivate readonly clientConfig: OpenAICompatibleConfig\n\tprivate readonly extraBody: Record<string, unknown>\n\n\tconstructor(\n\t\tendpointMapper: InferenceEndpointMapper = new OpenAIChatCompletionsMapper(),\n\t\tconfig: OpenAICompatibleConfig = {},\n\t) {\n\t\tthis.endpointMapper = endpointMapper\n\t\tthis.clientConfig = config\n\t\tthis.extraBody = config.extraBody ?? {}\n\t}\n\n\tprivate get client(): OpenAI {\n\t\t// Passing `undefined` for baseURL/apiKey lets the SDK fall back\n\t\t// to OPENAI_BASE_URL / OPENAI_API_KEY from the environment.\n\t\treturn (this._client ??= new OpenAI({\n\t\t\tbaseURL: this.clientConfig.baseURL,\n\t\t\tapiKey: this.clientConfig.apiKey,\n\t\t}))\n\t}\n\n\tprivate buildRequest(inferenceInput: InferenceInput): any {\n\t\treturn {\n\t\t\t...this.extraBody,\n\t\t\t...this.endpointMapper.toRequest(inferenceInput),\n\t\t}\n\t}\n\n\tasync infer(inferenceInput: InferenceInput): Promise<InferenceOutput> {\n\t\tconst response = await this.client.chat.completions.create(this.buildRequest(inferenceInput))\n\n\t\treturn this.endpointMapper.toResponse(response)\n\t}\n\n\tasync *stream(inferenceInput: InferenceInput): AsyncIterable<SemanticEvent> {\n\t\tconst stream = this.client.chat.completions.stream(this.buildRequest(inferenceInput))\n\n\t\tfor await (const chunk of stream) {\n\t\t\tyield chunk as unknown as SemanticEvent\n\t\t}\n\n\t\tconst output = this.endpointMapper.toResponse(await stream.finalChatCompletion())\n\n\t\tyield {\n\t\t\ttype: \"inference.output\",\n\t\t\tpayload: output,\n\t\t\toccurredAt: new Date(),\n\t\t\tproducerId: inferenceInput.model,\n\t\t}\n\t}\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const claudeSonnet46Specification: ModelSpecification = {\n\tname: \"claude-sonnet-4-6\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 200_000,\n\tmaxOutputTokens: 64_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const claudeOpus48Specification: ModelSpecification = {\n\tname: \"claude-opus-4-8\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 200_000,\n\tmaxOutputTokens: 32_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const claudeOpus47Specification: ModelSpecification = {\n\tname: \"claude-opus-4-7\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 200_000,\n\tmaxOutputTokens: 32_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const gemini35FlashSpecification: ModelSpecification = {\n\tname: \"gemini-3.5-flash\",\n\tprovider: \"google\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"high\", \"medium\", \"low\", \"minimal\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_048_576,\n\tmaxOutputTokens: 64_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const gemini31ProSpecification: ModelSpecification = {\n\tname: \"gemini-3.1-pro-preview\",\n\tprovider: \"google\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"high\", \"medium\", \"low\", \"minimal\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_048_576,\n\tmaxOutputTokens: 64_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const deepSeekV4FlashSpecification: ModelSpecification = {\n\tname: \"deepseek-v4-flash\",\n\tprovider: \"deepseek\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_000_000,\n\tmaxOutputTokens: 384_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: false,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const deepSeekV4ProSpecification: ModelSpecification = {\n\tname: \"deepseek-v4-pro\",\n\tprovider: \"deepseek\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_000_000,\n\tmaxOutputTokens: 384_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: false,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const gpt54Specification: ModelSpecification = {\n\tname: \"gpt-5.4\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"xhigh\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_050_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const gpt54MiniSpecification: ModelSpecification = {\n\tname: \"gpt-5.4-mini\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"xhigh\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 400_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const gpt54NanoSpecification: ModelSpecification = {\n\tname: \"gpt-5.4-nano\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"xhigh\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 400_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const gpt55Specification: ModelSpecification = {\n\tname: \"gpt-5.5\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"xhigh\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_050_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\n\nexport const claudeHaiku45Specification: ModelSpecification = {\n\tname: \"claude-haiku-4-5\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 200_000,\n\tmaxOutputTokens: 64_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import { AnthropicMessages } from \"@infra/providers/anthropic/endpoints/anthropic-messages\"\nimport { OpenAIResponses } from \"@infra/providers/openai/endpoints/openai-responses\"\nimport { GeminiGenerateContent } from \"@infra/providers/gemini/endpoints/gemini-generate-content\"\nimport { OpenAIChatCompletions } from \"@infra/providers/openai/endpoints/openai-chat-completions\"\nimport { claudeSonnet46Specification } from \"@infra/providers/anthropic/models/claude-4-6-sonnet\"\nimport { claudeOpus48Specification } from \"@infra/providers/anthropic/models/claude-4-8-opus\"\nimport { claudeOpus47Specification } from \"@infra/providers/anthropic/models/claude-4-7-opus\"\nimport { gemini35FlashSpecification } from \"@infra/providers/gemini/models/gemini-3-5-flash\"\nimport { gemini31ProSpecification } from \"@infra/providers/gemini/models/gemini-3-1-pro\"\nimport { deepSeekV4FlashSpecification } from \"@infra/providers/deepseek/models/deepseek-v4-flash\"\nimport { deepSeekV4ProSpecification } from \"@infra/providers/deepseek/models/deepseek-v4-pro\"\nimport { gpt54Specification } from \"@infra/providers/openai/models/gpt-5-4\"\nimport { gpt54MiniSpecification } from \"@infra/providers/openai/models/gpt-5-4-mini\"\nimport { gpt54NanoSpecification } from \"@infra/providers/openai/models/gpt-5-4-nano\"\nimport { gpt55Specification } from \"@infra/providers/openai/models/gpt-5-5\"\nimport { claudeHaiku45Specification } from \"@infra/providers/anthropic/models/claude-4-5-haiku\"\nimport type { GenerativeModel } from \"@domain/generative-model/generative-model\"\n\nexport const supportedModels: GenerativeModel[] = [\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt54Specification,\n\t},\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt54MiniSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt54NanoSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt55Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeHaiku45Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeSonnet46Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeOpus47Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeOpus48Specification,\n\t},\n\t{\n\t\tendpoint: new GeminiGenerateContent(),\n\t\tspecification: gemini35FlashSpecification,\n\t},\n\t{\n\t\tendpoint: new GeminiGenerateContent(),\n\t\tspecification: gemini31ProSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIChatCompletions(),\n\t\tspecification: deepSeekV4FlashSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIChatCompletions(),\n\t\tspecification: deepSeekV4ProSpecification,\n\t},\n]\n","import type { InferenceInput } from \"@app/states/inference\"\nimport type { RequestValidationRule } from \"./rule\"\nimport type { ModelSpecification } from \"../generative-model\"\n\nexport class ReasoningEffortValidation implements RequestValidationRule {\n\treadonly name = \"reasoning-effort\"\n\n\tisValid(inferenceInput: InferenceInput, model: ModelSpecification): boolean {\n\t\tif (inferenceInput.reasoningEffort === undefined) {\n\t\t\treturn true\n\t\t}\n\n\t\tif (!model.supportsReasoningEffort) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn model.supportedReasoningEfforts.includes(inferenceInput.reasoningEffort)\n\t}\n}\n","import type { RequestValidationRule } from \"./rule\"\nimport type { ModelSpecification } from \"../generative-model\"\nimport type { InferenceInput } from \"@app/states/inference\"\n\nexport class ToolCallingValidation implements RequestValidationRule {\n\treadonly name = \"tool-calling\"\n\n\tisValid(inferenceInput: InferenceInput, model: ModelSpecification): boolean {\n\t\tif (inferenceInput.tools === undefined) {\n\t\t\treturn true\n\t\t}\n\n\t\treturn model.supportsFunctionCalling\n\t}\n}\n","import type { ModelSpecification } from \"@domain/generative-model/generative-model\"\nimport type { RequestValidationRule } from \"./rule\"\nimport type { InferenceInput } from \"@app/states/inference\"\n\nexport class StreamingValidation implements RequestValidationRule {\n\treadonly name = \"streaming\"\n\n\tisValid(inferenceInput: InferenceInput, model: ModelSpecification): boolean {\n\t\tif (!inferenceInput.streaming) {\n\t\t\treturn true\n\t\t}\n\n\t\treturn model.supportsStreaming\n\t}\n}\n","import type { InferenceInput } from \"@app/states/inference\"\nimport type { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { DeveloperMessageItem } from \"@domain/model-context/context-item/client-item/developer-message\"\nimport { SystemMessageItem } from \"@domain/model-context/context-item/client-item/system-message\"\nimport { UserMessageItem } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { ModelMessageItem } from \"@domain/model-context/context-item/model-item/model-message\"\nimport type { RequestValidationRule } from \"./rule\"\nimport type { ModelSpecification } from \"../generative-model\"\n\nfunction getContextItemValidationKey(item: ContextItem): string {\n\tif (item instanceof UserMessageItem) {\n\t\treturn \"user_message\"\n\t}\n\tif (item instanceof SystemMessageItem) {\n\t\treturn \"system_message\"\n\t}\n\tif (item instanceof DeveloperMessageItem) {\n\t\treturn \"developer_message\"\n\t}\n\tif (item instanceof ModelMessageItem) {\n\t\treturn \"model_message\"\n\t}\n\treturn item.getType()\n}\n\nexport class ContextValidation implements RequestValidationRule {\n\treadonly name = \"context\"\n\n\tisValid(inferenceInput: InferenceInput, model: ModelSpecification): boolean {\n\t\treturn inferenceInput.context.items.every((item) =>\n\t\t\tmodel.supportedContextItemTypes.includes(getContextItemValidationKey(item)),\n\t\t)\n\t}\n}\n","import type { InferenceInput } from \"@app/states/inference\"\nimport type { ModelSpecification } from \"../generative-model\"\nimport type { RequestValidationRule } from \"./rule\"\nimport { ReasoningEffortValidation } from \"./reasoning-effort\"\nimport { ToolCallingValidation } from \"./tool-calling\"\nimport { StreamingValidation } from \"./streaming\"\nimport { StructuredOutputValidation } from \"./structured-output\"\nimport { ContextValidation } from \"./context\"\n\nexport const defaultRequestValidationRules: RequestValidationRule[] = [\n\tnew ReasoningEffortValidation(),\n\tnew ToolCallingValidation(),\n\tnew StreamingValidation(),\n\tnew StructuredOutputValidation(),\n\tnew ContextValidation(),\n]\n\nexport class InferenceInputValidator {\n\tconstructor(private readonly rules: RequestValidationRule[] = defaultRequestValidationRules) {}\n\n\tvalidate(inferenceInput: InferenceInput, model: ModelSpecification): void {\n\t\tfor (const rule of this.rules) {\n\t\t\tif (!rule.isValid(inferenceInput, model)) {\n\t\t\t\tthrow new Error(`Request validation \"${rule.name}\" failed for model \"${model.name}\"`)\n\t\t\t}\n\t\t}\n\t}\n}\n","import type { InferenceInput, InferenceOutput, InferenceRunner } from \"@app/states/inference\"\nimport type { InferenceInputValidator } from \"@domain/generative-model/request-validation/inference-request-validator\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\n\nexport type InferenceCompletedParams = { answer: string; producerId: string; price?: number }\n\nexport class DefaultInferenceRunner implements InferenceRunner {\n\tconstructor(\n\t\tprivate readonly supportedModels: GenerativeModel[],\n\t\tprivate readonly requestValidator: InferenceInputValidator,\n\t) {}\n\n\tasync run(input: InferenceInput): Promise<InferenceOutput> {\n\t\tconst generativeModel = this.supportedModels.find((model) => model.specification.name === input.model)\n\t\tif (!generativeModel) {\n\t\t\tthrow new Error(`Unsupported model: ${input.model}`)\n\t\t}\n\n\t\tthis.requestValidator.validate(input, generativeModel.specification)\n\n\t\treturn await generativeModel.endpoint.infer(input)\n\t}\n\n\tasync *stream(input: InferenceInput): AsyncGenerator<SemanticEvent> {\n\t\tconst generativeModel = this.supportedModels.find((model) => model.specification.name === input.model)\n\t\tif (!generativeModel) {\n\t\t\tthrow new Error(`Unsupported model: ${input.model}`)\n\t\t}\n\n\t\tthis.requestValidator.validate(input, generativeModel.specification)\n\n\t\tyield* generativeModel.endpoint.stream(input)\n\t}\n}\n","import { FunctionCallRunner } from \"@app/states/function-call\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { FunctionCallOutputItem } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { FunctionCallItem } from \"@domain/model-context/context-item/model-item/function-call\"\n\nexport class DefaultFunctionCallRunner implements FunctionCallRunner {\n\tasync run(input: FunctionCallItem, tool: Tool): Promise<FunctionCallOutputItem> {\n\t\ttry {\n\t\t\tconst result = await tool.invoke(JSON.parse(input.args))\n\n\t\t\treturn FunctionCallOutputItem.create(\n\t\t\t\tinput.callId,\n\t\t\t\ttypeof result === \"string\" ? result : JSON.stringify(result),\n\t\t\t)\n\t\t} catch (error) {\n\t\t\treturn FunctionCallOutputItem.create(input.callId, `Error calling tool: ${error}`)\n\t\t}\n\t}\n}\n","import { RuntimeService } from \"@app/services/runtime\"\nimport { RuntimeState } from \"@domain/agentic-environment/runtime-state\"\nimport { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\n\nexport function createSendEvent<TRuntimeState extends RuntimeState>(\n\tresolveRuntime: () => RuntimeService<TRuntimeState>,\n) {\n\treturn function sendEvent(event: SemanticEvent, senderId: string): void {\n\t\tconst runtime = resolveRuntime()\n\t\tconst participant = runtime.getParticipant(senderId)\n\t\tif (!participant) {\n\t\t\tthrow new Error(`Participant ${senderId} not found`)\n\t\t}\n\n\t\truntime.publish(event)\n\t}\n}\n","import { RuntimeService } from \"@app/services/runtime\"\nimport { Participant } from \"@domain/agentic-environment/participant/participant\"\nimport { RuntimeState } from \"@domain/agentic-environment/runtime-state\"\nimport { EventProcessor } from \"@domain/agentic-environment/semantic-event/event-processor\"\nimport { createJoin } from \"./application/use-cases/join\"\nimport { createLeave } from \"./application/use-cases/leave\"\nimport { createSendMessage } from \"./application/use-cases/send-message\"\nimport { createRunLoop } from \"@app/use-cases/run-loop\"\nimport { InferenceRunner } from \"@app/states/inference\"\nimport { supportedModels } from \"@app/services/models\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { InferenceInputValidator } from \"@domain/generative-model/request-validation/inference-request-validator\"\nimport { DefaultInferenceRunner } from \"@app/services/inference-runner\"\nimport { DefaultFunctionCallRunner } from \"@app/services/function-call\"\nimport { createSendEvent } from \"@app/use-cases/send-event\"\n\nexport type InferenceRunnerConfig = {\n\tsupportedModels?: GenerativeModel[]\n\trunner?: InferenceRunner\n}\n\nexport function defineRuntime<TRuntimeState extends RuntimeState>() {\n\tlet runtime: RuntimeService<TRuntimeState> | null = null\n\tconst processor = new EventProcessor()\n\n\tfunction initializeRuntime(config: {\n\t\tstate: TRuntimeState\n\t\tinferenceRunnerConfig?: InferenceRunnerConfig\n\t}): RuntimeService<TRuntimeState> {\n\t\tif (runtime) {\n\t\t\tthrow new Error(\"Runtime already initialized\")\n\t\t}\n\n\t\tconst inferenceRunner =\n\t\t\tconfig.inferenceRunnerConfig?.runner ??\n\t\t\tnew DefaultInferenceRunner(\n\t\t\t\tconfig.inferenceRunnerConfig?.supportedModels ?? supportedModels,\n\t\t\t\tnew InferenceInputValidator(),\n\t\t\t)\n\n\t\tconst functionCallRunner = new DefaultFunctionCallRunner()\n\n\t\truntime = new RuntimeService(config.state, processor, inferenceRunner, functionCallRunner)\n\n\t\treturn runtime\n\t}\n\n\tfunction resolveRuntime(): RuntimeService<TRuntimeState> {\n\t\tif (!runtime) {\n\t\t\tthrow new Error(\"Runtime not initialized\")\n\t\t}\n\n\t\treturn runtime\n\t}\n\n\tfunction resolveParticipant(id: string): Participant {\n\t\tif (!runtime) {\n\t\t\tthrow new Error(\"Runtime not initialized\")\n\t\t}\n\n\t\tconst participant = runtime.state.getParticipant(id)\n\n\t\tif (!participant) {\n\t\t\tthrow new Error(`Participant ${id} not found`)\n\t\t}\n\n\t\treturn participant\n\t}\n\n\tconst join = createJoin(resolveRuntime)\n\tconst leave = createLeave(resolveRuntime)\n\tconst sendMessage = createSendMessage(resolveRuntime)\n\tconst sendEvent = createSendEvent(resolveRuntime)\n\tconst runLoop = createRunLoop(resolveRuntime)\n\n\treturn {\n\t\tinitializeRuntime,\n\t\tresolveRuntime,\n\t\tresolveParticipant,\n\t\tjoin,\n\t\tleave,\n\t\tsendMessage,\n\t\tsendEvent,\n\t\trunLoop,\n\t}\n}\n","import { SemanticEvent } from \"@domain/agentic-environment/semantic-event/event\"\nimport { Participant } from \"../participant/participant\"\n\nexport type SituationContext<TEvent extends SemanticEvent = SemanticEvent> = {\n\treadonly event: TEvent\n\treadonly participant: Participant\n}\n\nexport abstract class SituationSpecification<TEvent extends SemanticEvent = SemanticEvent> {\n\tabstract isSatisfiedBy(situationContext: SituationContext<TEvent>): boolean\n\n\tand(other: SituationSpecification<TEvent>): SituationSpecification<TEvent> {\n\t\treturn new AndSituationSpecification(this, other)\n\t}\n\n\tor(other: SituationSpecification<TEvent>): SituationSpecification<TEvent> {\n\t\treturn new OrSituationSpecification(this, other)\n\t}\n\n\tnot(): SituationSpecification<TEvent> {\n\t\treturn new NotSituationSpecification(this)\n\t}\n}\n\nclass AndSituationSpecification<TEvent extends SemanticEvent> extends SituationSpecification<TEvent> {\n\tconstructor(\n\t\tprivate readonly left: SituationSpecification<TEvent>,\n\t\tprivate readonly right: SituationSpecification<TEvent>,\n\t) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(situationContext: SituationContext<TEvent>): boolean {\n\t\treturn this.left.isSatisfiedBy(situationContext) && this.right.isSatisfiedBy(situationContext)\n\t}\n}\n\nclass OrSituationSpecification<TEvent extends SemanticEvent> extends SituationSpecification<TEvent> {\n\tconstructor(\n\t\tprivate readonly left: SituationSpecification<TEvent>,\n\t\tprivate readonly right: SituationSpecification<TEvent>,\n\t) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(situationContext: SituationContext<TEvent>): boolean {\n\t\treturn this.left.isSatisfiedBy(situationContext) || this.right.isSatisfiedBy(situationContext)\n\t}\n}\n\nclass NotSituationSpecification<TEvent extends SemanticEvent> extends SituationSpecification<TEvent> {\n\tconstructor(private readonly rule: SituationSpecification<TEvent>) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(situationContext: SituationContext<TEvent>): boolean {\n\t\treturn !this.rule.isSatisfiedBy(situationContext)\n\t}\n}\n"],"mappings":"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","names":["_a","tool","rule","Anthropic","OpenAI","import_openai","OpenAI","supportedModels"]}