在 DSH(DeepSeek Harness)的开发或协作场景中,会话消息里的文件链接通常由系统默认程序处理,或以独立浮层形式打开。这种方式会打断当前会话的上下文,且布局不统一。dsh-md-reader 插件接管了这一行为,在 DSH 详情栏内以真三栏布局直接渲染文档,提供统一的阅读环境。
插件介绍¶
这是由 wjx-ai 开发的客户端插件。它利用 DSH 的双半身架构(宿主半身提供只读 HTTP 路由,浏览器半身提供渲染),拦截会话中的 Markdown / 图片链接,在浏览器右侧详情栏展开阅读面板。插件无需构建链,安装后通过 cordis.patch.yml 自动合并配置。
核心功能¶
- 真三栏布局:非遮罩浮层,而是驱动 DSH 布局系统展开右侧详情栅格轨道。侧边栏固定宽,会话区自动收窄,文档区自适应。
- 多格式支持:支持
.md,.markdown,.mdown,.mkd,.txt文本,以及常见图片格式。 - 目录与导航:正文自动扫描 h1–h6 生成目录 TOC;点击可平滑滚动定位;正文内的内联链接若匹配同级文件或相对路径,可继续在面板内打开。
- 编辑器功能:支持
⧉复制原文、A-/A+字号缩放(70%–150%,持久化)、⏱自动跟随磁盘变更(可见时每 3 秒探测 mtime)、⟳手动重载、↗系统打开。 - 主题与兼容:明暗主题跟随;保留原生出口;关闭面板后右下角保留 📖 悬浮入口,可重开最近文档。
安装与启用¶
前置要求:
1. 已安装 DSH 且版本 >= 0.1.0-rc.6。
2. 已启动过 DSH。
3. 系统环境变量 PATH 中包含 pnpm。
安装命令:
dsh plugin --profile web add github:wjx-ai/dsh-md-reader
安装后,包内的 cordis.patch.yml 会作为 Profile Bundle patch 自动合并进 profile 层栈。安装完成后刷新浏览器即可生效。
使用方法¶
- 打开文档:点击会话中任意
.md/.markdown/.mdown/.mkd/.txt或图片文件链接,右侧展开三栏阅读面板。 - 快捷键操作:
☰:展开/收起目录⧉:复制原文A-/A+:缩小 / 放大字号⏱:切换自动跟随磁盘变更⟳:手动重载文档↗:用系统默认程序打开Esc/×:关闭面板- 关闭后:面板关闭后,右下角保留 📖 悬浮入口,点击可重开最近文档。
宿主半身 API¶
插件宿主半身提供只读 HTTP 路由,供浏览器半身调用:
GET /api/md-reader/file?path=<绝对或相对路径>&base=<可选解析基目录>[&meta=1]
GET /api/md-reader/list?dir=<目录>
- 参数说明:
path:文件路径,支持绝对路径或相对于base的相对路径。base:可选,解析相对路径的基目录。meta=1:仅返回元信息,用于自动跟随轮询。- 返回内容:
- 文本文件:
{ ok, kind:'text', path, dir, name, size, mtime, content } - 图片:
{ ok, kind:'image', mime, data }(Base64 内联) - 列表:返回目录文件列表
- 安全限制:
- 扩展名白名单:
.md,.markdown,.mdown,.mkd,.txt及常见图片。 - 大小限制:文本 2 MiB,图片 8 MiB,列表 500 条。
- 路径限制:
webServer绑定非回环地址时,绝对路径必须落在已注册工作区根内。 - 认证:未认证请求返回 401。
注意事项¶
- 插件依赖 DSH >= 0.1.0-rc.6,且安装命令需 PATH 中有
pnpm。 cordis.patch.yml会自动合并,无需手动编辑配置。- 插件全程只读,无写入端点,未认证请求会被拦截。
- 在空白会话页下,面板可能会退化为浮层样式;正常点击文件链接时,三栏布局总是成立。
- 双半身插件要求宿主半身提供只读 HTTP 路由,浏览器半身拦截点击并渲染。