Expected an ID that begins with 'msg' — Codex
Quick fix
新建任务并迁移摘要,或让旧任务继续使用 Chat Completions 转换路径;永久修复方案仍待验证。
Symptom
Section titled “Symptom”Invalid 'input[7].id': 'resp_..._msg'. Expected an ID that begins with 'msg'.CC Switch 的 Responses → Chat Completions 转换路径会为 assistant message 合成以 `resp_` 开头的 ID,例如 `resp_*_msg`,Codex 随后把该输出项持久化到旧任务历史中。切换到严格校验的原生 Responses provider 后,Codex 会在 `input[]` 中重放这个 ID,而原生上游要求 message item ID 以 `msg_` 开头,因此返回 HTTP 400。有效的 provider 配置和新任务不受已持久化历史的影响。
该 issue 仍为 open,尚无经维护者确认的正式修复。提议的永久方案包含两层:所有转换路径以后生成 `msg_*` ID;原生 Responses passthrough 对旧历史中的 `type="message"` 项移除不以 `msg_` 开头的 `id`。后续评论还报告了 relay 合成的 reasoning ID 导致 HTTP 404,以及工具调用 ID 含冒号导致另一种 HTTP 400;这些属于同类历史污染变体,但不是本页 symptom 所示错误。
立即恢复工作时,新建 Codex 任务并把旧任务摘要迁移过去;新任务不会携带已经持久化的 `resp_*_msg` 项。
如果必须保留旧任务,让该任务继续使用原来的 Chat Completions 转换路径,不要切换到原生 Responses provider。
等待或测试包含两层修复的构建:转换层统一生成 `msg_*` message ID;原生 Responses passthrough 仅对顶层 `input[]` 中 `type="message"` 且不以 `msg_` 开头的项删除 `id`,并保留有效 `msg_*` ID及其他类型项的 ID。该方案在 issue 中仍是提议,尚未报告最终验证结果。
Affected Versions
Section titled “Affected Versions”Source Issues
Section titled “Source Issues”本页汇总自 1 个真实 issue
- 为什么新任务可以正常请求,旧任务却一直失败?
- 旧任务已经保存了转换路径生成的 `resp_*_msg` ID,并会在继续任务时重放;新任务没有这条受污染的历史记录。
- 修改 provider 配置或降级 CC Switch 能修复旧任务吗?
- 不能修复已经写入任务历史的非法 ID。临时办法是新建任务并迁移摘要,或让旧任务继续走 Chat Completions 转换路径。
- 只把以后生成的 message ID 改成 `msg_*` 就够了吗?
- 不够。这样只能阻止新的历史污染;现有旧任务还需要在原生 Responses passthrough 前清理 `type="message"` 项中的非法 ID。
- 清理 `resp_*_msg` 后又出现 reasoning item 的 HTTP 404 怎么办?
- 评论报告 relay 合成的 reasoning ID 也可能被原生上游当作不存在的已存储项。该变体需要额外的 reasoning item 兼容清理,不能仅靠 message ID 修复解决。
- 为什么工具调用 ID 中的冒号也会导致旧任务重放失败?
- 评论报告严格上游只接受字母、数字、下划线和短横线,而 `fc_exec_command:0` 等合成 ID 含冒号,因此会触发独立的 `invalid_value` 错误。
这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。