import { Navigate, createFileRoute } from "@tanstack/react-router" import { useQuery } from "@tanstack/react-query" import type { ReviewerStatsPayload, UsageLeaderboardPeriod, UsageLeaderboardRow, } from "@/lib/api" import { AppShell, SettingsSection } from "@/components/AppShell" import { Avatar, AvatarFallback } from "@/components/ui/avatar" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { Skeleton } from "@/components/ui/skeleton" import { api } from "@/lib/api" import { useSession } from "@/lib/session" export const Route = createFileRoute("/usage")({ validateSearch: (search: Record) => ({ period: typeof search.period === "string" ? search.period : undefined, }), component: UsagePage, }) const PERIOD_LABELS: Record = { "7d": "Last 7 days", "30d": "Last 30 days", all: "All time", } function UsagePage() { const session = useSession() const period = (Route.useSearch().period as UsageLeaderboardPeriod | undefined) ?? "30d" const navigate = Route.useNavigate() const activePeriod: UsageLeaderboardPeriod = ["7d", "30d", "all"].includes( period ) ? period : "30d" const leaderboard = useQuery({ queryKey: ["usageLeaderboard", activePeriod], queryFn: () => api.usageLeaderboard(activePeriod, 10), enabled: !!session.data, staleTime: 5 * 60 * 1000, }) if (session.isLoading) { return (
) } if (!session.data) return return ( navigate({ to: "/usage", search: { period: value as UsageLeaderboardPeriod }, }) } > {Object.entries(PERIOD_LABELS).map(([value, label]) => ( {label} ))} } > {leaderboard.isLoading ? (
) : leaderboard.isError ? (

Failed to load usage data: {leaderboard.error.message}

) : !leaderboard.data?.rows.length ? (
No Open SWE Agent usage has been recorded for{" "} {PERIOD_LABELS[activePeriod].toLowerCase()} yet.
) : ( )}
{leaderboard.isLoading ? (
) : leaderboard.isError ? (

Failed to load reviewer stats: {leaderboard.error.message}

) : leaderboard.data?.reviewer_stats ? ( ) : (
No reviewer stats have been recorded for{" "} {PERIOD_LABELS[activePeriod].toLowerCase()} yet.
)}
) } function UsageTable({ rows, totalMembers, }: { rows: Array totalMembers: number }) { return (
{rows.map((row) => ( ))}
Rank User Favorite Model Agent Runs PRs Opened Merged PRs Agent LOC
{row.rank} {row.favorite_model} {formatNumber(row.agent_runs)} {formatNumber(row.prs_opened)} {formatNumber(row.merged_prs)} {formatNumber(row.agent_loc)}
Top {Math.min(10, totalMembers)} of {formatNumber(totalMembers)} member {totalMembers === 1 ? "" : "s"}
) } function ReviewerStats({ stats }: { stats: ReviewerStatsPayload }) { const cards = [ { label: "Reviewed PRs", value: stats.reviewed_prs, helper: `${formatNumber(stats.prs_with_findings)} with findings`, }, { label: "Issues surfaced", value: stats.surfaced_findings, helper: `${formatNumber(stats.findings_recorded)} recorded`, }, { label: "Addressed & resolved", value: stats.addressed_findings, helper: `${formatPercent(stats.resolution_rate)} of surfaced`, }, { label: "Resolved after update", value: stats.resolved_after_update, helper: "Resolved on a later PR head", }, { label: "Awaiting follow-up", value: stats.unresolved_surfaced_findings, helper: "Surfaced but not resolved/dismissed", }, { label: "Dismissed", value: stats.dismissed_findings, helper: `${formatNumber(stats.human_replies)} human replies tracked`, }, ] return (
{cards.map((card) => (
{card.label}
{formatNumber(card.value)}
{card.helper}
))}
) } function severityRows( stats: ReviewerStatsPayload ): Array<{ name: string; count: number }> { return ["critical", "high", "medium", "low"] .map((severity) => ({ name: severity, count: stats.severity_counts[severity] ?? 0, })) .filter((row) => row.count > 0) } function CounterList({ title, rows, }: { title: string rows: Array<{ name: string; count: number }> }) { return (

{title}

{rows.length ? (
    {rows.map((row) => (
  • {row.name} {formatNumber(row.count)}
  • ))}
) : (

No data yet.

)}
) } function UserCell({ row }: { row: UsageLeaderboardRow }) { const initials = initialsFor(row.user.name) return (
{initials}
{row.user.name} {row.user.email ?? row.user.github_login ?? "unknown"}
) } function initialsFor(name: string): string { const parts = name.trim().split(/\s+/).filter(Boolean) if (!parts.length) return "?" const first = parts[0] ?? "?" const second = parts[1] if (!second) return first.slice(0, 2).toUpperCase() return `${first[0] ?? ""}${second[0] ?? ""}`.toUpperCase() } function formatNumber(value: number): string { return new Intl.NumberFormat().format(value) } function formatPercent(value: number): string { return new Intl.NumberFormat(undefined, { maximumFractionDigits: 0, style: "percent", }).format(value) }