import type { HandoffRecord } from "@openhandoff/shared"; export interface RepoGroup { repoId: string; repoRemote: string; handoffs: HandoffRecord[]; } export function groupHandoffsByRepo(handoffs: HandoffRecord[]): RepoGroup[] { const groups = new Map(); for (const handoff of handoffs) { const group = groups.get(handoff.repoId); if (group) { group.handoffs.push(handoff); continue; } groups.set(handoff.repoId, { repoId: handoff.repoId, repoRemote: handoff.repoRemote, handoffs: [handoff], }); } return Array.from(groups.values()) .map((group) => ({ ...group, handoffs: [...group.handoffs].sort((a, b) => b.updatedAt - a.updatedAt), })) .sort((a, b) => { const aLatest = a.handoffs[0]?.updatedAt ?? 0; const bLatest = b.handoffs[0]?.updatedAt ?? 0; if (aLatest !== bLatest) { return bLatest - aLatest; } return a.repoRemote.localeCompare(b.repoRemote); }); } export function formatDiffStat(diffStat: string | null | undefined): string { const normalized = diffStat?.trim(); if (!normalized) { return "-"; } if (normalized === "+0/-0" || normalized === "+0 -0" || normalized === "0 files changed") { return "No changes"; } return normalized; }