/**
 * concurrency — small primitives the evolution loop needs.
 *
 * `Mutex` is a zero-dep async lock with FIFO fairness. The evolution loop
 * uses it to serialise checkout/build/commit sequences inside a single
 * pool slot, and to gate concurrent JSONL writers (see
 * `lockedJsonlReferenceReplayStore`).
 *
 * Deliberately minimal — no priority queue, no timeouts. If you need
 * those, swap to `async-mutex` at the call site.
 */
export declare class Mutex {
    private locked;
    private readonly waiters;
    acquire(): Promise<() => void>;
    private release;
    runExclusive<T>(fn: () => Promise<T> | T): Promise<T>;
    /** True iff someone holds the lock right now. Diagnostics only. */
    get isLocked(): boolean;
    /** Pending waiter count. Diagnostics only. */
    get pending(): number;
}
//# sourceMappingURL=concurrency.d.ts.map