Preface¶
DeepSeek Harness (dsh) runs tools locally: reading files, modifying code, executing commands all use real paths from the operating system. The web interface follows a different set of rules though. For security reasons, browsers almost never pass the real filesystem path of a dragged file to a webpage. At best they provide a local file URI, and often they provide nothing at all. The result is that when you drag a PDF, source code directory, or configuration file into an input box, one of three things happens: it gets treated as an upload (creating a copy cut off from its adjacent dependencies), you get a prompt like “Only PNG, JPG, WebP, GIF are supported”, or you have to manually type out a long absolute path.
dsh’s design slogan is “Everything is a plugin”. Models and tools can be swapped out, and the Web UI’s interactions can be extended too. The dsh-drag-and-drop in the community directory fills this gap: drag files or folders anywhere on the page, and the plugin resolves their paths on the machine running dsh, then attaches them above the input box as removable chips.
First, a clear note: what is introduced below is a community plugin listed in the DeepSeek Harness Plugin Repository. This site is an independent directory with no official affiliation to DeepSeek / HoYoverse, and is not an official app store. This article cross-checks information from the repository’s detail page, the GitHub repo’s README / package.json / CHANGELOG, and the official DeepSeek Harness repository.
What It Is¶
dsh-drag-and-drop is a UI enhancement plugin maintained by akiracod, with the current release version v0.2.0 (CHANGELOG dated 2026-08-14). The primary language of the repository is TypeScript, and the license is BSD-3-Clause. The GitHub repo currently shows 2 stars; the community directory page shows 1 star at the time of listing.
It solves a very specific problem: when dragging local files or folders into the DSH Web UI, you get the original absolute path instead of an uploaded copy. Documents and folders appear as removable chips above the input box, keeping the input box itself blank for continued typing; you can also directly click the send button in the chip bar to send the paths without typing anything else.
The repo’s README states that this is a maintained fork of omdsh-dev/dsh-drag-and-drop (formerly bill9109/dsh-drag-and-drop). The package name in package.json is still @omdsh-dev/dsh-drag-and-drop, which is what you need to use when uninstalling it.
Core Features¶
Drop to Attach Paths, No File Uploads¶
Drag files anywhere onto the Web UI. A full-page dimmed and blurred prompt will appear during the drag. After releasing, each item becomes a chip in the file bar above the input box: hover over it to see the full resolved path, and click the × to remove it. Multiple files or folders can be dragged in at once.
The plugin will never upload, copy, move, modify, or delete files. Files remain in their original directories. Drafts are written via DSH’s input state service, rather than directly modifying the input box DOM.
Documents Use Chips, Images Use Native Behavior¶
The main changes in v0.2.0 relative to the upstream repository are in interactions, not positioning algorithms:
- Documents and folders are displayed as chips instead of stuffing path text like C:\...\file.docx into the input box.
- The chip bar includes a built-in “Send” button, and the resolved paths will automatically be included in the outgoing message.
- Dragging in documents will no longer trigger the input box’s “Only PNG, JPG, WebP, GIF are supported” prompt.
- Pure image drag-and-drop still follows native logic, displaying thumbnail attachments.
Recover Files Locally When the Browser Hides Paths¶
If the browser provides a local file URI, the plugin directly converts it to the native path for the current system, covering POSIX, Windows drive letters, and UNC network paths.
If the browser completely hides the path, the positioning sequence is:
1. Current Workspace
2. Other registered Workspaces
3. Desktop, Documents, Downloads
4. Operating system file index
5. Platform-specific bounded directory search
System indexing varies by platform: macOS uses Spotlight; Linux prioritizes plocate, then locate; Windows prioritizes Everything CLI, then PowerShell. When no indexing results are found, Linux will also search the user’s home directory and mount points under /mnt and /media; Windows will search the user directory and available fixed disks.
There are limits to the search: a single external indexing command times out after 3 seconds, up to 100 candidates are retained, and each root directory traverses up to 20,000 directory entries at maximum. Unreadable directories and files are skipped directly.
For files with the same name, they are first filtered by full filename and size, with modification time only used for sorting. If only one candidate remains, file content is not read; if multiple candidates exist, sampled fingerprints at the start, middle, and end are compared. If there is still a conflict for large files, a full SHA-256 hash is calculated. When files are completely identical and cannot be automatically distinguished, a path list will pop up for the user to select. Folders are matched by name, and if their structures are identical, content sampling is performed on up to 24 deterministically selected files. Directory traversal is limited to 10,000 items and 32 levels, and symbolic links or Windows junctions are not followed.
Installation and Activation¶
The installation command given on the community directory page is:
dsh plugin add github:akiracod/dsh-drag-and-drop
This is a Web UI plugin. The repository README requires it to be installed into the web profile, and states that package.json includes both dsh.bundle and dsh.client, so no modifications to DSH source code are needed, and it no longer reads the old config.yaml:
dsh plugin --profile web add github:AKIRACOD/dsh-drag-and-drop
For local checkout, you can use:
dsh plugin --profile web add /path/to/dsh-drag-and-drop
The repository has committed the lib/ build artifacts, so no additional building is needed after installation. package.json requires Node.js ^20.0.0 || >=22.0.0.
For a reproducible installation, pin the commit hash per the directory page instructions:
dsh plugin add github:akiracod/dsh-drag-and-drop#commit
Replace commit with the actual commit hash.
After installation, restart DSH Web UI in your usual way, then refresh your browser. The plugin will appear in the browser bootstrapper __DSH_BOOT__, and the client bundle will load with the page. If you only install without restarting, the plugin will not take effect on the page.
To upgrade:
dsh plugin --profile web update github:AKIRACOD/dsh-drag-and-drop
To uninstall, use the package name instead of the GitHub path:
dsh plugin --profile web remove @omdsh-dev/dsh-drag-and-drop
After uninstallation, you also need to restart the Web UI and perform a hard refresh of the browser.
Both the directory page and the repository remind users that the plugin runs with the permissions of the current dsh process, and may execute code during installation. You should inspect the source repository and license before installing.
Typical Usage¶
The operation steps in the repository’s README can be followed exactly:
1. Drag files or folders from Finder, Linux file manager, or Windows File Explorer to any position on the DSH Web UI.
2. Release the mouse only after the full-page drag prompt appears. Each item will become a chip in the file bar above the input box.
3. Hover over the chips to view the full path, and click × to remove unwanted items.
4. To send just these files, click the “Send” button on the file bar; if you have also written text, press Enter or click the native send button in the bottom right corner, and the paths will be included automatically.
Pure images still follow native attachment behavior. Documents and folders use the chip bar.
If there is no response after dragging, the README recommends first confirming whether the full-page prompt appeared, then checking if the bundle is in the web profile with the following command, and confirming that you have restarted the Web UI and performed a hard refresh:
dsh --profile web --dump-config | grep drag-and-drop
When locating files on large disks is slow, install plocate on Linux, install Everything and its command-line tools on Windows, and try to place files in Workspaces or commonly used directories. On macOS/Linux, when the browser hides paths, folders outside all searchable roots may fail to be located, and you need to move them into a Workspace or install system indexing tools.
Applicable Scenarios and Notes¶
This is suitable for users who are already using the DSH Web UI and need to send local documents, source code directories, or configuration files to the agent. Typical scenarios include: files are already in your Workspace or Desktop/Documents/Downloads directory, and you want the agent to read the original path instead of an uploaded copy.
A few points to note:
- This is a Web UI plugin that must be installed into the web profile. After installation, you must restart the Web UI and refresh your browser.
- The plugin runs with the permissions of the current dsh process. Read the source code and BSD-3-Clause license before installing; the community directory is not an official DeepSeek store.
- In most cases, only metadata is read. Only when there are multiple candidates with the same name and size will a small amount of content be read for fingerprinting, and only if sampling still fails to distinguish will the complete file be read to calculate the SHA-256 hash. All operations take place locally on the machine running dsh.
- The uninstall command is remove @omdsh-dev/dsh-drag-and-drop, as the fork still uses the upstream package name.
- The old README’s pnpm --filter @deepseek-ai/dsh add ... plus config.yaml process is outdated and should no longer be used.
Summary¶
dsh-drag-and-drop bridges browser drag-and-drop with the real paths required by DSH: documents become chips above the input box, images still follow native attachment behavior, and files remain in their original directories. The current version is v0.2.0, maintained by akiracod, licensed under BSD-3-Clause.
Repository detail page: https://deepseek-harness-plugin.com/en-US/plugins/dsh-drag-and-drop-akiracod/
GitHub repository: https://github.com/akiracod/dsh-drag-and-drop