When using DeepSeek Harness (DSH) to handle long conversations, users often need to frequently locate their own questions among historical messages. Relying on the native scrollbar to inspect messages one by one is inefficient. The dsh-conversation-nav plugin provides semantic navigation buttons, allowing developers or users to jump quickly by “user message” units and automatically handle historical pagination.

Plugin Overview

This is a Web UI plugin maintained by uigdwunm. It provides a set of circular navigation buttons for the DSH Web conversation area: Back to Top, Previous User Message, Next User Message, and Back to Bottom.

The button bar floats above the input box, along the right edge of the conversation content, and replaces the product’s built-in single “Back to Bottom” button. It does not rely on hash positioning; instead, it locates DOM elements using attributes (such as data-chat-anchor-key), jumps only to messages of type user and steering, and skips other process nodes such as tool calls and context injection.

Core Features

  1. Semantic Navigation

    • Back to Top: Scrolls to the current top and continues loading earlier history through pagination until the true top is reached.
    • Previous / Next: Jumps to the previous or next user message. If the target is outside the currently loaded window, pagination is triggered automatically.
    • Back to Bottom: Jumps directly to the latest position.
  2. Smart Interaction

    • Target anchor: After jumping, the target message remains at approximately 1/12 of the viewport height from the top.
    • Automatic show/hide: Hidden by default. It appears when the average upward scroll speed exceeds 200 px/s; it hides automatically after 3 seconds of inactivity, and clicking any button resets the countdown.
    • Position layout: Right-aligned, 16px from the input box, and positioned synchronously before rendering to avoid flickering.
  3. State and Compatibility

    • In-memory state: Uses only in-memory page state, with no persistent storage (no localStorage, IndexedDB, etc.).
    • Style self-repair: If a style node is lost, the plugin checks the DOM every 100ms and rebuilds the style node.
    • Cleanup mechanism: When the plugin is unloaded, it automatically cleans up all styles, timers, and scroll listeners.

Installation and Enablement

To install this plugin, you need to use DSH’s Web configuration profile.

1、Run the following command to install:

dsh plugin --profile web add dsh-conversation-jump

2、After installation is complete, restart dsh web for it to take effect.

Development and Extension

Local development:

npm install
npm run build

The built file is located at lib/client.js. Because node_modules under the profile directory uses hard links, rebuilding can break the links. Therefore, for local development, you need to run npm run build first, then run the installation command once more:

dsh plugin --profile web add file:/absolute/path/dsh-conversation-nav

Other installation methods:
* Install from source on GitHub:

    dsh plugin --profile web add github:uigdwunm/dsh-conversation-nav
  • Install from a prebuilt Release package:
    dsh plugin --profile web add https://github.com/uigdwunm/dsh-conversation-nav/releases/download/v0.1.5/dsh-conversation-jump-0.1.5.tgz

Technical Details

  • Positioning method: Uses attributes such as [data-conversation-scroll] and [data-chat-anchor-key] for positioning, and does not rely on URL hashes.
  • Pagination mechanism: The plugin locates the “Load More” button inside [data-chat-flow] and simulates a click until the number of anchors increases.
  • Component structure:
    • index.mjs: The host portion (Web client), an empty apply function that does not inject any host services.
    • src/client.ts: Browser-side logic, handling navigation, pagination, positioning, and visibility policy.

Notes

  • Applicability: Web UI plugin only.
  • Pagination limitation: If the host interface never renders a “Load More” button, the plugin will be unable to perform pagination.
  • License: MIT.