@getollie/cli 0.2.1 → 0.2.3

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/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts","../src/cli-program.ts","../src/config.ts","../src/sandbox/mounts.ts","../src/utils/errors.ts","../src/doctor.ts","../src/sandbox/just-bash.ts","../src/sandbox/git/index.ts","../src/sandbox/git/fs-adapter.ts","../src/sandbox/git/http-adapter.ts","../src/index.ts","../src/exec.ts","../src/render.ts","../src/runner.ts","../src/executor/controller.ts","../src/executor/daytona.ts","../src/executor/delegator.ts","../src/prompt.ts","../src/tools.ts","../src/executor/local.ts","../src/executor/tools.ts","../src/provider.ts","../src/sandbox/runtime.ts","../src/utils/output.ts"],"sourcesContent":["import { CommanderError } from \"commander\";\nimport { main } from \"./cli-program.js\";\nimport { getErrorMessage } from \"./utils/errors.js\";\n\nmain().catch((error) => {\n if (error instanceof CommanderError) {\n process.exitCode = error.exitCode;\n return;\n }\n process.stderr.write(`error: ${getErrorMessage(error)}\\n`);\n process.exitCode = 1;\n});\n","import { Command } from \"commander\";\nimport { resolveRunConfig } from \"./config.js\";\nimport { runDoctor } from \"./doctor.js\";\nimport { runExecCommand } from \"./exec.js\";\nimport { packageName, packageVersion } from \"./index.js\";\nimport { createRenderer } from \"./render.js\";\nimport { runOneShot } from \"./runner.js\";\nimport { parseSandboxMounts } from \"./sandbox/mounts.js\";\nimport { runWorker } from \"./sandbox/runtime.js\";\nimport { CliError } from \"./utils/errors.js\";\nimport { truncateText } from \"./utils/output.js\";\n\ninterface ExecCliOptions {\n cwd?: string;\n timeout?: string;\n maxOutput?: string;\n ndjson?: boolean;\n}\n\ninterface AgentCliOptions extends ExecCliOptions {\n mount?: string[];\n provider?: string;\n model?: string;\n executor?: string;\n maxSteps?: string;\n color?: boolean;\n}\n\ninterface SandboxCliOptions {\n cwd?: string;\n mount?: string[];\n}\n\ninterface DoctorCliOptions {\n cwd?: string;\n provider?: string;\n model?: string;\n json?: boolean;\n}\n\nfunction addExecOptions(\n command: Command,\n ndjsonDescription = \"emit one JSON result record\",\n): Command {\n return command\n .option(\"--cwd <path>\", \"working directory\")\n .option(\"--timeout <ms>\", \"command timeout in milliseconds\")\n .option(\"--max-output <bytes>\", \"maximum retained output\")\n .option(\"--ndjson\", ndjsonDescription);\n}\n\nfunction collectOption(value: string, previous?: string[]): string[] {\n return [...(previous ?? []), value];\n}\n\nfunction addMountOption(command: Command): Command {\n return command.option(\n \"--mount <host-path:sandbox-path>\",\n \"mount a host directory read-write (repeatable)\",\n collectOption,\n );\n}\n\nfunction addAgentOptions(command: Command): Command {\n return addMountOption(addExecOptions(command, \"emit newline-delimited JSON event records\"))\n .option(\"--provider <provider>\", \"model provider\", \"openai\")\n .option(\"--model <model>\", \"model id\")\n .option(\n \"--executor <executor>\",\n \"delegated executor: none, local, or daytona (local is unisolated; daytona requires DAYTONA_API_KEY)\",\n \"none\",\n )\n .option(\"--max-steps <number>\", \"maximum model/tool steps\")\n .option(\"--no-color\", \"disable color output\");\n}\n\nasync function runAgent(promptParts: string[], options: AgentCliOptions): Promise<void> {\n const prompt = promptParts.join(\" \").trim();\n if (!prompt) {\n throw new CliError('A prompt is required. Example: ollie agent \"summarize this repository\"');\n }\n\n const config = await resolveRunConfig(options);\n const renderer = createRenderer({ ndjson: config.ndjson, color: config.color });\n const controller = new AbortController();\n const onSigint = () => controller.abort();\n process.once(\"SIGINT\", onSigint);\n\n try {\n const exitCode = await runOneShot({\n ...config,\n prompt,\n signal: controller.signal,\n onEvent: (event) => renderer.render(event),\n });\n process.exitCode = exitCode;\n } finally {\n process.removeListener(\"SIGINT\", onSigint);\n }\n}\n\nasync function runExec(commandParts: string[], options: ExecCliOptions): Promise<void> {\n const shellCommand = commandParts.join(\" \").trim();\n if (!shellCommand) {\n throw new CliError('A command is required. Example: ollie \"pwd && ls -la\"');\n }\n\n const config = await resolveRunConfig(options);\n const controller = new AbortController();\n let signalExitCode: number | undefined;\n const onSigint = () => {\n signalExitCode = 130;\n controller.abort();\n };\n const onSigterm = () => {\n signalExitCode = 143;\n controller.abort();\n };\n process.once(\"SIGINT\", onSigint);\n process.once(\"SIGTERM\", onSigterm);\n\n try {\n const result = await runExecCommand(\n config.cwd,\n shellCommand,\n {\n timeoutMs: config.commandTimeoutMs,\n env: process.env as Record<string, string>,\n },\n controller.signal,\n );\n const stdout = truncateText(result.stdout, config.maxOutputBytes);\n const stderr = truncateText(result.stderr, config.maxOutputBytes);\n\n if (config.ndjson) {\n process.stdout.write(\n `${JSON.stringify({\n exitCode: result.exitCode,\n stdout: stdout.text,\n stderr: stderr.text,\n durationMs: result.durationMs,\n timedOut: result.timedOut,\n truncated: stdout.truncated || stderr.truncated,\n })}\\n`,\n );\n } else {\n if (stdout.text) {\n process.stdout.write(stdout.text);\n }\n if (stderr.text) {\n process.stderr.write(stderr.text);\n }\n }\n process.exitCode = signalExitCode ?? (result.timedOut ? 124 : result.exitCode);\n } catch (error) {\n if (signalExitCode !== undefined) {\n process.exitCode = signalExitCode;\n return;\n }\n throw error;\n } finally {\n process.removeListener(\"SIGINT\", onSigint);\n process.removeListener(\"SIGTERM\", onSigterm);\n }\n}\n\nasync function runSandbox(options: SandboxCliOptions): Promise<void> {\n const controller = new AbortController();\n let signalExitCode: number | undefined;\n const onSigint = () => {\n signalExitCode = 130;\n controller.abort();\n };\n const onSigterm = () => {\n signalExitCode = 143;\n controller.abort();\n };\n\n process.once(\"SIGINT\", onSigint);\n process.once(\"SIGTERM\", onSigterm);\n try {\n await runWorker({\n cwd: options.cwd,\n mounts: parseSandboxMounts(options.mount),\n signal: controller.signal,\n });\n if (signalExitCode !== undefined) {\n process.exitCode = signalExitCode;\n }\n } finally {\n process.removeListener(\"SIGINT\", onSigint);\n process.removeListener(\"SIGTERM\", onSigterm);\n }\n}\n\nfunction createRootProgram(): Command {\n const program = new Command();\n program\n .name(\"ollie\")\n .description(`${packageName}: sandboxed command runner and optional model agent`)\n .version(packageVersion)\n .enablePositionalOptions()\n .passThroughOptions()\n .exitOverride();\n\n addExecOptions(program.argument(\"[command...]\", \"command to execute in a fresh sandbox\")).action(\n async (commandParts: string[], options: ExecCliOptions) => {\n await runExec(commandParts, options);\n },\n );\n return program;\n}\n\nexport function createProgram(): Command {\n const program = createRootProgram();\n\n const agent = addAgentOptions(\n program\n .command(\"agent\")\n .description(\"run a one-shot model agent task\")\n .argument(\"[prompt...]\", \"task prompt\")\n .enablePositionalOptions()\n .passThroughOptions(),\n );\n agent.action(async (prompt: string[], options: AgentCliOptions) => {\n await runAgent(prompt, options);\n });\n\n const sandbox = addMountOption(\n program\n .command(\"sandbox\")\n .description(\"run the persistent sandbox NDJSON command interface\")\n .option(\"--cwd <path>\", \"working directory\"),\n );\n sandbox.action(async (options: SandboxCliOptions) => {\n await runSandbox(options);\n });\n\n program\n .command(\"doctor\")\n .description(\"validate the local Ollie setup without making model calls\")\n .option(\"--cwd <path>\", \"working directory\")\n .option(\"--provider <provider>\", \"model provider\", \"openai\")\n .option(\"--model <model>\", \"model id\")\n .option(\"--json\", \"emit JSON report\")\n .action(async (options: DoctorCliOptions) => {\n const config = await resolveRunConfig(options);\n process.exitCode = await runDoctor(config);\n });\n\n return program;\n}\n\nconst RESERVED_SUBCOMMANDS = new Set([\"agent\", \"sandbox\", \"doctor\"]);\nconst ROOT_OPTIONS_WITH_VALUES = new Set([\"--cwd\", \"--timeout\", \"--max-output\"]);\n\nfunction rootBoundaryPrecedesCommand(args: string[]): boolean {\n for (let index = 0; index < args.length; index += 1) {\n const token = args[index] ?? \"\";\n if (token === \"--\") {\n return true;\n }\n if (RESERVED_SUBCOMMANDS.has(token)) {\n return false;\n }\n if (ROOT_OPTIONS_WITH_VALUES.has(token)) {\n index += 1;\n continue;\n }\n if ([...ROOT_OPTIONS_WITH_VALUES].some((option) => token.startsWith(`${option}=`))) {\n continue;\n }\n if (token === \"--ndjson\") {\n continue;\n }\n return false;\n }\n return false;\n}\n\nexport async function main(argv = process.argv): Promise<void> {\n const args = argv.slice(2);\n const program = rootBoundaryPrecedesCommand(args) ? createRootProgram() : createProgram();\n if (args.length === 0) {\n program.outputHelp();\n throw new CliError('A command is required. Example: ollie \"pwd && ls -la\"');\n }\n await program.parseAsync(argv);\n}\n","import { access, stat } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport { parseSandboxMounts, type SandboxMount } from \"./sandbox/mounts.js\";\nimport { CliError } from \"./utils/errors.js\";\n\nexport const DEFAULT_PROVIDER = \"openai\";\nexport const DEFAULT_MODEL = \"gpt-5.6\";\nexport const DEFAULT_MAX_STEPS = 20;\nexport const DEFAULT_COMMAND_TIMEOUT_MS = 30_000;\nexport const DEFAULT_MAX_OUTPUT_BYTES = 65_536;\nexport const DEFAULT_EXECUTOR = \"none\";\n\nexport type ExecutorKind = \"none\" | \"local\" | \"daytona\";\n\nexport interface ConfigInput {\n cwd?: string;\n mount?: string[];\n provider?: string;\n model?: string;\n executor?: string;\n maxSteps?: string | number;\n timeout?: string | number;\n maxOutput?: string | number;\n ndjson?: boolean;\n json?: boolean;\n color?: boolean;\n}\n\nexport interface RunConfig {\n cwd: string;\n mounts: SandboxMount[];\n provider: string;\n model: string;\n executor: ExecutorKind;\n maxSteps: number;\n commandTimeoutMs: number;\n maxOutputBytes: number;\n ndjson: boolean;\n json: boolean;\n color: boolean;\n}\n\nfunction parseNumber(name: string, value: string | number | undefined, fallback: number): number {\n if (value === undefined || value === \"\") {\n return fallback;\n }\n\n const parsed = typeof value === \"number\" ? value : Number.parseInt(value, 10);\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new CliError(`${name} must be a non-negative integer`);\n }\n\n return Math.floor(parsed);\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n\nfunction parseExecutor(value: string | undefined): ExecutorKind {\n const executor = value ?? DEFAULT_EXECUTOR;\n if (executor !== \"none\" && executor !== \"local\" && executor !== \"daytona\") {\n throw new CliError(`Unsupported executor: ${executor}. Expected one of: none, local, daytona`);\n }\n return executor;\n}\n\nexport async function resolveRunConfig(\n input: ConfigInput = {},\n env = process.env,\n): Promise<RunConfig> {\n const cwd = resolve(input.cwd ?? env.OLLIE_CWD ?? process.cwd());\n const stats = await stat(cwd).catch(() => null);\n if (!stats?.isDirectory()) {\n throw new CliError(`Working directory does not exist or is not a directory: ${cwd}`);\n }\n await access(cwd);\n\n const executor = parseExecutor(input.executor ?? env.OLLIE_EXECUTOR);\n\n return {\n cwd,\n mounts: parseSandboxMounts(input.mount),\n provider: input.provider ?? env.OLLIE_PROVIDER ?? DEFAULT_PROVIDER,\n model: input.model ?? env.OLLIE_MODEL ?? DEFAULT_MODEL,\n executor,\n maxSteps: clamp(\n parseNumber(\"max steps\", input.maxSteps ?? env.OLLIE_MAX_STEPS, DEFAULT_MAX_STEPS),\n 1,\n 100,\n ),\n commandTimeoutMs: clamp(\n parseNumber(\n \"command timeout\",\n input.timeout ?? env.OLLIE_COMMAND_TIMEOUT_MS,\n DEFAULT_COMMAND_TIMEOUT_MS,\n ),\n 1,\n 300_000,\n ),\n maxOutputBytes: clamp(\n parseNumber(\n \"max output\",\n input.maxOutput ?? env.OLLIE_MAX_OUTPUT_BYTES,\n DEFAULT_MAX_OUTPUT_BYTES,\n ),\n 1,\n 2_000_000,\n ),\n ndjson: input.ndjson ?? false,\n json: input.json ?? false,\n color: input.color ?? !env.NO_COLOR,\n };\n}\n","import { realpathSync, statSync } from \"node:fs\";\nimport { posix, resolve } from \"node:path\";\nimport { CliError } from \"../utils/errors.js\";\n\nconst SANDBOX_WORKSPACE_PATH = \"/workspace\";\n\nexport interface SandboxMount {\n hostPath: string;\n mountPoint: string;\n}\n\nfunction pathsOverlap(left: string, right: string): boolean {\n return (\n left === right || left.startsWith(`${right}/`) || right.startsWith(`${left}/`)\n );\n}\n\nfunction validateMountPoint(mountPoint: string): void {\n if (\n !posix.isAbsolute(mountPoint) ||\n mountPoint === \"/\" ||\n mountPoint.includes(\"\\\\\") ||\n mountPoint.includes(\"\\0\") ||\n posix.normalize(mountPoint) !== mountPoint\n ) {\n throw new CliError(\n `Mount point must be a normalized absolute sandbox path other than /: ${mountPoint}`,\n );\n }\n if (pathsOverlap(mountPoint, SANDBOX_WORKSPACE_PATH)) {\n throw new CliError(`Mount point must be outside ${SANDBOX_WORKSPACE_PATH}: ${mountPoint}`);\n }\n}\n\nexport function validateSandboxMounts(mounts: SandboxMount[]): SandboxMount[] {\n const validated: SandboxMount[] = [];\n for (const mount of mounts) {\n validateMountPoint(mount.mountPoint);\n\n let hostPath: string;\n try {\n hostPath = realpathSync(resolve(mount.hostPath));\n if (!statSync(hostPath).isDirectory()) {\n throw new Error(\"not a directory\");\n }\n } catch {\n throw new CliError(\n `Mount source does not exist or is not a directory: ${resolve(mount.hostPath)}`,\n );\n }\n\n const conflict = validated.find((candidate) =>\n pathsOverlap(candidate.mountPoint, mount.mountPoint),\n );\n if (conflict) {\n throw new CliError(\n `Mount points must not overlap: ${conflict.mountPoint} and ${mount.mountPoint}`,\n );\n }\n validated.push({ hostPath, mountPoint: mount.mountPoint });\n }\n return validated;\n}\n\nexport function parseSandboxMounts(specs: string[] = []): SandboxMount[] {\n const mounts = specs.map((spec) => {\n const separator = spec.lastIndexOf(\":\");\n if (separator <= 0 || separator === spec.length - 1) {\n throw new CliError(\n `Invalid mount ${JSON.stringify(spec)}. Expected <host-path>:<sandbox-path>`,\n );\n }\n return {\n hostPath: spec.slice(0, separator),\n mountPoint: spec.slice(separator + 1),\n };\n });\n return validateSandboxMounts(mounts);\n}\n","export class CliError extends Error {\n constructor(\n message: string,\n readonly exitCode = 1,\n ) {\n super(message);\n this.name = \"CliError\";\n }\n}\n\nexport function getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n\n return String(error);\n}\n","import { access, stat } from \"node:fs/promises\";\nimport { packageName, packageVersion } from \"./index.js\";\nimport { isJustBashAvailable } from \"./sandbox/index.js\";\n\nexport interface DoctorOptions {\n cwd: string;\n provider: string;\n model: string;\n json: boolean;\n}\n\nexport async function runDoctor(options: DoctorOptions): Promise<number> {\n const nodeVersion = process.versions.node;\n const nodeMajor = Number.parseInt(nodeVersion.split(\".\")[0] ?? \"0\", 10);\n const cwdStats = await stat(options.cwd).catch(() => null);\n const cwdAccessible = cwdStats?.isDirectory()\n ? await access(options.cwd).then(\n () => true,\n () => false,\n )\n : false;\n const justBashAvailable = await isJustBashAvailable();\n const providerConfigured =\n options.provider === \"openai\" ? Boolean(process.env.OPENAI_API_KEY) : false;\n\n const report = {\n packageName,\n packageVersion,\n nodeVersion,\n nodeOk: nodeMajor >= 22,\n cwd: options.cwd,\n cwdAccessible,\n provider: options.provider,\n model: options.model,\n providerConfigured,\n justBashAvailable,\n };\n\n if (options.json) {\n process.stdout.write(`${JSON.stringify(report)}\\n`);\n } else {\n process.stdout.write(`${packageName} ${packageVersion}\\n`);\n process.stdout.write(`node: ${nodeVersion} ${report.nodeOk ? \"ok\" : \"requires >=22\"}\\n`);\n process.stdout.write(`workspace: ${options.cwd} ${cwdAccessible ? \"ok\" : \"not accessible\"}\\n`);\n process.stdout.write(\n `provider: ${options.provider} / ${options.model} ${providerConfigured ? \"configured\" : \"missing credentials\"}\\n`,\n );\n process.stdout.write(`just-bash: ${justBashAvailable ? \"ok\" : \"unavailable\"}\\n`);\n }\n\n return report.nodeOk && cwdAccessible && justBashAvailable ? 0 : 1;\n}\n","import { realpathSync, statSync } from \"node:fs\";\nimport { Bash, InMemoryFs, MountableFs, ReadWriteFs } from \"just-bash\";\nimport { createGitCommand } from \"./git/index.js\";\nimport type { CreateJustBashOptions } from \"./git/types.js\";\nimport { validateSandboxMounts } from \"./mounts.js\";\n\nexport const SANDBOX_WORKSPACE_PATH = \"/workspace\";\n\nfunction canonicalizeWorkspaceRoot(workspaceRoot: string): string {\n const canonicalRoot = realpathSync(workspaceRoot);\n if (!statSync(canonicalRoot).isDirectory()) {\n throw new Error(\"The sandbox workspace root must be a directory\");\n }\n return canonicalRoot;\n}\n\nfunction createWorkspaceFs(workspaceRoot: string, options: CreateJustBashOptions) {\n const root = canonicalizeWorkspaceRoot(workspaceRoot);\n const additionalMounts = validateSandboxMounts(options.mounts ?? []).map((mount) => ({\n mountPoint: mount.mountPoint,\n filesystem: new ReadWriteFs({ root: mount.hostPath, allowSymlinks: false }),\n }));\n return new MountableFs({\n base: new InMemoryFs(),\n mounts: [\n {\n mountPoint: SANDBOX_WORKSPACE_PATH,\n filesystem: new ReadWriteFs({ root, allowSymlinks: false }),\n },\n ...additionalMounts,\n ],\n });\n}\n\nexport function createJustBash(workspaceRoot: string, options: CreateJustBashOptions = {}): Bash {\n return new Bash({\n fs: createWorkspaceFs(workspaceRoot, options),\n cwd: SANDBOX_WORKSPACE_PATH,\n env: {\n HOME: \"/home/user\",\n TERM: \"xterm-256color\",\n },\n python: true,\n javascript: true,\n customCommands: options.git === false ? [] : [createGitCommand(options.git)],\n network: {\n dangerouslyAllowFullInternetAccess: true,\n maxResponseSize: 100 * 1024 * 1024,\n },\n });\n}\n\nexport async function isJustBashAvailable(): Promise<boolean> {\n try {\n const bash = new Bash();\n await bash.exec(\"echo ok\");\n return true;\n } catch {\n return false;\n }\n}\n","import { posix } from \"node:path\";\nimport { createTwoFilesPatch } from \"diff\";\nimport * as git from \"isomorphic-git\";\nimport { type CommandContext, defineCommand, type ExecResult } from \"just-bash\";\nimport { createGitFs } from \"./fs-adapter.js\";\nimport { createGitHttp, validateRemoteUrl } from \"./http-adapter.js\";\nimport type { GitCommandOptions, GitHandlerContext } from \"./types.js\";\n\nconst WORKSPACE = \"/workspace\";\nconst VERSION = \"ollie-git/0.1 (isomorphic-git)\";\nconst COMMANDS = [\n \"init\",\n \"clone\",\n \"status\",\n \"add\",\n \"commit\",\n \"log\",\n \"diff\",\n \"branch\",\n \"checkout\",\n \"remote\",\n \"config\",\n \"fetch\",\n \"pull\",\n \"push\",\n];\n\nclass UsageError extends Error {}\n\nfunction ok(stdout = \"\"): ExecResult {\n return { stdout, stderr: \"\", exitCode: 0 };\n}\n\nfunction usage(message?: string): never {\n throw new UsageError(message ?? \"unsupported arguments\");\n}\n\nfunction assertNotAborted(ctx: CommandContext): void {\n if (ctx.signal?.aborted) throw new Error(\"operation aborted\");\n}\n\nfunction virtualPath(ctx: CommandContext, input = \".\"): string {\n if (input.includes(\"\\0\") || input.includes(\"\\\\\")) throw new Error(\"invalid path\");\n const resolved = ctx.fs.resolvePath(ctx.cwd, input);\n if (resolved !== WORKSPACE && !resolved.startsWith(`${WORKSPACE}/`)) {\n throw new Error(\"path is outside /workspace\");\n }\n return resolved;\n}\n\nasync function repositoryDir(ctx: CommandContext): Promise<string> {\n let current = virtualPath(ctx);\n while (current === WORKSPACE || current.startsWith(`${WORKSPACE}/`)) {\n if (await ctx.fs.exists(posix.join(current, \".git\"))) return current;\n if (current === WORKSPACE) break;\n current = posix.dirname(current);\n }\n throw new Error(\"not a git repository (or any parent up to /workspace)\");\n}\n\nfunction optionValue(args: string[], names: string[]): { value?: string; rest: string[] } {\n let value: string | undefined;\n const rest: string[] = [];\n for (let index = 0; index < args.length; index++) {\n const arg = args[index];\n if (arg && names.includes(arg)) {\n const next = args[++index];\n if (!next) usage(`${arg} requires a value`);\n value = next;\n } else if (arg && names.some((name) => arg.startsWith(`${name}=`))) {\n value = arg.slice(arg.indexOf(\"=\") + 1);\n } else if (arg) rest.push(arg);\n }\n return { value, rest };\n}\n\nfunction flag(args: string[], names: string[]): { enabled: boolean; rest: string[] } {\n let enabled = false;\n const rest = args.filter((arg) => {\n if (names.includes(arg)) {\n enabled = true;\n return false;\n }\n return true;\n });\n return { enabled, rest };\n}\n\nfunction rejectOptions(args: string[]): void {\n const unknown = args.find((arg) => arg.startsWith(\"-\"));\n if (unknown) usage(`unsupported option '${unknown}'`);\n}\n\nfunction positiveInteger(value: string | undefined, option: string): number | undefined {\n if (value === undefined) return undefined;\n const parsed = Number(value);\n if (!Number.isSafeInteger(parsed) || parsed <= 0) usage(`${option} requires a positive integer`);\n return parsed;\n}\n\nfunction authFor(context: GitHandlerContext, url?: string) {\n if (!url || !context.options.resolveAuth) return undefined;\n return async () => context.options.resolveAuth?.(url);\n}\n\nasync function remoteUrl(context: GitHandlerContext, dir: string, remote: string): Promise<string> {\n const value = await git.getConfig({ fs: context.fs, dir, path: `remote.${remote}.url` });\n if (!value) throw new Error(`remote '${remote}' has no URL`);\n return validateRemoteUrl(value);\n}\n\nconst GLOBAL_CONFIG_PATH = \"/home/user/.gitconfig\";\n\nasync function readGlobalConfig(ctx: CommandContext): Promise<Map<string, string>> {\n if (!(await ctx.fs.exists(GLOBAL_CONFIG_PATH))) return new Map();\n const values = new Map<string, string>();\n let section = \"\";\n for (const rawLine of (await ctx.fs.readFile(GLOBAL_CONFIG_PATH)).split(\"\\n\")) {\n const line = rawLine.trim();\n const sectionMatch = /^\\[([^\\]]+)\\]$/.exec(line);\n if (sectionMatch?.[1]) {\n section = sectionMatch[1].trim().toLowerCase();\n continue;\n }\n const valueMatch = /^([^=]+)=(.*)$/.exec(line);\n if (section && valueMatch?.[1] !== undefined && valueMatch[2] !== undefined) {\n values.set(`${section}.${valueMatch[1].trim().toLowerCase()}`, valueMatch[2].trim());\n }\n }\n return values;\n}\n\nasync function writeGlobalConfig(ctx: CommandContext, values: Map<string, string>): Promise<void> {\n const sections = new Map<string, Array<[string, string]>>();\n for (const [path, value] of [...values].sort(([left], [right]) => left.localeCompare(right))) {\n const separator = path.indexOf(\".\");\n if (separator < 1) usage(\"config key must contain a section\");\n const section = path.slice(0, separator);\n const name = path.slice(separator + 1);\n const entries = sections.get(section) ?? [];\n entries.push([name, value]);\n sections.set(section, entries);\n }\n const content = [...sections]\n .map(\n ([section, entries]) =>\n `[${section}]\\n${entries.map(([key, value]) => `\\t${key} = ${value}`).join(\"\\n\")}`,\n )\n .join(\"\\n\");\n await ctx.fs.mkdir(posix.dirname(GLOBAL_CONFIG_PATH), { recursive: true });\n await ctx.fs.writeFile(GLOBAL_CONFIG_PATH, content ? `${content}\\n` : \"\");\n}\n\nasync function handleInit(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const branchOpt = optionValue(args, [\"-b\", \"--initial-branch\"]);\n rejectOptions(branchOpt.rest);\n if (branchOpt.rest.length > 1) usage(\"git init accepts at most one directory\");\n const dir = virtualPath(context.command, branchOpt.rest[0]);\n await context.command.fs.mkdir(dir, { recursive: true }).catch(async () => {\n if (!(await context.command.fs.exists(dir)))\n throw new Error(\"cannot create repository directory\");\n });\n await git.init({ fs: context.fs, dir, defaultBranch: branchOpt.value ?? \"main\" });\n return ok(`Initialized empty Git repository in ${posix.join(dir, \".git\")}/\\n`);\n}\n\nasync function handleStatus(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const shortFlag = flag(args, [\"-s\", \"--short\", \"--porcelain\"]);\n rejectOptions(shortFlag.rest);\n if (shortFlag.rest.length) usage();\n const dir = await repositoryDir(context.command);\n const matrix = await git.statusMatrix({ fs: context.fs, dir });\n const lines = matrix\n .filter(([, head, workdir, stage]) => head !== workdir || workdir !== stage)\n .map(([path, head, workdir, stage]) => {\n let x = \" \";\n let y = \" \";\n if (head === 0 && stage !== 0) x = \"A\";\n else if (head !== stage) x = stage === 0 ? \"D\" : \"M\";\n if (workdir !== stage) y = workdir === 0 ? \"D\" : \"M\";\n if (head === 0 && stage === 0 && workdir !== 0) return `?? ${path}`;\n return `${x}${y} ${path}`;\n });\n if (shortFlag.enabled) return ok(lines.length ? `${lines.join(\"\\n\")}\\n` : \"\");\n const branch = (await git.currentBranch({ fs: context.fs, dir })) ?? \"HEAD detached\";\n return ok(\n `On branch ${branch}\\n${lines.length ? `${lines.join(\"\\n\")}\\n` : \"nothing to commit, working tree clean\\n\"}`,\n );\n}\n\nasync function handleAdd(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const separator = args.indexOf(\"--\");\n const optionArgs = separator < 0 ? args : args.slice(0, separator);\n const literalPaths = separator < 0 ? [] : args.slice(separator + 1);\n const allFlag = flag(optionArgs, [\"-A\", \"--all\"]);\n rejectOptions(allFlag.rest);\n const paths = [...allFlag.rest, ...literalPaths];\n if (!allFlag.enabled && paths.length === 0) usage(\"nothing specified\");\n const dir = await repositoryDir(context.command);\n const all = allFlag.enabled || paths.includes(\".\");\n if (all) {\n const matrix = await git.statusMatrix({ fs: context.fs, dir });\n for (const [filepath, , workdir, stage] of matrix) {\n assertNotAborted(context.command);\n if (workdir === stage) continue;\n if (workdir === 0) await git.remove({ fs: context.fs, dir, filepath });\n else await git.add({ fs: context.fs, dir, filepath });\n }\n } else {\n for (const filepath of paths) {\n if (\n filepath.startsWith(\"/\") ||\n filepath.split(\"/\").some((segment) => segment === \"..\" || segment === \".git\")\n )\n throw new Error(\"invalid pathspec\");\n await git.add({ fs: context.fs, dir, filepath });\n }\n }\n return ok();\n}\n\nfunction parseAuthor(value: string): { name: string; email: string } {\n const match = /^(.*?)\\s*<([^<>]+)>$/.exec(value);\n if (!match?.[1] || !match[2]) usage(\"--author must be 'Name <email>'\");\n return { name: match[1].trim(), email: match[2] };\n}\n\nasync function handleCommit(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const messageOpt = optionValue(args, [\"-m\", \"--message\"]);\n const authorOpt = optionValue(messageOpt.rest, [\"--author\"]);\n rejectOptions(authorOpt.rest);\n if (authorOpt.rest.length || !messageOpt.value) usage(\"git commit requires -m <message>\");\n const dir = await repositoryDir(context.command);\n const globalConfig = await readGlobalConfig(context.command);\n const repoName = await git.getConfig({ fs: context.fs, dir, path: \"user.name\" });\n const repoEmail = await git.getConfig({ fs: context.fs, dir, path: \"user.email\" });\n const configuredAuthor =\n repoName && repoEmail\n ? { name: repoName, email: repoEmail }\n : globalConfig.get(\"user.name\") && globalConfig.get(\"user.email\")\n ? {\n name: globalConfig.get(\"user.name\") as string,\n email: globalConfig.get(\"user.email\") as string,\n }\n : context.options.author;\n const author = authorOpt.value ? parseAuthor(authorOpt.value) : configuredAuthor;\n const matrix = await git.statusMatrix({ fs: context.fs, dir });\n if (!matrix.some(([, headStatus, , stageStatus]) => headStatus !== stageStatus)) {\n const message = matrix.some(([, , workdirStatus, stageStatus]) => workdirStatus !== stageStatus)\n ? \"no changes added to commit\"\n : \"nothing to commit, working tree clean\";\n throw new Error(message);\n }\n const oid = await git.commit({ fs: context.fs, dir, message: messageOpt.value, author });\n const branch = (await git.currentBranch({ fs: context.fs, dir })) ?? \"detached HEAD\";\n return ok(`[${branch} ${oid.slice(0, 7)}] ${messageOpt.value.split(\"\\n\")[0]}\\n`);\n}\n\nasync function handleLog(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const countOpt = optionValue(args, [\"-n\", \"--max-count\"]);\n const onelineFlag = flag(countOpt.rest, [\"--oneline\"]);\n rejectOptions(onelineFlag.rest);\n if (onelineFlag.rest.length > 1) usage();\n const depth = countOpt.value ? Number.parseInt(countOpt.value, 10) : 20;\n if (!Number.isFinite(depth) || depth < 1) usage(\"invalid max count\");\n const dir = await repositoryDir(context.command);\n const commits = await git.log({ fs: context.fs, dir, ref: onelineFlag.rest[0] ?? \"HEAD\", depth });\n if (onelineFlag.enabled) {\n return ok(\n commits\n .map((entry) => `${entry.oid.slice(0, 7)} ${entry.commit.message.split(\"\\n\")[0]}`)\n .join(\"\\n\") + (commits.length ? \"\\n\" : \"\"),\n );\n }\n return ok(\n commits\n .map(\n (entry) =>\n `commit ${entry.oid}\\nAuthor: ${entry.commit.author.name} <${entry.commit.author.email}>\\n\\n ${entry.commit.message.trim().replaceAll(\"\\n\", \"\\n \")}\\n`,\n )\n .join(\"\\n\"),\n );\n}\n\nasync function handleDiff(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const cachedFlag = flag(args, [\"--cached\", \"--staged\"]);\n rejectOptions(cachedFlag.rest);\n const dir = await repositoryDir(context.command);\n const selected = cachedFlag.rest.map((path) => path.replace(/^\\.\\//, \"\").replace(/\\/$/, \"\"));\n const decoder = new TextDecoder();\n const patch = (filepath: string, oldBytes: Uint8Array, newBytes: Uint8Array) => {\n if (oldBytes.includes(0) || newBytes.includes(0)) {\n return `Binary files a/${filepath} and b/${filepath} differ\\n`;\n }\n return createTwoFilesPatch(\n `a/${filepath}`,\n `b/${filepath}`,\n decoder.decode(oldBytes),\n decoder.decode(newBytes),\n \"\",\n \"\",\n { context: 3 },\n );\n };\n const matrix = await git.statusMatrix({\n fs: context.fs,\n dir,\n filepaths: selected.length ? selected : undefined,\n });\n const stageOids = new Map<string, string>();\n await git.walk({\n fs: context.fs,\n dir,\n trees: [git.STAGE()],\n map: async (filepath, [entry]) => {\n if (entry && (await entry.type()) !== \"tree\") stageOids.set(filepath, await entry.oid());\n },\n });\n const head = await git.resolveRef({ fs: context.fs, dir, ref: \"HEAD\" }).catch(() => undefined);\n const empty = new Uint8Array();\n const readStage = async (filepath: string) => {\n const oid = stageOids.get(filepath);\n return oid ? (await git.readBlob({ fs: context.fs, dir, oid })).blob : empty;\n };\n const patches: string[] = [];\n for (const [filepath, headStatus, workdirStatus, stageStatus] of matrix) {\n const changed = cachedFlag.enabled ? headStatus !== stageStatus : workdirStatus !== stageStatus;\n if (!changed) continue;\n const oldBytes = cachedFlag.enabled\n ? head && headStatus !== 0\n ? (await git.readBlob({ fs: context.fs, dir, oid: head, filepath })).blob\n : empty\n : await readStage(filepath);\n const newBytes = cachedFlag.enabled\n ? await readStage(filepath)\n : workdirStatus === 0\n ? empty\n : await context.command.fs.readFileBuffer(posix.join(dir, filepath));\n patches.push(patch(filepath, oldBytes, newBytes));\n }\n return ok(patches.join(\"\"));\n}\n\nasync function handleBranch(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const deleteFlag = flag(args, [\"-d\", \"-D\", \"--delete\"]);\n rejectOptions(deleteFlag.rest);\n const dir = await repositoryDir(context.command);\n if (deleteFlag.enabled) {\n if (deleteFlag.rest.length !== 1) usage(\"branch deletion requires one name\");\n await git.deleteBranch({ fs: context.fs, dir, ref: deleteFlag.rest[0] as string });\n return ok(`Deleted branch ${deleteFlag.rest[0]}.\\n`);\n }\n if (deleteFlag.rest.length) {\n if (deleteFlag.rest.length > 2) usage();\n await git.branch({\n fs: context.fs,\n dir,\n ref: deleteFlag.rest[0] as string,\n object: deleteFlag.rest[1],\n });\n return ok();\n }\n const [branches, current] = await Promise.all([\n git.listBranches({ fs: context.fs, dir }),\n git.currentBranch({ fs: context.fs, dir }),\n ]);\n return ok(\n branches.map((name) => `${name === current ? \"*\" : \" \"} ${name}`).join(\"\\n\") +\n (branches.length ? \"\\n\" : \"\"),\n );\n}\n\nasync function readCheckoutBlob(\n context: GitHandlerContext,\n dir: string,\n commitOid: string,\n filepath: string,\n): Promise<Uint8Array> {\n let treeOid = (await git.readCommit({ fs: context.fs, dir, oid: commitOid })).commit.tree;\n const segments = filepath.split(\"/\").filter(Boolean);\n for (let index = 0; index < segments.length; index++) {\n const entries = (await git.readTree({ fs: context.fs, dir, oid: treeOid })).tree;\n const entry = entries.find((candidate) => candidate.path === segments[index]);\n if (!entry) throw new Error(`path '${filepath}' does not exist in the selected ref`);\n if (entry.mode === \"120000\") throw new Error(\"symbolic links are not supported in the sandbox\");\n if (index === segments.length - 1) {\n if (entry.type !== \"blob\") throw new Error(`path '${filepath}' is not a file`);\n return (await git.readBlob({ fs: context.fs, dir, oid: entry.oid })).blob;\n }\n if (entry.type !== \"tree\") throw new Error(`path '${filepath}' is not a file`);\n treeOid = entry.oid;\n }\n throw new Error(\"invalid checkout path\");\n}\n\nasync function handleCheckout(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const separator = args.indexOf(\"--\");\n const commandArgs = separator >= 0 ? args.slice(0, separator) : args;\n const filepaths = separator >= 0 ? args.slice(separator + 1) : [];\n const createOpt = optionValue(commandArgs, [\"-b\"]);\n const forceFlag = flag(createOpt.rest, [\"-f\", \"--force\"]);\n rejectOptions(forceFlag.rest);\n const dir = await repositoryDir(context.command);\n if (filepaths.length) {\n if (createOpt.value || forceFlag.rest.length > 1) usage();\n if (filepaths.some((path) => path.startsWith(\"/\") || path.split(\"/\").includes(\"..\"))) {\n throw new Error(\"invalid checkout path\");\n }\n const ref = forceFlag.rest[0] ?? \"HEAD\";\n const oid = await git.resolveRef({ fs: context.fs, dir, ref });\n for (const filepath of filepaths) {\n const blob = await readCheckoutBlob(context, dir, oid, filepath);\n await context.command.fs.writeFile(posix.join(dir, filepath), blob);\n }\n return ok();\n }\n if (separator >= 0) usage(\"checkout requires at least one path after --\");\n if (createOpt.value) {\n if (forceFlag.rest.length > 1) usage();\n await git.branch({\n fs: context.fs,\n dir,\n ref: createOpt.value,\n object: forceFlag.rest[0],\n checkout: true,\n });\n await git.checkout({ fs: context.fs, dir, ref: createOpt.value, force: forceFlag.enabled });\n return ok(`Switched to a new branch '${createOpt.value}'\\n`);\n }\n if (forceFlag.rest.length !== 1) usage(\"checkout requires one branch or ref\");\n await git.checkout({ fs: context.fs, dir, ref: forceFlag.rest[0], force: forceFlag.enabled });\n return ok(`Switched to '${forceFlag.rest[0]}'\\n`);\n}\n\nasync function handleRemote(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const dir = await repositoryDir(context.command);\n if (!args.length || (args.length === 1 && args[0] === \"-v\")) {\n const remotes = await git.listRemotes({ fs: context.fs, dir });\n const verbose = args[0] === \"-v\";\n return ok(\n remotes\n .map(({ remote, url }) =>\n verbose ? `${remote}\\t${url} (fetch)\\n${remote}\\t${url} (push)` : remote,\n )\n .join(\"\\n\") + (remotes.length ? \"\\n\" : \"\"),\n );\n }\n const [action, name, value, ...rest] = args;\n if (rest.length || !name) usage();\n if (action === \"add\") {\n if (!value) usage(\"remote add requires a URL\");\n validateRemoteUrl(value);\n await git.addRemote({ fs: context.fs, dir, remote: name, url: value });\n return ok();\n }\n if (action === \"remove\" || action === \"rm\") {\n if (value) usage();\n await git.deleteRemote({ fs: context.fs, dir, remote: name });\n return ok();\n }\n if (action === \"get-url\") {\n if (value) usage();\n const url = await remoteUrl(context, dir, name);\n return ok(`${url}\\n`);\n }\n if (action === \"set-url\") {\n if (!value) usage();\n validateRemoteUrl(value);\n await git.setConfig({ fs: context.fs, dir, path: `remote.${name}.url`, value });\n return ok();\n }\n usage();\n}\n\nasync function handleConfig(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const globalFlag = flag(args, [\"--global\"]);\n const unsetFlag = flag(globalFlag.rest, [\"--unset\"]);\n const listFlag = flag(unsetFlag.rest, [\"--list\", \"-l\"]);\n rejectOptions(listFlag.rest);\n const globalValues = globalFlag.enabled ? await readGlobalConfig(context.command) : undefined;\n const dir = globalFlag.enabled ? undefined : await repositoryDir(context.command);\n if (listFlag.enabled) {\n if (listFlag.rest.length) usage();\n if (globalValues) {\n const output = [...globalValues].map(([key, value]) => `${key}=${value}`).join(\"\\n\");\n return ok(output ? `${output}\\n` : \"\");\n }\n const keys = [\"user.name\", \"user.email\", \"core.repositoryformatversion\", \"core.bare\"];\n const values = await Promise.all(\n keys.map(\n async (key) => [key, await git.getConfig({ fs: context.fs, dir, path: key })] as const,\n ),\n );\n const output = values\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => `${key}=${value}`)\n .join(\"\\n\");\n return ok(output ? `${output}\\n` : \"\");\n }\n const [key, value, ...rest] = listFlag.rest;\n if (rest.length || !key) usage();\n if (!key.includes(\".\")) usage(\"config key must contain a section\");\n if (globalValues) {\n if (unsetFlag.enabled) {\n if (value) usage();\n globalValues.delete(key.toLowerCase());\n await writeGlobalConfig(context.command, globalValues);\n return ok();\n }\n if (value === undefined) {\n const found = globalValues.get(key.toLowerCase());\n return found === undefined ? { stdout: \"\", stderr: \"\", exitCode: 1 } : ok(`${found}\\n`);\n }\n globalValues.set(key.toLowerCase(), value);\n await writeGlobalConfig(context.command, globalValues);\n return ok();\n }\n if (unsetFlag.enabled) {\n if (value) usage();\n await git.setConfig({ fs: context.fs, dir, path: key, value: undefined });\n return ok();\n }\n if (value === undefined) {\n const found = await git.getConfig({ fs: context.fs, dir, path: key });\n return found === undefined ? { stdout: \"\", stderr: \"\", exitCode: 1 } : ok(`${found}\\n`);\n }\n await git.setConfig({ fs: context.fs, dir, path: key, value });\n return ok();\n}\n\nasync function handleClone(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const branchOpt = optionValue(args, [\"-b\", \"--branch\"]);\n const depthOpt = optionValue(branchOpt.rest, [\"--depth\"]);\n const singleFlag = flag(depthOpt.rest, [\"--single-branch\"]);\n const noCheckoutFlag = flag(singleFlag.rest, [\"--no-checkout\"]);\n rejectOptions(noCheckoutFlag.rest);\n const [rawUrl, destination, ...rest] = noCheckoutFlag.rest;\n if (!rawUrl || rest.length) usage(\"clone requires a URL and optional directory\");\n const url = validateRemoteUrl(rawUrl);\n const inferred = posix.basename(new URL(url).pathname).replace(/\\.git$/, \"\") || \"repository\";\n const dir = virtualPath(context.command, destination ?? inferred);\n const depth = positiveInteger(depthOpt.value, \"--depth\");\n await git.clone({\n fs: context.fs,\n http: context.http,\n dir,\n url,\n ref: branchOpt.value,\n depth,\n singleBranch: singleFlag.enabled || Boolean(branchOpt.value),\n noCheckout: noCheckoutFlag.enabled,\n onAuth: authFor(context, url),\n });\n return ok(`Cloning into '${destination ?? inferred}'...\\n`);\n}\n\nasync function handleFetch(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const depthOpt = optionValue(args, [\"--depth\"]);\n rejectOptions(depthOpt.rest);\n if (depthOpt.rest.length > 2) usage();\n const dir = await repositoryDir(context.command);\n const remote = depthOpt.rest[0] ?? \"origin\";\n const url = await remoteUrl(context, dir, remote);\n await git.fetch({\n fs: context.fs,\n http: context.http,\n dir,\n remote,\n ref: depthOpt.rest[1],\n depth: positiveInteger(depthOpt.value, \"--depth\"),\n onAuth: authFor(context, url),\n });\n return ok();\n}\n\nasync function handlePull(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const ffFlag = flag(args, [\"--ff-only\"]);\n rejectOptions(ffFlag.rest);\n if (ffFlag.rest.length > 2) usage();\n const dir = await repositoryDir(context.command);\n const remote = ffFlag.rest[0] ?? \"origin\";\n const url = await remoteUrl(context, dir, remote);\n await git.pull({\n fs: context.fs,\n http: context.http,\n dir,\n remote,\n ref: ffFlag.rest[1],\n fastForwardOnly: true,\n // isomorphic-git requires an author even when fastForwardOnly prevents merge commits.\n author: context.options.author ?? { name: \"Ollie Git\", email: \"git@localhost\" },\n onAuth: authFor(context, url),\n });\n return ok(\"Already up to date or fast-forwarded.\\n\");\n}\n\nasync function handlePush(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const forceFlag = flag(args, [\"--force\", \"-f\"]);\n const upstreamFlag = flag(forceFlag.rest, [\"--set-upstream\", \"-u\"]);\n rejectOptions(upstreamFlag.rest);\n if (upstreamFlag.rest.length > 2) usage();\n const dir = await repositoryDir(context.command);\n const remote = upstreamFlag.rest[0] ?? \"origin\";\n const ref = upstreamFlag.rest[1] ?? (await git.currentBranch({ fs: context.fs, dir }));\n if (!ref) throw new Error(\"cannot determine branch to push\");\n const url = await remoteUrl(context, dir, remote);\n const result = await git.push({\n fs: context.fs,\n http: context.http,\n dir,\n remote,\n ref,\n force: forceFlag.enabled,\n onAuth: authFor(context, url),\n });\n if (!result.ok) {\n const refError = Object.values(result.refs).find((status) => !status.ok)?.error;\n throw new Error(result.error ?? refError ?? \"remote rejected the push\");\n }\n if (upstreamFlag.enabled) {\n await git.setConfig({ fs: context.fs, dir, path: `branch.${ref}.remote`, value: remote });\n await git.setConfig({\n fs: context.fs,\n dir,\n path: `branch.${ref}.merge`,\n value: `refs/heads/${ref}`,\n });\n }\n return ok(`To ${url}\\n`);\n}\n\nconst handlers: Record<\n string,\n (context: GitHandlerContext, args: string[]) => Promise<ExecResult>\n> = {\n init: handleInit,\n clone: handleClone,\n status: handleStatus,\n add: handleAdd,\n commit: handleCommit,\n log: handleLog,\n diff: handleDiff,\n branch: handleBranch,\n checkout: handleCheckout,\n remote: handleRemote,\n config: handleConfig,\n fetch: handleFetch,\n pull: handlePull,\n push: handlePush,\n};\n\nfunction redact(message: string, secrets: Set<string>): string {\n let result = message\n .replace(/https:\\/\\/[^\\s/@]+@/g, \"https://\")\n .replaceAll(process.cwd(), \"<host>\");\n for (const secret of secrets) {\n if (secret) result = result.replaceAll(secret, \"<redacted>\");\n }\n return result;\n}\n\nexport function createGitCommand(options: GitCommandOptions = {}) {\n return defineCommand(\"git\", async (args, command) => {\n const secrets = new Set<string>();\n const safeOptions: GitCommandOptions = options.resolveAuth\n ? {\n ...options,\n resolveAuth: async (url) => {\n const auth = await options.resolveAuth?.(url);\n if (auth?.username) secrets.add(auth.username);\n if (auth?.password) secrets.add(auth.password);\n return auth;\n },\n }\n : options;\n try {\n if (!args.length || args[0] === \"help\" || args.includes(\"--help\")) {\n return ok(`usage: git <command> [options]\\n\\nSupported commands: ${COMMANDS.join(\", \")}\\n`);\n }\n if (args[0] === \"--version\" || args[0] === \"-v\") return ok(`${VERSION}\\n`);\n const subcommand = args[0];\n const handler = subcommand ? handlers[subcommand] : undefined;\n if (!handler) usage(`'${subcommand ?? \"\"}' is not a supported git command`);\n assertNotAborted(command);\n return await handler(\n {\n command,\n fs: createGitFs(command.fs),\n http: createGitHttp(command),\n options: safeOptions,\n },\n args.slice(1),\n );\n } catch (error) {\n const message = redact(\n error instanceof Error ? error.message : \"unknown Git failure\",\n secrets,\n );\n const exitCode =\n error instanceof UsageError\n ? 129\n : /not a git repository|NotFoundError/.test(message)\n ? 128\n : 1;\n return {\n stdout: \"\",\n stderr: `${error instanceof UsageError ? \"error\" : \"fatal\"}: ${message}\\n`,\n exitCode,\n };\n }\n });\n}\n\nexport type { CreateJustBashOptions, GitAuth, GitCommandOptions } from \"./types.js\";\n","import { posix } from \"node:path\";\nimport type { IFileSystem } from \"just-bash\";\n\nconst ROOT = \"/workspace\";\n\nfunction safePath(path: string): string {\n if (path.includes(\"\\0\") || path.includes(\"\\\\\")) {\n throw Object.assign(new Error(\"Invalid virtual Git path\"), { code: \"EINVAL\" });\n }\n const normalized = posix.resolve(path);\n if (normalized !== ROOT && !normalized.startsWith(`${ROOT}/`)) {\n throw Object.assign(new Error(\"Git path is outside /workspace\"), { code: \"EACCES\" });\n }\n return normalized;\n}\n\nfunction normalizeError(error: unknown): never {\n if (error instanceof Error) {\n const coded = error as Error & { code?: string };\n if (!coded.code) {\n if (/not found|does not exist|enoent/i.test(error.message)) coded.code = \"ENOENT\";\n else if (/exist/i.test(error.message)) coded.code = \"EEXIST\";\n else if (/directory/i.test(error.message)) coded.code = \"ENOTDIR\";\n else coded.code = \"EIO\";\n }\n throw coded;\n }\n throw Object.assign(new Error(\"Virtual filesystem operation failed\"), { code: \"EIO\" });\n}\n\nasync function ensureParent(fs: IFileSystem, path: string): Promise<void> {\n const parent = posix.dirname(path);\n if (!(await fs.exists(parent))) await fs.mkdir(parent, { recursive: true });\n}\n\nfunction statShape(stat: Awaited<ReturnType<IFileSystem[\"stat\"]>>) {\n const typeMode = stat.isDirectory ? 0o040000 : stat.isSymbolicLink ? 0o120000 : 0o100000;\n const mode = typeMode | (stat.mode & 0o7777);\n return {\n isFile: () => stat.isFile,\n isDirectory: () => stat.isDirectory,\n isSymbolicLink: () => stat.isSymbolicLink,\n mode,\n size: stat.size,\n mtime: stat.mtime,\n mtimeMs: stat.mtime.getTime(),\n ctimeMs: stat.mtime.getTime(),\n ino: 0,\n uid: 0,\n gid: 0,\n dev: 0,\n };\n}\n\nexport function createGitFs(fs: IFileSystem) {\n const promises = {\n async readFile(path: string, options?: { encoding?: string } | string) {\n try {\n const virtualPath = safePath(path);\n const encoding = typeof options === \"string\" ? options : options?.encoding;\n return encoding ? fs.readFile(virtualPath, \"utf8\") : fs.readFileBuffer(virtualPath);\n } catch (error) {\n normalizeError(error);\n }\n },\n async writeFile(path: string, data: string | Uint8Array) {\n try {\n const virtualPath = safePath(path);\n await ensureParent(fs, virtualPath);\n await fs.writeFile(virtualPath, data);\n } catch (error) {\n normalizeError(error);\n }\n },\n async unlink(path: string) {\n try {\n await fs.rm(safePath(path));\n } catch (error) {\n normalizeError(error);\n }\n },\n async readdir(path: string) {\n try {\n return await fs.readdir(safePath(path));\n } catch (error) {\n normalizeError(error);\n }\n },\n async mkdir(path: string) {\n try {\n await fs.mkdir(safePath(path), { recursive: true });\n } catch (error) {\n normalizeError(error);\n }\n },\n async rmdir(path: string) {\n try {\n await fs.rm(safePath(path));\n } catch (error) {\n normalizeError(error);\n }\n },\n async rename(from: string, to: string) {\n try {\n await ensureParent(fs, safePath(to));\n await fs.mv(safePath(from), safePath(to));\n } catch (error) {\n normalizeError(error);\n }\n },\n async stat(path: string) {\n try {\n return statShape(await fs.stat(safePath(path)));\n } catch (error) {\n normalizeError(error);\n }\n },\n async lstat(path: string) {\n try {\n return statShape(await fs.lstat(safePath(path)));\n } catch (error) {\n normalizeError(error);\n }\n },\n async readlink(path: string) {\n try {\n return await fs.readlink(safePath(path));\n } catch (error) {\n normalizeError(error);\n }\n },\n async symlink(target: string, path: string) {\n try {\n await fs.symlink(target, safePath(path));\n } catch (error) {\n normalizeError(error);\n }\n },\n async chmod(path: string, mode: number) {\n try {\n await fs.chmod(safePath(path), mode);\n } catch (error) {\n normalizeError(error);\n }\n },\n async utimes(path: string, atime: Date, mtime: Date) {\n try {\n await fs.utimes(safePath(path), atime, mtime);\n } catch (error) {\n normalizeError(error);\n }\n },\n };\n return { promises };\n}\n","import type { GitHttpRequest, HttpClient } from \"isomorphic-git\";\nimport type { CommandContext } from \"just-bash\";\n\nfunction isPrivateLiteralHost(hostname: string): boolean {\n const host = hostname.toLowerCase().replace(/^\\[|\\]$/g, \"\");\n if (host === \"localhost\" || host.endsWith(\".localhost\") || host === \"::1\") return true;\n const octets = host.split(\".\").map(Number);\n if (octets.length !== 4 || octets.some((octet) => !Number.isInteger(octet))) return false;\n return (\n octets[0] === 10 ||\n octets[0] === 127 ||\n (octets[0] === 169 && octets[1] === 254) ||\n (octets[0] === 172 && (octets[1] as number) >= 16 && (octets[1] as number) <= 31) ||\n (octets[0] === 192 && octets[1] === 168)\n );\n}\n\nexport function validateRemoteUrl(value: string): string {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new Error(\"Only absolute HTTPS remote URLs are supported\");\n }\n if (url.protocol !== \"https:\") throw new Error(\"Only HTTPS remote URLs are supported\");\n if (url.username || url.password) throw new Error(\"Remote URLs must not contain credentials\");\n if (url.hash) throw new Error(\"Remote URLs must not contain fragments\");\n if (isPrivateLiteralHost(url.hostname)) {\n throw new Error(\"Remote URLs must not target local or private hosts\");\n }\n return url.toString();\n}\n\nasync function collectBody(\n body?: AsyncIterableIterator<Uint8Array>,\n signal?: AbortSignal,\n): Promise<Uint8Array> {\n if (!body) return new Uint8Array();\n const chunks: Uint8Array[] = [];\n let size = 0;\n for await (const chunk of body) {\n if (signal?.aborted) throw new Error(\"Git operation was aborted\");\n chunks.push(chunk);\n size += chunk.byteLength;\n }\n const result = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return result;\n}\n\nasync function* oneChunk(body: Uint8Array): AsyncIterableIterator<Uint8Array> {\n yield body;\n}\n\nexport function createGitHttp(ctx: CommandContext): HttpClient {\n return {\n async request(request: GitHttpRequest) {\n if (!ctx.fetch) throw new Error(\"Network access is not configured for this sandbox\");\n if (ctx.signal?.aborted) throw new Error(\"Git operation was aborted\");\n const url = validateRemoteUrl(request.url);\n const bytes = await collectBody(request.body, ctx.signal);\n const response = await ctx.fetch(url, {\n method: request.method ?? \"GET\",\n headers: request.headers,\n // SecureFetch forwards BodyInit values unchanged, but its public type is narrower.\n body: bytes.length > 0 ? (bytes as unknown as string) : undefined,\n followRedirects: true,\n });\n if (ctx.signal?.aborted) throw new Error(\"Git operation was aborted\");\n const finalUrl = validateRemoteUrl(response.url);\n return {\n url: finalUrl,\n method: request.method,\n headers: response.headers,\n body: oneChunk(response.body),\n statusCode: response.status,\n statusMessage: response.statusText,\n };\n },\n };\n}\n","export const packageName = \"@getollie/cli\";\nexport const cliName = \"ollie\";\nexport const packageVersion = \"0.2.0\";\n\nexport type { CommandResult, Sandbox } from \"bash-tool\";\nexport type { ExecutorKind } from \"./config.js\";\nexport type {\n DelegatedTaskResult,\n ExecutorContext,\n ExecutorProvider,\n ExecutorSession,\n TaskDelegator,\n WorkspaceSyncResult,\n} from \"./executor/types.js\";\nexport type {\n CreateJustBashOptions,\n GitAuth,\n GitCommandOptions,\n SandboxMount,\n} from \"./sandbox/index.js\";\nexport {\n createJustBash,\n isJustBashAvailable,\n parseSandboxMounts,\n SANDBOX_WORKSPACE_PATH,\n validateSandboxMounts,\n} from \"./sandbox/index.js\";\n","import { createJustBash } from \"./sandbox/index.js\";\n\ntype CreatedJustBash = ReturnType<typeof createJustBash>;\n\nexport interface RunExecCommandOptions {\n timeoutMs: number;\n env?: NonNullable<Parameters<CreatedJustBash[\"exec\"]>[1]>[\"env\"];\n}\n\nexport type RunExecCommandResult = Awaited<ReturnType<CreatedJustBash[\"exec\"]>> & {\n durationMs: number;\n timedOut: boolean;\n};\n\nfunction timeoutSignal(timeoutMs: number): { signal: AbortSignal; cancel: () => void } {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n return {\n signal: controller.signal,\n cancel: () => clearTimeout(timer),\n };\n}\n\nfunction combineSignals(signals: Array<AbortSignal | undefined>): AbortSignal | undefined {\n const active = signals.filter((signal): signal is AbortSignal => Boolean(signal));\n if (active.length === 0) {\n return undefined;\n }\n\n const controller = new AbortController();\n for (const signal of active) {\n if (signal.aborted) {\n controller.abort(signal.reason);\n break;\n }\n signal.addEventListener(\"abort\", () => controller.abort(signal.reason), { once: true });\n }\n return controller.signal;\n}\n\nexport async function runExecCommand(\n cwd: string,\n command: string,\n options: RunExecCommandOptions,\n signal?: AbortSignal,\n): Promise<RunExecCommandResult> {\n const started = Date.now();\n const timeout = timeoutSignal(options.timeoutMs);\n const combinedSignal = combineSignals([signal, timeout.signal]);\n const timedOut = () => timeout.signal.aborted && !signal?.aborted;\n\n try {\n const bash = createJustBash(cwd);\n const result = await bash.exec(command, { env: options.env, signal: combinedSignal });\n return {\n ...result,\n durationMs: Date.now() - started,\n timedOut: timedOut(),\n };\n } catch (error) {\n if (timedOut()) {\n return {\n exitCode: 124,\n stdout: \"\",\n stderr: `Command timed out after ${options.timeoutMs} ms`,\n env: {},\n durationMs: Date.now() - started,\n timedOut: true,\n };\n }\n throw error;\n } finally {\n timeout.cancel();\n }\n}\n","import { Chalk } from \"chalk\";\nimport type { RunnerEvent } from \"./events.js\";\n\nexport interface Renderer {\n render(event: RunnerEvent): void;\n}\n\nexport interface RendererOptions {\n ndjson: boolean;\n color: boolean;\n columns?: number;\n}\n\nconst ELLIPSIS = \"…\";\nconst CENTER_ELLIPSIS = ` ${ELLIPSIS} `;\n\nexport function singleRowJson(value: unknown): string {\n const seen = new WeakSet<object>();\n return (\n JSON.stringify(value, (_key, item: unknown) => {\n if (typeof item === \"bigint\") {\n return item.toString();\n }\n if (item && typeof item === \"object\") {\n if (seen.has(item)) {\n return \"[Circular]\";\n }\n seen.add(item);\n }\n return item;\n }) ?? \"null\"\n );\n}\n\nfunction isCombiningCodePoint(codePoint: number): boolean {\n return (\n (codePoint >= 0x0300 && codePoint <= 0x036f) ||\n (codePoint >= 0x1ab0 && codePoint <= 0x1aff) ||\n (codePoint >= 0x1dc0 && codePoint <= 0x1dff) ||\n (codePoint >= 0x20d0 && codePoint <= 0x20ff) ||\n (codePoint >= 0xfe20 && codePoint <= 0xfe2f)\n );\n}\n\nfunction isFullWidthCodePoint(codePoint: number): boolean {\n return (\n codePoint >= 0x1100 &&\n (codePoint <= 0x115f ||\n codePoint === 0x2329 ||\n codePoint === 0x232a ||\n (codePoint >= 0x2e80 && codePoint <= 0xa4cf && codePoint !== 0x303f) ||\n (codePoint >= 0xac00 && codePoint <= 0xd7a3) ||\n (codePoint >= 0xf900 && codePoint <= 0xfaff) ||\n (codePoint >= 0xfe10 && codePoint <= 0xfe19) ||\n (codePoint >= 0xfe30 && codePoint <= 0xfe6f) ||\n (codePoint >= 0xff00 && codePoint <= 0xff60) ||\n (codePoint >= 0xffe0 && codePoint <= 0xffe6) ||\n (codePoint >= 0x1f300 && codePoint <= 0x1f64f) ||\n (codePoint >= 0x1f900 && codePoint <= 0x1f9ff) ||\n (codePoint >= 0x20000 && codePoint <= 0x3fffd))\n );\n}\n\nexport function displayWidth(text: string): number {\n let width = 0;\n for (const char of text) {\n const codePoint = char.codePointAt(0) ?? 0;\n if (codePoint === 0 || codePoint === 0x200d || isCombiningCodePoint(codePoint)) {\n continue;\n }\n if (codePoint < 0x20 || (codePoint >= 0x7f && codePoint < 0xa0)) {\n continue;\n }\n width += isFullWidthCodePoint(codePoint) ? 2 : 1;\n }\n return width;\n}\n\nfunction sliceStartByColumns(text: string, maxColumns: number): string {\n let width = 0;\n let result = \"\";\n for (const char of text) {\n const charWidth = displayWidth(char);\n if (width + charWidth > maxColumns) {\n break;\n }\n result += char;\n width += charWidth;\n }\n return result;\n}\n\nfunction sliceEndByColumns(text: string, maxColumns: number): string {\n let width = 0;\n let result = \"\";\n const chars = Array.from(text);\n for (let index = chars.length - 1; index >= 0; index -= 1) {\n const char = chars[index] ?? \"\";\n const charWidth = displayWidth(char);\n if (width + charWidth > maxColumns) {\n break;\n }\n result = `${char}${result}`;\n width += charWidth;\n }\n return result;\n}\n\ninterface EllipsizedText {\n head: string;\n marker: string;\n tail: string;\n}\n\nfunction ellipsizeToColumnParts(text: string, maxColumns: number | undefined): EllipsizedText {\n if (maxColumns === undefined || displayWidth(text) <= maxColumns) {\n return { head: text, marker: \"\", tail: \"\" };\n }\n if (maxColumns <= 0) {\n return { head: \"\", marker: \"\", tail: \"\" };\n }\n if (maxColumns === 1) {\n return { head: \"\", marker: ELLIPSIS, tail: \"\" };\n }\n\n const marker = maxColumns >= displayWidth(CENTER_ELLIPSIS) ? CENTER_ELLIPSIS : ELLIPSIS;\n const targetWidth = maxColumns - displayWidth(marker);\n const head = sliceStartByColumns(text, Math.ceil(targetWidth / 2));\n const tail = sliceEndByColumns(text, targetWidth - displayWidth(head));\n return { head, marker, tail };\n}\n\nexport function ellipsizeToColumns(text: string, maxColumns: number | undefined): string {\n const { head, marker, tail } = ellipsizeToColumnParts(text, maxColumns);\n return `${head}${marker}${tail}`;\n}\n\nfunction getStderrColumns(): number | undefined {\n return process.stderr.columns && process.stderr.columns > 0 ? process.stderr.columns : undefined;\n}\n\nfunction resolveToolRowColumns(columns: number | undefined): number {\n return Math.min(columns ?? 120, 120);\n}\n\nfunction formatToolRow(options: {\n symbol: string;\n toolName: string;\n value: unknown;\n columns: number;\n}): EllipsizedText {\n const prefix = `${options.symbol} ${options.toolName} `;\n const maxPayloadColumns = Math.max(1, options.columns - displayWidth(prefix));\n return ellipsizeToColumnParts(singleRowJson(options.value), maxPayloadColumns);\n}\n\nfunction colorToolRow(c: InstanceType<typeof Chalk>, row: EllipsizedText): string {\n return `${c.dim(row.head)}${c.yellow(row.marker)}${c.dim(row.tail)}`;\n}\n\nfunction toolSymbol(arrow: \"→\" | \"←\", source?: \"delegate\"): string {\n return source === \"delegate\" ? ` ↳ ${arrow}` : arrow;\n}\n\nexport function createRenderer(options: RendererOptions): Renderer {\n if (options.ndjson) {\n return {\n render(event) {\n process.stdout.write(`${singleRowJson(event)}\\n`);\n },\n };\n }\n\n const c = new Chalk({ level: options.color ? 1 : 0 });\n const columns = resolveToolRowColumns(options.columns ?? getStderrColumns());\n return {\n render(event) {\n switch (event.type) {\n case \"text\":\n process.stdout.write(event.text);\n break;\n case \"tool-call\": {\n const symbol = toolSymbol(\"→\", event.source);\n process.stderr.write(\n `${c.dim(symbol)} ${c.cyan(event.toolName)} ${colorToolRow(\n c,\n formatToolRow({\n symbol,\n toolName: event.toolName,\n value: event.input,\n columns,\n }),\n )}\\n`,\n );\n break;\n }\n case \"tool-result\": {\n const symbol = toolSymbol(\"←\", event.source);\n process.stderr.write(\n `${c.dim(symbol)} ${c.green(event.toolName)} ${colorToolRow(\n c,\n formatToolRow({\n symbol,\n toolName: event.toolName,\n value: event.output,\n columns,\n }),\n )}\\n`,\n );\n break;\n }\n case \"error\":\n process.stderr.write(`${c.red(\"error:\")} ${event.message}\\n`);\n break;\n case \"done\":\n process.stderr.write(c.dim(\"\\n[done]\\n\"));\n break;\n }\n },\n };\n}\n","import { stepCountIs, streamText } from \"ai\";\nimport type { RunConfig } from \"./config.js\";\nimport type { EventSink } from \"./events.js\";\nimport { ExecutorController } from \"./executor/controller.js\";\nimport { DaytonaExecutorProvider } from \"./executor/daytona.js\";\nimport { ModelTaskDelegator } from \"./executor/delegator.js\";\nimport { LocalExecutorProvider } from \"./executor/local.js\";\nimport { createExecutorTools } from \"./executor/tools.js\";\nimport type { ExecutorProvider } from \"./executor/types.js\";\nimport { buildSystemPrompt } from \"./prompt.js\";\nimport { createLanguageModel } from \"./provider.js\";\nimport { createTools } from \"./tools.js\";\nimport { getErrorMessage } from \"./utils/errors.js\";\n\nexport interface RunOneShotOptions extends RunConfig {\n prompt: string;\n signal?: AbortSignal;\n onEvent: EventSink;\n}\n\nfunction createExecutorProvider(options: RunOneShotOptions): ExecutorProvider | undefined {\n switch (options.executor) {\n case \"none\":\n return undefined;\n case \"local\":\n return new LocalExecutorProvider({\n cwd: options.cwd,\n commandTimeoutMs: options.commandTimeoutMs,\n });\n case \"daytona\":\n return new DaytonaExecutorProvider({\n cwd: options.cwd,\n commandTimeoutMs: options.commandTimeoutMs,\n snapshot: process.env.OLLIE_DAYTONA_SNAPSHOT,\n });\n }\n}\n\nexport async function runOneShot(options: RunOneShotOptions): Promise<number> {\n let executorController: ExecutorController | undefined;\n try {\n const model = createLanguageModel({\n provider: options.provider,\n model: options.model,\n });\n const workspaceTools = await createTools({\n cwd: options.cwd,\n mounts: options.mounts,\n maxOutputBytes: options.maxOutputBytes,\n });\n\n const executorProvider = createExecutorProvider(options);\n if (executorProvider) {\n executorController = new ExecutorController(\n executorProvider,\n new ModelTaskDelegator({\n model,\n maxSteps: options.maxSteps,\n maxOutputBytes: options.maxOutputBytes,\n commandTimeoutMs: options.commandTimeoutMs,\n onEvent: options.onEvent,\n }),\n );\n }\n const tools = {\n ...workspaceTools,\n ...(executorController ? createExecutorTools(executorController) : {}),\n };\n\n const result = streamText({\n model,\n tools,\n instructions: buildSystemPrompt({\n now: new Date(),\n maxSteps: options.maxSteps,\n commandTimeoutMs: options.commandTimeoutMs,\n executorInstructions: executorProvider?.systemPrompt,\n }),\n prompt: options.prompt,\n stopWhen: stepCountIs(options.maxSteps),\n abortSignal: options.signal,\n maxRetries: 1,\n });\n\n for await (const part of result.stream) {\n switch (part.type) {\n case \"text-delta\":\n await options.onEvent({ type: \"text\", text: part.text });\n break;\n case \"tool-call\":\n await options.onEvent({ type: \"tool-call\", toolName: part.toolName, input: part.input });\n break;\n case \"tool-result\":\n await options.onEvent({\n type: \"tool-result\",\n toolName: part.toolName,\n output: part.output,\n });\n break;\n case \"tool-error\":\n await options.onEvent({\n type: \"error\",\n message: `${part.toolName}: ${getErrorMessage(part.error)}`,\n });\n break;\n case \"error\":\n await options.onEvent({ type: \"error\", message: getErrorMessage(part.error) });\n break;\n case \"finish\":\n await options.onEvent({ type: \"done\", usage: part.totalUsage });\n break;\n }\n }\n\n return 0;\n } catch (error) {\n if (options.signal?.aborted) {\n await options.onEvent({ type: \"error\", message: \"aborted\" });\n return 130;\n }\n await options.onEvent({ type: \"error\", message: getErrorMessage(error) });\n return 1;\n } finally {\n await executorController?.dispose();\n }\n}\n","import type {\n DelegatedTaskResult,\n ExecutorProvider,\n ExecutorSession,\n TaskDelegator,\n} from \"./types.js\";\n\nexport class ExecutorController {\n #session?: ExecutorSession;\n #creatingSession?: Promise<ExecutorSession>;\n #running = false;\n #disposed = false;\n\n constructor(\n private readonly provider: ExecutorProvider,\n private readonly delegator: TaskDelegator,\n ) {}\n\n async delegateTask(task: string, signal?: AbortSignal): Promise<DelegatedTaskResult> {\n if (this.#disposed) throw new Error(\"Executor controller has been disposed\");\n if (this.#running) throw new Error(\"Executor delegation is already in progress\");\n signal?.throwIfAborted();\n\n this.#running = true;\n let session: ExecutorSession | undefined;\n let result: DelegatedTaskResult | undefined;\n let taskError: unknown;\n try {\n session = await this.#getSession(signal);\n await session.resume(signal);\n result = await this.delegator.runTask({ session, task, signal });\n } catch (error) {\n taskError = error;\n }\n\n let pauseError: unknown;\n try {\n await session?.pause(signal?.aborted ? undefined : signal);\n } catch (error) {\n pauseError = error;\n } finally {\n this.#running = false;\n }\n\n if (taskError !== undefined) throw taskError;\n if (pauseError !== undefined) throw pauseError;\n if (!result) throw new Error(\"Delegated task completed without a result\");\n return result;\n }\n\n async dispose(): Promise<void> {\n if (this.#disposed) return;\n this.#disposed = true;\n\n const session = this.#session ?? (await this.#creatingSession?.catch(() => undefined));\n await session?.dispose();\n }\n\n async #getSession(signal?: AbortSignal): Promise<ExecutorSession> {\n if (this.#session) return this.#session;\n if (!this.#creatingSession) {\n this.#creatingSession = this.provider.createSession({ signal }).then((session) => {\n this.#session = session;\n return session;\n });\n }\n return this.#creatingSession;\n }\n}\n","import { randomUUID } from \"node:crypto\";\nimport { mkdir, readdir, readFile, rm, stat, writeFile } from \"node:fs/promises\";\nimport { dirname, isAbsolute, relative, resolve, sep } from \"node:path\";\nimport {\n Daytona,\n DaytonaProcessExecutionTimeoutError,\n type Sandbox as DaytonaSdkSandbox,\n} from \"@daytona/sdk\";\nimport type { CommandResult, Sandbox } from \"bash-tool\";\nimport type { ExecutorProvider, ExecutorSession, WorkspaceSyncResult } from \"./types.js\";\n\nconst DEFAULT_REMOTE_WORKSPACE = \"/workspace\";\nconst DEFAULT_TTL_MINUTES = 10;\n\ninterface DaytonaCommandResponse {\n exitCode: number;\n result: string;\n}\n\nexport interface DaytonaSandboxApi {\n process: {\n executeCommand(\n command: string,\n cwd?: string,\n env?: Record<string, string>,\n timeout?: number,\n ): Promise<DaytonaCommandResponse>;\n };\n fs: {\n downloadFile(remotePath: string, timeout?: number): Promise<Buffer>;\n uploadFile(file: string | Buffer, remotePath: string, timeout?: number): Promise<void>;\n deleteFile(path: string, recursive?: boolean): Promise<void>;\n };\n getWorkDir(): Promise<string | undefined>;\n start(timeout?: number): Promise<void>;\n stop(timeout?: number, force?: boolean): Promise<void>;\n delete(timeout?: number, wait?: boolean): Promise<void>;\n}\n\nexport interface DaytonaClientApi {\n create(\n params?: {\n snapshot?: string;\n autoStopInterval?: number;\n autoDeleteInterval?: number;\n ttlMinutes?: number;\n labels?: Record<string, string>;\n },\n options?: { timeout?: number },\n ): Promise<DaytonaSandboxApi>;\n}\n\nexport interface DaytonaExecutorOptions {\n cwd: string;\n commandTimeoutMs: number;\n snapshot?: string;\n remoteWorkspacePath?: string;\n ttlMinutes?: number;\n client?: DaytonaClientApi;\n}\n\nfunction timeoutSeconds(timeoutMs: number): number {\n return Math.max(1, Math.ceil(timeoutMs / 1_000));\n}\n\nfunction abortable<T>(promise: Promise<T>, signal?: AbortSignal): Promise<T> {\n signal?.throwIfAborted();\n if (!signal) return promise;\n return new Promise<T>((resolvePromise, reject) => {\n const onAbort = () => reject(signal.reason ?? new Error(\"Daytona operation aborted\"));\n signal.addEventListener(\"abort\", onAbort, { once: true });\n promise.then(\n (value) => {\n signal.removeEventListener(\"abort\", onAbort);\n resolvePromise(value);\n },\n (error) => {\n signal.removeEventListener(\"abort\", onAbort);\n reject(error);\n },\n );\n });\n}\n\nfunction shellQuote(value: string): string {\n return `'${value.replaceAll(\"'\", `'\"'\"'`)}'`;\n}\n\nasync function listLocalFiles(root: string): Promise<Map<string, number>> {\n const files = new Map<string, number>();\n async function visit(directory: string): Promise<void> {\n for (const entry of await readdir(directory, { withFileTypes: true })) {\n const absolutePath = resolve(directory, entry.name);\n if (entry.isDirectory()) {\n await visit(absolutePath);\n } else if (entry.isFile()) {\n const path = relative(root, absolutePath).split(sep).join(\"/\");\n files.set(path, (await stat(absolutePath)).size);\n }\n }\n }\n await visit(root);\n return files;\n}\n\nexport class DaytonaSandbox implements Sandbox {\n readonly #sandbox: DaytonaSandboxApi;\n readonly #workspacePath: string;\n readonly #commandTimeoutMs: number;\n readonly #signal?: AbortSignal;\n #disposed = false;\n\n constructor(\n sandbox: DaytonaSandboxApi,\n options: { workspacePath: string; commandTimeoutMs: number; signal?: AbortSignal },\n ) {\n this.#sandbox = sandbox;\n this.#workspacePath = options.workspacePath;\n this.#commandTimeoutMs = options.commandTimeoutMs;\n this.#signal = options.signal;\n }\n\n async executeCommand(command: string): Promise<CommandResult> {\n this.#assertActive();\n this.#signal?.throwIfAborted();\n const marker = `__OLLIE_STDERR_${randomUUID()}__`;\n const stderrPath = `/tmp/ollie-stderr-${randomUUID()}`;\n const wrapped = `( ${command}\\n) 2>${shellQuote(stderrPath)}; ollie_code=$?; printf '\\n${marker}\\n'; base64 < ${shellQuote(stderrPath)}; rm -f ${shellQuote(stderrPath)}; exit $ollie_code`;\n\n try {\n const response = await abortable(\n this.#sandbox.process.executeCommand(\n wrapped,\n this.#workspacePath,\n undefined,\n timeoutSeconds(this.#commandTimeoutMs),\n ),\n this.#signal,\n );\n const separator = `\\n${marker}\\n`;\n const markerIndex = response.result.lastIndexOf(separator);\n if (markerIndex < 0) {\n return { exitCode: response.exitCode, stdout: response.result, stderr: \"\" };\n }\n const encodedStderr = response.result.slice(markerIndex + separator.length).trim();\n return {\n exitCode: response.exitCode,\n stdout: response.result.slice(0, markerIndex),\n stderr: encodedStderr ? Buffer.from(encodedStderr, \"base64\").toString(\"utf8\") : \"\",\n };\n } catch (error) {\n if (error instanceof DaytonaProcessExecutionTimeoutError) {\n return {\n exitCode: 124,\n stdout: \"\",\n stderr: `Command timed out after ${this.#commandTimeoutMs} ms`,\n };\n }\n throw error;\n }\n }\n\n async readFile(path: string): Promise<string> {\n this.#assertActive();\n const content = await this.#sandbox.fs.downloadFile(this.#resolvePath(path));\n return content.toString(\"utf8\");\n }\n\n async writeFiles(files: Array<{ path: string; content: string | Buffer }>): Promise<void> {\n this.#assertActive();\n for (const file of files) {\n const target = this.#resolvePath(file.path);\n await this.#sandbox.process.executeCommand(`mkdir -p ${shellQuote(dirname(target))}`);\n await this.#sandbox.fs.uploadFile(Buffer.from(file.content), target);\n }\n }\n\n dispose(): void {\n this.#disposed = true;\n }\n\n #resolvePath(path: string): string {\n const target = isAbsolute(path) ? resolve(path) : resolve(this.#workspacePath, path);\n if (target !== this.#workspacePath && !target.startsWith(`${this.#workspacePath}/`)) {\n throw new Error(`Path is outside the Daytona workspace: ${path}`);\n }\n return target;\n }\n\n #assertActive(): void {\n if (this.#disposed) throw new Error(\"Daytona executor session has been disposed\");\n }\n}\n\nclass DaytonaWorkspaceSynchronizer {\n readonly #cwd: string;\n readonly #remoteWorkspacePath: string;\n readonly #sandbox: DaytonaSandboxApi;\n #knownFiles = new Set<string>();\n\n constructor(cwd: string, remoteWorkspacePath: string, sandbox: DaytonaSandboxApi) {\n this.#cwd = resolve(cwd);\n this.#remoteWorkspacePath = remoteWorkspacePath;\n this.#sandbox = sandbox;\n }\n\n async syncToExecutor(signal?: AbortSignal): Promise<WorkspaceSyncResult> {\n signal?.throwIfAborted();\n const prepareResult = await abortable(\n this.#sandbox.process.executeCommand(`mkdir -p ${shellQuote(this.#remoteWorkspacePath)}`),\n signal,\n );\n if (prepareResult.exitCode !== 0) {\n throw new Error(\n `Failed to create Daytona workspace ${this.#remoteWorkspacePath}: ${prepareResult.result}`,\n );\n }\n const localFiles = await listLocalFiles(this.#cwd);\n let filesCreated = 0;\n let filesUpdated = 0;\n let filesDeleted = 0;\n let bytesTransferred = 0;\n\n for (const path of this.#knownFiles) {\n if (localFiles.has(path)) continue;\n await abortable(\n this.#sandbox.fs.deleteFile(this.#remotePath(path)).catch(() => undefined),\n signal,\n );\n filesDeleted++;\n }\n for (const [path, size] of localFiles) {\n signal?.throwIfAborted();\n await abortable(\n this.#sandbox.fs.uploadFile(resolve(this.#cwd, path), this.#remotePath(path)),\n signal,\n );\n if (this.#knownFiles.has(path)) filesUpdated++;\n else filesCreated++;\n bytesTransferred += size;\n }\n this.#knownFiles = new Set(localFiles.keys());\n return this.#result(filesCreated, filesUpdated, filesDeleted, bytesTransferred);\n }\n\n async syncToLocal(signal?: AbortSignal): Promise<WorkspaceSyncResult> {\n signal?.throwIfAborted();\n const response = await abortable(\n this.#sandbox.process.executeCommand(\n \"find . -type f -print0 | base64 -w0\",\n this.#remoteWorkspacePath,\n ),\n signal,\n );\n if (response.exitCode !== 0) {\n throw new Error(`Failed to enumerate Daytona workspace files: ${response.result}`);\n }\n const decoded = response.result.trim()\n ? Buffer.from(response.result.trim(), \"base64\").toString(\"utf8\")\n : \"\";\n const remoteFiles = new Set(\n decoded\n .split(\"\\0\")\n .filter(Boolean)\n .map((path) => (path.startsWith(\"./\") ? path.slice(2) : path)),\n );\n let filesCreated = 0;\n let filesUpdated = 0;\n let filesDeleted = 0;\n let bytesTransferred = 0;\n\n for (const path of this.#knownFiles) {\n if (remoteFiles.has(path)) continue;\n await rm(resolve(this.#cwd, path), { force: true });\n filesDeleted++;\n }\n for (const path of remoteFiles) {\n signal?.throwIfAborted();\n const localPath = this.#localPath(path);\n const existed = await stat(localPath).then(\n () => true,\n () => false,\n );\n const content = await abortable(\n this.#sandbox.fs.downloadFile(this.#remotePath(path)),\n signal,\n );\n await mkdir(dirname(localPath), { recursive: true });\n const previous = existed ? await readFile(localPath) : undefined;\n if (!previous?.equals(content)) {\n await writeFile(localPath, content);\n if (existed) filesUpdated++;\n else filesCreated++;\n bytesTransferred += content.byteLength;\n }\n }\n this.#knownFiles = remoteFiles;\n return this.#result(filesCreated, filesUpdated, filesDeleted, bytesTransferred);\n }\n\n #remotePath(path: string): string {\n return `${this.#remoteWorkspacePath}/${path}`;\n }\n\n #localPath(path: string): string {\n const target = resolve(this.#cwd, path);\n if (target !== this.#cwd && !target.startsWith(`${this.#cwd}${sep}`)) {\n throw new Error(`Daytona returned a path outside the workspace: ${path}`);\n }\n return target;\n }\n\n #result(\n filesCreated: number,\n filesUpdated: number,\n filesDeleted: number,\n bytesTransferred: number,\n ): WorkspaceSyncResult {\n return {\n status:\n filesCreated || filesUpdated || filesDeleted || bytesTransferred\n ? \"synchronized\"\n : \"no-changes\",\n filesCreated,\n filesUpdated,\n filesDeleted,\n bytesTransferred,\n };\n }\n}\n\nexport class DaytonaExecutorSession implements ExecutorSession {\n readonly sandbox: DaytonaSandbox;\n readonly context;\n readonly #remote: DaytonaSandboxApi;\n readonly #synchronizer: DaytonaWorkspaceSynchronizer;\n #stopped = false;\n #disposed = false;\n\n constructor(remote: DaytonaSandboxApi, options: DaytonaExecutorOptions, signal?: AbortSignal) {\n const workspacePath = options.remoteWorkspacePath ?? DEFAULT_REMOTE_WORKSPACE;\n this.#remote = remote;\n this.#synchronizer = new DaytonaWorkspaceSynchronizer(options.cwd, workspacePath, remote);\n this.sandbox = new DaytonaSandbox(remote, {\n workspacePath,\n commandTimeoutMs: options.commandTimeoutMs,\n signal,\n });\n this.context = {\n kind: \"daytona\" as const,\n workspacePath,\n isolated: true,\n networkAccess: \"full\" as const,\n };\n }\n\n async resume(signal?: AbortSignal): Promise<void> {\n this.#assertActive();\n signal?.throwIfAborted();\n if (this.#stopped) {\n await abortable(this.#remote.start(), signal);\n this.#stopped = false;\n }\n await this.syncWorkspace({ destination: \"executor\", signal });\n }\n\n async pause(signal?: AbortSignal): Promise<void> {\n this.#assertActive();\n signal?.throwIfAborted();\n await this.syncWorkspace({ destination: \"local\", signal });\n await abortable(this.#remote.stop(), signal);\n this.#stopped = true;\n }\n\n async syncWorkspace(options: {\n destination: \"executor\" | \"local\";\n signal?: AbortSignal;\n }): Promise<WorkspaceSyncResult> {\n this.#assertActive();\n return options.destination === \"executor\"\n ? this.#synchronizer.syncToExecutor(options.signal)\n : this.#synchronizer.syncToLocal(options.signal);\n }\n\n async dispose(): Promise<void> {\n if (this.#disposed) return;\n this.#disposed = true;\n this.sandbox.dispose();\n await this.#remote.delete(60, true);\n }\n\n #assertActive(): void {\n if (this.#disposed) throw new Error(\"Daytona executor session has been disposed\");\n }\n}\n\nexport class DaytonaExecutorProvider implements ExecutorProvider {\n readonly systemPrompt = `Executor-backed delegation:\n- The delegateTask tool starts a fresh delegated agent with native workspace tools in an isolated Daytona sandbox.\n- Use delegateTask when the task requires unavailable executables, package managers, full system tooling, or native test/build commands.\n- The delegated agent cannot delegate further. Its trajectory and exact final summary are returned to you.\n- The Daytona workspace uses a provider-selected writable path that differs from your /workspace path. In delegated task descriptions, say \"the workspace root\" and do not hardcode /workspace; the child receives its actual workspace path.\n- One remote executor session is reused for this run. Workspace changes are synchronized back before delegateTask returns and are then visible through your workspace tools.\n- Remote startup and workspace transfer have overhead, so delegate bounded, substantial work rather than individual commands.\n- Do not claim delegated work succeeded unless the returned trajectory or summary confirms it.`;\n\n readonly #options: DaytonaExecutorOptions;\n readonly #client?: DaytonaClientApi;\n\n constructor(options: DaytonaExecutorOptions) {\n this.#options = options;\n this.#client = options.client;\n }\n\n async createSession({ signal }: { signal?: AbortSignal }): Promise<ExecutorSession> {\n signal?.throwIfAborted();\n const client = this.#client ?? (new Daytona() as unknown as DaytonaClientApi);\n const remote = await abortable(\n client.create(\n {\n ...(this.#options.snapshot ? { snapshot: this.#options.snapshot } : {}),\n autoStopInterval: 0,\n autoDeleteInterval: 3,\n ttlMinutes: this.#options.ttlMinutes ?? DEFAULT_TTL_MINUTES,\n labels: { managedBy: \"ollie\" },\n },\n { timeout: 120 },\n ),\n signal,\n );\n try {\n const workDir = await abortable(remote.getWorkDir(), signal);\n if (!workDir) throw new Error(\"Daytona did not report a writable working directory\");\n const remoteWorkspacePath =\n this.#options.remoteWorkspacePath ?? `${workDir.replace(/\\/+$/, \"\")}/ollie-workspace`;\n return new DaytonaExecutorSession(remote, { ...this.#options, remoteWorkspacePath }, signal);\n } catch (error) {\n await remote.delete(60, true).catch(() => undefined);\n throw error;\n }\n }\n}\n\n// Keep the concrete SDK type checked when its public Sandbox contract changes.\nconst _daytonaSandboxTypeCheck: DaytonaSandboxApi | undefined = undefined as\n | DaytonaSdkSandbox\n | undefined;\nvoid _daytonaSandboxTypeCheck;\n","import { generateText, type LanguageModel, type ModelMessage, stepCountIs } from \"ai\";\nimport type { EventSink } from \"../events.js\";\nimport { buildDelegatedSystemPrompt } from \"../prompt.js\";\nimport { createWorkspaceTools } from \"../tools.js\";\nimport type { DelegatedTaskResult, ExecutorSession, TaskDelegator } from \"./types.js\";\n\nexport interface ModelTaskDelegatorOptions {\n model: LanguageModel;\n maxSteps: number;\n maxOutputBytes: number;\n commandTimeoutMs: number;\n onEvent?: EventSink;\n now?: () => Date;\n}\n\nexport class ModelTaskDelegator implements TaskDelegator {\n constructor(private readonly options: ModelTaskDelegatorOptions) {}\n\n async runTask({\n session,\n task,\n signal,\n }: {\n session: ExecutorSession;\n task: string;\n signal?: AbortSignal;\n }): Promise<DelegatedTaskResult> {\n const instructions = buildDelegatedSystemPrompt({\n now: this.options.now?.() ?? new Date(),\n maxSteps: this.options.maxSteps,\n commandTimeoutMs: this.options.commandTimeoutMs,\n context: session.context,\n });\n const tools = await createWorkspaceTools({\n sandbox: session.sandbox,\n destination: session.context.workspacePath,\n maxOutputBytes: this.options.maxOutputBytes,\n extraInstructions:\n \"Use the native workspace tools to complete the delegated task. Start at the workspace root, use relative paths, keep changes focused, and verify the result before reporting it.\",\n });\n const result = await generateText({\n model: this.options.model,\n instructions,\n prompt: task,\n tools,\n stopWhen: stepCountIs(this.options.maxSteps),\n abortSignal: signal,\n maxRetries: 1,\n onStepFinish: async (step) => {\n for (const toolCall of step.toolCalls) {\n await this.options.onEvent?.({\n type: \"tool-call\",\n toolName: toolCall.toolName,\n input: toolCall.input,\n source: \"delegate\",\n });\n }\n for (const toolResult of step.toolResults) {\n await this.options.onEvent?.({\n type: \"tool-result\",\n toolName: toolResult.toolName,\n output: toolResult.output,\n source: \"delegate\",\n });\n }\n },\n });\n\n const finalTextParts = result.finalStep.content.filter(\n (part): part is Extract<typeof part, { type: \"text\" }> => part.type === \"text\",\n );\n const summary = finalTextParts.at(-1)?.text;\n if (summary === undefined) {\n throw new Error(\"Delegated agent did not return a final text summary\");\n }\n\n const trajectory: ModelMessage[] = [\n { role: \"system\", content: instructions },\n { role: \"user\", content: task },\n ...result.responseMessages,\n ];\n return { trajectory, summary };\n }\n}\n","import type { ExecutorContext } from \"./executor/types.js\";\nimport { SANDBOX_WORKSPACE_PATH } from \"./sandbox/index.js\";\n\nexport interface PromptOptions {\n now: Date;\n maxSteps: number;\n commandTimeoutMs: number;\n executorInstructions?: string;\n}\n\nexport function buildSystemPrompt(options: PromptOptions): string {\n const executorSection = options.executorInstructions ? `\\n\\n${options.executorInstructions}` : \"\";\n\n return `You are Terminus, a concise one-shot CLI evaluation agent inspired by Harbor Terminus-2.\n\nTerminus-2 spirit:\n- Prefer terminal-centric operation through the bash tool.\n- Treat bash as the primary terminal environment: inspect files, list directories, search text, run tests, and gather state by issuing shell commands.\n- Operate autonomously and finish the user's task in this single run.\n- Do not ask for interactive confirmation or user input during execution.\n- Prefer concrete terminal inspection over speculation. Verify facts through shell output before claiming them.\n- Keep actions minimal, bounded, and relevant to the task.\n- Explain failures clearly and recover where practical.\n- Do not claim a command, file observation, test result, or search result succeeded unless shell output confirms it.\n- Summarize final findings and important command results clearly.\n\nRuntime context:\n- Working directory: ${SANDBOX_WORKSPACE_PATH}\n- Current time: ${options.now.toISOString()}\n- Maximum model/tool steps: ${options.maxSteps}\n- Per-command timeout: ${options.commandTimeoutMs} ms\n\nEnvironment capabilities and limitations:\n- This is a restricted Bash environment. Only the provided built-in commands and Ollie's Git command can run.\n- Arbitrary executables and package managers such as node, npm, pnpm, npx, bun, deno, and system Python are unavailable; downloading a binary does not make it executable.\n- Use python/python3 (CPython compiled to WebAssembly) or js-exec (QuickJS) for supported scripting. They are not full Python or Node.js environments and cannot install or import arbitrary packages.\n- Common built-ins include find, rg, grep, sed, awk, jq, yq, curl, diff, tar, and sqlite3. Run help or <command> --help when uncertain; do not repeatedly probe unavailable commands.\n- Shell state is isolated per bash tool call: cd, exported variables, aliases, and functions do not carry into the next call. Combine dependent shell-state operations in one call, or pass explicit paths.\n- There is no process/job control or background execution. Shell arithmetic is limited to signed 32-bit integers, and loops, recursion, command counts, runtime, and output are bounded.\n- The environment defaults to UTC. Symbolic links are disabled.\n- Full HTTP(S) network access is enabled through curl and compatible commands. Network requests can have permanent external side effects.${executorSection}\n\nTool policy:\n- There is no approval flow. Tool calls execute automatically.\n- Git supports a practical subset of commands. Hooks, submodules, signing, SSH remotes, editors, pagers, and advanced options are unavailable.\n- A successful git push or other mutating network request changes the remote permanently and is allowed only when explicitly requested by the user.\n- Avoid destructive actions unless the user's task explicitly requires them.`;\n}\n\nexport interface DelegatedPromptOptions {\n now: Date;\n maxSteps: number;\n commandTimeoutMs: number;\n context: ExecutorContext;\n}\n\nexport function buildDelegatedSystemPrompt(options: DelegatedPromptOptions): string {\n const executionBoundary = options.context.isolated\n ? \"Commands run natively inside an isolated remote environment.\"\n : \"Commands run natively with the current user's permissions and are not isolated.\";\n return `You are Ollie's delegated execution agent. Complete one bounded task using native workspace tools.\n\nRuntime context:\n- Workspace root: ${options.context.workspacePath}\n- Current time: ${options.now.toISOString()}\n- Maximum model/tool steps: ${options.maxSteps}\n- Per-command timeout: ${options.commandTimeoutMs} ms\n- ${executionBoundary}\n\nOperating rules:\n- Start at the workspace root and use relative paths for workspace files.\n- Inspect the relevant state before making changes.\n- Keep changes minimal and directly related to the delegated task.\n- Run appropriate native checks or tests and report their actual results.\n- Do not delegate work and do not attempt to synchronize the workspace; neither capability is available.\n- Avoid destructive or permanent external actions unless the delegated task explicitly requires them.\n- Finish with a concise text summary describing what you did, what changed, and how you verified it. This final text block is returned verbatim to the parent agent.`;\n}\n","import type { ToolSet } from \"ai\";\nimport { type CreateBashToolOptions, createBashTool } from \"bash-tool\";\nimport {\n createJustBash,\n SANDBOX_WORKSPACE_PATH,\n type SandboxMount,\n} from \"./sandbox/index.js\";\n\nexport interface CreateWorkspaceToolsOptions {\n sandbox: NonNullable<CreateBashToolOptions[\"sandbox\"]>;\n destination: string;\n maxOutputBytes: number;\n extraInstructions: string;\n}\n\nexport async function createWorkspaceTools(options: CreateWorkspaceToolsOptions): Promise<ToolSet> {\n const toolkit = await createBashTool({\n sandbox: options.sandbox,\n destination: options.destination,\n maxOutputLength: options.maxOutputBytes,\n extraInstructions: options.extraInstructions,\n });\n return toolkit.tools;\n}\n\nexport interface CreateToolsOptions {\n cwd: string;\n mounts?: SandboxMount[];\n maxOutputBytes: number;\n}\n\nexport async function createTools(options: CreateToolsOptions): Promise<ToolSet> {\n return createWorkspaceTools({\n sandbox: createJustBash(options.cwd, { mounts: options.mounts }),\n destination: SANDBOX_WORKSPACE_PATH,\n maxOutputBytes: options.maxOutputBytes,\n extraInstructions:\n \"Use bash commands to inspect files, search, run tests, and gather terminal state. Sandbox-native git is available; local Git changes persist in the workspace, and git push has permanent remote effects, so destructive actions and pushes must only be used when explicitly requested. Keep commands bounded.\",\n });\n}\n","import { type ChildProcess, spawn } from \"node:child_process\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, isAbsolute, resolve } from \"node:path\";\nimport type { CommandResult, Sandbox } from \"bash-tool\";\nimport type { ExecutorProvider, ExecutorSession } from \"./types.js\";\n\nexport interface LocalExecutorOptions {\n cwd: string;\n commandTimeoutMs: number;\n env?: NodeJS.ProcessEnv;\n}\n\nexport class LocalSandbox implements Sandbox {\n readonly #cwd: string;\n readonly #commandTimeoutMs: number;\n readonly #env: NodeJS.ProcessEnv;\n readonly #signal?: AbortSignal;\n readonly #processes = new Set<ChildProcess>();\n #disposed = false;\n\n constructor(options: LocalExecutorOptions, signal?: AbortSignal) {\n this.#cwd = resolve(options.cwd);\n this.#commandTimeoutMs = options.commandTimeoutMs;\n this.#env = options.env ?? process.env;\n this.#signal = signal;\n }\n\n async executeCommand(command: string): Promise<CommandResult> {\n this.#assertActive();\n this.#signal?.throwIfAborted();\n\n return new Promise<CommandResult>((resolveResult, reject) => {\n const child = spawn(\"/bin/sh\", [\"-lc\", command], {\n cwd: this.#cwd,\n env: this.#env,\n detached: true,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n this.#processes.add(child);\n\n let stdout = \"\";\n let stderr = \"\";\n let timedOut = false;\n let abortReason: unknown;\n let forceTimer: NodeJS.Timeout | undefined;\n let settled = false;\n\n const finish = (callback: () => void) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n if (forceTimer) clearTimeout(forceTimer);\n this.#signal?.removeEventListener(\"abort\", onAbort);\n this.#processes.delete(child);\n callback();\n };\n const terminate = (signal: NodeJS.Signals) => {\n if (!child.pid) return;\n try {\n process.kill(-child.pid, signal);\n } catch {\n child.kill(signal);\n }\n };\n const beginTermination = () => {\n terminate(\"SIGTERM\");\n forceTimer = setTimeout(() => terminate(\"SIGKILL\"), 100);\n forceTimer.unref();\n };\n const onAbort = () => {\n abortReason = this.#signal?.reason ?? new Error(\"Executor command aborted\");\n beginTermination();\n };\n const timer = setTimeout(() => {\n timedOut = true;\n beginTermination();\n }, this.#commandTimeoutMs);\n\n child.stdout?.setEncoding(\"utf8\");\n child.stderr?.setEncoding(\"utf8\");\n child.stdout?.on(\"data\", (chunk: string) => {\n stdout += chunk;\n });\n child.stderr?.on(\"data\", (chunk: string) => {\n stderr += chunk;\n });\n child.once(\"error\", (error) => finish(() => reject(error)));\n child.once(\"close\", (code, signal) => {\n finish(() => {\n if (abortReason !== undefined) {\n reject(abortReason);\n return;\n }\n if (timedOut) {\n resolveResult({\n exitCode: 124,\n stdout,\n stderr: `${stderr}${stderr ? \"\\n\" : \"\"}Command timed out after ${this.#commandTimeoutMs} ms`,\n });\n return;\n }\n resolveResult({\n exitCode: code ?? (signal ? 128 : 1),\n stdout,\n stderr,\n });\n });\n });\n this.#signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n }\n\n async readFile(path: string): Promise<string> {\n this.#assertActive();\n return readFile(this.#resolvePath(path), \"utf8\");\n }\n\n async writeFiles(files: Array<{ path: string; content: string | Buffer }>): Promise<void> {\n this.#assertActive();\n await Promise.all(\n files.map(async ({ path, content }) => {\n const target = this.#resolvePath(path);\n await mkdir(dirname(target), { recursive: true });\n await writeFile(target, content);\n }),\n );\n }\n\n dispose(): void {\n if (this.#disposed) return;\n this.#disposed = true;\n for (const child of this.#processes) {\n if (!child.pid) continue;\n try {\n process.kill(-child.pid, \"SIGTERM\");\n } catch {\n child.kill(\"SIGTERM\");\n }\n }\n this.#processes.clear();\n }\n\n #resolvePath(path: string): string {\n return isAbsolute(path) ? path : resolve(this.#cwd, path);\n }\n\n #assertActive(): void {\n if (this.#disposed) throw new Error(\"Local executor session has been disposed\");\n }\n}\n\nexport class LocalExecutorSession implements ExecutorSession {\n readonly sandbox: LocalSandbox;\n readonly context;\n #disposed = false;\n\n constructor(options: LocalExecutorOptions, signal?: AbortSignal) {\n const workspacePath = resolve(options.cwd);\n this.sandbox = new LocalSandbox(options, signal);\n this.context = {\n kind: \"local\" as const,\n workspacePath,\n isolated: false,\n networkAccess: \"full\" as const,\n };\n }\n\n async resume(signal?: AbortSignal): Promise<void> {\n this.#assertActive();\n signal?.throwIfAborted();\n }\n\n async pause(signal?: AbortSignal): Promise<void> {\n this.#assertActive();\n signal?.throwIfAborted();\n }\n\n async dispose(): Promise<void> {\n if (this.#disposed) return;\n this.#disposed = true;\n this.sandbox.dispose();\n }\n\n #assertActive(): void {\n if (this.#disposed) throw new Error(\"Local executor session has been disposed\");\n }\n}\n\nexport class LocalExecutorProvider implements ExecutorProvider {\n readonly systemPrompt = `Executor-backed delegation:\n- The delegateTask tool starts a fresh delegated agent with native workspace tools at the current local workspace root.\n- Use delegateTask when the task requires unavailable executables, package managers, full system tooling, or native test/build commands.\n- Native execution runs with the current user's permissions and is not isolated. Delegate only bounded, task-relevant work.\n- The delegated agent cannot delegate further. Its trajectory and exact final summary are returned to you.\n- One executor session is reused for this run. Because the local executor shares the workspace, its file changes are immediately visible through your workspace tools.\n- Do not claim delegated work succeeded unless the returned trajectory or summary confirms it.`;\n\n constructor(private readonly options: LocalExecutorOptions) {}\n\n async createSession({ signal }: { signal?: AbortSignal }): Promise<ExecutorSession> {\n signal?.throwIfAborted();\n return new LocalExecutorSession(this.options, signal);\n }\n}\n","import { jsonSchema, type ToolSet, tool } from \"ai\";\nimport type { ExecutorController } from \"./controller.js\";\n\nexport function createExecutorTools(controller: ExecutorController): ToolSet {\n return {\n delegateTask: tool({\n description:\n \"Delegate one bounded task to a fresh agent with native workspace tools in the configured execution environment.\",\n inputSchema: jsonSchema<{ task: string }>({\n type: \"object\",\n additionalProperties: false,\n required: [\"task\"],\n properties: {\n task: {\n type: \"string\",\n minLength: 1,\n description: \"A complete, self-contained description of the task to perform\",\n },\n },\n }),\n execute: async ({ task }, { abortSignal }) => {\n const trimmedTask = task.trim();\n if (!trimmedTask) throw new Error(\"Delegated task must not be empty\");\n return controller.delegateTask(trimmedTask, abortSignal);\n },\n }),\n };\n}\n","import { createOpenAI } from \"@ai-sdk/openai\";\nimport type { LanguageModel } from \"ai\";\nimport { CliError } from \"./utils/errors.js\";\n\nexport interface ProviderOptions {\n provider: string;\n model: string;\n env?: NodeJS.ProcessEnv;\n}\n\nexport function createLanguageModel({\n provider,\n model,\n env = process.env,\n}: ProviderOptions): LanguageModel {\n if (provider !== \"openai\") {\n throw new CliError(\n `Unsupported provider: ${provider}. The reference implementation currently supports openai.`,\n );\n }\n\n if (!env.OPENAI_API_KEY) {\n throw new CliError(\"OPENAI_API_KEY is required when using the openai provider.\");\n }\n\n const openai = createOpenAI({ apiKey: env.OPENAI_API_KEY });\n return openai(model);\n}\n","import { once } from \"node:events\";\nimport { posix } from \"node:path\";\nimport { createInterface } from \"node:readline\";\nimport type { Readable, Writable } from \"node:stream\";\nimport type { Bash } from \"just-bash\";\nimport { createJustBash } from \"./just-bash.js\";\nimport type { SandboxMount } from \"./mounts.js\";\n\nexport interface RunWorkerOptions {\n cwd?: string;\n mounts?: SandboxMount[];\n input?: Readable;\n output?: Writable;\n signal?: AbortSignal;\n}\n\ntype RequestId = string | number;\n\ntype WorkerResponse =\n | { id: RequestId | null; result: unknown }\n | { id: RequestId | null; error: { message: string } };\n\ninterface ParsedRequest {\n id: RequestId;\n method: \"exec\" | \"readFile\" | \"writeFile\";\n params: Record<string, unknown>;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseRequest(line: string): ParsedRequest {\n let value: unknown;\n try {\n value = JSON.parse(line);\n } catch {\n throw new Error(\"Invalid JSON request\");\n }\n\n if (!isRecord(value)) {\n throw new Error(\"Request must be a JSON object\");\n }\n if (typeof value.id !== \"string\" && typeof value.id !== \"number\") {\n throw new Error(\"Request id must be a string or number\");\n }\n if (value.method !== \"exec\" && value.method !== \"readFile\" && value.method !== \"writeFile\") {\n throw new Error(\"Unknown worker method\");\n }\n if (!isRecord(value.params)) {\n throw new Error(\"Request params must be a JSON object\");\n }\n\n return {\n id: value.id,\n method: value.method,\n params: value.params,\n };\n}\n\nfunction requireString(params: Record<string, unknown>, name: string): string {\n const value = params[name];\n if (typeof value !== \"string\") {\n throw new Error(`Parameter ${name} must be a string`);\n }\n return value;\n}\n\nfunction validateVirtualPath(path: string): string {\n if (\n !posix.isAbsolute(path) ||\n path.includes(\"\\\\\") ||\n path.includes(\"\\0\") ||\n posix.normalize(path) !== path ||\n path.split(\"/\").some((component) => component === \".\" || component === \"..\")\n ) {\n throw new Error(\"Path must be a normalized absolute virtual path\");\n }\n return path;\n}\n\nfunction requestIdFromLine(line: string): RequestId | null {\n try {\n const value: unknown = JSON.parse(line);\n if (isRecord(value) && (typeof value.id === \"string\" || typeof value.id === \"number\")) {\n return value.id;\n }\n } catch {\n // The parse error is returned by parseRequest.\n }\n return null;\n}\n\nfunction safeErrorMessage(error: unknown, workspaceRoot: string): string {\n const message = error instanceof Error ? error.message : \"Worker operation failed\";\n return message.split(workspaceRoot).join(\"<workspace>\");\n}\n\nexport async function handleWorkerLine(\n bash: Bash,\n line: string,\n workspaceRoot: string,\n): Promise<WorkerResponse> {\n const fallbackId = requestIdFromLine(line);\n try {\n const request = parseRequest(line);\n\n switch (request.method) {\n case \"exec\": {\n const command = requireString(request.params, \"command\");\n const result = await bash.exec(command);\n return {\n id: request.id,\n result: {\n stdout: result.stdout,\n stderr: result.stderr,\n exitCode: result.exitCode,\n },\n };\n }\n case \"readFile\": {\n const path = validateVirtualPath(requireString(request.params, \"path\"));\n return { id: request.id, result: await bash.fs.readFile(path) };\n }\n case \"writeFile\": {\n const path = validateVirtualPath(requireString(request.params, \"path\"));\n const content = requireString(request.params, \"content\");\n await bash.fs.writeFile(path, content);\n return { id: request.id, result: null };\n }\n }\n } catch (error) {\n return { id: fallbackId, error: { message: safeErrorMessage(error, workspaceRoot) } };\n }\n}\n\nasync function writeResponse(output: Writable, response: WorkerResponse): Promise<void> {\n if (!output.write(`${JSON.stringify(response)}\\n`)) {\n await once(output, \"drain\");\n }\n}\n\nexport async function runWorker(options: RunWorkerOptions = {}): Promise<void> {\n const workspaceRoot = options.cwd ?? process.cwd();\n const input = options.input ?? process.stdin;\n const output = options.output ?? process.stdout;\n const bash = createJustBash(workspaceRoot, { mounts: options.mounts });\n const lines = createInterface({ input, crlfDelay: Number.POSITIVE_INFINITY });\n const close = () => lines.close();\n if (options.signal?.aborted) {\n close();\n } else {\n options.signal?.addEventListener(\"abort\", close, { once: true });\n }\n\n try {\n for await (const line of lines) {\n await writeResponse(output, await handleWorkerLine(bash, line, workspaceRoot));\n }\n } finally {\n options.signal?.removeEventListener(\"abort\", close);\n lines.close();\n }\n}\n","export interface TruncatedText {\n text: string;\n truncated: boolean;\n}\n\nconst encoder = new TextEncoder();\n\nexport function truncateText(input: string, maxBytes: number): TruncatedText {\n if (maxBytes <= 0) {\n return {\n text: \"\\n[truncated: output limit is 0 bytes]\",\n truncated: input.length > 0,\n };\n }\n\n if (encoder.encode(input).byteLength <= maxBytes) {\n return { text: input, truncated: false };\n }\n\n let bytes = 0;\n let end = 0;\n for (const char of input) {\n const size = encoder.encode(char).byteLength;\n if (bytes + size > maxBytes) {\n break;\n }\n bytes += size;\n end += char.length;\n }\n\n return {\n text: `${input.slice(0, end)}\\n[truncated: output exceeded ${maxBytes} bytes]`,\n truncated: true,\n };\n}\n\nexport function redactKnownSecrets(input: string, env: NodeJS.ProcessEnv = process.env): string {\n let output = input;\n for (const [key, value] of Object.entries(env)) {\n if (!value || value.length < 8) {\n continue;\n }\n if (/TOKEN|SECRET|KEY|PASSWORD|CREDENTIAL/i.test(key)) {\n output = output.split(value).join(`[redacted:${key}]`);\n }\n }\n return output;\n}\n"],"mappings":"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","names":["resolve","resolve","access","stat","realpathSync","statSync","posix","posix","stat","virtualPath","posix","branch","output","key","value","SANDBOX_WORKSPACE_PATH","realpathSync","statSync","stat","access","stepCountIs","stat","resolve","SANDBOX_WORKSPACE_PATH","SANDBOX_WORKSPACE_PATH","mkdir","readFile","writeFile","dirname","isAbsolute","resolve","stepCountIs","posix","posix"]}
1
+ {"version":3,"sources":["../src/cli.ts","../src/cli-program.ts","../src/config.ts","../src/utils/errors.ts","../src/doctor.ts","../src/sandbox/just-bash.ts","../src/sandbox/git/index.ts","../src/sandbox/git/fs-adapter.ts","../src/sandbox/git/http-adapter.ts","../src/index.ts","../src/exec.ts","../src/render.ts","../src/runner.ts","../src/executor/controller.ts","../src/executor/daytona.ts","../src/executor/delegator.ts","../src/prompt.ts","../src/tools.ts","../src/executor/local.ts","../src/executor/tools.ts","../src/provider.ts","../src/sandbox/runtime.ts","../src/utils/output.ts"],"sourcesContent":["import { CommanderError } from \"commander\";\nimport { main } from \"./cli-program.js\";\nimport { getErrorMessage } from \"./utils/errors.js\";\n\nmain().catch((error) => {\n if (error instanceof CommanderError) {\n process.exitCode = error.exitCode;\n return;\n }\n process.stderr.write(`error: ${getErrorMessage(error)}\\n`);\n process.exitCode = 1;\n});\n","import { Command } from \"commander\";\nimport { resolveRunConfig } from \"./config.js\";\nimport { runDoctor } from \"./doctor.js\";\nimport { runExecCommand } from \"./exec.js\";\nimport { packageName, packageVersion } from \"./index.js\";\nimport { createRenderer } from \"./render.js\";\nimport { runOneShot } from \"./runner.js\";\nimport { runWorker } from \"./sandbox/runtime.js\";\nimport { CliError } from \"./utils/errors.js\";\nimport { truncateText } from \"./utils/output.js\";\n\ninterface ExecCliOptions {\n cwd?: string;\n timeout?: string;\n maxOutput?: string;\n ndjson?: boolean;\n}\n\ninterface AgentCliOptions extends ExecCliOptions {\n provider?: string;\n model?: string;\n executor?: string;\n maxSteps?: string;\n color?: boolean;\n}\n\ninterface SandboxCliOptions {\n cwd?: string;\n}\n\ninterface DoctorCliOptions {\n cwd?: string;\n provider?: string;\n model?: string;\n json?: boolean;\n}\n\nfunction addExecOptions(\n command: Command,\n ndjsonDescription = \"emit one JSON result record\",\n): Command {\n return command\n .option(\"--cwd <path>\", \"working directory\")\n .option(\"--timeout <ms>\", \"command timeout in milliseconds\")\n .option(\"--max-output <bytes>\", \"maximum retained output\")\n .option(\"--ndjson\", ndjsonDescription);\n}\n\nfunction addAgentOptions(command: Command): Command {\n return addExecOptions(command, \"emit newline-delimited JSON event records\")\n .option(\"--provider <provider>\", \"model provider\", \"openai\")\n .option(\"--model <model>\", \"model id\")\n .option(\n \"--executor <executor>\",\n \"delegated executor: none, local, or daytona (local is unisolated; daytona requires DAYTONA_API_KEY)\",\n \"none\",\n )\n .option(\"--max-steps <number>\", \"maximum model/tool steps\")\n .option(\"--no-color\", \"disable color output\");\n}\n\nasync function runAgent(promptParts: string[], options: AgentCliOptions): Promise<void> {\n const prompt = promptParts.join(\" \").trim();\n if (!prompt) {\n throw new CliError('A prompt is required. Example: ollie agent \"summarize this repository\"');\n }\n\n const config = await resolveRunConfig(options);\n const renderer = createRenderer({ ndjson: config.ndjson, color: config.color });\n const controller = new AbortController();\n const onSigint = () => controller.abort();\n process.once(\"SIGINT\", onSigint);\n\n try {\n const exitCode = await runOneShot({\n ...config,\n prompt,\n signal: controller.signal,\n onEvent: (event) => renderer.render(event),\n });\n process.exitCode = exitCode;\n } finally {\n process.removeListener(\"SIGINT\", onSigint);\n }\n}\n\nasync function runExec(commandParts: string[], options: ExecCliOptions): Promise<void> {\n const shellCommand = commandParts.join(\" \").trim();\n if (!shellCommand) {\n throw new CliError('A command is required. Example: ollie \"pwd && ls -la\"');\n }\n\n const config = await resolveRunConfig(options);\n const controller = new AbortController();\n let signalExitCode: number | undefined;\n const onSigint = () => {\n signalExitCode = 130;\n controller.abort();\n };\n const onSigterm = () => {\n signalExitCode = 143;\n controller.abort();\n };\n process.once(\"SIGINT\", onSigint);\n process.once(\"SIGTERM\", onSigterm);\n\n try {\n const result = await runExecCommand(\n config.cwd,\n shellCommand,\n {\n timeoutMs: config.commandTimeoutMs,\n env: process.env as Record<string, string>,\n },\n controller.signal,\n );\n const stdout = truncateText(result.stdout, config.maxOutputBytes);\n const stderr = truncateText(result.stderr, config.maxOutputBytes);\n\n if (config.ndjson) {\n process.stdout.write(\n `${JSON.stringify({\n exitCode: result.exitCode,\n stdout: stdout.text,\n stderr: stderr.text,\n durationMs: result.durationMs,\n timedOut: result.timedOut,\n truncated: stdout.truncated || stderr.truncated,\n })}\\n`,\n );\n } else {\n if (stdout.text) {\n process.stdout.write(stdout.text);\n }\n if (stderr.text) {\n process.stderr.write(stderr.text);\n }\n }\n process.exitCode = signalExitCode ?? (result.timedOut ? 124 : result.exitCode);\n } catch (error) {\n if (signalExitCode !== undefined) {\n process.exitCode = signalExitCode;\n return;\n }\n throw error;\n } finally {\n process.removeListener(\"SIGINT\", onSigint);\n process.removeListener(\"SIGTERM\", onSigterm);\n }\n}\n\nasync function runSandbox(options: SandboxCliOptions): Promise<void> {\n const controller = new AbortController();\n let signalExitCode: number | undefined;\n const onSigint = () => {\n signalExitCode = 130;\n controller.abort();\n };\n const onSigterm = () => {\n signalExitCode = 143;\n controller.abort();\n };\n\n process.once(\"SIGINT\", onSigint);\n process.once(\"SIGTERM\", onSigterm);\n try {\n await runWorker({\n cwd: options.cwd,\n signal: controller.signal,\n });\n if (signalExitCode !== undefined) {\n process.exitCode = signalExitCode;\n }\n } finally {\n process.removeListener(\"SIGINT\", onSigint);\n process.removeListener(\"SIGTERM\", onSigterm);\n }\n}\n\nfunction createRootProgram(): Command {\n const program = new Command();\n program\n .name(\"ollie\")\n .description(`${packageName}: sandboxed command runner and optional model agent`)\n .version(packageVersion)\n .enablePositionalOptions()\n .passThroughOptions()\n .exitOverride();\n\n addExecOptions(program.argument(\"[command...]\", \"command to execute in a fresh sandbox\")).action(\n async (commandParts: string[], options: ExecCliOptions) => {\n await runExec(commandParts, options);\n },\n );\n return program;\n}\n\nexport function createProgram(): Command {\n const program = createRootProgram();\n\n const agent = addAgentOptions(\n program\n .command(\"agent\")\n .description(\"run a one-shot model agent task\")\n .argument(\"[prompt...]\", \"task prompt\")\n .enablePositionalOptions()\n .passThroughOptions(),\n );\n agent.action(async (prompt: string[], options: AgentCliOptions) => {\n await runAgent(prompt, options);\n });\n\n program\n .command(\"sandbox\")\n .description(\"run the persistent sandbox NDJSON command interface\")\n .option(\"--cwd <path>\", \"working directory\")\n .action(async (options: SandboxCliOptions) => {\n await runSandbox(options);\n });\n\n program\n .command(\"doctor\")\n .description(\"validate the local Ollie setup without making model calls\")\n .option(\"--cwd <path>\", \"working directory\")\n .option(\"--provider <provider>\", \"model provider\", \"openai\")\n .option(\"--model <model>\", \"model id\")\n .option(\"--json\", \"emit JSON report\")\n .action(async (options: DoctorCliOptions) => {\n const config = await resolveRunConfig(options);\n process.exitCode = await runDoctor(config);\n });\n\n return program;\n}\n\nconst RESERVED_SUBCOMMANDS = new Set([\"agent\", \"sandbox\", \"doctor\"]);\nconst ROOT_OPTIONS_WITH_VALUES = new Set([\"--cwd\", \"--timeout\", \"--max-output\"]);\n\nfunction rootBoundaryPrecedesCommand(args: string[]): boolean {\n for (let index = 0; index < args.length; index += 1) {\n const token = args[index] ?? \"\";\n if (token === \"--\") {\n return true;\n }\n if (RESERVED_SUBCOMMANDS.has(token)) {\n return false;\n }\n if (ROOT_OPTIONS_WITH_VALUES.has(token)) {\n index += 1;\n continue;\n }\n if ([...ROOT_OPTIONS_WITH_VALUES].some((option) => token.startsWith(`${option}=`))) {\n continue;\n }\n if (token === \"--ndjson\") {\n continue;\n }\n return false;\n }\n return false;\n}\n\nexport async function main(argv = process.argv): Promise<void> {\n const args = argv.slice(2);\n const program = rootBoundaryPrecedesCommand(args) ? createRootProgram() : createProgram();\n if (args.length === 0) {\n program.outputHelp();\n throw new CliError('A command is required. Example: ollie \"pwd && ls -la\"');\n }\n await program.parseAsync(argv);\n}\n","import { access, stat } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport { CliError } from \"./utils/errors.js\";\n\nexport const DEFAULT_PROVIDER = \"openai\";\nexport const DEFAULT_MODEL = \"gpt-5.6\";\nexport const DEFAULT_MAX_STEPS = 20;\nexport const DEFAULT_COMMAND_TIMEOUT_MS = 30_000;\nexport const DEFAULT_MAX_OUTPUT_BYTES = 65_536;\nexport const DEFAULT_EXECUTOR = \"none\";\n\nexport type ExecutorKind = \"none\" | \"local\" | \"daytona\";\n\nexport interface ConfigInput {\n cwd?: string;\n provider?: string;\n model?: string;\n executor?: string;\n maxSteps?: string | number;\n timeout?: string | number;\n maxOutput?: string | number;\n ndjson?: boolean;\n json?: boolean;\n color?: boolean;\n}\n\nexport interface RunConfig {\n cwd: string;\n provider: string;\n model: string;\n executor: ExecutorKind;\n maxSteps: number;\n commandTimeoutMs: number;\n maxOutputBytes: number;\n ndjson: boolean;\n json: boolean;\n color: boolean;\n}\n\nfunction parseNumber(name: string, value: string | number | undefined, fallback: number): number {\n if (value === undefined || value === \"\") {\n return fallback;\n }\n\n const parsed = typeof value === \"number\" ? value : Number.parseInt(value, 10);\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new CliError(`${name} must be a non-negative integer`);\n }\n\n return Math.floor(parsed);\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n\nfunction parseExecutor(value: string | undefined): ExecutorKind {\n const executor = value ?? DEFAULT_EXECUTOR;\n if (executor !== \"none\" && executor !== \"local\" && executor !== \"daytona\") {\n throw new CliError(`Unsupported executor: ${executor}. Expected one of: none, local, daytona`);\n }\n return executor;\n}\n\nexport async function resolveRunConfig(\n input: ConfigInput = {},\n env = process.env,\n): Promise<RunConfig> {\n const cwd = resolve(input.cwd ?? env.OLLIE_CWD ?? process.cwd());\n const stats = await stat(cwd).catch(() => null);\n if (!stats?.isDirectory()) {\n throw new CliError(`Working directory does not exist or is not a directory: ${cwd}`);\n }\n await access(cwd);\n\n const executor = parseExecutor(input.executor ?? env.OLLIE_EXECUTOR);\n\n return {\n cwd,\n provider: input.provider ?? env.OLLIE_PROVIDER ?? DEFAULT_PROVIDER,\n model: input.model ?? env.OLLIE_MODEL ?? DEFAULT_MODEL,\n executor,\n maxSteps: clamp(\n parseNumber(\"max steps\", input.maxSteps ?? env.OLLIE_MAX_STEPS, DEFAULT_MAX_STEPS),\n 1,\n 100,\n ),\n commandTimeoutMs: clamp(\n parseNumber(\n \"command timeout\",\n input.timeout ?? env.OLLIE_COMMAND_TIMEOUT_MS,\n DEFAULT_COMMAND_TIMEOUT_MS,\n ),\n 1,\n 300_000,\n ),\n maxOutputBytes: clamp(\n parseNumber(\n \"max output\",\n input.maxOutput ?? env.OLLIE_MAX_OUTPUT_BYTES,\n DEFAULT_MAX_OUTPUT_BYTES,\n ),\n 1,\n 2_000_000,\n ),\n ndjson: input.ndjson ?? false,\n json: input.json ?? false,\n color: input.color ?? !env.NO_COLOR,\n };\n}\n","export class CliError extends Error {\n constructor(\n message: string,\n readonly exitCode = 1,\n ) {\n super(message);\n this.name = \"CliError\";\n }\n}\n\nexport function getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n\n return String(error);\n}\n","import { access, stat } from \"node:fs/promises\";\nimport { packageName, packageVersion } from \"./index.js\";\nimport { isJustBashAvailable } from \"./sandbox/index.js\";\n\nexport interface DoctorOptions {\n cwd: string;\n provider: string;\n model: string;\n json: boolean;\n}\n\nexport async function runDoctor(options: DoctorOptions): Promise<number> {\n const nodeVersion = process.versions.node;\n const nodeMajor = Number.parseInt(nodeVersion.split(\".\")[0] ?? \"0\", 10);\n const cwdStats = await stat(options.cwd).catch(() => null);\n const cwdAccessible = cwdStats?.isDirectory()\n ? await access(options.cwd).then(\n () => true,\n () => false,\n )\n : false;\n const justBashAvailable = await isJustBashAvailable();\n const providerConfigured =\n options.provider === \"openai\" ? Boolean(process.env.OPENAI_API_KEY) : false;\n\n const report = {\n packageName,\n packageVersion,\n nodeVersion,\n nodeOk: nodeMajor >= 22,\n cwd: options.cwd,\n cwdAccessible,\n provider: options.provider,\n model: options.model,\n providerConfigured,\n justBashAvailable,\n };\n\n if (options.json) {\n process.stdout.write(`${JSON.stringify(report)}\\n`);\n } else {\n process.stdout.write(`${packageName} ${packageVersion}\\n`);\n process.stdout.write(`node: ${nodeVersion} ${report.nodeOk ? \"ok\" : \"requires >=22\"}\\n`);\n process.stdout.write(`workspace: ${options.cwd} ${cwdAccessible ? \"ok\" : \"not accessible\"}\\n`);\n process.stdout.write(\n `provider: ${options.provider} / ${options.model} ${providerConfigured ? \"configured\" : \"missing credentials\"}\\n`,\n );\n process.stdout.write(`just-bash: ${justBashAvailable ? \"ok\" : \"unavailable\"}\\n`);\n }\n\n return report.nodeOk && cwdAccessible && justBashAvailable ? 0 : 1;\n}\n","import { realpathSync, statSync } from \"node:fs\";\nimport { Bash, InMemoryFs, MountableFs, ReadWriteFs } from \"just-bash\";\nimport { createGitCommand } from \"./git/index.js\";\nimport type { CreateJustBashOptions } from \"./git/types.js\";\n\nexport const SANDBOX_WORKSPACE_PATH = \"/workspace\";\n\nfunction canonicalizeWorkspaceRoot(workspaceRoot: string): string {\n const canonicalRoot = realpathSync(workspaceRoot);\n if (!statSync(canonicalRoot).isDirectory()) {\n throw new Error(\"The sandbox workspace root must be a directory\");\n }\n return canonicalRoot;\n}\n\nfunction createWorkspaceFs(workspaceRoot: string) {\n const root = canonicalizeWorkspaceRoot(workspaceRoot);\n return new MountableFs({\n base: new InMemoryFs(),\n mounts: [\n {\n mountPoint: SANDBOX_WORKSPACE_PATH,\n filesystem: new ReadWriteFs({ root, allowSymlinks: false }),\n },\n ],\n });\n}\n\nexport function createJustBash(workspaceRoot: string, options: CreateJustBashOptions = {}): Bash {\n return new Bash({\n fs: createWorkspaceFs(workspaceRoot),\n cwd: SANDBOX_WORKSPACE_PATH,\n env: {\n HOME: \"/home/user\",\n TERM: \"xterm-256color\",\n },\n python: true,\n javascript: true,\n customCommands: options.git === false ? [] : [createGitCommand(options.git)],\n network: {\n dangerouslyAllowFullInternetAccess: true,\n maxResponseSize: 100 * 1024 * 1024,\n },\n });\n}\n\nexport async function isJustBashAvailable(): Promise<boolean> {\n try {\n const bash = new Bash();\n await bash.exec(\"echo ok\");\n return true;\n } catch {\n return false;\n }\n}\n","import { posix } from \"node:path\";\nimport { createTwoFilesPatch } from \"diff\";\nimport * as git from \"isomorphic-git\";\nimport { type CommandContext, defineCommand, type ExecResult } from \"just-bash\";\nimport { createGitFs } from \"./fs-adapter.js\";\nimport { createGitHttp, validateRemoteUrl } from \"./http-adapter.js\";\nimport type { GitCommandOptions, GitHandlerContext } from \"./types.js\";\n\nconst WORKSPACE = \"/workspace\";\nconst VERSION = \"ollie-git/0.1 (isomorphic-git)\";\nconst COMMANDS = [\n \"init\",\n \"clone\",\n \"status\",\n \"add\",\n \"commit\",\n \"log\",\n \"diff\",\n \"branch\",\n \"checkout\",\n \"remote\",\n \"config\",\n \"fetch\",\n \"pull\",\n \"push\",\n];\n\nclass UsageError extends Error {}\n\nfunction ok(stdout = \"\"): ExecResult {\n return { stdout, stderr: \"\", exitCode: 0 };\n}\n\nfunction usage(message?: string): never {\n throw new UsageError(message ?? \"unsupported arguments\");\n}\n\nfunction assertNotAborted(ctx: CommandContext): void {\n if (ctx.signal?.aborted) throw new Error(\"operation aborted\");\n}\n\nfunction virtualPath(ctx: CommandContext, input = \".\"): string {\n if (input.includes(\"\\0\") || input.includes(\"\\\\\")) throw new Error(\"invalid path\");\n const resolved = ctx.fs.resolvePath(ctx.cwd, input);\n if (resolved !== WORKSPACE && !resolved.startsWith(`${WORKSPACE}/`)) {\n throw new Error(\"path is outside /workspace\");\n }\n return resolved;\n}\n\nasync function repositoryDir(ctx: CommandContext): Promise<string> {\n let current = virtualPath(ctx);\n while (current === WORKSPACE || current.startsWith(`${WORKSPACE}/`)) {\n if (await ctx.fs.exists(posix.join(current, \".git\"))) return current;\n if (current === WORKSPACE) break;\n current = posix.dirname(current);\n }\n throw new Error(\"not a git repository (or any parent up to /workspace)\");\n}\n\nfunction optionValue(args: string[], names: string[]): { value?: string; rest: string[] } {\n let value: string | undefined;\n const rest: string[] = [];\n for (let index = 0; index < args.length; index++) {\n const arg = args[index];\n if (arg && names.includes(arg)) {\n const next = args[++index];\n if (!next) usage(`${arg} requires a value`);\n value = next;\n } else if (arg && names.some((name) => arg.startsWith(`${name}=`))) {\n value = arg.slice(arg.indexOf(\"=\") + 1);\n } else if (arg) rest.push(arg);\n }\n return { value, rest };\n}\n\nfunction flag(args: string[], names: string[]): { enabled: boolean; rest: string[] } {\n let enabled = false;\n const rest = args.filter((arg) => {\n if (names.includes(arg)) {\n enabled = true;\n return false;\n }\n return true;\n });\n return { enabled, rest };\n}\n\nfunction rejectOptions(args: string[]): void {\n const unknown = args.find((arg) => arg.startsWith(\"-\"));\n if (unknown) usage(`unsupported option '${unknown}'`);\n}\n\nfunction positiveInteger(value: string | undefined, option: string): number | undefined {\n if (value === undefined) return undefined;\n const parsed = Number(value);\n if (!Number.isSafeInteger(parsed) || parsed <= 0) usage(`${option} requires a positive integer`);\n return parsed;\n}\n\nfunction authFor(context: GitHandlerContext, url?: string) {\n if (!url || !context.options.resolveAuth) return undefined;\n return async () => context.options.resolveAuth?.(url);\n}\n\nasync function remoteUrl(context: GitHandlerContext, dir: string, remote: string): Promise<string> {\n const value = await git.getConfig({ fs: context.fs, dir, path: `remote.${remote}.url` });\n if (!value) throw new Error(`remote '${remote}' has no URL`);\n return validateRemoteUrl(value);\n}\n\nconst GLOBAL_CONFIG_PATH = \"/home/user/.gitconfig\";\n\nasync function readGlobalConfig(ctx: CommandContext): Promise<Map<string, string>> {\n if (!(await ctx.fs.exists(GLOBAL_CONFIG_PATH))) return new Map();\n const values = new Map<string, string>();\n let section = \"\";\n for (const rawLine of (await ctx.fs.readFile(GLOBAL_CONFIG_PATH)).split(\"\\n\")) {\n const line = rawLine.trim();\n const sectionMatch = /^\\[([^\\]]+)\\]$/.exec(line);\n if (sectionMatch?.[1]) {\n section = sectionMatch[1].trim().toLowerCase();\n continue;\n }\n const valueMatch = /^([^=]+)=(.*)$/.exec(line);\n if (section && valueMatch?.[1] !== undefined && valueMatch[2] !== undefined) {\n values.set(`${section}.${valueMatch[1].trim().toLowerCase()}`, valueMatch[2].trim());\n }\n }\n return values;\n}\n\nasync function writeGlobalConfig(ctx: CommandContext, values: Map<string, string>): Promise<void> {\n const sections = new Map<string, Array<[string, string]>>();\n for (const [path, value] of [...values].sort(([left], [right]) => left.localeCompare(right))) {\n const separator = path.indexOf(\".\");\n if (separator < 1) usage(\"config key must contain a section\");\n const section = path.slice(0, separator);\n const name = path.slice(separator + 1);\n const entries = sections.get(section) ?? [];\n entries.push([name, value]);\n sections.set(section, entries);\n }\n const content = [...sections]\n .map(\n ([section, entries]) =>\n `[${section}]\\n${entries.map(([key, value]) => `\\t${key} = ${value}`).join(\"\\n\")}`,\n )\n .join(\"\\n\");\n await ctx.fs.mkdir(posix.dirname(GLOBAL_CONFIG_PATH), { recursive: true });\n await ctx.fs.writeFile(GLOBAL_CONFIG_PATH, content ? `${content}\\n` : \"\");\n}\n\nasync function handleInit(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const branchOpt = optionValue(args, [\"-b\", \"--initial-branch\"]);\n rejectOptions(branchOpt.rest);\n if (branchOpt.rest.length > 1) usage(\"git init accepts at most one directory\");\n const dir = virtualPath(context.command, branchOpt.rest[0]);\n await context.command.fs.mkdir(dir, { recursive: true }).catch(async () => {\n if (!(await context.command.fs.exists(dir)))\n throw new Error(\"cannot create repository directory\");\n });\n await git.init({ fs: context.fs, dir, defaultBranch: branchOpt.value ?? \"main\" });\n return ok(`Initialized empty Git repository in ${posix.join(dir, \".git\")}/\\n`);\n}\n\nasync function handleStatus(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const shortFlag = flag(args, [\"-s\", \"--short\", \"--porcelain\"]);\n rejectOptions(shortFlag.rest);\n if (shortFlag.rest.length) usage();\n const dir = await repositoryDir(context.command);\n const matrix = await git.statusMatrix({ fs: context.fs, dir });\n const lines = matrix\n .filter(([, head, workdir, stage]) => head !== workdir || workdir !== stage)\n .map(([path, head, workdir, stage]) => {\n let x = \" \";\n let y = \" \";\n if (head === 0 && stage !== 0) x = \"A\";\n else if (head !== stage) x = stage === 0 ? \"D\" : \"M\";\n if (workdir !== stage) y = workdir === 0 ? \"D\" : \"M\";\n if (head === 0 && stage === 0 && workdir !== 0) return `?? ${path}`;\n return `${x}${y} ${path}`;\n });\n if (shortFlag.enabled) return ok(lines.length ? `${lines.join(\"\\n\")}\\n` : \"\");\n const branch = (await git.currentBranch({ fs: context.fs, dir })) ?? \"HEAD detached\";\n return ok(\n `On branch ${branch}\\n${lines.length ? `${lines.join(\"\\n\")}\\n` : \"nothing to commit, working tree clean\\n\"}`,\n );\n}\n\nasync function handleAdd(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const separator = args.indexOf(\"--\");\n const optionArgs = separator < 0 ? args : args.slice(0, separator);\n const literalPaths = separator < 0 ? [] : args.slice(separator + 1);\n const allFlag = flag(optionArgs, [\"-A\", \"--all\"]);\n rejectOptions(allFlag.rest);\n const paths = [...allFlag.rest, ...literalPaths];\n if (!allFlag.enabled && paths.length === 0) usage(\"nothing specified\");\n const dir = await repositoryDir(context.command);\n const all = allFlag.enabled || paths.includes(\".\");\n if (all) {\n const matrix = await git.statusMatrix({ fs: context.fs, dir });\n for (const [filepath, , workdir, stage] of matrix) {\n assertNotAborted(context.command);\n if (workdir === stage) continue;\n if (workdir === 0) await git.remove({ fs: context.fs, dir, filepath });\n else await git.add({ fs: context.fs, dir, filepath });\n }\n } else {\n for (const filepath of paths) {\n if (\n filepath.startsWith(\"/\") ||\n filepath.split(\"/\").some((segment) => segment === \"..\" || segment === \".git\")\n )\n throw new Error(\"invalid pathspec\");\n await git.add({ fs: context.fs, dir, filepath });\n }\n }\n return ok();\n}\n\nfunction parseAuthor(value: string): { name: string; email: string } {\n const match = /^(.*?)\\s*<([^<>]+)>$/.exec(value);\n if (!match?.[1] || !match[2]) usage(\"--author must be 'Name <email>'\");\n return { name: match[1].trim(), email: match[2] };\n}\n\nasync function handleCommit(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const messageOpt = optionValue(args, [\"-m\", \"--message\"]);\n const authorOpt = optionValue(messageOpt.rest, [\"--author\"]);\n rejectOptions(authorOpt.rest);\n if (authorOpt.rest.length || !messageOpt.value) usage(\"git commit requires -m <message>\");\n const dir = await repositoryDir(context.command);\n const globalConfig = await readGlobalConfig(context.command);\n const repoName = await git.getConfig({ fs: context.fs, dir, path: \"user.name\" });\n const repoEmail = await git.getConfig({ fs: context.fs, dir, path: \"user.email\" });\n const configuredAuthor =\n repoName && repoEmail\n ? { name: repoName, email: repoEmail }\n : globalConfig.get(\"user.name\") && globalConfig.get(\"user.email\")\n ? {\n name: globalConfig.get(\"user.name\") as string,\n email: globalConfig.get(\"user.email\") as string,\n }\n : context.options.author;\n const author = authorOpt.value ? parseAuthor(authorOpt.value) : configuredAuthor;\n const matrix = await git.statusMatrix({ fs: context.fs, dir });\n if (!matrix.some(([, headStatus, , stageStatus]) => headStatus !== stageStatus)) {\n const message = matrix.some(([, , workdirStatus, stageStatus]) => workdirStatus !== stageStatus)\n ? \"no changes added to commit\"\n : \"nothing to commit, working tree clean\";\n throw new Error(message);\n }\n const oid = await git.commit({ fs: context.fs, dir, message: messageOpt.value, author });\n const branch = (await git.currentBranch({ fs: context.fs, dir })) ?? \"detached HEAD\";\n return ok(`[${branch} ${oid.slice(0, 7)}] ${messageOpt.value.split(\"\\n\")[0]}\\n`);\n}\n\nasync function handleLog(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const countOpt = optionValue(args, [\"-n\", \"--max-count\"]);\n const onelineFlag = flag(countOpt.rest, [\"--oneline\"]);\n rejectOptions(onelineFlag.rest);\n if (onelineFlag.rest.length > 1) usage();\n const depth = countOpt.value ? Number.parseInt(countOpt.value, 10) : 20;\n if (!Number.isFinite(depth) || depth < 1) usage(\"invalid max count\");\n const dir = await repositoryDir(context.command);\n const commits = await git.log({ fs: context.fs, dir, ref: onelineFlag.rest[0] ?? \"HEAD\", depth });\n if (onelineFlag.enabled) {\n return ok(\n commits\n .map((entry) => `${entry.oid.slice(0, 7)} ${entry.commit.message.split(\"\\n\")[0]}`)\n .join(\"\\n\") + (commits.length ? \"\\n\" : \"\"),\n );\n }\n return ok(\n commits\n .map(\n (entry) =>\n `commit ${entry.oid}\\nAuthor: ${entry.commit.author.name} <${entry.commit.author.email}>\\n\\n ${entry.commit.message.trim().replaceAll(\"\\n\", \"\\n \")}\\n`,\n )\n .join(\"\\n\"),\n );\n}\n\nasync function handleDiff(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const cachedFlag = flag(args, [\"--cached\", \"--staged\"]);\n rejectOptions(cachedFlag.rest);\n const dir = await repositoryDir(context.command);\n const selected = cachedFlag.rest.map((path) => path.replace(/^\\.\\//, \"\").replace(/\\/$/, \"\"));\n const decoder = new TextDecoder();\n const patch = (filepath: string, oldBytes: Uint8Array, newBytes: Uint8Array) => {\n if (oldBytes.includes(0) || newBytes.includes(0)) {\n return `Binary files a/${filepath} and b/${filepath} differ\\n`;\n }\n return createTwoFilesPatch(\n `a/${filepath}`,\n `b/${filepath}`,\n decoder.decode(oldBytes),\n decoder.decode(newBytes),\n \"\",\n \"\",\n { context: 3 },\n );\n };\n const matrix = await git.statusMatrix({\n fs: context.fs,\n dir,\n filepaths: selected.length ? selected : undefined,\n });\n const stageOids = new Map<string, string>();\n await git.walk({\n fs: context.fs,\n dir,\n trees: [git.STAGE()],\n map: async (filepath, [entry]) => {\n if (entry && (await entry.type()) !== \"tree\") stageOids.set(filepath, await entry.oid());\n },\n });\n const head = await git.resolveRef({ fs: context.fs, dir, ref: \"HEAD\" }).catch(() => undefined);\n const empty = new Uint8Array();\n const readStage = async (filepath: string) => {\n const oid = stageOids.get(filepath);\n return oid ? (await git.readBlob({ fs: context.fs, dir, oid })).blob : empty;\n };\n const patches: string[] = [];\n for (const [filepath, headStatus, workdirStatus, stageStatus] of matrix) {\n const changed = cachedFlag.enabled ? headStatus !== stageStatus : workdirStatus !== stageStatus;\n if (!changed) continue;\n const oldBytes = cachedFlag.enabled\n ? head && headStatus !== 0\n ? (await git.readBlob({ fs: context.fs, dir, oid: head, filepath })).blob\n : empty\n : await readStage(filepath);\n const newBytes = cachedFlag.enabled\n ? await readStage(filepath)\n : workdirStatus === 0\n ? empty\n : await context.command.fs.readFileBuffer(posix.join(dir, filepath));\n patches.push(patch(filepath, oldBytes, newBytes));\n }\n return ok(patches.join(\"\"));\n}\n\nasync function handleBranch(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const deleteFlag = flag(args, [\"-d\", \"-D\", \"--delete\"]);\n rejectOptions(deleteFlag.rest);\n const dir = await repositoryDir(context.command);\n if (deleteFlag.enabled) {\n if (deleteFlag.rest.length !== 1) usage(\"branch deletion requires one name\");\n await git.deleteBranch({ fs: context.fs, dir, ref: deleteFlag.rest[0] as string });\n return ok(`Deleted branch ${deleteFlag.rest[0]}.\\n`);\n }\n if (deleteFlag.rest.length) {\n if (deleteFlag.rest.length > 2) usage();\n await git.branch({\n fs: context.fs,\n dir,\n ref: deleteFlag.rest[0] as string,\n object: deleteFlag.rest[1],\n });\n return ok();\n }\n const [branches, current] = await Promise.all([\n git.listBranches({ fs: context.fs, dir }),\n git.currentBranch({ fs: context.fs, dir }),\n ]);\n return ok(\n branches.map((name) => `${name === current ? \"*\" : \" \"} ${name}`).join(\"\\n\") +\n (branches.length ? \"\\n\" : \"\"),\n );\n}\n\nasync function readCheckoutBlob(\n context: GitHandlerContext,\n dir: string,\n commitOid: string,\n filepath: string,\n): Promise<Uint8Array> {\n let treeOid = (await git.readCommit({ fs: context.fs, dir, oid: commitOid })).commit.tree;\n const segments = filepath.split(\"/\").filter(Boolean);\n for (let index = 0; index < segments.length; index++) {\n const entries = (await git.readTree({ fs: context.fs, dir, oid: treeOid })).tree;\n const entry = entries.find((candidate) => candidate.path === segments[index]);\n if (!entry) throw new Error(`path '${filepath}' does not exist in the selected ref`);\n if (entry.mode === \"120000\") throw new Error(\"symbolic links are not supported in the sandbox\");\n if (index === segments.length - 1) {\n if (entry.type !== \"blob\") throw new Error(`path '${filepath}' is not a file`);\n return (await git.readBlob({ fs: context.fs, dir, oid: entry.oid })).blob;\n }\n if (entry.type !== \"tree\") throw new Error(`path '${filepath}' is not a file`);\n treeOid = entry.oid;\n }\n throw new Error(\"invalid checkout path\");\n}\n\nasync function handleCheckout(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const separator = args.indexOf(\"--\");\n const commandArgs = separator >= 0 ? args.slice(0, separator) : args;\n const filepaths = separator >= 0 ? args.slice(separator + 1) : [];\n const createOpt = optionValue(commandArgs, [\"-b\"]);\n const forceFlag = flag(createOpt.rest, [\"-f\", \"--force\"]);\n rejectOptions(forceFlag.rest);\n const dir = await repositoryDir(context.command);\n if (filepaths.length) {\n if (createOpt.value || forceFlag.rest.length > 1) usage();\n if (filepaths.some((path) => path.startsWith(\"/\") || path.split(\"/\").includes(\"..\"))) {\n throw new Error(\"invalid checkout path\");\n }\n const ref = forceFlag.rest[0] ?? \"HEAD\";\n const oid = await git.resolveRef({ fs: context.fs, dir, ref });\n for (const filepath of filepaths) {\n const blob = await readCheckoutBlob(context, dir, oid, filepath);\n await context.command.fs.writeFile(posix.join(dir, filepath), blob);\n }\n return ok();\n }\n if (separator >= 0) usage(\"checkout requires at least one path after --\");\n if (createOpt.value) {\n if (forceFlag.rest.length > 1) usage();\n await git.branch({\n fs: context.fs,\n dir,\n ref: createOpt.value,\n object: forceFlag.rest[0],\n checkout: true,\n });\n await git.checkout({ fs: context.fs, dir, ref: createOpt.value, force: forceFlag.enabled });\n return ok(`Switched to a new branch '${createOpt.value}'\\n`);\n }\n if (forceFlag.rest.length !== 1) usage(\"checkout requires one branch or ref\");\n await git.checkout({ fs: context.fs, dir, ref: forceFlag.rest[0], force: forceFlag.enabled });\n return ok(`Switched to '${forceFlag.rest[0]}'\\n`);\n}\n\nasync function handleRemote(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const dir = await repositoryDir(context.command);\n if (!args.length || (args.length === 1 && args[0] === \"-v\")) {\n const remotes = await git.listRemotes({ fs: context.fs, dir });\n const verbose = args[0] === \"-v\";\n return ok(\n remotes\n .map(({ remote, url }) =>\n verbose ? `${remote}\\t${url} (fetch)\\n${remote}\\t${url} (push)` : remote,\n )\n .join(\"\\n\") + (remotes.length ? \"\\n\" : \"\"),\n );\n }\n const [action, name, value, ...rest] = args;\n if (rest.length || !name) usage();\n if (action === \"add\") {\n if (!value) usage(\"remote add requires a URL\");\n validateRemoteUrl(value);\n await git.addRemote({ fs: context.fs, dir, remote: name, url: value });\n return ok();\n }\n if (action === \"remove\" || action === \"rm\") {\n if (value) usage();\n await git.deleteRemote({ fs: context.fs, dir, remote: name });\n return ok();\n }\n if (action === \"get-url\") {\n if (value) usage();\n const url = await remoteUrl(context, dir, name);\n return ok(`${url}\\n`);\n }\n if (action === \"set-url\") {\n if (!value) usage();\n validateRemoteUrl(value);\n await git.setConfig({ fs: context.fs, dir, path: `remote.${name}.url`, value });\n return ok();\n }\n usage();\n}\n\nasync function handleConfig(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const globalFlag = flag(args, [\"--global\"]);\n const unsetFlag = flag(globalFlag.rest, [\"--unset\"]);\n const listFlag = flag(unsetFlag.rest, [\"--list\", \"-l\"]);\n rejectOptions(listFlag.rest);\n const globalValues = globalFlag.enabled ? await readGlobalConfig(context.command) : undefined;\n const dir = globalFlag.enabled ? undefined : await repositoryDir(context.command);\n if (listFlag.enabled) {\n if (listFlag.rest.length) usage();\n if (globalValues) {\n const output = [...globalValues].map(([key, value]) => `${key}=${value}`).join(\"\\n\");\n return ok(output ? `${output}\\n` : \"\");\n }\n const keys = [\"user.name\", \"user.email\", \"core.repositoryformatversion\", \"core.bare\"];\n const values = await Promise.all(\n keys.map(\n async (key) => [key, await git.getConfig({ fs: context.fs, dir, path: key })] as const,\n ),\n );\n const output = values\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => `${key}=${value}`)\n .join(\"\\n\");\n return ok(output ? `${output}\\n` : \"\");\n }\n const [key, value, ...rest] = listFlag.rest;\n if (rest.length || !key) usage();\n if (!key.includes(\".\")) usage(\"config key must contain a section\");\n if (globalValues) {\n if (unsetFlag.enabled) {\n if (value) usage();\n globalValues.delete(key.toLowerCase());\n await writeGlobalConfig(context.command, globalValues);\n return ok();\n }\n if (value === undefined) {\n const found = globalValues.get(key.toLowerCase());\n return found === undefined ? { stdout: \"\", stderr: \"\", exitCode: 1 } : ok(`${found}\\n`);\n }\n globalValues.set(key.toLowerCase(), value);\n await writeGlobalConfig(context.command, globalValues);\n return ok();\n }\n if (unsetFlag.enabled) {\n if (value) usage();\n await git.setConfig({ fs: context.fs, dir, path: key, value: undefined });\n return ok();\n }\n if (value === undefined) {\n const found = await git.getConfig({ fs: context.fs, dir, path: key });\n return found === undefined ? { stdout: \"\", stderr: \"\", exitCode: 1 } : ok(`${found}\\n`);\n }\n await git.setConfig({ fs: context.fs, dir, path: key, value });\n return ok();\n}\n\nasync function handleClone(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const branchOpt = optionValue(args, [\"-b\", \"--branch\"]);\n const depthOpt = optionValue(branchOpt.rest, [\"--depth\"]);\n const singleFlag = flag(depthOpt.rest, [\"--single-branch\"]);\n const noCheckoutFlag = flag(singleFlag.rest, [\"--no-checkout\"]);\n rejectOptions(noCheckoutFlag.rest);\n const [rawUrl, destination, ...rest] = noCheckoutFlag.rest;\n if (!rawUrl || rest.length) usage(\"clone requires a URL and optional directory\");\n const url = validateRemoteUrl(rawUrl);\n const inferred = posix.basename(new URL(url).pathname).replace(/\\.git$/, \"\") || \"repository\";\n const dir = virtualPath(context.command, destination ?? inferred);\n const depth = positiveInteger(depthOpt.value, \"--depth\");\n await git.clone({\n fs: context.fs,\n http: context.http,\n dir,\n url,\n ref: branchOpt.value,\n depth,\n singleBranch: singleFlag.enabled || Boolean(branchOpt.value),\n noCheckout: noCheckoutFlag.enabled,\n onAuth: authFor(context, url),\n });\n return ok(`Cloning into '${destination ?? inferred}'...\\n`);\n}\n\nasync function handleFetch(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const depthOpt = optionValue(args, [\"--depth\"]);\n rejectOptions(depthOpt.rest);\n if (depthOpt.rest.length > 2) usage();\n const dir = await repositoryDir(context.command);\n const remote = depthOpt.rest[0] ?? \"origin\";\n const url = await remoteUrl(context, dir, remote);\n await git.fetch({\n fs: context.fs,\n http: context.http,\n dir,\n remote,\n ref: depthOpt.rest[1],\n depth: positiveInteger(depthOpt.value, \"--depth\"),\n onAuth: authFor(context, url),\n });\n return ok();\n}\n\nasync function handlePull(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const ffFlag = flag(args, [\"--ff-only\"]);\n rejectOptions(ffFlag.rest);\n if (ffFlag.rest.length > 2) usage();\n const dir = await repositoryDir(context.command);\n const remote = ffFlag.rest[0] ?? \"origin\";\n const url = await remoteUrl(context, dir, remote);\n await git.pull({\n fs: context.fs,\n http: context.http,\n dir,\n remote,\n ref: ffFlag.rest[1],\n fastForwardOnly: true,\n // isomorphic-git requires an author even when fastForwardOnly prevents merge commits.\n author: context.options.author ?? { name: \"Ollie Git\", email: \"git@localhost\" },\n onAuth: authFor(context, url),\n });\n return ok(\"Already up to date or fast-forwarded.\\n\");\n}\n\nasync function handlePush(context: GitHandlerContext, args: string[]): Promise<ExecResult> {\n const forceFlag = flag(args, [\"--force\", \"-f\"]);\n const upstreamFlag = flag(forceFlag.rest, [\"--set-upstream\", \"-u\"]);\n rejectOptions(upstreamFlag.rest);\n if (upstreamFlag.rest.length > 2) usage();\n const dir = await repositoryDir(context.command);\n const remote = upstreamFlag.rest[0] ?? \"origin\";\n const ref = upstreamFlag.rest[1] ?? (await git.currentBranch({ fs: context.fs, dir }));\n if (!ref) throw new Error(\"cannot determine branch to push\");\n const url = await remoteUrl(context, dir, remote);\n const result = await git.push({\n fs: context.fs,\n http: context.http,\n dir,\n remote,\n ref,\n force: forceFlag.enabled,\n onAuth: authFor(context, url),\n });\n if (!result.ok) {\n const refError = Object.values(result.refs).find((status) => !status.ok)?.error;\n throw new Error(result.error ?? refError ?? \"remote rejected the push\");\n }\n if (upstreamFlag.enabled) {\n await git.setConfig({ fs: context.fs, dir, path: `branch.${ref}.remote`, value: remote });\n await git.setConfig({\n fs: context.fs,\n dir,\n path: `branch.${ref}.merge`,\n value: `refs/heads/${ref}`,\n });\n }\n return ok(`To ${url}\\n`);\n}\n\nconst handlers: Record<\n string,\n (context: GitHandlerContext, args: string[]) => Promise<ExecResult>\n> = {\n init: handleInit,\n clone: handleClone,\n status: handleStatus,\n add: handleAdd,\n commit: handleCommit,\n log: handleLog,\n diff: handleDiff,\n branch: handleBranch,\n checkout: handleCheckout,\n remote: handleRemote,\n config: handleConfig,\n fetch: handleFetch,\n pull: handlePull,\n push: handlePush,\n};\n\nfunction redact(message: string, secrets: Set<string>): string {\n let result = message\n .replace(/https:\\/\\/[^\\s/@]+@/g, \"https://\")\n .replaceAll(process.cwd(), \"<host>\");\n for (const secret of secrets) {\n if (secret) result = result.replaceAll(secret, \"<redacted>\");\n }\n return result;\n}\n\nexport function createGitCommand(options: GitCommandOptions = {}) {\n return defineCommand(\"git\", async (args, command) => {\n const secrets = new Set<string>();\n const safeOptions: GitCommandOptions = options.resolveAuth\n ? {\n ...options,\n resolveAuth: async (url) => {\n const auth = await options.resolveAuth?.(url);\n if (auth?.username) secrets.add(auth.username);\n if (auth?.password) secrets.add(auth.password);\n return auth;\n },\n }\n : options;\n try {\n if (!args.length || args[0] === \"help\" || args.includes(\"--help\")) {\n return ok(`usage: git <command> [options]\\n\\nSupported commands: ${COMMANDS.join(\", \")}\\n`);\n }\n if (args[0] === \"--version\" || args[0] === \"-v\") return ok(`${VERSION}\\n`);\n const subcommand = args[0];\n const handler = subcommand ? handlers[subcommand] : undefined;\n if (!handler) usage(`'${subcommand ?? \"\"}' is not a supported git command`);\n assertNotAborted(command);\n return await handler(\n {\n command,\n fs: createGitFs(command.fs),\n http: createGitHttp(command),\n options: safeOptions,\n },\n args.slice(1),\n );\n } catch (error) {\n const message = redact(\n error instanceof Error ? error.message : \"unknown Git failure\",\n secrets,\n );\n const exitCode =\n error instanceof UsageError\n ? 129\n : /not a git repository|NotFoundError/.test(message)\n ? 128\n : 1;\n return {\n stdout: \"\",\n stderr: `${error instanceof UsageError ? \"error\" : \"fatal\"}: ${message}\\n`,\n exitCode,\n };\n }\n });\n}\n\nexport type { CreateJustBashOptions, GitAuth, GitCommandOptions } from \"./types.js\";\n","import { posix } from \"node:path\";\nimport type { IFileSystem } from \"just-bash\";\n\nconst ROOT = \"/workspace\";\n\nfunction safePath(path: string): string {\n if (path.includes(\"\\0\") || path.includes(\"\\\\\")) {\n throw Object.assign(new Error(\"Invalid virtual Git path\"), { code: \"EINVAL\" });\n }\n const normalized = posix.resolve(path);\n if (normalized !== ROOT && !normalized.startsWith(`${ROOT}/`)) {\n throw Object.assign(new Error(\"Git path is outside /workspace\"), { code: \"EACCES\" });\n }\n return normalized;\n}\n\nfunction normalizeError(error: unknown): never {\n if (error instanceof Error) {\n const coded = error as Error & { code?: string };\n if (!coded.code) {\n if (/not found|does not exist|enoent/i.test(error.message)) coded.code = \"ENOENT\";\n else if (/exist/i.test(error.message)) coded.code = \"EEXIST\";\n else if (/directory/i.test(error.message)) coded.code = \"ENOTDIR\";\n else coded.code = \"EIO\";\n }\n throw coded;\n }\n throw Object.assign(new Error(\"Virtual filesystem operation failed\"), { code: \"EIO\" });\n}\n\nasync function ensureParent(fs: IFileSystem, path: string): Promise<void> {\n const parent = posix.dirname(path);\n if (!(await fs.exists(parent))) await fs.mkdir(parent, { recursive: true });\n}\n\nfunction statShape(stat: Awaited<ReturnType<IFileSystem[\"stat\"]>>) {\n const typeMode = stat.isDirectory ? 0o040000 : stat.isSymbolicLink ? 0o120000 : 0o100000;\n const mode = typeMode | (stat.mode & 0o7777);\n return {\n isFile: () => stat.isFile,\n isDirectory: () => stat.isDirectory,\n isSymbolicLink: () => stat.isSymbolicLink,\n mode,\n size: stat.size,\n mtime: stat.mtime,\n mtimeMs: stat.mtime.getTime(),\n ctimeMs: stat.mtime.getTime(),\n ino: 0,\n uid: 0,\n gid: 0,\n dev: 0,\n };\n}\n\nexport function createGitFs(fs: IFileSystem) {\n const promises = {\n async readFile(path: string, options?: { encoding?: string } | string) {\n try {\n const virtualPath = safePath(path);\n const encoding = typeof options === \"string\" ? options : options?.encoding;\n return encoding ? fs.readFile(virtualPath, \"utf8\") : fs.readFileBuffer(virtualPath);\n } catch (error) {\n normalizeError(error);\n }\n },\n async writeFile(path: string, data: string | Uint8Array) {\n try {\n const virtualPath = safePath(path);\n await ensureParent(fs, virtualPath);\n await fs.writeFile(virtualPath, data);\n } catch (error) {\n normalizeError(error);\n }\n },\n async unlink(path: string) {\n try {\n await fs.rm(safePath(path));\n } catch (error) {\n normalizeError(error);\n }\n },\n async readdir(path: string) {\n try {\n return await fs.readdir(safePath(path));\n } catch (error) {\n normalizeError(error);\n }\n },\n async mkdir(path: string) {\n try {\n await fs.mkdir(safePath(path), { recursive: true });\n } catch (error) {\n normalizeError(error);\n }\n },\n async rmdir(path: string) {\n try {\n await fs.rm(safePath(path));\n } catch (error) {\n normalizeError(error);\n }\n },\n async rename(from: string, to: string) {\n try {\n await ensureParent(fs, safePath(to));\n await fs.mv(safePath(from), safePath(to));\n } catch (error) {\n normalizeError(error);\n }\n },\n async stat(path: string) {\n try {\n return statShape(await fs.stat(safePath(path)));\n } catch (error) {\n normalizeError(error);\n }\n },\n async lstat(path: string) {\n try {\n return statShape(await fs.lstat(safePath(path)));\n } catch (error) {\n normalizeError(error);\n }\n },\n async readlink(path: string) {\n try {\n return await fs.readlink(safePath(path));\n } catch (error) {\n normalizeError(error);\n }\n },\n async symlink(target: string, path: string) {\n try {\n await fs.symlink(target, safePath(path));\n } catch (error) {\n normalizeError(error);\n }\n },\n async chmod(path: string, mode: number) {\n try {\n await fs.chmod(safePath(path), mode);\n } catch (error) {\n normalizeError(error);\n }\n },\n async utimes(path: string, atime: Date, mtime: Date) {\n try {\n await fs.utimes(safePath(path), atime, mtime);\n } catch (error) {\n normalizeError(error);\n }\n },\n };\n return { promises };\n}\n","import type { GitHttpRequest, HttpClient } from \"isomorphic-git\";\nimport type { CommandContext } from \"just-bash\";\n\nfunction isPrivateLiteralHost(hostname: string): boolean {\n const host = hostname.toLowerCase().replace(/^\\[|\\]$/g, \"\");\n if (host === \"localhost\" || host.endsWith(\".localhost\") || host === \"::1\") return true;\n const octets = host.split(\".\").map(Number);\n if (octets.length !== 4 || octets.some((octet) => !Number.isInteger(octet))) return false;\n return (\n octets[0] === 10 ||\n octets[0] === 127 ||\n (octets[0] === 169 && octets[1] === 254) ||\n (octets[0] === 172 && (octets[1] as number) >= 16 && (octets[1] as number) <= 31) ||\n (octets[0] === 192 && octets[1] === 168)\n );\n}\n\nexport function validateRemoteUrl(value: string): string {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new Error(\"Only absolute HTTPS remote URLs are supported\");\n }\n if (url.protocol !== \"https:\") throw new Error(\"Only HTTPS remote URLs are supported\");\n if (url.username || url.password) throw new Error(\"Remote URLs must not contain credentials\");\n if (url.hash) throw new Error(\"Remote URLs must not contain fragments\");\n if (isPrivateLiteralHost(url.hostname)) {\n throw new Error(\"Remote URLs must not target local or private hosts\");\n }\n return url.toString();\n}\n\nasync function collectBody(\n body?: AsyncIterableIterator<Uint8Array>,\n signal?: AbortSignal,\n): Promise<Uint8Array> {\n if (!body) return new Uint8Array();\n const chunks: Uint8Array[] = [];\n let size = 0;\n for await (const chunk of body) {\n if (signal?.aborted) throw new Error(\"Git operation was aborted\");\n chunks.push(chunk);\n size += chunk.byteLength;\n }\n const result = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return result;\n}\n\nasync function* oneChunk(body: Uint8Array): AsyncIterableIterator<Uint8Array> {\n yield body;\n}\n\nexport function createGitHttp(ctx: CommandContext): HttpClient {\n return {\n async request(request: GitHttpRequest) {\n if (!ctx.fetch) throw new Error(\"Network access is not configured for this sandbox\");\n if (ctx.signal?.aborted) throw new Error(\"Git operation was aborted\");\n const url = validateRemoteUrl(request.url);\n const bytes = await collectBody(request.body, ctx.signal);\n const response = await ctx.fetch(url, {\n method: request.method ?? \"GET\",\n headers: request.headers,\n // SecureFetch forwards BodyInit values unchanged, but its public type is narrower.\n body: bytes.length > 0 ? (bytes as unknown as string) : undefined,\n followRedirects: true,\n });\n if (ctx.signal?.aborted) throw new Error(\"Git operation was aborted\");\n const finalUrl = validateRemoteUrl(response.url);\n return {\n url: finalUrl,\n method: request.method,\n headers: response.headers,\n body: oneChunk(response.body),\n statusCode: response.status,\n statusMessage: response.statusText,\n };\n },\n };\n}\n","export const packageName = \"@getollie/cli\";\nexport const cliName = \"ollie\";\nexport const packageVersion = \"0.2.0\";\n\nexport type { CommandResult, Sandbox } from \"bash-tool\";\nexport type { ExecutorKind } from \"./config.js\";\nexport type {\n DelegatedTaskResult,\n ExecutorContext,\n ExecutorProvider,\n ExecutorSession,\n TaskDelegator,\n WorkspaceSyncResult,\n} from \"./executor/types.js\";\nexport type { CreateJustBashOptions, GitAuth, GitCommandOptions } from \"./sandbox/index.js\";\nexport { createJustBash, isJustBashAvailable, SANDBOX_WORKSPACE_PATH } from \"./sandbox/index.js\";\n","import { createJustBash } from \"./sandbox/index.js\";\n\ntype CreatedJustBash = ReturnType<typeof createJustBash>;\n\nexport interface RunExecCommandOptions {\n timeoutMs: number;\n env?: NonNullable<Parameters<CreatedJustBash[\"exec\"]>[1]>[\"env\"];\n}\n\nexport type RunExecCommandResult = Awaited<ReturnType<CreatedJustBash[\"exec\"]>> & {\n durationMs: number;\n timedOut: boolean;\n};\n\nfunction timeoutSignal(timeoutMs: number): { signal: AbortSignal; cancel: () => void } {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n return {\n signal: controller.signal,\n cancel: () => clearTimeout(timer),\n };\n}\n\nfunction combineSignals(signals: Array<AbortSignal | undefined>): AbortSignal | undefined {\n const active = signals.filter((signal): signal is AbortSignal => Boolean(signal));\n if (active.length === 0) {\n return undefined;\n }\n\n const controller = new AbortController();\n for (const signal of active) {\n if (signal.aborted) {\n controller.abort(signal.reason);\n break;\n }\n signal.addEventListener(\"abort\", () => controller.abort(signal.reason), { once: true });\n }\n return controller.signal;\n}\n\nexport async function runExecCommand(\n cwd: string,\n command: string,\n options: RunExecCommandOptions,\n signal?: AbortSignal,\n): Promise<RunExecCommandResult> {\n const started = Date.now();\n const timeout = timeoutSignal(options.timeoutMs);\n const combinedSignal = combineSignals([signal, timeout.signal]);\n const timedOut = () => timeout.signal.aborted && !signal?.aborted;\n\n try {\n const bash = createJustBash(cwd);\n const result = await bash.exec(command, { env: options.env, signal: combinedSignal });\n return {\n ...result,\n durationMs: Date.now() - started,\n timedOut: timedOut(),\n };\n } catch (error) {\n if (timedOut()) {\n return {\n exitCode: 124,\n stdout: \"\",\n stderr: `Command timed out after ${options.timeoutMs} ms`,\n env: {},\n durationMs: Date.now() - started,\n timedOut: true,\n };\n }\n throw error;\n } finally {\n timeout.cancel();\n }\n}\n","import { Chalk } from \"chalk\";\nimport type { RunnerEvent } from \"./events.js\";\n\nexport interface Renderer {\n render(event: RunnerEvent): void;\n}\n\nexport interface RendererOptions {\n ndjson: boolean;\n color: boolean;\n columns?: number;\n}\n\nconst ELLIPSIS = \"…\";\nconst CENTER_ELLIPSIS = ` ${ELLIPSIS} `;\n\nexport function singleRowJson(value: unknown): string {\n const seen = new WeakSet<object>();\n return (\n JSON.stringify(value, (_key, item: unknown) => {\n if (typeof item === \"bigint\") {\n return item.toString();\n }\n if (item && typeof item === \"object\") {\n if (seen.has(item)) {\n return \"[Circular]\";\n }\n seen.add(item);\n }\n return item;\n }) ?? \"null\"\n );\n}\n\nfunction isCombiningCodePoint(codePoint: number): boolean {\n return (\n (codePoint >= 0x0300 && codePoint <= 0x036f) ||\n (codePoint >= 0x1ab0 && codePoint <= 0x1aff) ||\n (codePoint >= 0x1dc0 && codePoint <= 0x1dff) ||\n (codePoint >= 0x20d0 && codePoint <= 0x20ff) ||\n (codePoint >= 0xfe20 && codePoint <= 0xfe2f)\n );\n}\n\nfunction isFullWidthCodePoint(codePoint: number): boolean {\n return (\n codePoint >= 0x1100 &&\n (codePoint <= 0x115f ||\n codePoint === 0x2329 ||\n codePoint === 0x232a ||\n (codePoint >= 0x2e80 && codePoint <= 0xa4cf && codePoint !== 0x303f) ||\n (codePoint >= 0xac00 && codePoint <= 0xd7a3) ||\n (codePoint >= 0xf900 && codePoint <= 0xfaff) ||\n (codePoint >= 0xfe10 && codePoint <= 0xfe19) ||\n (codePoint >= 0xfe30 && codePoint <= 0xfe6f) ||\n (codePoint >= 0xff00 && codePoint <= 0xff60) ||\n (codePoint >= 0xffe0 && codePoint <= 0xffe6) ||\n (codePoint >= 0x1f300 && codePoint <= 0x1f64f) ||\n (codePoint >= 0x1f900 && codePoint <= 0x1f9ff) ||\n (codePoint >= 0x20000 && codePoint <= 0x3fffd))\n );\n}\n\nexport function displayWidth(text: string): number {\n let width = 0;\n for (const char of text) {\n const codePoint = char.codePointAt(0) ?? 0;\n if (codePoint === 0 || codePoint === 0x200d || isCombiningCodePoint(codePoint)) {\n continue;\n }\n if (codePoint < 0x20 || (codePoint >= 0x7f && codePoint < 0xa0)) {\n continue;\n }\n width += isFullWidthCodePoint(codePoint) ? 2 : 1;\n }\n return width;\n}\n\nfunction sliceStartByColumns(text: string, maxColumns: number): string {\n let width = 0;\n let result = \"\";\n for (const char of text) {\n const charWidth = displayWidth(char);\n if (width + charWidth > maxColumns) {\n break;\n }\n result += char;\n width += charWidth;\n }\n return result;\n}\n\nfunction sliceEndByColumns(text: string, maxColumns: number): string {\n let width = 0;\n let result = \"\";\n const chars = Array.from(text);\n for (let index = chars.length - 1; index >= 0; index -= 1) {\n const char = chars[index] ?? \"\";\n const charWidth = displayWidth(char);\n if (width + charWidth > maxColumns) {\n break;\n }\n result = `${char}${result}`;\n width += charWidth;\n }\n return result;\n}\n\ninterface EllipsizedText {\n head: string;\n marker: string;\n tail: string;\n}\n\nfunction ellipsizeToColumnParts(text: string, maxColumns: number | undefined): EllipsizedText {\n if (maxColumns === undefined || displayWidth(text) <= maxColumns) {\n return { head: text, marker: \"\", tail: \"\" };\n }\n if (maxColumns <= 0) {\n return { head: \"\", marker: \"\", tail: \"\" };\n }\n if (maxColumns === 1) {\n return { head: \"\", marker: ELLIPSIS, tail: \"\" };\n }\n\n const marker = maxColumns >= displayWidth(CENTER_ELLIPSIS) ? CENTER_ELLIPSIS : ELLIPSIS;\n const targetWidth = maxColumns - displayWidth(marker);\n const head = sliceStartByColumns(text, Math.ceil(targetWidth / 2));\n const tail = sliceEndByColumns(text, targetWidth - displayWidth(head));\n return { head, marker, tail };\n}\n\nexport function ellipsizeToColumns(text: string, maxColumns: number | undefined): string {\n const { head, marker, tail } = ellipsizeToColumnParts(text, maxColumns);\n return `${head}${marker}${tail}`;\n}\n\nfunction getStderrColumns(): number | undefined {\n return process.stderr.columns && process.stderr.columns > 0 ? process.stderr.columns : undefined;\n}\n\nfunction resolveToolRowColumns(columns: number | undefined): number {\n return Math.min(columns ?? 120, 120);\n}\n\nfunction formatToolRow(options: {\n symbol: string;\n toolName: string;\n value: unknown;\n columns: number;\n}): EllipsizedText {\n const prefix = `${options.symbol} ${options.toolName} `;\n const maxPayloadColumns = Math.max(1, options.columns - displayWidth(prefix));\n return ellipsizeToColumnParts(singleRowJson(options.value), maxPayloadColumns);\n}\n\nfunction colorToolRow(c: InstanceType<typeof Chalk>, row: EllipsizedText): string {\n return `${c.dim(row.head)}${c.yellow(row.marker)}${c.dim(row.tail)}`;\n}\n\nfunction toolSymbol(arrow: \"→\" | \"←\", source?: \"delegate\"): string {\n return source === \"delegate\" ? ` ↳ ${arrow}` : arrow;\n}\n\nexport function createRenderer(options: RendererOptions): Renderer {\n if (options.ndjson) {\n return {\n render(event) {\n process.stdout.write(`${singleRowJson(event)}\\n`);\n },\n };\n }\n\n const c = new Chalk({ level: options.color ? 1 : 0 });\n const columns = resolveToolRowColumns(options.columns ?? getStderrColumns());\n return {\n render(event) {\n switch (event.type) {\n case \"text\":\n process.stdout.write(event.text);\n break;\n case \"tool-call\": {\n const symbol = toolSymbol(\"→\", event.source);\n process.stderr.write(\n `${c.dim(symbol)} ${c.cyan(event.toolName)} ${colorToolRow(\n c,\n formatToolRow({\n symbol,\n toolName: event.toolName,\n value: event.input,\n columns,\n }),\n )}\\n`,\n );\n break;\n }\n case \"tool-result\": {\n const symbol = toolSymbol(\"←\", event.source);\n process.stderr.write(\n `${c.dim(symbol)} ${c.green(event.toolName)} ${colorToolRow(\n c,\n formatToolRow({\n symbol,\n toolName: event.toolName,\n value: event.output,\n columns,\n }),\n )}\\n`,\n );\n break;\n }\n case \"error\":\n process.stderr.write(`${c.red(\"error:\")} ${event.message}\\n`);\n break;\n case \"done\":\n process.stderr.write(c.dim(\"\\n[done]\\n\"));\n break;\n }\n },\n };\n}\n","import { stepCountIs, streamText } from \"ai\";\nimport type { RunConfig } from \"./config.js\";\nimport type { EventSink } from \"./events.js\";\nimport { ExecutorController } from \"./executor/controller.js\";\nimport { DaytonaExecutorProvider } from \"./executor/daytona.js\";\nimport { ModelTaskDelegator } from \"./executor/delegator.js\";\nimport { LocalExecutorProvider } from \"./executor/local.js\";\nimport { createExecutorTools } from \"./executor/tools.js\";\nimport type { ExecutorProvider } from \"./executor/types.js\";\nimport { buildSystemPrompt } from \"./prompt.js\";\nimport { createLanguageModel } from \"./provider.js\";\nimport { createTools } from \"./tools.js\";\nimport { getErrorMessage } from \"./utils/errors.js\";\n\nexport interface RunOneShotOptions extends RunConfig {\n prompt: string;\n signal?: AbortSignal;\n onEvent: EventSink;\n}\n\nfunction createExecutorProvider(options: RunOneShotOptions): ExecutorProvider | undefined {\n switch (options.executor) {\n case \"none\":\n return undefined;\n case \"local\":\n return new LocalExecutorProvider({\n cwd: options.cwd,\n commandTimeoutMs: options.commandTimeoutMs,\n });\n case \"daytona\":\n return new DaytonaExecutorProvider({\n cwd: options.cwd,\n commandTimeoutMs: options.commandTimeoutMs,\n snapshot: process.env.OLLIE_DAYTONA_SNAPSHOT,\n });\n }\n}\n\nexport async function runOneShot(options: RunOneShotOptions): Promise<number> {\n let executorController: ExecutorController | undefined;\n try {\n const model = createLanguageModel({\n provider: options.provider,\n model: options.model,\n });\n const workspaceTools = await createTools({\n cwd: options.cwd,\n maxOutputBytes: options.maxOutputBytes,\n });\n\n const executorProvider = createExecutorProvider(options);\n if (executorProvider) {\n executorController = new ExecutorController(\n executorProvider,\n new ModelTaskDelegator({\n model,\n maxSteps: options.maxSteps,\n maxOutputBytes: options.maxOutputBytes,\n commandTimeoutMs: options.commandTimeoutMs,\n onEvent: options.onEvent,\n }),\n );\n }\n const tools = {\n ...workspaceTools,\n ...(executorController ? createExecutorTools(executorController) : {}),\n };\n\n const result = streamText({\n model,\n tools,\n instructions: buildSystemPrompt({\n now: new Date(),\n maxSteps: options.maxSteps,\n commandTimeoutMs: options.commandTimeoutMs,\n executorInstructions: executorProvider?.systemPrompt,\n }),\n prompt: options.prompt,\n stopWhen: stepCountIs(options.maxSteps),\n abortSignal: options.signal,\n maxRetries: 1,\n });\n\n for await (const part of result.stream) {\n switch (part.type) {\n case \"text-delta\":\n await options.onEvent({ type: \"text\", text: part.text });\n break;\n case \"tool-call\":\n await options.onEvent({ type: \"tool-call\", toolName: part.toolName, input: part.input });\n break;\n case \"tool-result\":\n await options.onEvent({\n type: \"tool-result\",\n toolName: part.toolName,\n output: part.output,\n });\n break;\n case \"tool-error\":\n await options.onEvent({\n type: \"error\",\n message: `${part.toolName}: ${getErrorMessage(part.error)}`,\n });\n break;\n case \"error\":\n await options.onEvent({ type: \"error\", message: getErrorMessage(part.error) });\n break;\n case \"finish\":\n await options.onEvent({ type: \"done\", usage: part.totalUsage });\n break;\n }\n }\n\n return 0;\n } catch (error) {\n if (options.signal?.aborted) {\n await options.onEvent({ type: \"error\", message: \"aborted\" });\n return 130;\n }\n await options.onEvent({ type: \"error\", message: getErrorMessage(error) });\n return 1;\n } finally {\n await executorController?.dispose();\n }\n}\n","import type {\n DelegatedTaskResult,\n ExecutorProvider,\n ExecutorSession,\n TaskDelegator,\n} from \"./types.js\";\n\nexport class ExecutorController {\n #session?: ExecutorSession;\n #creatingSession?: Promise<ExecutorSession>;\n #running = false;\n #disposed = false;\n\n constructor(\n private readonly provider: ExecutorProvider,\n private readonly delegator: TaskDelegator,\n ) {}\n\n async delegateTask(task: string, signal?: AbortSignal): Promise<DelegatedTaskResult> {\n if (this.#disposed) throw new Error(\"Executor controller has been disposed\");\n if (this.#running) throw new Error(\"Executor delegation is already in progress\");\n signal?.throwIfAborted();\n\n this.#running = true;\n let session: ExecutorSession | undefined;\n let result: DelegatedTaskResult | undefined;\n let taskError: unknown;\n try {\n session = await this.#getSession(signal);\n await session.resume(signal);\n result = await this.delegator.runTask({ session, task, signal });\n } catch (error) {\n taskError = error;\n }\n\n let pauseError: unknown;\n try {\n await session?.pause(signal?.aborted ? undefined : signal);\n } catch (error) {\n pauseError = error;\n } finally {\n this.#running = false;\n }\n\n if (taskError !== undefined) throw taskError;\n if (pauseError !== undefined) throw pauseError;\n if (!result) throw new Error(\"Delegated task completed without a result\");\n return result;\n }\n\n async dispose(): Promise<void> {\n if (this.#disposed) return;\n this.#disposed = true;\n\n const session = this.#session ?? (await this.#creatingSession?.catch(() => undefined));\n await session?.dispose();\n }\n\n async #getSession(signal?: AbortSignal): Promise<ExecutorSession> {\n if (this.#session) return this.#session;\n if (!this.#creatingSession) {\n this.#creatingSession = this.provider.createSession({ signal }).then((session) => {\n this.#session = session;\n return session;\n });\n }\n return this.#creatingSession;\n }\n}\n","import { randomUUID } from \"node:crypto\";\nimport { mkdir, readdir, readFile, rm, stat, writeFile } from \"node:fs/promises\";\nimport { dirname, isAbsolute, relative, resolve, sep } from \"node:path\";\nimport {\n Daytona,\n DaytonaProcessExecutionTimeoutError,\n type Sandbox as DaytonaSdkSandbox,\n} from \"@daytona/sdk\";\nimport type { CommandResult, Sandbox } from \"bash-tool\";\nimport type { ExecutorProvider, ExecutorSession, WorkspaceSyncResult } from \"./types.js\";\n\nconst DEFAULT_REMOTE_WORKSPACE = \"/workspace\";\nconst DEFAULT_TTL_MINUTES = 10;\n\ninterface DaytonaCommandResponse {\n exitCode: number;\n result: string;\n}\n\nexport interface DaytonaSandboxApi {\n process: {\n executeCommand(\n command: string,\n cwd?: string,\n env?: Record<string, string>,\n timeout?: number,\n ): Promise<DaytonaCommandResponse>;\n };\n fs: {\n downloadFile(remotePath: string, timeout?: number): Promise<Buffer>;\n uploadFile(file: string | Buffer, remotePath: string, timeout?: number): Promise<void>;\n deleteFile(path: string, recursive?: boolean): Promise<void>;\n };\n getWorkDir(): Promise<string | undefined>;\n start(timeout?: number): Promise<void>;\n stop(timeout?: number, force?: boolean): Promise<void>;\n delete(timeout?: number, wait?: boolean): Promise<void>;\n}\n\nexport interface DaytonaClientApi {\n create(\n params?: {\n snapshot?: string;\n autoStopInterval?: number;\n autoDeleteInterval?: number;\n ttlMinutes?: number;\n labels?: Record<string, string>;\n },\n options?: { timeout?: number },\n ): Promise<DaytonaSandboxApi>;\n}\n\nexport interface DaytonaExecutorOptions {\n cwd: string;\n commandTimeoutMs: number;\n snapshot?: string;\n remoteWorkspacePath?: string;\n ttlMinutes?: number;\n client?: DaytonaClientApi;\n}\n\nfunction timeoutSeconds(timeoutMs: number): number {\n return Math.max(1, Math.ceil(timeoutMs / 1_000));\n}\n\nfunction abortable<T>(promise: Promise<T>, signal?: AbortSignal): Promise<T> {\n signal?.throwIfAborted();\n if (!signal) return promise;\n return new Promise<T>((resolvePromise, reject) => {\n const onAbort = () => reject(signal.reason ?? new Error(\"Daytona operation aborted\"));\n signal.addEventListener(\"abort\", onAbort, { once: true });\n promise.then(\n (value) => {\n signal.removeEventListener(\"abort\", onAbort);\n resolvePromise(value);\n },\n (error) => {\n signal.removeEventListener(\"abort\", onAbort);\n reject(error);\n },\n );\n });\n}\n\nfunction shellQuote(value: string): string {\n return `'${value.replaceAll(\"'\", `'\"'\"'`)}'`;\n}\n\nasync function listLocalFiles(root: string): Promise<Map<string, number>> {\n const files = new Map<string, number>();\n async function visit(directory: string): Promise<void> {\n for (const entry of await readdir(directory, { withFileTypes: true })) {\n const absolutePath = resolve(directory, entry.name);\n if (entry.isDirectory()) {\n await visit(absolutePath);\n } else if (entry.isFile()) {\n const path = relative(root, absolutePath).split(sep).join(\"/\");\n files.set(path, (await stat(absolutePath)).size);\n }\n }\n }\n await visit(root);\n return files;\n}\n\nexport class DaytonaSandbox implements Sandbox {\n readonly #sandbox: DaytonaSandboxApi;\n readonly #workspacePath: string;\n readonly #commandTimeoutMs: number;\n readonly #signal?: AbortSignal;\n #disposed = false;\n\n constructor(\n sandbox: DaytonaSandboxApi,\n options: { workspacePath: string; commandTimeoutMs: number; signal?: AbortSignal },\n ) {\n this.#sandbox = sandbox;\n this.#workspacePath = options.workspacePath;\n this.#commandTimeoutMs = options.commandTimeoutMs;\n this.#signal = options.signal;\n }\n\n async executeCommand(command: string): Promise<CommandResult> {\n this.#assertActive();\n this.#signal?.throwIfAborted();\n const marker = `__OLLIE_STDERR_${randomUUID()}__`;\n const stderrPath = `/tmp/ollie-stderr-${randomUUID()}`;\n const wrapped = `( ${command}\\n) 2>${shellQuote(stderrPath)}; ollie_code=$?; printf '\\n${marker}\\n'; base64 < ${shellQuote(stderrPath)}; rm -f ${shellQuote(stderrPath)}; exit $ollie_code`;\n\n try {\n const response = await abortable(\n this.#sandbox.process.executeCommand(\n wrapped,\n this.#workspacePath,\n undefined,\n timeoutSeconds(this.#commandTimeoutMs),\n ),\n this.#signal,\n );\n const separator = `\\n${marker}\\n`;\n const markerIndex = response.result.lastIndexOf(separator);\n if (markerIndex < 0) {\n return { exitCode: response.exitCode, stdout: response.result, stderr: \"\" };\n }\n const encodedStderr = response.result.slice(markerIndex + separator.length).trim();\n return {\n exitCode: response.exitCode,\n stdout: response.result.slice(0, markerIndex),\n stderr: encodedStderr ? Buffer.from(encodedStderr, \"base64\").toString(\"utf8\") : \"\",\n };\n } catch (error) {\n if (error instanceof DaytonaProcessExecutionTimeoutError) {\n return {\n exitCode: 124,\n stdout: \"\",\n stderr: `Command timed out after ${this.#commandTimeoutMs} ms`,\n };\n }\n throw error;\n }\n }\n\n async readFile(path: string): Promise<string> {\n this.#assertActive();\n const content = await this.#sandbox.fs.downloadFile(this.#resolvePath(path));\n return content.toString(\"utf8\");\n }\n\n async writeFiles(files: Array<{ path: string; content: string | Buffer }>): Promise<void> {\n this.#assertActive();\n for (const file of files) {\n const target = this.#resolvePath(file.path);\n await this.#sandbox.process.executeCommand(`mkdir -p ${shellQuote(dirname(target))}`);\n await this.#sandbox.fs.uploadFile(Buffer.from(file.content), target);\n }\n }\n\n dispose(): void {\n this.#disposed = true;\n }\n\n #resolvePath(path: string): string {\n const target = isAbsolute(path) ? resolve(path) : resolve(this.#workspacePath, path);\n if (target !== this.#workspacePath && !target.startsWith(`${this.#workspacePath}/`)) {\n throw new Error(`Path is outside the Daytona workspace: ${path}`);\n }\n return target;\n }\n\n #assertActive(): void {\n if (this.#disposed) throw new Error(\"Daytona executor session has been disposed\");\n }\n}\n\nclass DaytonaWorkspaceSynchronizer {\n readonly #cwd: string;\n readonly #remoteWorkspacePath: string;\n readonly #sandbox: DaytonaSandboxApi;\n #knownFiles = new Set<string>();\n\n constructor(cwd: string, remoteWorkspacePath: string, sandbox: DaytonaSandboxApi) {\n this.#cwd = resolve(cwd);\n this.#remoteWorkspacePath = remoteWorkspacePath;\n this.#sandbox = sandbox;\n }\n\n async syncToExecutor(signal?: AbortSignal): Promise<WorkspaceSyncResult> {\n signal?.throwIfAborted();\n const prepareResult = await abortable(\n this.#sandbox.process.executeCommand(`mkdir -p ${shellQuote(this.#remoteWorkspacePath)}`),\n signal,\n );\n if (prepareResult.exitCode !== 0) {\n throw new Error(\n `Failed to create Daytona workspace ${this.#remoteWorkspacePath}: ${prepareResult.result}`,\n );\n }\n const localFiles = await listLocalFiles(this.#cwd);\n let filesCreated = 0;\n let filesUpdated = 0;\n let filesDeleted = 0;\n let bytesTransferred = 0;\n\n for (const path of this.#knownFiles) {\n if (localFiles.has(path)) continue;\n await abortable(\n this.#sandbox.fs.deleteFile(this.#remotePath(path)).catch(() => undefined),\n signal,\n );\n filesDeleted++;\n }\n for (const [path, size] of localFiles) {\n signal?.throwIfAborted();\n await abortable(\n this.#sandbox.fs.uploadFile(resolve(this.#cwd, path), this.#remotePath(path)),\n signal,\n );\n if (this.#knownFiles.has(path)) filesUpdated++;\n else filesCreated++;\n bytesTransferred += size;\n }\n this.#knownFiles = new Set(localFiles.keys());\n return this.#result(filesCreated, filesUpdated, filesDeleted, bytesTransferred);\n }\n\n async syncToLocal(signal?: AbortSignal): Promise<WorkspaceSyncResult> {\n signal?.throwIfAborted();\n const response = await abortable(\n this.#sandbox.process.executeCommand(\n \"find . -type f -print0 | base64 -w0\",\n this.#remoteWorkspacePath,\n ),\n signal,\n );\n if (response.exitCode !== 0) {\n throw new Error(`Failed to enumerate Daytona workspace files: ${response.result}`);\n }\n const decoded = response.result.trim()\n ? Buffer.from(response.result.trim(), \"base64\").toString(\"utf8\")\n : \"\";\n const remoteFiles = new Set(\n decoded\n .split(\"\\0\")\n .filter(Boolean)\n .map((path) => (path.startsWith(\"./\") ? path.slice(2) : path)),\n );\n let filesCreated = 0;\n let filesUpdated = 0;\n let filesDeleted = 0;\n let bytesTransferred = 0;\n\n for (const path of this.#knownFiles) {\n if (remoteFiles.has(path)) continue;\n await rm(resolve(this.#cwd, path), { force: true });\n filesDeleted++;\n }\n for (const path of remoteFiles) {\n signal?.throwIfAborted();\n const localPath = this.#localPath(path);\n const existed = await stat(localPath).then(\n () => true,\n () => false,\n );\n const content = await abortable(\n this.#sandbox.fs.downloadFile(this.#remotePath(path)),\n signal,\n );\n await mkdir(dirname(localPath), { recursive: true });\n const previous = existed ? await readFile(localPath) : undefined;\n if (!previous?.equals(content)) {\n await writeFile(localPath, content);\n if (existed) filesUpdated++;\n else filesCreated++;\n bytesTransferred += content.byteLength;\n }\n }\n this.#knownFiles = remoteFiles;\n return this.#result(filesCreated, filesUpdated, filesDeleted, bytesTransferred);\n }\n\n #remotePath(path: string): string {\n return `${this.#remoteWorkspacePath}/${path}`;\n }\n\n #localPath(path: string): string {\n const target = resolve(this.#cwd, path);\n if (target !== this.#cwd && !target.startsWith(`${this.#cwd}${sep}`)) {\n throw new Error(`Daytona returned a path outside the workspace: ${path}`);\n }\n return target;\n }\n\n #result(\n filesCreated: number,\n filesUpdated: number,\n filesDeleted: number,\n bytesTransferred: number,\n ): WorkspaceSyncResult {\n return {\n status:\n filesCreated || filesUpdated || filesDeleted || bytesTransferred\n ? \"synchronized\"\n : \"no-changes\",\n filesCreated,\n filesUpdated,\n filesDeleted,\n bytesTransferred,\n };\n }\n}\n\nexport class DaytonaExecutorSession implements ExecutorSession {\n readonly sandbox: DaytonaSandbox;\n readonly context;\n readonly #remote: DaytonaSandboxApi;\n readonly #synchronizer: DaytonaWorkspaceSynchronizer;\n #stopped = false;\n #disposed = false;\n\n constructor(remote: DaytonaSandboxApi, options: DaytonaExecutorOptions, signal?: AbortSignal) {\n const workspacePath = options.remoteWorkspacePath ?? DEFAULT_REMOTE_WORKSPACE;\n this.#remote = remote;\n this.#synchronizer = new DaytonaWorkspaceSynchronizer(options.cwd, workspacePath, remote);\n this.sandbox = new DaytonaSandbox(remote, {\n workspacePath,\n commandTimeoutMs: options.commandTimeoutMs,\n signal,\n });\n this.context = {\n kind: \"daytona\" as const,\n workspacePath,\n isolated: true,\n networkAccess: \"full\" as const,\n };\n }\n\n async resume(signal?: AbortSignal): Promise<void> {\n this.#assertActive();\n signal?.throwIfAborted();\n if (this.#stopped) {\n await abortable(this.#remote.start(), signal);\n this.#stopped = false;\n }\n await this.syncWorkspace({ destination: \"executor\", signal });\n }\n\n async pause(signal?: AbortSignal): Promise<void> {\n this.#assertActive();\n signal?.throwIfAborted();\n await this.syncWorkspace({ destination: \"local\", signal });\n await abortable(this.#remote.stop(), signal);\n this.#stopped = true;\n }\n\n async syncWorkspace(options: {\n destination: \"executor\" | \"local\";\n signal?: AbortSignal;\n }): Promise<WorkspaceSyncResult> {\n this.#assertActive();\n return options.destination === \"executor\"\n ? this.#synchronizer.syncToExecutor(options.signal)\n : this.#synchronizer.syncToLocal(options.signal);\n }\n\n async dispose(): Promise<void> {\n if (this.#disposed) return;\n this.#disposed = true;\n this.sandbox.dispose();\n await this.#remote.delete(60, true);\n }\n\n #assertActive(): void {\n if (this.#disposed) throw new Error(\"Daytona executor session has been disposed\");\n }\n}\n\nexport class DaytonaExecutorProvider implements ExecutorProvider {\n readonly systemPrompt = `Executor-backed delegation:\n- The delegateTask tool starts a fresh delegated agent with native workspace tools in an isolated Daytona sandbox.\n- Use delegateTask when the task requires unavailable executables, package managers, full system tooling, or native test/build commands.\n- The delegated agent cannot delegate further. Its trajectory and exact final summary are returned to you.\n- The Daytona workspace uses a provider-selected writable path that differs from your /workspace path. In delegated task descriptions, say \"the workspace root\" and do not hardcode /workspace; the child receives its actual workspace path.\n- One remote executor session is reused for this run. Workspace changes are synchronized back before delegateTask returns and are then visible through your workspace tools.\n- Remote startup and workspace transfer have overhead, so delegate bounded, substantial work rather than individual commands.\n- Do not claim delegated work succeeded unless the returned trajectory or summary confirms it.`;\n\n readonly #options: DaytonaExecutorOptions;\n readonly #client?: DaytonaClientApi;\n\n constructor(options: DaytonaExecutorOptions) {\n this.#options = options;\n this.#client = options.client;\n }\n\n async createSession({ signal }: { signal?: AbortSignal }): Promise<ExecutorSession> {\n signal?.throwIfAborted();\n const client = this.#client ?? (new Daytona() as unknown as DaytonaClientApi);\n const remote = await abortable(\n client.create(\n {\n ...(this.#options.snapshot ? { snapshot: this.#options.snapshot } : {}),\n autoStopInterval: 0,\n autoDeleteInterval: 3,\n ttlMinutes: this.#options.ttlMinutes ?? DEFAULT_TTL_MINUTES,\n labels: { managedBy: \"ollie\" },\n },\n { timeout: 120 },\n ),\n signal,\n );\n try {\n const workDir = await abortable(remote.getWorkDir(), signal);\n if (!workDir) throw new Error(\"Daytona did not report a writable working directory\");\n const remoteWorkspacePath =\n this.#options.remoteWorkspacePath ?? `${workDir.replace(/\\/+$/, \"\")}/ollie-workspace`;\n return new DaytonaExecutorSession(remote, { ...this.#options, remoteWorkspacePath }, signal);\n } catch (error) {\n await remote.delete(60, true).catch(() => undefined);\n throw error;\n }\n }\n}\n\n// Keep the concrete SDK type checked when its public Sandbox contract changes.\nconst _daytonaSandboxTypeCheck: DaytonaSandboxApi | undefined = undefined as\n | DaytonaSdkSandbox\n | undefined;\nvoid _daytonaSandboxTypeCheck;\n","import { generateText, type LanguageModel, type ModelMessage, stepCountIs } from \"ai\";\nimport type { EventSink } from \"../events.js\";\nimport { buildDelegatedSystemPrompt } from \"../prompt.js\";\nimport { createWorkspaceTools } from \"../tools.js\";\nimport type { DelegatedTaskResult, ExecutorSession, TaskDelegator } from \"./types.js\";\n\nexport interface ModelTaskDelegatorOptions {\n model: LanguageModel;\n maxSteps: number;\n maxOutputBytes: number;\n commandTimeoutMs: number;\n onEvent?: EventSink;\n now?: () => Date;\n}\n\nexport class ModelTaskDelegator implements TaskDelegator {\n constructor(private readonly options: ModelTaskDelegatorOptions) {}\n\n async runTask({\n session,\n task,\n signal,\n }: {\n session: ExecutorSession;\n task: string;\n signal?: AbortSignal;\n }): Promise<DelegatedTaskResult> {\n const instructions = buildDelegatedSystemPrompt({\n now: this.options.now?.() ?? new Date(),\n maxSteps: this.options.maxSteps,\n commandTimeoutMs: this.options.commandTimeoutMs,\n context: session.context,\n });\n const tools = await createWorkspaceTools({\n sandbox: session.sandbox,\n destination: session.context.workspacePath,\n maxOutputBytes: this.options.maxOutputBytes,\n extraInstructions:\n \"Use the native workspace tools to complete the delegated task. Start at the workspace root, use relative paths, keep changes focused, and verify the result before reporting it.\",\n });\n const result = await generateText({\n model: this.options.model,\n instructions,\n prompt: task,\n tools,\n stopWhen: stepCountIs(this.options.maxSteps),\n abortSignal: signal,\n maxRetries: 1,\n onStepFinish: async (step) => {\n for (const toolCall of step.toolCalls) {\n await this.options.onEvent?.({\n type: \"tool-call\",\n toolName: toolCall.toolName,\n input: toolCall.input,\n source: \"delegate\",\n });\n }\n for (const toolResult of step.toolResults) {\n await this.options.onEvent?.({\n type: \"tool-result\",\n toolName: toolResult.toolName,\n output: toolResult.output,\n source: \"delegate\",\n });\n }\n },\n });\n\n const finalTextParts = result.finalStep.content.filter(\n (part): part is Extract<typeof part, { type: \"text\" }> => part.type === \"text\",\n );\n const summary = finalTextParts.at(-1)?.text;\n if (summary === undefined) {\n throw new Error(\"Delegated agent did not return a final text summary\");\n }\n\n const trajectory: ModelMessage[] = [\n { role: \"system\", content: instructions },\n { role: \"user\", content: task },\n ...result.responseMessages,\n ];\n return { trajectory, summary };\n }\n}\n","import type { ExecutorContext } from \"./executor/types.js\";\nimport { SANDBOX_WORKSPACE_PATH } from \"./sandbox/index.js\";\n\nexport interface PromptOptions {\n now: Date;\n maxSteps: number;\n commandTimeoutMs: number;\n executorInstructions?: string;\n}\n\nexport function buildSystemPrompt(options: PromptOptions): string {\n const executorSection = options.executorInstructions ? `\\n\\n${options.executorInstructions}` : \"\";\n\n return `You are Terminus, a concise one-shot CLI evaluation agent inspired by Harbor Terminus-2.\n\nTerminus-2 spirit:\n- Prefer terminal-centric operation through the bash tool.\n- Treat bash as the primary terminal environment: inspect files, list directories, search text, run tests, and gather state by issuing shell commands.\n- Operate autonomously and finish the user's task in this single run.\n- Do not ask for interactive confirmation or user input during execution.\n- Prefer concrete terminal inspection over speculation. Verify facts through shell output before claiming them.\n- Keep actions minimal, bounded, and relevant to the task.\n- Explain failures clearly and recover where practical.\n- Do not claim a command, file observation, test result, or search result succeeded unless shell output confirms it.\n- Summarize final findings and important command results clearly.\n\nRuntime context:\n- Working directory: ${SANDBOX_WORKSPACE_PATH}\n- Current time: ${options.now.toISOString()}\n- Maximum model/tool steps: ${options.maxSteps}\n- Per-command timeout: ${options.commandTimeoutMs} ms\n\nEnvironment capabilities and limitations:\n- This is a restricted Bash environment. Only the provided built-in commands and Ollie's Git command can run.\n- Arbitrary executables and package managers such as node, npm, pnpm, npx, bun, deno, and system Python are unavailable; downloading a binary does not make it executable.\n- Use python/python3 (CPython compiled to WebAssembly) or js-exec (QuickJS) for supported scripting. They are not full Python or Node.js environments and cannot install or import arbitrary packages.\n- Common built-ins include find, rg, grep, sed, awk, jq, yq, curl, diff, tar, and sqlite3. Run help or <command> --help when uncertain; do not repeatedly probe unavailable commands.\n- Shell state is isolated per bash tool call: cd, exported variables, aliases, and functions do not carry into the next call. Combine dependent shell-state operations in one call, or pass explicit paths.\n- There is no process/job control or background execution. Shell arithmetic is limited to signed 32-bit integers, and loops, recursion, command counts, runtime, and output are bounded.\n- The environment defaults to UTC. Symbolic links are disabled.\n- Full HTTP(S) network access is enabled through curl and compatible commands. Network requests can have permanent external side effects.${executorSection}\n\nTool policy:\n- There is no approval flow. Tool calls execute automatically.\n- Git supports a practical subset of commands. Hooks, submodules, signing, SSH remotes, editors, pagers, and advanced options are unavailable.\n- A successful git push or other mutating network request changes the remote permanently and is allowed only when explicitly requested by the user.\n- Avoid destructive actions unless the user's task explicitly requires them.`;\n}\n\nexport interface DelegatedPromptOptions {\n now: Date;\n maxSteps: number;\n commandTimeoutMs: number;\n context: ExecutorContext;\n}\n\nexport function buildDelegatedSystemPrompt(options: DelegatedPromptOptions): string {\n const executionBoundary = options.context.isolated\n ? \"Commands run natively inside an isolated remote environment.\"\n : \"Commands run natively with the current user's permissions and are not isolated.\";\n return `You are Ollie's delegated execution agent. Complete one bounded task using native workspace tools.\n\nRuntime context:\n- Workspace root: ${options.context.workspacePath}\n- Current time: ${options.now.toISOString()}\n- Maximum model/tool steps: ${options.maxSteps}\n- Per-command timeout: ${options.commandTimeoutMs} ms\n- ${executionBoundary}\n\nOperating rules:\n- Start at the workspace root and use relative paths for workspace files.\n- Inspect the relevant state before making changes.\n- Keep changes minimal and directly related to the delegated task.\n- Run appropriate native checks or tests and report their actual results.\n- Do not delegate work and do not attempt to synchronize the workspace; neither capability is available.\n- Avoid destructive or permanent external actions unless the delegated task explicitly requires them.\n- Finish with a concise text summary describing what you did, what changed, and how you verified it. This final text block is returned verbatim to the parent agent.`;\n}\n","import type { ToolSet } from \"ai\";\nimport { type CreateBashToolOptions, createBashTool } from \"bash-tool\";\nimport { createJustBash, SANDBOX_WORKSPACE_PATH } from \"./sandbox/index.js\";\n\nexport interface CreateWorkspaceToolsOptions {\n sandbox: NonNullable<CreateBashToolOptions[\"sandbox\"]>;\n destination: string;\n maxOutputBytes: number;\n extraInstructions: string;\n}\n\nexport async function createWorkspaceTools(options: CreateWorkspaceToolsOptions): Promise<ToolSet> {\n const toolkit = await createBashTool({\n sandbox: options.sandbox,\n destination: options.destination,\n maxOutputLength: options.maxOutputBytes,\n extraInstructions: options.extraInstructions,\n });\n return toolkit.tools;\n}\n\nexport interface CreateToolsOptions {\n cwd: string;\n maxOutputBytes: number;\n}\n\nexport async function createTools(options: CreateToolsOptions): Promise<ToolSet> {\n return createWorkspaceTools({\n sandbox: createJustBash(options.cwd),\n destination: SANDBOX_WORKSPACE_PATH,\n maxOutputBytes: options.maxOutputBytes,\n extraInstructions:\n \"Use bash commands to inspect files, search, run tests, and gather terminal state. Sandbox-native git is available; local Git changes persist in the workspace, and git push has permanent remote effects, so destructive actions and pushes must only be used when explicitly requested. Keep commands bounded.\",\n });\n}\n","import { type ChildProcess, spawn } from \"node:child_process\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, isAbsolute, resolve } from \"node:path\";\nimport type { CommandResult, Sandbox } from \"bash-tool\";\nimport type { ExecutorProvider, ExecutorSession } from \"./types.js\";\n\nexport interface LocalExecutorOptions {\n cwd: string;\n commandTimeoutMs: number;\n env?: NodeJS.ProcessEnv;\n}\n\nexport class LocalSandbox implements Sandbox {\n readonly #cwd: string;\n readonly #commandTimeoutMs: number;\n readonly #env: NodeJS.ProcessEnv;\n readonly #signal?: AbortSignal;\n readonly #processes = new Set<ChildProcess>();\n #disposed = false;\n\n constructor(options: LocalExecutorOptions, signal?: AbortSignal) {\n this.#cwd = resolve(options.cwd);\n this.#commandTimeoutMs = options.commandTimeoutMs;\n this.#env = options.env ?? process.env;\n this.#signal = signal;\n }\n\n async executeCommand(command: string): Promise<CommandResult> {\n this.#assertActive();\n this.#signal?.throwIfAborted();\n\n return new Promise<CommandResult>((resolveResult, reject) => {\n const child = spawn(\"/bin/sh\", [\"-lc\", command], {\n cwd: this.#cwd,\n env: this.#env,\n detached: true,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n this.#processes.add(child);\n\n let stdout = \"\";\n let stderr = \"\";\n let timedOut = false;\n let abortReason: unknown;\n let forceTimer: NodeJS.Timeout | undefined;\n let settled = false;\n\n const finish = (callback: () => void) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n if (forceTimer) clearTimeout(forceTimer);\n this.#signal?.removeEventListener(\"abort\", onAbort);\n this.#processes.delete(child);\n callback();\n };\n const terminate = (signal: NodeJS.Signals) => {\n if (!child.pid) return;\n try {\n process.kill(-child.pid, signal);\n } catch {\n child.kill(signal);\n }\n };\n const beginTermination = () => {\n terminate(\"SIGTERM\");\n forceTimer = setTimeout(() => terminate(\"SIGKILL\"), 100);\n forceTimer.unref();\n };\n const onAbort = () => {\n abortReason = this.#signal?.reason ?? new Error(\"Executor command aborted\");\n beginTermination();\n };\n const timer = setTimeout(() => {\n timedOut = true;\n beginTermination();\n }, this.#commandTimeoutMs);\n\n child.stdout?.setEncoding(\"utf8\");\n child.stderr?.setEncoding(\"utf8\");\n child.stdout?.on(\"data\", (chunk: string) => {\n stdout += chunk;\n });\n child.stderr?.on(\"data\", (chunk: string) => {\n stderr += chunk;\n });\n child.once(\"error\", (error) => finish(() => reject(error)));\n child.once(\"close\", (code, signal) => {\n finish(() => {\n if (abortReason !== undefined) {\n reject(abortReason);\n return;\n }\n if (timedOut) {\n resolveResult({\n exitCode: 124,\n stdout,\n stderr: `${stderr}${stderr ? \"\\n\" : \"\"}Command timed out after ${this.#commandTimeoutMs} ms`,\n });\n return;\n }\n resolveResult({\n exitCode: code ?? (signal ? 128 : 1),\n stdout,\n stderr,\n });\n });\n });\n this.#signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n }\n\n async readFile(path: string): Promise<string> {\n this.#assertActive();\n return readFile(this.#resolvePath(path), \"utf8\");\n }\n\n async writeFiles(files: Array<{ path: string; content: string | Buffer }>): Promise<void> {\n this.#assertActive();\n await Promise.all(\n files.map(async ({ path, content }) => {\n const target = this.#resolvePath(path);\n await mkdir(dirname(target), { recursive: true });\n await writeFile(target, content);\n }),\n );\n }\n\n dispose(): void {\n if (this.#disposed) return;\n this.#disposed = true;\n for (const child of this.#processes) {\n if (!child.pid) continue;\n try {\n process.kill(-child.pid, \"SIGTERM\");\n } catch {\n child.kill(\"SIGTERM\");\n }\n }\n this.#processes.clear();\n }\n\n #resolvePath(path: string): string {\n return isAbsolute(path) ? path : resolve(this.#cwd, path);\n }\n\n #assertActive(): void {\n if (this.#disposed) throw new Error(\"Local executor session has been disposed\");\n }\n}\n\nexport class LocalExecutorSession implements ExecutorSession {\n readonly sandbox: LocalSandbox;\n readonly context;\n #disposed = false;\n\n constructor(options: LocalExecutorOptions, signal?: AbortSignal) {\n const workspacePath = resolve(options.cwd);\n this.sandbox = new LocalSandbox(options, signal);\n this.context = {\n kind: \"local\" as const,\n workspacePath,\n isolated: false,\n networkAccess: \"full\" as const,\n };\n }\n\n async resume(signal?: AbortSignal): Promise<void> {\n this.#assertActive();\n signal?.throwIfAborted();\n }\n\n async pause(signal?: AbortSignal): Promise<void> {\n this.#assertActive();\n signal?.throwIfAborted();\n }\n\n async dispose(): Promise<void> {\n if (this.#disposed) return;\n this.#disposed = true;\n this.sandbox.dispose();\n }\n\n #assertActive(): void {\n if (this.#disposed) throw new Error(\"Local executor session has been disposed\");\n }\n}\n\nexport class LocalExecutorProvider implements ExecutorProvider {\n readonly systemPrompt = `Executor-backed delegation:\n- The delegateTask tool starts a fresh delegated agent with native workspace tools at the current local workspace root.\n- Use delegateTask when the task requires unavailable executables, package managers, full system tooling, or native test/build commands.\n- Native execution runs with the current user's permissions and is not isolated. Delegate only bounded, task-relevant work.\n- The delegated agent cannot delegate further. Its trajectory and exact final summary are returned to you.\n- One executor session is reused for this run. Because the local executor shares the workspace, its file changes are immediately visible through your workspace tools.\n- Do not claim delegated work succeeded unless the returned trajectory or summary confirms it.`;\n\n constructor(private readonly options: LocalExecutorOptions) {}\n\n async createSession({ signal }: { signal?: AbortSignal }): Promise<ExecutorSession> {\n signal?.throwIfAborted();\n return new LocalExecutorSession(this.options, signal);\n }\n}\n","import { jsonSchema, type ToolSet, tool } from \"ai\";\nimport type { ExecutorController } from \"./controller.js\";\n\nexport function createExecutorTools(controller: ExecutorController): ToolSet {\n return {\n delegateTask: tool({\n description:\n \"Delegate one bounded task to a fresh agent with native workspace tools in the configured execution environment.\",\n inputSchema: jsonSchema<{ task: string }>({\n type: \"object\",\n additionalProperties: false,\n required: [\"task\"],\n properties: {\n task: {\n type: \"string\",\n minLength: 1,\n description: \"A complete, self-contained description of the task to perform\",\n },\n },\n }),\n execute: async ({ task }, { abortSignal }) => {\n const trimmedTask = task.trim();\n if (!trimmedTask) throw new Error(\"Delegated task must not be empty\");\n return controller.delegateTask(trimmedTask, abortSignal);\n },\n }),\n };\n}\n","import { createOpenAI } from \"@ai-sdk/openai\";\nimport type { LanguageModel } from \"ai\";\nimport { CliError } from \"./utils/errors.js\";\n\nexport interface ProviderOptions {\n provider: string;\n model: string;\n env?: NodeJS.ProcessEnv;\n}\n\nexport function createLanguageModel({\n provider,\n model,\n env = process.env,\n}: ProviderOptions): LanguageModel {\n if (provider !== \"openai\") {\n throw new CliError(\n `Unsupported provider: ${provider}. The reference implementation currently supports openai.`,\n );\n }\n\n if (!env.OPENAI_API_KEY) {\n throw new CliError(\"OPENAI_API_KEY is required when using the openai provider.\");\n }\n\n const openai = createOpenAI({ apiKey: env.OPENAI_API_KEY });\n return openai.chat(model);\n}\n","import { once } from \"node:events\";\nimport { posix } from \"node:path\";\nimport { createInterface } from \"node:readline\";\nimport type { Readable, Writable } from \"node:stream\";\nimport type { Bash } from \"just-bash\";\nimport { createJustBash } from \"./just-bash.js\";\n\nexport interface RunWorkerOptions {\n cwd?: string;\n input?: Readable;\n output?: Writable;\n signal?: AbortSignal;\n}\n\ntype RequestId = string | number;\n\ntype WorkerResponse =\n | { id: RequestId | null; result: unknown }\n | { id: RequestId | null; error: { message: string } };\n\ninterface ParsedRequest {\n id: RequestId;\n method: \"exec\" | \"readFile\" | \"writeFile\";\n params: Record<string, unknown>;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseRequest(line: string): ParsedRequest {\n let value: unknown;\n try {\n value = JSON.parse(line);\n } catch {\n throw new Error(\"Invalid JSON request\");\n }\n\n if (!isRecord(value)) {\n throw new Error(\"Request must be a JSON object\");\n }\n if (typeof value.id !== \"string\" && typeof value.id !== \"number\") {\n throw new Error(\"Request id must be a string or number\");\n }\n if (value.method !== \"exec\" && value.method !== \"readFile\" && value.method !== \"writeFile\") {\n throw new Error(\"Unknown worker method\");\n }\n if (!isRecord(value.params)) {\n throw new Error(\"Request params must be a JSON object\");\n }\n\n return {\n id: value.id,\n method: value.method,\n params: value.params,\n };\n}\n\nfunction requireString(params: Record<string, unknown>, name: string): string {\n const value = params[name];\n if (typeof value !== \"string\") {\n throw new Error(`Parameter ${name} must be a string`);\n }\n return value;\n}\n\nfunction validateVirtualPath(path: string): string {\n if (\n !posix.isAbsolute(path) ||\n path.includes(\"\\\\\") ||\n path.includes(\"\\0\") ||\n posix.normalize(path) !== path ||\n path.split(\"/\").some((component) => component === \".\" || component === \"..\")\n ) {\n throw new Error(\"Path must be a normalized absolute virtual path\");\n }\n return path;\n}\n\nfunction requestIdFromLine(line: string): RequestId | null {\n try {\n const value: unknown = JSON.parse(line);\n if (isRecord(value) && (typeof value.id === \"string\" || typeof value.id === \"number\")) {\n return value.id;\n }\n } catch {\n // The parse error is returned by parseRequest.\n }\n return null;\n}\n\nfunction safeErrorMessage(error: unknown, workspaceRoot: string): string {\n const message = error instanceof Error ? error.message : \"Worker operation failed\";\n return message.split(workspaceRoot).join(\"<workspace>\");\n}\n\nexport async function handleWorkerLine(\n bash: Bash,\n line: string,\n workspaceRoot: string,\n): Promise<WorkerResponse> {\n const fallbackId = requestIdFromLine(line);\n try {\n const request = parseRequest(line);\n\n switch (request.method) {\n case \"exec\": {\n const command = requireString(request.params, \"command\");\n const result = await bash.exec(command);\n return {\n id: request.id,\n result: {\n stdout: result.stdout,\n stderr: result.stderr,\n exitCode: result.exitCode,\n },\n };\n }\n case \"readFile\": {\n const path = validateVirtualPath(requireString(request.params, \"path\"));\n return { id: request.id, result: await bash.fs.readFile(path) };\n }\n case \"writeFile\": {\n const path = validateVirtualPath(requireString(request.params, \"path\"));\n const content = requireString(request.params, \"content\");\n await bash.fs.writeFile(path, content);\n return { id: request.id, result: null };\n }\n }\n } catch (error) {\n return { id: fallbackId, error: { message: safeErrorMessage(error, workspaceRoot) } };\n }\n}\n\nasync function writeResponse(output: Writable, response: WorkerResponse): Promise<void> {\n if (!output.write(`${JSON.stringify(response)}\\n`)) {\n await once(output, \"drain\");\n }\n}\n\nexport async function runWorker(options: RunWorkerOptions = {}): Promise<void> {\n const workspaceRoot = options.cwd ?? process.cwd();\n const input = options.input ?? process.stdin;\n const output = options.output ?? process.stdout;\n const bash = createJustBash(workspaceRoot);\n const lines = createInterface({ input, crlfDelay: Number.POSITIVE_INFINITY });\n const close = () => lines.close();\n if (options.signal?.aborted) {\n close();\n } else {\n options.signal?.addEventListener(\"abort\", close, { once: true });\n }\n\n try {\n for await (const line of lines) {\n await writeResponse(output, await handleWorkerLine(bash, line, workspaceRoot));\n }\n } finally {\n options.signal?.removeEventListener(\"abort\", close);\n lines.close();\n }\n}\n","export interface TruncatedText {\n text: string;\n truncated: boolean;\n}\n\nconst encoder = new TextEncoder();\n\nexport function truncateText(input: string, maxBytes: number): TruncatedText {\n if (maxBytes <= 0) {\n return {\n text: \"\\n[truncated: output limit is 0 bytes]\",\n truncated: input.length > 0,\n };\n }\n\n if (encoder.encode(input).byteLength <= maxBytes) {\n return { text: input, truncated: false };\n }\n\n let bytes = 0;\n let end = 0;\n for (const char of input) {\n const size = encoder.encode(char).byteLength;\n if (bytes + size > maxBytes) {\n break;\n }\n bytes += size;\n end += char.length;\n }\n\n return {\n text: `${input.slice(0, end)}\\n[truncated: output exceeded ${maxBytes} bytes]`,\n truncated: true,\n };\n}\n\nexport function redactKnownSecrets(input: string, env: NodeJS.ProcessEnv = process.env): string {\n let output = input;\n for (const [key, value] of Object.entries(env)) {\n if (!value || value.length < 8) {\n continue;\n }\n if (/TOKEN|SECRET|KEY|PASSWORD|CREDENTIAL/i.test(key)) {\n output = output.split(value).join(`[redacted:${key}]`);\n }\n }\n return output;\n}\n"],"mappings":";;;AAAA,SAAS,sBAAsB;;;ACA/B,SAAS,eAAe;;;ACAxB,SAAS,QAAQ,YAAY;AAC7B,SAAS,eAAe;;;ACDjB,IAAM,WAAN,cAAuB,MAAM;AAAA,EAClC,YACE,SACS,WAAW,GACpB;AACA,UAAM,OAAO;AAFJ;AAGT,SAAK,OAAO;AAAA,EACd;AAAA,EAJW;AAKb;AAEO,SAAS,gBAAgB,OAAwB;AACtD,MAAI,iBAAiB,OAAO;AAC1B,WAAO,MAAM;AAAA,EACf;AAEA,SAAO,OAAO,KAAK;AACrB;;;ADZO,IAAM,mBAAmB;AACzB,IAAM,gBAAgB;AACtB,IAAM,oBAAoB;AAC1B,IAAM,6BAA6B;AACnC,IAAM,2BAA2B;AACjC,IAAM,mBAAmB;AA8BhC,SAAS,YAAY,MAAc,OAAoC,UAA0B;AAC/F,MAAI,UAAU,UAAa,UAAU,IAAI;AACvC,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,OAAO,UAAU,WAAW,QAAQ,OAAO,SAAS,OAAO,EAAE;AAC5E,MAAI,CAAC,OAAO,SAAS,MAAM,KAAK,SAAS,GAAG;AAC1C,UAAM,IAAI,SAAS,GAAG,IAAI,iCAAiC;AAAA,EAC7D;AAEA,SAAO,KAAK,MAAM,MAAM;AAC1B;AAEA,SAAS,MAAM,OAAe,KAAa,KAAqB;AAC9D,SAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC3C;AAEA,SAAS,cAAc,OAAyC;AAC9D,QAAM,WAAW,SAAS;AAC1B,MAAI,aAAa,UAAU,aAAa,WAAW,aAAa,WAAW;AACzE,UAAM,IAAI,SAAS,yBAAyB,QAAQ,yCAAyC;AAAA,EAC/F;AACA,SAAO;AACT;AAEA,eAAsB,iBACpB,QAAqB,CAAC,GACtB,MAAM,QAAQ,KACM;AACpB,QAAM,MAAM,QAAQ,MAAM,OAAO,IAAI,aAAa,QAAQ,IAAI,CAAC;AAC/D,QAAM,QAAQ,MAAM,KAAK,GAAG,EAAE,MAAM,MAAM,IAAI;AAC9C,MAAI,CAAC,OAAO,YAAY,GAAG;AACzB,UAAM,IAAI,SAAS,2DAA2D,GAAG,EAAE;AAAA,EACrF;AACA,QAAM,OAAO,GAAG;AAEhB,QAAM,WAAW,cAAc,MAAM,YAAY,IAAI,cAAc;AAEnE,SAAO;AAAA,IACL;AAAA,IACA,UAAU,MAAM,YAAY,IAAI,kBAAkB;AAAA,IAClD,OAAO,MAAM,SAAS,IAAI,eAAe;AAAA,IACzC;AAAA,IACA,UAAU;AAAA,MACR,YAAY,aAAa,MAAM,YAAY,IAAI,iBAAiB,iBAAiB;AAAA,MACjF;AAAA,MACA;AAAA,IACF;AAAA,IACA,kBAAkB;AAAA,MAChB;AAAA,QACE;AAAA,QACA,MAAM,WAAW,IAAI;AAAA,QACrB;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,gBAAgB;AAAA,MACd;AAAA,QACE;AAAA,QACA,MAAM,aAAa,IAAI;AAAA,QACvB;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,QAAQ,MAAM,UAAU;AAAA,IACxB,MAAM,MAAM,QAAQ;AAAA,IACpB,OAAO,MAAM,SAAS,CAAC,IAAI;AAAA,EAC7B;AACF;;;AE7GA,SAAS,UAAAA,SAAQ,QAAAC,aAAY;;;ACA7B,SAAS,cAAc,gBAAgB;AACvC,SAAS,MAAM,YAAY,aAAa,mBAAmB;;;ACD3D,SAAS,SAAAC,cAAa;AACtB,SAAS,2BAA2B;AACpC,YAAY,SAAS;AACrB,SAA8B,qBAAsC;;;ACHpE,SAAS,aAAa;AAGtB,IAAM,OAAO;AAEb,SAAS,SAAS,MAAsB;AACtC,MAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,GAAG;AAC9C,UAAM,OAAO,OAAO,IAAI,MAAM,0BAA0B,GAAG,EAAE,MAAM,SAAS,CAAC;AAAA,EAC/E;AACA,QAAM,aAAa,MAAM,QAAQ,IAAI;AACrC,MAAI,eAAe,QAAQ,CAAC,WAAW,WAAW,GAAG,IAAI,GAAG,GAAG;AAC7D,UAAM,OAAO,OAAO,IAAI,MAAM,gCAAgC,GAAG,EAAE,MAAM,SAAS,CAAC;AAAA,EACrF;AACA,SAAO;AACT;AAEA,SAAS,eAAe,OAAuB;AAC7C,MAAI,iBAAiB,OAAO;AAC1B,UAAM,QAAQ;AACd,QAAI,CAAC,MAAM,MAAM;AACf,UAAI,mCAAmC,KAAK,MAAM,OAAO,EAAG,OAAM,OAAO;AAAA,eAChE,SAAS,KAAK,MAAM,OAAO,EAAG,OAAM,OAAO;AAAA,eAC3C,aAAa,KAAK,MAAM,OAAO,EAAG,OAAM,OAAO;AAAA,UACnD,OAAM,OAAO;AAAA,IACpB;AACA,UAAM;AAAA,EACR;AACA,QAAM,OAAO,OAAO,IAAI,MAAM,qCAAqC,GAAG,EAAE,MAAM,MAAM,CAAC;AACvF;AAEA,eAAe,aAAa,IAAiB,MAA6B;AACxE,QAAM,SAAS,MAAM,QAAQ,IAAI;AACjC,MAAI,CAAE,MAAM,GAAG,OAAO,MAAM,EAAI,OAAM,GAAG,MAAM,QAAQ,EAAE,WAAW,KAAK,CAAC;AAC5E;AAEA,SAAS,UAAUC,OAAgD;AACjE,QAAM,WAAWA,MAAK,cAAc,QAAWA,MAAK,iBAAiB,QAAW;AAChF,QAAM,OAAO,WAAYA,MAAK,OAAO;AACrC,SAAO;AAAA,IACL,QAAQ,MAAMA,MAAK;AAAA,IACnB,aAAa,MAAMA,MAAK;AAAA,IACxB,gBAAgB,MAAMA,MAAK;AAAA,IAC3B;AAAA,IACA,MAAMA,MAAK;AAAA,IACX,OAAOA,MAAK;AAAA,IACZ,SAASA,MAAK,MAAM,QAAQ;AAAA,IAC5B,SAASA,MAAK,MAAM,QAAQ;AAAA,IAC5B,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACF;AAEO,SAAS,YAAY,IAAiB;AAC3C,QAAM,WAAW;AAAA,IACf,MAAM,SAAS,MAAc,SAA0C;AACrE,UAAI;AACF,cAAMC,eAAc,SAAS,IAAI;AACjC,cAAM,WAAW,OAAO,YAAY,WAAW,UAAU,SAAS;AAClE,eAAO,WAAW,GAAG,SAASA,cAAa,MAAM,IAAI,GAAG,eAAeA,YAAW;AAAA,MACpF,SAAS,OAAO;AACd,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,IACA,MAAM,UAAU,MAAc,MAA2B;AACvD,UAAI;AACF,cAAMA,eAAc,SAAS,IAAI;AACjC,cAAM,aAAa,IAAIA,YAAW;AAClC,cAAM,GAAG,UAAUA,cAAa,IAAI;AAAA,MACtC,SAAS,OAAO;AACd,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,IACA,MAAM,OAAO,MAAc;AACzB,UAAI;AACF,cAAM,GAAG,GAAG,SAAS,IAAI,CAAC;AAAA,MAC5B,SAAS,OAAO;AACd,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,IACA,MAAM,QAAQ,MAAc;AAC1B,UAAI;AACF,eAAO,MAAM,GAAG,QAAQ,SAAS,IAAI,CAAC;AAAA,MACxC,SAAS,OAAO;AACd,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,IACA,MAAM,MAAM,MAAc;AACxB,UAAI;AACF,cAAM,GAAG,MAAM,SAAS,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,MACpD,SAAS,OAAO;AACd,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,IACA,MAAM,MAAM,MAAc;AACxB,UAAI;AACF,cAAM,GAAG,GAAG,SAAS,IAAI,CAAC;AAAA,MAC5B,SAAS,OAAO;AACd,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,IACA,MAAM,OAAO,MAAc,IAAY;AACrC,UAAI;AACF,cAAM,aAAa,IAAI,SAAS,EAAE,CAAC;AACnC,cAAM,GAAG,GAAG,SAAS,IAAI,GAAG,SAAS,EAAE,CAAC;AAAA,MAC1C,SAAS,OAAO;AACd,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,IACA,MAAM,KAAK,MAAc;AACvB,UAAI;AACF,eAAO,UAAU,MAAM,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC;AAAA,MAChD,SAAS,OAAO;AACd,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,IACA,MAAM,MAAM,MAAc;AACxB,UAAI;AACF,eAAO,UAAU,MAAM,GAAG,MAAM,SAAS,IAAI,CAAC,CAAC;AAAA,MACjD,SAAS,OAAO;AACd,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,IACA,MAAM,SAAS,MAAc;AAC3B,UAAI;AACF,eAAO,MAAM,GAAG,SAAS,SAAS,IAAI,CAAC;AAAA,MACzC,SAAS,OAAO;AACd,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,IACA,MAAM,QAAQ,QAAgB,MAAc;AAC1C,UAAI;AACF,cAAM,GAAG,QAAQ,QAAQ,SAAS,IAAI,CAAC;AAAA,MACzC,SAAS,OAAO;AACd,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,IACA,MAAM,MAAM,MAAc,MAAc;AACtC,UAAI;AACF,cAAM,GAAG,MAAM,SAAS,IAAI,GAAG,IAAI;AAAA,MACrC,SAAS,OAAO;AACd,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,IACA,MAAM,OAAO,MAAc,OAAa,OAAa;AACnD,UAAI;AACF,cAAM,GAAG,OAAO,SAAS,IAAI,GAAG,OAAO,KAAK;AAAA,MAC9C,SAAS,OAAO;AACd,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AACA,SAAO,EAAE,SAAS;AACpB;;;ACvJA,SAAS,qBAAqB,UAA2B;AACvD,QAAM,OAAO,SAAS,YAAY,EAAE,QAAQ,YAAY,EAAE;AAC1D,MAAI,SAAS,eAAe,KAAK,SAAS,YAAY,KAAK,SAAS,MAAO,QAAO;AAClF,QAAM,SAAS,KAAK,MAAM,GAAG,EAAE,IAAI,MAAM;AACzC,MAAI,OAAO,WAAW,KAAK,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,UAAU,KAAK,CAAC,EAAG,QAAO;AACpF,SACE,OAAO,CAAC,MAAM,MACd,OAAO,CAAC,MAAM,OACb,OAAO,CAAC,MAAM,OAAO,OAAO,CAAC,MAAM,OACnC,OAAO,CAAC,MAAM,OAAQ,OAAO,CAAC,KAAgB,MAAO,OAAO,CAAC,KAAgB,MAC7E,OAAO,CAAC,MAAM,OAAO,OAAO,CAAC,MAAM;AAExC;AAEO,SAAS,kBAAkB,OAAuB;AACvD,MAAI;AACJ,MAAI;AACF,UAAM,IAAI,IAAI,KAAK;AAAA,EACrB,QAAQ;AACN,UAAM,IAAI,MAAM,+CAA+C;AAAA,EACjE;AACA,MAAI,IAAI,aAAa,SAAU,OAAM,IAAI,MAAM,sCAAsC;AACrF,MAAI,IAAI,YAAY,IAAI,SAAU,OAAM,IAAI,MAAM,0CAA0C;AAC5F,MAAI,IAAI,KAAM,OAAM,IAAI,MAAM,wCAAwC;AACtE,MAAI,qBAAqB,IAAI,QAAQ,GAAG;AACtC,UAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AACA,SAAO,IAAI,SAAS;AACtB;AAEA,eAAe,YACb,MACA,QACqB;AACrB,MAAI,CAAC,KAAM,QAAO,IAAI,WAAW;AACjC,QAAM,SAAuB,CAAC;AAC9B,MAAI,OAAO;AACX,mBAAiB,SAAS,MAAM;AAC9B,QAAI,QAAQ,QAAS,OAAM,IAAI,MAAM,2BAA2B;AAChE,WAAO,KAAK,KAAK;AACjB,YAAQ,MAAM;AAAA,EAChB;AACA,QAAM,SAAS,IAAI,WAAW,IAAI;AAClC,MAAI,SAAS;AACb,aAAW,SAAS,QAAQ;AAC1B,WAAO,IAAI,OAAO,MAAM;AACxB,cAAU,MAAM;AAAA,EAClB;AACA,SAAO;AACT;AAEA,gBAAgB,SAAS,MAAqD;AAC5E,QAAM;AACR;AAEO,SAAS,cAAc,KAAiC;AAC7D,SAAO;AAAA,IACL,MAAM,QAAQ,SAAyB;AACrC,UAAI,CAAC,IAAI,MAAO,OAAM,IAAI,MAAM,mDAAmD;AACnF,UAAI,IAAI,QAAQ,QAAS,OAAM,IAAI,MAAM,2BAA2B;AACpE,YAAM,MAAM,kBAAkB,QAAQ,GAAG;AACzC,YAAM,QAAQ,MAAM,YAAY,QAAQ,MAAM,IAAI,MAAM;AACxD,YAAM,WAAW,MAAM,IAAI,MAAM,KAAK;AAAA,QACpC,QAAQ,QAAQ,UAAU;AAAA,QAC1B,SAAS,QAAQ;AAAA;AAAA,QAEjB,MAAM,MAAM,SAAS,IAAK,QAA8B;AAAA,QACxD,iBAAiB;AAAA,MACnB,CAAC;AACD,UAAI,IAAI,QAAQ,QAAS,OAAM,IAAI,MAAM,2BAA2B;AACpE,YAAM,WAAW,kBAAkB,SAAS,GAAG;AAC/C,aAAO;AAAA,QACL,KAAK;AAAA,QACL,QAAQ,QAAQ;AAAA,QAChB,SAAS,SAAS;AAAA,QAClB,MAAM,SAAS,SAAS,IAAI;AAAA,QAC5B,YAAY,SAAS;AAAA,QACrB,eAAe,SAAS;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AACF;;;AF5EA,IAAM,YAAY;AAClB,IAAM,UAAU;AAChB,IAAM,WAAW;AAAA,EACf;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;AACF;AAEA,IAAM,aAAN,cAAyB,MAAM;AAAC;AAEhC,SAAS,GAAG,SAAS,IAAgB;AACnC,SAAO,EAAE,QAAQ,QAAQ,IAAI,UAAU,EAAE;AAC3C;AAEA,SAAS,MAAM,SAAyB;AACtC,QAAM,IAAI,WAAW,WAAW,uBAAuB;AACzD;AAEA,SAAS,iBAAiB,KAA2B;AACnD,MAAI,IAAI,QAAQ,QAAS,OAAM,IAAI,MAAM,mBAAmB;AAC9D;AAEA,SAAS,YAAY,KAAqB,QAAQ,KAAa;AAC7D,MAAI,MAAM,SAAS,IAAI,KAAK,MAAM,SAAS,IAAI,EAAG,OAAM,IAAI,MAAM,cAAc;AAChF,QAAM,WAAW,IAAI,GAAG,YAAY,IAAI,KAAK,KAAK;AAClD,MAAI,aAAa,aAAa,CAAC,SAAS,WAAW,GAAG,SAAS,GAAG,GAAG;AACnE,UAAM,IAAI,MAAM,4BAA4B;AAAA,EAC9C;AACA,SAAO;AACT;AAEA,eAAe,cAAc,KAAsC;AACjE,MAAI,UAAU,YAAY,GAAG;AAC7B,SAAO,YAAY,aAAa,QAAQ,WAAW,GAAG,SAAS,GAAG,GAAG;AACnE,QAAI,MAAM,IAAI,GAAG,OAAOC,OAAM,KAAK,SAAS,MAAM,CAAC,EAAG,QAAO;AAC7D,QAAI,YAAY,UAAW;AAC3B,cAAUA,OAAM,QAAQ,OAAO;AAAA,EACjC;AACA,QAAM,IAAI,MAAM,uDAAuD;AACzE;AAEA,SAAS,YAAY,MAAgB,OAAqD;AACxF,MAAI;AACJ,QAAM,OAAiB,CAAC;AACxB,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS;AAChD,UAAM,MAAM,KAAK,KAAK;AACtB,QAAI,OAAO,MAAM,SAAS,GAAG,GAAG;AAC9B,YAAM,OAAO,KAAK,EAAE,KAAK;AACzB,UAAI,CAAC,KAAM,OAAM,GAAG,GAAG,mBAAmB;AAC1C,cAAQ;AAAA,IACV,WAAW,OAAO,MAAM,KAAK,CAAC,SAAS,IAAI,WAAW,GAAG,IAAI,GAAG,CAAC,GAAG;AAClE,cAAQ,IAAI,MAAM,IAAI,QAAQ,GAAG,IAAI,CAAC;AAAA,IACxC,WAAW,IAAK,MAAK,KAAK,GAAG;AAAA,EAC/B;AACA,SAAO,EAAE,OAAO,KAAK;AACvB;AAEA,SAAS,KAAK,MAAgB,OAAuD;AACnF,MAAI,UAAU;AACd,QAAM,OAAO,KAAK,OAAO,CAAC,QAAQ;AAChC,QAAI,MAAM,SAAS,GAAG,GAAG;AACvB,gBAAU;AACV,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,CAAC;AACD,SAAO,EAAE,SAAS,KAAK;AACzB;AAEA,SAAS,cAAc,MAAsB;AAC3C,QAAM,UAAU,KAAK,KAAK,CAAC,QAAQ,IAAI,WAAW,GAAG,CAAC;AACtD,MAAI,QAAS,OAAM,uBAAuB,OAAO,GAAG;AACtD;AAEA,SAAS,gBAAgB,OAA2B,QAAoC;AACtF,MAAI,UAAU,OAAW,QAAO;AAChC,QAAM,SAAS,OAAO,KAAK;AAC3B,MAAI,CAAC,OAAO,cAAc,MAAM,KAAK,UAAU,EAAG,OAAM,GAAG,MAAM,8BAA8B;AAC/F,SAAO;AACT;AAEA,SAAS,QAAQ,SAA4B,KAAc;AACzD,MAAI,CAAC,OAAO,CAAC,QAAQ,QAAQ,YAAa,QAAO;AACjD,SAAO,YAAY,QAAQ,QAAQ,cAAc,GAAG;AACtD;AAEA,eAAe,UAAU,SAA4B,KAAa,QAAiC;AACjG,QAAM,QAAQ,MAAU,cAAU,EAAE,IAAI,QAAQ,IAAI,KAAK,MAAM,UAAU,MAAM,OAAO,CAAC;AACvF,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,WAAW,MAAM,cAAc;AAC3D,SAAO,kBAAkB,KAAK;AAChC;AAEA,IAAM,qBAAqB;AAE3B,eAAe,iBAAiB,KAAmD;AACjF,MAAI,CAAE,MAAM,IAAI,GAAG,OAAO,kBAAkB,EAAI,QAAO,oBAAI,IAAI;AAC/D,QAAM,SAAS,oBAAI,IAAoB;AACvC,MAAI,UAAU;AACd,aAAW,YAAY,MAAM,IAAI,GAAG,SAAS,kBAAkB,GAAG,MAAM,IAAI,GAAG;AAC7E,UAAM,OAAO,QAAQ,KAAK;AAC1B,UAAM,eAAe,iBAAiB,KAAK,IAAI;AAC/C,QAAI,eAAe,CAAC,GAAG;AACrB,gBAAU,aAAa,CAAC,EAAE,KAAK,EAAE,YAAY;AAC7C;AAAA,IACF;AACA,UAAM,aAAa,iBAAiB,KAAK,IAAI;AAC7C,QAAI,WAAW,aAAa,CAAC,MAAM,UAAa,WAAW,CAAC,MAAM,QAAW;AAC3E,aAAO,IAAI,GAAG,OAAO,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,WAAW,CAAC,EAAE,KAAK,CAAC;AAAA,IACrF;AAAA,EACF;AACA,SAAO;AACT;AAEA,eAAe,kBAAkB,KAAqB,QAA4C;AAChG,QAAM,WAAW,oBAAI,IAAqC;AAC1D,aAAW,CAAC,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,MAAM,KAAK,cAAc,KAAK,CAAC,GAAG;AAC5F,UAAM,YAAY,KAAK,QAAQ,GAAG;AAClC,QAAI,YAAY,EAAG,OAAM,mCAAmC;AAC5D,UAAM,UAAU,KAAK,MAAM,GAAG,SAAS;AACvC,UAAM,OAAO,KAAK,MAAM,YAAY,CAAC;AACrC,UAAM,UAAU,SAAS,IAAI,OAAO,KAAK,CAAC;AAC1C,YAAQ,KAAK,CAAC,MAAM,KAAK,CAAC;AAC1B,aAAS,IAAI,SAAS,OAAO;AAAA,EAC/B;AACA,QAAM,UAAU,CAAC,GAAG,QAAQ,EACzB;AAAA,IACC,CAAC,CAAC,SAAS,OAAO,MAChB,IAAI,OAAO;AAAA,EAAM,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,IAAK,GAAG,MAAM,KAAK,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA,EACpF,EACC,KAAK,IAAI;AACZ,QAAM,IAAI,GAAG,MAAMA,OAAM,QAAQ,kBAAkB,GAAG,EAAE,WAAW,KAAK,CAAC;AACzE,QAAM,IAAI,GAAG,UAAU,oBAAoB,UAAU,GAAG,OAAO;AAAA,IAAO,EAAE;AAC1E;AAEA,eAAe,WAAW,SAA4B,MAAqC;AACzF,QAAM,YAAY,YAAY,MAAM,CAAC,MAAM,kBAAkB,CAAC;AAC9D,gBAAc,UAAU,IAAI;AAC5B,MAAI,UAAU,KAAK,SAAS,EAAG,OAAM,wCAAwC;AAC7E,QAAM,MAAM,YAAY,QAAQ,SAAS,UAAU,KAAK,CAAC,CAAC;AAC1D,QAAM,QAAQ,QAAQ,GAAG,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC,EAAE,MAAM,YAAY;AACzE,QAAI,CAAE,MAAM,QAAQ,QAAQ,GAAG,OAAO,GAAG;AACvC,YAAM,IAAI,MAAM,oCAAoC;AAAA,EACxD,CAAC;AACD,QAAU,SAAK,EAAE,IAAI,QAAQ,IAAI,KAAK,eAAe,UAAU,SAAS,OAAO,CAAC;AAChF,SAAO,GAAG,uCAAuCA,OAAM,KAAK,KAAK,MAAM,CAAC;AAAA,CAAK;AAC/E;AAEA,eAAe,aAAa,SAA4B,MAAqC;AAC3F,QAAM,YAAY,KAAK,MAAM,CAAC,MAAM,WAAW,aAAa,CAAC;AAC7D,gBAAc,UAAU,IAAI;AAC5B,MAAI,UAAU,KAAK,OAAQ,OAAM;AACjC,QAAM,MAAM,MAAM,cAAc,QAAQ,OAAO;AAC/C,QAAM,SAAS,MAAU,iBAAa,EAAE,IAAI,QAAQ,IAAI,IAAI,CAAC;AAC7D,QAAM,QAAQ,OACX,OAAO,CAAC,CAAC,EAAE,MAAM,SAAS,KAAK,MAAM,SAAS,WAAW,YAAY,KAAK,EAC1E,IAAI,CAAC,CAAC,MAAM,MAAM,SAAS,KAAK,MAAM;AACrC,QAAI,IAAI;AACR,QAAI,IAAI;AACR,QAAI,SAAS,KAAK,UAAU,EAAG,KAAI;AAAA,aAC1B,SAAS,MAAO,KAAI,UAAU,IAAI,MAAM;AACjD,QAAI,YAAY,MAAO,KAAI,YAAY,IAAI,MAAM;AACjD,QAAI,SAAS,KAAK,UAAU,KAAK,YAAY,EAAG,QAAO,MAAM,IAAI;AACjE,WAAO,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI;AAAA,EACzB,CAAC;AACH,MAAI,UAAU,QAAS,QAAO,GAAG,MAAM,SAAS,GAAG,MAAM,KAAK,IAAI,CAAC;AAAA,IAAO,EAAE;AAC5E,QAAMC,UAAU,MAAU,kBAAc,EAAE,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAM;AACrE,SAAO;AAAA,IACL,aAAaA,OAAM;AAAA,EAAK,MAAM,SAAS,GAAG,MAAM,KAAK,IAAI,CAAC;AAAA,IAAO,yCAAyC;AAAA,EAC5G;AACF;AAEA,eAAe,UAAU,SAA4B,MAAqC;AACxF,QAAM,YAAY,KAAK,QAAQ,IAAI;AACnC,QAAM,aAAa,YAAY,IAAI,OAAO,KAAK,MAAM,GAAG,SAAS;AACjE,QAAM,eAAe,YAAY,IAAI,CAAC,IAAI,KAAK,MAAM,YAAY,CAAC;AAClE,QAAM,UAAU,KAAK,YAAY,CAAC,MAAM,OAAO,CAAC;AAChD,gBAAc,QAAQ,IAAI;AAC1B,QAAM,QAAQ,CAAC,GAAG,QAAQ,MAAM,GAAG,YAAY;AAC/C,MAAI,CAAC,QAAQ,WAAW,MAAM,WAAW,EAAG,OAAM,mBAAmB;AACrE,QAAM,MAAM,MAAM,cAAc,QAAQ,OAAO;AAC/C,QAAM,MAAM,QAAQ,WAAW,MAAM,SAAS,GAAG;AACjD,MAAI,KAAK;AACP,UAAM,SAAS,MAAU,iBAAa,EAAE,IAAI,QAAQ,IAAI,IAAI,CAAC;AAC7D,eAAW,CAAC,UAAU,EAAE,SAAS,KAAK,KAAK,QAAQ;AACjD,uBAAiB,QAAQ,OAAO;AAChC,UAAI,YAAY,MAAO;AACvB,UAAI,YAAY,EAAG,OAAU,WAAO,EAAE,IAAI,QAAQ,IAAI,KAAK,SAAS,CAAC;AAAA,UAChE,OAAU,QAAI,EAAE,IAAI,QAAQ,IAAI,KAAK,SAAS,CAAC;AAAA,IACtD;AAAA,EACF,OAAO;AACL,eAAW,YAAY,OAAO;AAC5B,UACE,SAAS,WAAW,GAAG,KACvB,SAAS,MAAM,GAAG,EAAE,KAAK,CAAC,YAAY,YAAY,QAAQ,YAAY,MAAM;AAE5E,cAAM,IAAI,MAAM,kBAAkB;AACpC,YAAU,QAAI,EAAE,IAAI,QAAQ,IAAI,KAAK,SAAS,CAAC;AAAA,IACjD;AAAA,EACF;AACA,SAAO,GAAG;AACZ;AAEA,SAAS,YAAY,OAAgD;AACnE,QAAM,QAAQ,uBAAuB,KAAK,KAAK;AAC/C,MAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAG,OAAM,iCAAiC;AACrE,SAAO,EAAE,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG,OAAO,MAAM,CAAC,EAAE;AAClD;AAEA,eAAe,aAAa,SAA4B,MAAqC;AAC3F,QAAM,aAAa,YAAY,MAAM,CAAC,MAAM,WAAW,CAAC;AACxD,QAAM,YAAY,YAAY,WAAW,MAAM,CAAC,UAAU,CAAC;AAC3D,gBAAc,UAAU,IAAI;AAC5B,MAAI,UAAU,KAAK,UAAU,CAAC,WAAW,MAAO,OAAM,kCAAkC;AACxF,QAAM,MAAM,MAAM,cAAc,QAAQ,OAAO;AAC/C,QAAM,eAAe,MAAM,iBAAiB,QAAQ,OAAO;AAC3D,QAAM,WAAW,MAAU,cAAU,EAAE,IAAI,QAAQ,IAAI,KAAK,MAAM,YAAY,CAAC;AAC/E,QAAM,YAAY,MAAU,cAAU,EAAE,IAAI,QAAQ,IAAI,KAAK,MAAM,aAAa,CAAC;AACjF,QAAM,mBACJ,YAAY,YACR,EAAE,MAAM,UAAU,OAAO,UAAU,IACnC,aAAa,IAAI,WAAW,KAAK,aAAa,IAAI,YAAY,IAC5D;AAAA,IACE,MAAM,aAAa,IAAI,WAAW;AAAA,IAClC,OAAO,aAAa,IAAI,YAAY;AAAA,EACtC,IACA,QAAQ,QAAQ;AACxB,QAAM,SAAS,UAAU,QAAQ,YAAY,UAAU,KAAK,IAAI;AAChE,QAAM,SAAS,MAAU,iBAAa,EAAE,IAAI,QAAQ,IAAI,IAAI,CAAC;AAC7D,MAAI,CAAC,OAAO,KAAK,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,MAAM,eAAe,WAAW,GAAG;AAC/E,UAAM,UAAU,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,eAAe,WAAW,MAAM,kBAAkB,WAAW,IAC3F,+BACA;AACJ,UAAM,IAAI,MAAM,OAAO;AAAA,EACzB;AACA,QAAM,MAAM,MAAU,WAAO,EAAE,IAAI,QAAQ,IAAI,KAAK,SAAS,WAAW,OAAO,OAAO,CAAC;AACvF,QAAMA,UAAU,MAAU,kBAAc,EAAE,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAM;AACrE,SAAO,GAAG,IAAIA,OAAM,IAAI,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,WAAW,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;AAAA,CAAI;AACjF;AAEA,eAAe,UAAU,SAA4B,MAAqC;AACxF,QAAM,WAAW,YAAY,MAAM,CAAC,MAAM,aAAa,CAAC;AACxD,QAAM,cAAc,KAAK,SAAS,MAAM,CAAC,WAAW,CAAC;AACrD,gBAAc,YAAY,IAAI;AAC9B,MAAI,YAAY,KAAK,SAAS,EAAG,OAAM;AACvC,QAAM,QAAQ,SAAS,QAAQ,OAAO,SAAS,SAAS,OAAO,EAAE,IAAI;AACrE,MAAI,CAAC,OAAO,SAAS,KAAK,KAAK,QAAQ,EAAG,OAAM,mBAAmB;AACnE,QAAM,MAAM,MAAM,cAAc,QAAQ,OAAO;AAC/C,QAAM,UAAU,MAAU,QAAI,EAAE,IAAI,QAAQ,IAAI,KAAK,KAAK,YAAY,KAAK,CAAC,KAAK,QAAQ,MAAM,CAAC;AAChG,MAAI,YAAY,SAAS;AACvB,WAAO;AAAA,MACL,QACG,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,MAAM,OAAO,QAAQ,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE,EAChF,KAAK,IAAI,KAAK,QAAQ,SAAS,OAAO;AAAA,IAC3C;AAAA,EACF;AACA,SAAO;AAAA,IACL,QACG;AAAA,MACC,CAAC,UACC,UAAU,MAAM,GAAG;AAAA,UAAa,MAAM,OAAO,OAAO,IAAI,KAAK,MAAM,OAAO,OAAO,KAAK;AAAA;AAAA,MAAY,MAAM,OAAO,QAAQ,KAAK,EAAE,WAAW,MAAM,QAAQ,CAAC;AAAA;AAAA,IAC5J,EACC,KAAK,IAAI;AAAA,EACd;AACF;AAEA,eAAe,WAAW,SAA4B,MAAqC;AACzF,QAAM,aAAa,KAAK,MAAM,CAAC,YAAY,UAAU,CAAC;AACtD,gBAAc,WAAW,IAAI;AAC7B,QAAM,MAAM,MAAM,cAAc,QAAQ,OAAO;AAC/C,QAAM,WAAW,WAAW,KAAK,IAAI,CAAC,SAAS,KAAK,QAAQ,SAAS,EAAE,EAAE,QAAQ,OAAO,EAAE,CAAC;AAC3F,QAAM,UAAU,IAAI,YAAY;AAChC,QAAM,QAAQ,CAAC,UAAkB,UAAsB,aAAyB;AAC9E,QAAI,SAAS,SAAS,CAAC,KAAK,SAAS,SAAS,CAAC,GAAG;AAChD,aAAO,kBAAkB,QAAQ,UAAU,QAAQ;AAAA;AAAA,IACrD;AACA,WAAO;AAAA,MACL,KAAK,QAAQ;AAAA,MACb,KAAK,QAAQ;AAAA,MACb,QAAQ,OAAO,QAAQ;AAAA,MACvB,QAAQ,OAAO,QAAQ;AAAA,MACvB;AAAA,MACA;AAAA,MACA,EAAE,SAAS,EAAE;AAAA,IACf;AAAA,EACF;AACA,QAAM,SAAS,MAAU,iBAAa;AAAA,IACpC,IAAI,QAAQ;AAAA,IACZ;AAAA,IACA,WAAW,SAAS,SAAS,WAAW;AAAA,EAC1C,CAAC;AACD,QAAM,YAAY,oBAAI,IAAoB;AAC1C,QAAU,SAAK;AAAA,IACb,IAAI,QAAQ;AAAA,IACZ;AAAA,IACA,OAAO,CAAK,UAAM,CAAC;AAAA,IACnB,KAAK,OAAO,UAAU,CAAC,KAAK,MAAM;AAChC,UAAI,SAAU,MAAM,MAAM,KAAK,MAAO,OAAQ,WAAU,IAAI,UAAU,MAAM,MAAM,IAAI,CAAC;AAAA,IACzF;AAAA,EACF,CAAC;AACD,QAAM,OAAO,MAAU,eAAW,EAAE,IAAI,QAAQ,IAAI,KAAK,KAAK,OAAO,CAAC,EAAE,MAAM,MAAM,MAAS;AAC7F,QAAM,QAAQ,IAAI,WAAW;AAC7B,QAAM,YAAY,OAAO,aAAqB;AAC5C,UAAM,MAAM,UAAU,IAAI,QAAQ;AAClC,WAAO,OAAO,MAAU,aAAS,EAAE,IAAI,QAAQ,IAAI,KAAK,IAAI,CAAC,GAAG,OAAO;AAAA,EACzE;AACA,QAAM,UAAoB,CAAC;AAC3B,aAAW,CAAC,UAAU,YAAY,eAAe,WAAW,KAAK,QAAQ;AACvE,UAAM,UAAU,WAAW,UAAU,eAAe,cAAc,kBAAkB;AACpF,QAAI,CAAC,QAAS;AACd,UAAM,WAAW,WAAW,UACxB,QAAQ,eAAe,KACpB,MAAU,aAAS,EAAE,IAAI,QAAQ,IAAI,KAAK,KAAK,MAAM,SAAS,CAAC,GAAG,OACnE,QACF,MAAM,UAAU,QAAQ;AAC5B,UAAM,WAAW,WAAW,UACxB,MAAM,UAAU,QAAQ,IACxB,kBAAkB,IAChB,QACA,MAAM,QAAQ,QAAQ,GAAG,eAAeD,OAAM,KAAK,KAAK,QAAQ,CAAC;AACvE,YAAQ,KAAK,MAAM,UAAU,UAAU,QAAQ,CAAC;AAAA,EAClD;AACA,SAAO,GAAG,QAAQ,KAAK,EAAE,CAAC;AAC5B;AAEA,eAAe,aAAa,SAA4B,MAAqC;AAC3F,QAAM,aAAa,KAAK,MAAM,CAAC,MAAM,MAAM,UAAU,CAAC;AACtD,gBAAc,WAAW,IAAI;AAC7B,QAAM,MAAM,MAAM,cAAc,QAAQ,OAAO;AAC/C,MAAI,WAAW,SAAS;AACtB,QAAI,WAAW,KAAK,WAAW,EAAG,OAAM,mCAAmC;AAC3E,UAAU,iBAAa,EAAE,IAAI,QAAQ,IAAI,KAAK,KAAK,WAAW,KAAK,CAAC,EAAY,CAAC;AACjF,WAAO,GAAG,kBAAkB,WAAW,KAAK,CAAC,CAAC;AAAA,CAAK;AAAA,EACrD;AACA,MAAI,WAAW,KAAK,QAAQ;AAC1B,QAAI,WAAW,KAAK,SAAS,EAAG,OAAM;AACtC,UAAU,WAAO;AAAA,MACf,IAAI,QAAQ;AAAA,MACZ;AAAA,MACA,KAAK,WAAW,KAAK,CAAC;AAAA,MACtB,QAAQ,WAAW,KAAK,CAAC;AAAA,IAC3B,CAAC;AACD,WAAO,GAAG;AAAA,EACZ;AACA,QAAM,CAAC,UAAU,OAAO,IAAI,MAAM,QAAQ,IAAI;AAAA,IACxC,iBAAa,EAAE,IAAI,QAAQ,IAAI,IAAI,CAAC;AAAA,IACpC,kBAAc,EAAE,IAAI,QAAQ,IAAI,IAAI,CAAC;AAAA,EAC3C,CAAC;AACD,SAAO;AAAA,IACL,SAAS,IAAI,CAAC,SAAS,GAAG,SAAS,UAAU,MAAM,GAAG,IAAI,IAAI,EAAE,EAAE,KAAK,IAAI,KACxE,SAAS,SAAS,OAAO;AAAA,EAC9B;AACF;AAEA,eAAe,iBACb,SACA,KACA,WACA,UACqB;AACrB,MAAI,WAAW,MAAU,eAAW,EAAE,IAAI,QAAQ,IAAI,KAAK,KAAK,UAAU,CAAC,GAAG,OAAO;AACrF,QAAM,WAAW,SAAS,MAAM,GAAG,EAAE,OAAO,OAAO;AACnD,WAAS,QAAQ,GAAG,QAAQ,SAAS,QAAQ,SAAS;AACpD,UAAM,WAAW,MAAU,aAAS,EAAE,IAAI,QAAQ,IAAI,KAAK,KAAK,QAAQ,CAAC,GAAG;AAC5E,UAAM,QAAQ,QAAQ,KAAK,CAAC,cAAc,UAAU,SAAS,SAAS,KAAK,CAAC;AAC5E,QAAI,CAAC,MAAO,OAAM,IAAI,MAAM,SAAS,QAAQ,sCAAsC;AACnF,QAAI,MAAM,SAAS,SAAU,OAAM,IAAI,MAAM,iDAAiD;AAC9F,QAAI,UAAU,SAAS,SAAS,GAAG;AACjC,UAAI,MAAM,SAAS,OAAQ,OAAM,IAAI,MAAM,SAAS,QAAQ,iBAAiB;AAC7E,cAAQ,MAAU,aAAS,EAAE,IAAI,QAAQ,IAAI,KAAK,KAAK,MAAM,IAAI,CAAC,GAAG;AAAA,IACvE;AACA,QAAI,MAAM,SAAS,OAAQ,OAAM,IAAI,MAAM,SAAS,QAAQ,iBAAiB;AAC7E,cAAU,MAAM;AAAA,EAClB;AACA,QAAM,IAAI,MAAM,uBAAuB;AACzC;AAEA,eAAe,eAAe,SAA4B,MAAqC;AAC7F,QAAM,YAAY,KAAK,QAAQ,IAAI;AACnC,QAAM,cAAc,aAAa,IAAI,KAAK,MAAM,GAAG,SAAS,IAAI;AAChE,QAAM,YAAY,aAAa,IAAI,KAAK,MAAM,YAAY,CAAC,IAAI,CAAC;AAChE,QAAM,YAAY,YAAY,aAAa,CAAC,IAAI,CAAC;AACjD,QAAM,YAAY,KAAK,UAAU,MAAM,CAAC,MAAM,SAAS,CAAC;AACxD,gBAAc,UAAU,IAAI;AAC5B,QAAM,MAAM,MAAM,cAAc,QAAQ,OAAO;AAC/C,MAAI,UAAU,QAAQ;AACpB,QAAI,UAAU,SAAS,UAAU,KAAK,SAAS,EAAG,OAAM;AACxD,QAAI,UAAU,KAAK,CAAC,SAAS,KAAK,WAAW,GAAG,KAAK,KAAK,MAAM,GAAG,EAAE,SAAS,IAAI,CAAC,GAAG;AACpF,YAAM,IAAI,MAAM,uBAAuB;AAAA,IACzC;AACA,UAAM,MAAM,UAAU,KAAK,CAAC,KAAK;AACjC,UAAM,MAAM,MAAU,eAAW,EAAE,IAAI,QAAQ,IAAI,KAAK,IAAI,CAAC;AAC7D,eAAW,YAAY,WAAW;AAChC,YAAM,OAAO,MAAM,iBAAiB,SAAS,KAAK,KAAK,QAAQ;AAC/D,YAAM,QAAQ,QAAQ,GAAG,UAAUA,OAAM,KAAK,KAAK,QAAQ,GAAG,IAAI;AAAA,IACpE;AACA,WAAO,GAAG;AAAA,EACZ;AACA,MAAI,aAAa,EAAG,OAAM,8CAA8C;AACxE,MAAI,UAAU,OAAO;AACnB,QAAI,UAAU,KAAK,SAAS,EAAG,OAAM;AACrC,UAAU,WAAO;AAAA,MACf,IAAI,QAAQ;AAAA,MACZ;AAAA,MACA,KAAK,UAAU;AAAA,MACf,QAAQ,UAAU,KAAK,CAAC;AAAA,MACxB,UAAU;AAAA,IACZ,CAAC;AACD,UAAU,aAAS,EAAE,IAAI,QAAQ,IAAI,KAAK,KAAK,UAAU,OAAO,OAAO,UAAU,QAAQ,CAAC;AAC1F,WAAO,GAAG,6BAA6B,UAAU,KAAK;AAAA,CAAK;AAAA,EAC7D;AACA,MAAI,UAAU,KAAK,WAAW,EAAG,OAAM,qCAAqC;AAC5E,QAAU,aAAS,EAAE,IAAI,QAAQ,IAAI,KAAK,KAAK,UAAU,KAAK,CAAC,GAAG,OAAO,UAAU,QAAQ,CAAC;AAC5F,SAAO,GAAG,gBAAgB,UAAU,KAAK,CAAC,CAAC;AAAA,CAAK;AAClD;AAEA,eAAe,aAAa,SAA4B,MAAqC;AAC3F,QAAM,MAAM,MAAM,cAAc,QAAQ,OAAO;AAC/C,MAAI,CAAC,KAAK,UAAW,KAAK,WAAW,KAAK,KAAK,CAAC,MAAM,MAAO;AAC3D,UAAM,UAAU,MAAU,gBAAY,EAAE,IAAI,QAAQ,IAAI,IAAI,CAAC;AAC7D,UAAM,UAAU,KAAK,CAAC,MAAM;AAC5B,WAAO;AAAA,MACL,QACG;AAAA,QAAI,CAAC,EAAE,QAAQ,IAAI,MAClB,UAAU,GAAG,MAAM,IAAK,GAAG;AAAA,EAAa,MAAM,IAAK,GAAG,YAAY;AAAA,MACpE,EACC,KAAK,IAAI,KAAK,QAAQ,SAAS,OAAO;AAAA,IAC3C;AAAA,EACF;AACA,QAAM,CAAC,QAAQ,MAAM,OAAO,GAAG,IAAI,IAAI;AACvC,MAAI,KAAK,UAAU,CAAC,KAAM,OAAM;AAChC,MAAI,WAAW,OAAO;AACpB,QAAI,CAAC,MAAO,OAAM,2BAA2B;AAC7C,sBAAkB,KAAK;AACvB,UAAU,cAAU,EAAE,IAAI,QAAQ,IAAI,KAAK,QAAQ,MAAM,KAAK,MAAM,CAAC;AACrE,WAAO,GAAG;AAAA,EACZ;AACA,MAAI,WAAW,YAAY,WAAW,MAAM;AAC1C,QAAI,MAAO,OAAM;AACjB,UAAU,iBAAa,EAAE,IAAI,QAAQ,IAAI,KAAK,QAAQ,KAAK,CAAC;AAC5D,WAAO,GAAG;AAAA,EACZ;AACA,MAAI,WAAW,WAAW;AACxB,QAAI,MAAO,OAAM;AACjB,UAAM,MAAM,MAAM,UAAU,SAAS,KAAK,IAAI;AAC9C,WAAO,GAAG,GAAG,GAAG;AAAA,CAAI;AAAA,EACtB;AACA,MAAI,WAAW,WAAW;AACxB,QAAI,CAAC,MAAO,OAAM;AAClB,sBAAkB,KAAK;AACvB,UAAU,cAAU,EAAE,IAAI,QAAQ,IAAI,KAAK,MAAM,UAAU,IAAI,QAAQ,MAAM,CAAC;AAC9E,WAAO,GAAG;AAAA,EACZ;AACA,QAAM;AACR;AAEA,eAAe,aAAa,SAA4B,MAAqC;AAC3F,QAAM,aAAa,KAAK,MAAM,CAAC,UAAU,CAAC;AAC1C,QAAM,YAAY,KAAK,WAAW,MAAM,CAAC,SAAS,CAAC;AACnD,QAAM,WAAW,KAAK,UAAU,MAAM,CAAC,UAAU,IAAI,CAAC;AACtD,gBAAc,SAAS,IAAI;AAC3B,QAAM,eAAe,WAAW,UAAU,MAAM,iBAAiB,QAAQ,OAAO,IAAI;AACpF,QAAM,MAAM,WAAW,UAAU,SAAY,MAAM,cAAc,QAAQ,OAAO;AAChF,MAAI,SAAS,SAAS;AACpB,QAAI,SAAS,KAAK,OAAQ,OAAM;AAChC,QAAI,cAAc;AAChB,YAAME,UAAS,CAAC,GAAG,YAAY,EAAE,IAAI,CAAC,CAACC,MAAKC,MAAK,MAAM,GAAGD,IAAG,IAAIC,MAAK,EAAE,EAAE,KAAK,IAAI;AACnF,aAAO,GAAGF,UAAS,GAAGA,OAAM;AAAA,IAAO,EAAE;AAAA,IACvC;AACA,UAAM,OAAO,CAAC,aAAa,cAAc,gCAAgC,WAAW;AACpF,UAAM,SAAS,MAAM,QAAQ;AAAA,MAC3B,KAAK;AAAA,QACH,OAAOC,SAAQ,CAACA,MAAK,MAAU,cAAU,EAAE,IAAI,QAAQ,IAAI,KAAK,MAAMA,KAAI,CAAC,CAAC;AAAA,MAC9E;AAAA,IACF;AACA,UAAM,SAAS,OACZ,OAAO,CAAC,CAAC,EAAEC,MAAK,MAAMA,WAAU,MAAS,EACzC,IAAI,CAAC,CAACD,MAAKC,MAAK,MAAM,GAAGD,IAAG,IAAIC,MAAK,EAAE,EACvC,KAAK,IAAI;AACZ,WAAO,GAAG,SAAS,GAAG,MAAM;AAAA,IAAO,EAAE;AAAA,EACvC;AACA,QAAM,CAAC,KAAK,OAAO,GAAG,IAAI,IAAI,SAAS;AACvC,MAAI,KAAK,UAAU,CAAC,IAAK,OAAM;AAC/B,MAAI,CAAC,IAAI,SAAS,GAAG,EAAG,OAAM,mCAAmC;AACjE,MAAI,cAAc;AAChB,QAAI,UAAU,SAAS;AACrB,UAAI,MAAO,OAAM;AACjB,mBAAa,OAAO,IAAI,YAAY,CAAC;AACrC,YAAM,kBAAkB,QAAQ,SAAS,YAAY;AACrD,aAAO,GAAG;AAAA,IACZ;AACA,QAAI,UAAU,QAAW;AACvB,YAAM,QAAQ,aAAa,IAAI,IAAI,YAAY,CAAC;AAChD,aAAO,UAAU,SAAY,EAAE,QAAQ,IAAI,QAAQ,IAAI,UAAU,EAAE,IAAI,GAAG,GAAG,KAAK;AAAA,CAAI;AAAA,IACxF;AACA,iBAAa,IAAI,IAAI,YAAY,GAAG,KAAK;AACzC,UAAM,kBAAkB,QAAQ,SAAS,YAAY;AACrD,WAAO,GAAG;AAAA,EACZ;AACA,MAAI,UAAU,SAAS;AACrB,QAAI,MAAO,OAAM;AACjB,UAAU,cAAU,EAAE,IAAI,QAAQ,IAAI,KAAK,MAAM,KAAK,OAAO,OAAU,CAAC;AACxE,WAAO,GAAG;AAAA,EACZ;AACA,MAAI,UAAU,QAAW;AACvB,UAAM,QAAQ,MAAU,cAAU,EAAE,IAAI,QAAQ,IAAI,KAAK,MAAM,IAAI,CAAC;AACpE,WAAO,UAAU,SAAY,EAAE,QAAQ,IAAI,QAAQ,IAAI,UAAU,EAAE,IAAI,GAAG,GAAG,KAAK;AAAA,CAAI;AAAA,EACxF;AACA,QAAU,cAAU,EAAE,IAAI,QAAQ,IAAI,KAAK,MAAM,KAAK,MAAM,CAAC;AAC7D,SAAO,GAAG;AACZ;AAEA,eAAe,YAAY,SAA4B,MAAqC;AAC1F,QAAM,YAAY,YAAY,MAAM,CAAC,MAAM,UAAU,CAAC;AACtD,QAAM,WAAW,YAAY,UAAU,MAAM,CAAC,SAAS,CAAC;AACxD,QAAM,aAAa,KAAK,SAAS,MAAM,CAAC,iBAAiB,CAAC;AAC1D,QAAM,iBAAiB,KAAK,WAAW,MAAM,CAAC,eAAe,CAAC;AAC9D,gBAAc,eAAe,IAAI;AACjC,QAAM,CAAC,QAAQ,aAAa,GAAG,IAAI,IAAI,eAAe;AACtD,MAAI,CAAC,UAAU,KAAK,OAAQ,OAAM,6CAA6C;AAC/E,QAAM,MAAM,kBAAkB,MAAM;AACpC,QAAM,WAAWJ,OAAM,SAAS,IAAI,IAAI,GAAG,EAAE,QAAQ,EAAE,QAAQ,UAAU,EAAE,KAAK;AAChF,QAAM,MAAM,YAAY,QAAQ,SAAS,eAAe,QAAQ;AAChE,QAAM,QAAQ,gBAAgB,SAAS,OAAO,SAAS;AACvD,QAAU,UAAM;AAAA,IACd,IAAI,QAAQ;AAAA,IACZ,MAAM,QAAQ;AAAA,IACd;AAAA,IACA;AAAA,IACA,KAAK,UAAU;AAAA,IACf;AAAA,IACA,cAAc,WAAW,WAAW,QAAQ,UAAU,KAAK;AAAA,IAC3D,YAAY,eAAe;AAAA,IAC3B,QAAQ,QAAQ,SAAS,GAAG;AAAA,EAC9B,CAAC;AACD,SAAO,GAAG,iBAAiB,eAAe,QAAQ;AAAA,CAAQ;AAC5D;AAEA,eAAe,YAAY,SAA4B,MAAqC;AAC1F,QAAM,WAAW,YAAY,MAAM,CAAC,SAAS,CAAC;AAC9C,gBAAc,SAAS,IAAI;AAC3B,MAAI,SAAS,KAAK,SAAS,EAAG,OAAM;AACpC,QAAM,MAAM,MAAM,cAAc,QAAQ,OAAO;AAC/C,QAAM,SAAS,SAAS,KAAK,CAAC,KAAK;AACnC,QAAM,MAAM,MAAM,UAAU,SAAS,KAAK,MAAM;AAChD,QAAU,UAAM;AAAA,IACd,IAAI,QAAQ;AAAA,IACZ,MAAM,QAAQ;AAAA,IACd;AAAA,IACA;AAAA,IACA,KAAK,SAAS,KAAK,CAAC;AAAA,IACpB,OAAO,gBAAgB,SAAS,OAAO,SAAS;AAAA,IAChD,QAAQ,QAAQ,SAAS,GAAG;AAAA,EAC9B,CAAC;AACD,SAAO,GAAG;AACZ;AAEA,eAAe,WAAW,SAA4B,MAAqC;AACzF,QAAM,SAAS,KAAK,MAAM,CAAC,WAAW,CAAC;AACvC,gBAAc,OAAO,IAAI;AACzB,MAAI,OAAO,KAAK,SAAS,EAAG,OAAM;AAClC,QAAM,MAAM,MAAM,cAAc,QAAQ,OAAO;AAC/C,QAAM,SAAS,OAAO,KAAK,CAAC,KAAK;AACjC,QAAM,MAAM,MAAM,UAAU,SAAS,KAAK,MAAM;AAChD,QAAU,SAAK;AAAA,IACb,IAAI,QAAQ;AAAA,IACZ,MAAM,QAAQ;AAAA,IACd;AAAA,IACA;AAAA,IACA,KAAK,OAAO,KAAK,CAAC;AAAA,IAClB,iBAAiB;AAAA;AAAA,IAEjB,QAAQ,QAAQ,QAAQ,UAAU,EAAE,MAAM,aAAa,OAAO,gBAAgB;AAAA,IAC9E,QAAQ,QAAQ,SAAS,GAAG;AAAA,EAC9B,CAAC;AACD,SAAO,GAAG,yCAAyC;AACrD;AAEA,eAAe,WAAW,SAA4B,MAAqC;AACzF,QAAM,YAAY,KAAK,MAAM,CAAC,WAAW,IAAI,CAAC;AAC9C,QAAM,eAAe,KAAK,UAAU,MAAM,CAAC,kBAAkB,IAAI,CAAC;AAClE,gBAAc,aAAa,IAAI;AAC/B,MAAI,aAAa,KAAK,SAAS,EAAG,OAAM;AACxC,QAAM,MAAM,MAAM,cAAc,QAAQ,OAAO;AAC/C,QAAM,SAAS,aAAa,KAAK,CAAC,KAAK;AACvC,QAAM,MAAM,aAAa,KAAK,CAAC,KAAM,MAAU,kBAAc,EAAE,IAAI,QAAQ,IAAI,IAAI,CAAC;AACpF,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,iCAAiC;AAC3D,QAAM,MAAM,MAAM,UAAU,SAAS,KAAK,MAAM;AAChD,QAAM,SAAS,MAAU,SAAK;AAAA,IAC5B,IAAI,QAAQ;AAAA,IACZ,MAAM,QAAQ;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,UAAU;AAAA,IACjB,QAAQ,QAAQ,SAAS,GAAG;AAAA,EAC9B,CAAC;AACD,MAAI,CAAC,OAAO,IAAI;AACd,UAAM,WAAW,OAAO,OAAO,OAAO,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG;AAC1E,UAAM,IAAI,MAAM,OAAO,SAAS,YAAY,0BAA0B;AAAA,EACxE;AACA,MAAI,aAAa,SAAS;AACxB,UAAU,cAAU,EAAE,IAAI,QAAQ,IAAI,KAAK,MAAM,UAAU,GAAG,WAAW,OAAO,OAAO,CAAC;AACxF,UAAU,cAAU;AAAA,MAClB,IAAI,QAAQ;AAAA,MACZ;AAAA,MACA,MAAM,UAAU,GAAG;AAAA,MACnB,OAAO,cAAc,GAAG;AAAA,IAC1B,CAAC;AAAA,EACH;AACA,SAAO,GAAG,MAAM,GAAG;AAAA,CAAI;AACzB;AAEA,IAAM,WAGF;AAAA,EACF,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AACR;AAEA,SAAS,OAAO,SAAiB,SAA8B;AAC7D,MAAI,SAAS,QACV,QAAQ,wBAAwB,UAAU,EAC1C,WAAW,QAAQ,IAAI,GAAG,QAAQ;AACrC,aAAW,UAAU,SAAS;AAC5B,QAAI,OAAQ,UAAS,OAAO,WAAW,QAAQ,YAAY;AAAA,EAC7D;AACA,SAAO;AACT;AAEO,SAAS,iBAAiB,UAA6B,CAAC,GAAG;AAChE,SAAO,cAAc,OAAO,OAAO,MAAM,YAAY;AACnD,UAAM,UAAU,oBAAI,IAAY;AAChC,UAAM,cAAiC,QAAQ,cAC3C;AAAA,MACE,GAAG;AAAA,MACH,aAAa,OAAO,QAAQ;AAC1B,cAAM,OAAO,MAAM,QAAQ,cAAc,GAAG;AAC5C,YAAI,MAAM,SAAU,SAAQ,IAAI,KAAK,QAAQ;AAC7C,YAAI,MAAM,SAAU,SAAQ,IAAI,KAAK,QAAQ;AAC7C,eAAO;AAAA,MACT;AAAA,IACF,IACA;AACJ,QAAI;AACF,UAAI,CAAC,KAAK,UAAU,KAAK,CAAC,MAAM,UAAU,KAAK,SAAS,QAAQ,GAAG;AACjE,eAAO,GAAG;AAAA;AAAA,sBAAyD,SAAS,KAAK,IAAI,CAAC;AAAA,CAAI;AAAA,MAC5F;AACA,UAAI,KAAK,CAAC,MAAM,eAAe,KAAK,CAAC,MAAM,KAAM,QAAO,GAAG,GAAG,OAAO;AAAA,CAAI;AACzE,YAAM,aAAa,KAAK,CAAC;AACzB,YAAM,UAAU,aAAa,SAAS,UAAU,IAAI;AACpD,UAAI,CAAC,QAAS,OAAM,IAAI,cAAc,EAAE,kCAAkC;AAC1E,uBAAiB,OAAO;AACxB,aAAO,MAAM;AAAA,QACX;AAAA,UACE;AAAA,UACA,IAAI,YAAY,QAAQ,EAAE;AAAA,UAC1B,MAAM,cAAc,OAAO;AAAA,UAC3B,SAAS;AAAA,QACX;AAAA,QACA,KAAK,MAAM,CAAC;AAAA,MACd;AAAA,IACF,SAAS,OAAO;AACd,YAAM,UAAU;AAAA,QACd,iBAAiB,QAAQ,MAAM,UAAU;AAAA,QACzC;AAAA,MACF;AACA,YAAM,WACJ,iBAAiB,aACb,MACA,qCAAqC,KAAK,OAAO,IAC/C,MACA;AACR,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ,GAAG,iBAAiB,aAAa,UAAU,OAAO,KAAK,OAAO;AAAA;AAAA,QACtE;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ADlsBO,IAAM,yBAAyB;AAEtC,SAAS,0BAA0B,eAA+B;AAChE,QAAM,gBAAgB,aAAa,aAAa;AAChD,MAAI,CAAC,SAAS,aAAa,EAAE,YAAY,GAAG;AAC1C,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,eAAuB;AAChD,QAAM,OAAO,0BAA0B,aAAa;AACpD,SAAO,IAAI,YAAY;AAAA,IACrB,MAAM,IAAI,WAAW;AAAA,IACrB,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,QACZ,YAAY,IAAI,YAAY,EAAE,MAAM,eAAe,MAAM,CAAC;AAAA,MAC5D;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,SAAS,eAAe,eAAuB,UAAiC,CAAC,GAAS;AAC/F,SAAO,IAAI,KAAK;AAAA,IACd,IAAI,kBAAkB,aAAa;AAAA,IACnC,KAAK;AAAA,IACL,KAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,IACA,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,gBAAgB,QAAQ,QAAQ,QAAQ,CAAC,IAAI,CAAC,iBAAiB,QAAQ,GAAG,CAAC;AAAA,IAC3E,SAAS;AAAA,MACP,oCAAoC;AAAA,MACpC,iBAAiB,MAAM,OAAO;AAAA,IAChC;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,sBAAwC;AAC5D,MAAI;AACF,UAAM,OAAO,IAAI,KAAK;AACtB,UAAM,KAAK,KAAK,SAAS;AACzB,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;AItDO,IAAM,cAAc;AAEpB,IAAM,iBAAiB;;;ALS9B,eAAsB,UAAU,SAAyC;AACvE,QAAM,cAAc,QAAQ,SAAS;AACrC,QAAM,YAAY,OAAO,SAAS,YAAY,MAAM,GAAG,EAAE,CAAC,KAAK,KAAK,EAAE;AACtE,QAAM,WAAW,MAAMK,MAAK,QAAQ,GAAG,EAAE,MAAM,MAAM,IAAI;AACzD,QAAM,gBAAgB,UAAU,YAAY,IACxC,MAAMC,QAAO,QAAQ,GAAG,EAAE;AAAA,IACxB,MAAM;AAAA,IACN,MAAM;AAAA,EACR,IACA;AACJ,QAAM,oBAAoB,MAAM,oBAAoB;AACpD,QAAM,qBACJ,QAAQ,aAAa,WAAW,QAAQ,QAAQ,IAAI,cAAc,IAAI;AAExE,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,aAAa;AAAA,IACrB,KAAK,QAAQ;AAAA,IACb;AAAA,IACA,UAAU,QAAQ;AAAA,IAClB,OAAO,QAAQ;AAAA,IACf;AAAA,IACA;AAAA,EACF;AAEA,MAAI,QAAQ,MAAM;AAChB,YAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,MAAM,CAAC;AAAA,CAAI;AAAA,EACpD,OAAO;AACL,YAAQ,OAAO,MAAM,GAAG,WAAW,IAAI,cAAc;AAAA,CAAI;AACzD,YAAQ,OAAO,MAAM,SAAS,WAAW,IAAI,OAAO,SAAS,OAAO,eAAe;AAAA,CAAI;AACvF,YAAQ,OAAO,MAAM,cAAc,QAAQ,GAAG,IAAI,gBAAgB,OAAO,gBAAgB;AAAA,CAAI;AAC7F,YAAQ,OAAO;AAAA,MACb,aAAa,QAAQ,QAAQ,MAAM,QAAQ,KAAK,IAAI,qBAAqB,eAAe,qBAAqB;AAAA;AAAA,IAC/G;AACA,YAAQ,OAAO,MAAM,cAAc,oBAAoB,OAAO,aAAa;AAAA,CAAI;AAAA,EACjF;AAEA,SAAO,OAAO,UAAU,iBAAiB,oBAAoB,IAAI;AACnE;;;AMrCA,SAAS,cAAc,WAAgE;AACrF,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,QAAQ,WAAW,MAAM,WAAW,MAAM,GAAG,SAAS;AAC5D,SAAO;AAAA,IACL,QAAQ,WAAW;AAAA,IACnB,QAAQ,MAAM,aAAa,KAAK;AAAA,EAClC;AACF;AAEA,SAAS,eAAe,SAAkE;AACxF,QAAM,SAAS,QAAQ,OAAO,CAAC,WAAkC,QAAQ,MAAM,CAAC;AAChF,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,IAAI,gBAAgB;AACvC,aAAW,UAAU,QAAQ;AAC3B,QAAI,OAAO,SAAS;AAClB,iBAAW,MAAM,OAAO,MAAM;AAC9B;AAAA,IACF;AACA,WAAO,iBAAiB,SAAS,MAAM,WAAW,MAAM,OAAO,MAAM,GAAG,EAAE,MAAM,KAAK,CAAC;AAAA,EACxF;AACA,SAAO,WAAW;AACpB;AAEA,eAAsB,eACpB,KACA,SACA,SACA,QAC+B;AAC/B,QAAM,UAAU,KAAK,IAAI;AACzB,QAAM,UAAU,cAAc,QAAQ,SAAS;AAC/C,QAAM,iBAAiB,eAAe,CAAC,QAAQ,QAAQ,MAAM,CAAC;AAC9D,QAAM,WAAW,MAAM,QAAQ,OAAO,WAAW,CAAC,QAAQ;AAE1D,MAAI;AACF,UAAM,OAAO,eAAe,GAAG;AAC/B,UAAM,SAAS,MAAM,KAAK,KAAK,SAAS,EAAE,KAAK,QAAQ,KAAK,QAAQ,eAAe,CAAC;AACpF,WAAO;AAAA,MACL,GAAG;AAAA,MACH,YAAY,KAAK,IAAI,IAAI;AAAA,MACzB,UAAU,SAAS;AAAA,IACrB;AAAA,EACF,SAAS,OAAO;AACd,QAAI,SAAS,GAAG;AACd,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,QAAQ,2BAA2B,QAAQ,SAAS;AAAA,QACpD,KAAK,CAAC;AAAA,QACN,YAAY,KAAK,IAAI,IAAI;AAAA,QACzB,UAAU;AAAA,MACZ;AAAA,IACF;AACA,UAAM;AAAA,EACR,UAAE;AACA,YAAQ,OAAO;AAAA,EACjB;AACF;;;AC1EA,SAAS,aAAa;AAatB,IAAM,WAAW;AACjB,IAAM,kBAAkB,IAAI,QAAQ;AAE7B,SAAS,cAAc,OAAwB;AACpD,QAAM,OAAO,oBAAI,QAAgB;AACjC,SACE,KAAK,UAAU,OAAO,CAAC,MAAM,SAAkB;AAC7C,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO,KAAK,SAAS;AAAA,IACvB;AACA,QAAI,QAAQ,OAAO,SAAS,UAAU;AACpC,UAAI,KAAK,IAAI,IAAI,GAAG;AAClB,eAAO;AAAA,MACT;AACA,WAAK,IAAI,IAAI;AAAA,IACf;AACA,WAAO;AAAA,EACT,CAAC,KAAK;AAEV;AAEA,SAAS,qBAAqB,WAA4B;AACxD,SACG,aAAa,OAAU,aAAa,OACpC,aAAa,QAAU,aAAa,QACpC,aAAa,QAAU,aAAa,QACpC,aAAa,QAAU,aAAa,QACpC,aAAa,SAAU,aAAa;AAEzC;AAEA,SAAS,qBAAqB,WAA4B;AACxD,SACE,aAAa,SACZ,aAAa,QACZ,cAAc,QACd,cAAc,QACb,aAAa,SAAU,aAAa,SAAU,cAAc,SAC5D,aAAa,SAAU,aAAa,SACpC,aAAa,SAAU,aAAa,SACpC,aAAa,SAAU,aAAa,SACpC,aAAa,SAAU,aAAa,SACpC,aAAa,SAAU,aAAa,SACpC,aAAa,SAAU,aAAa,SACpC,aAAa,UAAW,aAAa,UACrC,aAAa,UAAW,aAAa,UACrC,aAAa,UAAW,aAAa;AAE5C;AAEO,SAAS,aAAa,MAAsB;AACjD,MAAI,QAAQ;AACZ,aAAW,QAAQ,MAAM;AACvB,UAAM,YAAY,KAAK,YAAY,CAAC,KAAK;AACzC,QAAI,cAAc,KAAK,cAAc,QAAU,qBAAqB,SAAS,GAAG;AAC9E;AAAA,IACF;AACA,QAAI,YAAY,MAAS,aAAa,OAAQ,YAAY,KAAO;AAC/D;AAAA,IACF;AACA,aAAS,qBAAqB,SAAS,IAAI,IAAI;AAAA,EACjD;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,MAAc,YAA4B;AACrE,MAAI,QAAQ;AACZ,MAAI,SAAS;AACb,aAAW,QAAQ,MAAM;AACvB,UAAM,YAAY,aAAa,IAAI;AACnC,QAAI,QAAQ,YAAY,YAAY;AAClC;AAAA,IACF;AACA,cAAU;AACV,aAAS;AAAA,EACX;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,MAAc,YAA4B;AACnE,MAAI,QAAQ;AACZ,MAAI,SAAS;AACb,QAAM,QAAQ,MAAM,KAAK,IAAI;AAC7B,WAAS,QAAQ,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AACzD,UAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,UAAM,YAAY,aAAa,IAAI;AACnC,QAAI,QAAQ,YAAY,YAAY;AAClC;AAAA,IACF;AACA,aAAS,GAAG,IAAI,GAAG,MAAM;AACzB,aAAS;AAAA,EACX;AACA,SAAO;AACT;AAQA,SAAS,uBAAuB,MAAc,YAAgD;AAC5F,MAAI,eAAe,UAAa,aAAa,IAAI,KAAK,YAAY;AAChE,WAAO,EAAE,MAAM,MAAM,QAAQ,IAAI,MAAM,GAAG;AAAA,EAC5C;AACA,MAAI,cAAc,GAAG;AACnB,WAAO,EAAE,MAAM,IAAI,QAAQ,IAAI,MAAM,GAAG;AAAA,EAC1C;AACA,MAAI,eAAe,GAAG;AACpB,WAAO,EAAE,MAAM,IAAI,QAAQ,UAAU,MAAM,GAAG;AAAA,EAChD;AAEA,QAAM,SAAS,cAAc,aAAa,eAAe,IAAI,kBAAkB;AAC/E,QAAM,cAAc,aAAa,aAAa,MAAM;AACpD,QAAM,OAAO,oBAAoB,MAAM,KAAK,KAAK,cAAc,CAAC,CAAC;AACjE,QAAM,OAAO,kBAAkB,MAAM,cAAc,aAAa,IAAI,CAAC;AACrE,SAAO,EAAE,MAAM,QAAQ,KAAK;AAC9B;AAOA,SAAS,mBAAuC;AAC9C,SAAO,QAAQ,OAAO,WAAW,QAAQ,OAAO,UAAU,IAAI,QAAQ,OAAO,UAAU;AACzF;AAEA,SAAS,sBAAsB,SAAqC;AAClE,SAAO,KAAK,IAAI,WAAW,KAAK,GAAG;AACrC;AAEA,SAAS,cAAc,SAKJ;AACjB,QAAM,SAAS,GAAG,QAAQ,MAAM,IAAI,QAAQ,QAAQ;AACpD,QAAM,oBAAoB,KAAK,IAAI,GAAG,QAAQ,UAAU,aAAa,MAAM,CAAC;AAC5E,SAAO,uBAAuB,cAAc,QAAQ,KAAK,GAAG,iBAAiB;AAC/E;AAEA,SAAS,aAAa,GAA+B,KAA6B;AAChF,SAAO,GAAG,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,EAAE,IAAI,IAAI,IAAI,CAAC;AACpE;AAEA,SAAS,WAAW,OAAkB,QAA6B;AACjE,SAAO,WAAW,aAAa,YAAO,KAAK,KAAK;AAClD;AAEO,SAAS,eAAe,SAAoC;AACjE,MAAI,QAAQ,QAAQ;AAClB,WAAO;AAAA,MACL,OAAO,OAAO;AACZ,gBAAQ,OAAO,MAAM,GAAG,cAAc,KAAK,CAAC;AAAA,CAAI;AAAA,MAClD;AAAA,IACF;AAAA,EACF;AAEA,QAAM,IAAI,IAAI,MAAM,EAAE,OAAO,QAAQ,QAAQ,IAAI,EAAE,CAAC;AACpD,QAAM,UAAU,sBAAsB,QAAQ,WAAW,iBAAiB,CAAC;AAC3E,SAAO;AAAA,IACL,OAAO,OAAO;AACZ,cAAQ,MAAM,MAAM;AAAA,QAClB,KAAK;AACH,kBAAQ,OAAO,MAAM,MAAM,IAAI;AAC/B;AAAA,QACF,KAAK,aAAa;AAChB,gBAAM,SAAS,WAAW,UAAK,MAAM,MAAM;AAC3C,kBAAQ,OAAO;AAAA,YACb,GAAG,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,MAAM,QAAQ,CAAC,IAAI;AAAA,cAC5C;AAAA,cACA,cAAc;AAAA,gBACZ;AAAA,gBACA,UAAU,MAAM;AAAA,gBAChB,OAAO,MAAM;AAAA,gBACb;AAAA,cACF,CAAC;AAAA,YACH,CAAC;AAAA;AAAA,UACH;AACA;AAAA,QACF;AAAA,QACA,KAAK,eAAe;AAClB,gBAAM,SAAS,WAAW,UAAK,MAAM,MAAM;AAC3C,kBAAQ,OAAO;AAAA,YACb,GAAG,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,MAAM,QAAQ,CAAC,IAAI;AAAA,cAC7C;AAAA,cACA,cAAc;AAAA,gBACZ;AAAA,gBACA,UAAU,MAAM;AAAA,gBAChB,OAAO,MAAM;AAAA,gBACb;AAAA,cACF,CAAC;AAAA,YACH,CAAC;AAAA;AAAA,UACH;AACA;AAAA,QACF;AAAA,QACA,KAAK;AACH,kBAAQ,OAAO,MAAM,GAAG,EAAE,IAAI,QAAQ,CAAC,IAAI,MAAM,OAAO;AAAA,CAAI;AAC5D;AAAA,QACF,KAAK;AACH,kBAAQ,OAAO,MAAM,EAAE,IAAI,YAAY,CAAC;AACxC;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AACF;;;AC5NA,SAAS,eAAAC,cAAa,kBAAkB;;;ACOjC,IAAM,qBAAN,MAAyB;AAAA,EAM9B,YACmB,UACA,WACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAFgB;AAAA,EACA;AAAA,EAPnB;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,YAAY;AAAA,EAOZ,MAAM,aAAa,MAAc,QAAoD;AACnF,QAAI,KAAK,UAAW,OAAM,IAAI,MAAM,uCAAuC;AAC3E,QAAI,KAAK,SAAU,OAAM,IAAI,MAAM,4CAA4C;AAC/E,YAAQ,eAAe;AAEvB,SAAK,WAAW;AAChB,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACF,gBAAU,MAAM,KAAK,YAAY,MAAM;AACvC,YAAM,QAAQ,OAAO,MAAM;AAC3B,eAAS,MAAM,KAAK,UAAU,QAAQ,EAAE,SAAS,MAAM,OAAO,CAAC;AAAA,IACjE,SAAS,OAAO;AACd,kBAAY;AAAA,IACd;AAEA,QAAI;AACJ,QAAI;AACF,YAAM,SAAS,MAAM,QAAQ,UAAU,SAAY,MAAM;AAAA,IAC3D,SAAS,OAAO;AACd,mBAAa;AAAA,IACf,UAAE;AACA,WAAK,WAAW;AAAA,IAClB;AAEA,QAAI,cAAc,OAAW,OAAM;AACnC,QAAI,eAAe,OAAW,OAAM;AACpC,QAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,2CAA2C;AACxE,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,UAAyB;AAC7B,QAAI,KAAK,UAAW;AACpB,SAAK,YAAY;AAEjB,UAAM,UAAU,KAAK,YAAa,MAAM,KAAK,kBAAkB,MAAM,MAAM,MAAS;AACpF,UAAM,SAAS,QAAQ;AAAA,EACzB;AAAA,EAEA,MAAM,YAAY,QAAgD;AAChE,QAAI,KAAK,SAAU,QAAO,KAAK;AAC/B,QAAI,CAAC,KAAK,kBAAkB;AAC1B,WAAK,mBAAmB,KAAK,SAAS,cAAc,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,YAAY;AAChF,aAAK,WAAW;AAChB,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AACA,WAAO,KAAK;AAAA,EACd;AACF;;;ACpEA,SAAS,kBAAkB;AAC3B,SAAS,OAAO,SAAS,UAAU,IAAI,QAAAC,OAAM,iBAAiB;AAC9D,SAAS,SAAS,YAAY,UAAU,WAAAC,UAAS,WAAW;AAC5D;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AAIP,IAAM,2BAA2B;AACjC,IAAM,sBAAsB;AAiD5B,SAAS,eAAe,WAA2B;AACjD,SAAO,KAAK,IAAI,GAAG,KAAK,KAAK,YAAY,GAAK,CAAC;AACjD;AAEA,SAAS,UAAa,SAAqB,QAAkC;AAC3E,UAAQ,eAAe;AACvB,MAAI,CAAC,OAAQ,QAAO;AACpB,SAAO,IAAI,QAAW,CAAC,gBAAgB,WAAW;AAChD,UAAM,UAAU,MAAM,OAAO,OAAO,UAAU,IAAI,MAAM,2BAA2B,CAAC;AACpF,WAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AACxD,YAAQ;AAAA,MACN,CAAC,UAAU;AACT,eAAO,oBAAoB,SAAS,OAAO;AAC3C,uBAAe,KAAK;AAAA,MACtB;AAAA,MACA,CAAC,UAAU;AACT,eAAO,oBAAoB,SAAS,OAAO;AAC3C,eAAO,KAAK;AAAA,MACd;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,SAAS,WAAW,OAAuB;AACzC,SAAO,IAAI,MAAM,WAAW,KAAK,OAAO,CAAC;AAC3C;AAEA,eAAe,eAAe,MAA4C;AACxE,QAAM,QAAQ,oBAAI,IAAoB;AACtC,iBAAe,MAAM,WAAkC;AACrD,eAAW,SAAS,MAAM,QAAQ,WAAW,EAAE,eAAe,KAAK,CAAC,GAAG;AACrE,YAAM,eAAeA,SAAQ,WAAW,MAAM,IAAI;AAClD,UAAI,MAAM,YAAY,GAAG;AACvB,cAAM,MAAM,YAAY;AAAA,MAC1B,WAAW,MAAM,OAAO,GAAG;AACzB,cAAM,OAAO,SAAS,MAAM,YAAY,EAAE,MAAM,GAAG,EAAE,KAAK,GAAG;AAC7D,cAAM,IAAI,OAAO,MAAMD,MAAK,YAAY,GAAG,IAAI;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AACA,QAAM,MAAM,IAAI;AAChB,SAAO;AACT;AAEO,IAAM,iBAAN,MAAwC;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACT,YAAY;AAAA,EAEZ,YACE,SACA,SACA;AACA,SAAK,WAAW;AAChB,SAAK,iBAAiB,QAAQ;AAC9B,SAAK,oBAAoB,QAAQ;AACjC,SAAK,UAAU,QAAQ;AAAA,EACzB;AAAA,EAEA,MAAM,eAAe,SAAyC;AAC5D,SAAK,cAAc;AACnB,SAAK,SAAS,eAAe;AAC7B,UAAM,SAAS,kBAAkB,WAAW,CAAC;AAC7C,UAAM,aAAa,qBAAqB,WAAW,CAAC;AACpD,UAAM,UAAU,KAAK,OAAO;AAAA,MAAS,WAAW,UAAU,CAAC;AAAA,EAA8B,MAAM;AAAA,cAAiB,WAAW,UAAU,CAAC,WAAW,WAAW,UAAU,CAAC;AAEvK,QAAI;AACF,YAAM,WAAW,MAAM;AAAA,QACrB,KAAK,SAAS,QAAQ;AAAA,UACpB;AAAA,UACA,KAAK;AAAA,UACL;AAAA,UACA,eAAe,KAAK,iBAAiB;AAAA,QACvC;AAAA,QACA,KAAK;AAAA,MACP;AACA,YAAM,YAAY;AAAA,EAAK,MAAM;AAAA;AAC7B,YAAM,cAAc,SAAS,OAAO,YAAY,SAAS;AACzD,UAAI,cAAc,GAAG;AACnB,eAAO,EAAE,UAAU,SAAS,UAAU,QAAQ,SAAS,QAAQ,QAAQ,GAAG;AAAA,MAC5E;AACA,YAAM,gBAAgB,SAAS,OAAO,MAAM,cAAc,UAAU,MAAM,EAAE,KAAK;AACjF,aAAO;AAAA,QACL,UAAU,SAAS;AAAA,QACnB,QAAQ,SAAS,OAAO,MAAM,GAAG,WAAW;AAAA,QAC5C,QAAQ,gBAAgB,OAAO,KAAK,eAAe,QAAQ,EAAE,SAAS,MAAM,IAAI;AAAA,MAClF;AAAA,IACF,SAAS,OAAO;AACd,UAAI,iBAAiB,qCAAqC;AACxD,eAAO;AAAA,UACL,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,QAAQ,2BAA2B,KAAK,iBAAiB;AAAA,QAC3D;AAAA,MACF;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,MAA+B;AAC5C,SAAK,cAAc;AACnB,UAAM,UAAU,MAAM,KAAK,SAAS,GAAG,aAAa,KAAK,aAAa,IAAI,CAAC;AAC3E,WAAO,QAAQ,SAAS,MAAM;AAAA,EAChC;AAAA,EAEA,MAAM,WAAW,OAAyE;AACxF,SAAK,cAAc;AACnB,eAAW,QAAQ,OAAO;AACxB,YAAM,SAAS,KAAK,aAAa,KAAK,IAAI;AAC1C,YAAM,KAAK,SAAS,QAAQ,eAAe,YAAY,WAAW,QAAQ,MAAM,CAAC,CAAC,EAAE;AACpF,YAAM,KAAK,SAAS,GAAG,WAAW,OAAO,KAAK,KAAK,OAAO,GAAG,MAAM;AAAA,IACrE;AAAA,EACF;AAAA,EAEA,UAAgB;AACd,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,aAAa,MAAsB;AACjC,UAAM,SAAS,WAAW,IAAI,IAAIC,SAAQ,IAAI,IAAIA,SAAQ,KAAK,gBAAgB,IAAI;AACnF,QAAI,WAAW,KAAK,kBAAkB,CAAC,OAAO,WAAW,GAAG,KAAK,cAAc,GAAG,GAAG;AACnF,YAAM,IAAI,MAAM,0CAA0C,IAAI,EAAE;AAAA,IAClE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,gBAAsB;AACpB,QAAI,KAAK,UAAW,OAAM,IAAI,MAAM,4CAA4C;AAAA,EAClF;AACF;AAEA,IAAM,+BAAN,MAAmC;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACT,cAAc,oBAAI,IAAY;AAAA,EAE9B,YAAY,KAAa,qBAA6B,SAA4B;AAChF,SAAK,OAAOA,SAAQ,GAAG;AACvB,SAAK,uBAAuB;AAC5B,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,MAAM,eAAe,QAAoD;AACvE,YAAQ,eAAe;AACvB,UAAM,gBAAgB,MAAM;AAAA,MAC1B,KAAK,SAAS,QAAQ,eAAe,YAAY,WAAW,KAAK,oBAAoB,CAAC,EAAE;AAAA,MACxF;AAAA,IACF;AACA,QAAI,cAAc,aAAa,GAAG;AAChC,YAAM,IAAI;AAAA,QACR,sCAAsC,KAAK,oBAAoB,KAAK,cAAc,MAAM;AAAA,MAC1F;AAAA,IACF;AACA,UAAM,aAAa,MAAM,eAAe,KAAK,IAAI;AACjD,QAAI,eAAe;AACnB,QAAI,eAAe;AACnB,QAAI,eAAe;AACnB,QAAI,mBAAmB;AAEvB,eAAW,QAAQ,KAAK,aAAa;AACnC,UAAI,WAAW,IAAI,IAAI,EAAG;AAC1B,YAAM;AAAA,QACJ,KAAK,SAAS,GAAG,WAAW,KAAK,YAAY,IAAI,CAAC,EAAE,MAAM,MAAM,MAAS;AAAA,QACzE;AAAA,MACF;AACA;AAAA,IACF;AACA,eAAW,CAAC,MAAM,IAAI,KAAK,YAAY;AACrC,cAAQ,eAAe;AACvB,YAAM;AAAA,QACJ,KAAK,SAAS,GAAG,WAAWA,SAAQ,KAAK,MAAM,IAAI,GAAG,KAAK,YAAY,IAAI,CAAC;AAAA,QAC5E;AAAA,MACF;AACA,UAAI,KAAK,YAAY,IAAI,IAAI,EAAG;AAAA,UAC3B;AACL,0BAAoB;AAAA,IACtB;AACA,SAAK,cAAc,IAAI,IAAI,WAAW,KAAK,CAAC;AAC5C,WAAO,KAAK,QAAQ,cAAc,cAAc,cAAc,gBAAgB;AAAA,EAChF;AAAA,EAEA,MAAM,YAAY,QAAoD;AACpE,YAAQ,eAAe;AACvB,UAAM,WAAW,MAAM;AAAA,MACrB,KAAK,SAAS,QAAQ;AAAA,QACpB;AAAA,QACA,KAAK;AAAA,MACP;AAAA,MACA;AAAA,IACF;AACA,QAAI,SAAS,aAAa,GAAG;AAC3B,YAAM,IAAI,MAAM,gDAAgD,SAAS,MAAM,EAAE;AAAA,IACnF;AACA,UAAM,UAAU,SAAS,OAAO,KAAK,IACjC,OAAO,KAAK,SAAS,OAAO,KAAK,GAAG,QAAQ,EAAE,SAAS,MAAM,IAC7D;AACJ,UAAM,cAAc,IAAI;AAAA,MACtB,QACG,MAAM,IAAI,EACV,OAAO,OAAO,EACd,IAAI,CAAC,SAAU,KAAK,WAAW,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI,IAAK;AAAA,IACjE;AACA,QAAI,eAAe;AACnB,QAAI,eAAe;AACnB,QAAI,eAAe;AACnB,QAAI,mBAAmB;AAEvB,eAAW,QAAQ,KAAK,aAAa;AACnC,UAAI,YAAY,IAAI,IAAI,EAAG;AAC3B,YAAM,GAAGA,SAAQ,KAAK,MAAM,IAAI,GAAG,EAAE,OAAO,KAAK,CAAC;AAClD;AAAA,IACF;AACA,eAAW,QAAQ,aAAa;AAC9B,cAAQ,eAAe;AACvB,YAAM,YAAY,KAAK,WAAW,IAAI;AACtC,YAAM,UAAU,MAAMD,MAAK,SAAS,EAAE;AAAA,QACpC,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AACA,YAAM,UAAU,MAAM;AAAA,QACpB,KAAK,SAAS,GAAG,aAAa,KAAK,YAAY,IAAI,CAAC;AAAA,QACpD;AAAA,MACF;AACA,YAAM,MAAM,QAAQ,SAAS,GAAG,EAAE,WAAW,KAAK,CAAC;AACnD,YAAM,WAAW,UAAU,MAAM,SAAS,SAAS,IAAI;AACvD,UAAI,CAAC,UAAU,OAAO,OAAO,GAAG;AAC9B,cAAM,UAAU,WAAW,OAAO;AAClC,YAAI,QAAS;AAAA,YACR;AACL,4BAAoB,QAAQ;AAAA,MAC9B;AAAA,IACF;AACA,SAAK,cAAc;AACnB,WAAO,KAAK,QAAQ,cAAc,cAAc,cAAc,gBAAgB;AAAA,EAChF;AAAA,EAEA,YAAY,MAAsB;AAChC,WAAO,GAAG,KAAK,oBAAoB,IAAI,IAAI;AAAA,EAC7C;AAAA,EAEA,WAAW,MAAsB;AAC/B,UAAM,SAASC,SAAQ,KAAK,MAAM,IAAI;AACtC,QAAI,WAAW,KAAK,QAAQ,CAAC,OAAO,WAAW,GAAG,KAAK,IAAI,GAAG,GAAG,EAAE,GAAG;AACpE,YAAM,IAAI,MAAM,kDAAkD,IAAI,EAAE;AAAA,IAC1E;AACA,WAAO;AAAA,EACT;AAAA,EAEA,QACE,cACA,cACA,cACA,kBACqB;AACrB,WAAO;AAAA,MACL,QACE,gBAAgB,gBAAgB,gBAAgB,mBAC5C,iBACA;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,yBAAN,MAAwD;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACT,WAAW;AAAA,EACX,YAAY;AAAA,EAEZ,YAAY,QAA2B,SAAiC,QAAsB;AAC5F,UAAM,gBAAgB,QAAQ,uBAAuB;AACrD,SAAK,UAAU;AACf,SAAK,gBAAgB,IAAI,6BAA6B,QAAQ,KAAK,eAAe,MAAM;AACxF,SAAK,UAAU,IAAI,eAAe,QAAQ;AAAA,MACxC;AAAA,MACA,kBAAkB,QAAQ;AAAA,MAC1B;AAAA,IACF,CAAC;AACD,SAAK,UAAU;AAAA,MACb,MAAM;AAAA,MACN;AAAA,MACA,UAAU;AAAA,MACV,eAAe;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,QAAqC;AAChD,SAAK,cAAc;AACnB,YAAQ,eAAe;AACvB,QAAI,KAAK,UAAU;AACjB,YAAM,UAAU,KAAK,QAAQ,MAAM,GAAG,MAAM;AAC5C,WAAK,WAAW;AAAA,IAClB;AACA,UAAM,KAAK,cAAc,EAAE,aAAa,YAAY,OAAO,CAAC;AAAA,EAC9D;AAAA,EAEA,MAAM,MAAM,QAAqC;AAC/C,SAAK,cAAc;AACnB,YAAQ,eAAe;AACvB,UAAM,KAAK,cAAc,EAAE,aAAa,SAAS,OAAO,CAAC;AACzD,UAAM,UAAU,KAAK,QAAQ,KAAK,GAAG,MAAM;AAC3C,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,MAAM,cAAc,SAGa;AAC/B,SAAK,cAAc;AACnB,WAAO,QAAQ,gBAAgB,aAC3B,KAAK,cAAc,eAAe,QAAQ,MAAM,IAChD,KAAK,cAAc,YAAY,QAAQ,MAAM;AAAA,EACnD;AAAA,EAEA,MAAM,UAAyB;AAC7B,QAAI,KAAK,UAAW;AACpB,SAAK,YAAY;AACjB,SAAK,QAAQ,QAAQ;AACrB,UAAM,KAAK,QAAQ,OAAO,IAAI,IAAI;AAAA,EACpC;AAAA,EAEA,gBAAsB;AACpB,QAAI,KAAK,UAAW,OAAM,IAAI,MAAM,4CAA4C;AAAA,EAClF;AACF;AAEO,IAAM,0BAAN,MAA0D;AAAA,EACtD,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASf;AAAA,EACA;AAAA,EAET,YAAY,SAAiC;AAC3C,SAAK,WAAW;AAChB,SAAK,UAAU,QAAQ;AAAA,EACzB;AAAA,EAEA,MAAM,cAAc,EAAE,OAAO,GAAuD;AAClF,YAAQ,eAAe;AACvB,UAAM,SAAS,KAAK,WAAY,IAAI,QAAQ;AAC5C,UAAM,SAAS,MAAM;AAAA,MACnB,OAAO;AAAA,QACL;AAAA,UACE,GAAI,KAAK,SAAS,WAAW,EAAE,UAAU,KAAK,SAAS,SAAS,IAAI,CAAC;AAAA,UACrE,kBAAkB;AAAA,UAClB,oBAAoB;AAAA,UACpB,YAAY,KAAK,SAAS,cAAc;AAAA,UACxC,QAAQ,EAAE,WAAW,QAAQ;AAAA,QAC/B;AAAA,QACA,EAAE,SAAS,IAAI;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AACA,QAAI;AACF,YAAM,UAAU,MAAM,UAAU,OAAO,WAAW,GAAG,MAAM;AAC3D,UAAI,CAAC,QAAS,OAAM,IAAI,MAAM,qDAAqD;AACnF,YAAM,sBACJ,KAAK,SAAS,uBAAuB,GAAG,QAAQ,QAAQ,QAAQ,EAAE,CAAC;AACrE,aAAO,IAAI,uBAAuB,QAAQ,EAAE,GAAG,KAAK,UAAU,oBAAoB,GAAG,MAAM;AAAA,IAC7F,SAAS,OAAO;AACd,YAAM,OAAO,OAAO,IAAI,IAAI,EAAE,MAAM,MAAM,MAAS;AACnD,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;ACzbA,SAAS,cAAqD,mBAAmB;;;ACU1E,SAAS,kBAAkB,SAAgC;AAChE,QAAM,kBAAkB,QAAQ,uBAAuB;AAAA;AAAA,EAAO,QAAQ,oBAAoB,KAAK;AAE/F,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAcc,sBAAsB;AAAA,kBAC3B,QAAQ,IAAI,YAAY,CAAC;AAAA,8BACb,QAAQ,QAAQ;AAAA,yBACrB,QAAQ,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2IAU0F,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAO1J;AASO,SAAS,2BAA2B,SAAyC;AAClF,QAAM,oBAAoB,QAAQ,QAAQ,WACtC,iEACA;AACJ,SAAO;AAAA;AAAA;AAAA,oBAGW,QAAQ,QAAQ,aAAa;AAAA,kBAC/B,QAAQ,IAAI,YAAY,CAAC;AAAA,8BACb,QAAQ,QAAQ;AAAA,yBACrB,QAAQ,gBAAgB;AAAA,IAC7C,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUrB;;;AC5EA,SAAqC,sBAAsB;AAU3D,eAAsB,qBAAqB,SAAwD;AACjG,QAAM,UAAU,MAAM,eAAe;AAAA,IACnC,SAAS,QAAQ;AAAA,IACjB,aAAa,QAAQ;AAAA,IACrB,iBAAiB,QAAQ;AAAA,IACzB,mBAAmB,QAAQ;AAAA,EAC7B,CAAC;AACD,SAAO,QAAQ;AACjB;AAOA,eAAsB,YAAY,SAA+C;AAC/E,SAAO,qBAAqB;AAAA,IAC1B,SAAS,eAAe,QAAQ,GAAG;AAAA,IACnC,aAAa;AAAA,IACb,gBAAgB,QAAQ;AAAA,IACxB,mBACE;AAAA,EACJ,CAAC;AACH;;;AFnBO,IAAM,qBAAN,MAAkD;AAAA,EACvD,YAA6B,SAAoC;AAApC;AAAA,EAAqC;AAAA,EAArC;AAAA,EAE7B,MAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIiC;AAC/B,UAAM,eAAe,2BAA2B;AAAA,MAC9C,KAAK,KAAK,QAAQ,MAAM,KAAK,oBAAI,KAAK;AAAA,MACtC,UAAU,KAAK,QAAQ;AAAA,MACvB,kBAAkB,KAAK,QAAQ;AAAA,MAC/B,SAAS,QAAQ;AAAA,IACnB,CAAC;AACD,UAAM,QAAQ,MAAM,qBAAqB;AAAA,MACvC,SAAS,QAAQ;AAAA,MACjB,aAAa,QAAQ,QAAQ;AAAA,MAC7B,gBAAgB,KAAK,QAAQ;AAAA,MAC7B,mBACE;AAAA,IACJ,CAAC;AACD,UAAM,SAAS,MAAM,aAAa;AAAA,MAChC,OAAO,KAAK,QAAQ;AAAA,MACpB;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA,UAAU,YAAY,KAAK,QAAQ,QAAQ;AAAA,MAC3C,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,cAAc,OAAO,SAAS;AAC5B,mBAAW,YAAY,KAAK,WAAW;AACrC,gBAAM,KAAK,QAAQ,UAAU;AAAA,YAC3B,MAAM;AAAA,YACN,UAAU,SAAS;AAAA,YACnB,OAAO,SAAS;AAAA,YAChB,QAAQ;AAAA,UACV,CAAC;AAAA,QACH;AACA,mBAAW,cAAc,KAAK,aAAa;AACzC,gBAAM,KAAK,QAAQ,UAAU;AAAA,YAC3B,MAAM;AAAA,YACN,UAAU,WAAW;AAAA,YACrB,QAAQ,WAAW;AAAA,YACnB,QAAQ;AAAA,UACV,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,iBAAiB,OAAO,UAAU,QAAQ;AAAA,MAC9C,CAAC,SAAyD,KAAK,SAAS;AAAA,IAC1E;AACA,UAAM,UAAU,eAAe,GAAG,EAAE,GAAG;AACvC,QAAI,YAAY,QAAW;AACzB,YAAM,IAAI,MAAM,qDAAqD;AAAA,IACvE;AAEA,UAAM,aAA6B;AAAA,MACjC,EAAE,MAAM,UAAU,SAAS,aAAa;AAAA,MACxC,EAAE,MAAM,QAAQ,SAAS,KAAK;AAAA,MAC9B,GAAG,OAAO;AAAA,IACZ;AACA,WAAO,EAAE,YAAY,QAAQ;AAAA,EAC/B;AACF;;;AGnFA,SAA4B,aAAa;AACzC,SAAS,SAAAC,QAAO,YAAAC,WAAU,aAAAC,kBAAiB;AAC3C,SAAS,WAAAC,UAAS,cAAAC,aAAY,WAAAC,gBAAe;AAUtC,IAAM,eAAN,MAAsC;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa,oBAAI,IAAkB;AAAA,EAC5C,YAAY;AAAA,EAEZ,YAAY,SAA+B,QAAsB;AAC/D,SAAK,OAAOA,SAAQ,QAAQ,GAAG;AAC/B,SAAK,oBAAoB,QAAQ;AACjC,SAAK,OAAO,QAAQ,OAAO,QAAQ;AACnC,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,MAAM,eAAe,SAAyC;AAC5D,SAAK,cAAc;AACnB,SAAK,SAAS,eAAe;AAE7B,WAAO,IAAI,QAAuB,CAAC,eAAe,WAAW;AAC3D,YAAM,QAAQ,MAAM,WAAW,CAAC,OAAO,OAAO,GAAG;AAAA,QAC/C,KAAK,KAAK;AAAA,QACV,KAAK,KAAK;AAAA,QACV,UAAU;AAAA,QACV,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,MAClC,CAAC;AACD,WAAK,WAAW,IAAI,KAAK;AAEzB,UAAI,SAAS;AACb,UAAI,SAAS;AACb,UAAI,WAAW;AACf,UAAI;AACJ,UAAI;AACJ,UAAI,UAAU;AAEd,YAAM,SAAS,CAAC,aAAyB;AACvC,YAAI,QAAS;AACb,kBAAU;AACV,qBAAa,KAAK;AAClB,YAAI,WAAY,cAAa,UAAU;AACvC,aAAK,SAAS,oBAAoB,SAAS,OAAO;AAClD,aAAK,WAAW,OAAO,KAAK;AAC5B,iBAAS;AAAA,MACX;AACA,YAAM,YAAY,CAAC,WAA2B;AAC5C,YAAI,CAAC,MAAM,IAAK;AAChB,YAAI;AACF,kBAAQ,KAAK,CAAC,MAAM,KAAK,MAAM;AAAA,QACjC,QAAQ;AACN,gBAAM,KAAK,MAAM;AAAA,QACnB;AAAA,MACF;AACA,YAAM,mBAAmB,MAAM;AAC7B,kBAAU,SAAS;AACnB,qBAAa,WAAW,MAAM,UAAU,SAAS,GAAG,GAAG;AACvD,mBAAW,MAAM;AAAA,MACnB;AACA,YAAM,UAAU,MAAM;AACpB,sBAAc,KAAK,SAAS,UAAU,IAAI,MAAM,0BAA0B;AAC1E,yBAAiB;AAAA,MACnB;AACA,YAAM,QAAQ,WAAW,MAAM;AAC7B,mBAAW;AACX,yBAAiB;AAAA,MACnB,GAAG,KAAK,iBAAiB;AAEzB,YAAM,QAAQ,YAAY,MAAM;AAChC,YAAM,QAAQ,YAAY,MAAM;AAChC,YAAM,QAAQ,GAAG,QAAQ,CAAC,UAAkB;AAC1C,kBAAU;AAAA,MACZ,CAAC;AACD,YAAM,QAAQ,GAAG,QAAQ,CAAC,UAAkB;AAC1C,kBAAU;AAAA,MACZ,CAAC;AACD,YAAM,KAAK,SAAS,CAAC,UAAU,OAAO,MAAM,OAAO,KAAK,CAAC,CAAC;AAC1D,YAAM,KAAK,SAAS,CAAC,MAAM,WAAW;AACpC,eAAO,MAAM;AACX,cAAI,gBAAgB,QAAW;AAC7B,mBAAO,WAAW;AAClB;AAAA,UACF;AACA,cAAI,UAAU;AACZ,0BAAc;AAAA,cACZ,UAAU;AAAA,cACV;AAAA,cACA,QAAQ,GAAG,MAAM,GAAG,SAAS,OAAO,EAAE,2BAA2B,KAAK,iBAAiB;AAAA,YACzF,CAAC;AACD;AAAA,UACF;AACA,wBAAc;AAAA,YACZ,UAAU,SAAS,SAAS,MAAM;AAAA,YAClC;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AAAA,MACH,CAAC;AACD,WAAK,SAAS,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,IACjE,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,SAAS,MAA+B;AAC5C,SAAK,cAAc;AACnB,WAAOJ,UAAS,KAAK,aAAa,IAAI,GAAG,MAAM;AAAA,EACjD;AAAA,EAEA,MAAM,WAAW,OAAyE;AACxF,SAAK,cAAc;AACnB,UAAM,QAAQ;AAAA,MACZ,MAAM,IAAI,OAAO,EAAE,MAAM,QAAQ,MAAM;AACrC,cAAM,SAAS,KAAK,aAAa,IAAI;AACrC,cAAMD,OAAMG,SAAQ,MAAM,GAAG,EAAE,WAAW,KAAK,CAAC;AAChD,cAAMD,WAAU,QAAQ,OAAO;AAAA,MACjC,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,UAAgB;AACd,QAAI,KAAK,UAAW;AACpB,SAAK,YAAY;AACjB,eAAW,SAAS,KAAK,YAAY;AACnC,UAAI,CAAC,MAAM,IAAK;AAChB,UAAI;AACF,gBAAQ,KAAK,CAAC,MAAM,KAAK,SAAS;AAAA,MACpC,QAAQ;AACN,cAAM,KAAK,SAAS;AAAA,MACtB;AAAA,IACF;AACA,SAAK,WAAW,MAAM;AAAA,EACxB;AAAA,EAEA,aAAa,MAAsB;AACjC,WAAOE,YAAW,IAAI,IAAI,OAAOC,SAAQ,KAAK,MAAM,IAAI;AAAA,EAC1D;AAAA,EAEA,gBAAsB;AACpB,QAAI,KAAK,UAAW,OAAM,IAAI,MAAM,0CAA0C;AAAA,EAChF;AACF;AAEO,IAAM,uBAAN,MAAsD;AAAA,EAClD;AAAA,EACA;AAAA,EACT,YAAY;AAAA,EAEZ,YAAY,SAA+B,QAAsB;AAC/D,UAAM,gBAAgBA,SAAQ,QAAQ,GAAG;AACzC,SAAK,UAAU,IAAI,aAAa,SAAS,MAAM;AAC/C,SAAK,UAAU;AAAA,MACb,MAAM;AAAA,MACN;AAAA,MACA,UAAU;AAAA,MACV,eAAe;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,QAAqC;AAChD,SAAK,cAAc;AACnB,YAAQ,eAAe;AAAA,EACzB;AAAA,EAEA,MAAM,MAAM,QAAqC;AAC/C,SAAK,cAAc;AACnB,YAAQ,eAAe;AAAA,EACzB;AAAA,EAEA,MAAM,UAAyB;AAC7B,QAAI,KAAK,UAAW;AACpB,SAAK,YAAY;AACjB,SAAK,QAAQ,QAAQ;AAAA,EACvB;AAAA,EAEA,gBAAsB;AACpB,QAAI,KAAK,UAAW,OAAM,IAAI,MAAM,0CAA0C;AAAA,EAChF;AACF;AAEO,IAAM,wBAAN,MAAwD;AAAA,EAS7D,YAA6B,SAA+B;AAA/B;AAAA,EAAgC;AAAA,EAAhC;AAAA,EARpB,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUxB,MAAM,cAAc,EAAE,OAAO,GAAuD;AAClF,YAAQ,eAAe;AACvB,WAAO,IAAI,qBAAqB,KAAK,SAAS,MAAM;AAAA,EACtD;AACF;;;AC3MA,SAAS,YAA0B,YAAY;AAGxC,SAAS,oBAAoB,YAAyC;AAC3E,SAAO;AAAA,IACL,cAAc,KAAK;AAAA,MACjB,aACE;AAAA,MACF,aAAa,WAA6B;AAAA,QACxC,MAAM;AAAA,QACN,sBAAsB;AAAA,QACtB,UAAU,CAAC,MAAM;AAAA,QACjB,YAAY;AAAA,UACV,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,WAAW;AAAA,YACX,aAAa;AAAA,UACf;AAAA,QACF;AAAA,MACF,CAAC;AAAA,MACD,SAAS,OAAO,EAAE,KAAK,GAAG,EAAE,YAAY,MAAM;AAC5C,cAAM,cAAc,KAAK,KAAK;AAC9B,YAAI,CAAC,YAAa,OAAM,IAAI,MAAM,kCAAkC;AACpE,eAAO,WAAW,aAAa,aAAa,WAAW;AAAA,MACzD;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AC3BA,SAAS,oBAAoB;AAUtB,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA,MAAM,QAAQ;AAChB,GAAmC;AACjC,MAAI,aAAa,UAAU;AACzB,UAAM,IAAI;AAAA,MACR,yBAAyB,QAAQ;AAAA,IACnC;AAAA,EACF;AAEA,MAAI,CAAC,IAAI,gBAAgB;AACvB,UAAM,IAAI,SAAS,4DAA4D;AAAA,EACjF;AAEA,QAAM,SAAS,aAAa,EAAE,QAAQ,IAAI,eAAe,CAAC;AAC1D,SAAO,OAAO,KAAK,KAAK;AAC1B;;;ARPA,SAAS,uBAAuB,SAA0D;AACxF,UAAQ,QAAQ,UAAU;AAAA,IACxB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO,IAAI,sBAAsB;AAAA,QAC/B,KAAK,QAAQ;AAAA,QACb,kBAAkB,QAAQ;AAAA,MAC5B,CAAC;AAAA,IACH,KAAK;AACH,aAAO,IAAI,wBAAwB;AAAA,QACjC,KAAK,QAAQ;AAAA,QACb,kBAAkB,QAAQ;AAAA,QAC1B,UAAU,QAAQ,IAAI;AAAA,MACxB,CAAC;AAAA,EACL;AACF;AAEA,eAAsB,WAAW,SAA6C;AAC5E,MAAI;AACJ,MAAI;AACF,UAAM,QAAQ,oBAAoB;AAAA,MAChC,UAAU,QAAQ;AAAA,MAClB,OAAO,QAAQ;AAAA,IACjB,CAAC;AACD,UAAM,iBAAiB,MAAM,YAAY;AAAA,MACvC,KAAK,QAAQ;AAAA,MACb,gBAAgB,QAAQ;AAAA,IAC1B,CAAC;AAED,UAAM,mBAAmB,uBAAuB,OAAO;AACvD,QAAI,kBAAkB;AACpB,2BAAqB,IAAI;AAAA,QACvB;AAAA,QACA,IAAI,mBAAmB;AAAA,UACrB;AAAA,UACA,UAAU,QAAQ;AAAA,UAClB,gBAAgB,QAAQ;AAAA,UACxB,kBAAkB,QAAQ;AAAA,UAC1B,SAAS,QAAQ;AAAA,QACnB,CAAC;AAAA,MACH;AAAA,IACF;AACA,UAAM,QAAQ;AAAA,MACZ,GAAG;AAAA,MACH,GAAI,qBAAqB,oBAAoB,kBAAkB,IAAI,CAAC;AAAA,IACtE;AAEA,UAAM,SAAS,WAAW;AAAA,MACxB;AAAA,MACA;AAAA,MACA,cAAc,kBAAkB;AAAA,QAC9B,KAAK,oBAAI,KAAK;AAAA,QACd,UAAU,QAAQ;AAAA,QAClB,kBAAkB,QAAQ;AAAA,QAC1B,sBAAsB,kBAAkB;AAAA,MAC1C,CAAC;AAAA,MACD,QAAQ,QAAQ;AAAA,MAChB,UAAUC,aAAY,QAAQ,QAAQ;AAAA,MACtC,aAAa,QAAQ;AAAA,MACrB,YAAY;AAAA,IACd,CAAC;AAED,qBAAiB,QAAQ,OAAO,QAAQ;AACtC,cAAQ,KAAK,MAAM;AAAA,QACjB,KAAK;AACH,gBAAM,QAAQ,QAAQ,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK,CAAC;AACvD;AAAA,QACF,KAAK;AACH,gBAAM,QAAQ,QAAQ,EAAE,MAAM,aAAa,UAAU,KAAK,UAAU,OAAO,KAAK,MAAM,CAAC;AACvF;AAAA,QACF,KAAK;AACH,gBAAM,QAAQ,QAAQ;AAAA,YACpB,MAAM;AAAA,YACN,UAAU,KAAK;AAAA,YACf,QAAQ,KAAK;AAAA,UACf,CAAC;AACD;AAAA,QACF,KAAK;AACH,gBAAM,QAAQ,QAAQ;AAAA,YACpB,MAAM;AAAA,YACN,SAAS,GAAG,KAAK,QAAQ,KAAK,gBAAgB,KAAK,KAAK,CAAC;AAAA,UAC3D,CAAC;AACD;AAAA,QACF,KAAK;AACH,gBAAM,QAAQ,QAAQ,EAAE,MAAM,SAAS,SAAS,gBAAgB,KAAK,KAAK,EAAE,CAAC;AAC7E;AAAA,QACF,KAAK;AACH,gBAAM,QAAQ,QAAQ,EAAE,MAAM,QAAQ,OAAO,KAAK,WAAW,CAAC;AAC9D;AAAA,MACJ;AAAA,IACF;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI,QAAQ,QAAQ,SAAS;AAC3B,YAAM,QAAQ,QAAQ,EAAE,MAAM,SAAS,SAAS,UAAU,CAAC;AAC3D,aAAO;AAAA,IACT;AACA,UAAM,QAAQ,QAAQ,EAAE,MAAM,SAAS,SAAS,gBAAgB,KAAK,EAAE,CAAC;AACxE,WAAO;AAAA,EACT,UAAE;AACA,UAAM,oBAAoB,QAAQ;AAAA,EACpC;AACF;;;AS5HA,SAAS,YAAY;AACrB,SAAS,SAAAC,cAAa;AACtB,SAAS,uBAAuB;AAwBhC,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,aAAa,MAA6B;AACjD,MAAI;AACJ,MAAI;AACF,YAAQ,KAAK,MAAM,IAAI;AAAA,EACzB,QAAQ;AACN,UAAM,IAAI,MAAM,sBAAsB;AAAA,EACxC;AAEA,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACjD;AACA,MAAI,OAAO,MAAM,OAAO,YAAY,OAAO,MAAM,OAAO,UAAU;AAChE,UAAM,IAAI,MAAM,uCAAuC;AAAA,EACzD;AACA,MAAI,MAAM,WAAW,UAAU,MAAM,WAAW,cAAc,MAAM,WAAW,aAAa;AAC1F,UAAM,IAAI,MAAM,uBAAuB;AAAA,EACzC;AACA,MAAI,CAAC,SAAS,MAAM,MAAM,GAAG;AAC3B,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AAEA,SAAO;AAAA,IACL,IAAI,MAAM;AAAA,IACV,QAAQ,MAAM;AAAA,IACd,QAAQ,MAAM;AAAA,EAChB;AACF;AAEA,SAAS,cAAc,QAAiC,MAAsB;AAC5E,QAAM,QAAQ,OAAO,IAAI;AACzB,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,IAAI,MAAM,aAAa,IAAI,mBAAmB;AAAA,EACtD;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,MAAsB;AACjD,MACE,CAACC,OAAM,WAAW,IAAI,KACtB,KAAK,SAAS,IAAI,KAClB,KAAK,SAAS,IAAI,KAClBA,OAAM,UAAU,IAAI,MAAM,QAC1B,KAAK,MAAM,GAAG,EAAE,KAAK,CAAC,cAAc,cAAc,OAAO,cAAc,IAAI,GAC3E;AACA,UAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,MAAgC;AACzD,MAAI;AACF,UAAM,QAAiB,KAAK,MAAM,IAAI;AACtC,QAAI,SAAS,KAAK,MAAM,OAAO,MAAM,OAAO,YAAY,OAAO,MAAM,OAAO,WAAW;AACrF,aAAO,MAAM;AAAA,IACf;AAAA,EACF,QAAQ;AAAA,EAER;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,OAAgB,eAA+B;AACvE,QAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU;AACzD,SAAO,QAAQ,MAAM,aAAa,EAAE,KAAK,aAAa;AACxD;AAEA,eAAsB,iBACpB,MACA,MACA,eACyB;AACzB,QAAM,aAAa,kBAAkB,IAAI;AACzC,MAAI;AACF,UAAM,UAAU,aAAa,IAAI;AAEjC,YAAQ,QAAQ,QAAQ;AAAA,MACtB,KAAK,QAAQ;AACX,cAAM,UAAU,cAAc,QAAQ,QAAQ,SAAS;AACvD,cAAM,SAAS,MAAM,KAAK,KAAK,OAAO;AACtC,eAAO;AAAA,UACL,IAAI,QAAQ;AAAA,UACZ,QAAQ;AAAA,YACN,QAAQ,OAAO;AAAA,YACf,QAAQ,OAAO;AAAA,YACf,UAAU,OAAO;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA,KAAK,YAAY;AACf,cAAM,OAAO,oBAAoB,cAAc,QAAQ,QAAQ,MAAM,CAAC;AACtE,eAAO,EAAE,IAAI,QAAQ,IAAI,QAAQ,MAAM,KAAK,GAAG,SAAS,IAAI,EAAE;AAAA,MAChE;AAAA,MACA,KAAK,aAAa;AAChB,cAAM,OAAO,oBAAoB,cAAc,QAAQ,QAAQ,MAAM,CAAC;AACtE,cAAM,UAAU,cAAc,QAAQ,QAAQ,SAAS;AACvD,cAAM,KAAK,GAAG,UAAU,MAAM,OAAO;AACrC,eAAO,EAAE,IAAI,QAAQ,IAAI,QAAQ,KAAK;AAAA,MACxC;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO,EAAE,IAAI,YAAY,OAAO,EAAE,SAAS,iBAAiB,OAAO,aAAa,EAAE,EAAE;AAAA,EACtF;AACF;AAEA,eAAe,cAAc,QAAkB,UAAyC;AACtF,MAAI,CAAC,OAAO,MAAM,GAAG,KAAK,UAAU,QAAQ,CAAC;AAAA,CAAI,GAAG;AAClD,UAAM,KAAK,QAAQ,OAAO;AAAA,EAC5B;AACF;AAEA,eAAsB,UAAU,UAA4B,CAAC,GAAkB;AAC7E,QAAM,gBAAgB,QAAQ,OAAO,QAAQ,IAAI;AACjD,QAAM,QAAQ,QAAQ,SAAS,QAAQ;AACvC,QAAM,SAAS,QAAQ,UAAU,QAAQ;AACzC,QAAM,OAAO,eAAe,aAAa;AACzC,QAAM,QAAQ,gBAAgB,EAAE,OAAO,WAAW,OAAO,kBAAkB,CAAC;AAC5E,QAAM,QAAQ,MAAM,MAAM,MAAM;AAChC,MAAI,QAAQ,QAAQ,SAAS;AAC3B,UAAM;AAAA,EACR,OAAO;AACL,YAAQ,QAAQ,iBAAiB,SAAS,OAAO,EAAE,MAAM,KAAK,CAAC;AAAA,EACjE;AAEA,MAAI;AACF,qBAAiB,QAAQ,OAAO;AAC9B,YAAM,cAAc,QAAQ,MAAM,iBAAiB,MAAM,MAAM,aAAa,CAAC;AAAA,IAC/E;AAAA,EACF,UAAE;AACA,YAAQ,QAAQ,oBAAoB,SAAS,KAAK;AAClD,UAAM,MAAM;AAAA,EACd;AACF;;;AC5JA,IAAM,UAAU,IAAI,YAAY;AAEzB,SAAS,aAAa,OAAe,UAAiC;AAC3E,MAAI,YAAY,GAAG;AACjB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,WAAW,MAAM,SAAS;AAAA,IAC5B;AAAA,EACF;AAEA,MAAI,QAAQ,OAAO,KAAK,EAAE,cAAc,UAAU;AAChD,WAAO,EAAE,MAAM,OAAO,WAAW,MAAM;AAAA,EACzC;AAEA,MAAI,QAAQ;AACZ,MAAI,MAAM;AACV,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,QAAQ,OAAO,IAAI,EAAE;AAClC,QAAI,QAAQ,OAAO,UAAU;AAC3B;AAAA,IACF;AACA,aAAS;AACT,WAAO,KAAK;AAAA,EACd;AAEA,SAAO;AAAA,IACL,MAAM,GAAG,MAAM,MAAM,GAAG,GAAG,CAAC;AAAA,8BAAiC,QAAQ;AAAA,IACrE,WAAW;AAAA,EACb;AACF;;;ArBGA,SAAS,eACP,SACA,oBAAoB,+BACX;AACT,SAAO,QACJ,OAAO,gBAAgB,mBAAmB,EAC1C,OAAO,kBAAkB,iCAAiC,EAC1D,OAAO,wBAAwB,yBAAyB,EACxD,OAAO,YAAY,iBAAiB;AACzC;AAEA,SAAS,gBAAgB,SAA2B;AAClD,SAAO,eAAe,SAAS,2CAA2C,EACvE,OAAO,yBAAyB,kBAAkB,QAAQ,EAC1D,OAAO,mBAAmB,UAAU,EACpC;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,EACF,EACC,OAAO,wBAAwB,0BAA0B,EACzD,OAAO,cAAc,sBAAsB;AAChD;AAEA,eAAe,SAAS,aAAuB,SAAyC;AACtF,QAAM,SAAS,YAAY,KAAK,GAAG,EAAE,KAAK;AAC1C,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,SAAS,wEAAwE;AAAA,EAC7F;AAEA,QAAM,SAAS,MAAM,iBAAiB,OAAO;AAC7C,QAAM,WAAW,eAAe,EAAE,QAAQ,OAAO,QAAQ,OAAO,OAAO,MAAM,CAAC;AAC9E,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,WAAW,MAAM,WAAW,MAAM;AACxC,UAAQ,KAAK,UAAU,QAAQ;AAE/B,MAAI;AACF,UAAM,WAAW,MAAM,WAAW;AAAA,MAChC,GAAG;AAAA,MACH;AAAA,MACA,QAAQ,WAAW;AAAA,MACnB,SAAS,CAAC,UAAU,SAAS,OAAO,KAAK;AAAA,IAC3C,CAAC;AACD,YAAQ,WAAW;AAAA,EACrB,UAAE;AACA,YAAQ,eAAe,UAAU,QAAQ;AAAA,EAC3C;AACF;AAEA,eAAe,QAAQ,cAAwB,SAAwC;AACrF,QAAM,eAAe,aAAa,KAAK,GAAG,EAAE,KAAK;AACjD,MAAI,CAAC,cAAc;AACjB,UAAM,IAAI,SAAS,uDAAuD;AAAA,EAC5E;AAEA,QAAM,SAAS,MAAM,iBAAiB,OAAO;AAC7C,QAAM,aAAa,IAAI,gBAAgB;AACvC,MAAI;AACJ,QAAM,WAAW,MAAM;AACrB,qBAAiB;AACjB,eAAW,MAAM;AAAA,EACnB;AACA,QAAM,YAAY,MAAM;AACtB,qBAAiB;AACjB,eAAW,MAAM;AAAA,EACnB;AACA,UAAQ,KAAK,UAAU,QAAQ;AAC/B,UAAQ,KAAK,WAAW,SAAS;AAEjC,MAAI;AACF,UAAM,SAAS,MAAM;AAAA,MACnB,OAAO;AAAA,MACP;AAAA,MACA;AAAA,QACE,WAAW,OAAO;AAAA,QAClB,KAAK,QAAQ;AAAA,MACf;AAAA,MACA,WAAW;AAAA,IACb;AACA,UAAM,SAAS,aAAa,OAAO,QAAQ,OAAO,cAAc;AAChE,UAAM,SAAS,aAAa,OAAO,QAAQ,OAAO,cAAc;AAEhE,QAAI,OAAO,QAAQ;AACjB,cAAQ,OAAO;AAAA,QACb,GAAG,KAAK,UAAU;AAAA,UAChB,UAAU,OAAO;AAAA,UACjB,QAAQ,OAAO;AAAA,UACf,QAAQ,OAAO;AAAA,UACf,YAAY,OAAO;AAAA,UACnB,UAAU,OAAO;AAAA,UACjB,WAAW,OAAO,aAAa,OAAO;AAAA,QACxC,CAAC,CAAC;AAAA;AAAA,MACJ;AAAA,IACF,OAAO;AACL,UAAI,OAAO,MAAM;AACf,gBAAQ,OAAO,MAAM,OAAO,IAAI;AAAA,MAClC;AACA,UAAI,OAAO,MAAM;AACf,gBAAQ,OAAO,MAAM,OAAO,IAAI;AAAA,MAClC;AAAA,IACF;AACA,YAAQ,WAAW,mBAAmB,OAAO,WAAW,MAAM,OAAO;AAAA,EACvE,SAAS,OAAO;AACd,QAAI,mBAAmB,QAAW;AAChC,cAAQ,WAAW;AACnB;AAAA,IACF;AACA,UAAM;AAAA,EACR,UAAE;AACA,YAAQ,eAAe,UAAU,QAAQ;AACzC,YAAQ,eAAe,WAAW,SAAS;AAAA,EAC7C;AACF;AAEA,eAAe,WAAW,SAA2C;AACnE,QAAM,aAAa,IAAI,gBAAgB;AACvC,MAAI;AACJ,QAAM,WAAW,MAAM;AACrB,qBAAiB;AACjB,eAAW,MAAM;AAAA,EACnB;AACA,QAAM,YAAY,MAAM;AACtB,qBAAiB;AACjB,eAAW,MAAM;AAAA,EACnB;AAEA,UAAQ,KAAK,UAAU,QAAQ;AAC/B,UAAQ,KAAK,WAAW,SAAS;AACjC,MAAI;AACF,UAAM,UAAU;AAAA,MACd,KAAK,QAAQ;AAAA,MACb,QAAQ,WAAW;AAAA,IACrB,CAAC;AACD,QAAI,mBAAmB,QAAW;AAChC,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,UAAE;AACA,YAAQ,eAAe,UAAU,QAAQ;AACzC,YAAQ,eAAe,WAAW,SAAS;AAAA,EAC7C;AACF;AAEA,SAAS,oBAA6B;AACpC,QAAM,UAAU,IAAI,QAAQ;AAC5B,UACG,KAAK,OAAO,EACZ,YAAY,GAAG,WAAW,qDAAqD,EAC/E,QAAQ,cAAc,EACtB,wBAAwB,EACxB,mBAAmB,EACnB,aAAa;AAEhB,iBAAe,QAAQ,SAAS,gBAAgB,uCAAuC,CAAC,EAAE;AAAA,IACxF,OAAO,cAAwB,YAA4B;AACzD,YAAM,QAAQ,cAAc,OAAO;AAAA,IACrC;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,gBAAyB;AACvC,QAAM,UAAU,kBAAkB;AAElC,QAAM,QAAQ;AAAA,IACZ,QACG,QAAQ,OAAO,EACf,YAAY,iCAAiC,EAC7C,SAAS,eAAe,aAAa,EACrC,wBAAwB,EACxB,mBAAmB;AAAA,EACxB;AACA,QAAM,OAAO,OAAO,QAAkB,YAA6B;AACjE,UAAM,SAAS,QAAQ,OAAO;AAAA,EAChC,CAAC;AAED,UACG,QAAQ,SAAS,EACjB,YAAY,qDAAqD,EACjE,OAAO,gBAAgB,mBAAmB,EAC1C,OAAO,OAAO,YAA+B;AAC5C,UAAM,WAAW,OAAO;AAAA,EAC1B,CAAC;AAEH,UACG,QAAQ,QAAQ,EAChB,YAAY,2DAA2D,EACvE,OAAO,gBAAgB,mBAAmB,EAC1C,OAAO,yBAAyB,kBAAkB,QAAQ,EAC1D,OAAO,mBAAmB,UAAU,EACpC,OAAO,UAAU,kBAAkB,EACnC,OAAO,OAAO,YAA8B;AAC3C,UAAM,SAAS,MAAM,iBAAiB,OAAO;AAC7C,YAAQ,WAAW,MAAM,UAAU,MAAM;AAAA,EAC3C,CAAC;AAEH,SAAO;AACT;AAEA,IAAM,uBAAuB,oBAAI,IAAI,CAAC,SAAS,WAAW,QAAQ,CAAC;AACnE,IAAM,2BAA2B,oBAAI,IAAI,CAAC,SAAS,aAAa,cAAc,CAAC;AAE/E,SAAS,4BAA4B,MAAyB;AAC5D,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;AACnD,UAAM,QAAQ,KAAK,KAAK,KAAK;AAC7B,QAAI,UAAU,MAAM;AAClB,aAAO;AAAA,IACT;AACA,QAAI,qBAAqB,IAAI,KAAK,GAAG;AACnC,aAAO;AAAA,IACT;AACA,QAAI,yBAAyB,IAAI,KAAK,GAAG;AACvC,eAAS;AACT;AAAA,IACF;AACA,QAAI,CAAC,GAAG,wBAAwB,EAAE,KAAK,CAAC,WAAW,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,GAAG;AAClF;AAAA,IACF;AACA,QAAI,UAAU,YAAY;AACxB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,eAAsB,KAAK,OAAO,QAAQ,MAAqB;AAC7D,QAAM,OAAO,KAAK,MAAM,CAAC;AACzB,QAAM,UAAU,4BAA4B,IAAI,IAAI,kBAAkB,IAAI,cAAc;AACxF,MAAI,KAAK,WAAW,GAAG;AACrB,YAAQ,WAAW;AACnB,UAAM,IAAI,SAAS,uDAAuD;AAAA,EAC5E;AACA,QAAM,QAAQ,WAAW,IAAI;AAC/B;;;AD1QA,KAAK,EAAE,MAAM,CAAC,UAAU;AACtB,MAAI,iBAAiB,gBAAgB;AACnC,YAAQ,WAAW,MAAM;AACzB;AAAA,EACF;AACA,UAAQ,OAAO,MAAM,UAAU,gBAAgB,KAAK,CAAC;AAAA,CAAI;AACzD,UAAQ,WAAW;AACrB,CAAC;","names":["access","stat","posix","stat","virtualPath","posix","branch","output","key","value","stat","access","stepCountIs","stat","resolve","mkdir","readFile","writeFile","dirname","isAbsolute","resolve","stepCountIs","posix","posix"]}