dsh-sidebar-image-zoom
A DeepSeek Harness (dsh) plugin that makes the images in the right-sidebar document pane zoomable.
dsh's built-in image preview is deliberately static — its own source says the image is rendered "without fitting or scaling them to the pane", at intrinsic size, with the surrounding body providing scrolling only. That is fine for icons and painful for big screenshots, diagrams, and charts. This plugin replaces that renderer with one you can actually navigate.
Install
dsh plugin --profile web add github:Meowrium/dsh-sidebar-image-zoom
Restart dsh web, then open any image in the right sidebar (new tab → 工作区文件 / workspace files → pick an image).
Requires the
dsh0.1.5 line (this was developed and verified against0.1.5-rc.1). The right-sidebar document preview this plugin extends does not exist before 0.1.5.
Usage
| Action | Result |
|---|---|
| Mouse wheel | Zoom in/out, anchored at the cursor — the pixel under the pointer stays put |
| Drag | Pan (once the scaled image is larger than the pane) |
| Double-click | Toggle 适应窗口 ↔ 1:1 |
适应窗口 |
Fit the whole image in the pane |
适应宽度 |
Fit to pane width only |
1:1 |
Original size, one image pixel per screen pixel |
+ / − |
Step zoom |
+ / - / 0 / 1 |
Same, from the keyboard (0 = fit, 1 = 1:1) |
The image opens at 1:1 by default, matching the built-in feel; a percentage readout sits in the toolbar. Zoom range is 10 % – 1200 %. When the image is smaller than the pane it is centred; when larger, panning is clamped so you cannot drag it out of view.
How it works
It uses only official extension points — no monkey-patching, no private DOM attributes:
ctx.documentPreviews.register({ id, extensions, priority: 'extension', loading: 'bytes-complete' })— the registry's own docs say "External implementations win over product implementations", so the extension band takes over the eight image suffixes (png jpg jpeg gif webp bmp ico svg).ctx.slots.register({ name: 'sidebar.right.tab.document', key: <id> }, Body)— the keyed document-body seat, under the same id.
The body receives the file as complete bytes (content.kind === 'bytes'), turns them into a Blob URL (always revoked on unmount), and renders its own zoom/pan viewport.
Package layout
package.json dsh.bundle.patch → cordis.patch.yml ; dsh.client → lib/client.js
cordis.patch.yml inserts the bundle entry
lib/index.js host half (no-op — this plugin is browser-only)
lib/client.js browser half — the renderer and the zoom body
Notes
- The plugin only adds interaction; it does not change how images are loaded or where they come from.
- Uninstalling it restores dsh's built-in behaviour, because the built-in definition is still registered underneath — this one just outranks it.
- All listeners, styles, observers and object URLs are released on unmount; there is no residue after closing the tab.
No comments yet. Be the first to write one.