前言¶
DeepSeek Harness (DSH) 的插件生态支持对客户端的轻量级扩展。在长对话场景下,快速定位历史指令和回填已发送内容是常见需求。dsh-message-jump 插件通过在会话区提供悬浮导航条和终端式的键盘历史穿梭功能,解决这两个痛点。
该插件由 TiChuXiXi 维护,采用 MIT 许可证。它是一个同时声明 dsh.bundle.patch(host 层)与 dsh.client(浏览器层)的包,旨在不依赖私有接口的前提下,增强 web 端的消息浏览与输入效率。
功能概览¶
指令导航条¶
在会话区左侧或右侧边缘常驻一个悬浮导航条(Codex 时间线风格):
- 滚动联动定位:每条已发送的用户指令对应一个刻度。深色刻度表示当前位于视口顶部的指令,滚动时实时更新。
- 悬停预览:鼠标悬停在刻度上时,会产生宽度过渡的涟漪效果,并在旁侧浮出指令内容预览。
- 点击跳转:点击刻度平滑滚动到对应消息(距顶部 16px 停靠)并闪烁高亮。
- 全历史覆盖:读取本地会话完整事件日志,覆盖所有用户指令。即使聊天视图未加载的历史部分,也会以“幽灵态”显示刻度。点击未加载的刻度会自动触发“加载更早”直到该指令进入窗口。
- 位置可配置:在设置 → 常规中切换“指令导航条位置”(左/右),并持久化到
localStorage。
历史消息穿梭¶
在消息输入框聚焦时,利用键盘 ↑/↓ 键快速回填历史指令:
- 终端式交互:按 ↑ 回退,按 ↓ 前进。
- 草稿保护:进入穿梭前输入框的内容会被暂存。退出时(按 Esc 或翻到最新后按 ↓)完整还原。穿梭中直接打字会自动退出穿梭模式。
- 智能让位:当输入框忙碌、只读、开启输入法或弹出菜单时,方向键不会被劫持,原有交互不受影响。
- 状态提示:穿梭时输入框上方会显示
历史消息 ↑↓ n/m · Esc 退出的提示条。
安装¶
使用官方命令安装插件:
dsh plugin --profile web add dsh-message-jump
安装完成后,重启 dsh web 生效。
使用方法¶
指令导航条¶
- 打开任意会话,导航条默认显示在会话区右缘。
- 滚动聊天,观察深色刻度标记当前指令。
- 鼠标悬停刻度查看内容预览,点击刻度跳转定位。
- 在设置中切换“指令导航条位置”为左侧。
历史消息穿梭¶
- 聚焦消息输入框。
- 按 ↑ 回填最近一次发送过的内容,继续按 ↑ 或 ↓ 翻阅历史。
- 按 Esc 或翻到最新后继续按 ↓ 恢复草稿。
- 穿梭中直接打字即可退出并开始编辑。
工作原理¶
插件的数据与定位不依赖私有接口,复用宿主现有的组件与数据源:
- 数据源:列表数据来自会话快照
ConversationSnapshot.chat(与useSession同源),通过sessions.binding(id).session订阅。 - 完整历史:通过 Package-private RPC
msgjump.fullHistory调用ctx.sessionQuery.readSession(sessionId)获取本地完整日志。 - 组件挂载:浏览器层通过
shell.overlay注册悬浮导航条,通过settings.general.item注册位置设置,通过conversation.input.dock注册历史穿梭提示条。 - 滚动机制:复用 DSH 聊天视图的
data-chat-anchor-key锚点机制,通过[data-conversation-scroll]容器的bounding rect计算悬浮位置。
自定义¶
插件核心逻辑位于 lib/client.js。修改该文件并重启 dsh web 可调整样式与行为:
- 间距与尺寸:
RAIL_PAD(贴边间距)、BAR_W(刻度条默认宽度)、BAR_MAX_W(最大宽度)、BAR_H(条高)、BAR_GAP(条间距)。 - 视觉效果:悬停“宽度涟漪”的衰减半径(
barWidth中1 - d / 3的分母)。 - 内容过滤:
collectItems和collectHistory中可放宽kind判断,决定是否收录context注入消息。
结尾¶
dsh-message-jump 通过 Codex 风格的导航条和终端式的键盘穿梭,为 DSH 用户提供了长对话管理的具体解决方案。如需查看源码或提交反馈,请访问 GitHub 仓库。