RuiC-dsh-purge
RuiC DSH maintenance plugin: preflight, transactional patches, verified snapshots and conflict-aware rollback.
一句话定位
RuiC DSH maintenance plugin: preflight, transactional patches, verified snapshots and conflict-aware rollback.
安装方式
在 DSH 的 web profile 中执行下面的命令;装完刷新页面即可。
$ dsh plugin --profile web add 'git+https://github.com/HRuiCcc/RuiC-dsh-purge.git#7fc595b957dcf567f5431ee09769a03a2baa253c'
兼容的 DSH 版本
未声明
作者与热度
HRuiCcc · ★ 26 · 更新于 2026-11-01
关于这个插件
RuiC DSH Purge
让 DSH 真正按你的项目规则办事,而且每一步都能退回。
DSH 本机维护插件 · 预检 → 快照 → 原子写入 → 冲突检测回滚
基于 [ZiPengWei/dsh-purge](https://github.com/ZiPengWei/dsh-purge) 重写 · MIT · 独立社区项目
---
它是什么
一个跑在你自己机器上的 DSH 插件。DSH 默认把项目里的 AGENTS.md 称为"仅供参考、不覆盖系统指令",也默认走审批与沙箱拦截。RuiC Purge 按需改掉这些默认值——并且把整个改动做成一次可撤销的事务:
- 先看清楚:
status/plan告诉你当前宿主版本、命中了哪几个目标、改动前后的 SHA256; - 再动手:写入前必定落快照,逐文件原子 rename,失败尝试恢复;
- 随时能回去:
revert前全量比对哈希,你自己后来改过的文件不会被覆盖; - 改坏了有据可查:
prepared / applying / reverting / recovery_required每个阶段都留在快照里。
它只改你指定路径下 DSH 包里的少量字符串常量和默认值:不改签名 app.asar、不重签名、不自动重启、不联网、不上传任何东西。
设计原则
| 原则 | 含义 |
| --- | --- |
| 本机优先 | 逻辑全在本机跑;不碰云端账号,不发提示词和配置出去 |
| 可见 | 每个动作都有状态与证据,不靠"应该生效了吧" |
| 可回滚 | 写入前自动快照;回滚前逐个核对哈希,冲突就拒绝 |
| 不猜 | 锚点必须精确匹配;版本号相同也要匹配上才算兼容 |
| 不越界 | 不递归扫描家目录、不接管其他 Purge 的备份、不自动卸载插件 |
它到底改了什么
一共 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 |
> ⚠️ 旧版布局(< 0.2)8 条全打,其中第 7、8 条会把沙箱默认模式改成 danger-full-access、审批策略改成 never——这是全局默认值,影响之后所有会话。只在自己的机器上用,装完先看 status 再决定留不留。
为什么新版不打权限补丁了
不是偷懒,是实测结论:新版 never 策略仍然会拒绝需要审批的请求,光把提示词改成"全权限"改变不了它;而只改 macOS Seatbelt 也同步不了内建文件工具的权限。所以新版改用官方开关:
/permission /permission danger-full-access
permission.defaultPreset 管的是未来会话的默认值,已恢复的会话可能保留自己的权限——面板会标出这个证据边界,不替你切。
为什么是事务,不是脚本
大多数"补丁脚本"是 sed 一下、失败再说。这里把流程当成一次数据库事务:
flowchart TD
A["status / selfcheck只读预检"] --> B["plan目标路径 + 前后 SHA256"]
B --> C{"apply --dry-run完整预检"}
C -->|不通过| Z["整次中止不建锁、不建快照"]
C -->|通过| D["落快照manifest.json + 二进制备份"]
D --> E["逐文件原子 rename"]
E --> F{"全部成功?"}
F -->|是| G["sealed归档只读"]
F -->|否| H["恢复已写文件"]
H --> I{"恢复成功?"}
I -->|是| J["rolled_back"]
I -->|否| K["recovery_required"]
G --> L["revert全量哈希冲突检查"]
L -->|全部匹配| M["还原"]
L -->|任一冲突| N["拒绝覆盖保留现状与快照"]
具体保证:
- 预检即承诺——锚点缺失、同一锚点出现多次、备份失败,任一发生就不写入;
- 完整替换内容核对,不用短 marker 判命中(避免假阳性),CRLF 原样保留;
- 进程间锁避免两个实例同时写同一份宿主文件;
- 回滚是全量的——只要有一个目标被改过或宿主升级过,整次拒绝,而不是"能还的先还了";
- 不猜锁过期——异常退出后锁不会自动失效,需要你确认原进程结束后手动移除。
安装
从 [Releases](https://github.com/HRuiCcc/RuiC-dsh-purge/releases/latest) 取 ruic-dsh-purge-1.0.2.tgz,在对应 DSH 实例的 CLI 上装:
同分类对比
同一分类下 Star 最高的 5 个,便于横向比较。
| 插件 | 作者 | Star | 版本 | 更新 |
|---|---|---|---|---|
| dsh-purge | kingcharleslzy-ai | 6.3K | 1.6.86 | 2026-11-08 |
| dsh-unrestricted | yexi-by | 1.1K | 0.2.8 | 2026-11-05 |
| dsh-univer-office | dream-num | 707 | 0.4.0 | 2026-11-03 |
| dsh-synapse | liangmianya | 697 | 0.5.7 | 2026-11-04 |
| dsh-qqbot | tencent-connect | 570 | 0.5.5 | 2026-11-08 |