Skip to content
dsh.fish
Bundle

@zivye/dsh-img-save

Hover-to-download buttons for images in DeepSeek Harness conversations.

Source
Yezery
License
MIT
Updated
Updated 7 hours ago

Readme

# DSH Image Download Plugin

Adds a download button when the pointer is over an image in a DeepSeek Harness conversation.

<img src="./doc/example.png" alt="example" width="250" style="display: block; margin: auto;">

## Install

Install the plugin through the DeepSeek Harness client or 1024 Store by
searching for the npm package name:

```text
@zivye/dsh-img-save
```

Until the package is published to npm, the catalog lists this plugin
browse-only; the install command appears automatically once the npm
package is detected. The plugin itself ships under the name
`dsh-img-save` in the Web profile roster (see `cordis.patch.yml`).

## Design

- **Client-only behavior:** the plugin uses the exact image URL that DSH is already rendering. It does not read local files, upload image bytes, run shell commands, or call a remote service.
- **No polling or DOM observers:** pointer, scroll, and resize events drive positioning. This avoids observer feedback loops and UI freezes.
- **Preview-safe interaction:** pointer/click events on the download button are stopped so clicking it does not trigger the image's built-in preview/lightbox action.
- **Local URLs:** uses the browser download mechanism for `file:`, `blob:`, `data:`, and browser-accessible HTTP(S) image URLs. Browser security policy ultimately decides whether a particular local URL may be downloaded.

## Project layout

```text
src/
  host/index.js       # empty Host plugin; package is client-only
  client/index.js     # Cordis Client plugin source
lib/
  client.js           # esbuild ESM bundle of src/client/index.js
cordis.patch.yml      # DSH profile bundle registration snippet
esbuild.config.mjs    # bundles src/client -> lib/client (ESM, React external)
package.json
README.md
LICENSE
```

## Development

The client entry is an ESM source file. The published package ships an esbuild
bundle at `lib/client.js`, which the 1024 Store loads through
`exports["./client"]`. Build the bundle locally:

```bash
npm install
npm run build
```

`npm run check` runs a syntax-only check on the source files.

## Intended DSH integration

The client bundle is a Cordis plugin which registers with the queried
`shell.overlay` slot. It requires the DSH client runtime to provide:

- `slots.inject()` and `slots.register()`;
- the `shell.overlay` slot;
- React (provided as an npm dependency) and the dynamic client builtins
  (`document`, `window`, `requestAnimationFrame`).

`cordis.patch.yml` mounts the plugin into the Web roster of any DSH profile
that installs this package.

## License

MIT. See [LICENSE](./LICENSE).

Install

dsh plugin --profile web add github:Yezery/dsh-image-download

Profile: web

  • This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source