Repository navigation
Releases
Sub2API 0.2.19
AI API Gateway Platform - 将 AI 订阅配额分发和管理
新增按操作与资源范围授权的管理员 API Key;OpenAI / Composite 分组支持按实际出图张数计费,并新增 GPT-6.1 Terra 模型支持。
新增功能
- 管理员 API Key:可按操作和资源范围授权,支持过期时间和 IP 白名单;只保存不可逆摘要,撤销记录保留用于审计
- 按张计费:OpenAI 和 Composite 分组新增「按张计费」开关(默认关闭),一次生成多张图时按上游实际返回的张数计费,只对专用图片端点生效
- OpenAI:支持 GPT-6.1 Terra 模型
- Gemini:同账号重试次数可通过 gateway.max_same_account_retries_gemini 配置(默认 4,范围 0–10)
- Grok:管理端新增账号模型目录诊断,可查看来源、可信状态和与本地映射的差异;手动同步和后台观察统一使用同一套解析规则
优化改进
- Gemini:刷新默认模型列表,移除已停用的 2.0/2.5 系列和 3-pro-preview;连接测试默认模型改为 gemini-3.5-flash
- Gemini:分组内账号都配置了模型映射时,/v1beta/models 列表和详情按声明的模型返回,与 /v1/models 口径一致
- Gemini:绑定显式缓存的请求在池模式上游网关账号上,按配置在同一账号重试
- 国产 Coding Plan 账号遇到请求频率型 429 时改为秒级冷却,不再停调到 5h 窗口结束
- 模型列表刷新在并发冷启动时不再重复请求上游
- Grok:原生 Responses 和各转换路径都会记录上游原始响应模型,便于审计
Bug 修复
- 修复 Gemini 以 fileData 形式返回的图片未计费的问题
- 修复渠道按次计费的图片档位丢失 token 用量的问题
- 修复 DeepSeek V4 Pro 在 9 月 14 日之后定价失效的问题
- 修复 DeepSeek prompt_cache_hit_tokens 未计为缓存读取的问题
- 修复 OpenCode 转发 DeepSeek 时 developer 角色导致 422 的问题
- 修复 Antigravity 非流式畸形工具调用返回空成功响应的问题
- 修复超大 multipart 图片上传被静默截断的问题,现在直接拒绝
- 修复分页参数过大时偏移量溢出导致 500 的问题
- 修复管理员保护规则校验返回 500 的问题,现返回 400
- 修复保存渠道时覆盖 web_search_emulation 平台维度的问题
- 修复模型广场分组模型定价被图片兜底档位覆盖的问题
- 修复 Grok 模型目录快照被失败请求、乱序请求或旧表单覆盖的问题
升级指南
- 本版本包含数据库迁移 247(scoped_admin_api_keys 表)和 248(groups.image_count_billing 列),启动时会自动执行
- Gemini 默认模型列表已移除 2.x 系列;仍需使用这些模型的账号请自行在白名单或模型映射中配置
Docker 镜像(ziyue67/sub2api)
ziyue67/sub2api:latest
ziyue67/sub2api:0.2.19
ghcr.io/ziyue67/sub2api:latest
ghcr.io/ziyue67/sub2api:0.2.19
拉取示例:
docker pull ziyue67/sub2api:0.2.19
docker pull ghcr.io/ziyue67/sub2api:0.2.19文档
Sub2API 0.2.18
AI API Gateway Platform - 将 AI 订阅配额分发和管理
Important
本版本为 0.2.18:在完整保留 Fork 自有功能的前提下追平上游 Wei-Shaw/sub2api 的 main
(v0.2.18,账号配额维度化 + 调度快照常驻内存 + 兼容流收尾对齐),版本号沿用上游编号 0.2.18。
latest 与 0.2.18 均指向本版本。
0.2.18 大于此前的 0.2.17 / 0.2.16 / 0.2.15,应用内「检查更新」可正常提示升级。
Note
本次为 0.2.18(2026-10-23):在 0.2.17 的基础上,合并上游 main 的 45 个提交
(b0a02a330 → 5c185c5c5)。发布产物为 Docker 镜像(GHCR + Docker Hub 双 registry),
Release 零附件。
移植来源
- 来源一:上游
Wei-Shaw/sub2api分支main- 来源提交:
5c185c5c5(v0.2.18,2026-10-23);上次移植基准b0a02a330(v0.2.17) - 本次增量:45 个提交(含合并提交),114 个文件(+7482 / −566)
- 来源提交:
- 新增迁移:
246_enable_gemini_image_generation_groups.sql - 版本号:
backend/cmd/server/VERSION为0.2.18
上游增量(v0.2.18)
账号与调度
- Vertex 账号支持配额上限,与 API Key / 服务账号配额口径统一
- 账号配额累加按已设置的周期维度选择语句(日/周/月维度不再写多份)
- 调度快照解码结果常驻进程内存:只有在 ready、active 版本、全局修订号与平台修订号都与 Redis
一致且未超最长复用时长时才复用;last_used每次仍从 Redis 读取 - 解码结果靠
EXISTS校验元数据未删除,删除/撤销会使温缓存立即失效 - 单 antigravity 账号的分组判定改为按需求值
- 模型映射签名改为与遍历顺序无关、零分配
- 模型限流快照写入改为写时复制,避免候选对象被跨 bucket 污染
- 账号列表的平台与状态筛选可持久化
网关与协议
- Anthropic 账号 chat/responses 兼容流式:客户端断开后读完上游再计费(不再漏计)
- 兼容流上游未正常结束时按错误收尾,并与原生 SSE 收尾对齐
- Codex overload:合并身份判定与空流安全重试修复,排队事件与 metadata 事件之后仍保留重试
- 工具参数常量与注解归一化
- Cloudflare 1010 拦截不再惩罚账号(按边缘拦截处理)
Gemini / 生图
- 分组「允许当前分组生图」开关对 Gemini 系入口生效(含迁移 246)
- Gemini prompt 被拦截、只报缓存命中时
input_tokens不再为负 - Gemini 流式中途客户端断开时按已收集用量计费
- DeepSeek 图片输入避免重复载荷(按账号凭据选定单一 URL 字段)
- 异步生图转存的图片下载与同步回填策略对齐
计费
- Grok 4.7 Fast 按官方 Fast 价卡计费
构建与安全
- Docker 构建镜像对齐 Go 1.27.3,CI 版本校验同步
dompurify升级至 3.4.17,修复 GHSA-cg2g-xh64-v4q7(critical)与 GHSA-mrv2-3pqr-j5jr(high)
Fork 侧保留与合并处理
本次上游合并冲突面很小(3 个文件),无逻辑冲突:
| 文件 | 处理 |
|---|---|
backend/cmd/server/VERSION |
取上游 0.2.18(Fork 沿用上游编号) |
frontend/package.json |
并集:保留 Fork 的 nanoid 版本钉死,dompurify 取上游 3.4.17 |
frontend/pnpm-lock.yaml |
同步上述 overrides,并去掉重复的 follow-redirects 键 |
Fork 自有实现(ProxyLane / ExcelBPS / PrismBrowser / DeepSeek 原生压缩 / GroupRoutes /
cyber 严格身份 / webSearchCalls 保护)全部保留,本次均未与上游改动区域重叠。
验证
- 本地校验(Linux,Go 1.27.3 / Node 22):
- 后端:
go build ./...、go vet ./...、gofmt -l全部通过;go test -tags=unit ./...全绿 - 前端:
vue-tsc --noEmit0 错误、eslint .0 problem、25 个关键 vitest 用例全通过
- 后端:
- 工作树检查:无残留冲突标记
升级说明
- 升级方式:管理后台左上角「检查更新」一键升级;或
curl -sSL https://raw.githubusercontent.com/ziyue67/sub2api/v0.2.18/deploy/install.sh | sudo bash -s -- upgrade - 回滚方式:
install.sh rollback <version> - Docker:
docker pull ghcr.io/ziyue67/sub2api:0.2.18 - 镜像只提供
linux/amd64单架构,标签0.2.18/0.2.18-amd64/latest - 数据库迁移:本版本新增
246_enable_gemini_image_generation_groups.sql;升级前请备份数据库 - 安装脚本与在线更新服务的默认仓库为
ziyue67/sub2api
Fork 自有功能
- Codex 292 门票(x-codex-turn-state)打票与注入、上游剩余额度探测、账号代理车道
- 管理员请求采集、凭证守护、账号质量运维、Excel / BPS 协议
- Mihomo 托管 / 动态代理区域、Pelican 定时演练、图片创作 / 画布 / Studio Bridge
- 邮件广播、模型广场、Claude 重置额度查询、网站工单、账号运维告警、受控渠道实验
- 发布流水线:双 registry 推送;
latest只由 Release 写;二进制归档停发
Docker 镜像(ziyue67/sub2api)
ziyue67/sub2api:latest
ziyue67/sub2api:0.2.18
ghcr.io/ziyue67/sub2api:latest
ghcr.io/ziyue67/sub2api:0.2.18
拉取示例:
docker pull ziyue67/sub2api:0.2.18
docker pull ghcr.io/ziyue67/sub2api:0.2.18文档
Sub2API 0.2.17
AI API Gateway Platform - 将 AI 订阅配额分发和管理
Important
本版本为 0.2.17:在完整保留 Fork 自有功能的前提下追平上游 Wei-Shaw/sub2api 的 main
(v0.2.17,Antigravity Gemini 4 Argon + 支付链路加固),版本号沿用上游编号 0.2.17。
latest 与 0.2.17 均指向本版本。
0.2.17 大于此前的 0.2.16 / 0.2.15 / 0.2.14,应用内「检查更新」可正常提示升级。
Note
本次为 0.2.17(2026-10-16):在 0.2.16 的基础上,合并上游 main 的 48 个提交
(4d9ac3e48 → b0a02a330)。发布产物为 Docker 镜像(GHCR + Docker Hub 双 registry),
Release 零附件。
移植来源
- 来源一:上游
Wei-Shaw/sub2api分支main- 来源提交:
b0a02a330(v0.2.17,2026-10-16);上次移植基准4d9ac3e48 - 本次增量:48 个提交(含合并提交),153 个文件(+7035 / −808)
- 来源提交:
- 新增迁移:无
- 版本号:
backend/cmd/server/VERSION为0.2.17
上游增量(v0.2.17)
Antigravity / Gemini
- 支持 Gemini 4 Argon(含
low/medium/high档位)与准确的上游模型目录;补齐 Argon 计费 - 保留
tool_result图片、原生 GeminifunctionCall与thoughtSignature,以及 composite/v1beta路由 - 保留旧默认透传,Claude 5.5 tier ID 按基础价计费
- Gemini 兼容入口转发思考档位并流式返回思考摘要
- Vertex 共享容量不足的 429 不再冷却账号,改为同号退避重试;服务账号已不存在时账号置为 error 并换号
- 每个上游错误响应只检查一次错误策略
网关与协议
- 拒绝含 OpenAI 网关 OAuth 的 composite 歧义路由,防止凭据误入 Anthropic 管线
- 网关照 Anthropic 协议的 base URL 生效
- Responses 对象一律带
created_at(修复 grok-build 反序列化失败) - 结构化输入最小输出 token 下限可配置(
gateway.min_output_tokens,最小 16,默认 128) - 智谱 GLM Coding Plan 5h / weekly 用量窗口修正
- 模型退役判定改在公开别名投影之后评估;GPT-5.5 在 ChatGPT 上游按退役处理
OpenAI / Codex
/v1/messages对 OpenAI API Key 账号模拟web_search;OAuth 账号排除该模拟- Codex 导入按 workspace 隔离
支付
- EasyPay:下单查询与到账前确认通知修复
- 支付宝:退款状态查询、不支持订单类型的关闭、待处理退款原子收尾、退款查询错误按待处理处理
- Stripe:client secret 从本地订单快照读取
- 订单类型校验,待处理期间保留退款扣减
前端
- 恢复内联账号筛选(revert
#7853)
Fork 侧保留与合并处理(14 个冲突文件)
| 文件 | 处理 |
|---|---|
service/account.go |
上游把 IsModelSupported 拆成 isModelMappingSupported;保留 Fork 的 Excel/BPS 与 Astra 凭据边界前置守卫,再委托上游的 supportsOpenAIRequestModel |
service/openai_models_list.go |
上游把投影拆成两层;保留 Fork 的分组感知实现(projectAccountModelAliases),出口接上游的退役模型过滤 |
service/gateway_service.go |
保留 Fork 的 groupID 补全 + 采纳上游的退役模型过滤与空目录语义 |
service/openai_codex_models_service.go |
保留 Fork 的 BPS 能力限制(catalog),叠加上游的退役模型过滤 |
service/openai_ws_forwarder_support.go |
保留 Fork 的 IsModelSupportedInGroup(同时校验分组约束),不降级为仅账号判定 |
handler/admin/account_codex_import.go |
保留 Fork 的 client/workspace 身份作用域,与上游的 composite 身份键共存 |
service/openai_gateway_passthrough.go |
超时分支的 buildOpenAIResponseFailedSSE 补上上游新增的 createdAt 参数 |
apicompat/chatcompletions_to_responses.go |
采纳上游的 WithMinOutputTokens 变体,并保留 Fork 的 EffectiveReasoningEffort() 语义 |
config/config.go、deploy/config.example.yaml |
并集:Fork 的 upstream_routing / Prism / Codex Pin 与上游的 min_output_tokens |
frontend/.../AccountTableFilters.vue |
保留 Fork 的无障碍 aria-label(上游本次是 revert),layout 取上游的响应式改进 |
composables/useModelWhitelist.ts |
取上游超集(新增 Gemini 4 Argon 系列) |
其余(routes 测试、AccountTableFilters.spec.ts) |
保留 Fork 侧;上游 revert 删掉的组件测试按仓库现状保留 |
验证
- 本地校验(Linux,Go 1.27.2 / Node 22):
- 后端:
go build ./...、go vet ./...、gofmt -l全部通过;go test -tags=unit ./...全绿 - 前端:
vue-tsc --noEmit0 错误、eslint . --max-warnings 00 problem
- 后端:
- 工作树检查:无残留冲突标记
- 未包含:
backend/config/config.yaml(上游/ranxi 误提交的线上部署配置,含明文凭据,本仓无任何引用)
升级说明
- 升级方式:管理后台左上角「检查更新」一键升级;或
curl -sSL https://raw.githubusercontent.com/ziyue67/sub2api/v0.2.17/deploy/install.sh | sudo bash -s -- upgrade - 回滚方式:
install.sh rollback <version> - Docker:
docker pull ghcr.io/ziyue67/sub2api:0.2.17 - 镜像只提供
linux/amd64单架构,标签0.2.17/0.2.17-amd64/latest - 数据库迁移:本版本不含新增迁移;升级前请备份数据库
- 安装脚本与在线更新服务的默认仓库为
ziyue67/sub2api
Fork 自有功能
- Codex 292 门票(x-codex-turn-state)打票与注入、上游剩余额度探测、账号代理车道
- 管理员请求采集、凭证守护、账号质量运维、Excel / BPS 协议
- Mihomo 托管 / 动态代理区域、Pelican 定时演练、图片创作 / 画布 / Studio Bridge
- 邮件广播、模型广场、Claude 重置额度查询、网站工单、账号运维告警、受控渠道实验
- 发布流水线:双 registry 推送;
latest只由 Release 写;二进制归档停发
Docker 镜像(ziyue67/sub2api)
ziyue67/sub2api:latest
ziyue67/sub2api:0.2.17
ghcr.io/ziyue67/sub2api:latest
ghcr.io/ziyue67/sub2api:0.2.17
拉取示例:
docker pull ziyue67/sub2api:0.2.17
docker pull ghcr.io/ziyue67/sub2api:0.2.17文档
Sub2API 0.2.16
AI API Gateway Platform - 将 AI 订阅配额分发和管理
Important
本版本为 0.2.16:在完整保留 Fork 自有功能的前提下追平上游 Wei-Shaw/sub2api 的 main
(v0.2.16,Claude Haiku 5.5 与 Gemini 显式缓存),版本号沿用上游编号 0.2.16。
latest 与 0.2.16 均指向本版本。
0.2.16 大于此前的 0.2.15 / 0.2.14 / 0.2.13,应用内「检查更新」可正常提示升级。
Note
本次为 0.2.16(2026-10-13):在 0.2.15 的基础上,合并上游 main 的 47 个提交
(3a6fd1c9d → 4d9ac3e48)。发布产物为 Docker 镜像(GHCR + Docker Hub 双 registry),
Release 零附件。
移植来源
- 来源一:上游
Wei-Shaw/sub2api分支main- 来源提交:
4d9ac3e48(v0.2.16,2026-10-13);上次移植基准3a6fd1c9d - 本次增量:47 个提交(含合并提交),213 个文件(+13886 / −727)
- 来源提交:
- 新增迁移:无
- 版本号:
backend/cmd/server/VERSION为0.2.16
上游增量(v0.2.16)
Gemini 显式缓存(本次最大特性)
- 支持显式上下文缓存:覆盖 AI Studio、Vertex 与自建网关上游(
cachedContents) - 缓存存储价内置官方价,并按 Pro / Flash 系列兜底;3.6 Flash 兜底价改为官方优惠价
- 缓存修改串行化、失败回滚;确定金额费用按 Key / 订阅预留
- 缓存错误透传收窄到上游网关账号,延长沿用创建时的计费口径
- 恢复流程区分「账号已删除」与「暂不支持缓存」;上游必已过期后作废意图
- 引用缓存不存在的 403 不再停用账号并换号
Gemini / Vertex 账号能力
- Vertex 账号支持 API Key 认证;Vertex 服务账号支持同步上游模型列表
- 适配 AI Studio
AQ.格式 Key - 模型列表与模型详情接口支持 Agent Platform (Vertex) 账号
- 第三方上游 API Key 与 Vertex 不再套用 AI Studio 等级和模拟配额
- 界面显示名统一为 Agent Platform (Vertex)
网关与计费
- 接入 Claude Haiku 5.5,并接入 Responses 桥接(含采样边界与默认模型配置修正)
- Responses 到 chat 的兜底保留 Responses 语义;结构化输入回退增加不安全重试护栏
- Antigravity 图片模型限流隔离
- 账号计数、Bedrock 与重试耗尽入口把上游模型交给错误处理
- 显式模型级 401 规则在网关故障转移入口生效
- 识别国际版 coding 端点(配额)
- Ops:Gemini 原生路由的网关本地错误按错误类型归类
其他
- 分组名称与描述支持多语言(广场
Vary保留 Origin,译文语言代码统一大小写) - 账号同步上游模型失败时显示后端返回的错误原因
- 依赖安全更新:SheetJS、Vue 与 source-map 补丁
- 前端:模型白名单回归用例纳入 CI
Fork 侧保留与合并处理
本次合并共 24 个冲突文件,全部按「保留 Fork 行为 + 采纳上游新增」处理:
- ent 生成代码:
ent/migrate/schema.go、ent/runtime/runtime.go由go generate ./ent
按合并后的 schema 重新生成(groups.i18n字段加入后列索引整体位移,手改极易静默错位)。
生成结果与生成器幂等,未引入仓库既有形态之外的新文件。 wire_gen.go:provideCleanup实参按函数形参顺序取两侧并集(57 个实参),
补入上游新增的geminiCachedContentService。gateway_usage_billing.go:采纳上游的recordUsageMultipliers/recordUsageBillingModel
辅助函数,并把 Fork 的账号级分组倍率(account.UserGroupRateMultiplier())、
宿主工具基准倍率baseMultiplier与withModelBillingConfig策略快照恢复进去。gemini_messages_compat_service.go:Fork 的SelectAccountForAIStudioEndpoints/
ForwardAIStudioGET已被上游的SelectAccountForModelsEndpoints/ForwardListModels
取代,删除重复实现;并把 Fork 的projectGeminiLaneSelection(代理车道投影)接到上游选号函数上,
车道语义不丢。gemini_v1beta_handler.go保留 Fork 的 API Key 并发槽保护。openai_account_runtime_block_fastpath.go:保留 Fork 直调策略主体的写法(调用方已重置
401 连击),同时采纳上游的临时不可调度作用范围(scope)判定。openai_gateway_responses_chat_fallback.go:保留 Fork 的 DeepSeek 原生 compaction
改写分支,startTime跟随上游改为形参传入。scheduler_cache.go:候选投影键取并集(Fork 的model_mapping_mode+ 上游 Gemini 显式缓存键)。available_channel_handler.go:userAvailableGroup采纳上游的i18n字段,
toUserAvailableGroup同步带上,保证分组文案本地化不丢。model_plaza_handler.go:上游的语言本地化包装与 Fork 的用户禁用模型过滤合并为
toLocalizedModelPlazaGroups(..., deniedModels)。usage_handler.go:观察者分支保留 Fork 的管理端 DTO,并补上Localized(新增
AdminUsageLog.Localized),满足「用户侧分组 DTO 必须本地化」的上游守卫测试。- 其余(
admin_group.go、dto/types.go、dto/mappers.go、account_test_service.go、
repository/wire.go、前端 i18n 与各 spec)均为并集。
验证
- 本地校验(Linux,Go 1.27.2 / Node 22):
- 后端:
go build ./...、go vet ./...、gofmt -l全部通过;
go test -tags=unit ./...全绿 - 前端:
vue-tsc --noEmit0 错误、eslint . --max-warnings 00 problem、
关键清单 vitest 80 个文件 / 1390 个用例全部通过
- 后端:
- 工作树检查:无残留冲突标记,
git status干净 - 未包含:
backend/config/config.yaml(上游/ranxi 误提交的线上部署配置,含明文凭据,
本仓无任何引用,持续不引入)
升级说明
- 升级方式:管理后台左上角「检查更新」一键升级;或
curl -sSL https://raw.githubusercontent.com/ziyue67/sub2api/v0.2.16/deploy/install.sh | sudo bash -s -- upgrade - 回滚方式:
install.sh rollback <version> - Docker:
docker pull ghcr.io/ziyue67/sub2api:0.2.16 - 镜像只提供
linux/amd64单架构,标签0.2.16/0.2.16-amd64/latest - 数据库迁移:本版本不含新增迁移;升级前请备份数据库
- 安装脚本与在线更新服务的默认仓库为
ziyue67/sub2api
Fork 自有功能
- Codex 292 门票(x-codex-turn-state)打票与注入、上游剩余额度探测、账号代理车道
- 管理员请求采集、凭证守护、账号质量运维、Excel / BPS 协议
- Mihomo 托管 / 动态代理区域、Pelican 定时演练、图片创作 / 画布 / Studio Bridge
- 邮件广播、模型广场、Claude 重置额度查询、网站工单、账号运维告警、受控渠道实验
- 发布流水线:双 registry 推送;
latest只由 Release 写;二进制归档停发
Docker 镜像(ziyue67/sub2api)
ziyue67/sub2api:latest
ziyue67/sub2api:0.2.16
ghcr.io/ziyue67/sub2api:latest
ghcr.io/ziyue67/sub2api:0.2.16
拉取示例:
docker pull ziyue67/sub2api:0.2.16
docker pull ghcr.io/ziyue67/sub2api:0.2.16文档
Sub2API 0.2.15
AI API Gateway Platform - 将 AI 订阅配额分发和管理
Important
本版本为 0.2.15:在完整保留 Fork 自有功能的前提下同时追平两条主线 ——
上游 Wei-Shaw/sub2api 的 main(v0.2.15,provider profile 平台清单重构)与
ranxi2001/sub2api 的 production(批次十四),版本号沿用上游编号 0.2.15。
latest 与 0.2.15 均指向本版本。
0.2.15 大于此前的 0.2.14 / 0.2.13 / 0.2.12,应用内「检查更新」可正常提示升级。
Note
本次为 0.2.15(2026-10-09):在 0.2.14 的基础上,合并上游 main 的 20 个非合并提交
(5fc0e486c → 3a6fd1c9d)与 ranxi 批次十四(17c88b012 → 11be58950,v2.10.1)。
发布产物为 Docker 镜像(GHCR + Docker Hub 双 registry),Release 零附件。
移植来源
- 来源一:上游
Wei-Shaw/sub2api分支main- 来源提交:
3a6fd1c9d(v0.2.15,2026-10-09);上次移植基准5fc0e486c - 本次增量:20 个非合并提交,140 个文件(+13575 / −1054)
- 来源提交:
- 来源二:
ranxi2001/sub2api分支production- 批次十四:
11be58950(ranxi releasev2.10.1,2026-10-09);上次移植基准17c88b012 - 本次增量:5 个非合并提交,19 个文件(+1019 / −4)
- 批次十四:
- 新增迁移:无
- 版本号:
backend/cmd/server/VERSION为0.2.15
上游增量(v0.2.15,平台清单重构)
这是上游一次较大的架构收敛:把分散在各处的平台判断收敛为「平台清单 + provider profile」。
- 平台清单(
internal/domain/platforms.go):平台白名单由数据库约束改为应用层校验;
后端平台列表、多协议供应商默认端点表、转发与探测判断统一改由 profile 驱动 - 协议分流收敛:三个入站入口(
/v1/responses、/v1/chat/completions、/v1/messages)的
上游协议判定合并为resolveUpstreamProtocol单一入口 - 新增平台:接入 Cline 与 Command Code
- 安全:Go 升级到 1.27.2、
golang.org/x/net升到 0.60.0(修复安全扫描) - OpenAI:Responses Lite 与 OAuth 历史回放时声明
web_search;Claude 计费与钱包冷却修复;
模型目录缓存隔离;/v1/responses转 Anthropic 时统一以去空白的请求模型兜底映射 - 前端:模型同步入口按平台能力展示;平台列表与多协议账号表单改由平台清单驱动
ranxi 批次十四增量(v2.10.1)
- Excel BPS OAuth 登录复用密码 TOTP worker:BPS OAuth 账号的登录流程复用既有密码 TOTP worker
- OpenAI 搜索历史兼容:OAuth 历史回放
web_search_call时声明web_search - 修复搜索历史兼容代码的类型断言 lint 问题
- 文档:说明旧 Codex 凭据转换边界与 Excel 重新授权方式
本次合并的冲突处理(16 个文件)
backend/go.mod:采纳上游依赖(含 x/net 0.60.0 安全修复),go mod tidy收敛.github/workflows/release.yml:保留 Fork 发布流水线,Go 版本校验跟上 1.27.2openai_gateway_chat_completions.go/openai_gateway_messages.go:采纳上游统一分流
(Fork 原有的 OpenCode Go 硬编码分流已被resolveUpstreamProtocolFor+ profile 覆盖)openai_gateway_forward.go:保留 Fork 的 DeepSeek native-compaction 快捷判定,其余采纳上游composite_platform.go、account_test_service.go、credentialsBuilder.ts、
EditAccountModal.vue、SettingsView.vue、Makefile与各 spec:并集
⚠️ 修复:平台重构对 Fork 协议覆盖的两处回归
上游把协议判定收敛到 resolveUpstreamProtocol 时,未包含 Fork(#46) 的
「OpenAI API Key 可显式配置 api_protocol + api_base_urls(分协议端点)」能力,
导致 12 处真实路由回归(Chat Completions 入站被错误改道到 Responses)。
本次修复:
upstream_protocol_routing.go的 adaptive 分支补回 Fork 语义:
显式chat_completions→ CC;CC 入站 → 同协议直通;/v1/messages入站 →
配了原生 Anthropic 端点则直通,否则转 CC;其余按 Responses 端点是否存在决定
(与shouldForwardOpenAIResponsesViaChatCompletions同口径)nativeAnthropicMessagesURL:Fork 的 OpenAI 协议账号同样走版本感知拼接,
避免 base 自带/v1时拼出/v1/messages/v1/messages
修复后以「合并前 main」为基准逐用例比对 63600 个路由矩阵用例:OpenAI 平台
0 处行为差异;其余仅剩 768 处错误文案差异(无上游请求、无 URL/协议变化)。
上游新增的路由基准守卫改为 Fork 感知:只放行 OpenCode Go(按模型分流)与
OpenAI(Fork #46)两类,且强制 transport 集合、状态码、panic、客户端错误码一致,
数量仍精确断言,一旦扩张即失败。
Fork 自有功能(完整保留)
- Codex 292 门票(x-codex-turn-state)打票与注入、上游剩余额度探测、账号代理车道
- 管理员请求采集、凭证守护、账号质量运维、Excel / BPS 协议
- Mihomo 托管 / 动态代理区域、Pelican 定时演练、图片创作 / 画布 / Studio Bridge
- 邮件广播、模型广场、Claude 重置额度查询、网站工单、账号运维告警、受控渠道实验
- 发布流水线:双 registry 推送;
latest只由 Release 写;二进制归档停发
升级说明
- 升级方式:管理后台左上角「检查更新」一键升级;或
curl -sSL https://raw.githubusercontent.com/ziyue67/sub2api/v0.2.15/deploy/install.sh | sudo bash -s -- upgrade - 回滚方式:
install.sh rollback <version> - Docker:
docker pull ghcr.io/ziyue67/sub2api:0.2.15 - 镜像只提供
linux/amd64单架构,标签0.2.15/0.2.15-amd64/latest - 数据库迁移:本版本不含新增迁移;升级前请备份数据库
- 安装脚本与在线更新服务的默认仓库为
ziyue67/sub2api
验证
- 本地校验(Linux,Go 1.27.2 / Node 22 / pnpm 9.15.9):
- 后端:
go build ./...、gofmt -l、go test -tags=unit ./...全部通过 - 前端:
pnpm install --frozen-lockfile通过、vue-tsc --noEmit通过、eslint .0 error / 0 warning、
关键清单 vitest 76 个文件 / 1322 个用例全部通过 - 路由一致性:以合并前 main 为基准,63600 用例逐条比对,OpenAI 平台零行为差异
- 后端:
- 工作树检查:无残留冲突标记,
git status干净
📥 Installation
Docker:
# Docker Hub
docker pull ziyue67/sub2api:0.2.15
# GitHub Container Registry
docker pull ghcr.io/ziyue67/sub2api:0.2.15本版本起不再发布 tar.gz / zip 二进制包与 checksums.txt,请使用上方镜像部署。
📚 Documentation
Sub2API 0.2.14
AI API Gateway Platform - 将 AI 订阅配额分发和管理
Important
本版本为 0.2.14:在完整保留 Fork 自有功能的前提下同时追平两条主线 ——
上游 Wei-Shaw/sub2api 的 main(v0.2.14)与 ranxi2001/sub2api 的 production(批次十二 Wei-Shaw#314 – Wei-Shaw#318,v2.9.11)。
latest 与 0.2.14 均指向本版本。
版本号与 tag 沿用上游编号 0.2.14(GoReleaser 强制语义化版本;应用内 parseVersion 只取前三段)。
0.2.14 大于此前的 0.2.13 / 0.2.12 / 0.2.11,应用内「检查更新」可正常提示升级。
上一版本 0.2.13 见 docs/releases/v0.2.13.md。
Note
本次为 0.2.14 第二次更新(2026-10-08):在上一次 0.2.14(上游 v0.2.14 + ranxi 批次十二)的基础上,
继续追平上游 main 的 66 个提交 与 ranxi 的 批次十三(PR Wei-Shaw#321 – Wei-Shaw#343,v2.9.11 → v2.10.0)。
上游自 v0.2.14 起未再发新 tag,故版本号与 tag 仍沿用 0.2.14(与 0.2.13 的处置方式一致)。
发布产物为 Docker 镜像(GHCR + Docker Hub 双 registry),Release 零附件(不附带二进制包与重登运行包)。
移植来源
- 来源一:上游
Wei-Shaw/sub2api分支main- 来源提交:
3f1a2ea0a(v0.2.14,2026-10-07 02:03 UTC);上次移植基准b8dece900(v0.2.13) - 本次增量(
b8dece900..3f1a2ea0a):5 个提交(5 个文件,+775 / −162),含 3 个上游 PR:- Wei-Shaw#7850(
6e315616e):全新安装不再预置可猜测的管理员口令,部署脚本改为生成随机初始密码 - #7881(
d1aac6b98):关闭易支付(EasyPay)伪造回调的签名复用漏洞 - Wei-Shaw#7851(
bbba01dae):远端 Codex 目录启用 API Key 模型发现
- Wei-Shaw#7850(
- 依赖修复(
0f9d460dc):升级 Vue 与 source-map-js 以通过前端安全审计
- 来源提交:
- 来源二:
ranxi2001/sub2api分支production- 批次十二(本次新增):
1c28a9f5a(PR Wei-Shaw#314 – Wei-Shaw#318,ranxi releasev2.9.11,2026-10-07);上次移植基准23eed543b(批次十一) - 批次十二增量(
23eed543b..1c28a9f5a):15 个提交(10 个非合并),60 个文件(+1476 / −256)
- 批次十二(本次新增):
- 本次两条主线合入后,本 Fork 相对上一版净增:60 个文件(+1476 / −256)
- 新增迁移:无(批次十二不含数据库迁移)
- 版本号:
backend/cmd/server/VERSION为0.2.14
本次新增(2026-10-08):上游增量(3f1a2ea0a..5fc0e486c,66 个提交)
- 规模:66 个提交(含 40+ 个上游 PR 合并),155 个文件(+5719 / −204)
- 上游自 v0.2.14 后未再发新 tag,
backend/cmd/server/VERSION保持0.2.14 - 主要方向:
- 用量与延迟指标:新增
formatUsageOutputRate(输出吞吐,含首字等待,与运维统计口径一致);延迟健康度阈值与着色 - 监控请求采样(Wei-Shaw#7916):渠道监控采样取数与展示修正
- 复合路由模型列表(Wei-Shaw#7793):复合分组路由下的模型列表修正
- 长上下文标记(Wei-Shaw#7897)、账号筛选紧凑模式(Wei-Shaw#7853)、用量输出 TPS(Wei-Shaw#7911)
- 思考签名(Wei-Shaw#7703):thinking signature 相关处理
- 大量前端健壮性修复(组件卸载竞态、分页竞态、对话框 Esc 栈、备份轮询、定时任务竞态等)
- 邮箱绑定草稿保留(Wei-Shaw#7833)、分数字节速率(Wei-Shaw#7721)、缩放价格指数(Wei-Shaw#7716)等
- 用量与延迟指标:新增
本次新增(2026-10-08):ranxi 批次十三(1c28a9f5a..17c88b012,PR Wei-Shaw#321 – Wei-Shaw#343)
- 规模:
v2.9.11→v2.10.0,24 个提交(22 个非合并),296 + 43 个文件(+39358 / −686,含截图与文档) - 新增迁移:
265_new_api_site_authorizations.sql、266_account_ops_notifications.sql、
267_account_ops_threshold_episodes.sql、268_controlled_experiments.sql、268_support_tickets.sql
(两个268_前缀为 ranxi 并行 PR 各自编号,迁移以文件名为键,互不覆盖)
新功能
- 网站工单(support tickets):用户端提问 + 管理员回复,含列表、汇总、状态流转与删除;由功能开关
support_ticket_enabled控制(默认关闭) - 账号运维告警(account ops):上游钱包监控 + 机器人 webhook 阈值告警,含阈值事件台账
- 受控渠道实验(controlled experiments):渠道实验分组、评分与提交台账;受控模式下跳过 HTTP/SSE 回退与部分重试
- New API 站点授权:新 API 上游站点授权与配置对话框
- BPS OAuth 账号入口:新增 BPS OAuth 账号类型并适配 Excel 会话凭据
修复与改进
- BPS / Prism 协议总开关:
excel_bps_enabled可全局关闭(关闭时账号徽标不再显示) - 智商测试:支持模型与思考强度下拉选择,并支持手动输入;保留配置模型
- 调度:空闲容量与「质量就绪」API Key 的探索均衡
- OpenAI WS 加速:完善保护逻辑并补齐新增账号开关;取消定向打票次数与并行通道上限,续接节点遍历
- 用量:单输出 Token 的记录不再显示
0.0 t/s,改为不可用占位 - 渠道状态 V3:页面显示布局优化
- 依赖安全:xlsx 升级到 SheetJS CDN
0.20.3(含 CVE-2023-30533 / CVE-2024-22363 修复),
相应移除.github/audit-exceptions.yml中两条已失效的 xlsx 例外
本次合并的冲突处理(2026-10-08)
backend/cmd/server/VERSION:保留本 Fork 编号0.2.14backend/cmd/server/wire_gen.go:清除冲突标记后用wire重新生成,Fork 与 ranxi 的 provider 四组并存backend/internal/service/admin_account.go(5 处):UpstreamUsageProbeExtraKey(Fork 自有额度探测)与
UpstreamBillingProviderExtraKey(ranxi 新 API 上游)是两个不同的键,创建 / 编辑 / 批量更新路径都必须一并剥离,保留两者backend/internal/service/openai_gateway_forward.go(2 处):保留 Fork 的wsResult.WebSearchCalls短路返回与
invalidEncryptedContentError扩展匹配,同时吸收 ranxi 的isControlledExperiment门backend/internal/web/embed_on.go:服务路由前缀并集并去重(保留/videos系列,采纳上游/models/…)backend/internal/handler/openai_gateway_handler.go:上游逐 turn 计费分组重取与 Fork 的代理车道跨 turn 刷新共存backend/internal/service/account_test_service.go:上游的日志初始化 / 平台绑定 / 后台标记与 Fork 的质量探测标记、
BPS 观测校验、首字延迟统计共存frontend/src/components/admin/account/CreateAccountModal.vue:平台切换重置并集(Fork 的协议 / 自适应基址 + ranxi 的 BPS OAuth)- 前端其它:
featureFlags两个 flag 并存、AccountsView两个组件 import 并存、SettingsView两个设置字段并存、
UsageTable保留 Fork 的 TPS 单元格(严重度着色 +t/s单位 + 原data-testid) .github/audit-exceptions.yml:采纳 ranxi 对已失效 xlsx 例外的移除Makefile、i18n(dashboard en/zh):并集
上游增量(b8dece900..3f1a2ea0a,v0.2.14)
安全
- 易支付回调签名复用漏洞(#7881 /
d1aac6b98):订单创建签名(用户在submit.php弹窗 URL 中可见)对return_url等字段签名时不做转义,
客户端可在return_url末尾夹带&trade_status=TRADE_SUCCESS,使订单创建签名与「支付成功」通知签名逐字节相同,
从而把已签名 URL 当作伪造回调重放,无需商户密钥即可绕过支付校验。修复分两层:CanonicalizeReturnURL丢弃客户端提交的全部 query 参数(buildPaymentReturnURL会自行附加签名字段);VerifyNotification对参数做白名单校验,任何不在真实异步通知集合内的参数一律拒绝。
白名单外键(return_url、notify_url、cid、device、clientip等)在回调中一律 fail-closed;
被误拒的真实已付款订单仍可由上游QueryOrder对账路径恢复。
回归测试覆盖伪造签名复用、订单 URL 重放、未知参数、成功通知缺少trade_no等场景。
- 全新安装不再预置可猜测的管理员口令(Wei-Shaw#7850 /
6e315616e):全新部署曾使用可猜测的默认管理员凭据。
现改为由部署脚本生成随机初始密码并在安装结束时一次性展示,deploy/下各 compose 与脚本同步更新。
修复与依赖
- 远端 Codex 目录启用 API Key 模型发现(Wei-Shaw#7851 /
bbba01dae):UseKeyModal在「远端模型目录」模式下生成的 Codex 配置补上
api_key_model_discovery = true,使 API Key 模式能够发现远端目录中的模型。 - 前端依赖安全审计(
0f9d460dc):Vue 升级到^3.5.43,source-map-js覆盖提升为>=1.2.2;audit-exceptions.yml中 xlsx 例外说明改为
「仅写入、无解析路径」并顺延有效期。
ranxi 批次十二增量(23eed543b..1c28a9f5a,PR Wei-Shaw#314 – Wei-Shaw#318,v2.9.11)
调度与额度
- OAuth 额度优先与末位 API Key 自动后备(Wei-Shaw#315 /
576179d18):OAuth 账号按额度优先调度,额度用尽时自动回退到排位最末的 API Key,
并附带冷启动探索限定到 OAuth 账号(32e00e1ad)与分池边界回归测试(d343e99b1)。 - 新 OAuth 账号自动复制质量运维规则(Wei-Shaw#316 /
afb0a5bf9):新 OAuth 账号自动继承质量运维规则;首次质量规则(InitialQualityPlan)
标记为创建期内部策略,不进入插件可读快照(497fec47a)。
修复
- 凭证运营记录清理(Wei-Shaw#318 /
fb77e6c8f):定期清理已删除账户遗留的凭证运营记录,避免孤儿数据累积。 - Prism 浏览器内存准入可配置(Wei-Shaw#314 /
87628dd72):浏览器内存准入预算改为可配置,便于按部署规模调整。 - 移动端账号浮层(Wei-Shaw#317 /
84b844a93):账号提示浮层收敛在移动端视口内,不再溢出。
本次合并的冲突处理
backend/cmd/server/VERSION:保留本 Fork 版本号,本次为0.2.14(不采用 ranxi 的2.9.11)backend/internal/service/openai_plugin_account_directory_test.go:并集 —— ranxi 新增的InitialQualityPlan与 Fork 自有的
ProxyLanes/SelectedProxyLane私有字段同时列入快照剥离清单backend/internal/payment/provider/easypay.go、payment_resume_service.go:仅注释措辞差异(修复逻辑一致,Fork 此前已独立实现同一修复),
采纳上游更完整的安全说明backend/internal/payment/provider/easypay_notify_security_test.go:两侧各自编写了同名用例,采用上游版本(覆盖更全)并保留 Fork 独有的
「成功通知缺少trade_no必须拒绝」断言为独立用例frontend/package.json:并集 —— Vue 采纳上游^3.5.43,source-map-js采纳上游>=1.2.2范围写法,保留 Fork 自有的nanoid固定frontend/pnpm-lock.yaml:按上述并集手工解决,并去重source-map-js覆盖项;pnpm install --frozen-lockfile(pnpm 9)校验通过.github/audit-exceptions.yml:采纳上游更准确的措辞与更长的有效期
Fork 自有功能(完整保留)
- Codex 292 门票(x-codex-turn-state)打票与注入、上游剩余额度探测、账号代理车道(proxy lanes)
- 管理员请求采集、凭证守护(令牌巡检 / 自动重登 / 错误态自愈,默认关闭)、账号质量运维
- Excel / BPS 协议、Mihomo 托管 / 动态代理区域、Pelican 定时演练
- 图片创作 / 画布 / Studio Bridge、邮件广播、模型广场、Claude 重置额度查询
- 发布流水线:双 registry(GHCR + Docker Hub)推送;
latest只由 Release 写;二进制归档停发(仅保留 Docker 镜像)
升级说明
- 升级方式:管理后台左上角「检查更新」可一键升级;也可在服务器执行
curl -sSL https://raw.githubusercontent.com/ziyue67/sub2api/v0.2.14/deploy/install.sh | sudo bash -s -- upgrade。 - 回滚方式:
install.sh rollback <version>。 - 也可以使用 Docker 镜像部署:
docker pull ghcr.io/ziyue67/sub2api:0.2.14,具体见 部署文档。 - 镜像只提供
linux/amd64单架构(不产出 arm64;install.sh在 arm64 上会明确报错),标签为0.2.14/0.2.14-amd64/latest(同一镜像)。 - 数据库迁移:本版本不含新增迁移;此前版本的迁移于启动时自动执行。升级前请备份数据库。
⚠️ 全新安装首次使用的管理员口令:上游 Wei-Shaw#7850 起不再预置默认口令,改为安装时生成随机初始密码。
沿用旧 compose/脚本自定义部署的用户,请确认自己已显式设置ADMIN_PASSWORD,否则首次启动需从安装输出中获取随机口令。- 请求采集与凭证守护默认关闭,需在「系统设置 > 功能开关」中显式启用。
- 安装脚本与在线更新服务的默认仓库为
ziyue67/sub2api(backend/internal/service/update_service.go、deploy/install.sh)。
验证
- 本地校验(Linux,Go 1.27.1 / Node 22 / pnpm 9.15.9):
- 后端:
go build ./...、gofmt -l、go test -tags=unit ./...全部通过(无 FAIL) - 前端:
pnpm install --frozen-lockfile通过(锁文件未被改写);vue-tsc --noEmit通过;eslint .通过;
关键清单 vitest 62 个文件 / 1021 个用例全部通过 - 定向回归:易支付回调安全用例、
CanonicalizeReturnURL用例全部通过
- 后端:
- 工作树检查:无残留冲突标记(
<<<<<<</>>>>>>>),git status干净 - 发布配置校验:构建目标
goarch仅amd64;发布说明按docs/releases/v0.2.14.md(与 tagv0.2.14同名)由release.yml回写
📥 Installation
Docker:
# Docker Hub
docker pull ziyue67/sub2api:0.2.14
# GitHub Container Registry
docker pull ghcr.io/ziyue67/sub2api:0.2.14本版本起不再发布 tar.gz / zip 二进制包与 checksums.txt,请使用上方镜像部署。
📚 Documentation
Sub2API 0.2.13
AI API Gateway Platform - 将 AI 订阅配额分发和管理
Important
本版本为 0.2.13:在完整保留 Fork 自有功能的前提下同时追平两条主线 ——
上游 Wei-Shaw/sub2api 的 main(v0.2.13)与 ranxi2001/sub2api 的 production(v2.9.6,批次十 Wei-Shaw#253 – Wei-Shaw#268)。
latest 与 0.2.13 均指向本版本。
版本号与 tag 均沿用上游编号 0.2.13(GoReleaser 强制语义化版本;应用内 parseVersion 只取前三段)。
0.2.13 大于此前的 0.2.12 / 0.2.11 / 0.2.91 / 0.2.10,应用内「检查更新」可正常提示升级。
上一个版本 0.2.12 已先行发布(docs/releases/v0.2.12.md),本版本在其基础上并入 ranxi 批次十与上游 v0.2.13。
Note
本次为 0.2.13(2026-10-02):新增 Prism OAuth 浏览器桥接、API Key 并发限制与排队生命周期、
鹈鹕测智结果 API,以及上游的 TypeSafe 计费探测修复与 API Key 删除后的用量结算修复。
发布产物为 Docker 镜像(GHCR + Docker Hub 双 registry),Release 零附件(不附带二进制包与重登运行包)。
移植来源
- 来源一:上游
Wei-Shaw/sub2api分支main- 来源提交:
b8dece900(v0.2.13,2026-10-02);上次移植基准458b92abd(v0.2.12,本 Fork PR #95) - 本次增量(
458b92abd..b8dece900):10 个提交(7 个非合并),7 个文件(+249 / −4)
- 来源提交:
- 来源二:
ranxi2001/sub2api分支production(批次十)- 来源提交:
bf9405e4a(PR Wei-Shaw#253 – Wei-Shaw#268,ranxi releasev2.9.6之后,2026-10-02);上次移植基准c2e3e098f(批次九,本 Fork PR #93) - 本次增量(
c2e3e098f..bf9405e4a):48 个提交(35 个非合并,含 13 个合并提交),257 个文件(+20350 / −837)
- 来源提交:
- 本次两条主线合入后,本 Fork 相对
main净增:215 个文件(+19091 / −522) - 新增迁移:
237_add_api_key_concurrency_limit.sql(api_keys.concurrency_limit,启动时自动执行) - 版本号:
backend/cmd/server/VERSION为0.2.13(与上游 v0.2.13 同名)
上游 v0.2.13 增量(本次新增)
- TypeSafe 账号计费探测修复:默认开启上游计费自动探测会导致 TypeSafe API Key 账号创建返回 400,现按平台放行(
fix(billing): allow upstream billing probe for TypeSafe API-key accounts) - API Key 删除后的用量结算:计费完成前 Key 被删除时仍正常结算用量,避免漏账(
fix(billing): settle usage when the API key is deleted before billing completes) - 仓库安全策略:新增
.github/SECURITY.md(私有漏洞报告,含dev@sub2api.org兜底邮箱)
ranxi 批次十增量(c2e3e098f..bf9405e4a,PR Wei-Shaw#253 – Wei-Shaw#268,本次新增)
- Prism OAuth 浏览器桥接(Wei-Shaw#260 / Wei-Shaw#264 / Wei-Shaw#265 / Wei-Shaw#267):新增
prism-adapter/(Python 浏览器适配器 + systemd 单元 + 冒烟脚本)
与 Go 侧backend/internal/pkg/prismbridge/、openai_prism_browser.go;
支持账号测试路由、并发 HTTP 连接、服务端有界会话缓存;WS 会话不落在 Prism 账号上并给出适配器错误说明;
未启动浏览器时释放账号;OAuth turn 生命周期加护栏。附docs/PRISM_BRIDGE_RESEARCH_CN.md、docs/prism-oauth-p1-smoke.md与截图 - API Key 并发限制与有界准入生命周期(Wei-Shaw#263):Key 级
concurrency_limit与等待队列(ZSET 等待 + 阶段结束标记 + Live 精确交接栅栏),
统计口径按批分页且串行读取超过 100 个 ID 的页面;新增迁移237_add_api_key_concurrency_limit.sql;
前端密钥页新增并发列、/keys/concurrency接口与策略只读展示 - 鹈鹕测智结果 API(Wei-Shaw#268):API Key 可读取测智结果(含缓存类型断言修复、结果缓存)
- Codex 目录与套餐展示(Wei-Shaw#253 等):生成的模型目录与 API Key 客户端保持兼容,补套餐展示与目录截图
- Grok CLI 版本提升至 1.0.44(Wei-Shaw#258):对齐官方发布节奏(本 Fork 沿用上游抓包修正的 1.0.46 身份头与
grok-pager标识) - 鹈鹕面板明文 HTTP 预览(Wei-Shaw#262 / Wei-Shaw#259):面板经明文 HTTP 提供时仍渲染预览;WS 准入用例适配
- 其它:
fix(ws): isolate downstream write state across response turns(下游写入状态按 turn 隔离)、
perf: pipeline API key queue statistics and verify upgrade paths、多项 lint / 测试适配
Fork 自有功能(完整保留)
- Codex 292 门票(x-codex-turn-state)打票与注入:独立代理后台打票、住宅 IP 请求覆盖该头,含后台开关、门票状态展示与缺票拦截
- 上游剩余额度探测:账号页可查询上游余额与用量窗口
- 账号代理车道(proxy lanes):车道级调度、车道粘性绑定与准入并发控制;WS turn 准入沿用车道语义
- 管理员请求采集:按用户 / 上游账户 / 入口分组创建采集任务,默认关闭
- 凭证守护:令牌巡检、自动重登与错误态自愈(默认关闭),重登运行包来源可配置
- 账号质量运维、Excel / BPS 协议、Mihomo 托管 / 动态代理区域、Pelican 定时演练
- 图片创作 / 画布 / Studio Bridge、邮件广播、模型广场(model-square) 等
- 发布流水线:双 registry(GHCR + Docker Hub)推送;Release 零附件
升级说明
- 升级方式:管理后台左上角「检查更新」可一键升级;也可在服务器执行
curl -sSL https://raw.githubusercontent.com/ziyue67/sub2api/v0.2.13/deploy/install.sh | sudo bash -s -- upgrade。 - 回滚方式:
install.sh rollback <version>。 - 也可以使用 Docker 镜像部署:
docker pull ghcr.io/ziyue67/sub2api:0.2.13,具体见 部署文档。 - 镜像只提供
linux/amd64单架构,标签为0.2.13/0.2.13-amd64/latest(同一镜像)。 - Release 零附件:不附带
sub2api_*.tar.gz/*.zip/checksums.txt;重登运行包仅在手动勾选publish_reauth_runtime时上传。 - 数据库迁移:新增
237_add_api_key_concurrency_limit.sql(api_keys.concurrency_limit bigint not null default 0,含非负约束),启动时自动执行。 - Prism 桥接为可选部署:
prism-adapter/需自行部署(README + systemd 单元),未部署时不启用该路由。 - 请求采集与凭证守护默认关闭,需在「系统设置 > 功能开关」中显式启用。
- 安装脚本与在线更新服务的默认仓库为
ziyue67/sub2api(backend/internal/service/update_service.go、deploy/install.sh)。
验证
- 合并冲突处理(本次两条主线共 26 个文件):
- 上游 v0.2.13(
faec40680):无冲突(git merge-tree干净)。 - ranxi 批次十(
9105f98a0):人工处理 26 个文件,原则为「Fork 特性优先、两侧语义取并集」:backend/ent/mutation.go:APIKeyMutation 字段取并集(保留group_routes,并入concurrency_limit)backend/internal/service/api_key_service.go、internal/handler/api_key_handler.go、internal/repository/api_key_repo.go、
internal/service/api_key_auth_cache.go、api_key_auth_cache_impl.go:请求结构 / 快照 / 行映射取并集
(Fork 的多分组路由GroupRoutes+ ranxi 的ConcurrencyLimit),错误变量保留 Fork 的分组路由错误internal/service/concurrency_service.go、gateway_service.go:AcquireResult/AccountSelectionResult取并集
(Fork 的MaxConcurrency*/AggregateMaxConcurrency*/Lane+ ranxi 的RequestID/AccountRequestID)internal/service/openai_gateway_scheduling.go:newSelectionResult签名取并集(新增requestID形参并写入结果),
保留 Fork 的finalizeOpenAISelectionResult车道语义;admitOpenAIWSTurnForPricing的账号槽位改用
TryAcquireAccountOrLaneSlot+ 聚合上限参数(只传账号上限会让车道被账号桶限流)internal/handler/openai_gateway_handler.go:BeforeTurn 保留 Fork 的每 turn 定价刷新 + 车道上限重算,
同时叠加 ranxi 的 Key 排队准入与turn == 1提前返回;并发释放统一走wrapReleaseOnDoneinternal/server/middleware/api_key_auth.go:skipBilling取并集(Fork 的/v1/usage+ 模型列表读 + 异步图片轮询,
ranxi 的 Pelican 展示位读与过期校验)internal/pkg/xai/*、internal/repository/http_upstream_test.go、internal/service/grok_upstream_headers_test.go:
取 HEAD(上游依据官方交互式 CLI 抓包修正的 1.0.46 身份头 +grok-pager标识),ranxi 的 1.0.44 /grok-shell为更旧口径- 前端
api/keys.ts、types/index.ts、views/user/KeysView.vue、components/keys/__tests__/UseKeyModal.spec.ts、
views/user/__tests__/KeysView.spec.ts:取并集(并发列 / 并发快照接口 + Fork 的多分组路由、分页断言与排序用例) README.md:保留 ranxi 重写的正文并补回 Fork 的技术栈表
- 合并后修正 2 处(编译 / 运行期才暴露):
backend/ent/runtime/runtime.go:ranxi 生成的字段索引不含 Fork 的group_routes,apikeyFields索引整体错位,
init()在 nil 上断言 panic(所有依赖 ent 运行期的包启动即失败);按当前 schema 的Fields()顺序重排 9 个索引,
并校验全部 41 个 schema 的索引映射无错位backend/internal/handler/gateway_systemone.go:上游新增的 System One 入口调用本 Fork 的用户槽位签名(需apiKeyID/keyLimit)backend/internal/handler/openai_gateway_handler_test.go:被拒 turn 的到达判定改为按response.create计数
(本 Fork 中继会转发session.update并收到上游 ack,用通道帧数会误判)
- 上游 v0.2.13(
- 校验口径:本版本的测试以 CI(GitHub Actions)为准:
shell、test(make test-unit+make test-integration)、
frontend(vue-tsc+ 关键 vitest)、golangci-lint、release-helpers、backend-security、frontend-security。
本地已完成go build ./...、go vet -tags=unit ./...与冲突文件的gofmt检查。 - 工作树检查:无残留冲突标记(
<<<<<<</>>>>>>>)。 - 发布配置校验:Docker 镜像标签为
0.2.13/0.2.13-amd64/latest(GHCR 与 Docker Hub 同一镜像);
发布说明按docs/releases/v0.2.13.md(与 tag 同名)由release.yml/sync-fork-release.yml/backfill-release.yml回写。
Docker 镜像(ziyue67/sub2api)
ziyue67/sub2api:latest
ziyue67/sub2api:0.2.13
ghcr.io/ziyue67/sub2api:latest
ghcr.io/ziyue67/sub2api:0.2.13
拉取示例:
docker pull ziyue67/sub2api:0.2.13
docker pull ghcr.io/ziyue67/sub2api:0.2.13文档
Sub2API 0.2.12
AI API Gateway Platform - 将 AI 订阅配额分发和管理
Important
本版本为 0.2.12:在完整保留 Fork 自有功能的前提下,追平上游 Wei-Shaw/sub2api 的 main(v0.2.12)。
latest 与 0.2.12 均指向本版本。
版本号与 tag 均沿用上游编号 0.2.12(GoReleaser 强制语义化版本,四段号会被拒绝;应用内更新检查的 parseVersion 只取前三段)。
0.2.12 大于此前的 0.2.11 / 0.2.91 / 0.2.10,应用内「检查更新」可正常提示升级。
Note
本次为 0.2.12(2026-10-02):并入上游 v0.2.12(含 20 个非合并提交、13 个上游 PR 合并),
引入 TypeSafe Jev System One 平台、充值优惠阶梯、账号优先级快捷调整等改动;发布产物为 Docker 镜像(GHCR + Docker Hub 双 registry)。
本 Fork 的 ranxi production 追平(批次十)安排在下一个版本 0.2.13,与上游 v0.2.13 一并合入。
移植来源
- 来源仓库:上游
Wei-Shaw/sub2api分支main - 来源提交:
458b92abd(v0.2.12,2026-10-02);上次移植基准为42bc7f6cf(v0.2.11,2026-09-30,PR #93) - 本次增量(上游 v0.2.12,
42bc7f6cf..458b92abd):29 个提交(20 个非合并),151 个文件(+5779 / −311) - 与本 Fork 合并后净增:149 个文件(+5774 / −305)
- 新增迁移:
241_add_typesafe_platform.sql(平台约束加入typesafe)、241_add_payment_order_bonus_amount.sql(payment_orders新增bonus_amount),
启动时自动执行 - 合并基准:上游
Wei-Shaw/sub2api;本次未引入 ranxi 代码 - 版本号:
backend/cmd/server/VERSION为0.2.12
上游 v0.2.12 增量(本次新增)
- TypeSafe Jev System One 原生平台(Wei-Shaw#7425 等):新增
typesafe平台与/v1/systemone端点,
含账号创建与测试、分组 / 渠道 / 配额 / Composite 路由、计费、内容审核与提示词审计覆盖;
新增backend/internal/pkg/typesafe/、gateway_systemone.go、account_test_service_typesafe.go,迁移241_add_typesafe_platform.sql- 校验口径与上游 schema 对齐(
bb97ab364),并补齐平台迁移、审计覆盖、端点隔离与错误策略(2d8a38681),
堵住校验解析差异与审计盲区、收紧模型列表口径(9eb394e3e) - 错误透传的平台列表守卫把
typesafe纳入(fa49647c6)
- 校验口径与上游 schema 对齐(
- 充值优惠阶梯(Wei-Shaw#7802):后台可配置「满 X 送 Y%」赠金或「满 X 打折」折扣模式及 Markdown 活动文案;
充值页快捷金额显示促销价签,订单与支付结果展示赠送额度
(payment_recharge_bonus.go、RechargeBonusTierEditor.vue、utils/rechargeBonus.ts、迁移241_add_payment_order_bonus_amount.sql) - 账号优先级快捷调整(Wei-Shaw#7630):账号列表悬停显示 -/+ 按钮、可点击直接输入,连续点击自动合并为一次保存
(AccountPriorityCell.vue);禁用状态的步进器在悬停前保持隐藏(58d605083) - API 密钥列表按分组名排序(Wei-Shaw#7803):
api_key_repo支持按分组名称排序 - Grok 请求身份头对齐官方交互式 CLI 1.0.46(
ad05eda15/fdce5b8d0),修复 CLI 版本过低返回 426 的问题
上游 v0.2.12 安全与修复
- Antigravity 上游错误体泄露:投递给客户端前清洗上游错误体,避免泄露账号池项目 ID 与服务账号邮箱(Wei-Shaw#7674)
- 邮箱验证码并发猜测:验证码尝试次数改为原子扣减,绕过 5 次上限的问题修复;重置密码 token 改为哈希存储并原子单次消费(Wei-Shaw#7676)
- 匿名订单查询限流:
/payment/public/orders/verify按 IP 限流 20 次/分钟,防止订单号枚举(Wei-Shaw#7673) - 自定义错误码警告文案:修正为准确描述其实际作用(Wei-Shaw#7773)
- 依赖安全:Axios 升级至 1.20.0(
53158587a/00940743d)
Fork 自有功能(完整保留)
- Codex 292 门票(x-codex-turn-state)打票与注入:独立代理后台打票、住宅 IP 请求覆盖该头,含后台开关、门票状态展示与缺票拦截
- 上游剩余额度探测:账号页可查询上游余额与用量窗口
- 账号代理车道(proxy lanes):车道级调度、车道粘性绑定与准入并发控制
- 管理员请求采集:按用户 / 上游账户 / 入口分组创建采集任务,默认关闭
- 凭证守护:令牌巡检、自动重登与错误态自愈(默认关闭),重登运行包来源可配置
- 账号质量运维、Excel / BPS 协议、Mihomo 托管 / 动态代理区域、Pelican 定时演练
- 图片创作 / 画布 / Studio Bridge、邮件广播、模型广场(model-square) 等
- 发布流水线:双 registry(GHCR + Docker Hub)推送;Release 零附件(
build-reauth-runtime仅在手动勾选时执行)
升级说明
- 升级方式:管理后台左上角「检查更新」可一键升级;也可在服务器执行
curl -sSL https://raw.githubusercontent.com/ziyue67/sub2api/v0.2.12/deploy/install.sh | sudo bash -s -- upgrade。 - 回滚方式:
install.sh rollback <version>。 - 也可以使用 Docker 镜像部署:
docker pull ghcr.io/ziyue67/sub2api:0.2.12,具体见 部署文档。 - 镜像只提供
linux/amd64单架构(不产出 arm64;install.sh在 arm64 上会明确报错),标签为0.2.12/0.2.12-amd64/latest(同一镜像)。 - Release 零附件:不附带
sub2api_*.tar.gz/*.zip/checksums.txt,统一以 Docker 镜像交付。 - 数据库迁移:新增
241_add_typesafe_platform.sql(accounts.platform约束加入typesafe)与
241_add_payment_order_bonus_amount.sql(payment_orders.bonus_amount),启动时自动执行。升级前请备份数据库。 - 重置密码链接失效提醒:重置 token 改为哈希存储,升级前已发出但尚未使用的链接将失效,用户需重新申请。
- 请求采集与凭证守护默认关闭,需在「系统设置 > 功能开关」中显式启用。
- 安装脚本与在线更新服务的默认仓库为
ziyue67/sub2api(backend/internal/service/update_service.go、deploy/install.sh)。
验证
- 合并冲突处理(上游 v0.2.12,4 个文件):
backend/internal/service/account_service.go:Create并集 —— 保留 Fork 的ValidateModelMappingMode,同时采纳上游的 TypeSafe 凭证类型校验backend/internal/service/admin_account.go:buildAccountForCreate并集 —— 保留 Fork 的MergeOpenAICodexTicketExtra,同时采纳上游的 TypeSafe 校验frontend/src/views/admin/AccountsView.vue:保留 Fork 的cell-upstream_usage(上游剩余额度列),同时采纳上游的AccountPriorityCell优先级快捷调整(原 Fork 的只读 priority 单元格被替换);两处 import 取并集frontend/src/views/admin/SettingsView.vue:<script setup>导入取并集(保留 Fork 的EmailBroadcastDialog,采纳上游的RechargeBonusTierEditor与@/utils/rechargeBonus)backend/internal/service/account_test_service_typesafe_test.go:上游测试按两返回值签名调用parseTestSSEOutput,
而 Fork 的实现额外返回upstreamModel,合并后编译失败;补第三个返回值丢弃(3f5b3fb36)
- 本地校验(Linux,Go 1.27.1 / Node 22):
- 后端:
go build ./...、go vet -tags=unit ./...、go test -tags=unit -count=1 ./...(65 个包全绿,无 FAIL)、
golangci-lint run --timeout=30m→0 issues - 前端:
vue-tsc --noEmit、eslint .(全量lint:check)通过;受影响的账号 / 充值 / 密钥用例通过
- 后端:
- 工作树检查:无残留冲突标记(
<<<<<<</>>>>>>>)。 - 发布配置校验:Docker 镜像标签为
0.2.12/0.2.12-amd64/latest(GHCR 与 Docker Hub 同一镜像);
发布说明按docs/releases/v0.2.12.md(与 tag 同名)由release.yml/sync-fork-release.yml/backfill-release.yml回写;
tag 与 Release 由发布流程创建,不发布任何附件。
Docker 镜像(ziyue67/sub2api)
ziyue67/sub2api:latest
ziyue67/sub2api:0.2.12
ghcr.io/ziyue67/sub2api:latest
ghcr.io/ziyue67/sub2api:0.2.12
拉取示例:
docker pull ziyue67/sub2api:0.2.12
docker pull ghcr.io/ziyue67/sub2api:0.2.12文档
Sub2API 0.2.11
AI API Gateway Platform - 将 AI 订阅配额分发和管理
Important
本版本为 0.2.11:在完整保留 Fork 自有功能的前提下,同时追平两条主线——
上游 Wei-Shaw/sub2api 的 main(v0.2.11)与 ranxi2001/sub2api 的 production(v2.9.6,含 v2.9.0 – v2.9.5 各批次)。
latest 与 0.2.11 均指向本版本。
版本号沿用三段式 0.2.11(GoReleaser 强制语义化版本,四段号会被拒绝;应用内更新检查的 parseVersion 只取前三段)。
本版本由 0.2.91 改名而来(tag v0.2.91 已于 2026-09-28 发布,仅含批次一 – 三),现编号 0.2.11 并并入后续批次四 – 八与本次的两条主线追平;
旧 tag v0.2.91 与其说明文件 docs/releases/v0.2.91.md 均保留为历史发布,不再递增。
注意 0.2.11 在数值上小于 0.2.91,应用内「检查更新」的版本比较可能把本版本判为更旧;如需正常提示升级,请改用 0.2.101 一类的更高编号。
Note
本次为 0.2.11(2026-10-01 追平,2026-09-29 首次发布):在 0.2.91(批次一 – 三)基础上并入批次四 – 八,
并在本次继续追平上游 Wei-Shaw/sub2api main(v0.2.11)与 ranxi production 的 faf58e440..c2e3e098f(含 Wei-Shaw#218 – Wei-Shaw#251,覆盖 ranxi v2.9.4 / v2.9.5 / v2.9.6),
发布产物为 Docker 镜像(GHCR + Docker Hub 双 registry)。
本次追平 ranxi production 分八批:
批次一为 v2.9.0(tag 030c1fd77)及其后合并的 Wei-Shaw#181 – Wei-Shaw#184(已随 v0.2.91 发布);
批次二为 62ac3a5dd..9ee2041d3 的 Wei-Shaw#185 – Wei-Shaw#190;
批次三为 9ee2041d3..425977815 的 Wei-Shaw#191;
批次四为 425977815..468061e08 的 Wei-Shaw#192 – Wei-Shaw#198(ranxi release v2.9.1 之后);
批次五为 7b9fb3332 的 Wei-Shaw#199 – Wei-Shaw#200;
批次六为 7b9fb3332..74d3538a8 的 Wei-Shaw#201 – #206(2026-09-29);
批次七为 74d3538a8..cdab8bbb4 的 Wei-Shaw#207 – Wei-Shaw#209(ranxi release v2.9.2);
批次八为 cdab8bbb4..faf58e440 的 Wei-Shaw#210 – Wei-Shaw#217(ranxi release v2.9.3);批次九为 faf58e440..c2e3e098f 的 Wei-Shaw#218 – Wei-Shaw#251(2026-10-01,ranxi release v2.9.4 – v2.9.6)。
批次二至九均在 0.2.91 发布之后进入 main,本次已一并纳入 0.2.11 / latest 镜像;版本号按本次要求改为 0.2.11,不随 ranxi 的 v2.9.6 而变更。
其中 PR Wei-Shaw#179 是 ranxi 追平上游 Wei-Shaw/sub2api v0.2.9 的同步 PR:该批改动本 Fork 已通过自身 PR #86(f3f9cdd73)先行移植,
且本 Fork 的 WebSocket 转发为自有实现(openai_ws_forwarder_v2.go),故本次未重复引入上游代码,仅保留 Fork 实现与两侧修复的并集。
上游 v0.2.10 已由本 Fork 的 PR #91 移植(docs/releases/v0.2.10.md);上游 v0.2.11 与 ranxi 批次九在本次一并合入。
移植来源
- 来源仓库(一):上游
Wei-Shaw/sub2api分支main - 来源提交(一):
42bc7f6cf(v0.2.11,2026-09-30);上次移植基准为a60a29549(v0.2.10,2026-09-29,PR #91) - 本次增量(上游 v0.2.11,
a60a29549..42bc7f6cf):23 个提交(17 个非合并),90 个文件(+5146 / −296) - 来源仓库(二):
ranxi2001/sub2api分支production - 来源提交:
c2e3e098f(批次九,PR Wei-Shaw#218 – Wei-Shaw#251,ranxi releasev2.9.6,2026-10-01);
上次为批次八faf58e440(PR Wei-Shaw#210 – Wei-Shaw#217,ranxi releasev2.9.3,2026-09-29) - 上次移植基准:
62ac3a5dd(批次一,releasev2.9.0及其后合并的 Wei-Shaw#181 – Wei-Shaw#184);
再上一次为f24ff9110(releasev2.8.20及其后合并的 Wei-Shaw#160 – Wei-Shaw#164 修复) - 本次增量(批次九,
faf58e440..c2e3e098f):86 个提交(51 个非合并,含v2.9.4/v2.9.5/v2.9.6三次版本提交),319 个文件(+13564 / −1853) - 本次增量(批次八,
cdab8bbb4..faf58e440):20 个提交(13 个非合并),73 个文件(+2361 / −82) - 本次增量(批次七,
74d3538a8..cdab8bbb4):10 个提交(6 个非合并),61 个文件(+3497 / −205);
与本 Fork 合并后净增 60 个文件(+3499 / −205) - 本次增量(批次六,
7b9fb3332..74d3538a8):11 个提交(6 个非合并),88 个文件(+2612 / −165);
与本 Fork 合并后净增 89 个文件(+2624 / −166) - 本次增量(批次五,
7b9fb3332):2 个合并提交(1 个非合并),25 个文件(+398 / −27) - 本次增量(批次四,
425977815..468061e08):19 个提交(12 个非合并),128 个文件(+3879 / −698);
与本 Fork 合并后净增 126 个文件(+3877 / −698) - 本次增量(批次三,
9ee2041d3..425977815):2 个提交(1 个非合并),1 个文件(+1 / −1) - 批次二增量(
62ac3a5dd..9ee2041d3):21 个提交(13 个非合并),158 个文件(+12889 / −297);
与本 Fork 合并后净增 159 个文件(+12893 / −299) - 批次一增量:69 个提交(56 个非合并提交),318 个文件(+17356 / −2102)
v2.9.0部分(f24ff9110..030c1fd77,PR Wei-Shaw#166 – Wei-Shaw#179):59 个提交(50 个非合并),288 个文件(+15591 / −2019)v2.9.0之后(030c1fd77..62ac3a5dd,PR Wei-Shaw#181 – Wei-Shaw#184):10 个提交(6 个非合并)
- 补丁等价性核对:
git cherry f3f9cdd73 62ac3a5dd显示 25 个提交为本 Fork 尚无的改动,31 个提交(上游 v0.2.9 主体)已有等价补丁 - 新增迁移:
253_pelican_group_tests.sql(批次一);254_quality_bps_coexist.sql、254_channel_monitor_v2_candy.sql、
254_openai_oauth_reauth.sql、255_account_token_guard_v2.sql、256_openai_oauth_reauth_proxy_override.sql、
257_openai_oauth_reauth_proxy_source.sql(批次二,三个254_前缀为 ranxi 并行 PR 各自编号,迁移按文件名排序并以文件名为键,互不覆盖);
258_quality_observation_scope.sql(批次四,scheduled_test_plans的账号级唯一索引按bps/observation/quarantine三种动作分域);
259_account_auto_config_events.sql(批次六,自动配置历史事件表);260_quality_rule_templates.sql(批次七,质量运维分组规则模板与已建账户关联表);
261_pelican_group_test_costs.sql、262_openai_oauth_reauth_engine.sql(批次九,鹈鹕测智 USD 成本与重登引擎选择) - 合并基准:上游
Wei-Shaw/sub2api与 ranxiproduction两条主线;本次同时追平上游 v0.2.11 与 ranxi 批次九 - 版本号:
backend/cmd/server/VERSION为0.2.11(与上游 v0.2.11 同名;由原0.2.91改名而来,本次不再随 ranxi 的v2.9.6变更) - 本 Fork 分支净增量:批次一两个合并提交合计 215 个文件(+14263 / −1736),分别为 204 个文件(+13507 / −1666)与 40 个文件(+801 / −115);
批次二合并提交 159 个文件(+12893 / −299);本次两条主线合并(9fc24fd46+59a6c673b)共 396 个文件(+18687 / −2146)
v2.9.0 增量(本次新增)
- Mihomo 节点测试连接与质量检查(Wei-Shaw#166):IP 管理页可直接测试节点连通性并执行质量检查
- 账号「上游声明」列查询上游余额(Wei-Shaw#169):账号列表的上游声明列支持查询上游余额
- 鹈鹕(Pelican)测智改为按分组测试(Wei-Shaw#176):改由调度器挑选账号执行,测智配置迁移到智能运维;新增迁移
253_pelican_group_tests.sql - 鹈鹕测智展示改为分组横排(Wei-Shaw#171):每个分组一行、最新结果在左,底部滑块拖动查看
- OpenAI OAuth RPM 控制(Wei-Shaw#173):为 OpenAI OAuth 账号增加每分钟请求数限制配置
- 质量运维 × BPS 联动(Wei-Shaw#174):账号降智时自动开启 BPS,恢复满血后按次数自动关闭;同时保留 BPS 恢复状态、拦截互相冲突的规则
- 2FA 登录写入凭证守护(Wei-Shaw#178):2FA 自动登录成功后把凭据写入凭证守护,后续巡检可自愈
- 账号运维 / 凭证守护页面整宽布局(Wei-Shaw#177):两个运维页面改为整宽,附前后对比截图文档
- 上游追平 PR(Wei-Shaw#179):ranxi 追平上游 v0.2.9,本 Fork 已先行移植,未新增上游代码
v2.9.0 之后增量(本次新增)
- BPS 403 自动关停后按小时探测恢复(Wei-Shaw#181):403 自动关停的账号进入小时级探测,恢复成功后自动放行;附带默认值测试与 UI 状态文档
- 403 恢复探测间隔可配置(Wei-Shaw#183):探测间隔以分钟为单位在界面配置
- 质量规则批量编辑修正(Wei-Shaw#182):批量编辑时按规则各自账号过滤,并跳过不支持的探测
- 自动重置卡阈值支持忽略单个窗口(Wei-Shaw#184):单个用量窗口可豁免自动重置卡阈值
批次二增量(62ac3a5dd..9ee2041d3,PR Wei-Shaw#185 – Wei-Shaw#190)
- 凭证守护 v2 与持久化重登(Wei-Shaw#185):按账号的凭证守护 v2、可持久化的自动重登;worker token 按账号隔离,外部登录失败信息脱敏
- BPS 与降智质量规则共存(Wei-Shaw#186):BPS 与隔离(quarantine)质量规则允许并存,修正互相冲突的规则合并逻辑
- 优先调度与 Teams 成本回收(Wei-Shaw#187):新增账号优先级调度;Teams 成本回收
- 鹈鹕测智历史分页(Wei-Shaw#188):测智历史支持分页(含总数断言),展示卡片紧凑化
- 渠道监控 v2 分组糖果检查(Wei-Shaw#189):v2 监控卡片新增分组糖果检查;刷新节奏与分组探测间隔对齐(含分组探测健康状态文档)
- BPS 图片限制策略(Wei-Shaw#190):新增图片限制策略,超限自动压缩并与历史记录对账
批次八增量(cdab8bbb4..faf58e440,PR Wei-Shaw#210 – Wei-Shaw#217,ranxi release v2.9.3)
- free 账号禁止开启 BPS(Wei-Shaw#210):
credentials.plan_type为free的账号禁止开启 Excel BPS(忽略大小写与首尾空格),
创建 / 编辑 / 批量编辑均拒绝保存,质量规则与 403 自动恢复也会跳过;旧数据保留开关但运行时不走 BPS,附docs/excel-bps.md说明 - 凭证守护重登后刷新套餐(Wei-Shaw#212):重登成功后重新读取套餐并处理 Free 降级,避免降级账号继续按付费能力调度
- BPS 可见流内容后停止未知工具重生成(Wei-Shaw#213):流中已出现可见内容时不再因 unknown-tool 触发重新生成;同时支持初始路由变更重试
- 上游探测写入成本倍率(Wei-Shaw#214):上游探测得到的倍率回写已保存账号的成本倍率,新增手动覆盖与紧凑同步开关
(costMultiplierAutoSync/costMultiplierHint),附docs/screenshots/account-cost-auto-sync/ - 余额错误归因区分(Wei-Shaw#215):运维错误日志区分用户侧余额不足与上游侧余额错误,新增
ops/utils/balanceError.ts - BPS 生图能力(Wei-Shaw#216 / Wei-Shaw#217):Excel BPS 支持生图模型(
gpt-image-2文生图走images/generations),单图改图走 BPS,
并按实测收敛模型与参数
批次七增量(74d3538a8..cdab8bbb4,PR Wei-Shaw#207 – Wei-Shaw#209,ranxi release v2.9.2)
- BPS 默认值与初始配置两种激活模式(Wei-Shaw#207):新增「仅初始配置」与「默认设置」两种激活模式(
excelBPSMode、
openai_excel_bps_config_mode、useExcelBPSDefaults/ExcelBPSModeSwitches.vue/BPSDefaultsCard.vue),
单账号与批量编辑共用,附docs/screenshots/bps-defaults/ - 质量运维分组规则(Wei-Shaw#208):新建规则支持按账户状态 / 分组筛选,保存为规则模板后由后台定时补建到新匹配的账户;
凭证守护同时列出由凭证运营托管的账号(含 2FA 导入);新增迁移260_quality_rule_templates.sql,附docs/account-auto-config.md更新 - OAuth WS → SSE 加速(opt-in)(Wei-Shaw#209):普通 OAuth 账号可显式开启「HTTP SSE 走原生 WS 连接池」,
握手在response.create之前失败时可安全回退 HTTP,首 token 前事件立即刷出;附docs/openai-ws-sse-acceleration.md与前后对比截图
批次六增量(7b9fb3332..74d3538a8,PR Wei-Shaw#201 – #206)
- 账号并发成功计数修正(Wei-Shaw#202):成功计数统计已完成流转,不再受错误日志探测上限(
error-log probe limit)截断 - 质量规则批量删除(Wei-Shaw#203):质量运维支持勾选多条规则后一次性删除
- BPS 图片容量上限可配置(Wei-Shaw#204):图片容量上限提高并可在设置页配置,超限判定与准入中间件同步放宽
- 自动配置历史记录(Wei-Shaw#205):新增最近自动配置(OAuth 自动配置)历史查询,新增迁移
259_account_auto_config_events.sql - 管理端启用凭证加密(#206):管理后台可直接开启凭证加密,新增凭据加密器(
credential_encryptor)与设置组件
CredentialEncryptionSetup.vue,附docs/credential-encryption.md
批次五增量(7b9fb3332,PR Wei-Shaw#199 – Wei-Shaw#200)
- 渠道监控 V2 悬浮采样详情(Wei-Shaw#200):卡片历史条由
span改为可聚焦 / 可点击的button,新增悬浮、聚焦、点击弹出的时段采样详情
(可用率、缓存率、首 Token P50),并补齐aria-label/aria-describedby;时间轴条携带原始 bucket 指标
(monitorCards.ts的MonitorMatrixBucket[],按bucket_start排序,红色截断计数不参与加权、bucket 中位数不与时间窗 P50 混算),
i18n 新增cards.bucketDetails/cards.sampleDetails;糖果历史补充「未开启检测」态文案(candy.disabled/candy.disabledHint)。 - 智能运维布局与导航对齐(Wei-Shaw#199):侧边栏顺序调整(Token 守护 V2 提到 Pelican 测试之前);
PelicanTestsView.vue与TokenGuardV2View.vue
的页面容器由max-width: 1660px; margin: auto改为w-full min-w-0全宽布局;附docs/screenshots/smart-ops-layout/与
docs/screenshots/channel-monitor-v2-hover/前后对比截图。
批次四增量(425977815..468061e08,PR Wei-Shaw#192 – Wei-Shaw#198,ranxi release v2.9.1)
- 凭证守护错误态自愈恢复(Wei-Shaw#192):恢复错误态账号的凭证守护巡检自愈;2FA 导入默认纳入凭证操作,避免新导入账号漏管
- 自动 BPS 探测计划可配置(Wei-Shaw#193):自动 BPS 探测时间表与默认选项可在界面配置,附设置预览截图
- 智能运维自动配置(Wei-Shaw#194):新增 OAuth 自动配置与并发升级(
oauth_auto_config、account_auto_config仓储与调度 outbox),附docs/account-auto-config.md - 账号探测就地刷新(Wei-Shaw#195):上游探测结果就地更新,不再整表重载账号列表
- 并发进度配色与升级开关(Wei-Shaw#196):并发进度样式调整,并遵循升级开关(附前后对比截图)
- 仅观测 BPS 糖果测试(Wei-Shaw#197):质量规则支持 observation-only BPS(只观测不动作),新增迁移
258_quality_observation_scope.sql,附docs/quality-bps-observation.md - 账号独立成本倍率(Wei-Shaw#198):账号级成本倍率(后端
account_cost.go、前端utils/accountCost.ts),编辑 / 批量编辑与优先级页面展示,附docs/screenshots/account-cost-multiplier/
批次三增量(9ee2041d3..425977815)
- OpenAI 2FA 返回时关闭弹窗(Wei-Shaw#191):
CreateAccountModal.vue的「返回」按钮在 OpenAI 2FA 步骤改为关闭弹窗,修正从 2FA 登录返回后弹窗残留的问题
批次九增量(faf58e440..c2e3e098f,PR Wei-Shaw#218 – Wei-Shaw#251,ranxi release v2.9.4 – v2.9.6)
- 渠道监控 v2 展示 100 个智能检查位(Wei-Shaw#218):v2 监控卡片补足 100 个检查槽位
- 初始 OAuth 配置写入模型映射(Wei-Shaw#219 / Wei-Shaw#226):
oauth_auto_config首次配置即写入账号级模型映射并覆盖身份默认映射,避免映射缺失导致误调度 - BPS 图片文件引用规范化(Wei-Shaw#220 / Wei-Shaw#227):内联消息历史中的本地兼容 ID 不再外泄,附件文件引用统一规范化
- 自动配置模型计费倍率(Wei-Shaw#221 / Wei-Shaw#223):自动配置支持模型级计费倍率,告警文案与冲突处理同步
- BPS 上游错误分类(Wei-Shaw#221):带内(in-band)失败与取消终态归类,避免把用户取消计入上游故障
- BPS 调度本地错误与代理获取失败(Wei-Shaw#222 / Wei-Shaw#231):本地 BPS 代理获取失败不再计入上游错误,并保留安全的附件失败 / 代理获取诊断信息
- 移除账号类别优先级捷径(Wei-Shaw#225):优先调度统一按显式优先级与容量判定
- 可持久化的重登运行时(Wei-Shaw#224 / Wei-Shaw#235 / Wei-Shaw#238):托管 worker 生命周期与 API 进程绑定,进程退出时回收后代进程;
支持选择重登引擎与并行 worker,附tools/reauth-runtime/便携运行包与backend/internal/reauthruntime/;新增迁移262_openai_oauth_reauth_engine.sql - 质量检查位与 BPS 分类修正(Wei-Shaw#228 / Wei-Shaw#229 / Wei-Shaw#232):BPS 目录示例由可调用目录生成,图片上限文案标明为本地限制
- 优先级调度公平性与容量优先(Wei-Shaw#230 / Wei-Shaw#236):按空闲容量与分组争用分摊优先流量,保留 OAuth 别名准入;`pelican_group_...
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