v2.9.7
v2.9.7 聚焦 账号质量评估与订阅可观测性:新增 HTML 动画降智检测工作台(后台任务、提示词预设、SVG 导出)、Codex 订阅状态服务端跟踪与手动刷新、Ultra 档标记与筛选(#669)、号池一键刷新用量、测连 / 降智测试写入用量记录,以及定价页重构、16 套新主题与账号卡片视图;同时合入 @frank8ai 贡献的 Antigravity 图片输入修复(#667)。
Features
-
HTML 动画降智检测工作台(@james-6-23)。管理后台新增「降智检测」页(
/admin/quality-test),用可编辑的 HTML / SVG 动画题目(默认「鹈鹕骑自行车」)对比所选账号、模型与思考强度的生成质量。检测作为服务端后台任务执行(POST /api/admin/accounts/:id/quality-test返回202),切换页面、刷新或关闭标签页不会取消;任务连同账号身份与订阅快照、模型、强度、提示词、状态、用量与生成内容保存在新表quality_test_jobs,通过GET /api/admin/quality-tests分页查看、POST /api/admin/quality-tests/:id/cancel取消。数据库唯一槽位把全部管理员、标签页与共享数据库实例的运行任务合计限制为 3 个,同一账号仅 1 个活动任务(名额满或重复返回409,不排队);单次任务最多 10 分钟、生成内容不超过 1 MiB,正常关闭服务保存interrupted结果,进程崩溃遗留的任务在截止时间加 30 秒宽限后清理。思考强度按渠道构造(Codex / Responses / Grok 用reasoning.effort,Claude 用原生thinking+output_config.effort),沿用账号测连的代理、凭据、用量与冷却处理,不经过公共/v1/*的 Key 调度、计费与请求体规则。结果在隔离 iframe 中预览(GET /api/quality-test/preview是无凭据、独立 CSP 的静态容器),源码视图先格式化再高亮,展示耗时 / 首段输出 / token 指标,可下载 HTML 或「导出 SVG 静态快照」(取当前最大可见 SVG,含脚本生成的路径与页面样式,上限 10000 元素 / 8 MiB)。提示词预设分内置 7 套(鹈鹕、模拟时钟、太阳系、弹跳小球、齿轮、城市夜景视差、汉字笔顺,随前端发布不落库)与自定义预设(新表quality_test_prompts,GET / POST / PATCH / DELETE /api/admin/quality-test-prompts),创建任务可带prompt_id累计使用次数。检测记录以弹窗展示,?job=<id>可直达结果;npm run test:svg用 Playwright 真实浏览器回归 SVG 导出。不输出自动「降智评分」,指标仅供对比参考。 -
Codex 订阅状态服务端跟踪 + 手动刷新 + 续费时间列(#670,@james-6-23)。订阅同步元数据(
subscription_checked_at / sync_state / source / error / last_known_status / renewal_detected_at / will_renew / grace_until)落在账号 credentials,不建表;服务端按配置时区的自然日计算业务状态(active/expiring_today/expired/grace_period/unknown),账号列表与详情响应新增subscription对象。此前付费 plan 头回来时陈旧到期时间被静默清空(issue #360 的不变式),用户看到的是空白,分不清「已续费」还是「没数据」;现在改为写入「已续费 · 待确认」状态并立即触发一次权威同步,宽限期内不清理。订阅接口改为 Codex CLI 身份优先、403 才回退浏览器伪装——实测人机验证是被 Origin / Referer / Chrome UA 触发的,同 IP 同令牌换 Codex 头直接 200,多数账号不再需要绑代理;仍被挑战的账号在前端提示「绑定代理后重试」。RT 轮换时令牌里更早的到期时间不再覆盖订阅接口给的权威值。新增GET /api/admin/accounts/:id/subscription与POST …/subscription/refresh(每账号 30 秒限流,429 带Retry-After),分页列表与批量选择器新增subscription筛选,列表投影补上订阅键,否则快照行全判未知。前端用共用SubscriptionBadge替换两份 ExpiryBadge:正常态显示YYYY-MM-DD 续费,> 9 天绿 / 4–9 天黄 / ≤ 3 天红,过期显示已超时天数,悬停显示到期时间、最近查询、来源、同步状态、自动续期与失败原因,带刷新按钮;表格新增「续费时间」列与「订阅状态」筛选下拉。 -
Ultra 档标记与筛选(#669,@yy1105384898 报告)。Codex 客户端选 Ultra 时,线路上发出的
reasoning.effort就是xhigh,同时附带一条开启主动多代理委派的<multi_agent_mode>developer 消息,网关记录的xhigh并非改写。现在网关按该标记判定 Ultra(最后一条为准,同回合续接帧按turn_id继承,6 小时进程内缓存),写入新列usage_logs.ultra;用量页模型徽章加玻璃星空样式与说明 tooltip,「更多筛选」新增 Ultra 开关(?ultra=true|false,作为维度筛选会带动区间卡片),状态芯片补500。 -
号池一键刷新用量(@james-6-23)。
POST /api/admin/accounts/batch-refresh-usage(账号页「管理 → 一键刷新用量」)刷新运行池中所有支持 WHAM 的 Codex 账号的 5 小时 / 周用量快照,覆盖全部分页,独立于搜索、筛选与勾选;无 Access Token、Agent Identity、第三方中转与其他渠道账号不参与。只查询/backend-api/wham/usage,不刷新登录令牌,也不回退到消耗 Token 的/responses探针;失败保留原快照,单独的 WHAM 401 不判凭据失效。并发遵循usage_probe_concurrency,单查询最多 15 秒;?stream=true返回start/progress/completeSSE 事件,同实例并发调用返回409,客户端断开即取消,完成前使列表与分析缓存失效。 -
测连与降智测试写入用量记录(@james-6-23)。Codex / Claude / Antigravity / Grok 四渠道的账号测连(
connection_test)与降智检测任务(quality_test)现在从诊断对象投影一条用量日志(Claude 输入按未缓存 + 缓存读 + 缓存写口径),含思考强度、首段输出耗时与最后一条错误文案;拿不到响应记598/transport。用量页 Type 列按internal_reason显示「测试连接」/「降智测试」,不再是笼统的「内部请求」;测连弹窗补显示思考强度与首段输出耗时。 -
模型定价页重构(@james-6-23)。拆出
PricingSyncPanel负责官方来源同步(手动同步、定时同步开关与间隔提示、保留自定义价格、来源管理),价格列表支持来源 / 渠道筛选、费率表达式示意、逐模型展开编辑标准价 / 图片计费 / 高级费率(长上下文 · Priority)并可逐字段还原,显示输出 / 输入倍率与「保存全部包含筛选之外修改」的提示。 -
16 套新主题与主题页重做(@james-6-23)。新增 8 套配色(Ocean 海盐蓝、Forest 松林绿、Lavender 薰衣草、Amber 琥珀金、Espresso 浓咖啡、Sakura 樱花粉、Mint 薄荷青、Midnight 午夜蓝)与 8 套网站风格(GitHub、Vercel、Google、Apple、Notion、Stripe、Spotify、Slack),网站风格会同步应用卡片、按钮与侧栏样式。主题页加入实时预览、浅色 / 深色 / 跟随系统说明与各风格界面特征提示,
index.html的无闪烁引导有测试覆盖。 -
账号卡片视图刷新(@james-6-23)。Codex 账号列表的卡片布局改用独立样式,请求计数胶囊新增
card形态,每张卡片提供详情 / 配置 / 用量入口与额度用量面板。
Fixes
- Antigravity Responses 适配器支持用户消息与工具输出中的内联图片(#667,@frank8ai)。此前在 Antigravity 渠道用 Codex CLI 或 Responses API 调视觉模型时,用户消息里的
input_image/image_url以及function_call_output中携带的图片(如浏览器 / computer-use 工具返回的截图)都会被适配器以「不安全支持的内容类型」拒绝。现在data:<mime>;base64,...图片会转成 GeminiinlineData,工具输出中的图片挂到functionResponse.parts;非用户角色的图片与远程 URL 仍明确拒绝,两条路径都有单元测试。
Upgrade Notes
- 数据库迁移:启动时自动为 SQLite / PostgreSQL 新建
quality_test_jobs、quality_test_prompts两张表,并为usage_logs新增ultra布尔列(默认false)。订阅状态元数据写在账号 credentials 内,无表结构变更。升级前按现有部署流程备份数据库。 - 默认行为变化:订阅状态服务端计算、Codex 身份优先查订阅、Ultra 标记、测连 / 降智测试写用量日志均默认生效。降智检测的并发上限(3 个 / 单账号 1 个)是数据库槽位实现,多实例共享同一数据库时合并计数。测连与降智测试会消耗上游额度并出现在用量记录中,按 Type 可筛出。
- 降智检测预览:
GET /api/quality-test/preview是公开的静态预览容器,不带凭据、不读用户数据,独立 CSP 不放宽管理后台的脚本限制;仍建议反代按现有规则保护/admin。 - 验证与升级建议:main 分支 CI(Go 测试、前端构建、CodeQL、安全扫描)全部通过;降智检测、订阅状态、Ultra 标记、测连用量记录在本地 PG + Redis 部署对真实上游实测通过;号池一键刷新用量、定价页重构、主题与卡片视图以单元测试 / 构建覆盖,UI 未逐项人工自查。需要订阅到期可视化、Ultra 用量区分或 Antigravity 视觉输入的部署建议升级。
致谢
- @frank8ai — Antigravity Responses 适配器图片输入修复(PR #667)
- @yy1105384898 — 报告 Ultra 档与用量日志推理等级不一致(#669)
- @james-6-23 — 降智检测工作台、订阅状态跟踪、Ultra 标记、一键刷新用量、测连用量记录、定价页 / 主题 / 卡片视图重构
Full Changelog: v2.9.6...v2.9.7