dsh-message-jump: 会话导航与历史穿梭增强

前言

DeepSeek Harness (DSH) 的插件生态支持对客户端的轻量级扩展。在长对话场景下,快速定位历史指令和回填已发送内容是常见需求。dsh-message-jump 插件通过在会话区提供悬浮导航条和终端式的键盘历史穿梭功能,解决这两个痛点。

该插件由 TiChuXiXi 维护,采用 MIT 许可证。它是一个同时声明 dsh.bundle.patch(host 层)与 dsh.client(浏览器层)的包,旨在不依赖私有接口的前提下,增强 web 端的消息浏览与输入效率。

功能概览

指令导航条

在会话区左侧或右侧边缘常驻一个悬浮导航条(Codex 时间线风格):

  1. 滚动联动定位:每条已发送的用户指令对应一个刻度。深色刻度表示当前位于视口顶部的指令,滚动时实时更新。
  2. 悬停预览:鼠标悬停在刻度上时,会产生宽度过渡的涟漪效果,并在旁侧浮出指令内容预览。
  3. 点击跳转:点击刻度平滑滚动到对应消息(距顶部 16px 停靠)并闪烁高亮。
  4. 全历史覆盖:读取本地会话完整事件日志,覆盖所有用户指令。即使聊天视图未加载的历史部分,也会以“幽灵态”显示刻度。点击未加载的刻度会自动触发“加载更早”直到该指令进入窗口。
  5. 位置可配置:在设置 → 常规中切换“指令导航条位置”(左/右),并持久化到 localStorage。

历史消息穿梭

在消息输入框聚焦时,利用键盘 ↑/↓ 键快速回填历史指令:

  1. 终端式交互:按 ↑ 回退,按 ↓ 前进。
  2. 草稿保护:进入穿梭前输入框的内容会被暂存。退出时(按 Esc 或翻到最新后按 ↓)完整还原。穿梭中直接打字会自动退出穿梭模式。
  3. 智能让位:当输入框忙碌、只读、开启输入法或弹出菜单时,方向键不会被劫持,原有交互不受影响。
  4. 状态提示:穿梭时输入框上方会显示 历史消息 ↑↓ n/m · Esc 退出 的提示条。

安装

使用官方命令安装插件:

dsh plugin --profile web add dsh-message-jump

安装完成后,重启 dsh web 生效。

使用方法

指令导航条

  1. 打开任意会话,导航条默认显示在会话区右缘。
  2. 滚动聊天,观察深色刻度标记当前指令。
  3. 鼠标悬停刻度查看内容预览,点击刻度跳转定位。
  4. 在设置中切换“指令导航条位置”为左侧。

历史消息穿梭

  1. 聚焦消息输入框。
  2. 按 ↑ 回填最近一次发送过的内容,继续按 ↑ 或 ↓ 翻阅历史。
  3. 按 Esc 或翻到最新后继续按 ↓ 恢复草稿。
  4. 穿梭中直接打字即可退出并开始编辑。

工作原理

插件的数据与定位不依赖私有接口,复用宿主现有的组件与数据源:

  • 数据源:列表数据来自会话快照 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 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