dsh-menu:为 DSH 工作区文件树补上可用的右键菜单

前言

在 DeepSeek Harness(DSH)Web 客户端里,侧边栏「工作区文件」树是日常改代码、看目录的主入口。浏览器自带的右键菜单往往只有复制、检查之类,无法直接在工作区里建文件夹、重命名或把路径交给本机编辑器。要么切到终端或资源管理器,要么自己写脚本调 Host API,打断节奏。

dsh-menu 是维护者 tangu2023 发布的客户端插件,专门给这棵树挂一套自定义右键菜单,把常见文件操作收进侧边栏。实现上是纯前端 UI 加 Host 路由,无第三方依赖、无构建步骤,适合已经跑起 DSH Web GUI、又希望少切窗口的开发者。

这是什么

dsh-menu(npm 包名 dsh-menu,仓库 tangu2023/dsh-menu)面向 DSH Web 客户端侧边栏的「工作区文件」树:在文件或文件夹行上右键时,拦截浏览器默认菜单,改弹插件自绘菜单。Host 半区负责重命名、建目录、删除、打开、下载等文件系统操作;Client 半区只发 JSON 请求并展示交互。当前公开版本为 1.0.2,许可证 MIT。插件索引见 SkillHub 目录页;社区插件目录与 DeepSeek / 幻方无官方从属关系,安装前仍建议自行查看源码与许可证。

核心功能

右键任意 [data-files-entry] 树行后,菜单项顺序与 README 一致,共八项:

  1. 新建文件夹:内联输入;点在目录行则在其内部创建,点在文件行则在父目录创建。
  2. 重命名:内联编辑当前名称(仅改名,不移动)。
  3. 在文件管理器中显示:走官方 remote.session.openWorkspacePath({ action: "reveal" }),在系统资源管理器中定位。
  4. 在浏览器中打开:文件原样返回内容;目录渲染为可浏览的 HTML 列表(HTML 响应带 CSP sandbox)。
  5. 在 VS Code 中打开:解析本机 VS Code 并打开文件或目录(Windows 为主要实测平台;macOS / Linux 有候选路径回退)。
  6. 复制文件路径:把工作区路径写入剪贴板。
  7. 下载文件夹 / 下载文件:目录流式打包 ZIP;单文件直接下载。
  8. 删除:菜单项为危险样式,点击后二次确认再执行递归删除。

交互上,重命名与新建共用内联表单,支持中文输入法组合输入、Enter 提交、Esc 取消;操作结果有 toast;点击外部、滚动或缩放窗口会关闭菜单。文案随界面语言在 zh / en 间切换。

Host 侧路由统一挂在 /api/workspace-files-menu/* 命名空间,例如重命名、建目录、删除为 POST;浏览器打开与下载为 GET。所有操作先做会话工作区根路径校验,越界返回 403;对工作区根目录的删除一律拒绝。

安装与启用

前置:已部署并运行 DeepSeek Harness(含 Web GUI);宿主进程需能运行 Node.js 与 pnpm。

推荐从 npm 安装(README 原文命令):

dsh plugin --profile web add dsh-menu

也可从 GitHub 或本地目录安装(后者在插件管理中选择仓库绝对路径,无需构建)。GitHub 方式示例:

dsh plugin --profile web add github:tangu2023/dsh-menu

三种方式装完后步骤相同:

  1. 重启 DSH 宿主进程,让 Host 半区(index.js)重新加载;仅靠插件管理器的 enable/disable 不会重载已缓存模块。
  2. 浏览器 硬刷新(如 Ctrl+Shift+R),加载 Client 半区(client.js)。

卸载示例:

dsh plugin --profile web remove dsh-menu

cordis.patch.yml 由插件管理器写入 profile,请勿手工改 profile 下的 package.json / cordis.patch.yml。若 pnpm 对新包有 minimumReleaseAge 保护,dsh plugin add 会自动把 dsh-menu 加入排除列表。

典型用法

安装并重启、硬刷新之后,在侧边栏「工作区文件」中 右键任意文件或文件夹行 即可。无需额外配置项。

  • 「新建文件夹 / 重命名」:在树行旁的内联框输入名称后确认。
  • 「删除」:先进入确认面板,再点确认才会调用 Host 删除。
  • 其余项点击即执行,成功或失败会有 toast。

若需直接验证 Host 路由(需替换真实 sessionId 与路径),README 给出冒烟示例:

curl -X POST http://127.0.0.1:12012/api/workspace-files-menu/rename \
  -H "Content-Type: application/json" \
  -d '{"sessionId":"<会话ID>","path":"D:/workspace/a.txt","name":"b.txt"}'

右键仍是浏览器默认菜单时,先硬刷新,并确认 shell.overlay 槽位存在 id 为 workspace-files-menu 的占用;Host 路由 404/500 而插件已启用时,优先重启宿主进程。

适用场景与注意

适合谁:长期在 DSH Web 里通过「工作区文件」树浏览、改名的开发者;希望在侧边栏完成建目录、复制路径、ZIP 下载、用 VS Code 打开,而不反复切终端或资源管理器。

架构要点:Client 在捕获阶段处理 contextmenu,仅命中工作区文件树行时接管;其它区域仍用浏览器默认菜单。插件不 patch 宿主模块,样式类名带 wfm- 前缀。与多数插件的路由、overlay 槽位互不替换,唯一需注意是若有其它插件也拦截同一树行的右键,可能出现两个菜单(README 称当前未发现此类插件)。

安全与权限:所有文件操作在 当前 DSH 宿主进程权限 下执行,路径严格限制在会话工作区内。安装插件前应阅读 index.js / client.js 与 MIT 许可证,确认符合你的部署策略。Host 仅使用 Node 内置模块,无 npm 运行时依赖;安装过程仍依赖宿主能找到 pnpm(找不到时可全局安装 pnpm 或使用 shim)。

平台:Windows 上 VS Code 打开路径较完整;macOS / Linux 的 VS Code 与其它路由在文档中描述为跨平台通用,但除 Windows 外未在 README 中逐项实机列明。

结尾

dsh-menu 把「工作区文件」树从只能看、只能靠浏览器菜单,扩展成一套可内联编辑、带边界校验的右键操作集,且零依赖、装完重启宿主并硬刷新即可用。需要菜单项说明、路由表与安全设计细节时,以仓库 README 为准。

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

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

Xiaoye