โ† Back to home@a903067276-rgb

dsh-file-mentions

Clickable file paths in DSH replies: Codex-style inline open, ๐Ÿ“‚ reveal in file manager, mentioned-files chip list. DSH web plugin (zero-dependency).

Stars
14
Language
JavaScript
Created
Aug 14, 2026
Updated
Sep 15, 2026
GitHub repo

Introduction

dsh-file-mentions ๐Ÿ“Ž

English | ็ฎ€ไฝ“ไธญๆ–‡

License: MIT

Awesome DSH Plugin

Clickable file paths in DSH replies โ€” a DeepSeek Harness (DSH) web plugin with a Codex-style experience.

Unofficial project: independently developed and maintained by a community member, not an official DeepSeek product.

Screenshot

dsh-file-mentions in action

Inline paths wrapped in backticks (`~/...`, absolute, relative, or Chinese paths) become click-to-open; each clickable path carries a small folder-icon button that reveals the file in your file manager; a "๐Ÿ“Ž mentioned files" chip list at the turn tail covers the rest. URLs are already auto-linked by the official renderer, so this plugin leaves them alone.

External-drive whitelist settings

The external-drive whitelist (Settings โ†’ Plugins โ†’ file-mentions): local files in your home directory are clickable by default; only external drives / network volumes (e.g. /Volumes/USB) need their root added here โ€” one path per line. System-disk marker directories (/System, /etc) are rejected automatically.

Features

WhereWhatEffect
Inline path textclickOpen with default app / open directory
folder icon after inline pathclickReveal in file manager
"๐Ÿ“Ž mentioned files" chipclick namePreview content inside DSH
folder icon in the chip listclickReveal in file manager
Inline URLclickBrowser opens it (official autolink)

Supports ~/ expansion, relative paths (resolved against the session cwd), and absolute paths in macOS / Linux / Windows forms. Non-existent paths silently do nothing.

Install

This repository is an official bundle plugin (dsh.bundle + dsh.client in the root package.json), installed through the official profile manager:

dsh plugin --profile web add "github:a903067276-rgb/dsh-file-mentions#main"

Then restart dsh web (bundle layers are composed at startup; HMR does not apply). Requires pnpm on PATH (dsh plugin forwards to pnpm).

Manual mount fallback: see docs/install.md.

Usage

Have the agent wrap paths in backticks (e.g. `~/docs/plan.md`) to make them clickable inline. The tail chip list appears automatically โ€” no configuration.

Paths outside the session directory (external drives, etc.)

Local files inside your home directory (e.g. ~/Downloads, ~/Desktop) are clickable by default โ€” no configuration needed. For paths on an external drive / network volume (e.g. /Volumes/USB), add that root to the external-drive whitelist in Settings โ†’ Plugins โ†’ file-mentions (one path per line). Saving takes effect immediately โ€” no restart required.

System-disk protection: whitelist roots containing system marker directories (/System, /etc, or \Windows on Windows) are rejected automatically, so a full system disk mounted externally can never be whitelisted by mistake.

Platform support

PlatformStatus
macOSโœ… Fully tested (incl. Chinese paths)
Linuxโš ๏ธ Not tested โ€” expected to work (command branching and path parsing implemented)
Windowsโš ๏ธ Not tested โ€” expected to work (command branching and path parsing implemented)

Requirements

  • DSH web >= 0.1.0-rc.6 (run with npx @deepseek-ai/dsh web)
  • Version compatibility (best effort โ€” the settings card uses dual-field key+id registration to satisfy both rc.6 (id) and rc.7+ (key); verified locally on rc.6/rc.8/0.1.1-rc.2/0.1.2-alpha.2/0.1.5-rc.1 (clickable paths + "mentioned files" panel), not guaranteed on every DSH version):
    • DSH 0.1.0-rc.6 and newer (incl. 0.1.1-rc.1/rc.2 and 0.1.2): try main (default).
    • DSH 0.1.5-rc.1: load-verified (the plugin is in the client bundle and /api/file-mentions/check responds); UI interactions were not eyeballed item by item. โš ๏ธ 0.1.5 ships a narrow built-in "clickable inline-code paths in the closing reply" (only files written via write/edit/present in that turn โ€” see dsh-client-ui-deliverables), which partially overlaps; plain-text/bare paths, cross-turn and historical messages are still handled only by this plugin.
    • Conservative fallbacks (the last pre-0.1.1 build): DSH 0.1.0-rc.7/rc.8 โ†’ v1.0.8 (dsh plugin add github:a903067276-rgb/dsh-file-mentions#v1.0.8); DSH 0.1.0-rc.6 โ†’ frozen rc6-compat tag (no maintenance).
  • Pure Node stdlib implementation โ€” peer dependencies (@deepseek-ai/dsh-settings, @deepseek-ai/schemastery) are provided by the host
  • Opening files uses the system default app / file manager (per-platform command branching)
  • Maintenance policy: this plugin keeps evolving with the latest DSH releases; compatibility with older DSH versions is best-effort only and not guaranteed going forward.

How it works

  • Host (lib/index.js): three routes โ€” /api/file-mentions/check (existence check), /api/file-mentions/open (system open, mode: open/reveal, per-platform command) and /api/file-mentions/config (whitelist read/write for the settings page). All three routes are same-origin guarded. Probe surface: absolute/~/ paths are checked only inside the session cwd or user-declared whitelist roots (stored via the official settings service โ€” immediate effect, no restart); whitelist roots are protected against system disks and symlink escapes. Pure Node stdlib; execFile avoids shell injection.
  • Client (lib/client.js): a conversationEvents collector extracts paths from each reply โ†’ publishes them to turn data โ†’ the tail list filters non-existent paths before rendering; inline clicks use a document-level click delegation (the official render entry is occupied by the official "deliverables" plugin, so DOM delegation is the only viable path); inline folder-icon buttons are inserted by a MutationObserver and restored automatically after React re-renders; a settings card (sidebar section + plugin page) edits the whitelist. Scanning/decoration is incremental: the observer callback only handles newly-added nodes inside the official message area ([data-conversation-scroll]), each new text is cheap-screened for path-like characters (no /, ~ or \ โ†’ skipped with zero regex work and zero requests), and existence checks hit only the current session โ€” conversations without paths trigger no scanning at all; sidebars, hover cards, menus and settings are never touched (v1.0.13).

See docs/architecture.md.

Notes

  • Use either the official bundle install or the manual mount โ€” never both.
  • Manual mounting needs a single entry in ~/.dsh/cordis.patch.yml; a double entry applies the plugin twice and crashes on duplicate route registration.

Compatibility notes

  • Inline clicks rely on backtick-wrapped paths (the agent-output convention, same as Codex); bare paths inside message text are clickable too (decoration is CSS-Highlight only, zero DOM mutation; message area only โ€” sidebars, hover cards, menus and settings are never touched, v1.0.13).
  • The official "produced files" list and this plugin coexist: official wins when it has output, otherwise this plugin shows.
  • Windows / Linux validation via issue or PR is welcome.

License

MIT