用量限制中心夹具
一个仿制的 CLIProxyAPI 中心,用来提供 scenarios.json 中的限制证据场景:
| 场景 | 账户 |
|---|---|
| A | 混合的 Codex 与 Claude 账户 |
| B | 每个提供方(provider)一个账户 |
| C | 六个长邮箱的 Codex 账户 |
| F | 会完成读取、返回畸形回答或遭到拒绝的 xAI 与 Antigravity 账户 |
| L | 具名账户(没有邮箱,因此分段显示认证文件名) |
| P | 每个已读取的中心提供方一个账户,外加一个未读取的 Kiro 账户 |
| T | 四十个账户,因此汇集后的分段在 390px 宽度下为 4px 宽 |
重置时间是相对 n0 的分钟偏移。账户的 state 若为 malformed 或 refused, 其用量就不可读,因此限制功能会把它排除在外。
重建一次捕获
启动一台提供方(provider)主目录为空的开发服务器,这样本地登录不会添加账户:
shCODEX_HOME=$(mktemp -d) CLAUDE_CONFIG_DIR=$(mktemp -d) vp run dev把
state.json写成{"scenario": "A", "n0": 1792515540000}。该n0是 2026-10-20T16:59:00Z,即每一份已发布捕获都使用的那个时刻。然后启动该中心:shnode hub.mjs state.json 18517在设置 → 提供方 → 用量限制来源下,添加一个中心,URL 为
http://127.0.0.1:18517,管理密钥任意,标签为Team hub。Composer(编写器)面板会在每一行账户上印出该标签。从开发者工具控制台把浏览器时钟冻结在
n0:jsconst T = 1792515540000; const R = Date; window.Date = class extends R { constructor(...a) { super(...(a.length ? a : [T])); } static now() { return T; } };然后重新读取时间:
- 在用量页面上,先选择费用,再重新选择限制。
- 冻结之后,用
/usage-limits打开编写器面板。 - 侧边栏的相对时间戳会在下一次分钟跳动时采用这个冻结的时钟。
视口和主题:模拟
prefers-color-scheme的浅色和深色,切换主题或尺寸后等待几秒,让过渡和覆盖式滚动条稳定下来。界面 视口 用量页面 1440×900 和 390×1500 场景 T 390×3100,这样页面不会滚动 编写器面板,Codex 对话线程(thread)( gpt-6-astra)1440×900 编写器面板,Claude 对话线程(Claude Opus 5.5) 390×1300 编辑
state.json,然后按“刷新限制”以切换场景。
并非来自该夹具
- “Codex:无法读取限制。” 这条横幅来自本地 Codex 安装;当
CODEX_HOME为空时,它处于未认证状态。 - Claude 编写器面板中的 “Claude API 密钥”行 来自本地 Claude 安装,而不是该夹具。