# 用户消息导航条 · Message Minimap
中文 · English
> **在 DeepSeek Harness Web GUI 会话聊天窗的左边缘显示一条迷你导航条:每一条你发送的消息都是刻度,悬停看摘要,点击即跳转,拖动可快速扫读长会话。** [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) --- ## 1. 它解决了什么问题 长会话里想回看"我之前是怎么说的"时,只能一路滚轮硬翻。AI 的回复往往又长又密,自己发过的消息被埋在中间很难找。 本插件在聊天窗**左边缘**加一条细导航条(类似 VS Code 的 minimap): ``` 聊天滚动窗 (overflow-y: auto,长会话分页加载) │ 每条用户消息 = 一个刻度(含未加载的历史,来自会话日志) │ 视口内的消息刻度 = 加粗高亮 │ ▼ 悬停刻度 → 预览卡片(第几条 / 共几条 + 消息摘要 + 时间行) ▼ 点击刻度 → 平滑滚动到该消息(未加载的先自动向上翻页) ▼ 点击/拖动轨道 → 按比例跳转 ``` **只读**:客户端只读取浏览器中已渲染的会话 DOM(聊天节点带有稳定的 `data-chat-flow-kind` / `data-chat-flow-key` 锚点),滚动的是既有的聊天滚动容器;宿主半部只新增一个**只读路由** `GET /api/message-minimap-messages`,从会话日志(`$DSH_HOME/sessions`)提取全量用户消息的**摘要**(每条最多 140 字符 + 时间戳),用于覆盖"加载更多"还没渲染的历史刻度。不修改、不删除任何文件。 ## 2. 功能特性 - ✅ 聊天窗左侧一条**紧凑居中**的导航条(不铺满全高),不干扰布局。 - ✅ **每条用户消息一个刻度**,在刻度列上均匀分布(上旧下新),不随消息长短散开。 - ✅ **长会话分页也不怕**:刻度覆盖**全部**用户消息(含"加载更多"未渲染的历史,数据来自会话日志);点击未加载的刻度会**自动向上翻页**,加载到后平滑跳转(按消息 id 精确对齐,中间页即使不含用户消息也不会中断)。 - ✅ **跳转精确**:刻度与消息按日志中的消息 id 双向关联(DOM 锚点 `data-chat-flow-key` 内嵌该 id),不再依赖"DOM 是全长列表尾部"的位置假设——API 时序、插队/分岔消息、加载页不含用户消息都不会导致跳偏。 - ✅ **当前视口内的消息刻度自动加粗高亮**,随滚动实时更新。 - ✅ **鼠标扫过刻度列时鱼眼放大**:指针下的刻度变得最长,邻近刻度按距离渐次微长(余弦衰减 + CSS 过渡),一眼定位。 - ✅ **悬停刻度**弹出预览卡片:`我的消息 · 3 / 12` + 消息文本摘要(最多 140 字符、7 行)+ 独立时间行。 - ✅ **点击刻度**平滑滚动到该消息(停靠在视口上方约 18% 处)。 - ✅ **点击/按住拖动轨道背景**按比例跳转,像滚动条一样快速扫读。 - ✅ 流式输出、加载历史、切换会话、窗口缩放时自动跟随(MutationObserver + scroll/resize + 轮询兜底)。 - ✅ 内容未溢出、无用户消息、或在新会话引导页时自动隐藏,不干扰布局。 - ✅ 中英双语界面文案,跟随界面语言。 - ✅ 键盘可达:刻度是原生 `