dsh-filemenu:给 DeepSeek Harness Web UI 加上右键菜单

前言

用 DeepSeek Harness(DSH)干活时,和文件路径打交道是高频动作:助手在会话里产出文件,消息正文里出现内联文件引用或绝对路径。想确认结果,通常得先把路径复制出来,切到文件管理器或编辑器,再粘贴、定位、展开目录——链条不长,但每次都会打断思路。

DSH 的理念是「一切皆插件」,这类交互缺口正适合交给插件补齐。下面介绍的 dsh-filemenu 做的就是这件事:把这些操作收敛成一次右键点击。

这是什么

dsh-filemenu 是由 ltsone9 维护的 DSH 插件(MIT 许可),为 DSH Web UI 提供右键上下文菜单:对话产出的文件、侧边栏的工作区(项目)行与会话行,都可以右键打开、在资源管理器 / Finder 中显示、用检测到的编辑器打开,或复制路径。支持平台为 Windows、macOS 与 Linux。

实现上它是一个动态 Cordis 插件:纯增量,不替换既有 UI 的任何位置,插件停止时移除全部副作用;同时也提供持久 profile 包形态,两种安装方式见下文。

核心功能

文件右键菜单

可右键的目标有四类:

  • 会话产出的文件 chip;
  • 助手消息中的内联代码文件引用;
  • 工具卡片上的文件路径链接(尽力识别);
  • 助手文本中的纯绝对路径。

对应的菜单项:

  • Open:打开文件;
  • Open containing folder:在资源管理器 / Finder 中显示所在目录;
  • Open in editor ▸:展开编辑器子菜单;
  • Open with another program…:调用 Windows 的 Open With 对话框;
  • Copy path / Copy relative path:复制绝对路径或相对路径。

侧边栏:工作区与会话

右键侧边栏工作区(项目)行,菜单包含:

  • Open containing folder
  • Open(切换到该工作区的会话)
  • Copy path

右键侧边栏会话行,菜单项更多:

  • Open containing folder
  • Open(切换会话)
  • Rename
  • Fork
  • Archive
  • Copy path

编辑器检测与系统打开

Open in editor ▸ 是一个子菜单,列出宿主机上自动检测到的编辑器,检测范围覆盖:VS Code、Cursor、Windsurf、VSCodium、Sublime Text、Notepad++、Typora、HBuilderX、Zed、IntelliJ IDEA、WebStorm、PyCharm、Rider、CLion、Neovim、Vim、gedit。

Open with another program… 则直接调起 Windows 的 Open With 对话框,把选择权交还给系统。

主题与定位

  • 主题感知:浅色模式遵循 harness 别名 token,深色模式使用近黑底色与近白文字线条。
  • 菜单精确出现在光标处,单列布局,边缘钳制保证不超出视口;每个动作带内联 SVG 图标。

安装与启用

前置条件

  • 一个运行中的 DeepSeek Harness Web UI;
  • 宿主 OS 具备原生打开能力(Windows、macOS 或桌面 Linux)。只有当 Host 报告 canOpenPath 时,依赖系统的菜单项才自动启用;无头 Linux 宿主会隐藏这些项;
  • 走持久安装时,PATH 上需有 pnpm(CLI 转发至 pnpm);插件 package.json 的 engines 要求 Node >= 18。

方式一:动态插件,免重启

dsh-filemenu 的动态形态由 Host 与 Client 两个半边组成,对应仓库里的 plugin/host.jsplugin/client.js 两个文件。先从 GitHub 仓库取出这两个文件。

然后在 DSH Web UI 任意会话中让 agent 安装,可以直接把这段话发给它:

请安装 dsh-filemenu:用 cordis_define(kind: new,idPrefix: file)创建插件,
code.host 填入 plugin/host.js 的完整内容,code.client 填入 plugin/client.js
的完整内容,然后 cordis_run(mode: run)激活。

首次激活需要人工批准:Client 半边会在 Run 卡片中请求授权,点击 Allow 即可(勾选 double-check 可同时信任后续版本);不批准的话,插件会停留在 awaiting-approval。完成后右键一个产出文件、工作区行或会话行验证。

注意动态插件是进程本地的:Harness 重启后需要重新定义并运行。要跨重启保留,用下面的方式二。

方式二:持久安装(官方 CLI 路线)

dsh-filemenu 也可以作为持久 profile 插件安装。在仓库检出目录执行:

dsh plugin --profile <profile> add .

profile 按部署形态选:DSH Desktop 应用用 --profile desktop,独立 web 服务部署用 --profile web。命令会转发到 pnpm 完成安装。按顺序做三步:

1、执行上面的 add 命令,把包装进 profile;
2、重启 Harness 服务,使宿主组合重载、web shell 重建客户端包(Desktop 应用重启应用即可);
3、在 Web UI 里右键产出文件、工作区行或会话行验证。

经过上面的步骤,插件即持久生效。也可以不检出仓库,直接从 npm 安装,README 提到已发布 dsh-filemenu@1.1.6 到 npm:

dsh plugin --profile desktop add dsh-filemenu

后续管理用同一组命令,任意 pnpm 参数会原样转发:

dsh plugin --profile desktop remove dsh-filemenu
dsh plugin --profile desktop update dsh-filemenu
dsh plugin --profile desktop why dsh-filemenu

如果是从源码运行 Harness,还可以走补丁覆盖:

pnpm dsh web --patch ./cordis.patch.yml

适用场景与注意事项

适合的人群很明确:在 Windows、macOS 或桌面 Linux 上跑 DSH Web UI、经常需要在对话和本地文件之间来回切换的开发者。无头 Linux 宿主上,系统相关菜单项会自动隐藏,这类环境收益有限。

几点注意:

  • 插件以当前 dsh 进程的权限运行,具备调起宿主 OS 原生打开能力(打开文件、调起编辑器等)。安装前建议先检查插件源码与许可证(本项目为 MIT),确认符合自己的安全边界再启用。
  • 动态安装是进程本地的,Harness 重启后需重新定义并运行;持久安装跨重启保留,但依赖 PATH 上的 pnpm,且每次安装、更新后都要重启 Harness 服务才能生效。

小结

dsh-filemenu 解决的问题很具体:把「复制路径 → 切窗口 → 粘贴打开」压缩成一次右键,同时不占用 DSH 既有 UI 的位置,停用时副作用全部移除。源码与更多信息:

  • GitHub 仓库:https://github.com/ltsone9/dsh-filemenu
  • 社区目录页:https://www.skillhub.cn/plugins/ltsone9/dsh-filemenu (社区维护的独立站点,非官方应用商店)
羽毛球分组比赛记分
小程序二维码

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

小夜