dsh-link-menu:給 DSH 聊天區裏的鏈接和文件引用加右鍵菜單

前言

在 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 / fileCard chip;
  • 帶中文/空格/# 的文件名;
  • 聊天上傳的附件(不在工作區裏也能解析);
  • 路徑藏在標籤裏的寫法,如「打開 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 桌面版裏讓模型改代碼,需要頻繁打開聊天裏出現的文件;
  • 想讓模型引用的路徑不再需要手工複製到地址欄;
  • 習慣用右鍵菜單而不是快捷鍵和命令行。

需要注意幾點:

  1. 插件以當前 DSH 進程的權限運行。它可以打開文件、複製文件內容、另存文件到用戶指定位置,安裝前應當先讀源碼、確認 index.js 和 client.js 的行爲符合預期,並確認許可證(MIT)。
  2. 插件依賴 DSH 客戶端的兩處實現細節:消息內鏈接/文件引用帶 fileLink 類名(外鏈是 <a>,文件引用是 <button>,title 是絕對路徑,另有 fileMention / fileCard chip、data-presented-file 卡片、data-review-file 變更行);Host 側靠 webServer、workingDirectory、workspaceRegistry 服務。README 說明測試於 2026-11 的 DSH 桌面版,DSH 大版本更新後如果類名或槽位命名變了,可能要在 client.js / index.js 裏同步調整。
  3. 不要把它當成系統級的右鍵菜單擴展,它只作用於 DSH 聊天區的消息內容。

結尾

這個插件的價值在於把聊天裏已經存在的鏈接和文件引用變成了可直接操作的對象,而不是再複製一遍路徑去找文件。它專注、功能邊界清楚,安裝和驗證步驟也寫得很具體,適合日常在 DSH 桌面版裏用。

目錄頁:https://www.skillhub.cn/plugins/Xchcy/DSH-Reflex
倉庫:https://github.com/Xchcy/DSH-Reflex

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

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

小夜