dsh-right-click-menu:为 DSH Web GUI 补上右键菜单

前言

在 DeepSeek Harness(DSH)桌面壳里用 Web GUI 看 Chat、点 Markdown 链接、扫 @ 文件引用或右侧文件树时,很多人会下意识右键——期望「在资源管理器里打开」或「用系统浏览器打开」。桌面壳在 Electron 主进程里构建右键菜单,且只在可编辑区域或有文本选中时弹出;items 为空则完全不显示菜单。链接、文件引用、交付卡片、左侧工作区项目名上的右键因此没有反应。社区插件 dsh-right-click-menu(维护者 SJcun,仓库 SJcun/dsh-right-click-menu)在页面内接管这些右键,复用 DSH 已有的外链跳转与 session.openWorkspacePath 能力,不另造轮子。

下面介绍插件定位、能力、安装方式与使用时的注意点。DSH 生态强调「一切皆插件」;SkillHub 等社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系。

这是什么

dsh-right-click-menu 是面向 DSH Web surface 的客户端插件(dsh.client.platform: web)。宿主半侧 lib/index.js 为空 apply,全部逻辑在浏览器半侧 lib/client.js。它在文档上监听右键,对识别到的链接、文件引用、目录弹出与界面语言一致的菜单;其余右键(输入框、选中文本等)保持原生行为。

当前 package 版本为 0.1.0,许可证 MIT,针对 DSH 0.2.0-rc.2(桌面运行时、Electron Web GUI)构建并验证。

核心功能

插件按右键目标提供不同菜单项(文案随当前 UI 语言,含简体中文词典):

右键对象 菜单项
HTTP(S) 链接(Chat/助手 Markdown、行内代码 URL) 在外部浏览器中打开 · 复制链接地址
文件引用(Markdown 文件链接、@path 芯片、交付卡片、文件树行、文档路径标签) 在资源管理器中打开 · 复制文件路径
目录(左侧栏工作区项目、@folder/ 芯片、文件树目录行、文件树标题) 在资源管理器中打开 · 复制文件夹路径

实现方式与产品自身一致:

  1. 在外部浏览器中打开:window.open(url, "_blank", "noopener,noreferrer"),由主进程拦截并调用 shell.openExternal,与左键点击 Chat 链接同路。
  2. 在资源管理器中打开:Session Remote 的 session.openWorkspacePath;目录用 { path } 在管理器中打开目录本身,文件用 { path, action: "reveal" } 定位文件。Host 会先校验路径,插件不直接访问文件系统。

菜单使用共享的 Menu 原语,键盘导航、主题等与主界面一致。在 headless 或 SDK profile 下没有浏览器半侧,插件不起作用而非报错。

安装与启用

把包装进为该 GUI 提供服务的 profile。推荐用插件管理器,会同时添加依赖并把 bundle 写入 profile 的 dsh.profile.bundles:

plugin_manager install_bundle target: <spec>

<spec> 可以是 registry 包名、Git 地址(例如 github:SJcun/dsh-right-click-menu)、tarball 或本地路径。本包通过仓库分发,而非 npm 发布。

也可手工操作:在 profile 目录执行 pnpm add <spec>,再把包名追加到 profile 的 package.json 的 dsh.profile.bundles。

宿主半侧在下次 Host 启动时加载(配置 HMR 开启时可立即生效);浏览器半侧随下一次页面加载生效。可用仓库内的 npm run check:live 对照运行中 Host 的 bundle revision,默认地址为 $DSH_WEB_URL 或 http://127.0.0.1:19387。

停用:在 profile 的 cordis.patch.yml 给 right-click-menu 条目设 disabled: true,或从 dsh.profile.bundles 移除该 bundle。

典型用法

安装并刷新 Web GUI 后,无需额外配置,按 README 中的验证步骤自测即可:

  1. 在 Chat 消息里右键 HTTP(S) 链接 → 应出现「在外部浏览器中打开」,并在系统浏览器打开。
  2. 右键 @ 引用文件、交付卡片或右侧栏文件树行 → 应出现「在资源管理器中打开」,并在资源管理器中选中该文件。
  3. 右键左侧栏工作区项目名 → 应出现「在资源管理器中打开」,并在资源管理器中打开该目录。
  4. 右键消息输入框或选中的文本 → 仍为原生菜单。

开发或排查 DOM 识别问题时,可在插件源码目录运行 npm test(node test/detection.test.mjs),用例会覆盖各界面 markup 的检测逻辑。

适用场景与注意

适合谁:日常在 DSH Web GUI 里通过链接、文件引用和工作区侧栏操作本地路径,希望右键与系统习惯一致的用户。

兼容性:插件声明 @deepseek-ai/dsh* 等 peer 依赖;DSH 在未核验的版本上会拒绝加载,避免菜单与 DOM 不匹配。检测逻辑依赖 DSH 未公开为 API 的 DOM 标记(集中在 lib/client.js 的 filePathOf),大版本升级后若菜单失效,可先跑 npm test 定位界面。

已知限制(来自上游 README):按图片渲染且标签不是路径的 Markdown 文件链接可能无法识别;侧栏「未分组」桶 id 为空时不提供菜单;应用内浏览器标签页保留原生右键;工作区相对的 Markdown 链接按主视图 Session 的 cwd 解析,跨工作区链接可能定位不准。

安全与权限:插件以当前 DSH Host / Session 的权限运行,路径由 Host 校验。安装前建议阅读 GitHub 源码 与 MIT 许可证,确认符合你的环境策略。

结尾

dsh-right-click-menu 用最小客户端 bundle 补上 Web GUI 里链接与路径类元素的右键能力,并刻意不干扰原生编辑与复制菜单。目录页:SkillHub — dsh-right-click-menu;源码与详细说明:github.com/SJcun/dsh-right-click-menu。

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

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

Xiaoye