@perstack/runtime 0.0.19 → 0.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/runtime.ts","../src/default-store.ts","../src/schemas/runtime.ts","../src/model.ts","../src/schemas/messages.ts","../package.json","../src/events/default-event-listener.ts","../src/events/event-emitter.ts","../src/schemas/api-registry.ts","../src/api-clinent.ts","../src/resolve-expert-to-run.ts","../src/runtime-state-machine.ts","../src/skill-manager.ts","../src/states/calling-delegate.ts","../src/states/calling-interactive-tool.ts","../src/states/calling-tool.ts","../src/states/finishing-step.ts","../src/states/generating-run-result.ts","../src/messages/message.ts","../src/usage.ts","../src/states/generating-tool-call.ts","../src/messages/instruction-message.ts","../src/states/init.ts","../src/states/preparing-for-step.ts","../src/states/resolving-image-file.ts","../src/states/resolving-pdf-file.ts","../src/states/resolving-tool-result.ts","../src/states/resolving-thought.ts","../src/schemas/perstack-toml.ts","../src/schemas/command-run.ts"],"sourcesContent":["import { existsSync } from \"node:fs\"\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\"\nimport path from \"node:path\"\nimport { createId } from \"@paralleldrive/cuid2\"\nimport TOML from \"smol-toml\"\nimport { createActor } from \"xstate\"\nimport { defaultRetrieveCheckpoint, defaultStoreCheckpoint } from \"./default-store.js\"\nimport { defaultEventListener } from \"./events/default-event-listener.js\"\nimport { RunEventEmitter } from \"./events/event-emitter.js\"\nimport { resolveExpertToRun } from \"./resolve-expert-to-run.js\"\nimport { StateMachineLogics, runtimeStateMachine } from \"./runtime-state-machine.js\"\nimport { type PerstackConfig, PerstackConfigSchema } from \"./schemas/perstack-toml.js\"\nimport {\n type Checkpoint,\n type Expert,\n type RunEvent,\n type RunParamsInput,\n RunParamsSchema,\n type RunSetting,\n} from \"./schemas/runtime.js\"\nimport { closeSkillManagers, getSkillManagers } from \"./skill-manager.js\"\nimport { createEmptyUsage } from \"./usage.js\"\n\nexport async function run(\n runInput: RunParamsInput,\n options?: {\n retrieveCheckpoint?: (checkpointId: string) => Promise<Checkpoint>\n storeCheckpoint?: (checkpoint: Checkpoint, timestamp: number) => Promise<void>\n eventListener?: (event: RunEvent) => Promise<void>\n },\n): Promise<Checkpoint> {\n const runParams = RunParamsSchema.parse(runInput)\n const eventListener = options?.eventListener ?? defaultEventListener\n const retrieveCheckpoint = options?.retrieveCheckpoint ?? defaultRetrieveCheckpoint\n const storeCheckpoint = options?.storeCheckpoint ?? defaultStoreCheckpoint\n const eventEmitter = new RunEventEmitter()\n eventEmitter.subscribe(eventListener)\n let { setting, checkpoint } = runParams\n\n if (setting.workspace) {\n if (!path.isAbsolute(setting.workspace)) {\n throw new Error(`Workspace path must be absolute: ${setting.workspace}`)\n }\n process.chdir(setting.workspace)\n }\n\n await storeRunSetting(setting)\n while (true) {\n const { expertToRun, experts } = await setupExperts(setting)\n printRunSetting(expertToRun.name, experts, setting)\n const skillManagers = await getSkillManagers(expertToRun, experts)\n const runActor = createActor(runtimeStateMachine, {\n input: {\n setting: {\n ...setting,\n experts,\n },\n initialCheckpoint: checkpoint\n ? {\n id: createId(),\n runId: setting.runId,\n expert: {\n key: setting.expertKey,\n name: expertToRun.name,\n version: expertToRun.version,\n },\n stepNumber: checkpoint.stepNumber + 1,\n status: \"proceeding\",\n messages: checkpoint.messages,\n usage: checkpoint.usage,\n }\n : {\n id: createId(),\n runId: setting.runId,\n expert: {\n key: setting.expertKey,\n name: expertToRun.name,\n version: expertToRun.version,\n },\n stepNumber: 1,\n status: \"init\",\n messages: [],\n usage: createEmptyUsage(),\n },\n eventListener,\n skillManagers,\n },\n })\n const runResultCheckpoint = await new Promise<Checkpoint>((resolve, reject) => {\n runActor.subscribe(async (runState) => {\n try {\n if (runState.value === \"Stopped\") {\n const { checkpoint, skillManagers } = runState.context\n if (!checkpoint) {\n throw new Error(\"Checkpoint is undefined\")\n }\n await closeSkillManagers(skillManagers)\n resolve(checkpoint)\n } else {\n const event = await StateMachineLogics[runState.value](runState.context)\n if (\"checkpoint\" in event) {\n await storeCheckpoint(event.checkpoint, event.timestamp)\n }\n await eventEmitter.emit(event)\n runActor.send(event)\n }\n } catch (error) {\n reject(error)\n }\n })\n runActor.start()\n })\n switch (runResultCheckpoint.status) {\n case \"completed\": {\n if (runResultCheckpoint.delegatedBy) {\n const { messages, delegatedBy } = runResultCheckpoint\n const { expert, toolCallId, toolName, checkpointId } = delegatedBy\n const delegateResultMessage = messages[messages.length - 1]\n if (delegateResultMessage.type !== \"expertMessage\") {\n throw new Error(\"Delegation error: delegation result message is incorrect\")\n }\n const delegateText = delegateResultMessage.contents.find(\n (content) => content.type === \"textPart\",\n )\n if (!delegateText) {\n throw new Error(\"Delegation error: delegation result message does not contain a text\")\n }\n setting = {\n ...setting,\n expertKey: expert.key,\n input: {\n interactiveToolCallResult: {\n toolCallId,\n toolName,\n text: delegateText.text,\n },\n },\n }\n checkpoint = {\n ...(await retrieveCheckpoint(setting.runId, checkpointId)),\n id: createId(),\n stepNumber: runResultCheckpoint.stepNumber + 1,\n usage: runResultCheckpoint.usage,\n }\n break\n }\n return runResultCheckpoint\n }\n case \"stoppedByInteractiveTool\": {\n return runResultCheckpoint\n }\n case \"stoppedByDelegate\": {\n if (!runResultCheckpoint.delegateTo) {\n throw new Error(\"Delegation error: delegate to is undefined\")\n }\n const { expert, toolCallId, toolName, query } = runResultCheckpoint.delegateTo\n setting = {\n ...setting,\n expertKey: expert.key,\n input: {\n text: query,\n },\n }\n checkpoint = {\n id: createId(),\n runId: setting.runId,\n status: \"init\",\n stepNumber: runResultCheckpoint.stepNumber + 1,\n messages: [],\n expert: {\n key: expert.key,\n name: expert.name,\n version: expert.version,\n },\n delegatedBy: {\n expert: {\n key: expertToRun.key,\n name: expertToRun.name,\n version: expertToRun.version,\n },\n toolCallId,\n toolName,\n checkpointId: runResultCheckpoint.id,\n },\n usage: runResultCheckpoint.usage,\n }\n break\n }\n case \"stoppedByExceededMaxSteps\": {\n return runResultCheckpoint\n }\n case \"stoppedByError\": {\n return runResultCheckpoint\n }\n default:\n throw new Error(\"Run stopped by unknown reason\")\n }\n }\n}\n\nasync function setupExperts(setting: RunSetting) {\n const { expertKey } = setting\n const experts = { ...setting.experts }\n const expertToRun = await resolveExpertToRun(expertKey, experts)\n for (const delegateName of expertToRun.delegates) {\n const delegate = await resolveExpertToRun(delegateName, experts)\n if (!delegate) {\n throw new Error(`Delegate ${delegateName} not found`)\n }\n }\n return { expertToRun, experts }\n}\n\nfunction printRunSetting(expertName: string, experts: Record<string, Expert>, setting: RunSetting) {\n console.log(\"🦜 Starting Perstack 🦜\")\n console.log(`Expert To Run: ${expertName}`)\n console.log(`Experts: ${Object.keys(experts).join(\", \")}`)\n console.log(`Model: ${setting.model}`)\n console.log(`Temperature: ${setting.temperature}`)\n console.log(`Max Steps: ${setting.maxSteps}`)\n console.log(`Max Retries: ${setting.maxRetries}`)\n if (setting.input.text) {\n console.log(`Query: ${setting.input.text}`)\n }\n if (setting.input.interactiveToolCallResult) {\n console.log(`Tool: ${setting.input.interactiveToolCallResult.toolName}`)\n console.log(`Tool Call ID: ${setting.input.interactiveToolCallResult.toolCallId}`)\n console.log(`Tool Result: ${setting.input.interactiveToolCallResult.text}`)\n }\n}\n\nasync function storeRunSetting(setting: RunSetting) {\n const runDir = getRunDir(setting.runId)\n if (existsSync(runDir)) {\n const runSettingPath = path.resolve(runDir, \"run-setting.json\")\n const runSetting = JSON.parse(await readFile(runSettingPath, \"utf-8\")) as RunSetting\n runSetting.updatedAt = Date.now()\n await writeFile(runSettingPath, JSON.stringify(runSetting, null, 2), \"utf-8\")\n } else {\n await mkdir(runDir, { recursive: true })\n await writeFile(\n path.resolve(runDir, \"run-setting.json\"),\n JSON.stringify(setting, null, 2),\n \"utf-8\",\n )\n }\n}\n\nexport function getRunDir(runId: string) {\n return `${process.cwd()}/perstack/runs/${runId}`\n}\n\nexport async function parseConfig(config: string): Promise<PerstackConfig> {\n const toml = TOML.parse(config ?? \"\")\n return PerstackConfigSchema.parse(toml)\n}\n","import { mkdir, readFile, readdir, writeFile } from \"node:fs/promises\"\nimport { getRunDir } from \"./runtime.js\"\nimport { type Checkpoint, CheckpointSchema, type RunEvent } from \"./schemas/runtime.js\"\n\nexport async function defaultRetrieveCheckpoint(\n runId: string,\n checkpointId: string,\n): Promise<Checkpoint> {\n const runDir = getRunDir(runId)\n const checkpointFiles = await readdir(runDir, { withFileTypes: true }).then((files) =>\n files.filter((file) => file.isFile() && file.name.startsWith(\"checkpoint-\")),\n )\n const checkpointFile = checkpointFiles.find((file) => file.name.endsWith(`-${checkpointId}.json`))\n if (!checkpointFile) {\n throw new Error(`checkpoint not found: ${runId} ${checkpointId}`)\n }\n const checkpointPath = `${runDir}/${checkpointFile.name}`\n const checkpoint = await readFile(checkpointPath, \"utf8\")\n return CheckpointSchema.parse(JSON.parse(checkpoint))\n}\n\nexport async function defaultStoreCheckpoint(\n checkpoint: Checkpoint,\n timestamp: number,\n): Promise<void> {\n const { id, runId, stepNumber } = checkpoint\n const runDir = getRunDir(runId)\n const checkpointPath = `${runDir}/checkpoint-${timestamp}-${stepNumber}-${id}.json`\n await mkdir(runDir, { recursive: true })\n await writeFile(checkpointPath, JSON.stringify(checkpoint, null, 2))\n}\n\nexport async function defaultStoreEvent(event: RunEvent): Promise<void> {\n const { timestamp, runId, stepNumber, type } = event\n const runDir = getRunDir(runId)\n const eventPath = `${runDir}/event-${timestamp}-${stepNumber}-${type}.json`\n await mkdir(runDir, { recursive: true })\n await writeFile(eventPath, JSON.stringify(event, null, 2))\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport { z } from \"zod\"\nimport { getDefaultModelName } from \"../model.js\"\nimport {\n type ExpertMessage,\n type FileInlinePart,\n type ImageInlinePart,\n type Message,\n MessageSchema,\n type TextPart,\n type ToolMessage,\n type UserMessage,\n} from \"./messages.js\"\n\nexport const expertNameRegex = /^(@[a-z0-9][a-z0-9_-]*\\/)?[a-z0-9][a-z0-9_-]*$/\nexport const versionRegex =\n /^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[\\w.-]+)?(?:\\+[\\w.-]+)?$/\nexport const tagNameRegex = /^[a-z0-9][a-z0-9_-]*$/\nexport const expertKeyRegex =\n /^((?:@[a-z0-9][a-z0-9_\\.-]*\\/)?[a-z0-9][a-z0-9_\\.-]*)(?:@((?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[\\w.-]+)?(?:\\+[\\w.-]+)?)|@([a-z0-9][a-z0-9_\\.-]*))?$/\nexport const skillNameRegex = /^[a-z0-9][a-z0-9._-]*$/\nexport const maxNameLength = 214\n\nexport function parseExpertKey(expertKey: string): {\n key: string\n name: string\n version?: string\n tag?: string\n} {\n const match = expertKey.match(expertKeyRegex)\n if (!match) {\n throw new Error(`Invalid expert key format: ${expertKey}`)\n }\n\n const [key, name, version, tag] = match\n return {\n key,\n name,\n version,\n tag,\n }\n}\n\nexport const McpStdioSkillSchema = z.object({\n type: z.literal(\"mcpStdioSkill\"),\n name: z.string(),\n description: z.string().optional(),\n rule: z.string().optional(),\n pick: z.array(z.string()).optional().default([]),\n omit: z.array(z.string()).optional().default([]),\n command: z.string(),\n packageName: z.string().optional(),\n args: z.array(z.string()).optional().default([]),\n requiredEnv: z.array(z.string()).optional().default([]),\n})\nexport type McpStdioSkill = z.infer<typeof McpStdioSkillSchema>\n\nexport const McpSseSkillSchema = z.object({\n type: z.literal(\"mcpSseSkill\"),\n name: z.string(),\n description: z.string().optional(),\n rule: z.string().optional(),\n pick: z.array(z.string()).optional().default([]),\n omit: z.array(z.string()).optional().default([]),\n endpoint: z.string(),\n})\nexport type McpSseSkill = z.infer<typeof McpSseSkillSchema>\n\nexport const InteractiveToolSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n inputJsonSchema: z.string(),\n})\nexport const InteractiveSkillSchema = z.object({\n type: z.literal(\"interactiveSkill\"),\n name: z.string(),\n description: z.string().optional(),\n rule: z.string().optional(),\n tools: z.record(z.string(), InteractiveToolSchema.omit({ name: true })).transform((tools) => {\n return Object.fromEntries(\n Object.entries(tools).map(([key, toolWithoutName]) => [\n key,\n InteractiveToolSchema.parse({ ...toolWithoutName, name: key }),\n ]),\n )\n }),\n})\nexport type InteractiveSkill = z.infer<typeof InteractiveSkillSchema>\n\nexport const ExpertSchema = z.object({\n key: z.string().regex(expertKeyRegex).min(1),\n name: z.string().regex(expertNameRegex).min(1).max(maxNameLength),\n version: z.string().regex(versionRegex),\n description: z\n .string()\n .min(1)\n .max(1024 * 2)\n .optional(),\n instruction: z\n .string()\n .min(1)\n .max(1024 * 20),\n skills: z\n .record(\n z.string(),\n z.discriminatedUnion(\"type\", [\n McpStdioSkillSchema.omit({ name: true }),\n McpSseSkillSchema.omit({ name: true }),\n InteractiveSkillSchema.omit({ name: true }),\n ]),\n )\n .optional()\n .default({\n \"@perstack/base\": {\n type: \"mcpStdioSkill\",\n description: \"Base skill\",\n command: \"npx\",\n args: [\"-y\", \"@perstack/base\"],\n },\n })\n .transform((skills) => {\n return Object.fromEntries(\n Object.entries(skills).map(([key, skillWithoutName]) => [\n key,\n z\n .discriminatedUnion(\"type\", [\n McpStdioSkillSchema,\n McpSseSkillSchema,\n InteractiveSkillSchema,\n ])\n .parse({ ...skillWithoutName, name: key }),\n ]),\n )\n }),\n delegates: z.array(z.string().regex(expertKeyRegex).min(1)).optional().default([]),\n tags: z.array(z.string().regex(tagNameRegex).min(1)).optional().default([]),\n})\nexport type Expert = z.infer<typeof ExpertSchema>\n\nexport const UsageSchema = z.object({\n promptTokens: z.number(),\n completionTokens: z.number(),\n totalTokens: z.number(),\n cacheCreationInputTokens: z.number(),\n cacheReadInputTokens: z.number(),\n})\nexport type Usage = z.infer<typeof UsageSchema>\n\nexport const CheckpointStatusSchema = z.enum([\n \"init\",\n \"proceeding\",\n \"completed\",\n \"stoppedByInteractiveTool\",\n \"stoppedByDelegate\",\n \"stoppedByExceededMaxSteps\",\n \"stoppedByError\",\n])\nexport const CheckpointSchema = z.object({\n id: z.string(),\n runId: z.string(),\n status: CheckpointStatusSchema,\n stepNumber: z.number(),\n messages: z.array(MessageSchema),\n expert: z.object({\n key: z.string(),\n name: z.string(),\n version: z.string(),\n }),\n delegateTo: z\n .object({\n expert: z.object({\n key: z.string(),\n name: z.string(),\n version: z.string(),\n }),\n toolCallId: z.string(),\n toolName: z.string(),\n query: z.string(),\n })\n .optional(),\n delegatedBy: z\n .object({\n expert: z.object({\n key: z.string(),\n name: z.string(),\n version: z.string(),\n }),\n toolCallId: z.string(),\n toolName: z.string(),\n checkpointId: z.string(),\n })\n .optional(),\n usage: UsageSchema,\n})\nexport type Checkpoint = z.infer<typeof CheckpointSchema>\n\nexport const RunParamsSchema = z.object({\n setting: z.object({\n runId: z\n .string()\n .optional()\n .transform((value) => value ?? createId()),\n expertKey: z.string().regex(expertKeyRegex).min(1),\n input: z.object({\n text: z.string().optional(),\n interactiveToolCallResult: z\n .object({\n toolCallId: z.string(),\n toolName: z.string(),\n text: z.string(),\n })\n .optional(),\n }),\n experts: z\n .record(z.string().regex(expertKeyRegex).min(1), ExpertSchema.omit({ key: true }))\n .optional()\n .default({})\n .transform((experts) =>\n Object.fromEntries(\n Object.entries(experts).map(([key, expertWithoutKey]) => [\n key,\n ExpertSchema.parse({\n ...expertWithoutKey,\n key,\n }),\n ]),\n ),\n ),\n model: z.string().optional().default(getDefaultModelName()),\n temperature: z.number().min(0).max(1).optional().default(0.3),\n maxSteps: z.number().min(1).optional(),\n maxRetries: z.number().min(0).optional().default(10),\n workspace: z.string().optional(),\n startedAt: z.number().optional().default(Date.now()),\n updatedAt: z.number().optional().default(Date.now()),\n }),\n checkpoint: CheckpointSchema.optional(),\n})\nexport type RunParamsInput = z.input<typeof RunParamsSchema>\nexport type RunParams = z.output<typeof RunParamsSchema>\nexport type RunSetting = z.infer<typeof RunParamsSchema.shape.setting>\nexport type RunInput = z.infer<typeof RunParamsSchema.shape.setting.shape.input>\n\nexport type Step = {\n stepNumber: number\n newMessages: Message[]\n toolCall?: ToolCall\n toolResult?: ToolResult\n usage: Usage\n startedAt: number\n finishedAt?: number\n}\nexport type ToolCall = {\n id: string\n skillName: string\n toolName: string\n args: Record<string, unknown>\n}\nexport type ToolResult = {\n id: string\n skillName: string\n toolName: string\n result: (TextPart | ImageInlinePart | FileInlinePart)[]\n}\n\n/**\n * ExpertEvents can only contain deeply serializable properties.\n * This is important because these events are serialized using JSON.stringify() and stored in Cassandra,\n * and later used to restore state when resuming execution. Non-serializable properties would cause\n * issues during serialization/deserialization process.\n */\ntype ExpertEventPayloads = {\n startRun: {\n initialCheckpoint: Checkpoint\n inputMessages: Message[]\n }\n startGeneration: {\n messages: Message[]\n }\n retry: {\n newMessages: (UserMessage | ExpertMessage | ToolMessage)[]\n usage: Usage\n }\n callTool: {\n newMessage: ExpertMessage\n toolCall: ToolCall\n usage: Usage\n }\n callInteractiveTool: {\n newMessage: ExpertMessage\n toolCall: ToolCall\n usage: Usage\n }\n callDelegate: {\n newMessage: ExpertMessage\n toolCall: ToolCall\n usage: Usage\n }\n resolveToolResult: {\n toolResult: ToolResult\n }\n resolveThought: {\n toolResult: ToolResult\n }\n resolvePdfFile: {\n toolResult: ToolResult\n }\n resolveImageFile: {\n toolResult: ToolResult\n }\n attemptCompletion: {\n toolResult: ToolResult\n }\n finishToolCall: {\n newMessages: (UserMessage | ToolMessage)[]\n }\n continueToNextStep: {\n checkpoint: Checkpoint\n step: Step\n nextCheckpoint: Checkpoint\n }\n stopRunByInteractiveTool: {\n checkpoint: Checkpoint\n step: Step\n }\n stopRunByDelegate: {\n checkpoint: Checkpoint\n step: Step\n }\n stopRunByExceededMaxSteps: {\n checkpoint: Checkpoint\n step: Step\n }\n completeRun: {\n checkpoint: Checkpoint\n step: Step\n text: string\n usage: Usage\n }\n}\n\ntype BaseEvent = {\n id: string\n expertKey: string\n timestamp: number\n runId: string\n stepNumber: number\n}\nexport type EventType = keyof ExpertEventPayloads\nexport type RunEvent = {\n [K in EventType]: BaseEvent & { type: K } & ExpertEventPayloads[K]\n}[EventType]\nexport type EventForType<T extends EventType> = Extract<RunEvent, { type: T }>\n\nexport function createEvent<T extends EventType>(type: T) {\n return (\n setting: RunSetting,\n checkpoint: Checkpoint,\n data: Omit<EventForType<T>, \"type\" | \"id\" | \"expertKey\" | \"timestamp\" | \"runId\" | \"stepNumber\">,\n ): EventForType<T> => {\n return {\n type,\n id: createId(),\n expertKey: checkpoint.expert.key,\n timestamp: Date.now(),\n runId: setting.runId,\n stepNumber: checkpoint.stepNumber,\n ...data,\n } as EventForType<T>\n }\n}\n\nexport const startRun = createEvent(\"startRun\")\nexport const startGeneration = createEvent(\"startGeneration\")\nexport const retry = createEvent(\"retry\")\nexport const callTool = createEvent(\"callTool\")\nexport const callInteractiveTool = createEvent(\"callInteractiveTool\")\nexport const callDelegate = createEvent(\"callDelegate\")\nexport const resolveToolResult = createEvent(\"resolveToolResult\")\nexport const resolveThought = createEvent(\"resolveThought\")\nexport const resolvePdfFile = createEvent(\"resolvePdfFile\")\nexport const resolveImageFile = createEvent(\"resolveImageFile\")\nexport const attemptCompletion = createEvent(\"attemptCompletion\")\nexport const finishToolCall = createEvent(\"finishToolCall\")\nexport const completeRun = createEvent(\"completeRun\")\nexport const stopRunByInteractiveTool = createEvent(\"stopRunByInteractiveTool\")\nexport const stopRunByDelegate = createEvent(\"stopRunByDelegate\")\nexport const stopRunByExceededMaxSteps = createEvent(\"stopRunByExceededMaxSteps\")\nexport const continueToNextStep = createEvent(\"continueToNextStep\")\n","import { anthropic } from \"@ai-sdk/anthropic\"\nimport { google } from \"@ai-sdk/google\"\nimport { openai } from \"@ai-sdk/openai\"\nimport type { LanguageModelV1 } from \"ai\"\n\nconst DefaultModel = \"claude-4-sonnet-20250514\"\n\nconst AnthropicModels = [\n \"claude-4-opus-20250514\",\n \"claude-4-sonnet-20250514\",\n \"claude-3-7-sonnet-20250219\",\n \"claude-3-5-sonnet-latest\",\n \"claude-3-5-sonnet-20241022\",\n \"claude-3-5-sonnet-20240620\",\n \"claude-3-5-haiku-latest\",\n \"claude-3-5-haiku-20241022\",\n // \"claude-3-opus-latest\", - No pdf support\n // \"claude-3-opus-20240229\", - No pdf support\n // \"claude-3-sonnet-20240229\", - No pdf support\n // \"claude-3-haiku-20240307\", - No pdf support\n]\n\nconst GoogleModels = [\n \"gemini-2.5-pro-preview-05-06\",\n \"gemini-2.5-pro-exp-03-25\",\n \"gemini-2.5-flash-preview-04-17\",\n \"gemini-2.0-pro-exp-02-05\",\n \"gemini-2.0-flash-thinking-exp-01-21\",\n \"gemini-2.0-flash\",\n \"gemini-2.0-flash-001\",\n \"gemini-2.0-flash-live-001\",\n \"gemini-2.0-flash-lite\",\n \"gemini-2.0-flash-exp\",\n \"gemini-1.5-pro\",\n \"gemini-1.5-pro-latest\",\n \"gemini-1.5-pro-001\",\n \"gemini-1.5-pro-002\",\n \"gemini-1.5-flash\",\n \"gemini-1.5-flash-latest\",\n \"gemini-1.5-flash-001\",\n \"gemini-1.5-flash-002\",\n \"gemini-1.5-flash-8b\",\n \"gemini-1.5-flash-8b-latest\",\n \"gemini-1.5-flash-8b-001\",\n // \"gemini-exp-1206\", - Unclear model spec\n // \"gemma-3-27b-it\", - Unclear model spec\n // \"learnlm-1.5-pro-experimental\", - Unclear model spec\n]\n\nconst OpenAIModels = [\n \"o4-mini\",\n \"o4-mini-2025-04-16\",\n \"o3\",\n \"o3-2025-04-16\",\n \"o3-mini\",\n \"o3-mini-2025-01-31\",\n \"o1\",\n \"o1-2024-12-17\",\n \"o1-mini\",\n \"o1-mini-2024-09-12\",\n // \"o1-preview\", - No tool support\n // \"o1-preview-2024-09-12\", - No tool support\n \"gpt-4.5-preview\",\n \"gpt-4.5-preview-2025-02-27\",\n \"gpt-4.1\",\n \"gpt-4.1-2025-04-14\",\n \"gpt-4.1-mini\",\n \"gpt-4.1-mini-2025-04-14\",\n \"gpt-4.1-nano\",\n \"gpt-4.1-nano-2025-04-14\",\n \"gpt-4o\",\n \"gpt-4o-2024-05-13\",\n \"gpt-4o-2024-08-06\",\n \"gpt-4o-2024-11-20\",\n \"gpt-4o-audio-preview\",\n \"gpt-4o-audio-preview-2024-10-01\",\n \"gpt-4o-audio-preview-2024-12-17\",\n \"gpt-4o-search-preview\",\n \"gpt-4o-search-preview-2025-03-11\",\n \"gpt-4o-mini-search-preview\",\n \"gpt-4o-mini-search-preview-2025-03-11\",\n \"gpt-4o-mini\",\n \"gpt-4o-mini-2024-07-18\",\n // \"gpt-4-turbo\", - Legacy model\n // \"gpt-4-turbo-2024-04-09\", - Legacy model\n // \"gpt-4-turbo-preview\", - Legacy model\n // \"gpt-4-0125-preview\", - No image input support\n // \"gpt-4-1106-preview\", - No image input support\n // \"gpt-4\", - No image input support\n // \"gpt-4-0613\", - No image input support\n // \"gpt-3.5-turbo-0125\", - Legacy model\n // \"gpt-3.5-turbo\", - Legacy model\n // \"gpt-3.5-turbo-1106\", - Legacy model\n // \"chatgpt-4o-latest\", - No tool support\n]\n\ninterface SupportedModel {\n default: boolean\n model: string\n}\nexport const SupportedModels: Record<string, SupportedModel> = Object.fromEntries(\n [...AnthropicModels, ...GoogleModels, ...OpenAIModels].map((model) => [\n model,\n { default: model === DefaultModel, model } satisfies SupportedModel,\n ]),\n)\n\nexport function getDefaultModelName(): string {\n const model = Object.values(SupportedModels).find((model) => model.default)\n if (!model) {\n throw new Error(\"No default model found\")\n }\n return model.model\n}\n\nexport function getModel(modelId?: string): LanguageModelV1 {\n const unwrappedModelId = modelId ?? getDefaultModelName()\n // List of compatible Models\n if (AnthropicModels.includes(unwrappedModelId)) {\n return anthropic(unwrappedModelId)\n }\n if (GoogleModels.includes(unwrappedModelId)) {\n return google(unwrappedModelId)\n }\n if (OpenAIModels.includes(unwrappedModelId)) {\n return openai(unwrappedModelId)\n }\n throw new Error(`Unsupported model: ${unwrappedModelId}`)\n}\n","import { z } from \"zod\"\n\n/**\n * Message Part Schemas\n */\nconst BasePartSchema = z.object({\n id: z.string(),\n})\n\nexport const TextPartSchema = BasePartSchema.extend({\n type: z.literal(\"textPart\"),\n text: z.string(),\n})\nexport type TextPart = z.infer<typeof TextPartSchema>\n\nexport const ImageUrlPartSchema = BasePartSchema.extend({\n type: z.literal(\"imageUrlPart\"),\n url: z.string().url(),\n mimeType: z.string(),\n})\nexport type ImageUrlPart = z.infer<typeof ImageUrlPartSchema>\n\nexport const ImageInlinePartSchema = BasePartSchema.extend({\n type: z.literal(\"imageInlinePart\"),\n encodedData: z.string(),\n mimeType: z.string(),\n})\nexport type ImageInlinePart = z.infer<typeof ImageInlinePartSchema>\n\nexport const ImageBinaryPartSchema = BasePartSchema.extend({\n type: z.literal(\"imageBinaryPart\"),\n data: z.string(),\n mimeType: z.string(),\n})\nexport type ImageBinaryPart = z.infer<typeof ImageBinaryPartSchema>\n\nexport const FileUrlPartSchema = BasePartSchema.extend({\n type: z.literal(\"fileUrlPart\"),\n url: z.string().url(),\n mimeType: z.string(),\n})\nexport type FileUrlPart = z.infer<typeof FileUrlPartSchema>\n\nexport const FileInlinePartSchema = BasePartSchema.extend({\n type: z.literal(\"fileInlinePart\"),\n encodedData: z.string(),\n mimeType: z.string(),\n})\nexport type FileInlinePart = z.infer<typeof FileInlinePartSchema>\n\nexport const FileBinaryPartSchema = BasePartSchema.extend({\n type: z.literal(\"fileBinaryPart\"),\n data: z.string(),\n mimeType: z.string(),\n})\nexport type FileBinaryPart = z.infer<typeof FileBinaryPartSchema>\n\nexport const ToolCallPartSchema = BasePartSchema.extend({\n type: z.literal(\"toolCallPart\"),\n toolCallId: z.string(),\n toolName: z.string(),\n args: z.unknown(),\n})\nexport type ToolCallPart = z.infer<typeof ToolCallPartSchema>\n\nexport const ToolResultPartSchema = BasePartSchema.extend({\n type: z.literal(\"toolResultPart\"),\n toolCallId: z.string(),\n toolName: z.string(),\n contents: z.array(z.union([TextPartSchema, ImageInlinePartSchema])),\n isError: z.boolean().optional(),\n})\nexport type ToolResultPart = z.infer<typeof ToolResultPartSchema>\n\n/**\n * Message Schemas\n */\nconst BaseMessageSchema = z.object({\n id: z.string(),\n})\n\nexport const InstructionMessageSchema = BaseMessageSchema.extend({\n type: z.literal(\"instructionMessage\"),\n contents: z.array(TextPartSchema),\n cache: z.boolean().optional(),\n})\nexport type InstructionMessage = z.infer<typeof InstructionMessageSchema>\n\nexport const UserMessageSchema = BaseMessageSchema.extend({\n type: z.literal(\"userMessage\"),\n contents: z.array(\n z.union([\n TextPartSchema,\n ImageUrlPartSchema,\n ImageInlinePartSchema,\n ImageBinaryPartSchema,\n FileUrlPartSchema,\n FileInlinePartSchema,\n FileBinaryPartSchema,\n ]),\n ),\n cache: z.boolean().optional(),\n})\nexport type UserMessage = z.infer<typeof UserMessageSchema>\n\nexport const ExpertMessageSchema = BaseMessageSchema.extend({\n type: z.literal(\"expertMessage\"),\n contents: z.array(z.union([TextPartSchema, ToolCallPartSchema])),\n cache: z.boolean().optional(),\n})\nexport type ExpertMessage = z.infer<typeof ExpertMessageSchema>\n\nexport const ToolMessageSchema = BaseMessageSchema.extend({\n type: z.literal(\"toolMessage\"),\n contents: z.array(ToolResultPartSchema),\n cache: z.boolean().optional(),\n})\nexport type ToolMessage = z.infer<typeof ToolMessageSchema>\n\nexport const MessageSchema = z.union([\n InstructionMessageSchema,\n UserMessageSchema,\n ExpertMessageSchema,\n ToolMessageSchema,\n])\nexport type Message = z.infer<typeof MessageSchema>\n","{\n \"name\": \"@perstack/runtime\",\n \"version\": \"0.0.19\",\n \"description\": \"PerStack Runtime\",\n \"author\": \"Wintermute Technologies, Inc.\",\n \"license\": \"Apache-2.0\",\n \"type\": \"module\",\n \"exports\": {\n \".\": \"./src/index.ts\"\n },\n \"publishConfig\": {\n \"exports\": {\n \".\": \"./dist/index.js\"\n },\n \"types\": \"./dist/index.d.ts\"\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"clean\": \"rm -rf dist\",\n \"dev\": \"tsup --watch --config ../../tsup.config.ts\",\n \"build\": \"npm run clean && tsup --config ../../tsup.config.ts\",\n \"prepublishOnly\": \"npm run clean && npm run build\"\n },\n \"dependencies\": {\n \"@ai-sdk/anthropic\": \"^1.2.12\",\n \"@ai-sdk/google\": \"^1.2.19\",\n \"@ai-sdk/openai\": \"^1.3.22\",\n \"@modelcontextprotocol/sdk\": \"^1.12.3\",\n \"@paralleldrive/cuid2\": \"^2.2.2\",\n \"ai\": \"^4.3.16\",\n \"smol-toml\": \"^1.3.4\",\n \"ts-dedent\": \"^2.2.0\",\n \"xstate\": \"^5.19.4\",\n \"zod\": \"^3.25.67\"\n },\n \"devDependencies\": {\n \"@tsconfig/node22\": \"^22.0.2\",\n \"@types/node\": \"^24.0.3\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.2.3\"\n },\n \"engines\": {\n \"node\": \">=22.0.0\"\n }\n}\n","import packageJson from \"../../package.json\" with { type: \"json\" }\nimport { defaultStoreEvent } from \"../default-store.js\"\nimport type { ToolMessage, UserMessage } from \"../schemas/messages.js\"\nimport type { EventForType, RunEvent } from \"../schemas/runtime.js\"\n\nconst log = console.info\nconst debug = console.debug\nconst header = (e: RunEvent) => {\n const t = new Date().toISOString()\n const stepNumber = e.stepNumber\n const key = e.expertKey\n return `${t} ${stepNumber} ${key}`\n}\nexport async function defaultEventListener(e: RunEvent) {\n await defaultStoreEvent(e)\n switch (e.type) {\n case \"startRun\": {\n log(`${header(e)} 🦜 Perstack@${packageJson.version} started`)\n const { inputMessages } = e\n for (const message of inputMessages) {\n if (message.type === \"userMessage\") {\n logUserMessage(message)\n } else if (message.type === \"toolMessage\") {\n logToolMessage(message)\n }\n }\n break\n }\n case \"startGeneration\": {\n log(`${header(e)} 🦜 Generating tool call`)\n break\n }\n case \"retry\": {\n logUsage(e)\n log(`${header(e)} 🦜 Retrying tool call generation`)\n break\n }\n case \"callTool\": {\n logUsage(e)\n log(`${header(e)} 🦜 Calling tool`)\n if (e.toolCall.skillName === \"@perstack/base\") {\n switch (e.toolCall.toolName) {\n case \"think\": {\n const thought = e.toolCall.args.thought\n log(`${header(e)} 💭 Thought Updated:`)\n debug(thought)\n break\n }\n case \"readPdfFile\": {\n const path = e.toolCall.args.path\n log(`${header(e)} 📄 Reading PDF: ${path}`)\n break\n }\n case \"readImageFile\": {\n const path = e.toolCall.args.path\n log(`${header(e)} 🖼️ Reading Image: ${path}`)\n break\n }\n default: {\n log(`${header(e)} 🔧 Tool: ${e.toolCall.skillName}/${e.toolCall.toolName}`)\n log(`${header(e)} 🔧 Args: ${e.toolCall.args}`)\n break\n }\n }\n } else {\n log(`${header(e)} 🔧 Tool: ${e.toolCall.skillName}/${e.toolCall.toolName}`)\n log(`${header(e)} 🔧 Args: ${e.toolCall.args}`)\n }\n break\n }\n case \"callInteractiveTool\": {\n logUsage(e)\n log(`${header(e)} 🦜 Calling interactive tool`)\n log(`${header(e)} 🔧 Tool: ${e.toolCall.skillName}/${e.toolCall.toolName}`)\n log(`${header(e)} 🔧 Args: ${e.toolCall.args}`)\n break\n }\n case \"callDelegate\": {\n logUsage(e)\n log(`${header(e)} 🦜 Calling delegate`)\n log(`${header(e)} 🔧 Tool: ${e.toolCall.toolName}`)\n log(`${header(e)} 🔧 Args: ${e.toolCall.args}`)\n break\n }\n case \"resolveToolResult\": {\n log(`${header(e)} 🔧 Resolved Tool Result`)\n if (e.toolResult.skillName === \"@perstack/base\") {\n switch (e.toolResult.toolName) {\n case \"todo\": {\n const text = e.toolResult.result.find((r) => r.type === \"textPart\")?.text\n const { todos } = JSON.parse(text ?? \"{}\") as {\n todos: {\n id: number\n title: string\n completed: boolean\n }[]\n }\n log(`${header(e)} 📄 Todo:`)\n for (const todo of todos) {\n debug(`${todo.completed ? \"[x]\" : \"[ ]\"} ${todo.id}: ${todo.title}`)\n }\n break\n }\n default: {\n log(`${header(e)} 🔧 Tool: ${e.toolResult.skillName}/${e.toolResult.toolName}`)\n log(`${header(e)} 🔧 Result: ${e.toolResult.result}`)\n break\n }\n }\n } else {\n log(`${header(e)} 🔧 Tool: ${e.toolResult.skillName}/${e.toolResult.toolName}`)\n log(`${header(e)} 🔧 Result: ${e.toolResult.result}`)\n }\n break\n }\n case \"resolveThought\": {\n log(`${header(e)} 💭 Resolved Thought:`, e.toolResult)\n break\n }\n case \"resolvePdfFile\": {\n log(`${header(e)} 📄 Resolved PDF:`, e.toolResult)\n break\n }\n case \"resolveImageFile\": {\n log(`${header(e)} 🖼️ Resolved Image:`, e.toolResult)\n break\n }\n case \"attemptCompletion\": {\n log(`${header(e)} ✅ Attempting completion`)\n break\n }\n case \"completeRun\": {\n logUsage(e)\n log(`${header(e)} 🦜 Completing run`)\n log(`${header(e)} 🦜 Result:`, e.text)\n break\n }\n case \"stopRunByInteractiveTool\": {\n log(`${header(e)} 🦜 Stopping run by interactive tool`)\n break\n }\n case \"stopRunByDelegate\": {\n log(`${header(e)} 🦜 Stopping run by delegate`)\n break\n }\n case \"stopRunByExceededMaxSteps\": {\n log(`${header(e)} 🦜 Stopping run by exceeded max steps`)\n break\n }\n case \"continueToNextStep\": {\n log(`${header(e)} 🦜 Continuing to next step`)\n break\n }\n }\n}\n\nfunction logUserMessage(message: UserMessage) {\n const t = new Date().toISOString()\n const contents = message.contents\n for (const content of contents) {\n if (content.type === \"textPart\") {\n log(`${t} 💬 User: ${content.text}`)\n } else if (content.type === \"imageUrlPart\") {\n log(`${t} 🖼️ User: ${content.url}`)\n } else if (content.type === \"imageInlinePart\") {\n log(`${t} 🖼️ User: Inline image`)\n } else if (content.type === \"imageBinaryPart\") {\n log(`${t} 🖼️ User: Binary image`)\n } else if (content.type === \"fileUrlPart\") {\n log(`${t} 📄 User: ${content.url}`)\n } else if (content.type === \"fileInlinePart\") {\n log(`${t} 📄 User: Inline file`)\n } else if (content.type === \"fileBinaryPart\") {\n log(`${t} 📄 User: Binary file`)\n }\n }\n}\n\nfunction logToolMessage(message: ToolMessage) {\n const t = new Date().toISOString()\n const contents = message.contents\n for (const content of contents) {\n if (content.type === \"toolResultPart\") {\n const { contents } = content\n for (const content of contents) {\n if (content.type === \"textPart\") {\n log(`${t} 💬 Tool Result: ${content.text}`)\n } else if (content.type === \"imageInlinePart\") {\n log(`${t} 🖼️ Tool Result: Inline image`)\n }\n }\n }\n }\n}\n\nfunction logUsage(\n e: EventForType<\"retry\" | \"callTool\" | \"callInteractiveTool\" | \"callDelegate\" | \"completeRun\">,\n) {\n const usageByGeneration = [\n `In: ${e.usage.promptTokens.toLocaleString()}`,\n `Out: ${e.usage.completionTokens.toLocaleString()}`,\n `Total: ${e.usage.totalTokens.toLocaleString()}`,\n `Cache-read: ${e.usage.cacheReadInputTokens.toLocaleString()}`,\n `Cache-write: ${e.usage.cacheCreationInputTokens.toLocaleString()}`,\n ].join(\", \")\n log(`${header(e)} 📊 Tokens usage: ${usageByGeneration}`)\n const usageByRun = [\n `In: ${e.usage.promptTokens.toLocaleString()}`,\n `Out: ${e.usage.completionTokens.toLocaleString()}`,\n `Total: ${e.usage.totalTokens.toLocaleString()}`,\n `Cache-read: ${e.usage.cacheReadInputTokens.toLocaleString()}`,\n `Cache-write: ${e.usage.cacheCreationInputTokens.toLocaleString()}`,\n ].join(\", \")\n log(`${header(e)} 📊 Total usage: ${usageByRun}`)\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type { RunEvent } from \"../schemas/runtime.js\"\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 for (const listener of this.listeners) {\n await listener({\n ...event,\n id: createId(),\n timestamp: Date.now(),\n })\n }\n }\n}\n","import { z } from \"zod\"\nimport { InteractiveSkillSchema, McpSseSkillSchema, McpStdioSkillSchema } from \"./runtime.js\"\n\n/**\n * API Response Schemas\n */\nconst RegistryV1ExpertSchema = z.object({\n name: z.string(),\n version: z.string(),\n minRuntimeVersion: z.string(),\n description: z.string(),\n instruction: z.string(),\n skills: z.record(\n z.string(),\n z.discriminatedUnion(\"type\", [\n McpStdioSkillSchema.omit({ name: true }),\n McpSseSkillSchema.omit({ name: true }),\n InteractiveSkillSchema.omit({ name: true }),\n ]),\n ),\n delegates: z.array(z.string()),\n tags: z.array(z.string()),\n status: z.string(),\n owner: z.object({ name: z.string() }),\n createdAt: z.string().datetime(),\n updatedAt: z.string().datetime(),\n})\nexport const RegistryV1ExpertsGetResponseSchema = z.object({\n data: z.object({\n expert: RegistryV1ExpertSchema,\n }),\n})\nexport type RegistryV1ExpertsGetResponse = z.infer<typeof RegistryV1ExpertsGetResponseSchema>\n","import {\n type RegistryV1ExpertsGetResponse,\n RegistryV1ExpertsGetResponseSchema,\n} from \"./schemas/api-registry.js\"\n\nexport class Perstack {\n baseUrl: string\n registry: RegistryClientV1\n apiKey?: string\n\n constructor(params?: {\n baseUrl?: string\n apiKey?: string\n }) {\n this.baseUrl = params?.baseUrl ?? process.env.PERSTACK_API_BASE_URL ?? \"https://api.perstack.ai\"\n this.apiKey = params?.apiKey ?? process.env.PERSTACK_API_KEY\n\n this.registry = new RegistryClientV1(this)\n }\n}\n\nclass RegistryClientV1 {\n client: Perstack\n endpoint: string\n\n constructor(client: Perstack) {\n this.client = client\n this.endpoint = \"/api/registry/v1/experts\"\n }\n\n async get(expertKey: string): Promise<RegistryV1ExpertsGetResponse> {\n const safeExpertKey = encodeURIComponent(expertKey)\n const url = new URL(`${this.endpoint}/${safeExpertKey}`, this.client.baseUrl)\n const headers = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.client.apiKey}`,\n }\n const result = await fetch(url.toString(), { headers })\n if (!result.ok) {\n throw new Error(\n `Registry returned non-200 status code: ${result.status}, reason: ${result.statusText}`,\n )\n }\n const json = await result.json()\n return RegistryV1ExpertsGetResponseSchema.parse(json)\n }\n}\n","import { Perstack } from \"./api-clinent.js\"\nimport { type Expert, ExpertSchema } from \"./schemas/runtime.js\"\n\nexport async function resolveExpertToRun(\n expertKey: string,\n experts: Record<string, Expert>,\n): Promise<Expert> {\n if (experts[expertKey]) {\n return experts[expertKey]\n }\n const client = new Perstack()\n const { data } = await client.registry.get(expertKey)\n const expert = ExpertSchema.parse({\n ...data.expert,\n key: expertKey,\n })\n experts[expertKey] = expert\n return expert\n}\n","import { type ActorRefFrom, type SnapshotFrom, assign, setup } from \"xstate\"\nimport type { RunEvent, Step } from \"./schemas/runtime.js\"\nimport type { Checkpoint, RunSetting } from \"./schemas/runtime.js\"\nimport type { SkillManager } from \"./skill-manager.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 { resolvingImageFileLogic } from \"./states/resolving-image-file.js\"\nimport { resolvingPdfFileLogic } from \"./states/resolving-pdf-file.js\"\nimport { resolvingThoughtLogic } from \"./states/resolving-thought.js\"\nimport { resolvingToolResultLogic } from \"./states/resolving-tool-result.js\"\nimport { createEmptyUsage, sumUsage } from \"./usage.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, SkillManager>\n },\n context: {} as {\n setting: RunSetting\n step?: Step\n checkpoint: Checkpoint\n eventListener: (event: RunEvent) => Promise<void>\n skillManagers: Record<string, SkillManager>\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 eventListener: input.eventListener,\n skillManagers: input.skillManagers,\n }),\n states: {\n Init: {\n on: {\n startRun: {\n target: \"PreparingForStep\",\n actions: assign({\n checkpoint: ({ event }) =>\n ({\n ...event.initialCheckpoint,\n messages: [...event.initialCheckpoint.messages, ...event.inputMessages],\n status: \"proceeding\",\n }) satisfies Checkpoint,\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 newMessages: [],\n usage: createEmptyUsage(),\n startedAt: event.timestamp,\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 usage: sumUsage(context.step!.usage, event.usage),\n }) satisfies Step,\n }),\n },\n callTool: {\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 }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step!,\n newMessages: [event.newMessage],\n toolCall: event.toolCall,\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 }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step!,\n newMessages: [event.newMessage],\n toolCall: 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 }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step!,\n newMessages: [event.newMessage],\n toolCall: event.toolCall,\n usage: sumUsage(context.step!.usage, event.usage),\n }) satisfies Step,\n }),\n },\n },\n },\n\n CallingTool: {\n on: {\n resolveToolResult: {\n target: \"ResolvingToolResult\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step!,\n toolResult: event.toolResult,\n }) satisfies Step,\n }),\n },\n resolveThought: {\n target: \"ResolvingThought\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step!,\n toolResult: event.toolResult,\n }) satisfies Step,\n }),\n },\n resolvePdfFile: {\n target: \"ResolvingPdfFile\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step!,\n toolResult: event.toolResult,\n }) satisfies Step,\n }),\n },\n resolveImageFile: {\n target: \"ResolvingImageFile\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step!,\n toolResult: event.toolResult,\n }) satisfies Step,\n }),\n },\n attemptCompletion: {\n target: \"GeneratingRunResult\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step!,\n toolResult: event.toolResult,\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 ResolvingPdfFile: {\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 ResolvingImageFile: {\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 completeRun: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => event.step,\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 }) => event.step,\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 }) => event.step,\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 }) => event.step,\n }),\n reenter: true,\n },\n stopRunByExceededMaxSteps: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => event.step,\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 ResolvingPdfFile: resolvingPdfFileLogic,\n ResolvingImageFile: resolvingImageFileLogic,\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 { Client as McpClient } from \"@modelcontextprotocol/sdk/client/index.js\"\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\"\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\"\nimport { type CallToolResult, McpError } from \"@modelcontextprotocol/sdk/types.js\"\nimport { createId } from \"@paralleldrive/cuid2\"\nimport { type ToolSet, jsonSchema } from \"ai\"\nimport { ZodError } from \"zod\"\nimport type { FileInlinePart, ImageInlinePart, TextPart } from \"./schemas/messages.js\"\nimport type { Expert, InteractiveSkill, McpSseSkill, McpStdioSkill } from \"./schemas/runtime.js\"\nimport type {\n CallToolResultContent,\n DelegateSkillManagerParams,\n InteractiveSkillManagerParams,\n McpSkillManagerParams,\n Resource,\n SkillManagerParams,\n SkillType,\n ToolDefinition,\n} from \"./schemas/skill-manager.js\"\n\nexport class SkillManager {\n protected _toolDefinitions: ToolDefinition[] = []\n protected _initialized = false\n readonly name: string\n readonly type: SkillType\n readonly skill?: McpStdioSkill | McpSseSkill\n readonly interactiveSkill?: InteractiveSkill\n readonly expert?: Expert\n private _mcpClient?: McpClient\n private _params: SkillManagerParams\n\n constructor(params: SkillManagerParams) {\n this._params = params\n this.type = params.type\n switch (params.type) {\n case \"mcp\":\n this.name = params.skill.name\n this.skill = params.skill\n break\n case \"interactive\":\n this.name = params.interactiveSkill.name\n this.interactiveSkill = params.interactiveSkill\n break\n case \"delegate\":\n this.name = params.expert.name\n this.expert = params.expert\n break\n }\n }\n\n async init(): Promise<void> {\n switch (this._params.type) {\n case \"mcp\": {\n await this._initMcpSkill(this._params)\n break\n }\n case \"interactive\": {\n await this._initInteractiveSkill(this._params)\n break\n }\n case \"delegate\": {\n await this._initDelegate(this._params)\n break\n }\n }\n }\n\n private async _initMcpSkill(params: McpSkillManagerParams): Promise<void> {\n this._mcpClient = new McpClient({\n name: `${params.skill.name}-mcp-client`,\n version: \"1.0.0\",\n })\n switch (params.skill.type) {\n case \"mcpStdioSkill\": {\n if (!params.skill.command) {\n throw new Error(`Skill ${params.skill.name} has no command`)\n }\n const { command, args } = this._getCommandArgs(params.skill)\n const transport = new StdioClientTransport({\n command,\n args,\n env: Object.fromEntries(\n Object.entries(process.env)\n .filter(([_, value]) => value !== undefined && value !== \"\")\n .map<[string, string]>(([key, value]) => [key, value as string]),\n ),\n })\n await this._mcpClient.connect(transport)\n break\n }\n case \"mcpSseSkill\": {\n if (!params.skill.endpoint) {\n throw new Error(`Skill ${params.skill.name} has no endpoint`)\n }\n const transport = new SSEClientTransport(new URL(params.skill.endpoint))\n await this._mcpClient.connect(transport)\n break\n }\n }\n const { tools } = await this._mcpClient.listTools()\n this._toolDefinitions = tools.map((tool) => ({\n skillName: params.skill.name,\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n interactive: false,\n }))\n this._initialized = true\n }\n\n private _getCommandArgs(skill: McpStdioSkill): { command: string; args: string[] } {\n const { name, command, packageName, args } = skill\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 if (packageName && args && args.length > 0) {\n throw new Error(\n `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 if (command === \"npx\" && !newArgs.includes(\"-y\")) {\n newArgs = [\"-y\", ...newArgs]\n }\n return { command, args: newArgs }\n }\n\n private async _initInteractiveSkill(params: InteractiveSkillManagerParams): Promise<void> {\n this._toolDefinitions = Object.values(params.interactiveSkill.tools).map((tool) => ({\n skillName: params.interactiveSkill.name,\n name: tool.name,\n description: tool.description,\n inputSchema: JSON.parse(tool.inputJsonSchema),\n interactive: true,\n }))\n this._initialized = true\n }\n\n private async _initDelegate(params: DelegateSkillManagerParams): Promise<void> {\n this._toolDefinitions = [\n {\n skillName: params.expert.name,\n name: params.expert.name.split(\"/\").pop() ?? params.expert.name,\n description: params.expert.description,\n inputSchema: {\n type: \"object\",\n properties: { query: { type: \"string\" } },\n required: [\"query\"],\n },\n interactive: false,\n },\n ]\n this._initialized = true\n }\n\n async close(): Promise<void> {\n if (this._mcpClient) {\n await this._mcpClient.close()\n }\n }\n\n async getToolDefinitions(): Promise<ToolDefinition[]> {\n if (!this._initialized) {\n throw new Error(`${this.name} is not initialized`)\n }\n if (this._params.type === \"mcp\") {\n const omit = this._params.skill.omit ?? []\n const pick = this._params.skill.pick ?? []\n return this._toolDefinitions\n .filter((tool) => (omit.length > 0 ? !omit.includes(tool.name) : true))\n .filter((tool) => (pick.length > 0 ? pick.includes(tool.name) : true))\n }\n return this._toolDefinitions\n }\n\n async callTool(\n toolName: string,\n input: Record<string, unknown>,\n ): Promise<Array<TextPart | ImageInlinePart | FileInlinePart>> {\n switch (this._params.type) {\n case \"mcp\": {\n if (!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 this._convertToolResult(result, toolName, input)\n } catch (error) {\n return this._handleToolError(error, toolName)\n }\n }\n case \"interactive\": {\n return []\n }\n case \"delegate\": {\n return []\n }\n }\n }\n\n private _handleToolError(error: unknown, toolName: string): Array<TextPart> {\n if (error instanceof McpError) {\n return [\n {\n type: \"textPart\",\n text: `Error calling tool ${toolName}: ${error.message}`,\n id: createId(),\n },\n ]\n }\n if (error instanceof ZodError) {\n return [{ type: \"textPart\", text: `Invalid tool call arguments: ${error}`, id: createId() }]\n }\n throw error\n }\n\n private _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 return result.content\n .filter((part) => part.type !== \"audio\" && part.type !== \"resource_link\")\n .map((part) => this._convertPart(part as CallToolResultContent))\n }\n\n private _convertPart(part: CallToolResultContent): 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 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 case \"resource\":\n if (!part.resource) {\n throw new Error(\"Resource part must have resource content\")\n }\n return this._convertResource(part.resource)\n }\n }\n\n private _convertResource(resource: Resource): TextPart | FileInlinePart {\n if (!resource.mimeType) {\n throw new Error(`Resource ${JSON.stringify(resource)} has no mimeType`)\n }\n if (resource.text && typeof resource.text === \"string\") {\n return { type: \"textPart\", text: resource.text, id: createId() }\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 throw new Error(`Unsupported resource type: ${JSON.stringify(resource)}`)\n }\n}\n\nexport async function getSkillManagers(\n expert: Expert,\n experts: Record<string, Expert>,\n): Promise<Record<string, SkillManager>> {\n const skillManagers: Record<string, SkillManager> = {}\n const { skills } = expert\n if (!skills[\"@perstack/base\"]) {\n skills[\"@perstack/base\"] = {\n type: \"mcpStdioSkill\",\n name: \"@perstack/base\",\n description: \"The base skill for Perstack\",\n pick: [],\n omit: [],\n command: \"npx\",\n args: [\"-y\", \"@perstack/base\"],\n requiredEnv: [],\n }\n }\n const mcpSkillManagers = await Promise.all(\n Object.values(skills)\n .filter((skill) => skill.type === \"mcpStdioSkill\" || skill.type === \"mcpSseSkill\")\n .map(async (skill) => {\n const skillManager = new SkillManager({\n type: \"mcp\",\n skill,\n })\n await skillManager.init()\n return skillManager\n }),\n )\n const interactiveSkillManagers = await Promise.all(\n Object.values(skills)\n .filter((skill) => skill.type === \"interactiveSkill\")\n .map(async (interactiveSkill) => {\n const skillManager = new SkillManager({\n type: \"interactive\",\n interactiveSkill,\n })\n await skillManager.init()\n return skillManager\n }),\n )\n const delegateSkillManagers = await Promise.all(\n expert.delegates.map(async (delegateExpertName) => {\n const delegate = experts[delegateExpertName]\n const skillManager = new SkillManager({\n type: \"delegate\",\n expert: delegate,\n })\n await skillManager.init()\n return skillManager\n }),\n )\n for (const skillManager of mcpSkillManagers) {\n skillManagers[skillManager.name] = skillManager\n }\n for (const skillManager of interactiveSkillManagers) {\n skillManagers[skillManager.name] = skillManager\n }\n for (const skillManager of delegateSkillManagers) {\n skillManagers[skillManager.name] = skillManager\n }\n return skillManagers\n}\n\nexport async function closeSkillManagers(\n skillManagers: Record<string, SkillManager>,\n): Promise<void> {\n for (const skillManager of Object.values(skillManagers)) {\n await skillManager.close()\n }\n}\n\nexport async function getSkillManagerByToolName(\n skillManagers: Record<string, SkillManager>,\n toolName: string,\n): Promise<SkillManager> {\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(skillManagers: Record<string, SkillManager>): 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] = {\n description: toolDefinition.description,\n parameters: jsonSchema(toolDefinition.inputSchema),\n }\n }\n }\n return tools\n}\n\nexport function getEventTypeBySkillType(\n skillType: SkillType,\n): \"callTool\" | \"callInteractiveTool\" | \"callDelegate\" {\n switch (skillType) {\n case \"mcp\":\n return \"callTool\"\n case \"interactive\":\n return \"callInteractiveTool\"\n case \"delegate\":\n return \"callDelegate\"\n }\n}\n","import type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { type RunEvent, stopRunByDelegate } from \"../schemas/runtime.js\"\nimport { getSkillManagerByToolName } from \"../skill-manager.js\"\n\nexport async function callingDelegateLogic({\n setting,\n checkpoint,\n step,\n skillManagers,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step?.toolCall) {\n throw new Error(\"No tool call found\")\n }\n const { id, toolName, args } = step.toolCall\n const skillManager = await getSkillManagerByToolName(skillManagers, toolName)\n if (!skillManager || !skillManager.expert) {\n throw new Error(`Delegation error: skill manager \"${toolName}\" not found`)\n }\n if (!args || !args.query || typeof args.query !== \"string\") {\n throw new Error(\"Delegation error: query is undefined\")\n }\n return stopRunByDelegate(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByDelegate\",\n delegateTo: {\n expert: {\n key: skillManager.expert.key,\n name: skillManager.expert.name,\n version: skillManager.expert.version,\n },\n toolCallId: id,\n toolName,\n query: args.query,\n },\n },\n step: {\n ...step!,\n finishedAt: new Date().getTime(),\n },\n })\n}\n","import type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { type RunEvent, stopRunByInteractiveTool } from \"../schemas/runtime.js\"\n\nexport async function callingInteractiveToolLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n return stopRunByInteractiveTool(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByInteractiveTool\",\n },\n step: {\n ...step!,\n finishedAt: new Date().getTime(),\n },\n })\n}\n","import type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport {\n attemptCompletion,\n resolveImageFile,\n resolvePdfFile,\n resolveThought,\n resolveToolResult,\n} from \"../schemas/runtime.js\"\nimport type { RunEvent, ToolResult } from \"../schemas/runtime.js\"\nimport { getSkillManagerByToolName } from \"../skill-manager.js\"\n\nexport async function callingToolLogic({\n setting,\n checkpoint,\n step,\n skillManagers,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step?.toolCall) {\n throw new Error(\"No tool call found\")\n }\n const { id, skillName, toolName, args } = step.toolCall\n const skillManager = await getSkillManagerByToolName(skillManagers, toolName)\n if (skillManager.type !== \"mcp\") {\n throw new Error(`Incorrect SkillType, required MCP, got ${skillManager.type}`)\n }\n const result = await skillManager.callTool(toolName, args)\n const toolResult: ToolResult = { id, skillName, toolName, result }\n if (skillName === \"@perstack/base\") {\n if (toolName === \"think\") {\n return resolveThought(setting, checkpoint, { toolResult })\n }\n if (toolName === \"attemptCompletion\") {\n return attemptCompletion(setting, checkpoint, { toolResult })\n }\n if (toolName === \"readPdfFile\") {\n return resolvePdfFile(setting, checkpoint, { toolResult })\n }\n if (toolName === \"readImageFile\") {\n return resolveImageFile(setting, checkpoint, { toolResult })\n }\n }\n return resolveToolResult(setting, checkpoint, { toolResult })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { type RunEvent, continueToNextStep, stopRunByExceededMaxSteps } from \"../schemas/runtime.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: new Date().getTime(),\n },\n })\n }\n return continueToNextStep(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n },\n step: {\n ...step!,\n finishedAt: new Date().getTime(),\n },\n nextCheckpoint: {\n ...checkpoint,\n id: createId(),\n stepNumber: checkpoint.stepNumber + 1,\n },\n })\n}\n","import { generateText } from \"ai\"\nimport {\n createExpertMessage,\n createToolMessage,\n messageToCoreMessage,\n} from \"../messages/message.js\"\nimport { getModel } from \"../model.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { type RunEvent, completeRun } from \"../schemas/runtime.js\"\nimport { sumUsage, usageFromGenerateTextResult } from \"../usage.js\"\n\nexport async function generatingRunResultLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step?.toolCall || !step?.toolResult) {\n throw new Error(\"No tool call or tool result found\")\n }\n const { id, toolName } = step.toolCall\n const { result } = step.toolResult\n const toolMessage = createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: id,\n toolName,\n contents: result.filter(\n (part) => part.type === \"textPart\" || part.type === \"imageInlinePart\",\n ),\n },\n ])\n const model = getModel(setting.model)\n const { messages } = checkpoint\n const generationResult = await generateText({\n model,\n messages: [...messages, toolMessage].map(messageToCoreMessage),\n temperature: setting.temperature,\n maxRetries: setting.maxRetries,\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 status: \"completed\",\n },\n step: {\n ...step!,\n newMessages: [...step!.newMessages, ...newMessages],\n finishedAt: new Date().getTime(),\n usage: sumUsage(step!.usage, usage),\n },\n text,\n usage,\n })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type {\n CoreAssistantMessage,\n FilePart as CoreFilePart,\n ImagePart as CoreImagePart,\n CoreMessage,\n CoreSystemMessage,\n TextPart as CoreTextPart,\n ToolCallPart as CoreToolCallPart,\n CoreToolMessage,\n ToolResultPart as CoreToolResultPart,\n CoreUserMessage,\n} from \"ai\"\nimport { dedent } from \"ts-dedent\"\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 \"../schemas/messages.js\"\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}\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}\nexport function createToolMessage(\n contents: Array<\n Omit<ToolResultPart, \"id\" | \"contents\"> & {\n contents: Array<Omit<TextPart, \"id\"> | Omit<ImageInlinePart, \"id\">>\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): CoreMessage {\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): CoreSystemMessage[\"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\"]): CoreUserMessage[\"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 }\n })\n}\nfunction expertContentsToCoreContent(\n contents: ExpertMessage[\"contents\"],\n): CoreAssistantMessage[\"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 }\n })\n}\nfunction toolContentsToCoreContent(contents: ToolMessage[\"contents\"]): CoreToolMessage[\"content\"] {\n return contents.map((part) => {\n switch (part.type) {\n case \"toolResultPart\":\n return toolResultPartToCoreToolResultPart(part)\n }\n })\n}\nfunction textPartToCoreTextPart(part: TextPart): CoreTextPart {\n return {\n type: \"text\",\n text: part.text,\n }\n}\nfunction imageUrlPartToCoreImagePart(part: ImageUrlPart): CoreImagePart {\n return {\n type: \"image\",\n image: part.url,\n mimeType: part.mimeType,\n }\n}\nfunction imageInlinePartToCoreImagePart(part: ImageInlinePart): CoreImagePart {\n return {\n type: \"image\",\n image: part.encodedData,\n mimeType: part.mimeType,\n }\n}\nfunction imageBinaryPartToCoreImagePart(part: ImageBinaryPart): CoreImagePart {\n return {\n type: \"image\",\n image: part.data,\n mimeType: part.mimeType,\n }\n}\nfunction fileUrlPartToCoreFilePart(part: FileUrlPart): CoreFilePart {\n return {\n type: \"file\",\n data: part.url,\n mimeType: part.mimeType,\n }\n}\nfunction fileInlinePartToCoreFilePart(part: FileInlinePart): CoreFilePart {\n return {\n type: \"file\",\n data: part.encodedData,\n mimeType: part.mimeType,\n }\n}\nfunction fileBinaryPartToCoreFilePart(part: FileBinaryPart): CoreFilePart {\n return {\n type: \"file\",\n data: part.data,\n mimeType: part.mimeType,\n }\n}\nfunction toolCallPartToCoreToolCallPart(part: ToolCallPart): CoreToolCallPart {\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n args: part.args,\n }\n}\nfunction toolResultPartToCoreToolResultPart(part: ToolResultPart): CoreToolResultPart {\n return {\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n result: part.contents,\n experimental_content: part.contents.map((part) => {\n switch (part.type) {\n case \"textPart\":\n return {\n type: \"text\",\n text: part.text,\n }\n case \"imageInlinePart\":\n return {\n type: \"image\",\n data: part.encodedData,\n mimeType: part.mimeType,\n }\n }\n }),\n isError: part.isError,\n }\n}\n","import type { GenerateTextResult, ToolSet } from \"ai\"\nimport type { Usage } from \"./schemas/runtime.js\"\n\nexport function createEmptyUsage(): Usage {\n return {\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n cacheCreationInputTokens: 0,\n cacheReadInputTokens: 0,\n }\n}\n\nexport function usageFromGenerateTextResult(result: GenerateTextResult<ToolSet, never>): Usage {\n let cacheCreationInputTokens = 0\n let cacheReadInputTokens = 0\n if (result.providerMetadata?.anthropic) {\n const anthropicMetadata = result.providerMetadata.anthropic as {\n cacheCreationInputTokens?: number\n cacheReadInputTokens?: number\n }\n cacheCreationInputTokens = anthropicMetadata.cacheCreationInputTokens || 0\n cacheReadInputTokens = anthropicMetadata.cacheReadInputTokens || 0\n }\n return {\n promptTokens: result.usage.promptTokens,\n completionTokens: result.usage.completionTokens,\n totalTokens: result.usage.totalTokens,\n cacheCreationInputTokens,\n cacheReadInputTokens,\n }\n}\n\nexport function sumUsage(a: Usage, b: Usage): Usage {\n return {\n promptTokens: a.promptTokens + b.promptTokens,\n completionTokens: a.completionTokens + b.completionTokens,\n totalTokens: a.totalTokens + b.totalTokens,\n cacheCreationInputTokens: a.cacheCreationInputTokens + b.cacheCreationInputTokens,\n cacheReadInputTokens: a.cacheReadInputTokens + b.cacheReadInputTokens,\n }\n}\n","import { generateText } from \"ai\"\nimport {\n createExpertMessage,\n createToolMessage,\n createUserMessage,\n messageToCoreMessage,\n} from \"../messages/message.js\"\nimport { getModel } from \"../model.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport type { TextPart, ToolCallPart } from \"../schemas/messages.js\"\nimport {\n type RunEvent,\n callDelegate,\n callInteractiveTool,\n callTool,\n retry,\n} from \"../schemas/runtime.js\"\nimport { getSkillManagerByToolName, getToolSet } from \"../skill-manager.js\"\nimport { usageFromGenerateTextResult } from \"../usage.js\"\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)\n const 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 })\n const usage = usageFromGenerateTextResult(result)\n const { text, toolCalls, finishReason } = result\n const toolCall = toolCalls[0]\n if (!toolCall) {\n return retry(setting, checkpoint, {\n newMessages: [\n createExpertMessage(text ? [{ type: \"textPart\", text }] : []),\n createUserMessage([\n {\n type: \"textPart\",\n text: \"You must generate a tool call. Try again.\",\n },\n ]),\n ],\n usage,\n })\n }\n if (finishReason !== \"tool-calls\") {\n switch (finishReason) {\n case \"length\": {\n return retry(setting, checkpoint, {\n newMessages: [\n createExpertMessage([\n {\n type: \"toolCallPart\",\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n args: toolCall.args,\n },\n ]),\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n contents: [{ type: \"textPart\", text: \"Error: Generation length exceeded\" }],\n },\n ]),\n ],\n usage,\n })\n }\n default:\n throw new Error(`Unexpected finish reason: ${finishReason}`)\n }\n }\n const contents: Array<Omit<TextPart, \"id\"> | Omit<ToolCallPart, \"id\">> = [\n {\n type: \"toolCallPart\",\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n args: toolCall.args,\n },\n ]\n if (text) {\n contents.push({\n type: \"textPart\",\n text,\n })\n }\n const skillManager = await getSkillManagerByToolName(skillManagers, toolCall.toolName)\n const eventPayload = {\n newMessage: createExpertMessage(contents),\n toolCall: {\n id: toolCall.toolCallId,\n skillName: skillManager.name,\n toolName: toolCall.toolName,\n args: toolCall.args,\n },\n usage,\n }\n switch (skillManager.type) {\n case \"mcp\":\n return callTool(setting, checkpoint, eventPayload)\n case \"interactive\":\n return callInteractiveTool(setting, checkpoint, eventPayload)\n case \"delegate\":\n return callDelegate(setting, checkpoint, eventPayload)\n }\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport { dedent } from \"ts-dedent\"\nimport type { InstructionMessage } from \"../schemas/messages.js\"\nimport type { Expert } from \"../schemas/runtime.js\"\n\nconst metaInstruction = dedent`\n IMPORTANT:\n You are NOT an \"interactive\" AI agent.\n From the start of the agent loop until the completion of the task,\n YOU CANNOT RECEIVE ADDITIONAL RESPONSES TO QUESTIONS YOU ASK THE USER.\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 エージェントループの終了条件:\n 以下の条件に該当した場合は、**即座にattemptCompletionツールを呼び出してください**。\n エージェントループを終了しなければならない状況で、attemptCompletion以外のツールを呼び出すことは非常に危険です。\n 絶対に、何があってもこのルールは守るようにしてください。\n - タスクが完了した時\n - ユーザーの依頼があなたの専門外だった時\n - ユーザーが倫理的に不正な要求をした時\n - ユーザーの依頼が理解不能である時\n - ユーザーの依頼によって、セキュリティに危険が生じる恐れがある時\n - ユーザーの依頼によって、他人に迷惑をかける恐れがある時\n - ユーザーの依頼に、不適切な言葉や、性的な内容が含まれている時\n\n Rules for requests outside your area of expertise:\n - Tell your area of expertise to the user in final results\n - In the Final Result, you can show the user how to create an expert that they might need; This can be done by running the \\`parrot new\\` (no arguments required) command.\n\n 全般的なタスクの取り組み方や、アウトプット品質に関するルール:\n - ユーザはあなたのことを、その分野の『専門家』であると認識しています\n - 専門家である以上、タスクの実行においては、徹底した考察を行いつつ、確証を持って一つ一つのタスクを実行してください\n - 専門家である以上、ユーザーが期待する以上の品質のアウトプットを行ってください\n\n Environment information:\n - Current time is ${new Date().toISOString()}\n - Current working directory is ${process.cwd()}\n`\n\nexport function createInstructionMessage(\n expert: Expert,\n experts: Record<string, Expert>,\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 ${metaInstruction}\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 { createInstructionMessage } from \"../messages/instruction-message.js\"\nimport { createToolMessage, createUserMessage } from \"../messages/message.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport type { ToolMessage, UserMessage } from \"../schemas/messages.js\"\nimport { type RunEvent, type RunInput, startRun } from \"../schemas/runtime.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 return startRun(setting, checkpoint, {\n initialCheckpoint: checkpoint,\n inputMessages: [createInstructionMessage(expert, experts), getInputMessage(setting.input)],\n })\n default:\n return startRun(setting, checkpoint, {\n initialCheckpoint: checkpoint,\n inputMessages: [getInputMessage(setting.input)],\n })\n }\n}\n\nfunction getInputMessage(input: RunInput): UserMessage | ToolMessage {\n if (input.text) {\n return createUserMessage([{ type: \"textPart\", text: input.text }])\n }\n if (input.interactiveToolCallResult) {\n return createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: input.interactiveToolCallResult.toolCallId,\n toolName: input.interactiveToolCallResult.toolName,\n contents: [{ type: \"textPart\", text: input.interactiveToolCallResult.text }],\n },\n ])\n }\n throw new Error(\"Input message is undefined\")\n}\n","import type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { type RunEvent, startGeneration } from \"../schemas/runtime.js\"\n\nexport async function preparingForStepLogic({\n setting,\n checkpoint,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n // TODO: add logic to count tokens and check if it's exceeded the limit\n return startGeneration(setting, checkpoint, {\n messages: checkpoint.messages,\n })\n}\n","import { readFile } from \"node:fs/promises\"\nimport { createToolMessage } from \"../messages/message.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport type { ImageInlinePart, TextPart } from \"../schemas/messages.js\"\nimport { type RunEvent, finishToolCall } from \"../schemas/runtime.js\"\n\ntype ReadImageFileResult = { path: string; mimeType: string; size: number }\nexport async function resolvingImageFileLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step?.toolCall || !step?.toolResult) {\n throw new Error(\"No tool call or tool result found\")\n }\n const { id, toolName } = step.toolCall\n const { result } = step.toolResult\n const textParts = result.filter((part) => part.type === \"textPart\")\n const files: (Omit<ImageInlinePart, \"id\"> | Omit<TextPart, \"id\">)[] = []\n for (const textPart of textParts) {\n let imageInfo: ReadImageFileResult | undefined\n try {\n imageInfo = JSON.parse(textPart.text) as ReadImageFileResult\n } catch {\n files.push({\n type: \"textPart\",\n text: textPart.text,\n })\n continue\n }\n const { path, mimeType, size } = imageInfo\n const file = await readFile(path).then((buffer) => ({\n encodedData: buffer.toString(\"base64\"),\n mimeType,\n size,\n }))\n files.push({\n type: \"imageInlinePart\",\n encodedData: file.encodedData,\n mimeType: file.mimeType,\n })\n }\n return finishToolCall(setting, checkpoint, {\n newMessages: [\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: id,\n toolName,\n contents: files,\n },\n ]),\n ],\n })\n}\n","import { readFile } from \"node:fs/promises\"\nimport { createToolMessage, createUserMessage } from \"../messages/message.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport type { FileInlinePart, TextPart } from \"../schemas/messages.js\"\nimport { type RunEvent, finishToolCall } from \"../schemas/runtime.js\"\n\ntype ReadPdfFileResult = { path: string; mimeType: string; size: number }\nexport async function resolvingPdfFileLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step?.toolCall || !step?.toolResult) {\n throw new Error(\"No tool call or tool result found\")\n }\n const { id, toolName } = step.toolCall\n const { result } = step.toolResult\n const textParts = result.filter((part) => part.type === \"textPart\")\n const files: (Omit<FileInlinePart, \"id\"> | Omit<TextPart, \"id\">)[] = []\n for (const textPart of textParts) {\n let pdfInfo: ReadPdfFileResult | undefined\n try {\n pdfInfo = JSON.parse(textPart.text) as ReadPdfFileResult\n } catch {\n files.push({\n type: \"textPart\",\n text: textPart.text,\n })\n continue\n }\n const { path, mimeType, size } = pdfInfo\n const file = await readFile(path).then((buffer) => ({\n encodedData: buffer.toString(\"base64\"),\n mimeType,\n size,\n }))\n files.push({\n type: \"fileInlinePart\",\n encodedData: file.encodedData,\n mimeType: file.mimeType,\n })\n }\n return finishToolCall(setting, checkpoint, {\n newMessages: [\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: id,\n toolName,\n contents: [\n {\n type: \"textPart\",\n text: \"User uploads PDF file as follows.\",\n },\n ],\n },\n ]),\n createUserMessage(files),\n ],\n })\n}\n","import { createToolMessage } from \"../messages/message.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { type RunEvent, finishToolCall } from \"../schemas/runtime.js\"\n\nexport async function resolvingToolResultLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step?.toolCall || !step?.toolResult) {\n throw new Error(\"No tool call or tool result found\")\n }\n const { id, toolName } = step.toolCall\n const { result } = step.toolResult\n return finishToolCall(setting, checkpoint, {\n newMessages: [\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: id,\n toolName,\n contents: result.filter(\n (part) => part.type === \"textPart\" || part.type === \"imageInlinePart\",\n ),\n },\n ]),\n ],\n })\n}\n","import type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport type { RunEvent } from \"../schemas/runtime.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 { z } from \"zod\"\n\n/**\n * perstack.toml config schema\n */\nexport const PerstackConfigSchema = z.object({\n model: z.string().optional(),\n temperature: z.number().optional(),\n maxSteps: z.number().optional(),\n maxRetries: z.number().optional(),\n experts: z\n .record(\n z.string(),\n z.object({\n version: z.string().optional(),\n minRuntimeVersion: z.string().optional(),\n description: z.string().optional(),\n instruction: z.string(),\n skills: z\n .record(\n z.string(),\n z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"mcpStdioSkill\"),\n description: z.string().optional(),\n rule: z.string().optional(),\n pick: z.array(z.string()).optional(),\n omit: z.array(z.string()).optional(),\n command: z.string(),\n packageName: z.string().optional(),\n args: z.array(z.string()).optional(),\n requiredEnv: z.array(z.string()).optional(),\n }),\n z.object({\n type: z.literal(\"mcpSseSkill\"),\n description: z.string().optional(),\n rule: z.string().optional(),\n pick: z.array(z.string()).optional(),\n omit: z.array(z.string()).optional(),\n endpoint: z.string(),\n }),\n z.object({\n type: z.literal(\"interactiveSkill\"),\n description: z.string().optional(),\n rule: z.string().optional(),\n tools: z.record(\n z.string(),\n z.object({\n description: z.string().optional(),\n inputJsonSchema: z.string(),\n }),\n ),\n }),\n ]),\n )\n .optional(),\n delegates: z.array(z.string()).optional(),\n }),\n )\n .optional(),\n})\nexport type PerstackConfig = z.infer<typeof PerstackConfigSchema>\n","import { z } from \"zod\"\n\n/**\n * Run command input schema\n */\nexport const RunInputSchema = z.object({\n expertKey: z.string(),\n query: z.string(),\n options: z.object({\n config: z.string().optional(),\n model: z.string().optional(),\n temperature: z\n .string()\n .optional()\n .transform((value) => {\n if (value === undefined) {\n return undefined\n }\n const parsedValue = Number.parseFloat(value)\n if (Number.isNaN(parsedValue)) {\n return undefined\n }\n return parsedValue\n }),\n maxSteps: z\n .string()\n .optional()\n .transform((value) => {\n if (value === undefined) {\n return undefined\n }\n const parsedValue = Number.parseInt(value)\n if (Number.isNaN(parsedValue)) {\n return undefined\n }\n return parsedValue\n }),\n maxRetries: z\n .string()\n .optional()\n .transform((value) => {\n if (value === undefined) {\n return undefined\n }\n const parsedValue = Number.parseInt(value)\n if (Number.isNaN(parsedValue)) {\n return undefined\n }\n return parsedValue\n }),\n runId: z.string().optional(),\n }),\n})\n"],"mappings":";AAAA,SAAS,kBAAkB;AAC3B,SAAS,SAAAA,QAAO,YAAAC,WAAU,aAAAC,kBAAiB;AAC3C,OAAO,UAAU;AACjB,SAAS,YAAAC,iBAAgB;AACzB,OAAO,UAAU;AACjB,SAAS,mBAAmB;;;ACL5B,SAAS,OAAO,UAAU,SAAS,iBAAiB;;;ACApD,SAAS,gBAAgB;AACzB,SAAS,KAAAC,UAAS;;;ACDlB,SAAS,iBAAiB;AAC1B,SAAS,cAAc;AACvB,SAAS,cAAc;AAGvB,IAAM,eAAe;AAErB,IAAM,kBAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAKF;AAEA,IAAM,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAIF;AAEA,IAAM,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYF;AAMO,IAAM,kBAAkD,OAAO;AAAA,EACpE,CAAC,GAAG,iBAAiB,GAAG,cAAc,GAAG,YAAY,EAAE,IAAI,CAAC,UAAU;AAAA,IACpE;AAAA,IACA,EAAE,SAAS,UAAU,cAAc,MAAM;AAAA,EAC3C,CAAC;AACH;AAEO,SAAS,sBAA8B;AAC5C,QAAM,QAAQ,OAAO,OAAO,eAAe,EAAE,KAAK,CAACC,WAAUA,OAAM,OAAO;AAC1E,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AACA,SAAO,MAAM;AACf;AAEO,SAAS,SAAS,SAAmC;AAC1D,QAAM,mBAAmB,WAAW,oBAAoB;AAExD,MAAI,gBAAgB,SAAS,gBAAgB,GAAG;AAC9C,WAAO,UAAU,gBAAgB;AAAA,EACnC;AACA,MAAI,aAAa,SAAS,gBAAgB,GAAG;AAC3C,WAAO,OAAO,gBAAgB;AAAA,EAChC;AACA,MAAI,aAAa,SAAS,gBAAgB,GAAG;AAC3C,WAAO,OAAO,gBAAgB;AAAA,EAChC;AACA,QAAM,IAAI,MAAM,sBAAsB,gBAAgB,EAAE;AAC1D;;;AChIA,SAAS,SAAS;AAKlB,IAAM,iBAAiB,EAAE,OAAO;AAAA,EAC9B,IAAI,EAAE,OAAO;AACf,CAAC;AAEM,IAAM,iBAAiB,eAAe,OAAO;AAAA,EAClD,MAAM,EAAE,QAAQ,UAAU;AAAA,EAC1B,MAAM,EAAE,OAAO;AACjB,CAAC;AAGM,IAAM,qBAAqB,eAAe,OAAO;AAAA,EACtD,MAAM,EAAE,QAAQ,cAAc;AAAA,EAC9B,KAAK,EAAE,OAAO,EAAE,IAAI;AAAA,EACpB,UAAU,EAAE,OAAO;AACrB,CAAC;AAGM,IAAM,wBAAwB,eAAe,OAAO;AAAA,EACzD,MAAM,EAAE,QAAQ,iBAAiB;AAAA,EACjC,aAAa,EAAE,OAAO;AAAA,EACtB,UAAU,EAAE,OAAO;AACrB,CAAC;AAGM,IAAM,wBAAwB,eAAe,OAAO;AAAA,EACzD,MAAM,EAAE,QAAQ,iBAAiB;AAAA,EACjC,MAAM,EAAE,OAAO;AAAA,EACf,UAAU,EAAE,OAAO;AACrB,CAAC;AAGM,IAAM,oBAAoB,eAAe,OAAO;AAAA,EACrD,MAAM,EAAE,QAAQ,aAAa;AAAA,EAC7B,KAAK,EAAE,OAAO,EAAE,IAAI;AAAA,EACpB,UAAU,EAAE,OAAO;AACrB,CAAC;AAGM,IAAM,uBAAuB,eAAe,OAAO;AAAA,EACxD,MAAM,EAAE,QAAQ,gBAAgB;AAAA,EAChC,aAAa,EAAE,OAAO;AAAA,EACtB,UAAU,EAAE,OAAO;AACrB,CAAC;AAGM,IAAM,uBAAuB,eAAe,OAAO;AAAA,EACxD,MAAM,EAAE,QAAQ,gBAAgB;AAAA,EAChC,MAAM,EAAE,OAAO;AAAA,EACf,UAAU,EAAE,OAAO;AACrB,CAAC;AAGM,IAAM,qBAAqB,eAAe,OAAO;AAAA,EACtD,MAAM,EAAE,QAAQ,cAAc;AAAA,EAC9B,YAAY,EAAE,OAAO;AAAA,EACrB,UAAU,EAAE,OAAO;AAAA,EACnB,MAAM,EAAE,QAAQ;AAClB,CAAC;AAGM,IAAM,uBAAuB,eAAe,OAAO;AAAA,EACxD,MAAM,EAAE,QAAQ,gBAAgB;AAAA,EAChC,YAAY,EAAE,OAAO;AAAA,EACrB,UAAU,EAAE,OAAO;AAAA,EACnB,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,gBAAgB,qBAAqB,CAAC,CAAC;AAAA,EAClE,SAAS,EAAE,QAAQ,EAAE,SAAS;AAChC,CAAC;AAMD,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACjC,IAAI,EAAE,OAAO;AACf,CAAC;AAEM,IAAM,2BAA2B,kBAAkB,OAAO;AAAA,EAC/D,MAAM,EAAE,QAAQ,oBAAoB;AAAA,EACpC,UAAU,EAAE,MAAM,cAAc;AAAA,EAChC,OAAO,EAAE,QAAQ,EAAE,SAAS;AAC9B,CAAC;AAGM,IAAM,oBAAoB,kBAAkB,OAAO;AAAA,EACxD,MAAM,EAAE,QAAQ,aAAa;AAAA,EAC7B,UAAU,EAAE;AAAA,IACV,EAAE,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EACA,OAAO,EAAE,QAAQ,EAAE,SAAS;AAC9B,CAAC;AAGM,IAAM,sBAAsB,kBAAkB,OAAO;AAAA,EAC1D,MAAM,EAAE,QAAQ,eAAe;AAAA,EAC/B,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,gBAAgB,kBAAkB,CAAC,CAAC;AAAA,EAC/D,OAAO,EAAE,QAAQ,EAAE,SAAS;AAC9B,CAAC;AAGM,IAAM,oBAAoB,kBAAkB,OAAO;AAAA,EACxD,MAAM,EAAE,QAAQ,aAAa;AAAA,EAC7B,UAAU,EAAE,MAAM,oBAAoB;AAAA,EACtC,OAAO,EAAE,QAAQ,EAAE,SAAS;AAC9B,CAAC;AAGM,IAAM,gBAAgB,EAAE,MAAM;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;AF9GM,IAAM,kBAAkB;AACxB,IAAM,eACX;AACK,IAAM,eAAe;AACrB,IAAM,iBACX;AACK,IAAM,iBAAiB;AACvB,IAAM,gBAAgB;AAEtB,SAAS,eAAe,WAK7B;AACA,QAAM,QAAQ,UAAU,MAAM,cAAc;AAC5C,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,8BAA8B,SAAS,EAAE;AAAA,EAC3D;AAEA,QAAM,CAAC,KAAK,MAAM,SAAS,GAAG,IAAI;AAClC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,IAAM,sBAAsBC,GAAE,OAAO;AAAA,EAC1C,MAAMA,GAAE,QAAQ,eAAe;AAAA,EAC/B,MAAMA,GAAE,OAAO;AAAA,EACf,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,MAAMA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAMA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC/C,MAAMA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC/C,SAASA,GAAE,OAAO;AAAA,EAClB,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,MAAMA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC/C,aAAaA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACxD,CAAC;AAGM,IAAM,oBAAoBA,GAAE,OAAO;AAAA,EACxC,MAAMA,GAAE,QAAQ,aAAa;AAAA,EAC7B,MAAMA,GAAE,OAAO;AAAA,EACf,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,MAAMA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAMA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC/C,MAAMA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC/C,UAAUA,GAAE,OAAO;AACrB,CAAC;AAGM,IAAM,wBAAwBA,GAAE,OAAO;AAAA,EAC5C,MAAMA,GAAE,OAAO;AAAA,EACf,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,iBAAiBA,GAAE,OAAO;AAC5B,CAAC;AACM,IAAM,yBAAyBA,GAAE,OAAO;AAAA,EAC7C,MAAMA,GAAE,QAAQ,kBAAkB;AAAA,EAClC,MAAMA,GAAE,OAAO;AAAA,EACf,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,MAAMA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAOA,GAAE,OAAOA,GAAE,OAAO,GAAG,sBAAsB,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,UAAU;AAC3F,WAAO,OAAO;AAAA,MACZ,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,eAAe,MAAM;AAAA,QACpD;AAAA,QACA,sBAAsB,MAAM,EAAE,GAAG,iBAAiB,MAAM,IAAI,CAAC;AAAA,MAC/D,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH,CAAC;AAGM,IAAM,eAAeA,GAAE,OAAO;AAAA,EACnC,KAAKA,GAAE,OAAO,EAAE,MAAM,cAAc,EAAE,IAAI,CAAC;AAAA,EAC3C,MAAMA,GAAE,OAAO,EAAE,MAAM,eAAe,EAAE,IAAI,CAAC,EAAE,IAAI,aAAa;AAAA,EAChE,SAASA,GAAE,OAAO,EAAE,MAAM,YAAY;AAAA,EACtC,aAAaA,GACV,OAAO,EACP,IAAI,CAAC,EACL,IAAI,OAAO,CAAC,EACZ,SAAS;AAAA,EACZ,aAAaA,GACV,OAAO,EACP,IAAI,CAAC,EACL,IAAI,OAAO,EAAE;AAAA,EAChB,QAAQA,GACL;AAAA,IACCA,GAAE,OAAO;AAAA,IACTA,GAAE,mBAAmB,QAAQ;AAAA,MAC3B,oBAAoB,KAAK,EAAE,MAAM,KAAK,CAAC;AAAA,MACvC,kBAAkB,KAAK,EAAE,MAAM,KAAK,CAAC;AAAA,MACrC,uBAAuB,KAAK,EAAE,MAAM,KAAK,CAAC;AAAA,IAC5C,CAAC;AAAA,EACH,EACC,SAAS,EACT,QAAQ;AAAA,IACP,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,MACT,MAAM,CAAC,MAAM,gBAAgB;AAAA,IAC/B;AAAA,EACF,CAAC,EACA,UAAU,CAAC,WAAW;AACrB,WAAO,OAAO;AAAA,MACZ,OAAO,QAAQ,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,gBAAgB,MAAM;AAAA,QACtD;AAAA,QACAA,GACG,mBAAmB,QAAQ;AAAA,UAC1B;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC,EACA,MAAM,EAAE,GAAG,kBAAkB,MAAM,IAAI,CAAC;AAAA,MAC7C,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAAA,EACH,WAAWA,GAAE,MAAMA,GAAE,OAAO,EAAE,MAAM,cAAc,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAAA,EACjF,MAAMA,GAAE,MAAMA,GAAE,OAAO,EAAE,MAAM,YAAY,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC5E,CAAC;AAGM,IAAM,cAAcA,GAAE,OAAO;AAAA,EAClC,cAAcA,GAAE,OAAO;AAAA,EACvB,kBAAkBA,GAAE,OAAO;AAAA,EAC3B,aAAaA,GAAE,OAAO;AAAA,EACtB,0BAA0BA,GAAE,OAAO;AAAA,EACnC,sBAAsBA,GAAE,OAAO;AACjC,CAAC;AAGM,IAAM,yBAAyBA,GAAE,KAAK;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACM,IAAM,mBAAmBA,GAAE,OAAO;AAAA,EACvC,IAAIA,GAAE,OAAO;AAAA,EACb,OAAOA,GAAE,OAAO;AAAA,EAChB,QAAQ;AAAA,EACR,YAAYA,GAAE,OAAO;AAAA,EACrB,UAAUA,GAAE,MAAM,aAAa;AAAA,EAC/B,QAAQA,GAAE,OAAO;AAAA,IACf,KAAKA,GAAE,OAAO;AAAA,IACd,MAAMA,GAAE,OAAO;AAAA,IACf,SAASA,GAAE,OAAO;AAAA,EACpB,CAAC;AAAA,EACD,YAAYA,GACT,OAAO;AAAA,IACN,QAAQA,GAAE,OAAO;AAAA,MACf,KAAKA,GAAE,OAAO;AAAA,MACd,MAAMA,GAAE,OAAO;AAAA,MACf,SAASA,GAAE,OAAO;AAAA,IACpB,CAAC;AAAA,IACD,YAAYA,GAAE,OAAO;AAAA,IACrB,UAAUA,GAAE,OAAO;AAAA,IACnB,OAAOA,GAAE,OAAO;AAAA,EAClB,CAAC,EACA,SAAS;AAAA,EACZ,aAAaA,GACV,OAAO;AAAA,IACN,QAAQA,GAAE,OAAO;AAAA,MACf,KAAKA,GAAE,OAAO;AAAA,MACd,MAAMA,GAAE,OAAO;AAAA,MACf,SAASA,GAAE,OAAO;AAAA,IACpB,CAAC;AAAA,IACD,YAAYA,GAAE,OAAO;AAAA,IACrB,UAAUA,GAAE,OAAO;AAAA,IACnB,cAAcA,GAAE,OAAO;AAAA,EACzB,CAAC,EACA,SAAS;AAAA,EACZ,OAAO;AACT,CAAC;AAGM,IAAM,kBAAkBA,GAAE,OAAO;AAAA,EACtC,SAASA,GAAE,OAAO;AAAA,IAChB,OAAOA,GACJ,OAAO,EACP,SAAS,EACT,UAAU,CAAC,UAAU,SAAS,SAAS,CAAC;AAAA,IAC3C,WAAWA,GAAE,OAAO,EAAE,MAAM,cAAc,EAAE,IAAI,CAAC;AAAA,IACjD,OAAOA,GAAE,OAAO;AAAA,MACd,MAAMA,GAAE,OAAO,EAAE,SAAS;AAAA,MAC1B,2BAA2BA,GACxB,OAAO;AAAA,QACN,YAAYA,GAAE,OAAO;AAAA,QACrB,UAAUA,GAAE,OAAO;AAAA,QACnB,MAAMA,GAAE,OAAO;AAAA,MACjB,CAAC,EACA,SAAS;AAAA,IACd,CAAC;AAAA,IACD,SAASA,GACN,OAAOA,GAAE,OAAO,EAAE,MAAM,cAAc,EAAE,IAAI,CAAC,GAAG,aAAa,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC,EAChF,SAAS,EACT,QAAQ,CAAC,CAAC,EACV;AAAA,MAAU,CAAC,YACV,OAAO;AAAA,QACL,OAAO,QAAQ,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,gBAAgB,MAAM;AAAA,UACvD;AAAA,UACA,aAAa,MAAM;AAAA,YACjB,GAAG;AAAA,YACH;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACF,OAAOA,GAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,oBAAoB,CAAC;AAAA,IAC1D,aAAaA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,GAAG;AAAA,IAC5D,UAAUA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IACrC,YAAYA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;AAAA,IACnD,WAAWA,GAAE,OAAO,EAAE,SAAS;AAAA,IAC/B,WAAWA,GAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,IAAI,CAAC;AAAA,IACnD,WAAWA,GAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,IAAI,CAAC;AAAA,EACrD,CAAC;AAAA,EACD,YAAY,iBAAiB,SAAS;AACxC,CAAC;AAqHM,SAAS,YAAiC,MAAS;AACxD,SAAO,CACL,SACA,YACA,SACoB;AACpB,WAAO;AAAA,MACL;AAAA,MACA,IAAI,SAAS;AAAA,MACb,WAAW,WAAW,OAAO;AAAA,MAC7B,WAAW,KAAK,IAAI;AAAA,MACpB,OAAO,QAAQ;AAAA,MACf,YAAY,WAAW;AAAA,MACvB,GAAG;AAAA,IACL;AAAA,EACF;AACF;AAEO,IAAM,WAAW,YAAY,UAAU;AACvC,IAAM,kBAAkB,YAAY,iBAAiB;AACrD,IAAM,QAAQ,YAAY,OAAO;AACjC,IAAM,WAAW,YAAY,UAAU;AACvC,IAAM,sBAAsB,YAAY,qBAAqB;AAC7D,IAAM,eAAe,YAAY,cAAc;AAC/C,IAAM,oBAAoB,YAAY,mBAAmB;AACzD,IAAM,iBAAiB,YAAY,gBAAgB;AACnD,IAAM,iBAAiB,YAAY,gBAAgB;AACnD,IAAM,mBAAmB,YAAY,kBAAkB;AACvD,IAAM,oBAAoB,YAAY,mBAAmB;AACzD,IAAM,iBAAiB,YAAY,gBAAgB;AACnD,IAAM,cAAc,YAAY,aAAa;AAC7C,IAAM,2BAA2B,YAAY,0BAA0B;AACvE,IAAM,oBAAoB,YAAY,mBAAmB;AACzD,IAAM,4BAA4B,YAAY,2BAA2B;AACzE,IAAM,qBAAqB,YAAY,oBAAoB;;;ADhYlE,eAAsB,0BACpB,OACA,cACqB;AACrB,QAAM,SAAS,UAAU,KAAK;AAC9B,QAAM,kBAAkB,MAAM,QAAQ,QAAQ,EAAE,eAAe,KAAK,CAAC,EAAE;AAAA,IAAK,CAAC,UAC3E,MAAM,OAAO,CAAC,SAAS,KAAK,OAAO,KAAK,KAAK,KAAK,WAAW,aAAa,CAAC;AAAA,EAC7E;AACA,QAAM,iBAAiB,gBAAgB,KAAK,CAAC,SAAS,KAAK,KAAK,SAAS,IAAI,YAAY,OAAO,CAAC;AACjG,MAAI,CAAC,gBAAgB;AACnB,UAAM,IAAI,MAAM,yBAAyB,KAAK,IAAI,YAAY,EAAE;AAAA,EAClE;AACA,QAAM,iBAAiB,GAAG,MAAM,IAAI,eAAe,IAAI;AACvD,QAAM,aAAa,MAAM,SAAS,gBAAgB,MAAM;AACxD,SAAO,iBAAiB,MAAM,KAAK,MAAM,UAAU,CAAC;AACtD;AAEA,eAAsB,uBACpB,YACA,WACe;AACf,QAAM,EAAE,IAAI,OAAO,WAAW,IAAI;AAClC,QAAM,SAAS,UAAU,KAAK;AAC9B,QAAM,iBAAiB,GAAG,MAAM,eAAe,SAAS,IAAI,UAAU,IAAI,EAAE;AAC5E,QAAM,MAAM,QAAQ,EAAE,WAAW,KAAK,CAAC;AACvC,QAAM,UAAU,gBAAgB,KAAK,UAAU,YAAY,MAAM,CAAC,CAAC;AACrE;AAEA,eAAsB,kBAAkB,OAAgC;AACtE,QAAM,EAAE,WAAW,OAAO,YAAY,KAAK,IAAI;AAC/C,QAAM,SAAS,UAAU,KAAK;AAC9B,QAAM,YAAY,GAAG,MAAM,UAAU,SAAS,IAAI,UAAU,IAAI,IAAI;AACpE,QAAM,MAAM,QAAQ,EAAE,WAAW,KAAK,CAAC;AACvC,QAAM,UAAU,WAAW,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAC3D;;;AItCA;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,aAAe;AAAA,EACf,QAAU;AAAA,EACV,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,SAAW;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,eAAiB;AAAA,IACf,SAAW;AAAA,MACT,KAAK;AAAA,IACP;AAAA,IACA,OAAS;AAAA,EACX;AAAA,EACA,OAAS;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,OAAS;AAAA,IACT,KAAO;AAAA,IACP,OAAS;AAAA,IACT,gBAAkB;AAAA,EACpB;AAAA,EACA,cAAgB;AAAA,IACd,qBAAqB;AAAA,IACrB,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,IAClB,6BAA6B;AAAA,IAC7B,wBAAwB;AAAA,IACxB,IAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,QAAU;AAAA,IACV,KAAO;AAAA,EACT;AAAA,EACA,iBAAmB;AAAA,IACjB,oBAAoB;AAAA,IACpB,eAAe;AAAA,IACf,MAAQ;AAAA,IACR,YAAc;AAAA,IACd,QAAU;AAAA,EACZ;AAAA,EACA,SAAW;AAAA,IACT,MAAQ;AAAA,EACV;AACF;;;AC1CA,IAAM,MAAM,QAAQ;AACpB,IAAM,QAAQ,QAAQ;AACtB,IAAM,SAAS,CAAC,MAAgB;AAC9B,QAAM,KAAI,oBAAI,KAAK,GAAE,YAAY;AACjC,QAAM,aAAa,EAAE;AACrB,QAAM,MAAM,EAAE;AACd,SAAO,GAAG,CAAC,IAAI,UAAU,IAAI,GAAG;AAClC;AACA,eAAsB,qBAAqB,GAAa;AACtD,QAAM,kBAAkB,CAAC;AACzB,UAAQ,EAAE,MAAM;AAAA,IACd,KAAK,YAAY;AACf,UAAI,GAAG,OAAO,CAAC,CAAC,uBAAgB,gBAAY,OAAO,UAAU;AAC7D,YAAM,EAAE,cAAc,IAAI;AAC1B,iBAAW,WAAW,eAAe;AACnC,YAAI,QAAQ,SAAS,eAAe;AAClC,yBAAe,OAAO;AAAA,QACxB,WAAW,QAAQ,SAAS,eAAe;AACzC,yBAAe,OAAO;AAAA,QACxB;AAAA,MACF;AACA;AAAA,IACF;AAAA,IACA,KAAK,mBAAmB;AACtB,UAAI,GAAG,OAAO,CAAC,CAAC,iCAA0B;AAC1C;AAAA,IACF;AAAA,IACA,KAAK,SAAS;AACZ,eAAS,CAAC;AACV,UAAI,GAAG,OAAO,CAAC,CAAC,0CAAmC;AACnD;AAAA,IACF;AAAA,IACA,KAAK,YAAY;AACf,eAAS,CAAC;AACV,UAAI,GAAG,OAAO,CAAC,CAAC,yBAAkB;AAClC,UAAI,EAAE,SAAS,cAAc,kBAAkB;AAC7C,gBAAQ,EAAE,SAAS,UAAU;AAAA,UAC3B,KAAK,SAAS;AACZ,kBAAM,UAAU,EAAE,SAAS,KAAK;AAChC,gBAAI,GAAG,OAAO,CAAC,CAAC,6BAAsB;AACtC,kBAAM,OAAO;AACb;AAAA,UACF;AAAA,UACA,KAAK,eAAe;AAClB,kBAAMC,QAAO,EAAE,SAAS,KAAK;AAC7B,gBAAI,GAAG,OAAO,CAAC,CAAC,2BAAoBA,KAAI,EAAE;AAC1C;AAAA,UACF;AAAA,UACA,KAAK,iBAAiB;AACpB,kBAAMA,QAAO,EAAE,SAAS,KAAK;AAC7B,gBAAI,GAAG,OAAO,CAAC,CAAC,mCAAuBA,KAAI,EAAE;AAC7C;AAAA,UACF;AAAA,UACA,SAAS;AACP,gBAAI,GAAG,OAAO,CAAC,CAAC,oBAAa,EAAE,SAAS,SAAS,IAAI,EAAE,SAAS,QAAQ,EAAE;AAC1E,gBAAI,GAAG,OAAO,CAAC,CAAC,oBAAa,EAAE,SAAS,IAAI,EAAE;AAC9C;AAAA,UACF;AAAA,QACF;AAAA,MACF,OAAO;AACL,YAAI,GAAG,OAAO,CAAC,CAAC,oBAAa,EAAE,SAAS,SAAS,IAAI,EAAE,SAAS,QAAQ,EAAE;AAC1E,YAAI,GAAG,OAAO,CAAC,CAAC,oBAAa,EAAE,SAAS,IAAI,EAAE;AAAA,MAChD;AACA;AAAA,IACF;AAAA,IACA,KAAK,uBAAuB;AAC1B,eAAS,CAAC;AACV,UAAI,GAAG,OAAO,CAAC,CAAC,qCAA8B;AAC9C,UAAI,GAAG,OAAO,CAAC,CAAC,oBAAa,EAAE,SAAS,SAAS,IAAI,EAAE,SAAS,QAAQ,EAAE;AAC1E,UAAI,GAAG,OAAO,CAAC,CAAC,oBAAa,EAAE,SAAS,IAAI,EAAE;AAC9C;AAAA,IACF;AAAA,IACA,KAAK,gBAAgB;AACnB,eAAS,CAAC;AACV,UAAI,GAAG,OAAO,CAAC,CAAC,6BAAsB;AACtC,UAAI,GAAG,OAAO,CAAC,CAAC,oBAAa,EAAE,SAAS,QAAQ,EAAE;AAClD,UAAI,GAAG,OAAO,CAAC,CAAC,oBAAa,EAAE,SAAS,IAAI,EAAE;AAC9C;AAAA,IACF;AAAA,IACA,KAAK,qBAAqB;AACxB,UAAI,GAAG,OAAO,CAAC,CAAC,iCAA0B;AAC1C,UAAI,EAAE,WAAW,cAAc,kBAAkB;AAC/C,gBAAQ,EAAE,WAAW,UAAU;AAAA,UAC7B,KAAK,QAAQ;AACX,kBAAM,OAAO,EAAE,WAAW,OAAO,KAAK,CAAC,MAAM,EAAE,SAAS,UAAU,GAAG;AACrE,kBAAM,EAAE,MAAM,IAAI,KAAK,MAAM,QAAQ,IAAI;AAOzC,gBAAI,GAAG,OAAO,CAAC,CAAC,kBAAW;AAC3B,uBAAW,QAAQ,OAAO;AACxB,oBAAM,GAAG,KAAK,YAAY,QAAQ,KAAK,IAAI,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE;AAAA,YACrE;AACA;AAAA,UACF;AAAA,UACA,SAAS;AACP,gBAAI,GAAG,OAAO,CAAC,CAAC,oBAAa,EAAE,WAAW,SAAS,IAAI,EAAE,WAAW,QAAQ,EAAE;AAC9E,gBAAI,GAAG,OAAO,CAAC,CAAC,sBAAe,EAAE,WAAW,MAAM,EAAE;AACpD;AAAA,UACF;AAAA,QACF;AAAA,MACF,OAAO;AACL,YAAI,GAAG,OAAO,CAAC,CAAC,oBAAa,EAAE,WAAW,SAAS,IAAI,EAAE,WAAW,QAAQ,EAAE;AAC9E,YAAI,GAAG,OAAO,CAAC,CAAC,sBAAe,EAAE,WAAW,MAAM,EAAE;AAAA,MACtD;AACA;AAAA,IACF;AAAA,IACA,KAAK,kBAAkB;AACrB,UAAI,GAAG,OAAO,CAAC,CAAC,gCAAyB,EAAE,UAAU;AACrD;AAAA,IACF;AAAA,IACA,KAAK,kBAAkB;AACrB,UAAI,GAAG,OAAO,CAAC,CAAC,4BAAqB,EAAE,UAAU;AACjD;AAAA,IACF;AAAA,IACA,KAAK,oBAAoB;AACvB,UAAI,GAAG,OAAO,CAAC,CAAC,oCAAwB,EAAE,UAAU;AACpD;AAAA,IACF;AAAA,IACA,KAAK,qBAAqB;AACxB,UAAI,GAAG,OAAO,CAAC,CAAC,+BAA0B;AAC1C;AAAA,IACF;AAAA,IACA,KAAK,eAAe;AAClB,eAAS,CAAC;AACV,UAAI,GAAG,OAAO,CAAC,CAAC,2BAAoB;AACpC,UAAI,GAAG,OAAO,CAAC,CAAC,sBAAe,EAAE,IAAI;AACrC;AAAA,IACF;AAAA,IACA,KAAK,4BAA4B;AAC/B,UAAI,GAAG,OAAO,CAAC,CAAC,6CAAsC;AACtD;AAAA,IACF;AAAA,IACA,KAAK,qBAAqB;AACxB,UAAI,GAAG,OAAO,CAAC,CAAC,qCAA8B;AAC9C;AAAA,IACF;AAAA,IACA,KAAK,6BAA6B;AAChC,UAAI,GAAG,OAAO,CAAC,CAAC,+CAAwC;AACxD;AAAA,IACF;AAAA,IACA,KAAK,sBAAsB;AACzB,UAAI,GAAG,OAAO,CAAC,CAAC,oCAA6B;AAC7C;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,eAAe,SAAsB;AAC5C,QAAM,KAAI,oBAAI,KAAK,GAAE,YAAY;AACjC,QAAM,WAAW,QAAQ;AACzB,aAAW,WAAW,UAAU;AAC9B,QAAI,QAAQ,SAAS,YAAY;AAC/B,UAAI,GAAG,CAAC,oBAAa,QAAQ,IAAI,EAAE;AAAA,IACrC,WAAW,QAAQ,SAAS,gBAAgB;AAC1C,UAAI,GAAG,CAAC,0BAAc,QAAQ,GAAG,EAAE;AAAA,IACrC,WAAW,QAAQ,SAAS,mBAAmB;AAC7C,UAAI,GAAG,CAAC,qCAAyB;AAAA,IACnC,WAAW,QAAQ,SAAS,mBAAmB;AAC7C,UAAI,GAAG,CAAC,qCAAyB;AAAA,IACnC,WAAW,QAAQ,SAAS,eAAe;AACzC,UAAI,GAAG,CAAC,oBAAa,QAAQ,GAAG,EAAE;AAAA,IACpC,WAAW,QAAQ,SAAS,kBAAkB;AAC5C,UAAI,GAAG,CAAC,8BAAuB;AAAA,IACjC,WAAW,QAAQ,SAAS,kBAAkB;AAC5C,UAAI,GAAG,CAAC,8BAAuB;AAAA,IACjC;AAAA,EACF;AACF;AAEA,SAAS,eAAe,SAAsB;AAC5C,QAAM,KAAI,oBAAI,KAAK,GAAE,YAAY;AACjC,QAAM,WAAW,QAAQ;AACzB,aAAW,WAAW,UAAU;AAC9B,QAAI,QAAQ,SAAS,kBAAkB;AACrC,YAAM,EAAE,UAAAC,UAAS,IAAI;AACrB,iBAAWC,YAAWD,WAAU;AAC9B,YAAIC,SAAQ,SAAS,YAAY;AAC/B,cAAI,GAAG,CAAC,2BAAoBA,SAAQ,IAAI,EAAE;AAAA,QAC5C,WAAWA,SAAQ,SAAS,mBAAmB;AAC7C,cAAI,GAAG,CAAC,4CAAgC;AAAA,QAC1C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,SACP,GACA;AACA,QAAM,oBAAoB;AAAA,IACxB,OAAO,EAAE,MAAM,aAAa,eAAe,CAAC;AAAA,IAC5C,QAAQ,EAAE,MAAM,iBAAiB,eAAe,CAAC;AAAA,IACjD,UAAU,EAAE,MAAM,YAAY,eAAe,CAAC;AAAA,IAC9C,eAAe,EAAE,MAAM,qBAAqB,eAAe,CAAC;AAAA,IAC5D,gBAAgB,EAAE,MAAM,yBAAyB,eAAe,CAAC;AAAA,EACnE,EAAE,KAAK,IAAI;AACX,MAAI,GAAG,OAAO,CAAC,CAAC,4BAAqB,iBAAiB,EAAE;AACxD,QAAM,aAAa;AAAA,IACjB,OAAO,EAAE,MAAM,aAAa,eAAe,CAAC;AAAA,IAC5C,QAAQ,EAAE,MAAM,iBAAiB,eAAe,CAAC;AAAA,IACjD,UAAU,EAAE,MAAM,YAAY,eAAe,CAAC;AAAA,IAC9C,eAAe,EAAE,MAAM,qBAAqB,eAAe,CAAC;AAAA,IAC5D,gBAAgB,EAAE,MAAM,yBAAyB,eAAe,CAAC;AAAA,EACnE,EAAE,KAAK,IAAI;AACX,MAAI,GAAG,OAAO,CAAC,CAAC,2BAAoB,UAAU,EAAE;AAClD;;;ACtNA,SAAS,YAAAC,iBAAgB;AAGlB,IAAM,kBAAN,MAAsB;AAAA,EACnB,YAAoD,CAAC;AAAA,EAE7D,UAAU,UAA8C;AACtD,SAAK,UAAU,KAAK,QAAQ;AAAA,EAC9B;AAAA,EAEA,MAAM,KAAK,OAAiB;AAC1B,eAAW,YAAY,KAAK,WAAW;AACrC,YAAM,SAAS;AAAA,QACb,GAAG;AAAA,QACH,IAAIA,UAAS;AAAA,QACb,WAAW,KAAK,IAAI;AAAA,MACtB,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;ACnBA,SAAS,KAAAC,UAAS;AAMlB,IAAM,yBAAyBC,GAAE,OAAO;AAAA,EACtC,MAAMA,GAAE,OAAO;AAAA,EACf,SAASA,GAAE,OAAO;AAAA,EAClB,mBAAmBA,GAAE,OAAO;AAAA,EAC5B,aAAaA,GAAE,OAAO;AAAA,EACtB,aAAaA,GAAE,OAAO;AAAA,EACtB,QAAQA,GAAE;AAAA,IACRA,GAAE,OAAO;AAAA,IACTA,GAAE,mBAAmB,QAAQ;AAAA,MAC3B,oBAAoB,KAAK,EAAE,MAAM,KAAK,CAAC;AAAA,MACvC,kBAAkB,KAAK,EAAE,MAAM,KAAK,CAAC;AAAA,MACrC,uBAAuB,KAAK,EAAE,MAAM,KAAK,CAAC;AAAA,IAC5C,CAAC;AAAA,EACH;AAAA,EACA,WAAWA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,EAC7B,MAAMA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,EACxB,QAAQA,GAAE,OAAO;AAAA,EACjB,OAAOA,GAAE,OAAO,EAAE,MAAMA,GAAE,OAAO,EAAE,CAAC;AAAA,EACpC,WAAWA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,WAAWA,GAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AACM,IAAM,qCAAqCA,GAAE,OAAO;AAAA,EACzD,MAAMA,GAAE,OAAO;AAAA,IACb,QAAQ;AAAA,EACV,CAAC;AACH,CAAC;;;AC1BM,IAAM,WAAN,MAAe;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,QAGT;AACD,SAAK,UAAU,QAAQ,WAAW,QAAQ,IAAI,yBAAyB;AACvE,SAAK,SAAS,QAAQ,UAAU,QAAQ,IAAI;AAE5C,SAAK,WAAW,IAAI,iBAAiB,IAAI;AAAA,EAC3C;AACF;AAEA,IAAM,mBAAN,MAAuB;AAAA,EACrB;AAAA,EACA;AAAA,EAEA,YAAY,QAAkB;AAC5B,SAAK,SAAS;AACd,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,MAAM,IAAI,WAA0D;AAClE,UAAM,gBAAgB,mBAAmB,SAAS;AAClD,UAAM,MAAM,IAAI,IAAI,GAAG,KAAK,QAAQ,IAAI,aAAa,IAAI,KAAK,OAAO,OAAO;AAC5E,UAAM,UAAU;AAAA,MACd,gBAAgB;AAAA,MAChB,eAAe,UAAU,KAAK,OAAO,MAAM;AAAA,IAC7C;AACA,UAAM,SAAS,MAAM,MAAM,IAAI,SAAS,GAAG,EAAE,QAAQ,CAAC;AACtD,QAAI,CAAC,OAAO,IAAI;AACd,YAAM,IAAI;AAAA,QACR,0CAA0C,OAAO,MAAM,aAAa,OAAO,UAAU;AAAA,MACvF;AAAA,IACF;AACA,UAAM,OAAO,MAAM,OAAO,KAAK;AAC/B,WAAO,mCAAmC,MAAM,IAAI;AAAA,EACtD;AACF;;;AC3CA,eAAsB,mBACpB,WACA,SACiB;AACjB,MAAI,QAAQ,SAAS,GAAG;AACtB,WAAO,QAAQ,SAAS;AAAA,EAC1B;AACA,QAAM,SAAS,IAAI,SAAS;AAC5B,QAAM,EAAE,KAAK,IAAI,MAAM,OAAO,SAAS,IAAI,SAAS;AACpD,QAAM,SAAS,aAAa,MAAM;AAAA,IAChC,GAAG,KAAK;AAAA,IACR,KAAK;AAAA,EACP,CAAC;AACD,UAAQ,SAAS,IAAI;AACrB,SAAO;AACT;;;AClBA,SAA+C,QAAQ,aAAa;;;ACApE,SAAS,UAAU,iBAAiB;AACpC,SAAS,0BAA0B;AACnC,SAAS,4BAA4B;AACrC,SAA8B,gBAAgB;AAC9C,SAAS,YAAAC,iBAAgB;AACzB,SAAuB,kBAAkB;AACzC,SAAS,gBAAgB;AAclB,IAAM,eAAN,MAAmB;AAAA,EACd,mBAAqC,CAAC;AAAA,EACtC,eAAe;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACD;AAAA,EACA;AAAA,EAER,YAAY,QAA4B;AACtC,SAAK,UAAU;AACf,SAAK,OAAO,OAAO;AACnB,YAAQ,OAAO,MAAM;AAAA,MACnB,KAAK;AACH,aAAK,OAAO,OAAO,MAAM;AACzB,aAAK,QAAQ,OAAO;AACpB;AAAA,MACF,KAAK;AACH,aAAK,OAAO,OAAO,iBAAiB;AACpC,aAAK,mBAAmB,OAAO;AAC/B;AAAA,MACF,KAAK;AACH,aAAK,OAAO,OAAO,OAAO;AAC1B,aAAK,SAAS,OAAO;AACrB;AAAA,IACJ;AAAA,EACF;AAAA,EAEA,MAAM,OAAsB;AAC1B,YAAQ,KAAK,QAAQ,MAAM;AAAA,MACzB,KAAK,OAAO;AACV,cAAM,KAAK,cAAc,KAAK,OAAO;AACrC;AAAA,MACF;AAAA,MACA,KAAK,eAAe;AAClB,cAAM,KAAK,sBAAsB,KAAK,OAAO;AAC7C;AAAA,MACF;AAAA,MACA,KAAK,YAAY;AACf,cAAM,KAAK,cAAc,KAAK,OAAO;AACrC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,cAAc,QAA8C;AACxE,SAAK,aAAa,IAAI,UAAU;AAAA,MAC9B,MAAM,GAAG,OAAO,MAAM,IAAI;AAAA,MAC1B,SAAS;AAAA,IACX,CAAC;AACD,YAAQ,OAAO,MAAM,MAAM;AAAA,MACzB,KAAK,iBAAiB;AACpB,YAAI,CAAC,OAAO,MAAM,SAAS;AACzB,gBAAM,IAAI,MAAM,SAAS,OAAO,MAAM,IAAI,iBAAiB;AAAA,QAC7D;AACA,cAAM,EAAE,SAAS,KAAK,IAAI,KAAK,gBAAgB,OAAO,KAAK;AAC3D,cAAM,YAAY,IAAI,qBAAqB;AAAA,UACzC;AAAA,UACA;AAAA,UACA,KAAK,OAAO;AAAA,YACV,OAAO,QAAQ,QAAQ,GAAG,EACvB,OAAO,CAAC,CAAC,GAAG,KAAK,MAAM,UAAU,UAAa,UAAU,EAAE,EAC1D,IAAsB,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,KAAe,CAAC;AAAA,UACnE;AAAA,QACF,CAAC;AACD,cAAM,KAAK,WAAW,QAAQ,SAAS;AACvC;AAAA,MACF;AAAA,MACA,KAAK,eAAe;AAClB,YAAI,CAAC,OAAO,MAAM,UAAU;AAC1B,gBAAM,IAAI,MAAM,SAAS,OAAO,MAAM,IAAI,kBAAkB;AAAA,QAC9D;AACA,cAAM,YAAY,IAAI,mBAAmB,IAAI,IAAI,OAAO,MAAM,QAAQ,CAAC;AACvE,cAAM,KAAK,WAAW,QAAQ,SAAS;AACvC;AAAA,MACF;AAAA,IACF;AACA,UAAM,EAAE,MAAM,IAAI,MAAM,KAAK,WAAW,UAAU;AAClD,SAAK,mBAAmB,MAAM,IAAI,CAAC,UAAU;AAAA,MAC3C,WAAW,OAAO,MAAM;AAAA,MACxB,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,aAAa,KAAK;AAAA,MAClB,aAAa;AAAA,IACf,EAAE;AACF,SAAK,eAAe;AAAA,EACtB;AAAA,EAEQ,gBAAgB,OAA2D;AACjF,UAAM,EAAE,MAAM,SAAS,aAAa,KAAK,IAAI;AAC7C,QAAI,CAAC,gBAAgB,CAAC,QAAQ,KAAK,WAAW,IAAI;AAChD,YAAM,IAAI,MAAM,SAAS,IAAI,0DAA0D;AAAA,IACzF;AACA,QAAI,eAAe,QAAQ,KAAK,SAAS,GAAG;AAC1C,YAAM,IAAI;AAAA,QACR,SAAS,IAAI;AAAA,MACf;AAAA,IACF;AACA,QAAI,UAAU,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,WAAY;AAC5D,QAAI,YAAY,SAAS,CAAC,QAAQ,SAAS,IAAI,GAAG;AAChD,gBAAU,CAAC,MAAM,GAAG,OAAO;AAAA,IAC7B;AACA,WAAO,EAAE,SAAS,MAAM,QAAQ;AAAA,EAClC;AAAA,EAEA,MAAc,sBAAsB,QAAsD;AACxF,SAAK,mBAAmB,OAAO,OAAO,OAAO,iBAAiB,KAAK,EAAE,IAAI,CAAC,UAAU;AAAA,MAClF,WAAW,OAAO,iBAAiB;AAAA,MACnC,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,aAAa,KAAK,MAAM,KAAK,eAAe;AAAA,MAC5C,aAAa;AAAA,IACf,EAAE;AACF,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,MAAc,cAAc,QAAmD;AAC7E,SAAK,mBAAmB;AAAA,MACtB;AAAA,QACE,WAAW,OAAO,OAAO;AAAA,QACzB,MAAM,OAAO,OAAO,KAAK,MAAM,GAAG,EAAE,IAAI,KAAK,OAAO,OAAO;AAAA,QAC3D,aAAa,OAAO,OAAO;AAAA,QAC3B,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,EAAE,OAAO,EAAE,MAAM,SAAS,EAAE;AAAA,UACxC,UAAU,CAAC,OAAO;AAAA,QACpB;AAAA,QACA,aAAa;AAAA,MACf;AAAA,IACF;AACA,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,MAAM,QAAuB;AAC3B,QAAI,KAAK,YAAY;AACnB,YAAM,KAAK,WAAW,MAAM;AAAA,IAC9B;AAAA,EACF;AAAA,EAEA,MAAM,qBAAgD;AACpD,QAAI,CAAC,KAAK,cAAc;AACtB,YAAM,IAAI,MAAM,GAAG,KAAK,IAAI,qBAAqB;AAAA,IACnD;AACA,QAAI,KAAK,QAAQ,SAAS,OAAO;AAC/B,YAAM,OAAO,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACzC,YAAM,OAAO,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACzC,aAAO,KAAK,iBACT,OAAO,CAAC,SAAU,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,KAAK,IAAI,IAAI,IAAK,EACrE,OAAO,CAAC,SAAU,KAAK,SAAS,IAAI,KAAK,SAAS,KAAK,IAAI,IAAI,IAAK;AAAA,IACzE;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,SACJ,UACA,OAC6D;AAC7D,YAAQ,KAAK,QAAQ,MAAM;AAAA,MACzB,KAAK,OAAO;AACV,YAAI,CAAC,KAAK,YAAY;AACpB,gBAAM,IAAI,MAAM,GAAG,KAAK,IAAI,qBAAqB;AAAA,QACnD;AACA,YAAI;AACF,gBAAM,SAAU,MAAM,KAAK,WAAW,SAAS;AAAA,YAC7C,MAAM;AAAA,YACN,WAAW;AAAA,UACb,CAAC;AACD,iBAAO,KAAK,mBAAmB,QAAQ,UAAU,KAAK;AAAA,QACxD,SAAS,OAAO;AACd,iBAAO,KAAK,iBAAiB,OAAO,QAAQ;AAAA,QAC9C;AAAA,MACF;AAAA,MACA,KAAK,eAAe;AAClB,eAAO,CAAC;AAAA,MACV;AAAA,MACA,KAAK,YAAY;AACf,eAAO,CAAC;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,iBAAiB,OAAgB,UAAmC;AAC1E,QAAI,iBAAiB,UAAU;AAC7B,aAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAM,sBAAsB,QAAQ,KAAK,MAAM,OAAO;AAAA,UACtD,IAAIA,UAAS;AAAA,QACf;AAAA,MACF;AAAA,IACF;AACA,QAAI,iBAAiB,UAAU;AAC7B,aAAO,CAAC,EAAE,MAAM,YAAY,MAAM,gCAAgC,KAAK,IAAI,IAAIA,UAAS,EAAE,CAAC;AAAA,IAC7F;AACA,UAAM;AAAA,EACR;AAAA,EAEQ,mBACN,QACA,UACA,OACoD;AACpD,QAAI,CAAC,OAAO,WAAW,OAAO,QAAQ,WAAW,GAAG;AAClD,aAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAM,QAAQ,QAAQ,qCAAqC,KAAK,UAAU,KAAK,CAAC;AAAA,UAChF,IAAIA,UAAS;AAAA,QACf;AAAA,MACF;AAAA,IACF;AACA,WAAO,OAAO,QACX,OAAO,CAAC,SAAS,KAAK,SAAS,WAAW,KAAK,SAAS,eAAe,EACvE,IAAI,CAAC,SAAS,KAAK,aAAa,IAA6B,CAAC;AAAA,EACnE;AAAA,EAEQ,aAAa,MAA0E;AAC7F,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK;AACH,YAAI,CAAC,KAAK,QAAQ,KAAK,SAAS,IAAI;AAClC,iBAAO,EAAE,MAAM,YAAY,MAAM,qBAAqB,IAAIA,UAAS,EAAE;AAAA,QACvE;AACA,eAAO,EAAE,MAAM,YAAY,MAAM,KAAK,MAAM,IAAIA,UAAS,EAAE;AAAA,MAC7D,KAAK;AACH,YAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,UAAU;AAChC,gBAAM,IAAI,MAAM,6CAA6C;AAAA,QAC/D;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,aAAa,KAAK;AAAA,UAClB,UAAU,KAAK;AAAA,UACf,IAAIA,UAAS;AAAA,QACf;AAAA,MACF,KAAK;AACH,YAAI,CAAC,KAAK,UAAU;AAClB,gBAAM,IAAI,MAAM,0CAA0C;AAAA,QAC5D;AACA,eAAO,KAAK,iBAAiB,KAAK,QAAQ;AAAA,IAC9C;AAAA,EACF;AAAA,EAEQ,iBAAiB,UAA+C;AACtE,QAAI,CAAC,SAAS,UAAU;AACtB,YAAM,IAAI,MAAM,YAAY,KAAK,UAAU,QAAQ,CAAC,kBAAkB;AAAA,IACxE;AACA,QAAI,SAAS,QAAQ,OAAO,SAAS,SAAS,UAAU;AACtD,aAAO,EAAE,MAAM,YAAY,MAAM,SAAS,MAAM,IAAIA,UAAS,EAAE;AAAA,IACjE;AACA,QAAI,SAAS,QAAQ,OAAO,SAAS,SAAS,UAAU;AACtD,aAAO;AAAA,QACL,MAAM;AAAA,QACN,aAAa,SAAS;AAAA,QACtB,UAAU,SAAS;AAAA,QACnB,IAAIA,UAAS;AAAA,MACf;AAAA,IACF;AACA,UAAM,IAAI,MAAM,8BAA8B,KAAK,UAAU,QAAQ,CAAC,EAAE;AAAA,EAC1E;AACF;AAEA,eAAsB,iBACpB,QACA,SACuC;AACvC,QAAM,gBAA8C,CAAC;AACrD,QAAM,EAAE,OAAO,IAAI;AACnB,MAAI,CAAC,OAAO,gBAAgB,GAAG;AAC7B,WAAO,gBAAgB,IAAI;AAAA,MACzB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,MACb,MAAM,CAAC;AAAA,MACP,MAAM,CAAC;AAAA,MACP,SAAS;AAAA,MACT,MAAM,CAAC,MAAM,gBAAgB;AAAA,MAC7B,aAAa,CAAC;AAAA,IAChB;AAAA,EACF;AACA,QAAM,mBAAmB,MAAM,QAAQ;AAAA,IACrC,OAAO,OAAO,MAAM,EACjB,OAAO,CAAC,UAAU,MAAM,SAAS,mBAAmB,MAAM,SAAS,aAAa,EAChF,IAAI,OAAO,UAAU;AACpB,YAAM,eAAe,IAAI,aAAa;AAAA,QACpC,MAAM;AAAA,QACN;AAAA,MACF,CAAC;AACD,YAAM,aAAa,KAAK;AACxB,aAAO;AAAA,IACT,CAAC;AAAA,EACL;AACA,QAAM,2BAA2B,MAAM,QAAQ;AAAA,IAC7C,OAAO,OAAO,MAAM,EACjB,OAAO,CAAC,UAAU,MAAM,SAAS,kBAAkB,EACnD,IAAI,OAAO,qBAAqB;AAC/B,YAAM,eAAe,IAAI,aAAa;AAAA,QACpC,MAAM;AAAA,QACN;AAAA,MACF,CAAC;AACD,YAAM,aAAa,KAAK;AACxB,aAAO;AAAA,IACT,CAAC;AAAA,EACL;AACA,QAAM,wBAAwB,MAAM,QAAQ;AAAA,IAC1C,OAAO,UAAU,IAAI,OAAO,uBAAuB;AACjD,YAAM,WAAW,QAAQ,kBAAkB;AAC3C,YAAM,eAAe,IAAI,aAAa;AAAA,QACpC,MAAM;AAAA,QACN,QAAQ;AAAA,MACV,CAAC;AACD,YAAM,aAAa,KAAK;AACxB,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AACA,aAAW,gBAAgB,kBAAkB;AAC3C,kBAAc,aAAa,IAAI,IAAI;AAAA,EACrC;AACA,aAAW,gBAAgB,0BAA0B;AACnD,kBAAc,aAAa,IAAI,IAAI;AAAA,EACrC;AACA,aAAW,gBAAgB,uBAAuB;AAChD,kBAAc,aAAa,IAAI,IAAI;AAAA,EACrC;AACA,SAAO;AACT;AAEA,eAAsB,mBACpB,eACe;AACf,aAAW,gBAAgB,OAAO,OAAO,aAAa,GAAG;AACvD,UAAM,aAAa,MAAM;AAAA,EAC3B;AACF;AAEA,eAAsB,0BACpB,eACA,UACuB;AACvB,aAAW,gBAAgB,OAAO,OAAO,aAAa,GAAG;AACvD,UAAM,kBAAkB,MAAM,aAAa,mBAAmB;AAC9D,eAAW,kBAAkB,iBAAiB;AAC5C,UAAI,eAAe,SAAS,UAAU;AACpC,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,QAAM,IAAI,MAAM,QAAQ,QAAQ,YAAY;AAC9C;AAEA,eAAsB,WAAW,eAA+D;AAC9F,QAAM,QAAiB,CAAC;AACxB,aAAW,gBAAgB,OAAO,OAAO,aAAa,GAAG;AACvD,UAAM,kBAAkB,MAAM,aAAa,mBAAmB;AAC9D,eAAW,kBAAkB,iBAAiB;AAC5C,YAAM,eAAe,IAAI,IAAI;AAAA,QAC3B,aAAa,eAAe;AAAA,QAC5B,YAAY,WAAW,eAAe,WAAW;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;;;AC1XA,eAAsB,qBAAqB;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA8C;AAC5C,MAAI,CAAC,MAAM,UAAU;AACnB,UAAM,IAAI,MAAM,oBAAoB;AAAA,EACtC;AACA,QAAM,EAAE,IAAI,UAAU,KAAK,IAAI,KAAK;AACpC,QAAM,eAAe,MAAM,0BAA0B,eAAe,QAAQ;AAC5E,MAAI,CAAC,gBAAgB,CAAC,aAAa,QAAQ;AACzC,UAAM,IAAI,MAAM,oCAAoC,QAAQ,aAAa;AAAA,EAC3E;AACA,MAAI,CAAC,QAAQ,CAAC,KAAK,SAAS,OAAO,KAAK,UAAU,UAAU;AAC1D,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AACA,SAAO,kBAAkB,SAAS,YAAY;AAAA,IAC5C,YAAY;AAAA,MACV,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,YAAY;AAAA,QACV,QAAQ;AAAA,UACN,KAAK,aAAa,OAAO;AAAA,UACzB,MAAM,aAAa,OAAO;AAAA,UAC1B,SAAS,aAAa,OAAO;AAAA,QAC/B;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,QACA,OAAO,KAAK;AAAA,MACd;AAAA,IACF;AAAA,IACA,MAAM;AAAA,MACJ,GAAG;AAAA,MACH,aAAY,oBAAI,KAAK,GAAE,QAAQ;AAAA,IACjC;AAAA,EACF,CAAC;AACH;;;ACtCA,eAAsB,4BAA4B;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AACF,GAA8C;AAC5C,SAAO,yBAAyB,SAAS,YAAY;AAAA,IACnD,YAAY;AAAA,MACV,GAAG;AAAA,MACH,QAAQ;AAAA,IACV;AAAA,IACA,MAAM;AAAA,MACJ,GAAG;AAAA,MACH,aAAY,oBAAI,KAAK,GAAE,QAAQ;AAAA,IACjC;AAAA,EACF,CAAC;AACH;;;ACPA,eAAsB,iBAAiB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA8C;AAC5C,MAAI,CAAC,MAAM,UAAU;AACnB,UAAM,IAAI,MAAM,oBAAoB;AAAA,EACtC;AACA,QAAM,EAAE,IAAI,WAAW,UAAU,KAAK,IAAI,KAAK;AAC/C,QAAM,eAAe,MAAM,0BAA0B,eAAe,QAAQ;AAC5E,MAAI,aAAa,SAAS,OAAO;AAC/B,UAAM,IAAI,MAAM,0CAA0C,aAAa,IAAI,EAAE;AAAA,EAC/E;AACA,QAAM,SAAS,MAAM,aAAa,SAAS,UAAU,IAAI;AACzD,QAAM,aAAyB,EAAE,IAAI,WAAW,UAAU,OAAO;AACjE,MAAI,cAAc,kBAAkB;AAClC,QAAI,aAAa,SAAS;AACxB,aAAO,eAAe,SAAS,YAAY,EAAE,WAAW,CAAC;AAAA,IAC3D;AACA,QAAI,aAAa,qBAAqB;AACpC,aAAO,kBAAkB,SAAS,YAAY,EAAE,WAAW,CAAC;AAAA,IAC9D;AACA,QAAI,aAAa,eAAe;AAC9B,aAAO,eAAe,SAAS,YAAY,EAAE,WAAW,CAAC;AAAA,IAC3D;AACA,QAAI,aAAa,iBAAiB;AAChC,aAAO,iBAAiB,SAAS,YAAY,EAAE,WAAW,CAAC;AAAA,IAC7D;AAAA,EACF;AACA,SAAO,kBAAkB,SAAS,YAAY,EAAE,WAAW,CAAC;AAC9D;;;AC1CA,SAAS,YAAAC,iBAAgB;AAIzB,eAAsB,mBAAmB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AACF,GAA8C;AAC5C,MAAI,QAAQ,aAAa,UAAa,WAAW,aAAa,QAAQ,UAAU;AAC9E,WAAO,0BAA0B,SAAS,YAAY;AAAA,MACpD,YAAY;AAAA,QACV,GAAG;AAAA,QACH,QAAQ;AAAA,MACV;AAAA,MACA,MAAM;AAAA,QACJ,GAAG;AAAA,QACH,aAAY,oBAAI,KAAK,GAAE,QAAQ;AAAA,MACjC;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO,mBAAmB,SAAS,YAAY;AAAA,IAC7C,YAAY;AAAA,MACV,GAAG;AAAA,IACL;AAAA,IACA,MAAM;AAAA,MACJ,GAAG;AAAA,MACH,aAAY,oBAAI,KAAK,GAAE,QAAQ;AAAA,IACjC;AAAA,IACA,gBAAgB;AAAA,MACd,GAAG;AAAA,MACH,IAAIC,UAAS;AAAA,MACb,YAAY,WAAW,aAAa;AAAA,IACtC;AAAA,EACF,CAAC;AACH;;;ACnCA,SAAS,oBAAoB;;;ACA7B,SAAS,YAAAC,iBAAgB;AAazB,SAAS,cAAc;AAkBhB,SAAS,kBACd,UASa;AACb,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU,SAAS,IAAI,CAAC,UAAU;AAAA,MAChC,GAAG;AAAA,MACH,IAAIA,UAAS;AAAA,IACf,EAAE;AAAA,IACF,IAAIA,UAAS;AAAA,EACf;AACF;AACO,SAAS,oBACd,UACe;AACf,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU,SAAS,IAAI,CAAC,UAAU;AAAA,MAChC,GAAG;AAAA,MACH,IAAIA,UAAS;AAAA,IACf,EAAE;AAAA,IACF,IAAIA,UAAS;AAAA,EACf;AACF;AACO,SAAS,kBACd,UAKa;AACb,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU,SAAS,IAAI,CAAC,UAAU;AAAA,MAChC,GAAG;AAAA,MACH,UAAU,KAAK,SAAS,IAAI,CAACC,WAAU;AAAA,QACrC,GAAGA;AAAA,QACH,IAAID,UAAS;AAAA,MACf,EAAE;AAAA,MACF,IAAIA,UAAS;AAAA,IACf,EAAE;AAAA,IACF,IAAIA,UAAS;AAAA,EACf;AACF;AAEO,SAAS,qBAAqB,SAA+B;AAClE,UAAQ,QAAQ,MAAM;AAAA,IACpB,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS,iCAAiC,QAAQ,QAAQ;AAAA,QAC1D,iBAAiB,QAAQ,QACrB;AAAA,UACE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,EAAE;AAAA,QACnD,IACA;AAAA,MACN;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS,0BAA0B,QAAQ,QAAQ;AAAA,QACnD,iBAAiB,QAAQ,QACrB;AAAA,UACE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,EAAE;AAAA,QACnD,IACA;AAAA,MACN;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS,4BAA4B,QAAQ,QAAQ;AAAA,QACrD,iBAAiB,QAAQ,QACrB;AAAA,UACE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,EAAE;AAAA,QACnD,IACA;AAAA,MACN;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS,0BAA0B,QAAQ,QAAQ;AAAA,QACnD,iBAAiB,QAAQ,QACrB;AAAA,UACE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,EAAE;AAAA,QACnD,IACA;AAAA,MACN;AAAA,EACJ;AACF;AACA,SAAS,iCACP,UAC8B;AAC9B,SAAO,SAAS,OAAO,CAAC,KAAK,SAAS;AACpC,WAAO;AAAA,QACH,GAAG;AAAA,QACH,KAAK,IAAI;AAAA,MACX,KAAK;AAAA,EACT,GAAG,EAAY;AACjB;AACA,SAAS,0BAA0B,UAA+D;AAChG,SAAO,SAAS,IAAI,CAAC,SAAS;AAC5B,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK;AACH,eAAO,uBAAuB,IAAI;AAAA,MACpC,KAAK;AACH,eAAO,4BAA4B,IAAI;AAAA,MACzC,KAAK;AACH,eAAO,+BAA+B,IAAI;AAAA,MAC5C,KAAK;AACH,eAAO,+BAA+B,IAAI;AAAA,MAC5C,KAAK;AACH,eAAO,0BAA0B,IAAI;AAAA,MACvC,KAAK;AACH,eAAO,6BAA6B,IAAI;AAAA,MAC1C,KAAK;AACH,eAAO,6BAA6B,IAAI;AAAA,IAC5C;AAAA,EACF,CAAC;AACH;AACA,SAAS,4BACP,UACiC;AACjC,SAAO,SAAS,IAAI,CAAC,SAAS;AAC5B,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK;AACH,eAAO,uBAAuB,IAAI;AAAA,MACpC,KAAK;AACH,eAAO,+BAA+B,IAAI;AAAA,IAC9C;AAAA,EACF,CAAC;AACH;AACA,SAAS,0BAA0B,UAA+D;AAChG,SAAO,SAAS,IAAI,CAAC,SAAS;AAC5B,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK;AACH,eAAO,mCAAmC,IAAI;AAAA,IAClD;AAAA,EACF,CAAC;AACH;AACA,SAAS,uBAAuB,MAA8B;AAC5D,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,KAAK;AAAA,EACb;AACF;AACA,SAAS,4BAA4B,MAAmC;AACtE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,KAAK;AAAA,IACZ,UAAU,KAAK;AAAA,EACjB;AACF;AACA,SAAS,+BAA+B,MAAsC;AAC5E,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,KAAK;AAAA,IACZ,UAAU,KAAK;AAAA,EACjB;AACF;AACA,SAAS,+BAA+B,MAAsC;AAC5E,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,KAAK;AAAA,IACZ,UAAU,KAAK;AAAA,EACjB;AACF;AACA,SAAS,0BAA0B,MAAiC;AAClE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,KAAK;AAAA,IACX,UAAU,KAAK;AAAA,EACjB;AACF;AACA,SAAS,6BAA6B,MAAoC;AACxE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,KAAK;AAAA,IACX,UAAU,KAAK;AAAA,EACjB;AACF;AACA,SAAS,6BAA6B,MAAoC;AACxE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,KAAK;AAAA,IACX,UAAU,KAAK;AAAA,EACjB;AACF;AACA,SAAS,+BAA+B,MAAsC;AAC5E,SAAO;AAAA,IACL,MAAM;AAAA,IACN,YAAY,KAAK;AAAA,IACjB,UAAU,KAAK;AAAA,IACf,MAAM,KAAK;AAAA,EACb;AACF;AACA,SAAS,mCAAmC,MAA0C;AACpF,SAAO;AAAA,IACL,MAAM;AAAA,IACN,YAAY,KAAK;AAAA,IACjB,UAAU,KAAK;AAAA,IACf,QAAQ,KAAK;AAAA,IACb,sBAAsB,KAAK,SAAS,IAAI,CAACC,UAAS;AAChD,cAAQA,MAAK,MAAM;AAAA,QACjB,KAAK;AACH,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAMA,MAAK;AAAA,UACb;AAAA,QACF,KAAK;AACH,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAMA,MAAK;AAAA,YACX,UAAUA,MAAK;AAAA,UACjB;AAAA,MACJ;AAAA,IACF,CAAC;AAAA,IACD,SAAS,KAAK;AAAA,EAChB;AACF;;;AC9PO,SAAS,mBAA0B;AACxC,SAAO;AAAA,IACL,cAAc;AAAA,IACd,kBAAkB;AAAA,IAClB,aAAa;AAAA,IACb,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,EACxB;AACF;AAEO,SAAS,4BAA4B,QAAmD;AAC7F,MAAI,2BAA2B;AAC/B,MAAI,uBAAuB;AAC3B,MAAI,OAAO,kBAAkB,WAAW;AACtC,UAAM,oBAAoB,OAAO,iBAAiB;AAIlD,+BAA2B,kBAAkB,4BAA4B;AACzE,2BAAuB,kBAAkB,wBAAwB;AAAA,EACnE;AACA,SAAO;AAAA,IACL,cAAc,OAAO,MAAM;AAAA,IAC3B,kBAAkB,OAAO,MAAM;AAAA,IAC/B,aAAa,OAAO,MAAM;AAAA,IAC1B;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,SAAS,GAAU,GAAiB;AAClD,SAAO;AAAA,IACL,cAAc,EAAE,eAAe,EAAE;AAAA,IACjC,kBAAkB,EAAE,mBAAmB,EAAE;AAAA,IACzC,aAAa,EAAE,cAAc,EAAE;AAAA,IAC/B,0BAA0B,EAAE,2BAA2B,EAAE;AAAA,IACzD,sBAAsB,EAAE,uBAAuB,EAAE;AAAA,EACnD;AACF;;;AF9BA,eAAsB,yBAAyB;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AACF,GAA8C;AAC5C,MAAI,CAAC,MAAM,YAAY,CAAC,MAAM,YAAY;AACxC,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AACA,QAAM,EAAE,IAAI,SAAS,IAAI,KAAK;AAC9B,QAAM,EAAE,OAAO,IAAI,KAAK;AACxB,QAAM,cAAc,kBAAkB;AAAA,IACpC;AAAA,MACE,MAAM;AAAA,MACN,YAAY;AAAA,MACZ;AAAA,MACA,UAAU,OAAO;AAAA,QACf,CAAC,SAAS,KAAK,SAAS,cAAc,KAAK,SAAS;AAAA,MACtD;AAAA,IACF;AAAA,EACF,CAAC;AACD,QAAM,QAAQ,SAAS,QAAQ,KAAK;AACpC,QAAM,EAAE,SAAS,IAAI;AACrB,QAAM,mBAAmB,MAAM,aAAa;AAAA,IAC1C;AAAA,IACA,UAAU,CAAC,GAAG,UAAU,WAAW,EAAE,IAAI,oBAAoB;AAAA,IAC7D,aAAa,QAAQ;AAAA,IACrB,YAAY,QAAQ;AAAA,EACtB,CAAC;AACD,QAAM,QAAQ,4BAA4B,gBAAgB;AAC1D,QAAM,EAAE,KAAK,IAAI;AACjB,QAAM,cAAc,CAAC,aAAa,oBAAoB,OAAO,CAAC,EAAE,MAAM,YAAY,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/F,SAAO,YAAY,SAAS,YAAY;AAAA,IACtC,YAAY;AAAA,MACV,GAAG;AAAA,MACH,UAAU,CAAC,GAAG,UAAU,GAAG,WAAW;AAAA,MACtC,OAAO,SAAS,WAAW,OAAO,KAAK;AAAA,MACvC,QAAQ;AAAA,IACV;AAAA,IACA,MAAM;AAAA,MACJ,GAAG;AAAA,MACH,aAAa,CAAC,GAAG,KAAM,aAAa,GAAG,WAAW;AAAA,MAClD,aAAY,oBAAI,KAAK,GAAE,QAAQ;AAAA,MAC/B,OAAO,SAAS,KAAM,OAAO,KAAK;AAAA,IACpC;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;;;AG1DA,SAAS,gBAAAC,qBAAoB;AAoB7B,eAAsB,wBAAwB;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AACF,GAA8C;AAC5C,QAAM,EAAE,SAAS,IAAI;AACrB,QAAM,QAAQ,SAAS,QAAQ,KAAK;AACpC,QAAM,SAAS,MAAMC,cAAa;AAAA,IAChC;AAAA,IACA,UAAU,SAAS,IAAI,oBAAoB;AAAA,IAC3C,aAAa,QAAQ;AAAA,IACrB,YAAY,QAAQ;AAAA,IACpB,OAAO,MAAM,WAAW,aAAa;AAAA,IACrC,YAAY;AAAA,EACd,CAAC;AACD,QAAM,QAAQ,4BAA4B,MAAM;AAChD,QAAM,EAAE,MAAM,WAAW,aAAa,IAAI;AAC1C,QAAM,WAAW,UAAU,CAAC;AAC5B,MAAI,CAAC,UAAU;AACb,WAAO,MAAM,SAAS,YAAY;AAAA,MAChC,aAAa;AAAA,QACX,oBAAoB,OAAO,CAAC,EAAE,MAAM,YAAY,KAAK,CAAC,IAAI,CAAC,CAAC;AAAA,QAC5D,kBAAkB;AAAA,UAChB;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACA,MAAI,iBAAiB,cAAc;AACjC,YAAQ,cAAc;AAAA,MACpB,KAAK,UAAU;AACb,eAAO,MAAM,SAAS,YAAY;AAAA,UAChC,aAAa;AAAA,YACX,oBAAoB;AAAA,cAClB;AAAA,gBACE,MAAM;AAAA,gBACN,YAAY,SAAS;AAAA,gBACrB,UAAU,SAAS;AAAA,gBACnB,MAAM,SAAS;AAAA,cACjB;AAAA,YACF,CAAC;AAAA,YACD,kBAAkB;AAAA,cAChB;AAAA,gBACE,MAAM;AAAA,gBACN,YAAY,SAAS;AAAA,gBACrB,UAAU,SAAS;AAAA,gBACnB,UAAU,CAAC,EAAE,MAAM,YAAY,MAAM,oCAAoC,CAAC;AAAA,cAC5E;AAAA,YACF,CAAC;AAAA,UACH;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA;AACE,cAAM,IAAI,MAAM,6BAA6B,YAAY,EAAE;AAAA,IAC/D;AAAA,EACF;AACA,QAAM,WAAmE;AAAA,IACvE;AAAA,MACE,MAAM;AAAA,MACN,YAAY,SAAS;AAAA,MACrB,UAAU,SAAS;AAAA,MACnB,MAAM,SAAS;AAAA,IACjB;AAAA,EACF;AACA,MAAI,MAAM;AACR,aAAS,KAAK;AAAA,MACZ,MAAM;AAAA,MACN;AAAA,IACF,CAAC;AAAA,EACH;AACA,QAAM,eAAe,MAAM,0BAA0B,eAAe,SAAS,QAAQ;AACrF,QAAM,eAAe;AAAA,IACnB,YAAY,oBAAoB,QAAQ;AAAA,IACxC,UAAU;AAAA,MACR,IAAI,SAAS;AAAA,MACb,WAAW,aAAa;AAAA,MACxB,UAAU,SAAS;AAAA,MACnB,MAAM,SAAS;AAAA,IACjB;AAAA,IACA;AAAA,EACF;AACA,UAAQ,aAAa,MAAM;AAAA,IACzB,KAAK;AACH,aAAO,SAAS,SAAS,YAAY,YAAY;AAAA,IACnD,KAAK;AACH,aAAO,oBAAoB,SAAS,YAAY,YAAY;AAAA,IAC9D,KAAK;AACH,aAAO,aAAa,SAAS,YAAY,YAAY;AAAA,EACzD;AACF;;;AClHA,SAAS,YAAAC,iBAAgB;AACzB,SAAS,UAAAC,eAAc;AAIvB,IAAM,kBAAkBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAwCF,oBAAI,KAAK,GAAE,YAAY,CAAC;AAAA,mCACX,QAAQ,IAAI,CAAC;AAAA;AAGzC,SAAS,yBACd,QACA,SACoB;AACpB,QAAM,cAAcA;AAAA;AAAA;AAAA;AAAA;AAAA,MAKhB,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA,MAKf,OAAO,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,MAKlB,cAAc,MAAM,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOrB,iBAAiB,QAAQ,OAAO,CAAC;AAAA;AAErC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,MACR;AAAA,QACE,IAAID,UAAS;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,IAAIA,UAAS;AAAA,IACb,OAAO;AAAA,EACT;AACF;AAEA,SAAS,cAAc,QAAwB;AAC7C,SAAO,OAAO,OAAO,OAAO,MAAM,EAAE,OAAO,CAAC,KAAK,UAAU;AACzD,QAAI,CAAC,MAAM,MAAM;AACf,aAAO;AAAA,IACT;AACA,WAAOC;AAAA,QACH,GAAG;AAAA;AAAA,SAEF,MAAM,IAAI;AAAA,QACX,MAAM,IAAI;AAAA,MACZ,KAAK;AAAA,EACT,GAAG,EAAY;AACjB;AAEA,SAAS,iBAAiB,QAAgB,SAAyC;AACjF,SAAO,OAAO,UAAU,OAAO,CAAC,KAAK,uBAAuB;AAC1D,UAAM,WAAW,QAAQ,kBAAkB;AAC3C,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,IACT;AACA,WAAOA;AAAA,QACH,GAAG;AAAA;AAAA,eAEI,SAAS,IAAI;AAAA,QACpB,SAAS,WAAW;AAAA,MACtB,KAAK;AAAA,EACT,GAAG,EAAY;AACjB;;;AChHA,eAAsB,UAAU;AAAA,EAC9B;AAAA,EACA;AACF,GAA8C;AAC5C,QAAM,EAAE,WAAW,QAAQ,IAAI;AAC/B,QAAM,SAAS,QAAQ,SAAS;AAChC,UAAQ,WAAW,QAAQ;AAAA,IACzB,KAAK;AACH,aAAO,SAAS,SAAS,YAAY;AAAA,QACnC,mBAAmB;AAAA,QACnB,eAAe,CAAC,yBAAyB,QAAQ,OAAO,GAAG,gBAAgB,QAAQ,KAAK,CAAC;AAAA,MAC3F,CAAC;AAAA,IACH;AACE,aAAO,SAAS,SAAS,YAAY;AAAA,QACnC,mBAAmB;AAAA,QACnB,eAAe,CAAC,gBAAgB,QAAQ,KAAK,CAAC;AAAA,MAChD,CAAC;AAAA,EACL;AACF;AAEA,SAAS,gBAAgB,OAA4C;AACnE,MAAI,MAAM,MAAM;AACd,WAAO,kBAAkB,CAAC,EAAE,MAAM,YAAY,MAAM,MAAM,KAAK,CAAC,CAAC;AAAA,EACnE;AACA,MAAI,MAAM,2BAA2B;AACnC,WAAO,kBAAkB;AAAA,MACvB;AAAA,QACE,MAAM;AAAA,QACN,YAAY,MAAM,0BAA0B;AAAA,QAC5C,UAAU,MAAM,0BAA0B;AAAA,QAC1C,UAAU,CAAC,EAAE,MAAM,YAAY,MAAM,MAAM,0BAA0B,KAAK,CAAC;AAAA,MAC7E;AAAA,IACF,CAAC;AAAA,EACH;AACA,QAAM,IAAI,MAAM,4BAA4B;AAC9C;;;ACtCA,eAAsB,sBAAsB;AAAA,EAC1C;AAAA,EACA;AACF,GAA8C;AAE5C,SAAO,gBAAgB,SAAS,YAAY;AAAA,IAC1C,UAAU,WAAW;AAAA,EACvB,CAAC;AACH;;;ACXA,SAAS,YAAAC,iBAAgB;AAOzB,eAAsB,wBAAwB;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AACF,GAA8C;AAC5C,MAAI,CAAC,MAAM,YAAY,CAAC,MAAM,YAAY;AACxC,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AACA,QAAM,EAAE,IAAI,SAAS,IAAI,KAAK;AAC9B,QAAM,EAAE,OAAO,IAAI,KAAK;AACxB,QAAM,YAAY,OAAO,OAAO,CAAC,SAAS,KAAK,SAAS,UAAU;AAClE,QAAM,QAAgE,CAAC;AACvE,aAAW,YAAY,WAAW;AAChC,QAAI;AACJ,QAAI;AACF,kBAAY,KAAK,MAAM,SAAS,IAAI;AAAA,IACtC,QAAQ;AACN,YAAM,KAAK;AAAA,QACT,MAAM;AAAA,QACN,MAAM,SAAS;AAAA,MACjB,CAAC;AACD;AAAA,IACF;AACA,UAAM,EAAE,MAAAC,OAAM,UAAU,KAAK,IAAI;AACjC,UAAM,OAAO,MAAMC,UAASD,KAAI,EAAE,KAAK,CAAC,YAAY;AAAA,MAClD,aAAa,OAAO,SAAS,QAAQ;AAAA,MACrC;AAAA,MACA;AAAA,IACF,EAAE;AACF,UAAM,KAAK;AAAA,MACT,MAAM;AAAA,MACN,aAAa,KAAK;AAAA,MAClB,UAAU,KAAK;AAAA,IACjB,CAAC;AAAA,EACH;AACA,SAAO,eAAe,SAAS,YAAY;AAAA,IACzC,aAAa;AAAA,MACX,kBAAkB;AAAA,QAChB;AAAA,UACE,MAAM;AAAA,UACN,YAAY;AAAA,UACZ;AAAA,UACA,UAAU;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;;;ACtDA,SAAS,YAAAE,iBAAgB;AAOzB,eAAsB,sBAAsB;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AACF,GAA8C;AAC5C,MAAI,CAAC,MAAM,YAAY,CAAC,MAAM,YAAY;AACxC,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AACA,QAAM,EAAE,IAAI,SAAS,IAAI,KAAK;AAC9B,QAAM,EAAE,OAAO,IAAI,KAAK;AACxB,QAAM,YAAY,OAAO,OAAO,CAAC,SAAS,KAAK,SAAS,UAAU;AAClE,QAAM,QAA+D,CAAC;AACtE,aAAW,YAAY,WAAW;AAChC,QAAI;AACJ,QAAI;AACF,gBAAU,KAAK,MAAM,SAAS,IAAI;AAAA,IACpC,QAAQ;AACN,YAAM,KAAK;AAAA,QACT,MAAM;AAAA,QACN,MAAM,SAAS;AAAA,MACjB,CAAC;AACD;AAAA,IACF;AACA,UAAM,EAAE,MAAAC,OAAM,UAAU,KAAK,IAAI;AACjC,UAAM,OAAO,MAAMC,UAASD,KAAI,EAAE,KAAK,CAAC,YAAY;AAAA,MAClD,aAAa,OAAO,SAAS,QAAQ;AAAA,MACrC;AAAA,MACA;AAAA,IACF,EAAE;AACF,UAAM,KAAK;AAAA,MACT,MAAM;AAAA,MACN,aAAa,KAAK;AAAA,MAClB,UAAU,KAAK;AAAA,IACjB,CAAC;AAAA,EACH;AACA,SAAO,eAAe,SAAS,YAAY;AAAA,IACzC,aAAa;AAAA,MACX,kBAAkB;AAAA,QAChB;AAAA,UACE,MAAM;AAAA,UACN,YAAY;AAAA,UACZ;AAAA,UACA,UAAU;AAAA,YACR;AAAA,cACE,MAAM;AAAA,cACN,MAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,MACD,kBAAkB,KAAK;AAAA,IACzB;AAAA,EACF,CAAC;AACH;;;ACxDA,eAAsB,yBAAyB;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AACF,GAA8C;AAC5C,MAAI,CAAC,MAAM,YAAY,CAAC,MAAM,YAAY;AACxC,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AACA,QAAM,EAAE,IAAI,SAAS,IAAI,KAAK;AAC9B,QAAM,EAAE,OAAO,IAAI,KAAK;AACxB,SAAO,eAAe,SAAS,YAAY;AAAA,IACzC,aAAa;AAAA,MACX,kBAAkB;AAAA,QAChB;AAAA,UACE,MAAM;AAAA,UACN,YAAY;AAAA,UACZ;AAAA,UACA,UAAU,OAAO;AAAA,YACf,CAAC,SAAS,KAAK,SAAS,cAAc,KAAK,SAAS;AAAA,UACtD;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;;;ACxBA,eAAsB,sBAAsB,SAAoD;AAC9F,SAAO,yBAAyB,OAAO;AACzC;;;AhBYO,IAAM,sBAAsB,MAAM;AAAA,EACvC,OAAO;AAAA,IACL,OAAO,CAAC;AAAA,IAMR,SAAS,CAAC;AAAA,IAOV,QAAQ,CAAC;AAAA,EACX;AACF,CAAC,EAAE,cAAc;AAAA;AAAA,EAEf,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,SAAS,CAAC,EAAE,MAAM,OAAO;AAAA,IACvB,SAAS,MAAM;AAAA,IACf,YAAY,MAAM;AAAA,IAClB,eAAe,MAAM;AAAA,IACrB,eAAe,MAAM;AAAA,EACvB;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,MACJ,IAAI;AAAA,QACF,UAAU;AAAA,UACR,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,YACd,YAAY,CAAC,EAAE,MAAM,OAClB;AAAA,cACC,GAAG,MAAM;AAAA,cACT,UAAU,CAAC,GAAG,MAAM,kBAAkB,UAAU,GAAG,MAAM,aAAa;AAAA,cACtE,QAAQ;AAAA,YACV;AAAA,UACJ,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IAEA,kBAAkB;AAAA,MAChB,IAAI;AAAA,QACF,iBAAiB;AAAA,UACf,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,YACd,MAAM,CAAC,EAAE,SAAS,MAAM,OACrB;AAAA,cACC,YAAY,QAAQ,WAAW;AAAA,cAC/B,aAAa,CAAC;AAAA,cACd,OAAO,iBAAiB;AAAA,cACxB,WAAW,MAAM;AAAA,YACnB;AAAA,UACJ,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IAEA,oBAAoB;AAAA,MAClB,IAAI;AAAA,QACF,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,YACd,YAAY,CAAC,EAAE,SAAS,MAAM,OAC3B;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,UAAU,CAAC,GAAG,QAAQ,WAAW,UAAU,GAAG,MAAM,WAAW;AAAA,cAC/D,OAAO,SAAS,QAAQ,WAAW,OAAO,MAAM,KAAK;AAAA,YACvD;AAAA,YACF,MAAM,CAAC,EAAE,SAAS,MAAM,OACrB;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,aAAa,MAAM;AAAA,cACnB,OAAO,SAAS,QAAQ,KAAM,OAAO,MAAM,KAAK;AAAA,YAClD;AAAA,UACJ,CAAC;AAAA,QACH;AAAA,QACA,UAAU;AAAA,UACR,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,YACd,YAAY,CAAC,EAAE,SAAS,MAAM,OAC3B;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,UAAU,CAAC,GAAG,QAAQ,WAAW,UAAU,MAAM,UAAU;AAAA,cAC3D,OAAO,SAAS,QAAQ,WAAW,OAAO,MAAM,KAAK;AAAA,YACvD;AAAA,YACF,MAAM,CAAC,EAAE,SAAS,MAAM,OACrB;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,aAAa,CAAC,MAAM,UAAU;AAAA,cAC9B,UAAU,MAAM;AAAA,cAChB,OAAO,SAAS,QAAQ,KAAM,OAAO,MAAM,KAAK;AAAA,YAClD;AAAA,UACJ,CAAC;AAAA,QACH;AAAA,QACA,qBAAqB;AAAA,UACnB,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,YACd,YAAY,CAAC,EAAE,SAAS,MAAM,OAC3B;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,UAAU,CAAC,GAAG,QAAQ,WAAW,UAAU,MAAM,UAAU;AAAA,cAC3D,OAAO,SAAS,QAAQ,WAAW,OAAO,MAAM,KAAK;AAAA,YACvD;AAAA,YACF,MAAM,CAAC,EAAE,SAAS,MAAM,OACrB;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,aAAa,CAAC,MAAM,UAAU;AAAA,cAC9B,UAAU,MAAM;AAAA,cAChB,OAAO,SAAS,QAAQ,KAAM,OAAO,MAAM,KAAK;AAAA,YAClD;AAAA,UACJ,CAAC;AAAA,QACH;AAAA,QACA,cAAc;AAAA,UACZ,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,YACd,YAAY,CAAC,EAAE,SAAS,MAAM,OAC3B;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,UAAU,CAAC,GAAG,QAAQ,WAAW,UAAU,MAAM,UAAU;AAAA,cAC3D,OAAO,SAAS,QAAQ,WAAW,OAAO,MAAM,KAAK;AAAA,YACvD;AAAA,YACF,MAAM,CAAC,EAAE,SAAS,MAAM,OACrB;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,aAAa,CAAC,MAAM,UAAU;AAAA,cAC9B,UAAU,MAAM;AAAA,cAChB,OAAO,SAAS,QAAQ,KAAM,OAAO,MAAM,KAAK;AAAA,YAClD;AAAA,UACJ,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IAEA,aAAa;AAAA,MACX,IAAI;AAAA,QACF,mBAAmB;AAAA,UACjB,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,YACd,MAAM,CAAC,EAAE,SAAS,MAAM,OACrB;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,YAAY,MAAM;AAAA,YACpB;AAAA,UACJ,CAAC;AAAA,QACH;AAAA,QACA,gBAAgB;AAAA,UACd,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,YACd,MAAM,CAAC,EAAE,SAAS,MAAM,OACrB;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,YAAY,MAAM;AAAA,YACpB;AAAA,UACJ,CAAC;AAAA,QACH;AAAA,QACA,gBAAgB;AAAA,UACd,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,YACd,MAAM,CAAC,EAAE,SAAS,MAAM,OACrB;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,YAAY,MAAM;AAAA,YACpB;AAAA,UACJ,CAAC;AAAA,QACH;AAAA,QACA,kBAAkB;AAAA,UAChB,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,YACd,MAAM,CAAC,EAAE,SAAS,MAAM,OACrB;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,YAAY,MAAM;AAAA,YACpB;AAAA,UACJ,CAAC;AAAA,QACH;AAAA,QACA,mBAAmB;AAAA,UACjB,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,YACd,MAAM,CAAC,EAAE,SAAS,MAAM,OACrB;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,YAAY,MAAM;AAAA,YACpB;AAAA,UACJ,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IAEA,qBAAqB;AAAA,MACnB,IAAI;AAAA,QACF,gBAAgB;AAAA,UACd,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,YACd,YAAY,CAAC,EAAE,SAAS,MAAM,OAC3B;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,UAAU,CAAC,GAAG,QAAQ,WAAW,UAAU,GAAG,MAAM,WAAW;AAAA,YACjE;AAAA,YACF,MAAM,CAAC,EAAE,SAAS,MAAM,OACrB;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,aAAa,CAAC,GAAG,QAAQ,KAAM,aAAa,GAAG,MAAM,WAAW;AAAA,YAClE;AAAA,UACJ,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IAEA,kBAAkB;AAAA,MAChB,IAAI;AAAA,QACF,gBAAgB;AAAA,UACd,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,YACd,YAAY,CAAC,EAAE,SAAS,MAAM,OAC3B;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,UAAU,CAAC,GAAG,QAAQ,WAAW,UAAU,GAAG,MAAM,WAAW;AAAA,YACjE;AAAA,YACF,MAAM,CAAC,EAAE,SAAS,MAAM,OACrB;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,aAAa,CAAC,GAAG,QAAQ,KAAM,aAAa,GAAG,MAAM,WAAW;AAAA,YAClE;AAAA,UACJ,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IAEA,kBAAkB;AAAA,MAChB,IAAI;AAAA,QACF,gBAAgB;AAAA,UACd,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,YACd,YAAY,CAAC,EAAE,SAAS,MAAM,OAC3B;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,UAAU,CAAC,GAAG,QAAQ,WAAW,UAAU,GAAG,MAAM,WAAW;AAAA,YACjE;AAAA,YACF,MAAM,CAAC,EAAE,SAAS,MAAM,OACrB;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,aAAa,CAAC,GAAG,QAAQ,KAAM,aAAa,GAAG,MAAM,WAAW;AAAA,YAClE;AAAA,UACJ,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IAEA,oBAAoB;AAAA,MAClB,IAAI;AAAA,QACF,gBAAgB;AAAA,UACd,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,YACd,YAAY,CAAC,EAAE,SAAS,MAAM,OAC3B;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,UAAU,CAAC,GAAG,QAAQ,WAAW,UAAU,GAAG,MAAM,WAAW;AAAA,YACjE;AAAA,YACF,MAAM,CAAC,EAAE,SAAS,MAAM,OACrB;AAAA,cACC,GAAG,QAAQ;AAAA,cACX,aAAa,CAAC,GAAG,QAAQ,KAAM,aAAa,GAAG,MAAM,WAAW;AAAA,YAClE;AAAA,UACJ,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IAEA,qBAAqB;AAAA,MACnB,IAAI;AAAA,QACF,aAAa;AAAA,UACX,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,YACd,YAAY,CAAC,EAAE,MAAM,MAAM,MAAM;AAAA,YACjC,MAAM,CAAC,EAAE,MAAM,MAAM,MAAM;AAAA,UAC7B,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IAEA,wBAAwB;AAAA,MACtB,IAAI;AAAA,QACF,0BAA0B;AAAA,UACxB,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,YACd,YAAY,CAAC,EAAE,MAAM,MAAM,MAAM;AAAA,YACjC,MAAM,CAAC,EAAE,MAAM,MAAM,MAAM;AAAA,UAC7B,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IAEA,iBAAiB;AAAA,MACf,IAAI;AAAA,QACF,mBAAmB;AAAA,UACjB,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,YACd,YAAY,CAAC,EAAE,MAAM,MAAM,MAAM;AAAA,YACjC,MAAM,CAAC,EAAE,MAAM,MAAM,MAAM;AAAA,UAC7B,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IAEA,eAAe;AAAA,MACb,IAAI;AAAA,QACF,oBAAoB;AAAA,UAClB,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,YACd,YAAY,CAAC,EAAE,MAAM,MAAM,MAAM;AAAA,YACjC,MAAM,CAAC,EAAE,MAAM,MAAM,MAAM;AAAA,UAC7B,CAAC;AAAA,UACD,SAAS;AAAA,QACX;AAAA,QACA,2BAA2B;AAAA,UACzB,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,YACd,YAAY,CAAC,EAAE,MAAM,MAAM,MAAM;AAAA,YACjC,MAAM,CAAC,EAAE,MAAM,MAAM,MAAM;AAAA,UAC7B,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IAEA,SAAS;AAAA,MACP,MAAM;AAAA,IACR;AAAA,EACF;AACF,CAAC;AAEM,IAAM,qBAGT;AAAA,EACF,MAAM;AAAA,EACN,kBAAkB;AAAA,EAClB,oBAAoB;AAAA,EACpB,aAAa;AAAA,EACb,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,wBAAwB;AAAA,EACxB,iBAAiB;AAAA,EACjB,eAAe;AACjB;;;AiBhXA,SAAS,KAAAE,UAAS;AAKX,IAAM,uBAAuBA,GAAE,OAAO;AAAA,EAC3C,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,UAAUA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,YAAYA,GAAE,OAAO,EAAE,SAAS;AAAA,EAChC,SAASA,GACN;AAAA,IACCA,GAAE,OAAO;AAAA,IACTA,GAAE,OAAO;AAAA,MACP,SAASA,GAAE,OAAO,EAAE,SAAS;AAAA,MAC7B,mBAAmBA,GAAE,OAAO,EAAE,SAAS;AAAA,MACvC,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,MACjC,aAAaA,GAAE,OAAO;AAAA,MACtB,QAAQA,GACL;AAAA,QACCA,GAAE,OAAO;AAAA,QACTA,GAAE,mBAAmB,QAAQ;AAAA,UAC3BA,GAAE,OAAO;AAAA,YACP,MAAMA,GAAE,QAAQ,eAAe;AAAA,YAC/B,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,YACjC,MAAMA,GAAE,OAAO,EAAE,SAAS;AAAA,YAC1B,MAAMA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,YACnC,MAAMA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,YACnC,SAASA,GAAE,OAAO;AAAA,YAClB,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,YACjC,MAAMA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,YACnC,aAAaA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,UAC5C,CAAC;AAAA,UACDA,GAAE,OAAO;AAAA,YACP,MAAMA,GAAE,QAAQ,aAAa;AAAA,YAC7B,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,YACjC,MAAMA,GAAE,OAAO,EAAE,SAAS;AAAA,YAC1B,MAAMA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,YACnC,MAAMA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,YACnC,UAAUA,GAAE,OAAO;AAAA,UACrB,CAAC;AAAA,UACDA,GAAE,OAAO;AAAA,YACP,MAAMA,GAAE,QAAQ,kBAAkB;AAAA,YAClC,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,YACjC,MAAMA,GAAE,OAAO,EAAE,SAAS;AAAA,YAC1B,OAAOA,GAAE;AAAA,cACPA,GAAE,OAAO;AAAA,cACTA,GAAE,OAAO;AAAA,gBACP,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,gBACjC,iBAAiBA,GAAE,OAAO;AAAA,cAC5B,CAAC;AAAA,YACH;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AAAA,MACH,EACC,SAAS;AAAA,MACZ,WAAWA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IAC1C,CAAC;AAAA,EACH,EACC,SAAS;AACd,CAAC;;;A5BrCD,eAAsB,IACpB,UACA,SAKqB;AACrB,QAAM,YAAY,gBAAgB,MAAM,QAAQ;AAChD,QAAM,gBAAgB,SAAS,iBAAiB;AAChD,QAAM,qBAAqB,SAAS,sBAAsB;AAC1D,QAAM,kBAAkB,SAAS,mBAAmB;AACpD,QAAM,eAAe,IAAI,gBAAgB;AACzC,eAAa,UAAU,aAAa;AACpC,MAAI,EAAE,SAAS,WAAW,IAAI;AAE9B,MAAI,QAAQ,WAAW;AACrB,QAAI,CAAC,KAAK,WAAW,QAAQ,SAAS,GAAG;AACvC,YAAM,IAAI,MAAM,oCAAoC,QAAQ,SAAS,EAAE;AAAA,IACzE;AACA,YAAQ,MAAM,QAAQ,SAAS;AAAA,EACjC;AAEA,QAAM,gBAAgB,OAAO;AAC7B,SAAO,MAAM;AACX,UAAM,EAAE,aAAa,QAAQ,IAAI,MAAM,aAAa,OAAO;AAC3D,oBAAgB,YAAY,MAAM,SAAS,OAAO;AAClD,UAAM,gBAAgB,MAAM,iBAAiB,aAAa,OAAO;AACjE,UAAM,WAAW,YAAY,qBAAqB;AAAA,MAChD,OAAO;AAAA,QACL,SAAS;AAAA,UACP,GAAG;AAAA,UACH;AAAA,QACF;AAAA,QACA,mBAAmB,aACf;AAAA,UACE,IAAIC,UAAS;AAAA,UACb,OAAO,QAAQ;AAAA,UACf,QAAQ;AAAA,YACN,KAAK,QAAQ;AAAA,YACb,MAAM,YAAY;AAAA,YAClB,SAAS,YAAY;AAAA,UACvB;AAAA,UACA,YAAY,WAAW,aAAa;AAAA,UACpC,QAAQ;AAAA,UACR,UAAU,WAAW;AAAA,UACrB,OAAO,WAAW;AAAA,QACpB,IACA;AAAA,UACE,IAAIA,UAAS;AAAA,UACb,OAAO,QAAQ;AAAA,UACf,QAAQ;AAAA,YACN,KAAK,QAAQ;AAAA,YACb,MAAM,YAAY;AAAA,YAClB,SAAS,YAAY;AAAA,UACvB;AAAA,UACA,YAAY;AAAA,UACZ,QAAQ;AAAA,UACR,UAAU,CAAC;AAAA,UACX,OAAO,iBAAiB;AAAA,QAC1B;AAAA,QACJ;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AACD,UAAM,sBAAsB,MAAM,IAAI,QAAoB,CAAC,SAAS,WAAW;AAC7E,eAAS,UAAU,OAAO,aAAa;AACrC,YAAI;AACF,cAAI,SAAS,UAAU,WAAW;AAChC,kBAAM,EAAE,YAAAC,aAAY,eAAAC,eAAc,IAAI,SAAS;AAC/C,gBAAI,CAACD,aAAY;AACf,oBAAM,IAAI,MAAM,yBAAyB;AAAA,YAC3C;AACA,kBAAM,mBAAmBC,cAAa;AACtC,oBAAQD,WAAU;AAAA,UACpB,OAAO;AACL,kBAAM,QAAQ,MAAM,mBAAmB,SAAS,KAAK,EAAE,SAAS,OAAO;AACvE,gBAAI,gBAAgB,OAAO;AACzB,oBAAM,gBAAgB,MAAM,YAAY,MAAM,SAAS;AAAA,YACzD;AACA,kBAAM,aAAa,KAAK,KAAK;AAC7B,qBAAS,KAAK,KAAK;AAAA,UACrB;AAAA,QACF,SAAS,OAAO;AACd,iBAAO,KAAK;AAAA,QACd;AAAA,MACF,CAAC;AACD,eAAS,MAAM;AAAA,IACjB,CAAC;AACD,YAAQ,oBAAoB,QAAQ;AAAA,MAClC,KAAK,aAAa;AAChB,YAAI,oBAAoB,aAAa;AACnC,gBAAM,EAAE,UAAU,YAAY,IAAI;AAClC,gBAAM,EAAE,QAAQ,YAAY,UAAU,aAAa,IAAI;AACvD,gBAAM,wBAAwB,SAAS,SAAS,SAAS,CAAC;AAC1D,cAAI,sBAAsB,SAAS,iBAAiB;AAClD,kBAAM,IAAI,MAAM,0DAA0D;AAAA,UAC5E;AACA,gBAAM,eAAe,sBAAsB,SAAS;AAAA,YAClD,CAAC,YAAY,QAAQ,SAAS;AAAA,UAChC;AACA,cAAI,CAAC,cAAc;AACjB,kBAAM,IAAI,MAAM,qEAAqE;AAAA,UACvF;AACA,oBAAU;AAAA,YACR,GAAG;AAAA,YACH,WAAW,OAAO;AAAA,YAClB,OAAO;AAAA,cACL,2BAA2B;AAAA,gBACzB;AAAA,gBACA;AAAA,gBACA,MAAM,aAAa;AAAA,cACrB;AAAA,YACF;AAAA,UACF;AACA,uBAAa;AAAA,YACX,GAAI,MAAM,mBAAmB,QAAQ,OAAO,YAAY;AAAA,YACxD,IAAID,UAAS;AAAA,YACb,YAAY,oBAAoB,aAAa;AAAA,YAC7C,OAAO,oBAAoB;AAAA,UAC7B;AACA;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,MACA,KAAK,4BAA4B;AAC/B,eAAO;AAAA,MACT;AAAA,MACA,KAAK,qBAAqB;AACxB,YAAI,CAAC,oBAAoB,YAAY;AACnC,gBAAM,IAAI,MAAM,4CAA4C;AAAA,QAC9D;AACA,cAAM,EAAE,QAAQ,YAAY,UAAU,MAAM,IAAI,oBAAoB;AACpE,kBAAU;AAAA,UACR,GAAG;AAAA,UACH,WAAW,OAAO;AAAA,UAClB,OAAO;AAAA,YACL,MAAM;AAAA,UACR;AAAA,QACF;AACA,qBAAa;AAAA,UACX,IAAIA,UAAS;AAAA,UACb,OAAO,QAAQ;AAAA,UACf,QAAQ;AAAA,UACR,YAAY,oBAAoB,aAAa;AAAA,UAC7C,UAAU,CAAC;AAAA,UACX,QAAQ;AAAA,YACN,KAAK,OAAO;AAAA,YACZ,MAAM,OAAO;AAAA,YACb,SAAS,OAAO;AAAA,UAClB;AAAA,UACA,aAAa;AAAA,YACX,QAAQ;AAAA,cACN,KAAK,YAAY;AAAA,cACjB,MAAM,YAAY;AAAA,cAClB,SAAS,YAAY;AAAA,YACvB;AAAA,YACA;AAAA,YACA;AAAA,YACA,cAAc,oBAAoB;AAAA,UACpC;AAAA,UACA,OAAO,oBAAoB;AAAA,QAC7B;AACA;AAAA,MACF;AAAA,MACA,KAAK,6BAA6B;AAChC,eAAO;AAAA,MACT;AAAA,MACA,KAAK,kBAAkB;AACrB,eAAO;AAAA,MACT;AAAA,MACA;AACE,cAAM,IAAI,MAAM,+BAA+B;AAAA,IACnD;AAAA,EACF;AACF;AAEA,eAAe,aAAa,SAAqB;AAC/C,QAAM,EAAE,UAAU,IAAI;AACtB,QAAM,UAAU,EAAE,GAAG,QAAQ,QAAQ;AACrC,QAAM,cAAc,MAAM,mBAAmB,WAAW,OAAO;AAC/D,aAAW,gBAAgB,YAAY,WAAW;AAChD,UAAM,WAAW,MAAM,mBAAmB,cAAc,OAAO;AAC/D,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,MAAM,YAAY,YAAY,YAAY;AAAA,IACtD;AAAA,EACF;AACA,SAAO,EAAE,aAAa,QAAQ;AAChC;AAEA,SAAS,gBAAgB,YAAoB,SAAiC,SAAqB;AACjG,UAAQ,IAAI,uCAAyB;AACrC,UAAQ,IAAI,kBAAkB,UAAU,EAAE;AAC1C,UAAQ,IAAI,YAAY,OAAO,KAAK,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE;AACzD,UAAQ,IAAI,UAAU,QAAQ,KAAK,EAAE;AACrC,UAAQ,IAAI,gBAAgB,QAAQ,WAAW,EAAE;AACjD,UAAQ,IAAI,cAAc,QAAQ,QAAQ,EAAE;AAC5C,UAAQ,IAAI,gBAAgB,QAAQ,UAAU,EAAE;AAChD,MAAI,QAAQ,MAAM,MAAM;AACtB,YAAQ,IAAI,UAAU,QAAQ,MAAM,IAAI,EAAE;AAAA,EAC5C;AACA,MAAI,QAAQ,MAAM,2BAA2B;AAC3C,YAAQ,IAAI,SAAS,QAAQ,MAAM,0BAA0B,QAAQ,EAAE;AACvE,YAAQ,IAAI,iBAAiB,QAAQ,MAAM,0BAA0B,UAAU,EAAE;AACjF,YAAQ,IAAI,gBAAgB,QAAQ,MAAM,0BAA0B,IAAI,EAAE;AAAA,EAC5E;AACF;AAEA,eAAe,gBAAgB,SAAqB;AAClD,QAAM,SAAS,UAAU,QAAQ,KAAK;AACtC,MAAI,WAAW,MAAM,GAAG;AACtB,UAAM,iBAAiB,KAAK,QAAQ,QAAQ,kBAAkB;AAC9D,UAAM,aAAa,KAAK,MAAM,MAAMG,UAAS,gBAAgB,OAAO,CAAC;AACrE,eAAW,YAAY,KAAK,IAAI;AAChC,UAAMC,WAAU,gBAAgB,KAAK,UAAU,YAAY,MAAM,CAAC,GAAG,OAAO;AAAA,EAC9E,OAAO;AACL,UAAMC,OAAM,QAAQ,EAAE,WAAW,KAAK,CAAC;AACvC,UAAMD;AAAA,MACJ,KAAK,QAAQ,QAAQ,kBAAkB;AAAA,MACvC,KAAK,UAAU,SAAS,MAAM,CAAC;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,UAAU,OAAe;AACvC,SAAO,GAAG,QAAQ,IAAI,CAAC,kBAAkB,KAAK;AAChD;AAEA,eAAsB,YAAY,QAAyC;AACzE,QAAM,OAAO,KAAK,MAAM,UAAU,EAAE;AACpC,SAAO,qBAAqB,MAAM,IAAI;AACxC;;;A6B/PA,SAAS,KAAAE,UAAS;AAKX,IAAM,iBAAiBA,GAAE,OAAO;AAAA,EACrC,WAAWA,GAAE,OAAO;AAAA,EACpB,OAAOA,GAAE,OAAO;AAAA,EAChB,SAASA,GAAE,OAAO;AAAA,IAChB,QAAQA,GAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,IAC3B,aAAaA,GACV,OAAO,EACP,SAAS,EACT,UAAU,CAAC,UAAU;AACpB,UAAI,UAAU,QAAW;AACvB,eAAO;AAAA,MACT;AACA,YAAM,cAAc,OAAO,WAAW,KAAK;AAC3C,UAAI,OAAO,MAAM,WAAW,GAAG;AAC7B,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT,CAAC;AAAA,IACH,UAAUA,GACP,OAAO,EACP,SAAS,EACT,UAAU,CAAC,UAAU;AACpB,UAAI,UAAU,QAAW;AACvB,eAAO;AAAA,MACT;AACA,YAAM,cAAc,OAAO,SAAS,KAAK;AACzC,UAAI,OAAO,MAAM,WAAW,GAAG;AAC7B,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT,CAAC;AAAA,IACH,YAAYA,GACT,OAAO,EACP,SAAS,EACT,UAAU,CAAC,UAAU;AACpB,UAAI,UAAU,QAAW;AACvB,eAAO;AAAA,MACT;AACA,YAAM,cAAc,OAAO,SAAS,KAAK;AACzC,UAAI,OAAO,MAAM,WAAW,GAAG;AAC7B,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT,CAAC;AAAA,IACH,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,CAAC;AACH,CAAC;","names":["mkdir","readFile","writeFile","createId","z","model","z","path","contents","content","createId","z","z","createId","createId","createId","createId","part","generateText","generateText","createId","dedent","readFile","path","readFile","readFile","path","readFile","z","createId","checkpoint","skillManagers","readFile","writeFile","mkdir","z"]}
1
+ {"version":3,"sources":["../src/runtime.ts","../src/default-store.ts","../src/schemas/runtime.ts","../src/model.ts","../src/schemas/messages.ts","../package.json","../src/events/default-event-listener.ts","../src/events/event-emitter.ts","../src/schemas/api-registry.ts","../src/api-clinent.ts","../src/resolve-expert-to-run.ts","../src/runtime-state-machine.ts","../src/skill-manager.ts","../src/states/calling-delegate.ts","../src/states/calling-interactive-tool.ts","../src/states/calling-tool.ts","../src/states/finishing-step.ts","../src/states/generating-run-result.ts","../src/messages/message.ts","../src/usage.ts","../src/states/generating-tool-call.ts","../src/messages/instruction-message.ts","../src/states/init.ts","../src/states/preparing-for-step.ts","../src/states/resolving-image-file.ts","../src/states/resolving-pdf-file.ts","../src/states/resolving-tool-result.ts","../src/states/resolving-thought.ts","../src/schemas/perstack-toml.ts","../src/schemas/command-run.ts"],"sourcesContent":["import { existsSync } from \"node:fs\"\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\"\nimport path from \"node:path\"\nimport { createId } from \"@paralleldrive/cuid2\"\nimport TOML from \"smol-toml\"\nimport { createActor } from \"xstate\"\nimport { defaultRetrieveCheckpoint, defaultStoreCheckpoint } from \"./default-store.js\"\nimport { defaultEventListener } from \"./events/default-event-listener.js\"\nimport { RunEventEmitter } from \"./events/event-emitter.js\"\nimport { resolveExpertToRun } from \"./resolve-expert-to-run.js\"\nimport { StateMachineLogics, runtimeStateMachine } from \"./runtime-state-machine.js\"\nimport { type PerstackConfig, PerstackConfigSchema } from \"./schemas/perstack-toml.js\"\nimport {\n type Checkpoint,\n type Expert,\n type RunEvent,\n type RunParamsInput,\n RunParamsSchema,\n type RunSetting,\n type Step,\n} from \"./schemas/runtime.js\"\nimport { closeSkillManagers, getSkillManagers } from \"./skill-manager.js\"\nimport { createEmptyUsage } from \"./usage.js\"\n\nexport async function run(\n runInput: RunParamsInput,\n options?: {\n shouldContinueRun?: (\n setting: RunSetting,\n checkpoint: Checkpoint,\n step: Step,\n ) => Promise<boolean>\n retrieveCheckpoint?: (checkpointId: string) => Promise<Checkpoint>\n storeCheckpoint?: (checkpoint: Checkpoint, timestamp: number) => Promise<void>\n eventListener?: (event: RunEvent) => Promise<void>\n },\n): Promise<Checkpoint> {\n const runParams = RunParamsSchema.parse(runInput)\n const eventListener = options?.eventListener ?? defaultEventListener\n const retrieveCheckpoint = options?.retrieveCheckpoint ?? defaultRetrieveCheckpoint\n const storeCheckpoint = options?.storeCheckpoint ?? defaultStoreCheckpoint\n const eventEmitter = new RunEventEmitter()\n eventEmitter.subscribe(eventListener)\n let { setting, checkpoint } = runParams\n\n if (setting.workspace) {\n if (!path.isAbsolute(setting.workspace)) {\n throw new Error(`Workspace path must be absolute: ${setting.workspace}`)\n }\n process.chdir(setting.workspace)\n }\n\n await storeRunSetting(setting)\n while (true) {\n const { expertToRun, experts } = await setupExperts(setting)\n printRunSetting(expertToRun.name, experts, setting)\n const skillManagers = await getSkillManagers(expertToRun, experts)\n const runActor = createActor(runtimeStateMachine, {\n input: {\n setting: {\n ...setting,\n experts,\n },\n initialCheckpoint: checkpoint\n ? {\n id: createId(),\n runId: setting.runId,\n expert: {\n key: setting.expertKey,\n name: expertToRun.name,\n version: expertToRun.version,\n },\n stepNumber: checkpoint.stepNumber + 1,\n status: \"proceeding\",\n messages: checkpoint.messages,\n usage: checkpoint.usage,\n }\n : {\n id: createId(),\n runId: setting.runId,\n expert: {\n key: setting.expertKey,\n name: expertToRun.name,\n version: expertToRun.version,\n },\n stepNumber: 1,\n status: \"init\",\n messages: [],\n usage: createEmptyUsage(),\n },\n eventListener,\n skillManagers,\n },\n })\n const runResultCheckpoint = await new Promise<Checkpoint>((resolve, reject) => {\n runActor.subscribe(async (runState) => {\n try {\n if (runState.value === \"Stopped\") {\n const { checkpoint, skillManagers } = runState.context\n if (!checkpoint) {\n throw new Error(\"Checkpoint is undefined\")\n }\n await closeSkillManagers(skillManagers)\n resolve(checkpoint)\n } else {\n const event = await StateMachineLogics[runState.value](runState.context)\n if (\"checkpoint\" in event) {\n await storeCheckpoint(event.checkpoint, event.timestamp)\n }\n await eventEmitter.emit(event)\n if (options?.shouldContinueRun) {\n const shouldContinue = await options.shouldContinueRun(\n runState.context.setting,\n runState.context.checkpoint,\n runState.context.step,\n )\n if (!shouldContinue) {\n runActor.stop()\n resolve(runState.context.checkpoint)\n return\n }\n }\n runActor.send(event)\n }\n } catch (error) {\n reject(error)\n }\n })\n runActor.start()\n })\n switch (runResultCheckpoint.status) {\n case \"completed\": {\n if (runResultCheckpoint.delegatedBy) {\n const { messages, delegatedBy } = runResultCheckpoint\n const { expert, toolCallId, toolName, checkpointId } = delegatedBy\n const delegateResultMessage = messages[messages.length - 1]\n if (delegateResultMessage.type !== \"expertMessage\") {\n throw new Error(\"Delegation error: delegation result message is incorrect\")\n }\n const delegateText = delegateResultMessage.contents.find(\n (content) => content.type === \"textPart\",\n )\n if (!delegateText) {\n throw new Error(\"Delegation error: delegation result message does not contain a text\")\n }\n setting = {\n ...setting,\n expertKey: expert.key,\n input: {\n interactiveToolCallResult: {\n toolCallId,\n toolName,\n text: delegateText.text,\n },\n },\n }\n checkpoint = {\n ...(await retrieveCheckpoint(setting.runId, checkpointId)),\n id: createId(),\n stepNumber: runResultCheckpoint.stepNumber + 1,\n usage: runResultCheckpoint.usage,\n }\n break\n }\n return runResultCheckpoint\n }\n case \"stoppedByInteractiveTool\": {\n return runResultCheckpoint\n }\n case \"stoppedByDelegate\": {\n if (!runResultCheckpoint.delegateTo) {\n throw new Error(\"Delegation error: delegate to is undefined\")\n }\n const { expert, toolCallId, toolName, query } = runResultCheckpoint.delegateTo\n setting = {\n ...setting,\n expertKey: expert.key,\n input: {\n text: query,\n },\n }\n checkpoint = {\n id: createId(),\n runId: setting.runId,\n status: \"init\",\n stepNumber: runResultCheckpoint.stepNumber + 1,\n messages: [],\n expert: {\n key: expert.key,\n name: expert.name,\n version: expert.version,\n },\n delegatedBy: {\n expert: {\n key: expertToRun.key,\n name: expertToRun.name,\n version: expertToRun.version,\n },\n toolCallId,\n toolName,\n checkpointId: runResultCheckpoint.id,\n },\n usage: runResultCheckpoint.usage,\n }\n break\n }\n case \"stoppedByExceededMaxSteps\": {\n return runResultCheckpoint\n }\n case \"stoppedByError\": {\n return runResultCheckpoint\n }\n default:\n throw new Error(\"Run stopped by unknown reason\")\n }\n }\n}\n\nasync function setupExperts(setting: RunSetting) {\n const { expertKey } = setting\n const experts = { ...setting.experts }\n const expertToRun = await resolveExpertToRun(expertKey, experts)\n for (const delegateName of expertToRun.delegates) {\n const delegate = await resolveExpertToRun(delegateName, experts)\n if (!delegate) {\n throw new Error(`Delegate ${delegateName} not found`)\n }\n }\n return { expertToRun, experts }\n}\n\nfunction printRunSetting(expertName: string, experts: Record<string, Expert>, setting: RunSetting) {\n console.log(\"🦜 Starting Perstack 🦜\")\n console.log(`Expert To Run: ${expertName}`)\n console.log(`Experts: ${Object.keys(experts).join(\", \")}`)\n console.log(`Model: ${setting.model}`)\n console.log(`Temperature: ${setting.temperature}`)\n console.log(`Max Steps: ${setting.maxSteps}`)\n console.log(`Max Retries: ${setting.maxRetries}`)\n if (setting.input.text) {\n console.log(`Query: ${setting.input.text}`)\n }\n if (setting.input.interactiveToolCallResult) {\n console.log(`Tool: ${setting.input.interactiveToolCallResult.toolName}`)\n console.log(`Tool Call ID: ${setting.input.interactiveToolCallResult.toolCallId}`)\n console.log(`Tool Result: ${setting.input.interactiveToolCallResult.text}`)\n }\n}\n\nasync function storeRunSetting(setting: RunSetting) {\n const runDir = getRunDir(setting.runId)\n if (existsSync(runDir)) {\n const runSettingPath = path.resolve(runDir, \"run-setting.json\")\n const runSetting = JSON.parse(await readFile(runSettingPath, \"utf-8\")) as RunSetting\n runSetting.updatedAt = Date.now()\n await writeFile(runSettingPath, JSON.stringify(runSetting, null, 2), \"utf-8\")\n } else {\n await mkdir(runDir, { recursive: true })\n await writeFile(\n path.resolve(runDir, \"run-setting.json\"),\n JSON.stringify(setting, null, 2),\n \"utf-8\",\n )\n }\n}\n\nexport function getRunDir(runId: string) {\n return `${process.cwd()}/perstack/runs/${runId}`\n}\n\nexport async function parseConfig(config: string): Promise<PerstackConfig> {\n const toml = TOML.parse(config ?? \"\")\n return PerstackConfigSchema.parse(toml)\n}\n","import { mkdir, readFile, readdir, writeFile } from \"node:fs/promises\"\nimport { getRunDir } from \"./runtime.js\"\nimport { type Checkpoint, CheckpointSchema, type RunEvent } from \"./schemas/runtime.js\"\n\nexport async function defaultRetrieveCheckpoint(\n runId: string,\n checkpointId: string,\n): Promise<Checkpoint> {\n const runDir = getRunDir(runId)\n const checkpointFiles = await readdir(runDir, { withFileTypes: true }).then((files) =>\n files.filter((file) => file.isFile() && file.name.startsWith(\"checkpoint-\")),\n )\n const checkpointFile = checkpointFiles.find((file) => file.name.endsWith(`-${checkpointId}.json`))\n if (!checkpointFile) {\n throw new Error(`checkpoint not found: ${runId} ${checkpointId}`)\n }\n const checkpointPath = `${runDir}/${checkpointFile.name}`\n const checkpoint = await readFile(checkpointPath, \"utf8\")\n return CheckpointSchema.parse(JSON.parse(checkpoint))\n}\n\nexport async function defaultStoreCheckpoint(\n checkpoint: Checkpoint,\n timestamp: number,\n): Promise<void> {\n const { id, runId, stepNumber } = checkpoint\n const runDir = getRunDir(runId)\n const checkpointPath = `${runDir}/checkpoint-${timestamp}-${stepNumber}-${id}.json`\n await mkdir(runDir, { recursive: true })\n await writeFile(checkpointPath, JSON.stringify(checkpoint, null, 2))\n}\n\nexport async function defaultStoreEvent(event: RunEvent): Promise<void> {\n const { timestamp, runId, stepNumber, type } = event\n const runDir = getRunDir(runId)\n const eventPath = `${runDir}/event-${timestamp}-${stepNumber}-${type}.json`\n await mkdir(runDir, { recursive: true })\n await writeFile(eventPath, JSON.stringify(event, null, 2))\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport { z } from \"zod\"\nimport { getDefaultModelName } from \"../model.js\"\nimport {\n type ExpertMessage,\n type FileInlinePart,\n type ImageInlinePart,\n type InstructionMessage,\n type Message,\n MessageSchema,\n type TextPart,\n type ToolMessage,\n type UserMessage,\n} from \"./messages.js\"\n\nexport const expertNameRegex = /^(@[a-z0-9][a-z0-9_-]*\\/)?[a-z0-9][a-z0-9_-]*$/\nexport const versionRegex =\n /^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[\\w.-]+)?(?:\\+[\\w.-]+)?$/\nexport const tagNameRegex = /^[a-z0-9][a-z0-9_-]*$/\nexport const expertKeyRegex =\n /^((?:@[a-z0-9][a-z0-9_\\.-]*\\/)?[a-z0-9][a-z0-9_\\.-]*)(?:@((?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[\\w.-]+)?(?:\\+[\\w.-]+)?)|@([a-z0-9][a-z0-9_\\.-]*))?$/\nexport const skillNameRegex = /^[a-z0-9][a-z0-9._-]*$/\nexport const maxNameLength = 214\n\nexport function parseExpertKey(expertKey: string): {\n key: string\n name: string\n version?: string\n tag?: string\n} {\n const match = expertKey.match(expertKeyRegex)\n if (!match) {\n throw new Error(`Invalid expert key format: ${expertKey}`)\n }\n\n const [key, name, version, tag] = match\n return {\n key,\n name,\n version,\n tag,\n }\n}\n\nexport const McpStdioSkillSchema = z.object({\n type: z.literal(\"mcpStdioSkill\"),\n name: z.string(),\n description: z.string().optional(),\n rule: z.string().optional(),\n pick: z.array(z.string()).optional().default([]),\n omit: z.array(z.string()).optional().default([]),\n command: z.string(),\n packageName: z.string().optional(),\n args: z.array(z.string()).optional().default([]),\n requiredEnv: z.array(z.string()).optional().default([]),\n})\nexport type McpStdioSkill = z.infer<typeof McpStdioSkillSchema>\n\nexport const McpSseSkillSchema = z.object({\n type: z.literal(\"mcpSseSkill\"),\n name: z.string(),\n description: z.string().optional(),\n rule: z.string().optional(),\n pick: z.array(z.string()).optional().default([]),\n omit: z.array(z.string()).optional().default([]),\n endpoint: z.string(),\n})\nexport type McpSseSkill = z.infer<typeof McpSseSkillSchema>\n\nexport const InteractiveToolSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n inputJsonSchema: z.string(),\n})\nexport const InteractiveSkillSchema = z.object({\n type: z.literal(\"interactiveSkill\"),\n name: z.string(),\n description: z.string().optional(),\n rule: z.string().optional(),\n tools: z.record(z.string(), InteractiveToolSchema.omit({ name: true })).transform((tools) => {\n return Object.fromEntries(\n Object.entries(tools).map(([key, toolWithoutName]) => [\n key,\n InteractiveToolSchema.parse({ ...toolWithoutName, name: key }),\n ]),\n )\n }),\n})\nexport type InteractiveSkill = z.infer<typeof InteractiveSkillSchema>\n\nexport const ExpertSchema = z.object({\n key: z.string().regex(expertKeyRegex).min(1),\n name: z.string().regex(expertNameRegex).min(1).max(maxNameLength),\n version: z.string().regex(versionRegex),\n description: z\n .string()\n .min(1)\n .max(1024 * 2)\n .optional(),\n instruction: z\n .string()\n .min(1)\n .max(1024 * 20),\n skills: z\n .record(\n z.string(),\n z.discriminatedUnion(\"type\", [\n McpStdioSkillSchema.omit({ name: true }),\n McpSseSkillSchema.omit({ name: true }),\n InteractiveSkillSchema.omit({ name: true }),\n ]),\n )\n .optional()\n .default({\n \"@perstack/base\": {\n type: \"mcpStdioSkill\",\n description: \"Base skill\",\n command: \"npx\",\n args: [\"-y\", \"@perstack/base\"],\n },\n })\n .transform((skills) => {\n return Object.fromEntries(\n Object.entries(skills).map(([key, skillWithoutName]) => [\n key,\n z\n .discriminatedUnion(\"type\", [\n McpStdioSkillSchema,\n McpSseSkillSchema,\n InteractiveSkillSchema,\n ])\n .parse({ ...skillWithoutName, name: key }),\n ]),\n )\n }),\n delegates: z.array(z.string().regex(expertKeyRegex).min(1)).optional().default([]),\n tags: z.array(z.string().regex(tagNameRegex).min(1)).optional().default([]),\n})\nexport type Expert = z.infer<typeof ExpertSchema>\n\nexport const UsageSchema = z.object({\n promptTokens: z.number(),\n completionTokens: z.number(),\n totalTokens: z.number(),\n cacheCreationInputTokens: z.number(),\n cacheReadInputTokens: z.number(),\n})\nexport type Usage = z.infer<typeof UsageSchema>\n\nexport const CheckpointStatusSchema = z.enum([\n \"init\",\n \"proceeding\",\n \"completed\",\n \"stoppedByInteractiveTool\",\n \"stoppedByDelegate\",\n \"stoppedByExceededMaxSteps\",\n \"stoppedByError\",\n])\nexport const CheckpointSchema = z.object({\n id: z.string(),\n runId: z.string(),\n status: CheckpointStatusSchema,\n stepNumber: z.number(),\n messages: z.array(MessageSchema),\n expert: z.object({\n key: z.string(),\n name: z.string(),\n version: z.string(),\n }),\n delegateTo: z\n .object({\n expert: z.object({\n key: z.string(),\n name: z.string(),\n version: z.string(),\n }),\n toolCallId: z.string(),\n toolName: z.string(),\n query: z.string(),\n })\n .optional(),\n delegatedBy: z\n .object({\n expert: z.object({\n key: z.string(),\n name: z.string(),\n version: z.string(),\n }),\n toolCallId: z.string(),\n toolName: z.string(),\n checkpointId: z.string(),\n })\n .optional(),\n usage: UsageSchema,\n})\nexport type Checkpoint = z.infer<typeof CheckpointSchema>\n\nexport const RunParamsSchema = z.object({\n setting: z.object({\n runId: z\n .string()\n .optional()\n .transform((value) => value ?? createId()),\n expertKey: z.string().regex(expertKeyRegex).min(1),\n input: z.object({\n text: z.string().optional(),\n interactiveToolCallResult: z\n .object({\n toolCallId: z.string(),\n toolName: z.string(),\n text: z.string(),\n })\n .optional(),\n }),\n experts: z\n .record(z.string().regex(expertKeyRegex).min(1), ExpertSchema.omit({ key: true }))\n .optional()\n .default({})\n .transform((experts) =>\n Object.fromEntries(\n Object.entries(experts).map(([key, expertWithoutKey]) => [\n key,\n ExpertSchema.parse({\n ...expertWithoutKey,\n key,\n }),\n ]),\n ),\n ),\n model: z.string().optional().default(getDefaultModelName()),\n temperature: z.number().min(0).max(1).optional().default(0.3),\n maxSteps: z.number().min(1).optional(),\n maxRetries: z.number().min(0).optional().default(10),\n workspace: z.string().optional(),\n startedAt: z.number().optional().default(Date.now()),\n updatedAt: z.number().optional().default(Date.now()),\n }),\n checkpoint: CheckpointSchema.optional(),\n})\nexport type RunParamsInput = z.input<typeof RunParamsSchema>\nexport type RunParams = z.output<typeof RunParamsSchema>\nexport type RunSetting = z.infer<typeof RunParamsSchema.shape.setting>\nexport type RunInput = z.infer<typeof RunParamsSchema.shape.setting.shape.input>\n\nexport type Step = {\n stepNumber: number\n inputMessages?: (InstructionMessage | UserMessage | ToolMessage)[]\n newMessages: Message[]\n toolCall?: ToolCall\n toolResult?: ToolResult\n usage: Usage\n startedAt: number\n finishedAt?: number\n}\nexport type ToolCall = {\n id: string\n skillName: string\n toolName: string\n args: Record<string, unknown>\n}\nexport type ToolResult = {\n id: string\n skillName: string\n toolName: string\n result: (TextPart | ImageInlinePart | FileInlinePart)[]\n}\n\n/**\n * ExpertEvents can only contain deeply serializable properties.\n * This is important because these events are serialized using JSON.stringify() and stored in Cassandra,\n * and later used to restore state when resuming execution. Non-serializable properties would cause\n * issues during serialization/deserialization process.\n */\ntype ExpertEventPayloads = {\n startRun: {\n initialCheckpoint: Checkpoint\n inputMessages: (InstructionMessage | UserMessage | ToolMessage)[]\n }\n startGeneration: {\n messages: Message[]\n }\n retry: {\n newMessages: (UserMessage | ExpertMessage | ToolMessage)[]\n usage: Usage\n }\n callTool: {\n newMessage: ExpertMessage\n toolCall: ToolCall\n usage: Usage\n }\n callInteractiveTool: {\n newMessage: ExpertMessage\n toolCall: ToolCall\n usage: Usage\n }\n callDelegate: {\n newMessage: ExpertMessage\n toolCall: ToolCall\n usage: Usage\n }\n resolveToolResult: {\n toolResult: ToolResult\n }\n resolveThought: {\n toolResult: ToolResult\n }\n resolvePdfFile: {\n toolResult: ToolResult\n }\n resolveImageFile: {\n toolResult: ToolResult\n }\n attemptCompletion: {\n toolResult: ToolResult\n }\n finishToolCall: {\n newMessages: (UserMessage | ToolMessage)[]\n }\n continueToNextStep: {\n checkpoint: Checkpoint\n step: Step\n nextCheckpoint: Checkpoint\n }\n stopRunByInteractiveTool: {\n checkpoint: Checkpoint\n step: Step\n }\n stopRunByDelegate: {\n checkpoint: Checkpoint\n step: Step\n }\n stopRunByExceededMaxSteps: {\n checkpoint: Checkpoint\n step: Step\n }\n completeRun: {\n checkpoint: Checkpoint\n step: Step\n text: string\n usage: Usage\n }\n}\n\ntype BaseEvent = {\n id: string\n expertKey: string\n timestamp: number\n runId: string\n stepNumber: number\n}\nexport type EventType = keyof ExpertEventPayloads\nexport type RunEvent = {\n [K in EventType]: BaseEvent & { type: K } & ExpertEventPayloads[K]\n}[EventType]\nexport type EventForType<T extends EventType> = Extract<RunEvent, { type: T }>\n\nexport function createEvent<T extends EventType>(type: T) {\n return (\n setting: RunSetting,\n checkpoint: Checkpoint,\n data: Omit<EventForType<T>, \"type\" | \"id\" | \"expertKey\" | \"timestamp\" | \"runId\" | \"stepNumber\">,\n ): EventForType<T> => {\n return {\n type,\n id: createId(),\n expertKey: checkpoint.expert.key,\n timestamp: Date.now(),\n runId: setting.runId,\n stepNumber: checkpoint.stepNumber,\n ...data,\n } as EventForType<T>\n }\n}\n\nexport const startRun = createEvent(\"startRun\")\nexport const startGeneration = createEvent(\"startGeneration\")\nexport const retry = createEvent(\"retry\")\nexport const callTool = createEvent(\"callTool\")\nexport const callInteractiveTool = createEvent(\"callInteractiveTool\")\nexport const callDelegate = createEvent(\"callDelegate\")\nexport const resolveToolResult = createEvent(\"resolveToolResult\")\nexport const resolveThought = createEvent(\"resolveThought\")\nexport const resolvePdfFile = createEvent(\"resolvePdfFile\")\nexport const resolveImageFile = createEvent(\"resolveImageFile\")\nexport const attemptCompletion = createEvent(\"attemptCompletion\")\nexport const finishToolCall = createEvent(\"finishToolCall\")\nexport const completeRun = createEvent(\"completeRun\")\nexport const stopRunByInteractiveTool = createEvent(\"stopRunByInteractiveTool\")\nexport const stopRunByDelegate = createEvent(\"stopRunByDelegate\")\nexport const stopRunByExceededMaxSteps = createEvent(\"stopRunByExceededMaxSteps\")\nexport const continueToNextStep = createEvent(\"continueToNextStep\")\n","import { anthropic } from \"@ai-sdk/anthropic\"\nimport { google } from \"@ai-sdk/google\"\nimport { openai } from \"@ai-sdk/openai\"\nimport type { LanguageModelV1 } from \"ai\"\n\nconst DefaultModel = \"claude-4-sonnet-20250514\"\n\nconst AnthropicModels = [\n \"claude-4-opus-20250514\",\n \"claude-4-sonnet-20250514\",\n \"claude-3-7-sonnet-20250219\",\n \"claude-3-5-sonnet-latest\",\n \"claude-3-5-sonnet-20241022\",\n \"claude-3-5-sonnet-20240620\",\n \"claude-3-5-haiku-latest\",\n \"claude-3-5-haiku-20241022\",\n // \"claude-3-opus-latest\", - No pdf support\n // \"claude-3-opus-20240229\", - No pdf support\n // \"claude-3-sonnet-20240229\", - No pdf support\n // \"claude-3-haiku-20240307\", - No pdf support\n]\n\nconst GoogleModels = [\n \"gemini-2.5-pro-preview-05-06\",\n \"gemini-2.5-pro-exp-03-25\",\n \"gemini-2.5-flash-preview-04-17\",\n \"gemini-2.0-pro-exp-02-05\",\n \"gemini-2.0-flash-thinking-exp-01-21\",\n \"gemini-2.0-flash\",\n \"gemini-2.0-flash-001\",\n \"gemini-2.0-flash-live-001\",\n \"gemini-2.0-flash-lite\",\n \"gemini-2.0-flash-exp\",\n \"gemini-1.5-pro\",\n \"gemini-1.5-pro-latest\",\n \"gemini-1.5-pro-001\",\n \"gemini-1.5-pro-002\",\n \"gemini-1.5-flash\",\n \"gemini-1.5-flash-latest\",\n \"gemini-1.5-flash-001\",\n \"gemini-1.5-flash-002\",\n \"gemini-1.5-flash-8b\",\n \"gemini-1.5-flash-8b-latest\",\n \"gemini-1.5-flash-8b-001\",\n // \"gemini-exp-1206\", - Unclear model spec\n // \"gemma-3-27b-it\", - Unclear model spec\n // \"learnlm-1.5-pro-experimental\", - Unclear model spec\n]\n\nconst OpenAIModels = [\n \"o4-mini\",\n \"o4-mini-2025-04-16\",\n \"o3\",\n \"o3-2025-04-16\",\n \"o3-mini\",\n \"o3-mini-2025-01-31\",\n \"o1\",\n \"o1-2024-12-17\",\n \"o1-mini\",\n \"o1-mini-2024-09-12\",\n // \"o1-preview\", - No tool support\n // \"o1-preview-2024-09-12\", - No tool support\n \"gpt-4.5-preview\",\n \"gpt-4.5-preview-2025-02-27\",\n \"gpt-4.1\",\n \"gpt-4.1-2025-04-14\",\n \"gpt-4.1-mini\",\n \"gpt-4.1-mini-2025-04-14\",\n \"gpt-4.1-nano\",\n \"gpt-4.1-nano-2025-04-14\",\n \"gpt-4o\",\n \"gpt-4o-2024-05-13\",\n \"gpt-4o-2024-08-06\",\n \"gpt-4o-2024-11-20\",\n \"gpt-4o-audio-preview\",\n \"gpt-4o-audio-preview-2024-10-01\",\n \"gpt-4o-audio-preview-2024-12-17\",\n \"gpt-4o-search-preview\",\n \"gpt-4o-search-preview-2025-03-11\",\n \"gpt-4o-mini-search-preview\",\n \"gpt-4o-mini-search-preview-2025-03-11\",\n \"gpt-4o-mini\",\n \"gpt-4o-mini-2024-07-18\",\n // \"gpt-4-turbo\", - Legacy model\n // \"gpt-4-turbo-2024-04-09\", - Legacy model\n // \"gpt-4-turbo-preview\", - Legacy model\n // \"gpt-4-0125-preview\", - No image input support\n // \"gpt-4-1106-preview\", - No image input support\n // \"gpt-4\", - No image input support\n // \"gpt-4-0613\", - No image input support\n // \"gpt-3.5-turbo-0125\", - Legacy model\n // \"gpt-3.5-turbo\", - Legacy model\n // \"gpt-3.5-turbo-1106\", - Legacy model\n // \"chatgpt-4o-latest\", - No tool support\n]\n\ninterface SupportedModel {\n default: boolean\n model: string\n}\nexport const SupportedModels: Record<string, SupportedModel> = Object.fromEntries(\n [...AnthropicModels, ...GoogleModels, ...OpenAIModels].map((model) => [\n model,\n { default: model === DefaultModel, model } satisfies SupportedModel,\n ]),\n)\n\nexport function getDefaultModelName(): string {\n const model = Object.values(SupportedModels).find((model) => model.default)\n if (!model) {\n throw new Error(\"No default model found\")\n }\n return model.model\n}\n\nexport function getModel(modelId?: string): LanguageModelV1 {\n const unwrappedModelId = modelId ?? getDefaultModelName()\n // List of compatible Models\n if (AnthropicModels.includes(unwrappedModelId)) {\n return anthropic(unwrappedModelId)\n }\n if (GoogleModels.includes(unwrappedModelId)) {\n return google(unwrappedModelId)\n }\n if (OpenAIModels.includes(unwrappedModelId)) {\n return openai(unwrappedModelId)\n }\n throw new Error(`Unsupported model: ${unwrappedModelId}`)\n}\n","import { z } from \"zod\"\n\n/**\n * Message Part Schemas\n */\nconst BasePartSchema = z.object({\n id: z.string(),\n})\n\nexport const TextPartSchema = BasePartSchema.extend({\n type: z.literal(\"textPart\"),\n text: z.string(),\n})\nexport type TextPart = z.infer<typeof TextPartSchema>\n\nexport const ImageUrlPartSchema = BasePartSchema.extend({\n type: z.literal(\"imageUrlPart\"),\n url: z.string().url(),\n mimeType: z.string(),\n})\nexport type ImageUrlPart = z.infer<typeof ImageUrlPartSchema>\n\nexport const ImageInlinePartSchema = BasePartSchema.extend({\n type: z.literal(\"imageInlinePart\"),\n encodedData: z.string(),\n mimeType: z.string(),\n})\nexport type ImageInlinePart = z.infer<typeof ImageInlinePartSchema>\n\nexport const ImageBinaryPartSchema = BasePartSchema.extend({\n type: z.literal(\"imageBinaryPart\"),\n data: z.string(),\n mimeType: z.string(),\n})\nexport type ImageBinaryPart = z.infer<typeof ImageBinaryPartSchema>\n\nexport const FileUrlPartSchema = BasePartSchema.extend({\n type: z.literal(\"fileUrlPart\"),\n url: z.string().url(),\n mimeType: z.string(),\n})\nexport type FileUrlPart = z.infer<typeof FileUrlPartSchema>\n\nexport const FileInlinePartSchema = BasePartSchema.extend({\n type: z.literal(\"fileInlinePart\"),\n encodedData: z.string(),\n mimeType: z.string(),\n})\nexport type FileInlinePart = z.infer<typeof FileInlinePartSchema>\n\nexport const FileBinaryPartSchema = BasePartSchema.extend({\n type: z.literal(\"fileBinaryPart\"),\n data: z.string(),\n mimeType: z.string(),\n})\nexport type FileBinaryPart = z.infer<typeof FileBinaryPartSchema>\n\nexport const ToolCallPartSchema = BasePartSchema.extend({\n type: z.literal(\"toolCallPart\"),\n toolCallId: z.string(),\n toolName: z.string(),\n args: z.unknown(),\n})\nexport type ToolCallPart = z.infer<typeof ToolCallPartSchema>\n\nexport const ToolResultPartSchema = BasePartSchema.extend({\n type: z.literal(\"toolResultPart\"),\n toolCallId: z.string(),\n toolName: z.string(),\n contents: z.array(z.union([TextPartSchema, ImageInlinePartSchema])),\n isError: z.boolean().optional(),\n})\nexport type ToolResultPart = z.infer<typeof ToolResultPartSchema>\n\n/**\n * Message Schemas\n */\nconst BaseMessageSchema = z.object({\n id: z.string(),\n})\n\nexport const InstructionMessageSchema = BaseMessageSchema.extend({\n type: z.literal(\"instructionMessage\"),\n contents: z.array(TextPartSchema),\n cache: z.boolean().optional(),\n})\nexport type InstructionMessage = z.infer<typeof InstructionMessageSchema>\n\nexport const UserMessageSchema = BaseMessageSchema.extend({\n type: z.literal(\"userMessage\"),\n contents: z.array(\n z.union([\n TextPartSchema,\n ImageUrlPartSchema,\n ImageInlinePartSchema,\n ImageBinaryPartSchema,\n FileUrlPartSchema,\n FileInlinePartSchema,\n FileBinaryPartSchema,\n ]),\n ),\n cache: z.boolean().optional(),\n})\nexport type UserMessage = z.infer<typeof UserMessageSchema>\n\nexport const ExpertMessageSchema = BaseMessageSchema.extend({\n type: z.literal(\"expertMessage\"),\n contents: z.array(z.union([TextPartSchema, ToolCallPartSchema])),\n cache: z.boolean().optional(),\n})\nexport type ExpertMessage = z.infer<typeof ExpertMessageSchema>\n\nexport const ToolMessageSchema = BaseMessageSchema.extend({\n type: z.literal(\"toolMessage\"),\n contents: z.array(ToolResultPartSchema),\n cache: z.boolean().optional(),\n})\nexport type ToolMessage = z.infer<typeof ToolMessageSchema>\n\nexport const MessageSchema = z.union([\n InstructionMessageSchema,\n UserMessageSchema,\n ExpertMessageSchema,\n ToolMessageSchema,\n])\nexport type Message = z.infer<typeof MessageSchema>\n","{\n \"name\": \"@perstack/runtime\",\n \"version\": \"0.0.20\",\n \"description\": \"PerStack Runtime\",\n \"author\": \"Wintermute Technologies, Inc.\",\n \"license\": \"Apache-2.0\",\n \"type\": \"module\",\n \"exports\": {\n \".\": \"./src/index.ts\"\n },\n \"publishConfig\": {\n \"exports\": {\n \".\": \"./dist/index.js\"\n },\n \"types\": \"./dist/index.d.ts\"\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"clean\": \"rm -rf dist\",\n \"dev\": \"tsup --watch --config ../../tsup.config.ts\",\n \"build\": \"npm run clean && tsup --config ../../tsup.config.ts\",\n \"prepublishOnly\": \"npm run clean && npm run build\"\n },\n \"dependencies\": {\n \"@ai-sdk/anthropic\": \"^1.2.12\",\n \"@ai-sdk/google\": \"^1.2.19\",\n \"@ai-sdk/openai\": \"^1.3.22\",\n \"@modelcontextprotocol/sdk\": \"^1.12.3\",\n \"@paralleldrive/cuid2\": \"^2.2.2\",\n \"ai\": \"^4.3.16\",\n \"smol-toml\": \"^1.3.4\",\n \"ts-dedent\": \"^2.2.0\",\n \"xstate\": \"^5.19.4\",\n \"zod\": \"^3.25.67\"\n },\n \"devDependencies\": {\n \"@tsconfig/node22\": \"^22.0.2\",\n \"@types/node\": \"^24.0.3\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.2.3\"\n },\n \"engines\": {\n \"node\": \">=22.0.0\"\n }\n}\n","import packageJson from \"../../package.json\" with { type: \"json\" }\nimport { defaultStoreEvent } from \"../default-store.js\"\nimport type { ToolMessage, UserMessage } from \"../schemas/messages.js\"\nimport type { EventForType, RunEvent } from \"../schemas/runtime.js\"\n\nconst log = console.info\nconst debug = console.debug\nconst header = (e: RunEvent) => {\n const t = new Date().toISOString()\n const stepNumber = e.stepNumber\n const key = e.expertKey\n return `${t} ${stepNumber} ${key}`\n}\nexport async function defaultEventListener(e: RunEvent) {\n await defaultStoreEvent(e)\n switch (e.type) {\n case \"startRun\": {\n log(`${header(e)} 🦜 Perstack@${packageJson.version} started`)\n const { inputMessages } = e\n for (const message of inputMessages) {\n if (message.type === \"userMessage\") {\n logUserMessage(message)\n } else if (message.type === \"toolMessage\") {\n logToolMessage(message)\n }\n }\n break\n }\n case \"startGeneration\": {\n log(`${header(e)} 🦜 Generating tool call`)\n break\n }\n case \"retry\": {\n logUsage(e)\n log(`${header(e)} 🦜 Retrying tool call generation`)\n break\n }\n case \"callTool\": {\n logUsage(e)\n log(`${header(e)} 🦜 Calling tool`)\n if (e.toolCall.skillName === \"@perstack/base\") {\n switch (e.toolCall.toolName) {\n case \"think\": {\n const thought = e.toolCall.args.thought\n log(`${header(e)} 💭 Thought Updated:`)\n debug(thought)\n break\n }\n case \"readPdfFile\": {\n const path = e.toolCall.args.path\n log(`${header(e)} 📄 Reading PDF: ${path}`)\n break\n }\n case \"readImageFile\": {\n const path = e.toolCall.args.path\n log(`${header(e)} 🖼️ Reading Image: ${path}`)\n break\n }\n default: {\n log(`${header(e)} 🔧 Tool: ${e.toolCall.skillName}/${e.toolCall.toolName}`)\n log(`${header(e)} 🔧 Args: ${e.toolCall.args}`)\n break\n }\n }\n } else {\n log(`${header(e)} 🔧 Tool: ${e.toolCall.skillName}/${e.toolCall.toolName}`)\n log(`${header(e)} 🔧 Args: ${e.toolCall.args}`)\n }\n break\n }\n case \"callInteractiveTool\": {\n logUsage(e)\n log(`${header(e)} 🦜 Calling interactive tool`)\n log(`${header(e)} 🔧 Tool: ${e.toolCall.skillName}/${e.toolCall.toolName}`)\n log(`${header(e)} 🔧 Args: ${e.toolCall.args}`)\n break\n }\n case \"callDelegate\": {\n logUsage(e)\n log(`${header(e)} 🦜 Calling delegate`)\n log(`${header(e)} 🔧 Tool: ${e.toolCall.toolName}`)\n log(`${header(e)} 🔧 Args: ${e.toolCall.args}`)\n break\n }\n case \"resolveToolResult\": {\n log(`${header(e)} 🔧 Resolved Tool Result`)\n if (e.toolResult.skillName === \"@perstack/base\") {\n switch (e.toolResult.toolName) {\n case \"todo\": {\n const text = e.toolResult.result.find((r) => r.type === \"textPart\")?.text\n const { todos } = JSON.parse(text ?? \"{}\") as {\n todos: {\n id: number\n title: string\n completed: boolean\n }[]\n }\n log(`${header(e)} 📄 Todo:`)\n for (const todo of todos) {\n debug(`${todo.completed ? \"[x]\" : \"[ ]\"} ${todo.id}: ${todo.title}`)\n }\n break\n }\n default: {\n log(`${header(e)} 🔧 Tool: ${e.toolResult.skillName}/${e.toolResult.toolName}`)\n log(`${header(e)} 🔧 Result: ${e.toolResult.result}`)\n break\n }\n }\n } else {\n log(`${header(e)} 🔧 Tool: ${e.toolResult.skillName}/${e.toolResult.toolName}`)\n log(`${header(e)} 🔧 Result: ${e.toolResult.result}`)\n }\n break\n }\n case \"resolveThought\": {\n log(`${header(e)} 💭 Resolved Thought:`, e.toolResult)\n break\n }\n case \"resolvePdfFile\": {\n log(`${header(e)} 📄 Resolved PDF:`, e.toolResult)\n break\n }\n case \"resolveImageFile\": {\n log(`${header(e)} 🖼️ Resolved Image:`, e.toolResult)\n break\n }\n case \"attemptCompletion\": {\n log(`${header(e)} ✅ Attempting completion`)\n break\n }\n case \"completeRun\": {\n logUsage(e)\n log(`${header(e)} 🦜 Completing run`)\n log(`${header(e)} 🦜 Result:`, e.text)\n break\n }\n case \"stopRunByInteractiveTool\": {\n log(`${header(e)} 🦜 Stopping run by interactive tool`)\n break\n }\n case \"stopRunByDelegate\": {\n log(`${header(e)} 🦜 Stopping run by delegate`)\n break\n }\n case \"stopRunByExceededMaxSteps\": {\n log(`${header(e)} 🦜 Stopping run by exceeded max steps`)\n break\n }\n case \"continueToNextStep\": {\n log(`${header(e)} 🦜 Continuing to next step`)\n break\n }\n }\n}\n\nfunction logUserMessage(message: UserMessage) {\n const t = new Date().toISOString()\n const contents = message.contents\n for (const content of contents) {\n if (content.type === \"textPart\") {\n log(`${t} 💬 User: ${content.text}`)\n } else if (content.type === \"imageUrlPart\") {\n log(`${t} 🖼️ User: ${content.url}`)\n } else if (content.type === \"imageInlinePart\") {\n log(`${t} 🖼️ User: Inline image`)\n } else if (content.type === \"imageBinaryPart\") {\n log(`${t} 🖼️ User: Binary image`)\n } else if (content.type === \"fileUrlPart\") {\n log(`${t} 📄 User: ${content.url}`)\n } else if (content.type === \"fileInlinePart\") {\n log(`${t} 📄 User: Inline file`)\n } else if (content.type === \"fileBinaryPart\") {\n log(`${t} 📄 User: Binary file`)\n }\n }\n}\n\nfunction logToolMessage(message: ToolMessage) {\n const t = new Date().toISOString()\n const contents = message.contents\n for (const content of contents) {\n if (content.type === \"toolResultPart\") {\n const { contents } = content\n for (const content of contents) {\n if (content.type === \"textPart\") {\n log(`${t} 💬 Tool Result: ${content.text}`)\n } else if (content.type === \"imageInlinePart\") {\n log(`${t} 🖼️ Tool Result: Inline image`)\n }\n }\n }\n }\n}\n\nfunction logUsage(\n e: EventForType<\"retry\" | \"callTool\" | \"callInteractiveTool\" | \"callDelegate\" | \"completeRun\">,\n) {\n const usageByGeneration = [\n `In: ${e.usage.promptTokens.toLocaleString()}`,\n `Out: ${e.usage.completionTokens.toLocaleString()}`,\n `Total: ${e.usage.totalTokens.toLocaleString()}`,\n `Cache-read: ${e.usage.cacheReadInputTokens.toLocaleString()}`,\n `Cache-write: ${e.usage.cacheCreationInputTokens.toLocaleString()}`,\n ].join(\", \")\n log(`${header(e)} 📊 Tokens usage: ${usageByGeneration}`)\n const usageByRun = [\n `In: ${e.usage.promptTokens.toLocaleString()}`,\n `Out: ${e.usage.completionTokens.toLocaleString()}`,\n `Total: ${e.usage.totalTokens.toLocaleString()}`,\n `Cache-read: ${e.usage.cacheReadInputTokens.toLocaleString()}`,\n `Cache-write: ${e.usage.cacheCreationInputTokens.toLocaleString()}`,\n ].join(\", \")\n log(`${header(e)} 📊 Total usage: ${usageByRun}`)\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type { RunEvent } from \"../schemas/runtime.js\"\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 for (const listener of this.listeners) {\n await listener({\n ...event,\n id: createId(),\n timestamp: Date.now(),\n })\n }\n }\n}\n","import { z } from \"zod\"\nimport { InteractiveSkillSchema, McpSseSkillSchema, McpStdioSkillSchema } from \"./runtime.js\"\n\n/**\n * API Response Schemas\n */\nconst RegistryV1ExpertSchema = z.object({\n name: z.string(),\n version: z.string(),\n minRuntimeVersion: z.string(),\n description: z.string(),\n instruction: z.string(),\n skills: z.record(\n z.string(),\n z.discriminatedUnion(\"type\", [\n McpStdioSkillSchema.omit({ name: true }),\n McpSseSkillSchema.omit({ name: true }),\n InteractiveSkillSchema.omit({ name: true }),\n ]),\n ),\n delegates: z.array(z.string()),\n tags: z.array(z.string()),\n status: z.string(),\n owner: z.object({ name: z.string() }),\n createdAt: z.string().datetime(),\n updatedAt: z.string().datetime(),\n})\nexport const RegistryV1ExpertsGetResponseSchema = z.object({\n data: z.object({\n expert: RegistryV1ExpertSchema,\n }),\n})\nexport type RegistryV1ExpertsGetResponse = z.infer<typeof RegistryV1ExpertsGetResponseSchema>\n","import {\n type RegistryV1ExpertsGetResponse,\n RegistryV1ExpertsGetResponseSchema,\n} from \"./schemas/api-registry.js\"\n\nexport class Perstack {\n baseUrl: string\n registry: RegistryClientV1\n apiKey?: string\n\n constructor(params?: {\n baseUrl?: string\n apiKey?: string\n }) {\n this.baseUrl = params?.baseUrl ?? process.env.PERSTACK_API_BASE_URL ?? \"https://api.perstack.ai\"\n this.apiKey = params?.apiKey ?? process.env.PERSTACK_API_KEY\n\n this.registry = new RegistryClientV1(this)\n }\n}\n\nclass RegistryClientV1 {\n client: Perstack\n endpoint: string\n\n constructor(client: Perstack) {\n this.client = client\n this.endpoint = \"/api/registry/v1/experts\"\n }\n\n async get(expertKey: string): Promise<RegistryV1ExpertsGetResponse> {\n const safeExpertKey = encodeURIComponent(expertKey)\n const url = new URL(`${this.endpoint}/${safeExpertKey}`, this.client.baseUrl)\n const headers = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.client.apiKey}`,\n }\n const result = await fetch(url.toString(), { headers })\n if (!result.ok) {\n throw new Error(\n `Registry returned non-200 status code: ${result.status}, reason: ${result.statusText}`,\n )\n }\n const json = await result.json()\n return RegistryV1ExpertsGetResponseSchema.parse(json)\n }\n}\n","import { Perstack } from \"./api-clinent.js\"\nimport { type Expert, ExpertSchema } from \"./schemas/runtime.js\"\n\nexport async function resolveExpertToRun(\n expertKey: string,\n experts: Record<string, Expert>,\n): Promise<Expert> {\n if (experts[expertKey]) {\n return experts[expertKey]\n }\n const client = new Perstack()\n const { data } = await client.registry.get(expertKey)\n const expert = ExpertSchema.parse({\n ...data.expert,\n key: expertKey,\n })\n experts[expertKey] = expert\n return expert\n}\n","import { type ActorRefFrom, type SnapshotFrom, assign, setup } from \"xstate\"\nimport type { RunEvent, Step } from \"./schemas/runtime.js\"\nimport type { Checkpoint, RunSetting } from \"./schemas/runtime.js\"\nimport type { SkillManager } from \"./skill-manager.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 { resolvingImageFileLogic } from \"./states/resolving-image-file.js\"\nimport { resolvingPdfFileLogic } from \"./states/resolving-pdf-file.js\"\nimport { resolvingThoughtLogic } from \"./states/resolving-thought.js\"\nimport { resolvingToolResultLogic } from \"./states/resolving-tool-result.js\"\nimport { createEmptyUsage, sumUsage } from \"./usage.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, SkillManager>\n },\n context: {} as {\n setting: RunSetting\n step: Step\n checkpoint: Checkpoint\n eventListener: (event: RunEvent) => Promise<void>\n skillManagers: Record<string, SkillManager>\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: ({ event }) =>\n ({\n ...event.initialCheckpoint,\n messages: [...event.initialCheckpoint.messages, ...event.inputMessages],\n status: \"proceeding\",\n }) satisfies Checkpoint,\n step: ({ event }) =>\n ({\n stepNumber: event.initialCheckpoint.stepNumber,\n inputMessages: event.inputMessages,\n newMessages: [],\n usage: createEmptyUsage(),\n startedAt: event.timestamp,\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 },\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 usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n callTool: {\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 }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [event.newMessage],\n toolCall: event.toolCall,\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 }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [event.newMessage],\n toolCall: 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 }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [event.newMessage],\n toolCall: event.toolCall,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n },\n },\n\n CallingTool: {\n on: {\n resolveToolResult: {\n target: \"ResolvingToolResult\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResult: event.toolResult,\n }) satisfies Step,\n }),\n },\n resolveThought: {\n target: \"ResolvingThought\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResult: event.toolResult,\n }) satisfies Step,\n }),\n },\n resolvePdfFile: {\n target: \"ResolvingPdfFile\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResult: event.toolResult,\n }) satisfies Step,\n }),\n },\n resolveImageFile: {\n target: \"ResolvingImageFile\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResult: event.toolResult,\n }) satisfies Step,\n }),\n },\n attemptCompletion: {\n target: \"GeneratingRunResult\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResult: event.toolResult,\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 ResolvingPdfFile: {\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 ResolvingImageFile: {\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 completeRun: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => event.step,\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 }) => event.step,\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 }) => event.step,\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 ({\n ...event.step,\n inputMessages: undefined,\n }) satisfies Step,\n }),\n reenter: true,\n },\n stopRunByExceededMaxSteps: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) =>\n ({\n ...event.step,\n inputMessages: undefined,\n }) satisfies Step,\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 ResolvingPdfFile: resolvingPdfFileLogic,\n ResolvingImageFile: resolvingImageFileLogic,\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 { Client as McpClient } from \"@modelcontextprotocol/sdk/client/index.js\"\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\"\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\"\nimport { type CallToolResult, McpError } from \"@modelcontextprotocol/sdk/types.js\"\nimport { createId } from \"@paralleldrive/cuid2\"\nimport { type ToolSet, jsonSchema } from \"ai\"\nimport { ZodError } from \"zod\"\nimport type { FileInlinePart, ImageInlinePart, TextPart } from \"./schemas/messages.js\"\nimport type { Expert, InteractiveSkill, McpSseSkill, McpStdioSkill } from \"./schemas/runtime.js\"\nimport type {\n CallToolResultContent,\n DelegateSkillManagerParams,\n InteractiveSkillManagerParams,\n McpSkillManagerParams,\n Resource,\n SkillManagerParams,\n SkillType,\n ToolDefinition,\n} from \"./schemas/skill-manager.js\"\n\nexport class SkillManager {\n protected _toolDefinitions: ToolDefinition[] = []\n protected _initialized = false\n readonly name: string\n readonly type: SkillType\n readonly skill?: McpStdioSkill | McpSseSkill\n readonly interactiveSkill?: InteractiveSkill\n readonly expert?: Expert\n private _mcpClient?: McpClient\n private _params: SkillManagerParams\n\n constructor(params: SkillManagerParams) {\n this._params = params\n this.type = params.type\n switch (params.type) {\n case \"mcp\":\n this.name = params.skill.name\n this.skill = params.skill\n break\n case \"interactive\":\n this.name = params.interactiveSkill.name\n this.interactiveSkill = params.interactiveSkill\n break\n case \"delegate\":\n this.name = params.expert.name\n this.expert = params.expert\n break\n }\n }\n\n async init(): Promise<void> {\n switch (this._params.type) {\n case \"mcp\": {\n await this._initMcpSkill(this._params)\n break\n }\n case \"interactive\": {\n await this._initInteractiveSkill(this._params)\n break\n }\n case \"delegate\": {\n await this._initDelegate(this._params)\n break\n }\n }\n }\n\n private async _initMcpSkill(params: McpSkillManagerParams): Promise<void> {\n this._mcpClient = new McpClient({\n name: `${params.skill.name}-mcp-client`,\n version: \"1.0.0\",\n })\n switch (params.skill.type) {\n case \"mcpStdioSkill\": {\n if (!params.skill.command) {\n throw new Error(`Skill ${params.skill.name} has no command`)\n }\n const { command, args } = this._getCommandArgs(params.skill)\n const transport = new StdioClientTransport({\n command,\n args,\n env: Object.fromEntries(\n Object.entries(process.env)\n .filter(([_, value]) => value !== undefined && value !== \"\")\n .map<[string, string]>(([key, value]) => [key, value as string]),\n ),\n })\n await this._mcpClient.connect(transport)\n break\n }\n case \"mcpSseSkill\": {\n if (!params.skill.endpoint) {\n throw new Error(`Skill ${params.skill.name} has no endpoint`)\n }\n const transport = new SSEClientTransport(new URL(params.skill.endpoint))\n await this._mcpClient.connect(transport)\n break\n }\n }\n const { tools } = await this._mcpClient.listTools()\n this._toolDefinitions = tools.map((tool) => ({\n skillName: params.skill.name,\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n interactive: false,\n }))\n this._initialized = true\n }\n\n private _getCommandArgs(skill: McpStdioSkill): { command: string; args: string[] } {\n const { name, command, packageName, args } = skill\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 if (packageName && args && args.length > 0) {\n throw new Error(\n `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 if (command === \"npx\" && !newArgs.includes(\"-y\")) {\n newArgs = [\"-y\", ...newArgs]\n }\n return { command, args: newArgs }\n }\n\n private async _initInteractiveSkill(params: InteractiveSkillManagerParams): Promise<void> {\n this._toolDefinitions = Object.values(params.interactiveSkill.tools).map((tool) => ({\n skillName: params.interactiveSkill.name,\n name: tool.name,\n description: tool.description,\n inputSchema: JSON.parse(tool.inputJsonSchema),\n interactive: true,\n }))\n this._initialized = true\n }\n\n private async _initDelegate(params: DelegateSkillManagerParams): Promise<void> {\n this._toolDefinitions = [\n {\n skillName: params.expert.name,\n name: params.expert.name.split(\"/\").pop() ?? params.expert.name,\n description: params.expert.description,\n inputSchema: {\n type: \"object\",\n properties: { query: { type: \"string\" } },\n required: [\"query\"],\n },\n interactive: false,\n },\n ]\n this._initialized = true\n }\n\n async close(): Promise<void> {\n if (this._mcpClient) {\n await this._mcpClient.close()\n }\n }\n\n async getToolDefinitions(): Promise<ToolDefinition[]> {\n if (!this._initialized) {\n throw new Error(`${this.name} is not initialized`)\n }\n if (this._params.type === \"mcp\") {\n const omit = this._params.skill.omit ?? []\n const pick = this._params.skill.pick ?? []\n return this._toolDefinitions\n .filter((tool) => (omit.length > 0 ? !omit.includes(tool.name) : true))\n .filter((tool) => (pick.length > 0 ? pick.includes(tool.name) : true))\n }\n return this._toolDefinitions\n }\n\n async callTool(\n toolName: string,\n input: Record<string, unknown>,\n ): Promise<Array<TextPart | ImageInlinePart | FileInlinePart>> {\n switch (this._params.type) {\n case \"mcp\": {\n if (!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 this._convertToolResult(result, toolName, input)\n } catch (error) {\n return this._handleToolError(error, toolName)\n }\n }\n case \"interactive\": {\n return []\n }\n case \"delegate\": {\n return []\n }\n }\n }\n\n private _handleToolError(error: unknown, toolName: string): Array<TextPart> {\n if (error instanceof McpError) {\n return [\n {\n type: \"textPart\",\n text: `Error calling tool ${toolName}: ${error.message}`,\n id: createId(),\n },\n ]\n }\n if (error instanceof ZodError) {\n return [{ type: \"textPart\", text: `Invalid tool call arguments: ${error}`, id: createId() }]\n }\n throw error\n }\n\n private _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 return result.content\n .filter((part) => part.type !== \"audio\" && part.type !== \"resource_link\")\n .map((part) => this._convertPart(part as CallToolResultContent))\n }\n\n private _convertPart(part: CallToolResultContent): 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 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 case \"resource\":\n if (!part.resource) {\n throw new Error(\"Resource part must have resource content\")\n }\n return this._convertResource(part.resource)\n }\n }\n\n private _convertResource(resource: Resource): TextPart | FileInlinePart {\n if (!resource.mimeType) {\n throw new Error(`Resource ${JSON.stringify(resource)} has no mimeType`)\n }\n if (resource.text && typeof resource.text === \"string\") {\n return { type: \"textPart\", text: resource.text, id: createId() }\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 throw new Error(`Unsupported resource type: ${JSON.stringify(resource)}`)\n }\n}\n\nexport async function getSkillManagers(\n expert: Expert,\n experts: Record<string, Expert>,\n): Promise<Record<string, SkillManager>> {\n const skillManagers: Record<string, SkillManager> = {}\n const { skills } = expert\n if (!skills[\"@perstack/base\"]) {\n skills[\"@perstack/base\"] = {\n type: \"mcpStdioSkill\",\n name: \"@perstack/base\",\n description: \"The base skill for Perstack\",\n pick: [],\n omit: [],\n command: \"npx\",\n args: [\"-y\", \"@perstack/base\"],\n requiredEnv: [],\n }\n }\n const mcpSkillManagers = await Promise.all(\n Object.values(skills)\n .filter((skill) => skill.type === \"mcpStdioSkill\" || skill.type === \"mcpSseSkill\")\n .map(async (skill) => {\n const skillManager = new SkillManager({\n type: \"mcp\",\n skill,\n })\n await skillManager.init()\n return skillManager\n }),\n )\n const interactiveSkillManagers = await Promise.all(\n Object.values(skills)\n .filter((skill) => skill.type === \"interactiveSkill\")\n .map(async (interactiveSkill) => {\n const skillManager = new SkillManager({\n type: \"interactive\",\n interactiveSkill,\n })\n await skillManager.init()\n return skillManager\n }),\n )\n const delegateSkillManagers = await Promise.all(\n expert.delegates.map(async (delegateExpertName) => {\n const delegate = experts[delegateExpertName]\n const skillManager = new SkillManager({\n type: \"delegate\",\n expert: delegate,\n })\n await skillManager.init()\n return skillManager\n }),\n )\n for (const skillManager of mcpSkillManagers) {\n skillManagers[skillManager.name] = skillManager\n }\n for (const skillManager of interactiveSkillManagers) {\n skillManagers[skillManager.name] = skillManager\n }\n for (const skillManager of delegateSkillManagers) {\n skillManagers[skillManager.name] = skillManager\n }\n return skillManagers\n}\n\nexport async function closeSkillManagers(\n skillManagers: Record<string, SkillManager>,\n): Promise<void> {\n for (const skillManager of Object.values(skillManagers)) {\n await skillManager.close()\n }\n}\n\nexport async function getSkillManagerByToolName(\n skillManagers: Record<string, SkillManager>,\n toolName: string,\n): Promise<SkillManager> {\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(skillManagers: Record<string, SkillManager>): 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] = {\n description: toolDefinition.description,\n parameters: jsonSchema(toolDefinition.inputSchema),\n }\n }\n }\n return tools\n}\n\nexport function getEventTypeBySkillType(\n skillType: SkillType,\n): \"callTool\" | \"callInteractiveTool\" | \"callDelegate\" {\n switch (skillType) {\n case \"mcp\":\n return \"callTool\"\n case \"interactive\":\n return \"callInteractiveTool\"\n case \"delegate\":\n return \"callDelegate\"\n }\n}\n","import type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { type RunEvent, stopRunByDelegate } from \"../schemas/runtime.js\"\nimport { getSkillManagerByToolName } from \"../skill-manager.js\"\n\nexport async function callingDelegateLogic({\n setting,\n checkpoint,\n step,\n skillManagers,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step?.toolCall) {\n throw new Error(\"No tool call found\")\n }\n const { id, toolName, args } = step.toolCall\n const skillManager = await getSkillManagerByToolName(skillManagers, toolName)\n if (!skillManager || !skillManager.expert) {\n throw new Error(`Delegation error: skill manager \"${toolName}\" not found`)\n }\n if (!args || !args.query || typeof args.query !== \"string\") {\n throw new Error(\"Delegation error: query is undefined\")\n }\n return stopRunByDelegate(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByDelegate\",\n delegateTo: {\n expert: {\n key: skillManager.expert.key,\n name: skillManager.expert.name,\n version: skillManager.expert.version,\n },\n toolCallId: id,\n toolName,\n query: args.query,\n },\n },\n step: {\n ...step!,\n finishedAt: new Date().getTime(),\n },\n })\n}\n","import type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { type RunEvent, stopRunByInteractiveTool } from \"../schemas/runtime.js\"\n\nexport async function callingInteractiveToolLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n return stopRunByInteractiveTool(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByInteractiveTool\",\n },\n step: {\n ...step!,\n finishedAt: new Date().getTime(),\n },\n })\n}\n","import type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport {\n attemptCompletion,\n resolveImageFile,\n resolvePdfFile,\n resolveThought,\n resolveToolResult,\n} from \"../schemas/runtime.js\"\nimport type { RunEvent, ToolResult } from \"../schemas/runtime.js\"\nimport { getSkillManagerByToolName } from \"../skill-manager.js\"\n\nexport async function callingToolLogic({\n setting,\n checkpoint,\n step,\n skillManagers,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step?.toolCall) {\n throw new Error(\"No tool call found\")\n }\n const { id, skillName, toolName, args } = step.toolCall\n const skillManager = await getSkillManagerByToolName(skillManagers, toolName)\n if (skillManager.type !== \"mcp\") {\n throw new Error(`Incorrect SkillType, required MCP, got ${skillManager.type}`)\n }\n const result = await skillManager.callTool(toolName, args)\n const toolResult: ToolResult = { id, skillName, toolName, result }\n if (skillName === \"@perstack/base\") {\n if (toolName === \"think\") {\n return resolveThought(setting, checkpoint, { toolResult })\n }\n if (toolName === \"attemptCompletion\") {\n return attemptCompletion(setting, checkpoint, { toolResult })\n }\n if (toolName === \"readPdfFile\") {\n return resolvePdfFile(setting, checkpoint, { toolResult })\n }\n if (toolName === \"readImageFile\") {\n return resolveImageFile(setting, checkpoint, { toolResult })\n }\n }\n return resolveToolResult(setting, checkpoint, { toolResult })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { type RunEvent, continueToNextStep, stopRunByExceededMaxSteps } from \"../schemas/runtime.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: new Date().getTime(),\n },\n })\n }\n return continueToNextStep(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n },\n step: {\n ...step!,\n finishedAt: new Date().getTime(),\n },\n nextCheckpoint: {\n ...checkpoint,\n id: createId(),\n stepNumber: checkpoint.stepNumber + 1,\n },\n })\n}\n","import { generateText } from \"ai\"\nimport {\n createExpertMessage,\n createToolMessage,\n messageToCoreMessage,\n} from \"../messages/message.js\"\nimport { getModel } from \"../model.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { type RunEvent, completeRun } from \"../schemas/runtime.js\"\nimport { sumUsage, usageFromGenerateTextResult } from \"../usage.js\"\n\nexport async function generatingRunResultLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step?.toolCall || !step?.toolResult) {\n throw new Error(\"No tool call or tool result found\")\n }\n const { id, toolName } = step.toolCall\n const { result } = step.toolResult\n const toolMessage = createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: id,\n toolName,\n contents: result.filter(\n (part) => part.type === \"textPart\" || part.type === \"imageInlinePart\",\n ),\n },\n ])\n const model = getModel(setting.model)\n const { messages } = checkpoint\n const generationResult = await generateText({\n model,\n messages: [...messages, toolMessage].map(messageToCoreMessage),\n temperature: setting.temperature,\n maxRetries: setting.maxRetries,\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 status: \"completed\",\n },\n step: {\n ...step!,\n newMessages: [...step!.newMessages, ...newMessages],\n finishedAt: new Date().getTime(),\n usage: sumUsage(step!.usage, usage),\n },\n text,\n usage,\n })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type {\n CoreAssistantMessage,\n FilePart as CoreFilePart,\n ImagePart as CoreImagePart,\n CoreMessage,\n CoreSystemMessage,\n TextPart as CoreTextPart,\n ToolCallPart as CoreToolCallPart,\n CoreToolMessage,\n ToolResultPart as CoreToolResultPart,\n CoreUserMessage,\n} from \"ai\"\nimport { dedent } from \"ts-dedent\"\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 \"../schemas/messages.js\"\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}\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}\nexport function createToolMessage(\n contents: Array<\n Omit<ToolResultPart, \"id\" | \"contents\"> & {\n contents: Array<Omit<TextPart, \"id\"> | Omit<ImageInlinePart, \"id\">>\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): CoreMessage {\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): CoreSystemMessage[\"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\"]): CoreUserMessage[\"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 }\n })\n}\nfunction expertContentsToCoreContent(\n contents: ExpertMessage[\"contents\"],\n): CoreAssistantMessage[\"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 }\n })\n}\nfunction toolContentsToCoreContent(contents: ToolMessage[\"contents\"]): CoreToolMessage[\"content\"] {\n return contents.map((part) => {\n switch (part.type) {\n case \"toolResultPart\":\n return toolResultPartToCoreToolResultPart(part)\n }\n })\n}\nfunction textPartToCoreTextPart(part: TextPart): CoreTextPart {\n return {\n type: \"text\",\n text: part.text,\n }\n}\nfunction imageUrlPartToCoreImagePart(part: ImageUrlPart): CoreImagePart {\n return {\n type: \"image\",\n image: part.url,\n mimeType: part.mimeType,\n }\n}\nfunction imageInlinePartToCoreImagePart(part: ImageInlinePart): CoreImagePart {\n return {\n type: \"image\",\n image: part.encodedData,\n mimeType: part.mimeType,\n }\n}\nfunction imageBinaryPartToCoreImagePart(part: ImageBinaryPart): CoreImagePart {\n return {\n type: \"image\",\n image: part.data,\n mimeType: part.mimeType,\n }\n}\nfunction fileUrlPartToCoreFilePart(part: FileUrlPart): CoreFilePart {\n return {\n type: \"file\",\n data: part.url,\n mimeType: part.mimeType,\n }\n}\nfunction fileInlinePartToCoreFilePart(part: FileInlinePart): CoreFilePart {\n return {\n type: \"file\",\n data: part.encodedData,\n mimeType: part.mimeType,\n }\n}\nfunction fileBinaryPartToCoreFilePart(part: FileBinaryPart): CoreFilePart {\n return {\n type: \"file\",\n data: part.data,\n mimeType: part.mimeType,\n }\n}\nfunction toolCallPartToCoreToolCallPart(part: ToolCallPart): CoreToolCallPart {\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n args: part.args,\n }\n}\nfunction toolResultPartToCoreToolResultPart(part: ToolResultPart): CoreToolResultPart {\n return {\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n result: part.contents,\n experimental_content: part.contents.map((part) => {\n switch (part.type) {\n case \"textPart\":\n return {\n type: \"text\",\n text: part.text,\n }\n case \"imageInlinePart\":\n return {\n type: \"image\",\n data: part.encodedData,\n mimeType: part.mimeType,\n }\n }\n }),\n isError: part.isError,\n }\n}\n","import type { GenerateTextResult, ToolSet } from \"ai\"\nimport type { Usage } from \"./schemas/runtime.js\"\n\nexport function createEmptyUsage(): Usage {\n return {\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n cacheCreationInputTokens: 0,\n cacheReadInputTokens: 0,\n }\n}\n\nexport function usageFromGenerateTextResult(result: GenerateTextResult<ToolSet, never>): Usage {\n let cacheCreationInputTokens = 0\n let cacheReadInputTokens = 0\n if (result.providerMetadata?.anthropic) {\n const anthropicMetadata = result.providerMetadata.anthropic as {\n cacheCreationInputTokens?: number\n cacheReadInputTokens?: number\n }\n cacheCreationInputTokens = anthropicMetadata.cacheCreationInputTokens || 0\n cacheReadInputTokens = anthropicMetadata.cacheReadInputTokens || 0\n }\n return {\n promptTokens: result.usage.promptTokens,\n completionTokens: result.usage.completionTokens,\n totalTokens: result.usage.totalTokens,\n cacheCreationInputTokens,\n cacheReadInputTokens,\n }\n}\n\nexport function sumUsage(a: Usage, b: Usage): Usage {\n return {\n promptTokens: a.promptTokens + b.promptTokens,\n completionTokens: a.completionTokens + b.completionTokens,\n totalTokens: a.totalTokens + b.totalTokens,\n cacheCreationInputTokens: a.cacheCreationInputTokens + b.cacheCreationInputTokens,\n cacheReadInputTokens: a.cacheReadInputTokens + b.cacheReadInputTokens,\n }\n}\n","import { generateText } from \"ai\"\nimport {\n createExpertMessage,\n createToolMessage,\n createUserMessage,\n messageToCoreMessage,\n} from \"../messages/message.js\"\nimport { getModel } from \"../model.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport type { TextPart, ToolCallPart } from \"../schemas/messages.js\"\nimport {\n type RunEvent,\n callDelegate,\n callInteractiveTool,\n callTool,\n retry,\n} from \"../schemas/runtime.js\"\nimport { getSkillManagerByToolName, getToolSet } from \"../skill-manager.js\"\nimport { usageFromGenerateTextResult } from \"../usage.js\"\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)\n const 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 })\n const usage = usageFromGenerateTextResult(result)\n const { text, toolCalls, finishReason } = result\n const toolCall = toolCalls[0]\n if (!toolCall) {\n return retry(setting, checkpoint, {\n newMessages: [\n createExpertMessage(text ? [{ type: \"textPart\", text }] : []),\n createUserMessage([\n {\n type: \"textPart\",\n text: \"You must generate a tool call. Try again.\",\n },\n ]),\n ],\n usage,\n })\n }\n if (finishReason !== \"tool-calls\") {\n switch (finishReason) {\n case \"length\": {\n return retry(setting, checkpoint, {\n newMessages: [\n createExpertMessage([\n {\n type: \"toolCallPart\",\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n args: toolCall.args,\n },\n ]),\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n contents: [{ type: \"textPart\", text: \"Error: Generation length exceeded\" }],\n },\n ]),\n ],\n usage,\n })\n }\n default:\n throw new Error(`Unexpected finish reason: ${finishReason}`)\n }\n }\n const contents: Array<Omit<TextPart, \"id\"> | Omit<ToolCallPart, \"id\">> = [\n {\n type: \"toolCallPart\",\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n args: toolCall.args,\n },\n ]\n if (text) {\n contents.push({\n type: \"textPart\",\n text,\n })\n }\n const skillManager = await getSkillManagerByToolName(skillManagers, toolCall.toolName)\n const eventPayload = {\n newMessage: createExpertMessage(contents),\n toolCall: {\n id: toolCall.toolCallId,\n skillName: skillManager.name,\n toolName: toolCall.toolName,\n args: toolCall.args,\n },\n usage,\n }\n switch (skillManager.type) {\n case \"mcp\":\n return callTool(setting, checkpoint, eventPayload)\n case \"interactive\":\n return callInteractiveTool(setting, checkpoint, eventPayload)\n case \"delegate\":\n return callDelegate(setting, checkpoint, eventPayload)\n }\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport { dedent } from \"ts-dedent\"\nimport type { InstructionMessage } from \"../schemas/messages.js\"\nimport type { Expert } from \"../schemas/runtime.js\"\n\nconst metaInstruction = dedent`\n IMPORTANT:\n You are NOT an \"interactive\" AI agent.\n From the start of the agent loop until the completion of the task,\n YOU CANNOT RECEIVE ADDITIONAL RESPONSES TO QUESTIONS YOU ASK THE USER.\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 エージェントループの終了条件:\n 以下の条件に該当した場合は、**即座にattemptCompletionツールを呼び出してください**。\n エージェントループを終了しなければならない状況で、attemptCompletion以外のツールを呼び出すことは非常に危険です。\n 絶対に、何があってもこのルールは守るようにしてください。\n - タスクが完了した時\n - ユーザーの依頼があなたの専門外だった時\n - ユーザーが倫理的に不正な要求をした時\n - ユーザーの依頼が理解不能である時\n - ユーザーの依頼によって、セキュリティに危険が生じる恐れがある時\n - ユーザーの依頼によって、他人に迷惑をかける恐れがある時\n - ユーザーの依頼に、不適切な言葉や、性的な内容が含まれている時\n\n Rules for requests outside your area of expertise:\n - Tell your area of expertise to the user in final results\n - In the Final Result, you can show the user how to create an expert that they might need; This can be done by running the \\`parrot new\\` (no arguments required) command.\n\n 全般的なタスクの取り組み方や、アウトプット品質に関するルール:\n - ユーザはあなたのことを、その分野の『専門家』であると認識しています\n - 専門家である以上、タスクの実行においては、徹底した考察を行いつつ、確証を持って一つ一つのタスクを実行してください\n - 専門家である以上、ユーザーが期待する以上の品質のアウトプットを行ってください\n\n Environment information:\n - Current time is ${new Date().toISOString()}\n - Current working directory is ${process.cwd()}\n`\n\nexport function createInstructionMessage(\n expert: Expert,\n experts: Record<string, Expert>,\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 ${metaInstruction}\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 { createInstructionMessage } from \"../messages/instruction-message.js\"\nimport { createToolMessage, createUserMessage } from \"../messages/message.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { type RunEvent, startRun } from \"../schemas/runtime.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),\n createUserMessage([{ type: \"textPart\", text: setting.input.text }]),\n ],\n })\n }\n case \"proceeding\": {\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 case \"stoppedByInteractiveTool\": {\n if (!setting.input.interactiveToolCallResult) {\n throw new Error(\"Interactive tool call result is undefined\")\n }\n return startRun(setting, checkpoint, {\n initialCheckpoint: checkpoint,\n inputMessages: [\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: setting.input.interactiveToolCallResult.toolCallId,\n toolName: setting.input.interactiveToolCallResult.toolName,\n contents: [{ type: \"textPart\", text: setting.input.interactiveToolCallResult.text }],\n },\n ]),\n ],\n })\n }\n default:\n throw new Error(`Unexpected checkpoint status: ${checkpoint.status}`)\n }\n}\n","import type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { type RunEvent, startGeneration } from \"../schemas/runtime.js\"\n\nexport async function preparingForStepLogic({\n setting,\n checkpoint,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n // TODO: add logic to count tokens and check if it's exceeded the limit\n return startGeneration(setting, checkpoint, {\n messages: checkpoint.messages,\n })\n}\n","import { readFile } from \"node:fs/promises\"\nimport { createToolMessage } from \"../messages/message.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport type { ImageInlinePart, TextPart } from \"../schemas/messages.js\"\nimport { type RunEvent, finishToolCall } from \"../schemas/runtime.js\"\n\ntype ReadImageFileResult = { path: string; mimeType: string; size: number }\nexport async function resolvingImageFileLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step?.toolCall || !step?.toolResult) {\n throw new Error(\"No tool call or tool result found\")\n }\n const { id, toolName } = step.toolCall\n const { result } = step.toolResult\n const textParts = result.filter((part) => part.type === \"textPart\")\n const files: (Omit<ImageInlinePart, \"id\"> | Omit<TextPart, \"id\">)[] = []\n for (const textPart of textParts) {\n let imageInfo: ReadImageFileResult | undefined\n try {\n imageInfo = JSON.parse(textPart.text) as ReadImageFileResult\n } catch {\n files.push({\n type: \"textPart\",\n text: textPart.text,\n })\n continue\n }\n const { path, mimeType, size } = imageInfo\n const file = await readFile(path).then((buffer) => ({\n encodedData: buffer.toString(\"base64\"),\n mimeType,\n size,\n }))\n files.push({\n type: \"imageInlinePart\",\n encodedData: file.encodedData,\n mimeType: file.mimeType,\n })\n }\n return finishToolCall(setting, checkpoint, {\n newMessages: [\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: id,\n toolName,\n contents: files,\n },\n ]),\n ],\n })\n}\n","import { readFile } from \"node:fs/promises\"\nimport { createToolMessage, createUserMessage } from \"../messages/message.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport type { FileInlinePart, TextPart } from \"../schemas/messages.js\"\nimport { type RunEvent, finishToolCall } from \"../schemas/runtime.js\"\n\ntype ReadPdfFileResult = { path: string; mimeType: string; size: number }\nexport async function resolvingPdfFileLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step?.toolCall || !step?.toolResult) {\n throw new Error(\"No tool call or tool result found\")\n }\n const { id, toolName } = step.toolCall\n const { result } = step.toolResult\n const textParts = result.filter((part) => part.type === \"textPart\")\n const files: (Omit<FileInlinePart, \"id\"> | Omit<TextPart, \"id\">)[] = []\n for (const textPart of textParts) {\n let pdfInfo: ReadPdfFileResult | undefined\n try {\n pdfInfo = JSON.parse(textPart.text) as ReadPdfFileResult\n } catch {\n files.push({\n type: \"textPart\",\n text: textPart.text,\n })\n continue\n }\n const { path, mimeType, size } = pdfInfo\n const file = await readFile(path).then((buffer) => ({\n encodedData: buffer.toString(\"base64\"),\n mimeType,\n size,\n }))\n files.push({\n type: \"fileInlinePart\",\n encodedData: file.encodedData,\n mimeType: file.mimeType,\n })\n }\n return finishToolCall(setting, checkpoint, {\n newMessages: [\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: id,\n toolName,\n contents: [\n {\n type: \"textPart\",\n text: \"User uploads PDF file as follows.\",\n },\n ],\n },\n ]),\n createUserMessage(files),\n ],\n })\n}\n","import { createToolMessage } from \"../messages/message.js\"\nimport type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport { type RunEvent, finishToolCall } from \"../schemas/runtime.js\"\n\nexport async function resolvingToolResultLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step?.toolCall || !step?.toolResult) {\n throw new Error(\"No tool call or tool result found\")\n }\n const { id, toolName } = step.toolCall\n const { result } = step.toolResult\n return finishToolCall(setting, checkpoint, {\n newMessages: [\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: id,\n toolName,\n contents: result.filter(\n (part) => part.type === \"textPart\" || part.type === \"imageInlinePart\",\n ),\n },\n ]),\n ],\n })\n}\n","import type { RunSnapshot } from \"../runtime-state-machine.js\"\nimport type { RunEvent } from \"../schemas/runtime.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 { z } from \"zod\"\n\n/**\n * perstack.toml config schema\n */\nexport const PerstackConfigSchema = z.object({\n model: z.string().optional(),\n temperature: z.number().optional(),\n maxSteps: z.number().optional(),\n maxRetries: z.number().optional(),\n experts: z\n .record(\n z.string(),\n z.object({\n version: z.string().optional(),\n minRuntimeVersion: z.string().optional(),\n description: z.string().optional(),\n instruction: z.string(),\n skills: z\n .record(\n z.string(),\n z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"mcpStdioSkill\"),\n description: z.string().optional(),\n rule: z.string().optional(),\n pick: z.array(z.string()).optional(),\n omit: z.array(z.string()).optional(),\n command: z.string(),\n packageName: z.string().optional(),\n args: z.array(z.string()).optional(),\n requiredEnv: z.array(z.string()).optional(),\n }),\n z.object({\n type: z.literal(\"mcpSseSkill\"),\n description: z.string().optional(),\n rule: z.string().optional(),\n pick: z.array(z.string()).optional(),\n omit: z.array(z.string()).optional(),\n endpoint: z.string(),\n }),\n z.object({\n type: z.literal(\"interactiveSkill\"),\n description: z.string().optional(),\n rule: z.string().optional(),\n tools: z.record(\n z.string(),\n z.object({\n description: z.string().optional(),\n inputJsonSchema: z.string(),\n }),\n ),\n }),\n ]),\n )\n .optional(),\n delegates: z.array(z.string()).optional(),\n }),\n )\n .optional(),\n})\nexport type PerstackConfig = z.infer<typeof PerstackConfigSchema>\n","import { z } from \"zod\"\n\n/**\n * Run command input schema\n */\nexport const RunInputSchema = z.object({\n expertKey: z.string(),\n query: z.string(),\n options: z.object({\n config: z.string().optional(),\n model: z.string().optional(),\n temperature: z\n .string()\n .optional()\n .transform((value) => {\n if (value === undefined) {\n return undefined\n }\n const parsedValue = Number.parseFloat(value)\n if (Number.isNaN(parsedValue)) {\n return undefined\n }\n return parsedValue\n }),\n maxSteps: z\n .string()\n .optional()\n .transform((value) => {\n if (value === undefined) {\n return undefined\n }\n const parsedValue = Number.parseInt(value)\n if (Number.isNaN(parsedValue)) {\n return undefined\n }\n return parsedValue\n }),\n maxRetries: z\n .string()\n .optional()\n .transform((value) => {\n if (value === undefined) {\n return undefined\n }\n const parsedValue = Number.parseInt(value)\n if (Number.isNaN(parsedValue)) {\n return undefined\n }\n return parsedValue\n }),\n runId: z.string().optional(),\n }),\n})\n"],"mappings":"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","names":["mkdir","readFile","writeFile","createId","z","model","z","path","contents","content","createId","z","z","createId","createId","createId","createId","part","generateText","generateText","createId","dedent","readFile","path","readFile","readFile","path","readFile","z","createId","checkpoint","skillManagers","readFile","writeFile","mkdir","z"]}