K
dsh-chat-nav
kezboardpj/dsh-chat-nav
Conversation query map for dsh web: a left rail with one bar per sent question, hover wave + preview, click-to-jump with older-page backfill, and tunable bar length/spacing.
설치
dsh plugin --profile web add github:kezboardpj/dsh-chat-navREADME
dsh-chat-nav
对话问题导航 — 为 dsh(DeepSeek Harness) 开发的 Web UI 客户端插件:聊天视图左侧一条导航栏,每根横条对应一条真实发送的用户问题,悬浮有波浪反馈与内容预览,点击平滑跳转到对应消息,长会话自动补齐历史。
dsh(DeepSeek Harness,GitHub)是一款"万物皆插件"的 DeepSeek 智能体框架。本插件是它的第三方插件,从 ZCode 桌面端的同款功能移植而来。
功能特性
- 问题导航栏:对话列左侧一条悬浮竖轨,每条真实已发送的用户问题一根横条(排队介入的消息也会收录);当前视口内的问题条自动高亮,并保持居中
- 悬停波浪:横条按与指针的距离伸缩(2.6 / 1.7 / 1.25 倍),150ms 缓动,跟随系统「减少动态效果」设置自动关闭动画
- 内容预览:悬停弹出预览卡,提问最多 2 行、回答最多 3 行;未开始回答 / 正在作答时显示占位文案
- 点击跳转:平滑滚动定位到对应消息;目标在更早页(未加载)时自动逐页补拉后再精确锚定,锚点挂载超时兜底
- 历史补齐:会话打开后后台逐页拉取全部更早历史(50 条/页),失败按 250ms / 1s 退避后终止;页面上滚到接近顶部时也会主动预取更早内容
- 可自定义:设置 → 通用设置 → 「横条长度 / 条目间距」,实时生效并持久化
安装
需要先安装并运行 dsh(Web UI profile)。
# 方式一:从 npm 安装
dsh plugin --profile web install dsh-chat-nav
# 方式二:本地目录
dsh plugin --profile web add ./dsh-chat-nav
安装后重启 dsh(客户端 bundle 在启动时加载)。
使用
打开任意会话,发送至少两条消息后,导航条出现在对话列左侧:
- 悬停横条查看该问题与回答的预览
- 点击横条跳转到对应消息
- 当前阅读位置的高亮自动跟随
定制外观:设置 → 通用设置 → 「对话问题导航」,可调整横条长度(8–48px)与条目间距(6–40px),修改即生效。
实现说明
纯客户端插件(浏览器半),宿主半为零依赖占位:
- 通过
shell.overlay插槽挂载到 dsh Web UI,定位跟随对话区域(侧边栏/对话分界线右侧) - 数据来自
ctx.sessions会话快照(chat.nodes),跳转/滚动基于稳定 DOM 属性([data-conversation-scroll]、[data-chat-anchor-key])与官方同款flowTop几何方案 - 无状态管理框架依赖:localStorage 持久化配置,SnapshotStore 订阅驱动更新
与 ZCode 原版对照
| 特性 | ZCode(原版) | 本插件 |
|---|---|---|
| 悬停波浪 | 距离 → scaleX 2.6/1.7/1.25/1 | 同参数移植 |
| 预览裁剪 | 220 字符 / 2 段 + 省略号 | 同规则 |
| 预览布局 | 提问 2 行 / 回答 3 行 | 同 |
| 跳转 | 直滚 → 补拉 → rAF 轮询 12 帧 | 同 |
| 补拉节奏 | 250ms → 1s → 终止 | 同 |
| 近顶预取 | max(64, 2×视口) | 同 |
| active 判定 | 视口相交取最近起始行 | 同几何 |
| 自定义 | 无(固定 10px/条) | 横条长度与间距可在设置调整 |