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 useChat selector 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 a NotFoundError during session switching or editing. The plugin only uses keyed replacement and class/CSS approaches.
  • Dependency updates: the dsh-client-runtime package required by createSnapshotStore was 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 web and 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.