dsh-file-link-menu:为 DSH 聊天输出中的文件引用补右键菜单

前言

DSH 助手在回复里经常引用项目文件:行内代码路径、文件 chip、dsh-resource:// 链接等。原生右键菜单对这些引用通常没有「用本机应用打开」「在文件管理器中定位」之类操作,只能手动复制路径再切到 IDE 或资源管理器。社区插件 dsh-file-link-menu(维护者 XcodeFish)接管聊天输出里文件引用的右键事件,弹出原生风格的浮层菜单;代码块、普通文本、外部链接仍走原生菜单,不被劫持。

这是什么

dsh-file-link-menu 是 DSH 的 client 侧插件(纯 ESM、零依赖、无构建脚本),版本 1.0.0,MIT 许可证。npm 包名为 @codefisher798/dsh-file-link-menu,源码仓库:github.com/XcodeFish/dsh-file-link-menu。目录页:skillhub.cn/plugins/XcodeFish/dsh-file-link-menu(社区目录,与 DeepSeek / 幻方无官方从属关系)。

它解决的是:在 DSH Desktop(web profile)或 DSH NEXT 的聊天界面里,对可识别的文件路径右键,直接打开、定位或复制路径。

核心功能

装好并重启后,在聊天输出里对文件路径右键,菜单大致包含:

菜单项 行为
用 \<应用> 打开(标注「默认」) 用系统默认关联应用打开文件(带应用图标)
用 \<应用> 打开 本机注册了该文件类型关联的应用(带图标,逐项列出)
显示文件位置 在系统文件管理器(Finder / 资源管理器)中定位该文件
复制绝对路径 复制 <当前会话工作区>/<相对路径>
复制相对路径 复制相对于当前会话工作区的路径

打开与定位通过 Session Remote 由 Host 执行;Host 会对路径做二次校验,仅限当前会话工作区内的文件。

识别哪些元素

插件按顺序用四层判据识别「文件引用」;不满足则保持原生右键:

  1. <a href="dsh-resource://file/session/<id>/<path>"> 资源地址链接
  2. [data-file-path] 显式标记
  3. Markdown 文件链接按钮 <button title="<path>">(含带图标的行内引用 chip)
  4. 非代码块内的行内代码 <code>:全文恰为文件路径(可带 :行号 / -行号 后缀)

<pre><code> 代码块、普通文本、外链不会被劫持。

安装与启用

插件以 profile 的 pnpm 依赖形式安装;装完后必须重启 DSH Desktop 或 DSH NEXT(client bundle 按文件 mtime 生成 rev 并版本化缓存,不重启不会重载)。

DSH Desktop CLI(推荐)

下面命令来自项目 README,路径面向 macOS 上的 DSH Desktop 默认布局;Linux / Windows 需按本机 DSH Desktop 安装位置调整 DSH_HOME 与 bin.js 路径。

DSH_HOME="$HOME/Library/Application Support/dsh-desktop/harness"

"$DSH_HOME/.desktop-bin/node" \
  "/Applications/DSH Desktop.app/Contents/Resources/app.asar.unpacked/node_modules/@deepseek-ai/dsh/lib/bin.js" \
  plugin --profile web add --save-exact github:XcodeFish/dsh-file-link-menu

也可使用完整 GitHub URL,或 npm 包名简化安装:

# 同上 node + bin.js 前缀
plugin --profile web add @codefisher798/dsh-file-link-menu

锁版本示例:github:XcodeFish/dsh-file-link-menu#v1.0.0 或 #<commit>。

DSH NEXT

在设置里添加插件,或使用 plugin_manager:

plugin_manager install_bundle(target="github:XcodeFish/dsh-file-link-menu")

同样支持 GitHub URL、release .tgz、npm 包名或本地绝对路径;#v1.0.0 或 #<commit> 可锁版本。

卸载(Desktop CLI)

"$DSH_HOME/.desktop-bin/node" \
  "/Applications/DSH Desktop.app/Contents/Resources/app.asar.unpacked/node_modules/@deepseek-ai/dsh/lib/bin.js" \
  plugin --profile web remove dsh-file-link-menu

卸载后同样需要重启 DSH Desktop。

典型用法

  1. 按上一节任选一种方式安装插件。
  2. 重启 DSH Desktop 或 DSH NEXT。
  3. 在已有会话、且工作区已打开的前提下,在助手回复里找到文件 chip、行内路径或 dsh-resource:// 链接。
  4. 在该元素上右键:在「打开」分组里选默认或指定应用;或选「显示文件位置」「复制绝对路径」「复制相对路径」。

若右键无自定义菜单,先确认是否重启;若点在代码块内的路径上,设计上是保留原生菜单。

适用场景与注意

适合谁: 经常在 DSH 聊天里点文件引用、希望少切窗口的开发者;使用 DSH Desktop(含 0.10.x web profile)或 DSH NEXT,macOS / Windows / Linux 均可(打开与定位由 Host 调系统接口)。

权限与安全: 插件随当前 DSH 进程与用户权限运行;安装前建议阅读 仓库源码 与 MIT 许可证,自行判断是否纳入 profile。

FAQ 要点:

  • 菜单里缺少某个应用:需在系统里注册过该文件类型的关联。
  • 仅工作区内文件有效:Host 二次校验路径范围。
  • 装完没反应:重启客户端。

开发者本地可运行 node --check client.js 与 node self-test.mjs 做 DOM stub 自测,无需浏览器。

结尾

DSH 生态强调「一切皆插件」;dsh-file-link-menu 只补聊天输出里文件引用的右键能力,不改动代码块与普通链接的行为。需要安装命令与行为细节时,以 GitHub README 为准;社区索引见 SkillHub 目录页。

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

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

Xiaoye