xlplbo
|
0d02000592
|
fix(openai): 非高级调度按 previous_response 路由到持有响应的账号
|
2026-09-20 19:28:13 +08:00 |
|
xlplbo
|
8d88b66668
|
fix(openai): 补齐非高级调度选号决策标签
|
2026-09-20 19:27:53 +08:00 |
|
xlplbo
|
763443abf2
|
fix(openai): 改写 Codex turn metadata 时保留非 ASCII 转义
|
2026-09-20 19:27:47 +08:00 |
|
xlplbo
|
76b3f3c7cf
|
docs(ui): 精简 OpenAI WS 模式提示
|
2026-09-12 17:38:55 +08:00 |
|
xlplbo
|
db15ddf07f
|
docs(ui): 区分 OpenAI WS 开关与连接模式说明
|
2026-09-12 16:54:22 +08:00 |
|
xlplbo
|
5d5b395d00
|
docs(ui): 完善 OpenAI WS 模式说明
|
2026-09-12 16:32:17 +08:00 |
|
xlplbo
|
cf3aca6e3b
|
fix(ui): 按 OpenAI WS 模式显示链路提示
|
2026-09-12 16:28:04 +08:00 |
|
xlplbo
|
956f4672e4
|
fix(openai-ws): 对齐 OpenAI 新版上下文池容量计算
|
2026-09-12 16:13:16 +08:00 |
|
xlplbo
|
7cf90c79d6
|
perf(openai): WS 连接池排队等待者按账号池变更重选连接
|
2026-09-12 13:01:43 +08:00 |
|
xlplbo
|
29371b0819
|
fix(openai-ws): ctx_pool 每账号连接上限系数默认值改为 5.0
|
2026-09-12 11:39:05 +08:00 |
|
xlplbo
|
4543ddc5c1
|
fix(openai): WS 执行作用域按 request_kind 分道
|
2026-09-11 13:37:59 +08:00 |
|
xlplbo
|
613722eee4
|
fix(openai): HTTP 转发的执行作用域改从原始请求计算
|
2026-09-11 11:36:29 +08:00 |
|
xlplbo
|
d0ca057ca4
|
fix(openai): WS 会话被抢占时先发关闭帧再取消
|
2026-09-11 10:25:50 +08:00 |
|
xlplbo
|
e4c369bd56
|
fix(openai): HTTP 经 WS 池转发按执行作用域取会话状态键
|
2026-09-11 10:25:50 +08:00 |
|
xlplbo
|
bed1e3c362
|
fix(openai): 重试强制新建连接并放宽轮次预检超时
|
2026-09-10 20:35:53 +08:00 |
|
xlplbo
|
a5b07b2960
|
feat(openai): WS 连接池常驻读循环应答上游 ping
|
2026-09-10 20:35:53 +08:00 |
|
xlplbo
|
df8eceba0c
|
fix(apicompat): chat 桥保留 Codex agent_message 任务正文
|
2026-09-10 20:25:38 +08:00 |
|
xlplbo
|
95a04c8dff
|
test(apicompat): additional_tools 走 chat 桥的回归用例
|
2026-09-10 19:50:26 +08:00 |
|
xlplbo
|
cd1ee1d1ad
|
fix(openai): WS 接入会话状态改用执行作用域键
|
2026-09-10 17:50:24 +08:00 |
|
xlplbo
|
9e7c2d713c
|
fix(openai): WS 会话抢占改用执行作用域键
|
2026-09-10 17:50:24 +08:00 |
|
xlplbo
|
06b61ba96f
|
feat(openai): 解析 codex 线程标识派生 WS 执行作用域
|
2026-09-10 17:50:23 +08:00 |
|
 xlplboandClaude Fable 5.1
|
b42157a725
|
test(service): 修正 Windows 下两例环境相关用例
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SAJmqcVA9TLacTCD1bLh4i
|
2026-09-07 23:21:29 +08:00 |
|
 xlplboandClaude Fable 5.1
|
335fcdc1d6
|
fix(plugin): 提交插件包前先关闭 ZIP 读取器
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SAJmqcVA9TLacTCD1bLh4i
|
2026-09-07 23:21:29 +08:00 |
|
 xlplboandClaude 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 |
|
 xlplboandClaude 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 |
|
 xlplboandClaude 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 |
|
xlplbo
|
eb4d005031
|
Merge remote-tracking branch 'upstream/main'
|
2026-07-10 20:46:38 +08:00 |
|
 xlplboandClaude Fable 5
|
f1082bb78f
|
fix(apicompat): namespace 摊平名撞名时显式拒绝请求
摊平名与顶层 function/custom 工具撞名、或跨 namespace 摊平出同名时,
chat 上游无法按 namespace 区分调用归属:此前重复声明照发上游、回程
固定命中其中一条映射,调用可能被还原到错误工具。这类请求在原生
Responses 上游合法,歧义由摊平转换制造且不可消除,改为在请求转换
阶段直接报错(网关返回 400 invalid_request_error 并点名冲突双方);
同一 (namespace, 子工具) 的重复声明去重后不拒绝。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NWQyEgFKKbdve67G6qCoAU
|
2026-07-10 17:38:48 +08:00 |
|
 xlplboandClaude Fable 5
|
7942338328
|
fix(apicompat): 回程还原 namespace 子工具调用,修复 Codex MCP 工具 unsupported call
Codex 0.14x 将 MCP 工具声明为 namespace 工具,chat 桥去程摊平为
"<namespace>__<name>" function 工具后,回程仅原样回传平铺名的
function_call 项;codex 按 namespace+name 路由查不到该名字,所有
MCP 工具调用被判为 unsupported call。
- NamespaceToolNames 构建摊平名 →(namespace, 子工具名)反查表
(摊平名超长带截断哈希,无法按字符串切分还原)
- 非流式/流式回程命中映射时还原为裸子工具名 + namespace 字段,
ResponsesOutput 新增 Namespace 字段并同步 wire 层白名单
- 回退桥入口将映射与 CustomTools/ToolSearchDeclared 一并穿入
已在测试机经 codex exec + MCP server 端到端验证。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NWQyEgFKKbdve67G6qCoAU
|
2026-07-10 17:38:17 +08:00 |
|
 xlplboandClaude Fable 5
