Preface

When running agents in DSH, a single turn often involves thinking blocks, tool calls, and main content streaming output simultaneously. The official client provides four “Work details” display modes — Compact, Standard, Detailed, and Verbose — each with different collapsing and flattening strategies. During streaming, if the process group height jumps around, the outer conversation scrolls up and down, or old lines compete with new ones for focus, it becomes hard to read the running state.

Below we introduce the community client plugin dsh-stream-focus (maintained by timho1047). Without modifying the session or sending requests, it enhances the display of thinking and tools for the running turn: Compact / Standard use a height-limited, bottom-attached window following the current process group; Detailed / Verbose automatically expand the current line within the flattened structure. After installation, no configuration is needed — simply enable or disable it in the plugin panel.

What This Is

dsh-stream-focus is a pure Web client display enhancement plugin for DSH, categorized as “client-side”. In one sentence: on top of DSH’s four built-in Work details display modes, it makes running thinking and tool output smoother and more focused, and tries to keep the current process in view.

The plugin does not write to the session, register model tools, or touch credentials; after the turn ends or the plugin is uninstalled, the official display is restored. Historical turns still display according to each mode’s official collapsing behavior; only the currently running turn applies the plugin’s logic.

What Each of the Four Modes Does

The official four modes and plugin-enhanced behaviors are as follows (excerpted from the project README).

Mode Plugin Enhancement
Compact / Standard Automatically expand the current process group into a height-limited, bottom-attached, height-stable running window; auto-collapse the old window when switching lines.
Detailed The current turn is flattened inside the official container without faking a group-level window; automatically expand the current thinking/tool line and collapse old auto-expanded lines.
Verbose Flattened display; automatically expand the current thinking/tool line but do not auto-collapse old lines, respecting the “always expanded” semantics.

Capabilities shared by all four modes include: smooth character-by-character reveal of thinking body text; line-level fade and character fade-in for normal body text; fade-in for new paragraphs, lists, and code blocks; trying not to steal focus during auto-expand/collapse. The window appearance adds no background, border, or rounded corners, reusing the official process group styling.

Compact / Standard Running Window

When thinking streams, the plugin automatically expands the current thinking line; the official process group itself becomes a height-limited, internally bottom-attached window. The window prohibits horizontal overflow and disables the process group’s built-in top/bottom fade mask, reducing issues like intermittent horizontal scrollbar appearance and vertical scrollbar blur caused by the mask. The active window keeps the maximum height it has already appeared with; when thinking switches to tools, it mainly scrolls inside the window, avoiding the outer session rolling back due to window shrinkage. There is a 16px light fade at the bottom of the window for smoother scroll following.

Only these two modes have the official process group; the window height uses the official min(400px, 50vh). Internal scroll following uses the official process scroll; the plugin does not redundantly set scrollTop.

Detailed / Verbose Flattened Lines

These two modes keep the official flattened structure without adding group-level height limits. The plugin automatically expands the current thinking or tool line based on mode strategy; Detailed collapses the previously auto-expanded line from the last turn, while Verbose retains expanded lines to match that mode’s semantics. Parallel tools are expanded together, including standalone Bash lines with data-sample="bash".

Streaming and Animation Details (Implementation Level)

  • Thinking body text is wrapped via the official conversation.chat.reasoning.body Slot and conversation.chat.reasoning.content Factory, using the CSS Custom Highlight API to fade in trailing new graphemes by opacity, without inserting spans or modifying Markdown DOM; reveal speed is normalized by elapsed time, aiming for consistent feel at 60Hz / 120Hz.
  • Process group first auto-expansion has about 180ms opacity fade-in; auto line switching has about 180ms height and opacity transition for expand/collapse; manual line clicks still use the official instant switch.
  • When thinking ends and tools begin, the thinking window is collapsed first then the tool line is expanded; window height is frozen before switching so outer total height remains unchanged. When the next thinking begins, previously auto-expanded thinking/tool windows are automatically collapsed, keeping only the new thinking window; manually opened lines are not auto-collapsed, manually closed groups or lines are not force-reopened.
  • During normal assistant body streaming, a 20px bottom line fade is added at the message root, removed after completion; new blocks have about 600ms ease-in fade-in. Body text currently has no official Content Factory, so the same character-by-character pacing as thinking cannot be achieved — the README notes this as a known limitation.
  • The outer conversation is not actively scrolled when not at the bottom; if a transition causes the official follow to be lost, the plugin does a single self-heal: scrolls back to the window bottom and dispatches scrollend to reactivate follow.

Character smoothing introduces about 100ms visual delay; during streaming, what is displayed is the visible prefix of the original thinking text, switching back to full text after completion. Copying content during streaming gets the current visible prefix.

Installation and Enablement

Installation command (from README, for Web profile):

dsh plugin --profile web add dsh-stream-focus

After installation, refresh the browser page; it will take effect under all four Work details modes. Zero configuration, zero persistence; the enable/disable in the plugin panel is the master switch.

Directory page: timho1047/dsh-stream-focus @ SkillHub
Source code and documentation: GitHub - timho1047/dsh-stream-focus
Four-mode demo videos (30fps, 1080p): Landing page

Current package version is 0.1.2, license MIT; requires Node >=22.19.0, DSH >=0.2.1-rc.2 (see package.json).

Typical Usage

There is no separate config file or CLI subcommand. The typical flow is:

  1. Install the plugin into the Web profile using the command above.
  2. Keep it enabled in the DSH client plugin list.
  3. Select your commonly used Work details mode in settings (any of Compact / Standard / Detailed / Verbose).
  4. Start a conversation turn that triggers thinking and tool calls; observe whether the current process group or current line is automatically expanded and whether the window follows at the bottom.

To compare the four modes, you can open the segmented demos on GitHub Pages (Compact, Standard, Detailed, and Verbose each have a ~25–32 second recording).

For local development or contributing, the repository provides:

pnpm install
pnpm run verify   # typecheck + build + 56 tests

Use Cases and Notes

Who It’s For: Developers who frequently watch running turns in DSH Web, need to switch between the four display modes, and want thinking and tool output to steal less focus and jitter less. If you mainly care about server-side session or model tool registration, this plugin does not touch those layers.

Permissions and Security: The plugin runs with the permissions of the current DSH process and browser page, and is still a third-party community component. Before installing, it’s recommended to read the source code and LICENSE to confirm compliance with your requirements. Community directories like SkillHub are independent of DeepSeek / High-Flyer and are not official app stores.

Known Limitations (key points from the README):

  • Character fade-in relies on the CSS Custom Highlight API; unsupported browsers fall back to normal text rendering.
  • It depends on ui-chat’s semantic DOM (such as data-chat-group-key, data-variant="think", data-tool, data-chat-running, etc.); if upstream renames these, the plugin may silently fail and require updates.
  • Auto-switching and first expansion use about 180ms transition; different from the instant feel of manual operations.

The project acknowledges being inspired by dsh-streamfold and dsh-smooth-stream; currently about 3 stars on GitHub.

Conclusion

dsh-stream-focus turns “keep up with current thinking and tools” into a zero-configuration client enhancement: Compact / Standard use a height-limited, bottom-attached window; Detailed / Verbose use flattened lines with auto-expansion; and it uniformly handles streaming fade-in and focus. If you are debugging agents in DSH, you can install it via the official command, refresh the page, and run a turn under your commonly used Work details mode to compare with the official default display.