import { AutoBeEventSource, AutoBePreliminaryKind, AutoBeProgressEventBase, AutoBeRealizeFunction } from "@autobe/interface";
import { ILlmController } from "typia";
import { AutoBeContext } from "../../../context/AutoBeContext";
import { IAutoBeOrchestrateHistory } from "../../../structures/IAutoBeOrchestrateHistory";
import { AutoBePreliminaryController } from "../../common/AutoBePreliminaryController";
import { IAutoBeRealizeFunctionFailure } from "../structures/IAutoBeRealizeFunctionFailure";
import { IAutoBeRealizeFunctionResult } from "../structures/IAutoBeRealizeFunctionResult";
interface IProgrammer<RealizeFunction extends AutoBeRealizeFunction, PreliminaryKind extends AutoBePreliminaryKind, Complete> {
    template(func: RealizeFunction): string;
    replaceImportStatements(props: {
        function: RealizeFunction;
        code: string;
    }): Promise<string>;
    additional(functions: RealizeFunction[]): Record<string, string>;
    histories(props: {
        function: RealizeFunction;
        failures: IAutoBeRealizeFunctionFailure<RealizeFunction>[];
        preliminary: AutoBePreliminaryController<PreliminaryKind>;
    }): Promise<IAutoBeOrchestrateHistory>;
    controller(next: {
        function: RealizeFunction;
        preliminary: AutoBePreliminaryController<PreliminaryKind>;
        source: Exclude<AutoBeEventSource, "facade" | "preliminaryAcquire">;
        build(next: Complete): void;
    }): ILlmController;
    preliminary(props: {
        function: RealizeFunction;
        source: Exclude<AutoBeEventSource, "facade" | "preliminaryAcquire">;
    }): AutoBePreliminaryController<PreliminaryKind>;
    location: string;
}
interface IComplete {
    draft: string;
    revise: {
        review: string;
        final: string | null;
    };
}
export declare const orchestrateRealizeCorrectOverall: <RealizeFunction extends AutoBeRealizeFunction, PreliminaryKind extends AutoBePreliminaryKind, Complete extends IComplete>(ctx: AutoBeContext, props: {
    programmer: IProgrammer<RealizeFunction, PreliminaryKind, Complete>;
    functions: RealizeFunction[];
    progress: AutoBeProgressEventBase;
}, life?: number) => Promise<IAutoBeRealizeFunctionResult<RealizeFunction>[]>;
export {};
