对话节点导航条:对话区右缘一列短横线节点对应每条用户消息,支持阅读位置跟踪、悬停预览卡片、点击跳转高亮、滑动窗口与自动隐藏。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:SherUnlocked-4869/dsh-plugin-msg-nav
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
简体中文 | English
dsh-plugin-msg-nav
DeepSeek Harness 对话节点导航条插件:在对话区右缘渲染一列短横线节点串(每条真实用户消息一个节点),跟随阅读位置;鼠标靠近节点串时,节点条「变形弹出」为单行消息预览面板(覆盖原位置,移开复原),点击任意预览平滑跳转 + 高亮横线,节点过多时可在悬停区域内用滚轮滑动浏览;Alt+↑ / Alt+↓ 可在相邻用户消息间直接跳动。host 侧会话投影让节点串进入会话即覆盖整段历史的全部用户消息——零翻页请求、无初始卡顿。

以 bundle 形式发布:dsh plugin 安装后自动接入 profile 层栈,无需手改任何配置文件。架构参考 dsh-chat-timeline 的 host 会话投影 + 客户端按需加载模式。
安装(DSH 官方命令)
# 直接从 GitHub 安装
dsh plugin --profile web add github:SherUnlocked-4869/dsh-plugin-msg-nav
dsh plugin 会转发给 pnpm 安装到 profile 目录,并自动把声明了 dsh.bundle 的包加入 dsh.profile.bundles 层栈。随后启动(已在运行则重启)部署即可:
dsh web # 或 dsh --profile <你的 profile>
更新到最新版本:
cd ~/.dsh/profiles/web && pnpm update dsh-plugin-msg-nav
卸载:
dsh plugin --profile web remove dsh-plugin-msg-nav
功能
| 功能 | 行为 |
|---|---|
| 节点导航条 | 对话区右缘纵向短横线串,每条真实用户消息一个节点(系统注入的 goal 自动延续等不计入),恒定 20px 间距 |
| 悬停弹出面板 | 鼠标进入节点串区域:节点条短横线淡出、左侧单行预览面板弹出(0.18s 放大动画,覆盖节点条原位置,行内短横线落在原节点条短横线的横坐标上,如节点条变形展开);移出后节点条恢复 |
| 面板排版 | 每条消息一行(左文字 + 右短横线),24px 行距、上下 8px 对称留白;悬停行时文字与短横线同步高亮并出现 8px 圆角底色;当前阅读位置整行(文字+短横线)以品牌蓝/白色高亮 |
| 列表滑动 | 最多显示 10 条;超过时鼠标悬停在节点串区域内滚轮上下滑动列表(页面不滚动),面板按比例同步滚动 |
| 移出回中 | 鼠标移出悬停区域后,列表平滑居中回当前阅读位置,恢复跟随 |
| 跟随阅读位置 | 激活节点(品牌蓝 / 深色下白色)随滚动侦测实时更新 |
| 点击跳转 | 平滑滚动到对应消息 + 全宽品牌蓝高亮横线(1.5s 淡出),流式输出干扰下亦有看门狗兜底落位,列表自动居中到目标节点 |
| 快捷键跳转 | Alt+↑ / Alt+↓ 在相邻用户消息间平滑跳转,与点击跳转同一链路(未入窗消息先按需加载再落位 + 高亮横线 + 列表回中);连按 / 按住可跨多条连续推进;焦点在已有草稿的输入框内时不触发,避免打断输入 |
| 全量历史即时入串 | host 侧会话投影(msgNavMessages)折叠整段日志,全量用户消息列表经历史尾页 + 推送帧即时送达——进入会话零翻页请求,节点串立刻覆盖全部用户消息,无初始卡顿;未挂载投影注册表的部署自动回退到后台逐页加载(每页 50 条、至多 120 页),加载中节点串末尾显示脉冲短横线 |
| 点击按需加载 | 点击尚未渲染进窗口的旧消息节点时,先按需拉取更早历史直至该消息入窗并渲染出行,再平滑跳转 + 高亮(按消息 id 与窗口行精确关联,不受节点 key 格式影响) |
| 自动隐藏 | <2 条用户消息、空白会话、非对话视图(如轨迹页)时不显示 |
| 渲染细节 | 节点位置按 devicePixelRatio 对齐设备像素(粗细一致);窗口调整 rAF 合帧,不拖慢界面;节点串与面板窗口化渲染(只创建可视窗口元素),滚动侦测 rAF 节流 + 行缓存增量维护,长会话下插件开销近零 |
工作原理
与 dsh-chat-timeline 相同的「投影快路径 + 按需翻页」模式:
- Host 投影:host 半注册
msgNavMessages会话投影单元,折叠整段日志中每条user/message事件(仅source.kind === "user"的真实用户消息与 steering,注入的上下文行排除——与聊天视图节点组装器的分类完全一致),产出{seq, time, text, id}全量列表;框架持续驱动,经历史尾页与session/projection推送帧送达。 - 客户端即时渲染:节点串用
useProjection("msgNavMessages")直接渲染全量列表;已加载窗口内的消息按持久 id 关联到 DOM 行,用于阅读位置跟随与跳转。 - 点击按需翻页:点击尚未入窗的旧节点时,按消息 id 循环
loadOlder()(每页 50 条、至多 120 页)直到目标入窗并渲染出行,再平滑跳转 + 高亮。 - 兜底:未挂载投影注册表的部署,客户端自动回退到后台
loadOlder全量循环(投影一旦送达立即停止)。会话切换即换代取消旧循环,插件卸载时同步停止。
参考项目
新增的「全量历史即时入串」与「点击按需加载」功能参考了 jjxjjjjiik-bot/dsh-chat-timeline(MIT):
- host 会话投影(
msgNavMessages)沿用其dshChatTimeline投影单元的折叠思路:在 host 侧把整段日志折叠成全量用户消息列表(仅source.kind === "user"的真实用户消息与 steering,注入上下文排除),经历史尾页与推送帧即时送达客户端,避免客户端逐页拉取历史造成的初始卡顿; - 客户端按需
loadOlder(点击旧节点时逐页拉取直到目标入窗)沿用其jumpToMessage的加载-等待-落位模式;本插件改为按持久消息 id 与窗口行关联,不依赖其硬编码的节点 key 格式; - 投影缺席部署的后台逐页兜底加载同样沿用其客户端
loadOlder循环(每页 50 条、至多 120 页)。
包结构
lib/client.js—— 浏览器端 bundle(window.__ModuleLoader__注册格式,随 DSH 模块系统加载/卸载);节点串 UI + 投影即时渲染 + 兜底后台加载 + 点击按需加载lib/index.js—— host 侧会话投影单元msgNavMessages(全量用户消息折叠;注册表缺席时自动不激活)lib/types/—— TypeScript 类型声明cordis.patch.yml—— bundle 补丁层:insert一行ui-msg-nav客户端行package.json——dsh.client(浏览器清单)+dsh.bundle(bundle 清单)双声明assets/screenshot.png—— 效果图
常见问题
dsh plugin add 报 ERR_PNPM_TARBALL_INTEGRITY?
profile 里某个以 refs/heads/... 分支地址安装的第三方插件在上游更新后,新 tarball 校验和与锁文件不符,pnpm 的供应链保护会拒绝整个安装。确认上游更新可信后,把该依赖固定到具体 commit 即可一劳永逸(本插件即以此方式接入):
"dependencies": {
"<pkg>": "https://codeload.github.com/<owner>/<repo>/tar.gz/<commit-sha>"
}
然后 pnpm install 刷新锁文件,再重新执行 dsh plugin add。
节点串没出现?
- 确认部署已重启、页面已刷新(bundle 变更需重启部署;刷新页面通常即可拿到新 bundle)
- 当前会话需有 ≥2 条真实用户消息,且处于「对话」视图
开发
git clone https://github.com/SherUnlocked-4869/dsh-plugin-msg-nav.git
# 本地联调:安装进一个测试 profile
dsh plugin --profile <profile> add file:<abs-path>
dsh --profile <profile> --port 3090
License
MIT
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-task-board★ 8121
侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
zhu1090093659/dsh-web#packages/dsh-web-all★ 8121
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。
omdsh-dev/DSH-better-sidebar★ 3868
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。
ccch1mneyyy/dsh-TUI★ 3734
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 3369
右下角常驻的小鲸鱼挂件:余额、今日已用与每轮对话消耗(含峰谷价),余额预警与今日预算的泡泡内容都可编辑;泡泡点击序列模块化自定义,支持并列加权 A/B、随机台词与随机图片;内置 30+ 厂商模板(OpenAI / OpenRouter / Kimi / 硅基流动 / 方舟 / 智谱 / MiniMax 等),按模型查余额与订阅额度;另有任务结束音效、导入音频、自定义角色与资源管理。数据全在本机,无遥测。
Devin-AXIS/deepseek-design#deepseek-idesign★ 1665
可视化设计工作室,支持网站、App 原型、海报、信息卡、报告和杂志的模板创建、元素编辑、选区级 AI 草稿衔接与导出。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。