import { type SandboxEnvironment, type SandboxSelectorContext } from "#shared/sandbox-environment.js"; import type { SandboxSession } from "#shared/sandbox-session.js"; export interface SandboxDeleteOptions { readonly abortSignal?: AbortSignal; } export interface SandboxProviderResourceFile { readonly content: string | Uint8Array; readonly relativePath: string; } export interface SandboxProviderResourceTree { readonly files: readonly SandboxProviderResourceFile[]; readonly key: string; readonly mountPath: string; readonly targetPath: string; } export type SandboxProviderResourceSource = { readonly kind: "none"; } | { readonly key: string; readonly kind: "inline"; } | { readonly key: string; readonly kind: "materialized"; readonly path: string; }; export interface SandboxProviderResources { readonly skills?: SandboxProviderResourceTree; readonly source: SandboxProviderResourceSource; readonly workspace?: SandboxProviderResourceTree; } export declare function sandboxProviderResourceIdentity(resources: SandboxProviderResources): object; export interface SandboxProviderTargetFile { readonly content: string | Uint8Array; readonly path: string; } export declare function providerResourceTargetFiles(resources: SandboxProviderResources): SandboxProviderTargetFile[]; export type SandboxPreparedArtifact = null | boolean | number | string | readonly SandboxPreparedArtifact[] | { readonly [key: string]: SandboxPreparedArtifact; }; export declare function isSandboxPreparedArtifact(value: unknown): value is SandboxPreparedArtifact; export declare function isSandboxPreparedArtifactRecord(artifact: unknown): artifact is { readonly [key: string]: SandboxPreparedArtifact; }; export interface SandboxProviderFiles { list(): Promise; read(path: string): Promise; readText(path: string): Promise; } export interface SandboxProviderHost { loadOptionalPackage(input: { readonly autoInstall: boolean; readonly importModule: () => Promise; readonly installPackageName?: string; readonly ignoredOptionalDependencies?: readonly string[]; readonly missingMessage: string; readonly packageName: string; }): Promise; resolveProjectPath(path: string): string; } export interface SandboxProviderPrepareContext { readonly files: SandboxProviderFiles; readonly host: SandboxProviderHost; readonly log?: (message: string) => void; readonly resources: SandboxProviderResources; readonly sourceRevision: string; readonly storagePath: string; } export interface SandboxProviderSessionContext { readonly host: SandboxProviderHost; readonly session: SandboxSelectorContext["session"]; readonly storagePath: string; } export interface SandboxProviderHandle { readonly sandbox: Session; onRuntimeShutdown(): Promise; onSandboxDelete(options?: SandboxDeleteOptions): Promise; onSandboxStop(): Promise; } export interface SandboxProviderImplementation { /** * Permanently releases resources owned by a durable session after its terminal outcome. * Implementations must be idempotent because the cleanup step may retry. */ onSessionEnd?(context: SandboxProviderSessionContext, artifact: Readonly, state: Readonly, options: { readonly reason: "completed" | "expired" | "failed"; }): Promise; prepare(context: SandboxProviderPrepareContext): Promise; resume(context: SandboxProviderSessionContext, artifact: Readonly, state: Readonly): Promise>; start(context: SandboxProviderSessionContext, options: Readonly | undefined, artifact: Readonly): Promise<{ readonly handle: SandboxProviderHandle; readonly state: SessionState; }>; } type SandboxOptionArguments = Options extends undefined ? [options?: undefined] : Record extends Options ? [options?: Readonly] : [options: Readonly]; export type SandboxProviderDefinition = { readonly name: string; readonly stateProtocolVersion?: number; environment(...args: SandboxOptionArguments): SandboxProviderImplementation; }; export interface SandboxProvider { readonly name: string; environment(...args: SandboxOptionArguments): SandboxEnvironment; } type ErasedSandboxProviderImplementation = SandboxProviderImplementation; export interface SandboxProviderRuntime { readonly implementation: ErasedSandboxProviderImplementation; readonly providerName: string; readonly stateProtocolVersion: number; } export declare function defineSandboxProvider(definition: SandboxProviderDefinition): SandboxProvider; export declare function createSandboxProviderResources(input: { readonly resourcesKey?: string; readonly resourcesPath?: string; readonly seedFiles?: readonly { readonly content: string | Uint8Array; readonly path: string; }[]; }): SandboxProviderResources; export {};