Preface¶
DeepSeek Harness (abbreviated as DSH or dsh) is an Agent runtime open-sourced by DeepSeek AI. Its core design principle is “everything is a plugin”: model adapters, tools, sessions, and interfaces can all be added or removed via plugins. The official repository is still in developer preview and is undergoing rapid iterations. There is an independent community plugin directory site for searching and looking up installation commands; it has no official affiliation with DeepSeek / HyperMind and should not be treated as an official app store.
A very specific friction when using dsh web daily is: screenshots, local images, or entire folders are often already in the clipboard or File Explorer, but the browser page cannot obtain reliable local absolute paths, so the model cannot read the files. Typing the path manually into the input box works, or copying it to the workspace and then @-ing it also works, but both steps are somewhat roundabout.
dsh-paste-input addresses this exact pain point: in the WebUI, use Ctrl+V, drag-and-drop across the entire page, or select files via the paperclip button to collect content as attachments; when sending, copy them to a temporary directory in the current session workspace, then write the absolute path into the message for the model. This article is organized after cross-checking against the community directory page, the GitHub repository README / package.json / LICENSE, and the official DeepSeek Harness repository.
What is this¶
dsh-paste-input is a UI enhancement plugin for the DSH WebUI, maintained by lhh010, with the npm package name @dsh-community/dsh-paste-input, current version 0.1.3. The repository README states that it is forked from dsh-external/dsh-multimedia-webui-input (MIT license). On top of drag-and-drop and file selection, it adds clipboard pasting, a first-use notification popup, and attachment folding in message bubbles.
The problem it solves can be summed up in one sentence: it lets files first enter the session workspace, then appear in the conversation as paths, rather than expecting the browser to directly expose local paths to the web page.
As of 2026-08-17, both the community directory page and the GitHub repository show 8 stars; the category of the plugin is “UI Enhancement”. Both the repository LICENSE and package.json specify the MIT license and retain the fork declaration for the upstream plugin. GitHub fails to automatically recognize the license per SPDX standards, so the repository and directory pages will display NOASSERTION; please refer to the LICENSE text in the repository as the authoritative source.
Core Features¶
The capabilities listed in the repository README are as follows.
- Ctrl+V Paste. Screenshots, copied images, and any files accessible via browser paste events will be added as attachments to the input box. The first paste will trigger a notification popup, where you can check “Do not show again” to save the preference in browser
localStorage. - Full-page Drag-and-drop. Dragging files or folders to any position on the page (chat area, blank space, input box) will add them as attachments. Dragging text or links will follow the default browser behavior and will not be intercepted by the plugin.
- Paperclip Selection. There is a paperclip button on the left side of the input box, which can be used to select files or folders.
- Delivered to Workspace on Send. Files will be copied to the
.dsh/tmp/attachments/directory under the current session workspace (with subdirectories per session), and the absolute path will be prepended to the message for the model. In the host source code, the session attachment root directory is constructed from the workspace path,.dsh/tmp/attachments, and the session directory name. The manifest file name is.dsh-paste-input.json. - Bubble Folded into File Chip. After sending, attachment text blocks marked with
==== DSH_PASTE_INPUT_V1 ====in the message will be folded into 📎 file chips. Any text you entered before and after the chip will be retained in their original order; hovering over the chip shows the full path, manifest, and file list, and clicking the chip copies the full path. Historical messages without this marker will not be folded. - Settings Panel. Provides attachment usage statistics, and cleanup options per session / workspace. Cleanup features ownership marker protection and requires a secondary confirmation.
The attachment block is visible to the model, and the format is hardcoded in the README as:
==== DSH_PASTE_INPUT_V1 ====
<absolute path to attachment root directory>
Files: N
Manifest: .dsh-paste-input.json
Attached files (paths are relative to the root above):
- "file.txt" (2.0 KiB)
==== END DSH_PASTE_INPUT ====
There is a blank line before and after the marker to avoid being squeezed together with user input.
The repository also documents the collaboration method with dsh-external/dsh-vision: this plugin only handles “getting files into the conversation”, while dsh-vision registers the view_image tool for image viewing. The two connect via the workspace attachment path and have no hard-coded coupling. You only need to install the latter separately when you need image recognition, and it is not a dependency of this plugin.
Installation and Activation¶
The installation command given on the community directory page is as follows, run it in the DeepSeek Harness terminal:
dsh plugin add github:lhh010/dsh-paste-input
For reproducible installations, the directory page recommends pinning the commit hash. The latest commit on the current repository main branch is 7cf0698af7bf7b5e20a3af040047664b92412f92 (2026-08-13), which can be written as:
dsh plugin add github:lhh010/dsh-paste-input#7cf0698af7bf7b5e20a3af040047664b92412f92
According to the official documentation, installing from GitHub uses the profile mechanism, and the full syntax is dsh plugin --profile <profile> add github:owner/repo. If your current terminal is already in the target profile, the short command from the directory page will work; otherwise, you should explicitly include the --profile flag, which is usually web for WebUI scenarios.
The repository README also provides an example of local link installation (modify the path according to your machine):
dsh plugin --profile web add link:E:\deepseek-harness\dsh-paste-input
And append the following content to ~/.dsh/profiles/web/cordis.patch.yml:
- insert:
- id: dsh-paste-input
name: '@dsh-community/dsh-paste-input'
Restart dsh web after making changes for the changes to take effect.
Both the directory page and the official installation documentation remind users of the same thing: the plugin runs with the permissions of the current dsh process, and may execute code during installation. Installing from GitHub pulls source code, and pnpm may also require granting permissions to build scripts such as prepare, which are not in the Agent sandbox. You should inspect the source code and license agreement yourself before installing, and do not make trust judgments solely based on the directory’s inclusion.
Typical Usage¶
The following steps are all from the repository README and can be reproduced in your environment.
Paste a Screenshot
1. Use your system screenshot tool (e.g. Win+Shift+S on Windows) to capture an image.
2. Return to the DSH WebUI and press Ctrl+V in the input box. You will see the notification popup for the first time.
3. After the attachment appears in the input area, add an explanatory note as needed, then send.
4. The file will be copied to the temporary attachment directory in the workspace, and the absolute path will be included in the message; the attachment block in the bubble will be folded into a chip.
Drag and Drop a Folder
Drag a folder to any position on the page to add the entire tree as attachments. The per-file limit is 1 GiB, the total per-send limit is 2 GiB, the maximum number of files is 10000, and the maximum directory depth is 64 levels. These limits are consistent between the README and the host source code’s DEFAULT_LIMITS.
When You Need to Preserve the Original Path
Do not rely on “copying files in File Explorer and then pasting”. Chrome / Edge paste events usually only provide media such as images and text / HTML; pasting after copying files from File Explorer often does not include file entries; Firefox supports pasting files, but similarly will not provide absolute paths. Browsers do not expose local paths to web pages for security reasons, and pasted results are always stored using the filename as the relative path. To use the original path, use drag-and-drop or the paperclip selection tool.
Collaborate with Image Recognition (Optional)
The workflow in the README is: Screenshot → Paste or drag into the chat → After sending, the file lands in the workspace → The model sees the path and calls view_image. This requires that you have already installed and enabled a viewing plugin such as dsh-vision; this plugin does not have a built-in visual model itself.
Compatibility and Boundaries¶
The README states compatibility with DSH snapshot0808 through snapshot0812 (including snapshots/20260812T172954Z-final), as well as the npm release @deepseek-ai/dsh@0.0.1-rc.5 (and maintains compatibility with 0.0.1-rc.2). The package.json uses a nested dsh.client declaration, with the platform set to web, and injects @deepseek-ai/dsh-client-runtime, dsh-client-ui-input-trigger, dsh-client-ui-conversation, and dsh-client-ui-settings. Version v0.1.3 has been updated to follow the final snapshot, migrating the client service name from slash to inputTriggers, and the host-side service from httpServer to webServer.
This is a WebUI plugin, not a terminal TUI plugin. It does not turn files into native multi-modal attachments for the model, but instead places files in the workspace and lets the Agent read them via the path. What can be read depends on which tool plugins you have installed, not what this plugin guarantees on its own.
DeepSeek Harness is still rapidly iterating on its APIs. The README devotes significant space to documenting changes to the loading mechanism and metadata fields between 0809 and 0812; if the plugin disappears from the boot manifest after upgrading DSH, you should return to the repository to verify the current dsh.client declaration, rather than assuming that the behavior from older snapshots still applies.
Applicable Scenarios and Notes¶
It is well-suited for these use cases:
- Pasting error screenshots, UI screenshots into the current session to let the model process them via the workspace path
- Dragging in logs, patches, or small project directories to avoid manually copying paths
- Needing to fold lengthy attachment blocks into chips in the chat bubbles while retaining explanatory text before and after
Before using, we recommend reviewing these limitations:
- The plugin runs with the same permissions as dsh, and can read and write the current workspace. Open the GitHub repository to view the source code and LICENSE before installing.
- The community directory is only a search portal, and inclusion does not equal security audit.
- “Copying files and pasting” in Chrome / Edge is often ineffective; prioritize drag-and-drop or file selection.
- Attachments will occupy workspace disk space; you can use the cleanup feature in the settings for unnecessary sessions, and remember to confirm twice.
- There are hard limits on volume and quantity; extremely large repositories or directories with tens of thousands of files are not suitable for this input method.
Summary¶
dsh-paste-input connects the three most common file entry points in the WebUI — paste, drag-and-drop, and selection — to the session workspace, then passes the absolute path to the model. It does not replace visual plugins, nor does it extend the model’s native attachment types; it only fills in the gap of “how files get into the conversation”.
Community Directory: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-paste-input/
GitHub: https://github.com/lhh010/dsh-paste-input