diff --git a/src/components/quota/quotaConfigs.ts b/src/components/quota/quotaConfigs.ts index f4cd89a..2cf0326 100644 --- a/src/components/quota/quotaConfigs.ts +++ b/src/components/quota/quotaConfigs.ts @@ -246,12 +246,18 @@ const fetchAntigravityQuota = async ( throw createStatusError(lastError || t('common.unknown_error'), priorityStatus ?? lastStatus); }; -const buildCodexQuotaWindows = (payload: CodexUsagePayload, t: TFunction): CodexQuotaWindow[] => { +const buildCodexQuotaWindows = ( + payload: CodexUsagePayload, + t: TFunction, + planType?: string | null +): CodexQuotaWindow[] => { const FIVE_HOUR_SECONDS = 18000; const WEEK_SECONDS = 604800; + const isTeamPlan = normalizePlanType(planType) === 'team'; const WINDOW_META = { codeFiveHour: { id: 'five-hour', labelKey: 'codex_quota.primary_window' }, codeWeekly: { id: 'weekly', labelKey: 'codex_quota.secondary_window' }, + codeMonthly: { id: 'monthly', labelKey: 'codex_quota.team_secondary_window' }, codeReviewFiveHour: { id: 'code-review-five-hour', labelKey: 'codex_quota.code_review_primary_window', @@ -260,6 +266,10 @@ const buildCodexQuotaWindows = (payload: CodexUsagePayload, t: TFunction): Codex id: 'code-review-weekly', labelKey: 'codex_quota.code_review_secondary_window', }, + codeReviewMonthly: { + id: 'code-review-monthly', + labelKey: 'codex_quota.code_review_team_secondary_window', + }, } as const; const rateLimit = payload.rate_limit ?? payload.rateLimit ?? undefined; @@ -346,10 +356,11 @@ const buildCodexQuotaWindows = (payload: CodexUsagePayload, t: TFunction): Codex rawLimitReached, rawAllowed ); + const codeSecondaryWindowMeta = isTeamPlan ? WINDOW_META.codeMonthly : WINDOW_META.codeWeekly; addWindow( - WINDOW_META.codeWeekly.id, - t(WINDOW_META.codeWeekly.labelKey), - WINDOW_META.codeWeekly.labelKey, + codeSecondaryWindowMeta.id, + t(codeSecondaryWindowMeta.labelKey), + codeSecondaryWindowMeta.labelKey, undefined, rateWindows.weeklyWindow, rawLimitReached, @@ -368,10 +379,13 @@ const buildCodexQuotaWindows = (payload: CodexUsagePayload, t: TFunction): Codex codeReviewLimitReached, codeReviewAllowed ); + const codeReviewSecondaryWindowMeta = isTeamPlan + ? WINDOW_META.codeReviewMonthly + : WINDOW_META.codeReviewWeekly; addWindow( - WINDOW_META.codeReviewWeekly.id, - t(WINDOW_META.codeReviewWeekly.labelKey), - WINDOW_META.codeReviewWeekly.labelKey, + codeReviewSecondaryWindowMeta.id, + t(codeReviewSecondaryWindowMeta.labelKey), + codeReviewSecondaryWindowMeta.labelKey, undefined, codeReviewWindows.weeklyWindow, codeReviewLimitReached, @@ -411,10 +425,14 @@ const buildCodexQuotaWindows = (payload: CodexUsagePayload, t: TFunction): Codex additionalLimitReached, additionalAllowed ); + const additionalSecondaryLabelKey = isTeamPlan + ? 'codex_quota.additional_team_secondary_window' + : 'codex_quota.additional_secondary_window'; + const additionalSecondaryId = isTeamPlan ? 'monthly' : 'weekly'; addWindow( - `${idPrefix}-weekly-${index}`, - t('codex_quota.additional_secondary_window', { name: limitName }), - 'codex_quota.additional_secondary_window', + `${idPrefix}-${additionalSecondaryId}-${index}`, + t(additionalSecondaryLabelKey, { name: limitName }), + additionalSecondaryLabelKey, { name: limitName }, additionalSecondaryWindow, additionalLimitReached, @@ -473,9 +491,10 @@ const fetchCodexQuota = async ( const rateLimitResetCreditsAvailableCount = normalizeNumberValue( resetCredits?.available_count ?? resetCredits?.availableCount ); - const windows = buildCodexQuotaWindows(payload, t); + const planType = planTypeFromUsage ?? planTypeFromFile; + const windows = buildCodexQuotaWindows(payload, t, planType); return { - planType: planTypeFromUsage ?? planTypeFromFile, + planType, subscriptionActiveUntil, rateLimitResetCreditsAvailableCount, windows, diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index c592a7c..02529f3 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -433,10 +433,13 @@ "fetch_all": "Fetch All", "primary_window": "5-hour limit", "secondary_window": "Weekly limit", + "team_secondary_window": "Monthly limit", "code_review_primary_window": "Code review 5-hour limit", "code_review_secondary_window": "Code review weekly limit", + "code_review_team_secondary_window": "Code review monthly limit", "additional_primary_window": "{{name}} 5-hour limit", "additional_secondary_window": "{{name}} weekly limit", + "additional_team_secondary_window": "{{name}} monthly limit", "plan_label": "Plan", "expires_label": "Expires", "reset_credits_label": "Manual resets", diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index c6d6d10..9675f2a 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -427,10 +427,13 @@ "fetch_all": "Получить все", "primary_window": "Лимит на 5 часов", "secondary_window": "Недельный лимит", + "team_secondary_window": "Месячный лимит", "code_review_primary_window": "Лимит code review на 5 часов", "code_review_secondary_window": "Недельный лимит code review", + "code_review_team_secondary_window": "Месячный лимит code review", "additional_primary_window": "{{name}}: лимит на 5 часов", "additional_secondary_window": "{{name}}: недельный лимит", + "additional_team_secondary_window": "{{name}}: месячный лимит", "plan_label": "Тариф", "expires_label": "Истекает", "plan_plus": "Plus", diff --git a/src/i18n/locales/zh-CN.json b/src/i18n/locales/zh-CN.json index a1d24bd..5062ccc 100644 --- a/src/i18n/locales/zh-CN.json +++ b/src/i18n/locales/zh-CN.json @@ -433,10 +433,13 @@ "fetch_all": "获取全部", "primary_window": "5 小时限额", "secondary_window": "周限额", + "team_secondary_window": "月度限额", "code_review_primary_window": "代码审查 5 小时限额", "code_review_secondary_window": "代码审查周限额", + "code_review_team_secondary_window": "代码审查月度限额", "additional_primary_window": "{{name}} 5 小时限额", "additional_secondary_window": "{{name}} 周限额", + "additional_team_secondary_window": "{{name}} 月度限额", "plan_label": "套餐", "expires_label": "到期时间", "reset_credits_label": "主动重置次数", diff --git a/src/i18n/locales/zh-TW.json b/src/i18n/locales/zh-TW.json index 77745f1..d973750 100644 --- a/src/i18n/locales/zh-TW.json +++ b/src/i18n/locales/zh-TW.json @@ -433,10 +433,13 @@ "fetch_all": "取得全部", "primary_window": "5 小時限額", "secondary_window": "週限額", + "team_secondary_window": "月度限額", "code_review_primary_window": "程式碼審查 5 小時限額", "code_review_secondary_window": "程式碼審查週限額", + "code_review_team_secondary_window": "程式碼審查月度限額", "additional_primary_window": "{{name}} 5 小時限額", "additional_secondary_window": "{{name}} 週限額", + "additional_team_secondary_window": "{{name}} 月度限額", "plan_label": "方案", "expires_label": "到期時間", "reset_credits_label": "主動重置次數",