In long dsh WebUI sessions, quickly locating user messages is a common pain point. dsh Conversation Timeline Plugin renders a vertical timeline along the right edge of the conversation message column, providing navigation capabilities through ticks and interactions. This plugin is maintained by hemo94931, follows the MIT License, and is designed to solve the problem of manually scrolling through long conversations to find specific messages.
Core Features¶
The plugin provides the following capabilities in the right sidebar of the WebUI:
- Vertical timeline rendering: Each user message (including the first-round message and steering follow-ups) generates a short horizontal tick at the right edge.
- Hover summary and index: When the mouse hovers, the message index (e.g.,
3 / 12) and summary content are displayed. - Click to jump: Clicking a tick or button makes the scroll container automatically locate the corresponding message, place it at the top of the viewport, and briefly highlight it.
- Navigation buttons: Provides ▲ / ▼ buttons for navigating up or down one item at a time.
- Current tick highlight: The tick corresponding to the current scroll position is automatically highlighted.
- Theme adaptation: Colors use dsh theme tokens and support automatic light/dark mode adaptation.
Installation and Activation¶
Before installation, please ensure that pnpm is installed on your system.
Persistent Installation (Recommended)¶
Run the following command to add the plugin to the WebUI plugin roster. The cordis.patch.yml file in the package will automatically load the plugin the next time dsh web starts, without manual activation.
dsh plugin --profile web add @hemo94931/dsh-timeline
For local development, you can run the following command in the repository root directory to perform a linked installation:
dsh plugin --profile web add .
Uninstallation¶
dsh plugin --profile web remove @hemo94931/dsh-timeline
Notes and Troubleshooting¶
- Dynamic plugin behavior: Dynamically loaded plugins do not persist across process restarts. If permanent effect is required, please use the persistent installation method.
- Timeline does not appear:
- Ensure the current session contains at least 2 user messages.
- Ensure the details panel is closed (the details panel obscures the timeline rendering area).
- When a session is first opened or refreshed, message rows are mounted incrementally, so only one user message may temporarily be present near the viewport. Try scrolling up to load more messages, and the timeline will appear automatically.
- Startup error
styles is not defined: This is usually caused by an outdated persistent bundle (lib/client.js). Runnode build.jsto rebuild. - Issues after a product upgrade: The product DOM structure may have changed. Please prioritize verifying the contract list in
src/dom.js(such asdata-conversation-scroll,data-chat-flow-kind, etc.) and rebuild.
Technical Details¶
- Code structure: The plugin adopts a design separating the pure logic model (
src/model.js) from the DOM contract adapter (src/dom.js).src/shell.jsis responsible for the controller and React view rendering. - Development commands:
- Run unit tests:
node test/model.test.js - Rebuild:
node build.js - The build artifacts are
client.js(dynamic plugin) andlib/client.js(persistent bundle).
- Run unit tests:
Ecosystem Context¶
The DSH philosophy is “everything is a plugin.” The community catalog is an independent site, with no official affiliation with DeepSeek / High-Flyer. This document is written solely based on verified facts.