Sub2API Plus 0.2.9
Technical preview / 技术预览: 当前 0.2.x 仅用于开发、兼容性测试和隔离验收,未完成生产级安全、压力、容灾和回滚验证。请勿直接接入生产业务、真实付费用户、不可替代数据或高价值凭据。完整说明见 DISCLAIMER.md。本提示不对 LGPL-3.0-or-later 增加许可限制。
更新日志 / Changelog
这是在 0.2.8 兼容性同步基础上的小版本修订,重点收敛账户探测写入、补齐 CI 集成测试边界,并把本轮已经验证过的 OpenAI/Codex 适配能力正式固化到版本文件。版本号只提升一个补丁位,数据库结构、现有账户凭据格式和代理配置格式保持兼容。
上游同步与协议兼容
- 持续跟进
Wei-Shaw/sub2api的upstream/main,保留中国区配额/请求头、渠道分时计价、Responses/Chat Completions 桥接、Grok/智谱等渠道适配,以及前端账户管理改进。 - OpenAI Responses、Chat Completions 和 Codex WebSocket 共用一致的回合状态投影;WebSocket 后续回合遇到明确 429 时,重放请求会按新模型重新选择账户、能力、平台和渠道映射,不再沿用上一回合的错误路由。
- 保留超大首帧 HTTP bridge、
/responses/input_tokens、sideband/live HTTP、compact 探测、工具增量事件和非标准反代错误的兼容处理;异常响应会先完成结构化识别,再决定重试或切换账户。 - 对
previous_response_id、终态 outputid/call_id、服务层级和重置配额响应增加边界校验,避免控制字符、别名冲突或超大响应造成会话状态污染。
OpenAI/Codex 账户、额度与代理
- Codex 指纹收敛继续提供
off、device、session、full四档,默认off;HTTP、WebSocket、导入、编辑、批量编辑、复制和调度快照使用同一账户级 seed 生命周期。 - OpenAI OAuth 账户的卡 429 策略仍为“两次明确上游 429”才进入账户级冷却;第一次 429 执行请求级 failover,短时间内第二次明确 429 才冻结。存在可用 Credit 时不会因为本地估算阈值提前返回 429。Claude/CC 渠道不启用这套策略。
- “卡429/奸商模式”开关仅作用于 OpenAI/Codex,默认关闭;开启后保留老连接的账户粘性,只有连接出现异常才切换,避免把正常长连接误判为失活。该模式的体验和容量权衡已在界面及文档中明确说明。
- 配置了
proxy_id的 OpenAI 账户实行 fail-closed:模型请求、OAuth 刷新、额度、盘点、测活、WebSocket、live/sideband 和input_tokens均复用该代理;代理缺失、URL 无效或查询失败时直接报告原因,不旁路直连。未配置代理的账户继续按原有直连策略运行。 - ChatGPT 积分查询固定使用
GET /backend-api/wham/usage,读取credits.balance;管理端美元金额仅作前端参考换算(Credit / 25),不会当作实际账单余额。单账户查询、一键盘点和导入后的首次刷新共用解析与缓存。 - 账户调度优先在并发承受范围内填满少量健康且有冗余的账户,需求增加时再扩展到账户;测活失败会重试一次,连续失败进入独立失败池并保留脱敏原因,避免死号继续参与正常调度。
本轮新增的稳定性修复
- 修复代理上游账单/用量探测在快照缺失或为
null时仍写入账户时间戳和 outbox 的问题。现在只有存在有效快照时才更新对应账户记录,空探测不会制造“刚刚使用”或虚假的变更事件。 - 修复集成测试夹具把“手工暂停”默认值带成
true的问题;测试现在显式设置场景状态,避免把夹具默认值误当成生产行为。 - 保留上一轮
golangci-lint修复:清理未使用符号、无效赋值、nil context、错误类型断言和静态分析告警,确保 Go1.27.0工具链下 lint 与 CI 规则一致。 - 账户列表、状态兜底、额度窗口、批量编辑确认、导入数据模型、测活失败池和一键盘点的前后端字段继续保持一致;未知状态不会再直接渲染为
admin.accounts.status.undefined。 - 更新/重启相关请求继续使用幂等键和断连独立上下文,结构化返回权限、备份、校验、替换和回滚错误;本版本不自动覆盖运行中的数据目录,也不携带构建缓存或数据库文件。
前端与管理端体验
- 账户详情、批量编辑、导入、重新授权、额度卡片和一键盘点页面共享 OpenAI/Codex 字段定义,指纹档位、Credit、美元参考值、重置次数、5 小时/7 天窗口和代理状态可在同一账户上下文查看。
- 盘点操作必须先选择账户;结果按成功、失败、跳过和额度已获取分类展示,失败项显示最后一次脱敏错误。普通“查询”与“一键盘点”使用相同的积分解析器,避免只有盘点才刷新额度的显示差异。
- 批量操作继续区分“勾选目标”和“筛选命中目标”,筛选全量更新显示命中数量并要求二次确认,降低误操作范围。
验证与交付记录
- 本地
go test -tags=unit -p 1 -count=1 ./internal/repository通过;Go1.27.0嵌入式后端构建通过。 dev构建、单元测试、集成测试、前端构建和安全扫描均已通过;开发产物为sub2api-0.2.9-dev.29.ca8ed491。main分支 CI 全部通过(shell、frontend、golangci-lint、unit、integration);安全扫描通过。最近一次主分支运行记录:33302900943。- 发布包仍遵循仓库
LGPL-3.0-or-later协议、NOTICE、免责声明和源码构建说明;版本号变更不改变上游许可证义务。
升级与回滚提示
- 升级前保留数据库、
config.yaml、.env、代理定义和账户凭据的离线备份,并确认备份可恢复。 - 从
main拉取源码后按源码构建说明构建,或使用 CI 生成的对应归档;不要把.gocache-*、.tmp、数据库和运行日志加入源码包。 - 升级后先在管理端选择少量账户执行测活和一键盘点,确认代理出口、Credit、重置次数和状态显示,再逐步放量。
- 出现异常时保留日志中的 request id 与结构化错误,按发布指南回滚到上一版本;回滚前后都不要覆盖用户数据目录。
本版本是技术预览和兼容性验收版本。CI 通过表示源码、构建和自动化测试达到当前门槛,不等同于任何生产环境认证;部署前仍应完成独立审计、压测、备份恢复、代理连通性和回滚演练。
📥 Installation
Docker:
# GitHub Container Registry
docker pull ghcr.io/zcj-ui/sub2api-plus:0.2.9One-line install (Linux):
curl -sSL https://raw.githubusercontent.com/zcj-ui/sub2api-plus/main/deploy/install.sh | sudo bashManual download:
Download the appropriate archive for your platform from the assets below.