dsh-auxiliary

DSH PLUGIN工具与能力

仓库 gu-zt/dsh-auxiliary

工具与能力 未标注验证等级 安全审查:未标注 可信度:未标注 可安装插件

为 DeepSeek Harness 提供辅助模型路由的 DSH 插件,把视觉理解、上下文压缩、审查、子代理、标题与图像生成等专项任务分流到独立模型,主对话模型不受影响。

一句话选型结论

按资料字段整理

dsh-auxiliary 是工具与能力类的 DSH 可安装插件,未做沙盒验证,暂无安全审查结论,列出 5 项功能,没有现成安装命令,需要按仓库 README 接入。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类工具与能力 收录类型可安装插件 验证等级未标注验证等级 安全审查未标注
验证等级 UNKNOWN 未标注验证等级
GitHub 星标 0 复刻 0 · 未关闭 issue 未标注
最近更新 2026-08-19 创建于 2026-08-15
README 23.1 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

5 项功能
字段来自项目仓库与公开索引,中文说明由本站标注

dsh-auxiliary:为 DeepSeek Harness 提供辅助模型路由的 DSH plugin

  • 视觉理解与图片转述工具
  • 上下文压缩专用模型路由
  • 审查与子代理独立模型
  • 会话标题与图像生成路由
  • 设置页即时生效免重启

验证等级与安全审查

未标注验证等级
自动化流程结论,不是人工审核
验证等级未标注验证等级上游未给出验证结论,安装前请自行确认
安全审查未标注静态分析结论,未标注不代表已通过审查
仓库健康度未标注按仓库活跃度与最近更新时间给出
可信度未标注综合仓库活跃度与验证结果

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 列出了 5 项功能,能直接看出它解决什么问题。

先想清楚的地方

  • 安全审查还没结论,装之前先看仓库改了什么、要什么权限。
  • 没有现成安装命令,要按仓库 README 手动接入。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在工具与能力场景里给 DSH 补能力的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-auxiliary当前 未做沙盒验证 未标注 0 未标注 无
huashu-design 未做沙盒验证 未标注 3.0 万 未标注 有
loopx 未做沙盒验证 未标注 6,233 未标注 无
agy-staff 未做沙盒验证 未标注 870 未标注 有
dsh-startup-screen 未做沙盒验证 未标注 633 未标注 有
minara-skills L4 · 沙盒安装通过 中风险 360 未标注 有

仓库档案

工具与能力
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方gu-zt仓库 dsh-auxiliary · 默认分支 未标注
分类工具与能力tools
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言TypeScript仓库主语言
许可证LGPL-3.0商用或二次分发前请确认条款原文
星标 / 复刻 / issue0 / 0 / 未标注收录时的数值,非实时
创建 / 更新2026-08-15 · 2026-08-19最后推送 未标注
本站收录2026-09-21首次进入本站目录的时间

README 全文

23.1 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-auxiliary

Auxiliary models for DeepSeek Harness — dedicated model routes, tools, and system guidance for vision, compaction, reviews, subagents, titles, and image generation, without touching the main conversation model.

English | 简体中文

dsh-auxiliary is a DeepSeek Harness plugin that layers auxiliary-model capabilities on the harness LLM seam (ctx.llm). It never replaces the main conversation model: each feature is an independent, optional route that kicks in only for its own narrow call category, so you can give expensive or specialized work (vision, compaction summaries, approval reviews, delegated subagents, session titles, image generation) its own cheap or capable model.

Feature overview

Feature What it does Where to configure
Vision understanding inspect_image tool: read a local image and ask a vision model about it Models page → Auxiliary Models → Vision understanding
Image handoff Chat images survive a text-only main model via describe_image Vision understanding card → Image handoff
Context compaction Summaries (purpose: 'compaction') use a dedicated model Auxiliary Models → Context compaction
Compression engine (optional) Replaces the compaction backend with an explicit compression prompt engine.enabled in the config
Approval model Reviews from @dsh-plugin/dsh-approve-for-me use a dedicated model Auxiliary Models → Approval model
Subagent model Delegated child agents use a dedicated model Auxiliary Models → Subagent model
Title model Session titles (purpose: 'session-title') use a dedicated model Auxiliary Models → Title model
Image-generation model generate_image tool: create images through an OpenAI-compatible images API Auxiliary Models → Image-generation model
Model capability marks Checkboxes on your own llm-pi-ai models: Allow image input / Allow image generation Models page → provider → customized settings → model

All routes are configured in Settings → Auxiliary Models (the plugin ships that settings section) and take effect immediately on save — no restart, no rebuild of the conversation.

