export type DepName = "ffmpeg" | "ffprobe";
/** How a binary path was resolved — surfaced by detect() for I14's doctor. */
export type DepSource = "env" | "managed" | "vendored" | "path";
export interface DepResolution {
    /** The resolved invocation string passed to child_process spawn/execFile. */
    path: string;
    /** Which precedence tier produced `path`. */
    source: DepSource;
    /** Absolute path of the managed copy (whether or not it exists yet). */
    managedPath: string;
    /** Whether the managed copy currently exists on disk. */
    managedExists: boolean;
    /** Absolute path of the vendored binary, or null if unresolvable. */
    vendoredPath: string | null;
}
/** Absolute path of the managed copy for `name` (may not exist yet). */
export declare function managedPathFor(name: DepName): string;
/**
 * Absolute path of the vendored binary, or null if the package is unavailable
 * / unsupported on this platform. Wrapped in try/catch so a missing or broken
 * vendored package can never crash the resolver — we just fall through to PATH.
 *
 * NB: ffmpeg-static's default export IS the path string; @ffprobe-installer's
 * default export is an object with a `.path`. ffmpeg-static reads its OWN env
 * var `FFMPEG_BIN` first (note: NOT one of ours) — we never set that env var,
 * so the bundled path is what we get.
 */
export declare function vendoredPathFor(name: DepName): string | null;
/** Resolved ffmpeg invocation string. Sync + cached. */
export declare function getFfmpegPath(): string;
/** Resolved ffprobe invocation string. Sync + cached. */
export declare function getFfprobePath(): string;
/** Full resolution diagnostics for both binaries (no caching, always fresh). */
export declare function detect(): Record<DepName, DepResolution>;
/**
 * Copy the vendored ffmpeg/ffprobe binaries into ~/.autoviral/bin so the
 * "managed location" contract is real (I14's doctor detects them there).
 *
 * Idempotent: skips a binary whose managed copy already exists. Best-effort:
 * a failed copy is swallowed — callers on a render path MUST NOT have their work
 * interrupted just because the managed copy failed; the resolver falls back to
 * the vendored absolute path. Concurrent calls share one in-flight promise so a
 * burst of callers doesn't copy N times.
 */
export declare function ensureManaged(): Promise<void>;
/** Test-only: clear the resolution cache + in-flight guard so precedence tests
 *  can re-resolve under a freshly mutated env / filesystem. */
export declare function _resetDepsCacheForTests(): void;
//# sourceMappingURL=deps.d.ts.map