dsh-purge:DeepSeek Harness 破甲 / 紅隊評測插件

前言

DeepSeek Harness(DSH)採用「一切皆插件」的理念,官方插件生態提供了基礎能力,但有時需要更細粒度的控制,比如在宿主層重寫提示詞、調整審批閘門或沙箱策略,而不僅僅是依賴模型自身的拒絕行爲。dsh-purge 便是爲此設計的一款插件,它把「模型層」和「宿主層」分開,讓你在本地已安裝的 DSH 上做受控的紅隊評測。

該插件由維護者 ZXEB 開發,當前版本爲 v1.1.71。原倉庫 YuJunZhiXue/dsh-purge 與 npm 包均已刪除,本倉庫爲鏡像重建版,保留署名要求不變。

這是什麼

dsh-purge 是給本機已安裝的官方 DeepSeek Harness 用的紅隊 / 魯棒性評測插件。它不改模型,改的是宿主層:Harness 在運行時重寫提示詞、審批閘門、沙箱策略、會話遷移,所以「模型不答」很多時候不是模型拒絕,而是宿主層攔住了。這個插件把這兩層分開,讓你在自己的安裝上做受控評測。

插件在會話標題旁提供 dsh-purge 按鈕,右側欄包含「清洗」與「演練臺」兩頁。支持官方 Web(dsh web)和官方桌面 EXE,兩個宿主分別安裝、分別應用,不要交叉。

核心能力

補丁(清洗)

按組列出每個補丁的 applied / pending / missing_file 狀態;重複應用冪等。補丁寫入宿主的覆蓋文件,不寫死盤符,優先級爲 $DSH_HOME > dsh 啓動器旁的 .dsh > ~/.dsh。

提示詞注入

默認注入插件內加密內置的那份(提示詞框默認顯示的內容),不讀宿主磁盤;也可自己編輯 $DSH_HOME/prompt-inject.md 覆蓋。

規則集

多套 AGENTS.md / CLAUDE.md,啓用即寫入 $DSH_HOME,刪除只從列表移除。

Skill 導入

導入壓縮包或文件夾到當前宿主的 $DSH_HOME/skills/<id>/SKILL.md,由 DSH 自己加載;卸載插件不刪你的 Skill。

自己的服務器

每行登記一臺 IP 或完整主機名,寫入 $DSH_HOME/net-scope-allow.txt;密鑰、密碼、網段、通配符保存時會被丟掉。

回退

輸入框旁「回退一次 / 回退上一輪」,已發送內容回到輸入框,可從當前這一輪重來;聊天裏 /rewind 等價。

演練臺

首次進入需讀聲明、等倒計時、滾到文末、勾選三項,之後纔可用;清洗不需要這一步。

自動重試 / 續跑

autoRetry 失敗重試、autoContinue 自動續跑,次數可配。

環境要求

項 要求
dsh 0.2.x,本包 dshTarget 爲 0.2.0-rc.2(0.1.x 不要用)
宿主 官方桌面 EXE(profile desktop)或官方 dsh web(profile web)
Node.js ≥ 18;Windows 下要「無閃窗」需要 ≥ 22
包管理器 用 dsh 自帶的 pnpm(dsh plugin 會調用它)
網絡 首次安裝需要能訪問 GitHub;離線時可用本地目錄或手動方式

安裝與啓用

4.0 先確認你要裝到哪個宿主

你在跑 profile 說明
官方桌面 EXE(DeepSeek Harness 0.2.0-rc.2) desktop profile 必須先啓動過一次客戶端才生成,安裝前要完全退出(托盤右鍵退出)
官方 dsh web web 停掉正在跑的 dsh web 再裝

確認 $DSH_HOME 是不是你實際在用的那一份:

# Windows PowerShell
$cands = @()
if ($env:DSH_HOME) { $cands += $env:DSH_HOME }
$cands += "$env:USERPROFILE\.dsh"
$cands += @("$env:APPDATA\DeepSeek Harness\dsh-home", "$env:LOCALAPPDATA\DeepSeek Harness\dsh-home")
$cands | Select-Object -Unique | Where-Object { $_ -and (Test-Path (Join-Path $_ "profiles")) }
# macOS / Linux
ls -d "${DSH_HOME:-$HOME/.dsh}"/profiles 2>/dev/null

進到 profiles/<web|desktop>/package.json,"name" 應該是 dsh-profile-web 或 dsh-profile-desktop。

4.1 方式 A:從本倉庫 tarball 一鍵安裝(推薦)

聯網、dsh 可用時最省事:

# Web 宿主
dsh plugin --profile web add https://github.com/ZXEB/dsh-purge/archive/refs/heads/master.tar.gz

# 桌面宿主(先完全退出桌面客戶端)
dsh plugin --profile desktop add https://github.com/ZXEB/dsh-purge/archive/refs/heads/master.tar.gz

macOS / Linux 同一條命令。

裝完 profile 的 package.json 裏會多出一條依賴:

"dsh-purge": "https://github.com/ZXEB/dsh-purge/archive/refs/heads/master.tar.gz"

同時在 dsh.profile.bundles 末尾自動登記 dsh-purge。兩條都在 = 裝對了。

4.2 方式 B:本地目錄安裝(離線可用)

已經 clone / 解壓到本地時,直接把目錄當包源:

# 目錄裏必須能直接看到 package.json(即 dsh-purge 倉庫根)
dsh plugin --profile desktop add D:\path\to\dsh-purge
dsh plugin --profile web add /path/to/dsh-purge

