DSH Plugins Marketplace

DSH Plugins

Plugins

/

Development & Infrastructure

/

RuiC-dsh-purge

H

RuiC-dsh-purge

Manifest valid★ 5

DSH 本机维护插件:预检 → 快照 → 原子写入 → 冲突检测回滚;含提示词管理与设置面板。基于 ZiPengWei/dsh-purge(MIT)。

UI (client)hasBundlePatch

RuiC DSH Purge

让 DSH 真正按你的项目规则办事,而且每一步都能退回。

DSH 本机维护插件 · 预检 → 快照 → 原子写入 → 冲突检测回滚

Release License Node DSH

基于 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_PERSONApersona 追加会话指令应用应用(克制版:照项目约定做完、保留用户改动)
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<br/>只读预检"] --> B["plan<br/>目标路径 + 前后 SHA256"]
    B --> C{"apply --dry-run<br/>完整预检"}
    C -->|不通过| Z["整次中止<br/>不建锁、不建快照"]
    C -->|通过| D["落快照<br/>manifest.json + 二进制备份"]
    D --> E["逐文件原子 rename"]
    E --> F{"全部成功?"}
    F -->|是| G["sealed<br/>归档只读"]
    F -->|否| H["恢复已写文件"]
    H --> I{"恢复成功?"}
    I -->|是| J["rolled_back"]
    I -->|否| K["recovery_required"]
    G --> L["revert<br/>全量哈希冲突检查"]
    L -->|全部匹配| M["还原"]
    L -->|任一冲突| N["拒绝覆盖<br/>保留现状与快照"]

具体保证:

  • 预检即承诺——锚点缺失、同一锚点出现多次、备份失败,任一发生就不写入;
  • 完整替换内容核对,不用短 marker 判命中(避免假阳性),CRLF 原样保留;
  • 进程间锁避免两个实例同时写同一份宿主文件;
  • 回滚是全量的——只要有一个目标被改过或宿主升级过,整次拒绝,而不是"能还的先还了";
  • 不猜锁过期——异常退出后锁不会自动失效,需要你确认原进程结束后手动移除。

安装

从 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
命令做什么会写盘吗
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——不要拿退出码 0 当成"补丁已生效",要看 state。

选项说明
--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 里还有两个入口:

  • 聊天命令:/ruic-purge status|plan|apply|snapshots|revert <id>
  • 模型工具:ruic_purge_status、ruic_purge_plan、ruic_purge_apply、ruic_purge_snapshots、ruic_purge_revert

设置面板

装好后在 DSH 设置里打开 RuiC Purge:

  • 顶部一行状态:已应用 4/8、待应用、宿主不兼容、桌面归档 · 只读检查、需要恢复……一眼看出停在哪;
  • 逐条展示匹配明细,点开能看计划中的前后内容;
  • 独立提示词编辑框:草稿没保存时刷新不会覆盖你的内容,保存带版本冲突检查,失败可重试;
  • 快照列表可直接选一条回滚。

面板的 HTTP 接口只接受本机直连:拒绝代理转发与跨站请求,需要远程就用 CLI。

兼容性

针对实际 DSH Desktop 0.2.1-rc.2 / Cordis 4.0.5 发行包做过检查与隔离测试:

场景支持范围
桌面签名 app.asar自动发现、只读预检、独立提示词、插件命令与工具、权限默认值观察
第三方 Electron 外壳运行时打包在归档根 node_modules/@deepseek-ai 时同样只读预检;Electron 的 asar 路径拦截与 macOS 兜底路径已处理
0.2.1 解包目录精确匹配新版 4 个提示词目标、快照应用、冲突检测回滚
旧版 npm 布局保留上游 8 条补丁;所有目标精确匹配后才写入
新版会话权限用 DSH 原生 /permission;不把文件标记当成当前会话权限
未知版本报告实际版本和匹配结果,不凭版本号宣称兼容

怎么自己复核

不用信这张表,在源码检出里跑一条命令(发行包不含 scripts/):

npm run verify:desktop           # 从安装包里取真实源文件,在临时副本上跑完整 apply/回滚
npm run verify:desktop -- --full # 再解出整个运行时,跑真实 Cordis/DSH 模块集成测试

它会打印宿主版本与逐项步骤,并核对签名包的 size/mtime 在验证前后未变。2026-10-23 对 0.2.1-rc.2 的结果:4/4 新版锚点命中、补丁 5–8 为 native_setting、回滚字节级一致、原包未被改动、运行时集成套件通过。

不会直接改写签名 ASAR、修改 app 签名或自动退出/重启 DSH。归档内补丁能匹配只证明预检通过,不表示已经写入或运行生效。完整的 Desktop UI、登录会话与 Windows/macOS 签名换包不在本版本验证范围内。

逐条证据与不覆盖范围见 docs/COMPATIBILITY.md(含实测文件 SHA256)。

与上游 dsh-purge 的差异

上游 ZiPengWei/dsh-purge(MIT,原作者小杨,基于 commit 084b10d)。本版重写了事务层,保留其补丁定义思路。

方面上游RuiC Purge
写入失败可能半成功整次中止;写入中失败尝试恢复并留状态
命中判定短 marker完整替换内容核对,保留 CRLF
快照备份文件含 SHA256 与操作阶段,可查 prepared/applying/reverting
回滚按记录还原全量冲突检查,冲突即拒绝,无强制覆盖开关
并发—进程间锁
新版适配—常量改名、personaPrefix、Cordis 生命周期、字面提示词模板
设置面板基础面板刷新不覆盖草稿、保存版本冲突检查、错误可重试
数据共享命名空间独立命名空间,不接管、不删除其他 Purge 的备份

