DeepSeek Harness Plugin

vlln/dsh-navbar

Stars ★ 51 Downloads (30d) 620 Category UI Enhancements Added 2026-08-13 npm @vlln/dsh-navbar

Conversation node navigation bar for quick jumps between user messages.

Install

# from npm (prebuilt)

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

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

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

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 — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).

README

ARCHIVED (read-only) — The official DSH web shell shipped a built-in Turn navigation rail in the 0.1.2 series (npm @deepseek-ai/dsh ≥ 0.1.2-rc.1; upstream feat(ui-chat): full-session turn rail with load-and-jump, b3064cca): a TurnNavigator rail with hover previews, click-to-jump, reading-position tracking, and jump-loads for unloaded turns. The core capabilities of this plugin are now covered by the host, so this repository is archived. Historical implementation remains in docs/ and the git history.

An evenly spaced node strip along the right edge of the conversation area (one node per user message): the active pill follows your reading position, hovering shows a preview card (truncated at 6 lines), clicking smooth-scrolls with a brand-blue highlight ring, more than 30 nodes switch to a fixed 30-node window with count badges (↑N/N↓) at the ends showing how many are hidden, it stays invisible until hovered, and it auto-hides only when no user message is loaded — in that case it automatically loads earlier history until at least one user message appears (or history runs out). Implements the dsh-external/issues#144 spec. Form: an official bundle plugin (dsh.bundle + dshClient channel, browser-only, empty Node half), 0 patches.

Preview

navbar node navigation rail (real runtime screenshot: node strip on the right edge + active highlight)

Features

Feature Description
Node navigation rail Vertical node strip on the right edge of the conversation area, one dot node per user message
Follows reading position The active pill (22px brand-blue capsule) moves with your current reading position
Hover preview Hovering a node shows a message preview card (6-line truncation, matching the official HoverCard look)
Continuous hover The entire rail (including the gaps between nodes) responds to hover continuously: the preview switches to the nearest node and the corresponding pill elongates (gray) to indicate the click target — no dead zones
Scroll-wheel switching With the cursor over the rail, scrolling the wheel moves up/down one message (blocking conversation-area scrolling)
Click to jump The whole rail is clickable (including gaps, jumping to the nearest node) plus an enlarged pill hit area — no need to precisely aim at tiny dots
Fixed window + count badges More than 30 nodes show a fixed 30-node window (the active node stays centered, clamped at the ends); count badges (↑N / N↓) at the window ends show how many are hidden — the visible node count stays constant. Pinned golden discs always stay visible (the window expands to include them)
Load earlier history An ↑ button pinned at the top of the rail (visible only while the conversation has older history): click to load earlier messages — it forwards to the official load-older control, so your reading position is preserved. Hovering it instantly shows a hint card in the same style as the node previews (the official HoverCard look)
Auto-hide Not shown with no user message loaded (or on non-conversation pages). With zero user messages loaded, the rail automatically loads earlier history until at least one user message appears (or history is exhausted) — so the rail always has something to navigate
Message pin 📌 button on the assistant action bar (between copy and Good response); pinned turns render as a golden slim elliptical disc in the rail (always visible, the preview card carries a 📌 badge, clicking jumps straight to the pinned reply), persisted per session

Zero data-channel dependencies: driven only by official anchor attributes (data-time-hover-root, on user rows since 0806) — no polling, no routing, no tools.

Installation

Recommended: one-line install from git source (build artifacts are committed, so git source does not trigger a build):

dsh plugin --profile web add "github:vlln/dsh-navbar#main"   # one-line git-source install (build artifacts committed)
# or npm source: dsh plugin --profile web add @vlln/dsh-navbar@0.4.0

Or from a local directory (when you have the source): git clone, then cd dsh-navbar && dsh plugin --profile web add ..

Restart web after installing for it to take effect; you can disable/enable it in the Plugins panel on the Settings page.

Usage

Works out of the box — no commands, no tools. The node rail appears on the right edge of the conversation page (Chat view); hover for a preview, click to jump. Animations are disabled under prefers-reduced-motion.

Pin: hover an assistant message's action bar and click 📌 to pin that reply — the corresponding turn's navigation node becomes a golden slim elliptical disc (click to jump straight to that reply; the preview card shows a 📌 badge and the reply text). Pin state is saved per session in browser localStorage and survives refreshes; click again to unpin.

Load earlier history: when the open conversation still has older messages (its history window is not fully loaded), an ↑ button sits at the very top of the node rail. Click it to load the earlier messages — the rail then grows new nodes at the top. The button hides automatically once all history is loaded, and is disabled while a load is in flight. Hovering it instantly shows a hint card in the same style as the node previews (the official HoverCard look), and it reads "Loading…" while a load is in flight. The click is forwarded to the official load-older control, so your current reading position is preserved (no content jump).

Development

pnpm install
pnpm run build      # tsdown: client bundle (lib/client.js)
  • client: src/client/index.ts (self-rendered DOM + official anchor contract; the pin button uses the official conversation.chat.assistant-actions slot, with React provided by the client runtime; ctx services accessed must be declared in the plugin object's inject)
  • Node half: src/index.mjs (empty apply, the bundle mount carrier)

License

MIT License (an example plugin in the DSH ecosystem).

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →

Community comments

Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.