/**
 * BootstrapTaskManager — 冷启动异步任务管理器
 *
 * 核心职责：
 *   1. 管理 bootstrap 异步任务的生命周期（skeleton → filling → completed）
 *   2. 通过 EventBus 发射进度事件
 *   3. 通过 RealtimeService 推送进度到前端 (Socket.io)
 *   4. 支持查询当前 bootstrap 会话状态
 *
 * 任务状态流:
 *   skeleton → filling → completed / failed
 *
 * 事件类型:
 *   bootstrap:started      — 冷启动开始，携带任务清单
 *   bootstrap:task-started  — 单个维度/Skill 开始填充
 *   bootstrap:task-completed — 单个维度/Skill 填充完成
 *   bootstrap:task-failed   — 单个任务失败
 *   bootstrap:all-completed — 全部任务完成
 */
import type { EventBus } from '../../infrastructure/event/EventBus.js';
import type { SignalBus } from '../../infrastructure/signal/SignalBus.js';
interface TaskMeta {
    type?: string;
    dimId?: string;
    label?: string;
    skillWorthy?: boolean;
    [key: string]: unknown;
}
interface TaskInfo {
    id: string;
    status: string;
    meta: TaskMeta;
    startedAt: number | null;
    completedAt: number | null;
    result: Record<string, unknown> | null;
    error: string | null;
}
interface TaskDef {
    id: string;
    meta: TaskMeta;
}
interface BootstrapTaskManagerOpts {
    eventBus?: EventBus | null;
    signalBus?: SignalBus | null;
    getRealtimeService?: (() => {
        broadcastEvent(name: string, data: unknown): void;
    } | null) | null;
}
/** 任务状态枚举 */
export declare const TaskStatus: Readonly<{
    SKELETON: "skeleton";
    FILLING: "filling";
    COMPLETED: "completed";
    FAILED: "failed";
}>;
/** 单个 Bootstrap 会话（一次冷启动的全部上下文） */
declare class BootstrapSession {
    completedAt: number | null;
    id: string;
    startedAt: number;
    status: string;
    summary: Record<string, unknown> | null;
    tasks: Map<string, TaskInfo>;
    constructor(sessionId: string);
    addTask(taskId: string, meta: TaskMeta): void;
    getTask(taskId: string): TaskInfo | undefined;
    get totalTasks(): number;
    get completedTasks(): number;
    get failedTasks(): number;
    get fillingTasks(): number;
    get skeletonTasks(): number;
    get isAllDone(): boolean;
    get totalToolCalls(): number;
    get progress(): number;
    toJSON(): {
        id: string;
        status: string;
        startedAt: number;
        completedAt: number | null;
        progress: number;
        total: number;
        completed: number;
        failed: number;
        filling: number;
        skeleton: number;
        totalToolCalls: number;
        tasks: {
            id: string;
            status: string;
            meta: TaskMeta;
            startedAt: number | null;
            completedAt: number | null;
            result: Record<string, unknown> | null;
            error: string | null;
        }[];
        summary: Record<string, unknown> | null;
    };
}
export declare class BootstrapTaskManager {
    #private;
    constructor({ eventBus, signalBus, getRealtimeService }?: BootstrapTaskManagerOpts);
    /**
     * 启动新的 bootstrap 会话
     *
     * 如果上一个会话仍在运行，自动 abort 后再创建新会话（防止重复触发产出重复 Candidate）。
     *
     * @param taskDefs 任务定义列表
     */
    startSession(taskDefs: TaskDef[]): BootstrapSession;
    /**
     * 中止当前 bootstrap 会话
     *
     * 将所有未完成的任务标记为 failed，并将 session 标记为 aborted。
     * 异步填充函数通过 `isSessionValid(sessionId)` 检测到 session 已变更后自动退出。
     *
     * @param [reason='Aborted by user']
     */
    abortSession(reason?: string): void;
    /**
     * 获取当前 session 的 AbortSignal
     *
     * 用于传入 AgentRuntime.execute()，使得 abortSession() 可以立即中断正在执行的 AI 调用，
     * 而不是等到下一个维度边界才检测到取消。
     */
    getSessionAbortSignal(): AbortSignal | null;
    /**
     * 验证 sessionId 是否仍然是活跃 session
     *
     * 用于异步填充函数在每次循环迭代前检测：如果 session 已被新请求覆盖，
     * 则当前异步填充应立即停止，避免产出重复内容。
     */
    isSessionValid(sessionId: string): boolean;
    /** 标记单个任务开始填充 */
    markTaskFilling(taskId: string): void;
    /**
     * 标记单个任务完成
     * @param result 填充结果摘要 { created, items, ... }
     */
    markTaskCompleted(taskId: string, result?: Record<string, unknown>): void;
    /** 标记单个任务失败 */
    markTaskFailed(taskId: string, error: unknown): void;
    /** 获取当前 session 状态（供 HTTP 轮询） */
    getSessionStatus(): {
        id: string;
        status: string;
        startedAt: number;
        completedAt: number | null;
        progress: number;
        total: number;
        completed: number;
        failed: number;
        filling: number;
        skeleton: number;
        totalToolCalls: number;
        tasks: {
            id: string;
            status: string;
            meta: TaskMeta;
            startedAt: number | null;
            completedAt: number | null;
            result: Record<string, unknown> | null;
            error: string | null;
        }[];
        summary: Record<string, unknown> | null;
    } | {
        status: string;
        message: string;
    };
    /** 是否有正在进行的 bootstrap */
    get isRunning(): boolean;
    /**
     * 向 EventBus + Socket.io 发射任意进度事件
     *
     * 用途：不走 bootstrap session 模型的长操作（如 AI 润色）也能复用
     * 同一套 EventBus + RealtimeService 双通道推送。
     *
     * @param eventName 事件名（如 'refine:started'）
     * @param data 事件负载
     */
    emitProgress(eventName: string, data: unknown): void;
}
export {};
