前言¶
DeepSeek Harness(DSH)把模型調用、工具描述和系統提示一起序列化後發給上游網關。若請求裏帶有可被規則匹配的固定文本或標識,網關可能直接拒絕,返回 400 與 code 11-128(Illegal API invocation from an unapproved channel),這與選用的模型無關,而是對請求體中某段連續文本的匹配結果。
社區插件 dsh-fingerprint-remover(維護者 LhyCloud,分類 admin-security)在 DSH 的出站請求邊界改寫序列化後的 body 與部分 HTTP 頭,去除已知客戶端特徵,降低因此被網關攔下的概率。下面介紹它的定位、能力與安裝用法;事實以 GitHub 倉庫 README 爲準。
這是什麼¶
dsh-fingerprint-remover 是一款 DSH 插件,不更換 provider、模型、路由、憑證、工具名或 DSH 本體,只改寫即將發出的 JSON 請求與相關頭字段。
README 說明:網關拒絕的不是模型,而是請求裏可被匹配的「連續文本」。例如,DSH 請求曾以兩句固定的 path 說明開頭;單獨任一句可得到 200,兩句緊挨則觸發 11-128;改寫第一句即可打破匹配。除該句對外,請求還可能攜帶 harness 身份句、GUI 段落、checkout 行、本地 Web GUI URL、.dsh / dsh 路徑、dsh-* 包名、HOST_* 環境變量、reasoning 塊、工具結果以及歸因 User-Agent 等,插件按表面對這些項做清洗或替換。
核心功能¶
網關側已知觸發點(參考)¶
README 在同上遊、同 system slot 下做過對比:兩句 reference-rules 連續出現會 400 / 11-128;改寫第一句或兩句都改寫則恢復 200。插件會改寫兩句,避免相鄰配對再次形成指紋。
處理範圍¶
| 表面 | 處理方式(摘自 README) |
|---|---|
| Reference-rules 句對 | 第一句 paraphrase;第二句同義改寫 |
| Harness identity 句 | 刪除 |
| GUI 段落 | 將含 Web GUI URL 的表述改寫 |
| Runtime context | 去掉 checkout 行與本地 Web GUI URL;工作區路徑替換爲 <workspace> |
| 重放歷史 | system / developer / assistant / runtime-context / user / tool |
| Reasoning 塊 | 與可見文本相同規則 |
tool_calls 參數 |
JSON 字符串清洗 |
| 工具與參數描述 | 清洗 dsh、HOST_*、包名等 |
| User-Agent | 將 dsh token 替換爲 WorkBuddy 桌面 UA |
| 歸因頭 | 移除 x-dsh-* |
默認會清洗普通 user 消息;若需保持用戶消息字節不變,可在配置中設置 sanitizeUserMessages: false。
實現邊界¶
插件在 globalThis.fetch 處攔截:解析 JSON body → 改寫 messages、system、tools → 再序列化發送,並改寫 User-Agent、去掉 x-dsh-*。同時保留 system-prompt/assemble 鉤子,使會話日誌裏存的 prompt 已是清洗後的版本。adapter 的 options 被凍結,llm/stream waterfall 無法替換該對象。
安裝與啓用¶
官方 README 給出三種安裝方式,任選其一:
dsh plugin add dsh-fingerprint-remover
從 GitHub 倉庫安裝:
dsh plugin add github:LhyCloud/dsh-fingerprint-remover
從本地目錄(示例爲 desktop profile):
dsh plugin --profile desktop add file:/path/to/dsh-fingerprint-remover
安裝後需重啓 DSH 一次。啓動日誌中可出現類似:
[dsh-fingerprint-remover] active … prompt sanitizer on, UA -> WorkBuddy/5.8.4 workbuddy-ai/5.8.4 CLI/2.161.0
package.json 標明插件要求 dsh 引擎 >=0.2.0-rc.1,Node >=20;當前包版本爲 1.0.0,許可證 MIT。
配置項¶
在 DSH 配置中插入插件塊(字段含義以 README 爲準):
- insert:
- id: dsh-fingerprint-remover
name: 'dsh-fingerprint-remover'
config:
enabled: true
providers: [] # [] = all providers
sanitizePrompt: true
sanitizeToolResults: true
sanitizeUserMessages: true
sanitizeUserAgent: true
stripAttributionHeaders: true
userAgent: 'WorkBuddy/5.8.4 workbuddy-ai/5.8.4 CLI/2.161.0'
referenceRulesReplacement: 'An @ prefix marks a path the user named explicitly.'
hostRuleReplacement: 'Relative paths are resolved against the workspace root, while absolute paths refer to files or directories on the machine.'
dumpPath: '' # optional: write the last sanitized request
verbose: false
dumpPath 非空時會把最後一次清洗後的請求寫成機器本地 JSON,便於自查,默認關閉且不會外傳。
典型用法¶
會話內命令¶
| 命令 | 作用 |
|---|---|
/fingerprint 或 /fingerprint status |
狀態、計數、最近一次 payload 掃描 |
/fingerprint scan |
最近出站請求:provider/model,清洗前後指紋數量 |
/fingerprint on / off |
當前進程內開關(重啓後恢復配置文件) |
/fingerprint why |
根因說明 |
只讀 JSON 狀態(僅 loopback):
GET /dsh-fingerprint-remover
健康檢查時,/fingerprint scan 對真實最近一次請求的「剩餘指紋」期望爲 0。README 回放示例:308 條消息 + 40 個工具,清洗前 4768 個指紋項 → 清洗後 0。
本地測試¶
倉庫內無網絡測試:
npm test # README 寫明 17 tests
適用場景與注意¶
適合誰: 需要通過 WorkBuddy 等網關出站、且因 DSH 固定 prompt 片段或客戶端標識觸發 11-128 的開發者;屬於 admin-security 類能力,使用前應理解改寫範圍。
權限與信任: 插件以當前 DSH 進程權限運行,能讀寫出站請求與頭;安裝前應閱讀 源碼與 LICENSE,在可恢復的 profile 上驗證。README 建議保留插件包管理器生成的備份文件。
範圍與限制(README):
- 規則基於已知指紋錨點;上游新增規則時需插件側補充對應規則。
- 不僞造
machineId/sessionId等 proto 級身份字段。 - 歷史 tool results 被改寫後,模型可能看到佔位符而非真實路徑,這是爲降低可檢測性做的取捨。
DSH 生態強調「一切皆插件」;社區目錄 skillhub.cn 插件頁 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。
鏈接¶
- 目錄頁:https://www.skillhub.cn/plugins/LhyCloud/dsh-fingerprint-remover
- GitHub:https://github.com/LhyCloud/dsh-fingerprint-remover