前言¶
在 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(推荐)¶
- 保持仓库目录在磁盘上(无需构建)。
- 打开 Harness「插件管理」→「安装 Bundle」,选择仓库目录的绝对路径,例如:
C:\Users\血魂\Documents\deepseek-harness\default-workspace\dsh-files-plus
(Linux/macOS 上请改为你本机克隆或解压后的实际绝对路径。)
- 安装后确认 bundle 行
workspace-files-plus为启用状态。 - 若 Host 半区未热更新,重启 DSH 宿主进程,再在浏览器硬刷新(
Ctrl+Shift+R)。
方式 B:本地包链接¶
若已配置 pnpm 与 profile,可由插件管理器完成安装;不要手工改 profile 的 package.json / cordis.patch.yml。
典型用法¶
下面步骤均可在 Web 客户端内复现,对应 README 中的交互说明。
在同一工作区内整理文件
- 在右侧工作区文件树中单击选中文件或文件夹。
- 按
Ctrl+C复制或Ctrl+X剪切(macOS 为⌘C/⌘X)。 - 选中目标文件夹(或选中某文件以向其父目录粘贴),按
Ctrl+V/⌘V,或右键选「粘贴到文件夹 / 所在文件夹」。 - 底部 toast 会提示结果;粘贴过程中显示「正在粘贴…」。
跨会话搬运
- 在会话 A 的工作区树中复制或剪切目标项。
- 切换到会话 B,选中目标目录后粘贴。Host 的
transfer接口会校验sourceSessionId与targetSessionId下的路径。
空白处建目录或开终端(Windows)
- 在已展开目录的子项下方空白处右键,得到「当前文件夹」菜单。
- 选「新建文件夹」或「在此处打开 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