export type AgentState = "idle" | "running";
export interface AgentFinishedEvent<TOutput> {
    type: "finished";
    output: TOutput;
}
export interface AgentErrorEvent {
    type: "error";
    error: Error;
}
export interface AgentAbortedEvent<TOutput> {
    type: "aborted";
    error: Error;
    partial?: TOutput;
}
export interface AgentStateEvent {
    type: "state";
    state: AgentState;
}
export interface AgentCustomEvent<TType extends string, TData = any> {
    type: TType;
    data: TData;
}
export type AgentEvent<TOutput, TCustomEvents = never> = AgentFinishedEvent<TOutput> | AgentErrorEvent | AgentAbortedEvent<TOutput> | AgentStateEvent | TCustomEvents;
export type AgentEventListener<TOutput, TCustomEvents = never> = (event: AgentEvent<TOutput, TCustomEvents>) => void;
export declare abstract class Agent<TInput, TOutput, TCustomEvents = never> {
    private listeners;
    private _state;
    get state(): AgentState;
    subscribe(listener: AgentEventListener<TOutput, TCustomEvents>): () => void;
    run(input?: TInput, options?: {
        signal?: AbortSignal;
    }): Promise<TOutput>;
    private setState;
    protected emit(event: AgentEvent<TOutput, TCustomEvents>): void;
    protected abstract runInternal(input?: TInput, options?: {
        signal?: AbortSignal;
    }): Promise<TOutput>;
}
