Bundle
dsh-bundle-vision
Vision bundle + plugin for DeepSeek Harness: the describe_image tool reads local images and asks any configured multimodal route, with zero core changes
- Source
- skillre
- License
- MIT
- Updated
- Updated 7 days ago
Readme
# dsh-bundle-vision
A **zero-core-change vision capability** for DeepSeek Harness, shipped as one installable npm package that is both a profile bundle and a plugin:
- the plugin registers the model-facing **`describe_image`** tool;
- the bundle patch mounts that plugin on any profile.
The tool reads a local PNG/JPEG/WebP/GIF file, commits the bytes through the shipped attachment service, and asks the **named** multimodal route about it in one direct LLM request (`provider` / `model` are tool arguments). The result is text only — no image block ever enters the calling session, so a text-only main model gains vision without any change to dsh itself.
## How it works against the shipped seams
Everything the tool uses already ships with every dsh profile:
- `ctx.fs` (bounded byte read, session-workspace resolution) — filesystem capability;
- `ctx.attachments` (`saveImage`, image limits, magic-byte validation) — durable image storage;
- `ctx.llm` (`resolveModelInfo` + `stream`) with the pi-ai multi-provider adapter — the multimodal request itself.
The one per-deployment prerequisite is the same as for any vision use of dsh: the multimodal model must declare image input in the `llm-pi-ai` settings section, e.g.:
```yaml
llm-pi-ai:
providers:
my-vision:
apiKeyEnv: MY_VISION_API_KEY
api: openai-completions
baseURL: https://example.invalid/v1
models:
- id: my-vision-model
input: [text, image]
```
(On releases whose Models page has the input-modality control, the same declaration is one dropdown.)
## Install (installed dsh, no source checkout)
From the npm registry:
```sh
dsh plugin --profile <name> add dsh-bundle-vision
```
Or from a packed tarball (e.g. before the first publish, or for a pinned version):
```sh
dsh plugin --profile <name> add ./dsh-bundle-vision-0.1.0.tgz
```
`dsh plugin` forwards to pnpm inside the profile directory and reconciles the profile's bundle layers automatically — a dependency declaring `dsh.bundle` joins the layer stack. Restart `dsh <name>`; the tool registers for every agent (profile-root registrations are visible to all preset scopes).
## Use
Ask the main model, naming the route:
> Use describe_image with file_path `/path/to/photo.jpg`, provider `my-vision`, model `my-vision-model`, and prompt "OCR the text in this image".
The main model supplies provider/model per call — configure several multimodal routes and switch per call, no profile edits. Refusals name the failing gate (unknown extension, deployment media types, a route whose model does not declare image input, a missing file, a type-mismatched file, an errored stream).
## Version floor
The package declares `>=0.1.0-rc.6` peer dependencies on the dsh seam packages. Bump the floor if a later release is required.
## Development
```sh
npm install # dev deps resolve the seam packages from the npm registry
npm run typecheck # tsc --noEmit over src + tests
npm test # vitest
npm run build # tsdown (lib/index.js) + tsc declarations (lib/types)
npm pack # the installable tarball
```
Install
dsh plugin --profile web add github:skillre/dsh-bundle-vision
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-bundle-vision from the hub
- 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.