(label: string, detail: any)
| 1447 | } |
| 1448 | |
| 1449 | function formatKimiLimitRow(label: string, detail: any): string | undefined { |
| 1450 | if (!detail) return undefined |
| 1451 | const limit = parseInt(detail.limit) |
| 1452 | const remaining = parseInt(detail.remaining) |
| 1453 | if (isNaN(limit) || limit <= 0) return undefined |
| 1454 | |
| 1455 | const used = limit - (isNaN(remaining) ? 0 : remaining) |
| 1456 | const usedPercent = (used / limit) * 100 |
| 1457 | const resetsAt = resolveKimiReset(detail) |
| 1458 | const resetLabel = resetsAt ? formatKimiTimeRemaining(resetsAt) : undefined |
| 1459 | |
| 1460 | return `${label}: ${usedPercent.toFixed(0)}% used${resetLabel ? ` (${resetLabel})` : ""}` |
| 1461 | } |
| 1462 | |
| 1463 | function resolveKimiReset(data: any): number | undefined { |
| 1464 | for (const key of ["reset_at", "resetAt", "reset_time", "resetTime", "resets_at"]) { |
no test coverage detected