Introduction¶
DeepSeek Harness (DSH) often faces navigation difficulties in long conversation scenarios: the default view is constrained by the client-side pagination window, making it hard to quickly locate earlier conversation turns. dsh-convmap is a Web plugin designed for this purpose. It addresses the pain points of indexing and jumping in long sessions by rendering tick marks along the left edge of the main chat area.
What Is It¶
This is a plugin that renders a “conversation map” on the left edge of the DSH main chat area, vertically centered. Each tick mark corresponds to a user query turn. It provides hover preview, click-to-jump, and scroll-highlight features, with performance optimizations for long sessions.
Core Features¶
- Full turn tick marks: Reads the complete session log directly, covers all turns, and is not limited by the client-side pagination window.
- Tick marks for agent-initiated turns as well: If there is any user message, a tick mark is generated; if no one sends a message in an entire turn, the first injected message (such as a notification) is used to generate a tick mark.
- Render first, complete later: Prioritizes already rendered turns, then merges the data after the host returns the full log; the tick marks are not empty during cold start of long sessions.
- Hover gradient expansion: When the mouse moves over the tick mark area, nearby tick marks expand according to a distance gradient, and a preview card floats out on the right side.
- Responsive with many ticks: Optimized for performance, supporting hundreds of tick marks. Hover rendering only modifies CSS variables for 7 tick marks, and the preview card content updates with a 120 ms throttle.
- Hover-stable and scrollable preview card: The preview card’s visibility is determined by its position; hovering shows the full content. The query title is fixed, and the reply body is scrollable.
- Click to jump: Click a tick mark to jump to the corresponding turn. If the target turn is not rendered, it is loaded with automatic pagination before jumping.
- Scroll highlighting: While scrolling the conversation, the tick mark for the currently visible turn is automatically highlighted.
- Keyboard accessible: Supports Tab focus; use ↑/↓/Home/End to move and Enter to jump.
- Non-intrusive: Does not intercept surrounding interactions; while displayed, the preview card only handles scroll events.
Install and Enable¶
The installation script automatically writes the plugin to ~/.dsh/profiles/web/package.json and registers it in the bundles.
curl -fsSL https://raw.githubusercontent.com/GeekRicardo/dsh-convmap/main/install.sh | bash
After installation, restart the DSH Web process:
pm2 restart dsh-web
Uninstall¶
Use the uninstall functionality provided by the installation script:
bash install.sh --uninstall
Prerequisites¶
- The DeepSeek Harness web profile has been initialized (the directory
~/.dsh/profiles/webexists). - Node.js >= 20 and pnpm are required.
How It Works¶
The plugin consists of two parts that work together: Host and Client.
Host responsibilities:
Registers the same-origin route GET /dsh-convmap/turns and uses sessionPersistence.readRaw to read the raw log text. Parses all turns line by line and reconstructs the key as 13:input-message<messageId> (corresponding to the DOM anchor). During extraction, truncates queries to 200 characters and replies to 800 characters (maximum).
Client responsibilities:
Mounts the tick mark component in the conversation.input.overlay slot. Merges already rendered turns with the host’s full turn list. Uses data-conversation-scroll and data-chat-anchor-key to locate the conversation scroll container and target row.
For old turns that are not rendered, loads pages incrementally via sessions.binding(sessionId).session.loadOlder() before jumping.
Applicable Scenarios¶
Suitable for developers who frequently consult historical context in long sessions, perform multi-turn debugging, or review long conversation content. The plugin runs with the permissions of the current DSH process; review the source code and license before installing.