前言¶
在 DSH 的插件化做法里,一些界面增强能力可以单独安装。dsh-message-navigator 解决的是网页聊天界面中“对话太长、回到某条用户输入不方便”的问题:它在界面右侧提供一条垂直消息索引,把每条用户输入映射为可点击的 marker,点击后可跳转,滚动时也会实时高亮当前阅读位置。
这是什么¶
dsh-message-navigator 是 TableRogue 维护的 Client-only DSH 插件,许可证为 MIT,版权标记为 © 2026 TableRogue。
它面向 DeepSeek Harness 网页聊天界面,在右侧边缘增加一个轻量消息索引:
- 每条用户输入对应一个 marker;
- 点击 marker 可平滑跳转;
- 滚动时,当前阅读位置对应的高亮 marker 会实时更新;
- AI 流式输出期间不生成 marker;
- 不替换现有界面,UI 挂载在
shell.overlay层。
核心功能¶
点击跳转¶
点击 marker 后,通过 scrollIntoView 将目标消息平滑居中。如果目标已经在视口附近,会跳过动画,并且不产生横向位移。
滚动同步¶
滚动同步以视口 40% 处作为阅读线,实时高亮对应 marker。该滚动路径采用纯算术计算,不触发额外 DOM 查询,也不触发 re-render。
Hover 预览¶
将鼠标悬停在 marker 上时,会显示一个统一宽度的 tooltip 卡片:
- 宽度为
240px; - 文本控制在 1–2 行,超出省略。
动态同步¶
以下操作发生后,索引会自动重建:
- 新消息进入;
- 消息删除;
- 加载历史消息;
- 切换会话。
AI 流式输出不会生成 marker,只在对应消息稳定后参与索引。
稳定标识¶
marker 与消息通过 data-chat-flow-key 一一对应,该字段内含 messageId。跳转和高亮不依赖 DOM 顺序索引,因此在消息新增、删除或历史加载时更稳定。
性能与响应式¶
- 几百条消息下仍可流畅使用;
- 窗口宽度
≤1100px时隐藏 tooltip; - 窗口宽度
≤880px时隐藏整个导航组件。
安装与启用¶
GitHub 安装¶
dsh plugin --profile web add github:TableRogue/dsh-message-navigator
本地安装¶
如果已经获取本地目录,可以使用本地安装命令:
dsh plugin --profile web add ./dsh-message-navigator
验证配置¶
安装后,可以查看当前 web profile 的配置,确认插件层已经出现:
dsh --profile web --dump-config
输出中应看到:
# == dsh-message-navigator 层
卸载¶
dsh plugin --profile web remove dsh-message-navigator
典型用法¶
安装后启动¶
完成安装后,启动 web profile:
dsh --profile web
进入网页聊天界面后,右侧会出现垂直消息导航条。
点击 marker 跳转¶
在右侧导航条上点击任意 marker,对应消息会被平滑滚动到视口中心附近。
滚动时查看当前位置¶
在聊天区域上下滚动时,导航条上的高亮 marker 会跟随当前阅读位置变化,可用于快速确认自己正处于哪条消息附近。
临时方式¶
README 同时提供动态插件临时方式:把 src/client.js 头注释以下的内容填入 cordis_define 的 code.client,再执行 cordis_run。具体操作可参考该文件头注释。
适用场景与注意¶
适合以下场景:
- 超长对话中需要快速回到某条用户输入;
- 希望在现有网页聊天界面上增加一个只读导航入口;
- 不想替换原有界面,只做轻量增强;
- 本地链接安装时,希望修改源码后重启即生效。
使用前需要注意:
- 插件会以当前
dsh进程权限运行,安装前应检查源码与许可证; - 它依赖产品自身的稳定锚点,例如
data-conversation-scroll、data-chat-flow-key、data-chat-flow-kind等; - 产品改版后,可能需要同步更新选择器;
- 该插件只读使用这些锚点,不替换现有界面;
- 小窗口下组件会按规则隐藏,属于响应式行为,不是安装失败。
链接¶
社区目录页:
https://www.skillhub.cn/plugins/TableRogue/dsh-message-navigator
GitHub 仓库: