DeepSeek Harness (DSH) adopts a plugin-based architecture. For users who need to read long conversations for extended periods, the default interface often contains distracting elements (such as the input box and top bar) and has layout constraints (such as font size and width). Happy Reader aims to solve these problems by hiding distracting elements, exceeding the official layout limits, and providing quick Markdown copying, helping users achieve an immersive reading experience.
Plugin Metadata¶
- Name: dsh-happy-reader
- Developer: Richardwongyk
- Category: Client-side
- License: MIT
Core Features¶
Interface Optimization¶
- Hide Input Box: Collapse the bottom input box with one click, freeing up screen space. Collapsing it does not affect scrolling or reading position in the official chat.
- Hide Top Bar: Collapse the in-app conversation title bar to enlarge the reading area. The system window title bar (minimize/maximize/close buttons) is unaffected.
- Full Screen Mode: Enter full screen with one click, filling the entire screen with content. Supports exiting with Esc, and the toggle state stays synchronized in both directions with the actual full-screen state.
Typography Adjustment¶
- Font Size Adjustment: Supports 10px to 40px. The 10-22px range stays synchronized in both directions with official settings; the 23-40px range is supplemented by scaling at the plugin layer, while the official setting remains unchanged. Code block content scales in sync with font size.
- Font Selection: Set Chinese, Western, and code fonts separately. Only locally installed fonts are listed. Chinese and Western fonts take effect independently and do not interfere with each other.
- Content Width: Supports adjusting content width and can exceed the official width limit (up to the full width of the content column). It stays synchronized with the official handle; dragging the official handle returns control.
- Line and Character Spacing: Provides fine-tuning in 0.1 increments. Line spacing supports 1.0× to 2.2×, and character spacing supports -1px to 3px.
Interaction and Panel¶
- Panel Dragging: Press and hold any blank area of the panel to move its position; drag the top or bottom edge of the panel to adjust its height.
- One-Click Reset: Double-click the panel title bar to reset its position and height.
- State Saving: All toggles, selections, panel position, and height are saved automatically, so they remain unchanged the next time the app is opened.
Copy as Markdown¶
After selecting text in message content and pressing Ctrl+C, the clipboard will contain formatted Markdown content:
- Formulas: Restored to LaTeX source code (inline
$…$or standalone$$…$$), with automatic completion when only part of a formula is selected. Copies containing formulas also include a rich-text format, so they can still be displayed when pasted into rich-text-capable applications such as Word. - Code blocks: Converted to ``` fenced format.
- Lists and Tables: Task lists are converted to
- [x] / - [ ], and tables are converted to GFM tables. - Other: Bold, italics, links, images, headings, and similar elements are preserved according to Markdown syntax.
Installation and Enablement¶
Prerequisite: Verified with DeepSeek Harness Desktop 0.2.0-rc.2.
On the DSH plugin page (Settings → Plugins), enter the following command in the installation box:
dsh plugin --profile <profile> add dsh-happy-reader
Or enter the plugin name dsh-happy-reader directly.
Notes¶
- System Dependency: The plugin depends on the official client’s interface structure, and may need to be updated after a DSH version upgrade.
- Platform Limitation: Currently adapted only for Windows + DSH Desktop 0.2.0-rc.2; macOS and Linux are not supported.
- Font Detection: Font selection only lists fonts installed on the current machine. After switching computers, the fonts on the new computer will take precedence.
- Uninstall: After uninstalling, the application is fully restored to its original state, with no residual settings left behind.
License¶
MIT license. Third-party components include the MIT-licensed turndown and turndown-plugin-gfm, both inline within the plugin package.