Introduction¶
In the Web GUI of DSH (DeepSeek Harness), the markdown tables output by the model are often long or wide: tables with many rows require up and down scrolling in the conversation stream to see everything, while super-wide tables require left and right dragging to see the rightmost columns. Starting from 0.1.1-rc.2, dsh added an md-table-wide branch for tables wider than 4 columns, extending the table to leave whitespace on both sides of the content columns, but with default overflow-x:hidden and scrollbars only appearing on hover, the reading experience is still limited.
dsh-plugin-table-zoom addresses this problem: it automatically injects a “⛶ Float Window View” button next to long tables. Clicking it pops up an independent, scrollable floating window to fully display the table and supports one-click copying as Markdown. DSH’s philosophy is “everything is a plugin,” and such Web GUI enhancements are implemented by mounting bundles into the profile. Below is an introduction to its features, installation method, and working principle.
What is it¶
dsh-plugin-table-zoom is a chat table floating window plugin for the DeepSeek Harness (dsh) Web GUI, maintained by Pasumao, under the MIT license, current version 0.3.4. It is positioned as pure frontend DOM enhancement: it does not modify the core package, does not register tools, has no server-side logic, and has zero runtime dependencies.
It solves a very specific problem: multi-row long tables and horizontally overflowing wide tables in the chat cannot be viewed completely in one go in the conversation stream. The plugin turns these tables into floating windows that can be scrolled, scaled, moved, and copied independently, leaving the chat itself unaffected.
Core Features¶
Floating Window View and Copy¶
- Long table detection: Tables with ≥ 9 rows (including header) or tables where horizontal overflow exceeds 2px automatically show an aligned-right “⛶ Float Window View” button below; short tables do not disturb.
- Click button to pop up: Clicking the button pops up the floating window: the title displays “Table · N rows × M cols”; the body is scrollable horizontally and vertically; it can be closed via the close button, Esc, or by clicking the mask. Chat page scrolling is locked while open.
- Copy as Markdown: The “Copy as Markdown” button in the floating window header copies the entire table in one click, folding inline line breaks in cells and escaping pipe characters.
- Clone display: The floating window displays a clone of the original table; the table in the chat remains unchanged and is not subject to repeated enhancement.
Size, Position, and Scaling¶
- Resize: Dragging the bottom-right handle changes the size; minimum 320×200, maximum to viewport whitespace.
- Adaptive on open: Width is determined by the table content (narrow tables do not fill width, super-wide tables fill the available width of the viewport, minimum 320), position is centered, scale is 100%. The plugin does not remember any layout; closing and reopening returns it to the adaptive state.
- Drag to position: Holding the title bar allows dragging the floating window to any position; it is automatically limited within the page. The position only affects the current open session.
- Zoom with Ctrl+Wheel: Ctrl + mouse wheel scales the table font, ranging from 60% to 250% with a step of 10%; the percentage is displayed in real-time on the title bar. Scaling is not remembered; it returns to 100% every time it is opened.
Reading and Selection¶
- Text selection: Normal left-click dragging in the table (including after zooming) allows text selection; it is not hijacked for panning.
- Pan: When tables are super-wide or super-tall, holding Space and dragging the body allows panning left/right/up/down; the grab cursor only appears when holding Space; touch devices use native scrolling.
- Scrollbar visibility: Scrollbars are deepened and thickened to remain visible in light themes.
- Column width limit: Column width limit is consistent with inside the chat (
min(30vw, 320px)); super-wide columns automatically wrap and shrink.
Compatibility Handling¶
- Targeting
md-table-wide: Targeting themd-table-widewide table branch from dsh0.1.1-rc.2, the plugin injects a covering rule to pull wide tables back to the content column width and keep a permanent horizontal scrollbar, restoring the old experience of “scrolling to view within the session column”; for old dsh versions that do not have this class name, the rule does not match and behavior remains unchanged. - Container filtering: Only recognizes tables within the
tableScrollcontainer, skipping the floating window itself and tables inside the image-tools lightbox, with no impact on other plugins. - Browser API: Relies on the browser’s
MutationObserver/requestAnimationFrame; it is automatically disabled in non-DOM environments.
Installation and Enablement¶
This plugin is a pure client-side plugin and needs to be mounted into the dsh Web profile as a bundle (same mechanism as dsh-notify / dsh-plugin-image-tools).
- Install dependencies in the profile directory (e.g.,
~/.dsh/profiles/web):
npm install dsh-plugin-table-zoom
# or install directly from GitHub
npm install github:Pasumao/dsh-plugin-table-zoom
- Add the plugin to
dsh.profile.bundlesin the profile’spackage.json:
"dsh": {
"profile": {
"bundles": [
/* ...existing bundles... */,
"dsh-plugin-table-zoom"
]
}
}
-
Execute
pnpm install(ornpm install) in the profile directory; -
Restart
dsh web(the launcher relaunches); only then does the new plugin enter the browser bundle.
No Configuration Required¶
Install and use, no configuration items:
- Does not read environment variables, does not require API Key / token, does not write configuration files;
- Long table detection thresholds (≥ 9 rows / horizontal overflow 2px) are built-in default values;
- Styles adapt to DSH theme CSS variables and do not introduce independent theme configuration.
Regarding dependencies, package.json declares peerDependencies as @deepseek-ai/cordis ^4.0.1, and engines requires node >=18.
Local Development and Debugging¶
Source code installation:
git clone https://github.com/Pasumao/dsh-plugin-table-zoom.git
cd dsh-plugin-table-zoom
npm install
If debugging with a local directory, you can replace the installation step in 1 with a link: dependency:
"dsh-plugin-table-zoom": "link:D:/path/to/dsh-plugin-table-zoom"
Development commands:
npm run selfcheck # Pure function offline test (recognition / long table detection / Markdown serialization)
npm run smoke # selfcheck + fake DOM end-to-end smoke (button injection / floating window toggle / copy)
npm run pack # pack
How it Works¶
- The server side (in
lib/index.js) is an empty implementation. The plugin is mounted into the profile via a “self-contained bundle patch” method; the client side is declared bydsh.clientto be delivered to the browser via/plugins/dsh-plugin-table-zoom/client.js. - The client side (in
lib/client.js) usesMutationObserverto observedocument.bodyand usesrequestAnimationFrameto scan markdown tables frame-by-frame (the core renderer wraps tables in containers with a class name containingtableScroll), and injects a button row after the container for long tables. - The floating window reuses the image-tools lightbox mode: pure DOM single-node changes, no insertion/removal of React-managed structures, safe during re-rendering.
Applicable Scenarios and Notes¶
- Suitable for users who frequently have models output comparative tables, parameter tables, or long lists in dsh web; sessions where short tables appear only occasionally will barely perceive the plugin’s existence.
- The plugin runs with the permissions of the current dsh process; it is recommended to check the source code and license (MIT) before installing.
- Need to restart
dsh webafter installation to take effect. - According to the repository declaration, code and documentation are generated with AI assistance (DeepSeek Harness) and have been manually reviewed and verified on real machines (
npm run smoke). - Published plugins in the same series can be used together: dsh-notify, dsh-plugin-choice-refresh, dsh-plugin-dev-kb, dsh-plugin-image-tools, dsh-plugin-workbench, dsh-plugin-windows-guard.
Conclusion¶
dsh-plugin-table-zoom solves the problem of “incomplete viewing and difficult copying” for chat tables with a single button: long tables pop up a floating window for independent scrolling, allowing full viewing both horizontally and vertically, and also support zooming, panning, and one-click copying as Markdown, without modifying the core package or requiring configuration. If you often read tables in the DSH Web GUI, it is worth installing and trying.
- GitHub repository: https://github.com/Pasumao/dsh-plugin-table-zoom
- Community plugin directory page: https://www.skillhub.cn/plugins/Pasumao/dsh-plugin-table-zoom (The directory is an independent community site with no official affiliation with DeepSeek / Hypersphere; this address comes from the plugin collection lead, did not appear in repository info, for reference)