/**
 * Where a project's work actually went, from the local git history.
 *
 * The card can say how many agents are running and how many PRs merged, but not
 * *what was worked on*. That answer is already sitting in the checkout — every
 * merged commit names the files it touched — so it costs no API call, no
 * credential, and no rate-limit budget. Measured at 0.23s on this repo's own
 * 7-day window (897 commits), which is why it runs unconditionally rather than
 * behind a flag.
 *
 * Deliberately NOT from `gh`: the GitHub API would spend a request per PR to
 * learn what `git log --name-only` already knows locally, and it would be wrong
 * on a monorepo whose interesting unit is a subdirectory rather than a repo.
 */
/** One directory and how many file-touches landed in it during the window. */
export interface FocusArea {
    path: string;
    touches: number;
}
/** Areas shown on the card before the tail is dropped. */
export declare const FOCUS_LIMIT = 4;
/**
 * Bucket a file path to its area. Files shallower than {@link DEPTH} bucket to
 * their own directory, so a repo-root `README.md` does not vanish.
 */
export declare function focusBucket(file: string): string | undefined;
/**
 * Rank areas by file-touches, descending, ties broken by path so the order is
 * stable across runs. Pure — the caller supplies the file list, so this is
 * testable without a git repo.
 */
export declare function rankFocusAreas(files: string[], limit?: number): FocusArea[];
/**
 * Read the window's changed files from a checkout. Best-effort in the same shape
 * as the rest of the card's enrichment: a missing checkout, a shallow clone, or
 * a repo with no commits in the window yields an empty list, never a throw.
 *
 * Reads the LOCAL default branch ref rather than fetching — a status command
 * must not mutate the repo it is describing, so the answer is only as fresh as
 * the user's last fetch, which is the correct trade for a read-only card.
 */
export declare function readFocusAreas(root: string, windowDays: number): Promise<FocusArea[]>;
/** Compact count: 2329 → "2.3k", under 1000 stays exact. */
export declare function formatFocusCount(n: number): string;
/**
 * One scannable focus line: path + count, with a single unit trailer so the
 * bare integer is never mistaken for commits or minutes.
 *
 *   apps/cli/src 2.3k  ·  apps/cli/docs 302  ·  apps/ext/src 245  file-touches (7d)
 */
export declare function formatFocusAreas(areas: FocusArea[], windowDays: number): string;
