← Back to home

paul-xing

dsh-paperclip-upload

Paperclip upload button for the DeepSeek Harness Web UI: upload a desktop file into the session workspace uploads/ directory, insert a πŸ“„ filename into the composer.

Stars
0
Language
JavaScript
Created
Aug 15, 2026
Updated
Aug 15, 2026

Introduction

dsh-paperclip-upload

A paperclip upload button for the DeepSeek Harness (DSH) Web UI. Click it, pick a file from your desktop, and it is uploaded into the current session's workspace uploads/ directory. The filename (with a πŸ“„ icon) is inserted into the composer so the agent can find and read the file.

Features

  • Paperclip button sits right next to the "full access" permission selector in the composer tool row.
  • Uploads any file (text or binary) up to 25 MB into the workspace uploads/ directory.
  • On success the composer draft shows πŸ“„ <filename> β€” send it and the agent can read the uploaded file.
  • Permanent plugin: installs into the web profile, survives restarts of dsh web.

Install

dsh plugin --profile web add https://github.com/paul-xing/dsh-paperclip-upload/archive/refs/tags/v1.0.0.tar.gz

Restart dsh web after installation. The button appears next to the permission selector in the composer.

Usage

  1. Click the paperclip button.
  2. Pick a file from your computer.
  3. The file is written to <workspace>/uploads/<filename> and the composer draft shows πŸ“„ <filename>.
  4. Send the message β€” the agent can locate and read the file.

How it works

  • Client half (lib/client.js): registers into the conversation.input.left slot (right of the permission selector), reads the chosen file as base64, and POSTs it to the Host endpoint.
  • Host half (lib/index.js): registers an HTTP endpoint POST /api/pcup-upload via the webServer service (inject: ['webServer']), decodes the base64 with python3 through the shell service, and writes the file into the session workspace.

Configuration

No configuration required. Upload size is capped at 25 MB (enforced both client- and host-side).

Development

The built files under lib/ are committed so profile installation does not require a build step. Local development mirrors the DSH harness checkout; the plugin directory's node_modules links to the harness's packages.

License

MIT