import { IAssistantEvents, IAssistantState, IAssistantStep, TAssistantStatus, TAssistantStrategyName } from './types';
import { LlmProvider } from '../llm';
import { AssistantSource } from './source';
import { TFunction } from '../../../types';
import * as strategies from './strategies';
export * from './strategies';
export * from './source';
export * from './types';
export declare class Assistant {
    source: AssistantSource;
    strategies: strategies.AssistantStrategy[];
    context: {
        cwd: string;
        provider: LlmProvider;
        target: number;
        iterations: number;
        /** Restricts to use only provided strategies */
        strategies?: TAssistantStrategyName[];
    };
    status: TAssistantStatus;
    steps: IAssistantStep[];
    state: IAssistantState;
    private counter;
    private events;
    private spent;
    constructor(source: AssistantSource, strategies: strategies.AssistantStrategy[], context: {
        cwd: string;
        provider: LlmProvider;
        target: number;
        iterations: number;
        /** Restricts to use only provided strategies */
        strategies?: TAssistantStrategyName[];
    });
    calculateTimeSpent(): number;
    clear(): Promise<void>;
    run(iterations?: number): Promise<void>;
    is(statuses: TAssistantStatus[]): boolean;
    on<K extends keyof IAssistantEvents>(key: K, listener: TFunction<unknown, IAssistantEvents[K]>): this;
    once<K extends keyof IAssistantEvents>(key: K, listener: TFunction<unknown, IAssistantEvents[K]>): this;
    private emit;
    private complete;
    private register;
    static build(location: string, options?: Omit<Partial<Assistant['context']>, 'model'> & {
        model?: string;
        rate?: number;
    }): Promise<Assistant>;
}
//# sourceMappingURL=index.d.ts.map