dsh-host-fs:在 DSH 宿主进程中删除与移动文件

前言

DSH 提供了两种与文件系统交互的路径:一是 ctx.fs 以及配套的 read/write/edit 工具,它们只有 stat/read/list/write/edit,没有删除能力;二是通过 shell 工具(pwsh / bash)执行命令,但子进程以 Low integrity 运行,无法在 DSH 的家目录等高完整性目录中写入或删除文件。在 Windows 上,这就意味着很多需要操作宿主机文件系统的场景无法实现。

插件可以以宿主进程的身份运行,拥有与用户相同的完整性级别。dsh-host-fs 利用这一点,在宿主进程中直接调用 node:fs 的删除与移动接口,填补了 DSH 自身文件工具缺失的删除能力,也解决了 shell 工具因安全隔离而无法访问工作区外目录的问题。

是什么

dsh-host-fs 是一个为 DSH(DeepSeek Harness)编写的插件,由维护者 sniperdown 提供。它将 fs_remove 和 fs_move 两个文件操作工具注入到 DSH 会话中,支持在宿主进程内删除与移动文件,包括工作区之外的路径。插件自带会话闸门与路径闸门,默认拒绝所有访问,需要显式配置后才能使用。

核心功能

  • 在宿主进程中执行文件删除与移动操作
  • 工具名称:fs_remove、fs_move
  • 命令:/fs-acl(查看当前会话与已加载的配置)
  • 会话闸门:通过 sessionMode 与 sessionList 控制哪些会话可以使用工具
  • 路径闸门:通过 pathAllow 与 pathDeny 限制可访问的目录
  • 一键审批:当路径不在白名单与黑名单中时,可通过 DSH 的审批 API 进行一次性放行(askOutside)

安装与启用

安装方式可以从 npm(待发布)、Git 仓库或本地检出中任选其一:

# 从 npm 安装(插件发布后可用)
dsh plugin --profile <name> add dsh-host-fs

# 从 Git 仓库安装
dsh plugin --profile <name> add github:sniperdown/dsh-host-fs

# 从本地检出安装
dsh plugin --profile <name> add link:/absolute/path/to/dsh-host-fs

安装后需要重启 DSH 一次,插件才会在加载时导入。

配置

安装完成后,在 DSH 的设置页面进入「Plugins」→「Files」选项卡(或进入插件「dsh-host-fs」对应的设置页)。主要配置项包括:

  • sessionMode:会话闸门模式,可选 off、allowlist、denylist、all,默认 off(无人可用)
  • sessionList:允许或拒绝的会话列表,每行一个,支持精确 id、前缀通配符(如 qq-*)、预设(preset:example)或通配符 *
  • pathAllow:白名单,每行一个路径,该路径及其所有子路径均被允许
  • pathDeny:黑名单,同样每行一个路径,优先级高于白名单
  • askOutside:当路径既不在白名单也不在黑名单中时,是否通过 DSH 的审批 API 请求一次性放行,默认 true

配置保存时会一次性写入到配置中,单独勾选不会持久化。

工具使用

fs_remove

在允许使用的会话中调用 fs_remove,参数如下:

  • path:要删除的路径(字符串,必填),可以是绝对路径,相对路径则相对于会话工作目录解析
  • recursive:是否递归删除非空目录(布尔值,必填)
  • dryRun:仅测量并报告,不实际删除(布尔值)

返回值包含 { path, kind, entries, bytes, dryRun, approved },其中 kind 为 file/dir/link/other/missing。如果路径不存在,kind 为 missing,不会抛出错误。

fs_move

fs_move 用于移动文件或目录,参数包括:

  • from:源路径(字符串,必填)
  • to:目标路径(字符串,必填)
  • overwrite:是否覆盖已存在的目标(布尔值)
  • dryRun:仅报告,不实际移动(布尔值)

插件会自动创建缺失的父目录,拒绝将目录移动到其自身的子树中,跨盘移动时则转为复制后再删除。

/fs-acl

在会话中输入 /fs-acl 可以查看当前会话的 id、预设、工作目录以及当前加载的配置。报告还会给出一行可直接放入 sessionList 以放行当前会话的示例。

适用场景与注意

  • 适合需要在 DSH 中直接删除或移动宿主机文件(尤其是工作区外路径)的场景
  • 需要配合会话闸门与路径闸门使用,默认安全关闭,建议先以 dryRun: true 测试
  • 插件以宿主进程权限运行,请确保从可信来源安装并检查许可证
  • 在 Windows 上,junction 的检测与删除行为有特殊处理,请参考插件 README 中的说明

小结

dsh-host-fs 通过在 DSH 宿主进程中直接调用文件系统接口,补齐了 DSH 自身文件工具在删除与移动方面的空白,同时为 shell 工具无法访问的目录提供了可行方案。借助会话与路径的双重闸门,它可以在安全与能力之间取得平衡。

技能汇目录页
GitHub 仓库

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

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

Xiaoye