Skip to content

Sub2API 0.2.11

Choose a tag to compare

@github-actions github-actions released this 01 Oct 03:52
· 2483 commits to main since this release
18208cc

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 release v2.9.6,2026-10-01);
    上次为批次八 faf58e440(PR Wei-Shaw#210 – Wei-Shaw#217,ranxi release v2.9.3,2026-09-29)
  • 上次移植基准:62ac3a5dd(批次一,release v2.9.0 及其后合并的 Wei-Shaw#181 – Wei-Shaw#184);
    再上一次为 f24ff9110(release v2.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 与 ranxi production 两条主线;本次同时追平上游 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_test_costs 记录 USD 成本,新增迁移 261_pelican_group_test_costs.sql
  • Kubernetes 多副本网关与优雅摘流(Wei-Shaw#233 / Wei-Shaw#241 / Wei-Shaw#251):网关支持多副本、Pod 摘流与 Serverless 区域到 Pod 的路由;扩展 deploy/kubernetes/、新增 backend/internal/serverless/ 与 deploy/upgrade-k3s.py
  • Claude 取消与 IP 401 归因(Wei-Shaw#234 / Wei-Shaw#235):下游流断开时取消上游请求;OpenAI OAuth 隔离 IP 未授权响应去抖,快速路径返回前重置 401 连击计数
  • 凭证运维运行时开关(Wei-Shaw#240 / Wei-Shaw#248):重登运行时开关从账号表单移入智能运维页,账号成本倍率保留在候选缓存中
  • 管理后台功能搜索(Wei-Shaw#242 / Wei-Shaw#250):权限感知的功能搜索(Ctrl/⌘+K),支持跳转到系统设置分区与深链接
  • k3s 版本化升级助手(Wei-Shaw#247):新增 deploy/upgrade-k3s.py / upgrade-k3s.sh 与 deploy/tests/test_upgrade_k3s.py,CI 增加 release-helpers 校验
  • BPS 原生图片默认开启(Wei-Shaw#242 / Wei-Shaw#249):生图默认走 BPS 原生处理,附默认开关
  • Excel 绿标 BPS 徽标置于账号状态之上(Wei-Shaw#243):账号状态指示器把 BPS 徽标排在状态之前
  • WS 加速与自动 BPS 模板开关(Wei-Shaw#245 前后):账号编辑弹窗新增 WS 加速与自动 BPS 模板复选框
  • SPA 回退绕过裸 API 别名(Wei-Shaw#245 / Wei-Shaw#246):裸别名不再被前端 SPA 回退吞掉
  • 网关副本跳过 Codex 后台收割(Wei-Shaw#247 前):多副本部署下仅由主副本执行 Codex 收割
  • Axios 升级至 1.20.0(Wei-Shaw#244):修复安全公告涉及的依赖版本

随本次追平一并进入的其它修复

  • Antigravity:工具 schema 保留字符串 const 约束(fix(antigravity))
  • WebSocket:从原始客户端帧检测窗口滚动(fix(openai))
  • OpenRouter / OpenCode Zen:为 OpenCode Zen 上游注入 DeepSeek reasoning 占位(fix(openai))
  • 调度与模型发现:OpenAI 直通账号补充模型发现、受限直通账号保留允许的默认模型(fix(gateway) / fix(models))
  • 网关错误归因:客户端断开统一标记为 499,不再被记成 502 / 200 的上游错误(fix(gateway))
  • 同步脚本:保留 schema 规范化与分组模型限制(fix(sync))
  • 测试与发布:修复 import mock、等待账号筛选重载(test)、release: prepare v2.9.0

上游 v0.2.11 增量(a60a29549..42bc7f6cf,本次新增)

  • 余额在途预留(in-flight reservation)(上游 Wei-Shaw#7681 等):请求开始时按预估金额预留余额,计费落账前保持占用,
    避免并发透支;未定价别名经 billing fallback models 估算,过期预留不再续期
    (backend/internal/service/billing_inflight_reservation.go、backend/internal/repository/billing_inflight_cache.go、handler/gateway_inflight_reservation.go)
  • API Key 创建数量与频率限制(Wei-Shaw#7752):按账号维度限制 API Key 创建数量与频率,默认每小时 60 次
    (新增 ErrAPIKeyCreateLimited / ErrAPIKeyCountExceeded)
  • Claude 原生限额重置兑换(Wei-Shaw#7726):由服务端选择授权额度并兑换原生限额重置,新增管理端确认按钮与重置次数展示,
    加固兑换结果与幂等处理(backend/internal/service/claude_reset_credits.go、claude_reset_redeem.go)
  • Codex 远程模型目录与订阅套餐识别(Wei-Shaw#7730 / Wei-Shaw#7736):客户端配置支持上游远程模型目录,识别当前订阅套餐
  • GPT-6.1 Sol 与 Astra Ultrafast(Wei-Shaw#7730 等):新增模型与 Ultrafast 服务档位能力声明与计费倍率
  • Claude Code 限制分组的 OpenAI 兼容入口降级:受限分组不再直接 403,改走降级分组

Fork 自有功能(完整保留)

  • Codex 292 门票(x-codex-turn-state)打票与注入:独立代理后台打票、住宅 IP 请求覆盖该头,含后台开关、门票状态展示与缺票拦截
  • 上游剩余额度探测:账号页可查询上游余额与用量窗口
  • 账号代理车道(proxy lanes):车道级调度、车道粘性绑定与准入并发控制
  • 管理员请求采集:按用户 / 上游账户 / 入口分组创建采集任务,默认关闭
  • 凭证守护:令牌巡检、自动重登与错误态自愈(默认关闭)
  • 账号质量运维、Excel / BPS 协议、Mihomo 托管 / 动态代理区域、Pelican 定时演练
  • 图片创作 / 画布 / Studio Bridge、邮件广播、模型广场(model-square) 等
  • 发布流水线:双 registry(GHCR + Docker Hub)推送;latest 只由 Release 写,0.2 / 0 浮动标签已取消

升级说明

  • 升级方式:管理后台左上角「检查更新」可一键升级;也可在服务器执行
    curl -sSL https://raw.githubusercontent.com/ziyue67/sub2api/v0.2.11/deploy/install.sh | sudo bash -s -- upgrade。
  • 回滚方式:install.sh rollback <version>。
  • 也可以使用 Docker 镜像部署:docker pull ghcr.io/ziyue67/sub2api:0.2.11,具体见 部署文档。
  • 镜像只提供 linux/amd64 单架构(不产出 arm64;install.sh 在 arm64 上会明确报错),标签为 0.2.11 / 0.2.11-amd64 / latest(同一镜像)。
  • 二进制归档停发(2026-09-27 起):Release 不再附带 sub2api_*.tar.gz / *.zip 与 checksums.txt,统一以 Docker 镜像交付。
  • Release 零附件(本次重申):本次刷新 v0.2.11 说明时不发布任何附件,tag 的 Release 资产列表保持为空;
    凭证守护「托管重登」模式所需的运行包 sub2api-reauth_<VERSION>_linux_<arch>.tar.gz 也因此不由发布流水线提供,
    该模式会复报 runtime 不可用(不影响账号巡检、自动重登与外部 Worker 模式)。
    需要时可在手动 dispatch Release 工作流时勾选 publish_reauth_runtime,仅那一次上传该运行包;
    或通过 SUB2API_REAUTH_RUNTIME_REPO / SUB2API_REAUTH_RUNTIME_VERSION 指向已发布运行包的仓库与版本。
  • 数据库迁移:批次一新增 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;
    批次四新增 258_quality_observation_scope.sql;批次六新增 259_account_auto_config_events.sql;
    批次七新增 260_quality_rule_templates.sql;批次九新增 261_pelican_group_test_costs.sql(鹈鹕测智 USD 成本)与
    262_openai_oauth_reauth_engine.sql(可持久化重登引擎选择),
    均于启动时自动执行;上一次追平(v2.8.19 / v2.8.20)无新增迁移。升级前请备份数据库。
  • Kubernetes 部署新增:批次九引入多副本网关、Pod 摘流与 Serverless 区域路由,
    新增 deploy/kubernetes/、backend/internal/serverless/ 与版本化升级助手 deploy/upgrade-k3s.py / deploy/upgrade-k3s.sh;
    Docker Compose 部署不受影响。
  • 请求采集与凭证守护默认关闭,需在「系统设置 > 功能开关」中显式启用。
  • 安装脚本与在线更新服务的默认仓库为 ziyue67/sub2api(backend/internal/service/update_service.go、deploy/install.sh)。

验证

  • 合并冲突处理:第一个合并(f3f9cdd73 ← dfdb8642a)需人工处理 15 个文件(backend/cmd/server/VERSION、backend/cmd/server/wire_gen.go、
    internal/service/{gateway_service,group_model_allowlist,openai_account_scheduler,openai_gateway_responses_chat_fallback,openai_upstream_transport_error,openai_ws_forwarder_ingress,openai_ws_forwarder_payload}.go
    及对应测试、frontend/src/__tests__/integration/data-import.spec.ts、frontend/src/i18n/locales/{en,zh}/admin/accounts.ts),
    处理原则为保留两侧并集:VERSION 保留本 Fork 的版本号,WebSocket 相关文件保留 Fork 自有实现并吸收 ranxi 修复,
    data-import.spec.ts 保留两侧用例,i18n 合并两侧文案。第二个合并(0713b0384 ← 62ac3a5dd)无冲突(git merge-tree 退出码 0)。
    批次四合并(468061e08 → e6e7a27aa)需人工处理 3 个文件:backend/cmd/server/VERSION(保留本 Fork 的版本号,不采用 ranxi 的 2.9.1)、
    .gitignore(白名单取并集,保留 !docs/releases/*.md、!docs/codex-credits.md 与上游新增的 !docs/quality-bps-observation.md)、
    frontend/src/components/account/EditAccountModal.vue(<script setup> 导入:吸收上游新增的 @/utils/accountCost,但不引入 nextTick——
    Fork 已在 456c4cff7 移除 syncFormFromAccount 的 nextTick 回填窗口,强行引入会触发 TS6133)。
    批次五合并(7b9fb3332 → 2eead90e9)无冲突(前端 6 个源文件 + 测试 + i18n + 截图,自动合并)。
    批次六合并(74d3538a8 → f0d2073bf)无冲突(git merge-tree 退出码 0;后端 31 个文件 + 前端 38 个文件 + 迁移 259_account_auto_config_events.sql + 截图,自动合并)。
    批次八合并(faf58e440 → 3739696dc)需人工处理 3 个文件:backend/cmd/server/VERSION(保留本 Fork 版本号,不采用 ranxi 的 2.9.3)、
    backend/internal/handler/openai_chat_completions.go 与 backend/internal/handler/openai_gateway_handler.go
    (保留本 Fork「组内账号耗尽后切换 API Key 下一路由」逻辑,同时采纳 ranxi 新增的 lastAdmissionErr 准入错误分支)。
    批次七合并(cdab8bbb4 → 439de895d)需人工处理 2 个文件:backend/cmd/server/VERSION(保留本 Fork 版本号,不采用 ranxi 的 2.9.2)、
    frontend/src/components/account/BulkEditAccountModal.vue(本 Fork 的「提交前二次确认」流程 showBulkUpdateConfirm /
    pendingBulkUpdatePayload 与 ranxi 的 BPS 默认值加载闸门 bpsDefaults.loading 并存:handleSubmit 保持 async 且仍以确认弹窗收尾,
    不直接提交,代理车道 WithSelectedAccountProxyLane / AccountProxyURL 与 WS→SSE 加速决策 resolveOpenAIHTTPSSEDecision / accelerateHTTPSSE 互不覆盖)。
    上游 v0.2.11 合并(9fc24fd46)需人工处理 4 个文件:backend/cmd/server/wire_gen.go、
    backend/internal/service/wire.go(保留 Fork 的 ProvideAccountOpsService / ProvideAccountTokenGuard* / ProvideCRSSyncService,
    同时采纳上游 ProvideClaudeResetCreditService 与 idempotencyCoordinator 构造顺序)、
    backend/internal/service/api_key_service.go(并集:Fork 的分组路由错误 + 上游的创建数量 / 频率限制错误)、
    backend/internal/service/openai_codex_model_metadata.go(并集:Fork 的 Excel BPS 多智能体能力置空 + 上游的 Astra Ultrafast 能力)。
    批次九合并(59a6c673b ← c2e3e098f)需人工处理 7 个文件:backend/cmd/server/VERSION(保留上游编号 0.2.11,不采用 ranxi 的 2.9.6)、
    backend/cmd/server/wire_gen.go(采纳 ranxi 的 configConfig 形参,保留 Fork 的 imageCreator* / canvas* / studioBridge* / promptFavorite*
    构造与 ProvideHandlers 参数表)、.github/workflows/backend-ci.yml(保留 Fork 的 verify: false,并入 ranxi 的 release-helpers)、
    .github/workflows/release.yml(保留 Fork「只发镜像」的发布流水线与说明回写步骤,不并入 ranxi 的 GoReleaser 二进制矩阵 /
    重登运行包附件;注意沿用 Fork 的 update-version + build-frontend → release 作业图)、
    frontend/src/components/account/EditAccountModal.vue(采纳 ranxi 的 openaiModelAliases 回填与 syncingForm 回填窗口,
    同时补回 nextTick 导入——Fork 早前移除了该导入,直接合并会触发 TS2304)、
    frontend/src/components/account/__tests__/AccountStatusIndicator.spec.ts 与 frontend/src/views/admin/SettingsView.vue
    (取并集:保留 Fork 的 leaderboardActualCost 卡片与 BPS 徽标用例,并并入 ranxi 的账号状态用例与设置分区锚点)。
  • 本地校验(Linux,Go 1.27.1 / Node 22 / pnpm 9.15):
    • 后端:go build ./...、go vet -tags=unit ./...、go test -tags=unit ./...(make test-unit)全部通过(无 FAIL;
      本次两条主线合并后各复跑一次,第 2 次为 65 个包全绿);golangci-lint run --timeout=30m 为 0 issues。
    • 后端集成测试:go test -tags=integration ./... 需 Docker(testcontainers 拉取 postgres:18.1-alpine3.23 / Redis)。
      首次并行全量运行时 internal/middleware、internal/repository、internal/server/routes 因容器镜像拉取超时(docker.1ms.run 镜像站
      TLS handshake timeout)与 10 分钟单包超时失败;逐个单包复跑均通过(middleware 11.6s、repository 23.2s、routes 9.6s),
      属本机 Docker 网络抖动而非代码问题。
    • 前端:vue-tsc --noEmit、eslint .(全量 lint:check)通过;make test-frontend-critical 52 个文件 / 877 个用例全部通过
      (首次并行运行有 1 个 UsageView 用例波动,单独复跑与第二次全量运行均全绿;已在 origin/main 上复现同一波动)。
    • 说明:frontend/pnpm-lock.yaml 由本机 pnpm 11 重算会产生无关改动,已还原为仓库版本;本地验证用 pnpm install --no-frozen-lockfile
      安装依赖后直接调用 node_modules/.bin/{vue-tsc,eslint,vitest},未改动锁文件。
  • 工作树检查:无残留冲突标记(<<<<<<< / >>>>>>>),git status 干净。
    后端单测会就地写入 backend/internal/service/data/bps-images/,该运行时目录已加入 .gitignore,避免误提交。
  • 发布配置校验:构建目标 goarch 仅 amd64,Docker 镜像标签为 0.2.11 / 0.2.11-amd64 / latest(GHCR 与 Docker Hub 同一镜像);
    发布说明按 docs/releases/v0.2.11.md(与 tag v0.2.11 同名)由 release.yml / sync-fork-release.yml / backfill-release.yml 回写。
  • 本次 Release 刷新(2026-10-01):v0.2.11 的 tag 与 Release 已随 2026-09-29 的镜像发布建立;本次把 tag 移到两条主线合并后的提交,
    并重写 Release 正文为本文档,不发布任何附件(release.yml 的 build-reauth-runtime 作业已改为仅手动勾选
    publish_reauth_runtime 时才执行,tag push 路径恒不产出附件)。
  • 重登运行包来源可配置:backend/internal/reauthruntime/runtime.go 默认从 ziyue67/sub2api 的 Release 取运行包,
    可用 SUB2API_REAUTH_RUNTIME_REPO(owner/repo,非法值回退默认)与 SUB2API_REAUTH_RUNTIME_VERSION(未设置或非法时用应用版本)覆盖;
    仓库/版本在使用前均做白名单校验,避免把下载重定向到非预期地址(source_test.go 覆盖)。

📥 Installation

Docker:

# Docker Hub
docker pull ziyue67/sub2api:0.2.11

# GitHub Container Registry
docker pull ghcr.io/ziyue67/sub2api:0.2.11

本版本起不再发布 tar.gz / zip 二进制包与 checksums.txt,请使用上方镜像部署。

📚 Documentation