跳到主要内容

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 bundlepackage.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 条目:

  1. 通过 ctx.sessions.binding(currentId).session 订阅当前会话的 ConversationSnapshot
  2. extractUserMessagessnapshot.chat 投影出 user / steering 两类用户消息及其文本摘要
  3. 点击跳转通过 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