在 DeepSeek Harness 的 Web 會話中,Markdown 渲染器只接受 http/https 協議的圖片源。本地存儲的截圖、AI 生成圖(file: 或 data: 協議)會被直接過濾。這導致 AI 報告“圖片已保存到 D:\shots\fig1.png”後,用戶只能看到一行死文本,無法在對話中直接查看。
dsh-image-serve 插件通過註冊一個 /ws 路由,將本地絕對路徑映射爲 Web 可訪問的 URL,從而解決這一缺口。安裝後,會話中的 Markdown 即可通過 /ws/ 直接渲染磁盤上任何位置的圖片與文件。
它是什麼¶
carlclouder 開發的本地文件展示插件。它是一個零運行時依賴的標準 npm bundle,可在 dsh-market 中熱啓停、更新或卸載。插件的核心功能是在 DSH Web 中註冊 /ws 路由,將 /ws/<本地絕對路徑> 映射到對應的磁盤文件,使 Markdown 渲染器能夠渲染本地資源。
安裝與啓用¶
在終端中執行以下命令,通過插件系統安裝該插件:
dsh plugin --profile web add dsh-image-serve
安裝完成後,重啓 DSH Web 服務即可生效。
典型用法¶
安裝並重啓後,在 Markdown 中引用文件時,將 file: 協議替換爲 http://127.0.0.1:3080/ws/,後接本地絕對路徑:
http://127.0.0.1:3080/ws/D:/AI任務/Generated/cover.png
http://127.0.0.1:3080/ws/D:/AI任務/ (指向目錄 → 返回可瀏覽的文件列表頁)
http://127.0.0.1:3080/ws/D:\截圖\對比圖.png (反斜槓寫法等價)
http://127.0.0.1:3080/ws//NAS/share/方案.png (UNC 網絡路徑)
核心特性¶
- 目錄瀏覽:指向目錄時,返回可點擊的 HTML 文件列表,包含子目錄、文件大小、修改時間及上一級導航,文件名已做 HTML 轉義。
- 零依賴:標準 npm bundle,支持在 dsh-market 中熱啓停、更新、卸載。
- 跨平臺支持:實測支持跨盤符(C:/D:/E:/…)、中文路徑、深層嵌套目錄以及 UNC 網絡路徑。
- 明確報錯:相對路徑返回 400 並提示,文件不存在返回 404,非 GET/HEAD 請求返回 405。
注意事項與安全¶
- 無白名單設計:
/ws是本地任意文件的讀取通道。v2.1 版本起已移除白名單設計。 - 訪問範圍:路由的可達範圍等於 dsh web 的可達範圍。默認僅本機迴環(127.0.0.1),但如果通過 Tailscale 等方式將 Web 暴露到遠程,遠程設備同樣可以讀取本地任意文件。
- 只讀模式:插件僅提供讀取服務,不支持寫入、刪除或列目錄操作。
- 路徑規範:必須使用本地絕對路徑。相對路徑會返回 400 錯誤。
- 協議限制:僅支持 GET 和 HEAD 請求。
- 舊版兼容性:舊版短鏈接
…/ws/<文件名>(隱含 D:\AI任務 根目錄)已失效,需改寫爲完整路徑形式(如…/ws/D:/AI任務/<文件名>)。 - 配置清理:不再存在
root配置。如果之前在 profile patch 中添加了相關覆蓋行,建議刪除。
總結¶
dsh-image-serve 解決了 DSH Web 會話中無法直接展示本地文件的問題。通過 /ws/ 路由,開發者可以方便地引用任意盤符、任意路徑的文件,無需手動複製到特定目錄。使用時需注意其無白名單的特性及遠程訪問的風險。
- GitHub 倉庫:https://github.com/carlclouder/dsh-image-serve
- 插件目錄:https://www.skillhub.cn/plugins/carlclouder/dsh-image-serve