Piano-key in-conversation navigation for the Web UI: one key per user message with hover ladder, message-preview tooltip, and active-message highlight; click to smooth-scroll.
Install
# from npm (prebuilt)
dsh plugin --profile web add @kelearns/dsh-navigation-bar
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:kelearns/dsh-navigation-bar
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time. Only install sources you trust, and pin a commit (github:owner/repo#sha).
README
A piano-key in-conversation navigation bar for the DeepSeek Harness Web GUI: one key anchors one user message of the current session, hovering shows a "user message + model reply" preview, and clicking smooth-scrolls to that message. Built on the official DSH dual-face plugin mechanism (host + browser half) — no DSH source changes.
Screenshots
Dark theme · hovered (full view + focused detail):

| Dark hover focus | Dark idle focus |
|---|---|
![]() |
![]() |
Light theme (hovered / idle full views):

| Light hover focus | Light idle focus |
|---|---|
![]() |
![]() |
Full views show the bar in its real position within a session; focused views show the piano-key details (key shapes, hover ladder, message preview tooltip).
Features
- In-conversation navigation: one key per user message (including steering messages sent while an agent is running), in chronological order; model replies share their turn's key and appear in the preview.
- Reference-accurate visuals: fixed 10px key pitch, 2px bars, 6px resting /
26px hovered length (≈4.3×), cluster vertically centered in the message
area; colors measured pixel-by-pixel from the reference images (light
#D2D3D3/#767779/#1A1C1F, dark#454545/#A3A3A3/#FFFFFF). - Hover ladder: the hovered key lengthens and recolors, the 3 adjacent keys step down (20 / 14 / 10px, ≈77% / 54% / 38%), the 4th neighbor returns to resting length, and edge keys clip naturally on one side.
- Hover tooltip: user message on one line (ellipsis) + the matching model
reply in at most 3 lines (width-model JS truncation +
-webkit-line-clampfallback; overflow ends with …). - Active highlight: while idle, the key of the message currently in view changes color only (length unchanged), following the scroll in real time.
- Click to jump; automatic light/dark theming (
data-ds-dark-theme+ prefers-color-scheme fallback).
Install
Installed into the web profile through the official DSH plugin mechanism:
# From npm (released)
dsh plugin --profile web add @kelearns/dsh-navigation-bar
# Or local development (link mode; edits to lib/client.js apply on page refresh)
dsh plugin --profile web add link:<this-directory>
Published on npm: npmjs.com/package/@kelearns/dsh-navigation-bar
Listed in awesome-dsh-plugin curated registry; also searchable as
navigation-barin the Plugin Market tab of dsh settings (dsh-market).
Note: the plugin roster is loaded at instance startup — after adding a new
plugin, restart the dsh web instance, then refresh the page.
Layout
| File | Purpose |
|---|---|
index.js |
host half (no-op cordis plugin) |
lib/client.js |
browser half (hand-written bundle, no build step; window.__ModuleLoader__.load) |
cordis.patch.yml |
bundle patch: inserts the plugin row into the web profile roster |
package.json |
dsh.bundle.patch + dsh.client (platform web) declarations |
test/ |
headless-browser CDP diagnostics + standalone offline test page |
Data sources (all official APIs):
ctx.sessions.binding(currentId).session→ConversationSnapshot(subscribed live viauseSyncExternalStore)- DOM anchors: scrollport
[data-conversation-scroll], message rows[data-chat-anchor-key]
Development / Testing
# Headless Edge + CDP audit: open a real session, check layout / colors / tooltip
node test/cdp-audit.mjs
# Reference-image pixel measurement (key pitch / ladder / palette)
node test/img-analysis.cjs # idle reference images
node test/img-strip.cjs # hover reference images (ladder lengths & colors)
License
MIT
Links
More in this category
zhu1090093659/dsh-web-ui#packages/dsh-web-ui-all★ 2314
Plugin and skin collection for the DSH Web UI: task board, Git graph, right-side panel, remote mobile UI, pet, live token stats, and a skin center.
ccch1mneyyy/dsh-TUI★ 1071
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
omdsh-dev/DSH-better-sidebar★ 945
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
omdsh-dev/dsh-at-file★ 175
Codex-style `@file` mentions: search workspace files in the composer and attach their contents to prompts.
huiliyi37/dsh-tianshu-tui★ 143
A terminal UI (TUI) for DeepSeek Harness.
Nagi-ovo/dsh-visualize★ 95
In-conversation generative UI: the model renders interactive HTML cards into the chat stream, with streaming preview and sandboxed rendering.



