DSH Plugin Store
โ† 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
0
Language
JavaScript
Created
Aug 14, 2026
Updated
Aug 14, 2026
Web UI
GitHub repo

Introduction

dsh-file-mentions ๐Ÿ“Ž

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

License: MIT

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

Inline paths wrapped in backticks (`~/...`, absolute, relative, or Chinese paths) become click-to-open; each clickable path carries a small ๐Ÿ“‚ 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.

Features

WhereWhatEffect
Inline path textclickOpen with default app / open directory
๐Ÿ“‚ after inline pathclickReveal in file manager (macOS Finder)
"๐Ÿ“Ž mentioned files" chipclick namePreview content inside DSH
๐Ÿ“‚ 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

Official bundle install (recommended)

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

Restart dsh web. Requires pnpm on PATH (dsh plugin forwards to pnpm).

Manual mount (fallback)

See docs/install.md: symlink into ~/.dsh/profiles/web/node_modules/ plus a single entry in ~/.dsh/cordis.patch.yml (a double entry makes the plugin apply twice and crash on duplicate route registration), then restart.

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.

Platform support

PlatformStatus
macOSโœ… fully tested (incl. Chinese paths)
Linux / Windowsโš ๏ธ not tested; expected to work (command branching and path parsing implemented)

How it works

  • Host (lib/index.js): two routes โ€” /api/file-mentions/check (existence check) and /api/file-mentions/open (system open, mode: open/reveal, per-platform command). 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 ๐Ÿ“‚ buttons are inserted by a MutationObserver and restored automatically after React re-renders.

See docs/architecture.md.

Compatibility notes

  • Inline clicks rely on backtick-wrapped paths (the agent-output convention, same as Codex); bare paths in prose are intentionally not clickable.
  • 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