前言¶
在 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 进行代码高亮并附带复制按钮的功能。它还针对文档场景进行了优化,处理了相对链接和图片的解析。
核心功能¶
- 统一渲染管线:通过客户端服务
mdView暴露,确保所有展示 Markdown 的插件使用相同的渲染逻辑。 - Markdown 扩展支持:支持 GFM、数学公式、脚注。
- 代码高亮与交互:使用 Shiki 进行语法高亮,fenced 代码块和行内代码默认不转换(保留原文),但会被高亮并添加复制按钮。
- 资源解析:
- 原始
<img>标签会被渲染为真实图片。 - 文档相对链接和图片目标会根据
links.repo解析为 GitHub 的 blob URL 或原始内容主机。
- 原始
- 安全性:
- 渲染输出为 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 是可选配置,用于解析相对链接;若不提供,相对链接将保持原样。
- 渲染单个 Markdown 文档为 React 元素:适用于需要自行控制布局的场景。
// consumer client half, inject: ['mdView', ...]
return React.createElement('div', { className: 'mine' },
ctx.mdView.render(markdownText, { links: { repo: 'owner/name' } })
)
- 创建自包含的文档组件:插件返回的组件包含完整的 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 注入风险或样式不一致。