New:Microsoft Teams Notifications Are Now Available in Socket.Learn more →
Get Started

dsh-pathlink

Package Overview
Dependencies
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

dsh-pathlink

Ctrl+click file paths and links in DeepSeek Harness chat (paths open their folder), and drop or paste any file to get its path inserted in the composer.

latest
Source
npmnpm
Version
0.2.0
Version published
Weekly downloads
109
-38.42%
Maintainers
1
Weekly downloads
 
Created
Source

English · 中文

Ctrl+click file paths and links in DeepSeek Harness chat; drop a file to get its path.

Recognizes file paths and URLs in rendered chat messages (assistant replies, user bubbles, code blocks, tool cards), marks them with a subtle dotted underline, and opens them with Ctrl+click (⌘ on macOS):

  • Path → containing folder — the file's folder opens in the OS file manager with the file selected (Windows explorer /select, macOS open -R, Linux xdg-open on the parent directory). A path that names a directory opens the directory itself.
  • Link → new browser tab — covers bare URLs the renderer did not linkify (e.g. in user bubbles); markdown links already open in new tabs natively.

Drop or paste any file → its path lands in the composer (images keep the built-in attachment flow):

  • the file exists on this machine → its real path is inserted (e.g. D:\proj\src\a.ts);
  • it cannot be located (USB stick, network drive, unregistered folder) → a copy is saved under %TEMP%\dsh-drops\ and that path is inserted, with a notice saying so;
  • no full-screen "drop images here" overlay and no "images only" rejection — the path just appears where the caret was.

Plain clicks stay inert, so text selection and copy are never disturbed. When a path does not exist, a small toast explains why instead of failing silently.

ctrl+click tooltip

recognized path in chat

① Hovering a path shows the Ctrl+click hint — Ctrl+click opens the containing folder with the file selected · ② The recognized path in a real conversation (dotted underline).

Install

dsh plugin --profile web add dsh-pathlink

or via GitHub:

dsh plugin --profile web add github:penguin-oo/dsh-pathlink

Restart the web GUI afterwards. Requires the web profile (a browser is the only surface that can receive the click).

Usage

  • Wait for a settled message that mentions a path or a link — recognized tokens get a dotted underline.
  • Hold Ctrl (or ⌘ on macOS) and click.
    • Path → folder opens in Explorer/Finder with the file selected.
    • Link → opens in a new browser tab.
  • Relative paths resolve against the session's workspace directory first, then the harness working directory; missing paths show a toast.
  • Drop any file onto the composer (or paste a file from the clipboard): its path is inserted at the caret.

Config

KeyDefaultMeaning
maxPathChars1024Longest accepted path text, in characters
dropRoots[]Extra search roots for a dropped file (tried first)
dropMaxDepth6Recursion cap for one locate scan
dropBudgetMs2500Time budget for one locate scan
dropLimit10Matches collected per root
dropDir''Where an unlocatable drop is copied; '' = %TEMP%\dsh-drops

Search order: dropRoots → the harness's own workspace list (harvested) → process cwd / Desktop / Downloads / Documents. Debug endpoint: GET /pathlink/drop/state.

How it works

  • Client half (dsh.client, platform web): a MutationObserver-driven scanner watches the rendered conversation containers (data-chat-flow / data-conversation-scroll), recognizes paths and URLs in text nodes, wraps matches in inert inline spans, and handles one delegated capture-phase click listener. The official chatFileMentions seam is deliberately not used so the plugin never conflicts with the built-in deliverables provider and covers every surface uniformly.
  • Host half (pathlink Remote service): one read-only open method that resolves relative paths against the addressed session's working directory, verifies existence, and launches the platform file manager. No durable state; it never creates or resumes an Agent or Session.

Development

npm install
npm run build   # bundle src/client → lib/client.js
npm run smoke   # Remote markers + Typert manifest validation
node scripts/e2e-synthetic.mjs   # browser E2E against http://127.0.0.1:3738

docs/demo.html is built with node scripts/build-demo.mjs (reuses the production recognizer) and screenshotted by node scripts/e2e-screenshot.mjs.

Limitations

  • Web GUI only (the click surface is a browser); the host opener covers Windows / macOS / Linux.
  • Path recognition is heuristic: CJK directory names survive, but a path whose final segment is a bare English word (no extension) followed directly by prose may occasionally be over-matched — the existence check then shows the not-found toast instead of opening anything wrong.

License

MIT

Acknowledgements

Built for the DeepSeek Harness plugin ecosystem — thanks to the community on LINUX DO for feedback and testing.

Keywords

dsh

FAQs

Package last updated on 25 Sep 2026

Related posts