wucm667
dfdbc27709
fix(openai): default missing passthrough instructions
2026-07-31 18:55:15 +08:00
wucm667
beeb2f989b
test(settings): include compact home in API contracts
2026-07-31 18:34:13 +08:00
wucm667
77d4df9544
test(grok): check filter body close error
2026-07-31 18:34:11 +08:00
wucm667
d6467f6eb0
fix(images): decode data URLs during task offload
2026-07-31 15:04:56 +08:00
wucm667
baaae8e121
fix(grok): filter billing ping response events
2026-07-31 12:31:45 +08:00
wucm667
739c0ff9c5
feat(home): add compact home page preset to avoid abuse classification
...
- Add compact_home_enabled setting to provide a minimal landing page
- Preserves custom home_content priority over compact mode
- Renders only site identity, navigation, and login/dashboard link
- Avoids marketing copy that triggers anti-fraud systems
- Includes focused backend/frontend tests and i18n support
Fixes #5065
2026-07-30 16:28:19 +08:00
wucm667
fb40211305
fix(frontend): correct subscription expiry labels
2026-07-30 12:47:05 +08:00
wucm667
7b6111f2f7
fix(subscription): align quota windows with subscription term
2026-07-30 02:37:14 +08:00
wucm667
352b21f4e2
fix(claude): relax marker to tolerate category element in classifier output
...
Real claude-cli/2.1.220 samples insert <category>...</category> between
</block> and <reason>, breaking the previous literal marker.
Also fix an unchecked type assertion in the test suite.
2026-07-29 23:25:02 +08:00
wucm667
ac90355a87
fix(account): skip unschedulable token refresh candidates
2026-07-29 18:35:56 +08:00
wucm667
54b1f8f6b3
fix(anthropic): recognize auto mode classifier
2026-07-29 16:55:42 +08:00
wucm667
3c62b5ca85
fix(openai): preserve web search for API-key Codex clients
2026-07-27 18:42:34 +08:00
wucm667
5c471485ab
fix(config): honor explicit CONFIG_FILE path
...
Make CONFIG_FILE select an explicit config for both full loading and lightweight address lookup, with regression tests.
2026-07-27 06:20:11 +08:00
wucm667
16dd3d8ee6
fix(frontend): adapt available channels for mobile
2026-07-26 16:26:25 +08:00
wucm667
56b5f0df68
fix(security-audit): reject unavailable prompt config
2026-07-26 14:33:59 +08:00
wucm667
0875143d98
fix: show optional affiliate code on registration
2026-07-26 02:47:35 +08:00
wucm667
d11b838702
fix: show routed user in usage filters
2026-07-26 02:25:54 +08:00
wucm667
30d146e8b5
fix(frontend): adapt affiliate copy controls for mobile
2026-07-25 04:27:19 +08:00
wucm667
41456b69dd
fix(frontend): upgrade postcss for security audit
2026-07-24 22:37:42 +08:00
wucm667
41f12e874d
fix(grok): drop orphaned Responses tool choice
2026-07-24 16:25:53 +08:00
wucm667
b5979050f3
fix(frontend): upgrade postcss for security audit
2026-07-24 08:33:58 +08:00
wucm667
8276fdf605
fix: resolve Gemini compat test lint
2026-07-24 03:00:26 +08:00
wucm667
4dc0aedbfe
fix(gemini): preserve image output in chat completions
2026-07-24 02:42:23 +08:00
wucm667
51f354f5c2
fix(grok): avoid pool cooldown on 5xx
2026-07-23 12:24:30 +00:00
wucm667
44093579e9
fix(billing): normalize channel pricing model names
2026-07-22 20:25:27 +00:00
wucm667
e51e61008a
[verified] fix: preserve scheduler quota metadata
2026-07-21 10:41:11 +08:00
wucm667
addd5ef1dc
[verified] fix: align sync cache billing after failover
2026-07-20 22:43:11 +08:00
wucm667
a2acbf553b
fix(handler): avoid cache billing on same-account retry
2026-07-20 02:20:58 +08:00
wucm667
01062c3244
fix(openai): correct buffered messages content type
2026-07-19 22:28:49 +08:00
wucm667
510ee451bd
feat: support GitHub token for update checks
2026-07-19 11:02:56 +08:00
wucm667
1db10dc559
fix(subscription): renew expired admin assignments
2026-07-18 14:42:22 +08:00
wucm667
8b75dd5576
docs: clarify OpenAI WS mode router prerequisite
2026-07-18 08:37:15 +08:00
wucm667
2594950993
fix: classify transient account exhaustion as 503 instead of 404
2026-07-17 22:10:18 +08:00
wucm667
08e994ad86
fix(frontend): lazy-load Stripe payment dependency
2026-07-16 23:21:58 +08:00
wucm667
d22f4d9b5b
fix(openai): use image tool usage for OAuth billing
2026-07-16 08:48:43 +08:00
wucm667
56650d6aed
fix(openai): normalize Responses Lite reasoning context
2026-07-15 22:23:57 +08:00
wucm667
2fe7df9b81
fix(openai): reject image models on chat completions
2026-07-15 22:22:51 +08:00
wucm667
b28ac90364
fix(antigravity): preserve manually entered refresh token
2026-07-14 23:58:00 +08:00
wucm667
25e6688af6
[verified] fix: apply long-context pricing to account cost
2026-07-14 22:31:39 +08:00
wucm667
806bb23053
fix: add root Codex models alias
2026-07-14 17:16:24 +08:00
wucm667
6e2bb31281
fix(service): guard compact keepalive writer delegates
2026-07-11 08:52:46 +08:00
wucm667 and Claude Opus 4.8
4d4ba64bf7
fix(codex): 剥离续链 message item 的非法 item_* id
...
OpenAI OAuth 转发续链请求时,type=message 的 item 的 id 被客户端以
item_* 形式回放,但上游要求以 msg 开头,返回 400
"Expected an ID that begins with 'msg'",sub2api 随后向客户端返回 502。
客户端自动重试会不断重放同一份坏上下文,导致连续失败。
filterCodexInputWithOptions 在 PreserveReferences=true 路径下为
type=message 增加与 #3785 (fd64d07e6 ) 平行的 id 前缀检查:非 msg 开头
即删除。合法的 msg* id 原样保留,不改写 item_* 为 msg_*,因为改写出的
id 未必对应真实上游对象。
原 TestFilterCodexInput_NonToolCallItemKeepsID 以 message + item_msg_001
断言"保留 id",该行为已被上游拒绝,改用 web_search_call 覆盖同一意图。
Fixes #3981
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-10 23:32:34 +08:00
wucm667
1da3501af5
fix: apply error passthrough to OpenAI response.failed streams
2026-07-09 17:59:38 +08:00
wucm667
54859022aa
feat: show used quota in groups list
2026-07-09 11:45:59 +08:00
wucm667
7a11b39d6d
fix(api-key): check usage log rows close
2026-07-08 15:36:12 +08:00
wucm667
e0d149d511
feat(api-key): show last used IP
2026-07-08 15:26:54 +08:00
wucm667
a23a263513
feat(payment): preview subscription CNY charge in plan editor
2026-07-06 17:52:53 +08:00
wucm667
f881ff7cb0
fix(models): support non-v1 OpenAI models URLs
2026-07-06 17:46:44 +08:00
wucm667
b408edf97b
fix(payment): convert subscription CNY pay amount
2026-07-06 10:56:43 +08:00
wucm667
aee9a7ba98
fix(usage): add UTF-8 BOM to CSV export
2026-07-05 08:36:15 +08:00
wucm667
41cdd438d7
fix(gateway): honor Anthropic custom models list
2026-07-05 08:35:34 +08:00
wucm667
b23475ac0c
fix(antigravity): refresh server-invalidated tokens
2026-07-05 08:34:34 +08:00
wucm667
4dd3aee5c2
fix(openai): use mapped billing model for responses
2026-07-04 10:04:42 +08:00
wucm667
6bd248fd1f
fix(admin): avoid merging Codex access-only imports
2026-07-04 09:53:01 +08:00
wucm667
d0a1443a41
fix(antigravity): allow oauth 401 auto recovery
2026-07-03 15:21:53 +08:00
wucm667
93a3bf3077
Fix refund pending finalization gaps
2026-06-30 10:19:50 +08:00
wucm667
7316d83027
fix(payment): 区分退款 pending 并收敛匿名查单
2026-06-30 10:00:48 +08:00
wucm667
88ca0c1d13
fix(payment): 显示订阅 CNY 换算实付金额
2026-06-27 12:15:39 +08:00
wucm667
ac6e36f96b
feat(cli): sub2api-admin 支持 SUB2API_JWT 认证回退
2026-06-26 14:11:25 +08:00
wucm667
40c8252734
fix(apicompat): 规范化 custom 工具 schema
2026-06-26 14:08:03 +08:00
wucm667
650c50e34b
fix(antigravity): add project fallback for standard tier
2026-06-25 16:29:33 +08:00
wucm667
55242ffac1
fix(admin): 订单金额币种符号读取 currency 字段
2026-06-25 16:23:45 +08:00
wucm667
2b49d662cc
fix(openai): dedupe passthrough function call args
2026-06-25 16:18:11 +08:00
wucm667
c6f375d3ab
fix(payment): 订阅订单应用充值汇率换算
2026-06-22 10:33:26 +08:00
wucm667
9f5b57fc96
fix(billing): 防止余额计费持续透支
2026-06-22 10:30:27 +08:00
wucm667
ecedc7c8d3
fix(auth): enforce email bind suffix whitelist
2026-06-19 21:17:45 +08:00
wucm667
ab9987b2e2
fix(gateway): fail over on non-JSON 2xx responses
2026-06-15 11:04:24 +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
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
wucm667
da30c59923
fix(openai): fail over image server errors
2026-06-09 13:57:45 +08:00
wucm667
a67b10f468
fix(gateway): anchor responses fallback to input
2026-06-09 13:53:19 +08:00
wucm667
36721d35a8
feat(openai): cool down image rate limits by capability
2026-06-05 18:12:33 +08:00
wucm667
8e27ff20af
fix(openai): handle missing messages stream terminal
2026-06-05 18:11:23 +08:00
wucm667
134687782c
build(go): bump toolchain to 1.26.4
2026-06-03 09:48:46 +08:00
wucm667
c40a74d983
fix(risk-control): exempt admins from moderation auto-ban
2026-06-03 09:33:37 +08:00
wucm667
04deb819b0
fix(payment): use trade_status for EasyPay query
2026-06-02 14:59:18 +08:00
wucm667
c8cd91e3ce
test(openai): 覆盖 failover 请求体重映射
2026-06-01 10:19:24 +08:00
wucm667
bf3787de1f
fix(gateway): allow Claude Code count_tokens
2026-05-31 08:43:20 +08:00
wucm667
b65dde634b
fix(usage): 修正 OpenAI 5h 用量百分比语义
2026-05-31 08:39:37 +08:00
wucm667 and Claude Opus 4.8
c256a5441a
feat(admin): 账号用量窗口 5h/7d 增加说明 tooltip
...
在账号管理列表"用量窗口"列表头增加一个说明性 HelpTooltip,
解释 5h / 7d 是上游账号(如 OpenAI ChatGPT、Claude)官方的滚动
用量窗口限制,由上游设定、非 sub2api 配置、与映射模型无关,且
窗口滚动到期后自动重置、无法在 sub2api 端解除。
复用现有 HelpTooltip 组件(teleport 到 body,避免表格裁剪),
单个 ⓘ 图标置于列表头,避免每行重复。新增 i18n key
admin.accounts.usageWindowsHint(zh/en 同步)。纯展示说明,
不改用量计算与后端逻辑。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-05-29 20:57:29 +08:00
wucm667 and Claude Opus 4.7
c9caadb378
fix(account): address second-round review on quota auto-pause
...
- TopK initial filter now drops quota-paused accounts: fold the quota check
into isAccountRequestCompatible so session-hash, TopK pool, and per-candidate
rechecks all skip paused accounts. Previously the candidate pool was built
without the quota check, so paused accounts could fill TopK and leave the
scheduler returning "no available accounts" even with healthy ones available.
- Add per-account explicit disable flags auto_pause_5h_disabled /
auto_pause_7d_disabled with toggles in EditAccountModal. Without these,
leaving the account threshold blank silently falls back to the global default,
so admins could not exempt a single account once a global default existed.
Disable is per-window: an account can opt out of 5h auto-pause while still
honoring 7d. Schedule snapshot whitelist includes the new fields, i18n EN/ZH
updated, threshold-hint text revised to explain "blank = global default".
- Move quota auto-pause settings off the request hot path: replace the per-repo
TTL+singleflight sync DB read with a per-SettingService stale-while-revalidate
in-memory snapshot. Get is non-blocking (atomic.Pointer load + async refresh
on staleness); writes via UpdateOpsAdvancedSettings push directly into the
cache through an injected sink; wire warms the cache at startup. Adds Warm
(sync) for tests/init and SetOpenAIQuotaAutoPauseSettings (sink target).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-29 14:32:45 +08:00
wucm667 and Claude Opus 4.8
8b7a822706
fix(account): address review on OpenAI quota auto-pause
...
- gate previous_response_id sticky path with quota auto-pause check at both
the snapshot and DB-recheck stages (previously bypassed, #1 )
- skip pausing when the usage window already reset to avoid a stale stuck-pause;
carry codex_*_reset_at / reset_after_seconds / codex_usage_updated_at through
the scheduler snapshot whitelist (#2 )
- remove the incomplete limit mode; percentage threshold only (#3 )
- add global default 5h/7d threshold inputs to the Ops settings dialog with
validation and en/zh i18n (#4 )
- downgrade account_auto_paused_by_quota log from Info to Debug; it fires
per-candidate on the scheduling hot path (#5 )
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-05-29 12:20:30 +08:00
wucm667
ead471d64b
feat(account): 支持按 5h/7d 用量阈值自动暂停账号调度
2026-05-29 10:47:47 +08:00
wucm667
415d08f255
fix(scheduler): add sticky health escape
2026-05-29 10:25:26 +08:00
wucm667
b15375dfb4
fix(admin): handle already up-to-date updates
2026-05-28 17:27:01 +08:00
wucm667
8f3b211997
ci: retrigger after transient GitHub Actions codeload outage
2026-05-27 09:34:58 +08:00
wucm667
a31b507484
fix(scheduler): 模型404仅冷却账号模型组合
2026-05-26 20:29:48 +08:00
wucm667
b6a38ddab7
feat(admin): 账号管理列表新增创建时间列
2026-05-26 19:59:12 +08:00
wucm667
a9c7a3a095
fix(bedrock): strip context_management when beta is removed
2026-05-25 14:15:39 +08:00
wucm667
1b6a15b485
fix(db-pool): enforce connection lifetime floors
2026-05-23 15:04:24 +08:00
wucm667
199a5bcc69
fix(risk-control): Agent 工具循环中同一用户消息重复审计去重
...
末尾 role 检查方案:当 messages / input / contents 数组末尾一项不是用户消息
(而是 assistant、tool / function_call_output 等)时,直接跳过内容审计,
从而避免 Agent 工具循环中同一用户输入被反复审计、计费、写日志。
Fixes #2678
2026-05-22 14:54:06 +08:00
wucm667
ffd53343bb
fix(deps): 升级 js-cookie 修复安全审计
2026-05-22 13:55:27 +08:00
wucm667
0d5c6f7cc7
feat(risk-control): 内容审计支持按模型生效
2026-05-21 21:18:43 +08:00
wucm667
a5b9b68b76
feat(registration): 支持邮箱白名单后缀通配符
2026-05-21 21:02:26 +08:00
wucm667
ca60cede14
feat(account): 支持测试连接 Chat Completions 路径
2026-05-21 16:37:20 +08:00
wucm667
c4d7edba08
fix(apicompat): map developer role to system
2026-05-21 16:37:05 +08:00
wucm667
3263ca63c7
feat(redeem): add redeem code batch update
2026-05-20 16:08:41 +08:00
wucm667
22ff1acde3
fix(auth): 停用/删除分组后阻断 API Key
2026-05-20 15:52:00 +08:00