sean-bike/dsh-chat-navigator ↗★ 0
dsh-chat-navigator
dsh plugin: right-edge turn navigator progress bar + collapse whole turns / individual assistant messages in the web chat
AI Analysis
核心用途是优化 DSH 网页端对话的导航与阅读体验。适合对话轮次较多、需要快速跳转、折叠消息或查看分叉会话的用户。支持通过 DSH 插件命令行安装。
Install
This plugin has no verified bundle, or compatibility checks failed. Read the repository notes first. Read the full README ↗
README
Read the full README ↗dsh-chat-navigator
DeepSeek Harness (dsh) web plugin — 右侧轮次导航条 + 对话折叠。
功能
-
右侧锚点簇(轮次导航)
- 贴会话列右缘、以会话列高度约 0.6(可调) 为锚点(簇中心,自动限制在列内);
- 滑动窗口:窗口长度在设置中可调(3–12 挡,默认 6);每次仅显示窗口内的轮次;在簇上滚轮即平滑滑动窗口(每次 1 轮,transform + CSS transition,先慢后快 ease-in 曲线);当前阅读轮离开窗口时窗口自动跟随滑入;视口四周预留光晕余量,当前轮阴影在悬停放大时不会被矩形视口截断;
- 悬停放大:悬停的圆点
scale(1.55)平滑放大,同时弹出操作卡片(渲染在视口之外不被裁剪):该轮首条用户提问摘要(≤80 字)+「折叠本轮 / 展开本轮」+「在此分叉」; - 统一主色调:全部圆点使用自定义主色调(分支树面板可改 + localStorage 持久化);无分支 = 基础强度挡淡色,有分支 = 按分支数渐变增强(更醒目)+ 描边 + 光晕(6 挡可调);当前阅读轮带高亮光晕;
- 分叉标记:圆点右下角按分支数量显示横线(1–4 条细线,5+ 一条粗线);
- 点击圆点 = 平滑跳转到该轮开头;已折叠轮的圆点变暗空心,点击 = 展开并跳转;
- 空会话 / 窗口加载中 / 错误态 / 内容不足以滚动时自动隐藏。
-
折叠
- 整轮折叠:入口在右侧圆点簇的悬停操作卡片(每个轮都有圆点,故每轮都有折叠入口);折叠后该轮全部行隐藏;
- 折叠守卫:不允许折叠全部轮——折叠后若所有轮都已折叠,自动展开会话顺序中的下一轮;被折叠的是最后一轮则展开上一轮;仅一轮的会话不提供折叠按钮;
- 单条助手消息折叠:每条已最终化的助手消息行内「折叠此消息」按钮(正文图标行,非正文末尾);折叠后该行隐藏;
- 已折叠读条:输入区下方的常驻读条列出所有已折叠项(「已折叠 N 项:展开第 3 轮(5 条)…」),支持逐项展开与「全部展开」;
- 有折叠项时圆点簇不因滚动高度不足而隐藏(全折叠时簇仍保留,作为展开入口之一);
- 折叠状态仅内存(按会话),刷新页面即恢复展开;插件停用自动恢复全部被隐藏的行。
-
分叉(fork)与家族树(V2)
- 圆点分叉:悬停卡片「在此分叉」(两步确认)→ 从该轮收尾处
sessions.fork→ 自动切到子会话;分叉轮圆点右下角显示短横线标记; - 分支子会话列表:悬停分叉轮,卡片列出子会话(点击打开);
- 家族树面板:会话头部「🌳 分支树」按钮打开无遮罩浮层,显示当前会话的根→子孙树(纯 client 血缘数据);当前打开的会话行差异化高亮(主色淡底 + 左侧色条 + 标题加粗主色 + 「● 正在查看」徽标,跟随自定义主色调);节点支持点击切换、面板内分叉(尾部,运行中禁用)、归档(移到兄弟末尾 + 删除线)、恢复、物理删除(内置端点,两步确认);悬停节点在面板左侧显示会话摘要悬浮列(每轮用户消息摘要 + 工具/错误/分支标记,滚轮滑窗,点击跳转该轮,异步加载并缓存);默认只展开当前路径,ESC/关闭按钮退出;
- 分叉标记覆盖本插件创建 + 官方 fork 的分叉(官方 fork 通过本插件 host 端点
/sigs读取父子会话事件签名、公共前缀对比推断分叉边界,缓存一次)。
- 圆点分叉:悬停卡片「在此分叉」(两步确认)→ 从该轮收尾处
实现要点
- 双端插件:host 半提供 HTTP 端点(
lib/index.js):/delete(物理删除,移植自 dsh-session-manager,MIT)、/unarchive(恢复归档)、/summary(会话轮次摘要)、/sigs(事件签名表,供官方 fork 分叉边界推断);client 半注册四个加性 Slot:conversation.session.header.utilities→ 圆点簇(跳转 + 悬停卡片折叠/分叉)+ 分支树按钮/面板 + 会话摘要悬浮列;conversation.chat.assistant-actions→ 单条助手消息折叠;conversation.composer.dock→ 已折叠读条(逐项 / 全部展开入口)。
- 双窗口设置:导航窗口 / 摘要窗口长度独立可调(3–12 挡,默认 6,localStorage);
- 分支视觉偏好:主色调(取色器)+ 基础强度 / 分支最大强度 / 光晕大小(各 6 挡,localStorage,分支树面板调整);
- 注意:修改
lib/index.js(host 半)后需重启 dsh web 才生效;纯 client 改动走 HMR 即时生效。 - 数据来自 session 标准 kit 的
useSession:chat.order(节点顺序)+chat.nodes.get(key)(节点 kind/seq/location/data)。 - 滚动与跳转复用官方机制:
[data-conversation-scroll]滚动容器、[data-chat-anchor-key]节点行、flowTop相对定位、直接改scrollTop(锚点簇本身 fixed 固定,不随滚动移动)。 - 颜色全部使用
--dsw-alias-*主题 token,深浅色自动适配。 - 若官方 DOM 属性在版本升级后变更,进度条自动隐藏、折叠按钮失效,不崩溃。
安装
本机开发(link 到仓库目录)
# 1. 在 web profile 的 cordis.patch.yml 追加行:
# - insert:
# - id: dsh-chat-navigator
# name: 'dsh-chat-navigator'
# 2. 安装依赖(link 到本仓库目录)
dsh plugin --profile web add "link:D:/prj_dsh_plugin"
# 3. 重启 dsh web(新增插件行需重启加载)+ 刷新页面
分发给其他用户(git 仓库)
# 1. 安装依赖(从 git 拉取,按 tag 固定版本;GitHub 写法见注释)
dsh plugin --profile web add "git+https://github.com/sean-bike/dsh-chat-navigator.git#v0.1.0"
# GitHub 也可简写:dsh plugin --profile web add "github:sean-bike/dsh-chat-navigator#v0.1.0"
# 2. 在 web profile 的 cordis.patch.yml 追加行:
# - insert:
# - id: dsh-chat-navigator
# name: 'dsh-chat-navigator'
# 3. 重启 dsh web + 刷新页面
- 版本要求:dsh
0.1.0-rc.6(按此版本验证;依赖conversation.session.header.utilities/conversation.chat.assistant-actions/conversation.composer.dock座位与[data-conversation-scroll]等 DOM 属性,官方属性变更时插件优雅降级不崩溃)。 - 升级:发布新 tag 后,接收者执行
dsh plugin --profile web add "git+#"更新依赖并重启即可(纯 client 插件,正文改动亦可走 HMR,但换 tag 需 pnpm 更新)。
已知限制
- 进度条仅覆盖已加载的历史窗口(
hasMore之前的内容不在条上)。 - 会话级节点(compaction 摘要等)不生成轮标记。
- 用户消息 / 工具调用行不做单条折叠(官方无逐行加性座位,避免替换官方渲染器)。