DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Thinking Effort — DSH Plugin for DeepSeek Harness
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins

@hytime/dsh-thinking-effort

Thinking Effort

Add configurable thinking intensity levels for DSH's pi-ai third-party models and set the default thinking intensity for sub-agents.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add @hytime/dsh-thinking-effort@0.3.1
READMECompatibilityVersions

Compatibility and provenance

Thinking Effort is published as @hytime/dsh-thinking-effort and currently resolves to version 0.3.1. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
npm
Registry updated
9/20/2026

Versions

0.3.1stable
9/19/2026
0.3.0stable
9/16/2026
0.2.4stable
9/10/2026
Show 18 more versionsCollapse versions
0.2.3stable
9/9/2026
0.2.2stable
9/9/2026
0.2.1stable
9/8/2026
0.2.0stable
9/4/2026
0.1.14stable
9/2/2026
0.1.13stable
9/1/2026
0.1.12stable
8/31/2026
0.1.11stable
8/31/2026
0.1.10stable
8/30/2026
0.1.9stable
8/29/2026
0.1.8stable
8/25/2026
0.1.7stable
8/19/2026
0.1.6stable
8/18/2026
0.1.5stable
8/18/2026
0.1.4stable
8/18/2026
0.1.3stable
8/17/2026
0.1.2stable
8/17/2026
0.1.1stable
8/17/2026

Related plugins

Loading related plugins…

Latest
0.3.1
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
2 MB
Files
86
Surface
web
License
MIT
Source
npm
GitHub
★ 32
Weekly downloads
1,050
Security scan
✓ v0.3.1 scan passed
Last push
9/19/2026
View source ↗Project homepage ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in models-usage.

Usage@linxin666/dsh-usageUsage statistics plugin for the dsh web GUI: per-provider balance and coding-plan quota detection plus a live token usage ledger, with a dedicated pet bubble for the current providerUsage Stats@ychris12138/dsh-usage-statsToken usage heatmap, provider balances, and subscription quotas for the dsh web GUICodex Connectdsh-codex-connectChatGPT OAuth and Codex models for DeepSeek Harness.Ui Usage Billing@kenz1117/dsh-ui-usage-billingUsage billing dashboard for DeepSeek Harness: sidebar cost metrics plus a full dashboard modal, priced from a current multi-provider catalog with real usage aggregated from session logs.

README

dsh-thinking-effort

A DSH (DeepSeek Harness) plugin that adds configurable reasoning effort levels to hand-declared llm-pi-ai models and sets a default reasoning effort for subagents.

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

Compatibility boundaries: DSH Runtime compatibility covers the Settings transport only: modern DSH exposes remote.settings, while legacy DSH exposes connection.api.settings. The plugin detects the available runtime capability and keeps the legacy fallback optional, so the settings page does not require a Remote provider on older DSH builds.

Gateway Protocol compatibility is a separate layer. When the DSH schema exposes them, the plugin supports 15 common scalar llm-pi-ai.compat fields, grouped into role/reasoning, format/output, streaming/tools, and storage/cache. Boolean fields offer Auto, supported, and unsupported; enum fields offer Auto and their concrete values. DSH 0.1.0-rc.7 does not provide gateway compat settings. DSH 0.1.0-rc.8 through <0.1.2-alpha.1 provide the other fields, but not supportsFinishReason or supportsThinkingTokenBudget; DSH 0.1.2-alpha.1 and later expose all 15 when supported by the schema. The optional dsh-llm-openai-completions transport can take over eligible custom OpenAI-compatible thinking providers when it is installed and enabled. Auto unsets the current-layer override and restores the next value in the inheritance chain.

DSH 0.1.2-alpha.1 and later accept language-pack locale IDs through LocaleRuntime. This plugin registers ja and ko dynamically, so no DSH core fork is required. Older DSH builds that only expose built-in locale IDs support zh and en only.

