import type { RunLabProvenance } from "./run-status.js"; export declare const OSS_LAB_SCHEMA = "humanish.oss-lab-result.v1"; export declare const DEFAULT_OSS_REPOS: readonly ["CorentinTh/it-tools", "drawdb-io/drawdb", "maciekt07/TodoApp", "lissy93/dashy"]; export interface OssLabOptions { /** Which manifest produced this run (#455). */ lab?: RunLabProvenance; cwd: string; keep?: boolean; limit?: number; repos?: string[]; runId?: string; } export interface OssLabStep { durationMs: number; name: string; ok: boolean; summary: string; } export interface OssLabRepoResult { changedFiles: string[]; clonePath: string; humanishRunId?: string; observerPath?: string; ok: boolean; repo: string; steps: OssLabStep[]; url: string; warnings: string[]; } export interface OssLabResult { schema: typeof OSS_LAB_SCHEMA; ok: boolean; cleanup: { kept: boolean; sandboxRemoved: boolean; }; completedAt: string; cwd: string; error?: { code: "HUMANISH_INVALID_OSS_REPO" | "HUMANISH_INVALID_OSS_LIMIT" | "HUMANISH_LAB_ANALYSIS_INVALID" | "HUMANISH_LAB_ANALYSIS_UNSUPPORTED" | "HUMANISH_LAB_COMMS_UNSUPPORTED" | "HUMANISH_LAB_TASKS_UNSUPPORTED"; message: string; }; reportJsonPath?: string; reportMarkdownPath?: string; repos: OssLabRepoResult[]; runId: string; sandboxPath: string; startedAt: string; warnings: string[]; } export declare function normalizeOssRepoSlugs(input: string[] | undefined): string[]; export declare function validateOssRepoSlug(slug: string): boolean; export declare function runOssLab(options: OssLabOptions): Promise; /** Repo slug for run-id suffixes/artifact tokens: lowercased, non-alnum -> "-", trimmed. */ export declare function repoSlug(repo: string): string;