/**
 * Vision — screen capture.
 *
 * Lets the user hand LISA a screenshot to look at and talk about. On macOS we
 * shell out to the built-in `screencapture` utility, which gives us, for free:
 *   - interactive region/window selection (the familiar ⇧⌘4 crosshair)
 *   - a full-screen grab
 *   - Escape-to-cancel (screencapture writes no file → we return null)
 *
 * The captured PNG is written to a temp file, read into base64, then deleted.
 * The returned object is the exact shape the /chat endpoint already accepts
 * for attachments ({ name, mediaType, data }), so the whole downstream
 * image-chat path is reused unchanged.
 *
 * Privacy: the screenshot only leaves the machine when the user sends the
 * chat message it's attached to — same as any other attachment. Nothing is
 * captured or transmitted without the explicit hotkey/button press.
 */
export type CaptureMode = "interactive" | "full";
export interface CapturedImage {
    name: string;
    mediaType: "image/png";
    /** base64-encoded PNG bytes (no data: prefix). */
    data: string;
}
/**
 * Build the `screencapture` argv for a given mode + output path.
 * Pure + tested.
 *   interactive → -i  (crosshair: drag a region, or space to pick a window;
 *                       Escape cancels and writes no file)
 *   full        → (no flag: whole screen)
 * -x silences the camera shutter sound; -o omits window shadow on window grabs.
 */
export declare function buildScreencaptureArgs(mode: CaptureMode, outPath: string): string[];
/** True on macOS, where `screencapture` exists. */
export declare function captureSupported(): boolean;
/**
 * Capture a screenshot. Resolves to the attachment object, or null if the
 * user cancelled (Escape) — screencapture exits 0 but writes no file in that
 * case, which we detect by the missing output.
 * Throws only on an unexpected failure (binary missing, write error).
 */
export declare function captureScreenshot(mode?: CaptureMode): Promise<CapturedImage | null>;
//# sourceMappingURL=capture.d.ts.map