import { isLimitReached } from '../../types.js'; import { getProviderLabel } from '../../stdin.js'; import { red, yellow, dim, getContextColor, quotaBar, RESET } from '../colors.js'; export function renderUsageLine(ctx) { const display = ctx.config?.display; if (display?.showUsage === false) { return null; } if (!ctx.usageData?.planName) { return null; } if (getProviderLabel(ctx.stdin)) { return null; } const label = dim('Usage'); if (ctx.usageData.apiUnavailable) { const errorHint = formatUsageError(ctx.usageData.apiError); return `${label} ${yellow(`⚠${errorHint}`)}`; } if (isLimitReached(ctx.usageData)) { const resetTime = ctx.usageData.fiveHour === 100 ? formatResetTime(ctx.usageData.fiveHourResetAt) : formatResetTime(ctx.usageData.sevenDayResetAt); return `${label} ${red(`⚠ Limit reached${resetTime ? ` (resets ${resetTime})` : ''}`)}`; } const threshold = display?.usageThreshold ?? 0; const fiveHour = ctx.usageData.fiveHour; const sevenDay = ctx.usageData.sevenDay; const effectiveUsage = Math.max(fiveHour ?? 0, sevenDay ?? 0); if (effectiveUsage < threshold) { return null; } const fiveHourDisplay = formatUsagePercent(ctx.usageData.fiveHour); const fiveHourReset = formatResetTime(ctx.usageData.fiveHourResetAt); const usageBarEnabled = display?.usageBarEnabled ?? true; const fiveHourPart = usageBarEnabled ? (fiveHourReset ? `${quotaBar(fiveHour ?? 0)} ${fiveHourDisplay} (${fiveHourReset} / 5h)` : `${quotaBar(fiveHour ?? 0)} ${fiveHourDisplay}`) : (fiveHourReset ? `5h: ${fiveHourDisplay} (${fiveHourReset})` : `5h: ${fiveHourDisplay}`); const sevenDayThreshold = display?.sevenDayThreshold ?? 80; if (sevenDay !== null && sevenDay >= sevenDayThreshold) { const sevenDayDisplay = formatUsagePercent(sevenDay); const sevenDayReset = formatResetTime(ctx.usageData.sevenDayResetAt); const sevenDayPart = usageBarEnabled ? (sevenDayReset ? `${quotaBar(sevenDay)} ${sevenDayDisplay} (${sevenDayReset} / 7d)` : `${quotaBar(sevenDay)} ${sevenDayDisplay}`) : `7d: ${sevenDayDisplay}`; return `${label} ${fiveHourPart} | ${sevenDayPart}`; } return `${label} ${fiveHourPart}`; } function formatUsagePercent(percent) { if (percent === null) { return dim('--'); } const color = getContextColor(percent); return `${color}${percent}%${RESET}`; } function formatUsageError(error) { if (!error) return ''; if (error.startsWith('http-')) { return ` (${error.slice(5)})`; } return ` (${error})`; } function formatResetTime(resetAt) { if (!resetAt) return ''; const now = new Date(); const diffMs = resetAt.getTime() - now.getTime(); if (diffMs <= 0) return ''; const diffMins = Math.ceil(diffMs / 60000); if (diffMins < 60) return `${diffMins}m`; const hours = Math.floor(diffMins / 60); const mins = diffMins % 60; return mins > 0 ? `${hours}h ${mins}m` : `${hours}h`; } //# sourceMappingURL=usage.js.map