Introduction¶
DeepSeek Harness (DSH) is a toolchain for agent development. When handling long-turn conversations, the model generates a large number of tool calls and inference processes, which can easily make the UI content overwhelming and hard to browse. Inspired by the design of Grok Build, this plugin wraps the Think (inference) and tool calls from each conversation turn in a limited-height scrollable window, segments content by staged text responses, and avoids the page content from exploding while preserving visibility of all intermediate processes.
Core Features¶
The plugin aggregates and displays the intermediate processes (Think and tool calls) of each conversation turn, while textual responses remain displayed natively.
- Limited-height window: Think and tool calls are merged into a single slide, with a default height of 10 lines and internal scrolling support.
- Segmentation logic: segments are delimited by staged text responses. A segment containing Think + bash between two textual responses is treated as a single slide, preventing all content between two input prompts from being squeezed into one slide.
- Content synchronization: native Think lines are hidden from the message stream and share the same content as the display inside the slide.
- Native response preservation: textual responses are displayed fully natively, remain fully visible, are not wrapped in a slide window, and do not include “expand all/collapse” buttons.
- Configurable control: supports adjusting the window height and default collapsed state in Settings.
Installation¶
Install the plugin using the official command:
dsh plugin --profile web add github:heiheiha798/dsh-plugin-response-window
After installation, restart dsh web or wait for profile HMR to take effect. The uninstall command is:
dsh plugin --profile web remove dsh-plugin-response-window
Configuration¶
The plugin registers default configuration in cordis.patch.yml, which can be adjusted via the configuration file or the Web UI:
Configuration Options¶
| Key | Default | Description |
|---|---|---|
lines |
10 |
Window height (lines). 0 means unlimited height (i.e., disable the window). |
collapsed |
false |
Whether each turn’s slide is collapsed into a one-line bar by default. |
showReadOnly |
true |
Whether to list read/grep/web_search and other read-only calls inside the slide. |
minCollapseRows |
3 |
Effective only when collapsed: true; turns with fewer rows than this value are not collapsed. |
Adjusting the Settings Page¶
In the Web UI under Settings → General, the plugin registers a “Response Window Size (Lines)” setting:
* Supports using − / numeric input / + to adjust lines (range 0–200).
* Changes take effect immediately and are persisted to the dsh-plugin-response-window namespace.
Technical Implementation¶
The implementation focuses on zero intrusion into the host React structure and safety.
- Rendering approach: implemented using keyed replacement for
conversation.chat.node(key: 'tool-call'), instead of the legacy priority shadow. This matches the dsh 0.1.5-rc keyed Chat Node contract. - Data source: the grouping logic is entirely based on the conversation model, consuming turn/location data through the
useChatselector consistent with the right-side user message index (turn rail), without relying on DOM measurement. - DOM marking: model-derived overlay sets drive DOM marking (hidden native Think lines, null-rendered sibling tool lines), using MutationObserver to apply the sets to row data attributes and eliminate the entire class of bugs caused by layout race conditions.
- React structure protection: it never moves React-owned
[data-chat-anchor-key]row nodes. If this node is moved, React throws aNotFoundErrorduring session switching or editing. The plugin only uses keyed replacement and class/CSS approaches. - Dependency updates: the
dsh-client-runtimepackage required bycreateSnapshotStorewas removed from dsh on 2026-08-22, so the plugin now uses a built-in minimal observable value store.
Development and Testing¶
The plugin is written in pure JavaScript with no build step.
- Type checking:
npm run check
- E2E testing: requires a running
dsh weband Python Playwright:
dsh --profile web --no-open --port 3639 &
python3 test/e2e.py --url http://127.0.0.1:3639 --session "架构重构不顺原因分析"
Conclusion¶
This plugin does not hide any content. Think and tool calls are interleaved inside slides in their actual output order, making it suitable for scenarios that require complete tracking of intermediate reasoning and tool execution. All content is licensed under the MIT License.