- Inicio
- Plugins
- Mejoras de UI
- dsh-file-menu
dsh-file-menu
dreammaker2016/dsh-file-menu
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.
Instalar
dsh plugin --profile web add github:dreammaker2016/dsh-file-menuREADME
dsh-file-menu
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
Plugins relacionados
dsh-web (dsh-task-board)
zhu1090093659/dsh-web
dsh-web (dsh-web-all)
zhu1090093659/dsh-web
dsh-web-ui (dsh-task-board)
zhu1090093659/dsh-web-ui
dsh-web-ui (dsh-web-ui-all)
zhu1090093659/dsh-web-ui