前言¶
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