dsh-workbuddy-fix
Manifest validFix WorkBuddy/CodeBuddy 400 'Illegal API invocation from an unapproved channel' (code 11128) with lossless prompt keyword neutralization — DSH settings-page plugin. Fix WorkBuddy request being blocked 400 (lossless prompt bypass).
WorkBuddy 400 错误修复 · unapproved channel (code 11128) · DSH 插件
一键修复 WorkBuddy / CodeBuddy 的
Illegal API invocation from an unapproved channel(HTTP 400 / code 11128)。装进 DSH,在「设置」页开关。提示词无损绕过 —— 语义不变、上下文不丢、可随时关闭。
关键词:
unapproved channel·Illegal API invocation·code 11128·11140· WorkBuddy 400 · CodeBuddy 400 · 请求被拦截 · 提示词风控 · 关键词过滤绕过 · 零宽空格 · DeepSeek Harness · prompt filter bypass

24 秒看完:前情提要 → 报错长什么样 → 为什么不是渠道问题 → 真因与解法 → 装好后的开关
背景音乐:Peaceful Instrumental Background Music by Peaceful Peach — CC0 1.0,来自 Internet Archive
常见报错速查
| 你看到的报错 | 真实原因 | 本插件能修吗 |
|---|---|---|
Illegal API invocation from an unapproved channel | 上游按关键词风控 system prompt | ✅ 能(这就是本插件) |
code 11128 / code 11140 / HTTP 400 | 同一错误族 | ✅ 能 |
first message is not system prompt | 首条消息不是 system 角色 | ✅ 能(「补首条 system」开关) |
code 11133 integer_below_min_value | max_tokens 太小 | ❌ 调大 max_tokens |
code 6004 usage exceeds frequency limit | 上游限流 | ❌ 换账号或等冷却 |
EMPTY_RESPONSE / 有思考无正文 | 推理模型把 max_tokens 吃光 | ❌ max_tokens ≥ 4096 |
如果你是因为这个报错搜到这里
buddy: 请求被拦截,请重新发送 Illegal API invocation from an unapproved channel
Illegal API invocation from an unapproved channel
HTTP 400 · 上游 code 11128(有时 11140)
这个报错在骗你
文案说 "unapproved channel"(未获批准的渠道),但它跟渠道一点关系都没有。
我逐项实测排除过:换账号、换域名(copilot.tencent.com / www.workbuddy.ai)、
换客户端身份(CodeBuddy / WorkBuddy)、补齐 13 个缺失请求头、调 reasoning_effort、
调 max_tokens、减少工具数量(316→少量)、换网络、降并发 —— 全都不是原因。
真因:上游在对 system prompt 做关键词内容风控。
只要 prompt 里出现 DeepSeek Harness 这个词组,请求就被拒。
60 秒自证
用同一个 token 打两次,只改 system prompt 里的一个词:
| system prompt | 结果 |
|---|---|
You are an AI agent powered by DeepSeek Harness. | ❌ 400 / 11128 |
You are an AI agent. | ✅ 200 |
符合这个规律,就是这个原因。
💡 为什么它时好时坏:关键词要配合请求体够大(约 >1KB)才稳定触发。 短 prompt 即使含关键词也会放过 —— 这是最容易误判成「偶发故障」的地方。
修法:零宽空格
在 DeepSeek 与 Harness 之间插一个不可见字符 U+200B:
// 改前
"You are an AI agent powered by DeepSeek Harness."
// 改后
"You are an AI agent powered by DeepSeek\u200B Harness."
- 模型看到的语义完全不变
- 上游的子串匹配不再命中
- 无损:没有裁剪、没有改写、没有丢上下文
实测(真实 DSH 请求形状:316 tools + effort=max + max_tokens=128000):
原文 → ❌ 0/5 全部失败
中和后 → ✅ 5/5 全部成功
⚠️ 文件路径不能被改写
运行时上下文里有真实路径:
D:\10_COD\DeepSeek Harness\resources\app.asar\dsh\
在路径里插零宽字符,会让模型把坏路径传给工具调用,直接失败。 所以匹配器带前后负向断言,跳过路径语境:
/(?<![\\/])(DeepSeek)[ \u00A0]+(Harness)(?![\\/])/gi
前置条件
| 项 | 要求 |
|---|---|
| DSH 桌面版 | 已在用(本插件是 DSH 插件,不是独立程序) |
| dsh-our-free-model | 已安装并登录至少一个 WorkBuddy / CodeBuddy 账号 |
| Node.js | ^22.19.0 或 >=24.0.0 |
不需要:官方客户端后台常驻、额外 API Key、管理员权限。
安装
在 DSH 里说:
把
C:\Users\你的用户名\Documents\...\dsh-workbuddy-fix装成插件
或让 agent 调用 plugin_manager 的 install_bundle,target 传本目录绝对路径。
装完重启一次 DSH(首次安装需要加载新的 Host 模块),然后在「设置」里能看到 wb400修复。
使用
打开 设置 → wb400修复,看到 4 个开关:
| 开关 | 默认 | 作用 |
|---|---|---|
| 总开关 | 开 | 关掉即完全恢复原始请求(一个字节都不改) |
| 中和身份关键词 | 开 | 上面说的零宽空格替换 |
| 补首条 system | 开 | 首条非 system 时注入保底 system(11128 的另一个成因) |
| 隐藏品牌词 | 关 | 更激进:连 DeepSeek 也打散 |
面板还会显示:
- 补丁状态(钩子是否在位)+ 补打钩子按钮
- 本机已中和多少处
- 改写效果预览(前后对照)
- 是否与「用量计量」插件联动
改完即时生效,不需要重启。
与 dsh-workbuddy-meter 的关系
本插件是 dsh-workbuddy-meter 里
「关键词中性化」功能的独立精简版。
| 本插件 | dsh-workbuddy-meter | |
|---|---|---|
| 解决 400 错误 | ✅ | ✅ |
| 积分/token 计量面板 | ❌ | ✅ |
| 体积 | ~40 KB | ~300 KB |
| 设置页入口 | ✅ 独立页面 | 侧栏「用量」面板内 |
两个插件可以同时装,而且开关是联动的
它们共享同一个状态文件:
~/.dsh/workbuddy-meter/lexicon.json
任一方改了开关,另一方立即跟随 —— 一个打开,另一个也打开。 不会冲突,不会重复改写(钩子名相同,后装的覆盖先装的,但行为一致)。
只装其中一个也完全正常:
- 只装本插件 → 有修复功能,没有计量面板
- 只装 meter → 两者都有(meter 内置了同样功能)
- 都装 → 修复逻辑一致,开关双向同步
它对你的代码做了什么
在 pack.js(OFM 的 channel-pack)里插入一行:
;globalThis.__wbLexicon?.rewrite?.(messages);
位置在 workbuddy 的 messages 组装完成、发出去之前。
- 只改 WorkBuddy / CodeBuddy 这两个 provider 的出站请求
- 钩子未安装时可选链短路,行为与未打补丁完全一致
pnpm重装 OFM 会冲掉这行 —— 插件启动时自动自愈重打- 卸载插件前建议先在面板里关闭开关(或直接卸载,勾子读不到配置就不改写)
手动控制(可选)
# 只检查,不改文件
node -e "import('./src/patch.mjs').then(m=>console.log(m.inspectLexicon(m.resolvePackFile())))"
# 打钩子(默认 dry-run,这里显式落盘)
node -e "import('./src/patch.mjs').then(m=>console.log(m.applyLexiconPatch({dryRun:false})))"
# 移除钩子(⚠️ meter 插件也依赖这行,会由它的自愈重打回来)
node -e "import('./src/patch.mjs').then(m=>console.log(m.revertLexiconPatch()))"
已知边界
- 只对本机 OFM 进程内的请求生效(服务器上反代的流量要单独装)
- 上游如果换关键词(不再拦
DeepSeek Harness),本插件就不需要了 —— 关掉总开关即可 - 钩子插入点依赖 OFM 的结构;OFM 大版本升级后若锚点消失,面板会显示「未打钩子」并给出原因
许可
MIT © 2026 balong
Comments
Loading…
Similar plugins
by Leeminjing
DeepSeek Harness plugin: auto-repairs invalid tool_calls/tool message pairing in the messages array to stop 400 INVALID_REQUEST session crashes.
★ 4
↓ 116/wk
MIT
JavaScript
Oct 1, 2026
dsh plugin --profile web add dsh-messages-sanitizerby Acoder416
WorkBuddy (workbuddy.ai / codebuddy.cn) subscription quota as a DSH model provider: supervises the local OpenAI-compatible gateway and exposes it as a settings page.
★ 0
MIT
JavaScript
Oct 19, 2026
dsh plugin --profile web add dsh-plugin-workbuddy-gatewayby ml020
Wordless-styled WorkBuddy hero for DSH: replaces the blank-session brand mark and workspace picker while keeping the native composer.
★ 0
MIT
TypeScript
Aug 31, 2026
dsh plugin --profile web add dsh-workbuddyby 2861292267
WorkBuddy's 增强提示词 (Enhance Prompt) as a DeepSeek Harness plugin: rewrite the composer draft into a stronger prompt with one click.
★ 4
MIT
JavaScript
Oct 17, 2026
dsh plugin --profile web add @local/dsh-prompt-forgeby ZSeven-W
DeepSeek Harness (DSH) plugin: dispatch work to DSH agents from Claude Code / Codex — native subagent progress, in-host worker sessions with per-tier presets, and a multimodal bridge that lends the te
★ 172
MIT
JavaScript
Oct 8, 2026
dsh plugin --profile web add @zseven-w/dsh-crewby 2861292267
WorkBuddy's 增强提示词 (Enhance Prompt) as a DeepSeek Harness plugin: rewrite the composer draft into a stronger prompt with one click.
★ 3
MIT
JavaScript
Oct 13, 2026
dsh plugin --profile web add @local/dsh-prompt-enhancer