在 DeepSeek Harness (DSH) 中处理长对话时,传统的上下翻页方式难以快速定位历史节点。dsh-chat-history 插件通过在会话头部添加一个独立的“History”标签页,将当前会话的用户消息转化为可点击的目录,解决了长会话导航困难的问题。
核心功能¶
该插件实现以下功能:
- 消息目录化:将当前会话的用户消息提取并转换为可点击的目录列表。
- 点击跳转:点击目录项后,自动切换回 Chat 标签页,平滑滚动到目标消息位置。
- 噪声过滤:自动过滤工具调用、思考过程、命令等非用户消息,保持目录整洁。
- 自动分页:在标签页激活状态下,自动分页加载旧历史(每页 50 条消息),直到加载完整。
- 零槽位冲突:注册为
conversation.view会话标签页,与官方的 Trajectory 标签页并排显示,不占用details槽位,不影响官方工具调用详情面板。
安装与启用¶
使用官方插件安装命令将其添加到指定的 profile(例如 web):
dsh plugin --profile web add dsh-chat-history
安装完成后,需要重启 dsh web 进程以使插件生效。
典型用法¶
- 进入会话:在任意会话的头部标签栏中,新增了 History 标签页( alongside Chat 和 Trajectory)。
- 查看目录:点击 History 标签页,目录会按顺序列出所有用户消息。每条目显示序号和单行截断标题,鼠标悬停可查看完整文本。
- 加载历史:标签页头部会显示加载状态(“Loading earlier history…”),在加载过程中自动获取旧消息,加载完成后显示总条目数。
- 跳转定位:点击目录中的任意条目,界面会切换回 Chat 标签页,并平滑滚动到对应的用户消息位置,该消息会闪烁 1.5 秒以示高亮。
开发与维护¶
- 无构建步骤:这是一个纯客户端插件,无需配置 Webpack 或 Vite 等构建工具。
- 热重载支持:修改
lib/client.js后,无需重启,系统每 500ms 检测文件变更并自动热重载(约 1 秒生效)。 - 重启时机:以下操作需要重启
dsh web才能生效:- 添加新的插件包。
- 修改
package.json中的dsh.client声明。 - 切换插件的启用/禁用状态。
兼容性¶
插件会根据当前 DSH 版本自动适配数据源:
| DSH 版本 | 数据源 Hook | 视图切换方式 |
|---|---|---|
>= 0.1.5 |
useChat((s) => s.order) / useChat((s) => s.nodes) |
openView("chat") |
<= 0.1.0-rc.x |
useSession((s) => s.chat.order) / s.chat.nodes |
点击 Chat 标签按钮 |
插件通过检测 useChat 是否注入来自动选择对应的逻辑分支。Sessions、分页状态(hasMore / loadingOlder)以及消息节点的 kind === "user" 形状在两个版本中保持一致,因此目录逻辑可以共用。
生态背景¶
DeepSeek Harness 采用「一切皆插件」的架构理念。此插件托管在社区目录,与 DeepSeek 或幻方官方无从属关系。使用前请检查源码与许可证(MIT)。
- 目录页:https://www.skillhub.cn/plugins/Stylelinzzz/dsh-chat-history
- GitHub 仓库:https://github.com/Stylelinzzz/dsh-chat-history