{"version":3,"sources":["../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 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":";AAOO,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,SAAS,cAAc;AACvB,SAAS,qCAAqC;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,OAAO,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,SAAsB,yBAAyB;AAGxC,IAAM,4BAAN,MAAuD;AAAA,EAE7D,YACkB,SACA,QACA,SAChB;AAHgB;AACA;AACA;AAEjB,SAAK,QAAQ,kBAAkB;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,OAAO,eAAe;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,UAAU;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,OAAO,YAAY;;;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,OAAO;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,SAAS,mBAAmB;;;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,YAAY;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,OAAOC,aAAY;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,IAAIA,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;AAEvD,aAAO,uBAAuB;AAAA,QAC7B,MAAM;AAAA,QACN,OAAO,WAAW,WAAW,SAAS,KAAK,UAAU,MAAM;AAAA,MAC5D;AAAA,IACD,SAAS,OAAO;AACf,aAAO,uBAAuB,OAAO,MAAM,QAAQ,uBAAuB,KAAK,EAAE;AAAA,IAClF;AAAA,EACD;AACD;;;ACdO,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","OpenAI","supportedModels"]}