前言¶
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。只追加两处:
dependencies增加"dsh-purge": "file:../../plugins/dsh-purge"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)。下载解压后:
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 安装后的三步(不做等于没装)¶
- 完全退出并重开你装的那个宿主:桌面端托盘退出再开;
dsh web停进程再启动。 - 在那个宿主上点会话标题旁的 dsh-purge → 清洗 → 应用(不在设置页里)。
- 应用成功会自重启一次(补丁要重启后才加载);没跑完就不会重启。
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,进入「清洗」页:
- 查看补丁状态(
applied / pending / missing_file)。 - 选择一组规则,点击「应用」。
- 插件会自动重启宿主,应用成功后重启。
- 回到聊天界面,尝试原问题,观察模型行为是否变化。
如需自定义提示词,编辑 $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