/**
 * Copyright: (c) Myia SAS 2026.
 * This file and its contents are licensed under the AGPLv3 License.
 * Please see the LICENSE file at the root of this repository
 */
export declare class HealTracesLayout {
    readonly rootDir: string;
    readonly executionId: string;
    static readonly DIRNAME = "heal-traces";
    static readonly NDJSON_FILENAME = "heal-traces.ndjson";
    static readonly NETWORK_NDJSON_FILENAME = "heal-network.ndjson";
    static readonly CONSOLE_NDJSON_FILENAME = "heal-console.ndjson";
    static readonly TRACE_FILENAME = "trace.zip";
    static readonly SCREENSHOTS_SUBDIR = "screenshots";
    static readonly VIDEOS_SUBDIR = "videos";
    static readonly EXECUTIONS_NDJSON = "executions.ndjson";
    static readonly EXECUTION_MANIFEST = "execution.json";
    constructor(rootDir: string, executionId: string);
    healTracesRoot(): string;
    executionDir(): string;
    testDir(playwrightTestId: string, attempt: number): string;
    ndjsonPath(playwrightTestId: string, attempt: number): string;
    networkNdjsonPath(playwrightTestId: string, attempt: number): string;
    consoleNdjsonPath(playwrightTestId: string, attempt: number): string;
    tracePath(playwrightTestId: string, attempt: number): string;
    screenshotPath(playwrightTestId: string, attempt: number, filename: string): string;
    videoPath(playwrightTestId: string, attempt: number, filename: string): string;
    /**
     * Resolve a free-form relative path under the per-attempt directory
     * (used for user attachments where preserving subdirs matters).
     * Throws if `relPath` resolves outside the per-attempt root —
     * guarding against path-traversal in attachment paths.
     */
    attachmentPath(playwrightTestId: string, attempt: number, relPath: string): string;
    executionsNdjsonPath(): string;
    executionManifestPath(): string;
}