Installation

Copy the block below and paste it to your DSH agent (the assistant in this web
GUI). The agent performs the install and verification for you — no manual npm
or profile editing needed:

Install the @dsh-plugin/dsh-auxiliary plugin into the profile I specify (or ask me if I didn't name one). The npm package name is `@dsh-plugin/dsh-auxiliary`; use the GitHub source `github:dsh-plugins/dsh-auxiliary`, or `file:` for local development.

Steps:
1. Add the plugin dependency: `dsh plugin --profile  add @dsh-plugin/dsh-auxiliary` (or the equivalent plugin-manager command for my profile). Since 0.4.1 the package is a bundle plugin (declares `dsh.bundle.patch`), so `dsh plugin add` also appends it to `dsh.profile.bundles` automatically — no manual `cordis.patch.yml` insert needed.
2. The package declares a `prepack` build script. If pnpm fails with `ERR_PNPM_IGNORED_BUILDS`, approve the build in the profile's `pnpm-workspace.yaml` (`allowBuilds`) and retry the add.
3. If this profile previously loaded the plugin through a manual insert row in `cordis.patch.yml` (pre-0.4.1 style), REMOVE that row — the bundle layer now mounts the plugin, and keeping both would mount it twice.
4. Verify `node_modules/@dsh-plugin/dsh-auxiliary` holds a built `lib/` directory (at least `lib/index.js` and `lib/client.js`). If the build artifacts are missing, run `npm run build` in the plugin directory and re-add.
5. Do not start the profile — install and verify only, then report what you changed.

Then open Settings → Auxiliary Models in the web UI to configure the
routes, and mark the models you want to use in Settings → Models.

Features in detail

Vision understanding and inspect_image

Configure a provider/model in the Models page first, then pick the pair under Vision understanding (saved as vision.provider + vision.model). tool.enabled independently controls whether the inspect_image tool is registered.

vision:
provider: anvilcraft-ai     # any registered provider route
model: mimo-v2.5            # a vision-capable model on that provider
tool:
enabled: true               # register the inspect_image tool
maxImageBytes: 10485760     # per-file size cap
timeoutMs: 120000           # cooperative tool-call budget

Once enabled, ask the agent to run inspect_image on a Host-readable path:

> Use inspect_image to analyze screenshots/error.png

The tool commits the file through the ctx.attachments seam and asks the selected vision model, returning a text answer (optionally truncated at vision.maxTokens). PNG, JPEG, WebP, and GIF are supported.

Model capability mark: for a user-configured llm-pi-ai model, the Allow image input checkbox in the model's settings writes its canonical input declaration ([text, image] when checked, [text] when cleared). Both inspect_image and the main chat composer read that same capability fact. The declaration cannot add vision to a text-only model — only check it when the upstream endpoint actually accepts images.

Image handoff (chat images with a text-only main model)

When Image handoff (vision.handoff, default on) is enabled with a vision route selected, attaching an image to a text-only main model no longer fails:

  1. A runtime wrapper on ctx.llm.resolveModelInfo claims image input for models that declare none while the handoff is active, so the image admission preflight passes (the model catalog and the per-model checkboxes are unaffected — they read the settings document directly).
  2. A listener on the official llm/stream waterfall replaces the image block with a text reference [image: {"attachmentId":…,"mediaType":…}] before the adapter sees it; the text-only model never receives an image payload (vision-route calls such as inspect_image are left untouched).
  3. The system prompt tells the main model to call describe_image with the exact JSON from the reference; the tool reads the stored attachment bytes, asks the selected vision model, and returns a text description.

The reference is plain text, so it survives restarts, forks, and replays. Both seams are plugin-side; no core package is modified. Disable vision.handoff to restore the original rejection behavior.

Context compaction

Every summarization call carries the official GenerateOptions.purpose: 'compaction'. The plugin installs an llm/stream waterfall listener that reroutes those calls to the configured pair:

compact:
enabled: true
provider: deepseek-official  # e.g. a cheap, fast summarizer
model: deepseek-chat

The listener is always installed and is a pure pass-through until a complete route is configured. Only purpose: 'compaction' calls are rerouted; the main session and every other call category are untouched.

Compression engine (optional): engine.enabled: true replaces the stock compaction backend with a BasicCompactionEngine subclass that drives summarization with an explicit context-compression instruction (see engine.compressPrompt). It reuses the compact route and adds no third model route. It is mutually exclusive with @deepseek-ai/dsh-compaction-basic — the plugin detects the conflict and skips the engine with a warning.

Approval model (@dsh-plugin/dsh-approve-for-me hookup)

@dsh-plugin/dsh-approve-for-me adds codex-style auto-approval; in review mode a lightweight reviewer model decides each approval prompt. The Approval model card gives the review a dedicated model:

approve:
enabled: true
provider: anvilcraft-ai
model: mimo-v2.5
  1. A listener on the llm/stream waterfall recognizes the review call by its public contract — the fixed >>> APPROVAL REQUEST START marker in the user message, no sessionId, and temperature: 0 — and reroutes it to approve.provider / approve.model.
  2. Everything else about the call (policy, transcript, timeout, retries, fallback) stays owned by approve-for-me; only the model route is swapped, and the verdict never enters the session history.

The routing activates only when enabled with a complete route; without the plugin installed there are no review calls, so the listener is inert. Requires approve-for-me's mode: review plus the approve-for-me or strict-review permission preset. Prefer a cheap, fast model.

The settings page detects installation: the plugin serves a read-only JSON endpoint at /dsh-auxiliary/state ({"approvePluginInstalled": true|false}) through the optional webServer service, and the card shows a "plugin not installed" notice with editing disabled when the presets are absent from the live permissionPresets table. The endpoint is loopback-local, returns no sensitive data, and is absent on headless profiles.

Subagent model

subagent:
enabled: true
provider: anvilcraft-ai
model: deepseek-chat

Child agents inherit their parent's route by default. With this feature enabled and a complete route, every delegated child — one-shot spawn/fork runs and continuable children, including cold-resumed ones — is routed to the selected pair. The plugin listens for agent/created and, for agents with delegation depth > 0, installs an agent/request waterfall listener on the agent's own scoped context; returning a replacement LlmCallConfig is the loop's official "switch" contract, so the changed header snapshot is logged like any other model switch. Remote providers (ACP) never register a process-local agent and their children keep inheriting the parent route. Prefer a cheap, fast model to control delegation cost. No external plugin required.

Title model

title:
enabled: true
provider: anvilcraft-ai
model: deepseek-chat

Session titles are issued by the dsh-session-title-llm provider, which has its own deployment-level provider/model config. With this feature enabled, every purpose: 'session-title' call is rerouted to the selected pair, leaving the provider's own config and the main session route untouched. Recognition uses the official GenerateOptions.purpose marker, so it cannot collide with agent-loop, compaction, or approval calls. Like the compaction router, the listener is always installed and passes through until a complete route is configured.

Image-generation model and generate_image

imagegen:
enabled: true
provider: lanqin-gpt          # an OpenAI-compatible provider route
model: gpt-image-2

The harness LLM seam only speaks text, so image generation talks to the provider's OpenAI-compatible images API directly. With this feature enabled and a complete route:

  1. The generate_image tool is registered and a system-prompt section tells the main model to call it when the user asks to generate, draw, or create a picture.
  2. The tool reads the provider's baseURL from the resolved llm-pi-ai settings and resolves apiKeyEnv through the harness credential seam (ctx.credentials.resolve — env/file/user-env layers), then calls POST {baseURL}/images/generations with {model, prompt, size, n}.
  3. The returned images (base64 or URL) are written under the working directory (generated/) and the file paths are returned; the main model can verify them with inspect_image.

Model capability mark: the picker only lists models marked Allow image generation — check that box in the model's settings (it writes imageGeneration: true into the raw user section of the llm-pi-ai namespace). Mark exactly the models whose upstream endpoint actually generates images.

How it works

The plugin is built on standard DSH extension points (see the plugin development guide). Nothing in the harness core is modified.

┌─────────────────────────── Web settings ───────────────────────────┐
│ Settings → Auxiliary Models (settings.section slot)                │
│   └─ Feature cards: vision · compact · approve · subagent ·        │
│      title · imagegen  →  saveAuxFeature → namespace user section  │
│ Settings → Models (DOM injection via MutationObserver)             │
│   └─ Model catalog rows: Allow image input / Allow image           │
│      generation checkboxes → raw user section of llm-pi-ai         │
└────────────────────────────────────────────────────────────────────┘
│ reads (namespace.user / settings.get)
▼
┌─────────────────────────── Host plugin ────────────────────────────┐
│ config.ts: schemastery schema + resolvePluginConfig (paired checks)│
│ reconcile*(): register/dispose per feature on config change        │
│                                                                     │
│  llm/stream waterfall listeners (purpose-keyed rerouting)           │
│    ├─ compact router   ← purpose: 'compaction'                     │
│    ├─ title router     ← purpose: 'session-title'                  │
│    └─ approve router   ← marker contract (no sessionId, temp 0)    │
│  agent/request waterfall on scoped child ctx (subagent router)     │
│  tools: inspect_image (vision) · describe_image (handoff)          │
│         generate_image (imagegen)  + systemPrompt.section(...)     │
│  resolveModelInfo wrapper + image→text-reference swap (handoff)    │
│  /dsh-auxiliary/state endpoint (approve plugin detection)          │
└────────────────────────────────────────────────────────────────────┘

1. Purpose-keyed model routing

All text routing shares one pattern: install an llm/stream waterfall listener once (always active), inspect the call, and either pass it through untouched or re-enter the seam with a frozen replacement config:

  • Recognition uses stable, official markers — GenerateOptions.purpose ('compaction' / 'session-title') or the approval call's public contract — so each router can only ever match its own call category.
  • Rerouting calls deepFreeze({...options, provider, model}) and re-enters ctx.llm.stream(); the provider/model replacement is the only change, so timeouts, retries, and fallback stay harness-owned.
  • Loop protection: the replacement carries the same route marker; an equality check on the config prevents the router from matching its own re-entry.
  • Laziness: the listener is a pure pass-through until a complete route exists — enabling the feature later needs no reinstall, and disabling it needs no cleanup beyond removing the listener.

2. Tools and system guidance

Tools are registered with ctx.tools.register(defineTool(...)) and announced to the model through ctx.systemPrompt.section(...):

  • inspect_image — vision understanding: file path + optional question → attachment seam → vision route → text answer.
  • describe_image — handoff: reads the JSON from a chat [image: …] reference and answers via the vision route.
  • generate_image — image generation: prompt (+size/n) → provider images API (credential seam) → PNG files under generated/ → paths.

Each tool is registered only while its feature is enabled with a complete route (reconcile pattern), so the model never sees a tool it cannot use.

3. Settings integration and the model catalog

The plugin registers its own settings namespace (dsh-auxiliary) with a schemastery schema; the settings page writes through settings.update(...), and installSettingsSection keeps the plugin's resolved view in sync. Two details matter:

  • Raw vs resolved: model rows in the llm-pi-ai namespace are validated by a z.object schema that strips unknown keys from resolved views but does not throw — so non-schema fields like imageGeneration survive in the raw user section. Reads that must see such fields go through namespace.user (raw); routed reads use settings.get() (resolved).
  • DOM injection: the model catalog page is owned by the harness client, so the plugin observes the DOM (MutationObserver) and appends the Allow image input / Allow image generation checkboxes into each user-owned model row's expanded advanced area. The checkboxes read/write the raw user section directly, and the image-generation picker filters the catalog to marked models only.

4. Credentials, not plain env

apiKeyEnv values are credential-refs, so the image-generation tool resolves the key through ctx.credentials.resolve(credentialRef(...)) — the harness credential seam covers env/file/user-env layers and re-resolves per call (a changed key reaches the next call without a restart). Never process.env.

5. Everything reconfigures live

Each feature is owned by a reconcile*() + disposer pair: on every settings change the plugin re-resolves the config and registers or disposes exactly the pieces whose conditions changed. Saving a route in the web UI takes effect immediately.

Configuration

All fields are optional; defaults are shown.

- name: '@dsh-plugin/dsh-auxiliary'
config:
vision:
maxTokens: 2048                      # inspect_image output cap (provider/model written by the settings page)
handoff: true                        # text-only main models may reference chat images via describe_image
tool:
enabled: true                        # register the inspect_image tool
maxImageBytes: 10485760              # per-file size cap
timeoutMs: 120000                    # cooperative tool-call budget
compact:
enabled: false                       # reroute compaction summaries to an auxiliary model
provider: ""                         # e.g. deepseek-official (a registered provider route id)
model: ""                            # e.g. deepseek-chat (a model id on that provider)
approve:
enabled: false                       # give @dsh-plugin/dsh-approve-for-me's reviews a dedicated model
provider: ""                         # e.g. deepseek-official (a registered provider route id)
model: ""                            # e.g. deepseek-chat (a model id on that provider)
subagent:
enabled: false                       # route delegated subagents to a dedicated model
provider: ""                         # e.g. deepseek-official
model: ""                            # e.g. deepseek-chat
title:
enabled: false                       # route session-title calls to a dedicated model
provider: ""                         # e.g. deepseek-official
model: ""                            # e.g. deepseek-chat
imagegen:
enabled: false                       # register generate_image with a dedicated image model
provider: ""                         # e.g. lanqin-gpt (an OpenAI-compatible provider route)
model: ""                            # e.g. gpt-image-2 (marked Allow image generation)
engine:
enabled: false                       # optional compression engine (mutually exclusive with dsh-compaction-basic)
thresholdRatio: 0.8
retainRatio: 0.16
maxTokens: 8192
compactionRetries: 1
maxOverflowRetries: 1
auto: true
compressPrompt: "..."                # custom compression instruction

Settings page: Auxiliary Models

The plugin ships a web settings section (Settings → Auxiliary Models).
Configure providers and models in the Models page first, then use the
feature cards here: each card has its own enable switch and provider/model
picker. The picker presents all currently available models together, grouped
by provider (the image-generation card lists only models marked Allow image
generation
). A saved route that is temporarily absent from the catalog is
kept and is never replaced automatically.

Marking models in the catalog

For a user-configured llm-pi-ai model, open its model settings under
Settings → Models → Provider → Customized settings → Models → Model
settings
:

  • Allow image input writes the canonical input declaration ([text, image] when checked, [text] when cleared) — consumed by inspect_image
    and the main chat composer. Enable only when the upstream endpoint actually
    accepts images.
  • Allow image generation writes imageGeneration: true — the mark that
    makes the model selectable in the Image-generation model card. Enable
    only when the upstream endpoint actually generates images.

The checkboxes are injected into every user-owned llm-pi-ai model row and
are always visible — no need to expand the row's capacity disclosure. A model
you are adding gets working checkboxes immediately: the marks are recorded
in the browser and written into the model's settings at the same time the page
saves the new model (Apply), so you can set image capabilities while adding,
not only after saving. Rows that cannot carry the marks explain why instead of
staying silent: DeepSeek-official (or any non-pi-ai adapter) rows show a notice
that the marks are llm-pi-ai-only, and pi-ai catalog rows not yet saved into
the user section say to save the model first.

Notes

  • Routing features reroute only their own call category (purpose: 'compaction' / purpose: 'session-title' / the approval review contract);
    the main session route is never touched.
  • engine.enabled: true replaces the stock compaction backend; do not load
    @deepseek-ai/dsh-compaction-basic at the same time. The plugin detects the
    conflict and skips the engine with a warning.
  • Vision tool arguments: path (absolute or workspace-relative) and optional
    question. Supported formats: PNG, JPEG, WebP, GIF.
  • generate_image arguments: prompt (required), optional size and n
    (most providers accept only n: 1).

Development

npm install          # installs dependencies (typescript, @deepseek-ai/* peers)
npm run typecheck    # tsc --noEmit
npm run build        # emits lib/

License

LGPL-3.0

常见问题

6 问
答案由本站依据条目字段整理,不引用上游原文
dsh-auxiliary 怎么安装?

本站没有抓到该条目的安装命令,请到仓库主页确认安装方式;这类条目多数是生态应用或尚未发布安装包的项目。

dsh-auxiliary 的验证等级是什么意思?

未标注验证等级。上游未给出验证结论,安装前请自行确认

dsh-auxiliary 安全吗?

未标注。

dsh-auxiliary 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-auxiliary 用的是什么许可证?

上游标注为 LGPL-3.0。商用或二次分发前请到仓库确认许可证原文。

dsh-auxiliary 有哪些功能?

视觉理解与图片转述工具、上下文压缩专用模型路由、审查与子代理独立模型、会话标题与图像生成路由、设置页即时生效免重启。

同名或近似条目

1 条
不同作者的仓库分开列,请确认你要装的是哪一个
工具与能力
按星标排序,可作替代方案

huashu-design

huashu-design

在 DeepSeek Harness 里说一句话,就能拿回可交付的设计:网页、App 原型、可编辑 PPTX、动画与信息图,自带 84 种风

未标注验证等级 3.0 万 星

loopx

loopx

LoopX 是面向长周期 Agent 的本地优先控制平面,作为 DSH plugin 为 DeepSeek Harness 提供持久目标、证

未标注验证等级 6,233 星

agy-staff

agy-staff

把 Google Antigravity CLI 作为快速 Gemini 员工接入 DSH,提供子代理侧边栏、编排模式与多种角色技能。

未标注验证等级 870 星

dsh-startup-screen

dsh-startup-screen

DeepSeek Harness 的启动界面与启动动画插件。

未标注验证等级 633 星

dsh-blender-plugin

dsh-blender-plugin

让 AI 模型通过直连 TCP 通道实时驱动 Blender 的 DSH plugin:15 个工具覆盖视口取帧、任意角度渲染、内循环搜索、

未标注验证等级 211 星

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 —。