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

@@ -74,6 +74,20 @@ def test_dimension_helpers_delegate_to_unified_reader(monkeypatch: pytest.Monkey
assert extract_usage_ratio(key_obj) == pytest.approx(0.45)
def test_extract_reset_seconds_uses_codex_weekly_reset_for_codex_provider() -> None:
key_obj = SimpleNamespace(
provider_type="codex",
upstream_metadata={
"codex": {
"primary_reset_seconds": 1800.0,
"secondary_reset_seconds": 120.0,
}
},
)
assert extract_reset_seconds(key_obj) == pytest.approx(1800.0)
def test_resolve_pool_account_state_keeps_codex_metadata_block() -> None:
state = resolve_pool_account_state(
provider_type="codex",