前言¶
DSH Web 插件:在 Web 服務器上開放一條受嚴格約束的只讀圖片路由,讓 agent 可以把工作區裏的圖片直接內嵌顯示在對話中。
在使用 DSH Web UI 時,markdown 渲染器會將 http(s) 鏈接渲染爲圖片,但服務器通常不會爲工作區文件提供靜態路由(未匹配路徑會回落到 SPA),且渲染器的 URL 消毒器會拒絕 data: 格式的內容。這導致 agent 生成的圖表(如 matplotlib PNG)之前只能以“可點擊文件”的形式呈現,無法直接在對話流中查看。
安裝與啓用¶
執行以下命令將插件安裝到 web profile:
dsh plugin --profile web add dsh-plugin-inline-image
安裝後需要重啓 dsh web 進程才能加載插件。在編輯 ~/.dsh/profiles/web/package.json 將該插件加入 bundles 清單後,再次重啓即可生效。
配置¶
在 ~/.dsh/profiles/web/cordis.patch.yml 中追加插件配置。如果不配置 roots,插件會自動回退到 harness 已註冊的全部 workspace。
- insert:
- id: inline-image
name: 'dsh-plugin-inline-image'
config:
# alias -> 允許對外提供圖片的絕對目錄
roots:
sixsigma: /Users/guoguo/6sigma
# 默認 false:.svg 不開放(可攜帶腳本,XSS 風險);確需時改爲 true
allowSvg: false
使用方法¶
配置了 roots 後,agent 在對話中可以使用 Markdown 語法引用圖片。建議在提示詞中指示 agent 使用該格式。
- 基礎用法:
 - 子目錄用法:

安全機制¶
插件通過縱深防禦策略確保安全性:
- HTTP 方法限制:僅允許 GET 和 HEAD 方法,其他方法返回 405。
- 路徑校驗:對路徑段進行 URL 解碼,檢查是否爲空、包含
./..或/,防止路徑穿越。 - 詞法與物理檢查:路徑解析與規範化後必須在 root 目錄內;使用
realpath()解析符號鏈接後再次校驗,防止逃逸。 - 擴展名白名單:僅支持常見柵格圖格式(png/jpg/jpeg/webp/gif/avif/bmp/ico)。SVG 默認禁止以防止 XSS 攻擊,需手動開啓。
總結¶
該插件解決了 DSH 生態中 agent 難以直接展示本地工作區圖片的問題,通過一條受控的只讀路由實現了內聯顯示。安裝後需重啓服務,配置時注意路徑安全限制。
- 插件目錄:https://www.skillhub.cn/plugins/usavv1547-cyber/dsh-plugin-inline-image
- 源碼地址:https://github.com/usavv1547-cyber/dsh-plugin-inline-image