{"version":3,"file":"index.cjs","names":["execFile","DEFAULT_PORT","resolveRemoteDir","runInSandbox","shellQuote","killPreviousServer","INSTALL_MARKER","SERVER_SCRIPT","launchServer","waitForHealthy","tailServerLog","getInfoSafe","SERVER_PIDFILE","SERVER_LOGFILE","Deployer","resolveRemoteDir","runInSandbox","shellQuote","posix","getInfoSafe","path"],"sources":["../src/alias.ts","../src/engine.ts","../src/manifest.ts","../src/deployer.ts","../src/worker.ts"],"sourcesContent":["import type { SandboxAliasOptions } from './types';\n\n/**\n * Upsert a Vercel Edge Config item so a stable key always points at the\n * current sandbox URL. Used for Tier 3 routing: apps read the key from Edge\n * Config (e.g. in middleware) instead of hardcoding the rotating sandbox URL.\n */\nexport async function updateEdgeConfigAlias(options: SandboxAliasOptions & { url: string }): Promise<void> {\n  const { token, teamId } = options;\n  if (!token) {\n    throw new Error('Updating the Edge Config alias requires a Vercel API token. Pass `alias.token`.');\n  }\n\n  const endpoint = new URL(`https://api.vercel.com/v1/edge-config/${options.edgeConfigId}/items`);\n  if (teamId) {\n    endpoint.searchParams.set('teamId', teamId);\n  }\n\n  const res = await fetch(endpoint, {\n    method: 'PATCH',\n    headers: {\n      Authorization: `Bearer ${token}`,\n      'Content-Type': 'application/json',\n    },\n    body: JSON.stringify({\n      items: [{ operation: 'upsert', key: options.key, value: options.url }],\n    }),\n    // Bounded so a hung Vercel API request can't keep `mastra build` open\n    // after the sandbox itself is already deployed.\n    signal: AbortSignal.timeout(30_000),\n  });\n\n  if (!res.ok) {\n    const body = await res.text().catch(() => '');\n    throw new Error(`Failed to update Edge Config alias \"${options.key}\" (${res.status}): ${body}`);\n  }\n}\n","import { execFile } from 'node:child_process';\nimport { createHash } from 'node:crypto';\nimport { existsSync } from 'node:fs';\nimport { mkdtemp, readFile, rm } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\nimport { promisify } from 'node:util';\nimport { supportsNetworking } from '@mastra/core/workspace';\nimport type { WorkspaceSandbox } from '@mastra/core/workspace';\nimport {\n  DEFAULT_PORT,\n  INSTALL_MARKER,\n  SERVER_LOGFILE,\n  SERVER_PIDFILE,\n  SERVER_SCRIPT,\n  getInfoSafe,\n  killPreviousServer,\n  launchServer,\n  resolveRemoteDir,\n  runInSandbox,\n  shellQuote,\n  tailServerLog,\n  waitForHealthy,\n} from './shared';\nimport type { DeployToSandboxOptions, SandboxDeployLogger, SandboxDeployment } from './types';\n\nconst execFileAsync = promisify(execFile);\n\nconst noopLogger: SandboxDeployLogger = {\n  debug: () => {},\n  info: () => {},\n  warn: () => {},\n  error: () => {},\n};\n\n/** Max shell-command payload per chunk for the base64 upload fallback. */\nconst UPLOAD_CHUNK_SIZE = 96_000;\n\n/**\n * Deploy a prebuilt Mastra server directory into any workspace sandbox that\n * supports networking. Provider-agnostic: only uses the core WorkspaceSandbox\n * contract (`executeCommand` + `networking`, with `writeFiles` / `processes`\n * as fast paths).\n */\nexport async function deployToSandbox(options: DeployToSandboxOptions): Promise<SandboxDeployment> {\n  const {\n    sandbox,\n    dir,\n    port = DEFAULT_PORT,\n    env = {},\n    studio = false,\n    healthCheckPath = '/api',\n    healthCheckTimeoutMs = 60_000,\n    healthCheckIntervalMs = 1_000,\n    installCommand = 'npm install --omit=dev',\n    logger = noopLogger,\n  } = options;\n\n  if (!existsSync(join(dir, 'index.mjs'))) {\n    throw new Error(`No index.mjs found in \"${dir}\" — did the build succeed?`);\n  }\n\n  // 1. Start (providers handle create-or-resume by identity, e.g. sandbox name).\n  logger.info(`Starting ${sandbox.provider} sandbox...`);\n  await sandbox.start?.();\n\n  if (!supportsNetworking(sandbox)) {\n    throw new Error(\n      `Sandbox provider \"${sandbox.provider}\" does not support networking (public port URLs), ` +\n        `which is required for sandbox deploys.`,\n    );\n  }\n  if (!sandbox.executeCommand) {\n    throw new Error(\n      `Sandbox provider \"${sandbox.provider}\" does not support executeCommand, which is required for sandbox deploys.`,\n    );\n  }\n\n  const url = await sandbox.networking.getPortUrl(port);\n  if (!url) {\n    throw new Error(\n      `Sandbox provider \"${sandbox.provider}\" did not expose a public URL for port ${port}. ` +\n        `Make sure the port is declared when constructing the sandbox (e.g. \\`ports: [${port}]\\`).`,\n    );\n  }\n\n  // Default the remote dir to $HOME/mastra-app — home directories persist\n  // across snapshot stop/resume (unlike /tmp), so wakes find the app intact.\n  const remoteDir = await resolveRemoteDir(sandbox, options.remoteDir);\n\n  const mergedEnv = { ...env };\n  if (studio && mergedEnv.MASTRA_STUDIO_PATH === undefined) {\n    mergedEnv.MASTRA_STUDIO_PATH = `${remoteDir}/studio`;\n  }\n\n  // 2. Upload the build output as a tarball and extract it in the sandbox.\n  logger.info(`Uploading build output from ${dir}...`);\n  const tarball = await createTarball(dir);\n  logger.debug(`Tarball size: ${(tarball.length / 1024 / 1024).toFixed(2)} MB`);\n\n  const remoteTarball = `${remoteDir}/.deploy.tgz`;\n  await runInSandbox(sandbox, `mkdir -p ${shellQuote(remoteDir)}`);\n  await uploadFile(sandbox, remoteTarball, tarball);\n\n  // Stop the previous server BEFORE extracting over the live directory so it\n  // can never serve a mix of old and new files while the release lands.\n  await killPreviousServer(sandbox, remoteDir);\n\n  await runInSandbox(sandbox, `cd ${shellQuote(remoteDir)} && tar -xzf .deploy.tgz && rm -f .deploy.tgz`, {\n    timeout: 120_000,\n  });\n\n  // 3. Install dependencies, skipped when the install inputs (package.json,\n  // bundled lockfiles, and the install command itself) are unchanged since\n  // the last completed install.\n  const installHash = await hashInstallInputs(dir, installCommand);\n  const marker = `${remoteDir}/${INSTALL_MARKER}`;\n  const markerCheck = await runInSandbox(sandbox, `cat ${shellQuote(marker)} 2>/dev/null || true`, {\n    allowFailure: true,\n  });\n\n  if (installHash && markerCheck.stdout.trim() === installHash) {\n    logger.info('Dependencies unchanged — skipping install.');\n  } else {\n    logger.info(`Installing dependencies (${installCommand})...`);\n    await runInSandbox(sandbox, `cd ${shellQuote(remoteDir)} && ${installCommand}`, {\n      timeout: 600_000,\n      label: `install dependencies (${installCommand})`,\n    });\n    if (installHash) {\n      await runInSandbox(sandbox, `printf '%s' ${shellQuote(installHash)} > ${shellQuote(marker)}`);\n    }\n  }\n\n  // 4. Write the launch script and start the new server (the previous one was\n  // stopped before extraction).\n  const launchScript = buildLaunchScript({ remoteDir, port, env: mergedEnv });\n  await uploadFile(sandbox, `${remoteDir}/${SERVER_SCRIPT}`, Buffer.from(launchScript));\n  await runInSandbox(sandbox, `chmod 700 ${shellQuote(`${remoteDir}/${SERVER_SCRIPT}`)}`);\n\n  logger.info('Starting Mastra server...');\n  await launchServer(sandbox, remoteDir);\n\n  // 5. Wait for the server to answer on its public URL.\n  const healthy = await waitForHealthy(url, {\n    path: healthCheckPath,\n    timeoutMs: healthCheckTimeoutMs,\n    intervalMs: healthCheckIntervalMs,\n  });\n  if (!healthy) {\n    const log = await tailServerLog(sandbox, remoteDir).catch(() => '');\n    throw new Error(\n      `Mastra server did not become healthy at ${url}${healthCheckPath} within ${healthCheckTimeoutMs}ms.` +\n        (log ? `\\n\\nServer log:\\n${log}` : '\\n\\n(no server log output captured)'),\n    );\n  }\n\n  const info = await getInfoSafe(sandbox);\n\n  return {\n    url,\n    sandboxId: info?.id ?? sandbox.id,\n    expiresAt: info?.timeoutAt,\n    stop: async () => {\n      await sandbox.stop?.();\n    },\n    destroy: async () => {\n      await sandbox.destroy?.();\n    },\n    logs: (lines?: number) => tailServerLog(sandbox, remoteDir, lines),\n  };\n}\n\n/**\n * Build the POSIX launch script. Re-running the script restarts the server —\n * the wake path uses this after a snapshot resume (which restores the\n * filesystem but not processes).\n */\nexport function buildLaunchScript(opts: { remoteDir: string; port: number; env: Record<string, string> }): string {\n  const lines = ['#!/bin/sh', `cd ${shellQuote(opts.remoteDir)}`];\n\n  // MASTRA_AUTO_DETECT_URL so Studio connects to the sandbox's public URL\n  // (same origin) instead of localhost:4111 — overridable. PORT and\n  // MASTRA_HOST are applied AFTER custom env: networking (`getPortUrl`) and\n  // health checks target the configured port, and the server must bind\n  // 0.0.0.0 to be reachable through the public port proxy. Change the port\n  // via the deploy `port` option, not env.\n  const env: Record<string, string> = {\n    MASTRA_AUTO_DETECT_URL: 'true',\n    ...opts.env,\n    PORT: String(opts.port),\n    MASTRA_HOST: '0.0.0.0',\n  };\n  for (const [key, value] of Object.entries(env)) {\n    if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) {\n      throw new Error(`Invalid environment variable name: \"${key}\"`);\n    }\n    lines.push(`export ${key}=${shellQuote(value)}`);\n  }\n\n  lines.push(`echo $$ > ${shellQuote(SERVER_PIDFILE)}`);\n  lines.push(`exec node index.mjs >> ${shellQuote(SERVER_LOGFILE)} 2>&1`);\n  return lines.join('\\n') + '\\n';\n}\n\n/** Create a gzipped tarball of the directory contents (excluding node_modules). */\nexport async function createTarball(dir: string): Promise<Buffer> {\n  const tmp = await mkdtemp(join(tmpdir(), 'mastra-sandbox-'));\n  const tarPath = join(tmp, 'deploy.tgz');\n  try {\n    await execFileAsync('tar', ['-czf', tarPath, '--exclude=node_modules', '-C', dir, '.']);\n    return await readFile(tarPath);\n  } finally {\n    await rm(tmp, { recursive: true, force: true });\n  }\n}\n\n/**\n * Upload a file into the sandbox. Uses the provider's native `writeFiles` fast\n * path when available, otherwise falls back to base64 chunks over\n * `executeCommand` — so `executeCommand` + `networking` is the minimum contract.\n */\nexport async function uploadFile(sandbox: WorkspaceSandbox, remotePath: string, content: Buffer): Promise<void> {\n  if (sandbox.writeFiles) {\n    await sandbox.writeFiles([{ path: remotePath, content }]);\n    return;\n  }\n\n  const b64 = content.toString('base64');\n  const tmpPath = `${remotePath}.b64`;\n  await runInSandbox(sandbox, `rm -f ${shellQuote(tmpPath)}`);\n  for (let i = 0; i < b64.length; i += UPLOAD_CHUNK_SIZE) {\n    const chunk = b64.slice(i, i + UPLOAD_CHUNK_SIZE);\n    await runInSandbox(sandbox, `printf '%s' ${shellQuote(chunk)} >> ${shellQuote(tmpPath)}`, {\n      label: `upload chunk to ${remotePath}`,\n    });\n  }\n  await runInSandbox(\n    sandbox,\n    `base64 -d ${shellQuote(tmpPath)} > ${shellQuote(remotePath)} && rm -f ${shellQuote(tmpPath)}`,\n    { label: `decode upload at ${remotePath}` },\n  );\n}\n\n/** Lockfiles that, when present in the build output, participate in the install-skip hash. */\nconst LOCKFILES = ['package-lock.json', 'npm-shrinkwrap.json', 'pnpm-lock.yaml', 'yarn.lock', 'bun.lock'];\n\n/**\n * Hash everything that determines the outcome of a dependency install:\n * package.json, any bundled lockfile, and the install command itself. A\n * matching hash means the previous `node_modules` can be reused.\n */\nexport async function hashInstallInputs(dir: string, installCommand: string): Promise<string | null> {\n  const hash = createHash('sha256');\n  try {\n    hash.update(await readFile(join(dir, 'package.json')));\n  } catch {\n    return null;\n  }\n  for (const lockfile of LOCKFILES) {\n    let content: Buffer;\n    try {\n      content = await readFile(join(dir, lockfile));\n    } catch {\n      // Lockfile not part of the build output.\n      continue;\n    }\n    hash.update(lockfile).update(content);\n  }\n  hash.update(installCommand);\n  return hash.digest('hex');\n}\n","import { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { SandboxDeploymentManifest } from './types';\n\nexport const MANIFEST_FILENAME = 'sandbox-deployment.json';\n\n/** Write `sandbox-deployment.json` into the build output directory. */\nexport async function writeDeploymentManifest(outputDir: string, manifest: SandboxDeploymentManifest): Promise<void> {\n  await writeFile(join(outputDir, MANIFEST_FILENAME), JSON.stringify(manifest, null, 2));\n}\n\n/** Read `sandbox-deployment.json` from the build output directory, or null when absent. */\nexport async function readDeploymentManifest(outputDir: string): Promise<SandboxDeploymentManifest | null> {\n  let raw: string;\n  try {\n    raw = await readFile(join(outputDir, MANIFEST_FILENAME), 'utf-8');\n  } catch (error) {\n    // Only \"no manifest\" maps to null — anything else (permissions, a\n    // corrupted file, malformed JSON below) should surface, not be hidden.\n    if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n      return null;\n    }\n    throw error;\n  }\n  return JSON.parse(raw) as SandboxDeploymentManifest;\n}\n","import { access } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { Config } from '@mastra/core/mastra';\nimport type { WorkspaceSandbox } from '@mastra/core/workspace';\nimport { Deployer } from '@mastra/deployer';\nimport { copy } from 'fs-extra/esm';\nimport { updateEdgeConfigAlias } from './alias';\nimport { deployToSandbox } from './engine';\nimport { writeDeploymentManifest } from './manifest';\nimport { DEFAULT_PORT } from './shared';\nimport type { SandboxDeployerOptions } from './types';\n\n/**\n * Deploy a full Mastra server into any workspace sandbox that supports\n * networking (Vercel Sandbox, E2B, ...) and get a live public URL.\n *\n * Positioning: ephemeral environments — instant previews, PR/CI smoke deploys,\n * agent-built-app verification. Not production hosting.\n *\n * @example\n * ```typescript\n * import { SandboxDeployer } from '@mastra/deployer-sandbox';\n * import { VercelSandbox } from '@mastra/vercel';\n *\n * export const mastra = new Mastra({\n *   deployer: new SandboxDeployer({\n *     sandbox: new VercelSandbox({ sandboxName: 'my-preview', timeout: 3_600_000, ports: [4111] }),\n *   }),\n * });\n * ```\n */\nexport class SandboxDeployer extends Deployer {\n  /** Sandbox deploys are push-style: `mastra build` runs `deploy()` after bundling. */\n  readonly deployOnBuild = true;\n  readonly sandbox: WorkspaceSandbox;\n  readonly port: number;\n  readonly studio: boolean;\n  /** Explicit remote dir, when configured. The engine defaults to `$HOME/mastra-app` inside the sandbox. */\n  readonly remoteDir?: string;\n  private readonly env: Record<string, string>;\n  private readonly alias?: SandboxDeployerOptions['alias'];\n  private readonly healthCheckTimeoutMs?: number;\n\n  constructor(options: SandboxDeployerOptions) {\n    super({ name: 'SANDBOX' });\n\n    this.sandbox = options.sandbox;\n    this.port = options.port ?? DEFAULT_PORT;\n    this.studio = options.studio ?? true;\n    this.remoteDir = options.remoteDir;\n    this.env = options.env ?? {};\n    this.alias = options.alias;\n    this.healthCheckTimeoutMs = options.healthCheckTimeoutMs;\n  }\n\n  /**\n   * Merge all existing env files instead of only the first one (base behavior).\n   * Later files win in `loadEnvVars()`, so order least → most specific: a\n   * `.env.local` written by `vercel env pull` shouldn't shadow the `.env` that\n   * holds the app's own keys.\n   */\n  override async getEnvFiles(): Promise<string[]> {\n    const candidates = ['.env', '.env.production', '.env.local'];\n    const existing: string[] = [];\n    for (const file of candidates) {\n      try {\n        await access(file);\n        existing.push(file);\n      } catch {\n        // skip missing files\n      }\n    }\n    return existing;\n  }\n\n  protected async getUserBundlerOptions(\n    mastraEntryFile: string,\n    outputDirectory: string,\n  ): Promise<NonNullable<Config['bundler']>> {\n    const bundlerOptions = await super.getUserBundlerOptions(mastraEntryFile, outputDirectory);\n\n    // Dependencies are installed inside the sandbox, so keep them external.\n    return {\n      ...bundlerOptions,\n      externals: true,\n    };\n  }\n\n  protected getEntry(): string {\n    return `\n    // @ts-expect-error\n    import { scoreTracesWorkflow } from '@mastra/core/evals/scoreTraces';\n    import { mastra } from '#mastra';\n    import { createNodeServer, getToolExports } from '#server';\n    import { tools } from '#tools';\n\n    // @ts-expect-error\n    await createNodeServer(mastra, { tools: getToolExports(tools), studio: ${this.studio} });\n\n    const storage = mastra.getStorage();\n    if (storage) {\n      if (!storage.disableInit) {\n        storage.init();\n      }\n      mastra.__registerInternalWorkflow(scoreTracesWorkflow);\n    }\n    `;\n  }\n\n  async prepare(outputDirectory: string): Promise<void> {\n    await super.prepare(outputDirectory);\n\n    if (this.studio) {\n      const __filename = fileURLToPath(import.meta.url);\n      const __dirname = dirname(__filename);\n\n      const studioSource = join(dirname(__dirname), 'dist', 'studio');\n      const studioServePath = join(outputDirectory, this.outputDir, 'studio');\n\n      try {\n        await copy(studioSource, studioServePath, { overwrite: true });\n      } catch (err) {\n        throw new Error(\n          `Failed to copy studio assets from \"${studioSource}\" to \"${studioServePath}\": ${err instanceof Error ? err.message : err}`,\n        );\n      }\n    }\n  }\n\n  async bundle(\n    entryFile: string,\n    outputDirectory: string,\n    { toolsPaths, projectRoot }: { toolsPaths: (string | string[])[]; projectRoot: string },\n  ): Promise<void> {\n    return this._bundle(this.getEntry(), entryFile, { outputDirectory, projectRoot }, toolsPaths);\n  }\n\n  /**\n   * Deploy the built output into the sandbox and wait for the server to come\n   * up on its public URL. Writes `sandbox-deployment.json` into the output\n   * directory and updates the Edge Config alias when configured.\n   */\n  async deploy(outputDirectory: string): Promise<void> {\n    const dir = join(outputDirectory, this.outputDir);\n\n    // Merge .env file vars under explicitly configured env.\n    const envVars = await this.loadEnvVars();\n    const env: Record<string, string> = { ...Object.fromEntries(envVars), ...this.env };\n    if (envVars.size > 0) {\n      this.logger.warn(\n        'Environment variables from your .env file are injected into the remote sandbox. ' +\n          'Anyone with access to the sandbox can read them.',\n      );\n    }\n\n    const deployment = await deployToSandbox({\n      sandbox: this.sandbox,\n      dir,\n      port: this.port,\n      env,\n      studio: this.studio,\n      remoteDir: this.remoteDir,\n      healthCheckTimeoutMs: this.healthCheckTimeoutMs,\n      logger: this.logger,\n    });\n\n    await writeDeploymentManifest(dir, {\n      provider: this.sandbox.provider,\n      sandboxId: deployment.sandboxId,\n      url: deployment.url,\n      port: this.port,\n      deployedAt: new Date().toISOString(),\n      expiresAt: deployment.expiresAt?.toISOString(),\n    });\n\n    if (this.alias) {\n      await updateEdgeConfigAlias({ ...this.alias, url: deployment.url });\n      this.logger.info(`Edge Config alias \"${this.alias.key}\" now points at ${deployment.url}`);\n    }\n\n    this.logger.info(`Mastra server deployed: ${deployment.url}/api`);\n    if (this.studio) {\n      this.logger.info(`Studio: ${deployment.url}`);\n    }\n    if (deployment.expiresAt) {\n      this.logger.warn(`Sandbox expires at ${deployment.expiresAt.toISOString()} (provider runtime cap).`);\n    }\n  }\n}\n","import { posix } from 'node:path';\n\nimport type { WorkspaceSandbox } from '@mastra/core/workspace';\n\nimport { createTarball, hashInstallInputs, uploadFile } from './engine.js';\nimport { getInfoSafe, resolveRemoteDir, runInSandbox, shellQuote } from './shared.js';\nimport type {\n  DeployWorkerToSandboxOptions,\n  SandboxDestroyResult,\n  SandboxWorkerDeployment,\n  SandboxWorkerInput,\n  SandboxWorkerOutput,\n  SandboxWorkerStatus,\n} from './types.js';\n\nconst ARCHIVE = '.mastra-worker.tar.gz';\nconst RUNTIME_DIR = '.mastra/executions';\nconst INSTALL_MARKER = '.mastra-install-hash';\nconst INSTALL_LOCK = '.mastra-install-lock';\nconst ARTIFACT_LOCK = '.mastra-artifact-lock';\nconst EXECUTION_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;\nconst DEFAULT_INPUT_LIMIT = 16 * 1024 * 1024;\nconst DEFAULT_OUTPUT_READ_LIMIT = 1024 * 1024;\n\ninterface WorkerConfig {\n  sandbox: WorkspaceSandbox;\n  remoteDir: string;\n  command: string;\n  args: string[];\n  env: Record<string, string>;\n  workingDirectory: string;\n  mode: 'worker' | 'job';\n  startupTimeoutMs: number;\n  executionTimeoutMs?: number;\n  terminationGraceMs: number;\n  inputLimitBytes: number;\n}\n\nexport async function deployWorkerToSandbox(options: DeployWorkerToSandboxOptions): Promise<SandboxWorkerDeployment> {\n  validateOptions(options);\n  const {\n    sandbox,\n    dir,\n    executionId,\n    command,\n    mode = 'worker',\n    args = [],\n    env = {},\n    workingDirectory = '.',\n    installCommand = 'npm install --omit=dev',\n    startupTimeoutMs = 10_000,\n    executionTimeoutMs,\n    terminationGraceMs = 5_000,\n    inputLimitBytes = DEFAULT_INPUT_LIMIT,\n  } = options;\n\n  const remoteDir = await resolveRemoteDir(sandbox, options.remoteDir);\n  const config: WorkerConfig = {\n    sandbox,\n    remoteDir,\n    command,\n    args,\n    env,\n    workingDirectory,\n    mode,\n    startupTimeoutMs,\n    executionTimeoutMs,\n    terminationGraceMs,\n    inputLimitBytes,\n  };\n\n  const archive = `${remoteDir}/${ARCHIVE}`;\n  const tarball = await createTarball(dir);\n  const installHash = await hashInstallInputs(dir, installCommand);\n\n  const artifactLock = `${remoteDir}/${ARTIFACT_LOCK}`;\n  let artifactLockAcquired = false;\n  try {\n    await runInSandbox(sandbox, `mkdir -p ${shellQuote(remoteDir)}`);\n    await acquireLock(sandbox, artifactLock, options.installTimeoutMs, 'worker artifact');\n    artifactLockAcquired = true;\n    await uploadFile(sandbox, archive, tarball);\n    await runInSandbox(\n      sandbox,\n      `tar -xzf ${shellQuote(archive)} -C ${shellQuote(remoteDir)} && rm -f ${shellQuote(archive)}`,\n      { label: 'extract worker artifact' },\n    );\n  } catch (error) {\n    throw workerPhaseError('upload', error);\n  } finally {\n    if (artifactLockAcquired) {\n      await runInSandbox(sandbox, `rm -rf ${shellQuote(artifactLock)}`, {\n        allowFailure: true,\n        label: 'release worker artifact lock',\n      });\n    }\n  }\n\n  try {\n    await installDependencies(sandbox, remoteDir, installHash ?? undefined, installCommand, options.installTimeoutMs);\n  } catch (error) {\n    throw workerPhaseError('install', error);\n  }\n\n  return createExecution(config, executionId, options.input);\n}\n\nfunction validateOptions(options: DeployWorkerToSandboxOptions): void {\n  if (!options.sandbox.executeCommand) {\n    throw new Error(\n      `Sandbox provider \"${options.sandbox.provider}\" does not support executeCommand, which is required for worker deploys.`,\n    );\n  }\n  validateExecutionId(options.executionId);\n  if (!options.command || /[\\0\\r\\n]/.test(options.command)) {\n    throw new Error('Worker command must be a non-empty executable path.');\n  }\n  if (options.args?.some(arg => arg.includes('\\0'))) throw new Error('Worker arguments must not contain NUL bytes.');\n  for (const key of Object.keys(options.env ?? {})) {\n    if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) throw new Error(`Invalid worker environment variable name: ${key}`);\n  }\n  validateRelativePath(options.workingDirectory ?? '.', 'workingDirectory');\n  validateInput(options.input);\n  for (const [name, value] of [\n    ['inputLimitBytes', options.inputLimitBytes],\n    ['startupTimeoutMs', options.startupTimeoutMs],\n    ['executionTimeoutMs', options.executionTimeoutMs],\n    ['terminationGraceMs', options.terminationGraceMs],\n  ] as const) {\n    if (value !== undefined && (!Number.isFinite(value) || value <= 0))\n      throw new Error(`${name} must be greater than zero.`);\n  }\n}\n\nfunction validateRelativePath(value: string, label: string): void {\n  if (!value || posix.isAbsolute(value) || posix.normalize(value).startsWith('..')) {\n    throw new Error(`Worker ${label} must stay within the deployed artifact root.`);\n  }\n}\n\nfunction validateInput(input: SandboxWorkerInput | undefined): void {\n  if (input?.type === 'file') validateRelativePath(input.path, 'input file path');\n}\n\nasync function acquireLock(\n  sandbox: WorkspaceSandbox,\n  lock: string,\n  timeout: number | undefined,\n  label: string,\n): Promise<void> {\n  const timeoutMs = timeout ?? 600_000;\n  const attempts = Math.max(1, Math.ceil(timeoutMs / 1000));\n  await runInSandbox(\n    sandbox,\n    [\n      'i=0',\n      `while ! mkdir ${shellQuote(lock)} 2>/dev/null; do`,\n      `  if [ \"$i\" -ge ${attempts} ]; then echo ${shellQuote(`${label} lock timeout`)} >&2; exit 1; fi`,\n      '  sleep 1; i=$((i + 1))',\n      'done',\n    ].join('\\n'),\n    { timeout: timeoutMs, label: `acquire ${label} lock` },\n  );\n}\n\nasync function installDependencies(\n  sandbox: WorkspaceSandbox,\n  remoteDir: string,\n  installHash: string | undefined,\n  installCommand: string,\n  timeout?: number,\n): Promise<void> {\n  if (!installHash) return;\n  const marker = `${remoteDir}/${INSTALL_MARKER}`;\n  const lock = `${remoteDir}/${INSTALL_LOCK}`;\n  await acquireLock(sandbox, lock, timeout, 'dependency install');\n  try {\n    const script = [\n      `current=\"$(cat ${shellQuote(marker)} 2>/dev/null || true)\"`,\n      `if [ \"$current\" != ${shellQuote(installHash)} ]; then`,\n      `  cd ${shellQuote(remoteDir)} && ${installCommand}`,\n      `  printf %s ${shellQuote(installHash)} > ${shellQuote(`${marker}.tmp`)}`,\n      `  mv ${shellQuote(`${marker}.tmp`)} ${shellQuote(marker)}`,\n      'fi',\n    ].join('\\n');\n    await runInSandbox(sandbox, script, {\n      timeout: timeout ?? 600_000,\n      label: 'install worker dependencies',\n    });\n  } finally {\n    await runInSandbox(sandbox, `rm -rf ${shellQuote(lock)}`, {\n      allowFailure: true,\n      label: 'release dependency install lock',\n    });\n  }\n}\n\nasync function createExecution(\n  config: WorkerConfig,\n  executionId: string,\n  input?: SandboxWorkerInput,\n): Promise<SandboxWorkerDeployment> {\n  validateExecutionId(executionId);\n  const paths = executionPaths(config.remoteDir, executionId);\n  await runInSandbox(\n    config.sandbox,\n    `mkdir -p ${shellQuote(`${config.remoteDir}/${RUNTIME_DIR}`)} && mkdir -m 700 ${shellQuote(paths.dir)}`,\n    { label: 'create worker execution namespace' },\n  );\n  const stdinPath = await stageInput(config, paths, input);\n  const script = buildExecutionScript(config, paths, stdinPath);\n  await uploadFile(config.sandbox, paths.script, Buffer.from(script));\n  await runInSandbox(config.sandbox, `chmod 700 ${shellQuote(paths.script)}`);\n\n  try {\n    await launchExecution(config.sandbox, paths);\n  } catch (error) {\n    await writeFailedStatus(config.sandbox, paths, executionId, 'launch', error);\n    throw workerPhaseError('launch', error);\n  }\n\n  const startup = await waitForStartup(config, executionId, paths);\n  if (startup.state === 'timed_out') await cancelExecution(config, executionId, paths, 'startup');\n  if (startup.state === 'failed' || startup.state === 'timed_out' || startup.state === 'provider_unavailable') {\n    throw new Error(\n      `Worker ${startup.state} during startup${'message' in startup && startup.message ? `: ${startup.message}` : ''}.`,\n    );\n  }\n\n  const info = await getInfoSafe(config.sandbox);\n  return deployment(config, executionId, paths, info?.id ?? config.sandbox.id ?? 'unknown', info?.timeoutAt);\n}\n\nfunction deployment(\n  config: WorkerConfig,\n  executionId: string,\n  paths: ReturnType<typeof executionPaths>,\n  sandboxId: string,\n  expiresAt?: Date,\n): SandboxWorkerDeployment {\n  return {\n    sandboxId,\n    executionId,\n    expiresAt,\n    status: options => readWorkerStatus(config.sandbox, executionId, paths, options),\n    readOutput: (stream, options) => readOutput(config.sandbox, executionId, paths, stream, options),\n    cancel: () => cancelExecution(config, executionId, paths),\n    stop: async () => {\n      if (!config.sandbox.stop) throw new Error(`Sandbox provider \"${config.sandbox.provider}\" does not support stop.`);\n      await config.sandbox.stop();\n    },\n    destroy: options => destroyWithRetry(config.sandbox, options),\n    relaunch: async options => {\n      if (options.executionId === executionId) throw new Error('Relaunch requires a new executionId.');\n      validateInput(options.input);\n      return createExecution(config, options.executionId, options.input);\n    },\n  };\n}\n\nasync function stageInput(\n  config: WorkerConfig,\n  paths: ReturnType<typeof executionPaths>,\n  input?: SandboxWorkerInput,\n): Promise<string | undefined> {\n  if (!input) return undefined;\n  const data = typeof input.data === 'string' ? Buffer.from(input.data) : Buffer.from(input.data);\n  if (data.byteLength > config.inputLimitBytes) {\n    throw new Error(`Worker input exceeds inputLimitBytes (${data.byteLength} > ${config.inputLimitBytes}).`);\n  }\n  const path = input.type === 'stdin' ? paths.stdin : posix.resolve(config.remoteDir, input.path);\n  await uploadFile(config.sandbox, path, data);\n  await runInSandbox(config.sandbox, `chmod 600 ${shellQuote(path)}`);\n  return input.type === 'stdin' ? path : undefined;\n}\n\nfunction buildExecutionScript(\n  config: WorkerConfig,\n  paths: ReturnType<typeof executionPaths>,\n  stdinPath?: string,\n): string {\n  const cwd = posix.resolve(config.remoteDir, config.workingDirectory);\n  const envPrefix = Object.entries(config.env)\n    .map(([key, value]) => `${key}=${shellQuote(value)}`)\n    .join(' ');\n  const executable = [shellQuote(config.command), ...config.args.map(shellQuote)].join(' ');\n  const target = `${envPrefix ? `env ${envPrefix} ` : ''}${executable}`;\n  const graceAttempts = Math.max(1, Math.ceil(config.terminationGraceMs / 1000));\n  const state = (value: string) =>\n    `tmp=${shellQuote(`${paths.status}.tmp.$$`)}; printf '%s\\\\n' ${shellQuote(value)} > \"$tmp\"; mv \"$tmp\" ${shellQuote(paths.status)};`;\n\n  return [\n    '#!/bin/sh',\n    `cd ${shellQuote(cwd)}`,\n    `execution_id=${shellQuote(paths.executionId)}`,\n    `stdout=${shellQuote(paths.stdout)}`,\n    `stderr=${shellQuote(paths.stderr)}`,\n    `pidfile=${shellQuote(paths.pid)}`,\n    `tokenfile=${shellQuote(paths.pidToken)}`,\n    `: > \"$stdout\"; : > \"$stderr\"`,\n    state(`starting|${paths.executionId}`),\n    `setsid sh -c ${shellQuote(`exec ${target}${stdinPath ? ` < ${shellQuote(stdinPath)}` : ''}`)} > \"$stdout\" 2> \"$stderr\" &`,\n    'child=$!',\n    'printf %s \"$child\" > \"$pidfile\"',\n    `if [ -r \"/proc/$child/stat\" ]; then awk '{print $22}' \"/proc/$child/stat\" > \"$tokenfile\"; else : > \"$tokenfile\"; fi`,\n    state(`running|${paths.executionId}`),\n    'cancelled=0',\n    `trap 'cancelled=1; kill -TERM -\"$child\" 2>/dev/null || kill -TERM \"$child\" 2>/dev/null || true' TERM INT`,\n    ...(config.executionTimeoutMs\n      ? [\n          `(sleep ${Math.max(1, Math.ceil(config.executionTimeoutMs / 1000))}; if kill -0 \"$child\" 2>/dev/null; then ${state(\n            `timed_out|${paths.executionId}|execution`,\n          )} kill -TERM -\"$child\" 2>/dev/null || kill -TERM \"$child\" 2>/dev/null || true; i=0; while kill -0 \"$child\" 2>/dev/null && [ \"$i\" -lt ${graceAttempts} ]; do sleep 1; i=$((i + 1)); done; kill -KILL -\"$child\" 2>/dev/null || kill -KILL \"$child\" 2>/dev/null || true; fi) &`,\n          'watchdog=$!',\n        ]\n      : []),\n    'wait \"$child\"',\n    'code=$?',\n    ...(config.executionTimeoutMs ? ['kill \"$watchdog\" 2>/dev/null || true'] : []),\n    `current=\"$(cat ${shellQuote(paths.status)} 2>/dev/null || true)\"`,\n    `case \"$current\" in timed_out*) ;; *) if [ \"$cancelled\" -eq 1 ]; then ${state(\n      `cancelled|${paths.executionId}|TERM`,\n    )} else signal=''; if [ \"$code\" -gt 128 ]; then signal=\"SIG$((code - 128))\"; fi; tmp=${shellQuote(\n      `${paths.status}.tmp.$$`,\n    )}; printf 'exited|%s|%s|%s\\\\n' \"$execution_id\" \"$code\" \"$signal\" > \"$tmp\"; mv \"$tmp\" ${shellQuote(\n      paths.status,\n    )}; fi ;; esac`,\n    'rm -f \"$pidfile\" \"$tokenfile\"',\n    'exit \"$code\"',\n  ].join('\\n');\n}\n\nasync function launchExecution(sandbox: WorkspaceSandbox, paths: ReturnType<typeof executionPaths>): Promise<void> {\n  await runInSandbox(sandbox, `setsid nohup sh ${shellQuote(paths.script)} >/dev/null 2>&1 & echo $!`, {\n    label: 'launch worker execution',\n  });\n}\n\nasync function waitForStartup(\n  config: WorkerConfig,\n  executionId: string,\n  paths: ReturnType<typeof executionPaths>,\n): Promise<SandboxWorkerStatus> {\n  const deadline = Date.now() + config.startupTimeoutMs;\n  while (Date.now() < deadline) {\n    const status = await readWorkerStatus(config.sandbox, executionId, paths);\n    if (status.state !== 'unknown' && status.state !== 'starting') return status;\n    await new Promise(resolve => setTimeout(resolve, 100));\n  }\n  return { state: 'timed_out', executionId, phase: 'startup' };\n}\n\nasync function readWorkerStatus(\n  sandbox: WorkspaceSandbox,\n  executionId: string,\n  paths: ReturnType<typeof executionPaths>,\n  options?: { wake?: boolean },\n): Promise<SandboxWorkerStatus> {\n  const providerState = sandbox.status;\n  if (providerState === 'destroyed' || providerState === 'destroying') {\n    return { state: 'provider_unavailable', executionId, providerState };\n  }\n  if (providerState === 'stopped' || providerState === 'stopping') {\n    if (!options?.wake || !sandbox.start) return { state: 'provider_unavailable', executionId, providerState };\n    try {\n      await sandbox.start();\n    } catch (error) {\n      return { state: 'provider_unavailable', executionId, providerState, message: errorMessage(error) };\n    }\n  }\n\n  try {\n    const result = await runInSandbox(\n      sandbox,\n      [\n        `status=\"$(cat ${shellQuote(paths.status)} 2>/dev/null || true)\"`,\n        `if [ -f ${shellQuote(paths.pid)} ]; then`,\n        `  pid=\"$(cat ${shellQuote(paths.pid)})\"`,\n        `  expected=\"$(cat ${shellQuote(paths.pidToken)} 2>/dev/null || true)\"`,\n        `  actual=\"$(if [ -r \"/proc/$pid/stat\" ]; then awk '{print $22}' \"/proc/$pid/stat\"; fi)\"`,\n        `  if kill -0 \"$pid\" 2>/dev/null && { [ -z \"$expected\" ] || [ \"$expected\" = \"$actual\" ]; }; then echo \"running|${executionId}\"; exit 0; fi`,\n        `  if kill -0 \"$pid\" 2>/dev/null; then echo \"stale|${executionId}\"; exit 0; fi`,\n        'fi',\n        `if [ -n \"$status\" ]; then printf '%s\\\\n' \"$status\"; else echo \"unknown|${executionId}\"; fi`,\n      ].join('\\n'),\n      { allowFailure: true, label: 'read worker status' },\n    );\n    if (result.exitCode !== 0) {\n      return {\n        state: 'provider_unavailable',\n        executionId,\n        providerState: sandbox.status,\n        message: result.stderr || result.stdout || 'Sandbox status inspection failed.',\n      };\n    }\n    return parseStatus(executionId, result.stdout.trim());\n  } catch (error) {\n    return { state: 'provider_unavailable', executionId, providerState: sandbox.status, message: errorMessage(error) };\n  }\n}\n\nfunction parseStatus(executionId: string, value: string): SandboxWorkerStatus {\n  const [state, recordedId, first, second] = value.split('|');\n  if (recordedId !== executionId || state === 'stale') return { state: 'unknown', executionId };\n  if (state === 'starting') return { state, executionId };\n  if (state === 'running') return { state, executionId };\n  if (state === 'exited') {\n    const exitCode = Number(first);\n    return Number.isInteger(exitCode)\n      ? { state, executionId, exitCode, ...(second ? { signal: second } : {}) }\n      : { state: 'unknown', executionId };\n  }\n  if (state === 'cancelled') return { state, executionId, ...(first ? { signal: first } : {}) };\n  if (state === 'timed_out' && (first === 'startup' || first === 'execution')) {\n    return { state, executionId, phase: first };\n  }\n  if (state === 'failed' && (first === 'upload' || first === 'install' || first === 'launch')) {\n    return { state, executionId, phase: first, message: second ?? '' };\n  }\n  return { state: 'unknown', executionId };\n}\n\nasync function cancelExecution(\n  config: WorkerConfig,\n  executionId: string,\n  paths: ReturnType<typeof executionPaths>,\n  timeoutPhase?: 'startup',\n): Promise<SandboxWorkerStatus> {\n  const current = await readWorkerStatus(config.sandbox, executionId, paths);\n  if (current.state !== 'running' && current.state !== 'starting') return current;\n  const attempts = Math.max(1, Math.ceil(config.terminationGraceMs / 1000));\n  const terminal = timeoutPhase ? `timed_out|${executionId}|startup` : `cancelled|${executionId}|TERM`;\n  await runInSandbox(\n    config.sandbox,\n    [\n      `pid=\"$(cat ${shellQuote(paths.pid)} 2>/dev/null || true)\"`,\n      '[ -n \"$pid\" ] || exit 0',\n      `expected=\"$(cat ${shellQuote(paths.pidToken)} 2>/dev/null || true)\"`,\n      `actual=\"$(if [ -r \"/proc/$pid/stat\" ]; then awk '{print $22}' \"/proc/$pid/stat\"; fi)\"`,\n      '[ -n \"$expected\" ] && [ \"$expected\" != \"$actual\" ] && exit 0',\n      'kill -TERM -\"$pid\" 2>/dev/null || kill -TERM \"$pid\" 2>/dev/null || true',\n      `i=0; while kill -0 \"$pid\" 2>/dev/null && [ \"$i\" -lt ${attempts} ]; do sleep 1; i=$((i + 1)); done`,\n      'kill -KILL -\"$pid\" 2>/dev/null || kill -KILL \"$pid\" 2>/dev/null || true',\n      `tmp=${shellQuote(`${paths.status}.tmp.$$`)}; printf '%s\\\\n' ${shellQuote(terminal)} > \"$tmp\"; mv \"$tmp\" ${shellQuote(paths.status)}`,\n      `rm -f ${shellQuote(paths.pid)} ${shellQuote(paths.pidToken)}`,\n    ].join('\\n'),\n    { allowFailure: true, timeout: config.terminationGraceMs + 5_000, label: 'cancel worker execution' },\n  );\n  return parseStatus(executionId, terminal);\n}\n\nasync function readOutput(\n  sandbox: WorkspaceSandbox,\n  executionId: string,\n  paths: ReturnType<typeof executionPaths>,\n  stream: 'stdout' | 'stderr',\n  options?: { offset?: number; maxBytes?: number },\n): Promise<SandboxWorkerOutput> {\n  const offset = Math.max(0, Math.floor(options?.offset ?? 0));\n  const maxBytes = Math.max(1, Math.floor(options?.maxBytes ?? DEFAULT_OUTPUT_READ_LIMIT));\n  const path = stream === 'stdout' ? paths.stdout : paths.stderr;\n  try {\n    const result = await runInSandbox(\n      sandbox,\n      `size=$(wc -c < ${shellQuote(path)} 2>/dev/null || echo 0); printf '%s\\\\n' \"$size\"; tail -c +${offset + 1} ${shellQuote(\n        path,\n      )} 2>/dev/null | head -c ${maxBytes} | base64`,\n      { allowFailure: true, label: `read worker ${stream}` },\n    );\n    if (result.exitCode !== 0) throw new Error(result.stderr || result.stdout || `Unable to read worker ${stream}.`);\n    const newline = result.stdout.indexOf('\\n');\n    const totalBytes = Number((newline === -1 ? result.stdout : result.stdout.slice(0, newline)).trim()) || 0;\n    const encoded = newline === -1 ? '' : result.stdout.slice(newline + 1).replace(/\\s/g, '');\n    const data = Buffer.from(encoded, 'base64');\n    const nextOffset = offset + data.byteLength;\n    const status = await readWorkerStatus(sandbox, executionId, paths);\n    const terminal = ['exited', 'cancelled', 'timed_out', 'failed'].includes(status.state);\n    const interrupted = status.state === 'provider_unavailable' || status.state === 'unknown';\n    return {\n      stream,\n      data,\n      offset,\n      nextOffset,\n      totalBytes,\n      eof: terminal && nextOffset >= totalBytes,\n      truncated: nextOffset < totalBytes,\n      interrupted,\n    };\n  } catch {\n    return {\n      stream,\n      data: new Uint8Array(),\n      offset,\n      nextOffset: offset,\n      totalBytes: offset,\n      eof: false,\n      truncated: false,\n      interrupted: true,\n    };\n  }\n}\n\nasync function destroyWithRetry(\n  sandbox: WorkspaceSandbox,\n  options?: { attempts?: number; delayMs?: number },\n): Promise<SandboxDestroyResult> {\n  if (!sandbox.destroy) return { state: 'unsupported', attempts: 0 };\n  const attempts = Math.max(1, Math.floor(options?.attempts ?? 3));\n  const delayMs = Math.max(0, Math.floor(options?.delayMs ?? 250));\n  let lastError: unknown;\n  for (let attempt = 1; attempt <= attempts; attempt++) {\n    try {\n      await sandbox.destroy();\n      return { state: 'destroyed', attempts: attempt };\n    } catch (error) {\n      lastError = error;\n      if (attempt < attempts) await new Promise(resolve => setTimeout(resolve, delayMs));\n    }\n  }\n  return { state: 'exhausted', attempts, error: lastError };\n}\n\nasync function writeFailedStatus(\n  sandbox: WorkspaceSandbox,\n  paths: ReturnType<typeof executionPaths>,\n  executionId: string,\n  phase: 'upload' | 'install' | 'launch',\n  error: unknown,\n): Promise<void> {\n  await writeStatus(\n    sandbox,\n    paths.status,\n    `failed|${executionId}|${phase}|${sanitizeStatusValue(errorMessage(error))}`,\n  );\n}\n\nasync function writeStatus(sandbox: WorkspaceSandbox, path: string, value: string): Promise<void> {\n  await runInSandbox(\n    sandbox,\n    `tmp=${shellQuote(`${path}.tmp.$$`)}; printf '%s\\\\n' ${shellQuote(value)} > \"$tmp\"; mv \"$tmp\" ${shellQuote(path)}`,\n    { allowFailure: true, label: 'write worker status' },\n  );\n}\n\nfunction executionPaths(remoteDir: string, executionId: string) {\n  const dir = `${remoteDir}/${RUNTIME_DIR}/${executionId}`;\n  return {\n    executionId,\n    dir,\n    script: `${dir}/launch.sh`,\n    pid: `${dir}/pid`,\n    pidToken: `${dir}/pid-start`,\n    status: `${dir}/status`,\n    stdin: `${dir}/stdin`,\n    stdout: `${dir}/stdout`,\n    stderr: `${dir}/stderr`,\n  };\n}\n\nfunction validateExecutionId(executionId: string): void {\n  if (!executionId || !EXECUTION_ID_PATTERN.test(executionId)) {\n    throw new Error('Worker executionId must contain only letters, numbers, dots, underscores, and hyphens.');\n  }\n}\n\nfunction workerPhaseError(phase: 'upload' | 'install' | 'launch', error: unknown): Error {\n  return new Error(`Worker ${phase} failed: ${errorMessage(error)}`, { cause: error });\n}\n\nfunction errorMessage(error: unknown): string {\n  return error instanceof Error ? error.message : String(error);\n}\n\nfunction sanitizeStatusValue(value: string): string {\n  return value.replace(/[|\\r\\n]/g, ' ').slice(0, 500);\n}\n"],"mappings":"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"}