🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI
广告☁️ 云服务器特惠阿里云首购 8 折 · 腾讯云合作特惠
DeepSeek Harness Hub
← 返回列表

NattoCB/dsh-safe-delete

DeepSeek Harnessspec-screened扫描:中风险在 GitHub 查看 ↗
未验证

智能体运行的每一条 rm 都会变成可恢复的移动到 macOS 废纸篓操作。

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/3 · 已提供中文文档

DSH 插件:在每个 bash 会话中拦截 agent rm,并将目标移到 macOS 废纸篓

综合分
28.3
GitHub 分
28.3
用户评分
—
★ Stars
0
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add NattoCB/dsh-safe-delete
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
信任档位:已验证本站已于 0 天前真实安装成功
是什么
dsh 原生插件 · chat
装得上吗
本站已真实安装成功(非静态推断)
安全吗
本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
还在维护吗
活跃:最近一次提交在 22 天前

档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →

🟢实装验证通过· 2026/9/26
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/20(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

由 DeepSeek 最新模型翻译生成
dsh-safe-delete

智能体运行的每一条 rm 都会变成可恢复的移动到 macOS 废纸篓操作。

在工具注册表上设置一个全局守卫 —— ctx.tools.guard() —— 无需改动任何工具、提示词或核心代码

一个 DeepSeek Harness 宿主端插件,让智能体发出的 rm 命令变得可恢复:目标会被移动到 macOS 废纸篓而不是被删除,覆盖 GUI 会话、自动化运行、无头桥接以及子智能体。在设置 → 通用中的一个开关即可将其关闭 —— 关闭后,命令按 DSH 原生行为执行。

功能特性

- 可恢复删除 —— 处于命令位置的 rm 会被拦截并改写为 /usr/bin/trash -v;模型会收到一份确切移动了哪些内容的报告,因此不会有任何东西悄无声息地消失。
- 所有会话,一个守卫 —— 在 DSH 工具注册表上注册一次;GUI 聊天、定时自动化、无头桥接和子智能体全部覆盖,无需按会话逐一接线。
- 感知 Shell 的拦截 —— 保留引号的词法分析器可捕获复合命令(&&、||、;、|)中的 sudo rm、/bin/rm、带 env/nice 前缀的 rm、VAR=x rm 以及 xargs rm。
- 设计上故障安全 —— 可能隐藏 rm 的构造($(...)、反引号、子 shell、heredoc、eval、嵌套的 sh -c)会被拦截并给出指引,而不是被改写;移动失败会被报告,绝不会作为真正的删除重试。
- 运行时开关 —— 可在 Web GUI 中切换(设置 → 通用 → 安全删除),或通过 POST /safe-delete/config 切换;状态会持久化在 $DSH_HOME/storages/safe-delete.json 中,重启后依然保留。

工作原理

该插件在 DSH 工具注册表上安装一个守卫。每次 bash 工具调用在执行前都会被扫描:

flowchart LR
A["bash tool call"] --> B{"rm in commandposition?"}
B -- "no" --> C["native execution"]
B -- "yes" --> D{"switch on?"}
D -- "off" --> C
D -- "on" --> E{"safelyrewritable?"}
E -- "否:子 shell、eval、heredoc、反引号" --> F["拒绝并给出指引,不执行任何内容"]
E -- "是" --> G["运行 trash -v,拒绝原始命令,报告目标"]

被拦截的调用会被拒绝,并由守卫自身以 trash 方式重新执行,因此引号和 glob 都能保留:

[dsh-safe-delete] intercepted rm — the targets were MOVED TO TRASH (recoverable),
not deleted. Original command denied. Targets: build/ dist
trash: build/ → .Trash/build/

普通的非 rm 命令会原样通过;仅仅提及 rm 的命令(echo rm、grep "rm " log)会被忽略。rm 的标志(-f、-r 等)会被剥离而不是被遵循:trash 原生就能移动整个目录。

范围与限制

| | 已覆盖 | 未覆盖 |
|---|---|---|
| 命令 | rm、sudo rm、绝对路径 rm、xargs rm —— 简单和复合形式 | find -delete、unlink、git clean、各语言运行时自带的文件 API |
| 保证 | 在执行前于守卫层被拦截 | 该守卫是针对最常见破坏性动词的防误操作网,而非沙箱 |

sudo rm 会在 sudo 运行之前就被拦截,但回收需要 root 权限的文件仍可能失败 —— trash 的错误会原样报告。

安装

dsh plugin --profile web add github:NattoCB/dsh-safe-delete

重启 DSH web 进程 —— 宿主侧 bundle 及其补丁在进程启动时加载。启动时插件会记录一次 rm guard active。

配置

| 入口 | 方式 |
|---|---|
| Web GUI | Settings → General → Safe Delete —— 开关在下次 bash 调用时生效,无需重新加载 |
| HTTP | GET /safe-delete/config → { "enabled": bool };POST /safe-delete/config 携带 { "enabled": bool } |
| 文件 | $DSH_HOME/storages/safe-delete.json —— { "enabled": bool } |

默认:启用。 状态文件缺失或损坏也会解析为启用 —— 安装该插件即表达了希望拥有守卫的意图,而损坏的文件绝不会静默降低保护。

开发

npm test        # node --test: lexer, rewrite matrix, guard contract, switch store/API

词法分析器/重写器以 exports._internals 导出,以便测试能够覆盖真实的代码路径(analyzeCommand、tokenize、splitSegments、makeGuard、ConfigStore、handleConfigRequest)。

许可证

MIT —— 属于 awesome-dsh-plugin 生态系统的一部分。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入社群

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

DPharness QQ 群二维码,QQ 扫码进群
QQ 扫码进群
DPharness 飞书群二维码,飞书扫码进群
飞书扫码进群