Repository navigation
v0.4.3
新增
- 凭证池:筛选与按渠道分组。凭证多了以后,「找到某一个账号」拆成三层:筛选工具条(搜索 × 渠道 × 状态,纯前端收敛,不改后端排序)+ 按渠道分组(组头做成一张紧凑的「渠道仪表盘」:品牌图标 + 渠道名 + 账号数 + 状态分布 + 额度合计占比环 + 到期积分)+ 列头跟着展开区走(没有全局表头,列头渲染在每个展开的组内部并吸顶)。默认全折叠,首屏先看结构;筛选生效时自动展开命中渠道,清空回折叠总览。组顺序默认额度从高到低,可切回固定的全站渠道顺序。「成长中心」列只对支持的渠道(CodeBuddy)出现,其余渠道留空占位格以保持列数恒定(否则 auto 布局会重算列宽、下面展开的组整列错位)。到期积分次窗口只在比主窗口多时才出第二块——CodeArts 每日池当天清零、两窗口恒等,不再把同一个数字说两遍。
- 模型列表页:
available与「只看当前渠道」。GET /api/model-catalog每行新增available布尔,表示该模型是否当前渠道真能提供(口径与/v1/models一致:只算有可用凭证、过当前黑名单的渠道),判定复用价表 / 能力分同一套候选键。页面提供默认关闭的「只看当前渠道」开关,勾选后本地收窄到当前渠道获取到的模型(不重新请求)。「能力分」列头可点排序(按综合智能指数,无分数的行排末尾)。
变更
- 用量统计默认最近 24 小时(原 7 天):打开统计页的第一问题是「这个池子现在怎么样」,7 天会把当天的波动摊平。仍可切 7 天 / 30 天 / 全部。
- 测试目录按
src/结构重组:tests/镜像src/子包(api/ auth/ compat/ config/ db/ deploy/ engine/ provider/<渠道>/ scripts/ stats/ tasks/ webapp/)+helpers/+regression/,巨型文件拆分到 600 行以内;「真连上游」豁免从按文件名判定改为@pytest.mark.real_upstream(...),文件重命名/下沉后不再静默失效。测试数与覆盖门槛不变(后端 100% 行/分支)。 - 内部重构(行为零变更):
api/models.py拆出model_merge.py纯函数层;三个/v1出口共用dispatch_compat;7 个上游端点解析器表驱动化;scripts/抽出_common.py(backup()+ 与Database.transaction同语义的DbAdapter,去掉 6 份 backup / 4 份 adapter 副本)。
修复(安全加固批次)
- 流式首帧后不再换号:已向客户端出过帧还换凭证,会把两个上游的半截内容拼进同一条回复。
- 登录 CSRF:无 Cookie 的写端点(登录 /
/authorize)也校验 Origin/Referer。 - OAuth state store(codebuddy / codearts / qoder)补 TTL 判定,过期 reservation 不再可轮询 / 重放;TRAE 回调登录按发起人会话绑定 pending(单槽全局态会被并发登录互相覆盖,把 A 的凭证记到 B 名下)。
- 上游错误体有界读取(7 处非流式错误路径改
read_body_bounded,恶意上游不能撑爆内存);非流式聚合加事件条数上限(上游死循环输出不再无界增长到 OOM)。 - 出站文案不回上游原文 / 内部 URL:
UpstreamProtocolViolation加受控public_message,告警 webhook 外发只留scheme://host与异常类名。 - SQLite 写事务显式
BEGIN IMMEDIATE(deferred 下读改写会丢更新);Database.transaction嵌套调用只有最外层提交 / 回滚;Database.close关闭所有线程连接。 - 告警 webhook SSRF 校验(拒内网 / 回环 / 链路本地 / 保留 / 多播 / 未指定),env 提供的
ALERT_WEBHOOK_URL同样校验;多地址改并发投递并加总预算。 - 迁移版本护栏:库
user_version高于本程序时拒绝执行(此前会把版本号写回旧值)。 - 凭证昵称仅 admin/operator 可见;模型白名单在无法判定模型名时 fail closed;登录限流失败键加数量上限与淘汰(堵用户名维度内存 DoS);
APP_SECRET补低熵拒绝。 - 管理台:admin-only 路径加
RequireAdmin守卫(非 admin 直输地址不再落到一片 403);错误文案只透出后端受控 message,不再渲染网络层英文实现细节。 - 前端:CSP 收紧到
default-src/script-src 'self'(主题初始化移出内联脚本)+Referrer-Policy: same-origin;/index.html不再发 immutable 缓存头。 - CLI:
hash_password/create_user新增--password-stdin(密码不进 argv / shell 历史);create_user --list改为只读。
升级
docker compose pull && docker compose up -d无数据库 schema 变更(PRAGMA user_version 仍为 18),无需迁移。改过 src/ 的本地部署必须重启后端进程。镜像:ghcr.io/robbsluo/coding2api:v0.4.3(同时更新 :latest)。