用 dsh-drag-and-drop 把拖入文件的本機絕對路徑寫進 DeepSeek Harness 輸入框

前言

DeepSeek Harness(dsh)官方倉庫把核心理念寫成「Everything is a Plugin」:界面、工具、工作區能力都可以按 profile 疊加。它的工具讀的是本機上的真實路徑,改的也是這些路徑旁邊的依賴文件。網頁對話卻經常卡在另一件事上:瀏覽器出於安全考慮,通常不會把拖入文件的真實文件系統路徑交給頁面,最多給一個本地文件 URI,很多時候什麼都不給。

結果很常見。把文件拖進普通網頁輸入框,要麼變成上傳(一份副本,和原來的目錄、相對引用、鄰近依賴切斷關係),要麼只能手敲絕對路徑,盤符、空格、UNC 都容易寫錯。社區插件 dsh-drag-and-drop 補的就是這一段:在運行 dsh 的那臺機器上,把拖入的文件或文件夾還原成本機絕對路徑,再寫進當前對話輸入框。文件本身不上傳、不移動、不復制。

社區插件目錄是獨立站點,和 DeepSeek / 幻方沒有官方從屬關係,不能當成官方應用商店。下面按目錄詳情頁、插件 GitHub 倉庫(含 README.zh.mdpackage.jsonCHANGELOG.md)以及 DeepSeek Harness 官方倉庫交叉覈對後整理。

這是什麼

dsh-drag-and-drop 是一款面向 DeepSeek Harness Web UI 的記憶類插件,由 bill9109 維護,許可證爲 BSD-3-Clause,主要語言是 JavaScript。倉庫當前版本號是 0.1.5package.jsonCHANGELOG.md 一致,發佈說明日期爲 2026-08-14)。GitHub 倉庫 bill9109/dsh-drag-and-drop 目前有 15 顆星;社區目錄頁收錄日期爲 2026-08-15。

一句話定位:把本地文件或文件夾拖到 DeepSeek Harness 頁面任意位置,其原始絕對路徑就會插入當前會話輸入框。

它解決的不是「把文件變成附件」,而是讓智能體繼續對着原來那份文件工作。目錄把它分在「記憶」類,和知識圖譜、跨會話記憶不是同一類能力:它記住的是文件在磁盤上的位置,避免上傳副本把上下文弄丟。

package.json 聲明瞭 dsh.bundledsh.client,屬於官方 profile / bundle 模型下的 Web 端插件,不需要改 dsh 源碼,也不再依賴舊的 config.yaml。CHANGELOG 0.1.4 把包名遷到了 @omdsh-dev/dsh-drag-and-drop,README 裏的安裝示例也寫過 github:omdsh-dev/dsh-drag-and-drop。社區目錄收錄並給出安裝命令的是 bill9109/dsh-drag-and-drop;下文安裝以目錄頁原文爲準。

核心功能

目錄頁和倉庫 README 列出的能力一致,可以分成拖拽交互、路徑形態、定位策略三塊。

拖拽與寫入

  • 把文件拖到 Web UI 任意位置,插入原始絕對路徑。
  • 拖拽過程中全頁面壓暗並模糊,作爲可鬆開的提示。
  • 支持文件和文件夾;一次拖入多個項目時,每個路徑佔一行。
  • 通過 DSH 的輸入狀態服務寫入草稿,不直接改輸入框 DOM。
  • 定位失敗時彈出插件 toast:可手動關閉,8 秒後自動消失,鼠標懸停會暫停計時。

路徑形態與文件處理

  • 輸出 macOS、Linux、Windows 的原生路徑。
  • 支持 POSIX 路徑、Windows 盤符路徑和 UNC 網絡路徑。
  • 不上傳、不移動、不復制文件;也不會修改或刪除文件。
  • 多數情況下只讀元數據。只有多個候選同名且同大小時,纔讀取少量內容做採樣指紋;大文件採樣仍衝突時,才計算完整 SHA-256。定位和指紋都在運行 dsh 的本機完成。

候選怎麼確認

瀏覽器藏起真實路徑時,插件不會把磁盤上第一個同名文件直接塞進輸入框。倉庫說明的篩選順序是:

  1. 先按完整文件名文件大小過濾。修改時間只用於排序,不當成身份。
  2. 只剩一個候選時,直接用該路徑,不讀文件內容。
  3. 多個候選時,比較文件開頭、中間、結尾的採樣指紋;大文件採樣仍衝突,纔算完整 SHA-256。
  4. 若干路徑對應字節完全相同的副本時,彈出路徑列表,由用戶選擇要插入的那一條。

