Turns each produced-file chip into a per-file menu: open the file, copy its path, reveal it in the native file browser, or open a terminal cd-ed into its directory.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:yumm007/dsh-reveal-files
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
A dual-face DeepSeek Harness plugin that makes each produced-file chip in the 「产物」/ "Produces" row (the row of file chips under assistant messages) open a small dropdown menu with per-file actions: open the file, copy its path, reveal it in your native file browser, or open a terminal cd'ed into the file's directory.
Features
- Each produced file chip opens a compact dropdown menu on click — no
accidental direct opens, one menu per file:
- 📂 Open — open with the default application (the original behavior).
- 📋 Copy file path — copy the absolute path to the system clipboard.
- 📁 Show in file browser — macOS Finder (
open -R, selects the file), Linux file manager (xdg-openon the parent folder), Windows Explorer (explorer /select,). - ⌨️ Open the file's directory in terminal — opens a native terminal
frontmost, cd'ed into the file's parent directory for further work:
Terminal.app on macOS,
x-terminal-emulator/gnome-terminal/konsoleon Linux, orcmdon Windows. Every trigger opens a fresh window (each action gets its own terminal, no extra permissions needed).
- Menu labels follow the UI locale (Simplified Chinese / English); the menu
items carry
role="menuitem"and the chips exposearia-haspopup/aria-expanded. - Relative paths are resolved against the session working directory.
- Errors (e.g. sandbox denial, unsupported platform) surface inside the open menu, which stays open while an action is in flight (items disabled).
- Zero runtime dependencies beyond the harness itself — Host uses only
node:child_process; the client uses only the platform'sreactseed.
Requirements
- DeepSeek Harness Web (profile
web), i.e.dsh web. - Node.js
>= 22.6.0. - A desktop environment the native opener can reach (macOS and Windows always; Linux needs a display server or WSL).
Installation
# Install from GitHub (pnpm git spec; #main pins the default branch):
dsh plugin --profile web add github:yumm007/dsh-reveal-files#main
Building from source. GitHub installs build the package during install; pnpm asks once for an
allowBuildsgrant, then proceeds. If it does (or if the build is blocked), add the package toallowBuildsin your profile'spnpm-workspace.yamland re-run the command. A prebuilt npm release skips this step entirely.
dsh plugin forwards the arguments to pnpm inside the profile directory and
then reconciles dsh.profile.bundles. Because the package declares
dsh.bundle.patch, it joins the profile layer stack automatically — no manual
editing of cordis.yml is required.
After installation, restart the web profile:
dsh web
The plugin loads as a bundle on boot: the Host half registers the
POST /api/reveal-files and POST /api/show-in-terminal routes and the
client half mounts the drop-down menu in the produced-files row.
Usage
- Let the assistant produce one or more files (any
write/edit/ mutation tool result in a turn). - Under that message, find the produced-files row (「产物」 in Chinese, "Produces" in English) with the file chips.
- Click a file chip — a small menu opens with Open / Copy file path / Show in file browser / Open the file's directory in terminal; pick one. The menu closes on selection or on an outside click.
- If an action fails, the error appears inside the menu in red; the items stay disabled while the action is running.
Configuration
The plugin row in cordis.patch.yml accepts:
- insert:
- id: dsh-reveal-files
name: 'dsh-reveal-files'
config:
enabled: true # register the reveal route (default true)
revealTimeoutMs: 10000 # per-command timeout, ms (default 10000)
Override these in the profile's own cordis.patch.yml if you need to.
How it works
| Layer | File | Responsibility |
|---|---|---|
| Host | lib/index.js |
Cordis plugin row dsh-reveal-files (injects webServer and sessions) and registers POST /api/reveal-files (reveal) and POST /api/show-in-terminal (frontmost terminal cd). Runs open -R / xdg-open / explorer /select, and osascript / terminal emulators per platform, resolves relative paths against the session cwd, and returns JSON results. |
| Client | client/client.js |
Web module (window.__ModuleLoader__.load), registered by the harness client module system. Claims the conversation.chat.turnTail chain with priority: -1 and a select that reads the turn's deliverables data (the same vocabulary the built-in row uses), then renders the chips row plus the two icon buttons. |
Why priority: -1?
The turn-tail slot is a chain: entries are tried in ascending priority order
and the first non-null select result wins. The built-in produced-files row
registers at priority 0. Registering at -1 places this plugin's entry
first, so the reveal icon is rendered while keeping identical file-detection
behavior. Without the explicit priority, the two entries would tie at 0 and
the built-in row would silently win.
Uninstall
dsh plugin --profile web remove dsh-reveal-files
The reconcile step also drops the package from dsh.profile.bundles; restart
the web profile afterwards.
Development
For local development against a checkout, install it from disk and re-run
the add after each edit — the profile's dependency is a hard link, so the
installed code follows your working tree:
dsh plugin --profile web add file:/absolute/path/to/dsh-reveal-files
# after editing: dsh plugin --profile web add file:/absolute/path/to/dsh-reveal-files
# or force a reinstall: pnpm --dir ~/.dsh/profiles/web install --force
The web server serves the client bundle from disk with a rev-hashed URL, so a refresh picks up client changes; Host route changes require a restart.
Changelog
See CHANGELOG.md.
License
Links
More in this category
zhu1090093659/dsh-web#packages/dsh-task-board★ 8526
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★ 8526
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.
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 4281
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.
ccch1mneyyy/dsh-TUI★ 4199
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
omdsh-dev/DSH-better-sidebar★ 4062
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★ 1438
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.