jjaw
3ef70b045d
fix: safely coalesce scheduler outbox events
2026-06-16 11:48:12 +08:00
jjaw
34e66ec0a5
fix: outbox scheduler snapshot coalesce
2026-06-16 11:48:12 +08:00
shaw
45f3b0dd74
Merge pull request #3272 from jianjianai/fix/token-refresh-retry-backoff
...
fix: token refresh 筛选避免拉取全部账号导致数据库爆炸 / reduce token refresh retry amplification
2026-06-16 11:47:07 +08:00
jjaw
9b270f11d7
refactor: inline token refresh retry reason prefix
2026-06-16 11:44:39 +08:00
jjaw
74199b6a6e
fix: reduce token refresh retry amplification
2026-06-16 11:44:39 +08:00
shaw
b56c501d30
Merge pull request #3273 from jianjianai/fix/redis-wait-queue-hotpath
...
fix: move user wait queue accounting off hot path / 用户槽位立即成功的请求不调用等待队列
2026-06-16 11:43:07 +08:00
jjaw
b0579c4891
fix: move user wait queue accounting off hot path
2026-06-16 11:41:54 +08:00
shaw
87d0f8da66
Merge pull request #3132 from jianjianai/main
...
修复 token refresh 拉取大量账号时触发 PostgreSQL 参数上限
2026-06-16 11:40:47 +08:00
jjaw
8b698ff4c1
fix account list parameter limit
2026-06-16 11:39:15 +08:00
Wesley Liddick
62fef6ebed
Merge pull request #3178 from jianjianai/fix/fix-failover-error-body-reuse
...
fix: 修复 OpenAI failover 错误响应体重复读取 / reuse cached OpenAI failover error body
2026-06-16 11:13:10 +08:00
Wesley Liddick
8ddc138094
Merge pull request #3232 from jianjianai/fix1/account-expiry-autopause-index
...
fix:account expiry autopause index / 账号过期自动禁用索引优化
2026-06-16 11:12:57 +08:00
Wesley Liddick
2f1f1971b4
Merge pull request #3195 from jianjianai/fix/invalid-refresh-token-nonretryable
...
fix: treat invalid_refresh_token as non-retryable / 将 invalid_refresh_token 判定为不可重试
2026-06-16 11:12:45 +08:00
Wesley Liddick
9acd104151
Merge pull request #3201 from alfadb/fix/dockerfile-copy-docs-legal
...
fix(docker): 将 docs/legal 纳入构建上下文以支持 admin-compliance gate
2026-06-16 11:12:34 +08:00
Wesley Liddick
15b0753c1d
Merge pull request #3283 from wucm667/fix/non-json-200-response-failover
...
fix(gateway): 上游 200 返回非 JSON 错误报文时纳入 failover,避免坏上游被反复命中误扣费
2026-06-16 11:12:21 +08:00
Wesley Liddick
a0fc2c4143
Merge pull request #3218 from wucm667/fix/antigravity-system-role-message
...
fix(antigravity): 处理 messages 中 role:system 消息,修复 Claude Code 接入 400
2026-06-16 11:12:08 +08:00
Wesley Liddick
28bed8b866
Merge pull request #3252 from wucm667/fix/upstream-zstd-response-decompression
...
fix(gateway): 解压 zstd 上游响应体,修复非流式 usage 静默记 0 的计费丢失
2026-06-16 11:11:51 +08:00
shaw
bbd9702496
fix(frontend): bump form-data to >=4.0.6 via pnpm override
...
Resolves GHSA-hmw2-7cc7-3qxx (CRLF injection) flagged by
frontend-security CI. axios pulls form-data ^4.0.5 which locked to the
vulnerable 4.0.5; override forces all transitive consumers to 4.0.6+
without needing an audit exception.
2026-06-16 10:48:12 +08:00
Wesley Liddick
715594847b
Merge pull request #3267 from codeQuest-fly/codex/fix-sub2api-injection
...
feat: configure Claude OAuth system prompt blocks
2026-06-16 10:43:38 +08:00
Wesley Liddick
29978ac9a6
Merge pull request #3251 from wucm667/fix/chatcompletions-responses-tool-strict-default
...
fix(apicompat): chat-completions 转 Responses 显式补全 tool strict=false,避免可选参数被填零值
2026-06-16 10:26:39 +08:00
dailingfei
b63b411654
fix: remove unused billing attribution helper
2026-06-15 17:16:26 +08:00
wucm667
ab9987b2e2
fix(gateway): fail over on non-JSON 2xx responses
2026-06-15 11:04:24 +08:00
315944211
25a9762a17
feat: show account id in account list
2026-06-15 00:02:04 +08:00
dailingfei
8ce7b9a8f6
feat: configure Claude OAuth system prompt blocks
2026-06-13 04:12:13 +08:00
bwlc and Claude Fable 5
c70c6a2659
feat(渠道监控): 检测间隔支持正负随机抖动配置
...
新增 jitter_seconds 配置:每轮调度在 interval 基础上 ± [0, jitter]
均匀随机偏移触发,避免多个监控以固定节奏同步请求上游。
- ent schema 新增 jitter_seconds 字段(默认 0),附迁移 151
- 校验:jitter >= 0 且 interval - jitter >= 15s(创建/更新均校验)
- runner 由固定 ticker 改为每轮重新随机化的 timer,0 抖动时行为不变
- 前端监控表单新增「随机抖动 (± 秒)」输入框,上限随间隔联动
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-12 22:09:53 +08:00
wucm667
c1c28ac7bb
fix(gateway): 解压 zstd 上游响应体
2026-06-12 15:06:01 +08:00
wucm667
edfd5e3736
fix(apicompat): default tool strict to false
2026-06-12 15:01:58 +08:00
wangziwenunique
f6e0ebc6bf
fix: preserve Anthropic window cooldowns
2026-06-12 13:35:03 +08:00
DaydreamCoding and Claude Opus 4.8
b62b573f7f
feat(openai): cyber_policy 硬阻断全链路透传、审计与计费
...
上游对单次请求下发 error.code=cyber_policy 硬阻断时,网关在所有端点
(/v1/responses、/v1/chat/completions、/v1/messages、WebSocket)及流式/
非流式路径下,将该结果原样透传给客户端,绝不 failover、换号或同步拦截;
命中后异步完成审计与计费:
- 风控中心记录 cyber_policy 留痕并发送通知邮件,落库先于发信,SMTP 阻塞
不影响留痕
- ops 错误请求记录,状态码对齐客户端实际接收(流式 200 / 非流式 400)
- 用量明细标记 request_type=cyber,按上游真实 token 计费,HTTP 与
WebSocket 计费口径统一,零 token 命中不误扣
- 会话级自动屏蔽(管理员开关,默认关):命中的会话在可配 TTL 内本地拦截
不再发往上游,仅屏蔽该会话不影响同 Key 其他会话
- 封号计数排除开关:可选让 cyber 命中不计入自动封号,命中当次不判定且
历史行在违规计数中一并排除
WebSocket 多轮连接下 cyber 标记按 turn 生命周期管理,逐轮独立检测与记录;
透传的错误响应不被兜底逻辑追加内容污染。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-12 01:47:01 +08:00
jjaw
e4c255a77a
fix:account expiry autopause index
2026-06-12 01:38:09 +08:00
feitianbubu
b256f91141
fix(gateway): intercept max_tokens=1 haiku probes for streaming requests too
2026-06-11 20:46:47 +08:00
wucm667
f8c80bf038
fix(auth): apply promo codes to oauth signups
2026-06-11 18:55:27 +08:00
wucm667
65559ac589
fix(antigravity): merge system role messages
2026-06-11 18:37:00 +08:00
方程 and Claude Opus 4.7
6bf6722bae
chore: gofmt test file
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-06-11 17:45:09 +08:00
方程 and Claude Opus 4.7
0da1fe28ef
fix(openai): prevent false image billing on text-only /v1/responses requests
...
Two defects in the image output counter could inflate imageCount for
text-only responses, causing per-image charges instead of token billing:
1. addDataArray counted every element in a top-level "data" array
without checking whether each element contained actual image output
(url/b64_json). Non-image objects in a "data" array are now skipped.
2. addImageOutputItem accepted image_generation.completed items with
no result/b64_json/url, inflating the count. These items are now
filtered the same way as every other item type.
Fixes #3196
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-06-11 16:56:43 +08:00
jjaw
727ac3f689
fix: add app_session_terminated to non-retryable refresh errors / 将 app_session_terminated 添加到不可重试的刷新错误中
2026-06-10 22:32:04 +08:00
alfadb
ad13585456
fix(docker): ship docs/legal in build context for admin-compliance gate
...
LegalDocumentView.vue (admin-compliance acknowledgement gate) build-time
imports ../../../../docs/legal/*.md?raw. The Docker image build broke
because the frontend-builder stage only COPYs frontend/ (never docs/) and
.dockerignore excludes both docs/ and *.md from the build context.
Upstream CI runs `pnpm build` from the repo root (docs/ resolvable via
../docs/) and never exercises the Docker path, so this stayed hidden until
the buildkit package job surfaced "Could not resolve docs/legal/...md?raw".
Fix:
- COPY docs/legal/ into /app/docs/legal in Dockerfile and deploy/Dockerfile
so it sits beside /app/frontend (WORKDIR), matching the relative import.
Only the required subtree is copied to keep the build dependency minimal.
- Re-include docs/legal/*.md in .dockerignore so buildkit ships the subtree.
2026-06-10 16:34:19 +08:00
github-actions[bot]
e34ad2b194
chore: sync VERSION to 0.1.136 [skip ci]
2026-06-10 07:02:12 +00:00
jjaw
fa8f1749f5
fix: treat invalid_refresh_token as non-retryable / 将 invalid_refresh_token 判定为不可重试
2026-06-10 14:21:44 +08:00
shaw
0acf00c4a1
Add admin compliance acknowledgement gate
v0.1.136
2026-06-10 14:16:51 +08:00
Wesley Liddick
c32e29bab0
Merge pull request #3187 from jianjianai/fix/gateway-debug-log-loop
...
优化调度日志循环开销 / Reduce debug logging overhead in scheduler hot path
2026-06-10 09:58:40 +08:00
Wesley Liddick
2b1c5f8563
Merge pull request #3186 from jianjianai/fix/account-group-scheduler-indexes
...
优化账号分组调度索引 / Add two concurrent composite indexes
2026-06-10 09:58:31 +08:00
Wesley Liddick
0c997d41a9
Merge pull request #3176 from jianjianai/fix/precompute-model-body-replacement
...
优化 OpenAI 网关 failover 流程,避免账号切换时重复对请求体执行 JSON model 替换。
2026-06-10 09:58:19 +08:00
Wesley Liddick
f0748b98f6
Merge pull request #3173 from jianjianai/fix/idempotency-utf8-truncation
...
fix idempotency response utf8 truncation / 响应缓存按字节截断时可能切断 UTF-8 多字节字符的问题。
2026-06-10 09:58:09 +08:00
Wesley Liddick
dd709f5985
Merge pull request #3181 from codeQuest-fly/fix/gateway-upstream-error-double-write
...
fix: avoid double-writing error frame on non-stream upstream errors
2026-06-10 09:26:18 +08:00
Wesley Liddick
5cb17fdc4f
Merge pull request #3184 from touwaeriol/fix/bedrock-beta-and-error-passthrough
...
fix(gateway): prevent error passthrough double-write and Bedrock beta token leakage
2026-06-10 09:00:21 +08:00
shaw
d662c97302
feat: claude-fable-5
2026-06-10 08:58:06 +08:00
jjaw
2c27548b82
优化调度日志循环开销
2026-06-10 01:03:01 +08:00
jjaw
30c00a91d8
优化账号分组调度索引
2026-06-10 00:59:50 +08:00
erio
448936d965
fix(ci): fix gofmt, errcheck, and test for supported context-management beta token
2026-06-10 00:46:19 +08:00
erio
72c112164e
fix(frontend): bedrock_cc_compat toggle not persisting on reload
...
apiToForm read bedrock_cc_compat as Record<string, boolean> (nested map)
but formToAPI saves it as a plain bool. Reading true["anthropic"] returns
undefined, so the toggle always appeared off after save.
Align the read path with the write path: fc?.bedrock_cc_compat === true.
2026-06-10 00:18:28 +08:00