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。

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

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

小夜