← Back to home@wertyq111

dsh-paste-preview

DeepSeek Harness (dsh) web plugin: paste images with thumbnail previews, reroute them as file attachments for text-only models, zoomable thumbnails in sent messages

Stars
1
Language
TypeScript
Created
Sep 17, 2026
Updated
Sep 17, 2026

Introduction

dsh-paste-preview

简体中文

A DeepSeek Harness (dsh) web plugin that makes pasted images usable with text-only models, without losing the visual preview.

What it does

  • Paste → thumbnail. Pasting an image into the composer shows a thumbnail in the attachment rail (click to zoom) instead of inserting a file path.
  • Text-only models still get the image. When the selected model does not accept image input, the image is re-wrapped as a plain file attachment. dsh stores it and hands the model a read-only path, so tools such as modlens_read_image can read it. Vision-capable models keep dsh's native image path.
  • Thumbnails in sent messages. Images that went through the file path render as zoomable thumbnails in the conversation history, including after a reload.
  • Drag-and-drop and images added from the file picker are rerouted the same way.

Install

dsh plugin add dsh-paste-preview

Restart dsh afterwards.

Using it together with @liustack/modlens

modlens has its own paste-to-path feature that intercepts pastes first. Turn it off in your profile's cordis.patch.yml:

- id: modlens
  config:
    pasteToPath: false

This is not shipped in the plugin's own patch on purpose: a patch that targets a missing entry id makes dsh fail at startup for anyone without modlens.

How it decides

The browser asks GET /dsh-paste-preview/verdict?model=<selector label>. The host answers takeover: true only when every model whose name or id appears in the label declares text-only input. modlens' own "(modlens vision)" wrappers are ignored so they cannot veto the model they wrap. Unknown or unresolvable models answer false, which keeps the native behaviour.

HTTP routes

RoutePurpose
GET /dsh-paste-preview/verdictWhether pastes for the current model should be rerouted
GET /dsh-paste-preview/fileReads back a stored image attachment for thumbnails (sha256 id, png/jpg/webp/gif only, ≤ 32 MB)
GET /dsh-paste-preview/debugLists providers, models and their input modalities

All routes go through dsh's connection.requestRejection check and answer 401 to unauthenticated requests. Stored files are read through the dsh attachment store, which re-verifies the name, size and digest.

Limitations

  • Sent-message thumbnails are attached to dsh's built-in file cards, which expose no public slot. The attachment reference is read from the rendered component's props. If a future dsh release changes that structure, the plain file card is shown instead; nothing breaks.
  • Right after sending, before the message is persisted, the plain card may show briefly.

Development

pnpm install
pnpm test

License

MIT