Repository navigation
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