dsh-recycle-bin: Move DSH deletions to the Windows Recycle Bin

前言

DeepSeek Harness(DSH)在工具层不提供直接的 delete,模型要删文件往往只能走 pwsh、bash、terminal_send 或 run_code。这些通道一旦执行 Remove-Item、rm 或 Node 的 fs.rm,文件通常会被永久删掉,误操作后很难从资源管理器里找回来。下面介绍社区插件 dsh-recycle-bin(维护者 yanli-nyan,SkillHub 分类 admin-security):用 trash 工具把删除送进系统回收站,并在常见 shell / 代码入口上拦截或引导,降低「一条命令清盘」的概率。它运行在 DSH 进程权限内,不能替代整机文件系统 ACL;SkillHub 是独立社区目录,与 DeepSeek / 幻方无官方从属关系。

这是什么

dsh-recycle-bin 是 DSH 的工具层守卫:提供 trash、trash_list、trash_restore,并对 pwsh / bash / terminal_send / run_code 上的永久删除语义做识别与拦截(可配置为仅提供工具、不拦截)。实现只依赖 Node 内置模块,无额外 npm 依赖。当前公开资料标明 MIT 许可,仅适用于 Windows,且 trash 依赖本机 powershell.exe。

核心功能

  1. trash 工具:删除文件或目录时写入 Windows 回收站,可从资源管理器或 trash_restore 还原。
  2. trash_list / trash_restore:列出各卷回收站中可还原条目(读 $Recycle.Bin 下 $I 元数据),按 id 还原到原路径。
  3. 永久删除守卫:在四个模型常用入口上识别直接删除命令、嵌套 shell、脚本文件内容、内联 -e/-c 代码、run_code 中的 Node 删除 API,以及 Clear-Content 等内容破坏类操作;可通过 allowPaths 放行如 .dsh/tmp、node_modules 等路径。
  4. 系统提示:告知模型本环境应使用 trash,而非假设存在永久删除能力。

插件文档明确列出仍可能漏拦的情形(动态拼方法名、eval 解码、删除藏在模块内、超大脚本中段、关闭拦截配置等),并说明 guard 不是安全边界,只能降低误删概率。

安装与启用

官方推荐从 GitHub 安装(示例使用 desktop profile,按你的 profile 替换):

dsh plugin --profile desktop add https://github.com/yanli-nyan/dsh-recycle-bin

Release 附带 tgz 时可离线安装:

dsh plugin --profile desktop add ./local-dsh-recycle-bin-1.6.0.tgz

本地开发目录安装(改代码后需在插件管理中禁用再启用,或重启 DSH):

dsh plugin --profile desktop add <本目录绝对路径>

用 tgz 或 git 方式安装的是解包副本,升级需先 remove 再 add。安装前建议阅读仓库源码与 MIT 许可证;插件以当前 dsh 进程权限 运行。

配置

在 profile 的 cordis.patch.yml 中覆盖插件配置,无需改包内文件:

- id: recycle-bin
  config:
    mode: enforce              # off:只提供 trash,不做拦截
    enforceOnTerminal: true    # 拦 terminal_send(持久终端绕过 pwsh)
    enforceOnCode: true        # 拦 run_code 的 Node fs 删除
    enforceScriptFiles: true   # 读命令行里点名的脚本文件内容再判断
    listTool: true             # 注册 trash_list
    restoreTool: true          # 注册 trash_restore
    allowPaths:                # 构建产物可直接删除,不打扰
      - .dsh/tmp
      - node_modules

allowPaths 显式留空会回落到默认值,而不是清空白名单。

典型用法

模型侧删除文件应调用 trash,传入路径数组。删除后查看回收站:

trash_list({ limit: 20 })

返回 { entries, total },每条含 id、path、size、deletedAt。按 id 还原:

trash_restore({ ids: ["KFV3TQ.txt"] })

trash 返回的 status 包括 recycled、missing、unavailable、denied、refused(如无回收站的 FAT32/U 盘卷会主动拒绝)、failed 等,便于区分「已进回收站」与「无法安全删除」。

适用场景与注意

适合:在 Windows 上用 DSH 做本地开发、希望智能体删文件先进回收站、并限制模型通过 shell / 代码通道绕过的情况。

不受保护(文档表格已说明):资源管理器 Shift+Del、编辑器 / git / npm 等其他进程、DSH 之外的任何进程。要覆盖整机删除需文件系统 ACL 或专门监控,不在本插件范围。

务必:安装前核对源码与许可证;不要把拦截当作安全保证;无 PowerShell 时 trash 不可用。

结尾

dsh-recycle-bin 针对 DSH「没有内置 delete、只能走命令与代码」这一现实,把可恢复删除和多层文本守卫叠在同一插件里,适合作为 Windows 桌面 profile 的安全辅助。目录与说明见 SkillHub 插件页,源码与版本历史见 GitHub:yanli-nyan/dsh-recycle-bin。

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

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

Xiaoye