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