Introduction¶
DeepSeek Harness (DSH) Web sessions can be very long: a single round often involves code, tool calls, and reasoning processes, yet the interface defaults to a single-column vertical scroll. Wide screens have wasted space on the sides, and recalling conclusions from several rounds back relies on the scroll wheel and memory. In the DSH ecosystem, capabilities are generally extended via plugins; the community directory SkillHub maintains the client plugin dsh-chat-columns by WuZiyi521. The goal isn’t just simple “good layout,” but to offer different reading modes for the same conversation. Currently, the available mode is Newspaper Mode (CSS multi-column, shared host scroll container); Seamless and Copy modes are on the roadmap and not yet implemented.
What is it¶
dsh-chat-columns arranges the body of a DSH Web session into a newspaper-style multi-column layout: all columns share the host’s unique scroll container; scrolling, anchors, and “load earlier” are still handled by the host, while the plugin is responsible for column width and column logic. The README emphasizes that this is not simply adding column-count to a flex container casually—the host [data-chat-flow] has .column and is display:flex. CSS multi-column does not work on flex, so the plugin changes it back to display:block and adjusts variables like --dsh-chat-content-width. The plugin has no build step; the main logic is in lib/client.js. The package.json version is 0.1.5, license MIT; the GitHub repository currently has 0 stars.
Core Features (as of current version)¶
Below lists only capabilities explicitly documented in the source and implemented or in acceptance testing for Newspaper Mode.
Newspaper Mode¶
- Auto-switch between 1–3 columns based on the scroll container width (minimum readable width per column in auto mode is approx 420px).
- Support manual specification of 1 / 2 / 3 columns or
auto; a badge in the bottom right is clickable to toggle. - All columns share the host’s unique scroll container; the plugin does not write
scrollTop. - Short cards (height ≤420px) are not cut off by column boundaries; longer messages are allowed to span columns, which is a newspaper reading design feature.
- Scrolling to the top triggers the host’s “load earlier” (requires user to scroll to within ~24px of the top, with debounce).
- In multi-panel scenarios, attempts to identify the main session container (the one with the most content lines inside
[data-conversation-scroll]) and select the flow within it; if indistinguishable, freeze layout and show a prompt. - Dark theme follows the host token; column count is written to
localStorageand persists after refresh. - Cleanup of styles, badge, inline variables, debug API, and
htmldata-dshc*attributes upon uninstallation.
Planned, Not Yet Delivered Modes¶
The README uniformly names the three reading modes Newspaper / Seamless / Copy (target version 0.2.0). Seamless focuses on one screen per column with continuous seams; Copy focuses on a read-only replica with columns and independent scrolling for each (constrained by React’s single node tree, interaction must use a static replica, buttons cannot be clicked). Neither is currently implemented.
Installation and Enablement¶
The plugin belongs to the web profile. The installation steps in the documentation involve adding it to the bundle via DSH CLI after obtaining the plugin’s local directory (do not manually concatenate github:owner/repo formats not appearing in the docs):
dsh plugin --profile web add "$PWD/dsh-chat-columns"
Replace $PWD/dsh-chat-columns with the absolute path to your local plugin directory. After installation, it appears in dsh.profile.bundles in ~/.dsh/profiles/web/package.json; dsh-hmr usually takes effect within a few seconds when online, no restart needed. If it doesn’t take effect, you can restart the web process (README reminder: dsh-web is the current session environment, restarting will interrupt the current conversation).
It is recommended to check the repository source code and MIT license before installing: client plugins are loaded with the DSH Web process, and permissions are consistent with the current DSH runtime environment.
Thorough Uninstallation:
dsh plugin --profile web remove dsh-chat-columns
README note: After configuring hot reload, if the page is not refreshed, the new instance may wait for the next layout event to take over the current session; refreshing the page once after enabling or reinstalling is recommended.
Typical Usage¶
Switching Column Count¶
Call the global debug API in the browser developer tools console:
__dshChatColumns.set(1) // Turn off (restore single column)
__dshChatColumns.set(2) // Fixed two columns
__dshChatColumns.set(3) // Fixed three columns
__dshChatColumns.set("auto") // Auto based on window width (default)
__dshChatColumns.get() // View current state
Preferences are saved in localStorage["dsh-chat-columns:cols"].
Column Count Calculation Rules (Source Material)¶
Auto and manual modes use a fixed formula (gap = 40, must match CSS column-gap):
fit(w) = max(1, floor((W + gap) / (w + gap)))
auto = max(1, min(3, fit(420)))
manual n = max(1, min(n, 3, fit(260)))
Column count is based on the scroll container’s clientWidth; window or sidebar changes are monitored via ResizeObserver.
Local Development and Sandbox¶
No build step; modifying lib/client.js and saving triggers hot replacement via dsh-hmr. You can use harness/index.html in the repository combined with a local HTTP service to view the multi-column effect (see the “Development” section of the repository README for details).
Suitable Scenarios and Notes¶
Who is it for: Developers who frequently read or review very long conversations in DSH Web, want to utilize wide screen horizontal space, and want to quickly scan the overall picture. The Newspaper Mode risk is relatively low: it doesn’t take over scrolling, and the division of labor with host anchors and “load earlier” is relatively clear.
Notes to be aware of:
- Currently, it is just a Newspaper Mode using CSS
column-count, not “one screen per page” seamless reading. - When there are multiple
[data-chat-flow]elements (traces, sub-agents, etc.) on the page, the plugin relies on a heuristic for the main session container; it may still misjudge if there are multiple scroll containers with similar line counts, and the documentation states this is not fully verified. - The behavior of extremely wide tables and
stickyelements in multi-column mode is noted as unverified. - Mobile devices are not specifically adapted; the 420px column width minimum typically remains 1 column on phones.
- The maintainer’s README states stability is in the 0.1.x acceptance phase, and does not claim all stability test cases have passed; see the repository
docs/testing.mdand known limitations list for details.
Conclusion¶
dsh-chat-columns provides the first additional reading method for DSH Web long sessions at the plugin layer—a newspaper-style multi-column layout—and reserves design space for Seamless and Copy modes. If you want to try it or follow the version, you can get documentation and source code from the community directory and GitHub repository:
- Directory Page: https://www.skillhub.cn/plugins/WuZiyi521/dsh-chat-columns
- GitHub: https://github.com/WuZiyi521/dsh-chat-columns
The community directory is an independent site and has no official affiliation with DeepSeek or Hypersphere; please refer to your local DSH environment and the latest repository README for installation and permissions.