import EventEmitter from 'events';
import { ZodType } from 'zod/v3';
import { ProviderMetadata, Tool } from 'ai';
import { GroupContent } from '../../content';
import { TAssistantStrategyRunStatus } from '../types';
import { AssistantSource } from '../source';
import { LlmProvider } from '../../llm';
interface IAgentToolCall {
    type: 'tool';
    id: string;
    name: string;
    input: unknown;
    output: {
        type: 'text' | 'json' | 'error';
        value: unknown;
    };
    provider?: ProviderMetadata;
}
interface IAgentReasoning {
    type: 'reasoning';
    id: string;
    text: string;
    provider?: ProviderMetadata;
}
export declare class AssistantStrategyError extends Error {
    type: 'EMPTY_OUTPUT' | 'WRONG_RESPONSE' | 'BAD_API_CALL';
    reason: string;
    constructor(type: 'EMPTY_OUTPUT' | 'WRONG_RESPONSE' | 'BAD_API_CALL', reason?: string);
    is(types: AssistantStrategyError['type'][]): boolean;
    static convert(error: unknown): AssistantStrategyError;
}
export declare abstract class AssistantStrategy extends EventEmitter<{
    reasoning: [{
        text: string;
        iteration: number;
    }];
    tool: [{
        name: string;
        iteration: number;
        status: 'OK' | 'ERROR';
    }];
}> {
    name: string;
    source: AssistantSource;
    private provided;
    provider: LlmProvider;
    history: Set<{
        generated: string;
        message: string;
    }>;
    tools: Record<string, Tool>;
    constructor(name: string, source: AssistantSource, provided: Pick<AssistantStrategy, 'provider'> & {
        target?: number;
    });
    abstract run(): Promise<TAssistantStrategyRunStatus>;
    protected compileContext(): Record<'overview' | 'project' | 'history', GroupContent>;
    protected generate<T>(provided: {
        schema: ZodType<T>;
        messages: {
            user: string;
            system: string;
            info?: string;
            history?: {
                actions: (IAgentToolCall | IAgentReasoning)[];
                provider?: ProviderMetadata;
            }[];
        };
        errors?: AssistantStrategyError[];
        iteration?: number;
        limit?: number;
    }): Promise<T | null>;
}
export {};
//# sourceMappingURL=model.d.ts.map