# dsh-chat-history
English | [中文](README.zh.md)
用于 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) Web GUI 的 ChatGPT 风格对话历史侧边栏。对话记录右边缘有一竖条横线指示器,每条用户消息对应一根横线;悬停弹出浮层列出所有用户消息,点击某行即滚动到该消息。活跃横线跟随滚动位置,浮层打开后暂停跟随(点击锁定)。
## 功能
- **横线导航**:对话记录右边缘每条用户消息一根横线,会话至少包含两条用户消息时始终可见。
- **悬停浮层**:列出全部用户消息(序号 + 单行预览),点击跳转。
- **滚动同步**:活跃横线指向滚动容器顶部边缘处或以下的第一条用户消息;跳转后高亮锁定。
- **点击锁定**:浮层打开期间自动同步暂停,关闭后恢复跟随。
- **按条跳转**:直接按下侧边栏跳到最近横线,横线之间的空隙也能导航。
- 数据完全来自会话聊天快照(`user`/`steering` 节点),样式只使用设计令牌。
## 依赖要求
- 需要 DeepSeek Harness 的 **web profile**(GUI)。侧边栏注册到 `conversation.session.header.actions` 槽位——这是已发布 `@deepseek-ai/dsh-client-ui-conversation` 长期提供的会话头部动作槽位,**任何已发布版本的 ui-conversation 都能挂载,不依赖任何上游新槽位**。侧边栏本身以 `position: fixed` 渲染在对话滚动容器上,不占用头部布局。
## 安装
在运行 GUI 的 profile(如 `~/.dsh/profiles/web`)中添加该 bundle 并安装:
```sh
# 在 profile 目录,从 npm registry 安装
pnpm add @ttmouse/dsh-chat-history
```
或作为 GitHub 源依赖:
```sh
pnpm add @ttmouse/dsh-chat-history@github:ttmouse/dsh-chat-history
```
或使用 dsh 插件通道(可用后):
```sh
dsh plugin --profile web add @ttmouse/dsh-chat-history
```
然后把 bundle 加入 `dsh.profile.bundles`(`dsh plugin add` 流程会自动完成):
```json
{
"dsh": {
"profile": {
"bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "@ttmouse/dsh-chat-history"]
}
}
}
```
重启 `dsh web` 并刷新浏览器。侧边栏出现在活跃对话的右边缘。
## 开发
```sh
pnpm install
pnpm build # tsc(lib/types + node half)+ tsdown(lib/client.js 浏览器 bundle)
pnpm test # vitest,jsdom
```
浏览器 bundle 是 `window.__ModuleLoader__.load` 握手产物,CSS Modules 以内联 `