/**
 * {@link ConsoleSink}: a human-facing sink that prints one tidy line per closed
 * segment.
 *
 * It drains a {@link SignalChannel} and ignores `open`/`update` chatter,
 * emitting a single formatted line only when a segment *closes* — i.e. on each
 * {@link CloseSignal} / {@link TraceRecord}. The line carries the status, the
 * segment kind and name, the wall-clock duration, and a short trace/segment id
 * tag, e.g.:
 *
 * ```text
 * ✓ inference  chat.completion        842ms  [a1b2c3d4/9f8e7d6c]
 * ✗ action     write_file              12ms  [a1b2c3d4/0011aabb] — EACCES: permission denied
 * ```
 *
 * Output goes through an injected `log` function (default `console.log`) so the
 * sink stays testable and never reaches for a global directly beyond that
 * default.
 */
import type { SignalChannel } from "../channel/signal";
import type { Sink } from "./base";
/** Tuning for a {@link ConsoleSink}. */
export interface ConsoleSinkOptions {
    /**
     * Where formatted lines go. Defaults to `console.log`. Injected for tests and
     * for routing to alternative loggers.
     */
    readonly log?: (line: string) => void;
}
/**
 * A {@link Sink} that prints one line per closed segment to a `log` function.
 *
 * Stateless and resource-free: it owns no buffer and no handle, so it needs
 * neither `flush` nor `close`. Constructing it does nothing until {@link drain}
 * is awaited on a channel.
 */
export declare class ConsoleSink implements Sink {
    private readonly log;
    constructor(options?: ConsoleSinkOptions);
    /** Render the one-line summary for a closed segment. */
    private format;
    /** Drain `channel`, printing a line for every `close` signal. */
    drain(channel: SignalChannel): Promise<void>;
}
