Introduction¶
The DeepSeek Harness (DSH) plugin ecosystem allows core functionality to be extended. When debugging or interacting with agents, developers often need to modify the historical context at a specific point in a conversation rather than start over. dsh-conversation-tree focuses on providing ChatGPT-style, message-level branching controls, making session management more granular through inline editing, regeneration, and tree browsing.
Overview¶
This is a DSH Web plugin maintained by Unintendedz under the MIT license. It provides DSH with immutable conversation branching, inline branch switching, and full-tree browsing capabilities.
Core Features¶
- Pending message handling: While a reply is running, a native copy button appears next to accepted user messages. Next to this button, you can click “Edit pending message” or “Retract message”. Editing preserves attachments and updates the queued input after saving.
- Regeneration: Creates a sub-session before the selected reply and replays all user messages starting from that turn in their original order (including subsequent guiding instructions and attachments). Runtime context is excluded.
- Prompt editing: Turns the original user message bubble into a compact inline editor, prefilled with the text and the model selector. Saving preserves non-text attachments, replaces only the first user message, leaves subsequent guiding messages unchanged, and continues in a new sub-session.
- Reply editing: Turns the original assistant message into an inline editor. Saving copies the conversation up to the selected reply and replaces the final reply in a sub-session without invoking the model.
- Inline switching: Any user message or assistant reply on a branch displays a counter such as
‹ 2 / 5 ›. - Message tree: Shared history appears only once, while edited prompts, regenerated replies, or edited replies branch at the exact message where they diverged. Clicking any message path opens its conversation.
- Logical conversations: Branches created by the plugin collapse into a single line in the sidebar. Switching a plugin branch changes the version opened for that line, whereas DSH’s native “Fork Session” creates an independent sidebar session.
- Live continuation: Sending follow-up messages from any branch immediately updates the current chat; completing a regular turn does not require refreshing the page.
Installation and Activation¶
The plugin requires DSH version 0.1.5-rc.1.
dsh plugin --profile web add github:Unintendedz/dsh-conversation-tree#v0.8.0
After installation, restart the DSH Web service.
Usage¶
In a completed conversation, editing operations appear below messages. Selecting an operation replaces that exact message with a prefilled inline editor and model selector. The regeneration operation remains below assistant replies. Messages with multiple versions gain an inline branch counter after native branch actions are created. The Tree tab can be used to browse the full message tree.
Notes¶
- Version compatibility: Version
0.8.0supports the V3 session format and native persistence handles in DSH0.1.5-rc.1. When using DSH0.1.2-rc.1, keep the plugin version at0.6.0. - Older branches: Branches created in v0.4.3 or earlier lack source marks. After upgrading, these older branches appear as separate sidebar sessions; newly created branches collapse normally.
- Local drafts: Unsaved drafts are stored only in the current editor and are lost if the page is refreshed.
- Cold navigation: Cold navigation opens and closes read handles but does not activate the session.
- Error handling: Unknown or malformed external events are rejected. Hosts without a service interface report model selection errors.
Summary¶
By providing message-level branching, the plugin helps developers debug and iterate DeepSeek Harness sessions more flexibly. More details can be found in the GitHub repository.