import type { ProjectSummary } from './projects.js';
import { type ProjectQueue } from './queue.js';
import { type ActiveAgent, type OverviewDeps } from './overview.js';
/** One project's rollup row. */
export interface ProjectStat {
    projectId: string;
    /** Whether the repo has any ticket in `tickets/` (#958) — presence only, not a count. */
    hasTickets: boolean;
}
/** The dashboard page payload (#471). */
export interface DashboardData {
    totals: {
        projects: number;
        openTodos: number;
    };
    /** Agents going right now, most-recently-updated first (from {@link buildOverview}). */
    active: ActiveAgent[];
    /** Every registered project, most-recently-active first. */
    projects: ProjectStat[];
    /** The per-project open TODO backlog (from {@link collectQueue}). */
    queue: ProjectQueue[];
}
/** Injectable readers so {@link buildDashboard} is unit-testable off disk. */
export interface DashboardDeps extends OverviewDeps {
    /** Whether a project has tickets (#958). Defaults to {@link hasTickets} (false on any error). */
    tickets?: (cwd: string) => Promise<boolean>;
}
/**
 * Build the Overview dashboard: the {@link buildOverview} rollup (working now / queue) plus the
 * per-project ticket presence the onboarding checklist reads. Forgiving — a project whose state
 * cannot be read simply contributes nothing.
 */
export declare function buildDashboard(projects: ProjectSummary[], deps?: DashboardDeps): Promise<DashboardData>;
//# sourceMappingURL=dashboard.d.ts.map