/**
 * @file `resolveSbt()` — SBT resolution entry point. Tries each source in
 *   order:
 *
 *   1. VFS — smol binary's embedded `sbt-launch.jar` (if packed)
 *   2. PATH — `sbt` script on the system PATH
 *   3. download — upstream GitHub release tgz (only when `downloadIfMissing` is
 *      passed) VFS-sourced SBT is a `.jar` that must be invoked as `java -jar
 *      <path>` using the JRE resolved separately via `resolveJre()`. PATH- and
 *      download-sourced SBT is the `sbt` script, which finds its own JRE.
 *      Memoized per option-shape.
 */
import type { BinaryDownloader } from '../from-download';
import type { HashSpec } from '../../integrity';
import type { ResolvedSbt } from './types';
export interface ResolveSbtOptions {
    /**
     * 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;
        integrity?: HashSpec | undefined;
        cacheDir?: string | undefined;
        downloader?: BinaryDownloader | undefined;
    } | undefined;
}
export declare function cacheKey(opts: ResolveSbtOptions | undefined): string;
export declare function doResolveSbt(opts?: ResolveSbtOptions | undefined): Promise<ResolvedSbt | undefined>;
export declare function resetSbtResolution(): void;
export declare function resolveSbt(opts?: ResolveSbtOptions | undefined): Promise<ResolvedSbt | undefined>;