The published runtime entries are lib/index.js (Host) and lib/client.js (Client). After changing TypeScript or locale sources, run npm run build before running DSH or packing the plugin. Current DSH does not expose a public semver metadata contract, so runtime capability detection is authoritative. An optional version is used only when explicit metadata or test input supplies it; unknown valid versions still use the detected capabilities. The plugin supports both modern remote.settings and legacy connection.api.settings.

The Host registers its dsh-thinking-effort Settings namespace through the host-provided Settings installSection when available, and falls back to the legacy register path otherwise. It does not depend on @deepseek-ai/dsh-settings at runtime, so the package installs cleanly into DSH profiles configured with autoInstallPeers: false without introducing a second Cordis runtime.

DSH compatibility

DSH rangeGateway compatibility settings
0.1.0-rc.7Not available
0.1.0-rc.8 to <0.1.2-alpha.1Available when exposed by the DSH schema, but without supportsFinishReason and supportsThinkingTokenBudget
0.1.2-alpha.1 to <0.1.7-0All 15 fields when exposed by the DSH schema. Releases at or beyond the newest bound are unmapped: the plugin keeps working and follows the capabilities the running host reports instead

From DSH 0.1.0-rc.8 onward, field availability follows the runtime schema. The table shows the maximum field set for each DSH version; the route protocol can further reduce it.

A gateway compat field can be configured only when the DSH version, runtime schema, and route's api protocol all support it. Unsupported fields stay hidden and are not written to Settings. Among these 15 fields, openai-completions supports all 15, while openai-responses, azure-openai-responses, and openai-codex-responses support only supportsDeveloperRole, supportsStrictMode, and supportsLongCacheRetention. If api is missing or unrecognized, the runtime schema and DSH validation remain the final authority.

Why use it?

The llm-pi-ai adapter supports hand-declared third-party models, but those entries often do not declare reasoningEfforts. As a result, Composer does not show a reasoning effort selector, and gateway-specific values such as ultra cannot be mapped to DSH's standard levels.

This plugin provides the configuration layer needed to:

  • Add default off, high, and max options to models without a declaration;
  • Configure reasoning levels per model from the DSH settings page;
  • Map a DSH level such as high to a gateway value such as ultra;
  • Set a default reasoning effort for subagents while preserving explicit request values;
  • Keep existing user-defined model declarations unchanged.

The plugin is usually unnecessary when you only use built-in DSH models and their reasoning controls already work.

Identifiers

These identifiers have different responsibilities:

IdentifierPurpose
@hytime/dsh-thinking-effortnpm package, browser bundle path, loader ID, and host/client runtime ID
thinking-effortCordis composition entry ID and settings Slot ID

Features

FeatureDescription
Default levelsAdds off, high, and max without overwriting custom values
Per-model editorSelect levels and configure gateway values for both catalog/modelOverrides and models[] entries in Settings
Gateway compatibilityConfigure 15 common scalar fields globally per provider or separately per model, grouped by role/reasoning, format/output, streaming/tools, and storage/cache; groups are collapsed by default
OpenCode session HeaderEnable a dynamic x-opencode-session per exact model. By default a deterministic ses_… generator bound to the DSH session (with template / expression / script modes to survive upstream format changes), without storing a fixed Header value
Gateway mappingSend ultra when the user selects DSH high
Backup and profilesExport the current configuration as a JSON file for migration; save named profiles locally and switch between them; choose merge or replace before importing, with an impact preview
Composer effort sliderRegisters an optional Composer seat when the Web runtime exposes modelDirectories, with host-resolved tiers for the current provider/model
Subagent defaultApply a default effort only when a subagent request has no explicit value
Multilingual settingsIncludes Chinese, English, Japanese, and Korean dictionaries; Japanese/Korean switching uses DSH language-pack support
Version watermarkShow the installed plugin version in the bottom-right corner

Install, upgrade, and remove

Use the official DSH CLI to manage the plugin profile. A plain npm install does not register a DSH profile bundle.

