前言¶
在 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。