DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Vision Patch — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
V

dsh-vision-patch

Vision Patch

模型页面自定义提供商卡片中按模型和按路由设置的图像输入(视觉)复选框,通过 llm-pi-ai 设置命名空间写入。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:ryasrk/dsh-vision-patch#602e9bf2d796151fd074b9a5c7e9085246e9f819
README兼容性版本

兼容性与来源证明

Vision Patch 以 dsh-vision-patch 发布,当前版本为 0.1.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/9/3

版本

0.1.0stable
2026/9/3

相关插件

正在加载相关插件…

最新版
0.1.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/9/10
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 vision-media 分类下经过校验的插件。

Tool Describe Image@linxin666/dsh-tool-describe-image面向模型的 describe_image 工具,用于 dsh Web GUI:通过在兼容 OpenAI 的端点调用视觉语言模型,为文本模型提供图像理解能力,以描述一张图像(本地路径、http(s) URL 或附件引用)。可热插拔 —Modlens@liustack/modlens面向仅支持文本的 LLM 的插件视觉能力,由免费的 Antigravity CLI 提供支持Deepseek Ivideodeepseek-ivideoiPolloWork HyperFrames Video Studio,以及 27 个可编辑视频模板,以原生 DeepSeek Harness 对话视图呈现。Image Gendsh-image-gen将类似 ChatGPT 的图像生成功能带到 DeepSeek Harness——支持 Gemini、OpenAI、Seedream、DashScope、本地 ComfyUI 等。

README

dsh-vision-patch

A plugin with two halves on the llm-pi-ai settings namespace. The client card on the Models page declares which models accept image input, per model and per route, and picks a per-route vision fallback model. The host half uses that fallback to describe images so a turn never dies on an image the main model cannot read.

The card renders inside every provider card the Models page draws for a llm-pi-ai route (saved rows, first-run setup rows, add-provider drafts) and writes through the settings Remote. The host half adds no HTTP route of its own; it registers a single agent/pre-step interceptor.

What it does

  • Per-model checkbox — input: ['text', 'image'] on the model's stored entry. Unchecked removes the input key entirely, so the model inherits the installed catalog's capability (it never writes ['text'], which would forbid images outright).
  • Route-wide checkbox — defaultInput: ['text', 'image'] (set/unset via path ops) for every model on the route that declares no list of its own.
  • Vision fallback model — a per-route dropdown of the route's vision-capable models (those that declare images themselves or inherit them from the route). The picked model is stored as visionFallbackModel.
  • Model filter — a search box appears once a route lists more than 8 models; the count line shows how many models currently declare images.
  • Live refresh — the card re-reads after each write and follows settings/document-updated, so edits made elsewhere on the page converge.

A provider with no stored profile (never saved from the Models page) shows guidance text instead of checkboxes.

Vision fallback (host)

A provider route in the llm-pi-ai settings namespace may carry a visionFallbackModel field: { provider?: string; model: string }. The provider defaults to the route itself; model names a vision-capable model on it. An absent field turns the feature off for that route. The Models card's dropdown writes this field; the host reads the same stored profile, so the two sides always agree.

When the host's agent/pre-step interceptor sees a step whose user message contains an image content block AND the step's route (from agent.options.provider) has a configured visionFallbackModel, it:

  1. streams the turn to the fallback vision model via ctx.llm.stream({ provider, model, messages, signal }) to describe the image(s);
  2. replaces each image block in the user message with a text block holding that description; and
  3. returns the rewritten messages, so the main model continues on the description.

It does not inspect the active main model's modality: it describes whenever a fallback is configured and an image is present. If the describe fails, times out, no fallback is configured, or ctx.llm is unavailable, the interceptor delegates unchanged (next()), so the image falls through to the harness's default handling and the turn is never blocked.

Durability & logging

When the interceptor describes an image it rewrites the user's own message, replacing each image content block with a text block holding the description. That rewritten text is not stamped with a plugin source kind. The whole host seam is validated only against mocks — there is no live host to confirm a new, non-catalog source kind is accepted — and rewriting an already-present user message (rather than appending a fresh one) risks clobbering the harness's own source marker on that message. Durability of the injected wording is therefore the harness's call; this plugin makes the injection observable instead, via the host logger:

  • info when a describe is attempted (an image is present, a fallback model is configured, and ctx.llm.stream is available);
  • debug when the describe yields no usable text and the interceptor delegates unchanged (next());
  • debug when a description is actually injected and the turn enters rewritten;
  • debug when a describe is skipped because one is already in flight for the same agent (the per-agent concurrency guard).

All logging is guarded (ctx?.logger?.info?.(...) / debug / warn?.(...)), so an absent logger is harmless. A silent describe is never silent in the logs: if the user believes an image was described but no text assembled (for example the real ctx.llm.stream chunk shape differs from the mock), the debug line names the agent that fell back to next() unchanged.

Install

dsh plugin --profile web add github:ryasrk/dsh-vision-patch

The profile's dsh.profile.bundles list picks the package up automatically (its package.json declares dsh.bundle.patch). Restart the web host so the new bundle layer composes, then reload the Models page.

Layout

PathRole
cordis.patch.ymlinserts the dsh-vision-patch loader row
lib/index.jshost entry — apply(ctx) registers the agent/pre-step interceptor via lib/host.js
lib/host.jshost helpers: the agent/pre-step handler that describes images and rewrites the turn, plus the settings fallback reader
client/client.jsbrowser bundle: the card (image-input checkboxes + vision fallback dropdown), registered on the settings.models.provider-card slot keyed llm-pi-ai
package.jsondsh.bundle.patch + dsh.client (web platform, inject edges)

The client bundle requires only react (a platform seed word); it needs no build step and has no runtime dependencies.

How it writes

All writes go through ctx.remote.settings against the llm-pi-ai namespace, carrying the revision the last read observed (settings-conflict on a lost race):

  • route-wide toggle → mutate path ops on ['providers', <route>, 'defaultInput']
  • vision fallback → mutate path ops on ['providers', <route>, 'visionFallbackModel'] (set the { model } choice, unset to clear)
  • per-model → update merge restating the whole stored models list (path ops cannot address array elements), every untouched field merge-preserved.

Writes that land return the namespace's post-write view, which folds straight back into the card.

Uninstall

dsh plugin --profile web remove dsh-vision-patch

(Then restart the web host so the bundle layer leaves the composition.)