When handling long conversations in DeepSeek Harness (DSH), traditional up/down paging makes it difficult to quickly locate historical nodes. The dsh-chat-history plugin solves the navigation problem in long sessions by adding a standalone “History” tab to the session header. It turns user messages in the current session into a clickable table of contents.
Core Features¶
The plugin provides the following capabilities:
- Message TOC generation: Extracts user messages from the current session and converts them into a clickable table of contents list.
- Click-to-jump: After clicking a TOC entry, automatically switches back to the Chat tab and smoothly scrolls to the target message position.
- Noise filtering: Automatically filters out non-user messages such as tool calls, thinking process, and commands, keeping the TOC clean.
- Automatic pagination: When the tab is active, automatically loads older history in pages (50 messages per page) until all history is loaded.
- Zero slot conflicts: Registers as a
conversation.viewsession tab, displays side by side with the official Trajectory tab, does not occupy thedetailsslot, and does not affect the official tool call detail panel.
Installation and Enablement¶
Add it to a specified profile (for example, web) using the official plugin installation command:
dsh plugin --profile web add dsh-chat-history
After installation, restart the dsh web process so the plugin takes effect.
Typical Usage¶
- Enter the session: In the session header tab bar, a new History tab appears alongside Chat and Trajectory.
- View the TOC: Click the History tab. The TOC lists all user messages in order. Each entry shows a number and a single-line truncated title; hover over an entry to view the full text.
- Load history: The tab header displays a loading status (“Loading earlier history…”). While loading, it automatically fetches older messages, and after loading completes it displays the total number of entries.
- Jump to position: Click any TOC entry, and the interface switches back to the Chat tab, smoothly scrolls to the corresponding user message, and the message flashes for 1.5 seconds to highlight it.
Development and Maintenance¶
- No build step: This is a pure client-side plugin and requires no Webpack, Vite, or other build tool configuration.
- Hot reload support: After modifying
lib/client.js, no restart is required. The system checks for file changes every 500 ms and automatically hot-reloads them (takes effect in about 1 second). - When to restart: The following operations require restarting
dsh webto take effect:- Adding a new plugin package.
- Modifying the
dsh.clientdeclaration inpackage.json. - Toggling a plugin’s enabled/disabled state.
Compatibility¶
The plugin automatically adapts to the data source based on the current DSH version:
| DSH version | Data source hook | View switching method |
|---|---|---|
>= 0.1.5 |
useChat((s) => s.order) / useChat((s) => s.nodes) |
openView("chat") |
<= 0.1.0-rc.x |
useSession((s) => s.chat.order) / s.chat.nodes |
Click the Chat tab button |
The plugin automatically selects the corresponding logic branch by detecting whether useChat is injected. Sessions, pagination state (hasMore / loadingOlder), and the message node shape kind === "user" remain consistent in both versions, so the TOC logic can be shared.
Ecosystem Background¶
DeepSeek Harness follows an “everything is a plugin” architectural philosophy. This plugin is hosted in the community catalog and has no official affiliation with DeepSeek or High-Flyer. Before using it, check the source code and license (MIT).
- Catalog page: https://www.skillhub.cn/plugins/Stylelinzzz/dsh-chat-history
- GitHub repository: https://github.com/Stylelinzzz/dsh-chat-history