dsh-marktext:在 DSH 右側邊欄用 MarkText 風格編輯 Markdown

前言

在 DeepSeek Harness 裏寫 README、設計文檔或插件說明時,左側文件樹裏往往堆滿 .md 文件。若右側只能看源碼或簡單預覽,改標題、表格、公式都要對着 # 和 | 敲,和寫正文的心流是兩套節奏。社區裏也有其它 Markdown 相關插件,但側重點不同。

下面介紹 dsh-marktext:把 MarkText 使用的編輯器核心 muya(@muyajs/core)嵌進 DSH 右側邊欄,點開 Markdown 即所見即所得編輯,保存時帶版本校驗。它不提供 MarkText 桌面殼,只做 DSH 集成。

這是什麼

dsh-marktext 由維護者 Roland0511 發佈,npm 包名 dsh-marktext,在 SkillHub 插件目錄 歸類爲客戶端插件。GitHub 倉庫 Roland0511/dsh-marktext 當前約 98 stars、6 forks(以倉庫頁爲準)。

一句話定位:在 DSH 側邊欄文件樹中打開 *.md 等文件,用 WYSIWYG 方式編輯渲染後的文檔塊,再通過宿主文件系統寫回磁盤,並配合 baseVersion 避免靜默覆蓋他人改動。

核心功能

以下能力均來自項目 README 與 package.json 說明,未在資料中出現的功能不寫進正文。

  • 文件匹配:在側邊欄點擊 *.md / *.markdown / *.mdown / *.mkd,在 MarkText 風格標籤頁中打開。
  • 真 WYSIWYG:Markdown 標記隱藏,標題、列表、表格、引用、代碼塊以 DOM 形式呈現。
  • 擴展塊離線按需加載:KaTeX 數學、Mermaid、Vega、PlantUML、Prism 高亮等。
  • 工具欄與快捷鍵:顯示文件名、未保存指示、狀態與 Save;⌘S / Ctrl+S 保存;⌘Z / ⇧⌘Z(或 Ctrl+Z / Ctrl+Shift+Z)撤銷重做。
  • 自動保存:停止輸入約 2.5 s 後自動保存。
  • 主題:跟隨宿主淺色/深色。
  • 相對路徑圖片:文檔內 ![](assets/a.png) 相對當前 Markdown 所在目錄解析(資料註明絕對路徑與 file:// 尚未支持)。

保存路徑:優先 ctx.fs.writeText 且 kind: 'replaceIfVersion';版本過期返回 FS_STALE_VERSION 並提示衝突。若宿主沙箱拒絕寫入,單次保存可回退到 Node fs.writeFile,但仍先通過 ctx.fs.stat 校驗版本,不放寬版本守衛。

架構要點(爲何用 iframe)

宿主側 lib/client.js 註冊側邊欄標籤類型 marktext;標籤體爲 iframe,加載 /dsh-marktext/renderer/<token>/index.html。渲染器是獨立 Vite 構建,內含 muya。宿主 lib/index.js 提供靜態資源路由與 open|save|stat API,經 ctx.fs 讀寫。

muya 在 :root 聲明 CSS 變量並把浮動工具欄掛到 document.body,直接嵌進 React 會污染宿主樣式,因此用 iframe 隔離,僅通過 postMessage(信封字段 __dshmkt)傳遞文檔、主題與保存請求。

安裝與啓用

插件以當前 DSH 進程權限運行;安裝前建議閱讀倉庫源碼與 MIT 許可證(第三方說明見 NOTICE.md)。SkillHub 爲社區目錄站點,與 DeepSeek / 幻方無官方從屬關係。

環境要求:DeepSeek Harness 0.2.1+,且具備 ctx.sidebarRightTabs、ctx.slots、ctx.fs、ctx.webServer。從源碼構建需 Node 20+。

1. DSH 應用內(推薦)

側邊欄 → Plugins → Add plugin → Install a third-party plugin,輸入:

dsh-marktext

點擊 Enable now,重啓應用一次,再打開任意 .md 文件。

2. 命令行(web profile)

dsh plugin --profile web add dsh-marktext

3. 手動(desktop profile)

桌面應用的 desktop profile 不接受 dsh plugin --profile desktop,需編輯 ~/.dsh/profiles/desktop/package.json:

{
  "dsh": { "profile": { "bundles": [..., "dsh-marktext"] } },
  "dependencies": { ..., "dsh-marktext": "^0.1.1" }
}
cd ~/.dsh/profiles/desktop && pnpm install

然後重啓應用。npm 上 package.json 顯示當前發佈版本爲 0.1.11;手動編輯 dependencies 時請與 npm 頁或 Release 對齊。

從 GitHub 安裝

凡接受包名的地方,可使用 github:Roland0511/dsh-marktext(倉庫已提交構建好的 renderer/,無需本地 build)。

典型用法

  1. 安裝並啓用插件,重啓 DSH。
  2. 在側邊欄文件樹中點擊項目內的 Markdown 文件。
  3. 在右側標籤頁中直接編輯渲染後的內容;需要時用工具欄 Save 或 Ctrl+S / ⌘S。
  4. 編輯含 Mermaid、公式等的內容時,相關腳本按 README 說明按需加載,無需單獨配置。

若標籤頁提示類似 “no viewer available”,說明客戶端未成功註冊標籤體。可查詢診斷接口(將 <DSH-port> 換爲實際端口):

curl -s http://127.0.0.1:<DSH-port>/dsh-marktext/api/diag | python3 -m json.tool

查看 typeRegistered、bodyRegistered 與 errors。

適用場景與注意

適合:在 DSH 內長期維護 Markdown 文檔、希望編輯體驗接近 MarkText 而非純源碼的用戶;需要表格、公式、圖表塊且希望離線 bundle 隨插件提供的情況。

注意:

  • 與 dsh-markdown-typora 同爲 *.md 註冊在 extension band,只能二選一,否則只有一個生效。
  • 相對圖片路徑可用;絕對路徑與 file:// 暫不支持。
  • 暫無「插入選區到對話」、文件樹操作、PDF 導出等(README 列爲後續方向)。
  • 包體積約 4 MB tarball,首屏資源約 1.6 MB(gzip 約 470 KB),Mermaid/Vega/Prism 等分塊按需加載。
  • 構建依賴 npm 上的 muya 0.2.0;升級 muya 需做兼容性檢查。

結尾

dsh-marktext 把 MarkText 的 muya 編輯體驗放進 DSH 右側邊欄:點文件即 WYSIWYG,保存帶版本守衛,iframe 隔離樣式。目錄頁:https://www.skillhub.cn/plugins/Roland0511/dsh-marktext;源碼與詳細說明:https://github.com/Roland0511/dsh-marktext。

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

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

小夜