Introduction

When running long conversations in the DSH Web client, there is a common annoyance: wanting to return to a specific instruction sent earlier requires scrolling up screen by screen with the mouse wheel. The more messages there are, the harder it is to locate them. dsh-nav-pointer solves this navigation problem. It adds a message pointer rail to the left side of the chat area, with a short horizontal bar marker for each user message. Clicking it smoothly scrolls to the corresponding position, and hovering over it previews the message content. Below is an introduction to the plugin’s positioning, features, installation, and configuration.

What is it

dsh-nav-pointer is a DSH (DeepSeek Harness) Web client plugin maintained by kongdexu, under the MIT license, current version 0.4.0.

It mounts a frame-wide overlay (the list slot) via the shell.overlay slot without replacing any built-in UI. The positioning of the scroll container and user message rows is based on the stable attributes [data-conversation-scroll] and [data-chat-flow-kind="user"] defined by DSH public conventions. The rail position is recalculated by reading getBoundingClientRect() frame-by-frame in a requestAnimationFrame loop, and changes to the message list are monitored using MutationObserver.

Core Features

  • Message Pointer Rail: Short horizontal bars vertically arranged on the left side of the chat area, corresponding to each user message.
  • Click to Jump: Clicking a bar smoothly scrolls to the corresponding user message.
  • Current Position Highlighting: The bar for the message currently in the viewport is automatically highlighted in blue.
  • Hover Preview Bubble: Hovering over a bar pops up a message preview with a frosted glass background, arrow pointing, and rounded corners.
  • Drag to Scroll Quickly: Holding down the bar and dragging up or down browses the conversation quickly like a scrollbar; a light tap (without dragging) still performs an accurate jump.
  • Keyboard Shortcuts: Alt+↑ / Alt+↓ jumps up/down between user messages, Alt+Shift+↑ / Alt+Shift+↓ jumps to the first/last message.
  • Real-time Position Following: The rail position follows frame-by-frame when the sidebar toggles, the window resizes, or the page scrolls.
  • Light/Dark Mode Adaptation: Colors use DSH theme tokens and automatically adapt to the dark/light theme.

Installation and Enablement

Search for dsh-nav-pointer in the dshmarket marketplace and install with one click. Like other plugins, it takes effect by refreshing the page in most cases.

It should be noted that dshmarket is an independent community directory site with no official affiliation with DeepSeek / Fenxiang.

Command Line Installation

Install using the official DSH plugin management command:

dsh plugin --profile web add dsh-nav-pointer

This command installs to ~/.dsh/profiles/web and, because this package declares dsh.bundle.patch, automatically appends dsh-nav-pointer to dsh.profile.bundles. Restart dsh web afterwards for it to take effect.

If pnpm ≥ 11 reports ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION, this is a 24-hour safety hold policy triggered by a newly published package. You can bypass it once by adding a parameter:

dsh plugin --profile web add dsh-nav-pointer --config.minimumReleaseAge=0

Not Seeing the Rail After Restart

First confirm two points:

  1. dsh.profile.bundles contains dsh-nav-pointer
  2. The current session has user messages — the plugin does not render when there are no user messages.

Clear the chat and send a new message to check again.

Configuration

All preferences are adjusted in the Settings → Message Pointer page, and changes take effect immediately and persist:

Config Item Default Description
Scroll Duration 260ms Animation duration for click/keyboard jumps (fixed duration, range 60–2000ms)
Show Pointer Rail On Disables rendering of the rail when turned off
Hover Preview Bubble On Message preview when hovering over the marker
Keyboard Jump On Alt+↑/↓ to jump between user messages

Two additional behaviors need to be known:

  1. Marker Compression: When there are many user messages and the natural height exceeds the available viewport, the marker spacing is automatically compressed to just fill the viewport. This is fixed behavior and cannot be disabled.
  2. Animation Interruption: Scrolling with the wheel, touch gestures, or dragging the rail will immediately interrupt an in-progress jump animation.

The plugin is also compatible with the legacy usage window.__DSH_NAV_POINTER_SCROLL_MS__, which can override the scroll duration and has higher priority than the settings panel, but must be set before the plugin loads. It is recommended to use the settings panel directly.

Development Mode and Verification

To modify code locally or track the development version, you can use local linking:

git clone https://github.com/kongdexu/dsh-nav-pointer
cd ~/.dsh/profiles/web
dsh plugin --profile web add link:/path/to/dsh-nav-pointer

After modifying the code, run a complete verification (type check → build → behavior test → contract loading) with a single command:

npm run check

It executes in sequence:

  1. npm run typecheck: tsc --noEmit type checking src/
  2. npm run build: esbuild outputs lib/
  3. npm test: vitest + jsdom, covering rail compression geometry, highlight derivation, preview clipping, row collection, and style injection
  4. npm run test:smoke: Load build artifacts without a browser and assert that plugin exports and slot registration match the contract.

Use Cases and Notes

Suitable users: People who run multi-round long conversations in the DSH Web client daily and need to frequently roll back and locate instructions they have sent. The longer the conversation, the more time this rail saves in searching.

Environment requirements: engines requires Node >= 20; peerDependencies are @deepseek-ai/dsh-settings ^0.1.2-alpha.2 and @deepseek-ai/schemastery ^3.18.2.

Security reminder: The plugin runs with the permissions of the current dsh process. It is recommended to review the source code and license before installing. This project is MIT licensed, the source code is public on GitHub, and the installation command pulls from the official plugin management channel only.

Summary

dsh-nav-pointer focuses on a specific task: adding a message pointer rail to the DSH Web chat interface, turning “scrolling to find” into “clicking to go directly”. Combined with the scroll duration, toggles, and keyboard shortcuts in the settings panel, it can be adjusted to your habits.

  • GitHub: https://github.com/kongdexu/dsh-nav-pointer
  • Community Directory Page: https://www.skillhub.cn/plugins/kongdexu/dsh-nav-pointer