# Install the latest version
dsh plugin --profile <profile> add @hytime/dsh-thinking-effort

# Install a specific version
dsh plugin --profile <profile> add @hytime/dsh-thinking-effort@0.3.1

# Upgrade
dsh plugin --profile <profile> update @hytime/dsh-thinking-effort

# Remove
dsh plugin --profile <profile> remove @hytime/dsh-thinking-effort
rm -f "${DSH_HOME:-$HOME/.dsh}/thinking-effort-loaded.json"

See INSTALL.md for profile discovery, migration, validation, and troubleshooting.

Quick use

  1. Open DSH Settings → Model capabilities and effort.

  2. Use the Page language selector at the top to choose 中文, English, 日本語, or 한국어. DSH uses the persisted locale first, then the browser language, then English as the fallback.

  3. Choose a subagent default from the Subagent default effort card, then click Apply.

  4. Use Quick settings to apply the official DeepSeek or generic preset to all models, or expand a provider and model for detailed configuration.

  5. Use the search field to filter models by name or ID. Model rows show text/image input capability badges, a context-window badge when declared, and a settings button for per-model editing.

  6. Select a reasoning level and enter the exact gateway value. For example:

    DSH levelGateway value
    offLeave empty to omit the parameter
    highultra
    maxmax
  7. In the model editor, optionally enable OpenCode session Header for the exact model that needs x-opencode-session. It is off by default, sends a deterministic ses_… value generated from the current DSH session, does not inherit across models or providers, and saves immediately when toggled — there is no separate save button. See the generator section when the upstream changes its expected format.

  8. Return to Composer, choose the configured model, then use its reasoning-effort slider.

Composer reasoning-effort slider

When the DSH Web runtime exposes modelDirectories, the client registers an optional conversation.input.model seat with a low shadow priority; it does not modify Composer itself. The slider reads the host-resolved reasoning.efforts array for the current exact provider/model, so it shows only the tiers currently effective for that model. Changing a level submits the ordinary session model selection; it does not mutate the plugin Settings document.

The model's defaultEffort is shown through the matching tier. If the host model has no defaultEffort, the panel also provides Follow model default, which submits a selection without a reasoning-effort override. The control uses the host --dsw-* semantic tokens and therefore follows the active light or dark theme without its own theme preference.

The seat is not registered when the runtime does not provide modelDirectories; the Settings page and its legacy Settings transport behavior continue to work. This plugin does not modify the DSH Composer, ui-conversation, or ui-model-selection packages.

The settings page shows the installed version as a small watermark such as v0.1.14 in the bottom-right corner.

Gateway compatibility configuration

The provider compat block is the global default for every model under that provider. The Settings page groups the 15 fields into four sections that are collapsed by default. Configure provider defaults with the official DSH YAML shape:

providers:
  qwen-gateway:
    compat:
      supportsDeveloperRole: false
      maxTokensField: max_tokens
    models:
      - id: qwen-plus
      - id: qwen-thinking
        compat:
          maxTokensField: max_completion_tokens

Field-by-field, each value resolves independently in this order: model → provider → base/catalog → protocol. URL/hostname detection is not used as a compat source. A model value overrides only that field. Auto removes the current-layer value, restores provider inheritance when applicable, and lets the next value in the chain take effect. Provider defaults apply to every model on the route; a model edit changes only the current model. For a route/provider, non-empty models[] and non-empty modelOverrides are mutually exclusive; the official schema rejects this invalid configuration, and the plugin fails closed for malformed data.

The provider area in Settings edits defaults for all models. Both catalog models and custom YAML models[] entries expose a single-model compat editor: catalog models write only the target fields with field-level set/unset operations under modelOverrides.<model>.compat, while models[] models write one complete providers.<route>.models array set while preserving other entries and fields. A model edit does not change other models.

These compat values are control plane configuration. They do not implement or replace the gateway transport; an external transport remains responsible for network requests.

