import type { BenchmarkResult, EffortBreakdown, UsageReport } from "./types.js"; export interface DeliveryDashboardOptions { output?: string; format?: "html" | "json"; open?: boolean; recalculateEffort?: boolean; } export interface DeliveryDashboard { project: { name: string; root: string; generatedAt: string; }; metrics: { tasks: { total: number; done: number; claimed: number; open: number; completionPct: number; avgCycleHours: number | null; benchmarkStoriesCompleted: number; benchmarkStoriesWithActuals: number; benchmarkStoriesCompletedWithoutDuration: number; workflowRuns: number; }; effort: DashboardEffortMetrics; evidence: { count: number; decisions: number; }; }; charts: DashboardCharts; stories: DashboardStory[]; usage: UsageReport; } export interface DashboardEffortMetrics { humanManualHours: number; humanReviewHours: number; aiSupervisedHours: number; aiAutonomousHours: number; aiCalibrationBaselineHours: number; totalHours: number; aiRatioPct: number; rulesMultiplier: number | null; } export interface DashboardStory { taskId: string; status: BenchmarkResult["status"]; sizingLabel: BenchmarkResult["sizingLabel"]; actualSource: BenchmarkResult["actualSource"]; actualHours: number | null; classification: EffortBreakdown["classification"]; effort: DashboardEffortMetrics; } export interface ChartSlice { label: string; value: number; } export interface SeriesPoint { label: string; value: number; } export interface PhaseSeriesPoint { label: string; aiSupervisedHours: number; aiAutonomousHours: number; humanReviewHours: number; humanManualHours: number; } export interface DashboardCharts { burndown: SeriesPoint[]; statusDonut: ChartSlice[]; phaseAvgCycleTime: ChartSlice[]; doneByOwner: ChartSlice[]; storyCycleTime: ChartSlice[]; ownerDistribution: ChartSlice[]; velocity: SeriesPoint[]; effortDonut: ChartSlice[]; effortByPhase: ChartSlice[]; effortTimeline: PhaseSeriesPoint[]; }