@lcthe/dsh-timeline-rail:为 DeepSeek Harness 长会话加一条消息时间轴

前言

用 DeepSeek Harness(DSH)跑长任务时,一个会话很快会积累几十条用户消息。想回看某次指令的原文、核对当初给的约束,只能在消息流里一屏一屏滚动,会话越长成本越高。

@lcthe/dsh-timeline-rail 把这件事变成一次点击:沿对话左边缘为每条用户消息画一条细刻度,组成时间轴;悬浮刻度可预览消息,点击刻度直接跳转。本文介绍它的功能、实现和接入方式。

这是什么

@lcthe/dsh-timeline-rail 是 DSH 网页会话的消息时间轴导航条,作者 lcthe,当前版本 0.2.12,MIT 许可。它在对话左边缘、composer 卡片上方渲染一条 1px 竖轨,为每条 durable 用户消息绘制一条等间距水平刻度,固定 12px 间距,刻度居中于竖轴。

DSH 的理念是「一切皆插件」,客户端 UI 同样通过槽位扩展。这个包注册单个入口到 conversation.input.dock 槽位,属于纯展示型客户端插件,不定义新服务。

Desktop 与 Web 均可使用。DSH 桌面应用是 Electron 外壳,内嵌同一套浏览器客户端,所以面向 web 的插件在两端表现一致;只有 headless/TUI profile 没有 composer 槽位,不会渲染任何内容。

核心功能

  • 等间距刻度:1px 竖轨上,每条用户消息一条水平刻度,固定 12px 间距。
  • 长历史独立滚动:历史很长时,轨道内容在轨内自行滚动,而不是压缩刻度间距;滚动轨道不会带动对话区滚动。
  • 完整历史加载:会话打开后,通过 loadOlder() 自动串行加载更早的历史页,直到没有更多页,每页到达即添加对应刻度。
  • 点击跳转:将所选的第 N 条用户消息对齐到可见消息区顶部。
  • 悬浮预览:宽卡片显示加粗、限 2 行的用户消息,以及限 3 行的助手回复;纯图片/附件消息显示带标签的占位。
  • 主题感知:颜色取自 --dsw-* token,自动跟随亮/暗主题,无需额外配置。
  • 不挡交互:除刻度本身外 pointer-eventsnone,不阻挡消息区或 Session Log 的点击与滚动。

实现方式

DSH 的网页 GUI 是一个 Cordis 组合,本包是运行在其上的客户端插件,做三件事:

1、向 conversation.input.dock 槽位(composer 卡片上方的附加带)注册单个入口。

2、通过槽位的 useSession 读取实时 ConversationSnapshot,把每个 durable 的 kind: 'user' 节点映射为一条刻度。

3、测量 [data-conversation-scroll][data-composer-seat] 等 scrollport,把轨道铺在左边缘;定位计算复用产品自身的稳定 data 属性([data-conversation-scroll][data-chat-flow][data-chat-anchor-key][data-composer-seat])。

它不定义新服务,也不改动消息区本身的逻辑。

安装与启用

前置条件:一个带浏览器客户端的 DSH 部署——桌面应用(内嵌 Web UI)或 Web 版均可。插件是纯展示组件,只在存在消息输入区(composer)的位置渲染。

1、安装包:

pnpm add @lcthe/dsh-timeline-rail

2、在 cordis.yml 中,与 bundle 行相同的 include 层级添加插件行:

- insert:
    - id: dsh-timeline-rail
      name: '@lcthe/dsh-timeline-rail'

经过上面的步骤,打开会话后即可在对话左边缘看到时间轨。完整接线细节见仓库中的 INSTALL.cordis.yml.md

典型用法:会话内动态加载

如果只想快速试用,可以不走 npm 安装:在会话里直接让 agent 用动态 Cordis 工具(cordis_define + cordis_run)加载本包。这条路线适合快速评估;npm 包是稳定、可分享的形式。

适用场景与注意事项

适合的用户:主要通过 DSH 桌面版或 Web 版工作、会话历史偏长、需要频繁回溯定位消息的人。headless/TUI 环境没有 composer 槽位,这个插件不会显示任何内容。

使用前有几点需要知道:

1、刻度是等间距的(每条用户消息一个刻度、固定 12px 间距),并不代表各消息的真实滚动位置。按真实位置渲染的 minimap 模式是作者列出的后续工作。

2、预览有截断:用户消息限 2 行、助手回复限 3 行,轨道内没有展开手段;点击刻度可以跳到完整消息。

3、插件针对 0.0.1-rc.1 发布线的 Harness 客户端槽位契约。若后续 RC 更改 conversation.input.dock 契约,本包可能需要升级。peerDependencies 要求如下:

版本范围
@deepseek-ai/cordis >=4.0.1-rc.1
@deepseek-ai/dsh-client-locale ^0.0.1-rc.1
@deepseek-ai/dsh-client-runtime ^0.0.1-rc.1
@deepseek-ai/dsh-client-ui-conversation ^0.0.1-rc.1
@deepseek-ai/dsh-client-ui-slots ^0.0.1-rc.1
react / react-dom ^18.2.0

4、安全提醒:插件以当前 dsh 进程的权限运行,安装前建议检查源码与许可证。本包源码公开在 GitHub,采用 MIT 许可。

小结

@lcthe/dsh-timeline-rail 解决的问题很具体:在长会话里定位某条用户消息。它不碰消息流本身,只在左边缘加一条可悬浮、可点击的时间轴,改动范围小。如果你经常在 DSH 里跑长会话,值得接入试试。

  • GitHub 仓库:https://github.com/lcthe/dsh-timeline-rail
  • 社区插件目录页:https://www.skillhub.cn/plugins/lcthe/dsh-timeline-rail

社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

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

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

小夜