import { Agent, type AgentOptions, type AgentOutputType } from '../agent';
import type { RunContext } from '../runContext';
import { TextOutput, UnknownContext } from '../types';
import { SANDBOX_AGENT_BRAND } from './brand';
import { type Capability } from './capabilities';
import { Manifest, type ManifestInput } from './manifest';
import { type SandboxUser } from './users';
export type SandboxBaseInstructions<TContext = UnknownContext, TOutput extends AgentOutputType = TextOutput> = string | ((runContext: RunContext<TContext>, agent: SandboxAgent<TContext, TOutput>) => Promise<string> | string);
export type SandboxAgentOptions<TContext = UnknownContext, TOutput extends AgentOutputType = TextOutput> = AgentOptions<TContext, TOutput> & {
    defaultManifest?: ManifestInput;
    baseInstructions?: SandboxBaseInstructions<TContext, TOutput>;
    capabilities?: Capability[];
    runAs?: string | SandboxUser;
};
export declare class SandboxAgent<TContext = UnknownContext, TOutput extends AgentOutputType = TextOutput> extends Agent<TContext, TOutput> {
    readonly [SANDBOX_AGENT_BRAND] = true;
    defaultManifest?: Manifest;
    baseInstructions?: SandboxBaseInstructions<TContext, TOutput>;
    capabilities: Capability[];
    runAs?: string | SandboxUser;
    runtimeManifest: Manifest;
    constructor(config: SandboxAgentOptions<TContext, TOutput>);
    clone(config: Partial<SandboxAgentOptions<TContext, TOutput>>): SandboxAgent<TContext, TOutput>;
}
