dsh-typst-preview: 在 DeepSeek Harness 侧边栏实现 Typst 实时预览

前言

DeepSeek Harness (DSH) 采用插件化架构,扩展了其原生 Web UI 的能力。针对 Typst 文档的编写,开发者通常需要在外部工具中查看渲染结果。dsh-typst-preview 插件解决了这个问题,它将 tinymist 的实时预览能力直接集成到 DSH 的右侧边栏中,提供与内置 Markdown 预览一致的 Tab 切换体验。

安装与启用

此插件需要本地安装 tinymist 工具。安装插件后,需重启 DSH 应用使配置生效。

dsh plugin --profile web add github:Limbo-137/dsh-typst-preview

核心功能

插件通过本地启动 tinymist 进程来处理渲染和语法高亮,不涉及任何远程调用或数据上传。

  • 文件读取:仅读取当前已打开的 .typ 文件标签页内容,且为只读操作,不会修改源文件。
  • 网络行为:无出站流量,无遥测数据。所有请求均为同源请求(/api/typst-preview/*)或回环连接。
  • 命令执行:在本地直接启动 tinymist 二进制文件(用于 preview 和 lsp),不使用 Shell,不进行远程安装。
  • 环境依赖:不读取 Token、密钥或 Cookie,仅用于解析 tinymist 路径和用户主目录。

使用方法

安装并重启后,在 DSH Web UI 中打开右侧边栏(Files),点击 .typ 文件即可进入预览。

  1. 预览与源码切换:打开文件后,侧边栏会出现两个 Tab:Preview 和 Source。
  2. Preview:这是 tinymist preview 渲染的页面,通过 WebSocket 驱动。当你编写文档时,它会实时更新。工具栏提供刷新、颜色模式切换(原始/跟随系统/反色,状态保存在 localStorage)以及在新标签页打开的功能。
  3. Source:显示文件源码,利用 tinymist 的语义 Token 进行语法高亮(支持标题、关键词、函数、字符串、数学公式、标签、注释及加粗/斜体标记)。支持行号、复制和“加载更多”按钮(针对大文件)。

若需将 .typ 文件强制回退到原生文本查看器,需修改源码中 src/client/index.tsx 的 typstTabDefinition(),将 priority 设置为 'fallback',并调用 openResource(address, { kind: 'typst-preview' })。

权限与限制

该插件被视为“高能力”插件,因此需要在商店中手动审核通过,而非自动批准。

能力范围 具体限制
文件 仅读取已打开标签页的 .typ 文件,不写入任何内容。
网络 无出站流量,无遥测。请求为同源或回环。
命令 启动本地 tinymist 二进制文件,不使用 Shell 或远程安装。
凭证 不读取 Token、密钥或 Cookie。
生命周期 安装或更新时不运行任何脚本(无 preinstall/install 等钩子)。

外部依赖:必须安装 tinymist 并将其加入 PATH(或通过 tinymistPath 指定),已验证版本为 v0.15.0-rc1。

兼容性与注意事项

  • DeepSeek Harness 版本:要求 DSH >=0.1.5-rc.1(具体兼容版本范围见下文)。
  • 桌面端特性:桌面应用通过修改请求头(onBeforeSendHeaders)将 WebSocket 的 Origin 重写为应用内部 Origin,从而允许建立回环连接。
  • 旧版插件:旧版插件(挂载在 dsh-better-sidebar 上)已不兼容,被此新版取代。

兼容性声明:
package.json 中声明的 @deepseek-ai/dsh-client-ui-primitives peer 依赖范围是 DSH 实际强制执行的部分。evaluatePluginCompatibility 会检查运行时版本是否满足 semver.satisfies 范围。

  • DSH 版本范围:>=0.1.5-rc.1 <0.1.6-0 || >=0.1.7-rc.1 <0.2.0-0 || >=0.2.0-rc.1 <0.3.0-0
  • 测试版本:0.1.5-rc.1, 0.1.5-rc.2, 0.1.7-rc.2, 0.2.0-rc.1 均已验证。

总结

dsh-typst-preview 为 DSH 用户提供了原生的 Typst 实时预览能力。它通过本地编译器和精简的权限模型,在侧边栏内实现了高效的文档开发流程。

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

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

小夜