问题描述
openai_responses 格式的 Claude 供应商,在上游要求 store: false 时无法使用:cc-switch 转换后的请求不带 store 字段,上游直接返回 400,且用户没有任何配置手段可以补上这个字段。
一些 OpenAI 兼容中转服务的 /v1/responses 端点强制要求请求显式携带 store: false(不允许在服务端保存对话状态)。对这类上游,直接 curl 验证如下:
$ curl -s $BASE_URL/v1/responses -H "Authorization: Bearer $KEY" \
-d '{"model": "gpt-5.5", "stream": true, "input": "..."}'
{"error":{"message":"请求参数错误: {\"detail\":\"Store must be set to false\"}","type":"request_error",...}}
同一请求加上 "store": false 后一切正常,工具调用也能返回原生的 function_call 事件。也就是说上游本身没有问题,只差这一个字段。
原因
src-tauri/src/proxy/providers/transform_responses.rs 中,anthropic_to_responses 只在 is_codex_oauth 为 true 时注入 store: false:
if is_codex_oauth {
result["store"] = json!(false);
...
}
普通 openai_responses 供应商(meta.apiFormat = "openai_responses",非 codex_oauth)转换出的请求不含 store 字段。
桌面版(farion1231/cc-switch)自 v3.16.4 起提供了「本地代理请求覆盖」(自定义请求头 / 请求体覆盖,local_proxy_request_overrides),用户可以自行补一个 {"store": false};CLI 版目前没有对应功能,因此这条路彻底走不通。
期望行为
二选一(或都做):
- 为普通
openai_responses 供应商提供注入 store: false 的开关(例如 meta 里加一个字段);
- 移植桌面版的请求体覆盖功能,让用户可以在供应商配置里声明需要合并进上游请求的字段。
考虑到 Responses API 的 store 默认值是 true,而本地代理场景下几乎不存在希望上游保存状态的需求,也可以考虑直接对所有 openai_responses 请求默认发送 store: false(与 codex_oauth 路径一致)。
环境
- cc-switch-cli 5.9.0(Linux x86_64)
- 供应商配置:
app_type = claude,meta.apiFormat = "openai_responses"
- 上游:OpenAI 兼容中转服务,
/v1/responses 端点要求 store: false 且 stream: true
复现步骤
- 添加一个 Claude 供应商,API 格式选
openai_responses,上游指向一个要求 store: false 的 OpenAI 兼容服务;
- 开启本地代理并切换到该供应商;
- 在 Claude Code 中发起任意请求;
- 代理日志中该供应商的请求全部返回 400(
Store must be set to false)。
问题描述
openai_responses格式的 Claude 供应商,在上游要求store: false时无法使用:cc-switch 转换后的请求不带store字段,上游直接返回 400,且用户没有任何配置手段可以补上这个字段。一些 OpenAI 兼容中转服务的
/v1/responses端点强制要求请求显式携带store: false(不允许在服务端保存对话状态)。对这类上游,直接 curl 验证如下:同一请求加上
"store": false后一切正常,工具调用也能返回原生的function_call事件。也就是说上游本身没有问题,只差这一个字段。原因
src-tauri/src/proxy/providers/transform_responses.rs中,anthropic_to_responses只在is_codex_oauth为 true 时注入store: false:普通
openai_responses供应商(meta.apiFormat = "openai_responses",非codex_oauth)转换出的请求不含store字段。桌面版(farion1231/cc-switch)自 v3.16.4 起提供了「本地代理请求覆盖」(自定义请求头 / 请求体覆盖,
local_proxy_request_overrides),用户可以自行补一个{"store": false};CLI 版目前没有对应功能,因此这条路彻底走不通。期望行为
二选一(或都做):
openai_responses供应商提供注入store: false的开关(例如 meta 里加一个字段);考虑到 Responses API 的
store默认值是true,而本地代理场景下几乎不存在希望上游保存状态的需求,也可以考虑直接对所有openai_responses请求默认发送store: false(与 codex_oauth 路径一致)。环境
app_type = claude,meta.apiFormat = "openai_responses"/v1/responses端点要求store: false且stream: true复现步骤
openai_responses,上游指向一个要求store: false的 OpenAI 兼容服务;Store must be set to false)。