DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

Thinking Levels — DeepSeek Harness 插件(DSH Plugin)
← Plugins

dsh-thinking-levels

Thinking Levels

DSH 主机插件:为 dsh 提供思考级别(reasoning_effort)控制——按工具轮次自动调整,可选择手动锁定,并提供按工具统计的时间遥测。

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

npx -y @deepseek-ai/dsh plugin --profile web add github:drscrewdriver/dsh-thinking-levels#8018524a84473a3c9df97a6da7971a4193889dce
README兼容性版本
思考档位 settings card: default level (auto scheduling), enable / allow-downgrade / allow-upgrade toggles, llm-pi-ai custom-provider model-capability table with the progressive per-model editor, and apply-to-all presets (Off/High/Max official DeepSeek style, Off/Low/Medium/High generic).

兼容性与来源证明

Thinking Levels 以 dsh-thinking-levels 发布,当前版本为 0.6.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/9/20

版本

3.0.0stable
2026/9/18
2.0.0stable
2026/9/18
0.6.0stable
2026/8/29
查看其余 17 个版本收起版本
2.0.0-beta.3beta
2026/9/16
2.0.0-beta.2beta
2026/9/11
1.0.0-beta.1beta
2026/9/11
2.0.0-beta.1beta
2026/9/11
0.7.2-beta.1beta
2026/9/11
0.7.1-beta.4beta
2026/9/11
0.7.1-beta.3beta
2026/9/11
0.7.1-beta.2beta
2026/9/9
0.7.0-beta.1beta
2026/9/6
0.4.1stable
2026/8/18
0.4.0stable
2026/8/18
0.3.1stable
2026/8/18
0.3.0stable
2026/8/18
0.2.1stable
2026/8/18
0.2.0stable
2026/8/18
0.1.1stable
2026/8/18
0.1.0stable
2026/8/18

相关插件

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

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Sdk Minimal@deepseek-ai/dsh-sdk-minimal独立的最小 SDK 配置包:JSON-RPC、一个 DeepSeek 适配器、持久化 Shell 和 JSONL 会话Sdk App@deepseek-ai/dsh-sdk-appdsh SDK 配置包:基于 dsh-base 提供 stdio JSON-RPC 服务和进程生命周期管理Subagent Codex@deepseek-ai/dsh-subagent-codex基于官方 app-server 协议的一次性 Codex 子代理提供程序
最新版
0.6.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 7
周下载
740
最近提交
2026/9/18
查看源码 ↗项目主页 ↗
README Badge

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

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

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

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

README

dsh-thinking-levels

Per-round thinking-level (reasoning_effort) control for DeepSeek Harness (dsh): pick Auto (a mask) in the session model selector and the plugin schedules low / high / max from the recent tool-call history before submitting the API effort — or fix a wire level (off / on / minimal / low / medium / high / xhigh / max) manually. Cheap tool rounds stay cheap; heavy work never starves.

  • English README
  • 中文 README
  • 日本語 README
  • 한국어 README
  • Installation guide
  • 中文安装指南
  • 日本語インストールガイド
  • 한국어 설치 안내
  • Changelog
  • 日本語 changelog
  • 한국어 changelog

Compatibility note: Version 0.6.0 includes Japanese (ja) and Korean (ko) dictionaries and selector entries, but the current official DSH releases expose only zh and en through LocaleRuntime. On stock DSH, selecting ja or ko fails with locale "<id>" is not registered. These languages will work after official DSH adds the locale IDs. Advanced users can use a DSH fork that updates packages/client/locale/src/locale-settings.ts (LOCALE_IDS) and packages/client/locale/src/client/index.ts (LOCALES labels), together with the corresponding core dictionaries and tests, then rebuild and run the forked DSH. Changing this plugin alone cannot extend DSH's global locale list.

In a multi-step tool chain, the model re-thinks before every tool call — and that thinking dominates the wall-clock time (a 50-step agent task can spend minutes reasoning between tools). dsh-thinking-levels plugs into the agent/request waterfall that dsh re-resolves for every step (registered with prepend so the session model-selection assembly cannot overwrite its decision) and injects a thinking level into the next model request.

Levels