OpenCode session Header generator

The model editor has a separate OpenCode session Header switch, stored in the plugin's own dsh-thinking-effort Settings namespace, not in llm-pi-ai.compat. Enable it only for the exact provider/model that requires x-opencode-session; another model on the same route, including a GPT model, does not inherit it. Flipping the switch saves immediately — there is no separate save button — and reopening the model shows the persisted value.

When enabled and no format is configured, the Host sends a deterministic value in the canonical ses_ shape derived from the current DSH session: ses_ + 12 hex characters (a 48-bit millisecond timestamp minted once per session) + 14 Base62 characters (an 80-bit digest of the normalized DSH session id). The same DSH session always sends the same value: the value is stickied per session, and eviction from the bounded value cache drops only the cached value — never the first-use mint — so an evicted session keeps its value when revisited. Only a DSH restart re-mints the hex timestamp, and only in firstUse mode (time: hash needs no state at all). The 14-character suffix is stable across DSH restarts because it is derived, not stored. Different sessions — including each subagent run — derive distinct values.

The generator is configurable under dsh-thinking-effort.opencodeSession.format in the DSH settings document. Four modes cover upstream format changes without rebuilding the plugin:

  • ses-derive (default) — the canonical generator above. time: firstUse mints the hex block once per session; time: hash derives it from the session digest so the whole value is identical on every machine.
  • passthrough — the previous behavior: send the raw DSH session id.
  • template — a string with {hex12}, {tail62}, {sessionId}, {rawSessionId}, {sha256}, {now}, {provider}, {model} placeholders.
  • expression — a safe additive expression with the same context plus sha256, slice, lower, upper helpers, e.g. 'ses_' + hex12 + tail62.
  • script — an absolute path to a JS file exporting format(context), hot-reloaded on file change; on load or evaluation errors it falls back to ses-derive.

An optional validate regex plus onInvalid: warn | drop | send checks the produced value against the latest upstream expectation (warn is the default). An x-opencode-session already supplied by the adapter or caller is always preserved and never overwritten. The setting does not choose or change openai-completions, openai-responses, or anthropic-messages. See INSTALL.md for the full configuration reference.

Sub2API, CPA, and other forwarding gateways must preserve and forward x-opencode-session to the OpenCode upstream. A static route setting such as llm-pi-ai.providers.<route>.headers.x-opencode-session is not an equivalent replacement: it uses one value for every conversation and cannot provide per-conversation routing or prompt-cache affinity. Restart DSH after Host changes and refresh the Web page after Settings or Client changes.

Backup and profiles

The Backup and profiles card, below the language selector and the Subagent default effort card, exports the current configuration, keeps named profiles on this machine, and imports a file exported earlier.

  1. Export current config downloads dsh-config-<timestamp>.json. The file holds the llm-pi-ai and dsh-thinking-effort user layers as written. No credential value is exported — a provider keeps only the name of the environment variable holding its key (apiKeyEnv) — but every value stored in those layers is copied verbatim, and a plaintext token kept in provider headers is one of them. Keep it safe.
  2. Under Profile library, enter a name and click Save current config to store the current configuration as a named profile; Export writes it to a file and Delete removes it. At most 20 profiles are kept. Apply switches back to a profile through the same preview an import uses, so the default Merge keeps providers the profile omits — an exact restore means choosing Replace there.
  3. Import config → Choose file… parses the file and shows an Import preview with the added / overwritten / removed counts; nothing is written before you confirm.
  4. Imports default to Merge (keep what the file omits); Replace must be chosen explicitly and deletes providers the file does not contain. Confirm import first saves the configuration that stands right now under Pre-import backup, then writes the changes — restoring that copy goes through this same preview.

Export and import reuse the existing Settings channel, so the card works with both modern Remote Settings and the legacy connection.api.settings. When the result reports a namespace that takes effect on restart, restart DSH.

