Back to home@Cloud-J

dsh-chat-jumper

dsh对话导航

Stars
0
Language
TypeScript
Created
Aug 24, 2026
Updated
Aug 24, 2026

Introduction

@dsh-external/dsh-chat-jumper

DSH 对话圆点导航:在页面右侧显示一条纵向圆点列,每个圆点对应一条用户提问,点击即可快速跳转到那一轮对话。

功能

  • 右侧纵向圆点列,每个圆点 = 一条用户提问(user / steering
  • 鼠标悬停:显示该轮提问的截断预览(前 40 个字符)
  • 点击圆点:平滑滚动到对应的用户提问位置
  • 当前阅读位置附近的提问圆点会高亮
  • 数据来自 DSH 会话快照(不是扫 DOM),历史消息未渲染也能统计
  • 若还有更早消息未加载,圆点列顶部会出现 ↑ 按钮
    • 点一次自动连续 loadOlder() 直到把全部更早历史加载完
  • 点击尚未渲染进 DOM 的旧圆点时,会自动触发 loadOlder() 并重试定位

安装

方式 A:官方装配(推荐)

dsh plugin --profile web add <解压后的目录或 .tgz>

然后重启 web / 刷新页面。

方式 B:dsh-super-injector

如果你机器上已经装了 dsh-super-injector

dev_install_plugin <解压后的绝对路径>

或者只临时注入:

dev_inject_plugin <解压后的绝对路径>

从源码构建

需要本机有 DSH checkout,并设置环境变量 DSH_CHECKOUT 指向源码根目录。

npm run build          # host tsc
npm run build:client   # client tsdown → lib/client.js

打包发布:

npm pack

文件结构

  • src/index.ts — host 侧空实现(纯 UI 插件)
  • src/client/index.ts — 圆点导航 UI(React 类组件 + session 快照订阅)
  • lib/ — 构建产物(host + client bundle)
  • scripts/build.sh — host 编译脚本

原理

  • 注册到 DSH 的 shell.overlay 框架浮层
  • 通过 ctx.sessions.currentProvideInfo 拿到当前会话 id
  • 再通过 ctx.sessions.binding(id).session.getSnapshot() 读取完整会话快照
  • snapshot.chat.order + snapshot.chat.nodes 里筛选 kind === 'user' | 'steering'
  • 点击跳转时用 [data-chat-anchor-key="..."] 找 DOM 节点;找不到就自动 loadOlder() 后重试

License

MIT