dsh-md-view:DSH 客户端插件的安全 Markdown 渲染器

前言

在 DeepSeek Harness(DSH)的客户端插件开发中,展示 Markdown 内容(如 README、日志、便签)是常见需求。直接使用不同的 Markdown 解析库会导致渲染结果不一致,且若处理不当,Markdown 中的 HTML 标签可能引发安全隐患。dsh-md-view 解决了这一问题,它将 Harness 原生的 MarkdownText 流程封装为客户端服务,提供统一的渲染能力。

这是什么

dsh-md-view 是一个面向 DSH 客户端的插件,由 joao-paulo-santos 维护。它不提供独立的 UI,而是通过注入客户端服务 mdView,让其他插件能够安全地渲染 Markdown。

该插件基于 Harness 的 MarkdownText 原语,集成了 GitHub Flavored Markdown (GFM)、数学公式、脚注,以及使用 Shiki 进行代码高亮并附带复制按钮的功能。它还针对文档场景进行了优化,处理了相对链接和图片的解析。

核心功能

  1. 统一渲染管线:通过客户端服务 mdView 暴露,确保所有展示 Markdown 的插件使用相同的渲染逻辑。
  2. Markdown 扩展支持:支持 GFM、数学公式、脚注。
  3. 代码高亮与交互:使用 Shiki 进行语法高亮,fenced 代码块和行内代码默认不转换(保留原文),但会被高亮并添加复制按钮。
  4. 资源解析:
    • 原始 <img> 标签会被渲染为真实图片。
    • 文档相对链接和图片目标会根据 links.repo 解析为 GitHub 的 blob URL 或原始内容主机。
  5. 安全性:
    • 渲染输出为 React 元素,且仅包含纯文本节点。
    • Markdown 中的 HTML 标签(如 <script>)会被保留为可见文本,无法注入 HTML。

安装与启用

该插件无外部依赖。安装前需确保已拥有 DSH 的检出目录,并在目标 profile(例如 web)下操作。

mkdir -p ~/dsh-plugins && cd ~/dsh-plugins
git clone https://github.com/joao-paulo-santos/dsh-md-view.git

# 从 harness checkout 目录执行
pnpm dsh plugin --profile web add ~/dsh-plugins/dsh-md-view

# 验证 profile 配置是否正确组合
pnpm dsh --profile web --dump-config

安装完成后重启 Harness。注入了 mdView 服务的客户端插件即可调用渲染功能。

典型用法

在客户端插件代码中,通过 ctx.mdView 访问渲染能力。links.repo 是可选配置,用于解析相对链接;若不提供,相对链接将保持原样。

  1. 渲染单个 Markdown 文档为 React 元素:适用于需要自行控制布局的场景。
// consumer client half, inject: ['mdView', ...]
return React.createElement('div', { className: 'mine' },
  ctx.mdView.render(markdownText, { links: { repo: 'owner/name' } })
)
  1. 创建自包含的文档组件:插件返回的组件包含完整的 Markdown 样式和布局。
const Doc = ctx.mdView.component({ text: markdownText, links: { repo: 'owner/name' } })
return React.createElement(Doc, {})

适用场景与注意

  • 适用场景:任何需要在 DSH 客户端插件中安全渲染 Markdown 的开发者,特别是需要展示代码、数学公式或脚注的场景。
  • 样式管理:该插件会安装一次包装器样式表,插件开发者无需添加额外的 CSS 来控制 Markdown 渲染样式。
  • 依赖关系:无外部依赖,宿主端实现为存根,无持久化功能。
  • 生态兼容:dsh-workspace-history 和 dsh-wo-github 插件可选地依赖此插件来渲染日志正文和仓库 README(降级为纯文本)。
  • 权限注意:插件以当前 DSH 进程的权限运行,安装前请检查源码。

短结尾

dsh-md-view 提供了 DSH 生态中统一、安全且功能丰富的 Markdown 渲染方案。通过 ctx.mdView,开发者可以轻松地在客户端插件中展示高质量的 Markdown 内容,而无需担心 HTML 注入风险或样式不一致。

羽毛球分组比赛记分
小程序二维码

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

小夜