Preface

The DeepSeek Harness (DSH) plugin ecosystem supports lightweight extensions to the client. In long conversation scenarios, quickly locating historical instructions and refilling previously sent content are common requirements. The dsh-message-jump plugin addresses these two pain points by providing a floating navigation rail and terminal-style keyboard history navigation in the conversation area.

This plugin is maintained by TiChuXiXi and licensed under the MIT license. It is a package that declares both dsh.bundle.patch (host layer) and dsh.client (browser layer), aiming to improve message browsing and input efficiency on the web without relying on private interfaces.

Feature Overview

Instruction Navigation Rail

A persistent floating navigation rail in Codex timeline style remains at the left or right edge of the conversation area:

  1. Scroll-linked positioning: Each sent user instruction corresponds to a tick mark. The dark tick mark represents the instruction currently at the top of the viewport and updates in real time as you scroll.
  2. Hover preview: Hovering the mouse over a tick mark produces a width-transition ripple effect and shows a preview of the instruction content beside it.
  3. Click to jump: Clicking a tick mark smoothly scrolls to the corresponding message (stopping 16px from the top) and flashes a highlight.
  4. Full history coverage: Reads the complete local session event log, covering all user instructions. Even for history sections not yet loaded in the chat view, tick marks are displayed in a “ghost state”. Clicking an unloaded tick mark automatically triggers “Load earlier” until that instruction enters the viewport.
  5. Position configurable: In Settings → General, switch “Instruction Navigation Rail Position” (left/right), and the choice is persisted to localStorage.

History Message Navigation

When the message input box is focused, use the keyboard ↑/↓ keys to quickly refill historical instructions:

  1. Terminal-style interaction: Press ↑ to go back and ↓ to go forward.
  2. Draft protection: The content in the input box before entering navigation is stashed. When exiting—by pressing Esc or by pressing ↓ after reaching the latest item—it is fully restored. Typing directly during navigation automatically exits navigation mode.
  3. Smart yielding: When the input box is busy, read-only, an input method is active, or a popup menu is open, the arrow keys are not hijacked, and the original interaction is unaffected.
  4. Status hint: During navigation, a hint bar above the input box displays History messages ↑↓ n/m · Esc to exit.

Installation

Install the plugin using the official command:

dsh plugin --profile web add dsh-message-jump

After installation, restart dsh web to take effect.

Usage

Instruction Navigation Rail

  1. Open any conversation; the navigation rail is displayed by default on the right edge of the conversation area.
  2. Scroll the chat and observe the dark tick mark indicating the current instruction.
  3. Hover over a tick mark to view the content preview, or click a tick mark to jump to it.
  4. In Settings, switch “Instruction Navigation Rail Position” to the left side.

History Message Navigation

  1. Focus the message input box.
  2. Press ↑ to refill the most recently sent content, then continue pressing ↑ or ↓ to browse history.
  3. Press Esc or, after reaching the latest item, continue pressing ↓ to restore the draft.
  4. Typing directly during navigation exits the mode and allows editing to begin.

How It Works

The plugin’s data and positioning do not rely on private interfaces; they reuse the host’s existing components and data sources:

  • Data source: List data comes from the session snapshot ConversationSnapshot.chat (the same source as useSession) and is subscribed through sessions.binding(id).session.
  • Complete history: Uses the package-private RPC msgjump.fullHistory to call ctx.sessionQuery.readSession(sessionId) to retrieve the complete local log.
  • Component mounting: The browser layer registers the floating navigation rail through shell.overlay, registers the position setting through settings.general.item, and registers the history navigation hint bar through conversation.input.dock.
  • Scrolling mechanism: Reuses the data-chat-anchor-key anchor mechanism of the DSH chat view and calculates the floating position using the bounding rect of the [data-conversation-scroll] container.

Customization

The plugin’s core logic is located in lib/client.js. Modify this file and restart dsh web to adjust styles and behavior:

  • Spacing and size: RAIL_PAD (edge padding), BAR_W (default tick bar width), BAR_MAX_W (maximum width), BAR_H (bar height), BAR_GAP (spacing between bars).
  • Visual effect: The decay radius for the hover “width ripple” (the denominator in 1 - d / 3 within barWidth).
  • Content filtering: In collectItems and collectHistory, the kind check can be relaxed to decide whether to include context injected messages.

Closing

dsh-message-jump provides DSH users with a concrete solution for managing long conversations through a Codex-style navigation rail and terminal-style keyboard navigation. If you want to view the source code or provide feedback, visit the GitHub repository.