Skip to content
Français

SandboxProvider

import type { SandboxProvider } from "@elie-laloum/outpost";
  • recoverOptional
    ((resourceId: string, options?: TransferOptions) => Promise<void>) | undefined
    Removes a resource recorded through registerRecovery after its coordinator stopped, within signal and deadlineMs. It must succeed when called again and never delete host repository data. Durable speculation requires it; Docker and Podman provide it in mounted mode.
  • nameRequired
    string
    Identifier recorded in diagnostics and resource activity: docker, podman, local, vercel, daytona or firecracker for the built-in providers.
  • placementRequired
    "mounted" | "remote" | "host"
    How the repository reaches the sandbox: mounted (host worktree mounted), remote (history uploaded, changes synchronized back) or host (commands run in the host worktree). Remote placement rejects the current branch mode and defaults to integrate.
  • variablesOptional
    Readonly<Record<string, string>> | undefined
    Environment variables set for every command in the sandbox, as literal values; they override .outpost/.env entries. A key the agent also declares fails with code configuration.
  • acquireRequired
    (context: SandboxContext) => Promise<SandboxLease>
    Allocates one environment for a sandbox and returns its lease. Outpost calls it once per sandbox and calls release() when the sandbox closes; honor context.signal.
export interface SandboxProvider {
  readonly recover?: (
    resourceId: string,
    options?: TransferOptions,
  ) => Promise<void>;
  readonly name: string;
  readonly placement: "mounted" | "remote" | "host";
  readonly variables?: Variables;
  acquire(context: SandboxContext): Promise<SandboxLease>;
}