import type { ChangeRequest } from '../../types/change-request-types';
import type { VariantPickEnvelope, VariantPickPayload } from './contracts';
/**
 * Bridge contract — matches `SessionBridgeService.queueChangeRequest` so this
 * adapter can pass a `SessionBridgeService` instance directly. The fake bridge
 * in unit tests captures intents without touching disk.
 */
export interface BridgeQueue {
    queueChangeRequest(intent: ChangeRequest): void;
}
/** @deprecated — alias kept for tests that haven't migrated yet. */
export type BridgeChangeIntent = ChangeRequest;
export interface AdapterTelemetry {
    enqueued(envelope: VariantPickEnvelope): void;
    duplicateSuppressed(envelope: VariantPickEnvelope): void;
}
export declare class PendingChangesAdapter {
    private readonly enqueued;
    private readonly bridge;
    private readonly telemetry;
    constructor(bridge: BridgeQueue, telemetry?: AdapterTelemetry);
    /**
     * Enqueue a chosen variant into the existing pending-changes channel.
     * Idempotent on `{sourceSessionId, variantId}`: a repeated submit with the
     * same key returns `enqueued: false, duplicate: true` and does not re-call
     * the bridge.
     */
    enqueue(envelope: VariantPickEnvelope): {
        enqueued: boolean;
        duplicate: boolean;
    };
    /**
     * Test/inspect helper — count of unique variants successfully enqueued.
     */
    size(): number;
}
export type { VariantPickPayload };
//# sourceMappingURL=pendingChangesAdapter.d.ts.map