dsh-files-menu: Adding a right-click menu to the DSH workspace file tree

前言

在 DeepSeek Harness(DSH)里写智能体、改工作区文件时,右侧栏「工作区文件」树是常用入口。DSH 自带的文件树能列目录,但没有逐行的右键菜单;复制绝对路径、相对路径或文件名,往往要手选路径或借助别的工具。社区插件 dsh-files-menu(维护者 smellingtiger,GitHub smellingtiger/dsh-files-menu)只作用于 Web 客户端,通过事件委托在每一行上补菜单,把「复制文件地址」等操作收成两次点击,且不修改 app.asar,DSH 升级后仍可用。

这是什么

dsh-files-menu 是 DSH 的客户端插件(dsh.client.platform: web),在 @deepseek-ai/dsh-client-ui-sidebar-files 渲染的文件树上增加上下文菜单。npm 包名 dsh-files-menu,当前版本 1.0.0,许可证 MIT。在 SkillHub 目录中归类为「客户端」;仓库在 GitHub 上目前有 1 个 star。目录页:https://www.skillhub.cn/plugins/smellingtiger/dsh-files-menu。

核心功能

菜单按「文件行」与「文件夹行」略有不同,能力如下(与 README 菜单表一致)。

文件行 文件夹行
打开 展开文件夹 / 折叠文件夹
复制文件地址 复制文件夹地址
复制相对路径 复制相对路径
复制文件名 复制文件夹名
在资源管理器中显示(仅桌面版可用时) 在资源管理器中打开(仅桌面版可用时)

说明要点:

  • 复制文件地址 / 复制文件夹地址:使用行上的 data-files-path,即绝对路径,原样写入剪贴板。
  • 复制相对路径:相对工作区根目录,分隔符统一为 /(例如 refs/README.md)。
  • 在资源管理器中显示 / 打开:文件在系统资源管理器中选中;文件夹则直接打开(openWorkspacePath)。仅当宿主报告支持(remote.session.canOpenWorkspacePath())时显示这两项;不支持时静默隐藏,其余菜单照常。
  • 复制成功后,界面底部弹出「已复制」提示,约 1.4 秒后消失。

交互细节:右键任意文件树行打开菜单;ESC、点空白、滚动、窗口失焦会关闭。Shift+F10 或菜单键也可打开,打开后可用 ↑ / ↓ / Home / End 在项间移动。菜单靠近窗口右下角时会内收,避免超出视口。other 类型行(如挂载点)及文件树以外区域仍使用浏览器原生右键菜单。

安装与启用

插件以当前 DSH 进程权限运行;安装前建议自行查看仓库源码与 MIT 许可证。收录到插件市场后,可在 DSH 插件 → 发现 中搜索 dsh-files-menu 安装。

已发布到 npm(dsh-files-menu@1.0.0),可按包名安装:

dsh plugin --profile desktop add dsh-files-menu

也可从 GitHub 安装(无需先克隆仓库):

dsh plugin --profile desktop add github:smellingtiger/dsh-files-menu

本地开发时,可在 profile 目录建立联结并在 package.json 中登记 bundle;仓库提供 install.ps1 / uninstall.ps1 一键脚本(桌面 profile 示例路径为 %USERPROFILE%\.dsh\profiles\desktop),详见 README。

安装或改动配置后,必须完全退出 DSH 再启动(托盘退出,而非只关窗口)。bundle 列表在启动时读取,运行期间新增的 bundle 不会被当前进程加载。

典型用法

经过上面的安装并重启 DSH 后,可按 README 自检:

  1. 在右侧栏「工作区文件」中右键任意文件,应出现五项菜单(桌面版在支持时含「在资源管理器中显示」)。
  2. 选择「复制文件地址」,在任意输入框粘贴,应为完整绝对路径。
  3. 桌面版在宿主支持时,「在资源管理器中显示」应能正常打开资源管理器并定位文件。

若菜单未出现,先确认已完全重启 DSH,并检查 %USERPROFILE%\.dsh\profiles\desktop\package.json 中是否同时存在依赖与 dsh.profile.bundles 里的 dsh-files-menu 条目。

适用场景与注意

适合经常在 DSH 里引用工作区路径、写文档或配置、需要在系统文件管理器中定位文件的开发者。插件仅 patch Web 客户端 UI,不改动桌面壳的 app.asar。

实现上在 apply 里对 contextmenu 做事件委托,命中 li[data-files-entry][data-files-path] 后自绘菜单;样式使用 --dsw-* 设计令牌以跟随明暗主题。依赖 locale、remote、remote.session 等服务。卸载插件时由 ctx.effect 清理 DOM 与监听器。

DSH 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,本文仅介绍社区维护的插件行为,以仓库 README 与 package.json 为准。

结尾

dsh-files-menu 补上了 DSH 工作区文件树缺失的右键能力:复制路径与名称、打开或展开节点,并在桌面环境下可选「在资源管理器中显示」。需要安装命令与菜单细节时,以 GitHub README 为准。

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

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

Xiaoye