alfadb
ce157b32ed
fix(claude): 指纹自愈路径同样执行 claude-cli 版本下限
...
GetOrCreateFingerprint 的 heal 分支(畸形缓存自愈)此前在版本下限逻辑之外:
畸形缓存 + 合法但过旧的客户端 UA 会在首次读取时把过旧 UA 原样落库并返回,
下一次读取才被抬到下限——该窗口内账号仍以过旧版本撞上游客户端版本闸门
(PR #6481 review 指出的边界 case)。
修复:把 floorClaudeCLIUserAgentVersion 后置块从 healthy else 内移到
heal/healthy if-else 之后、TTL 续期检查之前,作为两条缓存命中路径的共同
后置条件;heal 分支 needWrite 本已为 true,单次落库语义不变。
测试:TestGetOrCreateFingerprintHealsPoisonedCacheUsingValidClientUA
期望改为首次返回/落库即 claude-cli/CLICurrentVersion(保留 ClientID 不变、
恰好一次落库断言);floor/UA 全部既有用例保持绿。
2026-09-07 16:34:35 +08:00
alfadb
3cb2381bdc
fix(claude): 让伪装的 Claude Code 版本真正生效,修复 Fable 5.1 仍然 400
...
claude-fable-5-1 已登记进 DefaultModels,但 OAuth 账号实际调用仍然全部失败:
400 claude_code_version_too_old
"Claude Code 2.1.220 does not support this model;
version 2.1.251 or newer is required."
两个独立的原因,缺一不可:
1. CLICurrentVersion 停留在 2.1.220,低于上游对该模型的客户端版本闸门。
升到 2.1.258(当前官方 CLI 最新版,npm @anthropic-ai/claude-code)。
2. 只升常量对所有已有账号无效。上游请求实际发送的 User-Agent 来自账号级
持久指纹(IdentityService,Redis fingerprint:<accountID>),不是
DefaultHeaders;defaultFingerprint 只在首次创建指纹时使用。
GetOrCreateFingerprint 的缓存命中路径只有两条改写分支:UA 畸形时自愈,
或客户端送来更新版本时升级。指纹 7 天 TTL 但活跃账号每 24h 续期,实际
近乎永不过期,系统内也没有重置入口——客户端版本比缓存旧时(例如缓存
2.1.220、客户端 2.1.75),存量账号会永远对上游声称 2.1.220。
生产实测:升级 CLICurrentVersion 并部署后仍报同样的 400,读 Redis 确认
出问题账号的缓存值为 "claude-cli/2.1.220 (external, cli)"。
修复:新增 floorClaudeCLIUserAgentVersion,把 CLICurrentVersion 作为缓存
指纹里 claude-cli 版本的下限,缓存命中与首次创建两条路径共用。
- 只对 claude-cli 产品生效,其它客户端一律不动
- 只升不降:版本等于或高于下限(含客户端上报的更新版本)不做任何改动
- 只替换版本号段,UA 其余部分原样保留,例如
"(external, claude-desktop-3p, agent-sdk/0.3.100)" 不受影响
- 与既有的"客户端更新版本"升级分支相互独立、二者取更新者
- X-Stainless-* 维持既有 merge 语义,不被下限逻辑覆盖
cc_version 无需单独处理:billing attribution block 的版本已由
syncBillingHeaderVersion 跟随实际发送的 User-Agent 同步。
测试:identity_service_version_floor_test.go 覆盖 helper 的 8 种 UA 形态与
5 个 GetOrCreateFingerprint 场景,其中一个直接复现线上故障(缓存 2.1.220 +
客户端 2.1.75 → 写回 2.1.258,Stainless 字段保持不变)。
constants_cli_version_test.go 锁定常量与 DefaultHeaders 的 UA 同源,并断言
不低于 Fable 5.1 的闸门下限。回退实现后对应用例确认转红。
identity_service_user_agent_validation_test.go 中 3 个把版本钉死在旧字面量
的既有用例改为钉 CLICurrentVersion 或更高版本——它们断言的正是本次有意改变
的行为,各自的原始意图(哨兵拒绝、合法升级生效、健康缓存不重写)保持不变。
2026-09-07 16:34:35 +08:00
Wesley Liddick
a7d2c782df
Merge pull request #5717 from wucm667/feat/issue-2629-current-main
...
feat(simple-mode): allow basic account grouping
2026-09-07 15:43:22 +08:00
Wesley Liddick
a3aa9bae6d
Merge pull request #6662 from ZeroClover/fix/codex-manifest-pinned-accounts
...
fix(openai): reuse pinned accounts for model lists and fix manifest controls
2026-09-07 15:35:49 +08:00
wucm667
b59f3bf46c
fix(simple-mode): enforce basic group boundaries
2026-09-07 09:20:48 +08:00
Zero Clover
f88d62ad28
fix(openai): use live account models in connection tests
2026-09-07 00:23:49 +08:00
wucm667
4a4fd35e0c
fix(simple-mode): guard non-empty group deletion
2026-09-06 08:11:23 +08:00
wucm667
f46038820b
fix(simple-mode): enforce group capability allowlist
2026-09-06 08:11:23 +08:00
wucm667
05ad6b49a1
fix(simple-mode): enforce basic group capabilities
2026-09-06 08:10:41 +08:00
wucm667
a3675552bd
feat(simple-mode): allow basic account grouping
2026-09-06 08:10:41 +08:00
Zero Clover
cb31033972
feat(openai): reuse pinned accounts for standard model discovery
2026-09-05 19:58:47 +08:00
Zero Clover
f3bbb95310
fix(groups): react immediately to Codex manifest edits and unify dialog toggles
2026-09-05 19:46:25 +08:00
github-actions[bot]
ab99d56e96
chore: sync VERSION to 0.2.1 [skip ci]
2026-09-05 09:45:17 +00:00
Wesley Liddick
578785ee7f
Merge pull request #6640 from cyhhao/fix/claude-billing-fingerprint
...
fix(claude): align billing fingerprint with outbound User-Agent
v0.2.1
2026-09-05 16:59:33 +08:00
Wesley Liddick
ed7c8f2208
Merge pull request #6572 from lyy0709/codex/gpt-6-astra
...
feat(openai): complete GPT-6 Astra support
2026-09-05 16:50:40 +08:00
cyh
2e1c7c00a6
test(claude): check request body close errors
2026-09-05 16:43:54 +08:00
cyh
994ca26e92
fix(claude): align billing fingerprint with outbound user agent
2026-09-05 16:34:00 +08:00
Wesley Liddick
d2f87c612e
Merge pull request #6638 from feeeei/feat/images-url-to-b64json-backfill
...
feat(images): 账户开关将生图结果 url 下载回填为 b64_json
2026-09-05 16:24:40 +08:00
lyy0709
62cd63bfda
fix(openai): retain capabilities when model listing is unavailable
2026-09-05 16:24:15 +08:00
lyy0709
dee35a841d
merge: reconcile Astra fixes with upstream capability sync
2026-09-05 16:19:57 +08:00
Wesley Liddick
fb44e2dd09
Merge pull request #6514 from StarryKira/codex/anthropic-reasoning-pricing
...
feat: add Anthropic reasoning effort and Fable 5.1 max pricing
2026-09-05 16:19:18 +08:00
Wesley Liddick
c42d78e26c
Merge pull request #6571 from DuskLin/feat/codex-ultrafast-tier
...
feat(codex): support ultrafast service tier
2026-09-05 16:18:16 +08:00
Wesley Liddick
2dc287f2e0
Merge pull request #6636 from specialpointcentral/cyber-ws-recording-fix
...
fix(openai): record WS cyber policy failures across paths
2026-09-05 16:17:33 +08:00
Wesley Liddick
83094abf21
Merge pull request #6536 from wucm667/fix/issue-6526-mapped-model-scheduling
...
fix(openai): schedule accounts with mapped model
2026-09-05 16:17:04 +08:00
Wesley Liddick
aafe93b335
Merge pull request #6557 from Ritel-T/pr/compact-admin-account-list
...
perf(admin): return compact account lists for lite requests
2026-09-05 16:16:26 +08:00
Wesley Liddick
cc52c93ad7
Merge pull request #6539 from creamtea47/codex/fix-delegation-bootstrap-resume
...
fix(openai): 兼容历史任务委派续聊
2026-09-05 16:16:00 +08:00
lyy0709
d7f048a265
fix(openai): preserve synced Astra capabilities and continuation
2026-09-05 16:13:28 +08:00
Wesley Liddick
0d9e7e1530
Merge pull request #6628 from baryon/contrib/openai-gpt6-astra-capability-sync
...
fix(openai): persist GPT-6 Astra Codex capabilities from upstream sync
2026-09-05 16:07:50 +08:00
Wesley Liddick
9b4fcfb897
Merge pull request #6606 from luckydududu/feat/claude-cli-version-env-override
...
feat(claude): allow operators to override the advertised CLI version
2026-09-05 16:05:33 +08:00
Wesley Liddick
9517f12cdd
Merge pull request #6510 from wall-wxk/fix/release-session-slot-on-forward-failure
...
fix(gateway): 转发失败的请求立即释放会话槽,不再占用整个空闲超时窗口
2026-09-05 16:05:06 +08:00
Wesley Liddick
40f4d450be
Merge pull request #6507 from wucm667/fix/issue-6501-glm53-thinking-effort
...
fix(gateway): normalize GLM-5.3 thinking effort
2026-09-05 16:04:16 +08:00
Wesley Liddick
620eb3fd00
Merge pull request #6581 from r266-tech/r266/forward-opencode-session
...
fix(openai): scope OpenCode session forwarding
2026-09-05 16:03:57 +08:00
Wesley Liddick
c6ff69fd12
Merge pull request #6542 from wucm667/fix/issue-6530-gateway-concurrency-origin
...
fix(handler): distinguish gateway admission rejections
2026-09-05 16:03:17 +08:00
Wesley Liddick
7b271bbee9
Merge pull request #6529 from wucm667/fix/issue-6521-preserve-passthrough-reasoning
...
fix(openai): preserve reasoning effort in API-key passthrough
2026-09-05 16:02:56 +08:00
Wesley Liddick
68f099707e
Merge pull request #6553 from wucm667/fix/issue-6547-heartbeat-bootstrap
...
fix(openai): normalize automation heartbeat bootstrap
2026-09-05 16:02:36 +08:00
feeeei
c227863d51
fix(images): 生图 url 回填下载拒绝私网目的地并只信字节嗅探
...
账户开关 images_url_to_b64_json 下载的图片 url 来自上游响应,是不可信输入。此前沿用
base_url 的 security.url_allowlist 策略,默认配置下只做格式校验,上游返回
localhost:8080 之类地址时网关会真的去请求内网。
- 下载 URL 主机为 localhost、回环、私网、链路本地、未指定地址的字面量时直接拒绝,
不受 security.url_allowlist 配置影响(urlvalidator 导出 IsBlockedHost)
- 新增 ctx 标记 WithHTTPUpstreamPublicHostsOnly:共享上游客户端对带标记的请求无视配置
校验解析后 IP,并为其克隆客户端挂 redirectChecker,重定向保持跟随但每一跳都校验
- 下载内容改为只信 http.DetectContentType 嗅探结果且限 png/jpeg/webp/gif,
响应头不再作为依据
- 下载失败仍只记日志并保留原样;超时与端口策略不变
2026-09-05 15:50:56 +08:00
lyy0709
3a8c9f16de
Merge remote-tracking branch 'upstream/main' into codex/gpt-6-astra
2026-09-05 15:48:49 +08:00
Qi HU
2da31290a1
fix(openai): record WS cyber policy failures across paths
...
Cyber-policy detection only inspected response.failed, and the ingress check ran after error-specific early returns. As a result, error-shaped failures and the connection-pool, HTTP-bridge, and WSv2 paths could miss cyber-policy hits.
Centralize event marking and invoke it before retry and failover returns across the WebSocket implementations. Preserve the recorded guard during account failover and defer connection blocking until the logical failover chain completes, avoiding duplicate records while ensuring subsequent turns are blocked.
2026-09-05 15:32:29 +08:00
feeeei
3c53ba01a7
feat(images): 账户开关将生图结果 url 下载回填为 b64_json
...
部分第三方 GPT-image 上游把 Images 响应里的 b64_json 换成 url,按官方接口实现的
客户端读不到图。账户 extra.images_url_to_b64_json 开启后,OpenAI API Key 的
Images 非流式响应里 b64_json 缺失或为空且 url 非空的项,由网关下载 url 内容并以
base64 回填 b64_json,url 与其余字段原样保留;异步生图任务复用同一路径。
- 下载经账户代理发起,沿用 base_url 的出站 URL 校验策略(validateUpstreamBaseURL
抽出 validateOutboundURL,nil cfg 按仅格式校验处理),单图上限 20MB 且须为图片
内容(响应头或字节嗅探);data: URL 直接取 base64 载荷
- 单项下载失败仅记日志并保留原样;客户端显式 response_format=url 时不回填;
流式响应不处理
- 创建/编辑账户弹窗在 OpenAI API Key 的 Responses 模式块后新增“生图结果 URL 转
base64”开关,中英文案;新增 openai_images_b64_backfill_test.go
- 只被 unit 标签测试引用的定价目录测试辅助补上 //go:build unit(admin 包整文件加标签,
service 包的 newPricingServiceFromModelPricing 搬到 pricing_stub_helpers_unit_test.go),
消除 golangci-lint 在默认标签下的 unused 报错
2026-09-05 15:17:57 +08:00
Wesley Liddick
07bf8b92fd
Merge pull request #6550 from weiness/fix/alipay-payment-reconciliation
...
修复支付宝回调延迟或丢失,已支付订单可能长时间停留在待支付状态的问题
2026-09-05 15:08:56 +08:00
Wesley Liddick
63dc24b5e8
Merge pull request #6626 from wucm667/feat/issue-6624-none-reasoning-mapping
...
feat(openai): allow none as reasoning mapping source
2026-09-05 15:06:32 +08:00
Wesley Liddick
8f1d6af3ed
Merge pull request #6531 from wucm667/fix/issue-6524-continuation-unavailable-recovery
...
fix(openai): recover unavailable continuation responses
2026-09-05 15:06:02 +08:00
Wesley Liddick
85f431a072
Merge pull request #6620 from wucm667/fix/issue-6615-astra-messages-cache
...
fix(openai): enable Astra messages prompt caching
2026-09-05 15:04:13 +08:00
Wesley Liddick
d7fb9b5d35
Merge pull request #6593 from wucm667/fix/issue-6584-chat-tool-discovery
...
fix(apicompat): preserve discovered tools in chat fallback
2026-09-05 15:03:52 +08:00
Wesley Liddick
eba6ea5639
Merge pull request #6590 from wucm667/fix/issue-6582-search-tool-capability
...
fix(codex): advertise search capability for bridged routes
2026-09-05 15:03:31 +08:00
Wesley Liddick
2ad6e8fb75
Merge pull request #6599 from wucm667/fix/issue-6598-gemini-custom-models-list
...
fix(gemini): apply custom list to native models endpoint
2026-09-05 15:03:08 +08:00
Wesley Liddick
570bd084c2
Merge pull request #6594 from wucm667/fix/issue-6592-preserve-zero-system-metrics
...
fix(ops): preserve zero-valued system metrics
2026-09-05 15:02:40 +08:00
Wesley Liddick
15278fe2f9
Merge pull request #6580 from OG-Wang/fix/sidebar-collapse-when-active
...
fix(frontend): allow collapsing sidebar groups while a child route is active
2026-09-05 15:02:30 +08:00
Wesley Liddick
c4e6dcfd80
Merge pull request #6602 from ZeroClover/feat/codex-manifest-pinned-accounts
...
feat(codex): pinned-accounts Codex model manifest for OpenAI groups
2026-09-05 14:51:17 +08:00
Wesley Liddick
701f844755
Merge pull request #6555 from feeeei/feat/usage-upstream-request-id
...
feat(usage): 用量记录落库直接上游的请求 ID,并支持按账户配置响应头名
2026-09-05 14:36:07 +08:00