Bundle
dsh-her-eyes
Application-level Vision-Language-Model (VLM) analyzer for DeepSeek Harness: analyze_image tool with primary/backup OpenAI-compatible endpoints, automatic failover, and an auto-saving web settings page.
- Source
- huashenglian
- stars
- 4 stars
- License
- MIT
- Updated
- Updated 5 days ago
Readme
# dsh-her-eyes
English | [中文](README.zh.md)
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/中文).
## Features
- **`analyze_image` tool** registered on the global tools registry — available in every session.
- **Primary / backup VLM APIs** — OpenAI-compatible `endpoint` + `apiKey` + `model`; if the primary fails consecutively beyond the retry count, the AI automatically falls back to the backup.
- **Auto-saving settings page** — every edit saves and takes effect immediately; no Save button. Also lets you fetch the model list from the endpoint.
- **Web routes** `/vlm/config`, `/vlm/models`, `/vlm/reset` served by the host half.
- **i18n** — the settings page follows the harness UI language (English / 中文).
## Requirements
- `dsh` CLI (DeepSeek Harness) with a `web` profile installed. Requires `pnpm` on `PATH` (or use `npx --yes pnpm@<version>`).
## Install
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.
```bash
# 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 `pnpm` is not on `PATH`, run the equivalent manually:
> ```bash
> # in the profile directory (~/.dsh/profiles/web)
> npx --yes pnpm@11.7.0 add file:./plugins/dsh-her-eyes
> ```
> then add `"dsh-her-eyes"` to the `dsh.profile.bundles` array in `package.json`.
### Manual placement (alternative)
1. Put the package under `$DSH_HOME/profiles/web/plugins/dsh-her-eyes/`.
2. Add `"dsh-her-eyes": "file:./plugins/dsh-her-eyes"` to the profile `package.json` `dependencies`.
3. Add `"dsh-her-eyes"` to the profile `dsh.profile.bundles` array.
4. Run `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.
## Configure
All configuration lives in one JSON file: **`$DSH_HOME/vlm-vision.json`** (default `~/.dsh/vlm-vision.json`).
```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).
## How it works
The package is **dual-face**:
- **Host half** (`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`.
- **Client half** (`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.
## Coexistence with other plugins
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.
## Uninstall
```bash
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.
## License
MIT
Install
dsh plugin --profile web add github:huashenglian/dsh-her-eyes#73799bf935ac2dc878fd35a54b79453d417d817f
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-her-eyes from the hub