When importing a snapshot, only capability configuration is migrated by default. A provider's baseURL, apiKeyEnv, and headers, along with opencodeSession.format.script, are local deployment wiring and take effect only when you explicitly select Also import endpoints and credentials (advanced) in the preview.

Settings page layout

The page header contains the language selector. Below it, the Subagent default effort card controls the default for requests without an explicit effort. The Quick settings controls apply a preset across models. Provider sections can be expanded or collapsed; each model row exposes input capabilities, context length, and gateway compatibility controls in its settings area. models[] saves use one complete array set rather than an array-index path operation.

English Model capabilities and effort settings page

See the complete Chinese, English, Japanese, and Korean screenshot gallery in docs/SCREENSHOTS.md.

How it works

  • Host: Scans llm-pi-ai models and modelOverrides on startup and settings changes, adding defaults only where reasoningEfforts is missing. It also observes the model-level OpenCode session setting and injects the generated x-opencode-session (default ses-derive, configurable per opencodeSession.format) only into matching llm/stream requests.
  • Client: Registers the Settings page through the DSH Settings Remote (ctx.remote.settings) and, when the runtime exposes modelDirectories, registers the optional Composer seat with a low shadow priority and host-resolved effort slider. The model editor stores OpenCode session Header settings in the plugin namespace, separately from llm-pi-ai.compat. Chinese, English, Japanese, and Korean dictionaries are maintained separately in src/locales/zh.json, src/locales/en.json, src/locales/ja.json, and src/locales/ko.json, then generated into the client bundle before publishing.
  • Subagents: Stores the default in the llm-pi-ai user layer as subagentEffort. The agent/request waterfall only fills requests that do not already specify an effort.
  • No configured default: The plugin does not automatically choose off, high, or max; the request omits reasoning and the gateway decides its own default behavior.

Limitations

  • llm-pi-ai exposes seven standard levels: off, minimal, low, medium, high, xhigh, and max.
  • Non-off levels require a gateway value. An empty off value means that the parameter is omitted.
  • The selected subagent level must be supported by the target model, or the gateway may return UNSUPPORTED_REASONING_EFFORT.
  • off and an unset effort may both omit reasoning; whether this disables thinking depends on the gateway protocol.
  • The Composer slider is available only when the Web runtime provides the optional modelDirectories service. The seat is not registered when that service is unavailable, and the plugin leaves Composer unchanged.
  • Host changes require a DSH restart. Settings, locale, and Client bundle changes take effect after a Web page refresh.
  • The profile library and the pre-import backup live in the plugin's own dsh-thinking-effort namespace and are not carried by an export. To move named profiles to another machine, export each profile and import it there.

CI and release maintenance

  • Pull requests and pushes to main run the quality matrix on Node 22.19.0 and 24.x.
  • The workflow uses npm ci; maintainers must commit package-lock.json when dependencies change.
  • The ordinary CI workflow does not publish to npm. Publishing is triggered only by a v<version> tag through publish.yml.
  • Before creating a release tag, update package.json version and CHANGELOG.md files, commit those changes, and create the matching v<version> tag. The tag must point to a commit in the main history.
  • npm Trusted Publishing must be configured for repository hytime/dsh-thinking-effort and workflow publish.yml. The workflow publishes provenance through GitHub OIDC and does not require NPM_TOKEN.
  • Before publishing, the workflow builds and tests four official DSH capability representatives in this order: dsh-v0.1.0-rc.7 (0.1.0-rc.7), dsh-v0.1.1-rc.2 (0.1.1-rc.2), dsh-v0.1.3-alpha.2 (0.1.3-alpha.2), and dsh-v0.1.6-alpha.1 (0.1.6-alpha.1), using the official dsh plugin command and real compatibility checks. The newest representative runs the real-browser DOM probe.
  • The workflow never changes the package version or any CHANGELOG file automatically; an existing npm version also blocks publishing.

License

MIT