當前 shell 就在倉庫根時也可以:

dsh plugin --profile web add .

離線拷貝要拷整個目錄(lib/ client.js docs/ presets/ skills/ bin/),不要只拷幾個 .js —— client.js 是側欄前端產物,缺了就只有命令行、沒有面板。

4.3 方式 C:手動安裝(CLI 裝不上時兜底)

只改正在用的那個宿主對應的 profile,不要動另一個,也不要刪原有 bundle。

第 1 步:把插件放進 $DSH_HOME/plugins/dsh-purge

目錄名必須是 dsh-purge,裏面 package.json 的 "name" 也必須是 dsh-purge。

git clone https://github.com/ZXEB/dsh-purge.git "$DSH_HOME/plugins/dsh-purge"

沒有 git 就下載 master.tar.gz,解壓後把 dsh-purge-master 改名成 dsh-purge,整夾放進 plugins/。

第 2 步:備份並修改 profile 的 package.json

Web → $DSH_HOME/profiles/web/package.json;桌面 → $DSH_HOME/profiles/desktop/package.json。只追加兩處:

  1. dependencies 增加 "dsh-purge": "file:../../plugins/dsh-purge"
  2. dsh.profile.bundles 末尾追加 "dsh-purge"(已有就別重複加)
{
  "name": "dsh-profile-web",
  "private": true,
  "dependencies": {
    "dsh-purge": "file:../../plugins/dsh-purge"
  },
  "dsh": {
    "profile": {
      "bundles": [
        "@deepseek-ai/dsh-base",
        "@deepseek-ai/dsh-web-app",
        "dsh-purge"
      ]
    }
  }
}

JSON 必須合法(新增項前有逗號、最後一項後沒有多餘逗號)。file: 保持相對路徑;patchReload、其它插件、版本號都別動。

第 3 步:只在剛改的那個 profile 目錄裏裝依賴

cd "$DSH_HOME/profiles/web"    # 或 profiles/desktop
pnpm install

成功標誌:出現 profiles/<web|desktop>/node_modules/dsh-purge/package.json。報 Could not resolve 就查 file: 路徑;JSON 解析失敗就修逗號或還原備份。

4.4 方式 D:Release 壓縮包

倉庫推 master 會由 GitHub Actions 自動出 Release(附件 = dsh-purge-<version>.zip)。下載解壓後:

  • 想用命令行 → 按方式 B 指向解壓目錄;
  • 命令行不方便 → 按方式 C 放進 plugins/ 再手改 profile。

4.5 dsh 不在 PATH 怎麼辦

桌面版自帶一份 CLI,Windows 通常在安裝目錄下:

<安裝目錄>\resources\runtime\cli\bin\dsh.cmd

例如 D:\dsh\resources\runtime\cli\bin\dsh.cmd。直接用它,參數完全一致:

& "D:\dsh\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add D:\path\to\dsh-purge

先 Get-Command dsh 看一眼有沒有;沒有就用上面的絕對路徑。

4.6 安裝後的三步(不做等於沒裝)

  1. 完全退出並重開你裝的那個宿主:桌面端托盤退出再開;dsh web 停進程再啓動。
  2. 在那個宿主上點會話標題旁的 dsh-purge → 清洗 → 應用(不在設置頁裏)。
  3. 應用成功會自重啓一次(補丁要重啓後才加載);沒跑完就不會重啓。

Web 的開關隻影響 Web,桌面的開關隻影響桌面。不要在一個宿主裏給另一個宿主點應用。

4.7 安裝驗證清單

  • [ ] profiles/<web|desktop>/package.json 裏同時有 dependencies.dsh-purge 和 dsh.profile.bundles 裏的 dsh-purge
  • [ ] profiles/<web|desktop>/node_modules/dsh-purge/package.json 存在
  • [ ] 宿主界面會話標題旁出現 dsh-purge 按鈕,右側欄能打開
  • [ ] 聊天裏 /purge status 打印 DSH_HOME 與補丁列表,且路徑是你實際在跑的那份
  • [ ] 模型側有 purge_status / purge_apply / purge_revert 三個工具(說明 bundle 已加載)
  • [ ] node <插件>/bin/dsh-purge.js --status 能列出補丁狀態

典型用法

在會話標題旁點擊 dsh-purge,進入「清洗」頁:

  1. 查看補丁狀態(applied / pending / missing_file)。
  2. 選擇一組規則,點擊「應用」。
  3. 插件會自動重啓宿主,應用成功後重啓。
  4. 回到聊天界面,嘗試原問題,觀察模型行爲是否變化。

如需自定義提示詞,編輯 $DSH_HOME/prompt-inject.md,保存後再次點擊「應用」即可覆蓋默認內容。

適用場景與注意

該插件適合需要在宿主層做精細控制的紅隊評測、提示詞注入測試,以及需要多套規則集切換的評測場景。安裝前應檢查源碼與許可證(MIT),確保符合使用場景。

插件以當前 DSH 進程權限運行,修改的是宿主覆蓋文件,不會改動官方 Harness 源碼樹。卸載插件不會刪除已導入的 Skill 或已編輯的規則集。

結語

dsh-purge 通過在宿主層注入補丁,將模型能力與宿主策略解耦,爲本地化紅隊評測提供了可控的途徑。版本爲 v1.1.71,依賴 DSH 0.2.x。

  • 目錄頁:https://www.skillhub.cn/plugins/ZXEB/dsh-purge
  • GitHub:https://github.com/ZXEB/dsh-purge
羽毛球分组比赛记分
小程序二维码

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

小夜