前言¶
在 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 後自動保存。
- 主題:跟隨宿主淺色/深色。
- 相對路徑圖片:文檔內
相對當前 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)。
典型用法¶
- 安裝並啓用插件,重啓 DSH。
- 在側邊欄文件樹中點擊項目內的 Markdown 文件。
- 在右側標籤頁中直接編輯渲染後的內容;需要時用工具欄 Save 或
Ctrl+S/⌘S。 - 編輯含 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註冊在extensionband,只能二選一,否則只有一個生效。 - 相對圖片路徑可用;絕對路徑與
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。