dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
English | 中文
Agnes AI image and video generation for DeepSeek Harness, as two model-facing tools:
| Tool | Endpoint | Purpose |
|---|---|---|
agnes_image | POST /v1/images/generations | Text-to-image, image-to-image, multi-image composition |
agnes_video | POST /v1/videos + GET /agnesapi | Asynchronous tasks: text-to-video, keyframes, multimodal reference |
The harness LLM seam speaks chat protocols only (completions / responses / messages). Agnes' text models make a fine llm-pi-ai route, but image and video are generation endpoints that return no conversation — so they are tools, not models. The two coexist: text on a route, media through this plugin.
dsh plugin --profile <profile> add dsh-agnes-media
Or declare it as a bundle in the profile package.json:
{
"dsh": { "profile": { "bundles": ["dsh-agnes-media"] } }
}
Restart the harness afterwards.
No secret is stored by the plugin. Each call resolves apiKeyEnv (default AGNES_API_KEY) through the harness credential seam:
# $DSH_HOME/.credentials.yaml
refs:
AGNES_API_KEY: sk-...
An unconfigured reference fails with an error naming it, rather than sending a request that is certain to 401.
Override by id from the profile patch layer:
- id: agnes-media
config:
baseURL: https://apihub.agnes-ai.com/v1
apiKeyEnv: AGNES_API_KEY
imageModel: agnes-image-2.5-flash
videoModel: agnes-video-2.5-flash
outputDir: agnes-media
requestTimeoutMs: 300000
imageTimeoutMs: 360000
videoTimeoutMs: 1800000
videoPollIntervalMs: 3000
| Field | Default | Meaning |
|---|---|---|
baseURL | https://apihub.agnes-ai.com/v1 | International service. China is https://api.agnes-ai.cn/v1; the international alternate is https://apihub.agnes-ai.cn/v1 |
apiKeyEnv | AGNES_API_KEY | Credential reference resolved per call |
imageModel | agnes-image-2.5-flash | Used when a call names no model |
videoModel | agnes-video-2.5-flash | Defaults to the free tier so an unconfigured call cannot silently spend money |
outputDir | agnes-media | Relative to the calling workspace; an absolute outputPath bypasses it |
By default, under the calling agent session's workspace:
<workspace>/agnes-media/image-<UTC timestamp>.png
<workspace>/agnes-media/video-<UTC timestamp>.mp4
Extensions come from sniffing the downloaded bytes, not from a fixed table. Pass outputPath to override — relative paths resolve against the workspace, absolute paths are used as given.
Agnes also returns a URL it hosts (the result's sourceUrl), and that URL may expire, so the plugin downloads the bytes; the local file is authoritative.
Per the Agnes pricing page: every resolution tier of all three image models is currently free; agnes-video-v2.0 and agnes-video-2.5-flash are currently $0/second; agnes-video-2.5 is billed per second. The free tier is rate-limited per account.
Each of these was observed against the live endpoint and each one affects correctness, so they are documented rather than left in code comments:
url), not at the documented metadata.url — a completed response carried no metadata object at all. The plugin prefers the observed shape and keeps the documented one as a fallback.pending where the docs say queued. Status is therefore read as a terminal-state check (completed / failed), never an enumeration of in-progress values.video_queue_full. Also retried with backoff. A generic 500 is deliberately not retried: it cannot be told apart from a task that was created before the failure, and retrying would bill for a duplicate.timeoutMs, and observes exec.signal throughout for cooperative cancellation.MIT