Repository navigation
Sub2API 0.2.10
AI API Gateway Platform - 将 AI 订阅配额分发和管理
Important
本版本为 0.2.10:在完整保留 Fork 自有功能的前提下,将上游 Wei-Shaw/sub2api 的功能移植进本 Fork。
latest 与 0.2.10 均指向本版本。
版本号沿用上游的三段式 0.2.10:本 Fork 未占用该标签(已发布版本为 v0.2.8 / v0.2.81 / v0.2.9 / v0.2.91),
因此直接跟随上游版本号。注意 0.2.10 在数值上小于上一版本 0.2.91,应用内「检查更新」的版本比较可能把本版本判为更旧;
请以 latest 镜像标签与 Release 为准。
Note
发布产物与前几版一致:Docker 镜像(GHCR + Docker Hub 双 registry),linux/amd64 单架构,
三标签 0.2.10 / 0.2.10-amd64 / latest(同一镜像);二进制归档仍停发,Release 仅交付镜像与说明。
移植来源
- 来源仓库:
Wei-Shaw/sub2api,分支main - 来源提交:
a60a29549(releasev0.2.10) - 上次移植基准:
9a62841fd(releasev0.2.9,已由本 Fork 的 PR #86 /v0.2.9发布) - 本次增量:33 个提交(22 个非合并提交)、118 个文件(+3784 / −439),无新增数据库迁移
- 合并方式:
git merge --no-ff upstream/main(合并提交cc4224e0b),20 处冲突手动处理(见下方「Fork 适配与冲突处理」) - 补丁等价性核对:本 Fork 的
v0.2.91已并入 ranxiproduction的 Wei-Shaw#185 – Wei-Shaw#191,其中 ranxi 侧同样在追平上游;
git cherry显示上游本批改动在 Fork 侧尚无等价补丁,故全部引入 - 版本号:
backend/cmd/server/VERSION为0.2.10
v0.2.10 增量(本次新增)
- Claude 原生重置额度(reset credits):新增
claude_reset_credits.go与claude_reset_handler.go,账号页可按需查询 Claude 侧重置额度状态并展示在账号单元格(ClaudeResetCreditsCell.vue),新增管理端路由GET /accounts/:id/claude/reset-credits - 风控用户白名单:新增
cyber_policy_user_allowlist设置项与cyber_policy_allowlist.go,白名单用户(按用户 ID / 邮箱模糊搜索)命中风控时只记日志(log-only),不落账号封禁与会话屏蔽;管理端设置页新增白名单选择器,HTTP 与 WebSocket 准入对白名单用户跳过既有会话屏蔽查询 - Claude Sonnet 5.5 支持:新增模型与计费识别,并保留 Opus 5.5 thinking 相关行为
- 分组「仅 Claude Code 客户端」:仅允许 Claude Code 客户端的分组会隐藏不支持的客户端入口
- 模型白名单与映射冲突修复:账号级白名单不再覆盖模型映射,避免「白名单模型映射冲突」把可用模型误拒
- 网关路由归属修正:复合(composite)模型路由在传统调度与 WebSocket 别名场景下按账号归属解析,避免歧义路由把请求交给非归属账号;修正晚到的缓存输入扣减
- 流式用量归一化:Chat 流式转发的 usage 现在会随响应归一化并上报,修复流式请求用量缺失
- Anthropic 工具名重写:工具名重写改为单次 body pass,避免重复改写
- Antigravity 兼容流保活:首个内容块到达前的兼容流保持存活(
fix(antigravity): keep compat streams alive before first content) - Codex 模型目录:OpenAI 分组不再下发 Codex 模型目录(
fix: omit Codex model catalog for OpenAI groups) - 看板用量趋势切换:管理端看板支持在 tokens 与消费金额(actual_cost)之间切换近期用量趋势
- 依赖清理:移除初始化阶段写入的已废弃限流默认值
Fork 适配与冲突处理
backend/cmd/server/VERSION:跟随上游写入0.2.10。代价是该版本在语义化比较中小于0.2.91(应用内检查更新可能判为更旧)- cyber 设置项(union):保留 Fork 的
CyberSessionIdentityStrictEnabled(设置键、解析默认值、DTO、请求体、cachedCyberSessionBlockRuntime.strict、严格身份门控准入),并新增上游的CyberPolicyUserAllowlist(设置键、解析默认值、设置视图、DTO、请求体、allowlistedUsers缓存、log-only 记录)。合并产生的重复cacheTTL声明已去除;enabled读取失败时保留 Fork 的 fail-closed 提前返回,并沿用「刷新失败时保留上一次白名单」的上游语义 backend/internal/handler/openai_gateway_handler.go:保留 Fork 的 turn 准入、分组禁用模型与严格 cyber 身份机制,并在所有屏蔽点接入上游的cyberPolicyLogOnly放行。WebSocket 首帧改为显式解析复合路由(wsRouteModel+WithCompositeRouteDecision)取代ensureCompositeTargetPlatform;Fork 的禁用模型校验保持在前backend/internal/handler/openai_cyber_allowlist.go:保留上游新增文件与白名单(log-only)语义,但findBlockedCyberSessionForAPIKey改为基于本 Fork 的类型化会话身份查询(service.ResolveCyberSessionIdentity):上游的buildCyberSessionBlockWritePlan/findBlockedCyberSessionKey依赖本 Fork 已删除的openai_cyber_transcript.go(本 Fork 采用严格身份门控,不引入 transcript 相似度键)backend/internal/service/openai_ws_forwarder_ingress.go:上游把准入可见载荷改名为rawForHash并单独保留clientWindowID;两侧字段都保留,hooks.BeforeRequest传rawForHash(准入需看到映射前的客户端模型),同时保留 Fork 的invalidateOpenAIWSTurnStateAfterAdmissionFailureForRequest失效处理- 设置管线:看板 handler 保留 Fork 的
parseTimeRange标签输出并新增上游的metric选择;管理端 settings 请求体 / 响应体与systemSettingsResponseData同时携带白名单与严格身份字段 - 依赖注入:
routes/admin.go、handler/wire.go、cmd/server/wire_gen.go保留 Fork 的代理车道、openai-reauth、请求采集、token-guard 与 Excel / BPS 接线,并额外接入上游的ClaudeResetCreditService与claude/reset-credits路由 - 测试:
openai_account_scheduler_test.go并集两侧新增用例,并按 Fork 的getOpenAIAccountScheduler(ctx, priority)签名调用;openai_ws_v2_passthrough_cyber_test.go保留 Fork 的WithOptionsharness,上游的变参构造器作为其薄封装;openai_cyber_allowlist_test.go改用 Fork 的显式屏蔽键断言(无 transcript 键);EditAccountModal.spec.ts、AccountStatusIndicator.spec.ts取两侧并集 - i18n:保留 Fork 更严格的
cyberSessionBlockHint文案(描述本 Fork 的严格身份语义),并补入上游的白名单文案
Fork 自有功能(完整保留)
- Codex 292 门票(x-codex-turn-state)打票与注入、账号代理车道(proxy lanes)
- Excel / BPS 协议链路:单工具调用参数解析、图片中转入驻控制、BPS 冷却策略与用量明细推理等级映射
- cyber 严格身份门控:缺省拒绝缺失 / 非法 / 冲突会话身份,WebSocket 后续轮次可继承本连接首次确认的身份
- 凭证守护、账号质量运维、上游剩余额度探测、观察者(observer)角色与分组范围控制
- 图片创作 / 画布 / Studio Bridge、邮件广播、模型广场(model-square)
- 发布流水线:双 registry(GHCR + Docker Hub)推送;
latest只由本 Fork 的镜像工作流与 Release 写入
升级说明
- 部署与升级使用 Docker 镜像:
docker pull ghcr.io/ziyue67/sub2api:0.2.10,或docker pull ziyue67/sub2api:0.2.10;
latest同步指向本版本。具体步骤见部署文档。 - 本次无新增数据库迁移,最新迁移仍为 Fork
main上既有的迁移集合;升级前请备份数据库。 - 行为变化:新增 Claude 重置额度查询入口;风控白名单用户命中风控只记日志;OpenAI 分组不再下发 Codex 模型目录;
看板用量趋势新增 metric 切换(默认 tokens,语义不变)。 - 回滚:revert 本次合并提交即可;镜像可回退到上一版本
0.2.91。 - 合并进
main后会触发GitHub Container Registry工作流,按VERSION发布0.2.10/0.2.10-amd64/latest三标签镜像,
随后由Sync Fork Release创建v0.2.10标签与 Release。
验证
- 本次(
v0.2.10追平)本地校验(Linux,Go 1.27.1 / Node 22 / pnpm 9.15):
后端go build ./...、go vet -tags=unit ./...、go test -tags=unit -count=1 ./...全部通过
(63 个包ok、0 个FAIL,含本次改动涉及的internal/service(cyber 白名单、Claude 重置额度、复合路由归属)、
internal/handler、internal/handler/admin、internal/server/routes等包);
前端vue-tsc --noEmit、eslint通过,make test-frontend-critical45 个文件 / 737 个用例全部通过。 - 无新增迁移文件:本次增量未改动
backend/migrations与backend/ent。 - 发布配置未改动:
.github/与 GoReleaser 配置沿用既有约定(仅linux/amd64、三标签、二进制停发)。 - 上一版本(
0.2.9追平上游v0.2.9)的验证记录保留在 v0.2.9,0.2.91的 ranxi 追平记录见 v0.2.91。
Docker 镜像(ziyue67/sub2api)
ziyue67/sub2api:latest
ziyue67/sub2api:0.2.10
ghcr.io/ziyue67/sub2api:latest
ghcr.io/ziyue67/sub2api:0.2.10
拉取示例:
docker pull ziyue67/sub2api:0.2.10
docker pull ghcr.io/ziyue67/sub2api:0.2.10