Adds a VS Code-style workspace file explorer to the dsh web GUI: file tree, editable preview with syntax highlighting, tabs, line numbers, right-click file operations, and inline image preview.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-plugin-workbench
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:Pasumao/dsh-plugin-workbench
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
dsh-plugin-workbench
中文 | English
⛔ This plugin is no longer maintained (2026-09-11)
As of DSH
0.1.5, the official build ships a workspace file tree and document preview out of the box (built-in bundles@deepseek-ai/dsh-client-ui-sidebar-files: right-sidebar file tree with lazy directory listing;@deepseek-ai/dsh-client-ui-sidebar-documentpreview: Markdown / highlighted code / image / PDF / HTML / plain-text previews), which covers this plugin's core capabilities as a first-party implementation — no layout patch, no reliance on unofficial host APIs, upgraded automatically with dsh. This plugin is therefore discontinued: no further maintenance or releases. Existing users are advised to uninstall it and use the built-in features:dsh plugin --profile web remove dsh-plugin-workbench # Optional: restore the layout bundle to the pristine official version node node_modules/dsh-plugin-workbench/scripts/patch-layout.mjs --restore # Restart dsh web to take effectPublished versions remain installable (tested against DSH
0.1.5-rc.1), but bugs will not be fixed and newer dsh versions will not be adapted. Thanks to every user and every star ⭐.
A VS Code-style workbench that edits files directly — not a read-only preview: file tree + editable code preview (syntax highlighting, tabs, line-number gutter) + right-click file operations (new / rename / delete / copy / cut / paste / open in system / reveal in file explorer) + inline image preview, with state saved independently per workspace. Once installed, the DSH web GUI becomes a lightweight code editor.
✅ Works out of the box: since 0.0.9 the layout patch is fully automated — it takes effect right after install and restart; if a DSH upgrade overwrites the bundle, the plugin patches it back automatically, with no manual steps required (manual action is only needed if the anchors break, see the "Configuration" section). Since 0.0.15 both build flavors — the npm build and the DSH Desktop bundled build — are detected automatically, so DSH Desktop works out of the box too.
What you'll see after installing:
- A file tree sidebar on the left (lazy loading + 2-second auto-refresh, expansion state kept per workspace);
@relative-pathmentions in messages turn into clickable links that open a preview in the workbench;- Drag files from the left panel into the chat area and the path is inserted into the input box automatically.
Screenshot

