Introduction

In the DeepSeek Harness (DSH) Web GUI, image attachments may encounter two types of restrictions: the model side does not declare image input, and the upstream side does not support image parts. @dsh-external/dsh-image-unlock is a DSH external plugin used to allow image attachments and textify image blocks, making the attachment path available to the vision skill for processing.

Below we introduce its positioning, core capabilities, installation methods, enabling switching methods, and the patch issues that need attention.

Plugin Positioning

@dsh-external/dsh-image-unlock is maintained by FrostLeafKEE and is licensed under MIT.

Its one-sentence positioning is: remove the image input restrictions of the DeepSeek Harness Web GUI, allowing image attachments to be usable under upstream (Console Go) that does not support images.

It itself does not replace the vision model, nor does it guarantee that the target model can directly recognize images. Actual image recognition requires cooperation with claude-vision-skill.

Core Capabilities

The plugin mainly does two things: allow image attachments and convert image blocks into text tokens.

  1. Remove image input restrictions in the DeepSeek Harness Web GUI.

  2. Add to llm-pi-ai models that have not declared input:

defaultInput: [text, image]
  1. Textify durable image blocks into:
[图片附件: <名称>]
  1. The attachment path is handed over to claude-vision-skill/vision.js for MIME identification by sniffing magic numbers.

  2. Instantly switch between textifying or using native image parts based on the existence of the claude-vision-skill directory.

  3. Support adding configuration in the plugin entry of the profile cordis.patch.yml:

textifyImages
skillDir
  1. After reinstalling or upgrading, you can re-run the patch script:
node scripts/patch-pi-ai.mjs

Wherein, the defaultInput patch only affects models that have not declared input and is not affected by the skill switch. Textification only affects the opencode-go route; other pi-ai routes remain unchanged.

Installation

You can install from GitHub:

dsh plugin --profile web add https://github.com/FrostLeafKEE/dsh-image-unlock.git

You can also install from a local directory. The <本插件目录> in the command needs to be replaced with the actual plugin directory:

dsh plugin --profile web add <本插件目录>

After installation, you also need to insert the image-unlock plugin entry in the profile’s cordis.patch.yml and execute the code patch once:

node scripts/patch-pi-ai.mjs

Enable and Switch

The plugin switches behavior via the location of the claude-vision-skill directory.

When enabling the skill flow, keep the claude-vision-skill directory under .agents/skills. At this time, the plugin will textify image blocks, and the attachment path is handed over to claude-vision-skill/vision.js for processing.

When disabling the skill flow, move the claude-vision-skill directory out of .agents/skills. At this time textification is turned off, and the request goes through the native image part path. If the target model or upstream does not support image parts, image recognition may still fail.

Controlled by a flag at runtime:

globalThis.__dsh_image_unlock_textify

Textification only happens when this flag is true. The flag is cleared when the plugin entry is disabled, the plugin is removed, or the claude-vision-skill directory does not exist.

Configuration Override

In the profile’s cordis.patch.yml, you can set in the additional configuration of the image-unlock plugin entry:

textifyImages: true

To force textification off, you can set:

textifyImages: false

If you need to specify the skill directory location, you can configure:

skillDir

Notes

  1. This plugin applies code patches to the local node_modules. After pnpm install or upgrading @deepseek-ai/dsh, the patches may be lost and need to be re-executed:
node scripts/patch-pi-ai.mjs
  1. The plugin only allows image attachments and textifies them, it does not change the model’s own image input capability.

  2. Textification only affects the opencode-go route; other pi-ai routes remain unchanged.

  3. The plugin runs with the permissions of the current dsh process. Before installation, you should check the source code, installation path, and the MIT license.

Links

GitHub: https://github.com/FrostLeafKEE/dsh-image-unlock