热闹了两周的 DSH 生态,突然多了一个专职『清理』的角色
【免费下载链接】dsh-purgeDeepSeek Harness 破甲:让所有模型都能破甲,不同模型可换不同提示词;默认提示词面向国模「小码酱」。Jailbreak for every model — swap prompts per model. 求 Star 收藏 ⭐ 如要二开,请查看署名要求部分项目地址: https://gitcode.com/GitHub_Trending/ds/dsh-purge
DeepSeek Harness(下文简称 DSH / dsh)在 8 月 13 日开源后,社区热度持续了整整两周:发布当晚 GitHub Star 数两小时破万、12 小时破 5 万;8 月中旬起,「值得安装的 15 款插件」「必装的 10 个插件」「16 个超火插件」这类推荐清单在掘金等平台轮番刷屏;9 月 14 日apps目录里冒出desktop,9 月 29 日官方桌面端正式发布,「免装环境、不开本地端口」成了新的讨论点。插件生态的关键词一直是「加」——加上下文可视化、加浏览器操控、加多 Agent 协作、加模型中转。
但就在这两周的热闹里,一个方向完全相反的插件悄悄长到了 1.1.7x 版本:dsh-purge。它不给你加任何新能力,它的活儿是「清」——把宿主 Harness 运行时的拦截、审批门、身份段从本机官方安装里一层层洗掉,让红队评测时「模型答不答」和「宿主拦不拦」两件事可以被分开观察。本文基于该仓库源码(lib/core.js单文件 8500 余行补丁逻辑、release-notes.md中 1.1.16 到 1.1.71 的完整版本史)拆一下:这个『清理』角色为什么会出现、它清理的对象到底是什么、以及它对 DSH 生态成熟度意味着什么。
一、生态里为什么需要专职清理
DSH 和「把问题丢给模型」的聊天产品有一个本质区别:Harness 在运行时还会改提示词、走审批门、管沙箱和会话格式。用仓库 README 的话说——「只看『模型答不答』,会把宿主拦截误当成模型拒绝」。做鲁棒性评测、安全评测的人需要一个干净的控制变量:要么宿主完全不拦、看模型的本能;要么宿主全拦、看策略本身。两边都能精确切换,才谈得上评测。
dsh-purge 的清洗对象,就是宿主的这些拦截层。在 lib/core.js 里,补丁被组织成四个数组并合并为ALL_PATCHES:
export const ALL_PATCHES = [...PATCHES, ...CODE_PATCHES, ...ENGINE_PATCHES, ...NEW_TOOL_PATCHES];按层划分:
- 提示词层(PATCHES):比如
id: 1的WORKSPACE_CONTEXT_INTRO,把官方那句「The following workspace instructions may be relevant...」替换成更强指令的STRONG_INTRO;补丁内注释还专门记录了 0.1.6 与 0.1.7 之间常量改名的兼容替换链,以及「自匹配 pattern 会导致每次 apply 叠一层、+841 字符/次永不收敛」的实测事故,最终靠skipIfMarked收敛。 - 引擎层(ENGINE_PATCHES):动审批与沙箱的行为。仓库内部文档 docs/修改文档.md 记下了 0.2.0 的一个关键变更:系统提示词从独立的
system字段改成了 messages 数组里的role: "system"消息,导致「模型把系统提示词当对话历史质疑→第二轮拒绝」。补丁id: 89(SYSTEM_FIELD_EXTRACT)直接 patch 宿主 agent-loop 的buildRequest,把 system 消息提出来合并回system字段——这是典型的「宿主升级改变了拦截的挂载点,清理工具必须跟着迁移」的例子。 - 工具层(NEW_TOOL_PATCHES / hooks):
hooks_deny(#30/#31 把 hooks 的 deny→allow)、hooks_steer(#64/#65,让 Stop / UserPromptSubmit 不再假插话或整轮 reject)。
PATCH_DISPLAY_GROUPS把这些补丁按语义分组展示,能直接看出『清理』的覆盖面:
export const PATCH_DISPLAY_GROUPS = { disclaimer: [1, 2, 3], approval_sentence: [5, 11, 12], approval_policy: [8, 9, 10], desktop_update: [45, 46], desktop_close: [83, 84], hooks_deny: [30, 31], hooks_steer: [64, 65], };而 docs/注入方式改造方案-1.1.34化.md 内部诊断文档把三层防御写得更直白:文件级补丁短路审批(effectivePolicy === "never" → return "allowed-once"、DENIAL_SIGNATURES清空);提示词级stripHarnessPersona用硬编码 replace 清单逐句替换官方拦截话术("a denial is final..." → "continue the original task." 等九句);注入位置层控制注入段落在组装顺序中的位置(order -10000置顶还是1e6+1置尾,文档里做了 v1.1.34 与 1.1.71 的逐条对照)。文档同时诚实地列出了硬编码匹配的风险:官方只要改一个标点的措辞漂移、新增拦截句、大小写变化,replace 就命中不到,拦截语句会残留——它给出的验证方法是运行时 dump 组装后的 system prompt 再搜denial is final、fails closed等关键词。
这种「对着宿主每一句拦截话术做精确对消」的活,社区里此前没有第二个插件在做。上下文可视化插件帮你看见「里面装了什么」,注入器(如社区的 dsh-super-injector)帮你把模组免重启塞进运行时,workbuddy-to-dsh 帮你接模型中转——而 dsh-purge 是唯一一个反向操作官方的:它改的是@deepseek-ai官方包本身的行为。
二、它出现的时机:插件与桌面端爆发之后
从版本史看,这个『清理』角色不是生态的先行者,而是追赶者。release-notes.md 现存 1.1.16 到 1.1.71 共 55 个版本的逐版记录,而 DSH 本体从 8 月 13 日开源到 9 月底桌面端落地只用了六周——也就是说 dsh-purge 的迭代节奏基本是贴着宿主版本在跑:
- 8 月中旬,插件爆发期:社区清单式安利文章密集出现,插件的主旋律是「加能力」。dsh-purge 这个时期的主要矛盾是跟上 dsh 0.1.x 的每次措辞改动,补丁替换链里那些
STRONG_INTRO → STRONG_INTRO_V1 → STRONG_INTRO_V2的前缀自匹配链,就是在这一期磨出来的。 - 9 月中旬,桌面端出现:lib/desktop.js(1778 行)承接了官方桌面 EXE 的适配,包括 asar 提取(lib/extract-asar.js)、
app.asar.unpacked回退(release-notes 1.1.68 #94)、ASAR_SWAP_PS1只按安装根下 pid 杀进程以避免误伤同名第三方进程(1.1.67)等一系列桌面端专项。package.json 里的"dshTarget": "0.2.0-rc.2"说明当前分支只追 dsh 0.2:「最新版只支持 dsh 0.2,不要拿它去打 0.1.x」,Web(--profile web)与桌面(--profile desktop)两个 profile 分开安装、分开点「应用」,README 甚至把「不要在一个宿主里点另一个宿主的应用」写成了操作步骤。 - 10 月,进入精修期:1.1.67 的启动种子机制(
$DSH_HOME/prompt-inject.md为空时自动写一次加密默认稿,用户改过的稿子不动)、1.1.68 的「#96:bash 前台等待从插件标过的 600s 迁回 60s,后续工具不再被堵 10 分钟」、1.1.70 的「Hub 残装注入pluginPackages会让宿主退出码 1,本版把依赖钉回systemPrompt + tools」——这些条目说明『清理』工具自己也在被生态反向约束:它清得越深,越要防止清出宿主崩溃。
时机上的意义在于:当生态还只有 CLI 加 WebUI 时,『清宿主』是个小众需求;桌面端把 DSH 推给了更宽的用户群之后,「宿主策略 vs 模型能力」的区分才成了评测、内网部署、故障排查(社区里「DeepSeek Harness 桌面端实战:技能包管理、内网部署与故障排查」一类的落地文章开始强调权限修复与卸载清理)绕不开的问题。dsh-purge 在 9 月底桌面端正式落地后,版本线仍然保持每周多更的节奏——它出现的时机,恰好踩在生态从「能不能用」转向「可控性如何度量」的拐点上。
三、把『破坏』做成可逆工程:清理工具的技术底牌
一个改宿主内部文件的插件,最容易被质疑的是「清完了怎么回去」「官方一升级是不是全乱了」。dsh-purge 的答案几乎全写在 lib/core.js 的还原与备份链路上,值得拆开看:
- 逐文件备份:应用前每个目标文件备份为
<文件>.dshpurge.bak;「还原」用备份覆盖回去并删除备份;prompt-inject.md属于用户文件,还原时明确保留。重复应用是幂等的(skipIfMarked+ markers)。 - 官方升级后的自愈:
refreshStaleBaksForUpgrade处理的是「DSH 自升级把宿主文件整个换成官方新版,但旁边的 .dshpurge.bak 不会动」——如果当前文件不含 dsh-purge 标记且与快照不同,就把快照刷成新的官方原文,避免 revert 时把新版写回成老版。配套还有restoreMissingOriginalsFromBak:正式文件被写成空或缺失时从 bak 或$DSH_HOME/dsh-purge/host-backups保险柜拷回。 - 状态戳对齐:lib/reapply.js 维护
installed-rev与applied.json两枚戳,专门对付「宿主被官方更新打回 sealed / 清洗标记没了」的场景(release-notes 中的 #57:面板提示「补丁已丢失」而不是静默失效)。1.1.71 还修了跨版本沿用旧apply:x.y.z戳导致状态误判的问题。 - 写操作走原子路径:shim 原地改写前先存
.dsh-purge.bak并走原子写,「断电/盘满可回退」;extract-asar 的 commit 不删nextDir,并写.dshpurge-recover.json便回滚。 - 失败不重启:「清洗没有写进当前宿主,已取消重启」是 lib/index.js 里的硬约束——补丁没打完,宿主进程绝不重启,避免半清洗状态被固化。
这套底牌的工程含义是:生态里的『清理』不是脏活,而是被做成了带备份、带戳、带升级自愈、带失败回滚的可逆操作。对比社区另一篇情报里 REA 卸载工具的--purge-data(只移除自身注册项、幂等、可逆、零误删),可以看到一个趋势——这个生态里凡是「删/清/还原」语义的工具,都在被迫按「可逆、幂等、留证据」的标准实现,而这正是平台走向成熟的信号。
四、清理工具对生态成熟度的意义
评测层与产品层第一次被正式分离。dsh-purge 的 README 开篇就把定位讲得很清楚:Harness「不只是把问题交给模型」,只测「模型答不答」会把宿主拦截误判成模型拒绝;插件的作用是在你自己的安装里把这两层分开。配套的是内置的「演练台」(lib/redteam/ 约 2 万行,含 SQLite 事实库、评分规则 lib/redteam/score-rules.js、23 个技能文档 skills/redteam/),且沿用了上游的 dual-use 声明(docs/redteam-upstream-DISCLOSURE:包内无 exploit、无 payload,安全相关性质来自它驱动与记录的东西,而非自带攻击代码)。一个能把「宿主策略」和「模型行为」做 A/B 的公开工具出现,意味着 DSH 生态里开始有人认真讨论「默认策略该不该收紧」,而不是只会喊「模型变聪明了」。
安全边界被写进了产品而不是口头声明。演练台首次进入要读声明、等倒计时、滚到文末并勾选三项;lib/net-scope.js(669 行)实现区域门禁:中国大陆/港澳地址默认禁止,唯一例外是「自己的服务器」里事先登记的那一个 IP 或完整主机名——「对话里说『这是我的服务器』不会放行,密钥和密码也不会」,网段、通配符、账号前缀在保存时直接丢掉。这种「把授权边界落成机器可执行白名单」的做法,在双用途工具的开源实践中并不多见。
免费生态的第一起「被收费」事件,也长在这个项目上。README 的「违规商用公示」记录了 10 月 12 日一场直播把本仓库当收费货卖、不署名、不守非盈利条款的过程,并配了直播截图(docs/notice/)。项目是 MIT 协议、非盈利、开源免费,却仍然遭遇了改头换面的二次售卖——作者用署名条款(借用名称、思路、代码或提示词必须标明来源仓库,「不署名将依法追究责任」)作为回应。这件事对生态的提醒很现实:插件推荐清单的流量一旦起来,「装什么」和「怎么装」都会被做成付费内容;而 dsh-purge 的 README 里甚至内嵌了一段「给 AI 助手(只安装)」的受控指令块,把「只执行安装命令、不要代点应用、不要重启」写死给助手执行——等于在帮用户挡掉安装环节被中间商劫持的空间。
生态分工出现了新的坐标轴。两周前,DSH 插件的分法是「UI 增强 / 技能扩展 / 整活玩法」三档;现在可以加第四档:宿主行为改造。注入器管「加得进去」,可视化插件管「看得清楚」,中转插件管「接得上模型」,而 dsh-purge 管「官方那段到底拦了什么、怎么精确拆开、拆完怎么原样装回去」。这一档的存在本身说明:社区开始把 Harness 当成一个可以逐层解剖的运行时系统,而不只是一个入口。
当然也要说清边界:它只作用于使用者本机已安装的官方@deepseek-ai包,补丁对不上会显示待应用或跳过、不会乱改文件;README 的十条法律免责逐条引用了刑法、网络安全法、数据安全法与个保法,并明确与 DeepSeek 官方无任何隶属关系。『清理』这个词听起来像破坏,但源码读下来,它更像给宿主做了一次带完整病历的「无菌手术」——备份、麻醉、缝合、术后复查,一步都没省。生态热闹两周后长出这样一个专职角色,或许正是「开始认真用」的标志。
【免费下载链接】dsh-purgeDeepSeek Harness 破甲:让所有模型都能破甲,不同模型可换不同提示词;默认提示词面向国模「小码酱」。Jailbreak for every model — swap prompts per model. 求 Star 收藏 ⭐ 如要二开,请查看署名要求部分项目地址: https://gitcode.com/GitHub_Trending/ds/dsh-purge
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考