旧插件与 RuiC 同时开启会重复注入提示词、并可能争抢同一批宿主文件。迁移前先在 DSH 里停用旧插件。RuiC 不自动卸载其他插件,也不读取旧快照。

数据与迁移

$DSH_HOME/ruic-dsh-purge/
├── prompt.md
└── snapshots/<uuid>/
    ├── manifest.json
    └── 0.bin, 1.bin, ...

默认 ~/.dsh;测试或并行实例请显式 --home。旧的 prompt-inject.md 不会被读取、覆盖或删除,要迁移就手动导入:

node bin/ruic-dsh-purge.js prompt --file /path/to/prompt-inject.md

快照不自动清理,按需归档。

出问题怎么办

node bin/ruic-dsh-purge.js selfcheck --json   # 先看是哪一条没匹配
node bin/ruic-dsh-purge.js snapshots --json   # 看有没有 prepared/applying/recovery_required
  1. 操作异常退出时锁不会自动过期:确认原进程已结束后,手动删掉目标包目录下的 .ruic-dsh-purge.lock。
  2. snapshots 里找 prepared / applying / reverting / recovery_required 的记录,显式 revert <id>。
  3. 遇到 Rollback conflict:保留当前文件和快照,先比对两者。本版没有强制覆盖开关。

逐文件 rename 是原子的,但多文件操作不是整个文件系统事务。不承诺断电零风险,也不承诺抵抗外部进程在"检查"与"写入"之间修改目标;恢复依据是保留的阶段日志与备份。

开发与验证

npm run check              # 静态检查
npm test                   # node --test,全程临时目录
npm run smoke              # 打包冒烟

npm run verify:desktop     # 对已安装的 DSH 做只读实机验证(副本上 apply/回滚)
npm run verify:desktop -- --full   # 另跑真实 Cordis/DSH 模块集成套件

# 已有解包好的运行时时,也可以直接指向它
DSH_RUNTIME_ROOT=/path/to/node_modules/@deepseek-ai npm test

verify:desktop 默认探测 /Applications/DeepSeek Harness.app,也可以 --app <path> 指定 .app、app.asar 或解包目录;加 --json 输出机器可读结果。

测试从不针对真实安装执行 apply。需要发行包的真实 API 集成测试在缺失时会跳过——CI 绿不等于 Desktop 端到端验收通过,所以本项目给了 verify:desktop 让你在真机上复核,而不是只给一句"兼容"。

本次发布未启用 GitHub Actions。跨平台工作流模板在 Release 源码压缩包的 .github/workflows/checks.yml,需要 workflow 写权限后自行推送启用。

边界与免责

  • 这是你自己的机器、你自己的安装上的维护工具。它改的是宿主默认值与提示词,装之前请确认你接受这些变化(旧版布局尤其注意第 7、8 条)。
  • 不绕过 DSH 签名校验、不替换 app.asar、不分发 DSH 本体、账号数据、凭据或解包源码。
  • 与 DeepSeek 无隶属关系,未获其背书;DSH 不在本仓库内。
  • 只改字符串常量与默认值这一层;模型行为、供应商策略、账号风控都不在本项目的可承诺范围内。

关键词:DSH 插件 · DeepSeek Harness · Cordis · 补丁管理 · 事务化写入 · 快照回滚 · 冲突检测 · 提示词管理 · 本机维护 · patch · snapshot · rollback

致谢

补丁定义与设置槽位集成源自 ZiPengWei/dsh-purge(原作者小杨 / YuJunZhiXue)。署名与许可证保留在 LICENSE 与 NOTICE。

另外参考了同源的 Purge Community,README 的版式和"先自检、再应用"的思路借自它,未复制其代码。

MIT © 原作者小杨及 RuiC。独立社区项目,与 DeepSeek 无隶属关系。


如果这个工具帮到了你,可以请我喝杯咖啡 ☕

微信赞赏码

Comments

Loading…

From the same category

awesome-dsh-plugin

by awesome-dsh-plugin

A curated list of plugins for DeepSeek Harness (dsh) · DeepSeek Harness 插件精选列表

Development & Infrastructure

★ 20.4k

CC0-1.0

Python

Oct 23, 2026

Index only — not installable

by 0xsline

DeepSeek Harness (DSH) ecosystem: curated plugins, tools, and infrastructure from dsh-external/hub and the public dsh-plugin topic.

Development & Infrastructure

★ 1.3k

CC0-1.0

Python

Oct 16, 2026

Index only — not installable

by pax-beehive

Open-source CLI, schemas, resolver, and DSH agent tools for DSH Plugin Hub

Development & Infrastructure

★ 277

MIT

TypeScript

Oct 20, 2026

Index only — not installable

by xiajiajun516

DeepSeek Harness (DSH) backup & restore plugin — export, import, migrate and sync your complete DSH configuration, plugins, MCP servers, skills and workspace. One-click migration to another machine.

Development & InfrastructureManifest valid

★ 230

MIT

TypeScript

Oct 23, 2026

dsh plugin --profile web add dsh-config-manager

by yjh051108

推荐组件(非必须):DeepSeek Harness 运行时注入器;已随 dsh-routing-suite 单仓库化保留,本仓库继续维护/发布。

Development & InfrastructureManifest valid

★ 166

TypeScript

Oct 16, 2026

dsh plugin --profile web add @dsh-external/dsh-super-injector

by jigjoy-ai

A CLI that turns a goal into a pull request - and a sandbox for testing concurrent AI coding agents on the Mozaik runtime.

Development & Infrastructure

★ 125

MIT

TypeScript

Oct 22, 2026

Index only — not installable