shaw
31dc8913ac
chore(outbox-cleanup): add 10s grace to defend against id-vs-commit race
...
PG sequences advance outside transactions, so a slow committer can hold
an id that gets surpassed by the watermark before its commit becomes
visible. Without the grace period, cleanup would delete such rows before
the snapshot poller ever sees them. 10s is a comfortable upper bound
on realistic enqueueSchedulerOutbox commit latency.
2026-06-16 11:57:32 +08:00
jjaw
cb14935e9a
fix: cleanup consumed scheduler outbox rows
2026-06-16 11:56:40 +08:00
shaw
4254dcb352
Merge pull request #3255 from jianjianai/fix1/outbox-scheduler-snapshot-coalesce
...
降低高频账号状态变更下的 outbox 写入压力 / safely coalesce scheduler outbox events
Migrations renumbered 151/152 -> 152/153 to avoid collision with #3232 .
2026-06-16 11:50:35 +08:00
shaw
1fdbe52f96
chore(migrations): renumber scheduler outbox dedup migrations 151/152 -> 152/153
...
#3232 (already merged) occupies 151. Renumber #3255 's dedup migrations to
avoid collision and keep linear ordering. Updated runner constant + tests.
2026-06-16 11:50:25 +08:00
jjaw
b3ec6288ad
fix: release scheduler outbox dedup on claim
2026-06-16 11:48:13 +08:00
jjaw
60cf89ae26
fix: recover scheduler outbox invalid dedup index
2026-06-16 11:48:13 +08:00
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