/**
 * Port: ProgressReporter — carries user-visible progress for long-running
 * pipeline phases (artifact export, eval runs, etc.).
 *
 * Events follow a `start / progress (batch) / complete` shape. Producers
 * publish events without formatting; the CLI adapter decides cadence,
 * layout, and whether to render at all.
 *
 * Scope today: the artifact export phase that runs after promptfoo finishes
 * evaluation (W0053). Forward-compatible with future callers — e.g. the eval
 * phase itself once we replace promptfoo's terminal-owned progress bar.
 *
 * @see docs/work-items/W0053-cli-artifact-upload-progress.json
 */
export interface PhaseStartEvent {
    /** Stable phase identifier. Adapters may use this to disambiguate if phases overlap. */
    phaseId: string;
    /** Human-readable label (e.g. `"Exporting run artifacts"`). */
    label: string;
    /**
     * Optional extra context shown only on the header line (e.g. destination
     * info such as `"local + GCS"`). Kept separate from `label` so the
     * per-progress-line prefix stays short and scannable on every line.
     */
    detail?: string;
    /** Total work expected, when known up front. */
    totalItems?: number;
    /** Total bytes expected, when known up front. */
    totalBytes?: number;
    /** Wall-clock timestamp when the phase started (ms since epoch). */
    startedAt: number;
}
export interface PhaseProgressEvent {
    phaseId: string;
    /** Items completed in this batch. Default `1`. */
    items?: number;
    /** Bytes transferred in this batch. Default `0`. */
    bytes?: number;
    /** Label for the most recent item (e.g. artifact path). */
    label?: string;
}
export interface PhaseCompleteEvent {
    phaseId: string;
    itemsCompleted: number;
    bytesCompleted: number;
    durationMs: number;
    /** Optional override for the final summary line. */
    summary?: string;
}
export interface ProgressReporter {
    phaseStart(event: PhaseStartEvent): void;
    phaseProgress(event: PhaseProgressEvent): void;
    phaseComplete(event: PhaseCompleteEvent): void;
}
/** No-op reporter — used when progress rendering is disabled (quiet / JSON logger / tests). */
export declare class NoOpProgressReporter implements ProgressReporter {
    phaseStart(): void;
    phaseProgress(): void;
    phaseComplete(): void;
}
/**
 * Canonical phase identifier for the post-eval artifact export span (W0053).
 * Shared between writer wiring and the pipeline orchestrator so both sides
 * publish to the same phase.
 */
export declare const ARTIFACT_EXPORT_PHASE_ID = "artifact-export";
/**
 * Options shared by artifact writer adapters that publish progress events.
 * Kept in the port module so every writer adapter imports the same shape.
 */
export interface ArtifactWriterProgressOptions {
    reporter: ProgressReporter;
    phaseId: string;
}
