DeepSeek Harness (DSH) 的插件化架构允许 Agent 获取最高权限(如 danger-full-access)。当模型执行 Remove-Item、rm、del 等删除命令时,通常意味着永久性破坏,缺乏安全回退机制。dsh-trash 插件通过拦截删除操作,将其转换为可恢复的移动操作,为 Agent 提供误删保护。
这是一个由 LeonSone 维护的 DSH 插件,核心价值在于将所有删除行为纳入一个可恢复的垃圾存储区。它支持 pwsh、bash 和 run_code 工具,默认回收站位置为 $DSH_HOME/trash,零运行时依赖。
核心功能¶
- 拦截删除命令:在 pwsh、bash 和 run_code 工具的
tools/pre-execute阶段拦截Remove-Item、rm、del、rd、unlink、fs.unlink、os.remove、shutil.rmtree等命令,拒绝执行并引导使用回收站工具。 - 提供回收站工具:提供
trash、trash-list、trash-restore、trash-purge四个工具。 - 默认路径:回收站位置默认为
$DSH_HOME/trash,每个条目包含data/(保留原文件名)和meta.json(记录原路径、时间戳、大小)。 - 跨卷支持:支持跨卷移动,若无法重命名则自动降级为复制。
- 零依赖:仅使用 Node.js 内置模块,无额外运行时依赖。
安装与启用¶
使用官方安装命令添加插件:
dsh plugin --profile web add github:LeonSone/dsh-trash
安装后需重启 dsh web 或 headless runner 以加载插件。
典型用法¶
插件加载后,模型行为自动改变:
- 移入回收站:调用
trash(paths=[...])将文件/目录移动到回收站。 - 查看回收站:使用
trash-list(path?)列出条目(支持路径过滤)。 - 恢复文件:使用
trash-restore(entry_id=...)或trash-restore(path='...')恢复。 - 永久删除:唯一真正删除的路径是
trash-purge(confirm: true)。
适用场景与注意事项¶
- 安全策略:插件采用 Fail-safe 设计,倾向于误报(拦截包含删除命令的字符串)而非漏报,防止真实删除发生。短别名(如
rm、del)仅在命令位置匹配,cat /tmp/rm等场景不会被拦截。 - 覆盖保护:恢复文件时若目标存在,会先将目标备份到回收站,确保无数据丢失。
- 运行权限:插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。
总结¶
dsh-trash 通过拦截标准删除命令并提供 trash-purge 作为唯一出口,为 Agent 提供了安全删除的兜底机制。更多细节与源码请查阅:GitHub。