文件夾先按名稱搜索。唯一候選直接返回,不遍歷瀏覽器裏的目錄樹;多個同名候選再比較排序後的相對路徑、項目類型和文件大小。結構仍相同的目錄,會對最多 24 個按確定性規則選出的文件做內容採樣;還是無法區分則交給用戶選擇。目錄遍歷最多處理 10,000 個項目、32 層,不跟隨符號鏈接或 Windows junction。

路徑如何定位

如果瀏覽器提供了本地文件 URI,插件會直接轉成當前操作系統的原生路徑。

如果瀏覽器隱藏了原始路徑,定位順序如下(倉庫 README 與 0.1.5 的 CHANGELOG 一致):

  1. 當前 Workspace
  2. 其他已註冊 Workspace
  3. Desktop、Documents、Downloads
  4. 各搜索根內三層以內的淺層掃描:根的直接子項、直接子目錄裏的直接子項、再下一層的直接子項。CHANGELOG 0.1.5 寫明這一層是爲了命中類似 ~/Downloads/dump2 11/iotclaw.ndjson 這種「常用目錄下再嵌兩層」的拖入;以前只探直接子項時,後面的有界遞歸會在超大 Downloads 樹裏把 20,000 項預算耗完,最後彈出「未能定位原始路徑」。
  5. 操作系統文件索引
  6. 有邊界的平臺目錄搜索

系統索引按平臺分工:

  • macOS:Spotlight
  • Linux:優先 plocate,其次 locate
  • Windows:優先 Everything CLI,其次 PowerShell

Linux 在索引沒有候選時,還會搜用戶主目錄以及 /mnt/media 下的掛載點。Windows 則會搜用戶目錄和可用的固定磁盤。每一層都是先看搜索根的直接子項,再查該範圍內的索引,最後才遞歸。

搜索是有上限的,避免把整塊磁盤掃一遍:

  • 單次外部索引命令超時 3 秒
  • 最多保留 100 個候選路徑
  • 三層淺層掃描每個搜索根最多展開 4,096 個直接子目錄
  • 每個遞歸搜索根最多訪問 20,000 個目錄項
  • 讀不到的目錄和文件會被忽略

安裝與啓用

社區目錄頁給出的安裝命令是:

dsh plugin add github:bill9109/dsh-drag-and-drop

這是目錄頁原文,不要憑插件名自己拼 GitHub 地址。倉庫 README 同時說明:這是 Web UI 的 bundle,應裝進 web profile,官方 dsh 文檔裏的形態也是 dsh plugin --profile <profile> add github:owner/repo。實際裝到網頁界面時,更穩妥的寫法是:

dsh plugin --profile web add github:bill9109/dsh-drag-and-drop

也可以從本地 checkout 安裝:

dsh plugin --profile web add /path/to/dsh-drag-and-drop

倉庫已經提交構建產物(lib/),安裝後不需要再執行構建。package.jsonengines 要求 Node.js ^20.0.0 || >=22.0.0

目錄頁提示:如需可復現安裝,請固定 commit 哈希。當前 main 最新提交爲 09088d6890866eda57adee6864cd2fbf8281f679(2026-08-14,對應 0.1.5 的三層淺層定位),可以寫成:

dsh plugin --profile web add github:bill9109/dsh-drag-and-drop#09088d6890866eda57adee6864cd2fbf8281f679

安裝後按你平時啓動 DSH Web UI 的方式重啓,再刷新瀏覽器。插件會出現在瀏覽器引導數據 __DSH_BOOT__ 裏,client bundle 隨新頁面加載。只裝不重啓、不硬刷新,頁面上不會有拖拽提示。

升級(README):

dsh plugin --profile web update github:bill9109/dsh-drag-and-drop

若當初按 README 示例從 omdsh-dev 安裝,把上面的倉庫名換成 omdsh-dev/dsh-drag-and-drop 即可。本地路徑安裝則對替換後的 checkout 再執行一次 add

卸載要用包名。CHANGELOG 0.1.4 之後包名是 @omdsh-dev/dsh-drag-and-drop

