Skip to content

Codex 本地中转 v1.8.0

Choose a tag to compare

@github-actions github-actions released this 03 Sep 06:30
· 20 commits to main since this release
c0e627a

Codex Provider Hub v1.8.0

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

2026-09-03-dist-index-eol

  • 类型:chore
  • 发布级别:none
  • 目标:消除 proxy_static/dist/index.html 入库 blob 中的孤立 CRLF,使工作区在该文件上保持干净,不再出现永久 M 噪音。
  • 实际改动:- proxy_static/dist/index.htmlgit add --renormalize 将入库唯一 CRLF 行归一为 LF(1+/1-)。
  • 新增本说明 docs/changes/2026-09-03-dist-index-eol.md
  • 兼容性:无。纯换行符归一,渲染与构建产物语义不变。
  • 风险:- 若归一后 diff 含除换行符外的内容,立即停止(说明文件被意外改动)。
  • 缓解:提交前用 git diff --cached --ignore-cr-at-eol 强制校验为空。
  • 验证结果:- 入库后 blob:CRLF=0(13 行全 LF);忽略换行符后与父提交内容完全一致(零语义改动)。
  • git status 干净,常驻 M 消除。
  • 推送门禁会自动执行既有全量校验。
  • PR:pending

2026-09-03-token-usage-trend

  • 类型:feature
  • 发布级别:minor
  • 目标:在新版控制台新增"用量趋势"视图:以时间曲线展示选定范围内 token 消耗(输入/输出/合计)随时间的变化,按小时或按天分桶,附请求量与成功/失败汇总,帮助用户直观看到消耗节奏、定位异常时段。
  • 实际改动:- local_proxy/core.py
    • 新增常量 TIMELINE_MAX_CUSTOM_SECONDS(90 天)、TIMELINE_HOURLY_SPAN_SECONDS(48 小时)、TIMELINE_BUCKET_FIELDS
    • 新增辅助函数 _timeline_granularity(跨度 ≤ 48 小时按小时,否则按天)、_timeline_bucket_seconds_align_timeline_start(小时取整点、天取本地 0 点);
    • UsageStore 新增 timeline():按窗口解析边界(all 取库内最早记录),SQL 按桶索引分组聚合,空桶补零,total 由桶求和得出;
    • create_proxy_app 新增 GET /control/api/usage-timeline 路由(usage_window 参数默认 24h、custom 上限 90 天、可选 provider_id 校验、422/404/503 错误口径与 usage-history 一致)。
  • proxy_static/src/components/UsageTrendView.vue(新增):"用量趋势"视图:时间范围选择(今天/近 24 小时/近 7 天/近 30 天/全部/自定义)、汇总卡片(合计/输入/输出/请求/成功/失败)、手写 SVG 图表(输入/输出堆叠面积 + 合计折线、自适应 y 轴、悬停竖线与明细浮层、图例)、30 秒自动刷新、窗口选择持久化到 localStorage。
  • proxy_static/src/components/ViewTabs.vue:新增"用量趋势"标签(usage),随 usageEnabled 属性与 usage_history 功能开关联动。
  • proxy_static/src/App.vue:挂载 UsageTrendView(受 features.usage_history 门控),存储视图回退逻辑扩展到 usage
  • proxy_static/src/styles.css:新增 .usage-* 图表与面板样式(坐标轴字号使用 var(--font-meta),暗色主题经既有 CSS 变量自动适配)。
  • proxy_static/dist/npm run build 重建产物(index-LOpJNy1t.js)。
  • 测试:tests/test_proxy_core.py 新增 5 个 timeline 存储测试(today 小时分桶与零填充、24h 整点对齐与供应商过滤、7d 本地天对齐、all 起点与空库、custom 粒度与边界校验)和 1 个端点测试(200/过滤/422/404/503/默认窗口);tests/local_proxy_vue_ui.test.js 更新共享视图清单并新增"usage trend view renders a time-bucketed token curve"源断言测试。
  • 兼容性:- 纯新增:新查询方法、新端点、新视图;request_usage 无 schema 变更、无迁移;现有 summary/history 行为不变。
  • 风险:1. all 窗口桶数随历史增长:按天分桶且以库内最早记录为起点,桶数上限由数据保留策略天然约束;custom 限 90 天。
  1. 时区与对齐错误导致曲线偏移:与 _usage_window_cutoff 相同的本地时区规则,单测覆盖跨天/跨小时边界。
  2. 手写 SVG 在窄屏的可用性:响应式宽度、最小高度、悬停按桶索引对齐,不做像素级悬停。
  • 验证结果:- python -m unittest discover -s tests -p "test_*.py" → Ran 549 tests:新增 6 个测试全部通过;4 个失败/错误为本轮改动前即存在的本机环境问题(fake-IP DNS 将 .example 保留域解析为非公网地址 ×3、本机 cc-switch 无 Codex API 供应商 ×1),与在 origin/main 上复现的结果一致(2026-09-03)。
  • node --test tests/*.test.js → 全部通过(含新增用例;Vue UI 测试 24/24)(2026-09-03)。
  • npm run build --prefix proxy_static → 构建成功,产物 index-LOpJNy1t.js
  • PR:#74