dsh-markdown-live:DSH 输入框与用户消息的 Markdown 实时渲染

前言

在 DSH 桌面端写长提示时,输入框通常是纯文本:标题、列表、代码围栏要靠肉眼对齐 #、- 和反引号,发送前很难判断最终排版。助手回复侧往往已有 Markdown 渲染,用户自己发出的消息却仍是原文,对话里阅读体验不一致。

dsh-markdown-live 是社区维护的客户端插件(维护者 9426Haruka,仓库 9426Haruka/dsh-markdown-live)。它在不改动提交内容的前提下,为编写区做实时 Markdown 呈现,并把已发送的用户文本走宿主同一套 Markdown 渲染。插件归类为「客户端」,当前 GitHub 星标为 0;许可证 MIT,package 版本 0.2.9。

这是什么

一句话:DSH 桌面端插件——输入框内实时 Markdown 渲染,外加用户消息按 Markdown 显示;发给后端的仍是字面 Markdown,逐字节不变。

实现上全部浏览器逻辑集中在单文件 client.js,无构建步骤;Host 侧 index.js 负责在「设置 → 插件」中提供可开关项。插件依赖 DSH 自带的 @deepseek-ai/dsh-client-locale 与 @deepseek-ai/dsh-client-ui-conversation 两个 client 插件,并面向 DSH 桌面版 0.2.x(web 平台的 client bundle)。

核心功能

输入框(Composer)

  • 实时渲染:打字或粘贴 Markdown 时,语法立即以样式呈现,无需先发送。
  • 标记淡出:光标所在行保留淡显语法标记;其余行的 #、*、~~、反引号、[]()、-、> 等自动隐去,接近所见即所得。
  • 块级样式:支持 #~###### 标题、> 引用、无序/有序/任务列表(含缩进)、代码围栏(含语言名,非光标行可收起围栏行)、--- 分割线。
  • 交互:列表/引用中 Shift+Enter 自动延续;Backspace 可移除标记或退出空代码行;代码围栏自动补全;多行粘贴进列表/引用会自动补前缀。
  • 中文输入:拼音组合阶段正文颜色正常;标记与正文之间的空格为普通文本节点,光标可停在其中。
  • 提交不变:渲染只作用于显示层(Lexical 格式位与 DOM class),提交文本仍是原始 Markdown。

草稿超过 12000 字符时,为保流畅会暂停实时渲染。

已发送的用户消息

覆盖宿主 conversation.user.text.node 的 text 单元格(priority -1),使用 @deepseek-ai/dsh-client-ui-primitives 的 MarkdownText 渲染 raw。@ 提及、技能 chip、消息操作按钮保留;file/folder/skill 等节点仍走宿主原渲染器。普通换行会保留。

支持的语法(摘要)

行内:粗体、斜体、删除线、行内代码、链接与图片语法(图片按链接样式,不内联加载)。块级:标题(# 后需空格与内容)、引用、列表、任务列表、``` / ~~~ 围栏、分割线。围栏内不做行内解析;输入框内不对代码做语法高亮(已发送消息中的代码块由宿主高亮)。

自定义样式

颜色通过 CSS 变量暴露,可在 DSH 自定义样式中覆盖,例如:

[data-composer-input] {
  --dml-code-bg: #eceef0;        /* 行内代码背景 */
  --dml-code-block-bg: #eceef0;  /* 代码块背景 */
  --dml-mark-ink: rgba(127, 127, 127, 0.55); /* 语法标记颜色 */
}

安装与启用

本仓库即插件 bundle 目录(含 package.json、cordis.patch.yml、index.js、client.js)。须先将该目录放到本机,再在 DSH 中安装:

  1. 打开 设置 → 插件,使用「安装插件 / 从本地安装」,选择插件目录;或
  2. 通过 agent 的 plugin_manager 工具:
plugin_manager install_bundle(target = "<插件目录的绝对路径>")

安装后列表显示名为 dsh-markdown-live,可随时开关;重载客户端后生效。卸载:在设置中禁用或移除;插件不修改 profile 之外的文件。

插件以当前 DSH 进程权限在客户端运行,安装前建议阅读仓库源码与 MIT 许可证,确认符合你的使用环境。

典型用法

无需额外配置项:启用插件后,在对话输入框直接写 Markdown 即可看到实时样式;发送后,你的用户消息会以 Markdown 排版显示,而 API/会话里保存的仍是相同字面文本。

开发或二次修改时,改 client.js 后宿主会热重载 client bundle。语法检查:

node --check client.js

适用场景与注意

适合:经常在 DSH 里写结构化提示(标题、列表、代码块、任务清单)的开发者;希望发送前后视觉一致、又必须保持提交文本为纯 Markdown 的场景。

已知限制(来自仓库说明):

  • 表格(| 行)未适配,按普通文本显示。
  • 富文本粘贴会按纯文本 Markdown 重新着色,不保留 HTML 样式。
  • 依赖 DSH 内部 Lexical 节点结构,DSH 大版本升级后可能需要适配。

社区插件目录 skillhub.cn 上的 dsh-markdown-live 与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,目录站用于发现与分发社区作品。

结尾

dsh-markdown-live 把编写区的 Markdown 预览和已发送用户消息的 Markdown 展示补到同一客户端插件里,且不改提交字面量。需要试用或贡献代码时,可看目录页与 GitHub 仓库:

  • 目录:https://www.skillhub.cn/plugins/9426Haruka/dsh-markdown-live
  • 源码:https://github.com/9426Haruka/dsh-markdown-live
羽毛球分组比赛记分
小程序二维码

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

小夜