Right-click menus for the DSH Web UI — copy, cut, paste and select all on text and input areas, plus copy path, reveal in the file manager and open with the default app on file references and links.
Install
# from npm (prebuilt)
dsh plugin --profile web add @z1995418/dsh-file-menu
# from a prebuilt release tarball
dsh plugin --profile web add "https://github.com/dreammaker2016/dsh-file-menu/releases/latest/download/dsh-file-menu.tgz"
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:dreammaker2016/dsh-file-menu
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
Right-click menus for the DeepSeek Harness (DSH) Web UI.
The DSH Web client ships no contextmenu handler, so right-clicking inside the app does nothing useful — no copy,
no paste, no "open file location". This plugin adds a Codex-style menu that fits whatever you clicked.
English | 简体中文
Features
The menu is built from the element under the cursor:
| Right-click target | Menu rows |
|---|---|
| Selected text | Copy |
| A paragraph (no selection) | Copy this paragraph |
| Input box / editable area | Cut · Copy · Paste · Select all |
| A file reference (delivered-file card, produced-file chip, inline file mention) | Copy path · Reveal in file manager · Open with default app |
| A link | Copy link address · Open in browser |
| Alt + right-click | Diagnostics: copy element info |
- Copy goes through the host route
/file-menu/clipboard(Electron main-process clipboard, falling back to PowerShellSet-Clipboard) instead of relying on the renderer's clipboard permission. If the host route is unavailable, the client falls back todocument.execCommand('copy'). - Reveal in file manager selects the file where the OS supports it — Windows Explorer
/select, macOS Finderopen -R. On Linuxxdg-openhas no "select" concept, so the containing directory is opened instead. If the host route is missing entirely, the client falls back to DSH's own/open-in-app/open. - File paths are read from the element's
title,data-path,data-file-path,dataset.*path, the element's own text (DSH's tool-row file links carry no attribute at all — the path is only in the text), or a selected absolute path. DSH renders in-workspace references relative to the session workspace (dsh-plugins/x/README.md,@docs/plan.md), so relative candidates are resolved against the current session's workspace root, which the client half reads from DSH'ssessionsservice (list.getSnapshot()→byId[current].cwd).~/...is expanded by the host half. When no root is available the file rows are simply not shown rather than guessed.
Install
From npm:
dsh plugin --profile web add @z1995418/dsh-file-menu
From source:
dsh plugin --profile web add github:dreammaker2016/dsh-file-menu
Every release also carries a prebuilt tarball
(dsh-file-menu.tgz), installable with dsh plugin --profile web add <tarball-url>.
Use the profile you actually run (web for the Web client, your own profile name for DSH Desktop). Restart DSH after
installing.
Uninstall
dsh plugin --profile web remove dsh-file-menu
Limits
- A relative path that appears inside running prose is recognized only when it is a single token (no whitespace), contains a path separator, and its last segment carries a file extension. Paths with spaces, bare basenames, and extension-less directories are skipped — that is what keeps ordinary sentences ("copy/paste this") from growing file actions.
- Relative candidates need the session workspace root. If DSH's
sessionsservice is unavailable, the file rows are hidden instead of guessed. - The two halves version independently: the client (
lib/client.js) is versioned with the package, while the host half reports its own version fromGET /file-menu/status.
How it works
- Host half
lib/index.js— awebServerprefix route/file-menuservingping,status,hello,menu,diag,clipboard,revealandopen.reveal/opentake{ path, base }, resolve absolute paths directly,~/...against the home directory and relative paths againstbase(the session workspace root), then act only on paths that exist. - Client half
lib/client.js— a capture-phasecontextmenuhandler plus a plain-DOM menu (no React dependency), withpointerdown+elementFromPointactivation so an upstreamstopPropagationcannot swallow the click. cordis.patch.yml— the single bundle row that registers the host half. The client bundle is served automatically because the host entry declaresdsh.client.
Maintainer notes — HMR pitfalls, event-swallowing, debugging without a browser console — are in docs/DEVELOPMENT.md.
License
MIT
Links
More in this category
zhu1090093659/dsh-web#packages/dsh-task-board★ 8405
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★ 8405
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★ 4088
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 4076
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★ 4009
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★ 1423
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.