@perstack/runtime 0.0.69 → 0.0.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../package.json","../src/helpers/model.ts","../src/helpers/usage.ts","../src/skill-manager/base.ts","../src/skill-manager/command-args.ts","../src/skill-manager/delegate.ts","../src/skill-manager/interactive.ts","../src/skill-manager/ip-validator.ts","../src/skill-manager/mcp-converters.ts","../src/skill-manager/transport-factory.ts","../src/skill-manager/mcp.ts","../src/skill-manager/skill-manager-factory.ts","../src/skill-manager/helpers.ts","../src/tool-execution/mcp-executor.ts","../src/tool-execution/executor-factory.ts","../src/tool-execution/tool-classifier.ts","../src/state-machine/states/calling-delegate.ts","../src/state-machine/states/calling-interactive-tool.ts","../src/state-machine/states/calling-tool.ts","../src/state-machine/states/finishing-step.ts","../src/messages/message.ts","../src/state-machine/states/generating-run-result.ts","../src/state-machine/states/generating-tool-call.ts","../src/messages/instruction-message.ts","../src/state-machine/states/init.ts","../src/state-machine/states/preparing-for-step.ts","../src/state-machine/states/resolving-tool-result.ts","../src/state-machine/states/resolving-thought.ts","../src/state-machine/machine.ts","../src/state-machine/actor-factory.ts","../src/state-machine/coordinator.ts","../src/state-machine/executor.ts","../src/helpers/checkpoint.ts","../src/helpers/resolve-expert.ts","../src/helpers/setup-experts.ts","../src/orchestration/delegation-strategy.ts","../src/events/event-emitter.ts","../src/orchestration/single-run-executor.ts","../src/run.ts"],"names":["undiciFetch","tool","McpClient","createId","part","classifyToolCalls","generateText","retry","dedent","resolveExpertToRun","createRuntimeEvent"],"mappings":"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","file":"chunk-H65LPOAK.js","sourcesContent":["{\n \"name\": \"@perstack/runtime\",\n \"version\": \"0.0.69\",\n \"description\": \"Perstack Runtime\",\n \"author\": \"Wintermute Technologies, Inc.\",\n \"license\": \"Apache-2.0\",\n \"type\": \"module\",\n \"bin\": {\n \"perstack-runtime\": \"./bin/cli.ts\"\n },\n \"exports\": {\n \".\": \"./src/index.ts\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"bin\": {\n \"perstack-runtime\": \"dist/bin/cli.js\"\n },\n \"exports\": {\n \".\": \"./dist/src/index.js\"\n },\n \"types\": {\n \".\": \"./dist/src/index.d.ts\"\n }\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"clean\": \"rm -rf dist\",\n \"build\": \"pnpm run clean && tsup --config ./tsup.config.ts\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"dependencies\": {\n \"@ai-sdk/amazon-bedrock\": \"^3.0.62\",\n \"@ai-sdk/anthropic\": \"^2.0.50\",\n \"@ai-sdk/azure\": \"^2.0.77\",\n \"@ai-sdk/deepseek\": \"^1.0.16\",\n \"@ai-sdk/google\": \"^2.0.44\",\n \"@ai-sdk/google-vertex\": \"^3.0.24\",\n \"@ai-sdk/openai\": \"^2.0.75\",\n \"@modelcontextprotocol/sdk\": \"^1.24.0\",\n \"@paralleldrive/cuid2\": \"^3.0.4\",\n \"@perstack/api-client\": \"workspace:*\",\n \"@perstack/core\": \"workspace:*\",\n \"ai\": \"^5.0.104\",\n \"commander\": \"^14.0.2\",\n \"dotenv\": \"^17.2.3\",\n \"ollama-ai-provider-v2\": \"^1.5.5\",\n \"smol-toml\": \"^1.5.2\",\n \"ts-dedent\": \"^2.2.0\",\n \"undici\": \"^7.9.0\",\n \"xstate\": \"^5.24.0\"\n },\n \"devDependencies\": {\n \"@tsconfig/node22\": \"^22.0.5\",\n \"@types/node\": \"^24.10.1\",\n \"memfs\": \"^4.51.1\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.14\"\n },\n \"engines\": {\n \"node\": \">=22.0.0\"\n }\n}\n","import { createAmazonBedrock } from \"@ai-sdk/amazon-bedrock\"\nimport { createAnthropic } from \"@ai-sdk/anthropic\"\nimport { createAzure } from \"@ai-sdk/azure\"\nimport { createDeepSeek } from \"@ai-sdk/deepseek\"\nimport { createGoogleGenerativeAI } from \"@ai-sdk/google\"\nimport { createVertex } from \"@ai-sdk/google-vertex\"\nimport { createOpenAI } from \"@ai-sdk/openai\"\nimport { knownModels, type ProviderConfig, type ProviderName, type Usage } from \"@perstack/core\"\nimport type { LanguageModel } from \"ai\"\nimport { createOllama } from \"ollama-ai-provider-v2\"\nimport { ProxyAgent, fetch as undiciFetch } from \"undici\"\n\nfunction createProxyFetch(proxyUrl: string): typeof globalThis.fetch {\n const agent = new ProxyAgent(proxyUrl)\n return (input, init) => {\n return undiciFetch(input, { ...init, dispatcher: agent }) as Promise<Response>\n }\n}\n\nexport interface GetModelOptions {\n proxyUrl?: string\n}\n\nexport function getModel(\n modelId: string,\n providerConfig: ProviderConfig,\n options?: GetModelOptions,\n): LanguageModel {\n const customFetch = options?.proxyUrl ? createProxyFetch(options.proxyUrl) : undefined\n switch (providerConfig.providerName) {\n case \"anthropic\": {\n const anthropic = createAnthropic({\n apiKey: providerConfig.apiKey,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n fetch: customFetch,\n })\n return anthropic(modelId)\n }\n case \"google\": {\n const google = createGoogleGenerativeAI({\n apiKey: providerConfig.apiKey,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n fetch: customFetch,\n })\n return google(modelId)\n }\n case \"openai\": {\n const openai = createOpenAI({\n apiKey: providerConfig.apiKey,\n baseURL: providerConfig.baseUrl,\n organization: providerConfig.organization,\n project: providerConfig.project,\n name: providerConfig.name,\n headers: providerConfig.headers,\n fetch: customFetch,\n })\n return openai(modelId)\n }\n case \"ollama\": {\n const ollama = createOllama({\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n fetch: customFetch,\n })\n return ollama(modelId)\n }\n case \"azure-openai\": {\n const azure = createAzure({\n apiKey: providerConfig.apiKey,\n resourceName: providerConfig.resourceName,\n apiVersion: providerConfig.apiVersion,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n useDeploymentBasedUrls: providerConfig.useDeploymentBasedUrls,\n fetch: customFetch,\n })\n return azure(modelId)\n }\n case \"amazon-bedrock\": {\n const amazonBedrock = createAmazonBedrock({\n accessKeyId: providerConfig.accessKeyId,\n secretAccessKey: providerConfig.secretAccessKey,\n region: providerConfig.region,\n sessionToken: providerConfig.sessionToken,\n fetch: customFetch,\n })\n return amazonBedrock(modelId)\n }\n case \"google-vertex\": {\n const vertex = createVertex({\n project: providerConfig.project,\n location: providerConfig.location,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n fetch: customFetch,\n })\n return vertex(modelId)\n }\n case \"deepseek\": {\n const deepseek = createDeepSeek({\n apiKey: providerConfig.apiKey,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n fetch: customFetch,\n })\n return deepseek(modelId)\n }\n default: {\n const _exhaustive: never = providerConfig\n throw new Error(`Unknown provider: ${(_exhaustive as ProviderConfig).providerName}`)\n }\n }\n}\n\nexport function getContextWindow(providerName: ProviderName, modelId: string): number | undefined {\n const modelConfig = knownModels\n .find((model) => model.provider === providerName)\n ?.models.find((model) => model.name === modelId)\n return modelConfig?.contextWindow\n}\n\nexport function calculateContextWindowUsage(usage: Usage, contextWindow: number): number {\n return (usage.inputTokens + usage.cachedInputTokens + usage.outputTokens) / contextWindow\n}\n","import type { Usage } from \"@perstack/core\"\nimport type { GenerateTextResult, ToolSet } from \"ai\"\n\nexport function createEmptyUsage(): Usage {\n return {\n inputTokens: 0,\n outputTokens: 0,\n reasoningTokens: 0,\n totalTokens: 0,\n cachedInputTokens: 0,\n }\n}\n\nexport function usageFromGenerateTextResult(result: GenerateTextResult<ToolSet, never>): Usage {\n return {\n inputTokens: result.usage.inputTokens || 0,\n outputTokens: result.usage.outputTokens || 0,\n reasoningTokens: result.usage.reasoningTokens || 0,\n totalTokens: result.usage.totalTokens || 0,\n cachedInputTokens: result.usage.cachedInputTokens || 0,\n }\n}\n\nexport function sumUsage(a: Usage, b: Usage): Usage {\n return {\n inputTokens: a.inputTokens + b.inputTokens,\n outputTokens: a.outputTokens + b.outputTokens,\n reasoningTokens: a.reasoningTokens + b.reasoningTokens,\n totalTokens: a.totalTokens + b.totalTokens,\n cachedInputTokens: a.cachedInputTokens + b.cachedInputTokens,\n }\n}\n","import type {\n Expert,\n FileInlinePart,\n ImageInlinePart,\n InteractiveSkill,\n McpSseSkill,\n McpStdioSkill,\n RunEvent,\n RuntimeEvent,\n SkillType,\n TextPart,\n ToolDefinition,\n} from \"@perstack/core\"\n\nexport abstract class BaseSkillManager {\n protected _toolDefinitions: ToolDefinition[] = []\n protected _initialized = false\n protected _initializing?: Promise<void>\n abstract readonly name: string\n abstract readonly type: SkillType\n abstract readonly lazyInit: boolean\n readonly skill?: McpStdioSkill | McpSseSkill\n readonly interactiveSkill?: InteractiveSkill\n readonly expert?: Expert\n protected _jobId: string\n protected _runId: string\n protected _eventListener?: (event: RunEvent | RuntimeEvent) => void\n\n constructor(\n jobId: string,\n runId: string,\n eventListener?: (event: RunEvent | RuntimeEvent) => void,\n ) {\n this._jobId = jobId\n this._runId = runId\n this._eventListener = eventListener\n }\n\n async init(): Promise<void> {\n if (this._initialized) {\n throw new Error(`Skill ${this.name} is already initialized`)\n }\n if (this._initializing) {\n throw new Error(`Skill ${this.name} is already initializing`)\n }\n const initPromise = this._performInit()\n this._initializing = initPromise\n if (!this.lazyInit) {\n try {\n await initPromise\n } catch (error) {\n this._initialized = false\n this._initializing = undefined\n throw error\n }\n }\n }\n\n isInitialized(): boolean {\n return this._initialized\n }\n\n protected async _performInit(): Promise<void> {\n await this._doInit()\n this._initialized = true\n this._initializing = undefined\n }\n\n protected abstract _doInit(): Promise<void>\n\n abstract close(): Promise<void>\n\n async getToolDefinitions(): Promise<ToolDefinition[]> {\n // If initialization is in progress, wait for it to complete\n if (!this.isInitialized() && this._initializing) {\n await this._initializing\n }\n if (!this.isInitialized()) {\n throw new Error(`Skill ${this.name} is not initialized`)\n }\n return this._filterTools(this._toolDefinitions)\n }\n\n protected _filterTools(tools: ToolDefinition[]): ToolDefinition[] {\n return tools\n }\n\n abstract callTool(\n toolName: string,\n input: Record<string, unknown>,\n ): Promise<Array<TextPart | ImageInlinePart | FileInlinePart>>\n}\n","import type { McpStdioSkill } from \"@perstack/core\"\n\nexport interface CommandArgs {\n command: string\n args: string[]\n}\n\n/**\n * Parse and validate command arguments from a McpStdioSkill.\n * Ensures either packageName or args is provided (not both, not neither).\n * Adds -y flag for npx commands if not present.\n */\nexport function getCommandArgs(skill: McpStdioSkill): CommandArgs {\n const { name, command, packageName, args } = skill\n\n if (!packageName && (!args || args.length === 0)) {\n throw new Error(`Skill ${name} has no packageName or args. Please provide one of them.`)\n }\n\n if (packageName && args && args.length > 0) {\n throw new Error(`Skill ${name} has both packageName and args. Please provide only one of them.`)\n }\n\n let newArgs = args && args.length > 0 ? args : [packageName!]\n\n // Add -y flag for npx to auto-confirm package installation\n if (command === \"npx\" && !newArgs.includes(\"-y\")) {\n newArgs = [\"-y\", ...newArgs]\n }\n\n return { command, args: newArgs }\n}\n","import type {\n Expert,\n FileInlinePart,\n ImageInlinePart,\n RunEvent,\n RuntimeEvent,\n SkillType,\n TextPart,\n} from \"@perstack/core\"\nimport { BaseSkillManager } from \"./base.js\"\n\nexport class DelegateSkillManager extends BaseSkillManager {\n readonly name: string\n readonly type: SkillType = \"delegate\"\n readonly lazyInit = false\n override readonly expert: Expert\n\n constructor(\n expert: Expert,\n jobId: string,\n runId: string,\n eventListener?: (event: RunEvent | RuntimeEvent) => void,\n ) {\n super(jobId, runId, eventListener)\n this.name = expert.name\n this.expert = expert\n }\n\n protected override async _doInit(): Promise<void> {\n this._toolDefinitions = [\n {\n skillName: this.expert.name,\n name: this.expert.name.split(\"/\").pop() ?? this.expert.name,\n description: this.expert.description,\n inputSchema: {\n type: \"object\",\n properties: {\n query: { type: \"string\" },\n },\n required: [\"query\"],\n },\n interactive: false,\n },\n ]\n }\n\n override async close(): Promise<void> {}\n\n override async callTool(\n _toolName: string,\n _input: Record<string, unknown>,\n ): Promise<Array<TextPart | ImageInlinePart | FileInlinePart>> {\n return []\n }\n}\n","import type {\n FileInlinePart,\n ImageInlinePart,\n InteractiveSkill,\n RunEvent,\n RuntimeEvent,\n SkillType,\n TextPart,\n} from \"@perstack/core\"\nimport { BaseSkillManager } from \"./base.js\"\n\nexport class InteractiveSkillManager extends BaseSkillManager {\n readonly name: string\n readonly type: SkillType = \"interactive\"\n readonly lazyInit = false\n override readonly interactiveSkill: InteractiveSkill\n\n constructor(\n interactiveSkill: InteractiveSkill,\n jobId: string,\n runId: string,\n eventListener?: (event: RunEvent | RuntimeEvent) => void,\n ) {\n super(jobId, runId, eventListener)\n this.name = interactiveSkill.name\n this.interactiveSkill = interactiveSkill\n }\n\n protected override async _doInit(): Promise<void> {\n this._toolDefinitions = Object.values(this.interactiveSkill.tools).map((tool) => ({\n skillName: this.interactiveSkill.name,\n name: tool.name,\n description: tool.description,\n inputSchema: JSON.parse(tool.inputJsonSchema),\n interactive: true,\n }))\n }\n\n override async close(): Promise<void> {}\n\n override async callTool(\n _toolName: string,\n _input: Record<string, unknown>,\n ): Promise<Array<TextPart | ImageInlinePart | FileInlinePart>> {\n return []\n }\n}\n","/**\n * Check if a hostname is a private or local IP address.\n * Used to validate SSE endpoints - private/local IPs are not allowed.\n */\nexport function isPrivateOrLocalIP(hostname: string): boolean {\n // Check common local hostnames\n if (\n hostname === \"localhost\" ||\n hostname === \"127.0.0.1\" ||\n hostname === \"::1\" ||\n hostname === \"0.0.0.0\"\n ) {\n return true\n }\n\n // Check IPv4 private ranges\n const ipv4Match = hostname.match(/^(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)$/)\n if (ipv4Match) {\n const [, a, b] = ipv4Match.map(Number)\n // 10.0.0.0/8\n if (a === 10) return true\n // 172.16.0.0/12\n if (a === 172 && b >= 16 && b <= 31) return true\n // 192.168.0.0/16\n if (a === 192 && b === 168) return true\n // 169.254.0.0/16 (link-local)\n if (a === 169 && b === 254) return true\n // 127.0.0.0/8 (loopback)\n if (a === 127) return true\n }\n\n // Check IPv6 private ranges\n if (hostname.includes(\":\")) {\n // fe80::/10 (link-local)\n if (hostname.startsWith(\"fe80:\")) return true\n // fc00::/7 (unique local)\n if (hostname.startsWith(\"fc\") || hostname.startsWith(\"fd\")) return true\n }\n\n // Check IPv4-mapped IPv6 addresses\n if (hostname.startsWith(\"::ffff:\")) {\n const ipv4Part = hostname.slice(7)\n if (isPrivateOrLocalIP(ipv4Part)) {\n return true\n }\n }\n\n return false\n}\n","import type { CallToolResult, McpError } from \"@modelcontextprotocol/sdk/types.js\"\nimport { createId } from \"@paralleldrive/cuid2\"\nimport type {\n CallToolResultContent,\n FileInlinePart,\n ImageInlinePart,\n Resource,\n TextPart,\n} from \"@perstack/core\"\n\n/**\n * Handle MCP tool errors and convert them to TextPart responses.\n * McpError instances are converted to error messages, other errors are re-thrown.\n */\nexport function handleToolError(\n error: unknown,\n toolName: string,\n McpErrorClass: typeof McpError,\n): Array<TextPart> {\n if (error instanceof McpErrorClass) {\n return [\n {\n type: \"textPart\",\n text: `Error calling tool ${toolName}: ${error.message}`,\n id: createId(),\n },\n ]\n }\n throw error\n}\n\n/**\n * Convert MCP CallToolResult to internal part types.\n */\nexport function convertToolResult(\n result: CallToolResult,\n toolName: string,\n input: Record<string, unknown>,\n): Array<TextPart | ImageInlinePart | FileInlinePart> {\n if (!result.content || result.content.length === 0) {\n return [\n {\n type: \"textPart\",\n text: `Tool ${toolName} returned nothing with arguments: ${JSON.stringify(input)}`,\n id: createId(),\n },\n ]\n }\n\n return result.content\n .filter((part) => part.type !== \"audio\" && part.type !== \"resource_link\")\n .map((part) => convertPart(part as CallToolResultContent))\n}\n\n/**\n * Convert a single MCP content part to internal part type.\n */\nexport function convertPart(\n part: CallToolResultContent,\n): TextPart | ImageInlinePart | FileInlinePart {\n switch (part.type) {\n case \"text\":\n if (!part.text || part.text === \"\") {\n return { type: \"textPart\", text: \"Error: No content\", id: createId() }\n }\n return { type: \"textPart\", text: part.text, id: createId() }\n\n case \"image\":\n if (!part.data || !part.mimeType) {\n throw new Error(\"Image part must have both data and mimeType\")\n }\n return {\n type: \"imageInlinePart\",\n encodedData: part.data,\n mimeType: part.mimeType,\n id: createId(),\n }\n\n case \"resource\":\n if (!part.resource) {\n throw new Error(\"Resource part must have resource content\")\n }\n return convertResource(part.resource)\n }\n}\n\n/**\n * Convert MCP resource to internal part type.\n */\nexport function convertResource(resource: Resource): TextPart | FileInlinePart {\n if (!resource.mimeType) {\n throw new Error(`Resource ${JSON.stringify(resource)} has no mimeType`)\n }\n\n if (resource.text && typeof resource.text === \"string\") {\n return { type: \"textPart\", text: resource.text, id: createId() }\n }\n\n if (resource.blob && typeof resource.blob === \"string\") {\n return {\n type: \"fileInlinePart\",\n encodedData: resource.blob,\n mimeType: resource.mimeType,\n id: createId(),\n }\n }\n\n throw new Error(`Unsupported resource type: ${JSON.stringify(resource)}`)\n}\n","import { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\"\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\"\nimport type { Transport } from \"@modelcontextprotocol/sdk/shared/transport.js\"\n\nexport interface StdioTransportOptions {\n command: string\n args: string[]\n env: Record<string, string>\n stderr?: \"pipe\" | \"inherit\" | \"ignore\"\n}\n\nexport interface SseTransportOptions {\n url: URL\n}\n\n/**\n * Factory interface for creating MCP transports.\n * Allows for dependency injection and easier testing.\n */\nexport interface TransportFactory {\n createStdio(options: StdioTransportOptions): StdioClientTransport\n createSse(options: SseTransportOptions): Transport\n}\n\n/**\n * Default implementation of TransportFactory using real MCP SDK transports.\n */\nexport class DefaultTransportFactory implements TransportFactory {\n createStdio(options: StdioTransportOptions): StdioClientTransport {\n return new StdioClientTransport({\n command: options.command,\n args: options.args,\n env: options.env,\n stderr: options.stderr,\n })\n }\n\n createSse(options: SseTransportOptions): Transport {\n return new SSEClientTransport(options.url)\n }\n}\n\n/**\n * Default transport factory instance.\n */\nexport const defaultTransportFactory = new DefaultTransportFactory()\n","import { Client as McpClient } from \"@modelcontextprotocol/sdk/client/index.js\"\nimport type { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\"\nimport { type CallToolResult, McpError } from \"@modelcontextprotocol/sdk/types.js\"\nimport {\n createRuntimeEvent,\n type FileInlinePart,\n getFilteredEnv,\n type ImageInlinePart,\n type McpSseSkill,\n type McpStdioSkill,\n type RunEvent,\n type RuntimeEvent,\n type SkillType,\n type TextPart,\n type ToolDefinition,\n} from \"@perstack/core\"\nimport { BaseSkillManager } from \"./base.js\"\nimport { getCommandArgs } from \"./command-args.js\"\nimport { isPrivateOrLocalIP } from \"./ip-validator.js\"\nimport { convertToolResult, handleToolError } from \"./mcp-converters.js\"\nimport { defaultTransportFactory, type TransportFactory } from \"./transport-factory.js\"\n\ninterface InitTimingInfo {\n startTime: number\n spawnDurationMs: number\n handshakeDurationMs: number\n serverInfo?: { name: string; version: string }\n}\n\nexport interface McpSkillManagerOptions {\n transportFactory?: TransportFactory\n}\n\nexport class McpSkillManager extends BaseSkillManager {\n readonly name: string\n readonly type: SkillType = \"mcp\"\n readonly lazyInit: boolean\n override readonly skill: McpStdioSkill | McpSseSkill\n private _mcpClient?: McpClient\n private _env: Record<string, string>\n private _transportFactory: TransportFactory\n\n constructor(\n skill: McpStdioSkill | McpSseSkill,\n env: Record<string, string>,\n jobId: string,\n runId: string,\n eventListener?: (event: RunEvent | RuntimeEvent) => void,\n options?: McpSkillManagerOptions,\n ) {\n super(jobId, runId, eventListener)\n this.name = skill.name\n this.skill = skill\n this._env = env\n this._transportFactory = options?.transportFactory ?? defaultTransportFactory\n this.lazyInit =\n skill.type === \"mcpStdioSkill\" && skill.lazyInit && skill.name !== \"@perstack/base\"\n }\n\n protected override async _doInit(): Promise<void> {\n this._mcpClient = new McpClient({\n name: `${this.skill.name}-mcp-client`,\n version: \"1.0.0\",\n })\n let timingInfo: InitTimingInfo | undefined\n if (this.skill.type === \"mcpStdioSkill\") {\n timingInfo = await this._initStdio(this.skill)\n } else {\n await this._initSse(this.skill)\n }\n const toolDiscoveryStartTime = Date.now()\n const { tools } = await this._mcpClient.listTools()\n const toolDiscoveryDurationMs = Date.now() - toolDiscoveryStartTime\n this._toolDefinitions = tools.map((tool) => ({\n skillName: this.skill.name,\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n interactive: false,\n }))\n if (this._eventListener && timingInfo) {\n const totalDurationMs = Date.now() - timingInfo.startTime\n const event = createRuntimeEvent(\"skillConnected\", this._jobId, this._runId, {\n skillName: this.skill.name,\n serverInfo: timingInfo.serverInfo,\n spawnDurationMs: timingInfo.spawnDurationMs,\n handshakeDurationMs: timingInfo.handshakeDurationMs,\n toolDiscoveryDurationMs,\n connectDurationMs: timingInfo.spawnDurationMs + timingInfo.handshakeDurationMs,\n totalDurationMs,\n })\n this._eventListener(event)\n }\n }\n\n private async _initStdio(skill: McpStdioSkill): Promise<InitTimingInfo> {\n if (!skill.command) {\n throw new Error(`Skill ${skill.name} has no command`)\n }\n const requiredEnv: Record<string, string> = {}\n for (const envName of skill.requiredEnv) {\n if (!this._env[envName]) {\n throw new Error(`Skill ${skill.name} requires environment variable ${envName}`)\n }\n requiredEnv[envName] = this._env[envName]\n }\n const env = getFilteredEnv(requiredEnv)\n const startTime = Date.now()\n const { command, args } = getCommandArgs(skill)\n if (this._eventListener) {\n const event = createRuntimeEvent(\"skillStarting\", this._jobId, this._runId, {\n skillName: skill.name,\n command,\n args,\n })\n this._eventListener(event)\n }\n const transport = this._transportFactory.createStdio({ command, args, env, stderr: \"pipe\" })\n const spawnDurationMs = Date.now() - startTime\n if ((transport as StdioClientTransport).stderr) {\n ;(transport as StdioClientTransport).stderr!.on(\"data\", (chunk: Buffer) => {\n if (this._eventListener) {\n const event = createRuntimeEvent(\"skillStderr\", this._jobId, this._runId, {\n skillName: skill.name,\n message: chunk.toString().trim(),\n })\n this._eventListener(event)\n }\n })\n }\n const connectStartTime = Date.now()\n await this._mcpClient!.connect(transport)\n const handshakeDurationMs = Date.now() - connectStartTime\n const serverVersion = this._mcpClient!.getServerVersion()\n return {\n startTime,\n spawnDurationMs,\n handshakeDurationMs,\n serverInfo: serverVersion\n ? { name: serverVersion.name, version: serverVersion.version }\n : undefined,\n }\n }\n\n private async _initSse(skill: McpSseSkill): Promise<void> {\n if (!skill.endpoint) {\n throw new Error(`Skill ${skill.name} has no endpoint`)\n }\n const url = new URL(skill.endpoint)\n if (url.protocol !== \"https:\") {\n throw new Error(`Skill ${skill.name} SSE endpoint must use HTTPS: ${skill.endpoint}`)\n }\n if (isPrivateOrLocalIP(url.hostname)) {\n throw new Error(\n `Skill ${skill.name} SSE endpoint cannot use private/local IP: ${skill.endpoint}`,\n )\n }\n const transport = this._transportFactory.createSse({ url })\n await this._mcpClient!.connect(transport)\n }\n\n override async close(): Promise<void> {\n if (this._mcpClient) {\n await this._mcpClient.close()\n if (this._eventListener && this.skill) {\n const event = createRuntimeEvent(\"skillDisconnected\", this._jobId, this._runId, {\n skillName: this.skill.name,\n })\n this._eventListener(event)\n }\n }\n }\n\n protected override _filterTools(tools: ToolDefinition[]): ToolDefinition[] {\n const omit = this.skill.omit ?? []\n const pick = this.skill.pick ?? []\n return tools\n .filter((tool) => (omit.length > 0 ? !omit.includes(tool.name) : true))\n .filter((tool) => (pick.length > 0 ? pick.includes(tool.name) : true))\n }\n\n override async callTool(\n toolName: string,\n input: Record<string, unknown>,\n ): Promise<Array<TextPart | ImageInlinePart | FileInlinePart>> {\n if (!this.isInitialized() || !this._mcpClient) {\n throw new Error(`${this.name} is not initialized`)\n }\n try {\n const result = (await this._mcpClient.callTool({\n name: toolName,\n arguments: input,\n })) as CallToolResult\n return convertToolResult(result, toolName, input)\n } catch (error) {\n return handleToolError(error, toolName, McpError)\n }\n }\n}\n","import type {\n Expert,\n InteractiveSkill,\n McpSseSkill,\n McpStdioSkill,\n RunEvent,\n RuntimeEvent,\n} from \"@perstack/core\"\nimport type { BaseSkillManager } from \"./base.js\"\nimport { DelegateSkillManager } from \"./delegate.js\"\nimport { InteractiveSkillManager } from \"./interactive.js\"\nimport { McpSkillManager, type McpSkillManagerOptions } from \"./mcp.js\"\n\nexport interface SkillManagerFactoryContext {\n env: Record<string, string>\n jobId: string\n runId: string\n eventListener?: (event: RunEvent | RuntimeEvent) => void\n mcpOptions?: McpSkillManagerOptions\n}\n\n/**\n * Factory interface for creating skill managers.\n * Allows for dependency injection and easier testing.\n */\nexport interface SkillManagerFactory {\n createMcp(\n skill: McpStdioSkill | McpSseSkill,\n context: SkillManagerFactoryContext,\n ): BaseSkillManager\n createInteractive(skill: InteractiveSkill, context: SkillManagerFactoryContext): BaseSkillManager\n createDelegate(expert: Expert, context: SkillManagerFactoryContext): BaseSkillManager\n}\n\n/**\n * Default implementation of SkillManagerFactory using real skill manager classes.\n */\nexport class DefaultSkillManagerFactory implements SkillManagerFactory {\n createMcp(\n skill: McpStdioSkill | McpSseSkill,\n context: SkillManagerFactoryContext,\n ): BaseSkillManager {\n return new McpSkillManager(\n skill,\n context.env,\n context.jobId,\n context.runId,\n context.eventListener,\n context.mcpOptions,\n )\n }\n\n createInteractive(\n skill: InteractiveSkill,\n context: SkillManagerFactoryContext,\n ): BaseSkillManager {\n return new InteractiveSkillManager(skill, context.jobId, context.runId, context.eventListener)\n }\n\n createDelegate(expert: Expert, context: SkillManagerFactoryContext): BaseSkillManager {\n return new DelegateSkillManager(expert, context.jobId, context.runId, context.eventListener)\n }\n}\n\n/**\n * Default skill manager factory instance.\n */\nexport const defaultSkillManagerFactory = new DefaultSkillManagerFactory()\n","import type {\n Expert,\n InteractiveSkill,\n McpSseSkill,\n McpStdioSkill,\n RunEvent,\n RunSetting,\n RuntimeEvent,\n} from \"@perstack/core\"\nimport { jsonSchema, type ToolSet, tool } from \"ai\"\nimport type { BaseSkillManager } from \"./base.js\"\nimport {\n defaultSkillManagerFactory,\n type SkillManagerFactory,\n type SkillManagerFactoryContext,\n} from \"./skill-manager-factory.js\"\n\n/**\n * Initialize skill managers and cleanup on failure.\n * Exported for testing purposes.\n */\nexport async function initSkillManagersWithCleanup(\n managers: BaseSkillManager[],\n allManagers: BaseSkillManager[],\n): Promise<void> {\n const results = await Promise.allSettled(managers.map((m) => m.init()))\n const firstRejected = results.find((r) => r.status === \"rejected\")\n if (firstRejected) {\n await Promise.all(allManagers.map((m) => m.close().catch(() => {})))\n throw (firstRejected as PromiseRejectedResult).reason\n }\n}\n\nexport interface GetSkillManagersOptions {\n isDelegatedRun?: boolean\n factory?: SkillManagerFactory\n}\n\nexport async function getSkillManagers(\n expert: Expert,\n experts: Record<string, Expert>,\n setting: RunSetting,\n eventListener?: (event: RunEvent | RuntimeEvent) => void,\n options?: GetSkillManagersOptions,\n): Promise<Record<string, BaseSkillManager>> {\n const { perstackBaseSkillCommand, env, jobId, runId } = setting\n const { skills } = expert\n const factory = options?.factory ?? defaultSkillManagerFactory\n\n if (!skills[\"@perstack/base\"]) {\n throw new Error(\"Base skill is not defined\")\n }\n\n const factoryContext: SkillManagerFactoryContext = {\n env,\n jobId,\n runId,\n eventListener,\n }\n\n const allManagers: BaseSkillManager[] = []\n\n // Process MCP skills\n const mcpSkills = Object.values(skills)\n .filter(\n (skill): skill is McpStdioSkill | McpSseSkill =>\n skill.type === \"mcpStdioSkill\" || skill.type === \"mcpSseSkill\",\n )\n .map((skill) => {\n if (perstackBaseSkillCommand && skill.type === \"mcpStdioSkill\") {\n const matchesBaseByPackage =\n skill.command === \"npx\" && skill.packageName === \"@perstack/base\"\n const matchesBaseByArgs =\n skill.command === \"npx\" &&\n Array.isArray(skill.args) &&\n skill.args.includes(\"@perstack/base\")\n if (matchesBaseByPackage || matchesBaseByArgs) {\n const [overrideCommand, ...overrideArgs] = perstackBaseSkillCommand\n if (!overrideCommand) {\n throw new Error(\"perstackBaseSkillCommand must have at least one element\")\n }\n return {\n ...skill,\n command: overrideCommand,\n packageName: undefined,\n args: overrideArgs,\n lazyInit: false,\n } as McpStdioSkill\n }\n }\n return skill\n })\n\n const mcpSkillManagers = mcpSkills.map((skill) => {\n const manager = factory.createMcp(skill, factoryContext)\n allManagers.push(manager)\n return manager\n })\n await initSkillManagersWithCleanup(mcpSkillManagers, allManagers)\n\n // Process interactive skills (not for delegated runs)\n if (!options?.isDelegatedRun) {\n const interactiveSkills = Object.values(skills).filter(\n (skill): skill is InteractiveSkill => skill.type === \"interactiveSkill\",\n )\n const interactiveSkillManagers = interactiveSkills.map((interactiveSkill) => {\n const manager = factory.createInteractive(interactiveSkill, factoryContext)\n allManagers.push(manager)\n return manager\n })\n await initSkillManagersWithCleanup(interactiveSkillManagers, allManagers)\n }\n\n // Process delegate experts\n const delegateSkillManagers: BaseSkillManager[] = []\n for (const delegateExpertName of expert.delegates) {\n const delegate = experts[delegateExpertName]\n if (!delegate) {\n await Promise.all(allManagers.map((m) => m.close().catch(() => {})))\n throw new Error(`Delegate expert \"${delegateExpertName}\" not found in experts`)\n }\n const manager = factory.createDelegate(delegate, factoryContext)\n allManagers.push(manager)\n delegateSkillManagers.push(manager)\n }\n await initSkillManagersWithCleanup(delegateSkillManagers, allManagers)\n\n const skillManagers: Record<string, BaseSkillManager> = {}\n for (const manager of allManagers) {\n skillManagers[manager.name] = manager\n }\n return skillManagers\n}\n\nexport async function closeSkillManagers(\n skillManagers: Record<string, BaseSkillManager>,\n): Promise<void> {\n await Promise.all(Object.values(skillManagers).map((m) => m.close().catch(() => {})))\n}\n\nexport async function getSkillManagerByToolName(\n skillManagers: Record<string, BaseSkillManager>,\n toolName: string,\n): Promise<BaseSkillManager> {\n for (const skillManager of Object.values(skillManagers)) {\n const toolDefinitions = await skillManager.getToolDefinitions()\n for (const toolDefinition of toolDefinitions) {\n if (toolDefinition.name === toolName) {\n return skillManager\n }\n }\n }\n throw new Error(`Tool ${toolName} not found`)\n}\n\nexport async function getToolSet(\n skillManagers: Record<string, BaseSkillManager>,\n): Promise<ToolSet> {\n const tools: ToolSet = {}\n for (const skillManager of Object.values(skillManagers)) {\n const toolDefinitions = await skillManager.getToolDefinitions()\n for (const toolDefinition of toolDefinitions) {\n tools[toolDefinition.name] = tool({\n description: toolDefinition.description,\n inputSchema: jsonSchema(toolDefinition.inputSchema),\n })\n }\n }\n return tools\n}\n","import { readFile } from \"node:fs/promises\"\nimport type { MessagePart, SkillType, ToolCall, ToolResult } from \"@perstack/core\"\nimport type { BaseSkillManager } from \"../skill-manager/base.js\"\nimport { getSkillManagerByToolName } from \"../skill-manager/helpers.js\"\nimport type { McpSkillManager } from \"../skill-manager/mcp.js\"\nimport type { ToolExecutor } from \"./tool-executor.js\"\n\ntype FileInfo = { path: string; mimeType: string; size: number }\n\nfunction isFileInfo(value: unknown): value is FileInfo {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"path\" in value &&\n \"mimeType\" in value &&\n \"size\" in value &&\n typeof (value as FileInfo).path === \"string\" &&\n typeof (value as FileInfo).mimeType === \"string\" &&\n typeof (value as FileInfo).size === \"number\"\n )\n}\n\nasync function processFileToolResult(\n toolResult: ToolResult,\n toolName: \"readPdfFile\" | \"readImageFile\",\n): Promise<ToolResult> {\n const processedContents: MessagePart[] = []\n for (const part of toolResult.result) {\n if (part.type !== \"textPart\") {\n processedContents.push(part)\n continue\n }\n let fileInfo: FileInfo | undefined\n try {\n const parsed = JSON.parse(part.text)\n if (isFileInfo(parsed)) {\n fileInfo = parsed\n }\n } catch {\n processedContents.push(part)\n continue\n }\n if (!fileInfo) {\n processedContents.push(part)\n continue\n }\n const { path, mimeType } = fileInfo\n try {\n const buffer = await readFile(path)\n if (toolName === \"readImageFile\") {\n processedContents.push({\n type: \"imageInlinePart\",\n id: part.id,\n encodedData: buffer.toString(\"base64\"),\n mimeType,\n })\n } else {\n processedContents.push({\n type: \"fileInlinePart\",\n id: part.id,\n encodedData: buffer.toString(\"base64\"),\n mimeType,\n })\n }\n } catch (error) {\n processedContents.push({\n type: \"textPart\",\n id: part.id,\n text: `Failed to read file \"${path}\": ${error instanceof Error ? error.message : String(error)}`,\n })\n }\n }\n return { ...toolResult, result: processedContents }\n}\n\n/**\n * Executor for MCP (Model Context Protocol) tools.\n * Handles standard MCP tool calls including file processing for readPdfFile/readImageFile.\n */\nexport class McpToolExecutor implements ToolExecutor {\n readonly type: SkillType = \"mcp\"\n\n async execute(\n toolCall: ToolCall,\n skillManagers: Record<string, BaseSkillManager>,\n ): Promise<ToolResult> {\n const skillManager = await getSkillManagerByToolName(skillManagers, toolCall.toolName)\n if (skillManager.type !== \"mcp\") {\n throw new Error(`Incorrect SkillType, required MCP, got ${skillManager.type}`)\n }\n const result = await (skillManager as McpSkillManager).callTool(\n toolCall.toolName,\n toolCall.args,\n )\n const toolResult: ToolResult = {\n id: toolCall.id,\n skillName: toolCall.skillName,\n toolName: toolCall.toolName,\n result,\n }\n // Handle special file reading tools\n if (toolCall.toolName === \"readPdfFile\" || toolCall.toolName === \"readImageFile\") {\n return processFileToolResult(toolResult, toolCall.toolName)\n }\n return toolResult\n }\n}\n","import type { SkillType, ToolCall, ToolResult } from \"@perstack/core\"\nimport type { BaseSkillManager } from \"../skill-manager/base.js\"\nimport { McpToolExecutor } from \"./mcp-executor.js\"\nimport type { ToolExecutor } from \"./tool-executor.js\"\n\n/**\n * Factory for creating tool executors based on skill type.\n * Follows the Factory pattern from packages/docker.\n */\nexport class ToolExecutorFactory {\n private executors: Map<SkillType, ToolExecutor>\n\n constructor() {\n this.executors = new Map([\n [\"mcp\", new McpToolExecutor()],\n // delegate and interactive are handled specially (not executed here)\n ])\n }\n\n /**\n * Get the executor for a given skill type\n */\n getExecutor(type: SkillType): ToolExecutor | undefined {\n return this.executors.get(type)\n }\n\n /**\n * Execute a tool call using the appropriate executor\n */\n async execute(\n toolCall: ToolCall,\n type: SkillType,\n skillManagers: Record<string, BaseSkillManager>,\n ): Promise<ToolResult> {\n const executor = this.executors.get(type)\n if (!executor) {\n throw new Error(`No executor registered for skill type: ${type}`)\n }\n return executor.execute(toolCall, skillManagers)\n }\n\n /**\n * Check if a skill type can be executed locally (vs requiring delegation)\n */\n canExecuteLocally(type: SkillType): boolean {\n return type === \"mcp\"\n }\n}\n\n/**\n * Singleton factory instance for convenience\n */\nexport const toolExecutorFactory = new ToolExecutorFactory()\n","import type { SkillType, ToolCall } from \"@perstack/core\"\nimport type { BaseSkillManager } from \"../skill-manager/base.js\"\nimport { getSkillManagerByToolName } from \"../skill-manager/helpers.js\"\n\nexport type ClassifiedToolCall = {\n toolCall: ToolCall\n type: SkillType\n skillManager: BaseSkillManager\n}\n\nexport type ClassifiedToolCalls = {\n mcp: ClassifiedToolCall[]\n delegate: ClassifiedToolCall[]\n interactive: ClassifiedToolCall[]\n}\n\n/**\n * Get the skill type for a tool by name only\n */\nexport async function getToolTypeByName(\n toolName: string,\n skillManagers: Record<string, BaseSkillManager>,\n): Promise<SkillType> {\n const skillManager = await getSkillManagerByToolName(skillManagers, toolName)\n return skillManager.type\n}\n\n/**\n * Classify multiple tool calls by their skill type\n */\nexport async function classifyToolCalls(\n toolCalls: ToolCall[],\n skillManagers: Record<string, BaseSkillManager>,\n): Promise<ClassifiedToolCalls> {\n const classified: ClassifiedToolCalls = {\n mcp: [],\n delegate: [],\n interactive: [],\n }\n\n const results = await Promise.all(\n toolCalls.map(async (toolCall) => {\n const skillManager = await getSkillManagerByToolName(skillManagers, toolCall.toolName)\n return { toolCall, type: skillManager.type, skillManager }\n }),\n )\n\n for (const result of results) {\n classified[result.type].push(result)\n }\n\n return classified\n}\n","import { type DelegationTarget, type RunEvent, stopRunByDelegate } from \"@perstack/core\"\nimport { getSkillManagerByToolName } from \"../../skill-manager/index.js\"\nimport { getToolTypeByName } from \"../../tool-execution/index.js\"\nimport type { RunSnapshot } from \"../machine.js\"\n\nexport async function callingDelegateLogic({\n setting,\n checkpoint,\n step,\n skillManagers,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.pendingToolCalls || step.pendingToolCalls.length === 0) {\n throw new Error(\"No pending tool calls found\")\n }\n const toolCallTypes = await Promise.all(\n step.pendingToolCalls.map(async (tc) => ({\n toolCall: tc,\n type: await getToolTypeByName(tc.toolName, skillManagers),\n })),\n )\n const delegateToolCalls = toolCallTypes\n .filter((t) => t.type === \"delegate\")\n .map((t) => t.toolCall)\n const nonDelegateToolCalls = toolCallTypes\n .filter((t) => t.type !== \"delegate\")\n .map((t) => t.toolCall)\n if (delegateToolCalls.length === 0) {\n throw new Error(\"No delegate tool calls found\")\n }\n const delegations: DelegationTarget[] = await Promise.all(\n delegateToolCalls.map(async (tc) => {\n const skillManager = await getSkillManagerByToolName(skillManagers, tc.toolName)\n if (!skillManager.expert) {\n throw new Error(`Delegation error: skill manager \"${tc.toolName}\" not found`)\n }\n if (!tc.args || !tc.args.query || typeof tc.args.query !== \"string\") {\n throw new Error(`Delegation error: query is undefined for ${tc.toolName}`)\n }\n return {\n expert: {\n key: skillManager.expert.key,\n name: skillManager.expert.name,\n version: skillManager.expert.version,\n },\n toolCallId: tc.id,\n toolName: tc.toolName,\n query: tc.args.query,\n }\n }),\n )\n return stopRunByDelegate(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByDelegate\",\n delegateTo: delegations,\n pendingToolCalls: nonDelegateToolCalls.length > 0 ? nonDelegateToolCalls : undefined,\n partialToolResults: step.partialToolResults,\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n })\n}\n","import { type RunEvent, stopRunByInteractiveTool } from \"@perstack/core\"\nimport type { RunSnapshot } from \"../machine.js\"\n\nexport async function callingInteractiveToolLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.pendingToolCalls || step.pendingToolCalls.length === 0) {\n throw new Error(\"No pending tool calls found\")\n }\n const currentToolCall = step.pendingToolCalls[0]\n const remainingToolCalls = step.pendingToolCalls.slice(1)\n return stopRunByInteractiveTool(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByInteractiveTool\",\n pendingToolCalls: [currentToolCall, ...remainingToolCalls],\n partialToolResults: step.partialToolResults,\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n })\n}\n","import {\n attemptCompletion,\n callDelegate,\n callInteractiveTool,\n type RunEvent,\n resolveToolResults,\n type ToolResult,\n} from \"@perstack/core\"\nimport { classifyToolCalls, toolExecutorFactory } from \"../../tool-execution/index.js\"\nimport type { RunSnapshot } from \"../machine.js\"\n\nfunction hasRemainingTodos(toolResult: ToolResult): boolean {\n const firstPart = toolResult.result[0]\n if (!firstPart || firstPart.type !== \"textPart\") {\n return false\n }\n try {\n const parsed = JSON.parse(firstPart.text)\n return Array.isArray(parsed.remainingTodos) && parsed.remainingTodos.length > 0\n } catch {\n return false\n }\n}\n\nexport async function callingToolLogic({\n setting,\n checkpoint,\n step,\n skillManagers,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n const pendingToolCalls = step.pendingToolCalls ?? step.toolCalls ?? []\n if (pendingToolCalls.length === 0) {\n throw new Error(\"No tool calls found\")\n }\n\n const toolResults: ToolResult[] = step.toolResults ? [...step.toolResults] : []\n\n // Handle attemptCompletion specially\n const attemptCompletionTool = pendingToolCalls.find(\n (tc) => tc.skillName === \"@perstack/base\" && tc.toolName === \"attemptCompletion\",\n )\n if (attemptCompletionTool) {\n const toolResult = await toolExecutorFactory.execute(\n attemptCompletionTool,\n \"mcp\",\n skillManagers,\n )\n if (hasRemainingTodos(toolResult)) {\n return resolveToolResults(setting, checkpoint, { toolResults: [toolResult] })\n }\n return attemptCompletion(setting, checkpoint, { toolResult })\n }\n\n // Classify tool calls by type\n const classified = await classifyToolCalls(pendingToolCalls, skillManagers)\n\n // Execute MCP tools\n if (classified.mcp.length > 0) {\n const mcpResults = await Promise.all(\n classified.mcp.map((c) => toolExecutorFactory.execute(c.toolCall, \"mcp\", skillManagers)),\n )\n toolResults.push(...mcpResults)\n }\n\n // Handle delegate tools\n if (classified.delegate.length > 0) {\n const delegateToolCalls = classified.delegate.map((c) => c.toolCall)\n const interactiveToolCalls = classified.interactive.map((c) => c.toolCall)\n step.partialToolResults = toolResults\n step.pendingToolCalls = [...delegateToolCalls, ...interactiveToolCalls]\n return callDelegate(setting, checkpoint, {\n newMessage: checkpoint.messages[checkpoint.messages.length - 1] as never,\n toolCalls: delegateToolCalls,\n usage: step.usage,\n })\n }\n\n // Handle interactive tools\n if (classified.interactive.length > 0) {\n const interactiveToolCall = classified.interactive[0]?.toolCall\n if (!interactiveToolCall) {\n throw new Error(\"No interactive tool call found\")\n }\n const interactiveToolCalls = classified.interactive.map((c) => c.toolCall)\n step.partialToolResults = toolResults\n step.pendingToolCalls = interactiveToolCalls\n return callInteractiveTool(setting, checkpoint, {\n newMessage: checkpoint.messages[checkpoint.messages.length - 1] as never,\n toolCall: interactiveToolCall,\n usage: step.usage,\n })\n }\n\n return resolveToolResults(setting, checkpoint, { toolResults })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport { continueToNextStep, type RunEvent, stopRunByExceededMaxSteps } from \"@perstack/core\"\nimport type { RunSnapshot } from \"../machine.js\"\n\nexport async function finishingStepLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (setting.maxSteps !== undefined && checkpoint.stepNumber >= setting.maxSteps) {\n return stopRunByExceededMaxSteps(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByExceededMaxSteps\",\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n })\n }\n return continueToNextStep(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n nextCheckpoint: {\n ...checkpoint,\n id: createId(),\n stepNumber: checkpoint.stepNumber + 1,\n },\n })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type {\n ExpertMessage,\n FileBinaryPart,\n FileInlinePart,\n FileUrlPart,\n ImageBinaryPart,\n ImageInlinePart,\n ImageUrlPart,\n InstructionMessage,\n Message,\n TextPart,\n ToolCallPart,\n ToolMessage,\n ToolResultPart,\n UserMessage,\n} from \"@perstack/core\"\nimport type {\n AssistantModelMessage,\n FilePart as FileModelPart,\n ImagePart as ImageModelPart,\n ModelMessage,\n SystemModelMessage,\n TextPart as TextModelPart,\n ToolCallPart as ToolCallModelPart,\n ToolModelMessage,\n ToolResultPart as ToolResultModelPart,\n UserModelMessage,\n} from \"ai\"\nimport { dedent } from \"ts-dedent\"\n\nexport function createUserMessage(\n contents: Array<\n | Omit<TextPart, \"id\">\n | Omit<ImageUrlPart, \"id\">\n | Omit<ImageInlinePart, \"id\">\n | Omit<ImageBinaryPart, \"id\">\n | Omit<FileUrlPart, \"id\">\n | Omit<FileInlinePart, \"id\">\n | Omit<FileBinaryPart, \"id\">\n >,\n): UserMessage {\n return {\n type: \"userMessage\",\n contents: contents.map((part) => ({\n ...part,\n id: createId(),\n })),\n id: createId(),\n }\n}\n\nexport function createExpertMessage(\n contents: Array<Omit<TextPart, \"id\"> | Omit<ToolCallPart, \"id\">>,\n): ExpertMessage {\n return {\n type: \"expertMessage\",\n contents: contents.map((part) => ({\n ...part,\n id: createId(),\n })),\n id: createId(),\n }\n}\n\nexport function createToolMessage(\n contents: Array<\n Omit<ToolResultPart, \"id\" | \"contents\"> & {\n contents: Array<\n Omit<TextPart, \"id\"> | Omit<ImageInlinePart, \"id\"> | Omit<FileInlinePart, \"id\">\n >\n }\n >,\n): ToolMessage {\n return {\n type: \"toolMessage\",\n contents: contents.map((part) => ({\n ...part,\n contents: part.contents.map((part) => ({\n ...part,\n id: createId(),\n })),\n id: createId(),\n })),\n id: createId(),\n }\n}\n\nexport function messageToCoreMessage(message: Message): ModelMessage {\n switch (message.type) {\n case \"instructionMessage\":\n return {\n role: \"system\",\n content: instructionContentsToCoreContent(message.contents),\n providerOptions: message.cache\n ? {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n }\n : undefined,\n }\n case \"userMessage\":\n return {\n role: \"user\",\n content: userContentsToCoreContent(message.contents),\n providerOptions: message.cache\n ? {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n }\n : undefined,\n }\n case \"expertMessage\":\n return {\n role: \"assistant\",\n content: expertContentsToCoreContent(message.contents),\n providerOptions: message.cache\n ? {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n }\n : undefined,\n }\n case \"toolMessage\":\n return {\n role: \"tool\",\n content: toolContentsToCoreContent(message.contents),\n providerOptions: message.cache\n ? {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n }\n : undefined,\n }\n }\n}\nfunction instructionContentsToCoreContent(\n contents: InstructionMessage[\"contents\"],\n): SystemModelMessage[\"content\"] {\n return contents.reduce((acc, part) => {\n return dedent`\n ${acc}\n ${part.text}\n `.trim()\n }, \"\" as string)\n}\nfunction userContentsToCoreContent(contents: UserMessage[\"contents\"]): UserModelMessage[\"content\"] {\n return contents.map((part) => {\n switch (part.type) {\n case \"textPart\":\n return textPartToCoreTextPart(part)\n case \"imageUrlPart\":\n return imageUrlPartToCoreImagePart(part)\n case \"imageInlinePart\":\n return imageInlinePartToCoreImagePart(part)\n case \"imageBinaryPart\":\n return imageBinaryPartToCoreImagePart(part)\n case \"fileUrlPart\":\n return fileUrlPartToCoreFilePart(part)\n case \"fileInlinePart\":\n return fileInlinePartToCoreFilePart(part)\n case \"fileBinaryPart\":\n return fileBinaryPartToCoreFilePart(part)\n default:\n throw new Error(`Unknown user content type: ${(part as { type: string }).type}`)\n }\n })\n}\nfunction expertContentsToCoreContent(\n contents: ExpertMessage[\"contents\"],\n): AssistantModelMessage[\"content\"] {\n return contents.map((part) => {\n switch (part.type) {\n case \"textPart\":\n return textPartToCoreTextPart(part)\n case \"toolCallPart\":\n return toolCallPartToCoreToolCallPart(part)\n default:\n throw new Error(`Unknown expert content type: ${(part as { type: string }).type}`)\n }\n })\n}\nfunction toolContentsToCoreContent(contents: ToolMessage[\"contents\"]): ToolModelMessage[\"content\"] {\n return contents.map((part) => {\n switch (part.type) {\n case \"toolResultPart\":\n return toolResultPartToCoreToolResultPart(part)\n default:\n throw new Error(`Unknown tool content type: ${(part as { type: string }).type}`)\n }\n })\n}\nfunction textPartToCoreTextPart(part: TextPart): TextModelPart {\n return {\n type: \"text\",\n text: part.text,\n }\n}\nfunction imageUrlPartToCoreImagePart(part: ImageUrlPart): ImageModelPart {\n return {\n type: \"image\",\n image: part.url,\n mediaType: part.mimeType,\n }\n}\nfunction imageInlinePartToCoreImagePart(part: ImageInlinePart): ImageModelPart {\n return {\n type: \"image\",\n image: part.encodedData,\n mediaType: part.mimeType,\n }\n}\nfunction imageBinaryPartToCoreImagePart(part: ImageBinaryPart): ImageModelPart {\n return {\n type: \"image\",\n image: part.data,\n mediaType: part.mimeType,\n }\n}\nfunction fileUrlPartToCoreFilePart(part: FileUrlPart): FileModelPart {\n return {\n type: \"file\",\n data: part.url,\n mediaType: part.mimeType,\n }\n}\nfunction fileInlinePartToCoreFilePart(part: FileInlinePart): FileModelPart {\n return {\n type: \"file\",\n data: part.encodedData,\n mediaType: part.mimeType,\n }\n}\nfunction fileBinaryPartToCoreFilePart(part: FileBinaryPart): FileModelPart {\n return {\n type: \"file\",\n data: part.data,\n mediaType: part.mimeType,\n }\n}\nfunction toolCallPartToCoreToolCallPart(part: ToolCallPart): ToolCallModelPart {\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.args,\n }\n}\nfunction toolResultPartToCoreToolResultPart(part: ToolResultPart): ToolResultModelPart {\n const { contents } = part\n if (contents.length === 1 && contents[0].type === \"textPart\") {\n return {\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: { type: \"text\" as const, value: contents[0].text },\n }\n }\n const contentValue = contents.map((content) => {\n if (content.type === \"textPart\") {\n return { type: \"text\" as const, text: content.text }\n }\n return { type: \"media\" as const, data: content.encodedData, mediaType: content.mimeType }\n })\n return {\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: { type: \"content\" as const, value: contentValue },\n }\n}\n","import { completeRun, type RunEvent, retry } from \"@perstack/core\"\nimport { type GenerateTextResult, generateText, type ToolSet } from \"ai\"\nimport { calculateContextWindowUsage, getModel } from \"../../helpers/model.js\"\nimport { createEmptyUsage, sumUsage, usageFromGenerateTextResult } from \"../../helpers/usage.js\"\nimport {\n createExpertMessage,\n createToolMessage,\n createUserMessage,\n messageToCoreMessage,\n} from \"../../messages/message.js\"\nimport type { RunSnapshot } from \"../machine.js\"\n\nexport async function generatingRunResultLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.toolCalls || !step.toolResults || step.toolResults.length === 0) {\n throw new Error(\"No tool calls or tool results found\")\n }\n const toolResultParts = step.toolResults.map((toolResult) => {\n const toolCall = step.toolCalls?.find((tc) => tc.id === toolResult.id)\n return {\n type: \"toolResultPart\" as const,\n toolCallId: toolResult.id,\n toolName: toolCall?.toolName ?? toolResult.toolName,\n contents: toolResult.result.filter(\n (part) =>\n part.type === \"textPart\" ||\n part.type === \"imageInlinePart\" ||\n part.type === \"fileInlinePart\",\n ),\n }\n })\n const toolMessage = createToolMessage(toolResultParts)\n const model = getModel(setting.model, setting.providerConfig, { proxyUrl: setting.proxyUrl })\n const { messages } = checkpoint\n let generationResult: GenerateTextResult<ToolSet, never>\n try {\n generationResult = await generateText({\n model,\n messages: [...messages, toolMessage].map(messageToCoreMessage),\n temperature: setting.temperature,\n maxRetries: setting.maxRetries,\n abortSignal: AbortSignal.timeout(setting.timeout),\n })\n } catch (error) {\n if (error instanceof Error) {\n const reason = JSON.stringify({ error: error.name, message: error.message })\n return retry(setting, checkpoint, {\n reason,\n newMessages: [toolMessage, createUserMessage([{ type: \"textPart\", text: reason }])],\n usage: createEmptyUsage(),\n })\n }\n throw error\n }\n const usage = usageFromGenerateTextResult(generationResult)\n const { text } = generationResult\n const newMessages = [toolMessage, createExpertMessage(text ? [{ type: \"textPart\", text }] : [])]\n return completeRun(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n messages: [...messages, ...newMessages],\n usage: sumUsage(checkpoint.usage, usage),\n contextWindowUsage: checkpoint.contextWindow\n ? calculateContextWindowUsage(usage, checkpoint.contextWindow)\n : undefined,\n status: \"completed\",\n },\n step: {\n ...step,\n newMessages: [...step.newMessages, ...newMessages],\n finishedAt: Date.now(),\n usage: sumUsage(step.usage, usage),\n },\n text,\n usage,\n })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport {\n callTools,\n type RunEvent,\n retry,\n type TextPart,\n type ToolCall,\n type ToolCallPart,\n} from \"@perstack/core\"\nimport { type GenerateTextResult, generateText, type ToolSet } from \"ai\"\nimport { getModel } from \"../../helpers/model.js\"\nimport { createEmptyUsage, usageFromGenerateTextResult } from \"../../helpers/usage.js\"\nimport {\n createExpertMessage,\n createToolMessage,\n createUserMessage,\n messageToCoreMessage,\n} from \"../../messages/message.js\"\nimport type { BaseSkillManager } from \"../../skill-manager/index.js\"\nimport { getSkillManagerByToolName, getToolSet } from \"../../skill-manager/index.js\"\nimport type { RunSnapshot } from \"../machine.js\"\n\ntype ClassifiedToolCall = {\n toolCallId: string\n toolName: string\n input: Record<string, unknown>\n skillManager: BaseSkillManager\n}\n\nasync function classifyToolCalls(\n toolCalls: Array<{ toolCallId: string; toolName: string; input: unknown }>,\n skillManagers: Record<string, BaseSkillManager>,\n): Promise<ClassifiedToolCall[]> {\n return Promise.all(\n toolCalls.map(async (tc) => {\n const skillManager = await getSkillManagerByToolName(skillManagers, tc.toolName)\n return {\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n input: tc.input as Record<string, unknown>,\n skillManager,\n }\n }),\n )\n}\n\nfunction sortToolCallsByPriority(toolCalls: ClassifiedToolCall[]): ClassifiedToolCall[] {\n const priority = { mcp: 0, delegate: 1, interactive: 2 }\n return [...toolCalls].sort(\n (a, b) => (priority[a.skillManager.type] ?? 99) - (priority[b.skillManager.type] ?? 99),\n )\n}\n\nfunction buildToolCallParts(toolCalls: ClassifiedToolCall[]): Array<Omit<ToolCallPart, \"id\">> {\n return toolCalls.map((tc) => ({\n type: \"toolCallPart\" as const,\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n args: tc.input,\n }))\n}\n\nfunction buildToolCalls(toolCalls: ClassifiedToolCall[]): ToolCall[] {\n return toolCalls.map((tc) => ({\n id: tc.toolCallId,\n skillName: tc.skillManager.name,\n toolName: tc.toolName,\n args: tc.input,\n }))\n}\n\nexport async function generatingToolCallLogic({\n setting,\n checkpoint,\n skillManagers,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n const { messages } = checkpoint\n const model = getModel(setting.model, setting.providerConfig, { proxyUrl: setting.proxyUrl })\n let result: GenerateTextResult<ToolSet, never>\n try {\n result = await generateText({\n model,\n messages: messages.map(messageToCoreMessage),\n temperature: setting.temperature,\n maxRetries: setting.maxRetries,\n tools: await getToolSet(skillManagers),\n toolChoice: \"required\",\n abortSignal: AbortSignal.timeout(setting.timeout),\n })\n } catch (error) {\n if (error instanceof Error) {\n const reason = JSON.stringify({ error: error.name, message: error.message })\n return retry(setting, checkpoint, {\n reason,\n newMessages: [createUserMessage([{ type: \"textPart\", text: reason }])],\n usage: createEmptyUsage(),\n })\n }\n throw error\n }\n const usage = usageFromGenerateTextResult(result)\n const { text, toolCalls, finishReason } = result\n if (toolCalls.length === 0) {\n const reason = JSON.stringify({\n error: \"Error: No tool call generated\",\n message: \"You must generate a tool call. Try again.\",\n })\n return retry(setting, checkpoint, {\n reason,\n newMessages: [createUserMessage([{ type: \"textPart\", text: reason }])],\n usage,\n })\n }\n const classified = await classifyToolCalls(toolCalls, skillManagers)\n const sorted = sortToolCallsByPriority(classified)\n if (finishReason === \"tool-calls\" || finishReason === \"stop\") {\n const toolCallParts = buildToolCallParts(sorted)\n const contents: Array<Omit<TextPart, \"id\"> | Omit<ToolCallPart, \"id\">> = [...toolCallParts]\n if (text) {\n contents.push({ type: \"textPart\", text })\n }\n const allToolCalls = buildToolCalls(sorted)\n return callTools(setting, checkpoint, {\n newMessage: createExpertMessage(contents),\n toolCalls: allToolCalls,\n usage,\n })\n }\n if (finishReason === \"length\") {\n const firstToolCall = sorted[0]\n if (!firstToolCall) {\n throw new Error(\"No tool call found\")\n }\n const reason = JSON.stringify({\n error: \"Error: Tool call generation failed\",\n message: \"Generation length exceeded. Try again.\",\n })\n return retry(setting, checkpoint, {\n reason,\n newMessages: [\n createExpertMessage([\n {\n type: \"toolCallPart\",\n toolCallId: firstToolCall.toolCallId,\n toolName: firstToolCall.toolName,\n args: firstToolCall.input,\n },\n ]),\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: firstToolCall.toolCallId,\n toolName: firstToolCall.toolName,\n contents: [{ type: \"textPart\", text: reason }],\n },\n ]),\n ],\n toolCalls: [\n {\n id: firstToolCall.toolCallId,\n skillName: firstToolCall.skillManager.name,\n toolName: firstToolCall.toolName,\n args: firstToolCall.input,\n },\n ],\n toolResults: [\n {\n id: firstToolCall.toolCallId,\n skillName: firstToolCall.skillManager.name,\n toolName: firstToolCall.toolName,\n result: [{ type: \"textPart\", id: createId(), text: reason }],\n },\n ],\n usage,\n })\n }\n throw new Error(`Unexpected finish reason: ${finishReason}`)\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type { Expert, InstructionMessage } from \"@perstack/core\"\nimport { dedent } from \"ts-dedent\"\n\nfunction getMetaInstruction(startedAt: number): string {\n return dedent`\n IMPORTANT:\n Based on the user's initial message, you must determine what needs to be done.\n You must iterate through hypothesis and verification to fulfill the task.\n YOU MUST CONTINUE TO CALL TOOLS UNTIL THE TASK IS COMPLETE.\n If you do not call tools, the task will be considered complete, and the agent loop will end.\n\n You operate in an agent loop, iteratively completing tasks through these steps:\n 1. Analyze Events: Understand user needs and current state through the event stream, focusing on the latest user messages and execution results\n 2. Select Tools: Choose the next tool call based on current state, task planning, relevant knowledge, and available data APIs\n 3. Wait for Execution: The selected tool action will be executed by the sandbox environment with new observations added to the event stream\n 4. Iterate: Choose only one tool call per iteration, patiently repeat the above steps until task completion\n 5. Notify Task Completion: Call the attemptCompletion tool to inform the user when the task is complete\n 6. Generate Final Results: Produce a final result that clearly describes each task you performed, step by step\n\n Conditions for ending the agent loop:\n If any of the following apply, **immediately call the attemptCompletion tool**.\n When the agent loop must end, calling any tool other than attemptCompletion is highly dangerous.\n Under all circumstances, strictly follow this rule.\n - When the task is complete\n - When the user's request is outside your expertise\n - When the user's request is unintelligible\n\n Rules for requests outside your area of expertise:\n - Tell your area of expertise to the user in final results\n\n Environment information:\n - Current time is ${new Date(startedAt).toISOString()}\n - Current working directory is ${process.cwd()}\n `\n}\n\nexport function createInstructionMessage(\n expert: Expert,\n experts: Record<string, Expert>,\n startedAt: number,\n): InstructionMessage {\n const instruction = dedent`\n You are Perstack, an AI expert that tackles tasks requested by users by utilizing all available tools.\n\n (The following information describes your nature and role as an AI, the mechanisms of the AI system, and other meta-cognitive aspects.)\n\n ${getMetaInstruction(startedAt)}\n\n ---\n (The following describes the objective, steps, rules, etc. regarding your expert task.)\n\n ${expert.instruction}\n\n ---\n (The following is an overview of each skill and the rules for calling tools.)\n\n ${getSkillRules(expert)}\n\n ---\n (The following is an overview of each delegate expert and the rules for calling tools.)\n\n You can delegate tasks to the following experts by calling delegate expert name as a tool:\n\n ${getDelegateRules(expert, experts)}\n `\n return {\n type: \"instructionMessage\",\n contents: [\n {\n id: createId(),\n type: \"textPart\",\n text: instruction,\n },\n ],\n id: createId(),\n cache: true,\n }\n}\n\nfunction getSkillRules(expert: Expert): string {\n return Object.values(expert.skills).reduce((acc, skill) => {\n if (!skill.rule) {\n return acc\n }\n return dedent`\n ${acc}\n\n \"${skill.name}\" skill rules:\n ${skill.rule}\n `.trim()\n }, \"\" as string)\n}\n\nfunction getDelegateRules(expert: Expert, experts: Record<string, Expert>): string {\n return expert.delegates.reduce((acc, delegateExpertName) => {\n const delegate = experts[delegateExpertName]\n if (!delegate) {\n return acc\n }\n return dedent`\n ${acc}\n\n About \"${delegate.name}\":\n ${delegate.description}\n `.trim()\n }, \"\" as string)\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport { type RunEvent, startRun, type ToolResult } from \"@perstack/core\"\nimport { createInstructionMessage } from \"../../messages/instruction-message.js\"\nimport { createUserMessage } from \"../../messages/message.js\"\nimport type { RunSnapshot } from \"../machine.js\"\n\nexport async function initLogic({\n setting,\n checkpoint,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n const { expertKey, experts } = setting\n const expert = experts[expertKey]\n switch (checkpoint.status) {\n case \"init\": {\n if (!setting.input.text) {\n throw new Error(\"Input message is undefined\")\n }\n return startRun(setting, checkpoint, {\n initialCheckpoint: checkpoint,\n inputMessages: [\n createInstructionMessage(expert, experts, setting.startedAt),\n createUserMessage([{ type: \"textPart\", text: setting.input.text }]),\n ],\n })\n }\n case \"stoppedByDelegate\":\n case \"stoppedByInteractiveTool\": {\n if (!setting.input.interactiveToolCallResult) {\n throw new Error(\"Interactive tool call result is undefined\")\n }\n const { toolCallId, toolName, skillName, text } = setting.input.interactiveToolCallResult\n const pendingToolCalls = checkpoint.pendingToolCalls ?? []\n const newToolResult: ToolResult = {\n id: toolCallId,\n skillName,\n toolName,\n result: [{ type: \"textPart\", id: createId(), text }],\n }\n const updatedPartialResults = [...(checkpoint.partialToolResults ?? []), newToolResult]\n const updatedPendingToolCalls = pendingToolCalls.filter((tc) => tc.id !== toolCallId)\n const updatedCheckpoint = {\n ...checkpoint,\n partialToolResults: updatedPartialResults,\n pendingToolCalls: updatedPendingToolCalls.length > 0 ? updatedPendingToolCalls : undefined,\n }\n return startRun(setting, updatedCheckpoint, {\n initialCheckpoint: updatedCheckpoint,\n inputMessages: [],\n })\n }\n default:\n if (!setting.input.text) {\n throw new Error(\"Input message is undefined\")\n }\n return startRun(setting, checkpoint, {\n initialCheckpoint: checkpoint,\n inputMessages: [createUserMessage([{ type: \"textPart\", text: setting.input.text }])],\n })\n }\n}\n","import { finishAllToolCalls, type RunEvent, resumeToolCalls, startGeneration } from \"@perstack/core\"\nimport { createToolMessage } from \"../../messages/message.js\"\nimport type { RunSnapshot } from \"../machine.js\"\n\nexport async function preparingForStepLogic({\n setting,\n checkpoint,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (checkpoint.pendingToolCalls && checkpoint.pendingToolCalls.length > 0) {\n return resumeToolCalls(setting, checkpoint, {\n pendingToolCalls: checkpoint.pendingToolCalls,\n partialToolResults: checkpoint.partialToolResults ?? [],\n })\n }\n if (checkpoint.partialToolResults && checkpoint.partialToolResults.length > 0) {\n const toolResultParts = checkpoint.partialToolResults.map((tr) => ({\n type: \"toolResultPart\" as const,\n toolCallId: tr.id,\n toolName: tr.toolName,\n contents: tr.result.filter(\n (part) =>\n part.type === \"textPart\" ||\n part.type === \"imageInlinePart\" ||\n part.type === \"fileInlinePart\",\n ),\n }))\n return finishAllToolCalls(setting, checkpoint, {\n newMessages: [createToolMessage(toolResultParts)],\n })\n }\n return startGeneration(setting, checkpoint, {\n messages: checkpoint.messages,\n })\n}\n","import { finishToolCall, type RunEvent } from \"@perstack/core\"\nimport { createToolMessage } from \"../../messages/message.js\"\nimport type { RunSnapshot } from \"../machine.js\"\n\nexport async function resolvingToolResultLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.toolCalls || !step.toolResults || step.toolResults.length === 0) {\n throw new Error(\"No tool calls or tool results found\")\n }\n const toolResultParts = step.toolResults.map((toolResult) => {\n const toolCall = step.toolCalls?.find((tc) => tc.id === toolResult.id)\n return {\n type: \"toolResultPart\" as const,\n toolCallId: toolResult.id,\n toolName: toolCall?.toolName ?? toolResult.toolName,\n contents: toolResult.result.filter(\n (part) =>\n part.type === \"textPart\" ||\n part.type === \"imageInlinePart\" ||\n part.type === \"fileInlinePart\",\n ),\n }\n })\n return finishToolCall(setting, checkpoint, {\n newMessages: [createToolMessage(toolResultParts)],\n })\n}\n","import type { RunEvent } from \"@perstack/core\"\nimport type { RunSnapshot } from \"../machine.js\"\nimport { resolvingToolResultLogic } from \"./resolving-tool-result.js\"\n\nexport async function resolvingThoughtLogic(context: RunSnapshot[\"context\"]): Promise<RunEvent> {\n return resolvingToolResultLogic(context)\n}\n","import type { Checkpoint, RunEvent, RunSetting, Step } from \"@perstack/core\"\nimport { type ActorRefFrom, assign, type SnapshotFrom, setup } from \"xstate\"\nimport { calculateContextWindowUsage } from \"../helpers/model.js\"\nimport { createEmptyUsage, sumUsage } from \"../helpers/usage.js\"\nimport type { BaseSkillManager } from \"../skill-manager/index.js\"\nimport { callingDelegateLogic } from \"./states/calling-delegate.js\"\nimport { callingInteractiveToolLogic } from \"./states/calling-interactive-tool.js\"\nimport { callingToolLogic } from \"./states/calling-tool.js\"\nimport { finishingStepLogic } from \"./states/finishing-step.js\"\nimport { generatingRunResultLogic } from \"./states/generating-run-result.js\"\nimport { generatingToolCallLogic } from \"./states/generating-tool-call.js\"\nimport { initLogic } from \"./states/init.js\"\nimport { preparingForStepLogic } from \"./states/preparing-for-step.js\"\nimport { resolvingThoughtLogic } from \"./states/resolving-thought.js\"\nimport { resolvingToolResultLogic } from \"./states/resolving-tool-result.js\"\n\nexport const runtimeStateMachine = setup({\n types: {\n input: {} as {\n setting: RunSetting\n initialCheckpoint: Checkpoint\n eventListener: (event: RunEvent) => Promise<void>\n skillManagers: Record<string, BaseSkillManager>\n },\n context: {} as {\n setting: RunSetting\n step: Step\n checkpoint: Checkpoint\n eventListener: (event: RunEvent) => Promise<void>\n skillManagers: Record<string, BaseSkillManager>\n },\n events: {} as RunEvent,\n },\n}).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QCUCuA7AdASXQSwBcBiWAgQwCcC10BtABgF1FQAHAe1kL3fRZAAeiAKz0AzJgDsAJgAsksZNlixs+gDZZAGhABPRIszCAjGIAcY4crPHhJyQF8HOmpgAKFMK0p50UAGLsFADKBF4k5FQA4mDoYBRkBDx0TPwcXEm8-EIIZmaymPRK8saSopL00tI6+gjq9JjSltLG9HnqZkqdTi4YmDFxCUl+ACrs7AA2AMJkExNEngQUugzMSCDp3FnrOcam0pgAnHbS9GeSZsIq6jWIh2KHUsYd9MbSwl2S6j0grgPxiV8UDGkxmcyIAGNZhMQRNVmlOFs+DtEPt1Jg3odpGVbFcrLcENIzOjbGYipIZMpnmYfn9YgDhsDxtNoZDobgwgkIUkAG5gWHw9abTLI0C7ImSTDqYTY2S45TCCwE54HUr1WRXSqHcRVWl9f5DIGwsHzKFzAAiYAmYCgiTAgrYiJF2VRYnoj1ehwskkOZTEz2EBMMJnMFnezxUF2+zl+fRNRuZCzgkz5sOQcFQEwIDo2TuSLoQpWJUvowl9Flk0sqBLlZik2Mkpjyan90d6WHjo0TnlgKf5AAt2KgoP3s6khXntmLUT6JL6PkoFJX1MZtHoRKIpdrK3sqorpG3Yx3oQnJknexM+W4IAAzfx4a054X5lGFn2PMTYlSyWQH32WAl1DKKV1Q6L1V1EWQ9WPOZT3mHs+2wABbMgYHvR9x0dDIX2nN8zEeOVjGORsmgsMQCTJYRMGJORwP9MwDxpGNXE7Jkz0SMIkNYAgpnYLjrRFJ9J1FQQZzJTBPxUfDDjlN1OgJIkSUVUtDlXCpsUPVx0wvHk4O0zNiBvXw8FgftjWhITsKnUTCU-SU92JMlfSaGtjDrGQKSbfJxGeaDMG0lMjUHYdRyIIz8FM8y5kspECyabFGneRz3RkN011qOwGnUbcVzeJKDz8gLLyBa87wfMAwuMyLmRNGLnVfeL7KSl5nPI9c6mA9RQPwmwNVLQrk2KvxkNQsB0Iq8KTLMmqLMw3MrJEnJGsSxUWtSgkfSU-JDmIqNKj8g1AT8Gh9KzSE+NYASwBoOqcJs+K61sDo5SKBifwU4tSRUtTKi+KDmLjE9hvQTkyG5PBU0TUh2FYGgACFdA5AFwchyZbus3YyklYRst-DUlDEaU2tqFUMS+NyPmlPZDiAvzWMta1bTCCIYfh3QGZtO10cWmcLiOQnG3qHHiSDbGvM-Ex1EjYk-PvCL+yBUJwghXhhlQfl2AAOTAAQCCV1hubiqxjCMRUZXMGSvVUZV6A1LcuorDp8I0WWqoVvx9ZZ2GMARgBRAQITASBIAAWTIAR9dgQ2Gs0Ki8nyK4bCuDVRZNzRwxse4GK6pwY3QdgIDgfgaARBaCxUBosU0cw5TLUiCQAWlkR4nPdbVCeyld-vbHB8AIUvYtfRQ6yr6xa6xcwCTLaiadj1dKxk1phD8jwvB8PxAhCMJWAH+rcKAyuyVaa5Wi+KeW9njV59xpeDvpQ0u1BaFd7u3Y2keDpO7LW2FDLc+Z6AnsPEO4ZYAxghMOCL8MaojsJKYi8cHZ5C9EGNoRg1CdH3GcZeYD-KDV0o-CYp1+4TjLg1cQkp-SfjDE9Ew1R2o-hNnsUs1MfR-UuANHSQUhwjmIVhQeuFTg-ilF8GUblTgKDoRlBQhQJEaiJMnfCHDAp+FKuNKBPNCSlgaOIeQttWxS0DO1bKdY9HvH9D+FotMcFFXwVAEaaFyrqLirbBo1M7KvFUDJCiRJGgalUM3LEMk5R30GEdKAJ0MxZicWQlQEklAyillWVoZgUF1isG0MoDEsF0yBnYkGyNeQa0mNE3CtgiIYnEEBToFwvS+mVPkU20l8JWG1OIHJsE-AcyZmAEpNlbBqEwLo7yVRbY3HatPfCXUOgfCsGSTQmk+hyymorbevSloykeFYCkrxfqrmJiIaRRQ7JbP8Q8PyoQYasEgGsxA2JWiNB-jjdQTRqb1IkP6OwRF8KMSAbnBwQA */\n id: \"Run\",\n initial: \"Init\",\n context: ({ input }) => ({\n setting: input.setting,\n checkpoint: input.initialCheckpoint,\n step: {\n stepNumber: input.initialCheckpoint.stepNumber,\n inputMessages: [],\n newMessages: [],\n usage: createEmptyUsage(),\n startedAt: Date.now(),\n },\n eventListener: input.eventListener,\n skillManagers: input.skillManagers,\n }),\n states: {\n Init: {\n on: {\n startRun: {\n target: \"PreparingForStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n status: \"proceeding\",\n messages: [...context.checkpoint.messages, ...event.inputMessages],\n pendingToolCalls: event.initialCheckpoint.pendingToolCalls,\n partialToolResults: event.initialCheckpoint.partialToolResults,\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n inputMessages: event.inputMessages,\n }) satisfies Step,\n }),\n },\n },\n },\n\n PreparingForStep: {\n on: {\n startGeneration: {\n target: \"GeneratingToolCall\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n stepNumber: context.checkpoint.stepNumber,\n inputMessages: context.step.inputMessages ?? [],\n newMessages: [],\n usage: createEmptyUsage(),\n startedAt: event.timestamp,\n }) satisfies Step,\n }),\n },\n resumeToolCalls: {\n target: \"CallingTool\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n stepNumber: context.checkpoint.stepNumber,\n inputMessages: context.step.inputMessages ?? [],\n newMessages: context.step.newMessages,\n toolCalls: context.step.toolCalls,\n toolResults: event.partialToolResults,\n pendingToolCalls: event.pendingToolCalls,\n usage: context.step.usage,\n startedAt: context.step.startedAt,\n }) satisfies Step,\n }),\n },\n finishAllToolCalls: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n pendingToolCalls: undefined,\n partialToolResults: undefined,\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [...context.step.newMessages, ...event.newMessages],\n toolResults: context.checkpoint.partialToolResults,\n pendingToolCalls: undefined,\n }) satisfies Step,\n }),\n },\n },\n },\n\n GeneratingToolCall: {\n on: {\n retry: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: event.newMessages,\n toolCalls: event.toolCalls,\n toolResults: event.toolResults,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n callTools: {\n target: \"CallingTool\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, event.newMessage],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n contextWindowUsage: context.checkpoint.contextWindow\n ? calculateContextWindowUsage(event.usage, context.checkpoint.contextWindow)\n : undefined,\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [event.newMessage],\n toolCalls: event.toolCalls,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n callInteractiveTool: {\n target: \"CallingInteractiveTool\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, event.newMessage],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n contextWindowUsage: context.checkpoint.contextWindow\n ? calculateContextWindowUsage(event.usage, context.checkpoint.contextWindow)\n : undefined,\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [event.newMessage],\n toolCalls: [event.toolCall],\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n callDelegate: {\n target: \"CallingDelegate\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, event.newMessage],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n contextWindowUsage: context.checkpoint.contextWindow\n ? calculateContextWindowUsage(event.usage, context.checkpoint.contextWindow)\n : undefined,\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [event.newMessage],\n toolCalls: event.toolCalls,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n },\n },\n\n CallingTool: {\n on: {\n resolveToolResults: {\n target: \"ResolvingToolResult\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResults: event.toolResults,\n pendingToolCalls: undefined,\n }) satisfies Step,\n }),\n },\n resolveThought: {\n target: \"ResolvingThought\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResults: [event.toolResult],\n }) satisfies Step,\n }),\n },\n attemptCompletion: {\n target: \"GeneratingRunResult\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResults: [event.toolResult],\n }) satisfies Step,\n }),\n },\n callDelegate: {\n target: \"CallingDelegate\",\n actions: assign({\n step: ({ context }) =>\n ({\n ...context.step,\n toolCalls: context.step.toolCalls,\n toolResults: context.step.toolResults,\n pendingToolCalls: context.step.pendingToolCalls,\n partialToolResults: context.step.partialToolResults,\n }) satisfies Step,\n }),\n },\n callInteractiveTool: {\n target: \"CallingInteractiveTool\",\n actions: assign({\n step: ({ context }) =>\n ({\n ...context.step,\n toolCalls: context.step.toolCalls,\n toolResults: context.step.toolResults,\n pendingToolCalls: context.step.pendingToolCalls,\n partialToolResults: context.step.partialToolResults,\n }) satisfies Step,\n }),\n },\n },\n },\n\n ResolvingToolResult: {\n on: {\n finishToolCall: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [...context.step.newMessages, ...event.newMessages],\n }) satisfies Step,\n }),\n },\n },\n },\n\n ResolvingThought: {\n on: {\n finishToolCall: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [...context.step.newMessages, ...event.newMessages],\n }) satisfies Step,\n }),\n },\n },\n },\n\n GeneratingRunResult: {\n on: {\n retry: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: event.newMessages,\n toolCalls: event.toolCalls,\n toolResults: event.toolResults,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n completeRun: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n },\n },\n\n CallingInteractiveTool: {\n on: {\n stopRunByInteractiveTool: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n },\n },\n\n CallingDelegate: {\n on: {\n stopRunByDelegate: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n },\n },\n\n FinishingStep: {\n on: {\n continueToNextStep: {\n target: \"PreparingForStep\",\n actions: assign({\n checkpoint: ({ event }) => event.nextCheckpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n reenter: true,\n },\n stopRunByExceededMaxSteps: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n },\n },\n\n Stopped: {\n type: \"final\",\n },\n },\n})\n\nexport const StateMachineLogics: Record<\n Exclude<RunSnapshot[\"value\"], \"Stopped\">,\n (context: RunSnapshot[\"context\"]) => Promise<RunEvent>\n> = {\n Init: initLogic,\n PreparingForStep: preparingForStepLogic,\n GeneratingToolCall: generatingToolCallLogic,\n CallingTool: callingToolLogic,\n ResolvingToolResult: resolvingToolResultLogic,\n ResolvingThought: resolvingThoughtLogic,\n GeneratingRunResult: generatingRunResultLogic,\n CallingInteractiveTool: callingInteractiveToolLogic,\n CallingDelegate: callingDelegateLogic,\n FinishingStep: finishingStepLogic,\n}\n\nexport type RunActor = ActorRefFrom<typeof runtimeStateMachine>\nexport type RunSnapshot = SnapshotFrom<typeof runtimeStateMachine>\n","import { createActor } from \"xstate\"\nimport { type RunActor, runtimeStateMachine } from \"./machine.js\"\n\nexport type ActorInput = Parameters<typeof createActor<typeof runtimeStateMachine>>[1]\n\n/**\n * Factory interface for creating xstate actors.\n * Allows for dependency injection and easier testing.\n */\nexport interface ActorFactory {\n create(input: ActorInput): RunActor\n}\n\n/**\n * Default implementation of ActorFactory using xstate's createActor.\n */\nexport class DefaultActorFactory implements ActorFactory {\n create(input: ActorInput): RunActor {\n return createActor(runtimeStateMachine, input)\n }\n}\n\n/**\n * Default actor factory instance.\n */\nexport const defaultActorFactory = new DefaultActorFactory()\n","import type { Checkpoint, Expert, RunEvent, RunSetting, RuntimeEvent, Step } from \"@perstack/core\"\nimport type { RunEventEmitter } from \"../events/event-emitter.js\"\nimport { type BaseSkillManager, closeSkillManagers } from \"../skill-manager/index.js\"\nimport { type ActorFactory, defaultActorFactory } from \"./actor-factory.js\"\nimport { type RunActor, type RunSnapshot, StateMachineLogics } from \"./machine.js\"\n\nexport type StateMachineParams = {\n setting: RunSetting & { experts: Record<string, Expert> }\n initialCheckpoint: Checkpoint\n eventListener: (event: RunEvent | RuntimeEvent) => Promise<void>\n skillManagers: Record<string, BaseSkillManager>\n eventEmitter: RunEventEmitter\n storeCheckpoint: (checkpoint: Checkpoint) => Promise<void>\n shouldContinueRun?: (setting: RunSetting, checkpoint: Checkpoint, step: Step) => Promise<boolean>\n}\n\nexport type StateMachineLogicsType = typeof StateMachineLogics\n\nexport interface CoordinatorDependencies {\n actorFactory?: ActorFactory\n closeSkillManagers?: (managers: Record<string, BaseSkillManager>) => Promise<void>\n logics?: StateMachineLogicsType\n}\n\n/**\n * Coordinator class for managing the runtime state machine execution.\n * Provides dependency injection for improved testability.\n */\nexport class StateMachineCoordinator {\n private readonly actorFactory: ActorFactory\n private readonly closeManagers: (managers: Record<string, BaseSkillManager>) => Promise<void>\n private readonly logics: StateMachineLogicsType\n\n private actor: RunActor | null = null\n private resolvePromise: ((checkpoint: Checkpoint) => void) | null = null\n private rejectPromise: ((error: Error) => void) | null = null\n\n constructor(\n private readonly params: StateMachineParams,\n deps: CoordinatorDependencies = {},\n ) {\n this.actorFactory = deps.actorFactory ?? defaultActorFactory\n this.closeManagers = deps.closeSkillManagers ?? closeSkillManagers\n this.logics = deps.logics ?? StateMachineLogics\n }\n\n /**\n * Execute the state machine and return the final checkpoint.\n */\n async execute(): Promise<Checkpoint> {\n const { setting, initialCheckpoint, eventListener, skillManagers } = this.params\n\n this.actor = this.actorFactory.create({\n input: {\n setting,\n initialCheckpoint,\n eventListener,\n skillManagers,\n },\n })\n\n return new Promise<Checkpoint>((resolve, reject) => {\n this.resolvePromise = resolve\n this.rejectPromise = reject\n\n this.actor!.subscribe((runState) => {\n this.handleStateChange(runState).catch((error) => {\n this.handleError(error)\n })\n })\n\n this.actor!.start()\n })\n }\n\n /**\n * Handle state changes from the actor.\n * Exported for testing purposes.\n */\n async handleStateChange(runState: RunSnapshot): Promise<void> {\n if (runState.value === \"Stopped\") {\n await this.handleStoppedState(runState)\n } else {\n await this.handleActiveState(runState)\n }\n }\n\n /**\n * Handle the stopped state - cleanup and resolve.\n */\n private async handleStoppedState(runState: RunSnapshot): Promise<void> {\n const { checkpoint, skillManagers } = runState.context\n\n if (!checkpoint) {\n throw new Error(\"Checkpoint is undefined\")\n }\n\n await this.closeManagers(skillManagers)\n this.resolvePromise?.(checkpoint)\n }\n\n /**\n * Handle active states - execute logic, store checkpoint, emit events.\n */\n private async handleActiveState(runState: RunSnapshot): Promise<void> {\n const { eventEmitter, storeCheckpoint, shouldContinueRun } = this.params\n const stateValue = runState.value as Exclude<RunSnapshot[\"value\"], \"Stopped\">\n\n const event = await this.logics[stateValue](runState.context)\n\n if (\"checkpoint\" in event) {\n await storeCheckpoint(event.checkpoint)\n }\n\n await eventEmitter.emit(event)\n\n if (shouldContinueRun) {\n const shouldContinue = await shouldContinueRun(\n runState.context.setting,\n runState.context.checkpoint,\n runState.context.step,\n )\n\n if (!shouldContinue) {\n this.actor?.stop()\n await this.closeManagers(runState.context.skillManagers)\n this.resolvePromise?.(runState.context.checkpoint)\n return\n }\n }\n\n this.actor?.send(event)\n }\n\n /**\n * Handle errors - cleanup and reject.\n */\n private async handleError(error: unknown): Promise<void> {\n await this.closeManagers(this.params.skillManagers).catch(() => {})\n this.rejectPromise?.(error instanceof Error ? error : new Error(String(error)))\n }\n}\n","import type { Checkpoint, Expert, RunEvent, RunSetting, RuntimeEvent, Step } from \"@perstack/core\"\nimport type { RunEventEmitter } from \"../events/event-emitter.js\"\nimport type { BaseSkillManager } from \"../skill-manager/index.js\"\nimport { StateMachineCoordinator } from \"./coordinator.js\"\n\nexport type ExecuteStateMachineParams = {\n setting: RunSetting & { experts: Record<string, Expert> }\n initialCheckpoint: Checkpoint\n eventListener: (event: RunEvent | RuntimeEvent) => Promise<void>\n skillManagers: Record<string, BaseSkillManager>\n eventEmitter: RunEventEmitter\n storeCheckpoint: (checkpoint: Checkpoint) => Promise<void>\n shouldContinueRun?: (setting: RunSetting, checkpoint: Checkpoint, step: Step) => Promise<boolean>\n}\n\n/**\n * Execute the runtime state machine.\n * This is a convenience wrapper around StateMachineCoordinator.\n */\nexport async function executeStateMachine(params: ExecuteStateMachineParams): Promise<Checkpoint> {\n const coordinator = new StateMachineCoordinator(params)\n return coordinator.execute()\n}\n","import type { Checkpoint, Expert, RunSetting } from \"@perstack/core\"\nimport { createEmptyUsage } from \"./usage.js\"\n\nexport type CreateInitialCheckpointParams = {\n jobId: string\n runId: string\n expertKey: string\n expert: Pick<Expert, \"name\" | \"version\">\n contextWindow: number | undefined\n}\n\nexport function createInitialCheckpoint(\n checkpointId: string,\n params: CreateInitialCheckpointParams,\n): Checkpoint {\n return {\n id: checkpointId,\n jobId: params.jobId,\n runId: params.runId,\n expert: {\n key: params.expertKey,\n name: params.expert.name,\n version: params.expert.version,\n },\n stepNumber: 1,\n status: \"init\",\n messages: [],\n usage: createEmptyUsage(),\n contextWindow: params.contextWindow,\n contextWindowUsage: params.contextWindow ? 0.0 : undefined,\n }\n}\n\nexport function createNextStepCheckpoint(checkpointId: string, checkpoint: Checkpoint): Checkpoint {\n return {\n ...checkpoint,\n id: checkpointId,\n stepNumber: checkpoint.stepNumber + 1,\n }\n}\n\nexport type DelegationStateResult = {\n setting: RunSetting\n checkpoint: Checkpoint\n}\n\nexport function buildDelegationReturnState(\n currentSetting: RunSetting,\n resultCheckpoint: Checkpoint,\n parentCheckpoint: Checkpoint,\n): DelegationStateResult {\n const { messages, delegatedBy } = resultCheckpoint\n if (!delegatedBy) {\n throw new Error(\"delegatedBy is required for buildDelegationReturnState\")\n }\n const delegateResultMessage = messages[messages.length - 1]\n if (!delegateResultMessage || delegateResultMessage.type !== \"expertMessage\") {\n throw new Error(\"Delegation error: delegation result message is incorrect\")\n }\n const delegateText = delegateResultMessage.contents.find((content) => content.type === \"textPart\")\n if (!delegateText) {\n throw new Error(\"Delegation error: delegation result message does not contain a text\")\n }\n const { expert, toolCallId, toolName } = delegatedBy\n return {\n setting: {\n ...currentSetting,\n expertKey: expert.key,\n input: {\n interactiveToolCallResult: {\n toolCallId,\n toolName,\n skillName: `delegate/${resultCheckpoint.expert.key}`,\n text: delegateText.text,\n },\n },\n },\n checkpoint: {\n ...parentCheckpoint,\n stepNumber: resultCheckpoint.stepNumber,\n usage: resultCheckpoint.usage,\n pendingToolCalls: parentCheckpoint.pendingToolCalls,\n partialToolResults: parentCheckpoint.partialToolResults,\n },\n }\n}\n\nexport function buildDelegateToState(\n currentSetting: RunSetting,\n resultCheckpoint: Checkpoint,\n currentExpert: Pick<Expert, \"key\" | \"name\" | \"version\">,\n): DelegationStateResult {\n const { delegateTo } = resultCheckpoint\n if (!delegateTo || delegateTo.length === 0) {\n throw new Error(\"delegateTo is required for buildDelegateToState\")\n }\n const firstDelegation = delegateTo[0]\n const { expert, toolCallId, toolName, query } = firstDelegation\n return {\n setting: {\n ...currentSetting,\n expertKey: expert.key,\n input: {\n text: query,\n },\n },\n checkpoint: {\n ...resultCheckpoint,\n status: \"init\",\n messages: [],\n expert: {\n key: expert.key,\n name: expert.name,\n version: expert.version,\n },\n delegatedBy: {\n expert: {\n key: currentExpert.key,\n name: currentExpert.name,\n version: currentExpert.version,\n },\n toolCallId,\n toolName,\n checkpointId: resultCheckpoint.id,\n },\n usage: resultCheckpoint.usage,\n pendingToolCalls: undefined,\n partialToolResults: undefined,\n },\n }\n}\n","import { type ApiRegistryExpert, ApiV1Client } from \"@perstack/api-client/v1\"\nimport type { Expert, Skill } from \"@perstack/core\"\n\nexport async function resolveExpertToRun(\n expertKey: string,\n experts: Record<string, Expert>,\n clientOptions: {\n perstackApiBaseUrl: string\n perstackApiKey?: string\n },\n): Promise<Expert> {\n if (experts[expertKey]) {\n return experts[expertKey]\n }\n const client = new ApiV1Client({\n baseUrl: clientOptions.perstackApiBaseUrl,\n apiKey: clientOptions.perstackApiKey,\n })\n const { expert } = await client.registry.experts.get({ expertKey })\n return toRuntimeExpert(expert)\n}\n\nfunction toRuntimeExpert(expert: ApiRegistryExpert): Expert {\n const skills: Record<string, Skill> = Object.fromEntries(\n Object.entries(expert.skills).map(([name, skill]) => {\n switch (skill.type) {\n case \"mcpStdioSkill\":\n return [name, { ...skill, name }]\n case \"mcpSseSkill\":\n return [name, { ...skill, name }]\n case \"interactiveSkill\":\n return [name, { ...skill, name }]\n default: {\n throw new Error(`Unknown skill type: ${(skill as { type: string }).type}`)\n }\n }\n }),\n )\n return { ...expert, skills }\n}\n","import type { Expert, RunSetting } from \"@perstack/core\"\nimport { resolveExpertToRun as defaultResolveExpertToRun } from \"./resolve-expert.js\"\n\nexport type ResolveExpertToRunFn = (\n expertKey: string,\n experts: Record<string, Expert>,\n clientOptions: { perstackApiBaseUrl: string; perstackApiKey?: string },\n) => Promise<Expert>\n\nexport type SetupExpertsResult = {\n expertToRun: Expert\n experts: Record<string, Expert>\n}\n\nexport async function setupExperts(\n setting: RunSetting,\n resolveExpertToRun: ResolveExpertToRunFn = defaultResolveExpertToRun,\n): Promise<SetupExpertsResult> {\n const { expertKey } = setting\n const experts = { ...setting.experts }\n const clientOptions = {\n perstackApiBaseUrl: setting.perstackApiBaseUrl,\n perstackApiKey: setting.perstackApiKey,\n }\n const expertToRun = await resolveExpertToRun(expertKey, experts, clientOptions)\n experts[expertKey] = expertToRun\n for (const delegateName of expertToRun.delegates) {\n const delegate = await resolveExpertToRun(delegateName, experts, clientOptions)\n if (!delegate) {\n throw new Error(`Delegate ${delegateName} not found`)\n }\n experts[delegateName] = delegate\n }\n return { expertToRun, experts }\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type {\n Checkpoint,\n DelegationTarget,\n Expert,\n Message,\n RunEvent,\n RunParamsInput,\n RunSetting,\n RuntimeEvent,\n ToolCall,\n ToolResult,\n Usage,\n} from \"@perstack/core\"\n\n/** Reference to the parent Expert that delegated */\ntype DelegatedBy = NonNullable<Checkpoint[\"delegatedBy\"]>\n\nimport {\n buildDelegationReturnState,\n createEmptyUsage,\n type DelegationStateResult,\n sumUsage,\n} from \"../helpers/index.js\"\n\nexport type DelegationResult = {\n toolCallId: string\n toolName: string\n expertKey: string\n text: string\n stepNumber: number\n deltaUsage: Usage\n}\n\nexport type DelegationExecutionResult = {\n nextSetting: RunSetting\n nextCheckpoint: Checkpoint\n}\n\n/**\n * Run options that can be passed to child delegation runs.\n * Extends key callbacks from parent options to ensure checkpoint persistence\n * and event emission work correctly for delegated runs.\n */\nexport type DelegationRunOptions = {\n storeCheckpoint?: (checkpoint: Checkpoint) => Promise<void>\n retrieveCheckpoint?: (jobId: string, checkpointId: string) => Promise<Checkpoint>\n eventListener?: (event: RunEvent | RuntimeEvent) => void\n storeEvent?: (event: RunEvent) => Promise<void>\n returnOnDelegationComplete?: boolean\n}\n\n/**\n * Checkpoint context required for delegation.\n * Note: messages are included so the PARENT can resume its conversation\n * after parallel delegation completes. Child runs start with empty messages.\n */\nexport type DelegationContext = {\n /** Checkpoint ID for delegatedBy reference */\n id: string\n /** Current step number */\n stepNumber: number\n /** Context window size (optional, inherited from parent) */\n contextWindow?: number\n /** Current usage for aggregation */\n usage: Usage\n /** Pending tool calls to filter */\n pendingToolCalls?: ToolCall[]\n /** Partial tool results to append to */\n partialToolResults?: ToolResult[]\n /** Parent delegation reference (preserved for nested delegations) */\n delegatedBy?: DelegatedBy\n /** Parent's message history (restored when parent resumes after delegation) */\n messages: Message[]\n}\n\n/**\n * Strategy interface for handling delegations.\n * Implementations differ in how they execute delegations (single vs parallel).\n */\nexport interface DelegationStrategy {\n /**\n * Execute delegations and return the next setting/checkpoint for the run loop.\n * @param parentOptions - Options from the parent run to be inherited by child runs\n */\n execute(\n delegations: DelegationTarget[],\n setting: RunSetting,\n context: DelegationContext,\n parentExpert: Pick<Expert, \"key\" | \"name\" | \"version\">,\n runFn: (params: RunParamsInput, options?: DelegationRunOptions) => Promise<Checkpoint>,\n parentOptions?: DelegationRunOptions,\n ): Promise<DelegationExecutionResult>\n}\n\n/**\n * Strategy for single delegation - does not execute, just prepares next state.\n * The actual execution happens in the next iteration of the run loop.\n */\nexport class SingleDelegationStrategy implements DelegationStrategy {\n async execute(\n delegations: DelegationTarget[],\n setting: RunSetting,\n context: DelegationContext,\n parentExpert: Pick<Expert, \"key\" | \"name\" | \"version\">,\n _runFn: (params: RunParamsInput, options?: DelegationRunOptions) => Promise<Checkpoint>,\n _parentOptions?: DelegationRunOptions,\n ): Promise<DelegationExecutionResult> {\n if (delegations.length !== 1) {\n throw new Error(\"SingleDelegationStrategy requires exactly one delegation\")\n }\n\n // Use the delegation parameter directly, not checkpoint.delegateTo\n const delegation = delegations[0]\n const { expert, toolCallId, toolName, query } = delegation\n\n const nextSetting: RunSetting = {\n ...setting,\n expertKey: expert.key,\n input: { text: query },\n }\n\n const nextCheckpoint: Checkpoint = {\n id: context.id,\n jobId: setting.jobId,\n runId: setting.runId,\n status: \"init\",\n stepNumber: context.stepNumber,\n messages: [], // Child starts fresh\n expert: {\n key: expert.key,\n name: expert.name,\n version: expert.version,\n },\n delegatedBy: {\n expert: {\n key: parentExpert.key,\n name: parentExpert.name,\n version: parentExpert.version,\n },\n toolCallId,\n toolName,\n checkpointId: context.id,\n },\n usage: context.usage,\n contextWindow: context.contextWindow,\n pendingToolCalls: undefined,\n partialToolResults: undefined,\n }\n\n return { nextSetting, nextCheckpoint }\n }\n}\n\n/**\n * Strategy for parallel delegation - executes all delegations in parallel.\n */\nexport class ParallelDelegationStrategy implements DelegationStrategy {\n async execute(\n delegations: DelegationTarget[],\n setting: RunSetting,\n context: DelegationContext,\n parentExpert: Pick<Expert, \"key\" | \"name\" | \"version\">,\n runFn: (params: RunParamsInput, options?: DelegationRunOptions) => Promise<Checkpoint>,\n parentOptions?: DelegationRunOptions,\n ): Promise<DelegationExecutionResult> {\n if (delegations.length < 2) {\n throw new Error(\"ParallelDelegationStrategy requires at least two delegations\")\n }\n\n const [firstDelegation, ...remainingDelegations] = delegations\n if (!firstDelegation) {\n throw new Error(\"No delegations found\")\n }\n\n // Execute all delegations in parallel\n const allResults = await Promise.all(\n delegations.map((delegation) =>\n this.executeSingleDelegation(\n delegation,\n setting,\n context,\n parentExpert,\n runFn,\n parentOptions,\n ),\n ),\n )\n\n const [firstResult, ...restResults] = allResults\n if (!firstResult) {\n throw new Error(\"No delegation results\")\n }\n\n // Aggregate results\n const aggregatedUsage = allResults.reduce(\n (acc, result) => sumUsage(acc, result.deltaUsage),\n context.usage,\n )\n\n const maxStepNumber = Math.max(...allResults.map((r) => r.stepNumber))\n\n const restToolResults: ToolResult[] = restResults.map((result) => ({\n id: result.toolCallId,\n skillName: `delegate/${result.expertKey}`,\n toolName: result.toolName,\n result: [{ type: \"textPart\", id: createId(), text: result.text }],\n }))\n\n const processedToolCallIds = new Set(remainingDelegations.map((d) => d.toolCallId))\n const remainingPendingToolCalls = context.pendingToolCalls?.filter(\n (tc) => !processedToolCallIds.has(tc.id) && tc.id !== firstDelegation.toolCallId,\n )\n\n const nextSetting: RunSetting = {\n ...setting,\n expertKey: parentExpert.key,\n input: {\n interactiveToolCallResult: {\n toolCallId: firstResult.toolCallId,\n toolName: firstResult.toolName,\n skillName: `delegate/${firstResult.expertKey}`,\n text: firstResult.text,\n },\n },\n }\n\n // Build next checkpoint - restore parent's messages for continuation\n const nextCheckpoint: Checkpoint = {\n id: context.id,\n jobId: setting.jobId,\n runId: setting.runId,\n status: \"stoppedByDelegate\",\n stepNumber: maxStepNumber,\n messages: context.messages, // Restore parent's conversation history\n expert: {\n key: parentExpert.key,\n name: parentExpert.name,\n version: parentExpert.version,\n },\n usage: aggregatedUsage,\n contextWindow: context.contextWindow,\n delegatedBy: context.delegatedBy, // Preserve parent reference for nested delegations\n delegateTo: undefined,\n pendingToolCalls: remainingPendingToolCalls?.length ? remainingPendingToolCalls : undefined,\n partialToolResults: [...(context.partialToolResults ?? []), ...restToolResults],\n }\n\n return { nextSetting, nextCheckpoint }\n }\n\n private async executeSingleDelegation(\n delegation: DelegationTarget,\n parentSetting: RunSetting,\n parentContext: DelegationContext,\n parentExpert: Pick<Expert, \"key\" | \"name\" | \"version\">,\n runFn: (params: RunParamsInput, options?: DelegationRunOptions) => Promise<Checkpoint>,\n parentOptions?: DelegationRunOptions,\n ): Promise<DelegationResult> {\n const { expert, toolCallId, toolName, query } = delegation\n const delegateRunId = createId()\n\n const delegateSetting: RunSetting = {\n ...parentSetting,\n runId: delegateRunId,\n expertKey: expert.key,\n input: { text: query },\n }\n\n const delegateCheckpoint: Checkpoint = {\n id: createId(),\n jobId: parentSetting.jobId,\n runId: delegateRunId,\n status: \"init\",\n stepNumber: parentContext.stepNumber,\n messages: [], // Child starts fresh - no parent context inheritance\n expert: {\n key: expert.key,\n name: expert.name,\n version: expert.version,\n },\n delegatedBy: {\n expert: {\n key: parentExpert.key,\n name: parentExpert.name,\n version: parentExpert.version,\n },\n toolCallId,\n toolName,\n checkpointId: parentContext.id,\n },\n usage: createEmptyUsage(),\n contextWindow: parentContext.contextWindow,\n }\n\n // Merge parent options with returnOnDelegationComplete to ensure child runs\n // inherit callbacks for checkpoint persistence and event emission\n const resultCheckpoint = await runFn(\n { setting: delegateSetting, checkpoint: delegateCheckpoint },\n { ...parentOptions, returnOnDelegationComplete: true },\n )\n\n return this.extractDelegationResult(resultCheckpoint, toolCallId, toolName, expert.key)\n }\n\n private extractDelegationResult(\n checkpoint: Checkpoint,\n toolCallId: string,\n toolName: string,\n expertKey: string,\n ): DelegationResult {\n const lastMessage = checkpoint.messages[checkpoint.messages.length - 1]\n if (!lastMessage || lastMessage.type !== \"expertMessage\") {\n throw new Error(\"Delegation error: delegation result message is incorrect\")\n }\n\n const textPart = lastMessage.contents.find((c) => c.type === \"textPart\")\n if (!textPart || textPart.type !== \"textPart\") {\n throw new Error(\"Delegation error: delegation result message does not contain text\")\n }\n\n return {\n toolCallId,\n toolName,\n expertKey,\n text: textPart.text,\n stepNumber: checkpoint.stepNumber,\n deltaUsage: checkpoint.usage,\n }\n }\n}\n\n/**\n * Factory to select the appropriate delegation strategy.\n */\nexport function selectDelegationStrategy(delegationCount: number): DelegationStrategy {\n if (delegationCount === 1) {\n return new SingleDelegationStrategy()\n }\n return new ParallelDelegationStrategy()\n}\n\n/**\n * Helper to build state when returning from a completed delegation to parent.\n */\nexport function buildReturnFromDelegation(\n currentSetting: RunSetting,\n resultCheckpoint: Checkpoint,\n parentCheckpoint: Checkpoint,\n): DelegationStateResult {\n return buildDelegationReturnState(currentSetting, resultCheckpoint, parentCheckpoint)\n}\n\n/**\n * Extract DelegationContext from a Checkpoint.\n */\nexport function extractDelegationContext(checkpoint: Checkpoint): DelegationContext {\n return {\n id: checkpoint.id,\n stepNumber: checkpoint.stepNumber,\n contextWindow: checkpoint.contextWindow,\n usage: checkpoint.usage,\n pendingToolCalls: checkpoint.pendingToolCalls,\n partialToolResults: checkpoint.partialToolResults,\n delegatedBy: checkpoint.delegatedBy, // Preserve for nested delegations\n messages: checkpoint.messages, // Preserve for parent continuation after delegation\n }\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type { RunEvent } from \"@perstack/core\"\n\nexport class RunEventEmitter {\n private listeners: ((event: RunEvent) => Promise<void>)[] = []\n\n subscribe(listener: (event: RunEvent) => Promise<void>) {\n this.listeners.push(listener)\n }\n\n async emit(event: RunEvent) {\n const errors: Error[] = []\n for (const listener of this.listeners) {\n try {\n await listener({\n ...event,\n id: createId(),\n timestamp: Date.now(),\n })\n } catch (error) {\n errors.push(error instanceof Error ? error : new Error(String(error)))\n }\n }\n if (errors.length > 0) {\n throw new AggregateError(errors, \"One or more event listeners failed\")\n }\n }\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport {\n type Checkpoint,\n createRuntimeEvent,\n type Expert,\n type RunEvent,\n type RunSetting,\n type RuntimeEvent,\n type Step,\n} from \"@perstack/core\"\nimport pkg from \"../../package.json\" with { type: \"json\" }\nimport { RunEventEmitter } from \"../events/event-emitter.js\"\nimport {\n createInitialCheckpoint,\n createNextStepCheckpoint,\n getContextWindow,\n type ResolveExpertToRunFn,\n setupExperts,\n} from \"../helpers/index.js\"\nimport { getSkillManagers } from \"../skill-manager/index.js\"\nimport { executeStateMachine } from \"../state-machine/index.js\"\n\nexport type SingleRunExecutorOptions = {\n shouldContinueRun?: (setting: RunSetting, checkpoint: Checkpoint, step: Step) => Promise<boolean>\n storeCheckpoint?: (checkpoint: Checkpoint) => Promise<void>\n storeEvent?: (event: RunEvent) => Promise<void>\n eventListener?: (event: RunEvent | RuntimeEvent) => void\n resolveExpertToRun?: ResolveExpertToRunFn\n}\n\nexport type SingleRunResult = {\n checkpoint: Checkpoint\n expertToRun: Expert\n experts: Record<string, Expert>\n}\n\n/**\n * Executes a single run (state machine execution) without any loop or delegation handling.\n * This is the core orchestration unit that should NOT call run() recursively.\n *\n * Note: This executes a complete state machine run until it reaches a terminal state\n * (completed, stoppedByInteractiveTool, stoppedByDelegate, etc.), not just a single step.\n */\nexport class SingleRunExecutor {\n constructor(private options: SingleRunExecutorOptions = {}) {}\n\n async execute(setting: RunSetting, checkpoint?: Checkpoint): Promise<SingleRunResult> {\n const contextWindow = getContextWindow(setting.providerConfig.providerName, setting.model)\n const { expertToRun, experts } = await setupExperts(setting, this.options.resolveExpertToRun)\n\n this.emitInitEvent(setting, expertToRun, experts)\n\n const skillManagers = await getSkillManagers(\n expertToRun,\n experts,\n setting,\n this.options.eventListener,\n { isDelegatedRun: !!checkpoint?.delegatedBy },\n )\n\n const initialCheckpoint = checkpoint\n ? createNextStepCheckpoint(createId(), checkpoint)\n : createInitialCheckpoint(createId(), {\n jobId: setting.jobId,\n runId: setting.runId,\n expertKey: setting.expertKey,\n expert: expertToRun,\n contextWindow,\n })\n\n const eventEmitter = new RunEventEmitter()\n const eventListener = this.createEventListener()\n eventEmitter.subscribe(eventListener)\n\n const resultCheckpoint = await executeStateMachine({\n setting: { ...setting, experts },\n initialCheckpoint,\n eventListener,\n skillManagers,\n eventEmitter,\n storeCheckpoint: this.options.storeCheckpoint ?? (async () => {}),\n shouldContinueRun: this.options.shouldContinueRun,\n })\n\n return { checkpoint: resultCheckpoint, expertToRun, experts }\n }\n\n private createEventListener(): (event: RunEvent | RuntimeEvent) => Promise<void> {\n const userListener = this.options.eventListener\n const storeEvent = this.options.storeEvent\n return async (event: RunEvent | RuntimeEvent) => {\n // Store RunEvents (events with stepNumber) if storeEvent is provided\n if (\"stepNumber\" in event && storeEvent) {\n await storeEvent(event as RunEvent)\n }\n userListener?.(event)\n }\n }\n\n private emitInitEvent(\n setting: RunSetting,\n expertToRun: Expert,\n experts: Record<string, Expert>,\n ): void {\n if (!this.options.eventListener) return\n\n const initEvent = createRuntimeEvent(\"initializeRuntime\", setting.jobId, setting.runId, {\n runtimeVersion: pkg.version,\n runtime: \"local\",\n expertName: expertToRun.name,\n experts: Object.keys(experts),\n model: setting.model,\n temperature: setting.temperature,\n maxSteps: setting.maxSteps,\n maxRetries: setting.maxRetries,\n timeout: setting.timeout,\n query: setting.input.text,\n interactiveToolCall: setting.input.interactiveToolCallResult,\n })\n this.options.eventListener(initEvent)\n }\n}\n","import type {\n Checkpoint,\n Job,\n RunEvent,\n RunParamsInput,\n RunSetting,\n RuntimeEvent,\n Step,\n} from \"@perstack/core\"\nimport { runParamsSchema } from \"@perstack/core\"\nimport { createEmptyUsage, type ResolveExpertToRunFn } from \"./helpers/index.js\"\nimport {\n buildReturnFromDelegation,\n extractDelegationContext,\n SingleRunExecutor,\n selectDelegationStrategy,\n} from \"./orchestration/index.js\"\n\nexport type RunOptions = {\n shouldContinueRun?: (setting: RunSetting, checkpoint: Checkpoint, step: Step) => Promise<boolean>\n retrieveCheckpoint?: (jobId: string, checkpointId: string) => Promise<Checkpoint>\n storeCheckpoint?: (checkpoint: Checkpoint) => Promise<void>\n storeEvent?: (event: RunEvent) => Promise<void>\n storeJob?: (job: Job) => void\n retrieveJob?: (jobId: string) => Job | undefined\n createJob?: (jobId: string, expertKey: string, maxSteps?: number) => Job\n eventListener?: (event: RunEvent | RuntimeEvent) => void\n resolveExpertToRun?: ResolveExpertToRunFn\n returnOnDelegationComplete?: boolean\n}\n\nconst defaultCreateJob = (jobId: string, expertKey: string, maxSteps?: number): Job => ({\n id: jobId,\n coordinatorExpertKey: expertKey,\n status: \"running\",\n totalSteps: 0,\n startedAt: Date.now(),\n maxSteps,\n usage: createEmptyUsage(),\n})\n\n/**\n * Execute a run with the given parameters and options.\n * This is the main entry point for the runtime.\n *\n * The run loop handles:\n * - Job management\n * - Delegation routing (single vs parallel)\n * - Terminal state detection\n *\n * Each run execution is delegated to SingleRunExecutor.\n */\nexport async function run(runInput: RunParamsInput, options?: RunOptions): Promise<Checkpoint> {\n const runParams = runParamsSchema.parse(runInput)\n let { setting, checkpoint } = runParams\n\n const storeJob = options?.storeJob ?? (() => {})\n const retrieveJob = options?.retrieveJob ?? (() => undefined)\n const retrieveCheckpoint =\n options?.retrieveCheckpoint ??\n (async () => {\n throw new Error(\"retrieveCheckpoint not provided\")\n })\n const createJob = options?.createJob ?? defaultCreateJob\n\n let job: Job =\n retrieveJob(setting.jobId) ?? createJob(setting.jobId, setting.expertKey, setting.maxSteps)\n if (job.status !== \"running\") {\n job = { ...job, status: \"running\", finishedAt: undefined }\n }\n storeJob(job)\n\n const runExecutor = new SingleRunExecutor({\n shouldContinueRun: options?.shouldContinueRun,\n storeCheckpoint: options?.storeCheckpoint,\n storeEvent: options?.storeEvent,\n eventListener: options?.eventListener,\n resolveExpertToRun: options?.resolveExpertToRun,\n })\n\n while (true) {\n const runResult = await runExecutor.execute(setting, checkpoint)\n const resultCheckpoint = runResult.checkpoint\n\n job = {\n ...job,\n totalSteps: resultCheckpoint.stepNumber,\n usage: resultCheckpoint.usage,\n }\n\n switch (resultCheckpoint.status) {\n case \"completed\": {\n if (options?.returnOnDelegationComplete) {\n storeJob(job)\n return resultCheckpoint\n }\n if (resultCheckpoint.delegatedBy) {\n storeJob(job)\n const parentCheckpoint = await retrieveCheckpoint(\n setting.jobId,\n resultCheckpoint.delegatedBy.checkpointId,\n )\n const result = buildReturnFromDelegation(setting, resultCheckpoint, parentCheckpoint)\n setting = result.setting\n checkpoint = result.checkpoint\n break\n }\n storeJob({ ...job, status: \"completed\", finishedAt: Date.now() })\n return resultCheckpoint\n }\n\n case \"stoppedByInteractiveTool\": {\n storeJob({ ...job, status: \"stoppedByInteractiveTool\" })\n return resultCheckpoint\n }\n\n case \"stoppedByDelegate\": {\n storeJob(job)\n const { delegateTo } = resultCheckpoint\n if (!delegateTo || delegateTo.length === 0) {\n throw new Error(\"No delegations found in checkpoint\")\n }\n const strategy = selectDelegationStrategy(delegateTo.length)\n const context = extractDelegationContext(resultCheckpoint)\n\n // All strategies now use the same interface - delegations parameter is used directly\n // Pass parent options so child runs inherit callbacks for checkpoint persistence and events\n const delegationResult = await strategy.execute(\n delegateTo,\n setting,\n context,\n runResult.expertToRun,\n run,\n options,\n )\n\n setting = delegationResult.nextSetting\n checkpoint = delegationResult.nextCheckpoint\n break\n }\n\n case \"stoppedByExceededMaxSteps\": {\n storeJob({ ...job, status: \"stoppedByMaxSteps\", finishedAt: Date.now() })\n return resultCheckpoint\n }\n\n case \"stoppedByError\": {\n storeJob({ ...job, status: \"stoppedByError\", finishedAt: Date.now() })\n return resultCheckpoint\n }\n\n default:\n throw new Error(\"Run stopped by unknown reason\")\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../package.json","../src/helpers/model.ts","../src/helpers/usage.ts","../src/skill-manager/base.ts","../src/skill-manager/command-args.ts","../src/skill-manager/delegate.ts","../src/skill-manager/interactive.ts","../src/skill-manager/ip-validator.ts","../src/skill-manager/mcp-converters.ts","../src/skill-manager/transport-factory.ts","../src/skill-manager/mcp.ts","../src/skill-manager/skill-manager-factory.ts","../src/skill-manager/helpers.ts","../src/tool-execution/mcp-executor.ts","../src/tool-execution/executor-factory.ts","../src/tool-execution/tool-classifier.ts","../src/state-machine/states/calling-delegate.ts","../src/state-machine/states/calling-interactive-tool.ts","../src/state-machine/states/calling-tool.ts","../src/state-machine/states/finishing-step.ts","../src/messages/message.ts","../src/state-machine/states/generating-run-result.ts","../src/state-machine/states/generating-tool-call.ts","../src/messages/instruction-message.ts","../src/state-machine/states/init.ts","../src/state-machine/states/preparing-for-step.ts","../src/state-machine/states/resolving-tool-result.ts","../src/state-machine/states/resolving-thought.ts","../src/state-machine/machine.ts","../src/state-machine/actor-factory.ts","../src/state-machine/coordinator.ts","../src/state-machine/executor.ts","../src/helpers/checkpoint.ts","../src/helpers/resolve-expert.ts","../src/helpers/setup-experts.ts","../src/orchestration/delegation-strategy.ts","../src/events/event-emitter.ts","../src/orchestration/single-run-executor.ts","../src/run.ts"],"names":["undiciFetch","tool","McpClient","createId","part","classifyToolCalls","generateText","retry","dedent","resolveExpertToRun","createRuntimeEvent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,eAAA,GAAA;AAAA,EACE,IAAA,EAAQ,mBAAA;AAAA,EACR,OAAA,EAAW,QAAA;AAAA,EACX,WAAA,EAAe,kBAAA;AAAA,EACf,MAAA,EAAU,+BAAA;AAAA,EACV,OAAA,EAAW,YAAA;AAAA,EACX,IAAA,EAAQ,QAAA;AAAA,EACR,GAAA,EAAO;AAAA,IACL,kBAAA,EAAoB;AAAA,GACtB;AAAA,EACA,OAAA,EAAW;AAAA,IACT,GAAA,EAAK;AAAA,GACP;AAAA,EACA,aAAA,EAAiB;AAAA,IACf,MAAA,EAAU,QAAA;AAAA,IACV,GAAA,EAAO;AAAA,MACL,kBAAA,EAAoB;AAAA,KACtB;AAAA,IACA,OAAA,EAAW;AAAA,MACT,GAAA,EAAK;AAAA,KACP;AAAA,IACA,KAAA,EAAS;AAAA,MACP,GAAA,EAAK;AAAA;AACP,GACF;AAAA,EACA,KAAA,EAAS;AAAA,IACP;AAAA,GACF;AAAA,EACA,OAAA,EAAW;AAAA,IACT,KAAA,EAAS,aAAA;AAAA,IACT,KAAA,EAAS,kDAAA;AAAA,IACT,SAAA,EAAa;AAAA,GACf;AAAA,EACA,YAAA,EAAgB;AAAA,IACd,wBAAA,EAA0B,SAAA;AAAA,IAC1B,mBAAA,EAAqB,SAAA;AAAA,IACrB,eAAA,EAAiB,SAAA;AAAA,IACjB,kBAAA,EAAoB,SAAA;AAAA,IACpB,gBAAA,EAAkB,SAAA;AAAA,IAClB,uBAAA,EAAyB,SAAA;AAAA,IACzB,gBAAA,EAAkB,SAAA;AAAA,IAClB,2BAAA,EAA6B,SAAA;AAAA,IAC7B,sBAAA,EAAwB,QAAA;AAAA,IACxB,sBAAA,EAAwB,aAAA;AAAA,IACxB,gBAAA,EAAkB,aAAA;AAAA,IAClB,EAAA,EAAM,UAAA;AAAA,IACN,SAAA,EAAa,SAAA;AAAA,IACb,MAAA,EAAU,SAAA;AAAA,IACV,uBAAA,EAAyB,QAAA;AAAA,IACzB,WAAA,EAAa,QAAA;AAAA,IACb,WAAA,EAAa,QAAA;AAAA,IACb,MAAA,EAAU,SAAA;AAAA,IACV,MAAA,EAAU;AAAA,GACZ;AAAA,EACA,eAAA,EAAmB;AAAA,IACjB,kBAAA,EAAoB,SAAA;AAAA,IACpB,aAAA,EAAe,SAAA;AAAA,IACf,KAAA,EAAS,SAAA;AAAA,IACT,IAAA,EAAQ,QAAA;AAAA,IACR,UAAA,EAAc,QAAA;AAAA,IACd,MAAA,EAAU;AAAA,GACZ;AAAA,EACA,OAAA,EAAW;AAAA,IACT,IAAA,EAAQ;AAAA;AAEZ;ACrDA,SAAS,iBAAiB,QAAA,EAA2C;AACnE,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,QAAQ,CAAA;AACrC,EAAA,OAAO,CAAC,OAAO,IAAA,KAAS;AACtB,IAAA,OAAOA,MAAY,KAAA,EAAO,EAAE,GAAG,IAAA,EAAM,UAAA,EAAY,OAAO,CAAA;AAAA,EAC1D,CAAA;AACF;AAMO,SAAS,QAAA,CACd,OAAA,EACA,cAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,cAAc,OAAA,EAAS,QAAA,GAAW,gBAAA,CAAiB,OAAA,CAAQ,QAAQ,CAAA,GAAI,MAAA;AAC7E,EAAA,QAAQ,eAAe,YAAA;AAAc,IACnC,KAAK,WAAA,EAAa;AAChB,MAAA,MAAM,YAAY,eAAA,CAAgB;AAAA,QAChC,QAAQ,cAAA,CAAe,MAAA;AAAA,QACvB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,OAAO,UAAU,OAAO,CAAA;AAAA,IAC1B;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,SAAS,wBAAA,CAAyB;AAAA,QACtC,QAAQ,cAAA,CAAe,MAAA;AAAA,QACvB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,OAAO,OAAO,OAAO,CAAA;AAAA,IACvB;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,SAAS,YAAA,CAAa;AAAA,QAC1B,QAAQ,cAAA,CAAe,MAAA;AAAA,QACvB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,cAAc,cAAA,CAAe,YAAA;AAAA,QAC7B,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,MAAM,cAAA,CAAe,IAAA;AAAA,QACrB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,OAAO,OAAO,OAAO,CAAA;AAAA,IACvB;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,SAAS,YAAA,CAAa;AAAA,QAC1B,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,OAAO,OAAO,OAAO,CAAA;AAAA,IACvB;AAAA,IACA,KAAK,cAAA,EAAgB;AACnB,MAAA,MAAM,QAAQ,WAAA,CAAY;AAAA,QACxB,QAAQ,cAAA,CAAe,MAAA;AAAA,QACvB,cAAc,cAAA,CAAe,YAAA;AAAA,QAC7B,YAAY,cAAA,CAAe,UAAA;AAAA,QAC3B,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,wBAAwB,cAAA,CAAe,sBAAA;AAAA,QACvC,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,OAAO,MAAM,OAAO,CAAA;AAAA,IACtB;AAAA,IACA,KAAK,gBAAA,EAAkB;AACrB,MAAA,MAAM,gBAAgB,mBAAA,CAAoB;AAAA,QACxC,aAAa,cAAA,CAAe,WAAA;AAAA,QAC5B,iBAAiB,cAAA,CAAe,eAAA;AAAA,QAChC,QAAQ,cAAA,CAAe,MAAA;AAAA,QACvB,cAAc,cAAA,CAAe,YAAA;AAAA,QAC7B,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,OAAO,cAAc,OAAO,CAAA;AAAA,IAC9B;AAAA,IACA,KAAK,eAAA,EAAiB;AACpB,MAAA,MAAM,SAAS,YAAA,CAAa;AAAA,QAC1B,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,UAAU,cAAA,CAAe,QAAA;AAAA,QACzB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,OAAO,OAAO,OAAO,CAAA;AAAA,IACvB;AAAA,IACA,KAAK,UAAA,EAAY;AACf,MAAA,MAAM,WAAW,cAAA,CAAe;AAAA,QAC9B,QAAQ,cAAA,CAAe,MAAA;AAAA,QACvB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,OAAO,SAAS,OAAO,CAAA;AAAA,IACzB;AAAA,IACA,SAAS;AACP,MAAA,MAAM,WAAA,GAAqB,cAAA;AAC3B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAsB,WAAA,CAA+B,YAAY,CAAA,CAAE,CAAA;AAAA,IACrF;AAAA;AAEJ;AAEO,SAAS,gBAAA,CAAiB,cAA4B,OAAA,EAAqC;AAChG,EAAA,MAAM,WAAA,GAAc,WAAA,CACjB,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,QAAA,KAAa,YAAY,CAAA,EAC9C,OAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,OAAO,CAAA;AACjD,EAAA,OAAO,WAAA,EAAa,aAAA;AACtB;AAEO,SAAS,2BAAA,CAA4B,OAAc,aAAA,EAA+B;AACvF,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,GAAc,KAAA,CAAM,iBAAA,GAAoB,MAAM,YAAA,IAAgB,aAAA;AAC9E;;;AC1HO,SAAS,gBAAA,GAA0B;AACxC,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,CAAA;AAAA,IACb,YAAA,EAAc,CAAA;AAAA,IACd,eAAA,EAAiB,CAAA;AAAA,IACjB,WAAA,EAAa,CAAA;AAAA,IACb,iBAAA,EAAmB;AAAA,GACrB;AACF;AAEO,SAAS,4BAA4B,MAAA,EAAmD;AAC7F,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,MAAA,CAAO,KAAA,CAAM,WAAA,IAAe,CAAA;AAAA,IACzC,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,YAAA,IAAgB,CAAA;AAAA,IAC3C,eAAA,EAAiB,MAAA,CAAO,KAAA,CAAM,eAAA,IAAmB,CAAA;AAAA,IACjD,WAAA,EAAa,MAAA,CAAO,KAAA,CAAM,WAAA,IAAe,CAAA;AAAA,IACzC,iBAAA,EAAmB,MAAA,CAAO,KAAA,CAAM,iBAAA,IAAqB;AAAA,GACvD;AACF;AAEO,SAAS,QAAA,CAAS,GAAU,CAAA,EAAiB;AAClD,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,CAAA,CAAE,WAAA,GAAc,CAAA,CAAE,WAAA;AAAA,IAC/B,YAAA,EAAc,CAAA,CAAE,YAAA,GAAe,CAAA,CAAE,YAAA;AAAA,IACjC,eAAA,EAAiB,CAAA,CAAE,eAAA,GAAkB,CAAA,CAAE,eAAA;AAAA,IACvC,WAAA,EAAa,CAAA,CAAE,WAAA,GAAc,CAAA,CAAE,WAAA;AAAA,IAC/B,iBAAA,EAAmB,CAAA,CAAE,iBAAA,GAAoB,CAAA,CAAE;AAAA,GAC7C;AACF;;;ACjBO,IAAe,mBAAf,MAAgC;AAAA,EAC3B,mBAAqC,EAAC;AAAA,EACtC,YAAA,GAAe,KAAA;AAAA,EACf,aAAA;AAAA,EAID,KAAA;AAAA,EACA,gBAAA;AAAA,EACA,MAAA;AAAA,EACC,MAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EAEV,WAAA,CACE,KAAA,EACA,KAAA,EACA,aAAA,EACA;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,IAAA,IAAA,CAAK,cAAA,GAAiB,aAAA;AAAA,EACxB;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,IAAI,KAAK,YAAA,EAAc;AACrB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,MAAA,EAAS,IAAA,CAAK,IAAI,CAAA,uBAAA,CAAyB,CAAA;AAAA,IAC7D;AACA,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,MAAA,EAAS,IAAA,CAAK,IAAI,CAAA,wBAAA,CAA0B,CAAA;AAAA,IAC9D;AACA,IAAA,MAAM,WAAA,GAAc,KAAK,YAAA,EAAa;AACtC,IAAA,IAAA,CAAK,aAAA,GAAgB,WAAA;AACrB,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,MAAA,IAAI;AACF,QAAA,MAAM,WAAA;AAAA,MACR,SAAS,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,YAAA,GAAe,KAAA;AACpB,QAAA,IAAA,CAAK,aAAA,GAAgB,MAAA;AACrB,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA,EAEA,aAAA,GAAyB;AACvB,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA,EAEA,MAAgB,YAAA,GAA8B;AAC5C,IAAA,MAAM,KAAK,OAAA,EAAQ;AACnB,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AACpB,IAAA,IAAA,CAAK,aAAA,GAAgB,MAAA;AAAA,EACvB;AAAA,EAMA,MAAM,kBAAA,GAAgD;AAEpD,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,EAAc,IAAK,KAAK,aAAA,EAAe;AAC/C,MAAA,MAAM,IAAA,CAAK,aAAA;AAAA,IACb;AACA,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,EAAc,EAAG;AACzB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,MAAA,EAAS,IAAA,CAAK,IAAI,CAAA,mBAAA,CAAqB,CAAA;AAAA,IACzD;AACA,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,gBAAgB,CAAA;AAAA,EAChD;AAAA,EAEU,aAAa,KAAA,EAA2C;AAChE,IAAA,OAAO,KAAA;AAAA,EACT;AAMF,CAAA;;;AC/EO,SAAS,eAAe,KAAA,EAAmC;AAChE,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,WAAA,EAAa,MAAK,GAAI,KAAA;AAE7C,EAAA,IAAI,CAAC,WAAA,KAAgB,CAAC,IAAA,IAAQ,IAAA,CAAK,WAAW,CAAA,CAAA,EAAI;AAChD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,MAAA,EAAS,IAAI,CAAA,wDAAA,CAA0D,CAAA;AAAA,EACzF;AAEA,EAAA,IAAI,WAAA,IAAe,IAAA,IAAQ,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AAC1C,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,MAAA,EAAS,IAAI,CAAA,gEAAA,CAAkE,CAAA;AAAA,EACjG;AAEA,EAAA,IAAI,UAAU,IAAA,IAAQ,IAAA,CAAK,SAAS,CAAA,GAAI,IAAA,GAAO,CAAC,WAAY,CAAA;AAG5D,EAAA,IAAI,YAAY,KAAA,IAAS,CAAC,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,EAAG;AAChD,IAAA,OAAA,GAAU,CAAC,IAAA,EAAM,GAAG,OAAO,CAAA;AAAA,EAC7B;AAEA,EAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,OAAA,EAAQ;AAClC;;;ACpBO,IAAM,oBAAA,GAAN,cAAmC,gBAAA,CAAiB;AAAA,EAChD,IAAA;AAAA,EACA,IAAA,GAAkB,UAAA;AAAA,EAClB,QAAA,GAAW,KAAA;AAAA,EACF,MAAA;AAAA,EAElB,WAAA,CACE,MAAA,EACA,KAAA,EACA,KAAA,EACA,aAAA,EACA;AACA,IAAA,KAAA,CAAM,KAAA,EAAO,OAAO,aAAa,CAAA;AACjC,IAAA,IAAA,CAAK,OAAO,MAAA,CAAO,IAAA;AACnB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA,EAEA,MAAyB,OAAA,GAAyB;AAChD,IAAA,IAAA,CAAK,gBAAA,GAAmB;AAAA,MACtB;AAAA,QACE,SAAA,EAAW,KAAK,MAAA,CAAO,IAAA;AAAA,QACvB,IAAA,EAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,EAAI,IAAK,IAAA,CAAK,MAAA,CAAO,IAAA;AAAA,QACvD,WAAA,EAAa,KAAK,MAAA,CAAO,WAAA;AAAA,QACzB,WAAA,EAAa;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,UAAA,EAAY;AAAA,YACV,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA;AAAS,WAC1B;AAAA,UACA,QAAA,EAAU,CAAC,OAAO;AAAA,SACpB;AAAA,QACA,WAAA,EAAa;AAAA;AACf,KACF;AAAA,EACF;AAAA,EAEA,MAAe,KAAA,GAAuB;AAAA,EAAC;AAAA,EAEvC,MAAe,QAAA,CACb,SAAA,EACA,MAAA,EAC6D;AAC7D,IAAA,OAAO,EAAC;AAAA,EACV;AACF,CAAA;;;AC3CO,IAAM,uBAAA,GAAN,cAAsC,gBAAA,CAAiB;AAAA,EACnD,IAAA;AAAA,EACA,IAAA,GAAkB,aAAA;AAAA,EAClB,QAAA,GAAW,KAAA;AAAA,EACF,gBAAA;AAAA,EAElB,WAAA,CACE,gBAAA,EACA,KAAA,EACA,KAAA,EACA,aAAA,EACA;AACA,IAAA,KAAA,CAAM,KAAA,EAAO,OAAO,aAAa,CAAA;AACjC,IAAA,IAAA,CAAK,OAAO,gBAAA,CAAiB,IAAA;AAC7B,IAAA,IAAA,CAAK,gBAAA,GAAmB,gBAAA;AAAA,EAC1B;AAAA,EAEA,MAAyB,OAAA,GAAyB;AAChD,IAAA,IAAA,CAAK,gBAAA,GAAmB,OAAO,MAAA,CAAO,IAAA,CAAK,iBAAiB,KAAK,CAAA,CAAE,GAAA,CAAI,CAACC,KAAAA,MAAU;AAAA,MAChF,SAAA,EAAW,KAAK,gBAAA,CAAiB,IAAA;AAAA,MACjC,MAAMA,KAAAA,CAAK,IAAA;AAAA,MACX,aAAaA,KAAAA,CAAK,WAAA;AAAA,MAClB,WAAA,EAAa,IAAA,CAAK,KAAA,CAAMA,KAAAA,CAAK,eAAe,CAAA;AAAA,MAC5C,WAAA,EAAa;AAAA,KACf,CAAE,CAAA;AAAA,EACJ;AAAA,EAEA,MAAe,KAAA,GAAuB;AAAA,EAAC;AAAA,EAEvC,MAAe,QAAA,CACb,SAAA,EACA,MAAA,EAC6D;AAC7D,IAAA,OAAO,EAAC;AAAA,EACV;AACF,CAAA;;;AC1CO,SAAS,mBAAmB,QAAA,EAA2B;AAE5D,EAAA,IACE,aAAa,WAAA,IACb,QAAA,KAAa,eACb,QAAA,KAAa,KAAA,IACb,aAAa,SAAA,EACb;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,KAAA,CAAM,8BAA8B,CAAA;AAC/D,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,MAAM,GAAG,CAAA,EAAG,CAAC,CAAA,GAAI,SAAA,CAAU,IAAI,MAAM,CAAA;AAErC,IAAA,IAAI,CAAA,KAAM,IAAI,OAAO,IAAA;AAErB,IAAA,IAAI,MAAM,GAAA,IAAO,CAAA,IAAK,EAAA,IAAM,CAAA,IAAK,IAAI,OAAO,IAAA;AAE5C,IAAA,IAAI,CAAA,KAAM,GAAA,IAAO,CAAA,KAAM,GAAA,EAAK,OAAO,IAAA;AAEnC,IAAA,IAAI,CAAA,KAAM,GAAA,IAAO,CAAA,KAAM,GAAA,EAAK,OAAO,IAAA;AAEnC,IAAA,IAAI,CAAA,KAAM,KAAK,OAAO,IAAA;AAAA,EACxB;AAGA,EAAA,IAAI,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,EAAG;AAE1B,IAAA,IAAI,QAAA,CAAS,UAAA,CAAW,OAAO,CAAA,EAAG,OAAO,IAAA;AAEzC,IAAA,IAAI,QAAA,CAAS,WAAW,IAAI,CAAA,IAAK,SAAS,UAAA,CAAW,IAAI,GAAG,OAAO,IAAA;AAAA,EACrE;AAGA,EAAA,IAAI,QAAA,CAAS,UAAA,CAAW,SAAS,CAAA,EAAG;AAClC,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA;AACjC,IAAA,IAAI,kBAAA,CAAmB,QAAQ,CAAA,EAAG;AAChC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AClCO,SAAS,eAAA,CACd,KAAA,EACA,QAAA,EACA,aAAA,EACiB;AACjB,EAAA,IAAI,iBAAiB,aAAA,EAAe;AAClC,IAAA,OAAO;AAAA,MACL;AAAA,QACE,IAAA,EAAM,UAAA;AAAA,QACN,IAAA,EAAM,CAAA,mBAAA,EAAsB,QAAQ,CAAA,EAAA,EAAK,MAAM,OAAO,CAAA,CAAA;AAAA,QACtD,IAAI,QAAA;AAAS;AACf,KACF;AAAA,EACF;AACA,EAAA,MAAM,KAAA;AACR;AAKO,SAAS,iBAAA,CACd,MAAA,EACA,QAAA,EACA,KAAA,EACoD;AACpD,EAAA,IAAI,CAAC,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,EAAG;AAClD,IAAA,OAAO;AAAA,MACL;AAAA,QACE,IAAA,EAAM,UAAA;AAAA,QACN,MAAM,CAAA,KAAA,EAAQ,QAAQ,qCAAqC,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA,CAAA;AAAA,QAChF,IAAI,QAAA;AAAS;AACf,KACF;AAAA,EACF;AAEA,EAAA,OAAO,OAAO,OAAA,CACX,MAAA,CAAO,CAAC,IAAA,KAAS,KAAK,IAAA,KAAS,OAAA,IAAW,IAAA,CAAK,IAAA,KAAS,eAAe,CAAA,CACvE,GAAA,CAAI,CAAC,IAAA,KAAS,WAAA,CAAY,IAA6B,CAAC,CAAA;AAC7D;AAKO,SAAS,YACd,IAAA,EAC6C;AAC7C,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,MAAA;AACH,MAAA,IAAI,CAAC,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,SAAS,EAAA,EAAI;AAClC,QAAA,OAAO,EAAE,IAAA,EAAM,UAAA,EAAY,MAAM,mBAAA,EAAqB,EAAA,EAAI,UAAS,EAAE;AAAA,MACvE;AACA,MAAA,OAAO,EAAE,MAAM,UAAA,EAAY,IAAA,EAAM,KAAK,IAAA,EAAM,EAAA,EAAI,UAAS,EAAE;AAAA,IAE7D,KAAK,OAAA;AACH,MAAA,IAAI,CAAC,IAAA,CAAK,IAAA,IAAQ,CAAC,KAAK,QAAA,EAAU;AAChC,QAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,MAC/D;AACA,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,iBAAA;AAAA,QACN,aAAa,IAAA,CAAK,IAAA;AAAA,QAClB,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,IAAI,QAAA;AAAS,OACf;AAAA,IAEF,KAAK,UAAA;AACH,MAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,QAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,MAC5D;AACA,MAAA,OAAO,eAAA,CAAgB,KAAK,QAAQ,CAAA;AAAA;AAE1C;AAKO,SAAS,gBAAgB,QAAA,EAA+C;AAC7E,EAAA,IAAI,CAAC,SAAS,QAAA,EAAU;AACtB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,KAAK,SAAA,CAAU,QAAQ,CAAC,CAAA,gBAAA,CAAkB,CAAA;AAAA,EACxE;AAEA,EAAA,IAAI,QAAA,CAAS,IAAA,IAAQ,OAAO,QAAA,CAAS,SAAS,QAAA,EAAU;AACtD,IAAA,OAAO,EAAE,MAAM,UAAA,EAAY,IAAA,EAAM,SAAS,IAAA,EAAM,EAAA,EAAI,UAAS,EAAE;AAAA,EACjE;AAEA,EAAA,IAAI,QAAA,CAAS,IAAA,IAAQ,OAAO,QAAA,CAAS,SAAS,QAAA,EAAU;AACtD,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,gBAAA;AAAA,MACN,aAAa,QAAA,CAAS,IAAA;AAAA,MACtB,UAAU,QAAA,CAAS,QAAA;AAAA,MACnB,IAAI,QAAA;AAAS,KACf;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,KAAK,SAAA,CAAU,QAAQ,CAAC,CAAA,CAAE,CAAA;AAC1E;ACjFO,IAAM,0BAAN,MAA0D;AAAA,EAC/D,YAAY,OAAA,EAAsD;AAChE,IAAA,OAAO,IAAI,oBAAA,CAAqB;AAAA,MAC9B,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,KAAK,OAAA,CAAQ,GAAA;AAAA,MACb,QAAQ,OAAA,CAAQ;AAAA,KACjB,CAAA;AAAA,EACH;AAAA,EAEA,UAAU,OAAA,EAAyC;AACjD,IAAA,OAAO,IAAI,kBAAA,CAAmB,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC3C;AACF,CAAA;AAKO,IAAM,uBAAA,GAA0B,IAAI,uBAAA,EAAwB;;;ACZ5D,IAAM,eAAA,GAAN,cAA8B,gBAAA,CAAiB;AAAA,EAC3C,IAAA;AAAA,EACA,IAAA,GAAkB,KAAA;AAAA,EAClB,QAAA;AAAA,EACS,KAAA;AAAA,EACV,UAAA;AAAA,EACA,IAAA;AAAA,EACA,iBAAA;AAAA,EAER,YACE,KAAA,EACA,GAAA,EACA,KAAA,EACA,KAAA,EACA,eACA,OAAA,EACA;AACA,IAAA,KAAA,CAAM,KAAA,EAAO,OAAO,aAAa,CAAA;AACjC,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AAClB,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AACZ,IAAA,IAAA,CAAK,iBAAA,GAAoB,SAAS,gBAAA,IAAoB,uBAAA;AACtD,IAAA,IAAA,CAAK,WACH,KAAA,CAAM,IAAA,KAAS,mBAAmB,KAAA,CAAM,QAAA,IAAY,MAAM,IAAA,KAAS,gBAAA;AAAA,EACvE;AAAA,EAEA,MAAyB,OAAA,GAAyB;AAChD,IAAA,IAAA,CAAK,UAAA,GAAa,IAAIC,MAAA,CAAU;AAAA,MAC9B,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,WAAA,CAAA;AAAA,MACxB,OAAA,EAAS;AAAA,KACV,CAAA;AACD,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,IAAA,KAAS,eAAA,EAAiB;AACvC,MAAA,UAAA,GAAa,MAAM,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA;AAAA,IAC/C,CAAA,MAAO;AACL,MAAA,MAAM,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AAAA,IAChC;AACA,IAAA,MAAM,sBAAA,GAAyB,KAAK,GAAA,EAAI;AACxC,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,IAAA,CAAK,WAAW,SAAA,EAAU;AAClD,IAAA,MAAM,uBAAA,GAA0B,IAAA,CAAK,GAAA,EAAI,GAAI,sBAAA;AAC7C,IAAA,IAAA,CAAK,gBAAA,GAAmB,KAAA,CAAM,GAAA,CAAI,CAACD,KAAAA,MAAU;AAAA,MAC3C,SAAA,EAAW,KAAK,KAAA,CAAM,IAAA;AAAA,MACtB,MAAMA,KAAAA,CAAK,IAAA;AAAA,MACX,aAAaA,KAAAA,CAAK,WAAA;AAAA,MAClB,aAAaA,KAAAA,CAAK,WAAA;AAAA,MAClB,WAAA,EAAa;AAAA,KACf,CAAE,CAAA;AACF,IAAA,IAAI,IAAA,CAAK,kBAAkB,UAAA,EAAY;AACrC,MAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,GAAA,EAAI,GAAI,UAAA,CAAW,SAAA;AAChD,MAAA,MAAM,QAAQ,kBAAA,CAAmB,gBAAA,EAAkB,IAAA,CAAK,MAAA,EAAQ,KAAK,MAAA,EAAQ;AAAA,QAC3E,SAAA,EAAW,KAAK,KAAA,CAAM,IAAA;AAAA,QACtB,YAAY,UAAA,CAAW,UAAA;AAAA,QACvB,iBAAiB,UAAA,CAAW,eAAA;AAAA,QAC5B,qBAAqB,UAAA,CAAW,mBAAA;AAAA,QAChC,uBAAA;AAAA,QACA,iBAAA,EAAmB,UAAA,CAAW,eAAA,GAAkB,UAAA,CAAW,mBAAA;AAAA,QAC3D;AAAA,OACD,CAAA;AACD,MAAA,IAAA,CAAK,eAAe,KAAK,CAAA;AAAA,IAC3B;AAAA,EACF;AAAA,EAEA,MAAc,WAAW,KAAA,EAA+C;AACtE,IAAA,IAAI,CAAC,MAAM,OAAA,EAAS;AAClB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,MAAA,EAAS,KAAA,CAAM,IAAI,CAAA,eAAA,CAAiB,CAAA;AAAA,IACtD;AACA,IAAA,MAAM,cAAsC,EAAC;AAC7C,IAAA,KAAA,MAAW,OAAA,IAAW,MAAM,WAAA,EAAa;AACvC,MAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,EAAG;AACvB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,MAAA,EAAS,MAAM,IAAI,CAAA,+BAAA,EAAkC,OAAO,CAAA,CAAE,CAAA;AAAA,MAChF;AACA,MAAA,WAAA,CAAY,OAAO,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA;AAAA,IAC1C;AACA,IAAA,MAAM,GAAA,GAAM,eAAe,WAAW,CAAA;AACtC,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,EAAE,OAAA,EAAS,IAAA,EAAK,GAAI,eAAe,KAAK,CAAA;AAC9C,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,MAAM,QAAQ,kBAAA,CAAmB,eAAA,EAAiB,IAAA,CAAK,MAAA,EAAQ,KAAK,MAAA,EAAQ;AAAA,QAC1E,WAAW,KAAA,CAAM,IAAA;AAAA,QACjB,OAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,IAAA,CAAK,eAAe,KAAK,CAAA;AAAA,IAC3B;AACA,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,iBAAA,CAAkB,WAAA,CAAY,EAAE,SAAS,IAAA,EAAM,GAAA,EAAK,MAAA,EAAQ,MAAA,EAAQ,CAAA;AAC3F,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AACrC,IAAA,IAAK,UAAmC,MAAA,EAAQ;AAC7C,MAAC,SAAA,CAAmC,MAAA,CAAQ,EAAA,CAAG,MAAA,EAAQ,CAAC,KAAA,KAAkB;AACzE,QAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,UAAA,MAAM,QAAQ,kBAAA,CAAmB,aAAA,EAAe,IAAA,CAAK,MAAA,EAAQ,KAAK,MAAA,EAAQ;AAAA,YACxE,WAAW,KAAA,CAAM,IAAA;AAAA,YACjB,OAAA,EAAS,KAAA,CAAM,QAAA,EAAS,CAAE,IAAA;AAAK,WAChC,CAAA;AACD,UAAA,IAAA,CAAK,eAAe,KAAK,CAAA;AAAA,QAC3B;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AACA,IAAA,MAAM,gBAAA,GAAmB,KAAK,GAAA,EAAI;AAClC,IAAA,MAAM,IAAA,CAAK,UAAA,CAAY,OAAA,CAAQ,SAAS,CAAA;AACxC,IAAA,MAAM,mBAAA,GAAsB,IAAA,CAAK,GAAA,EAAI,GAAI,gBAAA;AACzC,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,UAAA,CAAY,gBAAA,EAAiB;AACxD,IAAA,OAAO;AAAA,MACL,SAAA;AAAA,MACA,eAAA;AAAA,MACA,mBAAA;AAAA,MACA,UAAA,EAAY,gBACR,EAAE,IAAA,EAAM,cAAc,IAAA,EAAM,OAAA,EAAS,aAAA,CAAc,OAAA,EAAQ,GAC3D;AAAA,KACN;AAAA,EACF;AAAA,EAEA,MAAc,SAAS,KAAA,EAAmC;AACxD,IAAA,IAAI,CAAC,MAAM,QAAA,EAAU;AACnB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,MAAA,EAAS,KAAA,CAAM,IAAI,CAAA,gBAAA,CAAkB,CAAA;AAAA,IACvD;AACA,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,KAAA,CAAM,QAAQ,CAAA;AAClC,IAAA,IAAI,GAAA,CAAI,aAAa,QAAA,EAAU;AAC7B,MAAA,MAAM,IAAI,MAAM,CAAA,MAAA,EAAS,KAAA,CAAM,IAAI,CAAA,8BAAA,EAAiC,KAAA,CAAM,QAAQ,CAAA,CAAE,CAAA;AAAA,IACtF;AACA,IAAA,IAAI,kBAAA,CAAmB,GAAA,CAAI,QAAQ,CAAA,EAAG;AACpC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,MAAA,EAAS,KAAA,CAAM,IAAI,CAAA,2CAAA,EAA8C,MAAM,QAAQ,CAAA;AAAA,OACjF;AAAA,IACF;AACA,IAAA,MAAM,YAAY,IAAA,CAAK,iBAAA,CAAkB,SAAA,CAAU,EAAE,KAAK,CAAA;AAC1D,IAAA,MAAM,IAAA,CAAK,UAAA,CAAY,OAAA,CAAQ,SAAS,CAAA;AAAA,EAC1C;AAAA,EAEA,MAAe,KAAA,GAAuB;AACpC,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,MAAM,IAAA,CAAK,WAAW,KAAA,EAAM;AAC5B,MAAA,IAAI,IAAA,CAAK,cAAA,IAAkB,IAAA,CAAK,KAAA,EAAO;AACrC,QAAA,MAAM,QAAQ,kBAAA,CAAmB,mBAAA,EAAqB,IAAA,CAAK,MAAA,EAAQ,KAAK,MAAA,EAAQ;AAAA,UAC9E,SAAA,EAAW,KAAK,KAAA,CAAM;AAAA,SACvB,CAAA;AACD,QAAA,IAAA,CAAK,eAAe,KAAK,CAAA;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAAA,EAEmB,aAAa,KAAA,EAA2C;AACzE,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAA,IAAQ,EAAC;AACjC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAA,IAAQ,EAAC;AACjC,IAAA,OAAO,KAAA,CACJ,MAAA,CAAO,CAACA,KAAAA,KAAU,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,CAAC,IAAA,CAAK,QAAA,CAASA,KAAAA,CAAK,IAAI,CAAA,GAAI,IAAK,CAAA,CACrE,MAAA,CAAO,CAACA,KAAAA,KAAU,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,IAAA,CAAK,QAAA,CAASA,KAAAA,CAAK,IAAI,CAAA,GAAI,IAAK,CAAA;AAAA,EACzE;AAAA,EAEA,MAAe,QAAA,CACb,QAAA,EACA,KAAA,EAC6D;AAC7D,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,EAAc,IAAK,CAAC,KAAK,UAAA,EAAY;AAC7C,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,mBAAA,CAAqB,CAAA;AAAA,IACnD;AACA,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAU,MAAM,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS;AAAA,QAC7C,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACZ,CAAA;AACD,MAAA,OAAO,iBAAA,CAAkB,MAAA,EAAQ,QAAA,EAAU,KAAK,CAAA;AAAA,IAClD,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,eAAA,CAAgB,KAAA,EAAO,QAAA,EAAU,QAAQ,CAAA;AAAA,IAClD;AAAA,EACF;AACF,CAAA;;;ACjKO,IAAM,6BAAN,MAAgE;AAAA,EACrE,SAAA,CACE,OACA,OAAA,EACkB;AAClB,IAAA,OAAO,IAAI,eAAA;AAAA,MACT,KAAA;AAAA,MACA,OAAA,CAAQ,GAAA;AAAA,MACR,OAAA,CAAQ,KAAA;AAAA,MACR,OAAA,CAAQ,KAAA;AAAA,MACR,OAAA,CAAQ,aAAA;AAAA,MACR,OAAA,CAAQ;AAAA,KACV;AAAA,EACF;AAAA,EAEA,iBAAA,CACE,OACA,OAAA,EACkB;AAClB,IAAA,OAAO,IAAI,wBAAwB,KAAA,EAAO,OAAA,CAAQ,OAAO,OAAA,CAAQ,KAAA,EAAO,QAAQ,aAAa,CAAA;AAAA,EAC/F;AAAA,EAEA,cAAA,CAAe,QAAgB,OAAA,EAAuD;AACpF,IAAA,OAAO,IAAI,qBAAqB,MAAA,EAAQ,OAAA,CAAQ,OAAO,OAAA,CAAQ,KAAA,EAAO,QAAQ,aAAa,CAAA;AAAA,EAC7F;AACF,CAAA;AAKO,IAAM,0BAAA,GAA6B,IAAI,0BAAA,EAA2B;;;AC9CzE,eAAsB,4BAAA,CACpB,UACA,WAAA,EACe;AACf,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,UAAA,CAAW,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAC,CAAA;AACtE,EAAA,MAAM,gBAAgB,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,UAAU,CAAA;AACjE,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,MAAM,OAAA,CAAQ,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,KAAA,EAAM,CAAE,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAC,CAAC,CAAA;AACnE,IAAA,MAAO,aAAA,CAAwC,MAAA;AAAA,EACjD;AACF;AAOA,eAAsB,gBAAA,CACpB,MAAA,EACA,OAAA,EACA,OAAA,EACA,eACA,OAAA,EAC2C;AAC3C,EAAA,MAAM,EAAE,wBAAA,EAA0B,GAAA,EAAK,KAAA,EAAO,OAAM,GAAI,OAAA;AACxD,EAAA,MAAM,EAAE,QAAO,GAAI,MAAA;AACnB,EAAA,MAAM,OAAA,GAAU,SAAS,OAAA,IAAW,0BAAA;AAEpC,EAAA,IAAI,CAAC,MAAA,CAAO,gBAAgB,CAAA,EAAG;AAC7B,IAAA,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAAA,EAC7C;AAEA,EAAA,MAAM,cAAA,GAA6C;AAAA,IACjD,GAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,cAAkC,EAAC;AAGzC,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CACnC,MAAA;AAAA,IACC,CAAC,KAAA,KACC,KAAA,CAAM,IAAA,KAAS,eAAA,IAAmB,MAAM,IAAA,KAAS;AAAA,GACrD,CACC,GAAA,CAAI,CAAC,KAAA,KAAU;AACd,IAAA,IAAI,wBAAA,IAA4B,KAAA,CAAM,IAAA,KAAS,eAAA,EAAiB;AAC9D,MAAA,MAAM,oBAAA,GACJ,KAAA,CAAM,OAAA,KAAY,KAAA,IAAS,MAAM,WAAA,KAAgB,gBAAA;AACnD,MAAA,MAAM,iBAAA,GACJ,KAAA,CAAM,OAAA,KAAY,KAAA,IAClB,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,IACxB,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,gBAAgB,CAAA;AACtC,MAAA,IAAI,wBAAwB,iBAAA,EAAmB;AAC7C,QAAA,MAAM,CAAC,eAAA,EAAiB,GAAG,YAAY,CAAA,GAAI,wBAAA;AAC3C,QAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,UAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,QAC3E;AACA,QAAA,OAAO;AAAA,UACL,GAAG,KAAA;AAAA,UACH,OAAA,EAAS,eAAA;AAAA,UACT,WAAA,EAAa,MAAA;AAAA,UACb,IAAA,EAAM,YAAA;AAAA,UACN,QAAA,EAAU;AAAA,SACZ;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AAEH,EAAA,MAAM,gBAAA,GAAmB,SAAA,CAAU,GAAA,CAAI,CAAC,KAAA,KAAU;AAChD,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,EAAO,cAAc,CAAA;AACvD,IAAA,WAAA,CAAY,KAAK,OAAO,CAAA;AACxB,IAAA,OAAO,OAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,MAAM,4BAAA,CAA6B,kBAAkB,WAAW,CAAA;AAGhE,EAAA,IAAI,CAAC,SAAS,cAAA,EAAgB;AAC5B,IAAA,MAAM,iBAAA,GAAoB,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,MAAA;AAAA,MAC9C,CAAC,KAAA,KAAqC,KAAA,CAAM,IAAA,KAAS;AAAA,KACvD;AACA,IAAA,MAAM,wBAAA,GAA2B,iBAAA,CAAkB,GAAA,CAAI,CAAC,gBAAA,KAAqB;AAC3E,MAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,iBAAA,CAAkB,gBAAA,EAAkB,cAAc,CAAA;AAC1E,MAAA,WAAA,CAAY,KAAK,OAAO,CAAA;AACxB,MAAA,OAAO,OAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAA,MAAM,4BAAA,CAA6B,0BAA0B,WAAW,CAAA;AAAA,EAC1E;AAGA,EAAA,MAAM,wBAA4C,EAAC;AACnD,EAAA,KAAA,MAAW,kBAAA,IAAsB,OAAO,SAAA,EAAW;AACjD,IAAA,MAAM,QAAA,GAAW,QAAQ,kBAAkB,CAAA;AAC3C,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,OAAA,CAAQ,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,KAAA,EAAM,CAAE,KAAA,CAAM,MAAM;AAAA,MAAC,CAAC,CAAC,CAAC,CAAA;AACnE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,kBAAkB,CAAA,sBAAA,CAAwB,CAAA;AAAA,IAChF;AACA,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,cAAA,CAAe,QAAA,EAAU,cAAc,CAAA;AAC/D,IAAA,WAAA,CAAY,KAAK,OAAO,CAAA;AACxB,IAAA,qBAAA,CAAsB,KAAK,OAAO,CAAA;AAAA,EACpC;AACA,EAAA,MAAM,4BAAA,CAA6B,uBAAuB,WAAW,CAAA;AAErE,EAAA,MAAM,gBAAkD,EAAC;AACzD,EAAA,KAAA,MAAW,WAAW,WAAA,EAAa;AACjC,IAAA,aAAA,CAAc,OAAA,CAAQ,IAAI,CAAA,GAAI,OAAA;AAAA,EAChC;AACA,EAAA,OAAO,aAAA;AACT;AAEA,eAAsB,mBACpB,aAAA,EACe;AACf,EAAA,MAAM,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,EAAM,CAAE,MAAM,MAAM;AAAA,EAAC,CAAC,CAAC,CAAC,CAAA;AACtF;AAEA,eAAsB,yBAAA,CACpB,eACA,QAAA,EAC2B;AAC3B,EAAA,KAAA,MAAW,YAAA,IAAgB,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA,EAAG;AACvD,IAAA,MAAM,eAAA,GAAkB,MAAM,YAAA,CAAa,kBAAA,EAAmB;AAC9D,IAAA,KAAA,MAAW,kBAAkB,eAAA,EAAiB;AAC5C,MAAA,IAAI,cAAA,CAAe,SAAS,QAAA,EAAU;AACpC,QAAA,OAAO,YAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,KAAA,EAAQ,QAAQ,CAAA,UAAA,CAAY,CAAA;AAC9C;AAEA,eAAsB,WACpB,aAAA,EACkB;AAClB,EAAA,MAAM,QAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,YAAA,IAAgB,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA,EAAG;AACvD,IAAA,MAAM,eAAA,GAAkB,MAAM,YAAA,CAAa,kBAAA,EAAmB;AAC9D,IAAA,KAAA,MAAW,kBAAkB,eAAA,EAAiB;AAC5C,MAAA,KAAA,CAAM,cAAA,CAAe,IAAI,CAAA,GAAI,IAAA,CAAK;AAAA,QAChC,aAAa,cAAA,CAAe,WAAA;AAAA,QAC5B,WAAA,EAAa,UAAA,CAAW,cAAA,CAAe,WAAW;AAAA,OACnD,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AChKA,SAAS,WAAW,KAAA,EAAmC;AACrD,EAAA,OACE,OAAO,UAAU,QAAA,IACjB,KAAA,KAAU,QACV,MAAA,IAAU,KAAA,IACV,cAAc,KAAA,IACd,MAAA,IAAU,SACV,OAAQ,KAAA,CAAmB,SAAS,QAAA,IACpC,OAAQ,MAAmB,QAAA,KAAa,QAAA,IACxC,OAAQ,KAAA,CAAmB,IAAA,KAAS,QAAA;AAExC;AAEA,eAAe,qBAAA,CACb,YACA,QAAA,EACqB;AACrB,EAAA,MAAM,oBAAmC,EAAC;AAC1C,EAAA,KAAA,MAAW,IAAA,IAAQ,WAAW,MAAA,EAAQ;AACpC,IAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC5B,MAAA,iBAAA,CAAkB,KAAK,IAAI,CAAA;AAC3B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AACnC,MAAA,IAAI,UAAA,CAAW,MAAM,CAAA,EAAG;AACtB,QAAA,QAAA,GAAW,MAAA;AAAA,MACb;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,iBAAA,CAAkB,KAAK,IAAI,CAAA;AAC3B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,iBAAA,CAAkB,KAAK,IAAI,CAAA;AAC3B,MAAA;AAAA,IACF;AACA,IAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAS,GAAI,QAAA;AAC3B,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,IAAI,CAAA;AAClC,MAAA,IAAI,aAAa,eAAA,EAAiB;AAChC,QAAA,iBAAA,CAAkB,IAAA,CAAK;AAAA,UACrB,IAAA,EAAM,iBAAA;AAAA,UACN,IAAI,IAAA,CAAK,EAAA;AAAA,UACT,WAAA,EAAa,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA;AAAA,UACrC;AAAA,SACD,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,iBAAA,CAAkB,IAAA,CAAK;AAAA,UACrB,IAAA,EAAM,gBAAA;AAAA,UACN,IAAI,IAAA,CAAK,EAAA;AAAA,UACT,WAAA,EAAa,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA;AAAA,UACrC;AAAA,SACD,CAAA;AAAA,MACH;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,iBAAA,CAAkB,IAAA,CAAK;AAAA,QACrB,IAAA,EAAM,UAAA;AAAA,QACN,IAAI,IAAA,CAAK,EAAA;AAAA,QACT,IAAA,EAAM,CAAA,qBAAA,EAAwB,IAAI,CAAA,GAAA,EAAM,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,OAC/F,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,OAAO,EAAE,GAAG,UAAA,EAAY,MAAA,EAAQ,iBAAA,EAAkB;AACpD;AAMO,IAAM,kBAAN,MAA8C;AAAA,EAC1C,IAAA,GAAkB,KAAA;AAAA,EAE3B,MAAM,OAAA,CACJ,QAAA,EACA,aAAA,EACqB;AACrB,IAAA,MAAM,YAAA,GAAe,MAAM,yBAAA,CAA0B,aAAA,EAAe,SAAS,QAAQ,CAAA;AACrF,IAAA,IAAI,YAAA,CAAa,SAAS,KAAA,EAAO;AAC/B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,YAAA,CAAa,IAAI,CAAA,CAAE,CAAA;AAAA,IAC/E;AACA,IAAA,MAAM,MAAA,GAAS,MAAO,YAAA,CAAiC,QAAA;AAAA,MACrD,QAAA,CAAS,QAAA;AAAA,MACT,QAAA,CAAS;AAAA,KACX;AACA,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,IAAI,QAAA,CAAS,EAAA;AAAA,MACb,WAAW,QAAA,CAAS,SAAA;AAAA,MACpB,UAAU,QAAA,CAAS,QAAA;AAAA,MACnB;AAAA,KACF;AAEA,IAAA,IAAI,QAAA,CAAS,QAAA,KAAa,aAAA,IAAiB,QAAA,CAAS,aAAa,eAAA,EAAiB;AAChF,MAAA,OAAO,qBAAA,CAAsB,UAAA,EAAY,QAAA,CAAS,QAAQ,CAAA;AAAA,IAC5D;AACA,IAAA,OAAO,UAAA;AAAA,EACT;AACF,CAAA;;;ACjGO,IAAM,sBAAN,MAA0B;AAAA,EACvB,SAAA;AAAA,EAER,WAAA,GAAc;AACZ,IAAA,IAAA,CAAK,SAAA,uBAAgB,GAAA,CAAI;AAAA,MACvB,CAAC,KAAA,EAAO,IAAI,eAAA,EAAiB;AAAA;AAAA,KAE9B,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,IAAA,EAA2C;AACrD,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAA,CACJ,QAAA,EACA,IAAA,EACA,aAAA,EACqB;AACrB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AACxC,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,IAAI,CAAA,CAAE,CAAA;AAAA,IAClE;AACA,IAAA,OAAO,QAAA,CAAS,OAAA,CAAQ,QAAA,EAAU,aAAa,CAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,IAAA,EAA0B;AAC1C,IAAA,OAAO,IAAA,KAAS,KAAA;AAAA,EAClB;AACF,CAAA;AAKO,IAAM,mBAAA,GAAsB,IAAI,mBAAA,EAAoB;;;ACjC3D,eAAsB,iBAAA,CACpB,UACA,aAAA,EACoB;AACpB,EAAA,MAAM,YAAA,GAAe,MAAM,yBAAA,CAA0B,aAAA,EAAe,QAAQ,CAAA;AAC5E,EAAA,OAAO,YAAA,CAAa,IAAA;AACtB;AAKA,eAAsB,iBAAA,CACpB,WACA,aAAA,EAC8B;AAC9B,EAAA,MAAM,UAAA,GAAkC;AAAA,IACtC,KAAK,EAAC;AAAA,IACN,UAAU,EAAC;AAAA,IACX,aAAa;AAAC,GAChB;AAEA,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,IAC5B,SAAA,CAAU,GAAA,CAAI,OAAO,QAAA,KAAa;AAChC,MAAA,MAAM,YAAA,GAAe,MAAM,yBAAA,CAA0B,aAAA,EAAe,SAAS,QAAQ,CAAA;AACrF,MAAA,OAAO,EAAE,QAAA,EAAU,IAAA,EAAM,YAAA,CAAa,MAAM,YAAA,EAAa;AAAA,IAC3D,CAAC;AAAA,GACH;AAEA,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,UAAA,CAAW,MAAA,CAAO,IAAI,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA;AAAA,EACrC;AAEA,EAAA,OAAO,UAAA;AACT;;;AC/CA,eAAsB,oBAAA,CAAqB;AAAA,EACzC,OAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAC5C,EAAA,IAAI,CAAC,IAAA,CAAK,gBAAA,IAAoB,IAAA,CAAK,gBAAA,CAAiB,WAAW,CAAA,EAAG;AAChE,IAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,EAC/C;AACA,EAAA,MAAM,aAAA,GAAgB,MAAM,OAAA,CAAQ,GAAA;AAAA,IAClC,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,OAAO,EAAA,MAAQ;AAAA,MACvC,QAAA,EAAU,EAAA;AAAA,MACV,IAAA,EAAM,MAAM,iBAAA,CAAkB,EAAA,CAAG,UAAU,aAAa;AAAA,KAC1D,CAAE;AAAA,GACJ;AACA,EAAA,MAAM,iBAAA,GAAoB,aAAA,CACvB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,UAAU,CAAA,CACnC,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AACxB,EAAA,MAAM,oBAAA,GAAuB,aAAA,CAC1B,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,UAAU,CAAA,CACnC,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AACxB,EAAA,IAAI,iBAAA,CAAkB,WAAW,CAAA,EAAG;AAClC,IAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,EAChD;AACA,EAAA,MAAM,WAAA,GAAkC,MAAM,OAAA,CAAQ,GAAA;AAAA,IACpD,iBAAA,CAAkB,GAAA,CAAI,OAAO,EAAA,KAAO;AAClC,MAAA,MAAM,YAAA,GAAe,MAAM,yBAAA,CAA0B,aAAA,EAAe,GAAG,QAAQ,CAAA;AAC/E,MAAA,IAAI,CAAC,aAAa,MAAA,EAAQ;AACxB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,EAAA,CAAG,QAAQ,CAAA,WAAA,CAAa,CAAA;AAAA,MAC9E;AACA,MAAA,IAAI,CAAC,EAAA,CAAG,IAAA,IAAQ,CAAC,EAAA,CAAG,IAAA,CAAK,KAAA,IAAS,OAAO,EAAA,CAAG,IAAA,CAAK,KAAA,KAAU,QAAA,EAAU;AACnE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yCAAA,EAA4C,EAAA,CAAG,QAAQ,CAAA,CAAE,CAAA;AAAA,MAC3E;AACA,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ;AAAA,UACN,GAAA,EAAK,aAAa,MAAA,CAAO,GAAA;AAAA,UACzB,IAAA,EAAM,aAAa,MAAA,CAAO,IAAA;AAAA,UAC1B,OAAA,EAAS,aAAa,MAAA,CAAO;AAAA,SAC/B;AAAA,QACA,YAAY,EAAA,CAAG,EAAA;AAAA,QACf,UAAU,EAAA,CAAG,QAAA;AAAA,QACb,KAAA,EAAO,GAAG,IAAA,CAAK;AAAA,OACjB;AAAA,IACF,CAAC;AAAA,GACH;AACA,EAAA,OAAO,iBAAA,CAAkB,SAAS,UAAA,EAAY;AAAA,IAC5C,UAAA,EAAY;AAAA,MACV,GAAG,UAAA;AAAA,MACH,MAAA,EAAQ,mBAAA;AAAA,MACR,UAAA,EAAY,WAAA;AAAA,MACZ,gBAAA,EAAkB,oBAAA,CAAqB,MAAA,GAAS,CAAA,GAAI,oBAAA,GAAuB,MAAA;AAAA,MAC3E,oBAAoB,IAAA,CAAK;AAAA,KAC3B;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,GAAG,IAAA;AAAA,MACH,UAAA,EAAY,KAAK,GAAA;AAAI;AACvB,GACD,CAAA;AACH;AC5DA,eAAsB,2BAAA,CAA4B;AAAA,EAChD,OAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAC5C,EAAA,IAAI,CAAC,IAAA,CAAK,gBAAA,IAAoB,IAAA,CAAK,gBAAA,CAAiB,WAAW,CAAA,EAAG;AAChE,IAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,EAC/C;AACA,EAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,gBAAA,CAAiB,CAAC,CAAA;AAC/C,EAAA,MAAM,kBAAA,GAAqB,IAAA,CAAK,gBAAA,CAAiB,KAAA,CAAM,CAAC,CAAA;AACxD,EAAA,OAAO,wBAAA,CAAyB,SAAS,UAAA,EAAY;AAAA,IACnD,UAAA,EAAY;AAAA,MACV,GAAG,UAAA;AAAA,MACH,MAAA,EAAQ,0BAAA;AAAA,MACR,gBAAA,EAAkB,CAAC,eAAA,EAAiB,GAAG,kBAAkB,CAAA;AAAA,MACzD,oBAAoB,IAAA,CAAK;AAAA,KAC3B;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,GAAG,IAAA;AAAA,MACH,UAAA,EAAY,KAAK,GAAA;AAAI;AACvB,GACD,CAAA;AACH;ACdA,SAAS,kBAAkB,UAAA,EAAiC;AAC1D,EAAA,MAAM,SAAA,GAAY,UAAA,CAAW,MAAA,CAAO,CAAC,CAAA;AACrC,EAAA,IAAI,CAAC,SAAA,IAAa,SAAA,CAAU,IAAA,KAAS,UAAA,EAAY;AAC/C,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,IAAI,CAAA;AACxC,IAAA,OAAO,MAAM,OAAA,CAAQ,MAAA,CAAO,cAAc,CAAA,IAAK,MAAA,CAAO,eAAe,MAAA,GAAS,CAAA;AAAA,EAChF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEA,eAAsB,gBAAA,CAAiB;AAAA,EACrC,OAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAC5C,EAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,gBAAA,IAAoB,IAAA,CAAK,aAAa,EAAC;AACrE,EAAA,IAAI,gBAAA,CAAiB,WAAW,CAAA,EAAG;AACjC,IAAA,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,WAAA,GAA4B,KAAK,WAAA,GAAc,CAAC,GAAG,IAAA,CAAK,WAAW,IAAI,EAAC;AAG9E,EAAA,MAAM,wBAAwB,gBAAA,CAAiB,IAAA;AAAA,IAC7C,CAAC,EAAA,KAAO,EAAA,CAAG,SAAA,KAAc,gBAAA,IAAoB,GAAG,QAAA,KAAa;AAAA,GAC/D;AACA,EAAA,IAAI,qBAAA,EAAuB;AACzB,IAAA,MAAM,UAAA,GAAa,MAAM,mBAAA,CAAoB,OAAA;AAAA,MAC3C,qBAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAI,iBAAA,CAAkB,UAAU,CAAA,EAAG;AACjC,MAAA,OAAO,kBAAA,CAAmB,SAAS,UAAA,EAAY,EAAE,aAAa,CAAC,UAAU,GAAG,CAAA;AAAA,IAC9E;AACA,IAAA,OAAO,iBAAA,CAAkB,OAAA,EAAS,UAAA,EAAY,EAAE,YAAY,CAAA;AAAA,EAC9D;AAGA,EAAA,MAAM,UAAA,GAAa,MAAM,iBAAA,CAAkB,gBAAA,EAAkB,aAAa,CAAA;AAG1E,EAAA,IAAI,UAAA,CAAW,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG;AAC7B,IAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC/B,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,KAAM,mBAAA,CAAoB,OAAA,CAAQ,CAAA,CAAE,QAAA,EAAU,KAAA,EAAO,aAAa,CAAC;AAAA,KACzF;AACA,IAAA,WAAA,CAAY,IAAA,CAAK,GAAG,UAAU,CAAA;AAAA,EAChC;AAGA,EAAA,IAAI,UAAA,CAAW,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAClC,IAAA,MAAM,oBAAoB,UAAA,CAAW,QAAA,CAAS,IAAI,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AACnE,IAAA,MAAM,uBAAuB,UAAA,CAAW,WAAA,CAAY,IAAI,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AACzE,IAAA,IAAA,CAAK,kBAAA,GAAqB,WAAA;AAC1B,IAAA,IAAA,CAAK,gBAAA,GAAmB,CAAC,GAAG,iBAAA,EAAmB,GAAG,oBAAoB,CAAA;AACtE,IAAA,OAAO,YAAA,CAAa,SAAS,UAAA,EAAY;AAAA,MACvC,YAAY,UAAA,CAAW,QAAA,CAAS,UAAA,CAAW,QAAA,CAAS,SAAS,CAAC,CAAA;AAAA,MAC9D,SAAA,EAAW,iBAAA;AAAA,MACX,OAAO,IAAA,CAAK;AAAA,KACb,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,UAAA,CAAW,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACrC,IAAA,MAAM,mBAAA,GAAsB,UAAA,CAAW,WAAA,CAAY,CAAC,CAAA,EAAG,QAAA;AACvD,IAAA,IAAI,CAAC,mBAAA,EAAqB;AACxB,MAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAAA,IAClD;AACA,IAAA,MAAM,uBAAuB,UAAA,CAAW,WAAA,CAAY,IAAI,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AACzE,IAAA,IAAA,CAAK,kBAAA,GAAqB,WAAA;AAC1B,IAAA,IAAA,CAAK,gBAAA,GAAmB,oBAAA;AACxB,IAAA,OAAO,mBAAA,CAAoB,SAAS,UAAA,EAAY;AAAA,MAC9C,YAAY,UAAA,CAAW,QAAA,CAAS,UAAA,CAAW,QAAA,CAAS,SAAS,CAAC,CAAA;AAAA,MAC9D,QAAA,EAAU,mBAAA;AAAA,MACV,OAAO,IAAA,CAAK;AAAA,KACb,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,kBAAA,CAAmB,OAAA,EAAS,UAAA,EAAY,EAAE,aAAa,CAAA;AAChE;AC1FA,eAAsB,kBAAA,CAAmB;AAAA,EACvC,OAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAC5C,EAAA,IAAI,QAAQ,QAAA,KAAa,MAAA,IAAa,UAAA,CAAW,UAAA,IAAc,QAAQ,QAAA,EAAU;AAC/E,IAAA,OAAO,yBAAA,CAA0B,SAAS,UAAA,EAAY;AAAA,MACpD,UAAA,EAAY;AAAA,QACV,GAAG,UAAA;AAAA,QACH,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,GAAG,IAAA;AAAA,QACH,UAAA,EAAY,KAAK,GAAA;AAAI;AACvB,KACD,CAAA;AAAA,EACH;AACA,EAAA,OAAO,kBAAA,CAAmB,SAAS,UAAA,EAAY;AAAA,IAC7C,UAAA,EAAY;AAAA,MACV,GAAG;AAAA,KACL;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,GAAG,IAAA;AAAA,MACH,UAAA,EAAY,KAAK,GAAA;AAAI,KACvB;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,GAAG,UAAA;AAAA,MACH,IAAIE,QAAAA,EAAS;AAAA,MACb,UAAA,EAAY,WAAW,UAAA,GAAa;AAAA;AACtC,GACD,CAAA;AACH;ACJO,SAAS,kBACd,QAAA,EASa;AACb,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,MAChC,GAAG,IAAA;AAAA,MACH,IAAIA,QAAAA;AAAS,KACf,CAAE,CAAA;AAAA,IACF,IAAIA,QAAAA;AAAS,GACf;AACF;AAEO,SAAS,oBACd,QAAA,EACe;AACf,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,MAChC,GAAG,IAAA;AAAA,MACH,IAAIA,QAAAA;AAAS,KACf,CAAE,CAAA;AAAA,IACF,IAAIA,QAAAA;AAAS,GACf;AACF;AAEO,SAAS,kBACd,QAAA,EAOa;AACb,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,MAChC,GAAG,IAAA;AAAA,MACH,QAAA,EAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAACC,KAAAA,MAAU;AAAA,QACrC,GAAGA,KAAAA;AAAA,QACH,IAAID,QAAAA;AAAS,OACf,CAAE,CAAA;AAAA,MACF,IAAIA,QAAAA;AAAS,KACf,CAAE,CAAA;AAAA,IACF,IAAIA,QAAAA;AAAS,GACf;AACF;AAEO,SAAS,qBAAqB,OAAA,EAAgC;AACnE,EAAA,QAAQ,QAAQ,IAAA;AAAM,IACpB,KAAK,oBAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,gCAAA,CAAiC,OAAA,CAAQ,QAAQ,CAAA;AAAA,QAC1D,eAAA,EAAiB,QAAQ,KAAA,GACrB;AAAA,UACE,WAAW,EAAE,YAAA,EAAc,EAAE,IAAA,EAAM,aAAY;AAAE,SACnD,GACA;AAAA,OACN;AAAA,IACF,KAAK,aAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,EAAS,yBAAA,CAA0B,OAAA,CAAQ,QAAQ,CAAA;AAAA,QACnD,eAAA,EAAiB,QAAQ,KAAA,GACrB;AAAA,UACE,WAAW,EAAE,YAAA,EAAc,EAAE,IAAA,EAAM,aAAY;AAAE,SACnD,GACA;AAAA,OACN;AAAA,IACF,KAAK,eAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,WAAA;AAAA,QACN,OAAA,EAAS,2BAAA,CAA4B,OAAA,CAAQ,QAAQ,CAAA;AAAA,QACrD,eAAA,EAAiB,QAAQ,KAAA,GACrB;AAAA,UACE,WAAW,EAAE,YAAA,EAAc,EAAE,IAAA,EAAM,aAAY;AAAE,SACnD,GACA;AAAA,OACN;AAAA,IACF,KAAK,aAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,EAAS,yBAAA,CAA0B,OAAA,CAAQ,QAAQ,CAAA;AAAA,QACnD,eAAA,EAAiB,QAAQ,KAAA,GACrB;AAAA,UACE,WAAW,EAAE,YAAA,EAAc,EAAE,IAAA,EAAM,aAAY;AAAE,SACnD,GACA;AAAA,OACN;AAAA;AAEN;AACA,SAAS,iCACP,QAAA,EAC+B;AAC/B,EAAA,OAAO,QAAA,CAAS,MAAA,CAAO,CAAC,GAAA,EAAK,IAAA,KAAS;AACpC,IAAA,OAAO,MAAA;AAAA,MAAA,EACH,GAAG;AAAA,MAAA,EACH,KAAK,IAAI;AAAA,IAAA,CAAA,CACX,IAAA,EAAK;AAAA,EACT,GAAG,EAAY,CAAA;AACjB;AACA,SAAS,0BAA0B,QAAA,EAAgE;AACjG,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,KAAS;AAC5B,IAAA,QAAQ,KAAK,IAAA;AAAM,MACjB,KAAK,UAAA;AACH,QAAA,OAAO,uBAAuB,IAAI,CAAA;AAAA,MACpC,KAAK,cAAA;AACH,QAAA,OAAO,4BAA4B,IAAI,CAAA;AAAA,MACzC,KAAK,iBAAA;AACH,QAAA,OAAO,+BAA+B,IAAI,CAAA;AAAA,MAC5C,KAAK,iBAAA;AACH,QAAA,OAAO,+BAA+B,IAAI,CAAA;AAAA,MAC5C,KAAK,aAAA;AACH,QAAA,OAAO,0BAA0B,IAAI,CAAA;AAAA,MACvC,KAAK,gBAAA;AACH,QAAA,OAAO,6BAA6B,IAAI,CAAA;AAAA,MAC1C,KAAK,gBAAA;AACH,QAAA,OAAO,6BAA6B,IAAI,CAAA;AAAA,MAC1C;AACE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA+B,IAAA,CAA0B,IAAI,CAAA,CAAE,CAAA;AAAA;AACnF,EACF,CAAC,CAAA;AACH;AACA,SAAS,4BACP,QAAA,EACkC;AAClC,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,KAAS;AAC5B,IAAA,QAAQ,KAAK,IAAA;AAAM,MACjB,KAAK,UAAA;AACH,QAAA,OAAO,uBAAuB,IAAI,CAAA;AAAA,MACpC,KAAK,cAAA;AACH,QAAA,OAAO,+BAA+B,IAAI,CAAA;AAAA,MAC5C;AACE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAiC,IAAA,CAA0B,IAAI,CAAA,CAAE,CAAA;AAAA;AACrF,EACF,CAAC,CAAA;AACH;AACA,SAAS,0BAA0B,QAAA,EAAgE;AACjG,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,KAAS;AAC5B,IAAA,QAAQ,KAAK,IAAA;AAAM,MACjB,KAAK,gBAAA;AACH,QAAA,OAAO,mCAAmC,IAAI,CAAA;AAAA,MAChD;AACE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA+B,IAAA,CAA0B,IAAI,CAAA,CAAE,CAAA;AAAA;AACnF,EACF,CAAC,CAAA;AACH;AACA,SAAS,uBAAuB,IAAA,EAA+B;AAC7D,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,MAAM,IAAA,CAAK;AAAA,GACb;AACF;AACA,SAAS,4BAA4B,IAAA,EAAoC;AACvE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,OAAO,IAAA,CAAK,GAAA;AAAA,IACZ,WAAW,IAAA,CAAK;AAAA,GAClB;AACF;AACA,SAAS,+BAA+B,IAAA,EAAuC;AAC7E,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,OAAO,IAAA,CAAK,WAAA;AAAA,IACZ,WAAW,IAAA,CAAK;AAAA,GAClB;AACF;AACA,SAAS,+BAA+B,IAAA,EAAuC;AAC7E,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,OAAO,IAAA,CAAK,IAAA;AAAA,IACZ,WAAW,IAAA,CAAK;AAAA,GAClB;AACF;AACA,SAAS,0BAA0B,IAAA,EAAkC;AACnE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,MAAM,IAAA,CAAK,GAAA;AAAA,IACX,WAAW,IAAA,CAAK;AAAA,GAClB;AACF;AACA,SAAS,6BAA6B,IAAA,EAAqC;AACzE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,MAAM,IAAA,CAAK,WAAA;AAAA,IACX,WAAW,IAAA,CAAK;AAAA,GAClB;AACF;AACA,SAAS,6BAA6B,IAAA,EAAqC;AACzE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,WAAW,IAAA,CAAK;AAAA,GAClB;AACF;AACA,SAAS,+BAA+B,IAAA,EAAuC;AAC7E,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,OAAO,IAAA,CAAK;AAAA,GACd;AACF;AACA,SAAS,mCAAmC,IAAA,EAA2C;AACrF,EAAA,MAAM,EAAE,UAAS,GAAI,IAAA;AACrB,EAAA,IAAI,SAAS,MAAA,KAAW,CAAA,IAAK,SAAS,CAAC,CAAA,CAAE,SAAS,UAAA,EAAY;AAC5D,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,aAAA;AAAA,MACN,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,MAAA,EAAQ,EAAE,IAAA,EAAM,MAAA,EAAiB,OAAO,QAAA,CAAS,CAAC,EAAE,IAAA;AAAK,KAC3D;AAAA,EACF;AACA,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,KAAY;AAC7C,IAAA,IAAI,OAAA,CAAQ,SAAS,UAAA,EAAY;AAC/B,MAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAiB,IAAA,EAAM,QAAQ,IAAA,EAAK;AAAA,IACrD;AACA,IAAA,OAAO,EAAE,MAAM,OAAA,EAAkB,IAAA,EAAM,QAAQ,WAAA,EAAa,SAAA,EAAW,QAAQ,QAAA,EAAS;AAAA,EAC1F,CAAC,CAAA;AACD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,aAAA;AAAA,IACN,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,MAAA,EAAQ,EAAE,IAAA,EAAM,SAAA,EAAoB,OAAO,YAAA;AAAa,GAC1D;AACF;;;AC9PA,eAAsB,wBAAA,CAAyB;AAAA,EAC7C,OAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAC5C,EAAA,IAAI,CAAC,KAAK,SAAA,IAAa,CAAC,KAAK,WAAA,IAAe,IAAA,CAAK,WAAA,CAAY,MAAA,KAAW,CAAA,EAAG;AACzE,IAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,EACvD;AACA,EAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,CAAC,UAAA,KAAe;AAC3D,IAAA,MAAM,QAAA,GAAW,KAAK,SAAA,EAAW,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,EAAA,KAAO,UAAA,CAAW,EAAE,CAAA;AACrE,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,gBAAA;AAAA,MACN,YAAY,UAAA,CAAW,EAAA;AAAA,MACvB,QAAA,EAAU,QAAA,EAAU,QAAA,IAAY,UAAA,CAAW,QAAA;AAAA,MAC3C,QAAA,EAAU,WAAW,MAAA,CAAO,MAAA;AAAA,QAC1B,CAAC,SACC,IAAA,CAAK,IAAA,KAAS,cACd,IAAA,CAAK,IAAA,KAAS,iBAAA,IACd,IAAA,CAAK,IAAA,KAAS;AAAA;AAClB,KACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,MAAM,WAAA,GAAc,kBAAkB,eAAe,CAAA;AACrD,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,KAAA,EAAO,OAAA,CAAQ,gBAAgB,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAU,CAAA;AAC5F,EAAA,MAAM,EAAE,UAAS,GAAI,UAAA;AACrB,EAAA,IAAI,gBAAA;AACJ,EAAA,IAAI;AACF,IAAA,gBAAA,GAAmB,MAAM,YAAA,CAAa;AAAA,MACpC,KAAA;AAAA,MACA,UAAU,CAAC,GAAG,UAAU,WAAW,CAAA,CAAE,IAAI,oBAAoB,CAAA;AAAA,MAC7D,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,WAAA,EAAa,WAAA,CAAY,OAAA,CAAQ,OAAA,CAAQ,OAAO;AAAA,KACjD,CAAA;AAAA,EACH,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,MAAM,IAAA,EAAM,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,CAAA;AAC3E,MAAA,OAAO,KAAA,CAAM,SAAS,UAAA,EAAY;AAAA,QAChC,MAAA;AAAA,QACA,WAAA,EAAa,CAAC,WAAA,EAAa,iBAAA,CAAkB,CAAC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAQ,CAAC,CAAC,CAAA;AAAA,QAClF,OAAO,gBAAA;AAAiB,OACzB,CAAA;AAAA,IACH;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACA,EAAA,MAAM,KAAA,GAAQ,4BAA4B,gBAAgB,CAAA;AAC1D,EAAA,MAAM,EAAE,MAAK,GAAI,gBAAA;AACjB,EAAA,MAAM,WAAA,GAAc,CAAC,WAAA,EAAa,mBAAA,CAAoB,OAAO,CAAC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,CAAA,GAAI,EAAE,CAAC,CAAA;AAC/F,EAAA,OAAO,WAAA,CAAY,SAAS,UAAA,EAAY;AAAA,IACtC,UAAA,EAAY;AAAA,MACV,GAAG,UAAA;AAAA,MACH,QAAA,EAAU,CAAC,GAAG,QAAA,EAAU,GAAG,WAAW,CAAA;AAAA,MACtC,KAAA,EAAO,QAAA,CAAS,UAAA,CAAW,KAAA,EAAO,KAAK,CAAA;AAAA,MACvC,oBAAoB,UAAA,CAAW,aAAA,GAC3B,4BAA4B,KAAA,EAAO,UAAA,CAAW,aAAa,CAAA,GAC3D,MAAA;AAAA,MACJ,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,GAAG,IAAA;AAAA,MACH,aAAa,CAAC,GAAG,IAAA,CAAK,WAAA,EAAa,GAAG,WAAW,CAAA;AAAA,MACjD,UAAA,EAAY,KAAK,GAAA,EAAI;AAAA,MACrB,KAAA,EAAO,QAAA,CAAS,IAAA,CAAK,KAAA,EAAO,KAAK;AAAA,KACnC;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AClDA,eAAeE,kBAAAA,CACb,WACA,aAAA,EAC+B;AAC/B,EAAA,OAAO,OAAA,CAAQ,GAAA;AAAA,IACb,SAAA,CAAU,GAAA,CAAI,OAAO,EAAA,KAAO;AAC1B,MAAA,MAAM,YAAA,GAAe,MAAM,yBAAA,CAA0B,aAAA,EAAe,GAAG,QAAQ,CAAA;AAC/E,MAAA,OAAO;AAAA,QACL,YAAY,EAAA,CAAG,UAAA;AAAA,QACf,UAAU,EAAA,CAAG,QAAA;AAAA,QACb,OAAO,EAAA,CAAG,KAAA;AAAA,QACV;AAAA,OACF;AAAA,IACF,CAAC;AAAA,GACH;AACF;AAEA,SAAS,wBAAwB,SAAA,EAAuD;AACtF,EAAA,MAAM,WAAW,EAAE,GAAA,EAAK,GAAG,QAAA,EAAU,CAAA,EAAG,aAAa,CAAA,EAAE;AACvD,EAAA,OAAO,CAAC,GAAG,SAAS,CAAA,CAAE,IAAA;AAAA,IACpB,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,QAAA,CAAS,CAAA,CAAE,YAAA,CAAa,IAAI,CAAA,IAAK,EAAA,KAAO,QAAA,CAAS,CAAA,CAAE,YAAA,CAAa,IAAI,CAAA,IAAK,EAAA;AAAA,GACtF;AACF;AAEA,SAAS,mBAAmB,SAAA,EAAkE;AAC5F,EAAA,OAAO,SAAA,CAAU,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,IAC5B,IAAA,EAAM,cAAA;AAAA,IACN,YAAY,EAAA,CAAG,UAAA;AAAA,IACf,UAAU,EAAA,CAAG,QAAA;AAAA,IACb,MAAM,EAAA,CAAG;AAAA,GACX,CAAE,CAAA;AACJ;AAEA,SAAS,eAAe,SAAA,EAA6C;AACnE,EAAA,OAAO,SAAA,CAAU,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,IAC5B,IAAI,EAAA,CAAG,UAAA;AAAA,IACP,SAAA,EAAW,GAAG,YAAA,CAAa,IAAA;AAAA,IAC3B,UAAU,EAAA,CAAG,QAAA;AAAA,IACb,MAAM,EAAA,CAAG;AAAA,GACX,CAAE,CAAA;AACJ;AAEA,eAAsB,uBAAA,CAAwB;AAAA,EAC5C,OAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAC5C,EAAA,MAAM,EAAE,UAAS,GAAI,UAAA;AACrB,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,KAAA,EAAO,OAAA,CAAQ,gBAAgB,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAU,CAAA;AAC5F,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,MAAMC,YAAAA,CAAa;AAAA,MAC1B,KAAA;AAAA,MACA,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,oBAAoB,CAAA;AAAA,MAC3C,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,KAAA,EAAO,MAAM,UAAA,CAAW,aAAa,CAAA;AAAA,MACrC,UAAA,EAAY,UAAA;AAAA,MACZ,WAAA,EAAa,WAAA,CAAY,OAAA,CAAQ,OAAA,CAAQ,OAAO;AAAA,KACjD,CAAA;AAAA,EACH,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,MAAM,IAAA,EAAM,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,CAAA;AAC3E,MAAA,OAAOC,KAAAA,CAAM,SAAS,UAAA,EAAY;AAAA,QAChC,MAAA;AAAA,QACA,WAAA,EAAa,CAAC,iBAAA,CAAkB,CAAC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAQ,CAAC,CAAC,CAAA;AAAA,QACrE,OAAO,gBAAA;AAAiB,OACzB,CAAA;AAAA,IACH;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACA,EAAA,MAAM,KAAA,GAAQ,4BAA4B,MAAM,CAAA;AAChD,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,YAAA,EAAa,GAAI,MAAA;AAC1C,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,IAAA,MAAM,MAAA,GAAS,KAAK,SAAA,CAAU;AAAA,MAC5B,KAAA,EAAO,+BAAA;AAAA,MACP,OAAA,EAAS;AAAA,KACV,CAAA;AACD,IAAA,OAAOA,KAAAA,CAAM,SAAS,UAAA,EAAY;AAAA,MAChC,MAAA;AAAA,MACA,WAAA,EAAa,CAAC,iBAAA,CAAkB,CAAC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAQ,CAAC,CAAC,CAAA;AAAA,MACrE;AAAA,KACD,CAAA;AAAA,EACH;AACA,EAAA,MAAM,UAAA,GAAa,MAAMF,kBAAAA,CAAkB,SAAA,EAAW,aAAa,CAAA;AACnE,EAAA,MAAM,MAAA,GAAS,wBAAwB,UAAU,CAAA;AACjD,EAAA,IAAI,YAAA,KAAiB,YAAA,IAAgB,YAAA,KAAiB,MAAA,EAAQ;AAC5D,IAAA,MAAM,aAAA,GAAgB,mBAAmB,MAAM,CAAA;AAC/C,IAAA,MAAM,QAAA,GAAmE,CAAC,GAAG,aAAa,CAAA;AAC1F,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,UAAA,EAAY,MAAM,CAAA;AAAA,IAC1C;AACA,IAAA,MAAM,YAAA,GAAe,eAAe,MAAM,CAAA;AAC1C,IAAA,OAAO,SAAA,CAAU,SAAS,UAAA,EAAY;AAAA,MACpC,UAAA,EAAY,oBAAoB,QAAQ,CAAA;AAAA,MACxC,SAAA,EAAW,YAAA;AAAA,MACX;AAAA,KACD,CAAA;AAAA,EACH;AACA,EAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,IAAA,MAAM,aAAA,GAAgB,OAAO,CAAC,CAAA;AAC9B,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,MAAM,IAAI,MAAM,oBAAoB,CAAA;AAAA,IACtC;AACA,IAAA,MAAM,MAAA,GAAS,KAAK,SAAA,CAAU;AAAA,MAC5B,KAAA,EAAO,oCAAA;AAAA,MACP,OAAA,EAAS;AAAA,KACV,CAAA;AACD,IAAA,OAAOE,KAAAA,CAAM,SAAS,UAAA,EAAY;AAAA,MAChC,MAAA;AAAA,MACA,WAAA,EAAa;AAAA,QACX,mBAAA,CAAoB;AAAA,UAClB;AAAA,YACE,IAAA,EAAM,cAAA;AAAA,YACN,YAAY,aAAA,CAAc,UAAA;AAAA,YAC1B,UAAU,aAAA,CAAc,QAAA;AAAA,YACxB,MAAM,aAAA,CAAc;AAAA;AACtB,SACD,CAAA;AAAA,QACD,iBAAA,CAAkB;AAAA,UAChB;AAAA,YACE,IAAA,EAAM,gBAAA;AAAA,YACN,YAAY,aAAA,CAAc,UAAA;AAAA,YAC1B,UAAU,aAAA,CAAc,QAAA;AAAA,YACxB,UAAU,CAAC,EAAE,MAAM,UAAA,EAAY,IAAA,EAAM,QAAQ;AAAA;AAC/C,SACD;AAAA,OACH;AAAA,MACA,SAAA,EAAW;AAAA,QACT;AAAA,UACE,IAAI,aAAA,CAAc,UAAA;AAAA,UAClB,SAAA,EAAW,cAAc,YAAA,CAAa,IAAA;AAAA,UACtC,UAAU,aAAA,CAAc,QAAA;AAAA,UACxB,MAAM,aAAA,CAAc;AAAA;AACtB,OACF;AAAA,MACA,WAAA,EAAa;AAAA,QACX;AAAA,UACE,IAAI,aAAA,CAAc,UAAA;AAAA,UAClB,SAAA,EAAW,cAAc,YAAA,CAAa,IAAA;AAAA,UACtC,UAAU,aAAA,CAAc,QAAA;AAAA,UACxB,MAAA,EAAQ,CAAC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAIJ,QAAAA,EAAS,EAAG,IAAA,EAAM,MAAA,EAAQ;AAAA;AAC7D,OACF;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AACA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,YAAY,CAAA,CAAE,CAAA;AAC7D;AC7KA,SAAS,mBAAmB,SAAA,EAA2B;AACrD,EAAA,OAAOK,MAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA,sBAAA,EA2Be,IAAI,IAAA,CAAK,SAAS,CAAA,CAAE,aAAa;AAAA,mCAAA,EACpB,OAAA,CAAQ,KAAK;AAAA,EAAA,CAAA;AAElD;AAEO,SAAS,wBAAA,CACd,MAAA,EACA,OAAA,EACA,SAAA,EACoB;AACpB,EAAA,MAAM,WAAA,GAAcA,MAAAA;AAAA;;AAAA;;AAAA,IAAA,EAKhB,kBAAA,CAAmB,SAAS,CAAC;;AAAA;AAAA;;AAAA,IAAA,EAK7B,OAAO,WAAW;;AAAA;AAAA;;AAAA,IAAA,EAKlB,aAAA,CAAc,MAAM,CAAC;;AAAA;AAAA;;AAAA;;AAAA,IAAA,EAOrB,gBAAA,CAAiB,MAAA,EAAQ,OAAO,CAAC;AAAA,EAAA,CAAA;AAErC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAU;AAAA,MACR;AAAA,QACE,IAAIL,QAAAA,EAAS;AAAA,QACb,IAAA,EAAM,UAAA;AAAA,QACN,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,IAAIA,QAAAA,EAAS;AAAA,IACb,KAAA,EAAO;AAAA,GACT;AACF;AAEA,SAAS,cAAc,MAAA,EAAwB;AAC7C,EAAA,OAAO,MAAA,CAAO,OAAO,MAAA,CAAO,MAAM,EAAE,MAAA,CAAO,CAAC,KAAK,KAAA,KAAU;AACzD,IAAA,IAAI,CAAC,MAAM,IAAA,EAAM;AACf,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,OAAOK,MAAAA;AAAA,MAAA,EACH,GAAG;;AAAA,OAAA,EAEF,MAAM,IAAI,CAAA;AAAA,MAAA,EACX,MAAM,IAAI;AAAA,IAAA,CAAA,CACZ,IAAA,EAAK;AAAA,EACT,GAAG,EAAY,CAAA;AACjB;AAEA,SAAS,gBAAA,CAAiB,QAAgB,OAAA,EAAyC;AACjF,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,MAAA,CAAO,CAAC,KAAK,kBAAA,KAAuB;AAC1D,IAAA,MAAM,QAAA,GAAW,QAAQ,kBAAkB,CAAA;AAC3C,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,OAAOA,MAAAA;AAAA,MAAA,EACH,GAAG;;AAAA,aAAA,EAEI,SAAS,IAAI,CAAA;AAAA,MAAA,EACpB,SAAS,WAAW;AAAA,IAAA,CAAA,CACtB,IAAA,EAAK;AAAA,EACT,GAAG,EAAY,CAAA;AACjB;;;ACrGA,eAAsB,SAAA,CAAU;AAAA,EAC9B,OAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAC5C,EAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAQ,GAAI,OAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,QAAQ,SAAS,CAAA;AAChC,EAAA,QAAQ,WAAW,MAAA;AAAQ,IACzB,KAAK,MAAA,EAAQ;AACX,MAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAM;AACvB,QAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,MAC9C;AACA,MAAA,OAAO,QAAA,CAAS,SAAS,UAAA,EAAY;AAAA,QACnC,iBAAA,EAAmB,UAAA;AAAA,QACnB,aAAA,EAAe;AAAA,UACb,wBAAA,CAAyB,MAAA,EAAQ,OAAA,EAAS,OAAA,CAAQ,SAAS,CAAA;AAAA,UAC3D,iBAAA,CAAkB,CAAC,EAAE,IAAA,EAAM,UAAA,EAAY,MAAM,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAM,CAAC;AAAA;AACpE,OACD,CAAA;AAAA,IACH;AAAA,IACA,KAAK,mBAAA;AAAA,IACL,KAAK,0BAAA,EAA4B;AAC/B,MAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,CAAM,yBAAA,EAA2B;AAC5C,QAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,MAC7D;AACA,MAAA,MAAM,EAAE,UAAA,EAAY,QAAA,EAAU,WAAW,IAAA,EAAK,GAAI,QAAQ,KAAA,CAAM,yBAAA;AAChE,MAAA,MAAM,gBAAA,GAAmB,UAAA,CAAW,gBAAA,IAAoB,EAAC;AACzD,MAAA,MAAM,aAAA,GAA4B;AAAA,QAChC,EAAA,EAAI,UAAA;AAAA,QACJ,SAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA,EAAQ,CAAC,EAAE,IAAA,EAAM,YAAY,EAAA,EAAIL,QAAAA,EAAS,EAAG,IAAA,EAAM;AAAA,OACrD;AACA,MAAA,MAAM,wBAAwB,CAAC,GAAI,WAAW,kBAAA,IAAsB,IAAK,aAAa,CAAA;AACtF,MAAA,MAAM,0BAA0B,gBAAA,CAAiB,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,CAAG,OAAO,UAAU,CAAA;AACpF,MAAA,MAAM,iBAAA,GAAoB;AAAA,QACxB,GAAG,UAAA;AAAA,QACH,kBAAA,EAAoB,qBAAA;AAAA,QACpB,gBAAA,EAAkB,uBAAA,CAAwB,MAAA,GAAS,CAAA,GAAI,uBAAA,GAA0B;AAAA,OACnF;AACA,MAAA,OAAO,QAAA,CAAS,SAAS,iBAAA,EAAmB;AAAA,QAC1C,iBAAA,EAAmB,iBAAA;AAAA,QACnB,eAAe;AAAC,OACjB,CAAA;AAAA,IACH;AAAA,IACA;AACE,MAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAM;AACvB,QAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,MAC9C;AACA,MAAA,OAAO,QAAA,CAAS,SAAS,UAAA,EAAY;AAAA,QACnC,iBAAA,EAAmB,UAAA;AAAA,QACnB,aAAA,EAAe,CAAC,iBAAA,CAAkB,CAAC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAM,CAAC,CAAC;AAAA,OACpF,CAAA;AAAA;AAEP;ACvDA,eAAsB,qBAAA,CAAsB;AAAA,EAC1C,OAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAC5C,EAAA,IAAI,UAAA,CAAW,gBAAA,IAAoB,UAAA,CAAW,gBAAA,CAAiB,SAAS,CAAA,EAAG;AACzE,IAAA,OAAO,eAAA,CAAgB,SAAS,UAAA,EAAY;AAAA,MAC1C,kBAAkB,UAAA,CAAW,gBAAA;AAAA,MAC7B,kBAAA,EAAoB,UAAA,CAAW,kBAAA,IAAsB;AAAC,KACvD,CAAA;AAAA,EACH;AACA,EAAA,IAAI,UAAA,CAAW,kBAAA,IAAsB,UAAA,CAAW,kBAAA,CAAmB,SAAS,CAAA,EAAG;AAC7E,IAAA,MAAM,eAAA,GAAkB,UAAA,CAAW,kBAAA,CAAmB,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,MACjE,IAAA,EAAM,gBAAA;AAAA,MACN,YAAY,EAAA,CAAG,EAAA;AAAA,MACf,UAAU,EAAA,CAAG,QAAA;AAAA,MACb,QAAA,EAAU,GAAG,MAAA,CAAO,MAAA;AAAA,QAClB,CAAC,SACC,IAAA,CAAK,IAAA,KAAS,cACd,IAAA,CAAK,IAAA,KAAS,iBAAA,IACd,IAAA,CAAK,IAAA,KAAS;AAAA;AAClB,KACF,CAAE,CAAA;AACF,IAAA,OAAO,kBAAA,CAAmB,SAAS,UAAA,EAAY;AAAA,MAC7C,WAAA,EAAa,CAAC,iBAAA,CAAkB,eAAe,CAAC;AAAA,KACjD,CAAA;AAAA,EACH;AACA,EAAA,OAAO,eAAA,CAAgB,SAAS,UAAA,EAAY;AAAA,IAC1C,UAAU,UAAA,CAAW;AAAA,GACtB,CAAA;AACH;AC7BA,eAAsB,wBAAA,CAAyB;AAAA,EAC7C,OAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAC5C,EAAA,IAAI,CAAC,KAAK,SAAA,IAAa,CAAC,KAAK,WAAA,IAAe,IAAA,CAAK,WAAA,CAAY,MAAA,KAAW,CAAA,EAAG;AACzE,IAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,EACvD;AACA,EAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,CAAC,UAAA,KAAe;AAC3D,IAAA,MAAM,QAAA,GAAW,KAAK,SAAA,EAAW,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,EAAA,KAAO,UAAA,CAAW,EAAE,CAAA;AACrE,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,gBAAA;AAAA,MACN,YAAY,UAAA,CAAW,EAAA;AAAA,MACvB,QAAA,EAAU,QAAA,EAAU,QAAA,IAAY,UAAA,CAAW,QAAA;AAAA,MAC3C,QAAA,EAAU,WAAW,MAAA,CAAO,MAAA;AAAA,QAC1B,CAAC,SACC,IAAA,CAAK,IAAA,KAAS,cACd,IAAA,CAAK,IAAA,KAAS,iBAAA,IACd,IAAA,CAAK,IAAA,KAAS;AAAA;AAClB,KACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,cAAA,CAAe,SAAS,UAAA,EAAY;AAAA,IACzC,WAAA,EAAa,CAAC,iBAAA,CAAkB,eAAe,CAAC;AAAA,GACjD,CAAA;AACH;;;ACzBA,eAAsB,sBAAsB,OAAA,EAAoD;AAC9F,EAAA,OAAO,yBAAyB,OAAO,CAAA;AACzC;;;ACUO,IAAM,sBAAsB,KAAA,CAAM;AAAA,EACvC,KAAA,EAAO;AAAA,IACL,OAAO,EAAC;AAAA,IAMR,SAAS,EAAC;AAAA,IAOV,QAAQ;AAAC;AAEb,CAAC,EAAE,aAAA,CAAc;AAAA;AAAA,EAEf,EAAA,EAAI,KAAA;AAAA,EACJ,OAAA,EAAS,MAAA;AAAA,EACT,OAAA,EAAS,CAAC,EAAE,KAAA,EAAM,MAAO;AAAA,IACvB,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,YAAY,KAAA,CAAM,iBAAA;AAAA,IAClB,IAAA,EAAM;AAAA,MACJ,UAAA,EAAY,MAAM,iBAAA,CAAkB,UAAA;AAAA,MACpC,eAAe,EAAC;AAAA,MAChB,aAAa,EAAC;AAAA,MACd,OAAO,gBAAA,EAAiB;AAAA,MACxB,SAAA,EAAW,KAAK,GAAA;AAAI,KACtB;AAAA,IACA,eAAe,KAAA,CAAM,aAAA;AAAA,IACrB,eAAe,KAAA,CAAM;AAAA,GACvB,CAAA;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI;AAAA,QACF,QAAA,EAAU;AAAA,UACR,MAAA,EAAQ,kBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,OAAA,EAAS,OAAM,MAC3B;AAAA,cACC,GAAG,OAAA,CAAQ,UAAA;AAAA,cACX,MAAA,EAAQ,YAAA;AAAA,cACR,QAAA,EAAU,CAAC,GAAG,OAAA,CAAQ,WAAW,QAAA,EAAU,GAAG,MAAM,aAAa,CAAA;AAAA,cACjE,gBAAA,EAAkB,MAAM,iBAAA,CAAkB,gBAAA;AAAA,cAC1C,kBAAA,EAAoB,MAAM,iBAAA,CAAkB;AAAA,aAC9C,CAAA;AAAA,YACF,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,eAAe,KAAA,CAAM;AAAA,aACvB;AAAA,WACH;AAAA;AACH;AACF,KACF;AAAA,IAEA,gBAAA,EAAkB;AAAA,MAChB,EAAA,EAAI;AAAA,QACF,eAAA,EAAiB;AAAA,UACf,MAAA,EAAQ,oBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,UAAA,EAAY,QAAQ,UAAA,CAAW,UAAA;AAAA,cAC/B,aAAA,EAAe,OAAA,CAAQ,IAAA,CAAK,aAAA,IAAiB,EAAC;AAAA,cAC9C,aAAa,EAAC;AAAA,cACd,OAAO,gBAAA,EAAiB;AAAA,cACxB,WAAW,KAAA,CAAM;AAAA,aACnB;AAAA,WACH;AAAA,SACH;AAAA,QACA,eAAA,EAAiB;AAAA,UACf,MAAA,EAAQ,aAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,UAAA,EAAY,QAAQ,UAAA,CAAW,UAAA;AAAA,cAC/B,aAAA,EAAe,OAAA,CAAQ,IAAA,CAAK,aAAA,IAAiB,EAAC;AAAA,cAC9C,WAAA,EAAa,QAAQ,IAAA,CAAK,WAAA;AAAA,cAC1B,SAAA,EAAW,QAAQ,IAAA,CAAK,SAAA;AAAA,cACxB,aAAa,KAAA,CAAM,kBAAA;AAAA,cACnB,kBAAkB,KAAA,CAAM,gBAAA;AAAA,cACxB,KAAA,EAAO,QAAQ,IAAA,CAAK,KAAA;AAAA,cACpB,SAAA,EAAW,QAAQ,IAAA,CAAK;AAAA,aAC1B;AAAA,WACH;AAAA,SACH;AAAA,QACA,kBAAA,EAAoB;AAAA,UAClB,MAAA,EAAQ,eAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,OAAA,EAAS,OAAM,MAC3B;AAAA,cACC,GAAG,OAAA,CAAQ,UAAA;AAAA,cACX,QAAA,EAAU,CAAC,GAAG,OAAA,CAAQ,WAAW,QAAA,EAAU,GAAG,MAAM,WAAW,CAAA;AAAA,cAC/D,gBAAA,EAAkB,MAAA;AAAA,cAClB,kBAAA,EAAoB;AAAA,aACtB,CAAA;AAAA,YACF,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,WAAA,EAAa,CAAC,GAAG,OAAA,CAAQ,KAAK,WAAA,EAAa,GAAG,MAAM,WAAW,CAAA;AAAA,cAC/D,WAAA,EAAa,QAAQ,UAAA,CAAW,kBAAA;AAAA,cAChC,gBAAA,EAAkB;AAAA,aACpB;AAAA,WACH;AAAA;AACH;AACF,KACF;AAAA,IAEA,kBAAA,EAAoB;AAAA,MAClB,EAAA,EAAI;AAAA,QACF,KAAA,EAAO;AAAA,UACL,MAAA,EAAQ,eAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,OAAA,EAAS,OAAM,MAC3B;AAAA,cACC,GAAG,OAAA,CAAQ,UAAA;AAAA,cACX,QAAA,EAAU,CAAC,GAAG,OAAA,CAAQ,WAAW,QAAA,EAAU,GAAG,MAAM,WAAW,CAAA;AAAA,cAC/D,OAAO,QAAA,CAAS,OAAA,CAAQ,UAAA,CAAW,KAAA,EAAO,MAAM,KAAK;AAAA,aACvD,CAAA;AAAA,YACF,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,aAAa,KAAA,CAAM,WAAA;AAAA,cACnB,WAAW,KAAA,CAAM,SAAA;AAAA,cACjB,aAAa,KAAA,CAAM,WAAA;AAAA,cACnB,OAAO,QAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,MAAM,KAAK;AAAA,aACjD;AAAA,WACH;AAAA,SACH;AAAA,QACA,SAAA,EAAW;AAAA,UACT,MAAA,EAAQ,aAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,OAAA,EAAS,OAAM,MAC3B;AAAA,cACC,GAAG,OAAA,CAAQ,UAAA;AAAA,cACX,UAAU,CAAC,GAAG,QAAQ,UAAA,CAAW,QAAA,EAAU,MAAM,UAAU,CAAA;AAAA,cAC3D,OAAO,QAAA,CAAS,OAAA,CAAQ,UAAA,CAAW,KAAA,EAAO,MAAM,KAAK,CAAA;AAAA,cACrD,kBAAA,EAAoB,OAAA,CAAQ,UAAA,CAAW,aAAA,GACnC,2BAAA,CAA4B,MAAM,KAAA,EAAO,OAAA,CAAQ,UAAA,CAAW,aAAa,CAAA,GACzE;AAAA,aACN,CAAA;AAAA,YACF,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,WAAA,EAAa,CAAC,KAAA,CAAM,UAAU,CAAA;AAAA,cAC9B,WAAW,KAAA,CAAM,SAAA;AAAA,cACjB,OAAO,QAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,MAAM,KAAK;AAAA,aACjD;AAAA,WACH;AAAA,SACH;AAAA,QACA,mBAAA,EAAqB;AAAA,UACnB,MAAA,EAAQ,wBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,OAAA,EAAS,OAAM,MAC3B;AAAA,cACC,GAAG,OAAA,CAAQ,UAAA;AAAA,cACX,UAAU,CAAC,GAAG,QAAQ,UAAA,CAAW,QAAA,EAAU,MAAM,UAAU,CAAA;AAAA,cAC3D,OAAO,QAAA,CAAS,OAAA,CAAQ,UAAA,CAAW,KAAA,EAAO,MAAM,KAAK,CAAA;AAAA,cACrD,kBAAA,EAAoB,OAAA,CAAQ,UAAA,CAAW,aAAA,GACnC,2BAAA,CAA4B,MAAM,KAAA,EAAO,OAAA,CAAQ,UAAA,CAAW,aAAa,CAAA,GACzE;AAAA,aACN,CAAA;AAAA,YACF,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,WAAA,EAAa,CAAC,KAAA,CAAM,UAAU,CAAA;AAAA,cAC9B,SAAA,EAAW,CAAC,KAAA,CAAM,QAAQ,CAAA;AAAA,cAC1B,OAAO,QAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,MAAM,KAAK;AAAA,aACjD;AAAA,WACH;AAAA,SACH;AAAA,QACA,YAAA,EAAc;AAAA,UACZ,MAAA,EAAQ,iBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,OAAA,EAAS,OAAM,MAC3B;AAAA,cACC,GAAG,OAAA,CAAQ,UAAA;AAAA,cACX,UAAU,CAAC,GAAG,QAAQ,UAAA,CAAW,QAAA,EAAU,MAAM,UAAU,CAAA;AAAA,cAC3D,OAAO,QAAA,CAAS,OAAA,CAAQ,UAAA,CAAW,KAAA,EAAO,MAAM,KAAK,CAAA;AAAA,cACrD,kBAAA,EAAoB,OAAA,CAAQ,UAAA,CAAW,aAAA,GACnC,2BAAA,CAA4B,MAAM,KAAA,EAAO,OAAA,CAAQ,UAAA,CAAW,aAAa,CAAA,GACzE;AAAA,aACN,CAAA;AAAA,YACF,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,WAAA,EAAa,CAAC,KAAA,CAAM,UAAU,CAAA;AAAA,cAC9B,WAAW,KAAA,CAAM,SAAA;AAAA,cACjB,OAAO,QAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,MAAM,KAAK;AAAA,aACjD;AAAA,WACH;AAAA;AACH;AACF,KACF;AAAA,IAEA,WAAA,EAAa;AAAA,MACX,EAAA,EAAI;AAAA,QACF,kBAAA,EAAoB;AAAA,UAClB,MAAA,EAAQ,qBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,aAAa,KAAA,CAAM,WAAA;AAAA,cACnB,gBAAA,EAAkB;AAAA,aACpB;AAAA,WACH;AAAA,SACH;AAAA,QACA,cAAA,EAAgB;AAAA,UACd,MAAA,EAAQ,kBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,WAAA,EAAa,CAAC,KAAA,CAAM,UAAU;AAAA,aAChC;AAAA,WACH;AAAA,SACH;AAAA,QACA,iBAAA,EAAmB;AAAA,UACjB,MAAA,EAAQ,qBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,WAAA,EAAa,CAAC,KAAA,CAAM,UAAU;AAAA,aAChC;AAAA,WACH;AAAA,SACH;AAAA,QACA,YAAA,EAAc;AAAA,UACZ,MAAA,EAAQ,iBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,IAAA,EAAM,CAAC,EAAE,OAAA,EAAQ,MACd;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,SAAA,EAAW,QAAQ,IAAA,CAAK,SAAA;AAAA,cACxB,WAAA,EAAa,QAAQ,IAAA,CAAK,WAAA;AAAA,cAC1B,gBAAA,EAAkB,QAAQ,IAAA,CAAK,gBAAA;AAAA,cAC/B,kBAAA,EAAoB,QAAQ,IAAA,CAAK;AAAA,aACnC;AAAA,WACH;AAAA,SACH;AAAA,QACA,mBAAA,EAAqB;AAAA,UACnB,MAAA,EAAQ,wBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,IAAA,EAAM,CAAC,EAAE,OAAA,EAAQ,MACd;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,SAAA,EAAW,QAAQ,IAAA,CAAK,SAAA;AAAA,cACxB,WAAA,EAAa,QAAQ,IAAA,CAAK,WAAA;AAAA,cAC1B,gBAAA,EAAkB,QAAQ,IAAA,CAAK,gBAAA;AAAA,cAC/B,kBAAA,EAAoB,QAAQ,IAAA,CAAK;AAAA,aACnC;AAAA,WACH;AAAA;AACH;AACF,KACF;AAAA,IAEA,mBAAA,EAAqB;AAAA,MACnB,EAAA,EAAI;AAAA,QACF,cAAA,EAAgB;AAAA,UACd,MAAA,EAAQ,eAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,OAAA,EAAS,OAAM,MAC3B;AAAA,cACC,GAAG,OAAA,CAAQ,UAAA;AAAA,cACX,QAAA,EAAU,CAAC,GAAG,OAAA,CAAQ,WAAW,QAAA,EAAU,GAAG,MAAM,WAAW;AAAA,aACjE,CAAA;AAAA,YACF,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,WAAA,EAAa,CAAC,GAAG,OAAA,CAAQ,KAAK,WAAA,EAAa,GAAG,MAAM,WAAW;AAAA,aACjE;AAAA,WACH;AAAA;AACH;AACF,KACF;AAAA,IAEA,gBAAA,EAAkB;AAAA,MAChB,EAAA,EAAI;AAAA,QACF,cAAA,EAAgB;AAAA,UACd,MAAA,EAAQ,eAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,OAAA,EAAS,OAAM,MAC3B;AAAA,cACC,GAAG,OAAA,CAAQ,UAAA;AAAA,cACX,QAAA,EAAU,CAAC,GAAG,OAAA,CAAQ,WAAW,QAAA,EAAU,GAAG,MAAM,WAAW;AAAA,aACjE,CAAA;AAAA,YACF,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,WAAA,EAAa,CAAC,GAAG,OAAA,CAAQ,KAAK,WAAA,EAAa,GAAG,MAAM,WAAW;AAAA,aACjE;AAAA,WACH;AAAA;AACH;AACF,KACF;AAAA,IAEA,mBAAA,EAAqB;AAAA,MACnB,EAAA,EAAI;AAAA,QACF,KAAA,EAAO;AAAA,UACL,MAAA,EAAQ,eAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,OAAA,EAAS,OAAM,MAC3B;AAAA,cACC,GAAG,OAAA,CAAQ,UAAA;AAAA,cACX,QAAA,EAAU,CAAC,GAAG,OAAA,CAAQ,WAAW,QAAA,EAAU,GAAG,MAAM,WAAW,CAAA;AAAA,cAC/D,OAAO,QAAA,CAAS,OAAA,CAAQ,UAAA,CAAW,KAAA,EAAO,MAAM,KAAK;AAAA,aACvD,CAAA;AAAA,YACF,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,aAAa,KAAA,CAAM,WAAA;AAAA,cACnB,WAAW,KAAA,CAAM,SAAA;AAAA,cACjB,aAAa,KAAA,CAAM,WAAA;AAAA,cACnB,OAAO,QAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,MAAM,KAAK;AAAA,aACjD;AAAA,WACH;AAAA,SACH;AAAA,QACA,WAAA,EAAa;AAAA,UACX,MAAA,EAAQ,SAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,KAAA,OAAY,KAAA,CAAM,UAAA;AAAA,YACjC,IAAA,EAAM,CAAC,EAAE,KAAA,EAAM,MAAO;AAAA,cACpB,GAAG,KAAA,CAAM,IAAA;AAAA,cACT,aAAA,EAAe;AAAA,aACjB;AAAA,WACD;AAAA;AACH;AACF,KACF;AAAA,IAEA,sBAAA,EAAwB;AAAA,MACtB,EAAA,EAAI;AAAA,QACF,wBAAA,EAA0B;AAAA,UACxB,MAAA,EAAQ,SAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,KAAA,OAAY,KAAA,CAAM,UAAA;AAAA,YACjC,IAAA,EAAM,CAAC,EAAE,KAAA,EAAM,MAAO;AAAA,cACpB,GAAG,KAAA,CAAM,IAAA;AAAA,cACT,aAAA,EAAe;AAAA,aACjB;AAAA,WACD;AAAA;AACH;AACF,KACF;AAAA,IAEA,eAAA,EAAiB;AAAA,MACf,EAAA,EAAI;AAAA,QACF,iBAAA,EAAmB;AAAA,UACjB,MAAA,EAAQ,SAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,KAAA,OAAY,KAAA,CAAM,UAAA;AAAA,YACjC,IAAA,EAAM,CAAC,EAAE,KAAA,EAAM,MAAO;AAAA,cACpB,GAAG,KAAA,CAAM,IAAA;AAAA,cACT,aAAA,EAAe;AAAA,aACjB;AAAA,WACD;AAAA;AACH;AACF,KACF;AAAA,IAEA,aAAA,EAAe;AAAA,MACb,EAAA,EAAI;AAAA,QACF,kBAAA,EAAoB;AAAA,UAClB,MAAA,EAAQ,kBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,KAAA,OAAY,KAAA,CAAM,cAAA;AAAA,YACjC,IAAA,EAAM,CAAC,EAAE,KAAA,EAAM,MAAO;AAAA,cACpB,GAAG,KAAA,CAAM,IAAA;AAAA,cACT,aAAA,EAAe;AAAA,aACjB;AAAA,WACD,CAAA;AAAA,UACD,OAAA,EAAS;AAAA,SACX;AAAA,QACA,yBAAA,EAA2B;AAAA,UACzB,MAAA,EAAQ,SAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,KAAA,OAAY,KAAA,CAAM,UAAA;AAAA,YACjC,IAAA,EAAM,CAAC,EAAE,KAAA,EAAM,MAAO;AAAA,cACpB,GAAG,KAAA,CAAM,IAAA;AAAA,cACT,aAAA,EAAe;AAAA,aACjB;AAAA,WACD;AAAA;AACH;AACF,KACF;AAAA,IAEA,OAAA,EAAS;AAAA,MACP,IAAA,EAAM;AAAA;AACR;AAEJ,CAAC;AAEM,IAAM,kBAAA,GAGT;AAAA,EACF,IAAA,EAAM,SAAA;AAAA,EACN,gBAAA,EAAkB,qBAAA;AAAA,EAClB,kBAAA,EAAoB,uBAAA;AAAA,EACpB,WAAA,EAAa,gBAAA;AAAA,EACb,mBAAA,EAAqB,wBAAA;AAAA,EACrB,gBAAA,EAAkB,qBAAA;AAAA,EAClB,mBAAA,EAAqB,wBAAA;AAAA,EACrB,sBAAA,EAAwB,2BAAA;AAAA,EACxB,eAAA,EAAiB,oBAAA;AAAA,EACjB,aAAA,EAAe;AACjB,CAAA;AC1ZO,IAAM,sBAAN,MAAkD;AAAA,EACvD,OAAO,KAAA,EAA6B;AAClC,IAAA,OAAO,WAAA,CAAY,qBAAqB,KAAK,CAAA;AAAA,EAC/C;AACF,CAAA;AAKO,IAAM,mBAAA,GAAsB,IAAI,mBAAA,EAAoB;;;ACGpD,IAAM,0BAAN,MAA8B;AAAA,EASnC,WAAA,CACmB,MAAA,EACjB,IAAA,GAAgC,EAAC,EACjC;AAFiB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAGjB,IAAA,IAAA,CAAK,YAAA,GAAe,KAAK,YAAA,IAAgB,mBAAA;AACzC,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAK,kBAAA,IAAsB,kBAAA;AAChD,IAAA,IAAA,CAAK,MAAA,GAAS,KAAK,MAAA,IAAU,kBAAA;AAAA,EAC/B;AAAA,EAfiB,YAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EAET,KAAA,GAAyB,IAAA;AAAA,EACzB,cAAA,GAA4D,IAAA;AAAA,EAC5D,aAAA,GAAiD,IAAA;AAAA;AAAA;AAAA;AAAA,EAczD,MAAM,OAAA,GAA+B;AACnC,IAAA,MAAM,EAAE,OAAA,EAAS,iBAAA,EAAmB,aAAA,EAAe,aAAA,KAAkB,IAAA,CAAK,MAAA;AAE1E,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO;AAAA,MACpC,KAAA,EAAO;AAAA,QACL,OAAA;AAAA,QACA,iBAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA;AACF,KACD,CAAA;AAED,IAAA,OAAO,IAAI,OAAA,CAAoB,CAAC,OAAA,EAAS,MAAA,KAAW;AAClD,MAAA,IAAA,CAAK,cAAA,GAAiB,OAAA;AACtB,MAAA,IAAA,CAAK,aAAA,GAAgB,MAAA;AAErB,MAAA,IAAA,CAAK,KAAA,CAAO,SAAA,CAAU,CAAC,QAAA,KAAa;AAClC,QAAA,IAAA,CAAK,iBAAA,CAAkB,QAAQ,CAAA,CAAE,KAAA,CAAM,CAAC,KAAA,KAAU;AAChD,UAAA,IAAA,CAAK,YAAY,KAAK,CAAA;AAAA,QACxB,CAAC,CAAA;AAAA,MACH,CAAC,CAAA;AAED,MAAA,IAAA,CAAK,MAAO,KAAA,EAAM;AAAA,IACpB,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,kBAAkB,QAAA,EAAsC;AAC5D,IAAA,IAAI,QAAA,CAAS,UAAU,SAAA,EAAW;AAChC,MAAA,MAAM,IAAA,CAAK,mBAAmB,QAAQ,CAAA;AAAA,IACxC,CAAA,MAAO;AACL,MAAA,MAAM,IAAA,CAAK,kBAAkB,QAAQ,CAAA;AAAA,IACvC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,mBAAmB,QAAA,EAAsC;AACrE,IAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAc,GAAI,QAAA,CAAS,OAAA;AAE/C,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,IAC3C;AAEA,IAAA,MAAM,IAAA,CAAK,cAAc,aAAa,CAAA;AACtC,IAAA,IAAA,CAAK,iBAAiB,UAAU,CAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,kBAAkB,QAAA,EAAsC;AACpE,IAAA,MAAM,EAAE,YAAA,EAAc,eAAA,EAAiB,iBAAA,KAAsB,IAAA,CAAK,MAAA;AAClE,IAAA,MAAM,aAAa,QAAA,CAAS,KAAA;AAE5B,IAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,OAAO,UAAU,CAAA,CAAE,SAAS,OAAO,CAAA;AAE5D,IAAA,IAAI,gBAAgB,KAAA,EAAO;AACzB,MAAA,MAAM,eAAA,CAAgB,MAAM,UAAU,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,YAAA,CAAa,KAAK,KAAK,CAAA;AAE7B,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,MAAM,iBAAiB,MAAM,iBAAA;AAAA,QAC3B,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,SAAS,OAAA,CAAQ,UAAA;AAAA,QACjB,SAAS,OAAA,CAAQ;AAAA,OACnB;AAEA,MAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,QAAA,IAAA,CAAK,OAAO,IAAA,EAAK;AACjB,QAAA,MAAM,IAAA,CAAK,aAAA,CAAc,QAAA,CAAS,OAAA,CAAQ,aAAa,CAAA;AACvD,QAAA,IAAA,CAAK,cAAA,GAAiB,QAAA,CAAS,OAAA,CAAQ,UAAU,CAAA;AACjD,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,KAAA,EAAO,KAAK,KAAK,CAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,YAAY,KAAA,EAA+B;AACvD,IAAA,MAAM,KAAK,aAAA,CAAc,IAAA,CAAK,OAAO,aAAa,CAAA,CAAE,MAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AAClE,IAAA,IAAA,CAAK,aAAA,GAAgB,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA;AAAA,EAChF;AACF,CAAA;;;AC1HA,eAAsB,oBAAoB,MAAA,EAAwD;AAChG,EAAA,MAAM,WAAA,GAAc,IAAI,uBAAA,CAAwB,MAAM,CAAA;AACtD,EAAA,OAAO,YAAY,OAAA,EAAQ;AAC7B;;;ACXO,SAAS,uBAAA,CACd,cACA,MAAA,EACY;AACZ,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,YAAA;AAAA,IACJ,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,MAAA,EAAQ;AAAA,MACN,KAAK,MAAA,CAAO,SAAA;AAAA,MACZ,IAAA,EAAM,OAAO,MAAA,CAAO,IAAA;AAAA,MACpB,OAAA,EAAS,OAAO,MAAA,CAAO;AAAA,KACzB;AAAA,IACA,UAAA,EAAY,CAAA;AAAA,IACZ,MAAA,EAAQ,MAAA;AAAA,IACR,UAAU,EAAC;AAAA,IACX,OAAO,gBAAA,EAAiB;AAAA,IACxB,eAAe,MAAA,CAAO,aAAA;AAAA,IACtB,kBAAA,EAAoB,MAAA,CAAO,aAAA,GAAgB,CAAA,GAAM;AAAA,GACnD;AACF;AAEO,SAAS,wBAAA,CAAyB,cAAsB,UAAA,EAAoC;AACjG,EAAA,OAAO;AAAA,IACL,GAAG,UAAA;AAAA,IACH,EAAA,EAAI,YAAA;AAAA,IACJ,UAAA,EAAY,WAAW,UAAA,GAAa;AAAA,GACtC;AACF;AAOO,SAAS,0BAAA,CACd,cAAA,EACA,gBAAA,EACA,gBAAA,EACuB;AACvB,EAAA,MAAM,EAAE,QAAA,EAAU,WAAA,EAAY,GAAI,gBAAA;AAClC,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAAA,EAC1E;AACA,EAAA,MAAM,qBAAA,GAAwB,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAC1D,EAAA,IAAI,CAAC,qBAAA,IAAyB,qBAAA,CAAsB,IAAA,KAAS,eAAA,EAAiB;AAC5E,IAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,EAC5E;AACA,EAAA,MAAM,YAAA,GAAe,sBAAsB,QAAA,CAAS,IAAA,CAAK,CAAC,OAAA,KAAY,OAAA,CAAQ,SAAS,UAAU,CAAA;AACjG,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,MAAM,IAAI,MAAM,qEAAqE,CAAA;AAAA,EACvF;AACA,EAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAS,GAAI,WAAA;AACzC,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP,GAAG,cAAA;AAAA,MACH,WAAW,MAAA,CAAO,GAAA;AAAA,MAClB,KAAA,EAAO;AAAA,QACL,yBAAA,EAA2B;AAAA,UACzB,UAAA;AAAA,UACA,QAAA;AAAA,UACA,SAAA,EAAW,CAAA,SAAA,EAAY,gBAAA,CAAiB,MAAA,CAAO,GAAG,CAAA,CAAA;AAAA,UAClD,MAAM,YAAA,CAAa;AAAA;AACrB;AACF,KACF;AAAA,IACA,UAAA,EAAY;AAAA,MACV,GAAG,gBAAA;AAAA,MACH,YAAY,gBAAA,CAAiB,UAAA;AAAA,MAC7B,OAAO,gBAAA,CAAiB,KAAA;AAAA,MACxB,kBAAkB,gBAAA,CAAiB,gBAAA;AAAA,MACnC,oBAAoB,gBAAA,CAAiB;AAAA;AACvC,GACF;AACF;AClFA,eAAsB,kBAAA,CACpB,SAAA,EACA,OAAA,EACA,aAAA,EAIiB;AACjB,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,QAAQ,SAAS,CAAA;AAAA,EAC1B;AACA,EAAA,MAAM,MAAA,GAAS,IAAI,WAAA,CAAY;AAAA,IAC7B,SAAS,aAAA,CAAc,kBAAA;AAAA,IACvB,QAAQ,aAAA,CAAc;AAAA,GACvB,CAAA;AACD,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,MAAM,MAAA,CAAO,SAAS,OAAA,CAAQ,GAAA,CAAI,EAAE,SAAA,EAAW,CAAA;AAClE,EAAA,OAAO,gBAAgB,MAAM,CAAA;AAC/B;AAEA,SAAS,gBAAgB,MAAA,EAAmC;AAC1D,EAAA,MAAM,SAAgC,MAAA,CAAO,WAAA;AAAA,IAC3C,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,CAAE,IAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAAM;AACnD,MAAA,QAAQ,MAAM,IAAA;AAAM,QAClB,KAAK,eAAA;AACH,UAAA,OAAO,CAAC,IAAA,EAAM,EAAE,GAAG,KAAA,EAAO,MAAM,CAAA;AAAA,QAClC,KAAK,aAAA;AACH,UAAA,OAAO,CAAC,IAAA,EAAM,EAAE,GAAG,KAAA,EAAO,MAAM,CAAA;AAAA,QAClC,KAAK,kBAAA;AACH,UAAA,OAAO,CAAC,IAAA,EAAM,EAAE,GAAG,KAAA,EAAO,MAAM,CAAA;AAAA,QAClC,SAAS;AACP,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAwB,KAAA,CAA2B,IAAI,CAAA,CAAE,CAAA;AAAA,QAC3E;AAAA;AACF,IACF,CAAC;AAAA,GACH;AACA,EAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAO;AAC7B;;;ACzBA,eAAsB,YAAA,CACpB,OAAA,EACAM,mBAAAA,GAA2C,kBAAA,EACd;AAC7B,EAAA,MAAM,EAAE,WAAU,GAAI,OAAA;AACtB,EAAA,MAAM,OAAA,GAAU,EAAE,GAAG,OAAA,CAAQ,OAAA,EAAQ;AACrC,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,oBAAoB,OAAA,CAAQ,kBAAA;AAAA,IAC5B,gBAAgB,OAAA,CAAQ;AAAA,GAC1B;AACA,EAAA,MAAM,WAAA,GAAc,MAAMA,mBAAAA,CAAmB,SAAA,EAAW,SAAS,aAAa,CAAA;AAC9E,EAAA,OAAA,CAAQ,SAAS,CAAA,GAAI,WAAA;AACrB,EAAA,KAAA,MAAW,YAAA,IAAgB,YAAY,SAAA,EAAW;AAChD,IAAA,MAAM,QAAA,GAAW,MAAMA,mBAAAA,CAAmB,YAAA,EAAc,SAAS,aAAa,CAAA;AAC9E,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,YAAY,CAAA,UAAA,CAAY,CAAA;AAAA,IACtD;AACA,IAAA,OAAA,CAAQ,YAAY,CAAA,GAAI,QAAA;AAAA,EAC1B;AACA,EAAA,OAAO,EAAE,aAAa,OAAA,EAAQ;AAChC;ACiEO,IAAM,2BAAN,MAA6D;AAAA,EAClE,MAAM,OAAA,CACJ,WAAA,EACA,SACA,OAAA,EACA,YAAA,EACA,QACA,cAAA,EACoC;AACpC,IAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,MAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,IAC5E;AAGA,IAAA,MAAM,UAAA,GAAa,YAAY,CAAC,CAAA;AAChC,IAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,OAAM,GAAI,UAAA;AAEhD,IAAA,MAAM,WAAA,GAA0B;AAAA,MAC9B,GAAG,OAAA;AAAA,MACH,WAAW,MAAA,CAAO,GAAA;AAAA,MAClB,KAAA,EAAO,EAAE,IAAA,EAAM,KAAA;AAAM,KACvB;AAEA,IAAA,MAAM,cAAA,GAA6B;AAAA,MACjC,IAAI,OAAA,CAAQ,EAAA;AAAA,MACZ,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,UAAU,EAAC;AAAA;AAAA,MACX,MAAA,EAAQ;AAAA,QACN,KAAK,MAAA,CAAO,GAAA;AAAA,QACZ,MAAM,MAAA,CAAO,IAAA;AAAA,QACb,SAAS,MAAA,CAAO;AAAA,OAClB;AAAA,MACA,WAAA,EAAa;AAAA,QACX,MAAA,EAAQ;AAAA,UACN,KAAK,YAAA,CAAa,GAAA;AAAA,UAClB,MAAM,YAAA,CAAa,IAAA;AAAA,UACnB,SAAS,YAAA,CAAa;AAAA,SACxB;AAAA,QACA,UAAA;AAAA,QACA,QAAA;AAAA,QACA,cAAc,OAAA,CAAQ;AAAA,OACxB;AAAA,MACA,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,eAAe,OAAA,CAAQ,aAAA;AAAA,MACvB,gBAAA,EAAkB,MAAA;AAAA,MAClB,kBAAA,EAAoB;AAAA,KACtB;AAEA,IAAA,OAAO,EAAE,aAAa,cAAA,EAAe;AAAA,EACvC;AACF,CAAA;AAKO,IAAM,6BAAN,MAA+D;AAAA,EACpE,MAAM,OAAA,CACJ,WAAA,EACA,SACA,OAAA,EACA,YAAA,EACA,OACA,aAAA,EACoC;AACpC,IAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,MAAM,8DAA8D,CAAA;AAAA,IAChF;AAEA,IAAA,MAAM,CAAC,eAAA,EAAiB,GAAG,oBAAoB,CAAA,GAAI,WAAA;AACnD,IAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,MAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AAAA,IACxC;AAGA,IAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC/B,WAAA,CAAY,GAAA;AAAA,QAAI,CAAC,eACf,IAAA,CAAK,uBAAA;AAAA,UACH,UAAA;AAAA,UACA,OAAA;AAAA,UACA,OAAA;AAAA,UACA,YAAA;AAAA,UACA,KAAA;AAAA,UACA;AAAA;AACF;AACF,KACF;AAEA,IAAA,MAAM,CAAC,WAAA,EAAa,GAAG,WAAW,CAAA,GAAI,UAAA;AACtC,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAGA,IAAA,MAAM,kBAAkB,UAAA,CAAW,MAAA;AAAA,MACjC,CAAC,GAAA,EAAK,MAAA,KAAW,QAAA,CAAS,GAAA,EAAK,OAAO,UAAU,CAAA;AAAA,MAChD,OAAA,CAAQ;AAAA,KACV;AAEA,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,GAAA,CAAI,GAAG,UAAA,CAAW,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAC,CAAA;AAErE,IAAA,MAAM,eAAA,GAAgC,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,MACjE,IAAI,MAAA,CAAO,UAAA;AAAA,MACX,SAAA,EAAW,CAAA,SAAA,EAAY,MAAA,CAAO,SAAS,CAAA,CAAA;AAAA,MACvC,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,MAAA,EAAQ,CAAC,EAAE,IAAA,EAAM,UAAA,EAAY,EAAA,EAAIN,QAAAA,EAAS,EAAG,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM;AAAA,KAClE,CAAE,CAAA;AAEF,IAAA,MAAM,oBAAA,GAAuB,IAAI,GAAA,CAAI,oBAAA,CAAqB,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAC,CAAA;AAClF,IAAA,MAAM,yBAAA,GAA4B,QAAQ,gBAAA,EAAkB,MAAA;AAAA,MAC1D,CAAC,EAAA,KAAO,CAAC,oBAAA,CAAqB,GAAA,CAAI,GAAG,EAAE,CAAA,IAAK,EAAA,CAAG,EAAA,KAAO,eAAA,CAAgB;AAAA,KACxE;AAEA,IAAA,MAAM,WAAA,GAA0B;AAAA,MAC9B,GAAG,OAAA;AAAA,MACH,WAAW,YAAA,CAAa,GAAA;AAAA,MACxB,KAAA,EAAO;AAAA,QACL,yBAAA,EAA2B;AAAA,UACzB,YAAY,WAAA,CAAY,UAAA;AAAA,UACxB,UAAU,WAAA,CAAY,QAAA;AAAA,UACtB,SAAA,EAAW,CAAA,SAAA,EAAY,WAAA,CAAY,SAAS,CAAA,CAAA;AAAA,UAC5C,MAAM,WAAA,CAAY;AAAA;AACpB;AACF,KACF;AAGA,IAAA,MAAM,cAAA,GAA6B;AAAA,MACjC,IAAI,OAAA,CAAQ,EAAA;AAAA,MACZ,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,MAAA,EAAQ,mBAAA;AAAA,MACR,UAAA,EAAY,aAAA;AAAA,MACZ,UAAU,OAAA,CAAQ,QAAA;AAAA;AAAA,MAClB,MAAA,EAAQ;AAAA,QACN,KAAK,YAAA,CAAa,GAAA;AAAA,QAClB,MAAM,YAAA,CAAa,IAAA;AAAA,QACnB,SAAS,YAAA,CAAa;AAAA,OACxB;AAAA,MACA,KAAA,EAAO,eAAA;AAAA,MACP,eAAe,OAAA,CAAQ,aAAA;AAAA,MACvB,aAAa,OAAA,CAAQ,WAAA;AAAA;AAAA,MACrB,UAAA,EAAY,MAAA;AAAA,MACZ,gBAAA,EAAkB,yBAAA,EAA2B,MAAA,GAAS,yBAAA,GAA4B,MAAA;AAAA,MAClF,kBAAA,EAAoB,CAAC,GAAI,OAAA,CAAQ,sBAAsB,EAAC,EAAI,GAAG,eAAe;AAAA,KAChF;AAEA,IAAA,OAAO,EAAE,aAAa,cAAA,EAAe;AAAA,EACvC;AAAA,EAEA,MAAc,uBAAA,CACZ,UAAA,EACA,eACA,aAAA,EACA,YAAA,EACA,OACA,aAAA,EAC2B;AAC3B,IAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,OAAM,GAAI,UAAA;AAChD,IAAA,MAAM,gBAAgBA,QAAAA,EAAS;AAE/B,IAAA,MAAM,eAAA,GAA8B;AAAA,MAClC,GAAG,aAAA;AAAA,MACH,KAAA,EAAO,aAAA;AAAA,MACP,WAAW,MAAA,CAAO,GAAA;AAAA,MAClB,KAAA,EAAO,EAAE,IAAA,EAAM,KAAA;AAAM,KACvB;AAEA,IAAA,MAAM,kBAAA,GAAiC;AAAA,MACrC,IAAIA,QAAAA,EAAS;AAAA,MACb,OAAO,aAAA,CAAc,KAAA;AAAA,MACrB,KAAA,EAAO,aAAA;AAAA,MACP,MAAA,EAAQ,MAAA;AAAA,MACR,YAAY,aAAA,CAAc,UAAA;AAAA,MAC1B,UAAU,EAAC;AAAA;AAAA,MACX,MAAA,EAAQ;AAAA,QACN,KAAK,MAAA,CAAO,GAAA;AAAA,QACZ,MAAM,MAAA,CAAO,IAAA;AAAA,QACb,SAAS,MAAA,CAAO;AAAA,OAClB;AAAA,MACA,WAAA,EAAa;AAAA,QACX,MAAA,EAAQ;AAAA,UACN,KAAK,YAAA,CAAa,GAAA;AAAA,UAClB,MAAM,YAAA,CAAa,IAAA;AAAA,UACnB,SAAS,YAAA,CAAa;AAAA,SACxB;AAAA,QACA,UAAA;AAAA,QACA,QAAA;AAAA,QACA,cAAc,aAAA,CAAc;AAAA,OAC9B;AAAA,MACA,OAAO,gBAAA,EAAiB;AAAA,MACxB,eAAe,aAAA,CAAc;AAAA,KAC/B;AAIA,IAAA,MAAM,mBAAmB,MAAM,KAAA;AAAA,MAC7B,EAAE,OAAA,EAAS,eAAA,EAAiB,UAAA,EAAY,kBAAA,EAAmB;AAAA,MAC3D,EAAE,GAAG,aAAA,EAAe,0BAAA,EAA4B,IAAA;AAAK,KACvD;AAEA,IAAA,OAAO,KAAK,uBAAA,CAAwB,gBAAA,EAAkB,UAAA,EAAY,QAAA,EAAU,OAAO,GAAG,CAAA;AAAA,EACxF;AAAA,EAEQ,uBAAA,CACN,UAAA,EACA,UAAA,EACA,QAAA,EACA,SAAA,EACkB;AAClB,IAAA,MAAM,cAAc,UAAA,CAAW,QAAA,CAAS,UAAA,CAAW,QAAA,CAAS,SAAS,CAAC,CAAA;AACtE,IAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,IAAA,KAAS,eAAA,EAAiB;AACxD,MAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,IAC5E;AAEA,IAAA,MAAM,QAAA,GAAW,YAAY,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,UAAU,CAAA;AACvE,IAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,IAAA,KAAS,UAAA,EAAY;AAC7C,MAAA,MAAM,IAAI,MAAM,mEAAmE,CAAA;AAAA,IACrF;AAEA,IAAA,OAAO;AAAA,MACL,UAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAM,QAAA,CAAS,IAAA;AAAA,MACf,YAAY,UAAA,CAAW,UAAA;AAAA,MACvB,YAAY,UAAA,CAAW;AAAA,KACzB;AAAA,EACF;AACF,CAAA;AAKO,SAAS,yBAAyB,eAAA,EAA6C;AACpF,EAAA,IAAI,oBAAoB,CAAA,EAAG;AACzB,IAAA,OAAO,IAAI,wBAAA,EAAyB;AAAA,EACtC;AACA,EAAA,OAAO,IAAI,0BAAA,EAA2B;AACxC;AAKO,SAAS,yBAAA,CACd,cAAA,EACA,gBAAA,EACA,gBAAA,EACuB;AACvB,EAAA,OAAO,0BAAA,CAA2B,cAAA,EAAgB,gBAAA,EAAkB,gBAAgB,CAAA;AACtF;AAKO,SAAS,yBAAyB,UAAA,EAA2C;AAClF,EAAA,OAAO;AAAA,IACL,IAAI,UAAA,CAAW,EAAA;AAAA,IACf,YAAY,UAAA,CAAW,UAAA;AAAA,IACvB,eAAe,UAAA,CAAW,aAAA;AAAA,IAC1B,OAAO,UAAA,CAAW,KAAA;AAAA,IAClB,kBAAkB,UAAA,CAAW,gBAAA;AAAA,IAC7B,oBAAoB,UAAA,CAAW,kBAAA;AAAA,IAC/B,aAAa,UAAA,CAAW,WAAA;AAAA;AAAA,IACxB,UAAU,UAAA,CAAW;AAAA;AAAA,GACvB;AACF;AC5WO,IAAM,kBAAN,MAAsB;AAAA,EACnB,YAAoD,EAAC;AAAA,EAE7D,UAAU,QAAA,EAA8C;AACtD,IAAA,IAAA,CAAK,SAAA,CAAU,KAAK,QAAQ,CAAA;AAAA,EAC9B;AAAA,EAEA,MAAM,KAAK,KAAA,EAAiB;AAC1B,IAAA,MAAM,SAAkB,EAAC;AACzB,IAAA,KAAA,MAAW,QAAA,IAAY,KAAK,SAAA,EAAW;AACrC,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,CAAS;AAAA,UACb,GAAG,KAAA;AAAA,UACH,IAAIA,QAAAA,EAAS;AAAA,UACb,SAAA,EAAW,KAAK,GAAA;AAAI,SACrB,CAAA;AAAA,MACH,SAAS,KAAA,EAAO;AACd,QAAA,MAAA,CAAO,IAAA,CAAK,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA;AAAA,MACvE;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,MAAA,MAAM,IAAI,cAAA,CAAe,MAAA,EAAQ,oCAAoC,CAAA;AAAA,IACvE;AAAA,EACF;AACF,CAAA;;;ACgBO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,WAAA,CAAoB,OAAA,GAAoC,EAAC,EAAG;AAAxC,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EAAyC;AAAA,EAE7D,MAAM,OAAA,CAAQ,OAAA,EAAqB,UAAA,EAAmD;AACpF,IAAA,MAAM,gBAAgB,gBAAA,CAAiB,OAAA,CAAQ,cAAA,CAAe,YAAA,EAAc,QAAQ,KAAK,CAAA;AACzF,IAAA,MAAM,EAAE,aAAa,OAAA,EAAQ,GAAI,MAAM,YAAA,CAAa,OAAA,EAAS,IAAA,CAAK,OAAA,CAAQ,kBAAkB,CAAA;AAE5F,IAAA,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,WAAA,EAAa,OAAO,CAAA;AAEhD,IAAA,MAAM,gBAAgB,MAAM,gBAAA;AAAA,MAC1B,WAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAK,OAAA,CAAQ,aAAA;AAAA,MACb,EAAE,cAAA,EAAgB,CAAC,CAAC,YAAY,WAAA;AAAY,KAC9C;AAEA,IAAA,MAAM,iBAAA,GAAoB,aACtB,wBAAA,CAAyBA,QAAAA,IAAY,UAAU,CAAA,GAC/C,uBAAA,CAAwBA,QAAAA,EAAS,EAAG;AAAA,MAClC,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,MAAA,EAAQ,WAAA;AAAA,MACR;AAAA,KACD,CAAA;AAEL,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,MAAM,aAAA,GAAgB,KAAK,mBAAA,EAAoB;AAC/C,IAAA,YAAA,CAAa,UAAU,aAAa,CAAA;AAEpC,IAAA,MAAM,gBAAA,GAAmB,MAAM,mBAAA,CAAoB;AAAA,MACjD,OAAA,EAAS,EAAE,GAAG,OAAA,EAAS,OAAA,EAAQ;AAAA,MAC/B,iBAAA;AAAA,MACA,aAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA;AAAA,MACA,eAAA,EAAiB,IAAA,CAAK,OAAA,CAAQ,eAAA,KAAoB,YAAY;AAAA,MAAC,CAAA,CAAA;AAAA,MAC/D,iBAAA,EAAmB,KAAK,OAAA,CAAQ;AAAA,KACjC,CAAA;AAED,IAAA,OAAO,EAAE,UAAA,EAAY,gBAAA,EAAkB,WAAA,EAAa,OAAA,EAAQ;AAAA,EAC9D;AAAA,EAEQ,mBAAA,GAAyE;AAC/E,IAAA,MAAM,YAAA,GAAe,KAAK,OAAA,CAAQ,aAAA;AAClC,IAAA,MAAM,UAAA,GAAa,KAAK,OAAA,CAAQ,UAAA;AAChC,IAAA,OAAO,OAAO,KAAA,KAAmC;AAE/C,MAAA,IAAI,YAAA,IAAgB,SAAS,UAAA,EAAY;AACvC,QAAA,MAAM,WAAW,KAAiB,CAAA;AAAA,MACpC;AACA,MAAA,YAAA,GAAe,KAAK,CAAA;AAAA,IACtB,CAAA;AAAA,EACF;AAAA,EAEQ,aAAA,CACN,OAAA,EACA,WAAA,EACA,OAAA,EACM;AACN,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,aAAA,EAAe;AAEjC,IAAA,MAAM,YAAYO,kBAAAA,CAAmB,mBAAA,EAAqB,OAAA,CAAQ,KAAA,EAAO,QAAQ,KAAA,EAAO;AAAA,MACtF,gBAAgB,eAAA,CAAI,OAAA;AAAA,MACpB,OAAA,EAAS,OAAA;AAAA,MACT,YAAY,WAAA,CAAY,IAAA;AAAA,MACxB,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AAAA,MAC5B,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,KAAA,EAAO,QAAQ,KAAA,CAAM,IAAA;AAAA,MACrB,mBAAA,EAAqB,QAAQ,KAAA,CAAM;AAAA,KACpC,CAAA;AACD,IAAA,IAAA,CAAK,OAAA,CAAQ,cAAc,SAAS,CAAA;AAAA,EACtC;AACF,CAAA;;;AC1FA,IAAM,gBAAA,GAAmB,CAAC,KAAA,EAAe,SAAA,EAAmB,QAAA,MAA4B;AAAA,EACtF,EAAA,EAAI,KAAA;AAAA,EACJ,oBAAA,EAAsB,SAAA;AAAA,EACtB,MAAA,EAAQ,SAAA;AAAA,EACR,UAAA,EAAY,CAAA;AAAA,EACZ,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,EACpB,QAAA;AAAA,EACA,OAAO,gBAAA;AACT,CAAA,CAAA;AAaA,eAAsB,GAAA,CAAI,UAA0B,OAAA,EAA2C;AAC7F,EAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,KAAA,CAAM,QAAQ,CAAA;AAChD,EAAA,IAAI,EAAE,OAAA,EAAS,UAAA,EAAW,GAAI,SAAA;AAE9B,EAAA,MAAM,QAAA,GAAW,OAAA,EAAS,QAAA,KAAa,MAAM;AAAA,EAAC,CAAA,CAAA;AAC9C,EAAA,MAAM,WAAA,GAAc,OAAA,EAAS,WAAA,KAAgB,MAAM,MAAA,CAAA;AACnD,EAAA,MAAM,kBAAA,GACJ,OAAA,EAAS,kBAAA,KACR,YAAY;AACX,IAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,EACnD,CAAA,CAAA;AACF,EAAA,MAAM,SAAA,GAAY,SAAS,SAAA,IAAa,gBAAA;AAExC,EAAA,IAAI,GAAA,GACF,WAAA,CAAY,OAAA,CAAQ,KAAK,CAAA,IAAK,SAAA,CAAU,OAAA,CAAQ,KAAA,EAAO,OAAA,CAAQ,SAAA,EAAW,OAAA,CAAQ,QAAQ,CAAA;AAC5F,EAAA,IAAI,GAAA,CAAI,WAAW,SAAA,EAAW;AAC5B,IAAA,GAAA,GAAM,EAAE,GAAG,GAAA,EAAK,MAAA,EAAQ,SAAA,EAAW,YAAY,MAAA,EAAU;AAAA,EAC3D;AACA,EAAA,QAAA,CAAS,GAAG,CAAA;AAEZ,EAAA,MAAM,WAAA,GAAc,IAAI,iBAAA,CAAkB;AAAA,IACxC,mBAAmB,OAAA,EAAS,iBAAA;AAAA,IAC5B,iBAAiB,OAAA,EAAS,eAAA;AAAA,IAC1B,YAAY,OAAA,EAAS,UAAA;AAAA,IACrB,eAAe,OAAA,EAAS,aAAA;AAAA,IACxB,oBAAoB,OAAA,EAAS;AAAA,GAC9B,CAAA;AAED,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,MAAM,SAAA,GAAY,MAAM,WAAA,CAAY,OAAA,CAAQ,SAAS,UAAU,CAAA;AAC/D,IAAA,MAAM,mBAAmB,SAAA,CAAU,UAAA;AAEnC,IAAA,GAAA,GAAM;AAAA,MACJ,GAAG,GAAA;AAAA,MACH,YAAY,gBAAA,CAAiB,UAAA;AAAA,MAC7B,OAAO,gBAAA,CAAiB;AAAA,KAC1B;AAEA,IAAA,QAAQ,iBAAiB,MAAA;AAAQ,MAC/B,KAAK,WAAA,EAAa;AAChB,QAAA,IAAI,SAAS,0BAAA,EAA4B;AACvC,UAAA,QAAA,CAAS,GAAG,CAAA;AACZ,UAAA,OAAO,gBAAA;AAAA,QACT;AACA,QAAA,IAAI,iBAAiB,WAAA,EAAa;AAChC,UAAA,QAAA,CAAS,GAAG,CAAA;AACZ,UAAA,MAAM,mBAAmB,MAAM,kBAAA;AAAA,YAC7B,OAAA,CAAQ,KAAA;AAAA,YACR,iBAAiB,WAAA,CAAY;AAAA,WAC/B;AACA,UAAA,MAAM,MAAA,GAAS,yBAAA,CAA0B,OAAA,EAAS,gBAAA,EAAkB,gBAAgB,CAAA;AACpF,UAAA,OAAA,GAAU,MAAA,CAAO,OAAA;AACjB,UAAA,UAAA,GAAa,MAAA,CAAO,UAAA;AACpB,UAAA;AAAA,QACF;AACA,QAAA,QAAA,CAAS,EAAE,GAAG,GAAA,EAAK,MAAA,EAAQ,aAAa,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,EAAG,CAAA;AAChE,QAAA,OAAO,gBAAA;AAAA,MACT;AAAA,MAEA,KAAK,0BAAA,EAA4B;AAC/B,QAAA,QAAA,CAAS,EAAE,GAAG,GAAA,EAAK,MAAA,EAAQ,4BAA4B,CAAA;AACvD,QAAA,OAAO,gBAAA;AAAA,MACT;AAAA,MAEA,KAAK,mBAAA,EAAqB;AACxB,QAAA,QAAA,CAAS,GAAG,CAAA;AACZ,QAAA,MAAM,EAAE,YAAW,GAAI,gBAAA;AACvB,QAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG;AAC1C,UAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,QACtD;AACA,QAAA,MAAM,QAAA,GAAW,wBAAA,CAAyB,UAAA,CAAW,MAAM,CAAA;AAC3D,QAAA,MAAM,OAAA,GAAU,yBAAyB,gBAAgB,CAAA;AAIzD,QAAA,MAAM,gBAAA,GAAmB,MAAM,QAAA,CAAS,OAAA;AAAA,UACtC,UAAA;AAAA,UACA,OAAA;AAAA,UACA,OAAA;AAAA,UACA,SAAA,CAAU,WAAA;AAAA,UACV,GAAA;AAAA,UACA;AAAA,SACF;AAEA,QAAA,OAAA,GAAU,gBAAA,CAAiB,WAAA;AAC3B,QAAA,UAAA,GAAa,gBAAA,CAAiB,cAAA;AAC9B,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,2BAAA,EAA6B;AAChC,QAAA,QAAA,CAAS,EAAE,GAAG,GAAA,EAAK,MAAA,EAAQ,qBAAqB,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,EAAG,CAAA;AACxE,QAAA,OAAO,gBAAA;AAAA,MACT;AAAA,MAEA,KAAK,gBAAA,EAAkB;AACrB,QAAA,QAAA,CAAS,EAAE,GAAG,GAAA,EAAK,MAAA,EAAQ,kBAAkB,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,EAAG,CAAA;AACrE,QAAA,OAAO,gBAAA;AAAA,MACT;AAAA,MAEA;AACE,QAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA;AACnD,EACF;AACF","file":"chunk-3RWT2GPO.js","sourcesContent":["{\n \"name\": \"@perstack/runtime\",\n \"version\": \"0.0.70\",\n \"description\": \"Perstack Runtime\",\n \"author\": \"Wintermute Technologies, Inc.\",\n \"license\": \"Apache-2.0\",\n \"type\": \"module\",\n \"bin\": {\n \"perstack-runtime\": \"./bin/cli.ts\"\n },\n \"exports\": {\n \".\": \"./src/index.ts\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"bin\": {\n \"perstack-runtime\": \"dist/bin/cli.js\"\n },\n \"exports\": {\n \".\": \"./dist/src/index.js\"\n },\n \"types\": {\n \".\": \"./dist/src/index.d.ts\"\n }\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"clean\": \"rm -rf dist\",\n \"build\": \"pnpm run clean && tsup --config ./tsup.config.ts\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"dependencies\": {\n \"@ai-sdk/amazon-bedrock\": \"^3.0.71\",\n \"@ai-sdk/anthropic\": \"^2.0.56\",\n \"@ai-sdk/azure\": \"^2.0.90\",\n \"@ai-sdk/deepseek\": \"^1.0.32\",\n \"@ai-sdk/google\": \"^2.0.49\",\n \"@ai-sdk/google-vertex\": \"^3.0.94\",\n \"@ai-sdk/openai\": \"^2.0.88\",\n \"@modelcontextprotocol/sdk\": \"^1.25.1\",\n \"@paralleldrive/cuid2\": \"^3.0.4\",\n \"@perstack/api-client\": \"workspace:*\",\n \"@perstack/core\": \"workspace:*\",\n \"ai\": \"^5.0.115\",\n \"commander\": \"^14.0.2\",\n \"dotenv\": \"^17.2.3\",\n \"ollama-ai-provider-v2\": \"^1.5.5\",\n \"smol-toml\": \"^1.5.2\",\n \"ts-dedent\": \"^2.2.0\",\n \"undici\": \"^7.16.0\",\n \"xstate\": \"^5.25.0\"\n },\n \"devDependencies\": {\n \"@tsconfig/node22\": \"^22.0.5\",\n \"@types/node\": \"^25.0.3\",\n \"memfs\": \"^4.51.1\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.16\"\n },\n \"engines\": {\n \"node\": \">=22.0.0\"\n }\n}\n","import { createAmazonBedrock } from \"@ai-sdk/amazon-bedrock\"\nimport { createAnthropic } from \"@ai-sdk/anthropic\"\nimport { createAzure } from \"@ai-sdk/azure\"\nimport { createDeepSeek } from \"@ai-sdk/deepseek\"\nimport { createGoogleGenerativeAI } from \"@ai-sdk/google\"\nimport { createVertex } from \"@ai-sdk/google-vertex\"\nimport { createOpenAI } from \"@ai-sdk/openai\"\nimport { knownModels, type ProviderConfig, type ProviderName, type Usage } from \"@perstack/core\"\nimport type { LanguageModel } from \"ai\"\nimport { createOllama } from \"ollama-ai-provider-v2\"\nimport { ProxyAgent, fetch as undiciFetch } from \"undici\"\n\nfunction createProxyFetch(proxyUrl: string): typeof globalThis.fetch {\n const agent = new ProxyAgent(proxyUrl)\n return (input, init) => {\n return undiciFetch(input, { ...init, dispatcher: agent }) as Promise<Response>\n }\n}\n\nexport interface GetModelOptions {\n proxyUrl?: string\n}\n\nexport function getModel(\n modelId: string,\n providerConfig: ProviderConfig,\n options?: GetModelOptions,\n): LanguageModel {\n const customFetch = options?.proxyUrl ? createProxyFetch(options.proxyUrl) : undefined\n switch (providerConfig.providerName) {\n case \"anthropic\": {\n const anthropic = createAnthropic({\n apiKey: providerConfig.apiKey,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n fetch: customFetch,\n })\n return anthropic(modelId)\n }\n case \"google\": {\n const google = createGoogleGenerativeAI({\n apiKey: providerConfig.apiKey,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n fetch: customFetch,\n })\n return google(modelId)\n }\n case \"openai\": {\n const openai = createOpenAI({\n apiKey: providerConfig.apiKey,\n baseURL: providerConfig.baseUrl,\n organization: providerConfig.organization,\n project: providerConfig.project,\n name: providerConfig.name,\n headers: providerConfig.headers,\n fetch: customFetch,\n })\n return openai(modelId)\n }\n case \"ollama\": {\n const ollama = createOllama({\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n fetch: customFetch,\n })\n return ollama(modelId)\n }\n case \"azure-openai\": {\n const azure = createAzure({\n apiKey: providerConfig.apiKey,\n resourceName: providerConfig.resourceName,\n apiVersion: providerConfig.apiVersion,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n useDeploymentBasedUrls: providerConfig.useDeploymentBasedUrls,\n fetch: customFetch,\n })\n return azure(modelId)\n }\n case \"amazon-bedrock\": {\n const amazonBedrock = createAmazonBedrock({\n accessKeyId: providerConfig.accessKeyId,\n secretAccessKey: providerConfig.secretAccessKey,\n region: providerConfig.region,\n sessionToken: providerConfig.sessionToken,\n fetch: customFetch,\n })\n return amazonBedrock(modelId)\n }\n case \"google-vertex\": {\n const vertex = createVertex({\n project: providerConfig.project,\n location: providerConfig.location,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n fetch: customFetch,\n })\n return vertex(modelId)\n }\n case \"deepseek\": {\n const deepseek = createDeepSeek({\n apiKey: providerConfig.apiKey,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n fetch: customFetch,\n })\n return deepseek(modelId)\n }\n default: {\n const _exhaustive: never = providerConfig\n throw new Error(`Unknown provider: ${(_exhaustive as ProviderConfig).providerName}`)\n }\n }\n}\n\nexport function getContextWindow(providerName: ProviderName, modelId: string): number | undefined {\n const modelConfig = knownModels\n .find((model) => model.provider === providerName)\n ?.models.find((model) => model.name === modelId)\n return modelConfig?.contextWindow\n}\n\nexport function calculateContextWindowUsage(usage: Usage, contextWindow: number): number {\n return (usage.inputTokens + usage.cachedInputTokens + usage.outputTokens) / contextWindow\n}\n","import type { Usage } from \"@perstack/core\"\nimport type { GenerateTextResult, ToolSet } from \"ai\"\n\nexport function createEmptyUsage(): Usage {\n return {\n inputTokens: 0,\n outputTokens: 0,\n reasoningTokens: 0,\n totalTokens: 0,\n cachedInputTokens: 0,\n }\n}\n\nexport function usageFromGenerateTextResult(result: GenerateTextResult<ToolSet, never>): Usage {\n return {\n inputTokens: result.usage.inputTokens || 0,\n outputTokens: result.usage.outputTokens || 0,\n reasoningTokens: result.usage.reasoningTokens || 0,\n totalTokens: result.usage.totalTokens || 0,\n cachedInputTokens: result.usage.cachedInputTokens || 0,\n }\n}\n\nexport function sumUsage(a: Usage, b: Usage): Usage {\n return {\n inputTokens: a.inputTokens + b.inputTokens,\n outputTokens: a.outputTokens + b.outputTokens,\n reasoningTokens: a.reasoningTokens + b.reasoningTokens,\n totalTokens: a.totalTokens + b.totalTokens,\n cachedInputTokens: a.cachedInputTokens + b.cachedInputTokens,\n }\n}\n","import type {\n Expert,\n FileInlinePart,\n ImageInlinePart,\n InteractiveSkill,\n McpSseSkill,\n McpStdioSkill,\n RunEvent,\n RuntimeEvent,\n SkillType,\n TextPart,\n ToolDefinition,\n} from \"@perstack/core\"\n\nexport abstract class BaseSkillManager {\n protected _toolDefinitions: ToolDefinition[] = []\n protected _initialized = false\n protected _initializing?: Promise<void>\n abstract readonly name: string\n abstract readonly type: SkillType\n abstract readonly lazyInit: boolean\n readonly skill?: McpStdioSkill | McpSseSkill\n readonly interactiveSkill?: InteractiveSkill\n readonly expert?: Expert\n protected _jobId: string\n protected _runId: string\n protected _eventListener?: (event: RunEvent | RuntimeEvent) => void\n\n constructor(\n jobId: string,\n runId: string,\n eventListener?: (event: RunEvent | RuntimeEvent) => void,\n ) {\n this._jobId = jobId\n this._runId = runId\n this._eventListener = eventListener\n }\n\n async init(): Promise<void> {\n if (this._initialized) {\n throw new Error(`Skill ${this.name} is already initialized`)\n }\n if (this._initializing) {\n throw new Error(`Skill ${this.name} is already initializing`)\n }\n const initPromise = this._performInit()\n this._initializing = initPromise\n if (!this.lazyInit) {\n try {\n await initPromise\n } catch (error) {\n this._initialized = false\n this._initializing = undefined\n throw error\n }\n }\n }\n\n isInitialized(): boolean {\n return this._initialized\n }\n\n protected async _performInit(): Promise<void> {\n await this._doInit()\n this._initialized = true\n this._initializing = undefined\n }\n\n protected abstract _doInit(): Promise<void>\n\n abstract close(): Promise<void>\n\n async getToolDefinitions(): Promise<ToolDefinition[]> {\n // If initialization is in progress, wait for it to complete\n if (!this.isInitialized() && this._initializing) {\n await this._initializing\n }\n if (!this.isInitialized()) {\n throw new Error(`Skill ${this.name} is not initialized`)\n }\n return this._filterTools(this._toolDefinitions)\n }\n\n protected _filterTools(tools: ToolDefinition[]): ToolDefinition[] {\n return tools\n }\n\n abstract callTool(\n toolName: string,\n input: Record<string, unknown>,\n ): Promise<Array<TextPart | ImageInlinePart | FileInlinePart>>\n}\n","import type { McpStdioSkill } from \"@perstack/core\"\n\nexport interface CommandArgs {\n command: string\n args: string[]\n}\n\n/**\n * Parse and validate command arguments from a McpStdioSkill.\n * Ensures either packageName or args is provided (not both, not neither).\n * Adds -y flag for npx commands if not present.\n */\nexport function getCommandArgs(skill: McpStdioSkill): CommandArgs {\n const { name, command, packageName, args } = skill\n\n if (!packageName && (!args || args.length === 0)) {\n throw new Error(`Skill ${name} has no packageName or args. Please provide one of them.`)\n }\n\n if (packageName && args && args.length > 0) {\n throw new Error(`Skill ${name} has both packageName and args. Please provide only one of them.`)\n }\n\n let newArgs = args && args.length > 0 ? args : [packageName!]\n\n // Add -y flag for npx to auto-confirm package installation\n if (command === \"npx\" && !newArgs.includes(\"-y\")) {\n newArgs = [\"-y\", ...newArgs]\n }\n\n return { command, args: newArgs }\n}\n","import type {\n Expert,\n FileInlinePart,\n ImageInlinePart,\n RunEvent,\n RuntimeEvent,\n SkillType,\n TextPart,\n} from \"@perstack/core\"\nimport { BaseSkillManager } from \"./base.js\"\n\nexport class DelegateSkillManager extends BaseSkillManager {\n readonly name: string\n readonly type: SkillType = \"delegate\"\n readonly lazyInit = false\n override readonly expert: Expert\n\n constructor(\n expert: Expert,\n jobId: string,\n runId: string,\n eventListener?: (event: RunEvent | RuntimeEvent) => void,\n ) {\n super(jobId, runId, eventListener)\n this.name = expert.name\n this.expert = expert\n }\n\n protected override async _doInit(): Promise<void> {\n this._toolDefinitions = [\n {\n skillName: this.expert.name,\n name: this.expert.name.split(\"/\").pop() ?? this.expert.name,\n description: this.expert.description,\n inputSchema: {\n type: \"object\",\n properties: {\n query: { type: \"string\" },\n },\n required: [\"query\"],\n },\n interactive: false,\n },\n ]\n }\n\n override async close(): Promise<void> {}\n\n override async callTool(\n _toolName: string,\n _input: Record<string, unknown>,\n ): Promise<Array<TextPart | ImageInlinePart | FileInlinePart>> {\n return []\n }\n}\n","import type {\n FileInlinePart,\n ImageInlinePart,\n InteractiveSkill,\n RunEvent,\n RuntimeEvent,\n SkillType,\n TextPart,\n} from \"@perstack/core\"\nimport { BaseSkillManager } from \"./base.js\"\n\nexport class InteractiveSkillManager extends BaseSkillManager {\n readonly name: string\n readonly type: SkillType = \"interactive\"\n readonly lazyInit = false\n override readonly interactiveSkill: InteractiveSkill\n\n constructor(\n interactiveSkill: InteractiveSkill,\n jobId: string,\n runId: string,\n eventListener?: (event: RunEvent | RuntimeEvent) => void,\n ) {\n super(jobId, runId, eventListener)\n this.name = interactiveSkill.name\n this.interactiveSkill = interactiveSkill\n }\n\n protected override async _doInit(): Promise<void> {\n this._toolDefinitions = Object.values(this.interactiveSkill.tools).map((tool) => ({\n skillName: this.interactiveSkill.name,\n name: tool.name,\n description: tool.description,\n inputSchema: JSON.parse(tool.inputJsonSchema),\n interactive: true,\n }))\n }\n\n override async close(): Promise<void> {}\n\n override async callTool(\n _toolName: string,\n _input: Record<string, unknown>,\n ): Promise<Array<TextPart | ImageInlinePart | FileInlinePart>> {\n return []\n }\n}\n","/**\n * Check if a hostname is a private or local IP address.\n * Used to validate SSE endpoints - private/local IPs are not allowed.\n */\nexport function isPrivateOrLocalIP(hostname: string): boolean {\n // Check common local hostnames\n if (\n hostname === \"localhost\" ||\n hostname === \"127.0.0.1\" ||\n hostname === \"::1\" ||\n hostname === \"0.0.0.0\"\n ) {\n return true\n }\n\n // Check IPv4 private ranges\n const ipv4Match = hostname.match(/^(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)$/)\n if (ipv4Match) {\n const [, a, b] = ipv4Match.map(Number)\n // 10.0.0.0/8\n if (a === 10) return true\n // 172.16.0.0/12\n if (a === 172 && b >= 16 && b <= 31) return true\n // 192.168.0.0/16\n if (a === 192 && b === 168) return true\n // 169.254.0.0/16 (link-local)\n if (a === 169 && b === 254) return true\n // 127.0.0.0/8 (loopback)\n if (a === 127) return true\n }\n\n // Check IPv6 private ranges\n if (hostname.includes(\":\")) {\n // fe80::/10 (link-local)\n if (hostname.startsWith(\"fe80:\")) return true\n // fc00::/7 (unique local)\n if (hostname.startsWith(\"fc\") || hostname.startsWith(\"fd\")) return true\n }\n\n // Check IPv4-mapped IPv6 addresses\n if (hostname.startsWith(\"::ffff:\")) {\n const ipv4Part = hostname.slice(7)\n if (isPrivateOrLocalIP(ipv4Part)) {\n return true\n }\n }\n\n return false\n}\n","import type { CallToolResult, McpError } from \"@modelcontextprotocol/sdk/types.js\"\nimport { createId } from \"@paralleldrive/cuid2\"\nimport type {\n CallToolResultContent,\n FileInlinePart,\n ImageInlinePart,\n Resource,\n TextPart,\n} from \"@perstack/core\"\n\n/**\n * Handle MCP tool errors and convert them to TextPart responses.\n * McpError instances are converted to error messages, other errors are re-thrown.\n */\nexport function handleToolError(\n error: unknown,\n toolName: string,\n McpErrorClass: typeof McpError,\n): Array<TextPart> {\n if (error instanceof McpErrorClass) {\n return [\n {\n type: \"textPart\",\n text: `Error calling tool ${toolName}: ${error.message}`,\n id: createId(),\n },\n ]\n }\n throw error\n}\n\n/**\n * Convert MCP CallToolResult to internal part types.\n */\nexport function convertToolResult(\n result: CallToolResult,\n toolName: string,\n input: Record<string, unknown>,\n): Array<TextPart | ImageInlinePart | FileInlinePart> {\n if (!result.content || result.content.length === 0) {\n return [\n {\n type: \"textPart\",\n text: `Tool ${toolName} returned nothing with arguments: ${JSON.stringify(input)}`,\n id: createId(),\n },\n ]\n }\n\n return result.content\n .filter((part) => part.type !== \"audio\" && part.type !== \"resource_link\")\n .map((part) => convertPart(part as CallToolResultContent))\n}\n\n/**\n * Convert a single MCP content part to internal part type.\n */\nexport function convertPart(\n part: CallToolResultContent,\n): TextPart | ImageInlinePart | FileInlinePart {\n switch (part.type) {\n case \"text\":\n if (!part.text || part.text === \"\") {\n return { type: \"textPart\", text: \"Error: No content\", id: createId() }\n }\n return { type: \"textPart\", text: part.text, id: createId() }\n\n case \"image\":\n if (!part.data || !part.mimeType) {\n throw new Error(\"Image part must have both data and mimeType\")\n }\n return {\n type: \"imageInlinePart\",\n encodedData: part.data,\n mimeType: part.mimeType,\n id: createId(),\n }\n\n case \"resource\":\n if (!part.resource) {\n throw new Error(\"Resource part must have resource content\")\n }\n return convertResource(part.resource)\n }\n}\n\n/**\n * Convert MCP resource to internal part type.\n */\nexport function convertResource(resource: Resource): TextPart | FileInlinePart {\n if (!resource.mimeType) {\n throw new Error(`Resource ${JSON.stringify(resource)} has no mimeType`)\n }\n\n if (resource.text && typeof resource.text === \"string\") {\n return { type: \"textPart\", text: resource.text, id: createId() }\n }\n\n if (resource.blob && typeof resource.blob === \"string\") {\n return {\n type: \"fileInlinePart\",\n encodedData: resource.blob,\n mimeType: resource.mimeType,\n id: createId(),\n }\n }\n\n throw new Error(`Unsupported resource type: ${JSON.stringify(resource)}`)\n}\n","import { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\"\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\"\nimport type { Transport } from \"@modelcontextprotocol/sdk/shared/transport.js\"\n\nexport interface StdioTransportOptions {\n command: string\n args: string[]\n env: Record<string, string>\n stderr?: \"pipe\" | \"inherit\" | \"ignore\"\n}\n\nexport interface SseTransportOptions {\n url: URL\n}\n\n/**\n * Factory interface for creating MCP transports.\n * Allows for dependency injection and easier testing.\n */\nexport interface TransportFactory {\n createStdio(options: StdioTransportOptions): StdioClientTransport\n createSse(options: SseTransportOptions): Transport\n}\n\n/**\n * Default implementation of TransportFactory using real MCP SDK transports.\n */\nexport class DefaultTransportFactory implements TransportFactory {\n createStdio(options: StdioTransportOptions): StdioClientTransport {\n return new StdioClientTransport({\n command: options.command,\n args: options.args,\n env: options.env,\n stderr: options.stderr,\n })\n }\n\n createSse(options: SseTransportOptions): Transport {\n return new SSEClientTransport(options.url)\n }\n}\n\n/**\n * Default transport factory instance.\n */\nexport const defaultTransportFactory = new DefaultTransportFactory()\n","import { Client as McpClient } from \"@modelcontextprotocol/sdk/client/index.js\"\nimport type { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\"\nimport { type CallToolResult, McpError } from \"@modelcontextprotocol/sdk/types.js\"\nimport {\n createRuntimeEvent,\n type FileInlinePart,\n getFilteredEnv,\n type ImageInlinePart,\n type McpSseSkill,\n type McpStdioSkill,\n type RunEvent,\n type RuntimeEvent,\n type SkillType,\n type TextPart,\n type ToolDefinition,\n} from \"@perstack/core\"\nimport { BaseSkillManager } from \"./base.js\"\nimport { getCommandArgs } from \"./command-args.js\"\nimport { isPrivateOrLocalIP } from \"./ip-validator.js\"\nimport { convertToolResult, handleToolError } from \"./mcp-converters.js\"\nimport { defaultTransportFactory, type TransportFactory } from \"./transport-factory.js\"\n\ninterface InitTimingInfo {\n startTime: number\n spawnDurationMs: number\n handshakeDurationMs: number\n serverInfo?: { name: string; version: string }\n}\n\nexport interface McpSkillManagerOptions {\n transportFactory?: TransportFactory\n}\n\nexport class McpSkillManager extends BaseSkillManager {\n readonly name: string\n readonly type: SkillType = \"mcp\"\n readonly lazyInit: boolean\n override readonly skill: McpStdioSkill | McpSseSkill\n private _mcpClient?: McpClient\n private _env: Record<string, string>\n private _transportFactory: TransportFactory\n\n constructor(\n skill: McpStdioSkill | McpSseSkill,\n env: Record<string, string>,\n jobId: string,\n runId: string,\n eventListener?: (event: RunEvent | RuntimeEvent) => void,\n options?: McpSkillManagerOptions,\n ) {\n super(jobId, runId, eventListener)\n this.name = skill.name\n this.skill = skill\n this._env = env\n this._transportFactory = options?.transportFactory ?? defaultTransportFactory\n this.lazyInit =\n skill.type === \"mcpStdioSkill\" && skill.lazyInit && skill.name !== \"@perstack/base\"\n }\n\n protected override async _doInit(): Promise<void> {\n this._mcpClient = new McpClient({\n name: `${this.skill.name}-mcp-client`,\n version: \"1.0.0\",\n })\n let timingInfo: InitTimingInfo | undefined\n if (this.skill.type === \"mcpStdioSkill\") {\n timingInfo = await this._initStdio(this.skill)\n } else {\n await this._initSse(this.skill)\n }\n const toolDiscoveryStartTime = Date.now()\n const { tools } = await this._mcpClient.listTools()\n const toolDiscoveryDurationMs = Date.now() - toolDiscoveryStartTime\n this._toolDefinitions = tools.map((tool) => ({\n skillName: this.skill.name,\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n interactive: false,\n }))\n if (this._eventListener && timingInfo) {\n const totalDurationMs = Date.now() - timingInfo.startTime\n const event = createRuntimeEvent(\"skillConnected\", this._jobId, this._runId, {\n skillName: this.skill.name,\n serverInfo: timingInfo.serverInfo,\n spawnDurationMs: timingInfo.spawnDurationMs,\n handshakeDurationMs: timingInfo.handshakeDurationMs,\n toolDiscoveryDurationMs,\n connectDurationMs: timingInfo.spawnDurationMs + timingInfo.handshakeDurationMs,\n totalDurationMs,\n })\n this._eventListener(event)\n }\n }\n\n private async _initStdio(skill: McpStdioSkill): Promise<InitTimingInfo> {\n if (!skill.command) {\n throw new Error(`Skill ${skill.name} has no command`)\n }\n const requiredEnv: Record<string, string> = {}\n for (const envName of skill.requiredEnv) {\n if (!this._env[envName]) {\n throw new Error(`Skill ${skill.name} requires environment variable ${envName}`)\n }\n requiredEnv[envName] = this._env[envName]\n }\n const env = getFilteredEnv(requiredEnv)\n const startTime = Date.now()\n const { command, args } = getCommandArgs(skill)\n if (this._eventListener) {\n const event = createRuntimeEvent(\"skillStarting\", this._jobId, this._runId, {\n skillName: skill.name,\n command,\n args,\n })\n this._eventListener(event)\n }\n const transport = this._transportFactory.createStdio({ command, args, env, stderr: \"pipe\" })\n const spawnDurationMs = Date.now() - startTime\n if ((transport as StdioClientTransport).stderr) {\n ;(transport as StdioClientTransport).stderr!.on(\"data\", (chunk: Buffer) => {\n if (this._eventListener) {\n const event = createRuntimeEvent(\"skillStderr\", this._jobId, this._runId, {\n skillName: skill.name,\n message: chunk.toString().trim(),\n })\n this._eventListener(event)\n }\n })\n }\n const connectStartTime = Date.now()\n await this._mcpClient!.connect(transport)\n const handshakeDurationMs = Date.now() - connectStartTime\n const serverVersion = this._mcpClient!.getServerVersion()\n return {\n startTime,\n spawnDurationMs,\n handshakeDurationMs,\n serverInfo: serverVersion\n ? { name: serverVersion.name, version: serverVersion.version }\n : undefined,\n }\n }\n\n private async _initSse(skill: McpSseSkill): Promise<void> {\n if (!skill.endpoint) {\n throw new Error(`Skill ${skill.name} has no endpoint`)\n }\n const url = new URL(skill.endpoint)\n if (url.protocol !== \"https:\") {\n throw new Error(`Skill ${skill.name} SSE endpoint must use HTTPS: ${skill.endpoint}`)\n }\n if (isPrivateOrLocalIP(url.hostname)) {\n throw new Error(\n `Skill ${skill.name} SSE endpoint cannot use private/local IP: ${skill.endpoint}`,\n )\n }\n const transport = this._transportFactory.createSse({ url })\n await this._mcpClient!.connect(transport)\n }\n\n override async close(): Promise<void> {\n if (this._mcpClient) {\n await this._mcpClient.close()\n if (this._eventListener && this.skill) {\n const event = createRuntimeEvent(\"skillDisconnected\", this._jobId, this._runId, {\n skillName: this.skill.name,\n })\n this._eventListener(event)\n }\n }\n }\n\n protected override _filterTools(tools: ToolDefinition[]): ToolDefinition[] {\n const omit = this.skill.omit ?? []\n const pick = this.skill.pick ?? []\n return tools\n .filter((tool) => (omit.length > 0 ? !omit.includes(tool.name) : true))\n .filter((tool) => (pick.length > 0 ? pick.includes(tool.name) : true))\n }\n\n override async callTool(\n toolName: string,\n input: Record<string, unknown>,\n ): Promise<Array<TextPart | ImageInlinePart | FileInlinePart>> {\n if (!this.isInitialized() || !this._mcpClient) {\n throw new Error(`${this.name} is not initialized`)\n }\n try {\n const result = (await this._mcpClient.callTool({\n name: toolName,\n arguments: input,\n })) as CallToolResult\n return convertToolResult(result, toolName, input)\n } catch (error) {\n return handleToolError(error, toolName, McpError)\n }\n }\n}\n","import type {\n Expert,\n InteractiveSkill,\n McpSseSkill,\n McpStdioSkill,\n RunEvent,\n RuntimeEvent,\n} from \"@perstack/core\"\nimport type { BaseSkillManager } from \"./base.js\"\nimport { DelegateSkillManager } from \"./delegate.js\"\nimport { InteractiveSkillManager } from \"./interactive.js\"\nimport { McpSkillManager, type McpSkillManagerOptions } from \"./mcp.js\"\n\nexport interface SkillManagerFactoryContext {\n env: Record<string, string>\n jobId: string\n runId: string\n eventListener?: (event: RunEvent | RuntimeEvent) => void\n mcpOptions?: McpSkillManagerOptions\n}\n\n/**\n * Factory interface for creating skill managers.\n * Allows for dependency injection and easier testing.\n */\nexport interface SkillManagerFactory {\n createMcp(\n skill: McpStdioSkill | McpSseSkill,\n context: SkillManagerFactoryContext,\n ): BaseSkillManager\n createInteractive(skill: InteractiveSkill, context: SkillManagerFactoryContext): BaseSkillManager\n createDelegate(expert: Expert, context: SkillManagerFactoryContext): BaseSkillManager\n}\n\n/**\n * Default implementation of SkillManagerFactory using real skill manager classes.\n */\nexport class DefaultSkillManagerFactory implements SkillManagerFactory {\n createMcp(\n skill: McpStdioSkill | McpSseSkill,\n context: SkillManagerFactoryContext,\n ): BaseSkillManager {\n return new McpSkillManager(\n skill,\n context.env,\n context.jobId,\n context.runId,\n context.eventListener,\n context.mcpOptions,\n )\n }\n\n createInteractive(\n skill: InteractiveSkill,\n context: SkillManagerFactoryContext,\n ): BaseSkillManager {\n return new InteractiveSkillManager(skill, context.jobId, context.runId, context.eventListener)\n }\n\n createDelegate(expert: Expert, context: SkillManagerFactoryContext): BaseSkillManager {\n return new DelegateSkillManager(expert, context.jobId, context.runId, context.eventListener)\n }\n}\n\n/**\n * Default skill manager factory instance.\n */\nexport const defaultSkillManagerFactory = new DefaultSkillManagerFactory()\n","import type {\n Expert,\n InteractiveSkill,\n McpSseSkill,\n McpStdioSkill,\n RunEvent,\n RunSetting,\n RuntimeEvent,\n} from \"@perstack/core\"\nimport { jsonSchema, type ToolSet, tool } from \"ai\"\nimport type { BaseSkillManager } from \"./base.js\"\nimport {\n defaultSkillManagerFactory,\n type SkillManagerFactory,\n type SkillManagerFactoryContext,\n} from \"./skill-manager-factory.js\"\n\n/**\n * Initialize skill managers and cleanup on failure.\n * Exported for testing purposes.\n */\nexport async function initSkillManagersWithCleanup(\n managers: BaseSkillManager[],\n allManagers: BaseSkillManager[],\n): Promise<void> {\n const results = await Promise.allSettled(managers.map((m) => m.init()))\n const firstRejected = results.find((r) => r.status === \"rejected\")\n if (firstRejected) {\n await Promise.all(allManagers.map((m) => m.close().catch(() => {})))\n throw (firstRejected as PromiseRejectedResult).reason\n }\n}\n\nexport interface GetSkillManagersOptions {\n isDelegatedRun?: boolean\n factory?: SkillManagerFactory\n}\n\nexport async function getSkillManagers(\n expert: Expert,\n experts: Record<string, Expert>,\n setting: RunSetting,\n eventListener?: (event: RunEvent | RuntimeEvent) => void,\n options?: GetSkillManagersOptions,\n): Promise<Record<string, BaseSkillManager>> {\n const { perstackBaseSkillCommand, env, jobId, runId } = setting\n const { skills } = expert\n const factory = options?.factory ?? defaultSkillManagerFactory\n\n if (!skills[\"@perstack/base\"]) {\n throw new Error(\"Base skill is not defined\")\n }\n\n const factoryContext: SkillManagerFactoryContext = {\n env,\n jobId,\n runId,\n eventListener,\n }\n\n const allManagers: BaseSkillManager[] = []\n\n // Process MCP skills\n const mcpSkills = Object.values(skills)\n .filter(\n (skill): skill is McpStdioSkill | McpSseSkill =>\n skill.type === \"mcpStdioSkill\" || skill.type === \"mcpSseSkill\",\n )\n .map((skill) => {\n if (perstackBaseSkillCommand && skill.type === \"mcpStdioSkill\") {\n const matchesBaseByPackage =\n skill.command === \"npx\" && skill.packageName === \"@perstack/base\"\n const matchesBaseByArgs =\n skill.command === \"npx\" &&\n Array.isArray(skill.args) &&\n skill.args.includes(\"@perstack/base\")\n if (matchesBaseByPackage || matchesBaseByArgs) {\n const [overrideCommand, ...overrideArgs] = perstackBaseSkillCommand\n if (!overrideCommand) {\n throw new Error(\"perstackBaseSkillCommand must have at least one element\")\n }\n return {\n ...skill,\n command: overrideCommand,\n packageName: undefined,\n args: overrideArgs,\n lazyInit: false,\n } as McpStdioSkill\n }\n }\n return skill\n })\n\n const mcpSkillManagers = mcpSkills.map((skill) => {\n const manager = factory.createMcp(skill, factoryContext)\n allManagers.push(manager)\n return manager\n })\n await initSkillManagersWithCleanup(mcpSkillManagers, allManagers)\n\n // Process interactive skills (not for delegated runs)\n if (!options?.isDelegatedRun) {\n const interactiveSkills = Object.values(skills).filter(\n (skill): skill is InteractiveSkill => skill.type === \"interactiveSkill\",\n )\n const interactiveSkillManagers = interactiveSkills.map((interactiveSkill) => {\n const manager = factory.createInteractive(interactiveSkill, factoryContext)\n allManagers.push(manager)\n return manager\n })\n await initSkillManagersWithCleanup(interactiveSkillManagers, allManagers)\n }\n\n // Process delegate experts\n const delegateSkillManagers: BaseSkillManager[] = []\n for (const delegateExpertName of expert.delegates) {\n const delegate = experts[delegateExpertName]\n if (!delegate) {\n await Promise.all(allManagers.map((m) => m.close().catch(() => {})))\n throw new Error(`Delegate expert \"${delegateExpertName}\" not found in experts`)\n }\n const manager = factory.createDelegate(delegate, factoryContext)\n allManagers.push(manager)\n delegateSkillManagers.push(manager)\n }\n await initSkillManagersWithCleanup(delegateSkillManagers, allManagers)\n\n const skillManagers: Record<string, BaseSkillManager> = {}\n for (const manager of allManagers) {\n skillManagers[manager.name] = manager\n }\n return skillManagers\n}\n\nexport async function closeSkillManagers(\n skillManagers: Record<string, BaseSkillManager>,\n): Promise<void> {\n await Promise.all(Object.values(skillManagers).map((m) => m.close().catch(() => {})))\n}\n\nexport async function getSkillManagerByToolName(\n skillManagers: Record<string, BaseSkillManager>,\n toolName: string,\n): Promise<BaseSkillManager> {\n for (const skillManager of Object.values(skillManagers)) {\n const toolDefinitions = await skillManager.getToolDefinitions()\n for (const toolDefinition of toolDefinitions) {\n if (toolDefinition.name === toolName) {\n return skillManager\n }\n }\n }\n throw new Error(`Tool ${toolName} not found`)\n}\n\nexport async function getToolSet(\n skillManagers: Record<string, BaseSkillManager>,\n): Promise<ToolSet> {\n const tools: ToolSet = {}\n for (const skillManager of Object.values(skillManagers)) {\n const toolDefinitions = await skillManager.getToolDefinitions()\n for (const toolDefinition of toolDefinitions) {\n tools[toolDefinition.name] = tool({\n description: toolDefinition.description,\n inputSchema: jsonSchema(toolDefinition.inputSchema),\n })\n }\n }\n return tools\n}\n","import { readFile } from \"node:fs/promises\"\nimport type { MessagePart, SkillType, ToolCall, ToolResult } from \"@perstack/core\"\nimport type { BaseSkillManager } from \"../skill-manager/base.js\"\nimport { getSkillManagerByToolName } from \"../skill-manager/helpers.js\"\nimport type { McpSkillManager } from \"../skill-manager/mcp.js\"\nimport type { ToolExecutor } from \"./tool-executor.js\"\n\ntype FileInfo = { path: string; mimeType: string; size: number }\n\nfunction isFileInfo(value: unknown): value is FileInfo {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"path\" in value &&\n \"mimeType\" in value &&\n \"size\" in value &&\n typeof (value as FileInfo).path === \"string\" &&\n typeof (value as FileInfo).mimeType === \"string\" &&\n typeof (value as FileInfo).size === \"number\"\n )\n}\n\nasync function processFileToolResult(\n toolResult: ToolResult,\n toolName: \"readPdfFile\" | \"readImageFile\",\n): Promise<ToolResult> {\n const processedContents: MessagePart[] = []\n for (const part of toolResult.result) {\n if (part.type !== \"textPart\") {\n processedContents.push(part)\n continue\n }\n let fileInfo: FileInfo | undefined\n try {\n const parsed = JSON.parse(part.text)\n if (isFileInfo(parsed)) {\n fileInfo = parsed\n }\n } catch {\n processedContents.push(part)\n continue\n }\n if (!fileInfo) {\n processedContents.push(part)\n continue\n }\n const { path, mimeType } = fileInfo\n try {\n const buffer = await readFile(path)\n if (toolName === \"readImageFile\") {\n processedContents.push({\n type: \"imageInlinePart\",\n id: part.id,\n encodedData: buffer.toString(\"base64\"),\n mimeType,\n })\n } else {\n processedContents.push({\n type: \"fileInlinePart\",\n id: part.id,\n encodedData: buffer.toString(\"base64\"),\n mimeType,\n })\n }\n } catch (error) {\n processedContents.push({\n type: \"textPart\",\n id: part.id,\n text: `Failed to read file \"${path}\": ${error instanceof Error ? error.message : String(error)}`,\n })\n }\n }\n return { ...toolResult, result: processedContents }\n}\n\n/**\n * Executor for MCP (Model Context Protocol) tools.\n * Handles standard MCP tool calls including file processing for readPdfFile/readImageFile.\n */\nexport class McpToolExecutor implements ToolExecutor {\n readonly type: SkillType = \"mcp\"\n\n async execute(\n toolCall: ToolCall,\n skillManagers: Record<string, BaseSkillManager>,\n ): Promise<ToolResult> {\n const skillManager = await getSkillManagerByToolName(skillManagers, toolCall.toolName)\n if (skillManager.type !== \"mcp\") {\n throw new Error(`Incorrect SkillType, required MCP, got ${skillManager.type}`)\n }\n const result = await (skillManager as McpSkillManager).callTool(\n toolCall.toolName,\n toolCall.args,\n )\n const toolResult: ToolResult = {\n id: toolCall.id,\n skillName: toolCall.skillName,\n toolName: toolCall.toolName,\n result,\n }\n // Handle special file reading tools\n if (toolCall.toolName === \"readPdfFile\" || toolCall.toolName === \"readImageFile\") {\n return processFileToolResult(toolResult, toolCall.toolName)\n }\n return toolResult\n }\n}\n","import type { SkillType, ToolCall, ToolResult } from \"@perstack/core\"\nimport type { BaseSkillManager } from \"../skill-manager/base.js\"\nimport { McpToolExecutor } from \"./mcp-executor.js\"\nimport type { ToolExecutor } from \"./tool-executor.js\"\n\n/**\n * Factory for creating tool executors based on skill type.\n * Follows the Factory pattern from packages/docker.\n */\nexport class ToolExecutorFactory {\n private executors: Map<SkillType, ToolExecutor>\n\n constructor() {\n this.executors = new Map([\n [\"mcp\", new McpToolExecutor()],\n // delegate and interactive are handled specially (not executed here)\n ])\n }\n\n /**\n * Get the executor for a given skill type\n */\n getExecutor(type: SkillType): ToolExecutor | undefined {\n return this.executors.get(type)\n }\n\n /**\n * Execute a tool call using the appropriate executor\n */\n async execute(\n toolCall: ToolCall,\n type: SkillType,\n skillManagers: Record<string, BaseSkillManager>,\n ): Promise<ToolResult> {\n const executor = this.executors.get(type)\n if (!executor) {\n throw new Error(`No executor registered for skill type: ${type}`)\n }\n return executor.execute(toolCall, skillManagers)\n }\n\n /**\n * Check if a skill type can be executed locally (vs requiring delegation)\n */\n canExecuteLocally(type: SkillType): boolean {\n return type === \"mcp\"\n }\n}\n\n/**\n * Singleton factory instance for convenience\n */\nexport const toolExecutorFactory = new ToolExecutorFactory()\n","import type { SkillType, ToolCall } from \"@perstack/core\"\nimport type { BaseSkillManager } from \"../skill-manager/base.js\"\nimport { getSkillManagerByToolName } from \"../skill-manager/helpers.js\"\n\nexport type ClassifiedToolCall = {\n toolCall: ToolCall\n type: SkillType\n skillManager: BaseSkillManager\n}\n\nexport type ClassifiedToolCalls = {\n mcp: ClassifiedToolCall[]\n delegate: ClassifiedToolCall[]\n interactive: ClassifiedToolCall[]\n}\n\n/**\n * Get the skill type for a tool by name only\n */\nexport async function getToolTypeByName(\n toolName: string,\n skillManagers: Record<string, BaseSkillManager>,\n): Promise<SkillType> {\n const skillManager = await getSkillManagerByToolName(skillManagers, toolName)\n return skillManager.type\n}\n\n/**\n * Classify multiple tool calls by their skill type\n */\nexport async function classifyToolCalls(\n toolCalls: ToolCall[],\n skillManagers: Record<string, BaseSkillManager>,\n): Promise<ClassifiedToolCalls> {\n const classified: ClassifiedToolCalls = {\n mcp: [],\n delegate: [],\n interactive: [],\n }\n\n const results = await Promise.all(\n toolCalls.map(async (toolCall) => {\n const skillManager = await getSkillManagerByToolName(skillManagers, toolCall.toolName)\n return { toolCall, type: skillManager.type, skillManager }\n }),\n )\n\n for (const result of results) {\n classified[result.type].push(result)\n }\n\n return classified\n}\n","import { type DelegationTarget, type RunEvent, stopRunByDelegate } from \"@perstack/core\"\nimport { getSkillManagerByToolName } from \"../../skill-manager/index.js\"\nimport { getToolTypeByName } from \"../../tool-execution/index.js\"\nimport type { RunSnapshot } from \"../machine.js\"\n\nexport async function callingDelegateLogic({\n setting,\n checkpoint,\n step,\n skillManagers,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.pendingToolCalls || step.pendingToolCalls.length === 0) {\n throw new Error(\"No pending tool calls found\")\n }\n const toolCallTypes = await Promise.all(\n step.pendingToolCalls.map(async (tc) => ({\n toolCall: tc,\n type: await getToolTypeByName(tc.toolName, skillManagers),\n })),\n )\n const delegateToolCalls = toolCallTypes\n .filter((t) => t.type === \"delegate\")\n .map((t) => t.toolCall)\n const nonDelegateToolCalls = toolCallTypes\n .filter((t) => t.type !== \"delegate\")\n .map((t) => t.toolCall)\n if (delegateToolCalls.length === 0) {\n throw new Error(\"No delegate tool calls found\")\n }\n const delegations: DelegationTarget[] = await Promise.all(\n delegateToolCalls.map(async (tc) => {\n const skillManager = await getSkillManagerByToolName(skillManagers, tc.toolName)\n if (!skillManager.expert) {\n throw new Error(`Delegation error: skill manager \"${tc.toolName}\" not found`)\n }\n if (!tc.args || !tc.args.query || typeof tc.args.query !== \"string\") {\n throw new Error(`Delegation error: query is undefined for ${tc.toolName}`)\n }\n return {\n expert: {\n key: skillManager.expert.key,\n name: skillManager.expert.name,\n version: skillManager.expert.version,\n },\n toolCallId: tc.id,\n toolName: tc.toolName,\n query: tc.args.query,\n }\n }),\n )\n return stopRunByDelegate(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByDelegate\",\n delegateTo: delegations,\n pendingToolCalls: nonDelegateToolCalls.length > 0 ? nonDelegateToolCalls : undefined,\n partialToolResults: step.partialToolResults,\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n })\n}\n","import { type RunEvent, stopRunByInteractiveTool } from \"@perstack/core\"\nimport type { RunSnapshot } from \"../machine.js\"\n\nexport async function callingInteractiveToolLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.pendingToolCalls || step.pendingToolCalls.length === 0) {\n throw new Error(\"No pending tool calls found\")\n }\n const currentToolCall = step.pendingToolCalls[0]\n const remainingToolCalls = step.pendingToolCalls.slice(1)\n return stopRunByInteractiveTool(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByInteractiveTool\",\n pendingToolCalls: [currentToolCall, ...remainingToolCalls],\n partialToolResults: step.partialToolResults,\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n })\n}\n","import {\n attemptCompletion,\n callDelegate,\n callInteractiveTool,\n type RunEvent,\n resolveToolResults,\n type ToolResult,\n} from \"@perstack/core\"\nimport { classifyToolCalls, toolExecutorFactory } from \"../../tool-execution/index.js\"\nimport type { RunSnapshot } from \"../machine.js\"\n\nfunction hasRemainingTodos(toolResult: ToolResult): boolean {\n const firstPart = toolResult.result[0]\n if (!firstPart || firstPart.type !== \"textPart\") {\n return false\n }\n try {\n const parsed = JSON.parse(firstPart.text)\n return Array.isArray(parsed.remainingTodos) && parsed.remainingTodos.length > 0\n } catch {\n return false\n }\n}\n\nexport async function callingToolLogic({\n setting,\n checkpoint,\n step,\n skillManagers,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n const pendingToolCalls = step.pendingToolCalls ?? step.toolCalls ?? []\n if (pendingToolCalls.length === 0) {\n throw new Error(\"No tool calls found\")\n }\n\n const toolResults: ToolResult[] = step.toolResults ? [...step.toolResults] : []\n\n // Handle attemptCompletion specially\n const attemptCompletionTool = pendingToolCalls.find(\n (tc) => tc.skillName === \"@perstack/base\" && tc.toolName === \"attemptCompletion\",\n )\n if (attemptCompletionTool) {\n const toolResult = await toolExecutorFactory.execute(\n attemptCompletionTool,\n \"mcp\",\n skillManagers,\n )\n if (hasRemainingTodos(toolResult)) {\n return resolveToolResults(setting, checkpoint, { toolResults: [toolResult] })\n }\n return attemptCompletion(setting, checkpoint, { toolResult })\n }\n\n // Classify tool calls by type\n const classified = await classifyToolCalls(pendingToolCalls, skillManagers)\n\n // Execute MCP tools\n if (classified.mcp.length > 0) {\n const mcpResults = await Promise.all(\n classified.mcp.map((c) => toolExecutorFactory.execute(c.toolCall, \"mcp\", skillManagers)),\n )\n toolResults.push(...mcpResults)\n }\n\n // Handle delegate tools\n if (classified.delegate.length > 0) {\n const delegateToolCalls = classified.delegate.map((c) => c.toolCall)\n const interactiveToolCalls = classified.interactive.map((c) => c.toolCall)\n step.partialToolResults = toolResults\n step.pendingToolCalls = [...delegateToolCalls, ...interactiveToolCalls]\n return callDelegate(setting, checkpoint, {\n newMessage: checkpoint.messages[checkpoint.messages.length - 1] as never,\n toolCalls: delegateToolCalls,\n usage: step.usage,\n })\n }\n\n // Handle interactive tools\n if (classified.interactive.length > 0) {\n const interactiveToolCall = classified.interactive[0]?.toolCall\n if (!interactiveToolCall) {\n throw new Error(\"No interactive tool call found\")\n }\n const interactiveToolCalls = classified.interactive.map((c) => c.toolCall)\n step.partialToolResults = toolResults\n step.pendingToolCalls = interactiveToolCalls\n return callInteractiveTool(setting, checkpoint, {\n newMessage: checkpoint.messages[checkpoint.messages.length - 1] as never,\n toolCall: interactiveToolCall,\n usage: step.usage,\n })\n }\n\n return resolveToolResults(setting, checkpoint, { toolResults })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport { continueToNextStep, type RunEvent, stopRunByExceededMaxSteps } from \"@perstack/core\"\nimport type { RunSnapshot } from \"../machine.js\"\n\nexport async function finishingStepLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (setting.maxSteps !== undefined && checkpoint.stepNumber >= setting.maxSteps) {\n return stopRunByExceededMaxSteps(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByExceededMaxSteps\",\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n })\n }\n return continueToNextStep(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n nextCheckpoint: {\n ...checkpoint,\n id: createId(),\n stepNumber: checkpoint.stepNumber + 1,\n },\n })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type {\n ExpertMessage,\n FileBinaryPart,\n FileInlinePart,\n FileUrlPart,\n ImageBinaryPart,\n ImageInlinePart,\n ImageUrlPart,\n InstructionMessage,\n Message,\n TextPart,\n ToolCallPart,\n ToolMessage,\n ToolResultPart,\n UserMessage,\n} from \"@perstack/core\"\nimport type {\n AssistantModelMessage,\n FilePart as FileModelPart,\n ImagePart as ImageModelPart,\n ModelMessage,\n SystemModelMessage,\n TextPart as TextModelPart,\n ToolCallPart as ToolCallModelPart,\n ToolModelMessage,\n ToolResultPart as ToolResultModelPart,\n UserModelMessage,\n} from \"ai\"\nimport { dedent } from \"ts-dedent\"\n\nexport function createUserMessage(\n contents: Array<\n | Omit<TextPart, \"id\">\n | Omit<ImageUrlPart, \"id\">\n | Omit<ImageInlinePart, \"id\">\n | Omit<ImageBinaryPart, \"id\">\n | Omit<FileUrlPart, \"id\">\n | Omit<FileInlinePart, \"id\">\n | Omit<FileBinaryPart, \"id\">\n >,\n): UserMessage {\n return {\n type: \"userMessage\",\n contents: contents.map((part) => ({\n ...part,\n id: createId(),\n })),\n id: createId(),\n }\n}\n\nexport function createExpertMessage(\n contents: Array<Omit<TextPart, \"id\"> | Omit<ToolCallPart, \"id\">>,\n): ExpertMessage {\n return {\n type: \"expertMessage\",\n contents: contents.map((part) => ({\n ...part,\n id: createId(),\n })),\n id: createId(),\n }\n}\n\nexport function createToolMessage(\n contents: Array<\n Omit<ToolResultPart, \"id\" | \"contents\"> & {\n contents: Array<\n Omit<TextPart, \"id\"> | Omit<ImageInlinePart, \"id\"> | Omit<FileInlinePart, \"id\">\n >\n }\n >,\n): ToolMessage {\n return {\n type: \"toolMessage\",\n contents: contents.map((part) => ({\n ...part,\n contents: part.contents.map((part) => ({\n ...part,\n id: createId(),\n })),\n id: createId(),\n })),\n id: createId(),\n }\n}\n\nexport function messageToCoreMessage(message: Message): ModelMessage {\n switch (message.type) {\n case \"instructionMessage\":\n return {\n role: \"system\",\n content: instructionContentsToCoreContent(message.contents),\n providerOptions: message.cache\n ? {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n }\n : undefined,\n }\n case \"userMessage\":\n return {\n role: \"user\",\n content: userContentsToCoreContent(message.contents),\n providerOptions: message.cache\n ? {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n }\n : undefined,\n }\n case \"expertMessage\":\n return {\n role: \"assistant\",\n content: expertContentsToCoreContent(message.contents),\n providerOptions: message.cache\n ? {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n }\n : undefined,\n }\n case \"toolMessage\":\n return {\n role: \"tool\",\n content: toolContentsToCoreContent(message.contents),\n providerOptions: message.cache\n ? {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n }\n : undefined,\n }\n }\n}\nfunction instructionContentsToCoreContent(\n contents: InstructionMessage[\"contents\"],\n): SystemModelMessage[\"content\"] {\n return contents.reduce((acc, part) => {\n return dedent`\n ${acc}\n ${part.text}\n `.trim()\n }, \"\" as string)\n}\nfunction userContentsToCoreContent(contents: UserMessage[\"contents\"]): UserModelMessage[\"content\"] {\n return contents.map((part) => {\n switch (part.type) {\n case \"textPart\":\n return textPartToCoreTextPart(part)\n case \"imageUrlPart\":\n return imageUrlPartToCoreImagePart(part)\n case \"imageInlinePart\":\n return imageInlinePartToCoreImagePart(part)\n case \"imageBinaryPart\":\n return imageBinaryPartToCoreImagePart(part)\n case \"fileUrlPart\":\n return fileUrlPartToCoreFilePart(part)\n case \"fileInlinePart\":\n return fileInlinePartToCoreFilePart(part)\n case \"fileBinaryPart\":\n return fileBinaryPartToCoreFilePart(part)\n default:\n throw new Error(`Unknown user content type: ${(part as { type: string }).type}`)\n }\n })\n}\nfunction expertContentsToCoreContent(\n contents: ExpertMessage[\"contents\"],\n): AssistantModelMessage[\"content\"] {\n return contents.map((part) => {\n switch (part.type) {\n case \"textPart\":\n return textPartToCoreTextPart(part)\n case \"toolCallPart\":\n return toolCallPartToCoreToolCallPart(part)\n default:\n throw new Error(`Unknown expert content type: ${(part as { type: string }).type}`)\n }\n })\n}\nfunction toolContentsToCoreContent(contents: ToolMessage[\"contents\"]): ToolModelMessage[\"content\"] {\n return contents.map((part) => {\n switch (part.type) {\n case \"toolResultPart\":\n return toolResultPartToCoreToolResultPart(part)\n default:\n throw new Error(`Unknown tool content type: ${(part as { type: string }).type}`)\n }\n })\n}\nfunction textPartToCoreTextPart(part: TextPart): TextModelPart {\n return {\n type: \"text\",\n text: part.text,\n }\n}\nfunction imageUrlPartToCoreImagePart(part: ImageUrlPart): ImageModelPart {\n return {\n type: \"image\",\n image: part.url,\n mediaType: part.mimeType,\n }\n}\nfunction imageInlinePartToCoreImagePart(part: ImageInlinePart): ImageModelPart {\n return {\n type: \"image\",\n image: part.encodedData,\n mediaType: part.mimeType,\n }\n}\nfunction imageBinaryPartToCoreImagePart(part: ImageBinaryPart): ImageModelPart {\n return {\n type: \"image\",\n image: part.data,\n mediaType: part.mimeType,\n }\n}\nfunction fileUrlPartToCoreFilePart(part: FileUrlPart): FileModelPart {\n return {\n type: \"file\",\n data: part.url,\n mediaType: part.mimeType,\n }\n}\nfunction fileInlinePartToCoreFilePart(part: FileInlinePart): FileModelPart {\n return {\n type: \"file\",\n data: part.encodedData,\n mediaType: part.mimeType,\n }\n}\nfunction fileBinaryPartToCoreFilePart(part: FileBinaryPart): FileModelPart {\n return {\n type: \"file\",\n data: part.data,\n mediaType: part.mimeType,\n }\n}\nfunction toolCallPartToCoreToolCallPart(part: ToolCallPart): ToolCallModelPart {\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.args,\n }\n}\nfunction toolResultPartToCoreToolResultPart(part: ToolResultPart): ToolResultModelPart {\n const { contents } = part\n if (contents.length === 1 && contents[0].type === \"textPart\") {\n return {\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: { type: \"text\" as const, value: contents[0].text },\n }\n }\n const contentValue = contents.map((content) => {\n if (content.type === \"textPart\") {\n return { type: \"text\" as const, text: content.text }\n }\n return { type: \"media\" as const, data: content.encodedData, mediaType: content.mimeType }\n })\n return {\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: { type: \"content\" as const, value: contentValue },\n }\n}\n","import { completeRun, type RunEvent, retry } from \"@perstack/core\"\nimport { type GenerateTextResult, generateText, type ToolSet } from \"ai\"\nimport { calculateContextWindowUsage, getModel } from \"../../helpers/model.js\"\nimport { createEmptyUsage, sumUsage, usageFromGenerateTextResult } from \"../../helpers/usage.js\"\nimport {\n createExpertMessage,\n createToolMessage,\n createUserMessage,\n messageToCoreMessage,\n} from \"../../messages/message.js\"\nimport type { RunSnapshot } from \"../machine.js\"\n\nexport async function generatingRunResultLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.toolCalls || !step.toolResults || step.toolResults.length === 0) {\n throw new Error(\"No tool calls or tool results found\")\n }\n const toolResultParts = step.toolResults.map((toolResult) => {\n const toolCall = step.toolCalls?.find((tc) => tc.id === toolResult.id)\n return {\n type: \"toolResultPart\" as const,\n toolCallId: toolResult.id,\n toolName: toolCall?.toolName ?? toolResult.toolName,\n contents: toolResult.result.filter(\n (part) =>\n part.type === \"textPart\" ||\n part.type === \"imageInlinePart\" ||\n part.type === \"fileInlinePart\",\n ),\n }\n })\n const toolMessage = createToolMessage(toolResultParts)\n const model = getModel(setting.model, setting.providerConfig, { proxyUrl: setting.proxyUrl })\n const { messages } = checkpoint\n let generationResult: GenerateTextResult<ToolSet, never>\n try {\n generationResult = await generateText({\n model,\n messages: [...messages, toolMessage].map(messageToCoreMessage),\n temperature: setting.temperature,\n maxRetries: setting.maxRetries,\n abortSignal: AbortSignal.timeout(setting.timeout),\n })\n } catch (error) {\n if (error instanceof Error) {\n const reason = JSON.stringify({ error: error.name, message: error.message })\n return retry(setting, checkpoint, {\n reason,\n newMessages: [toolMessage, createUserMessage([{ type: \"textPart\", text: reason }])],\n usage: createEmptyUsage(),\n })\n }\n throw error\n }\n const usage = usageFromGenerateTextResult(generationResult)\n const { text } = generationResult\n const newMessages = [toolMessage, createExpertMessage(text ? [{ type: \"textPart\", text }] : [])]\n return completeRun(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n messages: [...messages, ...newMessages],\n usage: sumUsage(checkpoint.usage, usage),\n contextWindowUsage: checkpoint.contextWindow\n ? calculateContextWindowUsage(usage, checkpoint.contextWindow)\n : undefined,\n status: \"completed\",\n },\n step: {\n ...step,\n newMessages: [...step.newMessages, ...newMessages],\n finishedAt: Date.now(),\n usage: sumUsage(step.usage, usage),\n },\n text,\n usage,\n })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport {\n callTools,\n type RunEvent,\n retry,\n type TextPart,\n type ToolCall,\n type ToolCallPart,\n} from \"@perstack/core\"\nimport { type GenerateTextResult, generateText, type ToolSet } from \"ai\"\nimport { getModel } from \"../../helpers/model.js\"\nimport { createEmptyUsage, usageFromGenerateTextResult } from \"../../helpers/usage.js\"\nimport {\n createExpertMessage,\n createToolMessage,\n createUserMessage,\n messageToCoreMessage,\n} from \"../../messages/message.js\"\nimport type { BaseSkillManager } from \"../../skill-manager/index.js\"\nimport { getSkillManagerByToolName, getToolSet } from \"../../skill-manager/index.js\"\nimport type { RunSnapshot } from \"../machine.js\"\n\ntype ClassifiedToolCall = {\n toolCallId: string\n toolName: string\n input: Record<string, unknown>\n skillManager: BaseSkillManager\n}\n\nasync function classifyToolCalls(\n toolCalls: Array<{ toolCallId: string; toolName: string; input: unknown }>,\n skillManagers: Record<string, BaseSkillManager>,\n): Promise<ClassifiedToolCall[]> {\n return Promise.all(\n toolCalls.map(async (tc) => {\n const skillManager = await getSkillManagerByToolName(skillManagers, tc.toolName)\n return {\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n input: tc.input as Record<string, unknown>,\n skillManager,\n }\n }),\n )\n}\n\nfunction sortToolCallsByPriority(toolCalls: ClassifiedToolCall[]): ClassifiedToolCall[] {\n const priority = { mcp: 0, delegate: 1, interactive: 2 }\n return [...toolCalls].sort(\n (a, b) => (priority[a.skillManager.type] ?? 99) - (priority[b.skillManager.type] ?? 99),\n )\n}\n\nfunction buildToolCallParts(toolCalls: ClassifiedToolCall[]): Array<Omit<ToolCallPart, \"id\">> {\n return toolCalls.map((tc) => ({\n type: \"toolCallPart\" as const,\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n args: tc.input,\n }))\n}\n\nfunction buildToolCalls(toolCalls: ClassifiedToolCall[]): ToolCall[] {\n return toolCalls.map((tc) => ({\n id: tc.toolCallId,\n skillName: tc.skillManager.name,\n toolName: tc.toolName,\n args: tc.input,\n }))\n}\n\nexport async function generatingToolCallLogic({\n setting,\n checkpoint,\n skillManagers,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n const { messages } = checkpoint\n const model = getModel(setting.model, setting.providerConfig, { proxyUrl: setting.proxyUrl })\n let result: GenerateTextResult<ToolSet, never>\n try {\n result = await generateText({\n model,\n messages: messages.map(messageToCoreMessage),\n temperature: setting.temperature,\n maxRetries: setting.maxRetries,\n tools: await getToolSet(skillManagers),\n toolChoice: \"required\",\n abortSignal: AbortSignal.timeout(setting.timeout),\n })\n } catch (error) {\n if (error instanceof Error) {\n const reason = JSON.stringify({ error: error.name, message: error.message })\n return retry(setting, checkpoint, {\n reason,\n newMessages: [createUserMessage([{ type: \"textPart\", text: reason }])],\n usage: createEmptyUsage(),\n })\n }\n throw error\n }\n const usage = usageFromGenerateTextResult(result)\n const { text, toolCalls, finishReason } = result\n if (toolCalls.length === 0) {\n const reason = JSON.stringify({\n error: \"Error: No tool call generated\",\n message: \"You must generate a tool call. Try again.\",\n })\n return retry(setting, checkpoint, {\n reason,\n newMessages: [createUserMessage([{ type: \"textPart\", text: reason }])],\n usage,\n })\n }\n const classified = await classifyToolCalls(toolCalls, skillManagers)\n const sorted = sortToolCallsByPriority(classified)\n if (finishReason === \"tool-calls\" || finishReason === \"stop\") {\n const toolCallParts = buildToolCallParts(sorted)\n const contents: Array<Omit<TextPart, \"id\"> | Omit<ToolCallPart, \"id\">> = [...toolCallParts]\n if (text) {\n contents.push({ type: \"textPart\", text })\n }\n const allToolCalls = buildToolCalls(sorted)\n return callTools(setting, checkpoint, {\n newMessage: createExpertMessage(contents),\n toolCalls: allToolCalls,\n usage,\n })\n }\n if (finishReason === \"length\") {\n const firstToolCall = sorted[0]\n if (!firstToolCall) {\n throw new Error(\"No tool call found\")\n }\n const reason = JSON.stringify({\n error: \"Error: Tool call generation failed\",\n message: \"Generation length exceeded. Try again.\",\n })\n return retry(setting, checkpoint, {\n reason,\n newMessages: [\n createExpertMessage([\n {\n type: \"toolCallPart\",\n toolCallId: firstToolCall.toolCallId,\n toolName: firstToolCall.toolName,\n args: firstToolCall.input,\n },\n ]),\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: firstToolCall.toolCallId,\n toolName: firstToolCall.toolName,\n contents: [{ type: \"textPart\", text: reason }],\n },\n ]),\n ],\n toolCalls: [\n {\n id: firstToolCall.toolCallId,\n skillName: firstToolCall.skillManager.name,\n toolName: firstToolCall.toolName,\n args: firstToolCall.input,\n },\n ],\n toolResults: [\n {\n id: firstToolCall.toolCallId,\n skillName: firstToolCall.skillManager.name,\n toolName: firstToolCall.toolName,\n result: [{ type: \"textPart\", id: createId(), text: reason }],\n },\n ],\n usage,\n })\n }\n throw new Error(`Unexpected finish reason: ${finishReason}`)\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type { Expert, InstructionMessage } from \"@perstack/core\"\nimport { dedent } from \"ts-dedent\"\n\nfunction getMetaInstruction(startedAt: number): string {\n return dedent`\n IMPORTANT:\n Based on the user's initial message, you must determine what needs to be done.\n You must iterate through hypothesis and verification to fulfill the task.\n YOU MUST CONTINUE TO CALL TOOLS UNTIL THE TASK IS COMPLETE.\n If you do not call tools, the task will be considered complete, and the agent loop will end.\n\n You operate in an agent loop, iteratively completing tasks through these steps:\n 1. Analyze Events: Understand user needs and current state through the event stream, focusing on the latest user messages and execution results\n 2. Select Tools: Choose the next tool call based on current state, task planning, relevant knowledge, and available data APIs\n 3. Wait for Execution: The selected tool action will be executed by the sandbox environment with new observations added to the event stream\n 4. Iterate: Choose only one tool call per iteration, patiently repeat the above steps until task completion\n 5. Notify Task Completion: Call the attemptCompletion tool to inform the user when the task is complete\n 6. Generate Final Results: Produce a final result that clearly describes each task you performed, step by step\n\n Conditions for ending the agent loop:\n If any of the following apply, **immediately call the attemptCompletion tool**.\n When the agent loop must end, calling any tool other than attemptCompletion is highly dangerous.\n Under all circumstances, strictly follow this rule.\n - When the task is complete\n - When the user's request is outside your expertise\n - When the user's request is unintelligible\n\n Rules for requests outside your area of expertise:\n - Tell your area of expertise to the user in final results\n\n Environment information:\n - Current time is ${new Date(startedAt).toISOString()}\n - Current working directory is ${process.cwd()}\n `\n}\n\nexport function createInstructionMessage(\n expert: Expert,\n experts: Record<string, Expert>,\n startedAt: number,\n): InstructionMessage {\n const instruction = dedent`\n You are Perstack, an AI expert that tackles tasks requested by users by utilizing all available tools.\n\n (The following information describes your nature and role as an AI, the mechanisms of the AI system, and other meta-cognitive aspects.)\n\n ${getMetaInstruction(startedAt)}\n\n ---\n (The following describes the objective, steps, rules, etc. regarding your expert task.)\n\n ${expert.instruction}\n\n ---\n (The following is an overview of each skill and the rules for calling tools.)\n\n ${getSkillRules(expert)}\n\n ---\n (The following is an overview of each delegate expert and the rules for calling tools.)\n\n You can delegate tasks to the following experts by calling delegate expert name as a tool:\n\n ${getDelegateRules(expert, experts)}\n `\n return {\n type: \"instructionMessage\",\n contents: [\n {\n id: createId(),\n type: \"textPart\",\n text: instruction,\n },\n ],\n id: createId(),\n cache: true,\n }\n}\n\nfunction getSkillRules(expert: Expert): string {\n return Object.values(expert.skills).reduce((acc, skill) => {\n if (!skill.rule) {\n return acc\n }\n return dedent`\n ${acc}\n\n \"${skill.name}\" skill rules:\n ${skill.rule}\n `.trim()\n }, \"\" as string)\n}\n\nfunction getDelegateRules(expert: Expert, experts: Record<string, Expert>): string {\n return expert.delegates.reduce((acc, delegateExpertName) => {\n const delegate = experts[delegateExpertName]\n if (!delegate) {\n return acc\n }\n return dedent`\n ${acc}\n\n About \"${delegate.name}\":\n ${delegate.description}\n `.trim()\n }, \"\" as string)\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport { type RunEvent, startRun, type ToolResult } from \"@perstack/core\"\nimport { createInstructionMessage } from \"../../messages/instruction-message.js\"\nimport { createUserMessage } from \"../../messages/message.js\"\nimport type { RunSnapshot } from \"../machine.js\"\n\nexport async function initLogic({\n setting,\n checkpoint,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n const { expertKey, experts } = setting\n const expert = experts[expertKey]\n switch (checkpoint.status) {\n case \"init\": {\n if (!setting.input.text) {\n throw new Error(\"Input message is undefined\")\n }\n return startRun(setting, checkpoint, {\n initialCheckpoint: checkpoint,\n inputMessages: [\n createInstructionMessage(expert, experts, setting.startedAt),\n createUserMessage([{ type: \"textPart\", text: setting.input.text }]),\n ],\n })\n }\n case \"stoppedByDelegate\":\n case \"stoppedByInteractiveTool\": {\n if (!setting.input.interactiveToolCallResult) {\n throw new Error(\"Interactive tool call result is undefined\")\n }\n const { toolCallId, toolName, skillName, text } = setting.input.interactiveToolCallResult\n const pendingToolCalls = checkpoint.pendingToolCalls ?? []\n const newToolResult: ToolResult = {\n id: toolCallId,\n skillName,\n toolName,\n result: [{ type: \"textPart\", id: createId(), text }],\n }\n const updatedPartialResults = [...(checkpoint.partialToolResults ?? []), newToolResult]\n const updatedPendingToolCalls = pendingToolCalls.filter((tc) => tc.id !== toolCallId)\n const updatedCheckpoint = {\n ...checkpoint,\n partialToolResults: updatedPartialResults,\n pendingToolCalls: updatedPendingToolCalls.length > 0 ? updatedPendingToolCalls : undefined,\n }\n return startRun(setting, updatedCheckpoint, {\n initialCheckpoint: updatedCheckpoint,\n inputMessages: [],\n })\n }\n default:\n if (!setting.input.text) {\n throw new Error(\"Input message is undefined\")\n }\n return startRun(setting, checkpoint, {\n initialCheckpoint: checkpoint,\n inputMessages: [createUserMessage([{ type: \"textPart\", text: setting.input.text }])],\n })\n }\n}\n","import { finishAllToolCalls, type RunEvent, resumeToolCalls, startGeneration } from \"@perstack/core\"\nimport { createToolMessage } from \"../../messages/message.js\"\nimport type { RunSnapshot } from \"../machine.js\"\n\nexport async function preparingForStepLogic({\n setting,\n checkpoint,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (checkpoint.pendingToolCalls && checkpoint.pendingToolCalls.length > 0) {\n return resumeToolCalls(setting, checkpoint, {\n pendingToolCalls: checkpoint.pendingToolCalls,\n partialToolResults: checkpoint.partialToolResults ?? [],\n })\n }\n if (checkpoint.partialToolResults && checkpoint.partialToolResults.length > 0) {\n const toolResultParts = checkpoint.partialToolResults.map((tr) => ({\n type: \"toolResultPart\" as const,\n toolCallId: tr.id,\n toolName: tr.toolName,\n contents: tr.result.filter(\n (part) =>\n part.type === \"textPart\" ||\n part.type === \"imageInlinePart\" ||\n part.type === \"fileInlinePart\",\n ),\n }))\n return finishAllToolCalls(setting, checkpoint, {\n newMessages: [createToolMessage(toolResultParts)],\n })\n }\n return startGeneration(setting, checkpoint, {\n messages: checkpoint.messages,\n })\n}\n","import { finishToolCall, type RunEvent } from \"@perstack/core\"\nimport { createToolMessage } from \"../../messages/message.js\"\nimport type { RunSnapshot } from \"../machine.js\"\n\nexport async function resolvingToolResultLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.toolCalls || !step.toolResults || step.toolResults.length === 0) {\n throw new Error(\"No tool calls or tool results found\")\n }\n const toolResultParts = step.toolResults.map((toolResult) => {\n const toolCall = step.toolCalls?.find((tc) => tc.id === toolResult.id)\n return {\n type: \"toolResultPart\" as const,\n toolCallId: toolResult.id,\n toolName: toolCall?.toolName ?? toolResult.toolName,\n contents: toolResult.result.filter(\n (part) =>\n part.type === \"textPart\" ||\n part.type === \"imageInlinePart\" ||\n part.type === \"fileInlinePart\",\n ),\n }\n })\n return finishToolCall(setting, checkpoint, {\n newMessages: [createToolMessage(toolResultParts)],\n })\n}\n","import type { RunEvent } from \"@perstack/core\"\nimport type { RunSnapshot } from \"../machine.js\"\nimport { resolvingToolResultLogic } from \"./resolving-tool-result.js\"\n\nexport async function resolvingThoughtLogic(context: RunSnapshot[\"context\"]): Promise<RunEvent> {\n return resolvingToolResultLogic(context)\n}\n","import type { Checkpoint, RunEvent, RunSetting, Step } from \"@perstack/core\"\nimport { type ActorRefFrom, assign, type SnapshotFrom, setup } from \"xstate\"\nimport { calculateContextWindowUsage } from \"../helpers/model.js\"\nimport { createEmptyUsage, sumUsage } from \"../helpers/usage.js\"\nimport type { BaseSkillManager } from \"../skill-manager/index.js\"\nimport { callingDelegateLogic } from \"./states/calling-delegate.js\"\nimport { callingInteractiveToolLogic } from \"./states/calling-interactive-tool.js\"\nimport { callingToolLogic } from \"./states/calling-tool.js\"\nimport { finishingStepLogic } from \"./states/finishing-step.js\"\nimport { generatingRunResultLogic } from \"./states/generating-run-result.js\"\nimport { generatingToolCallLogic } from \"./states/generating-tool-call.js\"\nimport { initLogic } from \"./states/init.js\"\nimport { preparingForStepLogic } from \"./states/preparing-for-step.js\"\nimport { resolvingThoughtLogic } from \"./states/resolving-thought.js\"\nimport { resolvingToolResultLogic } from \"./states/resolving-tool-result.js\"\n\nexport const runtimeStateMachine = setup({\n types: {\n input: {} as {\n setting: RunSetting\n initialCheckpoint: Checkpoint\n eventListener: (event: RunEvent) => Promise<void>\n skillManagers: Record<string, BaseSkillManager>\n },\n context: {} as {\n setting: RunSetting\n step: Step\n checkpoint: Checkpoint\n eventListener: (event: RunEvent) => Promise<void>\n skillManagers: Record<string, BaseSkillManager>\n },\n events: {} as RunEvent,\n },\n}).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QCUCuA7AdASXQSwBcBiWAgQwCcC10BtABgF1FQAHAe1kL3fRZAAeiAKz0AzJgDsAJgAsksZNlixs+gDZZAGhABPRIszCAjGIAcY4crPHhJyQF8HOmpgAKFMK0p50UAGLsFADKBF4k5FQA4mDoYBRkBDx0TPwcXEm8-EIIZmaymPRK8saSopL00tI6+gjq9JjSltLG9HnqZkqdTi4YmDFxCUl+ACrs7AA2AMJkExNEngQUugzMSCDp3FnrOcam0pgAnHbS9GeSZsIq6jWIh2KHUsYd9MbSwl2S6j0grgPxiV8UDGkxmcyIAGNZhMQRNVmlOFs+DtEPt1Jg3odpGVbFcrLcENIzOjbGYipIZMpnmYfn9YgDhsDxtNoZDobgwgkIUkAG5gWHw9abTLI0C7ImSTDqYTY2S45TCCwE54HUr1WRXSqHcRVWl9f5DIGwsHzKFzAAiYAmYCgiTAgrYiJF2VRYnoj1ehwskkOZTEz2EBMMJnMFnezxUF2+zl+fRNRuZCzgkz5sOQcFQEwIDo2TuSLoQpWJUvowl9Flk0sqBLlZik2Mkpjyan90d6WHjo0TnlgKf5AAt2KgoP3s6khXntmLUT6JL6PkoFJX1MZtHoRKIpdrK3sqorpG3Yx3oQnJknexM+W4IAAzfx4a054X5lGFn2PMTYlSyWQH32WAl1DKKV1Q6L1V1EWQ9WPOZT3mHs+2wABbMgYHvR9x0dDIX2nN8zEeOVjGORsmgsMQCTJYRMGJORwP9MwDxpGNXE7Jkz0SMIkNYAgpnYLjrRFJ9J1FQQZzJTBPxUfDDjlN1OgJIkSUVUtDlXCpsUPVx0wvHk4O0zNiBvXw8FgftjWhITsKnUTCU-SU92JMlfSaGtjDrGQKSbfJxGeaDMG0lMjUHYdRyIIz8FM8y5kspECyabFGneRz3RkN011qOwGnUbcVzeJKDz8gLLyBa87wfMAwuMyLmRNGLnVfeL7KSl5nPI9c6mA9RQPwmwNVLQrk2KvxkNQsB0Iq8KTLMmqLMw3MrJEnJGsSxUWtSgkfSU-JDmIqNKj8g1AT8Gh9KzSE+NYASwBoOqcJs+K61sDo5SKBifwU4tSRUtTKi+KDmLjE9hvQTkyG5PBU0TUh2FYGgACFdA5AFwchyZbus3YyklYRst-DUlDEaU2tqFUMS+NyPmlPZDiAvzWMta1bTCCIYfh3QGZtO10cWmcLiOQnG3qHHiSDbGvM-Ex1EjYk-PvCL+yBUJwghXhhlQfl2AAOTAAQCCV1hubiqxjCMRUZXMGSvVUZV6A1LcuorDp8I0WWqoVvx9ZZ2GMARgBRAQITASBIAAWTIAR9dgQ2Gs0Ki8nyK4bCuDVRZNzRwxse4GK6pwY3QdgIDgfgaARBaCxUBosU0cw5TLUiCQAWlkR4nPdbVCeyld-vbHB8AIUvYtfRQ6yr6xa6xcwCTLaiadj1dKxk1phD8jwvB8PxAhCMJWAH+rcKAyuyVaa5Wi+KeW9njV59xpeDvpQ0u1BaFd7u3Y2keDpO7LW2FDLc+Z6AnsPEO4ZYAxghMOCL8MaojsJKYi8cHZ5C9EGNoRg1CdH3GcZeYD-KDV0o-CYp1+4TjLg1cQkp-SfjDE9Ew1R2o-hNnsUs1MfR-UuANHSQUhwjmIVhQeuFTg-ilF8GUblTgKDoRlBQhQJEaiJMnfCHDAp+FKuNKBPNCSlgaOIeQttWxS0DO1bKdY9HvH9D+FotMcFFXwVAEaaFyrqLirbBo1M7KvFUDJCiRJGgalUM3LEMk5R30GEdKAJ0MxZicWQlQEklAyillWVoZgUF1isG0MoDEsF0yBnYkGyNeQa0mNE3CtgiIYnEEBToFwvS+mVPkU20l8JWG1OIHJsE-AcyZmAEpNlbBqEwLo7yVRbY3HatPfCXUOgfCsGSTQmk+hyymorbevSloykeFYCkrxfqrmJiIaRRQ7JbP8Q8PyoQYasEgGsxA2JWiNB-jjdQTRqb1IkP6OwRF8KMSAbnBwQA */\n id: \"Run\",\n initial: \"Init\",\n context: ({ input }) => ({\n setting: input.setting,\n checkpoint: input.initialCheckpoint,\n step: {\n stepNumber: input.initialCheckpoint.stepNumber,\n inputMessages: [],\n newMessages: [],\n usage: createEmptyUsage(),\n startedAt: Date.now(),\n },\n eventListener: input.eventListener,\n skillManagers: input.skillManagers,\n }),\n states: {\n Init: {\n on: {\n startRun: {\n target: \"PreparingForStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n status: \"proceeding\",\n messages: [...context.checkpoint.messages, ...event.inputMessages],\n pendingToolCalls: event.initialCheckpoint.pendingToolCalls,\n partialToolResults: event.initialCheckpoint.partialToolResults,\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n inputMessages: event.inputMessages,\n }) satisfies Step,\n }),\n },\n },\n },\n\n PreparingForStep: {\n on: {\n startGeneration: {\n target: \"GeneratingToolCall\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n stepNumber: context.checkpoint.stepNumber,\n inputMessages: context.step.inputMessages ?? [],\n newMessages: [],\n usage: createEmptyUsage(),\n startedAt: event.timestamp,\n }) satisfies Step,\n }),\n },\n resumeToolCalls: {\n target: \"CallingTool\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n stepNumber: context.checkpoint.stepNumber,\n inputMessages: context.step.inputMessages ?? [],\n newMessages: context.step.newMessages,\n toolCalls: context.step.toolCalls,\n toolResults: event.partialToolResults,\n pendingToolCalls: event.pendingToolCalls,\n usage: context.step.usage,\n startedAt: context.step.startedAt,\n }) satisfies Step,\n }),\n },\n finishAllToolCalls: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n pendingToolCalls: undefined,\n partialToolResults: undefined,\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [...context.step.newMessages, ...event.newMessages],\n toolResults: context.checkpoint.partialToolResults,\n pendingToolCalls: undefined,\n }) satisfies Step,\n }),\n },\n },\n },\n\n GeneratingToolCall: {\n on: {\n retry: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: event.newMessages,\n toolCalls: event.toolCalls,\n toolResults: event.toolResults,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n callTools: {\n target: \"CallingTool\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, event.newMessage],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n contextWindowUsage: context.checkpoint.contextWindow\n ? calculateContextWindowUsage(event.usage, context.checkpoint.contextWindow)\n : undefined,\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [event.newMessage],\n toolCalls: event.toolCalls,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n callInteractiveTool: {\n target: \"CallingInteractiveTool\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, event.newMessage],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n contextWindowUsage: context.checkpoint.contextWindow\n ? calculateContextWindowUsage(event.usage, context.checkpoint.contextWindow)\n : undefined,\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [event.newMessage],\n toolCalls: [event.toolCall],\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n callDelegate: {\n target: \"CallingDelegate\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, event.newMessage],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n contextWindowUsage: context.checkpoint.contextWindow\n ? calculateContextWindowUsage(event.usage, context.checkpoint.contextWindow)\n : undefined,\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [event.newMessage],\n toolCalls: event.toolCalls,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n },\n },\n\n CallingTool: {\n on: {\n resolveToolResults: {\n target: \"ResolvingToolResult\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResults: event.toolResults,\n pendingToolCalls: undefined,\n }) satisfies Step,\n }),\n },\n resolveThought: {\n target: \"ResolvingThought\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResults: [event.toolResult],\n }) satisfies Step,\n }),\n },\n attemptCompletion: {\n target: \"GeneratingRunResult\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResults: [event.toolResult],\n }) satisfies Step,\n }),\n },\n callDelegate: {\n target: \"CallingDelegate\",\n actions: assign({\n step: ({ context }) =>\n ({\n ...context.step,\n toolCalls: context.step.toolCalls,\n toolResults: context.step.toolResults,\n pendingToolCalls: context.step.pendingToolCalls,\n partialToolResults: context.step.partialToolResults,\n }) satisfies Step,\n }),\n },\n callInteractiveTool: {\n target: \"CallingInteractiveTool\",\n actions: assign({\n step: ({ context }) =>\n ({\n ...context.step,\n toolCalls: context.step.toolCalls,\n toolResults: context.step.toolResults,\n pendingToolCalls: context.step.pendingToolCalls,\n partialToolResults: context.step.partialToolResults,\n }) satisfies Step,\n }),\n },\n },\n },\n\n ResolvingToolResult: {\n on: {\n finishToolCall: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [...context.step.newMessages, ...event.newMessages],\n }) satisfies Step,\n }),\n },\n },\n },\n\n ResolvingThought: {\n on: {\n finishToolCall: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [...context.step.newMessages, ...event.newMessages],\n }) satisfies Step,\n }),\n },\n },\n },\n\n GeneratingRunResult: {\n on: {\n retry: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: event.newMessages,\n toolCalls: event.toolCalls,\n toolResults: event.toolResults,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n completeRun: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n },\n },\n\n CallingInteractiveTool: {\n on: {\n stopRunByInteractiveTool: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n },\n },\n\n CallingDelegate: {\n on: {\n stopRunByDelegate: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n },\n },\n\n FinishingStep: {\n on: {\n continueToNextStep: {\n target: \"PreparingForStep\",\n actions: assign({\n checkpoint: ({ event }) => event.nextCheckpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n reenter: true,\n },\n stopRunByExceededMaxSteps: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n },\n },\n\n Stopped: {\n type: \"final\",\n },\n },\n})\n\nexport const StateMachineLogics: Record<\n Exclude<RunSnapshot[\"value\"], \"Stopped\">,\n (context: RunSnapshot[\"context\"]) => Promise<RunEvent>\n> = {\n Init: initLogic,\n PreparingForStep: preparingForStepLogic,\n GeneratingToolCall: generatingToolCallLogic,\n CallingTool: callingToolLogic,\n ResolvingToolResult: resolvingToolResultLogic,\n ResolvingThought: resolvingThoughtLogic,\n GeneratingRunResult: generatingRunResultLogic,\n CallingInteractiveTool: callingInteractiveToolLogic,\n CallingDelegate: callingDelegateLogic,\n FinishingStep: finishingStepLogic,\n}\n\nexport type RunActor = ActorRefFrom<typeof runtimeStateMachine>\nexport type RunSnapshot = SnapshotFrom<typeof runtimeStateMachine>\n","import { createActor } from \"xstate\"\nimport { type RunActor, runtimeStateMachine } from \"./machine.js\"\n\nexport type ActorInput = Parameters<typeof createActor<typeof runtimeStateMachine>>[1]\n\n/**\n * Factory interface for creating xstate actors.\n * Allows for dependency injection and easier testing.\n */\nexport interface ActorFactory {\n create(input: ActorInput): RunActor\n}\n\n/**\n * Default implementation of ActorFactory using xstate's createActor.\n */\nexport class DefaultActorFactory implements ActorFactory {\n create(input: ActorInput): RunActor {\n return createActor(runtimeStateMachine, input)\n }\n}\n\n/**\n * Default actor factory instance.\n */\nexport const defaultActorFactory = new DefaultActorFactory()\n","import type { Checkpoint, Expert, RunEvent, RunSetting, RuntimeEvent, Step } from \"@perstack/core\"\nimport type { RunEventEmitter } from \"../events/event-emitter.js\"\nimport { type BaseSkillManager, closeSkillManagers } from \"../skill-manager/index.js\"\nimport { type ActorFactory, defaultActorFactory } from \"./actor-factory.js\"\nimport { type RunActor, type RunSnapshot, StateMachineLogics } from \"./machine.js\"\n\nexport type StateMachineParams = {\n setting: RunSetting & { experts: Record<string, Expert> }\n initialCheckpoint: Checkpoint\n eventListener: (event: RunEvent | RuntimeEvent) => Promise<void>\n skillManagers: Record<string, BaseSkillManager>\n eventEmitter: RunEventEmitter\n storeCheckpoint: (checkpoint: Checkpoint) => Promise<void>\n shouldContinueRun?: (setting: RunSetting, checkpoint: Checkpoint, step: Step) => Promise<boolean>\n}\n\nexport type StateMachineLogicsType = typeof StateMachineLogics\n\nexport interface CoordinatorDependencies {\n actorFactory?: ActorFactory\n closeSkillManagers?: (managers: Record<string, BaseSkillManager>) => Promise<void>\n logics?: StateMachineLogicsType\n}\n\n/**\n * Coordinator class for managing the runtime state machine execution.\n * Provides dependency injection for improved testability.\n */\nexport class StateMachineCoordinator {\n private readonly actorFactory: ActorFactory\n private readonly closeManagers: (managers: Record<string, BaseSkillManager>) => Promise<void>\n private readonly logics: StateMachineLogicsType\n\n private actor: RunActor | null = null\n private resolvePromise: ((checkpoint: Checkpoint) => void) | null = null\n private rejectPromise: ((error: Error) => void) | null = null\n\n constructor(\n private readonly params: StateMachineParams,\n deps: CoordinatorDependencies = {},\n ) {\n this.actorFactory = deps.actorFactory ?? defaultActorFactory\n this.closeManagers = deps.closeSkillManagers ?? closeSkillManagers\n this.logics = deps.logics ?? StateMachineLogics\n }\n\n /**\n * Execute the state machine and return the final checkpoint.\n */\n async execute(): Promise<Checkpoint> {\n const { setting, initialCheckpoint, eventListener, skillManagers } = this.params\n\n this.actor = this.actorFactory.create({\n input: {\n setting,\n initialCheckpoint,\n eventListener,\n skillManagers,\n },\n })\n\n return new Promise<Checkpoint>((resolve, reject) => {\n this.resolvePromise = resolve\n this.rejectPromise = reject\n\n this.actor!.subscribe((runState) => {\n this.handleStateChange(runState).catch((error) => {\n this.handleError(error)\n })\n })\n\n this.actor!.start()\n })\n }\n\n /**\n * Handle state changes from the actor.\n * Exported for testing purposes.\n */\n async handleStateChange(runState: RunSnapshot): Promise<void> {\n if (runState.value === \"Stopped\") {\n await this.handleStoppedState(runState)\n } else {\n await this.handleActiveState(runState)\n }\n }\n\n /**\n * Handle the stopped state - cleanup and resolve.\n */\n private async handleStoppedState(runState: RunSnapshot): Promise<void> {\n const { checkpoint, skillManagers } = runState.context\n\n if (!checkpoint) {\n throw new Error(\"Checkpoint is undefined\")\n }\n\n await this.closeManagers(skillManagers)\n this.resolvePromise?.(checkpoint)\n }\n\n /**\n * Handle active states - execute logic, store checkpoint, emit events.\n */\n private async handleActiveState(runState: RunSnapshot): Promise<void> {\n const { eventEmitter, storeCheckpoint, shouldContinueRun } = this.params\n const stateValue = runState.value as Exclude<RunSnapshot[\"value\"], \"Stopped\">\n\n const event = await this.logics[stateValue](runState.context)\n\n if (\"checkpoint\" in event) {\n await storeCheckpoint(event.checkpoint)\n }\n\n await eventEmitter.emit(event)\n\n if (shouldContinueRun) {\n const shouldContinue = await shouldContinueRun(\n runState.context.setting,\n runState.context.checkpoint,\n runState.context.step,\n )\n\n if (!shouldContinue) {\n this.actor?.stop()\n await this.closeManagers(runState.context.skillManagers)\n this.resolvePromise?.(runState.context.checkpoint)\n return\n }\n }\n\n this.actor?.send(event)\n }\n\n /**\n * Handle errors - cleanup and reject.\n */\n private async handleError(error: unknown): Promise<void> {\n await this.closeManagers(this.params.skillManagers).catch(() => {})\n this.rejectPromise?.(error instanceof Error ? error : new Error(String(error)))\n }\n}\n","import type { Checkpoint, Expert, RunEvent, RunSetting, RuntimeEvent, Step } from \"@perstack/core\"\nimport type { RunEventEmitter } from \"../events/event-emitter.js\"\nimport type { BaseSkillManager } from \"../skill-manager/index.js\"\nimport { StateMachineCoordinator } from \"./coordinator.js\"\n\nexport type ExecuteStateMachineParams = {\n setting: RunSetting & { experts: Record<string, Expert> }\n initialCheckpoint: Checkpoint\n eventListener: (event: RunEvent | RuntimeEvent) => Promise<void>\n skillManagers: Record<string, BaseSkillManager>\n eventEmitter: RunEventEmitter\n storeCheckpoint: (checkpoint: Checkpoint) => Promise<void>\n shouldContinueRun?: (setting: RunSetting, checkpoint: Checkpoint, step: Step) => Promise<boolean>\n}\n\n/**\n * Execute the runtime state machine.\n * This is a convenience wrapper around StateMachineCoordinator.\n */\nexport async function executeStateMachine(params: ExecuteStateMachineParams): Promise<Checkpoint> {\n const coordinator = new StateMachineCoordinator(params)\n return coordinator.execute()\n}\n","import type { Checkpoint, Expert, RunSetting } from \"@perstack/core\"\nimport { createEmptyUsage } from \"./usage.js\"\n\nexport type CreateInitialCheckpointParams = {\n jobId: string\n runId: string\n expertKey: string\n expert: Pick<Expert, \"name\" | \"version\">\n contextWindow: number | undefined\n}\n\nexport function createInitialCheckpoint(\n checkpointId: string,\n params: CreateInitialCheckpointParams,\n): Checkpoint {\n return {\n id: checkpointId,\n jobId: params.jobId,\n runId: params.runId,\n expert: {\n key: params.expertKey,\n name: params.expert.name,\n version: params.expert.version,\n },\n stepNumber: 1,\n status: \"init\",\n messages: [],\n usage: createEmptyUsage(),\n contextWindow: params.contextWindow,\n contextWindowUsage: params.contextWindow ? 0.0 : undefined,\n }\n}\n\nexport function createNextStepCheckpoint(checkpointId: string, checkpoint: Checkpoint): Checkpoint {\n return {\n ...checkpoint,\n id: checkpointId,\n stepNumber: checkpoint.stepNumber + 1,\n }\n}\n\nexport type DelegationStateResult = {\n setting: RunSetting\n checkpoint: Checkpoint\n}\n\nexport function buildDelegationReturnState(\n currentSetting: RunSetting,\n resultCheckpoint: Checkpoint,\n parentCheckpoint: Checkpoint,\n): DelegationStateResult {\n const { messages, delegatedBy } = resultCheckpoint\n if (!delegatedBy) {\n throw new Error(\"delegatedBy is required for buildDelegationReturnState\")\n }\n const delegateResultMessage = messages[messages.length - 1]\n if (!delegateResultMessage || delegateResultMessage.type !== \"expertMessage\") {\n throw new Error(\"Delegation error: delegation result message is incorrect\")\n }\n const delegateText = delegateResultMessage.contents.find((content) => content.type === \"textPart\")\n if (!delegateText) {\n throw new Error(\"Delegation error: delegation result message does not contain a text\")\n }\n const { expert, toolCallId, toolName } = delegatedBy\n return {\n setting: {\n ...currentSetting,\n expertKey: expert.key,\n input: {\n interactiveToolCallResult: {\n toolCallId,\n toolName,\n skillName: `delegate/${resultCheckpoint.expert.key}`,\n text: delegateText.text,\n },\n },\n },\n checkpoint: {\n ...parentCheckpoint,\n stepNumber: resultCheckpoint.stepNumber,\n usage: resultCheckpoint.usage,\n pendingToolCalls: parentCheckpoint.pendingToolCalls,\n partialToolResults: parentCheckpoint.partialToolResults,\n },\n }\n}\n\nexport function buildDelegateToState(\n currentSetting: RunSetting,\n resultCheckpoint: Checkpoint,\n currentExpert: Pick<Expert, \"key\" | \"name\" | \"version\">,\n): DelegationStateResult {\n const { delegateTo } = resultCheckpoint\n if (!delegateTo || delegateTo.length === 0) {\n throw new Error(\"delegateTo is required for buildDelegateToState\")\n }\n const firstDelegation = delegateTo[0]\n const { expert, toolCallId, toolName, query } = firstDelegation\n return {\n setting: {\n ...currentSetting,\n expertKey: expert.key,\n input: {\n text: query,\n },\n },\n checkpoint: {\n ...resultCheckpoint,\n status: \"init\",\n messages: [],\n expert: {\n key: expert.key,\n name: expert.name,\n version: expert.version,\n },\n delegatedBy: {\n expert: {\n key: currentExpert.key,\n name: currentExpert.name,\n version: currentExpert.version,\n },\n toolCallId,\n toolName,\n checkpointId: resultCheckpoint.id,\n },\n usage: resultCheckpoint.usage,\n pendingToolCalls: undefined,\n partialToolResults: undefined,\n },\n }\n}\n","import { type ApiRegistryExpert, ApiV1Client } from \"@perstack/api-client/v1\"\nimport type { Expert, Skill } from \"@perstack/core\"\n\nexport async function resolveExpertToRun(\n expertKey: string,\n experts: Record<string, Expert>,\n clientOptions: {\n perstackApiBaseUrl: string\n perstackApiKey?: string\n },\n): Promise<Expert> {\n if (experts[expertKey]) {\n return experts[expertKey]\n }\n const client = new ApiV1Client({\n baseUrl: clientOptions.perstackApiBaseUrl,\n apiKey: clientOptions.perstackApiKey,\n })\n const { expert } = await client.registry.experts.get({ expertKey })\n return toRuntimeExpert(expert)\n}\n\nfunction toRuntimeExpert(expert: ApiRegistryExpert): Expert {\n const skills: Record<string, Skill> = Object.fromEntries(\n Object.entries(expert.skills).map(([name, skill]) => {\n switch (skill.type) {\n case \"mcpStdioSkill\":\n return [name, { ...skill, name }]\n case \"mcpSseSkill\":\n return [name, { ...skill, name }]\n case \"interactiveSkill\":\n return [name, { ...skill, name }]\n default: {\n throw new Error(`Unknown skill type: ${(skill as { type: string }).type}`)\n }\n }\n }),\n )\n return { ...expert, skills }\n}\n","import type { Expert, RunSetting } from \"@perstack/core\"\nimport { resolveExpertToRun as defaultResolveExpertToRun } from \"./resolve-expert.js\"\n\nexport type ResolveExpertToRunFn = (\n expertKey: string,\n experts: Record<string, Expert>,\n clientOptions: { perstackApiBaseUrl: string; perstackApiKey?: string },\n) => Promise<Expert>\n\nexport type SetupExpertsResult = {\n expertToRun: Expert\n experts: Record<string, Expert>\n}\n\nexport async function setupExperts(\n setting: RunSetting,\n resolveExpertToRun: ResolveExpertToRunFn = defaultResolveExpertToRun,\n): Promise<SetupExpertsResult> {\n const { expertKey } = setting\n const experts = { ...setting.experts }\n const clientOptions = {\n perstackApiBaseUrl: setting.perstackApiBaseUrl,\n perstackApiKey: setting.perstackApiKey,\n }\n const expertToRun = await resolveExpertToRun(expertKey, experts, clientOptions)\n experts[expertKey] = expertToRun\n for (const delegateName of expertToRun.delegates) {\n const delegate = await resolveExpertToRun(delegateName, experts, clientOptions)\n if (!delegate) {\n throw new Error(`Delegate ${delegateName} not found`)\n }\n experts[delegateName] = delegate\n }\n return { expertToRun, experts }\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type {\n Checkpoint,\n DelegationTarget,\n Expert,\n Message,\n RunEvent,\n RunParamsInput,\n RunSetting,\n RuntimeEvent,\n ToolCall,\n ToolResult,\n Usage,\n} from \"@perstack/core\"\n\n/** Reference to the parent Expert that delegated */\ntype DelegatedBy = NonNullable<Checkpoint[\"delegatedBy\"]>\n\nimport {\n buildDelegationReturnState,\n createEmptyUsage,\n type DelegationStateResult,\n sumUsage,\n} from \"../helpers/index.js\"\n\nexport type DelegationResult = {\n toolCallId: string\n toolName: string\n expertKey: string\n text: string\n stepNumber: number\n deltaUsage: Usage\n}\n\nexport type DelegationExecutionResult = {\n nextSetting: RunSetting\n nextCheckpoint: Checkpoint\n}\n\n/**\n * Run options that can be passed to child delegation runs.\n * Extends key callbacks from parent options to ensure checkpoint persistence\n * and event emission work correctly for delegated runs.\n */\nexport type DelegationRunOptions = {\n storeCheckpoint?: (checkpoint: Checkpoint) => Promise<void>\n retrieveCheckpoint?: (jobId: string, checkpointId: string) => Promise<Checkpoint>\n eventListener?: (event: RunEvent | RuntimeEvent) => void\n storeEvent?: (event: RunEvent) => Promise<void>\n returnOnDelegationComplete?: boolean\n}\n\n/**\n * Checkpoint context required for delegation.\n * Note: messages are included so the PARENT can resume its conversation\n * after parallel delegation completes. Child runs start with empty messages.\n */\nexport type DelegationContext = {\n /** Checkpoint ID for delegatedBy reference */\n id: string\n /** Current step number */\n stepNumber: number\n /** Context window size (optional, inherited from parent) */\n contextWindow?: number\n /** Current usage for aggregation */\n usage: Usage\n /** Pending tool calls to filter */\n pendingToolCalls?: ToolCall[]\n /** Partial tool results to append to */\n partialToolResults?: ToolResult[]\n /** Parent delegation reference (preserved for nested delegations) */\n delegatedBy?: DelegatedBy\n /** Parent's message history (restored when parent resumes after delegation) */\n messages: Message[]\n}\n\n/**\n * Strategy interface for handling delegations.\n * Implementations differ in how they execute delegations (single vs parallel).\n */\nexport interface DelegationStrategy {\n /**\n * Execute delegations and return the next setting/checkpoint for the run loop.\n * @param parentOptions - Options from the parent run to be inherited by child runs\n */\n execute(\n delegations: DelegationTarget[],\n setting: RunSetting,\n context: DelegationContext,\n parentExpert: Pick<Expert, \"key\" | \"name\" | \"version\">,\n runFn: (params: RunParamsInput, options?: DelegationRunOptions) => Promise<Checkpoint>,\n parentOptions?: DelegationRunOptions,\n ): Promise<DelegationExecutionResult>\n}\n\n/**\n * Strategy for single delegation - does not execute, just prepares next state.\n * The actual execution happens in the next iteration of the run loop.\n */\nexport class SingleDelegationStrategy implements DelegationStrategy {\n async execute(\n delegations: DelegationTarget[],\n setting: RunSetting,\n context: DelegationContext,\n parentExpert: Pick<Expert, \"key\" | \"name\" | \"version\">,\n _runFn: (params: RunParamsInput, options?: DelegationRunOptions) => Promise<Checkpoint>,\n _parentOptions?: DelegationRunOptions,\n ): Promise<DelegationExecutionResult> {\n if (delegations.length !== 1) {\n throw new Error(\"SingleDelegationStrategy requires exactly one delegation\")\n }\n\n // Use the delegation parameter directly, not checkpoint.delegateTo\n const delegation = delegations[0]\n const { expert, toolCallId, toolName, query } = delegation\n\n const nextSetting: RunSetting = {\n ...setting,\n expertKey: expert.key,\n input: { text: query },\n }\n\n const nextCheckpoint: Checkpoint = {\n id: context.id,\n jobId: setting.jobId,\n runId: setting.runId,\n status: \"init\",\n stepNumber: context.stepNumber,\n messages: [], // Child starts fresh\n expert: {\n key: expert.key,\n name: expert.name,\n version: expert.version,\n },\n delegatedBy: {\n expert: {\n key: parentExpert.key,\n name: parentExpert.name,\n version: parentExpert.version,\n },\n toolCallId,\n toolName,\n checkpointId: context.id,\n },\n usage: context.usage,\n contextWindow: context.contextWindow,\n pendingToolCalls: undefined,\n partialToolResults: undefined,\n }\n\n return { nextSetting, nextCheckpoint }\n }\n}\n\n/**\n * Strategy for parallel delegation - executes all delegations in parallel.\n */\nexport class ParallelDelegationStrategy implements DelegationStrategy {\n async execute(\n delegations: DelegationTarget[],\n setting: RunSetting,\n context: DelegationContext,\n parentExpert: Pick<Expert, \"key\" | \"name\" | \"version\">,\n runFn: (params: RunParamsInput, options?: DelegationRunOptions) => Promise<Checkpoint>,\n parentOptions?: DelegationRunOptions,\n ): Promise<DelegationExecutionResult> {\n if (delegations.length < 2) {\n throw new Error(\"ParallelDelegationStrategy requires at least two delegations\")\n }\n\n const [firstDelegation, ...remainingDelegations] = delegations\n if (!firstDelegation) {\n throw new Error(\"No delegations found\")\n }\n\n // Execute all delegations in parallel\n const allResults = await Promise.all(\n delegations.map((delegation) =>\n this.executeSingleDelegation(\n delegation,\n setting,\n context,\n parentExpert,\n runFn,\n parentOptions,\n ),\n ),\n )\n\n const [firstResult, ...restResults] = allResults\n if (!firstResult) {\n throw new Error(\"No delegation results\")\n }\n\n // Aggregate results\n const aggregatedUsage = allResults.reduce(\n (acc, result) => sumUsage(acc, result.deltaUsage),\n context.usage,\n )\n\n const maxStepNumber = Math.max(...allResults.map((r) => r.stepNumber))\n\n const restToolResults: ToolResult[] = restResults.map((result) => ({\n id: result.toolCallId,\n skillName: `delegate/${result.expertKey}`,\n toolName: result.toolName,\n result: [{ type: \"textPart\", id: createId(), text: result.text }],\n }))\n\n const processedToolCallIds = new Set(remainingDelegations.map((d) => d.toolCallId))\n const remainingPendingToolCalls = context.pendingToolCalls?.filter(\n (tc) => !processedToolCallIds.has(tc.id) && tc.id !== firstDelegation.toolCallId,\n )\n\n const nextSetting: RunSetting = {\n ...setting,\n expertKey: parentExpert.key,\n input: {\n interactiveToolCallResult: {\n toolCallId: firstResult.toolCallId,\n toolName: firstResult.toolName,\n skillName: `delegate/${firstResult.expertKey}`,\n text: firstResult.text,\n },\n },\n }\n\n // Build next checkpoint - restore parent's messages for continuation\n const nextCheckpoint: Checkpoint = {\n id: context.id,\n jobId: setting.jobId,\n runId: setting.runId,\n status: \"stoppedByDelegate\",\n stepNumber: maxStepNumber,\n messages: context.messages, // Restore parent's conversation history\n expert: {\n key: parentExpert.key,\n name: parentExpert.name,\n version: parentExpert.version,\n },\n usage: aggregatedUsage,\n contextWindow: context.contextWindow,\n delegatedBy: context.delegatedBy, // Preserve parent reference for nested delegations\n delegateTo: undefined,\n pendingToolCalls: remainingPendingToolCalls?.length ? remainingPendingToolCalls : undefined,\n partialToolResults: [...(context.partialToolResults ?? []), ...restToolResults],\n }\n\n return { nextSetting, nextCheckpoint }\n }\n\n private async executeSingleDelegation(\n delegation: DelegationTarget,\n parentSetting: RunSetting,\n parentContext: DelegationContext,\n parentExpert: Pick<Expert, \"key\" | \"name\" | \"version\">,\n runFn: (params: RunParamsInput, options?: DelegationRunOptions) => Promise<Checkpoint>,\n parentOptions?: DelegationRunOptions,\n ): Promise<DelegationResult> {\n const { expert, toolCallId, toolName, query } = delegation\n const delegateRunId = createId()\n\n const delegateSetting: RunSetting = {\n ...parentSetting,\n runId: delegateRunId,\n expertKey: expert.key,\n input: { text: query },\n }\n\n const delegateCheckpoint: Checkpoint = {\n id: createId(),\n jobId: parentSetting.jobId,\n runId: delegateRunId,\n status: \"init\",\n stepNumber: parentContext.stepNumber,\n messages: [], // Child starts fresh - no parent context inheritance\n expert: {\n key: expert.key,\n name: expert.name,\n version: expert.version,\n },\n delegatedBy: {\n expert: {\n key: parentExpert.key,\n name: parentExpert.name,\n version: parentExpert.version,\n },\n toolCallId,\n toolName,\n checkpointId: parentContext.id,\n },\n usage: createEmptyUsage(),\n contextWindow: parentContext.contextWindow,\n }\n\n // Merge parent options with returnOnDelegationComplete to ensure child runs\n // inherit callbacks for checkpoint persistence and event emission\n const resultCheckpoint = await runFn(\n { setting: delegateSetting, checkpoint: delegateCheckpoint },\n { ...parentOptions, returnOnDelegationComplete: true },\n )\n\n return this.extractDelegationResult(resultCheckpoint, toolCallId, toolName, expert.key)\n }\n\n private extractDelegationResult(\n checkpoint: Checkpoint,\n toolCallId: string,\n toolName: string,\n expertKey: string,\n ): DelegationResult {\n const lastMessage = checkpoint.messages[checkpoint.messages.length - 1]\n if (!lastMessage || lastMessage.type !== \"expertMessage\") {\n throw new Error(\"Delegation error: delegation result message is incorrect\")\n }\n\n const textPart = lastMessage.contents.find((c) => c.type === \"textPart\")\n if (!textPart || textPart.type !== \"textPart\") {\n throw new Error(\"Delegation error: delegation result message does not contain text\")\n }\n\n return {\n toolCallId,\n toolName,\n expertKey,\n text: textPart.text,\n stepNumber: checkpoint.stepNumber,\n deltaUsage: checkpoint.usage,\n }\n }\n}\n\n/**\n * Factory to select the appropriate delegation strategy.\n */\nexport function selectDelegationStrategy(delegationCount: number): DelegationStrategy {\n if (delegationCount === 1) {\n return new SingleDelegationStrategy()\n }\n return new ParallelDelegationStrategy()\n}\n\n/**\n * Helper to build state when returning from a completed delegation to parent.\n */\nexport function buildReturnFromDelegation(\n currentSetting: RunSetting,\n resultCheckpoint: Checkpoint,\n parentCheckpoint: Checkpoint,\n): DelegationStateResult {\n return buildDelegationReturnState(currentSetting, resultCheckpoint, parentCheckpoint)\n}\n\n/**\n * Extract DelegationContext from a Checkpoint.\n */\nexport function extractDelegationContext(checkpoint: Checkpoint): DelegationContext {\n return {\n id: checkpoint.id,\n stepNumber: checkpoint.stepNumber,\n contextWindow: checkpoint.contextWindow,\n usage: checkpoint.usage,\n pendingToolCalls: checkpoint.pendingToolCalls,\n partialToolResults: checkpoint.partialToolResults,\n delegatedBy: checkpoint.delegatedBy, // Preserve for nested delegations\n messages: checkpoint.messages, // Preserve for parent continuation after delegation\n }\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type { RunEvent } from \"@perstack/core\"\n\nexport class RunEventEmitter {\n private listeners: ((event: RunEvent) => Promise<void>)[] = []\n\n subscribe(listener: (event: RunEvent) => Promise<void>) {\n this.listeners.push(listener)\n }\n\n async emit(event: RunEvent) {\n const errors: Error[] = []\n for (const listener of this.listeners) {\n try {\n await listener({\n ...event,\n id: createId(),\n timestamp: Date.now(),\n })\n } catch (error) {\n errors.push(error instanceof Error ? error : new Error(String(error)))\n }\n }\n if (errors.length > 0) {\n throw new AggregateError(errors, \"One or more event listeners failed\")\n }\n }\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport {\n type Checkpoint,\n createRuntimeEvent,\n type Expert,\n type RunEvent,\n type RunSetting,\n type RuntimeEvent,\n type Step,\n} from \"@perstack/core\"\nimport pkg from \"../../package.json\" with { type: \"json\" }\nimport { RunEventEmitter } from \"../events/event-emitter.js\"\nimport {\n createInitialCheckpoint,\n createNextStepCheckpoint,\n getContextWindow,\n type ResolveExpertToRunFn,\n setupExperts,\n} from \"../helpers/index.js\"\nimport { getSkillManagers } from \"../skill-manager/index.js\"\nimport { executeStateMachine } from \"../state-machine/index.js\"\n\nexport type SingleRunExecutorOptions = {\n shouldContinueRun?: (setting: RunSetting, checkpoint: Checkpoint, step: Step) => Promise<boolean>\n storeCheckpoint?: (checkpoint: Checkpoint) => Promise<void>\n storeEvent?: (event: RunEvent) => Promise<void>\n eventListener?: (event: RunEvent | RuntimeEvent) => void\n resolveExpertToRun?: ResolveExpertToRunFn\n}\n\nexport type SingleRunResult = {\n checkpoint: Checkpoint\n expertToRun: Expert\n experts: Record<string, Expert>\n}\n\n/**\n * Executes a single run (state machine execution) without any loop or delegation handling.\n * This is the core orchestration unit that should NOT call run() recursively.\n *\n * Note: This executes a complete state machine run until it reaches a terminal state\n * (completed, stoppedByInteractiveTool, stoppedByDelegate, etc.), not just a single step.\n */\nexport class SingleRunExecutor {\n constructor(private options: SingleRunExecutorOptions = {}) {}\n\n async execute(setting: RunSetting, checkpoint?: Checkpoint): Promise<SingleRunResult> {\n const contextWindow = getContextWindow(setting.providerConfig.providerName, setting.model)\n const { expertToRun, experts } = await setupExperts(setting, this.options.resolveExpertToRun)\n\n this.emitInitEvent(setting, expertToRun, experts)\n\n const skillManagers = await getSkillManagers(\n expertToRun,\n experts,\n setting,\n this.options.eventListener,\n { isDelegatedRun: !!checkpoint?.delegatedBy },\n )\n\n const initialCheckpoint = checkpoint\n ? createNextStepCheckpoint(createId(), checkpoint)\n : createInitialCheckpoint(createId(), {\n jobId: setting.jobId,\n runId: setting.runId,\n expertKey: setting.expertKey,\n expert: expertToRun,\n contextWindow,\n })\n\n const eventEmitter = new RunEventEmitter()\n const eventListener = this.createEventListener()\n eventEmitter.subscribe(eventListener)\n\n const resultCheckpoint = await executeStateMachine({\n setting: { ...setting, experts },\n initialCheckpoint,\n eventListener,\n skillManagers,\n eventEmitter,\n storeCheckpoint: this.options.storeCheckpoint ?? (async () => {}),\n shouldContinueRun: this.options.shouldContinueRun,\n })\n\n return { checkpoint: resultCheckpoint, expertToRun, experts }\n }\n\n private createEventListener(): (event: RunEvent | RuntimeEvent) => Promise<void> {\n const userListener = this.options.eventListener\n const storeEvent = this.options.storeEvent\n return async (event: RunEvent | RuntimeEvent) => {\n // Store RunEvents (events with stepNumber) if storeEvent is provided\n if (\"stepNumber\" in event && storeEvent) {\n await storeEvent(event as RunEvent)\n }\n userListener?.(event)\n }\n }\n\n private emitInitEvent(\n setting: RunSetting,\n expertToRun: Expert,\n experts: Record<string, Expert>,\n ): void {\n if (!this.options.eventListener) return\n\n const initEvent = createRuntimeEvent(\"initializeRuntime\", setting.jobId, setting.runId, {\n runtimeVersion: pkg.version,\n runtime: \"local\",\n expertName: expertToRun.name,\n experts: Object.keys(experts),\n model: setting.model,\n temperature: setting.temperature,\n maxSteps: setting.maxSteps,\n maxRetries: setting.maxRetries,\n timeout: setting.timeout,\n query: setting.input.text,\n interactiveToolCall: setting.input.interactiveToolCallResult,\n })\n this.options.eventListener(initEvent)\n }\n}\n","import type {\n Checkpoint,\n Job,\n RunEvent,\n RunParamsInput,\n RunSetting,\n RuntimeEvent,\n Step,\n} from \"@perstack/core\"\nimport { runParamsSchema } from \"@perstack/core\"\nimport { createEmptyUsage, type ResolveExpertToRunFn } from \"./helpers/index.js\"\nimport {\n buildReturnFromDelegation,\n extractDelegationContext,\n SingleRunExecutor,\n selectDelegationStrategy,\n} from \"./orchestration/index.js\"\n\nexport type RunOptions = {\n shouldContinueRun?: (setting: RunSetting, checkpoint: Checkpoint, step: Step) => Promise<boolean>\n retrieveCheckpoint?: (jobId: string, checkpointId: string) => Promise<Checkpoint>\n storeCheckpoint?: (checkpoint: Checkpoint) => Promise<void>\n storeEvent?: (event: RunEvent) => Promise<void>\n storeJob?: (job: Job) => void\n retrieveJob?: (jobId: string) => Job | undefined\n createJob?: (jobId: string, expertKey: string, maxSteps?: number) => Job\n eventListener?: (event: RunEvent | RuntimeEvent) => void\n resolveExpertToRun?: ResolveExpertToRunFn\n returnOnDelegationComplete?: boolean\n}\n\nconst defaultCreateJob = (jobId: string, expertKey: string, maxSteps?: number): Job => ({\n id: jobId,\n coordinatorExpertKey: expertKey,\n status: \"running\",\n totalSteps: 0,\n startedAt: Date.now(),\n maxSteps,\n usage: createEmptyUsage(),\n})\n\n/**\n * Execute a run with the given parameters and options.\n * This is the main entry point for the runtime.\n *\n * The run loop handles:\n * - Job management\n * - Delegation routing (single vs parallel)\n * - Terminal state detection\n *\n * Each run execution is delegated to SingleRunExecutor.\n */\nexport async function run(runInput: RunParamsInput, options?: RunOptions): Promise<Checkpoint> {\n const runParams = runParamsSchema.parse(runInput)\n let { setting, checkpoint } = runParams\n\n const storeJob = options?.storeJob ?? (() => {})\n const retrieveJob = options?.retrieveJob ?? (() => undefined)\n const retrieveCheckpoint =\n options?.retrieveCheckpoint ??\n (async () => {\n throw new Error(\"retrieveCheckpoint not provided\")\n })\n const createJob = options?.createJob ?? defaultCreateJob\n\n let job: Job =\n retrieveJob(setting.jobId) ?? createJob(setting.jobId, setting.expertKey, setting.maxSteps)\n if (job.status !== \"running\") {\n job = { ...job, status: \"running\", finishedAt: undefined }\n }\n storeJob(job)\n\n const runExecutor = new SingleRunExecutor({\n shouldContinueRun: options?.shouldContinueRun,\n storeCheckpoint: options?.storeCheckpoint,\n storeEvent: options?.storeEvent,\n eventListener: options?.eventListener,\n resolveExpertToRun: options?.resolveExpertToRun,\n })\n\n while (true) {\n const runResult = await runExecutor.execute(setting, checkpoint)\n const resultCheckpoint = runResult.checkpoint\n\n job = {\n ...job,\n totalSteps: resultCheckpoint.stepNumber,\n usage: resultCheckpoint.usage,\n }\n\n switch (resultCheckpoint.status) {\n case \"completed\": {\n if (options?.returnOnDelegationComplete) {\n storeJob(job)\n return resultCheckpoint\n }\n if (resultCheckpoint.delegatedBy) {\n storeJob(job)\n const parentCheckpoint = await retrieveCheckpoint(\n setting.jobId,\n resultCheckpoint.delegatedBy.checkpointId,\n )\n const result = buildReturnFromDelegation(setting, resultCheckpoint, parentCheckpoint)\n setting = result.setting\n checkpoint = result.checkpoint\n break\n }\n storeJob({ ...job, status: \"completed\", finishedAt: Date.now() })\n return resultCheckpoint\n }\n\n case \"stoppedByInteractiveTool\": {\n storeJob({ ...job, status: \"stoppedByInteractiveTool\" })\n return resultCheckpoint\n }\n\n case \"stoppedByDelegate\": {\n storeJob(job)\n const { delegateTo } = resultCheckpoint\n if (!delegateTo || delegateTo.length === 0) {\n throw new Error(\"No delegations found in checkpoint\")\n }\n const strategy = selectDelegationStrategy(delegateTo.length)\n const context = extractDelegationContext(resultCheckpoint)\n\n // All strategies now use the same interface - delegations parameter is used directly\n // Pass parent options so child runs inherit callbacks for checkpoint persistence and events\n const delegationResult = await strategy.execute(\n delegateTo,\n setting,\n context,\n runResult.expertToRun,\n run,\n options,\n )\n\n setting = delegationResult.nextSetting\n checkpoint = delegationResult.nextCheckpoint\n break\n }\n\n case \"stoppedByExceededMaxSteps\": {\n storeJob({ ...job, status: \"stoppedByMaxSteps\", finishedAt: Date.now() })\n return resultCheckpoint\n }\n\n case \"stoppedByError\": {\n storeJob({ ...job, status: \"stoppedByError\", finishedAt: Date.now() })\n return resultCheckpoint\n }\n\n default:\n throw new Error(\"Run stopped by unknown reason\")\n }\n }\n}\n"]}