/**
 * welcome-back-context — helpers for the IntroScreen "Welcome back" panel.
 *
 * The panel personalizes the first second of a returning run with whatever
 * stable signals we can read off disk before any network call:
 *
 *   - Event count from `<installDir>/.amplitude/events.json` (canonical) or
 *     the legacy `<installDir>/.amplitude-events.json`. Either path counts
 *     against the same "they instrumented N events last time" message.
 *   - Last-run timestamp from the freshest events file's mtime, formatted
 *     as a human-readable relative age ("2 hours ago", "3 days ago").
 *
 * Everything is best-effort: a missing or malformed events file silently
 * yields zero counts, never throws. The panel skips the events line in
 * that case and the user just sees the welcome line + project line.
 *
 * Kept out of IntroScreen.tsx so unit tests can hit the parsing and
 * humanization logic directly without rendering Ink.
 */
export interface PreviousRunSummary {
    /** Number of events in the most recent events.json file. 0 if none readable. */
    eventCount: number;
    /** mtime of the freshest events file we found, or null if we found none. */
    lastRunAt: Date | null;
}
/**
 * Read `<installDir>/.amplitude/events.json` (canonical) and the legacy
 * `<installDir>/.amplitude-events.json` and return a summary of whichever
 * one has the most recent mtime. If neither exists, returns zero counts
 * and a null timestamp — the caller just hides the events line.
 *
 * This intentionally never throws. The IntroScreen renders during the
 * very first frame of a wizard run; an exception here would break the
 * whole intro for a user who has a junk JSON file lying around.
 */
export declare function readPreviousRunSummary(installDir: string): PreviousRunSummary;
/**
 * Format a Date as a human-readable relative age, e.g. "2 hours ago",
 * "3 days ago". Mirrors GitHub-style precision: minutes / hours / days /
 * months / years. Anything below a minute is "just now".
 *
 * We intentionally don't use `Intl.RelativeTimeFormat` here — it produces
 * locale-dependent output that would make snapshot tests flaky under
 * non-en-US locales. The wizard's UI strings are English-only today.
 */
export declare function humanizeAge(pastDate: Date, now?: Date): string;
