dsh-user-code-block: Render fenced code blocks in user messages like assistant replies

前言

在 DeepSeek Harness Desktop(DSH)里,助手侧消息走 Markdown 渲染,用户自己发出的内容则走 UserText:纯文本、white-space: pre-wrap。你在对话里粘贴一段带围栏的代码时,反引号往往原样显示,没有边框、没有语言标签、也没有高亮。若你经常在用户消息里贴配置片段、命令或脚本,这种体验会和助手回复里的代码块形成明显反差。下面介绍社区插件 dsh-user-code-block(维护者 VictorKozachek,GitHub VictorKozachek/dsh-user-code-block),它只针对用户消息中的围栏块做例外处理,其余链接、@ 提及等仍按内置 UserText 行为工作。

这是什么

dsh-user-code-block 是挂载在 DSH 客户端(ui-chat)上的插件:识别用户消息里的 fenced code block,为其加上边框、语言横幅、语法高亮和复制按钮;消息其余部分保持纯文本。运行时无第三方依赖,无需构建步骤。npm 包当前版本为 0.4.0(MIT 许可证)。在 README 中,已在 DeepSeek Harness Desktop 0.2.1-rc.3 上验证;0.1.x 同样暴露文档中的扩展点。任何挂载 ui-chat 的 DSH profile(desktop 或 web)均可使用。

核心功能

围栏识别规则

插件同步匹配用户文本,规则包括:

  • 三个及以上反引号或波浪线构成的围栏;
  • 行首最多三个空格缩进(四个空格不再视为围栏);
  • info string 的第一个词作为语言标识,例如 ```python title=x 识别为 python;
  • 四反引号围栏可正确包裹内含三反引号的内容;
  • 未闭合的围栏不当作代码块,避免漏写结束符时误把后续文字染成代码。

单行反引号 `inline code` 不处理。

语法高亮

颜色来自 DSH 主题已发布的 --shiki-token-* CSS 变量(@deepseek-ai/dsh-client-ui-theme 中的 shiki.css)。亮/暗主题通过 body[data-ds-dark-theme] 切换,插件无需自行探测主题。

高亮由内置小型 lexer 完成,不引入 shiki,也不 import DSH 禁止插件使用的 client primitives。README 列出的语言包括 Python、JavaScript/TypeScript、JSON、Bash、Go、Rust、Java、HTML/XML、SQL、CSS/SCSS 等;各语言着色的 token 类型(关键字、字符串、注释、数字等)以仓库表格为准。

单色模式:围栏语言为 text、txt、plain、output、log、console、terminal、diff、md 时保留边框与语言条,但不着色,适合终端输出与日志。其他未内置 lexer 的语言同样以等宽无高亮文本展示,避免错误配色。

复制按钮

代码块标题栏右侧提供 Copy:写入剪贴板的是原始源码,不含高亮 markup。点击后标签约 1.5 秒恢复。若浏览器未授予 navigator.clipboard,按钮不渲染。

扩展点

插件通过 ui-chat 文档「Sent user text」所述机制接入:

  • ctx.uiConversation.userText.register({ id, order, match(text, from) }) 同步匹配;
  • conversation.user.text.node 槽位渲染,key 与 matcher 的 id 一致。

宿主侧 lib/index.js 导出空的 apply(),仅用于在 profile 的 cordis 树中显示插件条目。

安装与启用

推荐从 npm 安装到指定 profile(以 desktop 为例):

dsh plugin --profile desktop add dsh-user-code-block

插件管理器会安装包、写入 profile 的 package.json 与 dsh.profile.bundles,下次启动 DSH 后加载;仅刷新页面不会重建客户端模块图。

本地 checkout 也可用 CLI 指向路径:

dsh plugin --profile desktop add /path/to/dsh-user-code-block

README 还说明从源码运行 ./install.sh、手动编辑 package.json 与 node_modules 符号链接等方式;web profile 可通过 DSH_PROFILE_DIR="$HOME/.dsh/profiles/web" ./install.sh 切换目录。卸载可用仓库中的 ./uninstall.sh,或从 dsh.profile.bundles 移除包名并删除对应 symlink。

典型用法

安装并重启 DSH 后,在用户消息中发送带围栏的块,例如:

```python
print("hi")
```

预期效果:该段以带框、带 python 语言条的高亮块显示,同一条消息里的普通文字仍为纯文本。对 ```log 或 ```output 类围栏,应看到边框与标签但无语法色。

验证步骤与 README「Verification」一致:发一条含 fenced block 的消息,检查框线、语言横幅及非代码部分是否仍为 plaintext。

适用场景与注意

适合:经常在用户消息里粘贴多行代码、配置或命令、又希望视觉与助手 Markdown 代码块一致的 DSH 桌面或 web 使用者。

注意:

  • 插件在 客户端 运行,分类为社区目录中的「客户端」插件;DSH 生态强调「一切皆插件」,SkillHub 目录页 为社区站点,与 DeepSeek / 幻方无官方从属关系。
  • 安装前建议浏览 GitHub 源码与 MIT 许可证;插件随当前 DSH 进程与用户 profile 加载,安装来源应可审计。
  • peer 依赖 @deepseek-ai/cordis ^4.0.2;开发与测试需 Node.js 20+。

结尾

dsh-user-code-block 用单一例外补齐用户消息里围栏代码块的展示缺口:高亮、复制、日志类单色模式,且无运行时依赖。若你需要上述能力,可用官方推荐的 dsh plugin --profile desktop add dsh-user-code-block 安装后重启验证。

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

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

Xiaoye