dsh-fingerprint-remover:在出站邊界去除 DSH 客戶端特徵

前言

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
羽毛球分组比赛记分
小程序二维码

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

小夜