/** Carry only a leaf-approved replay retirement across one call's attempts. */
import type { LLMCallHooks, LLMChunk, LLMRequest, LLMResponse } from '../provider-contract/types.js';
/**
 * The leaf still chooses whether anything may be omitted. A retry or fallback
 * must remember that choice before its next attempt, even when the first wire
 * fails after preparation. Never adopt the whole prepared request: resolved
 * models, cache hints and other wire-local adjustments belong to that leaf.
 */
export declare function replayAttempts(request: LLMRequest, hooks?: LLMCallHooks): {
    readonly request: LLMRequest;
    /** The reliability loop explicitly owns feedback and other request changes. */
    replaceRequest(next: LLMRequest): void;
    response: (answer: LLMResponse) => LLMResponse;
    chunk: (item: LLMChunk) => LLMChunk;
    /** Preserve the underlying iterator's cancellation/throw protocol. */
    iterator(inner: AsyncIterator<LLMChunk>): AsyncIterator<LLMChunk>;
    hooks: {
        onReplayPrepared(preparation: import("../thinking/replay.js").ReplayPreparation): void;
        onResilience?: ((report: import("../provider-contract/types.js").ResilienceReport) => void) | undefined;
    };
};
