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 注入風險或樣式不一致。

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

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

小夜