Wesley Liddick
fbc3f42a22
Merge pull request #4138 from fengshao1227/fix/read-tool-args-streaming
...
fix(apicompat): Read 工具参数实时流式发送,不再依赖 .done 事件
2026-07-13 14:14:08 +08:00
Wesley Liddick
98cc641008
Merge pull request #4134 from yan9651688/fix/usage-window-pagination-local-dates
...
fix: align usage windows, pagination offsets, and local dates
2026-07-13 14:13:34 +08:00
Wesley Liddick
daf0b99dcb
Merge pull request #4130 from Drswith/fix/web-static-asset-cache-headers
...
fix(web): 为嵌入式前端静态资源设置长期 Cache-Control
2026-07-13 14:13:21 +08:00
Wesley Liddick
90bff0ea17
Merge pull request #4050 from bestony/perf/keys-last-used-ip-query
...
perf(keys): bound latest IP lookup per key
2026-07-13 14:13:11 +08:00
Wesley Liddick
d8fa425a27
Merge pull request #4142 from fengshao1227/fix/streaming-stop-reason-and-content-filter
...
fix(apicompat): 流式 Anthropic max_tokens 截断语义 + content_filter finish_reason
2026-07-13 14:13:00 +08:00
li
b6427d4ec0
fix(apicompat): 流式 Anthropic max_tokens 映射为 incomplete + content_filter 映射为 finish_reason
2026-07-13 12:08:32 +08:00
li
a5d40c9845
fix(apicompat): Read 工具参数实时流式发送,不再依赖 .done 事件
...
Fixes #4114
2026-07-13 11:47:18 +08:00
Heatherm Huang
b0441ca5aa
fix(grok): support upstream model sync for API keys
2026-07-13 11:46:52 +08:00
yan9651688
3605a316af
Keep usage ranges consistent across API and dashboards
...
Expose the active weekly subscription window through /v1/usage, calculate offsets with the same normalized page size used by queries, and keep user-facing date ranges on the browser's local calendar date.
Constraint: Preserve existing response fields and avoid new dependencies
Rejected: Keep duplicate inline date formatters | a shared local-date utility prevents the same UTC regression in both views
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Keep Offset and Limit based on the same normalized page size
Tested: go test ./internal/pkg/pagination ./internal/handler; go vet ./internal/pkg/pagination ./internal/handler; frontend 923 tests; pnpm typecheck; pnpm lint:check; pnpm build
Not-tested: Live API request against a deployed subscription
Related: #4121
2026-07-13 11:35:46 +08:00
Drswith
1e97e4cee4
fix(web): set long-lived Cache-Control for embedded static assets
...
Direct Go/Docker deployments were serving Vite-hashed /assets without
Cache-Control, so browsers re-downloaded the console on every visit.
Align with deploy/Caddyfile while keeping index.html on no-cache.
Closes #4129
2026-07-13 11:14:15 +08:00
github-actions[bot]
a1930ea6f2
chore: sync VERSION to 0.1.152 [skip ci]
2026-07-13 02:53:05 +00:00
Wesley Liddick
b73d8c3efe
Merge pull request #4009 from heathermhuang/codex/fix-recent-grok-issues
...
fix: expand Grok API, CLI, billing, and setup support
2026-07-13 10:36:11 +08:00
shaw
e5af699d0f
test(contract): groups/available 契约夹具补 web_search_price_per_call 字段
2026-07-13 10:21:44 +08:00
Heatherm Huang
f73031f436
test(grok): align scheduling reasons with upstream
2026-07-13 10:21:34 +08:00
shaw
64a2a31729
fix(billing): 修复复审发现的三处按次计费问题
...
- HIGH: GetByKeyForAuth 的 WithGroup 显式 Select 补 web_search_price_per_call 列,
否则 auth 快照里分组覆盖价恒为 nil,覆盖价/免费配置在实际计费中静默失效
- MEDIUM: 按次搜索倍率改用不含高峰因子的基础倍率(与 image/video 按次不变式
及分组表单价格预览承诺一致),calculateOpenAIRecordUsageCost 新增独立倍率参数
- LOW: 计费门槛从 <400 收紧为严格 2xx,1xx/3xx 透传不计费
2026-07-13 10:14:53 +08:00
Heatherm Huang
8a22dc7347
fix(grok): diagnose unavailable models by platform
2026-07-13 10:11:34 +08:00
Heatherm Huang
aeb34d2003
fix(grok): sanitize composer reasoning parameters
2026-07-13 10:11:33 +08:00
Heatherm Huang
c4ff604e93
test(grok): cover OAuth chat permission identity
2026-07-13 10:11:33 +08:00
Heatherm Huang
ce3f12bbff
test(grok): cover CLI identity at transport boundary
2026-07-13 10:11:33 +08:00
Heatherm Huang
f187f08ae3
fix(grok): harden OAuth routing and CLI version guard
2026-07-13 10:11:33 +08:00
Heatherm Huang
3375b4ed2b
fix(grok): route OAuth subscriptions through CLI proxy
2026-07-13 10:11:33 +08:00
Heatherm Huang
d9e466ad3a
feat(grok): support xAI API key accounts
...
Allow Grok API-key accounts in Responses forwarding and connection tests, expose creation and edit defaults in the dashboard, and document the supported setup.
2026-07-13 10:11:33 +08:00
Heatherm Huang
038b25c0b1
fix(grok): resolve recent integration issues
2026-07-13 10:09:53 +08:00
shaw
7cbb36f278
feat(billing): Codex alpha/search 网页搜索按次计费
...
- alpha/search 成功请求(上游 2xx)按次计费落 usage_logs(billing_mode=per_request),
上游错误透传/failover 不计费;使用 mandatory 池提交,池满同步兜底不丢扣费
- 单价默认 0.01 USD/次(官方 $10/1000 次),分组新增 web_search_price_per_call
覆盖价(0=免费,负数/留空=默认价),实际扣费叠加分组费率倍数(与 token 口径一致)
- 分组字段全链路:ent schema + 迁移 174 + 端口快照 v15 + admin 创建/更新 + DTO
- 前端分组表单(openai 平台)新增单次价格配置,实时预览应用当前倍率后的单次价格
- 该端点鉴权维持仅 OpenAI 分组(非 OpenAI 分组 404)
2026-07-13 09:54:51 +08:00
shaw
8d51364c3d
Merge remote-tracking branch 'origin/main' into feat/grok-prompt-cache-identity
...
# Conflicts:
# backend/internal/handler/endpoint.go
# backend/internal/service/openai_gateway_grok_test.go
2026-07-13 09:12:44 +08:00
Wesley Liddick
33b1d772f7
Merge pull request #4063 from yardbirds0/fix/codex-alpha-search
...
fix: 转发 Codex alpha/search 独立搜索端点
2026-07-13 08:58:01 +08:00
Wesley Liddick
1c214eaca4
Merge pull request #4059 from visa2/fix/openai-messages-codex-identity
...
fix(openai): restore Codex identity headers for OAuth Messages
2026-07-13 08:56:21 +08:00
Wesley Liddick
841481e051
Merge pull request #3971 from yardbirds0/codex/fix-remote-compaction-v2
...
fix: 保留 remote_compaction_v2 原生 Responses 请求链路
2026-07-13 08:54:53 +08:00
Wesley Liddick
2f4478fd32
Merge pull request #4019 from wucm667/fix/compact-keepalive-writer-nil-guard
...
fix(service): 补齐 compact keepalive writer nil 守卫
2026-07-13 08:54:31 +08:00
Wesley Liddick
877bee84a1
Merge pull request #4072 from jianjianai/codex/fix-upstream-review
...
修复 tool_search 参数解析与 compact writer 生命周期
2026-07-13 08:54:15 +08:00
superman2003
7050070aa3
fix(grok): route cacheable chat requests via responses
2026-07-12 11:50:56 +08:00
jjaw
f57d06d959
合并 compact writer 修复
2026-07-12 04:53:55 +08:00
jjaw
06af8115f7
修复 compact 心跳 writer 生命周期
2026-07-12 04:53:41 +08:00
jjaw
5015b7a1c1
修复 tool_search 参数对象反序列化
2026-07-12 04:53:34 +08:00
visa2
d5b47c2142
fix(openai): restore Codex identity for OAuth Messages
2026-07-11 20:47:52 +08:00
superman2003
1dedb2097d
fix(grok): persist quota exhaustion as rate limit
2026-07-11 20:41:32 +08:00
Tian Lee
52071d391b
fix(openai): 转发 Codex alpha/search 独立搜索端点
2026-07-11 20:31:33 +08:00
superman2003
0478fd3668
feat(grok): enable free OAuth prompt caching
2026-07-11 19:34:01 +08:00
Bestony
1c02158c2a
perf(migrations): index latest API key IP lookups
2026-07-11 17:32:06 +08:00
Bestony
80b7a8d4cb
perf(keys): bound latest IP lookup per key
2026-07-11 17:31:30 +08:00
Tian Lee
84bb7d0709
fix: 保留 remote_compaction_v2 原生 Responses 链路
2026-07-11 12:51:53 +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
Wesley Liddick
e316ebf528
Merge pull request #3989 from xlplbo/fix/codex-mcp-tools-bridge
...
fix(apicompat): 补齐 Codex 0.14x 工具链经 chat 回退桥的转换(custom/tool_search/namespace)
2026-07-10 22:09:25 +08:00
Wesley Liddick
07fac34713
Merge pull request #3991 from fengshao1227/fix/anthropic-usage-cache-creation-tokens
...
fix(apicompat): Responses↔Anthropic 转换补齐 cache_creation_input_tokens
2026-07-10 21:49:29 +08:00
Wesley Liddick
151b9265fc
Merge pull request #3994 from fengshao1227/fix/compact-keepalive-nil-pointer
...
fix(handler): opsCaptureWriter 释放后 nil pointer panic
2026-07-10 21:49:07 +08:00
github-actions[bot]
6c588bb950
chore: sync VERSION to 0.1.151 [skip ci]
2026-07-10 13:24:13 +00:00
xlplbo and Claude Fable 5
90e9d03dec
fix(apicompat): 强制选择 tool_search 的 tool_choice 降级为指向代理的 function 选择
...
tool_search 工具未被丢弃而是降级为同名 function 代理,此前 tool_choice 过滤
把它连同其他服务端工具类型一起静默丢弃,强制工具搜索被退化为自动选择,
违反调用方明确指定的工具选择语义。改为映射到指向代理的 function 选择;
未声明 type=tool_search 时无可指向的代理,维持丢弃。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01NWQyEgFKKbdve67G6qCoAU
2026-07-10 21:14:33 +08:00
xlplbo and Claude Fable 5
e2b68d1f90
fix(apicompat): tool_choice 仅转发实际存在于转换结果中的工具
...
此前只检查转换后是否还剩任意工具,不校验 tool_choice 指向的工具是否幸存:
强制选择被丢弃的服务端工具(如 web_search)或指向不存在名字时,选择项被
原样转发,chat 上游因 tool_choice 指向未声明工具而 400。改为具名选择项仅
在目标存在于转换后工具集时转发,服务端工具类选择项随工具本身丢弃;
"auto" 等字符串形式保持原样转发。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01NWQyEgFKKbdve67G6qCoAU
2026-07-10 21:06:45 +08:00
xlplbo and Claude Fable 5
a2cdaa6419
fix(apicompat): 内置 tool_search 与同名工具撞名时显式拒绝请求
...
tool_search 服务端工具降级后的代理 function 不能改名(codex 的模型侧按
tool_search 这个名字调用),与客户端声明的同名 function/custom 工具无法
区分:去程产生重复声明,回程会把普通工具的调用劫持还原成 tool_search_call。
与 namespace 摊平撞名的处理一致,在请求转换阶段显式报错(网关 400);
重复声明 type=tool_search 去重后只产出一个代理,不拒绝。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01NWQyEgFKKbdve67G6qCoAU
2026-07-10 21:06:26 +08:00