fix(codex): infer code review cadence from reset window

This commit is contained in:
Tam Nhu Tran
2026-02-14 06:09:36 +07:00
parent f8af5a8c3c
commit 1d2ee827fe
4 changed files with 91 additions and 6 deletions
+30 -4
View File
@@ -103,20 +103,46 @@ function getCodexWindowKind(label: string): CodexWindowKind {
return 'unknown';
}
function getCodexWindowDisplayLabel(label: string): string {
switch (getCodexWindowKind(label)) {
function getCodexWindowCadence(
resetAfterSeconds: number | null | undefined
): '5h' | 'weekly' | null {
if (
typeof resetAfterSeconds !== 'number' ||
!isFinite(resetAfterSeconds) ||
resetAfterSeconds <= 0
) {
return null;
}
if (resetAfterSeconds <= 6 * 60 * 60) return '5h';
if (resetAfterSeconds >= 24 * 60 * 60) return 'weekly';
return null;
}
function getCodexWindowDisplayLabel(
window: Pick<CodexQuotaResult['windows'][number], 'label' | 'resetAfterSeconds'>
): string {
const cadence = getCodexWindowCadence(window.resetAfterSeconds);
switch (getCodexWindowKind(window.label)) {
case 'usage-5h':
if (cadence === 'weekly') return 'Weekly usage limit';
return '5h usage limit';
case 'usage-weekly':
if (cadence === '5h') return '5h usage limit';
return 'Weekly usage limit';
case 'code-review-5h':
if (cadence === 'weekly') return 'Code review (weekly)';
return 'Code review (5h)';
case 'code-review-weekly':
if (cadence === '5h') return 'Code review (5h)';
return 'Code review (weekly)';
case 'code-review':
if (cadence === '5h') return 'Code review (5h)';
if (cadence === 'weekly') return 'Code review (weekly)';
return 'Code review';
case 'unknown':
return label;
return window.label;
}
}
@@ -255,7 +281,7 @@ function displayCodexQuotaSection(results: { account: string; quota: CodexQuotaR
? dim(` Resets ${formatResetTime(window.resetAfterSeconds)}`)
: '';
console.log(
` ${getCodexWindowDisplayLabel(window.label).padEnd(24)} ${bar} ${window.remainingPercent.toFixed(0)}%${resetLabel}`
` ${getCodexWindowDisplayLabel(window).padEnd(24)} ${bar} ${window.remainingPercent.toFixed(0)}%${resetLabel}`
);
}
console.log('');
@@ -87,7 +87,7 @@ export function QuotaTooltipContent({ quota, resetTime }: QuotaTooltipContentPro
className="flex justify-between gap-4"
>
<span className={cn(w.remainingPercent < 20 && 'text-red-500')}>
{getCodexWindowDisplayLabel(w.label)}
{getCodexWindowDisplayLabel(w)}
</span>
<span className="font-mono">{w.remainingPercent}%</span>
</div>
+31 -1
View File
@@ -337,17 +337,47 @@ export function getCodexWindowKind(label: string): CodexWindowKind {
/**
* Convert raw Codex window labels into user-facing labels.
*/
export function getCodexWindowDisplayLabel(label: string): string {
function getCodexWindowCadence(
resetAfterSeconds: number | null | undefined
): '5h' | 'weekly' | null {
if (
typeof resetAfterSeconds !== 'number' ||
!isFinite(resetAfterSeconds) ||
resetAfterSeconds <= 0
) {
return null;
}
if (resetAfterSeconds <= 6 * 60 * 60) return '5h';
if (resetAfterSeconds >= 24 * 60 * 60) return 'weekly';
return null;
}
export function getCodexWindowDisplayLabel(
labelOrWindow: string | Pick<CodexQuotaWindow, 'label' | 'resetAfterSeconds'>,
resetAfterSecondsOverride?: number | null
): string {
const label = typeof labelOrWindow === 'string' ? labelOrWindow : labelOrWindow.label;
const cadence = getCodexWindowCadence(
typeof labelOrWindow === 'string' ? resetAfterSecondsOverride : labelOrWindow.resetAfterSeconds
);
switch (getCodexWindowKind(label)) {
case 'usage-5h':
if (cadence === 'weekly') return 'Weekly usage limit';
return '5h usage limit';
case 'usage-weekly':
if (cadence === '5h') return '5h usage limit';
return 'Weekly usage limit';
case 'code-review-5h':
if (cadence === 'weekly') return 'Code review (weekly)';
return 'Code review (5h)';
case 'code-review-weekly':
if (cadence === '5h') return 'Code review (5h)';
return 'Code review (weekly)';
case 'code-review':
if (cadence === '5h') return 'Code review (5h)';
if (cadence === 'weekly') return 'Code review (weekly)';
return 'Code review';
case 'unknown':
return label;
+29
View File
@@ -9,6 +9,7 @@ import {
getEarliestResetTime,
getMinCodexQuota,
getCodexResetTime,
getCodexWindowDisplayLabel,
getMinGeminiQuota,
getGeminiResetTime,
getProviderMinQuota,
@@ -526,6 +527,34 @@ describe('getCodexResetTime', () => {
});
});
describe('getCodexWindowDisplayLabel', () => {
it('labels code review primary window as weekly when reset cadence is weekly', () => {
expect(
getCodexWindowDisplayLabel({
label: 'Code Review (Primary)',
resetAfterSeconds: 604800,
})
).toBe('Code review (weekly)');
});
it('labels code review primary window as 5h when reset cadence is short', () => {
expect(
getCodexWindowDisplayLabel({
label: 'Code Review (Primary)',
resetAfterSeconds: 18000,
})
).toBe('Code review (5h)');
});
it('keeps secondary usage label as weekly by default', () => {
expect(getCodexWindowDisplayLabel('Secondary')).toBe('Weekly usage limit');
});
it('uses cadence override when provided with string label', () => {
expect(getCodexWindowDisplayLabel('Primary', 604800)).toBe('Weekly usage limit');
});
});
// ==================== Gemini Quota Functions ====================
describe('getMinGeminiQuota', () => {