Foreword

The native attachment handling of DeepSeek Harness (DSH) is limited in terms of interaction. The lack of drag-and-drop, pasting, and intuitive file card management can significantly reduce efficiency for agent developers who need frequent file interactions. dsh-files-native addresses this by providing a near-native attachment upload experience on top of the official input box.

Core Features

The plugin extends the official input box’s attachment track and supports multiple file input methods:
1. Drag-and-drop, paste (Ctrl+V), and paperclip-based multi-file selection.
2. Mixed image thumbnails and file cards on the same official input box track.
3. Uses a loopback upload mechanism; artifact cards are handed off to DSH for official handling.
4. File cards render above the user bubble, right-aligned in the same column as images.

Install and Enable

Run the following commands to install and configure globally:

npm i -g dsh-files-native
dsh plugin --profile web add dsh-files-native

After installation, you need to completely restart the dsh web process.

Typical Usage

  1. Drag a file into any location in the window and release to add it.
  2. Paste files using Ctrl+V.
  3. Use the paperclip in the input box to select multiple files.
  4. Press Esc to cancel the current drop.

Limitations and Constraints

  • File limits: Single file limit of 50MB, batch limit of 20 files.
  • Upload routing: Only loopback routing is supported.
  • Refresh behavior: Refreshing the page will lose “uploaded but not sent” file cards (but files on disk remain in the .dsh-uploads/ directory).
  • Plugin mutual exclusion: Do not install alongside dsh-file-fix / dsh-file-upload / dsh-paste-to-path.
  • Development constraints: Do not call useSession / useInput on the rendering path; do not attach a MutationObserver to the chat timeline.
  • Compatibility: Compatible with DSH 0.1.5-rc.1 / 0.1.5-rc.2 and later versions.

Ecosystem Background

The DSH plugin ecosystem follows the “everything is a plugin” philosophy. dsh-files-native is maintained by community developer meyaomiao and follows the MIT license.