前言¶
在 DSH 桌面版里让模型改代码,聊天区会不断出现链接和文件引用:https://…、mailto:、src/theme.json、带中文和空格路径的 ocs-config.json,还有 diff 里的变更文件行。想「用 VS Code 打开这个文件」或者「把这个路径复制出来」,要么整段复制到地址栏,要么去工作区里翻,左键点链接又只会在内置浏览器里打开。
dsh-link-menu 这个插件把这块补上了:聊天消息里右键链接或文件引用,弹出类似 ChatGPT 的菜单,直接打开、用文件管理器定位、复制路径/文件名/文件内容,或者另存一份。
这是什么¶
插件名 dsh-link-menu,仓库 Xchcy/DSH-Reflex,维护者是 Xchcy,分类是客户端,MIT 协议,当前版本 0.3.1。
它解决的问题是:DSH 聊天消息里的链接和文件引用,之前只有左键行为(链接进内置浏览器、文件引用定位到该文件),没有可用的右键操作。这个插件在 DSH 客户端半边接管右键事件,按命中的对象渲染菜单,再通过 Host 半边的 HTTP 接口去真正打开文件、解析跨工作区路径、复制内容。
左键行为保持不变,插件只接管右键。
核心功能¶
菜单内容¶
按 README 的表格,菜单项分三类对象:
- 网页链接(
https://…、mailto:):复制链接地址、在默认浏览器中打开。 - 文件引用(
C:\…\file.txt、file:///…):默认打开方式、打开方式…、在文件管理器中打开、复制文件地址、复制文件名、复制文件内容、另存为…,共 7 行。 - 相对文件引用(如
src/main.ts):同上,但会按 DSH 工作区先解析成绝对路径。
识别范围¶
不是只认裸 URL。README 列出的可识别对象包括:
- 消息里的文件卡片、变更文件列表行(
data-review-file); fileMention/fileCardchip;- 带中文/空格/
#的文件名; - 聊天上传的附件(不在工作区里也能解析);
- 路径藏在标签里的写法,如「打开
C:\a\b.txt」。
普通文本不接管,红色报错里的路径也按系统默认菜单处理。只在真正命中链接或文件引用时接管右键。
打开与定位¶
- 「默认打开方式」直接打开:系统有关联应用时用关联应用;
.json这类没有真实关联的扩展名,装了 VS Code 时直接进 VS Code,不弹「选择打开方式」。 - 「在文件管理器中打开」在 Windows 上先激活已打开的同文件夹窗口(README 给的实测约 60–80ms),没打开时用
Shell.Application.Explore新开窗口(约 1 秒)。 - 打开或定位后会把目标窗口提到前台。
各平台行为¶
Windows 用 rundll32 / explorer / Shell.Application,macOS 用 open,Linux 用 xdg-open。
安全边界¶
README 写得很明确:插件只处理 http(s)、mailto: 链接和真实存在的本地文件,其他目标不弹菜单也不发给 Host;Host 端用参数数组启动系统对话框,不经过 shell,不拼命令字符串。
复制文件内容时 Host 端读该文本文件,上限 2 MB,二进制文件(前 8 KB 含 NUL 字节)直接拒绝并提示,不会把乱码塞进剪贴板。「另存为…」是把文件复制到用户在系统保存对话框里选的位置。除此之外插件不读取文件内容。
安装与启用¶
README 给了三种手动方式,装完都要完全退出再重新打开 DSH。
从 GitHub 装¶
dsh plugin add github:Xchcy/DSH-Reflex
# 或者钉住版本
dsh plugin add github:Xchcy/DSH-Reflex#v0.3.1
也可以在 GUI 的 Plugins 页面粘贴仓库地址安装;首次从 git 装会询问是否允许构建,选允许。
从本地文件装¶
把 dist/dsh-link-menu-0.3.1.zip 解压到任意目录,然后在 DSH 会话里执行:
plugin_manager install_bundle
target: D:\dsh-plugins\dsh-link-menu
target 必须是绝对路径。成功时 application 为 applied,warnings 为空数组。
插件市场¶
DSH 桌面版 Plugins → Discover 搜 dsh-link-menu 或 Xchcy,点安装,重启应用。README 也提到市场里可能暂时搜不到,因为市场 PR 还在排队合并(awesome-dsh-plugin PR #12303),不影响使用。
另外 README 给了一段可以直接发给 AI 的安装提示词,核心是下载 https://github.com/Xchcy/DSH-Reflex/releases/latest/download/dsh-link-menu.tgz,解压到本地目录后用 plugin_manager install_bundle 装,再提醒用户重启。这段提示词里的下载链和 bundle 名与手动方式一致,可以按那段走。
装完确认¶
重启后在聊天里右键一个蓝色链接或文件引用,应该弹出菜单;文件引用是 7 行。点完右下角会有轻提示,比如「已用 VS Code 打开」「已在资源管理器中显示」「已复制」。
如果右键没有反应,README 给的判断顺序是:先确认安装时 plugin_manager install_bundle 返回 application: applied,再确认已经完全退出并重新打开了 DSH。
典型用法¶
跨工作区打开文件¶
这是配置里真正值得说的一点。消息里的相对路径(src/theme.json、manifest.json、background.js:12)会按 DSH 的所有工作区目录依次尝试解析,所以从其他工作区的对话里右键也能正常打开。workspaceRoot 只是额外优先尝试的目录,可留空:
# cordis.patch.yml
- insert:
- id: link-menu
name: dsh-link-menu
config:
workspaceRoot: 'C:\Users\me\Documents\my-workspace' # 可选
完整解析顺序是:DSH 工作区列表(新工作区在前)→ workspaceRoot → workingDirectory.defaultDirectory → Host 进程当前目录。
处理没有默认应用的文件¶
「默认打开方式」弹了「选择一个应用」对话框,说明系统里这个扩展名没有真实默认应用。可以在里面选一次并勾选「始终使用」,之后就会直接打开;不想每次选,用「打开方式…」,或者装 VS Code,插件会自动用它打开 .json 这类文件。
卸载¶
用 plugin_manager 移除该 bundle,或在 profile 的 cordis.patch.yml 里删掉 link-menu 条目。
适用场景与注意¶
适合这些情况:
- 在 DSH 桌面版里让模型改代码,需要频繁打开聊天里出现的文件;
- 想让模型引用的路径不再需要手工复制到地址栏;
- 习惯用右键菜单而不是快捷键和命令行。
需要注意几点:
- 插件以当前 DSH 进程的权限运行。它可以打开文件、复制文件内容、另存文件到用户指定位置,安装前应当先读源码、确认
index.js和client.js的行为符合预期,并确认许可证(MIT)。 - 插件依赖 DSH 客户端的两处实现细节:消息内链接/文件引用带
fileLink类名(外链是<a>,文件引用是<button>,title是绝对路径,另有fileMention/fileCardchip、data-presented-file卡片、data-review-file变更行);Host 侧靠webServer、workingDirectory、workspaceRegistry服务。README 说明测试于 2026-11 的 DSH 桌面版,DSH 大版本更新后如果类名或槽位命名变了,可能要在client.js/index.js里同步调整。 - 不要把它当成系统级的右键菜单扩展,它只作用于 DSH 聊天区的消息内容。
结尾¶
这个插件的价值在于把聊天里已经存在的链接和文件引用变成了可直接操作的对象,而不是再复制一遍路径去找文件。它专注、功能边界清楚,安装和验证步骤也写得很具体,适合日常在 DSH 桌面版里用。
目录页:https://www.skillhub.cn/plugins/Xchcy/DSH-Reflex
仓库:https://github.com/Xchcy/DSH-Reflex