前言¶
DSH 的輸入框默認只接受圖片附件。拖入本地文件(如 .txt、.pdf、代碼文件)通常會被拒絕,操作無響應。
本插件接管這類被拒絕的拖放操作:提取文件在磁盤上的真實路徑,寫進輸入框,並順手複製到剪貼板。於是可以直接把路徑發給模型去讀。
這是什麼¶
dsh-drop-path 是一個 DSH 服務端 bundle 插件(cordis 風格)。它通過註冊路由並在網頁 index 中注入客戶端腳本,在 window 的捕獲階段監聽拖放事件。利用 DSH Desktop 暴露的 window.__DSH_DESKTOP_FILE_PATH__.getPathForFile(file)(基於 Electron 的 webUtils.getPathForFile)解析出絕對路徑。
核心功能¶
- 自動提取並填入本地文件絕對路徑。
- 自動複製文件路徑到剪貼板。
- 支持非圖片文件拖放(如 .txt、.pdf)。
- 提供三種模式切換(自動/總是/關閉)。
- 兼容
textarea與contenteditable輸入框。 - 僅桌面端有效(依賴 DSH Desktop 預加載橋)。
安裝與啓用¶
通過官方安裝命令將插件加入指定 profile:
dsh plugin --profile <profile> add dsh-drop-path
安裝後刷新網頁即可生效。新增 bundle 需重啓 DSH 或重新加載 profile。
工作原理與模式¶
本插件通過監聽 window 捕獲階段的拖放事件來接管操作,這早於 DSH 自帶的 ComposerAttachments 浮層監聽,從而避免觸發浮層顯示,防止浮層卡死的問題。
左下角有一個「路徑拖放」開關,用於切換模式:
- 自動(默認):非圖片文件拖放時填入路徑;純圖片拖放時交回 DSH 處理爲附件。
- 總是:所有文件的拖放都填入路徑(包括圖片)。
- 關閉:不攔截,恢復 DSH 原行爲。
狀態保存在瀏覽器的 localStorage 中。
控制台可手動切換模式:
window.__dshDropPath.setMode('off'|'auto'|'always')
window.__dshDropPath.mode() // 讀當前模式
window.__dshDropPath.reset() // 清除可能殘留的拖拽浮層
使用示例¶
- 將本地文件拖拽到 DSH 桌面端輸入框。
- 在瀏覽器控制台執行上述命令切換模式。
- 運行測試:
node test/logic.test.mjs
注意事項¶
- 僅桌面端有效:普通瀏覽器出於安全限制無法獲取本地路徑。本插件在無 preload 橋時會自動降級,不影響 DSH 原行爲。
- 衝突處理:通過捕獲階段監聽並
stopPropagation(),避免與 DSH 自帶拖放浮層打架。 - 熱更新:僅修改客戶端腳本 (
client/drop-path.js) 時無需重啓服務端,刷新頁面即可。
總結¶
這個插件解決了在 DSH 中直接引用本地文件路徑的痛點。通過簡單的拖拽操作,開發者可以將文件路徑直接交給模型處理,無需手動複製粘貼。
- 插件目錄: dsh-drop-path
- 源碼倉庫: kongbai-shike/dsh-drop-path