my-image-drop
A DeepSeek Harness plugin that turns drag-and-drop of images into file paths in the composer, so text-only models can read them with the read tool (or a vision skill) instead of failing image admission.
How it works
- Host half (
dsh/index.js): registers a loopback route POST /my-image-drop. It accepts an image, magic-byte checks and size-caps it (25 MB), writes it as a private (0600) temp file under <tmpdir>/my-image-drop, and returns { "path": "..." }.
- Browser half (
dsh/client.js): a capture-phase drop listener (plus dragenter/dragover to enable dropping). On a drop that carries image files, it uploads each to /my-image-drop and inserts the returned path into the focused composer as plain text. It also dispatches a synthetic dragend so the composer's drop overlay dismisses.
The composer shows a file path in the input box. Send it and the model gets a path — the primary trigger for the read tool and vision skills.
Install
From the GitHub source (git install runs prepare; no build needed, the entry is committed):
dsh plugin add github:<owner>/my-image-drop
Or add the bundle to your profile:
{
"dsh": { "profile": { "bundles": ["my-image-drop"] } }
}
Scope
This plugin handles drag-and-drop only. Paste is intentionally left to whatever else is installed (e.g. @liustack/modlens) so the two never double-handle the same event. If you run modlens' own drop patch and this plugin at the same time, both would insert a path — pick one.
Files
package.json — manifest; declares dsh.bundle.patch and the browser bundle (dsh.client).
cordis.patch.yml — host mount layer.
dsh/index.js — host half (route).
dsh/client.js — browser half (drag/drop listeners).
Testing (author)
node --check dsh/index.js — syntax check the host half.
node --check dsh/client.js — syntax check the browser half.
- Install into a web profile, restart the desktop app, drag an image into the composer, and confirm a file path is inserted and the
read tool can open it.