Skip to content

Sub2API 1.4.9

Choose a tag to compare

@github-actions github-actions released this 25 Aug 14:08
· 12 commits to main since this release

AI API Gateway Platform - 将 AI 订阅配额分发和管理

开启透传的 OAuth 账号,客户端稳定报
stream disconnected before completion: stream closed before response.completed;
同一账号不开透传则正常。

根因:handleStreamingResponsePassthrough 全函数只有一处 flush,条件是「本行是客户端
输出事件」。而 SSE 事件由 data 行之后的空行分帧,data: [DONE] 与 event: 行
都不算客户端输出,于是终止事件的分帧空行、[DONE] 及其空行全部留在 4KB bufio 缓冲里,
函数返回时随缓冲丢弃(原生路径在 finalizeStream 有收尾 flush,透传没有)。客户端拿到的
最后一帧永远缺少分帧空行,SSE 解析器不会派发该事件,codex-rs 在 EOF 时从未见过
response.completed。

改为与原生路径同一不变式:一旦开始输出就逐行 flush;首个输出之前仍只写不 flush,
以保住 pre-output failover 的「客户端尚未收到任何字节」前提。
顺带修掉长推理阶段的静默——reasoning / in_progress 等非输出事件此前也从不 flush。

上游非 compact 端点只接受流式,网关强制 stream=true 取数;但该值被回写成客户端意图,
导致「上游返回 SSE 时折叠回 JSON」的分支永远走不到。现改为只在 compact 分支回写。

此前「从未配置过该字段」的 OAuth 账号会被默认收敛,等于升级动作本身就静默改写了每个
存量账号的 installation_id / session_id / thread_id。upstream 有对应的额度回退报障与
A/B 回滚证据(#5555 / #5556 / #5582)。收敛现在必须显式开启。

server_is_overloaded / slow_down 在 Codex CLI 属致命集,收到即终止会话。已无法改走
failover 时改写为 server_error(消息原样保留),让客户端走内置退避重试。

三处零值 net.Dialer(无上限,只能等内核 TCP 重传约 130 秒)与一处忽略 ctx 的
SOCKS5 Dial,统一改为 10s 超时并优先走 DialContext。

dompurify 3.3.1 → 3.4.14,修复多条 sanitizer-bypass XSS 公告,并加 pnpm override 兜底。

  • Codex 指纹收敛默认关闭。仅影响从未配置过该字段的账号;显式配置的账号行为不变。
  • 出站默认 originator 由 codex_cli_rs 改为 codex-tui(跟随 upstream 自 08-07 起
    持续三周的口径修正)。回退:gateway.disable_codex_originator_normalization: true。
  • 客户端请求 stream=false 时,OAuth 透传现在返回 JSON 而不是 SSE。

后端 unit / integration / build 全绿;golangci-lint 0 issues;govulncheck 0 vulnerabilities;
前端 108 文件 / 643 用例通过,typecheck 与 lint 干净,pnpm audit 门禁通过。
两处本地缺陷的用例均验证过「还原修复后失败」。


📥 Installation

Docker:

# GitHub Container Registry
docker pull ghcr.io/atoz03/sub2api:1.4.9

One-line install (Linux):

curl -sSL https://raw.githubusercontent.com/atoz03/dev_s2i/main/deploy/install.sh | sudo bash

Manual download:
Download the appropriate archive for your platform from the assets below.

📚 Documentation