dsh-usage-record: Add a question navigation rail to the DSH Web chat area

前言

用 DSH Web 聊长会话时有个常见麻烦:想回看前面某次提问,只能靠滚动条一点点找。聊天区做了虚拟化渲染,翻过一段后更早的内容还没加载出来,滚回去还得等;左侧会话列表里一堆「新会话」,单看标题也分不清哪个是哪个。

dsh-usage-record 针对的就是这两个问题:它在对话区左侧加一条竖向导航轨,每条横线对应一次提问,点击即跳转;同时给会话列表自动补上基于提问内容的标题。下面介绍它的功能、安装方式和注意事项。

这是什么

dsh-usage-record 是一个 DSH 客户端插件(仅支持 web 平台),由 kkishapppy 维护,许可证为 MIT。一句话定位:DSH Web 对话区左侧的提问导航轨——每条横线等于一次提问,点击即跳转到对应位置,支持鱼眼放大、滚动跟随和后台全量预加载。

数据全部来自服务端接口 /plugins/dsh-usage-record/questions,从会话日志提取,不受聊天虚拟化窗口的限制,所以轨道上能看到完整历史,而不只是当前已渲染的那一段。

核心功能

提问导航轨与点击跳转

轨道显示在对话左侧,每条横线代表一次提问,悬停会弹出 tooltip 显示提问内容。点击横线后,聊天区平滑滚动到该提问;如果目标位置还没被渲染(属于未加载的历史),插件会先自动加载再跳转。

鱼眼效果与滚动跟随

鼠标在轨道上移动时,横线按与指针的距离放大(σ=10),边缘留白防止裁剪。反向也成立:聊天区滚动时,当前视口中心对应的提问会在轨道上高亮,即 scroll-spy,轨道自动跟随滚动位置。

后台预加载

只要轨道可见,插件就会自动批量加载全部历史提问。这里有一个客户端补丁:history RPC 的批量数被放大到 3000(官方默认 50),对应客户端源码里的 HISTORY_BATCH 常量,可以按需调整。配合这个补丁,长会话也能做到点击秒跳。

会话自动标题

插件包装了 sessionPersistence.list(),给会话列表每行补上 title。规则如下:

  1. 取该会话最后一次真实提问做摘要,长度不超过 30 字;
  2. 最后一条太短(少于 8 字,比如「好的」「1」)时,自动与更早一条合并;
  3. 对话进行中标题保持稳定,显示上次固化的结果,不随每句话跳动;会话闲置达到 30 分钟后才生成或更新标题并落盘,时长可通过 titleIdleMinutes 配置。

整个过程是纯规则加内存缓存加单定时器,不调 LLM、不联网。手动命名的优先级最高:在 dataDir/titles.json 里写的名字会覆盖自动标题;会话数据本身自带 title 时也不做改动。

安装与启用

从 GitHub Release 安装:

dsh plugin --profile web add https://github.com/kkishapppy/dsh-usage-record/releases/download/v0.1.0/dsh-usage-record-0.1.0.tgz

也可以用本地 tgz 文件安装:

dsh plugin --profile web add ./dsh-usage-record-0.1.0.tgz

配置是可选的,写在 profiles/<profile>/cordis.patch.yml

- id: usage-record
  config:
    dataDir: 'E:\DeepSeekHarness\data\usage-record'   # 默认 <cwd>/data/usage-record

典型用法

手动命名会话

想让某个会话固定显示自己起的名字,编辑 titles.json(默认路径 E:\DeepSeekHarness\data\usage-record\titles.json),格式如下:

{ "session-xxxx…": "我给的名字" }

键是会话 ID,值是标题。手动命名的优先级最高,自动标题不会覆盖它。

本地开发构建

改代码后需要重新构建:

npm i
npx -y tsdown@0.22.2 --config ./tsdown.config.ts

注意生效方式:服务端改动需要重启 DSH;client 改动硬刷新页面即可生效。

适用场景与注意

适合两类人:一是经常在 DSH Web 里跑长会话、需要反复回看和跳转历史提问的开发者;二是会话列表积累了很多条、想一眼认出每条会话内容的用户。

使用前有几点需要知道:

  1. 插件依赖 DSH Web 客户端内部 DOM 结构([data-chat-flow][data-chat-anchor-key]、滚动容器等),DSH 版本升级后可能失效,这是社区客户端插件的共性;
  2. 轨道只在会话视图渲染,且需要会话里存在历史提问;
  3. history RPC 批量被放大到 3000,如果介意这个改动,可以在客户端源码 HISTORY_BATCH 常量处调整;
  4. 插件以当前 dsh 进程权限运行,安装前建议检查源码与许可证(本项目为 MIT,README 与 package.json 均有标注)。

结尾

dsh-usage-record 用一条导航轨解决了长会话回看的问题,顺手把会话标题也补齐了,实现上是纯规则、不联网,成本可控。如果你也在 DSH Web 里管理长对话,值得装上试一试。

  • 插件目录页:https://www.skillhub.cn/plugins/kkishapppy/dsh-usage-record
  • GitHub 仓库:https://github.com/kkishapppy/dsh-usage-record

需要说明的是,插件目录是社区维护的独立站点,与 DeepSeek、幻方无官方从属关系。DSH 的理念是「一切皆插件」,这类社区插件正是这个生态的日常组成部分。

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

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

Xiaoye