import type { AgentInputItem } from '../../types';
import type { Model } from '../../model';
import type { Tool, ToolCallDetails } from '../../tool';
import type { Span, Trace } from '../../tracing';
import type { Manifest } from '../manifest';
import type { SandboxSessionLike } from '../session';
import type { SandboxUser } from '../users';
import type { SandboxWorkspaceScope } from '../workspacePaths';
export type CapabilityInstructionsResult = string | null | Promise<string | null>;
export declare abstract class Capability {
    abstract readonly type: string;
    protected _session?: SandboxSessionLike;
    protected _runAs?: string;
    protected _modelInstance?: Model;
    protected _tracingParent?: Span<any> | Trace;
    protected _workspaceScope?: SandboxWorkspaceScope;
    clone(): this;
    bind(session: SandboxSessionLike): this;
    bindRunAs(runAs?: string | SandboxUser): this;
    bindModel(_model: string, modelInstance?: Model): this;
    bindTracingParent(parent?: Span<any> | Trace): this;
    bindWorkspaceScope(scope: SandboxWorkspaceScope): this;
    protected modelResourcePath(manifest: Manifest, path: string): string;
    protected tracingParent(details?: ToolCallDetails): Span<any> | Trace | undefined;
    requiredCapabilityTypes(): Set<string>;
    tools(): Tool<any>[];
    processManifest(manifest: Manifest): Manifest;
    instructions(_manifest: Manifest): CapabilityInstructionsResult;
    samplingParams(_samplingParams: Record<string, unknown>): Record<string, unknown>;
    processContext(context: AgentInputItem[]): AgentInputItem[];
}
export type ConfigureCapabilityTools = (tools: Tool<any>[]) => Tool<any>[];
export declare function requireBoundSession(capabilityType: string, session?: SandboxSessionLike): SandboxSessionLike;