dsh plugin --profile web remove @omdsh-dev/dsh-drag-and-drop

命令會把包從 profile 和 dsh.profile.bundles 裏移除。卸載後同樣需要重啓 Web UI 並硬刷新瀏覽器。

典型用法

倉庫給出的操作只有三步,沒有額外配置項。

  1. 從 Finder、Linux 文件管理器或 Windows 資源管理器,把文件或文件夾拖到 DSH Web UI 的任意位置。
  2. 出現全頁面拖拽提示後再鬆開。插件把定位到的原始絕對路徑寫入當前會話輸入框。
  3. 一次拖入多個項目時,輸入框裏每個路徑佔一行,可以直接發給智能體去讀、跑或改這些路徑。

Linux 側要求文件管理器提供 text/uri-list。macOS 說明支持 Finder 拖拽和 Spotlight,並寫明已在 macOS 的 Chrome 上驗證。Windows 支持盤符路徑和 UNC;瀏覽器隱藏路徑時優先走 Everything CLI,沒有 Everything 時用 PowerShell 搜用戶目錄和固定磁盤。

README 裏的排查表可以直接對照:

現象 處理
拖入後沒有任何反應 再拖一次,確認全頁面提示出現。用 dsh --profile web --dump-config \| grep drag-and-drop 確認 bundle 已在 profile 中,並確認安裝後重啓過 Web UI、做過硬刷新
多個同名副本時路徑不對 候選先按完整文件名和大小過濾,只在剩餘文件之間採樣內容;仍有完全相同副本時會彈出選擇列表,在那裏指定路徑
大磁盤上定位很慢 Linux 安裝 plocate,Windows 安裝 Everything 及其命令行工具,並儘量把文件放在 Workspace 或 Desktop / Documents / Downloads 裏
macOS / Linux 拖入文件夾失敗 文件夾按名稱匹配 Workspace 和常用目錄;瀏覽器隱藏路徑時,落在所有可搜索根之外的文件夾無法定位,需要移進 Workspace 或裝上系統索引
安裝後插件未加載 重啓 Web UI 並硬刷新。client bundle 只在插件進入 __DSH_BOOT__ 後的新頁面加載

適用場景與注意事項

適合在 Web UI 裏把本機文件交給智能體處理、又不希望上傳副本的人,例如:

  • 把工作區裏的源碼、日誌、配置拖進對話,讓工具按原路徑讀取和修改
  • 一次拖入多個相關文件,按行給出路徑
  • Windows 上需要 UNC 網絡路徑,或 Linux / macOS 上需要 POSIX 絕對路徑

不適合、或需要先看清邊界的情況:

  • 只在 TUI / 無 Web UI 的 profile 裏用 dsh。這是 Web 端 client bundle,裝錯 profile 不會出現拖拽層。
  • 文件完全在 Workspace、常用目錄和系統索引之外,而瀏覽器又隱藏了路徑。文件夾尤其容易失敗。
  • 磁盤上存在多份字節完全相同的副本:插件不會猜,會讓你選。
  • 把「記憶」理解成跨會話知識圖譜。它不抽取三元組,也不壓縮對話歷史。

安裝前應閱讀倉庫源碼和 BSD-3-Clause 許可證。目錄頁寫明:插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。 這和官方文檔對 git 安裝的提醒一致:允許構建或安裝,等於允許這包代碼在你的機器上、在 agent 沙箱之外執行。不信任的倉庫不要裝;需要可復現環境時固定 commit,避免後續 push 悄悄改掉運行內容。

社區裏還有名稱相近、交互不同的衍生倉庫(例如把拖入項做成輸入框上方芯片,而不是把路徑文本寫入草稿)。選用前核對 GitHub 地址是 bill9109/dsh-drag-and-drop,不要只搜插件名。

小結

dsh-drag-and-drop 做的事情很窄:在瀏覽器不肯交出真實路徑的前提下,於運行 dsh 的本機上把拖入的文件還原成絕對路徑,再寫進當前對話。它不上傳、不復制,優先在 Workspace 和常用目錄裏找,找不到再走有界索引。對依賴真實文件系統的 Web UI 工作流,這比手敲路徑或上傳副本更不容易把上下文弄斷。

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-drag-and-drop/

GitHub:https://github.com/bill9109/dsh-drag-and-drop

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

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

小夜