fix(pool): recent_refresh 按 provider_type 解析 reset_seconds 并锁定 Codex 周重置语义

- 为 `extract_reset_seconds` 增加 `provider_type` 解析链路(显式参数 -> key.provider_type -> key.provider.provider_type -> metadata 推断)。
- Codex 场景固定读取 `primary_reset_seconds`(周限额),避免误用 `secondary_reset_seconds`(5 小时窗口);Kiro/Antigravity 继续走统一 quota reader。
- 在 `RecentRefreshDimension` 和 `PoolManager` 的策略上下文中透传 `provider_type`,并在缺失时从 key provider 回退推断。
- 新增/补强测试覆盖:
  - multi_score `recent_refresh` 在 Codex 下按 weekly reset 排序;
  - quota reader helper 在 Codex provider 下返回 primary reset;
  - Codex 付费计划(plus/enterprise)在 headers 与 WHAM 响应中的窗口映射与主次窗口对齐(10080/300 分钟)。

降低 recent_refresh 评分偏差风险,并为 Codex 付费窗口解析提供回归保护。
This commit is contained in:
AAEE86
2026-03-10 14:55:48 +08:00
parent 2d846b2c58
commit f82964217e
7 changed files with 148 additions and 3 deletions

View File

@@ -83,6 +83,17 @@ def test_parse_codex_usage_headers_paid_windows_mapping() -> None:
assert "credits_balance" not in parsed
@pytest.mark.parametrize("plan_type", ["plus", "enterprise"])
def test_parse_codex_usage_headers_paid_plan_windows_mapping(plan_type: str) -> None:
parsed = parse_codex_usage_headers(_paid_headers(**{"x-codex-plan-type": plan_type}))
assert parsed is not None
assert parsed["plan_type"] == plan_type
assert parsed["primary_used_percent"] == 64.0
assert parsed["secondary_used_percent"] == 3.0
assert parsed["primary_window_minutes"] == 10080
assert parsed["secondary_window_minutes"] == 300
def test_parse_codex_usage_headers_free_uses_primary_only() -> None:
parsed = parse_codex_usage_headers(
{