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

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

小夜