DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Auto Review Model Router — DeepSeek Harness 插件(DSH Plugin)
← Plugins
A

dsh-auto-review-model-router

Auto Review Model Router

将 DSH 的实验性自动审查安全审查器路由到更便宜的模型:每次审查调用都会重新定向到配置的提供商/模型,而不会影响代理自身的路由。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:OldLigant/dsh-auto-review-model-router#c5fccd62b9f09ccf2a63e8cecfc3b544f3b984d7
README兼容性版本

兼容性与来源证明

Auto Review Model Router 以 dsh-auto-review-model-router 发布,当前版本为 0.2.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
any
发布来源
github
Registry 更新时间
2026/10/12

版本

0.2.0stable
2026/10/12

相关插件

正在加载相关插件…

最新版
0.2.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
any
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/10/12
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录

相关插件

继续浏览 models-usage 分类下经过校验的插件。

Usage@linxin666/dsh-usage用于 dsh Web GUI 的使用统计插件:检测各提供商的余额和编程套餐配额,并实时记录令牌使用情况;侧边栏 Settings 行上方显示紧凑的价格概览卡片Client Ui Model Capabilities@linxin666/dsh-client-ui-model-capabilities为自定义 pi-ai 提供商声明每个模型的能力(图像输入和推理力度),可直接在 Models 设置卡片中编辑;写入官方 llm-pi-ai 设置命名空间,不更改 DSH 源代码。Codex Subscriptiondsh-codex-subscription通过 OAuth 在 DeepSeek Harness 中使用 ChatGPT 和 Codex 订阅,支持配额管理、安全重置、网页搜索、图像和快速模式Commandcode Provider@mars-sea/dsh-commandcode-provider适用于 Command Code 的非官方 DeepSeek Harness LLM 提供商插件,移植自 pi-commandcode-provider(MIT)。注册“commandcode”提供商路由,并在 Models 页面添加卡片和实时模型目录。

README

dsh-auto-review-model-router

Route DSH's experimental auto-review safety gate to a model you choose, so a premium agent model does not pay for its own safety reviews.

# <profile>/cordis.patch.yml
- insert:
    - id: auto-review-model-router
      name: dsh-auto-review-model-router
      config:
        reviewModel: deepseek-official/deepseek-flash

With that entry every review runs on deepseek-official/deepseek-flash while the agent keeps claude-opus-4, gpt-6-astra, or whatever else the session selected.

The problem it solves

@deepseek-ai/dsh-experimental-auto-review reviews each gated tool call by calling ctx.llm.stream() on the session's own route: it copies provider and model out of the session request header (snapshotAutoReview() in packages/experimental/auto-review/src/index.ts). There is no reviewModel field in the shipped plugin, so an expensive agent model is charged for one extra full review request per gated call.

How it works

