Preface¶
When routing model requests through a WorkBuddy or CodeBuddy account pool in DeepSeek Harness (DSH), requests sometimes directly return HTTP 400 with a message like “request intercepted” along with Illegal API invocation from an unapproved channel. Common upstream error codes are 11128 or 11140. On the surface, it appears to blame “unapproved channel,” but according to maintainer balongTTY’s item-by-item exclusion in the repository README, switching accounts, changing domains, changing client identities, adding request headers, adjusting max_tokens, etc. often do not eliminate the error. The conclusion closer to actual testing is that it performs keyword content filtering on the system prompt—specific phrases appearing in the prompt will cause rejection.
Below is an introduction to the community plugin dsh-workbuddy-fix (GitHub: balongTTY/dsh-workbuddy-fix, npm package name @balong/dsh-workbuddy-fix). It performs lossless processing (zero-width space to break substring matching) on trigger words before requests are sent, controlled through a switch on the DSH settings page, without modifying third-party reverse proxy plugin files. The plugin is categorized as admin-security, licensed under MIT, and the version in current documentation is 1.3.2.
What This Is¶
dsh-workbuddy-fix is a settings page plugin for DSH: it intercepts requests sent to WorkBuddy / CodeBuddy-related domains at the globalThis.fetch layer, performs optional neutralization on the system prompt (and keywords configured in the panel), thereby bypassing the aforementioned 11128-type interceptions while maintaining the semantics seen by the model as much as possible.
Maintainer: balongTTY (GitHub).
Directory page: SkillHub · balongTTY/dsh-workbuddy-fix.
What It Fixes and What It Doesn’t¶
Covered Errors¶
| Symptom | Description |
|---|---|
Illegal API invocation from an unapproved channel |
Upstream keyword-based filtering of system prompt |
HTTP 400, code 11128 / code 11140 |
Same category as above |
first message is not system prompt |
Can be handled via panel’s “inject first system” |
Typical client error prefixes include buddy: (CodeBuddy / copilot.tencent.com) and workbuddy: (WorkBuddy international version); README states coverage of 5 domains within WB_HOSTS.
What This Plugin Doesn’t Handle¶
| Symptom | Handling Direction (from README cheat sheet) |
|---|---|
code 11133 integer_below_min_value |
Increase max_tokens |
code 6004 usage exceeds frequency limit |
Switch accounts or wait for cooldown |
Reasoning model EMPTY_RESPONSE, thinking without content |
Suggest max_tokens ≥ 4096 |
model returned a completed response with no content |
Unrelated to this plugin |
Core Mechanism and Features¶
Interception approach: insert invisible character zero-width space (U+200B) in the middle of trigger words to invalidate upstream substring matching while maintaining semantics on the model side. Example (from README):
// Before
"You are an AI agent powered by DeepSeek Harness."
// After
"You are an AI agent powered by DeepSeek\u200B Harness."
README-documented testing (DSH request form: 316 tools + effort=max + max_tokens=128000): original text 0/5 failures, after neutralization 5/5 successes.
Design Points (summarized from original documentation)
| Point | Description |
|---|---|
| Lossless | No trimming, no rewriting of context, only inserting invisible characters |
| Doesn’t touch third-party files | Mounted on globalThis.fetch, decoupled from reverse proxy plugin version/implementation |
| Reversible | After disabling the main switch, requests are byte-level identical to original requests |
| Path-safe | Matching with negative lookahead/lookbehind assertions to avoid breaking real paths like D:\...\DeepSeek Harness\... |
| Real-time effect | Switch changes don’t require DSH restart |
If the runtime context contains real paths, inserting zero-width characters within path segments will cause tool calls to pass wrong paths; therefore the matcher uses path protection logic like /(?<![\\/])(DeepSeek)[ \u00A0]+(Harness)(?![\\/])/gi (README example).
Settings Page: wb400 Fix¶
After installation and DSH restart, the entry point is Settings → wb400修复.
Main panel elements (v1.3.2 screenshots in repository docs/screenshot-panel-v132.png):
Status
- Version badge (e.g.,
v1.3.2) - “Main channel running” indicates the fetch hook is working in the chain; README clarifies that the wrapper doesn’t need to be at the outermost layer, “N keywords processed” is the criterion for whether it’s doing its job
Switches (default values per README)
| Switch | Default | Function |
|---|---|---|
| Master switch | On | When off, requests are not rewritten at all |
| Neutralize identity keywords | On | Zero-width space replacement |
| Inject first system | On | Injects a fallback system when the first message is not system |
| Hide brand words | Off | More aggressive, breaks up even DeepSeek |
| Complete word replacement | Off | Replaces keywords entirely with other words (default CodeBuddy) |
| Personality injection | Off | Appends CodeBuddy-style engineering behavior constraints |
Also supports maintaining custom keywords in the panel (can be added here when upstream changes filtering words, without upgrading the plugin), check for updates (reads GitHub Releases), rewrite effect preview, and processing counts.
Installation and Activation¶
Version requirements: Documentation requires installation of v1.3.2 or newer; v1.3.0 / v1.3.1 have stability issues (README states may cause host crashes), v1.0.x has no fetch channel and is ineffective for most users.
Method 1: Install from GitHub (Recommended)¶
In DSH conversation, specify installation of github:balongTTY/dsh-workbuddy-fix, or execute locally (replace <DSH目录> with actual path):
<DSH目录>\resources\runtime\cli\bin\dsh.cmd plugin --profile desktop add github:balongTTY/dsh-workbuddy-fix
Restart DSH once after installation. If direct GitHub connection is unstable, may fail; can switch to Release package.
Method 2: Release Attachment (Poor Network)¶
- Open Latest Release
- Download
balong-dsh-workbuddy-fix-1.3.2.tgz(approximately 42 KB) - Execute:
<DSH目录>\resources\runtime\cli\bin\dsh.cmd plugin --profile desktop add .\balong-dsh-workbuddy-fix-1.3.2.tgz
Only download the .tgz plugin package; wb400-intro.mp4 in Release is a demo video, not an installation package.
Uninstall¶
<DSH目录>\resources\runtime\cli\bin\dsh.cmd plugin --profile desktop remove @balong/dsh-workbuddy-fix
README states uninstallation won’t delete keyword configurations in ~/.dsh/workbuddy-meter/lexicon.json, switch states can be preserved after reinstallation.
How to Confirm Correct Installation¶
After restart, open Settings → wb400修复, all of the following must be satisfied:
- Version badge v1.3.2 (or newer 1.3.x) next to the title
- Status shows Main channel running
- After several normal conversations, “Processed” count greater than 0
If only “Main channel running” but count is always 0, it may be that no conversation has been initiated yet, or the reverse proxy being used doesn’t go through globalThis.fetch (README suggests checking intervention count, or running node diagnose.mjs in the repository for auxiliary judgment).
Typical Usage and Self-Verification¶
No additional API needed: with default switches enabled, use WorkBuddy / CodeBuddy normally through DSH; go to settings page to disable master switch or individual features when needed.
README-provided 60-second self-verification: only change one word in system prompt under the same token—
| system prompt | Result |
|---|---|
You are an AI agent powered by DeepSeek Harness. |
400 / 11128 |
You are an AI agent. |
200 |
If this pattern is consistent, it matches keyword filtering. README also mentions: keyword triggers are often related to request body size (more stable when approximately greater than 1KB), short prompts containing words may also be let through, easily causing the illusion of “occasional” occurrences.
Use Cases and Notes¶
Who it’s for: Using WorkBuddy / CodeBuddy in DSH, repeatedly encountering 11128 / unapproved channel type 400 errors, and having already excluded unrelated errors listed in README such as max_tokens being too small, rate limiting, etc.
Compatibility: The hook targets fetch; if the reverse proxy plugin uses undici or node:http direct connection without going through globalThis.fetch, this plugin may not be able to intervene. When using dsh-connect-workbuddy, if only "You are a helpful assistant." is injected when system is lost and there are no trigger words, it may not 400 at all, panel count being 0 is a normal situation described in README.
Security and Trust: The plugin runs with current DSH process permissions and will rewrite prompts in outbound request bodies. Please review repository source code and MIT license before installation; community directory SkillHub has no official affiliation with DeepSeek / Hunyuan, and is not an official app store.
Stability: README honestly records that historical versions once caused host crashes and fixes; if DSH cannot start after installation, first execute the uninstall command above to recover, then report to GitHub Issues with version, installation method, and crash logs under %APPDATA%\@deepseek-ai\dsh-desktop\logs\.
Relationship with dsh-workbuddy-meter: README has a dedicated section explaining the relationship between the two; this plugin focuses on 400 fixes and prompt neutralization, metering capabilities see corresponding repository documentation.
Testing and License¶
Repository declares 15 test files passed (see README badges); locally can run npm test (package.json chains multiple node test/*.mjs).
License: MIT.
dsh-workbuddy-fix addresses the 11128 interceptions on WorkBuddy / CodeBuddy that are easily misjudged as “channel issues,” implementing a toggleable, reversible prompt keyword neutralization, and centralizing operations in the DSH settings page. For further information:
- Directory page: https://www.skillhub.cn/plugins/balongTTY/dsh-workbuddy-fix
- Source code and documentation: https://github.com/balongTTY/dsh-workbuddy-fix