跳到主内容

dsh-chat-timeline

20Star4Fork2Issue0Watching

在 DSH Web 聊天界面右侧复刻 DeepSeek 官网对话导航栏,常驻显示用户消息列表,悬停预览、点击跳转并实时高亮当前阅读位置。

机审证据5/5方法论数据来源安装命令持续维护DSH 版本风险扫描
机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科
语言
JavaScript
License
MIT
分支
main
chatdeepseekdshdsh-pluginharnessnavigationtimeline

安装

命令web profile
$ 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 web profile 下生效;助手消息、工具提示、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 web profile 下生效,CLI profile 不渲染聊天界面因此不会出现导航栏

查看使用指南 →

该插件的安装步骤、关键要点、FAQ 与兼容性说明(基于已收录字段派生)。

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/jjxjjjjiik-bot/dsh-chat-timeline)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录