deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
English | 中文
A Vision-Language-Model (VLM) analyzer plugin for DeepSeek Harness (dsh). It gives the AI an analyze_image tool backed by primary/backup OpenAI-compatible vision endpoints with automatic failover, and adds an auto-saving Settings → Vision Models (VLM) page (English/中文).
analyze_image tool registered on the global tools registry — available in every session.endpoint + apiKey + model; if the primary fails consecutively beyond the retry count, the AI automatically falls back to the backup./vlm/config, /vlm/models, /vlm/reset served by the host half.dsh CLI (DeepSeek Harness) with a web profile installed. Requires pnpm on PATH (or use npx --yes pnpm@<version>).The plugin is a bundle: it carries its own cordis.patch.yml and self-activates. Installing it is a single command — no manual patch editing in the profile.
# From a local directory
dsh plugin --profile web add ./dsh-her-eyes
# From GitHub
dsh plugin --profile web add github:huashenglian/dsh-her-eyes
# From a packed tarball (pnpm pack / npm pack)
dsh plugin --profile web add ./dsh-her-eyes-1.2.0.tgz
dsh plugin add installs the dependency and appends the bundle to dsh.profile.bundles automatically.
If
pnpmis not onPATH, run the equivalent manually:# in the profile directory (~/.dsh/profiles/web) npx --yes pnpm@11.7.0 add file:./plugins/dsh-her-eyesthen add
"dsh-her-eyes"to thedsh.profile.bundlesarray inpackage.json.
$DSH_HOME/profiles/web/plugins/dsh-her-eyes/."dsh-her-eyes": "file:./plugins/dsh-her-eyes" to the profile package.json dependencies."dsh-her-eyes" to the profile dsh.profile.bundles array.pnpm install (or npx --yes pnpm@11.7.0 install), then restart dsh web.Do not add a manual - insert: - id: her-eyes row to the profile cordis.patch.yml — the bundle already inserts it. A second insert would throw duplicate loader entry id: her-eyes at boot.
All configuration lives in one JSON file: $DSH_HOME/vlm-vision.json (default ~/.dsh/vlm-vision.json).
{
"retryCount": 5,
"api": {
"primary": { "endpoint": "https://api.openai.com/v1", "apiKey": "sk-...", "model": "gpt-4o" },
"backup": { "endpoint": "", "apiKey": "", "model": "" }
}
}
endpoint — OpenAI-compatible base (e.g. https://api.openai.com/v1) or the full …/chat/completions URL.apiKey — leave the key empty in the file; it is saved via the settings page and stored masked.retryCount — after this many consecutive failures of one API, the active API switches (primary ⇄ backup).You can edit the file directly, or use the settings page (all edits auto-save).
The package is dual-face:
lib/index.js) — a cordis plugin. Registers the analyze_image tool on the global tools registry and the /vlm/config|models|reset routes on the web server. Loads and persists vlm-vision.json.lib/client.js) — the browser module, loaded via __ModuleLoader__ because the package declares dsh.client. Registers a Settings → Vision Models (VLM) section (list slot settings.section, id vlm-vision, order 40) and the locale namespace settings.her-eyes.The bundle cordis.patch.yml inserts the her-eyes entry that activates both halves.
This plugin is built to play nicely with other frontend plugins that touch the settings window:
| Resource | Value | Notes |
|---|---|---|
| Loader entry id | her-eyes |
unique across the harness |
| Settings slot id | vlm-vision |
the settings.section slot is a list — multiple sections coexist; only the same id would conflict |
| Locale namespace | settings.her-eyes |
namespaced by plugin |
| Tool name | analyze_image |
unique |
| Web routes | /vlm/* |
unique path prefix |
| CSS classes | vlm-* |
global styles, prefixed to avoid collisions |
The harness itself enforces uniqueness (duplicate loader ids, slot ids, tool names, or routes throw and fail loudly) — so two plugins never silently shadow each other.
dsh plugin --profile web remove dsh-her-eyes
This removes the dependency and the bundle entry. Your vlm-vision.json config file is left untouched.
MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。