/**
 * Pane-text helpers — blank-fill-immune tail extraction for tmux captures.
 *
 * tmux `capture-pane -S -N` returns the last N PHYSICAL rows of the pane. A
 * tall pane (e.g. the default 50-row Gemini window) pads below the last real
 * output with blank rows, so a small-N capture can be ENTIRELY blank while the
 * meaningful text (an idle prompt, a modal, a readiness marker) sits just
 * above the window. PR #818 fixed this class inside PromptGate; this module is
 * the shared primitive so every small-tail consumer reads MEANINGFUL rows
 * (task #77 — the 2026-06-05 cycle-2 differential finding).
 *
 * Semantics are identical to PromptGate's original local helper: trailing
 * blank rows are trimmed, INTERIOR blank lines are preserved (they carry
 * modal/layout structure), and an all-blank capture yields [''] — callers see
 * an empty-but-defined window, never a crash on an empty array.
 */
/** Trim trailing blank rows only; interior blanks are structure and stay. */
export declare function trimTrailingBlankRows(lines: string[]): string[];
/**
 * The last `n` MEANINGFUL lines of `text` (post trailing-blank trim), joined.
 * An all-blank input returns '' — same falsy contract small-tail callers
 * already apply to a null/blank capture.
 */
export declare function meaningfulTail(text: string, n: number): string;
/**
 * Extract the last completed Gemini assistant block from a live TUI pane.
 *
 * Gemini renders final prose as a block beginning with `✦`, then returns to an
 * input/footer area (`Type your message`, model footer, etc.). This helper only
 * returns a block when that idle footer appears after the assistant block, so a
 * streaming/in-progress answer does not get relayed early.
 */
export declare function extractGeminiFinalAssistantBlock(text: string): string | null;
//# sourceMappingURL=paneText.d.ts.map