在 DSH Web 聊天界面右侧复刻 DeepSeek 官网对话导航栏,常驻显示用户消息列表,悬停预览、点击跳转并实时高亮当前阅读位置。
- 语言
- JavaScript
- License
- MIT
- 分支
- main
安装
$ dsh plugin --profile web add dsh-chat-timeline在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程
对话式安装
帮我安装 DeepSeek Harness 插件 jjxjjjjiik-bot/dsh-chat-timeline:先查看仓库 https://github.com/jjxjjjjiik-bot/dsh-chat-timeline 确认安全性,然后执行安装命令并验证插件加载成功。
把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。
一句话定位
在 DSH Web 聊天界面右侧 1:1 复刻 DeepSeek 官方网页版的「对话导航栏」:每条用户消息对应一条指示线,悬停展开预览,点击跳转到对应消息并实时高亮当前阅读位置。
核心能力
- 在聊天窗口右侧常驻显示一条细竖轨,每条用户直接发出的消息对应一条灰色指示线,悬停展开面板按顺序展示各消息前 80 字预览
- 随聊天滚动实时高亮距离阅读位置最近的条目(品牌蓝文字 + 放大指示线),点击条目平滑跳转到对应消息;目标节点未加载时自动调用 loadOlder 拉取更早历史
- 浅色 / 深色主题 1:1 自适应(毛玻璃面板、主题色变量、空状态文案均跟随系统主题切换),并通过 ResizeObserver + MutationObserver 持续测量聊天区右缘,动态平移导航栏避免与右侧工作台(如 aionui 工具栏)重叠
- 会话中用户消息少于 2 条、或视口宽度 ≤ 767px 时自动隐藏,避免噪音和移动端遮挡;旋转屏幕或拉伸窗口后随媒体查询变化自动恢复
- 完整无障碍支持:role="navigation"、aria-label、aria-current,并在 prefers-reduced-motion 时关闭过渡动画
- 仅在 DSH
webprofile 下生效;助手消息、工具提示、cron 提醒等非用户直接发送的内容被主机侧投影显式过滤,不会进入时间线
技术实现
- 语言: JavaScript(ESM 主机侧 + UMD 浏览器客户端,React 18 函数组件)
- 关键依赖: @deepseek-ai/cordis、@deepseek-ai/dsh-session-projection、react / react-dom、zod
- 架构模式: Cordis 双半架构。主机侧 lib/index.js 注册名为
dshChatTimeline的会话投影,按事件流枚举用户消息;客户端 lib/client.js 把 TimelineRail 组件通过conversation.input.dock插槽挂入聊天界面,并以 createPortal 渲染到 body,CSS 前缀为dsct_ - 入口文件: lib/index.js(主机侧)、lib/client.js(Web 客户端侧)、cordis.patch.yml(bundle patch)
适用场景
长会话里想快速跳回某条用户提问、或在阅读过程中随时看到「我说过什么」的纵览时使用。对于超过 8 条用户消息的会话,面板会自动撑到 240px 显示完整预览;少于此数时按内容宽度自适应,避免占用过多屏幕空间。
前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH(@deepseek-ai/dsh-session-projection、dsh-client-runtime 等) | ^0.1.0-rc.6 | 仅在 DSH web profile 下生效,依赖会话投影与 conversation 客户端包 |
| Node.js | >=22 | 主机侧构建与运行环境 |
| Cordis | ^4.0.1 | 插件运行时 |
| React | ^18.2.0 | 客户端组件库 |
| zod | ^4.4.3 | 客户端 schema 校验依赖 |
| 平台 | 跨平台 | 功能仅作用于 Web profile,但插件本身在任意 Node 环境均可加载 |
安装方式
dsh plugin --profile web add github:jjxjjjjiik-bot/dsh-chat-timeline
配置项
本插件无需额外配置。安装后重启 dsh web 并刷新浏览器即可在右侧看到导航栏。
常见问题
Q: 会话里没有用户消息(或只有 1 条)时为什么看不到导航栏?
A: 这是设计行为:当会话中由用户直接发送的消息少于 2 条时,TimelineRail 组件直接返回 null,避免单条指示线造成视觉噪音。开始第二句提问后导航栏就会自动出现。
Q: 助手回复、工具提示、定时提醒这些消息会计入时间线吗?
A: 不会。主机侧投影只接受 source.kind === "user" 的 user/message 事件,插件注入的上下文、任务完成通知、cron 提醒、agent.inject 等虽然走相同的 user/message 事件,但因 source.kind 不同被显式排除,时间线只反映用户亲手打出的内容。
Q: 手机上会显示导航栏吗?
A: 不会。客户端同时设置 CSS 媒体查询与 JS matchMedia 双重守卫(断点 767px),窄屏下整个组件不渲染;旋转屏幕或拉伸窗口后会随媒体查询变化自动恢复显示。
Q: 右侧已经有其他工作台(如 aionui)会被导航栏挡住吗?
A: 不会。TimelineRail 通过 ResizeObserver + MutationObserver 持续测量聊天滚动区右缘,根据聊天区右边界动态计算 right 偏移量并贴齐聊天区边缘,与右侧工作台保持不重叠。
Q: 点击时间线条目能跳到非常早的历史消息吗?
A: 可以。jumpToMessage 会循环调用会话的 loadOlder() 加载更早历史,最多 120 次重试直到目标节点进入已加载窗口,再调用 scrollIntoView 平滑滚动到该行(reduced-motion 时改为瞬间跳转)。
Q: 安装后需要额外配置吗?
A: 不需要。插件不暴露任何用户配置项,安装完成后重启 dsh web 并刷新浏览器即可使用。
Q: 卸载会影响历史会话数据吗?
A: 不会直接删除历史,但卸载后 dshChatTimeline 会话投影将不再注册,旧会话中由该投影生成的索引条目在新会话中将不再可用;聊天节点本身仍保留在 DSH 会话存储中。
Q: 和 DeepSeek 官方是什么关系?
A: 视觉效果 1:1 复刻自 chat.deepseek.com 官方网页版的 ScrollNav,非 DeepSeek 官方出品,与 DeepSeek 公司无任何关联。
上手难度
入门 — 不需要任何配置,安装即用;唯一需要理解的是「少于 2 条用户消息不显示」的设计取舍。
已知问题与限制
- 助手消息、工具提示、cron 提醒等非用户直接发送的内容刻意不计入时间线(lib/index.js:75-77);若希望将助手回复也纳入导航,需要修改主机侧投影过滤条件
- 当会话投影尚未完成初始 apply 时,客户端会启动后台 loadOlder 循环预加载全部历史,最多 120 次重试(lib/client.js:288-306),超长会话可能在首次打开时短暂加载历史
- 窄屏(≤767px)下整条导航栏隐藏,移动端用户需使用浏览器缩放或切换到桌面模式访问(lib/client.js:68 / :268-282)
- 预览文本被截断为 80 字符(lib/index.js:39 / lib/client.js:154),超长提问在面板中只能看到开头
- 仅在 DSH
webprofile 下生效,CLI profile 不渲染聊天界面因此不会出现导航栏
English | 简体中文
⭐️ 如果这个小插件帮到了你,请给本项目点一个免费的 Star 支持一下! 你的鼓励是持续通宵优化更新的最大动力~
**1:1 复刻 DeepSeek 官网右侧「对话导航栏」**的 DeepSeek Harness (DSH) 插件——把 chat.deepseek.com 官方网页版的 ScrollNav 界面与交互原样带进你的 DSH Web 聊天界面。
非 DeepSeek 官方出品,与 DeepSeek 无任何关联。
预览
功能
- 常驻右侧导航轨——屏幕右侧细长竖轨,每条用户消息对应一个指示线,与官网折叠态一致
- 全模式主题适配——1:1 像素级复刻 DeepSeek 官网浅色/深色主题,浅色模式下灰线清爽优雅、白底毛玻璃展开面板;深色模式沉浸暗黑
- 悬停展开——面板显示消息预览,随滚动实时高亮当前阅读位置(品牌蓝)
- 点击跳转——一键平滑滚动到对应消息,自动加载更早历史
- 动态避让——智能检测右侧工作台(如 aionui 等工具栏),自动平移贴合聊天区边缘,避免重叠遮挡
- 自动隐藏——会话少于 2 条用户消息时自动隐藏
- 移动端适配——视口宽度 ≤ 767px 时自动隐藏,避免在手机上遮挡对话内容;旋转/拉伸窗口后自动恢复
- 无障碍——ARIA 标签 + 遵循系统「减弱动态效果」设置
工作原理
Host 侧通过会话投影(dshChatTimeline)持久化枚举所有用户消息;客户端 TimelineRail 组件渲染导航轨(挂载于 conversation.input.dock 插槽,portal 到 body),数据源按速度优先:投影 → 已加载节点 → 后台 loadOlder。
安装
方式一:DSH / NPM 一键安装(推荐,最简便)
在终端中执行以下命令(自动从 npm 下载并配置):
dsh plugin --profile web add dsh-chat-timeline
或者:
dsh plugin add dsh-chat-timeline
安装完成后,重启 dsh web 并刷新浏览器即可。
方式二:Windows 本地一键脚本(克隆/下载仓库)
- 下载本项目(绿色 Code 按钮 → Download ZIP 解压,或
git clone) - 双击
install.bat—— 脚本自动完成:复制插件 → 注册配置 →pnpm install - 重启
dsh web并刷新浏览器
脚本可重复运行,不会重复安装。
方式三:手动安装(其他平台或本地开发)
- 将插件复制到
$DSH_HOME/profiles/web/plugins/dsh-chat-timeline/($DSH_HOME通常是~/.dsh) - 在
profiles/web/package.json添加依赖"dsh-chat-timeline": "file:plugins/dsh-chat-timeline",运行pnpm install - 在
profiles/web/cordis.patch.yml添加:- insert: - id: chat-timeline name: dsh-chat-timeline - 重启
dsh web并刷新浏览器
架构参考
- 布局/CSS:官网 ScrollNav 的 1:1 移植(提取自官方
main.css,以dsct_前缀命名空间化) - 插件架构:参考 asukasec/dsh-message-preview(MIT)
License
MIT — 见 LICENSE。"DeepSeek" 商标归其所有者所有,本项目与 DeepSeek 无关联。
查看使用指南 →
该插件的安装步骤、关键要点、FAQ 与兼容性说明(基于已收录字段派生)。
收录徽章
[](https://deepseek-plugin.org/plugins/jjxjjjjiik-bot/dsh-chat-timeline)把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。