dsh-message-navigator
已验证dsh-message-navigator · v0.1.0 · MIT · Web 界面
DSH Web GUI 插件:会话右侧悬浮消息导航条 —— 收起态 10 条短横杠,悬停展开为用户消息摘要,点击平滑滚动定位历史消息;固定 10 条窗口 + 跟随/锁定模式 + 增量更新。
安装
dsh plugin add dsh-message-navigator 用 dsh --profile default --dump-config 确认 layer 已生效 —— 参见安装指南。
源码
标签
作者
说明文档
dsh-message-navigator
DSH Web GUI 插件:会话右侧悬浮消息导航条。在对话页面右侧提供一条可折叠的导航条,用于快速定位并跳转到当前会话中用户发送过的历史消息。
功能
- 默认收起态:右侧显示固定 10 条白色短横杠,纵向排列,不遮挡正文
- 悬停展开态:横杠展开为对应用户消息的文字摘要(截断约 20 字),容器加宽并带毛玻璃效果
- 点击跳转:点击横杠 / 摘要后平滑滚动到该消息实际位置,并闪烁高亮 1.5s 帮助定位
- 固定窗口 + 滚动加载:导航条始终只渲染 10 条,滚轮 / 按钮在更久远与最新消息之间平移窗口
- 跟随 / 锁定模式:默认跟随最新消息;上翻后窗口锁定,新消息到达仅显示「有新消息 ↓」角标而不打断浏览
- 性能:只投影当前窗口内的 10 条摘要,随会话快照增量更新,长会话不卡顿
非目标
- 不支持编辑 / 删除消息
- 不支持跨会话统一导航
- 不导航 AI 回复消息(仅针对用户发送的消息)
安装
# 从 npm 安装到名为 web 的 profile(推荐)
dsh plugin --profile web add dsh-message-navigator@latest
# 本地开发 / 调试:link 到仓库目录(绝对路径)
dsh plugin --profile web add link:D:/Data/dsh-message-navigator
安装后重启 dsh web(或对应 profile 的启动),刷新页面即可在会话右侧看到导航条。
卸载
dsh plugin --profile web remove dsh-message-navigator
本地开发
npm install
npm run typecheck # tsc -b,类型检查
npm run build # tsc -b && tsdown,产出 lib/index.js + lib/client.js
npm run watch # tsdown --watch
构建产物:
lib/index.js—— host 半端(本插件为 no-op cordis 插件)lib/client.js—— browser 半端,由 shell 的window.__ModuleLoader__从/plugins/<id>/client.js加载lib/types/**/*.d.ts—— 类型声明
架构
本插件是 dsh 的 profile bundle(package.json 声明 "dsh": { "bundle": { "patch": "./cordis.patch.yml" } }):
cordis.patch.yml声明一行 host 插件实例(insert),host 半端为空实现dsh.client声明 browser 半端:platform: "web",inject声明依赖的 client 包加载顺序
browser 半端(src/client)在 shell.overlay(框架级悬浮层,list 插槽)中注册 message-navigator 条目:
- 通过
ctx.sessions.binding(currentId).session订阅当前会话的ConversationSnapshot extractUserMessages从snapshot.chat投影出user/steering两类用户消息及其文本摘要- 点击跳转通过 DOM 锚点
[data-chat-anchor-key="<node.key>"]定位并scrollIntoView
数据流:
ConversationSnapshot.chat.order(节点 key 顺序)
→ chat.nodes.get(key) → ChatConversationViewNode(kind / anchorSeq / data)
→ 过滤 kind ∈ {user, steering}
→ 摘要(content 中 text block 拼接,截断 20 字)
→ 固定 10 条窗口渲染
兼容性
- dsh
>=0.1.1-rc.1 - React
^18.2.0(peer dependency,由 shell 的模块表提供)
License
MIT