Real Web GUI screenshot.
Features
- File tree: lazy loading, 2-second auto-refresh, expansion state kept per workspace
- File icons: colored badges for common code formats / emoji for images, audio & video, archives, etc.; expanded and collapsed directories are visually distinguished
- Editable preview: transparent textarea layered over syntax highlighting, save with
Ctrl+S/Cmd+S; Markdown renders a preview by default (one-click switch between source and rendered view); prose formats like .txt and very large code files automatically fall back to plain-text editing — fast to load, no UI jank - Disk change sync: when an open file is modified externally (e.g. saved by an agent or another editor), clean tabs reload automatically, while tabs with unsaved edits show a "⟳" badge (click to reload); if a watched directory is deleted or access-restricted, the watcher degrades gracefully (state cleaned up, retry allowed) and never crashes the host process
- Line-number gutter: logical line numbers along the editor's left edge, locked in alignment with text scrolling (works in both plain-text and highlighted modes)
- Image preview: png/jpg/gif/webp/avif/svg and more render inline directly (same-origin byte route, 20MB limit)
- Context menu (VS Code style): right-click on files, folders, any blank space in the panel, or the panel
header — new file, new folder, rename, delete (recursive, with confirmation), copy path, copy / cut / paste,
refresh, open in system, select all, undo,
reveal in file explorer (a file is revealed selected in its folder, a folder opens directly;
Windows
explorer/ macOSopen, automatically translated under WSL) - Reference files with @ in messages: the file context-menu item "Reference with @" inserts
@workspace-relative-pathinto the chat input box; once sent,@relative-pathmentions in the message render as hyperlinks (click to open a preview in the workbench). The syntax is@+ a workspace-relative path; any other@textis always displayed as-is and has no special meaning - Drag files into the conversation: drag a file or a multi-selection from the left panel anywhere into the chat area and the path text is inserted at the input box cursor; dropping onto a directory row in the left panel is still a move operation
- Click anywhere to deselect: clicking anywhere outside the tree (conversation / other panels / left panel header) clears the selection
- Copy / cut / paste: Ctrl/Cmd+C/X/V (or the context menu), with cross-workspace paste support; when the target already contains an item with the same name you are asked whether to overwrite, just like the system file manager; the clipboard is cleared automatically after a successful cut (move)
- Batch operations: Ctrl/Cmd+click and Ctrl+A multi-select, delete selected items in bulk via the context menu or the Delete key, drag the whole group to move it
- Undoable operations: the "↩" button at the top right or Ctrl+Z undoes the most recent operation (kept per
workspace, up to 30 entries): copy (removes the copy), cut/drag move (moves back to the original place), rename,
create, delete; deletion is an undoable delete (files are moved instantly into a hidden
.dsh-trash, no bytes copied) - Reveal in file explorer: a context-menu item (equivalent to VS Code's Reveal in File Explorer) that locates the
file/folder in the system file manager (Windows Explorer, macOS Finder, etc.), executed via the
revealendpoint of the loopback RPC - Word wrap: one-click soft-wrap toggle in the tab bar (wrapping at the display layer only, file content untouched) or horizontal scrolling for long lines; the preference persists
- Tabs: multiple files, drag to reorder, collapse/pop out; one-click light/dark theme switching
- Syntax highlighting: highlight.js (JS/TS, Python, JSON, HTML, CSS, Shell, and more; Markdown renders a preview by default, switchable to source)
- Markdown rendering: markdown-it (raw HTML is always escaped, never executed); relative-path images are displayed
inline via the same-origin route
/dsh-plugin-files/raw/<path> - Disk changes: the host watches open files with
fs.watch(watching the parent directory, surviving atomic renames); changes are pushed over SSE at/dsh-plugin-files/events, and clean tabs sync automatically
Configuration
No environment variables or config files needed; the layout patch is fully automated (the plugin automatically detects
and re-runs scripts/patch-layout.mjs at startup — idempotent, non-blocking; since 0.0.15 both build flavors of the
same version are detected automatically — the npm build and the DSH Desktop bundled build; anchors are byte-coupled to
the compiled output, so a DSH upgrade that breaks them requires anchor updates):
- Behavior preferences (word wrap, light/dark theme, tab layout, file tree expansion state) persist per workspace and need no manual configuration;
- File operation channel: via the loopback RPC
/dsh-plugin-files; write operations are executed explicitly underdanger-full-access, with no external configuration options.
Installation
Layout-patch anchors are byte-coupled to the DSH compiled output; a DSH upgrade that breaks them requires anchor updates. Since 0.0.15 both build flavors (npm / DSH Desktop) are detected automatically and the patch re-applies at startup (see the "Configuration" section for details).
# npm (recommended)
dsh plugin --profile web add dsh-plugin-workbench
# or GitHub
dsh plugin --profile web add github:Pasumao/dsh-plugin-workbench
Install from source (local development / debugging):
git clone https://github.com/Pasumao/dsh-plugin-workbench.git
cd dsh-plugin-workbench
pnpm install
pnpm run build # produces lib/index.js and lib/client.js
# mount into the profile via link:
After installing, apply the layout patch and restart:
node node_modules/dsh-plugin-workbench/scripts/patch-layout.mjs
# restart dsh web
Since 0.0.9 the plugin automatically detects and re-applies the layout patch at startup — no need to run it manually after DSH upgrades; run the command above manually only if the automatic re-patching fails (broken anchors).
Development
pnpm install
pnpm run build # produces lib/index.js (host) and lib/client.js (browser)
pnpm run typecheck
Uninstall
dsh plugin --profile web remove dsh-plugin-workbench
# optional but recommended: restore the layout bundle to the stock dsh file
node node_modules/dsh-plugin-workbench/scripts/patch-layout.mjs --restore
# restart dsh web
Skipping
--restoreis fine too: since 0.0.18 the layout patch is adaptive — the explorer column auto-collapses (width 0) whenever no plugin contributes to theexplorer/explorer.previewslots, so an uninstall leaves no empty column behind.--restoresimply returns the bundle to its pristine, unpatched state. The script has two safety guards: it refuses to restore when the target already looks like a newer pristine bundle (just-upgraded dsh) or when the backup belongs to an older dsh version (--forceoverrides).
Notes
- The
/dsh-plugin-filesRPC channel is loopback-only; write operations are executed explicitly underdanger-full-access; the context menu's create/rename/delete go through the same channel too (loopback trust, same as saving in the editor); all HTTP routes mounted by this plugin (RPC / raw images / SSE) uniformly pass the connection-layer auth fence (connection.requestRejection, Host/Origin + browser auth checks) - Image preview goes through the same-origin route
/dsh-plugin-files/raw/<path>: it only responds to image extensions, resolves the path viactx.fs.resolve → statfirst (sandbox-consistent path resolution) before reading bytes, with a 20MB limit - DSH upgrades overwrite the layout bundle; since 0.0.9 the plugin detects and re-applies the patch automatically at
startup, so there is no need to re-run it manually; if the anchors break,
scripts/patch-layout.mjsmust be updated (since 0.0.15 the anchor table carries two build variants auto-detected per target — npm and desktop-ci, the latter stored inscripts/layout-anchors.desktop-ci.json) - This repository does not include DSH build artifacts
Contributing
See CONTRIBUTING and CODE_OF_CONDUCT; the changelog is in CHANGELOG.
Compatibility
- Tested on DSH
0.1.2-rc.1(since 0.0.16 the layout patch anchors are adapted to that version: the detailsCol border style changed from1px/--dsw-alias-border-l2to.5px/--dsw-alias-border-l3, and the DetailsColumn children gained aSessionProviderwrapper); for 0.1.1-rc.2 and earlier, use the 0.0.15 anchor table. - Since 0.0.9 the plugin re-applies the layout patch automatically at startup, so DSH
upgrades normally need no manual action; on anchor mismatch the startup log shows
ui-layout patch exited 1— upgrading this plugin fixes it.
Related plugins
This plugin is part of Pasumao's dsh plugin ecosystem; the published plugins in the same series can be used alongside it:
| Plugin (npm) | GitHub | Description |
|---|---|---|
| dsh-notify | GitHub repo | Native Windows notifications + system tray |
| dsh-plugin-choice-refresh | GitHub repo | Choice enhancements: regenerate options / more options |
| dsh-plugin-dev-kb | GitHub repo | Plugin development knowledge base (full mirror of the official docs + skill) |
| dsh-plugin-image-tools | GitHub repo | Image choice cards + inline images in replies + image intake for text-only models |
| dsh-plugin-table-zoom | GitHub repo | Floating window for long chat tables + one-click Markdown copy |
| dsh-plugin-windows-guard | GitHub repo | Windows environment safeguards: guideline skills + mojibake detection / dangerous-write interception / encoding diagnosis & repair |
| dsh-plugin-context-trim | GitHub repo | Per-session injection gate: trim skills / tools / prompt sections per session |
| dsh-plugin-workbench | GitHub repo | This plugin: VS Code-style workspace file tree + editable preview, turning the web page into a lightweight code editor |
For the remaining plugins in the series, see Pasumao · dsh plugins; if you find them useful, a ⭐ on GitHub is always welcome.
AI generation statement
Part of the source code and documentation was generated with AI assistance (DeepSeek Harness) and has been human-reviewed and verified on a live system; permission-related logic has been re-reviewed against the principle of least privilege.
License
Links
More in this category
zhu1090093659/dsh-web#packages/dsh-task-board★ 8370
Task board for the dsh web GUI: a sidebar multi-column kanban whose cards run in real DSH agent sessions and can also be scheduled with cron expressions, executed host-side even with the browser closed.
zhu1090093659/dsh-web#packages/dsh-web-all★ 8370
Plugin and skin collection for the DSH Web UI: task board, Git graph, right-side panel, remote mobile UI, pet, live token stats, and a skin center.
ccch1mneyyy/dsh-TUI★ 4036
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 4004
A fixed-corner whale widget for the DSH web GUI — balance, today's usage and per-turn cost with peak/off-peak pricing, editable balance-alert and daily-budget bubbles, a module-based custom bubble queue with A/B weighted choices and random lines or images, 30+ vendor templates (OpenAI, OpenRouter, Kimi, SiliconFlow, Ark, Zhipu, MiniMax and more) with per-model balance and subscription quota, plus task-end sound, imported audio, custom roles and a resource manager. Local-only, no telemetry.
omdsh-dev/DSH-better-sidebar★ 3992
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
Devin-AXIS/deepseek-design#deepseek-idesign★ 1418
Visual design studio for websites, app prototypes, posters, cards, reports, and magazines, with templates, direct element editing, selection-aware AI draft handoff, and export.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.