/**
 * @file `resolveBazel()` — Bazel resolution entry point. Tries each source in
 *   order:
 *
 *   1. PATH — `bazelisk` (preferred) or `bazel` on the system PATH
 *   2. download — upstream GitHub release binary (only when `downloadIfMissing` is
 *      passed) No VFS tier: Bazel's version comes from the project's
 *      `.bazelversion`, not from a global pin, so a smol-bundled Bazel would
 *      always be the wrong version for any project that pinned a different one.
 *      Every Bazel use must go through the project-specific download path.
 *      Returns `undefined` if all of the enabled sources miss. Memoized per
 *      option-shape: calls with identical options return the same cached
 *      promise. Calling without `downloadIfMissing` and then with
 *      `downloadIfMissing` produces two distinct cache entries so the second
 *      call can fall through to the download tier.
 */
import type { BinaryDownloader } from '../from-download';
import type { HashSpec } from '../../integrity';
import type { ResolvedBazel } from './types';
export interface ResolveBazelOptions {
    /**
     * When set, the resolver falls through to a GitHub release download after the
     * local-discovery tiers miss. Omit to keep the resolver read-only.
     */
    downloadIfMissing?: {
        version: string;
        platformArch: string;
        integrity?: HashSpec | undefined;
        downloader?: BinaryDownloader | undefined;
    } | undefined;
}
export declare function cacheKey(opts: ResolveBazelOptions | undefined): string;
export declare function doResolveBazel(opts?: ResolveBazelOptions | undefined): Promise<ResolvedBazel | undefined>;
export declare function resetBazelResolution(): void;
export declare function resolveBazel(opts?: ResolveBazelOptions | undefined): Promise<ResolvedBazel | undefined>;
