/**
 * Best-effort Ghostty tab-number detection for `agents sessions --active`.
 *
 * Ghostty (macOS) exposes read-only AppleScript: every tab has an `index` and a
 * `name` (title); every surface a `working directory`. It exposes NO per-tab env
 * var and NO tty/pid on a surface — so a session is matched to its tab by
 * `working directory` (with title as a tiebreak). This is display sugar only:
 * one bounded, non-fatal osascript call, run by the renderer, never on the
 * discovery / --json / --waiting path. Any failure (Ghostty not running,
 * Automation permission denied, timeout) degrades silently to no tab number.
 */
import type { ActiveSession } from './active.js';
/** One Ghostty surface (terminal), flattened from window -> tab -> surface. */
export interface GhosttySurface {
    windowIndex: number;
    tabIndex: number;
    cwd: string;
    title: string;
}
/**
 * Enumerate every Ghostty surface (window/tab/cwd/title) via one read-only
 * osascript call. Returns [] on ANY failure — Ghostty not running, Automation
 * permission not granted, timeout, or a parse miss. Never throws, never prompts.
 */
export declare function enumerateGhosttyTabs(timeoutMs?: number): Promise<GhosttySurface[]>;
/**
 * Assign a Ghostty tab number to each `host === 'ghostty'` session by matching
 * its cwd to a surface's working directory; ties (same cwd) are broken by title
 * containment against the session's label/topic/kind. Deliberately conservative:
 * a session that can't be uniquely resolved gets NO number — a wrong jump target
 * is worse than none. Pure and unit-tested.
 */
export declare function assignGhosttyTabs(sessions: ActiveSession[], surfaces: GhosttySurface[]): Map<ActiveSession, number>;
