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¶
Via dshmarket (Recommended)¶
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:
dsh.profile.bundlescontainsdsh-nav-pointer- 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:
- 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.
- 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:
npm run typecheck:tsc --noEmittype checkingsrc/npm run build: esbuild outputslib/npm test: vitest + jsdom, covering rail compression geometry, highlight derivation, preview clipping, row collection, and style injectionnpm 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