dsh-plugin-inline-image:DSH Web 插件

前言

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 使用該格式。

  • 基礎用法:![分佈圖](/dsh-image/sixsigma/distributions.png)
  • 子目錄用法:![](/dsh-image/sixsigma/reports/chart.webp)

安全機制

插件通過縱深防禦策略確保安全性:

  1. HTTP 方法限制:僅允許 GET 和 HEAD 方法,其他方法返回 405。
  2. 路徑校驗:對路徑段進行 URL 解碼,檢查是否爲空、包含 ./.. 或 /,防止路徑穿越。
  3. 詞法與物理檢查:路徑解析與規範化後必須在 root 目錄內;使用 realpath() 解析符號鏈接後再次校驗,防止逃逸。
  4. 擴展名白名單:僅支持常見柵格圖格式(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
羽毛球分组比赛记分
小程序二维码

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

小夜