
Seryta/dsh-node-nav
41Last commit Aug 15, 2026
dsh-node-nav DSH plugin
dsh-node-nav installs a column of evenly spaced nodes in the chat area, each representing a user message. Hovering or focusing a node shows a preview of the message text, clicking scrolls smoothly to that message and highlights it briefly. The active node follows the current reading position as you scroll, and the plugin also provides an input history feature (↑/↓) for recalling recent messages.
How to install the dsh-node-nav DSH plugin
dsh plugin --profile web add github:Seryta/dsh-node-navCopying does not run this command. Review the repository and version before installing the dsh-node-nav DSH plugin.
dsh-node-nav DSH plugin data source
dsh-node-nav DSH plugin snapshot date: Aug 16, 2026
discovered
What the dsh-node-nav DSH plugin can do
- Displays a vertical node rail with up to 15 user message nodes, sliding window without scrollbar and fading edges.
- Full history node rail: extracts all user messages from session logs (including paginated unloaded history) via host endpoint, covering entire history without expanding the page.
- Bottom node: a fixed square node at the bottom for jumping to the latest message.
- Hover/focus preview: shows server-side full text (truncated at 300 characters) and timestamp.
- Click jump: scrollIntoView center + brand blue highlight ring for 1.2 seconds.
- Active pill follows scrolling: real-time indication of the topmost user message in viewport.
- Input history: when input is empty, ↑ recalls recent user input, ↑ continues to earlier, ↓ goes newer; pointer resets after edit/send.
- Details panel avoidance: node rail auto-shifts left when right details panel is open.
- Dark mode support: follows body[data-ds-dark-theme].
- Reduced-motion respect: disables animations under system reduced-motion preference.
- Auto-hide: hides on non-chat pages.
Where the dsh-node-nav DSH plugin fits
- Quickly navigate to earlier user messages in a long conversation without endless scrolling.
- Preview the content of a user message without opening the full context.
- Jump to the latest message in a busy chat with a single click via the bottom node.
- Recall previously sent user input using keyboard arrows when composing a new message.
- Use the plugin as an accessibility aid: keyboard focus triggers preview and jump just like hover.
Who the dsh-node-nav DSH plugin is for
- DSH Web GUI users who manage long or multi-turn conversations.
- Users who frequently need to reference earlier user messages or re-enter past inputs.
- Power users who prefer keyboard navigation and want to avoid mouse scrolling.
dsh-node-nav DSH plugin limitations
- Input history and jump rely on DSH client contracts: [data-chat-anchor-key], [data-composer-card], and provide channels hooks.input/props.inputActions; updates to these contracts in major DSH versions may require adaptation.
- Input history only covers the currently open (live) session; host endpoint only queries attached session, so historical sessions without composer focus are not applicable.
- Clicking on an unloaded node depends on the presence of the 'Load earlier' button (up to 30 batches); in harness versions where the button is removed, clicking an unloaded node will show a 'target message could not be located' hint.
dsh-node-nav DSH plugin: from the repository README
Quoted from the Seryta/dsh-node-nav README, the upstream source of the dsh-node-nav DSH plugin. Copyright remains with the original authors.
DSH(DeepSeek Harness)Web GUI 的客户端插件:在聊天区右侧显示一列等距节点串,每条用户消息对应一个节点。hover/focus 时显示消息文本预览,点击平滑滚动到对应消息并短暂高亮,active 药丸跟随阅读位置滑动。 <img src="docs/node-nav-overview.png" width="720" alt="节点串总览(浅色模式)"> ## 功能 | 功能 | 说明 | |---|---| | 节点串 | 右缘纵向节点串,每条用户消息一个圆点;最多同时显示 15 个,窗口随阅读位置滑动(无滚动条),两端渐隐提示更多 | | 全量历史节点 | host 半部从会话日志提取全部用户消息(含分页未加载的历史),导航在点击前就覆盖全部历史,页面保持原生分页不展开 | | 底部节点 | rail 最底端固定一个方形「跳到底部(最新消息)」节点,形状与提示区别于消息节点 | | hover/focus 预览 | 显示服务端全文(300 字符截断)与时间,键盘焦点同样触发 | | 点击跳转 | scrollIntoView 居中 + 品牌蓝高亮环 1.2 秒 | | active 跟随 | 滚动时药丸实时标出视口内最顶部的用户消息 | | 输入历史 | 输入框为空时按 ↑ 回填最近一条用户输入,连续 ↑ 翻更早、↓ 翻回;编辑/发送后指针重置 | | details 避让 | 右侧详情面板打开时节点串自动左移 | | 深色模式 | 跟随 `body[data-ds-dark-theme]` | | reduced-motion | 系统减少动效偏好下禁用动画 | | 自动隐藏 | 非对话页时不显示 | ## 截图 **节点串总览(浅色模式)**:每个圆点对应一条用户消息,底部方形节点一键跳到底部,药丸标出当前阅读位置。 <img src="docs/node-nav-overview.png" width="720" alt="节点串总览(浅色模式)"> **hover/focus 预览**:鼠标悬停(或键盘聚焦)节点时显示该条用户消息的服务端全文与时间。 <img src="docs/node-nav-hover.png" width="720" alt="hover 消息预览"> **active 药丸跟随**:滚动聊天区时,药丸实时移动到视口内最顶部的用户消息节点。 <img src="docs/node-nav-active.png" width="720" alt="active 药丸跟随滚动"> **深色模式**:跟随 `body[data-ds-dark-theme]` 自动切换配色。 <img src="docs/node-nav-dark.png" width="720" alt="深
Read the full READMERepository license: MIT
dsh-node-nav DSH plugin questions
How do I install dsh-node-nav?
Run the command `dsh plugin --profile web add github:Seryta/dsh-node-nav` in your terminal. After that, restart `dsh web` and refresh the browser page. The plugin is pure JavaScript with zero build steps, so git installation will not trigger any build scripts. Alternatively, you can clone the repo and add it from a local directory using `dsh plugin --profile web add ./dsh-node-nav`.
Why do some nodes appear as dotted and semi-transparent?
Dotted and semi-transparent nodes represent user messages that are not yet loaded into the DOM. This happens when the conversation has many messages and the page has not loaded all of them (due to pagination or lazy loading). Clicking such a node will trigger the 'Load earlier' button automatically (up to 30 batches) until the message row appears in the DOM, then scroll to it. If the button is not present in your harness version, a hint will be shown indicating that the target message could not be located.
Does the input history feature work across different conversations?
No, the input history only covers the currently open (live) session. The plugin's host endpoint queries the attached session's log, so it only works when you have a conversation focused. Historical sessions that are not open do not have composer focus, and the input history is not applicable. When you switch to a different conversation, the history pointer resets to the most recent message of that new conversation.
How does the active pill decide which node to highlight?
The active pill follows the scroll position of the chat area. It tracks the topmost user message that is currently visible in the viewport. As you scroll, the pill moves to the node corresponding to that message. The pill uses the `[data-chat-anchor-key]` attribute on message rows to identify the correct node. This works in real-time and updates even when you scroll programmatically (e.g., by clicking a node).
Can I disable the plugin without uninstalling it?
Yes, dsh-node-nav uses the same React + `shell.overlay` slot pattern as our other plugins, so you can disable it via the DSH plugin management interface. You can also remove it entirely with `dsh plugin --profile web remove dsh-node-nav`. The plugin will auto-hide on non-chat pages, so you only see it when you are in a conversation.