LevelMeaningWhere
offthinking disabled (manual only — never auto-picked)model selector / default level
onthinking enabled (toggle-only models only): sends enable_thinking, never a think effortmodel selector / default level
minimalleast effort (very light tasks)model selector / default level
lowmanual pick for simple chat tasks (cheap rounds stay cheap)model selector / default level
mediummedium effortmodel selector / default level
highthe official default effortmodel selector / default level
xhighextra high effortmodel selector / default level
maxheavy workmodel selector / default level
automask: schedule per step from the recent tool-call history, resolved to a wire level before submissionmodel selector (injected by the plugin) / default level

Wire-level facts (verified against the official DeepSeek docs and dsh's llm-deepseek adapter): low maps 1:1 on deepseek-v4-flash / v4-pro, while medium / xhigh collapse onto high. The adapter accepts off | low | high | max and rejects anything else with UNSUPPORTED_REASONING_EFFORT — auto is the plugin's mask layer, never sent to the API, always resolved to a concrete wire level before injection. on is not an effort level: it is advertised only by toggle-only models (Qwen3.6-style), and it only flips enable_thinking true — no reasoning_effort is sent; an effort-capable model never advertises on, so a manual on pick on one is stripped.

Custom wire mapping

For hand-declared llm-pi-ai models the settings card lets you map each level to the exact value your gateway expects (borrowed from dsh-thinking-effort): tick a level and enter its wire value, e.g. high → ultra. The mapping is stored as the model's reasoningEfforts table, so the Composer selection High sends ultra to the gateway. Leaving off empty means "do not send".

  • Official preset: Off / High / Max (official DeepSeek style)
  • Generic preset: Off / Low / Medium / High

Model-aware guard (v0.5.0)

The plugin never sends a reasoning_effort to a model that does not advertise one. Custom openai-completions routes (e.g. a local Qwen3.6 without reasoningEfforts) are classified non-reasoning via ctx.llm.resolveModelInfo, and any effort — inherited or scheduled — is stripped instead of sent, so dsh's per-request UNSUPPORTED_REASONING_EFFORT rejection cannot fire. Unsupported fields are never passed to an API that cannot take them.

Version behavior:

dsh versionlow handling
rc.6 (old)not native: the selector only shows it when a configurer-confirmed models override names it; the level is then advertised (selector + request validation) and passed through verbatim
rc.7+ (new)native: the plugin neither rewrites nor re-injects it; a manual low pick passes through unchanged

The auto scheduler may still pick low for supporting models — the capability guard above is what keeps it away from models that cannot take it.

Model-selector Auto

The session model selector (next to the model) now offers Auto after the wire levels (injected into the model-directory metadata by the plugin):

Model-selector pickBehavior
Autoplugin schedules via tool history + the upgrade/downgrade toggles, resolves to low / high / max before submission
off / on / minimal / low / medium / high / xhigh / maxmanual choice wins — plugin does not intervene (on stays on on toggle-only models, never lifted to an effort; effort-capable models strip it)
unsetthe plugin's default level applies (below)

Auto scheduler

The hub is high (the official default). auto schedules between low / high / max; it never picks off.

Recent tool callsLevel
none (fresh prompt, pure chat)low
≥75% simple tools, small args, downgrades allowedlow
mixed / heavy toolshigh
very heavy payloads, upgrades allowedmax

The scheduling policy is the same source as dsh-tool-turbo (same simple-tool whitelist / payload thresholds / 75% ratio rule).

Install

See INSTALL.md for the full official-CLI guide (profile discovery, upgrade, migration, verification, troubleshooting). Quick start:

# 1. install the plugin into a profile from npm (web shown; any profile works)
#    (the web profile is a pnpm workspace root, so -w is required)
dsh plugin --profile web add dsh-thinking-levels -w
#    GitHub alternative:
#    dsh plugin --profile web add https://github.com/drscrewdriver/dsh-thinking-levels.git -w
#    local-path alternative (no network needed):
#    dsh plugin --profile web add /absolute/path/to/dsh-thinking-levels

# 2. restart dsh web (a running instance does not hot-load new bundle layers)
dsh web

Note: the dsh runtime uses pnpm 11, whose minimumReleaseAge supply-chain policy may block a freshly published version with ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION — add the version to minimumReleaseAgeExclude in ~/.dsh/profiles/web/pnpm-workspace.yaml to lift the cooling period.

Manual link: registration (alternative to dsh plugin add):

#    ~/.dsh/profiles/web/package.json dependencies:
#      "dsh-thinking-levels": "link:<absolute path to dsh-thinking-levels>"
#    ~/.dsh/profiles/web/cordis.patch.yml:
#      - insert:
#          - id: thinking-levels
#            name: dsh-thinking-levels
cd ~/.dsh/profiles/web && pnpm install && dsh web

Configuration

Two surfaces share one schema:

  • Assembly — the plugin row's config: in the profile composition (e.g. cordis.yml):
    config:
      level: auto            # off | on | minimal | low | medium | high | xhigh | max | auto — the default level when the session picks nothing
      allowDowngrade: true   # let the scheduler drop below `high`
      allowUpgrade: false    # forbid the scheduler lifting to `max`
    
  • Runtime — the dsh-settings namespace thinking-levels (level, allowDowngrade, allowUpgrade, enabled, models): changes apply to the next model request, no restart needed. A visual editor is available under Settings → Plugins → configurable plugins.

Per-model capability overrides (models, keyed provider/model) confirm what auto-detection finds; the configurer has the final word:

config:
  level: auto
  models:
    llm-pi-ai/Qwen3.6-35B-A3B:   # non-reasoning thinking model (thinking toggle + budget)
      vision: false
      thinking: true
      efforts: false             # never send reasoning_effort (stripped at request time)
    llm-pi-ai/Qwen3.8-27B:       # effort-capable model (rc.6-era adapter without low)
      efforts: [low, high]       # confirm low → advertised in the selector + passed through

For Qwen thinking on/off + budget, configure the llm-pi-ai route instead: compat.thinkingFormat: qwen (→ wire enable_thinking + thinking_budget via thinkingBudgets), or qwen-chat-template (→ chat_template_kwargs.enable_thinking) for effort models like Qwen3.8-27B.

Defaults: { enabled: true, level: 'auto', allowDowngrade: true, allowUpgrade: false, models: {} }.

Semantics: the model-selector pick outranks the plugin's default level. Pick auto (mask) → plugin schedules; pick a wire level → applied directly; pick nothing → the plugin's level default is used. allowDowngrade / allowUpgrade constrain auto scheduling only.

Auto-takeover of dsh-llm-openai-completions (v0.5.2)

Custom gateways (vLLM / LM Studio / self-hosted OpenAI-compatible proxies) must be served by dsh-llm-openai-completions once they declare thinking (reasoningEfforts table in llm-pi-ai) — otherwise pi-ai sends role: "developer" (400) or drops enable_thinking. This plugin maintains the takeover list automatically:

  • Scans llm-pi-ai.providers for providers that are custom openai-completions gateways (api: openai-completions or a non-official baseURL) and declare a reasoningEfforts table on any model;
  • Merges them into llm-openai-completions.providers with enabled: true (existing manual entries are preserved, deduplicated);
  • Triggers on plugin start, llm/adapters-updated, and settings changes to llm-pi-ai or the takeover list — no manual config editing;
  • Soft-coupled: skips the write silently when llm-openai-completions is not installed (its namespace is unregistered).

The takeover mechanism as a whole — control-plane contract (who is taken over, how a control-layer plugin decides and injects) and transport-plane wire contract — is standardized in the Takeover Control Spec; this plugin is the reference control-layer implementation of it.

Dependency note

The host half does not value-depend on @deepseek-ai/dsh-settings (settings registration goes through the cordis settings service provided by the dsh runtime) — no need to install official packages into the profile manually. dependencies is just @deepseek-ai/schemastery (installed automatically with the package).

Development

npm run lint        # eslint (typescript-eslint flat config)
npm run typecheck   # tsc --noEmit
npm test            # vitest — 46 tests

Test coverage: level policy (manual pass-through incl. the extended levels, on clamping, auto scheduler, validation, simple-tool boundary), the model-capability guard (reasoningEffortSupported, resolveEffortInjection stripping/passthrough), session-event parsing (guards, window cap, malformed records), the config schema (defaults lockstep, out-of-band rejection, models overrides), and takeover-sync (identification, dedupe merge, soft-coupling).

License

MIT