Introduction¶
The DSH plugin mechanism allows developers to extend the capabilities of the existing DeepSeek Harness. For those who already use the pure text DeepSeek model, image input remains a practical gap: you can paste images in the chat window, take screenshots in the browser, and tools may return images, but the model itself does not directly accept image.
dsh-deepseek-vision addresses this gap. It adds a vision-language gateway route for pure text DeepSeek models, allowing images to enter subsequent processing without requiring developers to replace the entire model.
Below, we will introduce what it is, its core capabilities, installation methods, configuration key points, and the boundaries to be aware of.
What Is This¶
dsh-deepseek-vision is a DSH plugin maintained by siegfly. The current release version is 0.1.7, licensed under MIT.
In one sentence: it is a vision-language gateway plugin for DeepSeek Harness, adding an image input route for pure text DeepSeek models. Models declared to support image in the directory can pass through the official vision endpoint directly, while other models can have images described as text by a configurable VL model first.
It covers two paths:
- For models declared to support image in the directory (e.g.,
deepseek-v4-flash-vision-exp), images pass through the native DeepSeek vision endpoint. - For other pure text or unlisted models, images are first described as text by a configurable VL model, then passed to DeepSeek.
The runtime requirements are as follows:
Node.js ^22.19.0 || >=24.0.0
When installing the plugin, pnpm must also be available in the PATH.
Core Features¶
Registering a Dedicated Provider Route¶
The plugin registers a dedicated route, which appears as DeepSeek + Vision in the model selector:
provider: deepseek-vision
displayName: DeepSeek + Vision
inputModalities: text, image
This route explicitly declares that input modalities include text and image.
Supported Image Inputs¶
The following image sources can enter this route:
- Images pasted in the chat window
tool-fs read_image- Browser screenshots
- Images returned by MCP tools
- Inline images in ACP clients
Routing Based on Model Type¶
The plugin selects different processing methods based on the chosen model:
- If the model directory declares support for image (e.g.,
deepseek-v4-flash-vision-exp), images pass through the native DeepSeek vision endpoint. - If the model is a pure text model or not listed in the directory, the plugin first calls the configurable VL model to describe the image as text, then passes it to DeepSeek for further processing.
Description Caching¶
The plugin uses an in-process LRU cache to store description results based on attachmentId.
This means that the same image will reuse the same description during retries, context compression, or subsequent turns, avoiding duplicate billing.
Preserving Original Session Records¶
The original images are still persisted into the session log.
This ensures that session behaviors such as history, replay, and reconstruction remain unaffected.
Configurable VL Endpoint¶
The plugin supports configuring the VL endpoint, model, prompts, and API key, and is compatible with OpenAI-style /chat/completions gateways.
Failure Strategy¶
The plugin provides a fail-closed failure semantics, and also supports configuring a placeholder fallback, with stable error codes.
The default failure strategy is fail.
Installation and Enabling¶
Prerequisites¶
Before installation, the following must be met:
- The
dshCLI is available. pnpmis in the PATH.- The Node.js version satisfies
^22.19.0 || >=24.0.0.
Installing the DSH CLI¶
If this is a new machine, install the DSH CLI first:
npm install -g @deepseek-ai/dsh
This step ensures the dsh command is in the PATH, allowing direct use of dsh plugin related commands later.
Installing the Plugin¶
When installing the plugin via the web profile, you can use an npm spec:
dsh plugin --profile web add dsh-deepseek-vision
Alternatively, you can use a git spec to lock to a specific commit:
dsh plugin --profile web add github:siegfly/dsh-deepseek-vision#<sha>
The plugin supports npm, git, directory, tarball, and other specs, and is compatible with both web and headless profiles. Choose the appropriate spec based on your current environment and release channel.
Enabling the Plugin¶
After installation, restart dsh web.
Then enable it by following these steps:
- Select
DeepSeek + Visionon the Models page. - Enter the VL API key in the plugin configuration.
- Paste an image in the chat window and send a message.
Uninstalling the Plugin¶
To remove the plugin, run:
dsh plugin --profile web remove dsh-deepseek-vision
Typical Configuration¶
In the “Settings → Plugins → Plugin Configuration” card, you can configure the following vl.* items:
vl.apiKeyEnv
vl.model
vl.baseURL
vl.describePrompt
vl.timeoutMs
vl.maxCacheEntries
vl.onFailure
The credential resolution priority is as follows:
Process environment variables (highest, read-only) → GUI-managed .credentials.yaml → .env fallback
Therefore, credentials written via the Web Models page are usable; while keys explicitly exported by the current process always take precedence and cannot be modified within the GUI.
For the failure strategy, vl.onFailure can be configured as fail or placeholder:
fail: If description fails, the entire request fails.placeholder: If description fails, it degrades to a text placeholder and continues.
Data Flow and Compatibility Boundaries¶
When using this plugin, be aware of the following boundaries:
- The image data flow only passes through the user-configured VL endpoint; there is no anonymous fallback, proxy server, or disk-based answer cache.
- The release does not lock to an official dsh version.
- The official CLI path installs release artifacts directly, and compatibility has not been verified on target machines.
- The
install-profilerebuild path uses its own dsh to rebuild on the target machine; a successful build serves as compatibility proof, and there are no tiered hints for CLI paths. dshCompat.anchorVersion 0.1.1-rc.2only indicates committed lib provenance, not an installation gate.- Changes to
provider/displayNametake effect immediately; if changed to an already occupied route ID, both registries retain the old value and log a message.
This plugin loads and runs with the dsh process. Before installation, please review the source code, dependencies, and license; the current license is MIT.
Applicable Scenarios¶
Suitable for:
- Those who want to continue using the pure text DeepSeek model while processing images from the chat window, screenshots, or tools.
- Those who already have a configurable VL endpoint and want to provide image description capabilities via an OpenAI-style
/chat/completionsgateway. - Those who want to preserve original images in the session log while avoiding duplicate descriptions and billing for the same image.
Not suitable for:
- Environments where the self-configured VL endpoint is inaccessible.
- Scenarios where images must not leave the network and not pass through the configured endpoint.
Links¶
- Directory page:
https://www.skillhub.cn/plugins/siegfly/dsh-deepseek-vision - GitHub:
https://github.com/siegfly/dsh-deepseek-vision