Vision & Multimodal

dsh-image-reader

zcxie777/dsh-image-reader · ★ 2

zcxie777

Give a text-only DeepSeek Harness agent the ability to read images directly : one model-facing read image tool that asks any OpenAI-compatible vision endpoint about an image by…

License
MIT
Added
2026-08-23
Maintenance
active
Install kind
github

No manifest check is available; listing does not imply compatibility or security review.

安装

dsh plugin --profile web add github:zcxie777/dsh-image-reader

GitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试

For install and environment setup, plus plugin development tutorials, see DSH community docs ↗

README

Source README · body: en · Read Chinese README

Table of contents
  1. Why
  2. Verification status
  3. Install
  4. Configure
  5. Use
  6. Configuration fields
  7. Security
  8. Development
  9. Publish
  10. License

Give a text-only DeepSeek Harness agent the ability to read images directly: one model-facing read_image tool that asks any OpenAI-compatible vision endpoint about an image by its workspace path.

Why

DeepSeek Harness is "everything is a plugin". This bundle mounts a single tool so the model can look at a screenshot, diagram, or photograph and answer questions about it, instead of only ever reasoning over text.

Verification status

  • Verified locally: npm run typecheck, npm run build, and npm test (16 tests) all pass.
  • Not yet verified: a real end-to-end read against a live vision endpoint. The request/response logic is covered by a mocked-fetch unit test, but the plugin has not been smoke-tested inside a running dsh profile against a real multimodal model. Do that once with a real VISION_API_KEY before relying on it.

Install

git clone https://github.com/zcXie777/dsh-image-reader.git
cd dsh-image-reader
npm install
npm run build          # lib/ is not committed; build once after cloning
cd ..
dsh plugin --profile web add "$PWD/dsh-image-reader"
dsh plugin --profile headless add "$PWD/dsh-image-reader"
dsh --profile web --dump-config | grep image-reader

Restart a running Web profile after installing.

Configure

provider.baseUrl and provider.model are required; the plugin never assumes a vendor. Override them in the profile patch row with the same id:

- id: image-reader
  config:
    provider:
      baseUrl: https://api.openai.com/v1
      model: gpt-4o-mini
      apiKeyEnv: VISION_API_KEY
    lang: zh
    timeoutMs: 60000
    maxImageBytes: 10485760
    allowedDirs: []

Set the key in the environment before starting the profile:

export VISION_API_KEY=sk-...

Use

In a conversation, point the model at an image path and ask:

read_image image="screenshot.png" query="What error is shown in this dialog?"
read_image image="diagram.png"

Configuration fields

Field Default Contract
provider.baseUrl — (required) OpenAI-compatible chat/completions base URL
provider.model — (required) Multimodal model name
provider.apiKeyEnv VISION_API_KEY Environment variable holding the API key
lang zh Answer language: zh or en
timeoutMs 60000 Whole-request deadline, 1000–600000 ms
maxImageBytes 10485760 Encoded-byte limit per image
allowedDirs [] Extra realpath-resolved input roots; the workspace is always allowed

Security

  • Inputs resolve against the workspace and allowedDirs through realpath, so a symlink cannot escape the fence.
  • Images are size-limited and extension-checked before upload.
  • The key is read from the environment per call, never stored in config.

Development

npm install
npm run typecheck
npm run build

Publish

Tag the repo with the dsh-plugin topic so it is discoverable, and publish to npm when ready.

License

MIT