前言¶
用 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.js 和 plugin/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 (社区维护的独立站点,非官方应用商店)