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
羽毛球分组比赛记分
小程序二维码

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

小夜