v2.8.6-go
·
8 commits
to go-rewrite
since this release
v2.8.6-go
修复项目审查中已复现的 11 项问题,覆盖数据库并发访问、代理一致性、账号调度、
协议转换和停机收尾。上游客户端版本仍为 3.14.4,账号数据库 JSON/schema 不变。
修复内容
- 数据库单写者保护:服务与 CLI 入口使用操作系统独占锁,防止 CLI 删除的账号
被服务旧快照重新写回,以及设置修改后内存与数据库不一致。 - SOCKS4 巡检:复用实际业务的代理实现,不再把支持的 SOCKS4 线路误判为不支持。
- 选号短回避:目标模型筛选后再执行软回避,避免排除唯一支持目标模型的账号。
- 自动领取健康检查:取得槽位后重新检查账号快照,跳过停用、归档、失效及
未到期冷却;额度耗尽但健康的账号仍可领取。 - 额度刷新保留冷却:额度先归零再恢复不再提前解除冷却;真正的鉴权失败仍可
升级为失效。 - Responses 指令角色:输入中的 system/developer 归并到顶层 system,
保留 instructions 与指令顺序;未知角色不再静默降级。 - OAuth 显式直连:保留登录会话中的直连意图,禁止授权完成后自动换成代理;
已有账号明确选择直连时清除旧指派。 - 代理事务一致性:线路与关联账号变更先事务提交,再发布内存;数据库失败时
不再出现“返回失败但实际出口已改变”。 - Chat 初始内容:流式转换保留 content_block_start 的 text/thinking 初始值,
再追加后续增量,避免正常结束却丢失正文。 - 统一停机预算:后台额度、领取、巡检支持取消,异步票务生产者可取消并等待;
HTTP 与后台收尾共享 10 秒总预算。 - CLI 实时额度:刷新完成后重新读取快照,输出最新额度;失败单独提示。
升级与行为变化
- 替换程序/镜像并重启,无需迁移数据库。
- 服务运行期间,访问同一账号库的 CLI 数据命令会明确拒绝执行;请使用管理后台,
或先停止服务再运行 CLI。先停止旧版本再升级,旧程序不会遵守新增的锁协议。 - 数据库旁的
accounts.db.lock是正常锁文件;文件存在不代表锁被占用。
正常或异常退出后操作系统会释放锁,不需要删除文件。 - 入池自动领取忙时跳过、async 默认 300 秒票务寿命、正常模型 SSE 无总时限等
已有契约保持不变。 - 10 秒为停机总预算;超出剩余预算时记录清理未完成并退出,不无限等待外部组件。
验证
- 新增 18 个顶层回归用例及 1 个子进程辅助入口,覆盖全部 11 项修复。
- 本地关键回归连续运行 3 轮通过;构建、静态检查和五平台交叉编译通过。
- Windows 本地全量测试首轮通过,后续存在既有临时目录清理不稳定;
原始提交对照同样能复现,未将它作为本次修复新增问题。 - 发布标签前检查 Linux CI 全量测试、竞态检测、官方 SDK/Pi 兼容回归、
交叉编译和容器构建结果。
发布产物
- 二进制:Linux amd64/arm64、macOS amd64/arm64、Windows amd64。
- 镜像:
ghcr.io/fujunchao/zcode2api-plus:2.8.6-go和latest,
支持 Linux amd64/arm64。