Skip to content

Codex 本地中转 v1.10.1

Choose a tag to compare

@github-actions github-actions released this 03 Sep 17:26
· 8 commits to main since this release
dd31efc

Codex Provider Hub v1.10.1

本版本由已验证的功能变更说明自动生成。

2026-09-03-usage-chart-catalog

  • 类型:feature
  • 发布级别:patch
  • 目标:按用户选择把用量趋势扩展为六种差异化图型(同一数据多种回答),视觉规范参考 Lieflat Charts(手写 SVG 复刻,不复制其 PolyForm NC 代码):
  1. 趋势(保留,动画画入)
  2. 日历(重做热力):今天/24h 保留"日×24 小时"方格;≥7 天改为 GitHub 风格"周×星期"圆点日历(L17 Calendar Heat:点面积=当日 tokens、最忙日虚线环标注、月份刻度)
  3. 累计(保留,冲击线+滚动大数字)
  4. 节律(新增,G14 Punch Card):星期×24 小时点阵,点半径=消耗量,看工作日/周末节律
  5. 构成(新增,G4 Dot Waffle):100 枚圆点(1 点≈1%)按供应商占比着色 + 排名榜
  6. 发丝线(新增,L3 Barcode):每个分桶一根发丝线+圆点,安静桶也有短线

并修复图例布局:图例移出图表卡片,独立成下方单行(色块项 nowrap、说明文字右对齐),不再与 SVG 抢空间导致换行错乱。

  • 实际改动:- local_proxy/core.pyUsageStore.weekday_hour()——按本地时区星期×24 小时聚合(SQL strftime('%w'/'%H', recorded_at, 'unixepoch', 'localtime'),周一=0 行),字段与 timeline 一致,空库/allstart_at=null;新端点 GET /control/api/usage-weekday-hour(默认 30d、custom 限 90 天、provider 404/参数 422/store 503/数据库 503/no-store)。
  • local_proxy/server.py_register_control_routes 同步注册 {prefix}/api/usage-weekday-hour(处理器与 core 层口径一致)。
  • proxy_static/src/components/UsageTrendView.vue:图型选择器扩为 趋势/日历/累计/节律/构成/发丝线 六项(旧值映射:heat→calendar、area/line/bars→trend);日历图在 ≥7 天窗口渲染"周×星期"圆点阵(半径=√(tokens/max)、最忙日虚线环、月份/星期刻度、stagger 入场),今天/24h 保留小时方格;节律图消费 weekday-hour 端点渲染 7×24 点阵;构成图请求 /api/status 并经 buildShareCardData(providerLimit=8) 渲染 10×10 waffle 点阵;发丝线逐桶线+圆点(安静桶保留短基线,线宽随桶数压缩);图例移出图表卡片为下方单行(色块项 nowrap、说明文字右对齐,窄屏换行);指标药丸与轮播仅在趋势/累计显示;30 秒自动刷新经 document.hidden 门控并在节律/构成激活时同步刷新辅助数据。
  • proxy_static/src/styles.css.usage-legend-row(含 900px 断点换行)、.usage-cal-dot/.usage-punch-dot/.usage-waffle-dot stagger 动画、.usage-cal-peak-ring.usage-waffle-1..4.usage-barcode-line(.is-empty)/.usage-barcode-dot;reduced-motion 降级扩展到全部新动画。
  • 测试:tests/test_proxy_core.py 新增 weekday_hour 矩阵落位/provider 过滤/空库/非法窗口与 90 天上限 2 个用例;tests/test_server.py 新增双服务 usage-weekday-hour 200/隔离/跨服务 404 用例;tests/local_proxy_vue_ui.test.js 图型断言扩为六图型并新增图例行结构断言。
  • proxy_static/dist/:重建(index-D6mAsM1S.js / index-CIs_K6wk.css)。
  • 兼容性:- 后端纯新增端点与查询,request_usage 无 schema 变更;timeline 行为不变。dist 重建。
  • 发布级别经用户确认由 minor 调整为 patch:本轮功能跨度有限,不足以提升第二位版本号。
  • 风险:1. weekday_hour 聚合在超大时间范围(all)下为单查询分组聚合,量级可控;custom 限 90 天。
  1. all 窗口发丝线桶数可达数千:发丝线按桶数压缩线宽(最小 1px),超过 400 桶时抽稀绘制并保持首尾。
  2. 两层端点注册遗漏(#78 教训):server 层注册与测试同时提交。
  • 验证结果:- python -m unittest tests.test_proxy_core.UsageTests → 26 项通过;tests.test_server → 19 项通过;全量 python -m unittest discover -s tests -p "test_*.py" → 558 项全部通过(2026-09-03 23:28)。
  • node --test tests/*.test.js 全部通过(Vue UI 27/27,含六图型与图例断言)。
  • 组件 stub 数值抽查:30 天日历 26px 单元 178×212、punch 7×24=168 点半径合规、发丝线 30 桶 x 递增、waffle 恰 100 点按占比 70/30 分布。
  • 浏览器 harness 截图:六图型全部正常渲染(日历月刻度+最忙日虚线环、节律工作日/周末纹理、waffle、发丝线、累计、趋势);npm run build --prefix proxy_static 构建成功。
  • PR:#84

2026-09-04-share-card-dark-backdrop

  • 类型:fix
  • 发布级别:patch
  • 目标:复制/下载的战报卡片粘贴到微信(含暗色模式)时不再出现白色填充角。导出图自带 #0b0d10 深色底板(原设计稿的页面底色),卡片以圆角浮于底板之上,整图无任何透明像素——微信压平 alpha 也不再可能出白。
  • 实际改动:- proxy_static/src/share-card.jsterminalCardTheme() 新增 backdrop: '#0b0d10'backdropMargin: 12
  • proxy_static/src/components/ShareCardDialog.vuedrawCard() 先整幅填充深色底板,再 translate(margin, margin) 于卡片原点做既有圆角裁剪/内容/描边/扫描线绘制;模板画布属性 384×664。
  • tests/share_card.test.jstests/local_proxy_vue_ui.test.js:主题与画布断言更新(384×664、底板填充、平移、无透明)。
  • tests/test_proxy_core.py:修复 test_timeline_today... 既有时间敏感缺陷——原测试用 time.time() 且在 now-3h 插数据,0-3 点运行时该记录落入昨天导致断言漂移;改为固定当天 12:30。
  • proxy_static/dist/:重建(index-5Qz3Zn17.js)。
  • 兼容性:- 纯前端视觉;导出文件名不变;dist 重建。
  • 风险:- 底板边仅 12px,若用户期望"完全满幅无边"可能有出入:底板为原设计稿页面底色,视觉上是"深色卡片置于深色页面"的完整构图。
  • 验证结果:- node --test tests/share_card.test.js tests/local_proxy_vue_ui.test.js → 36/36 通过(2026-09-04 00:39)。
  • 浏览器实测(2026-09-04 00:41):预览环境打开分享对话框,导出画布四角/底板边/卡片内像素均为不透明 rgba(11,13,16,255),无任何透明像素——微信压平 alpha 后不可能出现白色。
  • 全量 python -m unittest discover -s tests -p "test_*.py" → 558 项全部通过(含修复后的时间敏感用例,凌晨运行验证);node --test tests/*.test.js 全部通过;npm run build 构建成功(2026-09-04 00:46)。
  • PR:#85