前言¶
做智能体安全评测时常遇到一个模糊点:你问「模型会不会答」,实际得到的是「宿主让不让答」。DeepSeek Harness 不只是把提示词转发给模型,它会在运行时改写提示词、审批门、沙箱策略与会话格式。只看最终回答,会把宿主层的拦截误当成模型拒绝,也看不到默认策略是不是收得过紧。
下面介绍 cxkctrl24-lgtm/dsh-purge-021。它是 dsh-purge 的社区 fork,上游是 YuJunZhiXue/dsh-purge,由 cxkctrl24-lgtm 维护,面向 DSH 0.2.1-rc.2,作用范围限定在使用者本机已安装的官方 Harness。它的思路是把「模型层」和「宿主层」拆开观察,而不是直接给你一个”能破甲”的结论。
先交代生态背景:DSH 的设计理念是「一切皆插件」。本文引用的目录页 skillhub.cn 是独立社区站点,与 DeepSeek / 幻方没有官方从属关系,不是官方应用商店。
这是什么¶
一句话:dsh-purge-021 是装在本机官方 DeepSeek Harness 上的网络安全红队评测插件,按补丁分组展示状态,并提供应用、还原、卸载入口。
可核对的事实:
- 维护者:
cxkctrl24-lgtm - 分类:
admin-security - GitHub 星标:2
- 许可证:Apache-2.0(随上游)
- 版本号:
1.1.83-0.2.1.rc.2-fork2(README 正文里仍写作 1.1.81,属文档未同步;包内package.json与 README 头部均为 fork2) - 未发布到 npm,只能从仓库或 Releases 安装
关于 fork 与上游的关系,仓库的 CHANGELOG-fork2.md 写得比较清楚:上一轮 fork1 的基座是 1.1.73,上游此后已发到 1.1.82(1.1.79、1.1.80、1.1.81、1.1.82 四个版本,约 1300 行差异)。本轮直接把上游 1.1.82 整棵树作为新基座,再把 fork 独有修复逐条移植回来,而不是继续在旧基座上打点对点补丁。
核心能力¶
插件在会话标题旁放一个按钮,打开右侧栏,里面是两个页面:清洗(Clean)和演练台(Drill)。
| 入口 | 作用 |
|---|---|
| dsh-purge 侧栏 | 会话标题旁按钮打开右侧栏,两页:清洗、演练台 |
| 清洗 | 分组查看补丁状态,应用 / 还原 / 卸载,编辑提示词与多套规则 |
| 演练台 | 授权后查看资产与本机环境。开源版不下发技能库和知识库,只用于本机 / 内网本地靶场 |
| 宿主策略 | 调整默认文案、权限策略、工具上限;官方能力保留,不另写一套身份 |
| 启动时 | 自动再检查并应用。npm 升级盖掉 node_modules 之后不用手工改文件 |
写入时机也值得注意:插件不直接改 Harness 源码仓库,改动由「清洗」页点「应用」时写入。路径不写死盘符,按 $DSH_HOME、dsh 启动器旁边的 .dsh,再退回 ~/.dsh。身份来自插件内随包携带的加密提示词,也就是提示词框默认显示的那一份,不读取宿主磁盘上的提示词文件。
fork 独有修复(上游 1.1.82 没有,CHANGELOG-fork2.md 逐条给出落点):
- F1 宿主被信号杀时写
<userData>/logs/dsh-purge-host-exit.log(时间 / exit code / signal / pid / stderr 摘要),落点在lib/core.js补丁 #83 的载荷 - F2 asar 改名失败也拉起客户端,避免宿主随后无条件
process.exit(0)导致客户端消失且不自动回来,落点在lib/desktop.js的ASAR_SWAP_PS1 - G10 注入正文覆盖判定:血统三句从「一票否决」降级为「无用户证据时兜底」,引入
customized标记与 mtime 证据,手改prompt-inject.md或点保存不再被盖回内置默认 - P1-3 / P1-7 hung 缓存 TTL 从 200ms 提到 30s,缓存键从 mtime 换成
(mtime:size),只在戳变或换 home 时才syncPromptInjectOnDiskSync - P1-4
injectMatchers模块级缓存,键为注入正文,落点lib/identity.js - P1-6 日志批量写(250ms / 8KB 双门 + 退出强刷),把每装配 6 次同步 syscall 降到每秒不超过 4 次
- b0 探针 独立第二通道
%TEMP%/dsh-purge-probe.log,记录life.module/life.apply/life.dispose等生命周期事件、30s 心跳与落盘失败采样,落点lib/probe.js
上游 1.1.79–1.1.82 带来的内容也被直接继承,不需要再打补丁,包括 #166 / #167(pnpm 拦 postinstall 时补 allowBuilds、升级后补回 bundles + 本体 insert)、#168(allowBuilds 覆盖 dsh-purge@codeload… 键)、#172(skills.js 补 fs)、#174(识别 DSH NEXT 社区桌面)、#180(修 allowBuilds 被反复写坏的一整套坑)。上游 1.1.82 的 lib/profile-insert.js 会在用户层 profile/cordis.patch.yml 补一条 insert,这是解决「主行必须用 insert 创建」的正确位置。
一个重要限制写在 README 的作者说明里:开源版攻击任务只认本地靶场 IP(本机回环和 RFC1918 私网)。域名会先按系统解析(含 hosts),解析到的每一个地址都必须是私网或回环;把 .lab 指到公网、解析失败、混有公网地址,一律拦截。同时禁止制作游戏外挂(自瞄、透视、改内存打游戏、过反作弊),提示词与会话门口一起拦。
适配范围¶
README 给出的对应关系如下,装之前先确认宿主版本:
- DSH 0.2.1-rc.2(官方桌面 / 官方
dsh web):用 1.1.81 及以上,即本页这档 - DSH 0.2.0-rc.2:用 1.1.40 及以上
- DSH 0.1.7(含 rc.1 / rc.2):用 1.1.39 及更早,在 Releases 里选对应标签
- 不支持 DSH 0.2.1-rc.3 / rc.4 及更新
宿主对不上时,补丁会显示待应用或跳过,不会乱改文件。README 建议退回 0.2.1-rc.2 再装。
作用边界:插件只处理使用者本机已安装的官方 @deepseek-ai 包和本机配置,不是公网扫描器,也不是针对第三方站点的攻击套件。
安装与启用¶
先排除两个容易踩的坑:不要走插件市场(dsh-plugin.org 或设置里的「插件市场」一键安装会报 already queued: dsh-purge),npm 仓库也没有 dsh-purge 这个包名,不要 pnpm add dsh-purge。安装命令来自 README 原文。
快速安装,PATH 里有 dsh 时一条命令加一次重启:
# 官方 `dsh web`
dsh plugin --profile web add https://codeload.github.com/cxkctrl24-lgtm/dsh-purge-021/tar.gz/refs/heads/main
# 官方桌面 EXE
dsh plugin --profile desktop add https://codeload.github.com/cxkctrl24-lgtm/dsh-purge-021/tar.gz/refs/heads/main
装完做两件事:
- 完全退出再打开刚装的那个宿主。Web 停掉
dsh web再开;桌面端托盘也要退出,再开 exe - 在这个宿主点会话标题旁的 dsh-purge →「清洗」→「应用」。应用成功后会自动重启一次
官方 Web 和官方桌面端分开装、分开应用,只装你正在打开的那一个。压缩包地址只用 codeload.github.com 这个写法,不要用 github.com/.../archive——后者会 302,pnpm 会 fetch failed。
没有 dsh、只有 pnpm 时,进入正在使用的那个 profile(不要在仓库根执行):
cd "$DSH_HOME/profiles/web" # 桌面端改为 profiles/desktop
pnpm add https://codeload.github.com/cxkctrl24-lgtm/dsh-purge-021/tar.gz/refs/heads/main
Windows PowerShell:
cd "$env:USERPROFILE\.dsh\profiles\web" # 桌面端改为 profiles\desktop
pnpm add https://codeload.github.com/cxkctrl24-lgtm/dsh-purge-021/tar.gz/refs/heads/main
如果当前目录已经是本仓库,把网址换成 .。
典型用法¶
应用成功后插件会自动重启一次,然后在聊天里跑 /purge status 验证状态。README 里给出的可复现验证路径就这一条。
更细的操作都收敛在侧栏界面上:清洗页分组查看补丁、点「应用 / 还原 / 卸载」,编辑提示词和多套规则;演练台需要先授权,然后查看资产和本机环境。启动时插件会再检查并应用一次,所以 npm 升级覆盖 node_modules 之后不用手改文件。
需要特别说明的是,README 的 Usage / Restore / 更新章节在抓取资料里被截断,本文没有核实到更多命令行用法,因此不展开,请以仓库 README 为准。
适用场景与注意¶
适合的场景:在你有权管理的本机官方 Harness 上做受控红队评测与鲁棒性测试,或者用来观察默认策略该不该收紧。README 明确要求一切测试限制在本机已授权安装的官方 Harness、离线本地合成靶标、授权演练靶场及合规实验室受控环境中,严禁在未经授权的目标、公网在线系统或生产业务上运行。
安装前请检查源码与许可证。几点具体的:
- 插件以当前 dsh 进程权限运行,「应用」会写本机文件与本机 profile,属于对自身安装环境的修改
- 许可证是 Apache-2.0,二开和再分发必须保留版权声明与
NOTICE,并写明来源YuJunZhiXue/dsh-purge - README 声明原版不允许倒卖,二开可以但必须署名;借用名称、思路、代码或提示词同样要署名
- README 内的严正免责声明说明这是非营利开源项目、与 DeepSeek 官方无隶属或背书关系,使用者独立承担全部法律责任
结尾¶
dsh-purge-021 的价值不在于”让模型什么都答”,而在于把宿主层和模型层分开,让你在自己的安装里做受控评测。它目前维护 DSH 0.2.1-rc.2,未发布 npm,安装路径和 fork 修复点都有明确文档,适合愿意先读源码再动手的人。
- 目录页:https://www.skillhub.cn/plugins/cxkctrl24-lgtm/dsh-purge-021
- GitHub:https://github.com/cxkctrl24-lgtm/dsh-purge-021
- 上游仓库:https://github.com/YuJunZhiXue/dsh-purge
本文事实来源:仓库 README.md / README.zh-CN.md、package.json、CHANGELOG-fork2.md(均已抓取核对)。Usage / Restore / 更新章节因抓取截断未纳入,未核实的内容未作推断。