在使用 DeepSeek Harness (DSH) 处理长对话时,用户往往需要频繁地在历史消息中定位自己提出的问题。依靠原生滚动条逐条查看效率较低。dsh-conversation-nav 插件通过语义化的导航按钮,让开发者或用户可以按“用户消息”为单位快速跳转,并自动处理历史分页。
插件简介¶
这是一个 Web UI 插件,由 uigdwunm 维护。它为 DSH Web 对话区提供了一组圆形导航按钮:回到顶部、上一条用户消息、下一条用户消息、回到底部。
该按钮栏悬浮在输入框上方、对话内容右缘,并会替换产品自带的单一“回到底部”按钮。它不依赖哈希定位,而是通过属性(如 data-chat-anchor-key)定位 DOM 元素,仅针对 user 和 steering 类型的消息进行跳转,会跳过工具调用、上下文注入等其他过程节点。
核心功能¶
-
语义化导航
- 回到顶部:滚动到当前顶部,并持续翻页加载更早历史,直到真正的顶部。
- 上一条 / 下一条:跳转到上一条或下一条用户消息。如果目标超出当前已加载窗口,会自动触发翻页。
- 回到底部:直接跳转到最新位置。
-
智能交互
- 目标锚点:跳转后,目标消息会停留在视口顶部约 1/12 的位置。
- 自动显隐:默认隐藏。当检测到平均向上滚动速度超过 200 px/s 时出现;出现后 3 秒无操作自动隐藏,点击任意按钮会重置倒计时。
- 位置布局:右对齐,距离输入框 16px,在渲染前同步定位以避免闪烁。
-
状态与兼容
- 内存状态:仅使用页面内存状态,无持久化存储(无 localStorage、IndexedDB 等)。
- 样式自修复:样式节点丢失时,插件会每 100ms 检查 DOM 并重建样式节点。
- 清理机制:插件卸载时会自动清理所有样式、计时器和滚动监听器。
安装与启用¶
安装此插件需要使用 DSH 的 Web 配置文件(profile)。
1、执行以下命令安装:
dsh plugin --profile web add dsh-conversation-jump
2、安装完成后,重启 dsh web 即可生效。
开发与扩展¶
本地开发:
npm install
npm run build
构建后的文件位于 lib/client.js。由于 profile 目录下的 node_modules 是硬链接,重新构建会破坏链接,因此本地开发时需要先运行 npm run build,再执行一次安装命令:
dsh plugin --profile web add file:/absolute/path/dsh-conversation-nav
其他安装方式:
* 从 GitHub 安装源码:
dsh plugin --profile web add github:uigdwunm/dsh-conversation-nav
- 从预构建 Release 包安装:
dsh plugin --profile web add https://github.com/uigdwunm/dsh-conversation-nav/releases/download/v0.1.5/dsh-conversation-jump-0.1.5.tgz
技术细节¶
- 定位方式:使用属性
[data-conversation-scroll]、[data-chat-anchor-key]等定位,不依赖 URL 哈希。 - 翻页机制:插件会查找
[data-chat-flow]内部的“加载更多”按钮并模拟点击,直到锚点数量增加。 - 组件结构:
index.mjs:主机部分(Web 端),为一个空的apply函数,不注入任何宿主服务。src/client.ts:浏览器端逻辑,处理导航、分页、定位和可见性策略。
注意事项¶
- 适用范围:仅限 Web UI 插件。
- 分页限制:如果主机界面从未渲染“加载更多”按钮,插件将无法进行翻页操作。
- 许可证:MIT。