/**
 * PhasePipeline - Phase 간 대기 시간 제거를 위한 파이프라인 시스템
 *
 * 핵심 기능:
 * 1. 현재 Phase 실행 중 다음 Phase 준비 (background)
 * 2. Phase 완료 시 즉시 다음 Phase 시작 (no wait)
 * 3. Phase 실패 시 파이프라인 중단
 */
import { PhaseProgress } from '../lib/IterationTracker.js';
import { ToolResult } from '../types/tool.js';
import type { CheckpointGate } from './CheckpointManager.js';
/** 파이프라인 스테이지 인터페이스 */
export interface PipelineStage {
    /** 스테이지 이름 */
    name: string;
    /** 준비 작업 (백그라운드 실행 가능). signal 로 취소 가능. */
    prepare?: (signal?: AbortSignal) => Promise<StageContext>;
    /** 메인 실행 */
    execute: (context: StageContext) => Promise<StageResult>;
    /** 정리 작업 */
    cleanup?: (context: StageContext) => Promise<void>;
}
/** 스테이지 컨텍스트 (Phase 간 데이터 전달) */
export interface StageContext {
    phaseNumber: number;
    phaseName: string;
    data: Record<string, unknown>;
    preparedData?: Record<string, unknown>;
    previousResult?: StageResult;
    /** All previous phase results (available when using resultStore or resumeFrom) */
    allPreviousResults?: StageResult[];
    /** 파이프라인 취소/타임아웃 signal — prepare·execute 가 길게 도는 작업을 중단할 때 사용. */
    signal?: AbortSignal;
}
/** 스테이지 결과 */
export interface StageResult {
    success: boolean;
    output: string;
    error?: string;
    duration: number;
    artifacts?: string[];
}
/** 파이프라인 옵션 */
export interface PipelineOptions {
    /** ULTRAWORK 모드 (대기 없음) */
    ultrawork?: boolean;
    /** 최대 재시도 횟수 */
    maxRetries?: number;
    /** 전체 파이프라인 타임아웃 (ms) */
    timeout?: number;
    /** 프로젝트 루트 경로 (progress 파일 저장용) */
    projectRoot?: string;
    /** Phase 완료 시 콜백 */
    onPhaseComplete?: (phase: PhaseProgress, result: StageResult) => void;
    /** Phase 시작 시 콜백 */
    onPhaseStart?: (phase: PhaseProgress) => void;
    /** 에러 발생 시 콜백 */
    onError?: (phase: PhaseProgress, error: Error) => void;
    /** Enable file-based result persistence */
    resultStore?: boolean;
    /** Checkpoint gates between phases */
    checkpoints?: CheckpointGate[];
    /** Resume from specific phase number (loads previous results from disk) */
    resumeFrom?: number;
    /** Callback when pipeline pauses at a checkpoint */
    onCheckpointPause?: (phaseNumber: number, gate: CheckpointGate) => void;
}
/** 파이프라인 결과 */
export interface PipelineResult {
    success: boolean;
    featureName: string;
    totalPhases: number;
    completedPhases: number;
    failedPhase?: number;
    totalDuration: number;
    results: StageResult[];
    error?: string;
    /** Phase number where pipeline paused at a checkpoint (if any) */
    pausedAtCheckpoint?: number;
}
export declare class PhasePipeline {
    private featureName;
    private stages;
    private options;
    private abortController;
    private backgroundPreparations;
    private resultStore;
    private checkpointManager;
    constructor(featureName: string, options?: PipelineOptions);
    /** 스테이지 추가 */
    addStage(stage: PipelineStage): this;
    /** 여러 스테이지 추가 */
    addStages(stages: PipelineStage[]): this;
    /** 파이프라인 실행 */
    execute(): Promise<PipelineResult>;
    /** 파이프라인 취소 */
    cancel(): void;
    /** 특정 Phase 백그라운드 준비 시작 (다음 phase 1개만 — B-6) */
    private startBackgroundPreparation;
}
/**
 * 간단한 스테이지 생성 헬퍼
 */
export declare function createStage(name: string, execute: (context: StageContext) => Promise<StageResult>, options?: {
    prepare?: () => Promise<StageContext>;
    cleanup?: (context: StageContext) => Promise<void>;
}): PipelineStage;
/**
 * 파이프라인 생성 헬퍼
 */
export declare function createPipeline(featureName: string, stages: PipelineStage[], options?: PipelineOptions): PhasePipeline;
/**
 * ULTRAWORK 파이프라인 생성 (권장)
 */
export declare function createUltraworkPipeline(featureName: string, stages: PipelineStage[], options?: Omit<PipelineOptions, 'ultrawork'>): PhasePipeline;
/**
 * 파이프라인 결과를 ToolResult로 변환
 */
export declare function pipelineResultToToolResult(result: PipelineResult): ToolResult & {
    pipelineResult: PipelineResult;
};
//# sourceMappingURL=PhasePipeline.d.ts.map