/** * Interactive-only decoration DEGRADES, it does not disappear. The QR renders * on a TTY and is omitted when piped — an agent has no camera, and a thousand * block characters in a tool transcript is a real cost to the creator's context * window. The URL beside it is always present and is the actual payload. */ export declare function shouldRenderQr(opts: { isTTY: boolean; noQr: boolean; columns?: number; }): boolean; /** * renderModules turns a boolean module matrix into half-block rows. * * The convention is INVERTED from the obvious one: a set module is rendered as * the BACKGROUND (a space) and an unset module as a block. Terminals are * overwhelmingly light-on-dark, and a scanner needs the quiet zone and the light * modules to be the brighter of the two. Getting this backwards produces a * symbol that looks perfect and scans on nothing. */ export declare function renderModules(modules: boolean[][]): string[]; /** * Build the terminal QR for a preview URL. * * A ~62-character preview URL fits a version-3/4 symbol at error-correction * level L. L rather than M because the terminal render is pixel-perfect — there * is no print smudge or camera blur to recover from at the source, only at the * lens — and every step up in correction level adds modules, which adds rows. */ export declare function renderTerminalQr(url: string): Promise;