Skip to content

Sub2API 0.2.10

Choose a tag to compare

@github-actions github-actions released this 29 Sep 10:36
6348fc6

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(release v0.2.10)
  • 上次移植基准:9a62841fd(release v0.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 已并入 ranxi production 的 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 的 WithOptions harness,上游的变参构造器作为其薄封装;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-critical 45 个文件 / 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

文档