dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Give DeepSeek Harness (DSH) agents eyes: local image analysis via vision models — um_analyze_img tool, model-capability recognition, hot-switch settings UI.
Give DeepSeek Harness agents eyes — a dynamic plugin for local image analysis
English | 简体中文
um-dsh-azimg is a dynamic Cordis plugin for DSH. It gives agents — especially text-only ones — the ability to analyze local images: it registers the um_analyze_img tool, hands local images to a chosen vision model, and returns a structured analysis.
--dsw-alias-*), adapting to light/dark themes automaticallyThis repository is a function-body source snapshot of a dynamic plugin: host.js / client.js are the verbatim code.host / code.client values for cordis_define (plain JS function bodies — no TS / import / JSX).
To restore the plugin inside a DSH session:
host.js and client.js from this repositorycode.host / code.client to cordis_definecordis_runOnce active, the agent can call:
um_analyze_img(image_paths: ["C:/path/a.png", "C:/path/b.jpg"], question: "Describe the images")
This repository is a complete profile bundle (package.json → dsh.bundle + dsh.client → a single dual-face row in cordis.patch.yml):
dsh plugin --profile <name> add github:UnforgetMemory/um-dsh-azimg
Installation joins the profile layer stack and activates the plugin: the host half lib/index.js registers the um_analyze_img tool and the umimg/* settings-data service (Typert Remote, exposed via SRC fallback), while the client half lib/client.js (hand-written factory-form bundle, zero build) provides the settings page and tool card. It persists with the profile across restarts. To upgrade:
dsh plugin --profile <name> update
Fallback: the row can be disabled from the profile's own
cordis.patch.ymlwith- id: umimg, disabled: true.
Model calls um_analyze_img(image_paths[1..8], question?)
│
▼
Host plugin ── limit pre-check → magic-number sniffing → atomic batch ingestion → prompt assembly (text + N image blocks)
│
▼
Candidates ── panel selection set → try only that model (no silent switching)
not set → try every image-capable model in turn (automatic failover)
│
▼
llm.stream({ provider, model, messages }) → direct in-process vision call (attachment pixels resolved by the adapter in place)
│
▼
{ analysis, meta } — the model reads analysis; the tool card reads meta (model / images / attempts / elapsed)
Host service dependencies: tools · llm · attachments · fs
settings.section · 「图片分析」): lists every model grouped by provider with image-capability labels (supported / undeclared / text-only), hot switching, availability probing, and last-call echotool.call.toolview): status badge, model chip, failover count, clickable image names, collapsible result, elapsed time| method | input | output |
|---|---|---|
state | { refresh?: boolean } | { selection, groups, stats, lastRun, limits, toolName } |
select | { provider, model } or null | { selection, warning } (non-empty warning = model is not in the image-capable list) |
probe | { provider, model } | { ok: true, provider, model, name, inputModalities, contextWindow } / { ok: false, detail, code } |
| file | content |
|---|---|
host.js / client.js | Dynamic-form source snapshots (in-session cordis_define restore; see Quick Start) |
lib/index.js | Static host half: um_analyze_img tool + umimg/* Remote settings service |
lib/client.js | Static client half: hand-written factory-form browser bundle (zero build) |
package.json / cordis.patch.yml | dsh.bundle + dsh.client declarations and the single dual-face layer row |
README.md | 简体中文 README(默认) |
hero.jpg | Hero artwork referenced by the READMEs (original kept locally in .um.agents/local/, untracked) |
Code organization: each function body is internally sectioned into libraries → provider → scenario → app layers (in-body layering under the single-function-body constraint; dependencies point downward only), with
executeas the linear orchestration entry point.
Current 0.3.0 — see CHANGELOG.md for history.
If this plugin helps you, buy me a coffee:
selection) is not persisted and resets to "auto" on restartdsh plugin add activates it with the profile layer (lib/index.js + lib/client.js), no in-session cordis_define required