|
18e26c127c
|
Merge remote-tracking branch 'upstream/main'
解决 backend/internal/service/openai_gateway_responses_chat_fallback.go 冲突:
将本地 tool_search/custom 工具改动(customTools/toolSearch 穿参与流状态标记)
移植到上游重构后的 CC 公共管线;同步适配上游新增调用点
openai_gateway_messages_chat_fallback.go 的 ChatCompletionsResponseToResponses 签名。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F8zMzeFAumSddraEw1FUeG
|
2026-07-10 09:27:48 +08:00 |
|
xlplbo
|
27e29f0562
|
feat(apicompat): 添加 tool_search 支持,增强工具调用处理逻辑
|
2026-07-07 19:19:35 +08:00 |
|
xlplbo
|
75fb3c41c2
|
fix(apicompat): responses→chat 桥支持 custom 工具,修复 Codex exec 丢失
Codex 0.14x 的核心执行工具 exec 是 type=custom(freeform)工具,
responsesToolsToChatTools 丢弃所有非 function 工具,导致模型工具列表中
没有 exec、无法执行任何命令;SSE 序列化层 responsesItemWire 也缺少
custom_tool_call 分支,即使产出该类型 item,call_id/name/input 也会被
白名单剥离。
- custom 工具降级为单一 input:string 参数的 function 工具
- 回程(非流式+流式)按名字还原 custom_tool_call 项/事件
- 历史 custom_tool_call / custom_tool_call_output 项转换(此前被跳过)
- responsesItemWire 补 custom_tool_call 分支
- tools 全部被丢弃时不再转发 tool_choice(修复上游 400
"'tool_choice' is only allowed when 'tools' are specified")
feat(apicompat): chat 桥补齐 tool_search/namespace/字符串工具声明
对齐参考实现(cc-switch transform_codex_chat.rs)的工具类型覆盖:
- tool_search → 固定 function 代理工具(query 必填/limit 可选),
历史项 tool_search_call/tool_search_output 一并转换
- namespace → 子 function 工具摊平为 <namespace>__<name>,
超 64 字符截断加 sha256 短哈希;历史项带 namespace 字段时同规则摊平
- tools: ["name"] 字符串简写按 custom 工具解析
fix(apicompat): 工具调用宣告延迟到类型可判定,兼容 name 迟到的上游
output_item.added 的 custom/function 判定依赖工具名。名字晚于首个分片
到达时,此前会按 function_call 宣告造成 added/done 项类型不一致。
改为存在 custom 工具且名字未到时延迟宣告,宣告时补发已累积的参数增量;
请求无 custom 工具时行为不变。
PR 标题与正文(可直接粘贴)
标题:fix(apicompat): responses→chat 桥丢弃 custom 工具导致 Codex 无法执行命令
正文:
## 问题
OpenAI APIKey 账号接入仅支持 /v1/chat/completions 的第三方上游
(DeepSeek/GLM/Kimi 等)时,Codex 0.14x 客户端文本对话正常,但无法执行
任何命令:exec 调用全部 "aborted",spawn_agent 派出的子智能体永远卡在
running,多轮后模型自述"环境无法执行文件系统命令"放弃。
## 根因
Codex 0.14x 的核心执行工具 exec 是 Responses API 的 custom(freeform)
工具,而非普通 function:
{"type": "custom", "name": "exec", "format": {"type": "grammar", ...}}
两处缺陷叠加:
1. `responsesToolsToChatTools` 丢弃所有非 function 工具
(chatcompletions_responses_bridge.go),模型工具列表中从未出现 exec;
2. SSE 序列化 `responsesItemWire` 按 item 类型白名单重组字段,无
custom_tool_call 分支,call_id/name/input 会被剥离
(responses_stream_event_wire.go)。
次生缺陷:工具全部被丢弃时 tool_choice 仍被转发,部分上游报 400
"'tool_choice' is only allowed when 'tools' are specified"。
## 改动
(三个提交的要点清单,见各提交说明)
设计与 cc-switch 的 Codex chat 转换层(transform_codex_chat.rs /
streaming_codex_chat.rs)对齐:custom 工具降级为 {"input": string}
function 工具;custom 调用的参数增量不可流式还原为自由文本,缓冲至
收尾一次性下发 custom_tool_call_input.delta/done。
## 测试
- 新增 17 个单元测试:请求工具转换、tool_choice 兜底、历史项转换、
非流式/流式回程还原、wire 序列化字段完整性、name 迟到宣告、命名摊平
- `go test ./internal/pkg/apicompat/...` 与 service 相关测试全绿
- 真机验证:Codex CLI 0.142.5 → 本桥 → GLM/DeepSeek 系 chat-only 上游,
exec 实际执行命令并多轮续作正常
## 影响面
仅影响 "APIKey 账号 + 判定不支持 Responses" 的 chat 直转路径:
- OAuth 账号与透传路径不经过本桥(透传为字节级原文转发)
- CC→Responses 反方向仅构造 ResponsesRequest,新增字段带 omitempty
且不赋值,序列化输出不变
- 探测逻辑未动,路由判定不变
- 共享类型改动均为增量容错(新字段 omitempty;UnmarshalJSON 只新增
字符串工具的解析成功路径)
|
2026-07-07 16:23:44 +08:00 |
|