dsh-files-plus:为 DSH 工作区文件树补齐复制、剪切与右键操作

前言

在 DeepSeek Harness(DSH)里,右侧「工作区文件」树负责浏览当前会话的文件结构。日常开发中常要在树里重命名、新建目录、在资源管理器或 VS Code 中打开路径,有时还要在同一工作区甚至不同会话之间移动文件夹。若宿主自带的交互偏只读或菜单项不全,就只能回到系统文件管理器操作,打断在 Web 客户端里的节奏。

社区插件 dsh-files-plus(维护者 xuehun2,分类为客户端)针对上述场景:在不改 dsh-menu 的前提下,为工作区文件树提供完整右键菜单,并增加插件内剪贴板的复制、剪切、粘贴与 Ctrl+C / Ctrl+X / Ctrl+V(macOS 为 ⌘)快捷键。实现上是纯 Host 路由加纯前端 React,无第三方依赖、无构建步骤,当前版本为 0.1.2,许可证 MIT。

这是什么

一句话定位:Workspace files context menu for DeepSeek Harness with copy, cut, paste and keyboard shortcuts.

插件分 Host(index.js)与 Client(client.js)两半:Client 负责选中态、右键浮层、快捷键与插件剪贴板;Host 注册 /api/workspace-files-plus/*,在工作区边界内执行复制、移动、重命名、删除、下载等文件操作。打开 VS Code、系统浏览器等能力走宿主官方接口,不依赖本进程 PATH。

目录与介绍页:SkillHub 插件页 · GitHub 仓库

核心功能

右键菜单(文件、文件夹与空白区域)

在 [data-files-entry] 行上右键,或在文件树空白区域右键(0.1.2 起空白处不再弹出浏览器原生菜单),可使用下表能力(空白区域菜单会按当前位置推断「当前文件夹」):

菜单项 快捷键 说明
粘贴到文件夹 / 所在文件夹 / 粘贴到此处 Ctrl+V / ⌘V 目录行粘贴到该目录;文件行粘贴到父目录;无选中时粘贴到树根
复制 Ctrl+C / ⌘C 写入插件剪贴板,不写系统剪贴板
剪切 Ctrl+X / ⌘X 标记为移动,粘贴成功后再删源项
复制文件路径 / 复制当前文件夹路径 — 绝对路径写入系统剪贴板
新建文件夹 — 内联输入;目录行在其内创建,文件行在父目录创建
重命名 — 内联输入,支持中文 IME,Enter 提交,Esc 取消
在文件管理器中显示 — remote.session.openWorkspacePath({ action: "reveal" })
在浏览器中打开 — HTML/SVG/XML 等按系统关联;目录可列 HTML 列表
在 VS Code 中打开 — 宿主 open-in-app;文件无关联时打开所在文件夹
在此处打开 PowerShell / cmd — 仅 Windows;独立控制台窗口,cwd 为目标目录
下载文件夹 / 文件 — 目录流式 ZIP;文件直接下载
删除 — 错误色、二次确认后递归删除

单击任意行即选中(左侧品牌色高亮条);右键会先选中该行。剪切仅在粘贴成功后删除源文件;同名冲突默认自动重命名为 名称 - 副本、名称 - 副本 2 等,不覆盖。剪贴板带源 sessionId,支持跨会话粘贴,Host 分别校验两端路径。

快捷键与避让

全局在 window 捕获阶段监听,以下情况不劫持,避免影响编辑区与终端:

  • 焦点在输入框、contenteditable、终端(.xterm)等;
  • 文件树内已有文本选区;
  • 菜单已打开(菜单内输入框可正常粘贴);
  • 最后一次鼠标交互与焦点均不在文件树内。

若预览已抢焦点,可先点回文件树行,或只用右键菜单完成复制/粘贴。

Host 与安全要点

所有路径相对会话工作区根做严格前缀与往返校验;禁止粘贴到自身或子目录;符号链接复制时不解引用;目录 HTML 列表带 Content-Security-Policy: sandbox。复制/移动用 node:fs/promises,不把大文件读入 JS 堆;目录下载为流式 ZIP。

与 dsh-menu 同时启用时,本插件在捕获阶段阻止传播,只显示本插件菜单;确认稳定后建议停用 dsh-menu,减少闲置路由与组件。

安装与启用

资料中的推荐方式为从本地目录安装 Bundle,未提供 dsh plugin add github:… 一类命令;请勿凭插件名拼接安装命令。

方式 A:安装 Bundle(推荐)

  1. 保持仓库目录在磁盘上(无需构建)。
  2. 打开 Harness「插件管理」→「安装 Bundle」,选择仓库目录的绝对路径,例如:
C:\Users\血魂\Documents\deepseek-harness\default-workspace\dsh-files-plus

(Linux/macOS 上请改为你本机克隆或解压后的实际绝对路径。)

  1. 安装后确认 bundle 行 workspace-files-plus 为启用状态。
  2. 若 Host 半区未热更新,重启 DSH 宿主进程,再在浏览器硬刷新(Ctrl+Shift+R)。

方式 B:本地包链接

若已配置 pnpm 与 profile,可由插件管理器完成安装;不要手工改 profile 的 package.json / cordis.patch.yml。

典型用法

下面步骤均可在 Web 客户端内复现,对应 README 中的交互说明。

在同一工作区内整理文件

  1. 在右侧工作区文件树中单击选中文件或文件夹。
  2. 按 Ctrl+C 复制或 Ctrl+X 剪切(macOS 为 ⌘C / ⌘X)。
  3. 选中目标文件夹(或选中某文件以向其父目录粘贴),按 Ctrl+V / ⌘V,或右键选「粘贴到文件夹 / 所在文件夹」。
  4. 底部 toast 会提示结果;粘贴过程中显示「正在粘贴…」。

跨会话搬运

  1. 在会话 A 的工作区树中复制或剪切目标项。
  2. 切换到会话 B,选中目标目录后粘贴。Host 的 transfer 接口会校验 sourceSessionId 与 targetSessionId 下的路径。

空白处建目录或开终端(Windows)

  1. 在已展开目录的子项下方空白处右键,得到「当前文件夹」菜单。
  2. 选「新建文件夹」或「在此处打开 PowerShell / cmd」(非 Windows 不显示终端项)。

下载整个目录

右键目录 →「下载文件夹」,Host 以流式 ZIP 响应,无需在服务器落临时打包文件。

本地冒烟可在仓库根目录执行(需已拉取源码):

pnpm test
# 或:node scripts/smoke-host.mjs

适用场景与注意

适合谁: 主要在 DSH Web 右侧文件树里完成复制、剪切、重命名、打包下载、用 VS Code 或资源管理器打开路径的开发者;Windows 上需要在目标目录开独立 PowerShell/cmd 窗口时也可用菜单项。

权限与信任: 插件以当前 DSH 宿主进程权限读写工作区文件。安装前应阅读 index.js、client.js 与 MIT 许可证,确认路由与路径校验符合你的环境策略。社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系,并非官方应用商店。

其他: 星标数随 GitHub 变动,撰写时仓库为 0 star。单击文件仍会打开预览,与快捷键焦点有关,见上文避让说明。README 中「粘贴冲突策略」等配置在截断段落之后,正文未列出的配置项请勿自行臆测,以仓库最新 README 为准。

结尾

dsh-files-plus 把「工作区文件树」补成可复制的轻量文件管理前端:独立于 dsh-menu,用 Host API 管住边界,用 Client 菜单和快捷键减少跳出 DSH 的次数。需要进一步了解功能与安全设计,请查阅仓库 README 与 CHANGELOG。

  • 插件目录页:https://www.skillhub.cn/plugins/xuehun2/dsh-files-plus
  • GitHub:https://github.com/xuehun2/dsh-files-plus
羽毛球分组比赛记分
小程序二维码

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

Xiaoye