dsh-wb400-guard: Fixing WorkBuddy domestic gateway 400 / code 11128 at the fetch layer

前言

DeepSeek Harness(DSH)走 WorkBuddy 国内反代时,有些环境会在每轮对话第一步就失败,报错类似「请求被拦截,请重新发送」,标签为 INVALID_REQUEST,底层网关返回 code 11128。同一账号换 WorkBuddy 国际版(www.workbuddy.ai)往往正常,说明问题出在国内网关对请求体的校验,而不是模型额度或网络。

内核默认组装的 system prompt 里会带上多段与 DSH 生态相关的固定文案;国内网关 copilot.tencent.com 在服务端对 system(以及部分 assistant)消息做通道校验,命中规则即拒绝。在 llm/stream 或 system-prompt/assemble 上改已经试过,要么改不动深冻结的选项,要么误伤所有 provider。社区插件 dsh-wb400-guard(维护者 curo22,分类:联网工具)选择在宿主进程包装 globalThis.fetch,只对发往国内网关的请求做语义等价的指纹中性化,从而绕过 11128,又不改动 user / tool 消息及其他 API。

下面介绍它解决什么问题、如何工作,以及如何安装与配置。

这是什么

dsh-wb400-guard 是一条命令即可启用的 DSH 插件:在 fetch 层改写发往 copilot.tencent.com 的 chat 请求体里 system / developer / assistant 消息中的已知触发片段,使网关不再返回 11128,同时保持对模型而言的指令含义不变。运行时零 npm 依赖,需 Node ^22.19.0 || >=24.0.0,许可证 MIT,当前资料中版本为 0.1.7。

典型失败表象(资料中的原文包装)如下:

本轮运行失败 400: {"message":"workbuddy upstream client (http 400): 请求被拦截,请重新发送","type":"client","code":"client"}

网关侧原始错误形态为:

{"code":11128,"msg":"Illegal API invocation from an unapproved channel"}

是否需要安装:对照现象

资料给出一张快速对照表,前三条同时命中时,基本可认定是本文档针对的问题:

现象 是否命中
报错含「请求被拦截,请重新发送」,标签 INVALID_REQUEST 是
换国际版模型正常,换回国内版失败 是
第一步就挂,没有完整回复 是
换账号、模型、机器症状相同 是
WorkBuddy 官方客户端手动聊天正常 是
429 或「usage exceeds frequency limit」 否(额度)
11101 或「Non-stream chat request」 否(非流式)
fetch failed / 502 否(网络)

触发来源(插件为何要改四处)

国内网关的拦截与 DSH 默认带入的 system 内容有关。资料归纳四个互不相同的触发源;只修其中一部分,在仍携带其余段的 profile 上仍会 400。

  1. 文件引用说明(@deepseek-ai/dsh-file-reference):注入段中含 @ 与特定前段词组组合,不是「单个 @」就会拦;将 @ 换成等义 (at) 可过网关。
  2. 内核身份句(@deepseek-ai/dsh-system-prompt,默认 includeHarnessIdentity = true):system 开头的 You are an AI agent powered by DeepSeek Harness.(DeepSeek 与 Harness 之间含零宽空格 U+200B)会触发;改标点或句式可过。
  3. personaPrefix(@deepseek-ai/dsh-web-app 的 cordis.patch.yml):You are a coding agent powered by ... 句式会触发,与模型名无关。
  4. Web GUI 段(@deepseek-ai/dsh-harness-dev-context):位于 system 尾部的两段 DeepSeek Harness Web GUI 相关文案也会触发;仅改「开头锚定」的修法够不到这里。

国际网关不做同类校验,同一份 body 发 www.workbuddy.ai 为 200。

核心功能:fetch 层做了什么

插件只对目标 host 的请求生效(默认 copilot.tencent.com),在发出前扫描 system / developer / assistant 消息,按资料中的规则表改写:

# 改什么 改成什么
1 文件引用段里的 @ (at)
2 开头的身份句(含零宽空格变体) You are an AI agent powered by DeepSeek-Harness.
3 You are a coding agent powered by ... You are a coding agent running on ...(模型名保留)
4 DeepSeek Harness Web GUI 相关句 this Web GUI / Current Web GUI URL 等中性表述

最后兜底:将残留的 DeepSeek + 不可见分隔 + Harness 品牌指纹统一为 DeepSeek-Harness(含历史会话冻结段落)。

assistant 消息也要扫:资料实测表明,文件引用段在 assistant 中任意位置都会触发 11128;身份句仍主要在开头触发。user 与 tool 消息 deliberately 不改;DeepSeek、OpenAI、Anthropic、WorkBuddy 国际版等其它 host 原样透传。

选用 fetch 层的原因:11128 重试阶梯会多次重发请求,在 body 组装层改容易漏级;而 stream 事件的 GenerateOptions 深冻结无法改,assemble 事件则会波及所有 provider。

安装与启用

推荐:DSH 插件命令

把 web 换成你实际使用的 profile 名(桌面版一般为 desktop):

dsh plugin --profile web add github:curo22/dsh-wb400-guard

装完后的确认

完全退出并重启 DSH Desktop(不是仅关窗口)。宿主日志中应出现类似:

[I] [dsh-wb400-guard] [dsh-wb400-guard] fetch guard installed for copilot.tencent.com

资料还提供 node install.mjs 等方式安装到 profile 的 vendor 目录并写入 package.json 的 dependencies 与 dsh.profile.bundles;若手动改 profile 的 package.json,避免用 PowerShell 的 ConvertTo-Json | Set-Content,以免 UTF-8/BOM 与中文路径被破坏导致 profile 加载失败。

配置

在插件的 cordis.patch.yml 中可调(资料原文):

键 默认 说明
enabled true 为 false 时不包装 fetch
gatewayHosts ["copilot.tencent.com"] 要防护的 host;以 . 开头可做后缀匹配;国际网关默认不在列表
mode "anchor" anchor 只改两处指纹相关句式;all 在 system 上做更宽兜底替换(资料说明:all 只在 system 上兜底全换,不影响 assistant 里的普通 @)

适用场景与注意

适合谁:在 DSH 中配置 WorkBuddy 国内版反代、稳定复现 11128 /「请求被拦截」且国际版正常的开发者。

注意:

  • 插件以当前 DSH 进程权限运行,会在运行时替换全局 fetch 行为(仅对配置的 gateway host)。安装前应阅读 GitHub 仓库 源码与 MIT 许可证,确认改写策略可接受。
  • 改写目标是语义等价、仅避开网关字面匹配;若腾讯侧规则变化,可能需要插件更新。
  • 社区目录 SkillHub 插件页 与 GitHub 为独立生态信息源,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-wb400-guard 把 WorkBuddy 国内网关 400(code 11128)的修复收敛到一条 DSH 安装命令:在 fetch 层对已知 system / assistant 指纹做定向中性化,不碰 user 消息,也不影响国际网关与其它 API。若你符合前文现象对照表,可先安装、重启 Desktop,用日志行确认 guard 已挂载,再发起一轮国内版对话验证。

  • 目录页:https://www.skillhub.cn/plugins/curo22/dsh-wb400-guard
  • 源码与完整说明:https://github.com/curo22/dsh-wb400-guard
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye