/**
 * gen-html-multiple concurrency scheduler다.
 * queue/running set을 명시적으로 관리하고, concurrency 변경을 일관된 dispatch 규칙으로 처리한다.
 */
import type { TraceLogger } from '../../../platform/types/index';
import type { GenHtmlComponentInput } from '../../gen-html/domain/types';
import type { GenHtmlMultipleServerSnapshot, MultipleComponentRuntimeState } from '../domain/scheduler-state';
export type GenHtmlMultipleWorkerResult = {
    generatedFiles: string[];
    historyPath: string;
    previewUrl: string;
    restartRequired: boolean;
};
type SchedulerOptions = {
    runComponent: (component: MultipleComponentRuntimeState, index: number, signal: AbortSignal) => Promise<GenHtmlMultipleWorkerResult>;
    state: GenHtmlMultipleServerSnapshot;
    trace: TraceLogger;
};
export declare class GenHtmlMultipleScheduler {
    private readonly activeComponentIds;
    /** 실행 중인 컴포넌트별 AbortController. 개별 "취소" 요청 시 AI 자식 프로세스를 종료한다. */
    private readonly abortControllers;
    /** 실행 중인 worker 의 종료 promise. 전체 종료(abort) 후 정리 완료를 기다리는 데 사용한다. */
    private readonly workerPromises;
    private readonly options;
    private batchPromise;
    private resolveBatch;
    constructor(options: SchedulerOptions);
    /**
     * @description 새 batch를 시작하고 dispatch를 수행한다.
     * @param components 실행할 컴포넌트 목록
     * @param concurrency 희망 동시 실행 수
     * @returns batch 완료 promise
     */
    startBatch(components: GenHtmlComponentInput[], concurrency: unknown): Promise<void>;
    /**
     * @description 실행 중 concurrency를 변경한다.
     * @param concurrency 새 concurrency
     */
    setDesiredConcurrency(concurrency: unknown): void;
    /**
     * @description 현재 batch 완료 promise를 반환한다.
     * @returns batch promise 또는 undefined
     */
    getBatchPromise(): Promise<void> | undefined;
    /**
     * @description
     * 진행 중인 batch 를 전체 종료한다. (사용자 종료 요청 시 사용)
     * 실행 중인 worker 는 AbortController 로 중단해 AI 자식 프로세스를 종료하고(백그라운드 고아 작업 방지),
     * 대기 중인 queued 컴포넌트는 cancelled terminal 로 정리한다.
     * abort 된 worker 가 cancelled 로 반영될 때까지 기다리려면 waitForActiveWorkers() 를 함께 호출한다.
     */
    cancel(): void;
    /**
     * @description
     * 현재 실행 중인(또는 abort 직후 정리 중인) worker 들이 모두 settle 될 때까지 기다린다.
     * cancel() 직후 호출하면 abort 된 worker 가 cancelled 로 반영된 최종 상태를 보장한다.
     * @returns 모든 활성 worker 가 종료되면 resolve 되는 promise
     */
    waitForActiveWorkers(): Promise<void>;
    /**
     * @description
     * 개별 컴포넌트를 취소한다. (ESC와 동일한 효과)
     * 실행 중이면 AbortController로 AI 자식 프로세스를 종료하고, 대기 중이면 시작 전에 취소 처리한다.
     * @param componentId 취소할 컴포넌트 id
     * @returns 취소 요청이 적용됐는지 여부 (이미 종료된 컴포넌트면 false)
     */
    cancelComponent(componentId: string): boolean;
    private dispatch;
    private startWorker;
    private recalculateState;
    private resolveIfSettled;
}
export {};
//# sourceMappingURL=scheduler.d.ts.map