{"version":3,"sources":["../../src/utils.ts","../../src/tools/index.ts","../../src/tools/tool.ts","../../src/tools/registry.ts","../../src/verify/patterns.ts","../../src/tools/verifier.ts","../../src/tools/orchestrator.ts","../../src/tools/bash.ts","../../src/tools/file-read.ts","../../src/tools/file-write.ts","../../src/tools/file-edit.ts","../../src/tools/fuzzy-edit.ts","../../src/tools/glob.ts","../../src/tools/grep.ts","../../src/tools/web-fetch.ts"],"sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n\nexport function globToRegExp(pattern: string): RegExp {\n  const parts = pattern.split(\"/\");\n  let regex = \"\";\n\n  for (let i = 0; i < parts.length; i++) {\n    const part = parts[i];\n    if (part === \"**\") {\n      regex += \"(?:[^/]*(?:\\\\/|$))*\";\n    } else {\n      const escaped = part\n        .replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\n        .replace(/\\*/g, \"[^/]*\")\n        .replace(/\\?/g, \"[^/]\");\n      regex += escaped + \"\\\\/\";\n    }\n  }\n\n  regex = regex.replace(/\\\\\\//g, \"/\").replace(/\\/$/, \"\");\n  return new RegExp(`(^|/)${regex}(/|$)`);\n}\n\nexport interface WalkEntry {\n  path: string;\n  stat: fs.Stats;\n}\n\nexport async function walkDir(dir: string, options?: { maxDepth?: number; followSymlinks?: boolean }): Promise<WalkEntry[]> {\n  const maxDepth = options?.maxDepth ?? Infinity;\n  const followSymlinks = options?.followSymlinks ?? false;\n  const results: WalkEntry[] = [];\n\n  async function walk(current: string, depth: number): Promise<void> {\n    if (depth > maxDepth) return;\n\n    let entries: fs.Dirent[];\n    try {\n      entries = await fs.promises.readdir(current, { withFileTypes: true });\n    } catch {\n      return;\n    }\n\n    for (const entry of entries) {\n      const fullPath = path.join(current, entry.name);\n\n      if (entry.name === \"node_modules\" || entry.name === \".git\") continue;\n\n      try {\n        let stat: fs.Stats;\n        if (entry.isSymbolicLink() && !followSymlinks) continue;\n        stat = await fs.promises.stat(fullPath);\n\n        if (stat.isFile()) {\n          results.push({ path: fullPath, stat });\n        } else if (stat.isDirectory()) {\n          await walk(fullPath, depth + 1);\n        }\n      } catch {\n        continue;\n      }\n    }\n  }\n\n  await walk(dir, 0);\n  return results;\n}\n","export { defineTool, defineToolFromClass } from './tool.js';\nexport type { Tool, ToolExecuteOptions, APIToolDefinition } from './tool.js';\nexport { ToolRegistry } from './registry.js';\nexport { orchestrateTools, ToolVerifier } from './orchestrator.js';\nexport type { ToolExecutionResult, VerificationCheck, VerificationResult, VerificationRule, VerificationContext, OrchestrateOptions } from './orchestrator.js';\nexport { BashTool } from './bash.js';\nexport { FileReadTool } from './file-read.js';\nexport { FileWriteTool } from './file-write.js';\nexport { FileEditTool } from './file-edit.js';\nexport { GlobTool } from './glob.js';\nexport { GrepTool } from './grep.js';\nexport { WebFetchTool } from './web-fetch.js';\nexport { fuzzyReplace, fuzzyContains, FuzzyEditError } from './fuzzy-edit.js';\n","import type { ZodSchema } from 'zod';\nimport type { ToolContext } from '../types.js';\n\n/** JSON Schema representation of a tool for LLM function calling APIs. */\nexport interface APIToolDefinition {\n  name: string;\n  description: string;\n  input_schema: Record<string, unknown>;\n}\n\n/** Core tool abstraction that every tool must implement. */\nexport interface Tool<P = unknown> {\n  readonly name: string;\n  readonly description: string;\n  readonly inputSchema: ZodSchema<P>;\n  readonly isReadOnly: boolean;\n  readonly isConcurrencySafe: boolean;\n\n  execute(input: P, context: ToolContext): Promise<string>;\n  toAPI(): APIToolDefinition;\n  toString(input: P): string;\n}\n\n/** Configuration object for defining a tool. */\nexport interface ToolExecuteOptions<P = unknown> {\n  name: string;\n  description: string;\n  inputSchema: ZodSchema<P>;\n  isReadOnly?: boolean;\n  isConcurrencySafe?: boolean;\n  execute: (input: P, context: ToolContext) => Promise<string>;\n}\n\nfunction zodToJsonSchema(schema: unknown): Record<string, unknown> {\n  const s = schema as { _def: Record<string, unknown> };\n  const def = s._def;\n  const typeName = def.typeName as string;\n  const description = def.description as string | undefined;\n\n  const base: Record<string, unknown> = {};\n  if (description) base.description = description;\n\n  switch (typeName) {\n    case 'ZodString':\n      return { ...base, type: 'string' };\n    case 'ZodNumber':\n      return { ...base, type: 'number' };\n    case 'ZodBoolean':\n      return { ...base, type: 'boolean' };\n    case 'ZodNull':\n      return { ...base, type: 'null' };\n    case 'ZodArray': {\n      const items = zodToJsonSchema(def.element);\n      return { ...base, type: 'array', items };\n    }\n    case 'ZodObject': {\n      const shapeFn = def.shape as () => Record<string, unknown>;\n      const shape = shapeFn();\n      const properties: Record<string, unknown> = {};\n      const required: string[] = [];\n      for (const [key, value] of Object.entries(shape)) {\n        properties[key] = zodToJsonSchema(value);\n        const propDef = (value as { _def: Record<string, unknown> })._def;\n        if (\n          propDef.typeName !== 'ZodOptional' &&\n          propDef.typeName !== 'ZodNullish' &&\n          propDef.typeName !== 'ZodDefault'\n        ) {\n          required.push(key);\n        }\n      }\n      const result: Record<string, unknown> = { ...base, type: 'object', properties };\n      if (required.length > 0) result.required = required;\n      return result;\n    }\n    case 'ZodEnum':\n      return { ...base, enum: def.values };\n    case 'ZodLiteral':\n      return { ...base, const: def.value };\n    case 'ZodUnion': {\n      const options = (def.options as unknown[]).map((o) => zodToJsonSchema(o));\n      return { ...base, anyOf: options };\n    }\n    case 'ZodDiscriminatedUnion': {\n      const options = (def.options as unknown[]).map((o) => zodToJsonSchema(o));\n      return { ...base, anyOf: options };\n    }\n    case 'ZodOptional':\n      return zodToJsonSchema(def.innerType);\n    case 'ZodNullable': {\n      const inner = zodToJsonSchema(def.innerType);\n      inner.nullable = true;\n      return inner;\n    }\n    case 'ZodNullish': {\n      const inner = zodToJsonSchema(def.innerType);\n      inner.nullable = true;\n      return inner;\n    }\n    case 'ZodDefault':\n      return zodToJsonSchema(def.innerType);\n    case 'ZodRecord': {\n      const valueSchema = zodToJsonSchema(def.valueType);\n      return { ...base, type: 'object', additionalProperties: valueSchema };\n    }\n    case 'ZodTuple': {\n      const items = (def.items as unknown[]).map((o) => zodToJsonSchema(o));\n      return { ...base, type: 'array', items, minItems: items.length, maxItems: items.length };\n    }\n    case 'ZodEffects': {\n      return zodToJsonSchema(def.innerType);\n    }\n    case 'ZodAny':\n      return {};\n    case 'ZodUnknown':\n      return {};\n    case 'ZodVoid':\n      return { ...base, type: 'null' };\n    case 'ZodNever':\n      return { ...base, not: {} };\n    default:\n      return { ...base, type: 'string' };\n  }\n}\n\n/** Define a tool from a configuration object. */\nexport function defineTool<P = unknown>(config: ToolExecuteOptions<P>): Tool<P> {\n  const tool: Tool<P> = {\n    name: config.name,\n    description: config.description,\n    inputSchema: config.inputSchema,\n    isReadOnly: config.isReadOnly ?? false,\n    isConcurrencySafe: config.isConcurrencySafe ?? false,\n    execute: config.execute,\n    toAPI(): APIToolDefinition {\n      return {\n        name: config.name,\n        description: config.description,\n        input_schema: zodToJsonSchema(config.inputSchema),\n      };\n    },\n    toString(input: P): string {\n      const entries = Object.entries(input as Record<string, unknown>)\n        .map(([k, v]) => {\n          if (typeof v === 'string') return `${k}: \"${v}\"`;\n          if (v === undefined) return `${k}: undefined`;\n          if (v === null) return `${k}: null`;\n          return `${k}: ${String(v)}`;\n        })\n        .join(', ');\n      return `${config.name}({ ${entries} })`;\n    },\n  };\n  return tool;\n}\n\n/** Wrap a class-based tool into the standard Tool interface. */\nexport function defineToolFromClass(ctor: new () => Tool): Tool {\n  const instance = new ctor();\n  return {\n    name: instance.name,\n    description: instance.description,\n    inputSchema: instance.inputSchema,\n    isReadOnly: instance.isReadOnly,\n    isConcurrencySafe: instance.isConcurrencySafe,\n    execute: (input, context) => instance.execute(input, context),\n    toAPI: () => instance.toAPI(),\n    toString: (input) => instance.toString(input),\n  };\n}\n","import type { Tool, APIToolDefinition } from './tool.js';\n\n/** Registry for managing tool lookup and deduplication. */\nexport class ToolRegistry {\n  private readonly tools = new Map<string, Tool>();\n\n  constructor(tools?: Tool[]) {\n    if (tools) {\n      for (const tool of tools) {\n        this.add(tool);\n      }\n    }\n  }\n\n  /** Add a tool to the registry. Duplicate names are ignored (first one wins). */\n  add(tool: Tool): void {\n    if (this.tools.has(tool.name)) {\n      console.warn(`[ToolRegistry] Duplicate tool \"${tool.name}\" ignored (first one wins)`);\n      return;\n    }\n    this.tools.set(tool.name, tool);\n  }\n\n  /** Get a tool by name. */\n  get(name: string): Tool | undefined {\n    return this.tools.get(name);\n  }\n\n  /** Check if a tool exists by name. */\n  has(name: string): boolean {\n    return this.tools.has(name);\n  }\n\n  /** Find tool by case-insensitive name. Returns undefined if not found. */\n  findCaseInsensitive(name: string): string | undefined {\n    const lower = name.toLowerCase();\n    if (this.tools.has(name)) return name;\n    for (const key of this.tools.keys()) {\n      if (key.toLowerCase() === lower) return key;\n    }\n    return undefined;\n  }\n\n  /** List all registered tool names. */\n  listNames(): string[] {\n    return Array.from(this.tools.keys());\n  }\n\n  /** Get all registered tools. */\n  getAll(): Tool[] {\n    return Array.from(this.tools.values());\n  }\n\n  /** Get all tools in API format, sorted by name for cache stability. */\n  getAPI(): APIToolDefinition[] {\n    return this.getAll()\n      .sort((a, b) => a.name.localeCompare(b.name))\n      .map((t) => t.toAPI());\n  }\n\n  /** Number of registered tools. */\n  get size(): number {\n    return this.tools.size;\n  }\n}\n","export const DANGEROUS_PATTERNS: RegExp[] = [\n  /\\brm\\s+-rf\\s+\\//,\n  /\\bdd\\s+if=/,\n  /\\bformat\\s+[A-Z]:/i,\n  /\\bshutdown\\b/,\n  /\\breboot\\b/,\n  /\\bmkfs\\b/,\n  /\\b:\\s*\\(\\)\\s*\\{\\s*:\\s*\\|\\s*:\\s*&\\s*\\}\\s*;/,\n];\n\nexport const PATH_TRAVERSAL: RegExp[] = [\n  /\\.\\.\\//,\n  /\\.\\.\\\\/,\n];\n\nexport const SECRET_PATTERNS: RegExp[] = [\n  /(?:password|passwd|secret|token|api[_-]?key)\\s*[:=]\\s*[\"'][^\"']{8,}/i,\n  /sk-[a-zA-Z0-9]{20,}/,\n  /ghp_[a-zA-Z0-9]{30,}/,\n  /AKIA[A-Z0-9]{16}/,\n];\n\nexport const DESTRUCTIVE_COMMANDS: string[] = [\n  \"DROP TABLE\",\n  \"TRUNCATE\",\n  \"DELETE FROM\",\n];\n","export type VerificationSeverity = \"critical\" | \"warning\" | \"info\";\n\nexport interface VerificationCheck {\n  name: string;\n  passed: boolean;\n  severity: VerificationSeverity;\n  message: string;\n}\n\nexport interface VerificationRule {\n  name: string;\n  check: (toolName: string, input: Record<string, unknown>, context: VerificationContext) => VerificationCheck;\n}\n\nexport interface VerificationContext {\n  turnCount: number;\n  previousToolCalls: Array<{ name: string; input: Record<string, unknown> }>;\n  cwd: string;\n}\n\nexport interface VerificationResult {\n  approved: boolean;\n  checks: VerificationCheck[];\n  rejectedBy?: string;\n  reason?: string;\n}\n\nimport { DANGEROUS_PATTERNS, PATH_TRAVERSAL, SECRET_PATTERNS, DESTRUCTIVE_COMMANDS } from \"../verify/patterns.js\";\n\nexport class ToolVerifier {\n  private rules: VerificationRule[] = [];\n\n  constructor() {\n    this.rules = [\n      { name: \"dangerous_command\", check: checkDangerousCommand },\n      { name: \"path_traversal\", check: checkPathTraversal },\n      { name: \"secret_exposure\", check: checkSecretExposure },\n      { name: \"destructive_sql\", check: checkDestructiveSQL },\n      { name: \"repetitive_call\", check: checkRepetitiveCall },\n      { name: \"write_binary\", check: checkWriteBinary },\n    ];\n  }\n\n  addRule(rule: VerificationRule): void {\n    this.rules.push(rule);\n  }\n\n  verify(\n    toolName: string,\n    input: Record<string, unknown>,\n    context: VerificationContext,\n  ): VerificationResult {\n    const checks: VerificationCheck[] = [];\n\n    for (const rule of this.rules) {\n      const check = rule.check(toolName, input, context);\n      checks.push(check);\n    }\n\n    const criticalFailures = checks.filter(\n      (c) => !c.passed && c.severity === \"critical\",\n    );\n\n    if (criticalFailures.length > 0) {\n      return {\n        approved: false,\n        checks,\n        rejectedBy: criticalFailures[0].name,\n        reason: criticalFailures.map((c) => c.message).join(\"; \"),\n      };\n    }\n\n    return { approved: true, checks };\n  }\n}\n\nfunction checkDangerousCommand(\n  toolName: string,\n  input: Record<string, unknown>,\n): VerificationCheck {\n  if (toolName !== \"bash\") {\n    return { name: \"dangerous_command\", passed: true, severity: \"info\", message: \"Not a shell command\" };\n  }\n\n  const command = String(input.command ?? input.cmd ?? \"\");\n  for (const pattern of DANGEROUS_PATTERNS) {\n    if (pattern.test(command)) {\n      return {\n        name: \"dangerous_command\",\n        passed: false,\n        severity: \"critical\",\n        message: `Dangerous command pattern detected: ${pattern.source}`,\n      };\n    }\n  }\n\n  return { name: \"dangerous_command\", passed: true, severity: \"info\", message: \"No dangerous patterns\" };\n}\n\nfunction checkPathTraversal(\n  toolName: string,\n  input: Record<string, unknown>,\n): VerificationCheck {\n  const paths = [String(input.path ?? \"\"), String(input.file_path ?? \"\"), String(input.filePath ?? \"\")];\n\n  for (const p of paths) {\n    for (const pattern of PATH_TRAVERSAL) {\n      if (pattern.test(p)) {\n        return {\n          name: \"path_traversal\",\n          passed: false,\n          severity: \"critical\",\n          message: `Path traversal detected in: ${p}`,\n        };\n      }\n    }\n  }\n\n  return { name: \"path_traversal\", passed: true, severity: \"info\", message: \"No path traversal\" };\n}\n\nfunction checkSecretExposure(\n  _toolName: string,\n  input: Record<string, unknown>,\n): VerificationCheck {\n  const serialized = JSON.stringify(input);\n\n  for (const pattern of SECRET_PATTERNS) {\n    if (pattern.test(serialized)) {\n      return {\n        name: \"secret_exposure\",\n        passed: false,\n        severity: \"critical\",\n        message: \"Potential secret or credential detected in tool input\",\n      };\n    }\n  }\n\n  return { name: \"secret_exposure\", passed: true, severity: \"info\", message: \"No secrets detected\" };\n}\n\nfunction checkDestructiveSQL(\n  toolName: string,\n  input: Record<string, unknown>,\n): VerificationCheck {\n  if (toolName !== \"bash\") {\n    return { name: \"destructive_sql\", passed: true, severity: \"info\", message: \"N/A\" };\n  }\n\n  const command = String(input.command ?? \"\").toUpperCase();\n  for (const pattern of DESTRUCTIVE_COMMANDS) {\n    if (command.includes(pattern)) {\n      return {\n        name: \"destructive_sql\",\n        passed: false,\n        severity: \"critical\",\n        message: `Destructive SQL detected: ${pattern}`,\n      };\n    }\n  }\n\n  return { name: \"destructive_sql\", passed: true, severity: \"info\", message: \"No destructive SQL\" };\n}\n\nfunction checkRepetitiveCall(\n  toolName: string,\n  input: Record<string, unknown>,\n  context: VerificationContext,\n): VerificationCheck {\n  const recent = context.previousToolCalls.slice(-5);\n  let identicalCount = 0;\n\n  for (const prev of recent) {\n    if (prev.name === toolName && JSON.stringify(prev.input) === JSON.stringify(input)) {\n      identicalCount++;\n    }\n  }\n\n  if (identicalCount >= 3) {\n    return {\n      name: \"repetitive_call\",\n      passed: false,\n      severity: \"warning\",\n      message: `${toolName} called ${identicalCount + 1} times with identical input (possible loop)`,\n    };\n  }\n\n  return { name: \"repetitive_call\", passed: true, severity: \"info\", message: \"No repetition detected\" };\n}\n\nfunction checkWriteBinary(\n  toolName: string,\n  input: Record<string, unknown>,\n): VerificationCheck {\n  if (toolName !== \"file_write\" && toolName !== \"write_file\") {\n    return { name: \"write_binary\", passed: true, severity: \"info\", message: \"N/A\" };\n  }\n\n  const content = String(input.content ?? \"\");\n  const nonPrintable = content.split(\"\").filter((c) => {\n    const code = c.charCodeAt(0);\n    return code < 32 && code !== 10 && code !== 13 && code !== 9;\n  });\n\n  if (nonPrintable.length > content.length * 0.1) {\n    return {\n      name: \"write_binary\",\n      passed: false,\n      severity: \"warning\",\n      message: \"File content appears to contain binary data\",\n    };\n  }\n\n  return { name: \"write_binary\", passed: true, severity: \"info\", message: \"Text content\" };\n}\n","import type { ToolContext, ToolUseBlock } from '../types.js';\nimport type { Tool } from './tool.js';\nimport { ToolRegistry } from './registry.js';\nimport { ToolVerifier, type VerificationContext } from './verifier.js';\nimport type { DualPathVerifier } from '../verify/router.js';\n\nexport { ToolVerifier } from './verifier.js';\nexport type { VerificationCheck, VerificationResult, VerificationRule, VerificationContext } from './verifier.js';\n\n/** Result of a single tool execution. */\nexport interface ToolExecutionResult {\n  id: string;\n  name: string;\n  output: string;\n  isError: boolean;\n  durationMs: number;\n}\n\nclass Semaphore {\n  private current = 0;\n  private queue: (() => void)[] = [];\n\n  constructor(private readonly max: number) {}\n\n  acquire(): Promise<void> {\n    if (this.current < this.max) {\n      this.current++;\n      return Promise.resolve();\n    }\n    return new Promise<void>((resolve) => {\n      this.queue.push(resolve);\n    });\n  }\n\n  release(): void {\n    this.current--;\n    const next = this.queue.shift();\n    if (next) {\n      this.current++;\n      next();\n    }\n  }\n}\n\nfunction partitionToolCalls(\n  toolCalls: ToolUseBlock[],\n  registry: ToolRegistry,\n): ToolUseBlock[][] {\n  const batches: ToolUseBlock[][] = [];\n  let currentBatch: ToolUseBlock[] = [];\n  let currentBatchIsConcurrent = false;\n\n  for (const call of toolCalls) {\n    const tool = registry.get(call.name);\n    const isConcurrent = tool ? tool.isReadOnly && tool.isConcurrencySafe : false;\n\n    if (isConcurrent && currentBatchIsConcurrent) {\n      currentBatch.push(call);\n    } else {\n      if (currentBatch.length > 0) {\n        batches.push(currentBatch);\n      }\n      currentBatch = [call];\n      currentBatchIsConcurrent = isConcurrent;\n    }\n  }\n\n  if (currentBatch.length > 0) {\n    batches.push(currentBatch);\n  }\n\n  return batches;\n}\n\nasync function executeToolCall(\n  call: ToolUseBlock,\n  registry: ToolRegistry,\n  context: ToolContext,\n  permissionCheck?: (name: string, input: Record<string, unknown>) => Promise<boolean>,\n  abortSignal?: AbortSignal,\n  verifier?: ToolVerifier,\n  verificationContext?: VerificationContext,\n  dualPathVerifier?: DualPathVerifier,\n  turnCount?: number,\n): Promise<ToolExecutionResult> {\n  if (abortSignal?.aborted) {\n    return {\n      id: call.id,\n      name: call.name,\n      output: 'Execution aborted',\n      isError: true,\n      durationMs: 0,\n    };\n  }\n\n  const tool = registry.get(call.name);\n  if (!tool) {\n    return {\n      id: call.id,\n      name: call.name,\n      output: `Unknown tool: ${call.name}`,\n      isError: true,\n      durationMs: 0,\n    };\n  }\n\n  const start = performance.now();\n\n  try {\n    const parseResult = tool.inputSchema.safeParse(call.input);\n    if (!parseResult.success) {\n      return {\n        id: call.id,\n        name: call.name,\n        output: `Invalid input for ${call.name}: ${parseResult.error.issues.map((i) => i.message).join(', ')}`,\n        isError: true,\n        durationMs: Math.round(performance.now() - start),\n      };\n    }\n\n    if (permissionCheck) {\n      const allowed = await permissionCheck(call.name, call.input);\n      if (!allowed) {\n        return {\n          id: call.id,\n          name: call.name,\n          output: `Permission denied for tool: ${call.name}`,\n          isError: true,\n          durationMs: Math.round(performance.now() - start),\n        };\n      }\n    }\n\n    if (dualPathVerifier) {\n      const verdict = dualPathVerifier.verify(call.name, parseResult.data as Record<string, unknown>, turnCount ?? 0);\n      if (verdict.finalVerdict === \"block\") {\n        return {\n          id: call.id,\n          name: call.name,\n          output: `Verification blocked: ${verdict.reason ?? \"safety policy violation\"} [${verdict.pathTaken} path, ${verdict.totalLatencyMs.toFixed(2)}ms]`,\n          isError: true,\n          durationMs: Math.round(performance.now() - start),\n        };\n      }\n    } else if (verifier && verificationContext) {\n      const result = verifier.verify(call.name, parseResult.data as Record<string, unknown>, verificationContext);\n      if (!result.approved) {\n        return {\n          id: call.id,\n          name: call.name,\n          output: `Verification failed: ${result.reason ?? \"unknown reason\"}`,\n          isError: true,\n          durationMs: Math.round(performance.now() - start),\n        };\n      }\n    }\n\n    const output = await tool.execute(parseResult.data, context);\n\n    if (dualPathVerifier) {\n      dualPathVerifier.recordSuccess(call.name, parseResult.data as Record<string, unknown>, turnCount ?? 0);\n    }\n\n    return {\n      id: call.id,\n      name: call.name,\n      output,\n      isError: false,\n      durationMs: Math.round(performance.now() - start),\n    };\n  } catch (err: unknown) {\n    const message = err instanceof Error ? err.message : String(err);\n    if (dualPathVerifier) {\n      dualPathVerifier.recordFailure(call.name, call.input, turnCount ?? 0);\n    }\n    return {\n      id: call.id,\n      name: call.name,\n      output: `Error executing ${call.name}: ${message}`,\n      isError: true,\n      durationMs: Math.round(performance.now() - start),\n    };\n  }\n}\n\nexport interface OrchestrateOptions {\n  verifier?: ToolVerifier;\n  dualPathVerifier?: DualPathVerifier;\n  previousToolCalls?: Array<{ name: string; input: Record<string, unknown> }>;\n  turnCount?: number;\n}\n\n/**\n * Orchestrate execution of multiple tool calls with partition-based concurrency.\n *\n * Read-only, concurrency-safe tools are grouped into concurrent batches (max 10 parallel).\n * Non-safe tools are executed serially in their own batches.\n * Results are returned in the original call order.\n *\n * If a verifier is provided, each tool call is verified before execution.\n */\nexport async function orchestrateTools(\n  tools: ToolRegistry,\n  toolCalls: ToolUseBlock[],\n  context: ToolContext,\n  permissionCheck?: (name: string, input: Record<string, unknown>) => Promise<boolean>,\n  abortSignal?: AbortSignal,\n  options?: OrchestrateOptions,\n): Promise<ToolExecutionResult[]> {\n  const verifier = options?.verifier;\n  const dualVerifier = options?.dualPathVerifier;\n  const batches = partitionToolCalls(toolCalls, tools);\n  const results: ToolExecutionResult[] = [];\n\n  for (const batch of batches) {\n    if (abortSignal?.aborted) {\n      for (const call of batch) {\n        results.push({\n          id: call.id,\n          name: call.name,\n          output: 'Execution aborted',\n          isError: true,\n          durationMs: 0,\n        });\n      }\n      continue;\n    }\n\n    if (batch.length > 1) {\n      const semaphore = new Semaphore(10);\n      const promises = batch.map((call) =>\n        semaphore.acquire().then(async () => {\n          try {\n            return await executeToolCall(call, tools, context, permissionCheck, abortSignal, verifier, buildVerificationContext(options), dualVerifier, options?.turnCount);\n          } finally {\n            semaphore.release();\n          }\n        }),\n      );\n      const settled = await Promise.allSettled(promises);\n      for (let i = 0; i < settled.length; i++) {\n        const s = settled[i];\n        if (s.status === 'fulfilled') {\n          results.push(s.value);\n        } else {\n          results.push({\n            id: batch[i].id,\n            name: batch[i].name,\n            output: `Unexpected error: ${s.reason instanceof Error ? s.reason.message : String(s.reason)}`,\n            isError: true,\n            durationMs: 0,\n          });\n        }\n      }\n    } else {\n      const result = await executeToolCall(batch[0], tools, context, permissionCheck, abortSignal, verifier, buildVerificationContext(options), dualVerifier, options?.turnCount);\n      results.push(result);\n    }\n  }\n\n  return results;\n}\n\nfunction buildVerificationContext(options?: OrchestrateOptions): VerificationContext | undefined {\n  if (!options?.verifier) return undefined;\n  return {\n    turnCount: options.turnCount ?? 0,\n    previousToolCalls: options.previousToolCalls ?? [],\n    cwd: process.cwd(),\n  };\n}\n","import { exec } from 'node:child_process';\nimport { z } from 'zod';\nimport { defineTool } from './tool.js';\n\nconst MAX_OUTPUT = 50 * 1024;\nconst TRUNCATE_HALF = 25 * 1024;\n\nfunction truncateOutput(output: string): string {\n  if (output.length <= MAX_OUTPUT) return output;\n  const notice = `\\n\\n... [output truncated: showing first ${TRUNCATE_HALF} and last ${TRUNCATE_HALF} of ${output.length} characters] ...\\n\\n`;\n  return output.slice(0, TRUNCATE_HALF) + notice + output.slice(-TRUNCATE_HALF);\n}\n\nexport const BashTool = defineTool({\n  name: 'bash',\n  description:\n    'Execute a shell command. Returns stdout and stderr. Use for running build commands, git operations, package managers, and other CLI tools.',\n  inputSchema: z.object({\n    command: z.string().describe('The shell command to execute'),\n    timeout: z.number().optional().describe('Timeout in milliseconds (default 120000)'),\n    workdir: z.string().optional().describe('Working directory for the command'),\n  }),\n  isReadOnly: false,\n  isConcurrencySafe: false,\n  execute: async ({ command, timeout = 120000, workdir }, context) => {\n    return new Promise<string>((resolve) => {\n      let settled = false;\n      const done = (result: string) => {\n        if (settled) return;\n        settled = true;\n        resolve(result);\n      };\n\n      if (context.abortSignal?.aborted) {\n        done('Command aborted before execution');\n        return;\n      }\n\n      const child = exec(\n        command,\n        {\n          cwd: workdir ?? context.cwd,\n          timeout,\n          maxBuffer: 10 * 1024 * 1024,\n          killSignal: 'SIGKILL',\n        },\n        (error, stdout, stderr) => {\n          let output = '';\n          if (stdout) output += `STDOUT:\\n${stdout}\\n\\n`;\n          if (stderr) output += `STDERR:\\n${stderr}\\n\\n`;\n          output += `Exit code: ${error?.code ?? 0}`;\n          if (error && error.killed) {\n            output = `Command timed out after ${timeout}ms\\n\\n${output}`;\n          }\n          done(truncateOutput(output));\n        },\n      );\n\n      child.on('error', (err) => {\n        done(`Failed to execute command: ${err.message}`);\n      });\n\n      if (context.abortSignal) {\n        context.abortSignal.addEventListener(\n          'abort',\n          () => {\n            child.kill('SIGKILL');\n            done('Command aborted');\n          },\n          { once: true },\n        );\n      }\n    });\n  },\n});\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { z } from 'zod';\nimport { defineTool } from './tool.js';\n\nconst MAX_LINE_LENGTH = 2000;\n\nexport const FileReadTool = defineTool({\n  name: 'file_read',\n  description:\n    'Read the contents of a file. Returns the file content with line numbers. Use GlobTool to find files first.',\n  inputSchema: z.object({\n    path: z.string().describe('Absolute or relative path to the file'),\n    offset: z.number().optional().describe('Line number to start reading from (1-indexed)'),\n    limit: z.number().optional().describe('Maximum number of lines to read'),\n  }),\n  isReadOnly: true,\n  isConcurrencySafe: true,\n  execute: async ({ path: filePath, offset, limit }, context) => {\n    try {\n      const resolved = path.isAbsolute(filePath) ? filePath : path.resolve(context.cwd, filePath);\n\n      const content = await fs.readFile(resolved, 'utf-8');\n      const lines = content.split('\\n');\n\n      const startLine = offset ? Math.max(1, offset) : 1;\n      const startIndex = startLine - 1;\n      const endIndex = limit != null ? startIndex + limit : lines.length;\n      const selected = lines.slice(startIndex, endIndex);\n\n      const formatted = selected\n        .map((line, i) => {\n          const lineNum = startLine + i;\n          const truncated = line.length > MAX_LINE_LENGTH ? line.slice(0, MAX_LINE_LENGTH) + '...' : line;\n          return `${lineNum}: ${truncated}`;\n        })\n        .join('\\n');\n\n      return formatted;\n    } catch (err: unknown) {\n      if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n        return `Error: File not found: ${filePath}`;\n      }\n      if ((err as NodeJS.ErrnoException).code === 'EISDIR') {\n        return `Error: Path is a directory: ${filePath}`;\n      }\n      return `Error reading file: ${err instanceof Error ? err.message : String(err)}`;\n    }\n  },\n});\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { z } from 'zod';\nimport { defineTool } from './tool.js';\n\nexport const FileWriteTool = defineTool({\n  name: 'file_write',\n  description:\n    \"Write content to a file. Creates the file if it doesn't exist, overwrites if it does. Parent directories are created automatically.\",\n  inputSchema: z.object({\n    path: z.string().describe('Path to the file'),\n    content: z.string().describe('Content to write'),\n  }),\n  isReadOnly: false,\n  isConcurrencySafe: false,\n  execute: async ({ path: filePath, content }, context) => {\n    try {\n      const resolved = path.isAbsolute(filePath) ? filePath : path.resolve(context.cwd, filePath);\n      const dir = path.dirname(resolved);\n\n      await fs.mkdir(dir, { recursive: true });\n      await fs.writeFile(resolved, content, 'utf-8');\n\n      return `Wrote ${content.length} characters to ${filePath}`;\n    } catch (err: unknown) {\n      return `Error writing file: ${err instanceof Error ? err.message : String(err)}`;\n    }\n  },\n});\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { z } from 'zod';\nimport { defineTool } from './tool.js';\nimport { fuzzyReplace } from './fuzzy-edit.js';\n\nexport const FileEditTool = defineTool({\n  name: 'file_edit',\n  description:\n    'Edit an existing file by replacing a string match with new content. Uses 9-strategy fuzzy matching (exact, line-trimmed, block-anchor with Levenshtein, whitespace-normalized, indentation-flexible, escape-normalized, trimmed-boundary, context-aware, multi-occurrence) so the oldString does not need to be a perfect character-for-character match. For multi-line edits, include enough surrounding context to ensure uniqueness.',\n  inputSchema: z.object({\n    path: z.string().describe('Path to the file'),\n    oldString: z.string().describe('The string to find and replace (fuzzy-matched)'),\n    newString: z.string().describe('The replacement string'),\n    replaceAll: z.boolean().optional().describe('Replace all occurrences instead of just the first'),\n  }),\n  isReadOnly: false,\n  isConcurrencySafe: false,\n  execute: async ({ path: filePath, oldString, newString, replaceAll = false }, context) => {\n    try {\n      const resolved = path.isAbsolute(filePath) ? filePath : path.resolve(context.cwd, filePath);\n\n      const content = await fs.readFile(resolved, 'utf-8');\n\n      let newContent: string;\n      let count = 0;\n\n      if (replaceAll) {\n        const occurrences = content.split(oldString).length - 1;\n        if (occurrences === 0) {\n          try {\n            newContent = fuzzyReplace(content, oldString, newString, true);\n            count = 1;\n          } catch {\n            return `Error: oldString not found in ${filePath} (tried 9 fuzzy strategies)`;\n          }\n        } else {\n          newContent = content.split(oldString).join(newString);\n          count = occurrences;\n        }\n      } else {\n        try {\n          newContent = fuzzyReplace(content, oldString, newString, false);\n          count = 1;\n        } catch (err) {\n          const kind = (err as { kind?: string }).kind;\n          if (kind === \"ambiguous\") {\n            return `Error: Multiple matches for oldString in ${filePath}. Provide more surrounding context or set replaceAll to true.`;\n          }\n          return `Error: oldString not found in ${filePath} (tried 9 fuzzy strategies)`;\n        }\n      }\n\n      await fs.writeFile(resolved, newContent, 'utf-8');\n\n      return `Replaced ${count} occurrence(s) in ${filePath}`;\n    } catch (err: unknown) {\n      if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n        return `Error: File not found: ${filePath}`;\n      }\n      return `Error editing file: ${err instanceof Error ? err.message : String(err)}`;\n    }\n  },\n});\n","import type { ToolUseBlock } from \"../types.js\";\n\nexport type ReplacerFn = (content: string, find: string) => Generator<string, void, unknown>;\n\nexport class FuzzyEditError extends Error {\n  constructor(public readonly kind: \"not_found\" | \"ambiguous\", message: string) {\n    super(message);\n    this.name = \"FuzzyEditError\";\n  }\n}\n\nfunction levenshtein(a: string, b: string): number {\n  const m = a.length;\n  const n = b.length;\n  if (m === 0) return n;\n  if (n === 0) return m;\n  if (Math.abs(m - n) > Math.max(m, n) * 0.5) return Math.max(m, n);\n  let prev = new Array(n + 1).fill(0) as number[];\n  let curr = new Array(n + 1).fill(0) as number[];\n  for (let j = 0; j <= n; j++) prev[j] = j;\n  for (let i = 1; i <= m; i++) {\n    curr[0] = i;\n    for (let j = 1; j <= n; j++) {\n      const cost = a[i - 1] === b[j - 1] ? 0 : 1;\n      curr[j] = Math.min(curr[j - 1] + 1, prev[j] + 1, prev[j - 1] + cost);\n    }\n    [prev, curr] = [curr, prev];\n  }\n  return prev[n];\n}\n\nfunction similarity(a: string, b: string): number {\n  if (a.length > 1000 || b.length > 1000) return a === b ? 1 : 0;\n  const maxLen = Math.max(a.length, b.length);\n  if (maxLen === 0) return 1;\n  return 1 - levenshtein(a, b) / maxLen;\n}\n\nfunction* simpleReplacer(content: string, find: string): Generator<string, void, unknown> {\n  if (content.includes(find)) yield find;\n}\n\nfunction* lineTrimmedReplacer(content: string, find: string): Generator<string, void, unknown> {\n  const lines = find.split(\"\\n\").map(l => l.trim());\n  const contentLines = content.split(\"\\n\");\n  for (let i = 0; i <= contentLines.length - lines.length; i++) {\n    if (contentLines.slice(i, i + lines.length).every((cl, idx) => cl.trim() === lines[idx])) {\n      yield contentLines.slice(i, i + lines.length).join(\"\\n\");\n    }\n  }\n}\n\nfunction* blockAnchorReplacer(content: string, find: string): Generator<string, void, unknown> {\n  const findLines = find.split(\"\\n\");\n  const contentLines = content.split(\"\\n\");\n\n  if (findLines.length < 2) return;\n\n  const firstLine = findLines[0];\n  const lastLine = findLines[findLines.length - 1];\n  const middleLines = findLines.slice(1, -1);\n\n  for (let i = 0; i <= contentLines.length - findLines.length; i++) {\n    if (contentLines[i] !== firstLine) continue;\n    const endIdx = i + findLines.length - 1;\n    if (contentLines[endIdx] !== lastLine) continue;\n\n    const candidates: { idx: number; score: number }[] = [];\n\n    for (let j = i + 1; j < endIdx; j++) {\n      candidates.push({ idx: j, score: 0 });\n    }\n\n    let totalScore = 0;\n    for (let k = 0; k < middleLines.length; k++) {\n      const contentLine = contentLines[i + 1 + k];\n      const sim = similarity(middleLines[k], contentLine);\n      totalScore += sim;\n      if (candidates[k]) candidates[k].score = sim;\n    }\n\n    const avgScore = totalScore / middleLines.length;\n    const threshold = candidates.length > 1 ? 0.3 : 0.0;\n\n    if (avgScore >= threshold) {\n      yield contentLines.slice(i, i + findLines.length).join(\"\\n\");\n    }\n  }\n}\n\nfunction* whitespaceNormalizedReplacer(content: string, find: string): Generator<string, void, unknown> {\n  const normFind = find.replace(/\\s+/g, \" \").trim();\n  if (!normFind) return;\n  const normContent = content.replace(/\\s+/g, \" \").trim();\n  const idx = normContent.indexOf(normFind);\n  if (idx === -1) return;\n\n  const firstWord = normFind.split(\" \")[0];\n  const lastWord = normFind.split(\" \").filter(Boolean).pop()!;\n  const firstIdx = content.indexOf(firstWord);\n  const lastIdx = content.lastIndexOf(lastWord);\n  if (firstIdx === -1 || lastIdx === -1 || lastIdx < firstIdx) return;\n\n  yield content.substring(firstIdx, lastIdx + lastWord.length);\n}\n\nfunction* indentationFlexibleReplacer(content: string, find: string): Generator<string, void, unknown> {\n  const lines = find.split(\"\\n\");\n  const minIndent = Math.min(...lines.filter(l => l.trim().length > 0).map(l => l.match(/^(\\s*)/)?.[1].length ?? 0));\n  const dedented = lines.map(l => l.substring(minIndent)).join(\"\\n\");\n  if (content.includes(dedented)) yield dedented;\n}\n\nfunction* escapeNormalizedReplacer(content: string, find: string): Generator<string, void, unknown> {\n  const normalized = find\n    .replace(/\\\\n/g, \"\\n\")\n    .replace(/\\\\t/g, \"\\t\")\n    .replace(/\\\\\"/g, '\"')\n    .replace(/\\\\'/g, \"'\");\n  if (content.includes(normalized)) yield normalized;\n}\n\nfunction* trimmedBoundaryReplacer(content: string, find: string): Generator<string, void, unknown> {\n  const trimmed = find.trim();\n  if (content.includes(trimmed)) yield trimmed;\n}\n\nfunction* contextAwareReplacer(content: string, find: string): Generator<string, void, unknown> {\n  const findLines = find.split(\"\\n\");\n  if (findLines.length < 3) return;\n\n  const firstLine = findLines[0].trim();\n  const lastLine = findLines[findLines.length - 1].trim();\n  const contentLines = content.split(\"\\n\");\n\n  for (let i = 0; i <= contentLines.length - 3; i++) {\n    if (contentLines[i].trim() !== firstLine) continue;\n\n    let bestEndIdx = -1;\n    let bestScore = 0;\n\n    for (let j = i + 2; j < contentLines.length; j++) {\n      if (contentLines[j].trim() === lastLine) {\n        const middleCount = j - i - 1;\n        let matchCount = 0;\n        for (let k = 1; k <= middleCount; k++) {\n          const fIdx = Math.floor((k / (middleCount + 1)) * (findLines.length - 2));\n          if (fIdx >= 0 && fIdx < findLines.length - 2) {\n            if (similarity(contentLines[i + k].trim(), findLines[fIdx + 1].trim()) > 0.5) {\n              matchCount++;\n            }\n          }\n        }\n        const score = matchCount / middleCount;\n        if (score > bestScore) {\n          bestScore = score;\n          bestEndIdx = j;\n        }\n      }\n    }\n\n    if (bestEndIdx !== -1 && bestScore > 0.5) {\n      yield contentLines.slice(i, bestEndIdx + 1).join(\"\\n\");\n    }\n  }\n}\n\nconst REPLACERS: ReplacerFn[] = [\n  simpleReplacer,\n  lineTrimmedReplacer,\n  blockAnchorReplacer,\n  whitespaceNormalizedReplacer,\n  indentationFlexibleReplacer,\n  escapeNormalizedReplacer,\n  trimmedBoundaryReplacer,\n  contextAwareReplacer,\n];\n\nexport function fuzzyReplace(\n  content: string,\n  oldString: string,\n  newString: string,\n  replaceAll = false,\n): string {\n  for (const replacer of REPLACERS) {\n    for (const search of replacer(content, oldString)) {\n      const idx = content.indexOf(search);\n      if (idx === -1) continue;\n\n      if (replaceAll) {\n        return content.split(search).join(newString);\n      }\n\n      const firstIdx = content.indexOf(search);\n      const lastIdx = content.lastIndexOf(search);\n      if (firstIdx !== lastIdx) continue;\n\n      return content.substring(0, firstIdx) + newString + content.substring(firstIdx + search.length);\n    }\n  }\n\n  throw new FuzzyEditError(\"not_found\", `Could not find match for replacement (after 8 fuzzy strategies)`);\n}\n\nexport function fuzzyContains(content: string, find: string): boolean {\n  try {\n    fuzzyReplace(content, find, \"PLACEHOLDER_CHECK\");\n    return true;\n  } catch {\n    return false;\n  }\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { z } from 'zod';\nimport { defineTool } from './tool.js';\nimport { globToRegExp } from '../utils.js';\n\nconst MAX_RESULTS = 200;\n\nasync function walkDir(dir: string): Promise<string[]> {\n  const { walkDir: walk } = await import('../utils.js');\n  const entries = await walk(dir);\n  return entries.map((e) => e.path);\n}\n\nfunction matchInclude(filePath: string, includePattern?: string): boolean {\n  if (!includePattern) return true;\n  const base = path.basename(filePath);\n  const re = globToRegExp(includePattern);\n  return re.test(base);\n}\n\nexport const GlobTool = defineTool({\n  name: 'glob',\n  description:\n    'Find files matching a glob pattern. Returns matching file paths sorted by modification time.',\n  inputSchema: z.object({\n    pattern: z.string().describe('Glob pattern (e.g., \"**/*.ts\", \"src/**/*.tsx\")'),\n    path: z.string().optional().describe('Directory to search in (default: current directory)'),\n    include: z.string().optional().describe('File extension or pattern to include (e.g., \"*.ts\")'),\n  }),\n  isReadOnly: true,\n  isConcurrencySafe: true,\n  execute: async ({ pattern, path: searchPath, include }, context) => {\n    try {\n      const searchDir = searchPath\n        ? path.isAbsolute(searchPath)\n          ? searchPath\n          : path.resolve(context.cwd, searchPath)\n        : context.cwd;\n\n      const allFiles = await walkDir(searchDir);\n      const re = globToRegExp(pattern);\n\n      const matched: Array<{ filePath: string; mtimeMs: number }> = [];\n\n      for (const filePath of allFiles) {\n        const relative = path.relative(searchDir, filePath);\n        if (re.test(relative) && matchInclude(relative, include)) {\n          try {\n            const stat = await fs.stat(filePath);\n            matched.push({ filePath: relative, mtimeMs: stat.mtimeMs });\n          } catch {\n            matched.push({ filePath: relative, mtimeMs: 0 });\n          }\n        }\n      }\n\n      matched.sort((a, b) => b.mtimeMs - a.mtimeMs);\n      const limited = matched.slice(0, MAX_RESULTS);\n      return limited.map((m) => m.filePath).join('\\n');\n    } catch (err: unknown) {\n      return `Error searching files: ${err instanceof Error ? err.message : String(err)}`;\n    }\n  },\n});\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { z } from 'zod';\nimport { defineTool } from './tool.js';\nimport { globToRegExp } from '../utils.js';\n\nconst MAX_MATCHES = 200;\n\nasync function walkDir(dir: string): Promise<string[]> {\n  const { walkDir: walk } = await import('../utils.js');\n  const entries = await walk(dir);\n  return entries.map((e) => e.path);\n}\n\nexport const GrepTool = defineTool({\n  name: 'grep',\n  description:\n    'Search file contents using a regular expression. Returns matching file paths with line numbers.',\n  inputSchema: z.object({\n    pattern: z.string().describe('Regular expression to search for'),\n    path: z.string().optional().describe('Directory to search in'),\n    include: z.string().optional().describe('File pattern to include (e.g., \"*.ts\")'),\n  }),\n  isReadOnly: true,\n  isConcurrencySafe: true,\n  execute: async ({ pattern, path: searchPath, include }, context) => {\n    try {\n      let regex: RegExp;\n      try {\n        regex = new RegExp(pattern);\n      } catch {\n        return `Error: Invalid regular expression: ${pattern}`;\n      }\n\n      const searchDir = searchPath\n        ? path.isAbsolute(searchPath)\n          ? searchPath\n          : path.resolve(context.cwd, searchPath)\n        : context.cwd;\n\n      const includeRe = include ? globToRegExp(include) : null;\n      const allFiles = await walkDir(searchDir);\n      const matches: string[] = [];\n\n      for (const filePath of allFiles) {\n        if (matches.length >= MAX_MATCHES) break;\n\n        if (includeRe) {\n          const base = path.basename(filePath);\n          if (!includeRe.test(base)) continue;\n        }\n\n        let content: string;\n        try {\n          content = await fs.readFile(filePath, 'utf-8');\n        } catch {\n          continue;\n        }\n\n        const lines = content.split('\\n');\n        const relative = path.relative(searchDir, filePath);\n\n        for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {\n          if (matches.length >= MAX_MATCHES) break;\n          const line = lines[lineIdx];\n          if (regex.test(line)) {\n            matches.push(`${relative}:${lineIdx + 1}: ${line}`);\n            regex.lastIndex = 0;\n          } else {\n            regex.lastIndex = 0;\n          }\n        }\n      }\n\n      if (matches.length === 0) {\n        return 'No matches found.';\n      }\n\n      return matches.join('\\n');\n    } catch (err: unknown) {\n      return `Error searching files: ${err instanceof Error ? err.message : String(err)}`;\n    }\n  },\n});\n","import { z } from 'zod';\nimport { defineTool } from './tool.js';\n\nconst MAX_RESPONSE_SIZE = 100 * 1024;\n\nexport const WebFetchTool = defineTool({\n  name: 'web_fetch',\n  description:\n    'Fetch content from a URL. Returns the response body as text. Supports HTTP and HTTPS.',\n  inputSchema: z.object({\n    url: z.string().url().describe('The URL to fetch'),\n    method: z.enum(['GET', 'POST', 'PUT', 'DELETE']).optional().describe('HTTP method (default: GET)'),\n    headers: z.record(z.string()).optional().describe('Request headers'),\n    body: z.string().optional().describe('Request body (for POST/PUT)'),\n  }),\n  isReadOnly: true,\n  isConcurrencySafe: true,\n  execute: async ({ url, method = 'GET', headers, body }, context) => {\n    try {\n      if (context.abortSignal?.aborted) {\n        return 'Request aborted before execution';\n      }\n\n      const timeoutSignal = AbortSignal.timeout(30_000);\n      let signal: AbortSignal;\n      if (context.abortSignal) {\n        signal = AbortSignal.any([context.abortSignal, timeoutSignal]);\n      } else {\n        signal = timeoutSignal;\n      }\n\n      const fetchOptions: RequestInit = {\n        method,\n        headers,\n        signal,\n        redirect: 'follow',\n      };\n\n      if (body && method !== 'GET') {\n        fetchOptions.body = body;\n      }\n\n      const response = await fetch(url, fetchOptions);\n      const contentType = response.headers.get('content-type') ?? 'unknown';\n      const status = response.status;\n\n      const text = await response.text();\n\n      let result = `Status: ${status}\\nContent-Type: ${contentType}\\n\\n`;\n      if (text.length > MAX_RESPONSE_SIZE) {\n        const half = Math.floor(MAX_RESPONSE_SIZE / 2);\n        const notice = `\\n\\n... [response truncated: showing first ${half} and last ${half} of ${text.length} characters] ...\\n\\n`;\n        result += text.slice(0, half) + notice + text.slice(-half);\n      } else {\n        result += text;\n      }\n\n      return result;\n    } catch (err: unknown) {\n      if (err instanceof Error && err.name === 'AbortError') {\n        return 'Request aborted';\n      }\n      return `Error fetching URL: ${err instanceof Error ? err.message : String(err)}`;\n    }\n  },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,SAAS,aAAa,SAAyB;AACpD,QAAM,QAAQ,QAAQ,MAAM,GAAG;AAC/B,MAAI,QAAQ;AAEZ,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,OAAO,MAAM,CAAC;AACpB,QAAI,SAAS,MAAM;AACjB,eAAS;AAAA,IACX,OAAO;AACL,YAAM,UAAU,KACb,QAAQ,qBAAqB,MAAM,EACnC,QAAQ,OAAO,OAAO,EACtB,QAAQ,OAAO,MAAM;AACxB,eAAS,UAAU;AAAA,IACrB;AAAA,EACF;AAEA,UAAQ,MAAM,QAAQ,SAAS,GAAG,EAAE,QAAQ,OAAO,EAAE;AACrD,SAAO,IAAI,OAAO,QAAQ,KAAK,OAAO;AACxC;AAOA,eAAsB,QAAQ,KAAa,SAAiF;AAC1H,QAAM,WAAW,SAAS,YAAY;AACtC,QAAM,iBAAiB,SAAS,kBAAkB;AAClD,QAAM,UAAuB,CAAC;AAE9B,iBAAe,KAAK,SAAiB,OAA8B;AACjE,QAAI,QAAQ,SAAU;AAEtB,QAAI;AACJ,QAAI;AACF,gBAAU,MAAS,aAAS,QAAQ,SAAS,EAAE,eAAe,KAAK,CAAC;AAAA,IACtE,QAAQ;AACN;AAAA,IACF;AAEA,eAAW,SAAS,SAAS;AAC3B,YAAM,WAAgB,WAAK,SAAS,MAAM,IAAI;AAE9C,UAAI,MAAM,SAAS,kBAAkB,MAAM,SAAS,OAAQ;AAE5D,UAAI;AACF,YAAI;AACJ,YAAI,MAAM,eAAe,KAAK,CAAC,eAAgB;AAC/C,eAAO,MAAS,aAAS,KAAK,QAAQ;AAEtC,YAAI,KAAK,OAAO,GAAG;AACjB,kBAAQ,KAAK,EAAE,MAAM,UAAU,KAAK,CAAC;AAAA,QACvC,WAAW,KAAK,YAAY,GAAG;AAC7B,gBAAM,KAAK,UAAU,QAAQ,CAAC;AAAA,QAChC;AAAA,MACF,QAAQ;AACN;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,KAAK,KAAK,CAAC;AACjB,SAAO;AACT;AAnEA,IAAAA,KACAC;AADA;AAAA;AAAA;AAAA,IAAAD,MAAoB;AACpB,IAAAC,QAAsB;AAAA;AAAA;;;ACDtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACiCA,SAAS,gBAAgB,QAA0C;AACjE,QAAM,IAAI;AACV,QAAM,MAAM,EAAE;AACd,QAAM,WAAW,IAAI;AACrB,QAAM,cAAc,IAAI;AAExB,QAAM,OAAgC,CAAC;AACvC,MAAI,YAAa,MAAK,cAAc;AAEpC,UAAQ,UAAU;AAAA,IAChB,KAAK;AACH,aAAO,EAAE,GAAG,MAAM,MAAM,SAAS;AAAA,IACnC,KAAK;AACH,aAAO,EAAE,GAAG,MAAM,MAAM,SAAS;AAAA,IACnC,KAAK;AACH,aAAO,EAAE,GAAG,MAAM,MAAM,UAAU;AAAA,IACpC,KAAK;AACH,aAAO,EAAE,GAAG,MAAM,MAAM,OAAO;AAAA,IACjC,KAAK,YAAY;AACf,YAAM,QAAQ,gBAAgB,IAAI,OAAO;AACzC,aAAO,EAAE,GAAG,MAAM,MAAM,SAAS,MAAM;AAAA,IACzC;AAAA,IACA,KAAK,aAAa;AAChB,YAAM,UAAU,IAAI;AACpB,YAAM,QAAQ,QAAQ;AACtB,YAAM,aAAsC,CAAC;AAC7C,YAAM,WAAqB,CAAC;AAC5B,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,mBAAW,GAAG,IAAI,gBAAgB,KAAK;AACvC,cAAM,UAAW,MAA4C;AAC7D,YACE,QAAQ,aAAa,iBACrB,QAAQ,aAAa,gBACrB,QAAQ,aAAa,cACrB;AACA,mBAAS,KAAK,GAAG;AAAA,QACnB;AAAA,MACF;AACA,YAAM,SAAkC,EAAE,GAAG,MAAM,MAAM,UAAU,WAAW;AAC9E,UAAI,SAAS,SAAS,EAAG,QAAO,WAAW;AAC3C,aAAO;AAAA,IACT;AAAA,IACA,KAAK;AACH,aAAO,EAAE,GAAG,MAAM,MAAM,IAAI,OAAO;AAAA,IACrC,KAAK;AACH,aAAO,EAAE,GAAG,MAAM,OAAO,IAAI,MAAM;AAAA,IACrC,KAAK,YAAY;AACf,YAAM,UAAW,IAAI,QAAsB,IAAI,CAAC,MAAM,gBAAgB,CAAC,CAAC;AACxE,aAAO,EAAE,GAAG,MAAM,OAAO,QAAQ;AAAA,IACnC;AAAA,IACA,KAAK,yBAAyB;AAC5B,YAAM,UAAW,IAAI,QAAsB,IAAI,CAAC,MAAM,gBAAgB,CAAC,CAAC;AACxE,aAAO,EAAE,GAAG,MAAM,OAAO,QAAQ;AAAA,IACnC;AAAA,IACA,KAAK;AACH,aAAO,gBAAgB,IAAI,SAAS;AAAA,IACtC,KAAK,eAAe;AAClB,YAAM,QAAQ,gBAAgB,IAAI,SAAS;AAC3C,YAAM,WAAW;AACjB,aAAO;AAAA,IACT;AAAA,IACA,KAAK,cAAc;AACjB,YAAM,QAAQ,gBAAgB,IAAI,SAAS;AAC3C,YAAM,WAAW;AACjB,aAAO;AAAA,IACT;AAAA,IACA,KAAK;AACH,aAAO,gBAAgB,IAAI,SAAS;AAAA,IACtC,KAAK,aAAa;AAChB,YAAM,cAAc,gBAAgB,IAAI,SAAS;AACjD,aAAO,EAAE,GAAG,MAAM,MAAM,UAAU,sBAAsB,YAAY;AAAA,IACtE;AAAA,IACA,KAAK,YAAY;AACf,YAAM,QAAS,IAAI,MAAoB,IAAI,CAAC,MAAM,gBAAgB,CAAC,CAAC;AACpE,aAAO,EAAE,GAAG,MAAM,MAAM,SAAS,OAAO,UAAU,MAAM,QAAQ,UAAU,MAAM,OAAO;AAAA,IACzF;AAAA,IACA,KAAK,cAAc;AACjB,aAAO,gBAAgB,IAAI,SAAS;AAAA,IACtC;AAAA,IACA,KAAK;AACH,aAAO,CAAC;AAAA,IACV,KAAK;AACH,aAAO,CAAC;AAAA,IACV,KAAK;AACH,aAAO,EAAE,GAAG,MAAM,MAAM,OAAO;AAAA,IACjC,KAAK;AACH,aAAO,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE;AAAA,IAC5B;AACE,aAAO,EAAE,GAAG,MAAM,MAAM,SAAS;AAAA,EACrC;AACF;AAGO,SAAS,WAAwB,QAAwC;AAC9E,QAAM,OAAgB;AAAA,IACpB,MAAM,OAAO;AAAA,IACb,aAAa,OAAO;AAAA,IACpB,aAAa,OAAO;AAAA,IACpB,YAAY,OAAO,cAAc;AAAA,IACjC,mBAAmB,OAAO,qBAAqB;AAAA,IAC/C,SAAS,OAAO;AAAA,IAChB,QAA2B;AACzB,aAAO;AAAA,QACL,MAAM,OAAO;AAAA,QACb,aAAa,OAAO;AAAA,QACpB,cAAc,gBAAgB,OAAO,WAAW;AAAA,MAClD;AAAA,IACF;AAAA,IACA,SAAS,OAAkB;AACzB,YAAM,UAAU,OAAO,QAAQ,KAAgC,EAC5D,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM;AACf,YAAI,OAAO,MAAM,SAAU,QAAO,GAAG,CAAC,MAAM,CAAC;AAC7C,YAAI,MAAM,OAAW,QAAO,GAAG,CAAC;AAChC,YAAI,MAAM,KAAM,QAAO,GAAG,CAAC;AAC3B,eAAO,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC;AAAA,MAC3B,CAAC,EACA,KAAK,IAAI;AACZ,aAAO,GAAG,OAAO,IAAI,MAAM,OAAO;AAAA,IACpC;AAAA,EACF;AACA,SAAO;AACT;AAGO,SAAS,oBAAoB,MAA4B;AAC9D,QAAM,WAAW,IAAI,KAAK;AAC1B,SAAO;AAAA,IACL,MAAM,SAAS;AAAA,IACf,aAAa,SAAS;AAAA,IACtB,aAAa,SAAS;AAAA,IACtB,YAAY,SAAS;AAAA,IACrB,mBAAmB,SAAS;AAAA,IAC5B,SAAS,CAAC,OAAO,YAAY,SAAS,QAAQ,OAAO,OAAO;AAAA,IAC5D,OAAO,MAAM,SAAS,MAAM;AAAA,IAC5B,UAAU,CAAC,UAAU,SAAS,SAAS,KAAK;AAAA,EAC9C;AACF;;;ACtKO,IAAM,eAAN,MAAmB;AAAA,EACP,QAAQ,oBAAI,IAAkB;AAAA,EAE/C,YAAY,OAAgB;AAC1B,QAAI,OAAO;AACT,iBAAW,QAAQ,OAAO;AACxB,aAAK,IAAI,IAAI;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,IAAI,MAAkB;AACpB,QAAI,KAAK,MAAM,IAAI,KAAK,IAAI,GAAG;AAC7B,cAAQ,KAAK,kCAAkC,KAAK,IAAI,4BAA4B;AACpF;AAAA,IACF;AACA,SAAK,MAAM,IAAI,KAAK,MAAM,IAAI;AAAA,EAChC;AAAA;AAAA,EAGA,IAAI,MAAgC;AAClC,WAAO,KAAK,MAAM,IAAI,IAAI;AAAA,EAC5B;AAAA;AAAA,EAGA,IAAI,MAAuB;AACzB,WAAO,KAAK,MAAM,IAAI,IAAI;AAAA,EAC5B;AAAA;AAAA,EAGA,oBAAoB,MAAkC;AACpD,UAAM,QAAQ,KAAK,YAAY;AAC/B,QAAI,KAAK,MAAM,IAAI,IAAI,EAAG,QAAO;AACjC,eAAW,OAAO,KAAK,MAAM,KAAK,GAAG;AACnC,UAAI,IAAI,YAAY,MAAM,MAAO,QAAO;AAAA,IAC1C;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,YAAsB;AACpB,WAAO,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC;AAAA,EACrC;AAAA;AAAA,EAGA,SAAiB;AACf,WAAO,MAAM,KAAK,KAAK,MAAM,OAAO,CAAC;AAAA,EACvC;AAAA;AAAA,EAGA,SAA8B;AAC5B,WAAO,KAAK,OAAO,EAChB,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC,EAC3C,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;AAAA,EACzB;AAAA;AAAA,EAGA,IAAI,OAAe;AACjB,WAAO,KAAK,MAAM;AAAA,EACpB;AACF;;;AChEO,IAAM,qBAA+B;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,iBAA2B;AAAA,EACtC;AAAA,EACA;AACF;AAEO,IAAM,kBAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,uBAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AACF;;;ACGO,IAAM,eAAN,MAAmB;AAAA,EAChB,QAA4B,CAAC;AAAA,EAErC,cAAc;AACZ,SAAK,QAAQ;AAAA,MACX,EAAE,MAAM,qBAAqB,OAAO,sBAAsB;AAAA,MAC1D,EAAE,MAAM,kBAAkB,OAAO,mBAAmB;AAAA,MACpD,EAAE,MAAM,mBAAmB,OAAO,oBAAoB;AAAA,MACtD,EAAE,MAAM,mBAAmB,OAAO,oBAAoB;AAAA,MACtD,EAAE,MAAM,mBAAmB,OAAO,oBAAoB;AAAA,MACtD,EAAE,MAAM,gBAAgB,OAAO,iBAAiB;AAAA,IAClD;AAAA,EACF;AAAA,EAEA,QAAQ,MAA8B;AACpC,SAAK,MAAM,KAAK,IAAI;AAAA,EACtB;AAAA,EAEA,OACE,UACA,OACA,SACoB;AACpB,UAAM,SAA8B,CAAC;AAErC,eAAW,QAAQ,KAAK,OAAO;AAC7B,YAAM,QAAQ,KAAK,MAAM,UAAU,OAAO,OAAO;AACjD,aAAO,KAAK,KAAK;AAAA,IACnB;AAEA,UAAM,mBAAmB,OAAO;AAAA,MAC9B,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,aAAa;AAAA,IACrC;AAEA,QAAI,iBAAiB,SAAS,GAAG;AAC/B,aAAO;AAAA,QACL,UAAU;AAAA,QACV;AAAA,QACA,YAAY,iBAAiB,CAAC,EAAE;AAAA,QAChC,QAAQ,iBAAiB,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI;AAAA,MAC1D;AAAA,IACF;AAEA,WAAO,EAAE,UAAU,MAAM,OAAO;AAAA,EAClC;AACF;AAEA,SAAS,sBACP,UACA,OACmB;AACnB,MAAI,aAAa,QAAQ;AACvB,WAAO,EAAE,MAAM,qBAAqB,QAAQ,MAAM,UAAU,QAAQ,SAAS,sBAAsB;AAAA,EACrG;AAEA,QAAM,UAAU,OAAO,MAAM,WAAW,MAAM,OAAO,EAAE;AACvD,aAAW,WAAW,oBAAoB;AACxC,QAAI,QAAQ,KAAK,OAAO,GAAG;AACzB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,SAAS,uCAAuC,QAAQ,MAAM;AAAA,MAChE;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,MAAM,qBAAqB,QAAQ,MAAM,UAAU,QAAQ,SAAS,wBAAwB;AACvG;AAEA,SAAS,mBACP,UACA,OACmB;AACnB,QAAM,QAAQ,CAAC,OAAO,MAAM,QAAQ,EAAE,GAAG,OAAO,MAAM,aAAa,EAAE,GAAG,OAAO,MAAM,YAAY,EAAE,CAAC;AAEpG,aAAW,KAAK,OAAO;AACrB,eAAW,WAAW,gBAAgB;AACpC,UAAI,QAAQ,KAAK,CAAC,GAAG;AACnB,eAAO;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,SAAS,+BAA+B,CAAC;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,MAAM,kBAAkB,QAAQ,MAAM,UAAU,QAAQ,SAAS,oBAAoB;AAChG;AAEA,SAAS,oBACP,WACA,OACmB;AACnB,QAAM,aAAa,KAAK,UAAU,KAAK;AAEvC,aAAW,WAAW,iBAAiB;AACrC,QAAI,QAAQ,KAAK,UAAU,GAAG;AAC5B,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,MAAM,mBAAmB,QAAQ,MAAM,UAAU,QAAQ,SAAS,sBAAsB;AACnG;AAEA,SAAS,oBACP,UACA,OACmB;AACnB,MAAI,aAAa,QAAQ;AACvB,WAAO,EAAE,MAAM,mBAAmB,QAAQ,MAAM,UAAU,QAAQ,SAAS,MAAM;AAAA,EACnF;AAEA,QAAM,UAAU,OAAO,MAAM,WAAW,EAAE,EAAE,YAAY;AACxD,aAAW,WAAW,sBAAsB;AAC1C,QAAI,QAAQ,SAAS,OAAO,GAAG;AAC7B,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,SAAS,6BAA6B,OAAO;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,MAAM,mBAAmB,QAAQ,MAAM,UAAU,QAAQ,SAAS,qBAAqB;AAClG;AAEA,SAAS,oBACP,UACA,OACA,SACmB;AACnB,QAAM,SAAS,QAAQ,kBAAkB,MAAM,EAAE;AACjD,MAAI,iBAAiB;AAErB,aAAW,QAAQ,QAAQ;AACzB,QAAI,KAAK,SAAS,YAAY,KAAK,UAAU,KAAK,KAAK,MAAM,KAAK,UAAU,KAAK,GAAG;AAClF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,kBAAkB,GAAG;AACvB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS,GAAG,QAAQ,WAAW,iBAAiB,CAAC;AAAA,IACnD;AAAA,EACF;AAEA,SAAO,EAAE,MAAM,mBAAmB,QAAQ,MAAM,UAAU,QAAQ,SAAS,yBAAyB;AACtG;AAEA,SAAS,iBACP,UACA,OACmB;AACnB,MAAI,aAAa,gBAAgB,aAAa,cAAc;AAC1D,WAAO,EAAE,MAAM,gBAAgB,QAAQ,MAAM,UAAU,QAAQ,SAAS,MAAM;AAAA,EAChF;AAEA,QAAM,UAAU,OAAO,MAAM,WAAW,EAAE;AAC1C,QAAM,eAAe,QAAQ,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM;AACnD,UAAM,OAAO,EAAE,WAAW,CAAC;AAC3B,WAAO,OAAO,MAAM,SAAS,MAAM,SAAS,MAAM,SAAS;AAAA,EAC7D,CAAC;AAED,MAAI,aAAa,SAAS,QAAQ,SAAS,KAAK;AAC9C,WAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,IACX;AAAA,EACF;AAEA,SAAO,EAAE,MAAM,gBAAgB,QAAQ,MAAM,UAAU,QAAQ,SAAS,eAAe;AACzF;;;ACpMA,IAAM,YAAN,MAAgB;AAAA,EAId,YAA6B,KAAa;AAAb;AAAA,EAAc;AAAA,EAAd;AAAA,EAHrB,UAAU;AAAA,EACV,QAAwB,CAAC;AAAA,EAIjC,UAAyB;AACvB,QAAI,KAAK,UAAU,KAAK,KAAK;AAC3B,WAAK;AACL,aAAO,QAAQ,QAAQ;AAAA,IACzB;AACA,WAAO,IAAI,QAAc,CAAC,YAAY;AACpC,WAAK,MAAM,KAAK,OAAO;AAAA,IACzB,CAAC;AAAA,EACH;AAAA,EAEA,UAAgB;AACd,SAAK;AACL,UAAM,OAAO,KAAK,MAAM,MAAM;AAC9B,QAAI,MAAM;AACR,WAAK;AACL,WAAK;AAAA,IACP;AAAA,EACF;AACF;AAEA,SAAS,mBACP,WACA,UACkB;AAClB,QAAM,UAA4B,CAAC;AACnC,MAAI,eAA+B,CAAC;AACpC,MAAI,2BAA2B;AAE/B,aAAW,QAAQ,WAAW;AAC5B,UAAM,OAAO,SAAS,IAAI,KAAK,IAAI;AACnC,UAAM,eAAe,OAAO,KAAK,cAAc,KAAK,oBAAoB;AAExE,QAAI,gBAAgB,0BAA0B;AAC5C,mBAAa,KAAK,IAAI;AAAA,IACxB,OAAO;AACL,UAAI,aAAa,SAAS,GAAG;AAC3B,gBAAQ,KAAK,YAAY;AAAA,MAC3B;AACA,qBAAe,CAAC,IAAI;AACpB,iCAA2B;AAAA,IAC7B;AAAA,EACF;AAEA,MAAI,aAAa,SAAS,GAAG;AAC3B,YAAQ,KAAK,YAAY;AAAA,EAC3B;AAEA,SAAO;AACT;AAEA,eAAe,gBACb,MACA,UACA,SACA,iBACA,aACA,UACA,qBACA,kBACA,WAC8B;AAC9B,MAAI,aAAa,SAAS;AACxB,WAAO;AAAA,MACL,IAAI,KAAK;AAAA,MACT,MAAM,KAAK;AAAA,MACX,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,IACd;AAAA,EACF;AAEA,QAAM,OAAO,SAAS,IAAI,KAAK,IAAI;AACnC,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,MACL,IAAI,KAAK;AAAA,MACT,MAAM,KAAK;AAAA,MACX,QAAQ,iBAAiB,KAAK,IAAI;AAAA,MAClC,SAAS;AAAA,MACT,YAAY;AAAA,IACd;AAAA,EACF;AAEA,QAAM,QAAQ,YAAY,IAAI;AAE9B,MAAI;AACF,UAAM,cAAc,KAAK,YAAY,UAAU,KAAK,KAAK;AACzD,QAAI,CAAC,YAAY,SAAS;AACxB,aAAO;AAAA,QACL,IAAI,KAAK;AAAA,QACT,MAAM,KAAK;AAAA,QACX,QAAQ,qBAAqB,KAAK,IAAI,KAAK,YAAY,MAAM,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,QACpG,SAAS;AAAA,QACT,YAAY,KAAK,MAAM,YAAY,IAAI,IAAI,KAAK;AAAA,MAClD;AAAA,IACF;AAEA,QAAI,iBAAiB;AACnB,YAAM,UAAU,MAAM,gBAAgB,KAAK,MAAM,KAAK,KAAK;AAC3D,UAAI,CAAC,SAAS;AACZ,eAAO;AAAA,UACL,IAAI,KAAK;AAAA,UACT,MAAM,KAAK;AAAA,UACX,QAAQ,+BAA+B,KAAK,IAAI;AAAA,UAChD,SAAS;AAAA,UACT,YAAY,KAAK,MAAM,YAAY,IAAI,IAAI,KAAK;AAAA,QAClD;AAAA,MACF;AAAA,IACF;AAEA,QAAI,kBAAkB;AACpB,YAAM,UAAU,iBAAiB,OAAO,KAAK,MAAM,YAAY,MAAiC,aAAa,CAAC;AAC9G,UAAI,QAAQ,iBAAiB,SAAS;AACpC,eAAO;AAAA,UACL,IAAI,KAAK;AAAA,UACT,MAAM,KAAK;AAAA,UACX,QAAQ,yBAAyB,QAAQ,UAAU,yBAAyB,KAAK,QAAQ,SAAS,UAAU,QAAQ,eAAe,QAAQ,CAAC,CAAC;AAAA,UAC7I,SAAS;AAAA,UACT,YAAY,KAAK,MAAM,YAAY,IAAI,IAAI,KAAK;AAAA,QAClD;AAAA,MACF;AAAA,IACF,WAAW,YAAY,qBAAqB;AAC1C,YAAM,SAAS,SAAS,OAAO,KAAK,MAAM,YAAY,MAAiC,mBAAmB;AAC1G,UAAI,CAAC,OAAO,UAAU;AACpB,eAAO;AAAA,UACL,IAAI,KAAK;AAAA,UACT,MAAM,KAAK;AAAA,UACX,QAAQ,wBAAwB,OAAO,UAAU,gBAAgB;AAAA,UACjE,SAAS;AAAA,UACT,YAAY,KAAK,MAAM,YAAY,IAAI,IAAI,KAAK;AAAA,QAClD;AAAA,MACF;AAAA,IACF;AAEA,UAAM,SAAS,MAAM,KAAK,QAAQ,YAAY,MAAM,OAAO;AAE3D,QAAI,kBAAkB;AACpB,uBAAiB,cAAc,KAAK,MAAM,YAAY,MAAiC,aAAa,CAAC;AAAA,IACvG;AAEA,WAAO;AAAA,MACL,IAAI,KAAK;AAAA,MACT,MAAM,KAAK;AAAA,MACX;AAAA,MACA,SAAS;AAAA,MACT,YAAY,KAAK,MAAM,YAAY,IAAI,IAAI,KAAK;AAAA,IAClD;AAAA,EACF,SAAS,KAAc;AACrB,UAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,QAAI,kBAAkB;AACpB,uBAAiB,cAAc,KAAK,MAAM,KAAK,OAAO,aAAa,CAAC;AAAA,IACtE;AACA,WAAO;AAAA,MACL,IAAI,KAAK;AAAA,MACT,MAAM,KAAK;AAAA,MACX,QAAQ,mBAAmB,KAAK,IAAI,KAAK,OAAO;AAAA,MAChD,SAAS;AAAA,MACT,YAAY,KAAK,MAAM,YAAY,IAAI,IAAI,KAAK;AAAA,IAClD;AAAA,EACF;AACF;AAkBA,eAAsB,iBACpB,OACA,WACA,SACA,iBACA,aACA,SACgC;AAChC,QAAM,WAAW,SAAS;AAC1B,QAAM,eAAe,SAAS;AAC9B,QAAM,UAAU,mBAAmB,WAAW,KAAK;AACnD,QAAM,UAAiC,CAAC;AAExC,aAAW,SAAS,SAAS;AAC3B,QAAI,aAAa,SAAS;AACxB,iBAAW,QAAQ,OAAO;AACxB,gBAAQ,KAAK;AAAA,UACX,IAAI,KAAK;AAAA,UACT,MAAM,KAAK;AAAA,UACX,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,YAAY;AAAA,QACd,CAAC;AAAA,MACH;AACA;AAAA,IACF;AAEA,QAAI,MAAM,SAAS,GAAG;AACpB,YAAM,YAAY,IAAI,UAAU,EAAE;AAClC,YAAMC,YAAW,MAAM;AAAA,QAAI,CAAC,SAC1B,UAAU,QAAQ,EAAE,KAAK,YAAY;AACnC,cAAI;AACF,mBAAO,MAAM,gBAAgB,MAAM,OAAO,SAAS,iBAAiB,aAAa,UAAU,yBAAyB,OAAO,GAAG,cAAc,SAAS,SAAS;AAAA,UAChK,UAAE;AACA,sBAAU,QAAQ;AAAA,UACpB;AAAA,QACF,CAAC;AAAA,MACH;AACA,YAAM,UAAU,MAAM,QAAQ,WAAWA,SAAQ;AACjD,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,cAAM,IAAI,QAAQ,CAAC;AACnB,YAAI,EAAE,WAAW,aAAa;AAC5B,kBAAQ,KAAK,EAAE,KAAK;AAAA,QACtB,OAAO;AACL,kBAAQ,KAAK;AAAA,YACX,IAAI,MAAM,CAAC,EAAE;AAAA,YACb,MAAM,MAAM,CAAC,EAAE;AAAA,YACf,QAAQ,qBAAqB,EAAE,kBAAkB,QAAQ,EAAE,OAAO,UAAU,OAAO,EAAE,MAAM,CAAC;AAAA,YAC5F,SAAS;AAAA,YACT,YAAY;AAAA,UACd,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,OAAO;AACL,YAAM,SAAS,MAAM,gBAAgB,MAAM,CAAC,GAAG,OAAO,SAAS,iBAAiB,aAAa,UAAU,yBAAyB,OAAO,GAAG,cAAc,SAAS,SAAS;AAC1K,cAAQ,KAAK,MAAM;AAAA,IACrB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,yBAAyB,SAA+D;AAC/F,MAAI,CAAC,SAAS,SAAU,QAAO;AAC/B,SAAO;AAAA,IACL,WAAW,QAAQ,aAAa;AAAA,IAChC,mBAAmB,QAAQ,qBAAqB,CAAC;AAAA,IACjD,KAAK,QAAQ,IAAI;AAAA,EACnB;AACF;;;AC9QA,gCAAqB;AACrB,iBAAkB;AAGlB,IAAM,aAAa,KAAK;AACxB,IAAM,gBAAgB,KAAK;AAE3B,SAAS,eAAe,QAAwB;AAC9C,MAAI,OAAO,UAAU,WAAY,QAAO;AACxC,QAAM,SAAS;AAAA;AAAA,uCAA4C,aAAa,aAAa,aAAa,OAAO,OAAO,MAAM;AAAA;AAAA;AACtH,SAAO,OAAO,MAAM,GAAG,aAAa,IAAI,SAAS,OAAO,MAAM,CAAC,aAAa;AAC9E;AAEO,IAAM,WAAW,WAAW;AAAA,EACjC,MAAM;AAAA,EACN,aACE;AAAA,EACF,aAAa,aAAE,OAAO;AAAA,IACpB,SAAS,aAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,IAC3D,SAAS,aAAE,OAAO,EAAE,SAAS,EAAE,SAAS,0CAA0C;AAAA,IAClF,SAAS,aAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mCAAmC;AAAA,EAC7E,CAAC;AAAA,EACD,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,SAAS,OAAO,EAAE,SAAS,UAAU,MAAQ,QAAQ,GAAG,YAAY;AAClE,WAAO,IAAI,QAAgB,CAAC,YAAY;AACtC,UAAI,UAAU;AACd,YAAM,OAAO,CAAC,WAAmB;AAC/B,YAAI,QAAS;AACb,kBAAU;AACV,gBAAQ,MAAM;AAAA,MAChB;AAEA,UAAI,QAAQ,aAAa,SAAS;AAChC,aAAK,kCAAkC;AACvC;AAAA,MACF;AAEA,YAAM,YAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACE,KAAK,WAAW,QAAQ;AAAA,UACxB;AAAA,UACA,WAAW,KAAK,OAAO;AAAA,UACvB,YAAY;AAAA,QACd;AAAA,QACA,CAAC,OAAO,QAAQ,WAAW;AACzB,cAAI,SAAS;AACb,cAAI,OAAQ,WAAU;AAAA,EAAY,MAAM;AAAA;AAAA;AACxC,cAAI,OAAQ,WAAU;AAAA,EAAY,MAAM;AAAA;AAAA;AACxC,oBAAU,cAAc,OAAO,QAAQ,CAAC;AACxC,cAAI,SAAS,MAAM,QAAQ;AACzB,qBAAS,2BAA2B,OAAO;AAAA;AAAA,EAAS,MAAM;AAAA,UAC5D;AACA,eAAK,eAAe,MAAM,CAAC;AAAA,QAC7B;AAAA,MACF;AAEA,YAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,aAAK,8BAA8B,IAAI,OAAO,EAAE;AAAA,MAClD,CAAC;AAED,UAAI,QAAQ,aAAa;AACvB,gBAAQ,YAAY;AAAA,UAClB;AAAA,UACA,MAAM;AACJ,kBAAM,KAAK,SAAS;AACpB,iBAAK,iBAAiB;AAAA,UACxB;AAAA,UACA,EAAE,MAAM,KAAK;AAAA,QACf;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF,CAAC;;;AC1ED,sBAAe;AACf,uBAAiB;AACjB,IAAAC,cAAkB;AAGlB,IAAM,kBAAkB;AAEjB,IAAM,eAAe,WAAW;AAAA,EACrC,MAAM;AAAA,EACN,aACE;AAAA,EACF,aAAa,cAAE,OAAO;AAAA,IACpB,MAAM,cAAE,OAAO,EAAE,SAAS,uCAAuC;AAAA,IACjE,QAAQ,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS,+CAA+C;AAAA,IACtF,OAAO,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS,iCAAiC;AAAA,EACzE,CAAC;AAAA,EACD,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,SAAS,OAAO,EAAE,MAAM,UAAU,QAAQ,MAAM,GAAG,YAAY;AAC7D,QAAI;AACF,YAAM,WAAW,iBAAAC,QAAK,WAAW,QAAQ,IAAI,WAAW,iBAAAA,QAAK,QAAQ,QAAQ,KAAK,QAAQ;AAE1F,YAAM,UAAU,MAAM,gBAAAC,QAAG,SAAS,UAAU,OAAO;AACnD,YAAM,QAAQ,QAAQ,MAAM,IAAI;AAEhC,YAAM,YAAY,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI;AACjD,YAAM,aAAa,YAAY;AAC/B,YAAM,WAAW,SAAS,OAAO,aAAa,QAAQ,MAAM;AAC5D,YAAM,WAAW,MAAM,MAAM,YAAY,QAAQ;AAEjD,YAAM,YAAY,SACf,IAAI,CAAC,MAAM,MAAM;AAChB,cAAM,UAAU,YAAY;AAC5B,cAAM,YAAY,KAAK,SAAS,kBAAkB,KAAK,MAAM,GAAG,eAAe,IAAI,QAAQ;AAC3F,eAAO,GAAG,OAAO,KAAK,SAAS;AAAA,MACjC,CAAC,EACA,KAAK,IAAI;AAEZ,aAAO;AAAA,IACT,SAAS,KAAc;AACrB,UAAK,IAA8B,SAAS,UAAU;AACpD,eAAO,0BAA0B,QAAQ;AAAA,MAC3C;AACA,UAAK,IAA8B,SAAS,UAAU;AACpD,eAAO,+BAA+B,QAAQ;AAAA,MAChD;AACA,aAAO,uBAAuB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,IAChF;AAAA,EACF;AACF,CAAC;;;ACjDD,IAAAC,mBAAe;AACf,IAAAC,oBAAiB;AACjB,IAAAC,cAAkB;AAGX,IAAM,gBAAgB,WAAW;AAAA,EACtC,MAAM;AAAA,EACN,aACE;AAAA,EACF,aAAa,cAAE,OAAO;AAAA,IACpB,MAAM,cAAE,OAAO,EAAE,SAAS,kBAAkB;AAAA,IAC5C,SAAS,cAAE,OAAO,EAAE,SAAS,kBAAkB;AAAA,EACjD,CAAC;AAAA,EACD,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,SAAS,OAAO,EAAE,MAAM,UAAU,QAAQ,GAAG,YAAY;AACvD,QAAI;AACF,YAAM,WAAW,kBAAAC,QAAK,WAAW,QAAQ,IAAI,WAAW,kBAAAA,QAAK,QAAQ,QAAQ,KAAK,QAAQ;AAC1F,YAAM,MAAM,kBAAAA,QAAK,QAAQ,QAAQ;AAEjC,YAAM,iBAAAC,QAAG,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AACvC,YAAM,iBAAAA,QAAG,UAAU,UAAU,SAAS,OAAO;AAE7C,aAAO,SAAS,QAAQ,MAAM,kBAAkB,QAAQ;AAAA,IAC1D,SAAS,KAAc;AACrB,aAAO,uBAAuB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,IAChF;AAAA,EACF;AACF,CAAC;;;AC5BD,IAAAC,mBAAe;AACf,IAAAC,oBAAiB;AACjB,IAAAC,cAAkB;;;ACEX,IAAM,iBAAN,cAA6B,MAAM;AAAA,EACxC,YAA4B,MAAiC,SAAiB;AAC5E,UAAM,OAAO;AADa;AAE1B,SAAK,OAAO;AAAA,EACd;AAAA,EAH4B;AAI9B;AAEA,SAAS,YAAY,GAAW,GAAmB;AACjD,QAAM,IAAI,EAAE;AACZ,QAAM,IAAI,EAAE;AACZ,MAAI,MAAM,EAAG,QAAO;AACpB,MAAI,MAAM,EAAG,QAAO;AACpB,MAAI,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC,IAAI,IAAK,QAAO,KAAK,IAAI,GAAG,CAAC;AAChE,MAAI,OAAO,IAAI,MAAM,IAAI,CAAC,EAAE,KAAK,CAAC;AAClC,MAAI,OAAO,IAAI,MAAM,IAAI,CAAC,EAAE,KAAK,CAAC;AAClC,WAAS,IAAI,GAAG,KAAK,GAAG,IAAK,MAAK,CAAC,IAAI;AACvC,WAAS,IAAI,GAAG,KAAK,GAAG,KAAK;AAC3B,SAAK,CAAC,IAAI;AACV,aAAS,IAAI,GAAG,KAAK,GAAG,KAAK;AAC3B,YAAM,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI;AACzC,WAAK,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,IAAI;AAAA,IACrE;AACA,KAAC,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI;AAAA,EAC5B;AACA,SAAO,KAAK,CAAC;AACf;AAEA,SAAS,WAAW,GAAW,GAAmB;AAChD,MAAI,EAAE,SAAS,OAAQ,EAAE,SAAS,IAAM,QAAO,MAAM,IAAI,IAAI;AAC7D,QAAM,SAAS,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM;AAC1C,MAAI,WAAW,EAAG,QAAO;AACzB,SAAO,IAAI,YAAY,GAAG,CAAC,IAAI;AACjC;AAEA,UAAU,eAAe,SAAiB,MAAgD;AACxF,MAAI,QAAQ,SAAS,IAAI,EAAG,OAAM;AACpC;AAEA,UAAU,oBAAoB,SAAiB,MAAgD;AAC7F,QAAM,QAAQ,KAAK,MAAM,IAAI,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AAChD,QAAM,eAAe,QAAQ,MAAM,IAAI;AACvC,WAAS,IAAI,GAAG,KAAK,aAAa,SAAS,MAAM,QAAQ,KAAK;AAC5D,QAAI,aAAa,MAAM,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,CAAC,IAAI,QAAQ,GAAG,KAAK,MAAM,MAAM,GAAG,CAAC,GAAG;AACxF,YAAM,aAAa,MAAM,GAAG,IAAI,MAAM,MAAM,EAAE,KAAK,IAAI;AAAA,IACzD;AAAA,EACF;AACF;AAEA,UAAU,oBAAoB,SAAiB,MAAgD;AAC7F,QAAM,YAAY,KAAK,MAAM,IAAI;AACjC,QAAM,eAAe,QAAQ,MAAM,IAAI;AAEvC,MAAI,UAAU,SAAS,EAAG;AAE1B,QAAM,YAAY,UAAU,CAAC;AAC7B,QAAM,WAAW,UAAU,UAAU,SAAS,CAAC;AAC/C,QAAM,cAAc,UAAU,MAAM,GAAG,EAAE;AAEzC,WAAS,IAAI,GAAG,KAAK,aAAa,SAAS,UAAU,QAAQ,KAAK;AAChE,QAAI,aAAa,CAAC,MAAM,UAAW;AACnC,UAAM,SAAS,IAAI,UAAU,SAAS;AACtC,QAAI,aAAa,MAAM,MAAM,SAAU;AAEvC,UAAM,aAA+C,CAAC;AAEtD,aAAS,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK;AACnC,iBAAW,KAAK,EAAE,KAAK,GAAG,OAAO,EAAE,CAAC;AAAA,IACtC;AAEA,QAAI,aAAa;AACjB,aAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,YAAM,cAAc,aAAa,IAAI,IAAI,CAAC;AAC1C,YAAM,MAAM,WAAW,YAAY,CAAC,GAAG,WAAW;AAClD,oBAAc;AACd,UAAI,WAAW,CAAC,EAAG,YAAW,CAAC,EAAE,QAAQ;AAAA,IAC3C;AAEA,UAAM,WAAW,aAAa,YAAY;AAC1C,UAAM,YAAY,WAAW,SAAS,IAAI,MAAM;AAEhD,QAAI,YAAY,WAAW;AACzB,YAAM,aAAa,MAAM,GAAG,IAAI,UAAU,MAAM,EAAE,KAAK,IAAI;AAAA,IAC7D;AAAA,EACF;AACF;AAEA,UAAU,6BAA6B,SAAiB,MAAgD;AACtG,QAAM,WAAW,KAAK,QAAQ,QAAQ,GAAG,EAAE,KAAK;AAChD,MAAI,CAAC,SAAU;AACf,QAAM,cAAc,QAAQ,QAAQ,QAAQ,GAAG,EAAE,KAAK;AACtD,QAAM,MAAM,YAAY,QAAQ,QAAQ;AACxC,MAAI,QAAQ,GAAI;AAEhB,QAAM,YAAY,SAAS,MAAM,GAAG,EAAE,CAAC;AACvC,QAAM,WAAW,SAAS,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE,IAAI;AACzD,QAAM,WAAW,QAAQ,QAAQ,SAAS;AAC1C,QAAM,UAAU,QAAQ,YAAY,QAAQ;AAC5C,MAAI,aAAa,MAAM,YAAY,MAAM,UAAU,SAAU;AAE7D,QAAM,QAAQ,UAAU,UAAU,UAAU,SAAS,MAAM;AAC7D;AAEA,UAAU,4BAA4B,SAAiB,MAAgD;AACrG,QAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,QAAM,YAAY,KAAK,IAAI,GAAG,MAAM,OAAO,OAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,IAAI,OAAK,EAAE,MAAM,QAAQ,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;AACjH,QAAM,WAAW,MAAM,IAAI,OAAK,EAAE,UAAU,SAAS,CAAC,EAAE,KAAK,IAAI;AACjE,MAAI,QAAQ,SAAS,QAAQ,EAAG,OAAM;AACxC;AAEA,UAAU,yBAAyB,SAAiB,MAAgD;AAClG,QAAM,aAAa,KAChB,QAAQ,QAAQ,IAAI,EACpB,QAAQ,QAAQ,GAAI,EACpB,QAAQ,QAAQ,GAAG,EACnB,QAAQ,QAAQ,GAAG;AACtB,MAAI,QAAQ,SAAS,UAAU,EAAG,OAAM;AAC1C;AAEA,UAAU,wBAAwB,SAAiB,MAAgD;AACjG,QAAM,UAAU,KAAK,KAAK;AAC1B,MAAI,QAAQ,SAAS,OAAO,EAAG,OAAM;AACvC;AAEA,UAAU,qBAAqB,SAAiB,MAAgD;AAC9F,QAAM,YAAY,KAAK,MAAM,IAAI;AACjC,MAAI,UAAU,SAAS,EAAG;AAE1B,QAAM,YAAY,UAAU,CAAC,EAAE,KAAK;AACpC,QAAM,WAAW,UAAU,UAAU,SAAS,CAAC,EAAE,KAAK;AACtD,QAAM,eAAe,QAAQ,MAAM,IAAI;AAEvC,WAAS,IAAI,GAAG,KAAK,aAAa,SAAS,GAAG,KAAK;AACjD,QAAI,aAAa,CAAC,EAAE,KAAK,MAAM,UAAW;AAE1C,QAAI,aAAa;AACjB,QAAI,YAAY;AAEhB,aAAS,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAChD,UAAI,aAAa,CAAC,EAAE,KAAK,MAAM,UAAU;AACvC,cAAM,cAAc,IAAI,IAAI;AAC5B,YAAI,aAAa;AACjB,iBAAS,IAAI,GAAG,KAAK,aAAa,KAAK;AACrC,gBAAM,OAAO,KAAK,MAAO,KAAK,cAAc,MAAO,UAAU,SAAS,EAAE;AACxE,cAAI,QAAQ,KAAK,OAAO,UAAU,SAAS,GAAG;AAC5C,gBAAI,WAAW,aAAa,IAAI,CAAC,EAAE,KAAK,GAAG,UAAU,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK;AAC5E;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,cAAM,QAAQ,aAAa;AAC3B,YAAI,QAAQ,WAAW;AACrB,sBAAY;AACZ,uBAAa;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAEA,QAAI,eAAe,MAAM,YAAY,KAAK;AACxC,YAAM,aAAa,MAAM,GAAG,aAAa,CAAC,EAAE,KAAK,IAAI;AAAA,IACvD;AAAA,EACF;AACF;AAEA,IAAM,YAA0B;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,aACd,SACA,WACA,WACA,aAAa,OACL;AACR,aAAW,YAAY,WAAW;AAChC,eAAW,UAAU,SAAS,SAAS,SAAS,GAAG;AACjD,YAAM,MAAM,QAAQ,QAAQ,MAAM;AAClC,UAAI,QAAQ,GAAI;AAEhB,UAAI,YAAY;AACd,eAAO,QAAQ,MAAM,MAAM,EAAE,KAAK,SAAS;AAAA,MAC7C;AAEA,YAAM,WAAW,QAAQ,QAAQ,MAAM;AACvC,YAAM,UAAU,QAAQ,YAAY,MAAM;AAC1C,UAAI,aAAa,QAAS;AAE1B,aAAO,QAAQ,UAAU,GAAG,QAAQ,IAAI,YAAY,QAAQ,UAAU,WAAW,OAAO,MAAM;AAAA,IAChG;AAAA,EACF;AAEA,QAAM,IAAI,eAAe,aAAa,iEAAiE;AACzG;AAEO,SAAS,cAAc,SAAiB,MAAuB;AACpE,MAAI;AACF,iBAAa,SAAS,MAAM,mBAAmB;AAC/C,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;AD7MO,IAAM,eAAe,WAAW;AAAA,EACrC,MAAM;AAAA,EACN,aACE;AAAA,EACF,aAAa,cAAE,OAAO;AAAA,IACpB,MAAM,cAAE,OAAO,EAAE,SAAS,kBAAkB;AAAA,IAC5C,WAAW,cAAE,OAAO,EAAE,SAAS,gDAAgD;AAAA,IAC/E,WAAW,cAAE,OAAO,EAAE,SAAS,wBAAwB;AAAA,IACvD,YAAY,cAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,mDAAmD;AAAA,EACjG,CAAC;AAAA,EACD,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,SAAS,OAAO,EAAE,MAAM,UAAU,WAAW,WAAW,aAAa,MAAM,GAAG,YAAY;AACxF,QAAI;AACF,YAAM,WAAW,kBAAAC,QAAK,WAAW,QAAQ,IAAI,WAAW,kBAAAA,QAAK,QAAQ,QAAQ,KAAK,QAAQ;AAE1F,YAAM,UAAU,MAAM,iBAAAC,QAAG,SAAS,UAAU,OAAO;AAEnD,UAAI;AACJ,UAAI,QAAQ;AAEZ,UAAI,YAAY;AACd,cAAM,cAAc,QAAQ,MAAM,SAAS,EAAE,SAAS;AACtD,YAAI,gBAAgB,GAAG;AACrB,cAAI;AACF,yBAAa,aAAa,SAAS,WAAW,WAAW,IAAI;AAC7D,oBAAQ;AAAA,UACV,QAAQ;AACN,mBAAO,iCAAiC,QAAQ;AAAA,UAClD;AAAA,QACF,OAAO;AACL,uBAAa,QAAQ,MAAM,SAAS,EAAE,KAAK,SAAS;AACpD,kBAAQ;AAAA,QACV;AAAA,MACF,OAAO;AACL,YAAI;AACF,uBAAa,aAAa,SAAS,WAAW,WAAW,KAAK;AAC9D,kBAAQ;AAAA,QACV,SAAS,KAAK;AACZ,gBAAM,OAAQ,IAA0B;AACxC,cAAI,SAAS,aAAa;AACxB,mBAAO,4CAA4C,QAAQ;AAAA,UAC7D;AACA,iBAAO,iCAAiC,QAAQ;AAAA,QAClD;AAAA,MACF;AAEA,YAAM,iBAAAA,QAAG,UAAU,UAAU,YAAY,OAAO;AAEhD,aAAO,YAAY,KAAK,qBAAqB,QAAQ;AAAA,IACvD,SAAS,KAAc;AACrB,UAAK,IAA8B,SAAS,UAAU;AACpD,eAAO,0BAA0B,QAAQ;AAAA,MAC3C;AACA,aAAO,uBAAuB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,IAChF;AAAA,EACF;AACF,CAAC;;;AE/DD,IAAAC,mBAAe;AACf,IAAAC,oBAAiB;AACjB,IAAAC,cAAkB;AAElB;AAEA,IAAM,cAAc;AAEpB,eAAeC,SAAQ,KAAgC;AACrD,QAAM,EAAE,SAAS,KAAK,IAAI,MAAM;AAChC,QAAM,UAAU,MAAM,KAAK,GAAG;AAC9B,SAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,IAAI;AAClC;AAEA,SAAS,aAAa,UAAkB,gBAAkC;AACxE,MAAI,CAAC,eAAgB,QAAO;AAC5B,QAAM,OAAO,kBAAAC,QAAK,SAAS,QAAQ;AACnC,QAAM,KAAK,aAAa,cAAc;AACtC,SAAO,GAAG,KAAK,IAAI;AACrB;AAEO,IAAM,WAAW,WAAW;AAAA,EACjC,MAAM;AAAA,EACN,aACE;AAAA,EACF,aAAa,cAAE,OAAO;AAAA,IACpB,SAAS,cAAE,OAAO,EAAE,SAAS,gDAAgD;AAAA,IAC7E,MAAM,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS,qDAAqD;AAAA,IAC1F,SAAS,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS,qDAAqD;AAAA,EAC/F,CAAC;AAAA,EACD,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,SAAS,OAAO,EAAE,SAAS,MAAM,YAAY,QAAQ,GAAG,YAAY;AAClE,QAAI;AACF,YAAM,YAAY,aACd,kBAAAA,QAAK,WAAW,UAAU,IACxB,aACA,kBAAAA,QAAK,QAAQ,QAAQ,KAAK,UAAU,IACtC,QAAQ;AAEZ,YAAM,WAAW,MAAMD,SAAQ,SAAS;AACxC,YAAM,KAAK,aAAa,OAAO;AAE/B,YAAM,UAAwD,CAAC;AAE/D,iBAAW,YAAY,UAAU;AAC/B,cAAM,WAAW,kBAAAC,QAAK,SAAS,WAAW,QAAQ;AAClD,YAAI,GAAG,KAAK,QAAQ,KAAK,aAAa,UAAU,OAAO,GAAG;AACxD,cAAI;AACF,kBAAM,OAAO,MAAM,iBAAAC,QAAG,KAAK,QAAQ;AACnC,oBAAQ,KAAK,EAAE,UAAU,UAAU,SAAS,KAAK,QAAQ,CAAC;AAAA,UAC5D,QAAQ;AACN,oBAAQ,KAAK,EAAE,UAAU,UAAU,SAAS,EAAE,CAAC;AAAA,UACjD;AAAA,QACF;AAAA,MACF;AAEA,cAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO;AAC5C,YAAM,UAAU,QAAQ,MAAM,GAAG,WAAW;AAC5C,aAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,IAAI;AAAA,IACjD,SAAS,KAAc;AACrB,aAAO,0BAA0B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,IACnF;AAAA,EACF;AACF,CAAC;;;AChED,IAAAC,mBAAe;AACf,IAAAC,oBAAiB;AACjB,IAAAC,cAAkB;AAElB;AAEA,IAAM,cAAc;AAEpB,eAAeC,SAAQ,KAAgC;AACrD,QAAM,EAAE,SAAS,KAAK,IAAI,MAAM;AAChC,QAAM,UAAU,MAAM,KAAK,GAAG;AAC9B,SAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,IAAI;AAClC;AAEO,IAAM,WAAW,WAAW;AAAA,EACjC,MAAM;AAAA,EACN,aACE;AAAA,EACF,aAAa,cAAE,OAAO;AAAA,IACpB,SAAS,cAAE,OAAO,EAAE,SAAS,kCAAkC;AAAA,IAC/D,MAAM,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS,wBAAwB;AAAA,IAC7D,SAAS,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS,wCAAwC;AAAA,EAClF,CAAC;AAAA,EACD,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,SAAS,OAAO,EAAE,SAAS,MAAM,YAAY,QAAQ,GAAG,YAAY;AAClE,QAAI;AACF,UAAI;AACJ,UAAI;AACF,gBAAQ,IAAI,OAAO,OAAO;AAAA,MAC5B,QAAQ;AACN,eAAO,sCAAsC,OAAO;AAAA,MACtD;AAEA,YAAM,YAAY,aACd,kBAAAC,QAAK,WAAW,UAAU,IACxB,aACA,kBAAAA,QAAK,QAAQ,QAAQ,KAAK,UAAU,IACtC,QAAQ;AAEZ,YAAM,YAAY,UAAU,aAAa,OAAO,IAAI;AACpD,YAAM,WAAW,MAAMD,SAAQ,SAAS;AACxC,YAAM,UAAoB,CAAC;AAE3B,iBAAW,YAAY,UAAU;AAC/B,YAAI,QAAQ,UAAU,YAAa;AAEnC,YAAI,WAAW;AACb,gBAAM,OAAO,kBAAAC,QAAK,SAAS,QAAQ;AACnC,cAAI,CAAC,UAAU,KAAK,IAAI,EAAG;AAAA,QAC7B;AAEA,YAAI;AACJ,YAAI;AACF,oBAAU,MAAM,iBAAAC,QAAG,SAAS,UAAU,OAAO;AAAA,QAC/C,QAAQ;AACN;AAAA,QACF;AAEA,cAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,cAAM,WAAW,kBAAAD,QAAK,SAAS,WAAW,QAAQ;AAElD,iBAAS,UAAU,GAAG,UAAU,MAAM,QAAQ,WAAW;AACvD,cAAI,QAAQ,UAAU,YAAa;AACnC,gBAAM,OAAO,MAAM,OAAO;AAC1B,cAAI,MAAM,KAAK,IAAI,GAAG;AACpB,oBAAQ,KAAK,GAAG,QAAQ,IAAI,UAAU,CAAC,KAAK,IAAI,EAAE;AAClD,kBAAM,YAAY;AAAA,UACpB,OAAO;AACL,kBAAM,YAAY;AAAA,UACpB;AAAA,QACF;AAAA,MACF;AAEA,UAAI,QAAQ,WAAW,GAAG;AACxB,eAAO;AAAA,MACT;AAEA,aAAO,QAAQ,KAAK,IAAI;AAAA,IAC1B,SAAS,KAAc;AACrB,aAAO,0BAA0B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,IACnF;AAAA,EACF;AACF,CAAC;;;ACnFD,IAAAE,cAAkB;AAGlB,IAAM,oBAAoB,MAAM;AAEzB,IAAM,eAAe,WAAW;AAAA,EACrC,MAAM;AAAA,EACN,aACE;AAAA,EACF,aAAa,cAAE,OAAO;AAAA,IACpB,KAAK,cAAE,OAAO,EAAE,IAAI,EAAE,SAAS,kBAAkB;AAAA,IACjD,QAAQ,cAAE,KAAK,CAAC,OAAO,QAAQ,OAAO,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,4BAA4B;AAAA,IACjG,SAAS,cAAE,OAAO,cAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,iBAAiB;AAAA,IACnE,MAAM,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS,6BAA6B;AAAA,EACpE,CAAC;AAAA,EACD,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,SAAS,OAAO,EAAE,KAAK,SAAS,OAAO,SAAS,KAAK,GAAG,YAAY;AAClE,QAAI;AACF,UAAI,QAAQ,aAAa,SAAS;AAChC,eAAO;AAAA,MACT;AAEA,YAAM,gBAAgB,YAAY,QAAQ,GAAM;AAChD,UAAI;AACJ,UAAI,QAAQ,aAAa;AACvB,iBAAS,YAAY,IAAI,CAAC,QAAQ,aAAa,aAAa,CAAC;AAAA,MAC/D,OAAO;AACL,iBAAS;AAAA,MACX;AAEA,YAAM,eAA4B;AAAA,QAChC;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU;AAAA,MACZ;AAEA,UAAI,QAAQ,WAAW,OAAO;AAC5B,qBAAa,OAAO;AAAA,MACtB;AAEA,YAAM,WAAW,MAAM,MAAM,KAAK,YAAY;AAC9C,YAAM,cAAc,SAAS,QAAQ,IAAI,cAAc,KAAK;AAC5D,YAAM,SAAS,SAAS;AAExB,YAAM,OAAO,MAAM,SAAS,KAAK;AAEjC,UAAI,SAAS,WAAW,MAAM;AAAA,gBAAmB,WAAW;AAAA;AAAA;AAC5D,UAAI,KAAK,SAAS,mBAAmB;AACnC,cAAM,OAAO,KAAK,MAAM,oBAAoB,CAAC;AAC7C,cAAM,SAAS;AAAA;AAAA,yCAA8C,IAAI,aAAa,IAAI,OAAO,KAAK,MAAM;AAAA;AAAA;AACpG,kBAAU,KAAK,MAAM,GAAG,IAAI,IAAI,SAAS,KAAK,MAAM,CAAC,IAAI;AAAA,MAC3D,OAAO;AACL,kBAAU;AAAA,MACZ;AAEA,aAAO;AAAA,IACT,SAAS,KAAc;AACrB,UAAI,eAAe,SAAS,IAAI,SAAS,cAAc;AACrD,eAAO;AAAA,MACT;AACA,aAAO,uBAAuB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,IAChF;AAAA,EACF;AACF,CAAC;","names":["fs","path","promises","import_zod","path","fs","import_promises","import_node_path","import_zod","path","fs","import_promises","import_node_path","import_zod","path","fs","import_promises","import_node_path","import_zod","walkDir","path","fs","import_promises","import_node_path","import_zod","walkDir","path","fs","import_zod"]}