Skip to content

v1.0.12

Choose a tag to compare

@github-actions github-actions released this 13 Sep 05:13
· 404 commits to main since this release

安全

  • 升级 Next.js 15.3.8 → 15.5.25(响应 Issue #2):15.3.8 落在多个 Next.js
    公告的影响范围内(含 2 个 critical)。npm audit 已从 3 条降至 0 条
    • 说明:本项目生产环境是 output: 'export' 静态导出,由 FastAPI 托管静态文件,
      运行时并没有 Next.js 服务端(无 middleware / route handler / server actions,
      images.unoptimized: true),因此那些 SSRF / RCE / DoS 公告在生产上并不适用。
      但公开仓库应当保持依赖干净,且升级成本极低,故一并处理
    • eslint-config-next 同步升到 15.5.25
    • 加 overrides.postcss = 8.5.28:Next 内置的 postcss 8.4.31 落在公告范围内,
      顶到已修复版本后 audit 归零;已实测构建产物与全部路由正常
    • 未升级到 Next 16:那是破坏性大版本,收益不符合风险

新增

  • 实际扣费(实付)可视化:上游 2026-09-13 起在响应末帧的 usage.credit
    里返回本次真实扣费,管理端现将它与 Token 一起留痕
    • 请求日志新增「实付」列,详情抽屉显示「实际扣费」(0 会标注「未计费」)
    • 用量统计新增「今日实付」卡片(附本周合计),按模型 / 按密钥明细表也加了「实付」列
    • 区分「上游未返回」与「扣了 0」:缺失存 NULL、界面显示 —,
      0 才是真的免费。混为一谈会把未知误判成免费号
    • 顺带扩了 usage_daily.credit(当日扣费合计),趋势图数据里也有了
  • 数据库自动迁移:request_logs / usage_daily 都是已存在的表,
    而 SQLite 的 CREATE TABLE IF NOT EXISTS 不会给老表补列。
    新增 _migrate()(PRAGMA table_info 检测后 ALTER TABLE),
    可重复执行、保留旧数据。升级不再需要手工动库

修复

  • 任务记录页会随记录数无限变长:两块列表一次把取回的数据全部渲染,
    实测 500 条任务日志 = 19 屏、9000 个 DOM 节点,历史一多就要一直往下滑。
    现改为服务端分页(每页 20),页面高度不再随数据增长
    (同一份数据:19,229px → 1,615px,DOM 9,003 → 741)
  • 列表徽章「共 N 条」与实际可见条数不符:徽章取的是全局统计,而列表只取
    前 500 条,会出现「徽章说 2200 条、实际只能看到 500 条」且更早的记录翻不到。
    现分页总数取当前筛选下的计数,可一直翻到最早一条
  • 签到记录占掉半屏多:行高 39px(结果列的 Badge 有内边距)且与「上游原始
    日志」并排对齐,把右侧只有几行内容的卡片一起撑到 924px,右半屏大片空白。
    现压缩签到行高(39 → 29px)、两块改为各自独立高度、并做成 12 条/页

改进

  • 移动端三块整合成一张卡片 + 分段切换:手机上三块竖着堆叠、各自带表头与
    分页,页面又长又碎(2.6 屏)。现改为顶部分段(签到记录 / 自动任务 / 原始日志),
    一次只显示一块,页面收敛到 1–1.5 屏;桌面端横向空间足够,仍是三块并列
  • 移动端每页条数自适应:手机是卡片列表(一条约 70px,桌面表格行只有一半),
    任务记录在手机上改为 8 条/页,避免一次拉太长
  • 任务记录与签到记录都加了时间范围筛选(近 24 小时 / 7 / 30 / 90 天),
    切换类型或时间范围会自动回到第 1 页;概览数字也按同一范围统计,避免对不上

说明

  • 扣费字段来自上游,若上游版本较旧(未返回 usage.credit),界面统一显示 —,
    属于「无数据显示」而非异常

计划中

  • 海外版(CodeBuddy 国际版)支持:受上游限制,暂不可用。上游
    workbuddy2api 的出站地址硬编码国内域名(copilot.tencent.com /
    www.codebuddy.cn),且 chatBase() / billingBase() 不看账号的
    domain 字段(该字段只作为 X-Domain 请求头发送,是企业标识而非区域标识)。
    需上游先做成按账号/按域选择 base URL,本端再把自实现的登录/签到/余额地址
    改为可配置。见 Issue #1