export declare function isImagePath(p: string): boolean; /** Dedicated exit code for "the reporter thread exists and delivery FAILED". * * Deliberately NOT 1: 1 is argument/validation failure, and a caller must be * able to tell "you invoked me wrong" from "the upload broke". Joins the * documented set in CONTRIBUTING.md (3/4/5/6/7/10). */ export declare const EXIT_EVIDENCE_THREAD_FAILED = 11; export interface EvidenceThreadVerdict { /** exit code to use: 0 for delivered / no-reporter-thread. */ exitCode: number; /** Line to print. stderr when `isError`, stdout otherwise. */ note: string; isError: boolean; /** Some artifacts reached the thread and at least one did not. Still an * error (exit 11) — but the operator must not resend what already landed. */ partial: boolean; } /** * Decide what `issue evidence` says and exits on the reporter-thread outcome. * * `status` undefined = a server older than 0.30 that predates the field; fall * back to the legacy bool, which cannot distinguish the two cases — so treat it * as absence (the pre-existing, non-breaking behaviour) rather than inventing a * failure that would break every non-chat project. * * `failed` covers two different operator situations, and `threadNotified` is * what separates them (PR #463 review): the server sets it the moment ANY * artifact lands, so `failed` + `threadNotified:true` is a PARTIAL upload — * some shots are already in the reporter's thread. Saying "the reporter was NOT * notified" there is false, and it pushes the operator into re-sending * artifacts the reporter can already see. Both stay exit 11: an incomplete * evidence set is still a failure to know about. */ export declare function evidenceThreadVerdict(status: string | undefined, threadNotified: boolean, threadError?: string): EvidenceThreadVerdict; /** * Validate a before/after evidence selection. Returns an error message, or null * when the selection is acceptable. Pure (no I/O) so it's unit-testable. * * Rules: * - `before` and `after` must be provided together (one without the other fails). * - Counts must MATCH: before[i] pairs with after[i], and a multi-surface change * attaches one pair per surface — mismatched counts can't pair. * - `labels` name the pairs by index; more labels than pairs is a mistake. * - `beforeCaptions`/`afterCaptions`/`imageCaptions` describe individual shots by * position (caption[i] → the i-th before/after/misc file); more captions than * files in a group is a mistake. A per-shot caption keeps a blanket summary * from over-claiming what one image shows (issue #301). * - If neither is given but image files were passed via `misc` (--file/--image), * that's rejected — screenshots must go through --before/--after (or `actual` * for a bug with no fix yet). * - Video-only / non-image `misc` (e.g. an mp4) may be attached alone. * - `actual` (--actual) is DEFECT capture: the broken state of a bug that has no * fix yet, so there is nothing to pair it with. Legal on its own, may ride with * `misc`, and mutually exclusive with before/after — once a fix exists, the * pair is what proves it (issue #417). */ export declare function validateEvidenceSelection(before: string[], after: string[], misc: string[], labels?: string[], beforeCaptions?: string[], afterCaptions?: string[], imageCaptions?: string[], actual?: string[], actualCaptions?: string[]): string | null; /** Server-side per-file cap (cli_handler.go maxEvidenceFileBytes), mirrored so * the CLI can refuse an oversized recording BEFORE buffering it into memory. */ export declare const MAX_SCREENSHOT_BYTES: number; export declare function isVideoPath(p: string): boolean; /** * Validate the media selection for `issue create --screenshot`. Returns an * error message, or null when acceptable. Pure (no I/O) so it's unit-testable. * Unlike evidence, there is no before/after pairing — these shots DOCUMENT the * problem being reported, not a fix — but each file must be a known image or * video type (the blob host serves by content type, and GitHub only renders * known media), and captions describe shots by position, at most one each. */ export declare function validateScreenshotSelection(paths: string[], captions: string[]): string | null; /** * Render the `## Screenshots` section appended to a new issue's body: one * hosted embed per file (an , or a