import type { CaptureReport, FormFactor, PlatformKind, ResolvedConfig, RunRecord, Scheme, ShotRecord } from "../types.js"; export interface ShotAxes { target: string; route: string; state: string; platform: PlatformKind; formFactor: FormFactor; scheme: Scheme; } /** The canonical filesystem token for a route. */ export declare function routeSlug(route: string): string; export { legacyRouteSlug } from "./route-identity.js"; export declare function shotId(a: ShotAxes): string; /** Path relative to the evidence dir. */ export declare function shotRelPath(a: ShotAxes): string; export declare function reportPath(resolved: ResolvedConfig): string; export declare function loadReport(resolved: ResolvedConfig, opts?: { preservePaths?: ReadonlySet; }): Promise; /** * Merge a finished run into the report: shots replace same-id records, the run * appends. Atomic tmp+rename so a crash never leaves a torn report. */ export declare function mergeRun(resolved: ResolvedConfig, run: RunRecord, shots: ShotRecord[], opts?: { /** * The full config's targets, passed only by an UNSCOPED capture: web * shots no longer describing a configured route/state are dropped from * the report. A scoped capture cannot see the whole config's intent, so * it never prunes. */ pruneNotIn?: import("../targets.js").ResolvedTarget[]; /** Synthesized states navigation.json still names, per target|route key. */ plannedStates?: ReadonlyMap>; }): Promise<{ report: CaptureReport; pruned: number; }>; export declare function writeShotFile(resolved: ResolvedConfig, axes: ShotAxes, png: Buffer | Uint8Array): Promise<{ rel: string; abs: string; }>; /** * The provenance sidecar beside a shot: the PNG path plus a suffix, so the * pairing is self-evident in a directory listing and the sidecar inherits the * PNG's overwrite-in-place lifecycle. This is the one place the convention * lives on the write side. */ export declare function sidecarRelPath(a: ShotAxes): string; /** The accessibility-tree sidecar beside a shot, by the same convention. */ export declare function ariaRelPath(a: ShotAxes): string; export declare function writeShotAria(resolved: ResolvedConfig, axes: ShotAxes, sidecar: unknown): Promise<{ rel: string; abs: string; }>; export declare function writeShotSidecar(resolved: ResolvedConfig, axes: ShotAxes, sidecar: unknown): Promise<{ rel: string; abs: string; }>;