import { TaoConfig, TaoEvent, TaoEventListener, TaoStatus, ZenExecutor, ZenInput, ZenRetryConfig, ZenState, ZenStatus } from "./type";
import { Zen } from "./Zen";
export interface TaoRuntimeState {
    name: string;
    description?: string;
    status: TaoStatus;
    progress: number;
    paused: boolean;
    executionTime?: number;
    startTime?: number;
    zens: {
        id: string;
        name: string;
        status: ZenStatus;
        error?: string;
        result?: any;
        startTime?: number;
    }[];
}
export interface TaoState {
    taos: Record<string, TaoRuntimeState>;
    states: Record<string, Record<string, ZenState>>;
    events: Record<string, TaoEvent[]>;
}
export declare class Tao {
    private config;
    private static store;
    static use: <T = TaoState>(selector?: (state: TaoState) => T) => T;
    static current(): TaoState;
    private zens;
    private eventListeners;
    private abortController;
    private pausePromise?;
    private pauseResolve?;
    private hasRun;
    private id?;
    private status;
    private startTime?;
    private runningZens;
    private static instances;
    private cleanupFunctions;
    private static maxConcurrentTaos;
    private static runningTaos;
    /**
     * 创建任务实例
     * @param config - 任务配置
     */
    constructor(config: TaoConfig);
    /**
     * 注册任务到存储
     * @returns Tao - 返回任务实例
     * @throws Error - 如果任务已注册则抛出错误
     */
    register(): Tao;
    /**
     * 从存储中移除任务
     * @throws Error - 如果任务未注册则抛出错误
     */
    remove(): void;
    /**
     * 清理任务资源
     * 包括：
     * 1. 取消所有运行中的步骤
     * 2. 清理事件监听器
     * 3. 清理步骤资源
     * 4. 重置运行时状态
     * 5. 执行注册的清理函数
     */
    private dispose;
    /**
     * 获取任务ID
     * @returns string - 任务ID
     * @throws Error - 如果任务未注册则抛出错误
     */
    getId(): string | undefined;
    /**
     * 创建新的任务步骤
     * @template TOutput - 输出结果类型
     * @param name - 步骤名称
     * @returns Zen - 创建的步骤实例
     */
    zen<TOutput = any>(name: string): Zen<ZenInput, TOutput>;
    set description(description: string);
    /**
     * 执行整个任务流程
     * @returns Promise<Map<string, any>> - 所有步骤的执行结果
     * @throws Error - 任务执行失败时抛出错误
     */
    run(): Promise<Map<string, any>>;
    /**
     * 暂停任务执行
     * @returns Promise<void>
     */
    pause(): Promise<void>;
    /**
     * 恢复已暂停的任务
     * @returns Promise<void>
     */
    resume(): Promise<void>;
    /**
     * 取消任务执行
     * @returns Promise<void>
     */
    cancel(): Promise<void>;
    /**
     * 注册事件监听器
     * @param listener - 事件处理函数
     * @returns () => void - 用于移除监听器的函数
     */
    on(listener: TaoEventListener): () => void;
    onFinish(listener: () => void): () => void;
    /**
     * 发出任务事件
     * 将事件通知所有注册的监听器
     * @param event - 事件角色
     */
    emit(event: TaoEvent): void;
    /**
     * 为特定步骤注册事件监听器
     * @param zenId - 步骤ID
     * @param listener - 事件处理函数
     * @returns () => void - 用于移除监听器的函数
     */
    onZen(zenId: string, listener: (event: TaoEvent) => void): () => void;
    /**
     * 获取任务名称
     * @returns string - 任务名称
     */
    getName(): string;
    /**
     * 获取所有步骤的状态
     */
    getAllZenStates(): Record<string, ZenState>;
    /**
     * 获取任务执行进度
     */
    getProgress(): number;
    /**
     * 获取任务状态
     * @returns 'pending' | 'running' | 'completed' | 'failed' | 'cancelled' | 'paused' - 任务状态
     */
    getStatus(): TaoStatus;
    /**
     * 获取任务执行时间
     * 计算从第一个步骤开始到最后一个步骤结束的时间
     */
    getExecutionTime(): number | undefined;
    /**
     * 获取所有步骤的错误信息
     */
    getErrors(): Map<string, Error>;
    /**
     * 根据ID获取步骤实例
     * @param id - 步骤ID
     * @returns Zen<any, any> - 步骤实例
     * @throws Error - 如果步骤不存在则抛出错误
     */
    getZenById(id: string): Zen<any, any>;
    /**
     * 根据名称获取步骤实例
     * @param name - 步骤名称
     * @returns Zen<any, any> | undefined - 步骤实例，如果不存在则返回undefined
     */
    getZenByName(name: string): Zen<any, any> | undefined;
    /**
     * 根据条件查找步骤实例
     * @param predicate - 查找条件函数
     * @returns Zen<any, any> | undefined - 符合条件的步骤实例，如果不存在则返回undefined
     */
    findZen(predicate: (zen: Zen<any, any>) => boolean): Zen<any, any> | undefined;
    /**
     * 获取任务的依赖关系树
     * @param zenId - 步骤ID
     * @returns Array - 包含步骤ID和其依赖的数组
     */
    getDependencyTree(zenId: string): {
        id: string;
        dependencies: string[];
    }[];
    /**
     * 执行单个步骤
     * @param zen - 要执行的步骤实例
     * @returns Promise<any> - 步骤执行结果
     */
    private executeZen;
    /**
     * 计算步骤的执行顺序
     * 使用拓扑排序算法，将步骤按依赖关系分组
     * @returns string[][] - 按批次分组的步骤ID数组
     * @throws Error - 如果存在循环依赖则抛出错误
     */
    private getExecutionOrder;
    /**
     * 获取任务的运行时状态
     */
    getRuntimeState(): TaoRuntimeState;
    /**
     * 快速执行单个任务
     * 创建一个只包含单个步骤的任务并执行
     * @param name - 任务名称
     * @param executor - 执行函数
     * @param options - 可选配置项
     * @returns Promise<any> - 执行结果
     */
    static run<T = any>(name: string, executor: ZenExecutor<ZenInput, T>, options?: {
        retry?: ZenRetryConfig;
        timeout?: number;
        onEvent?: TaoEventListener;
        onCancel?: () => void;
        register?: boolean;
    }): Promise<T>;
    /**
     * 暂停指定的任务
     * @param taoId - 任务ID
     * @returns Promise<boolean> - 是否成功暂停
     */
    static pause(taoId: string): Promise<boolean>;
    /**
     * 恢复指定的任务
     * @param taoId - 任务ID
     * @returns Promise<boolean> - 是否成功恢复
     */
    static resume(taoId: string): Promise<boolean>;
    /**
     * 取消指定的任务
     * @param taoId - 任务ID
     * @returns Promise<boolean> - 是否成功取消
     */
    static cancel(taoId: string): Promise<boolean>;
    /**
     * 重试指定的任务
     * @param taoId - 任务ID
     * @returns Promise<boolean> - 是否成功开始重试
     */
    static retry(taoId: string): Promise<boolean>;
    /**
     * 从存储中移除指定的任务
     * @param taoId - 任务ID
     * @returns boolean - 是否成功移除
     */
    static remove(taoId: string): boolean;
    private updateStatus;
    private handleZenError;
    /**
     * 重试任务
     * @returns Promise<Map<string, any>> - 所有步骤的执行结果
     */
    retry(): Promise<Map<string, any>>;
}
