toggling Send User-Agent silently removes every unrelated custom header - cc-switch
Quick fix
在 OpenClaw 供应商编辑器中不要切换 Send User-Agent 开关;升级等待修复版本,该开关会整体覆盖或删除 headers 对象。
Symptom
Section titled “Symptom”enabling leaves only the default User-Agent header; disabling or an on/off round trip removes `headers` entirelycc-switch 的 OpenClaw 供应商编辑器中,Send User-Agent 开关的实现不是只增删 User-Agent 这一个请求头,而是对整个 headers 对象做破坏性更新:开启时用只含默认 User-Agent 的对象整体替换 headers,关闭时则直接删除整个 headers 对象。即使在保存前把开关开了又关(往返操作),丢失也会发生,且被改坏的配置会一路进入最终表单提交。 问题代码位于 useOpenclawFormState.ts 的破坏性 header 更新逻辑(L160-L169),经 ProviderForm.tsx 写入表单配置并进入提交载荷。Issue 作者在 3.20.4 源码(commit bfaaba16)上通过 jsdom 离线复现:14 个诊断测试中有 6 个保留性失败(开启、关闭、往返在 hook 层和最终提交层各失败一次);8 个对照通过,包括未触碰开关时的保存、无 headers 时开启、仅删 User-Agent、以及非 header 字段不受影响。该 hook 在当时 main 分支(commit 372b1698)上字节级一致,即 main 上同样存在。Issue 已关闭,但报告中未注明具体修复版本,作者建议的修法是:开启时把默认 User-Agent 合并进现有 headers,关闭时只删除 User-Agent、仅当 headers 变空时才删掉整个对象。
在修复版本发布前,编辑 OpenClaw 供应商时不要触碰 Send User-Agent 开关——只要不开关它,直接打开并保存会保留原有自定义请求头(issue 的对照测试已确认此路径无损)。
如果已经切换过开关导致 headers 丢失,重新在供应商配置中手动补回被删除的自定义请求头(如 X-Fixture、X-Other 等),保存后避免再次切换该开关。
升级到包含修复的 cc-switch 版本。issue 作者建议的正确行为是:开启时把默认 User-Agent 合并进现有 headers,关闭时只移除 User-Agent、仅当 headers 为空时才删除整个对象;请在升级后用一个不重要的供应商配置验证开关往返后自定义请求头是否仍然保留。
Affected Versions
Section titled “Affected Versions”Source Issues
Section titled “Source Issues”本页汇总自 1 个真实 issue
- 只打开编辑器保存、不动这个开关,自定义请求头会丢吗?
- 不会。issue 的对照测试确认:未触碰开关时的水合与保存会保留原始 headers;只有开启、关闭或开启后再关闭才会触发丢失。
- 这个 bug 会影响 headers 以外的配置字段吗?
- 不会。8 个通过的对照测试中包含非 header 配置字段的保留验证,受影响的只有 headers 对象本身。
- 配置里原本没有自定义请求头时,开启这个开关有问题吗?
- 没有。对照测试覆盖了"缺失 headers 后开启"的场景,该路径通过;只有已存在其他自定义请求头时才会被覆盖丢失。
这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。