READMESource: main@c41bc71b
dsh-jump-top
一键回到 DeepSeek Harness 会话的最顶部。自动加载全部「更早」,不用再反复点。
DSH 的长会话是分页加载的:想回到第一句话,得一次又一次点「加载更早」。这个插件在会话标题右侧加了一个双箭头按钮,点一次就会把剩余历史全部拉下来,并停在真正的第一条消息上。
为什么需要它
- 长会话里,「加载更早」可能要点击十几次;
- 历史是从上面接进来的,浏览器会保持当前滚动位置,所以每加载一页,视图都会离顶部更远;
- 直接在外部把
scrollTop设为0并不可靠:DSH 的聊天视图有一套自己的滚动锚点,它会把程序化滚动当成「读者正在滚动」,然后在内容提交后重新落位,结果就是——第一次跳到顶,又弹回中间,必须再点一次。
这个插件不再和那套锚点系统抢滚动,而是把「跳到第 1 轮」这件事交给 DSH 自己的轮次导航完成。
特性
- 一次点击:加载全部更早的消息,并停在第一条消息上;
- 借用原生路径:通过 DSH 的轮次导航加载历史、落位,避免二次弹回;
- 有回退方案:找不到轮次导航时,退回
loadThrough(0)+ 滚动钉住; - 无后台、无网络请求:只注册一个客户端按钮,不读写会话内容;
- 加载反馈:跳转期间按钮转圈并禁用,落地后自动恢复。
安装
应用内安装(推荐)
- 克隆或下载本仓库;
- 打开 DSH 的「设置 → 插件」,选择从本地目录安装,指向本仓库目录;
- 启用
dsh-jump-top,刷新页面。
命令行安装(CLI profile)
git clone https://github.com/xxxiii/dsh-jump-top.git
dsh plugin --profile web add link:/absolute/path/to/dsh-jump-top
desktopprofile 由桌面端独占,CLI 会拒绝操作;桌面端请在应用内的插件设置里安装。
安装后刷新页面即可。首次启用如果宿主没有热加载,重启一次 DSH。
使用
打开任意一个会话,标题右侧的工具区会多出一个双箭头图标:
- 点击一次:加载全部更早的消息,并跳到第一条消息;
- 按钮转圈时表示正在分页/落位,通常约 1 秒,长会话会更久;
- 已经在顶部时点击不会产生副作用。
工作原理
- 优先走轮次导航:找到右侧「轮次导航」里的第 1 轮并触发它。若第 1 轮尚未加载,DSH 会自己调用
loadThrough(seq)把历史分页拉下来,并用自己的锚点系统落位。 - 等它落完:轮询滚动容器与忙碌标记,确认已经到顶后,再做一小段轻柔的
scrollTop = 0修正,只用于压掉最后一次测量带来的抖动。 - 回退路径:如果当前视图没有轮次导航(例如轮次太少、导航被隐藏),则直接调用 Session 的
loadThrough(0)拉全历史,并用MutationObserver+ 滚动钉住等待布局稳定。
关键点在于:不要从外部和 DSH 的滚动锚点抢控制权。外部强行滚动会触发 movedByReader,打断它自己的落位,这正是「必须点两次」的根因。
兼容性
| 项目 | 要求 |
|---|---|
| DSH | >=0.2.0-rc.1 <0.3.0-0 |
| 客户端 | Web(含 Electron 桌面端) |
| Node.js | 仅开发/校验需要,>=20 |
插件依赖 DSH 的以下扩展面:
- 槽位
conversation.session.header.utilities - 会话的
loadThrough/loadOlder/hasMore状态,以及轮次导航的 DOM
DSH 升级后如果这些内部结构变化,可能需要跟着调整。
已知限制
- 只支持 Web 客户端;CLI/TUI 没有这个按钮。
- 超长会话需要真实分页,按钮会转圈到加载结束;轮次导航的落位最多等待 30 秒,历史分页本身可能更久。
- 如果某个会话没有轮次导航,会走回退路径,极长历史下仍可能偶尔出现一次轻微位移。
- 这是 UI 增强插件,不改变会话数据,也不会替你删除或折叠消息。
排错
按钮没出现
- 确认插件已启用,并刷新页面;
- 确认 DSH 版本在兼容范围内;
- 打开控制台看是否有
[dsh-jump-top]开头的报错。
按钮一直转圈
- 正常最长约 30 秒;超过后会在控制台留下
[dsh-jump-top]日志; - 把控制台里
[dsh-jump-top] done的对象和 DSH 版本一起提 issue。
还是要点两次
- 打开控制台,记录
[dsh-jump-top] done里的path(turn-navigation或fallback)、scrollTop、scrollHeight; - 附上会话大致轮次数和 DSH 版本,方便定位。
开发
无需构建,源码就是最终产物:
dsh-jump-top/
├── lib/
│ ├── client.js # 浏览器端:按钮、轮次导航、回退逻辑
│ └── index.js # 空的服务端入口,仅供 bundle patch 加载
├── cordis.patch.yml # 把插件插入 profile
├── package.json
├── README.md # 中文
└── README.en.md # English
修改 lib/client.js 后:
node --check lib/client.js
然后刷新页面。只改客户端代码不需要重启宿主;改 package.json 里的入口/清单时需要重启。
隐私
插件不发送网络请求,不读取会话正文,不写入会话存储。它只操作当前页面的滚动位置和 DSH 已有的导航控件。
No comments yet. Be the first to write one.