前言¶
DSH(DeepSeek Harness)默认把项目里的 AGENTS.md 视为“仅供参考、不覆盖系统指令”,同时默认走审批与沙箱拦截。这意味着即便你提供了项目规则,Agent 仍然可能无法按你的预期执行。想要让 Agent 真正遵循项目约定,需要在 DSH 本地改掉这些默认值。
RuiC DSH Purge 是一个跑在你自己机器上的 DSH 插件,它按需改掉这些默认值,并把整个改动做成一次可撤销的事务。它只改 DSH 包里的少量字符串常量和默认值,不改签名、不重签名、不自动重启、不联网、不上传任何东西。
它是什么¶
RuiC DSH Purge 是一个 DSH 本机维护插件,基于上游 ZiPengWei/dsh-purge 重写,采用 MIT 许可证。它通过预检 → 快照 → 原子写入 → 冲突检测回滚的流程,保证对 DSH 的修改是可验证、可回滚的。
核心能力包括:
- 状态与证据可见:
status/plan告诉你当前宿主版本、命中了哪些目标、改动前后的 SHA256。 - 写入前必定落快照:逐文件原子 rename,失败时尝试恢复。
- 随时能回去:
revert前全量比对哈希,避免覆盖你自己后来改过的文件。 - 改坏有据可查:
prepared / applying / reverting / recovery_required每个阶段都留在快照里。
核心功能¶
事务流程¶
RuiC DSH Purge 把流程当成一次数据库事务,具体步骤如下:
status/selfcheck:只读预检,查看宿主布局、版本、补丁证据、未完成操作。plan:列出目标路径、匹配结果、前后 SHA256。apply --dry-run:完整预检,不写盘。apply:落快照(manifest.json + 二进制备份),逐文件原子 rename。- 如果全部成功:
sealed(归档只读)。 - 如果写入失败:恢复已写文件;恢复成功则
rolled_back,否则recovery_required。 revert <id>:全量哈希冲突检查后还原;任一冲突则拒绝覆盖,保留现状与快照。
补丁与新版适配¶
插件共 8 条补丁,分两层。新版 DSH 只打其中 4 条,剩下 4 条交回 DSH 自己的权限机制。
| # | 层 | 补丁 | 改什么 | 新版 0.2+ |
|---|---|---|---|---|
| 1 | 提示词 | WORKSPACE_CONTEXT_INTRO |
“仅供参考”→“本次会话强制生效” | 应用(常量改名,按新名匹配) |
| 2 | 提示词 | REPLACEMENT_WORKSPACE_CONTEXT_INTRO |
同上,替换式基线 | 应用(同上) |
| 3 | 提示词 | SCOPE_INTRO |
作用域免责→强制措辞 | 应用 |
| 4 | 提示词 | SYSTEM_PROMPT_PERSONA |
persona 追加会话指令 | 应用(克制版:照项目约定做完、保留用户改动) |
| 5 | 提示词 | APPROVAL_NEVER_SENTENCE |
审批提示句 | native_setting |
| 6 | 代码 | SANDBOX_DENY_FILE_WRITE |
沙箱 deny file-write*→allow |
native_setting |
| 7 | 代码 | SANDBOX_MODE_DEFAULT |
默认模式→danger-full-access |
native_setting |
| 8 | 代码 | APPROVAL_POLICY_DEFAULT |
默认策略→never |
native_setting |
命令列表¶
| 命令 | 做什么 | 会写盘吗 |
|---|---|---|
status / selfcheck |
宿主布局、版本、补丁证据、未完成操作 | 否(默认行为) |
plan |
目标路径、匹配结果、前后 SHA256 | 否 |
apply --dry-run |
完整预检 | 否,连锁和快照都不建 |
apply |
备份校验后逐文件原子写入 | 是 |
snapshots |
列出保留的快照与操作状态 | 否 |
revert <id> |
全量哈希冲突检查后还原 | 是 |
prompt |
读取独立提示词 | 否 |
prompt --file rules.md |
导入 UTF-8 提示词(≤ 128 KiB) | 是 |
退出码不等于生效。 ok:false 或异常一律退出码 1;pending(待应用)和 sealed(归档只读)可以是 ok:true——要看 state。
设置面板¶
装好后在 DSH 设置里打开 RuiC Purge:
- 顶部一行状态:
已应用 4/8、待应用、宿主不兼容、桌面归档 · 只读检查、需要恢复等。 - 逐条展示匹配明细,点开能看计划中的前后内容。
- 独立提示词编辑框:草稿没保存时刷新不会覆盖内容,保存带版本冲突检查,失败可重试。
- 快照列表可直接选一条回滚。
面板的 HTTP 接口只接受本机直连:拒绝代理转发与跨站请求,需要远程就用 CLI。
安装与启用¶
从 Releases 取 ruic-dsh-purge-1.0.2.tgz,在对应 DSH 实例的 CLI 上装:
dsh plugin --profile desktop add ./ruic-dsh-purge-1.0.2.tgz
# Web 实例用 --profile web
装完手动重开对应的 DSH 实例,在设置里找到 RuiC Purge。
安装时注意:
- 系统
PATH里没有dsh时,用 DSH 自带的命令行入口。不要为了装它另外装一个旧版全局 DSH——会和现有桌面实例打架。 - 已有 profile 需要先由 DSH 初始化过。
- 官方桌面客户端的 profile 归 Electron 应用独占,CLI 可能报
profile "desktop" is managed exclusively by the Electron application。这时改用你实际在跑的实例对应的 profile 名和它的$DSH_HOME,例如第三方外壳DeepSeek Bot的--profile ds-bot:
DSH_HOME=<该实例的 home> dsh plugin --profile <名> add ./ruic-dsh-purge-1.0.2.tgz
装完同样要重开那个实例。
- 本项目没有发布到 npm registry,npm install -g ruic-dsh-purge 不是安装方式。已下载的 tgz 可以本地全局装 CLI:
npm install -g ./ruic-dsh-purge-1.0.2.tgz
从源码安装:
git clone https://github.com/HRuiCcc/RuiC-dsh-purge.git
cd RuiC-dsh-purge
npm test
npm pack --ignore-scripts
dsh plugin --profile desktop add .
典型用法¶
不装全局 CLI 也能跑:
node bin/ruic-dsh-purge.js status --json
node bin/ruic-dsh-purge.js plan --base '/Applications/DeepSeek Harness.app' --json
# 只在明确指定的解包宿主上写入;先看 dry-run
node bin/ruic-dsh-purge.js apply --base /path/to/node_modules/@deepseek-ai --dry-run --json
node bin/ruic-dsh-purge.js apply --base /path/to/node_modules/@deepseek-ai --json
node bin/ruic-dsh-purge.js snapshots --json
node bin/ruic-dsh-purge.js revert <snapshot-id> --base /path/to/node_modules/@deepseek-ai --dry-run
node bin/ruic-dsh-purge.js revert <snapshot-id> --base /path/to/node_modules/@deepseek-ai
在 DSH 里还有两个入口:
- 聊天命令:
/ruic-purge status|plan|apply|snapshots|revert <id> - 模型工具:
ruic_purge_status、ruic_purge_plan、ruic_purge_apply、ruic_purge_snapshots、ruic_purge_revert
选项说明:
--base <path>:DSH 包目录、.app、Resources或 ASAR;也可用DSH_BASE。--home <path>:数据目录,默认~/.dsh;也可用DSH_HOME。--shim-dir <path>:仅 Windows 旧版 npm shim 需要。--json:机器可读输出,失败退出码非 0。
显式路径给错时会报错退出,不会悄悄换一个安装去改。
Windows 旧版 npm 布局要显式传 --shim-dir <npm-prefix>,dsh.cmd 和 dsh.ps1 两份都存在且都匹配才并入同一快照;回滚时传同一个目录。已有的 DSH_PERMISSION_MODE 环境变量会被保留。
适用场景与注意¶
适合谁:
- 需要项目级提示词在 DSH 里强制生效的开发者。
- 希望对 DSH 本地修改有可验证、可回滚流程的工程师。
- 使用新版 DSH 0.2+,希望利用官方
/permission机制控制权限的开发者。
注意:
- 插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。
- 旧插件与 RuiC 同时开启会重复注入提示词、并可能争抢同一批宿主文件。迁移前先在 DSH 里停用旧插件。
- RuiC 不自动卸载其他插件,也不读取旧快照。
- 快照不自动清理,按需归档。
- 面板的 HTTP 接口只接受本机直连,需要远程就用 CLI。
结尾¶
RuiC DSH Purge 通过事务化流程,让 DSH 按你的项目规则办事,而且每一步都能退回。它只改本地 DSH 包里的少量字符串常量和默认值,不改签名、不重签名、不自动重启、不联网、不上传任何东西。
目录页:https://www.skillhub.cn/plugins/HRuiCcc/RuiC-dsh-purge
GitHub:https://github.com/HRuiCcc/RuiC-dsh-purge