The plugin wraps two service methods at activation: llm.stream always, and llm.prepareCall unless wrapPrepareCall is off.

  1. A request is recognized as an auto-review call when it is hand-built (it does not carry the agent loop's own-request mark) and its system prompt starts with auto-review's fixed REVIEW_POLICY opening. Only such a request is ever rewritten.
  2. It is copied onto reviewModel, and the source route's reasoningEffort and maxTokens are dropped. Both are properties of the agent's model: a reasoning effort the target does not declare makes the harness throw UNSUPPORTED_REASONING_EFFORT, and an inherited output cap can exceed the target's limit. Either would fail every review closed.
  3. Everything else — the review prompt, its policy system prompt, temperature, and the {"risk":…,"decision":…} JSON protocol the gate parses — is unchanged. Only the model that produces the verdict changes.
  4. A review that fails transiently is retried on the same route (retryAttempts, default 4). The gate calls llm.stream directly, outside the agent loop, so the harness retry plugin (an agent/request-error listener) never sees a review: without this, one dropped connection denies the tool call.

Why retries need their own classification

Only the codes the harness itself treats as transient are retried: EMPTY_RESPONSE, RATE_LIMIT, SERVER, TRANSPORT. TIMEOUT is deliberately excluded — the DeepSeek adapter raises it from an idle watchdog, so retrying it multiplies a silent wait by the attempt count while the auto-review deadline drains. ABORTED (the deadline, or the caller cancelling) and configuration errors such as AUTH are not fixed by trying again.

A failed attempt's terminal finish chunk is held back: the gate's reader ends the review on any terminal finish, so yielding it would end the review on the first transport blip. Reasoning chunks stay live (the reader ignores reasoning content), so a retried review exposes more than one attempt's reasoning while the verdict is still parsed from the final text block alone.

Why the wrappers, and not an llm/stream listener

Two seams were tried first and both are dead ends on a real runtime:

  • Mutating the request inside an llm/stream listener throws: auto-review freezes it (deepFreeze) before streaming.
  • Returning next(replacement) from a listener never reaches the adapter: Cordis's EventsService.waterfall invokes the innermost callback with the argument list it closed over.
  • Writing ctx.llm.stream = wrapper is also ineffective: ctx.llm is a per-read traceable proxy, and its property overlay shadows what you write.

The wrappers are therefore installed on the object that owns each method in the service's prototype chain (LlmRuntime.prototype in practice), which is the one seam every consumer actually calls. Both are removed when the plugin's fiber disposes.

Why prepareCall needs its own wrapper

A prepared handle resolves its route during prepareCall and then rejects a dispatch whose config differs from the resolved one (INVALID_PREPARED_CALL). The retarget must therefore happen before the call is prepared; swapping the route in the returned handle cannot work. With wrapPrepareCall: true (the default) a review prepared that way runs on the review route, and turning it off restores the session route for that path.

Install

Published on npm as dsh-auto-review-model-router:

# in the profile directory
pnpm add dsh-auto-review-model-router

From a local checkout instead, link it:

// <profile>/package.json
"dependencies": { "dsh-auto-review-model-router": "link:D:/path/to/dsh-auto-review-model-router" }

Then insert it in the profile patch layer, after the auto-review bundle:

# <profile>/cordis.patch.yml
- insert:
    - id: auto-review-model-router
      name: dsh-auto-review-model-router
      config:
        reviewModel: deepseek-official/deepseek-flash

Restart the app: patch-layer changes apply at profile startup.

Configuration

FieldDefaultMeaning
reviewModeldeepseek-official/deepseek-flash<provider>/<model> every review runs on. An empty string disables routing.
systemPromptPatternsthe shipped REVIEW_POLICY openingSubstrings, or /regex/u literals, matched against a request's system prompt. Widen this only if a harness release rewrites that prompt.
retryAttempts4Retries after the first attempt of one review call, so up to 5 attempts. 0 disables retrying. Maximum 10.
retryDelayMs500Pause before each retry.
wrapPrepareCalltrueAlso route review requests issued through llm.prepareCall.
dropReasoningEfforttrueDrop the source route's reasoning effort on the review request.
dropMaxTokenstrueDrop the source route's output cap on the review request.
logRetargetstrueLog each retargeted review. Retries log a warning regardless.

Verify

The test suite has two files. test/router.test.js covers the decision surface with no harness at all; test/live.test.js runs the wrappers over the real LlmRuntime and skips those checks when neither this package nor DSH_PROFILE_DIR resolves @deepseek-ai/dsh-llm.

node test/router.test.js
DSH_PROFILE_DIR=<profile dir> node test/live.test.js

Two commands rather than node --test: each file runs its node:test suite in-process, while node --test spawns a child process per file.

The plugin patches LlmRuntime.prototype, so each live test disposes its own mount. Skipping that teardown leaks a wrapper into the next test's dispatches.

At runtime each retarget logs one line, and each retry logs a warning:

auto-review-model-router: review request re-routed anthropic/claude-opus-4 -> deepseek-official/deepseek-flash (stream)
auto-review-model-router: review attempt 1/5 failed with TRANSPORT; retrying in 500 ms

Scope and limits

  • Only requests recognized as auto-review calls change route. A false negative costs nothing (the review runs exactly as before); a false positive is bounded to one extra object and one changed route for one hand-built request.
  • The standalone dsh-auto-review plugin needs none of this: its reviewerModel config field already sets the reviewer's model directly.
  • DSH public APIs are pre-stable. A release that changes the REVIEW_POLICY opening, LlmRuntime.prototype's method names, or the prepared-handle contract needs a matching update here. Detection is configurable (systemPromptPatterns) precisely for the first case, and the plugin logs a warning instead of failing the profile boot when a method it needs is missing.

License

MIT