/**
 * Pure display helpers for `agents routines list`.
 *
 * No external dependencies. All functions are pure (no I/O, no side effects).
 */
/**
 * Convert a cron expression to a human-readable phrase.
 *
 * Handles the common patterns. For anything unrecognized, returns the raw
 * expression so the user still sees something useful. NEVER throws.
 */
export declare function humanizeCron(expr: string, _tz?: string): string;
/**
 * Convert a next-run Date into a human phrase relative to `now`.
 *
 * - null            → '-'
 * - same calendar day  → 'today 9:00 AM'
 * - next calendar day  → 'tomorrow 9:00 AM'
 * - within 7 days   → 'Mon 9:00 AM'
 * - further out      → 'Jun 15, 9:00 AM'
 */
export declare function humanizeNextRun(date: Date | null, now: Date, tz?: string): string;
/**
 * Maximum display length for a repo cell. Display strings longer than this
 * are truncated with an ellipsis so column alignment is preserved.
 * Consumers that render the column should use this constant as the column width.
 */
export declare const REPO_DISPLAY_MAX = 24;
/**
 * Parse a repo string into a display label and an optional hyperlink target.
 *
 * Rules:
 *   - null / undefined / empty / non-string → display '-', href null
 *   - 'owner/name' (one slash)              → display 'owner/name', href 'https://github.com/owner/name/pulls'
 *   - 'https://...' or 'http://...'         → display hostname+path, href the URL verbatim
 *   - anything else                         → display raw string, href null
 *
 * The display string is truncated to REPO_DISPLAY_MAX characters (with a
 * trailing '…') when it would otherwise exceed the column width. The href
 * is always the full untruncated URL so hyperlinks remain functional.
 *
 * NEVER throws — mirrors the contract of humanizeCron.
 */
export declare function formatRepoLink(repo: unknown): {
    display: string;
    href: string | null;
};
