RuiC DSH Purge:让 DSH 按项目规则行事且可回滚的事务性维护插件

前言

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 把流程当成一次数据库事务,具体步骤如下:

  1. status / selfcheck:只读预检,查看宿主布局、版本、补丁证据、未完成操作。
  2. plan:列出目标路径、匹配结果、前后 SHA256。
  3. apply --dry-run:完整预检,不写盘。
  4. apply:落快照(manifest.json + 二进制备份),逐文件原子 rename。
  5. 如果全部成功:sealed(归档只读)。
  6. 如果写入失败:恢复已写文件;恢复成功则 rolled_back,否则 recovery_required。
  7. 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

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