Skip to main content

dsh-navbar

50Stars2Forks1Issues0Watchers

Adds a node navigation bar to the right edge of the DSH chat page. Hover to preview messages, click to navigate. Supports scrolling to switch, loading earlier history, and filtering messages by conversation.

Evidence5/5methodologySourceInstallMaintenanceDSH versionSecurity scan
Machine-auditedInstall commandRepo verifieddsh-plugin topicLicenseREADMEAI wiki
Language
TypeScript
License
MIT
Branch
main
dshdsh-pluginpluginui

Install

cmdweb profile
$ dsh plugin --profile web add @vlln/dsh-navbar

Run the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial

Install via your agent

Install the DeepSeek Harness plugin vlln/dsh-navbar for me: review the repository at https://github.com/vlln/dsh-navbar first, then run the install command and verify the plugin loads successfully.

Paste this instruction to the DSH Web GUI assistant — it will install and verify for you.

One-sentence Positioning

Adds a node navigation bar to the right edge of the DSH chat page: each user message corresponds to a dot, hover to preview the message, click or scroll the mouse wheel to quickly jump to the corresponding message, and supports pinning an assistant reply as "Featured" for easy revisit.

Core Capabilities

  • Render a vertical node chain on the right edge of the chat area, with each user message corresponding to a dot; the active dot (22px brand blue capsule) moves automatically with the current reading position
  • Hovering over a node immediately displays a message preview card, showing the first 6 lines of the corresponding message bubble text (following the official HoverCard visual, the entire navigation bar with gaps responds continuously)
  • Clicking a node, clicking any position on the navigation bar, or scrolling the mouse wheel on the navigation bar (preventing chat area scrolling) will smoothly scroll to the corresponding message
  • When there are more than 11 nodes, automatically switch to a sliding window (active ±5); smaller dots at both ends indicate there are more; currently selected or featured nodes are always forced to be visible
  • The top ↑ button appears when the session has unloaded earlier history: click to forward to the official "Load More" control, automatically maintaining the current reading position; the button automatically hides after all messages are loaded
  • The assistant message action bar adds a 📌 button (located between copy and Good response), click to pin that reply as featured; the corresponding node becomes a golden thin oval disc, the state is stored in the browser localStorage by session, click to jump directly to the featured reply

Technical Implementation

  • Language: TypeScript (client bundle produced as CJS by tsdown, loaded in browser via window.__ModuleLoader__)
  • Key Dependencies: @deepseek-ai/cordis (peerDependency), @deepseek-ai/dsh-client-ui-primitives, react (only used by PinAction button component)
  • Architecture Pattern: Official bundle plugin form (dsh.bundle + dshClient channel). Node half (src/index.mjs) is empty apply, only serving as bundle mount carrier; all behavior is on browser side src/client/index.ts (self-rendering DOM + official anchor contract). Zero data channel dependency, read-only official anchor properties (data-time-hover-root, data-chat-flow, data-turn-tail, data-pending-steering) drive, no requests, no tool registration, no route changes
  • Entry Files: src/client/index.ts (browser side), src/index.mjs (Node half empty apply)

Applicable Scenarios

When the conversation is very long and it's too slow to flip back and forth to find a specific user message, use the right-edge node bar to locate at a glance and jump directly; when you want to mark a key reply for later revisit, use 📌 to pin it as a featured node; when the history window hasn't finished loading, use the top ↑ button to load while positioning, no need to scroll back to the top.

Prerequisites and Compatibility

DependencyMinimum VersionDescription
DSH>= 0.1.0-rc.5Declared via package.json#engines.dsh; depends on official 0806+ data-time-hover-root anchor attribute added to user rows
Node.js>= 22.19.0Only required at build time (tsdown packaging script), runtime loads lib/client.js in browser
PlatformCross-platformWorks as a DSH Web-side browser UI plugin, no OS restrictions; not supported on DSH desktop (Node half is empty)
Native ModulesNoneNo native dependencies introduced
React18.xPinAction button component on client side injected by host React

Installation

dsh plugin --profile web add github:vlln/dsh-navbar

Configuration

This plugin requires no additional configuration. No command-line arguments, no cordis.yml configuration, no settings panel switches needed; automatically takes effect after installation and restarting the web profile.

FAQ

Q: Do I need to manually enable it after installation?

A: No. The plugin automatically takes effect on the chat page after being loaded by the web profile; just restart the web profile after installation. You can disable or re-enable it in the "Plugins" panel on the settings page.

Q: On which pages will the node bar be displayed?

A: Only displayed on Chat view (also compatible with mounted focused chat view dsh-focus-chat) chat pages; automatically hidden on settings page and other pages, as well as when there are fewer than 2 user messages.

Q: Will featured messages sync across devices?

A: No. Featured status is stored in browser localStorage by session (key name dsh-navbar:pins:<sessionId>), persists after refresh, but does not sync across devices or browsers.

Q: What happens when there are more than 11 nodes?

A: Automatically switches to a sliding window: only displays 11 nodes near the current active one (±5), smaller dots at both ends indicate there are more; currently selected or featured nodes are always forced to be visible in the window, won't be hidden due to window sliding.

Q: When does the top ↑ load earlier history button appear?

A: Only appears when the current session has unloaded earlier messages (determined by the existence of the official "Load More" control), button automatically hides after all messages are loaded; during loading, the button is disabled and shows "Loading...".

Q: Will uninstalling the plugin clear featured data?

A: No. Data is stored in browser localStorage, uninstalling the plugin or restarting DSH won't automatically clean it up; to clean up, delete keys starting with dsh-navbar:pins:* in the browser developer tools.

Q: Why does the position sometimes jump after jumping to a message?

A: The plugin uses the official post-0811 "reader input ledger" for direct one-step positioning. Baseline versions before 0811 (0808/0810) use wheel event as a compatibility fallback, which may cause slight jitter with official streaming rendering.

Ease of Use

Beginner — plug and play, no commands, no tools, no configuration items; the only optional interactions are hovering/clicking nodes, or clicking 📌 to pin a message.

Known Issues and Limitations

  • Only supports DSH Web side, Node half is empty (src/index.mjs only export default function apply() {}), does not provide any host-side capabilities
  • Depends on official data-time-hover-root row attribute anchor; if official DOM structure changes, adaptation is needed (README mentions this attribute was added to user rows starting from official version 0806)
  • Jump adaptation uses official follow's reader input determination 0811 ledger mechanism; older versions (0808/0810) retain wheel dispatch fallback
  • Node bar position is tightly attached to right edge of chat flow column + 12px, clamped within viewport; when sidebar collapse animation or window width changes cause chat flow column position to change dramatically, occasional one-frame position jitter may occur (already handled with ResizeObserver + rAF throttle merging)
  • "Load More History" button forwards to official ChatView's loadOlderAnchored control; if official button structure or position changes, this plugin's positioning logic needs corresponding adaptation

Read the usage guide →

Install steps, key points, FAQ and compatibility for this plugin — auto-derived from indexed fields.

Listing badge

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/vlln/dsh-navbar)

Paste this markdown into your GitHub README to link back to this listing. The badge only states the listing — not a security endorsement.

← Back to plugin directory