# dsh-reasoning-effort

> Add a Codex-style model and inference intensity slider control below

## Metadata

- Author: [@HanaAyane](https://github.com/HanaAyane)
- Repo: <https://github.com/HanaAyane/dsh-reasoning-effort.git>
- GitHub: [HanaAyane/dsh-reasoning-effort](https://github.com/HanaAyane/dsh-reasoning-effort)
- Stars: 93
- Language: TypeScript
- License: [MIT](https://spdx.org/licenses/MIT.html)
- Topics: `deepseek`, `deepseek-harness`, `dsh-plugin`, `reasoning-effort`
- Forks: 9
- Open Issues: 4
- Last push: 2026-08-17T13:21:36.000Z
- Added: 2026-08-20T00:00:00.000Z

## Install

```bash
dsh plugin --profile web add github:HanaAyane/dsh-reasoning-effort
```

## Wiki

## One-Line Description
Adds a Codex-style "Model + Current Reasoning Effort" button below the DSH Web input box. When opened, the top shows a reasoning effort slider with a radiation effect (gears automatically adapt to the current model), while the bottom still shows the native DSH model list. Enabled by default after installation, and the gear status shares the same session with the `/model` command.

## Core Features
- Injects a combined trigger button into the "model seat" slot below the input box (displays current model name + current gear name); clicking to expand the popover shows a reasoning effort slider at the top and the native DSH model list at the bottom
- Slider gears are read entirely from the `reasoning.efforts` publicly exposed by the current model in the DSH model directory; when a model has fewer than two gears, the slider is hidden entirely with a message "Current model does not provide reasoning effort gears" — the plugin never invents new gears
- When dragging the slider, the button moves continuously following the pointer position and snaps to the nearest gear only on release; on failure it automatically rolls back to the last confirmed gear and displays an error in the status bar
- Gear submission goes through the DSH session interface, reading/writing to the same session directory as the `/model` command without conflicts; supports keyboard ←/→/Home/End for switching
- The plugin includes an "Effort Declaration Guide" panel: for user-declared models with missing or inconsistent directory gears compared to the knowledge base, it provides a complete copyable YAML entry (including `- id:` line, preserving name/contextWindow/maxTokens); after replacing settings.yaml, DSH loads it automatically
- Settings → General Settings adds two toggles: "Reasoning Effort Slider" (globally enable/disable) and "Chibi Thumb Slider" (replaces default white thumb with eight-frame running character); both are stored only in browser localStorage

## Technical Implementation
- **Language**: TypeScript (Host half `src/index.ts`, Client half `src/client/index.tsx`), build uses esbuild to bundle client modules, `tsc` outputs types and Node entry
- **Key Dependencies**: `@deepseek-ai/cordis` (plugin runtime), `@deepseek-ai/dsh-client-ui-model-selection` (session model directory), `@deepseek-ai/dsh-client-runtime` + `dsh-client-ui-slots` (frontend slots), `@deepseek-ai/schemastery` (Host-side settings schema)
- **Architecture Pattern**: Official Bundle Plugin — `cordis.patch.yml` synthesizes a `reasoning-effort` layer in the web Profile; the Host half injects `settings`, `llm` services via `apply(ctx)` and registers namespace `dsh-reasoning-effort` (read-only and diagnostic, never writes), while using `ctx.inject(['connection'])` to mount a loopback RPC channel `/dsh-reasoning-effort` only in web environment; the Client half registers to `conversation.input.model` and `settings.general.item` slots via `ctx.slots.inject`
- **Entry Files**: `src/index.ts` (Host half, loopback RPC endpoints `diagnose` / `store`) + `src/client/index.tsx` (Client half, components + preference storage + slider canvas rendering)

## Use Cases
Users who want to quickly switch reasoning effort gears like "Off / Low / Medium / High / Max" via slider/keyboard on DSH Web, without typing `/model` each time; and scenarios where using a custom provider model with missing directory gears need the plugin to provide a directly pasteable `reasoningEfforts` YAML fragment to complete the declaration. Gear switching status is fully interoperable with native `/model`, and the native model selector remains usable.

## Prerequisites and Compatibility
| Dependency | Minimum Version | Description |
|---|---|---|
| DeepSeek Harness | `0.1.0-rc.6` | `peerDependencies` lists seven host packages including `@deepseek-ai/dsh-client-*`, `@deepseek-ai/dsh-api-remotes` all require `^0.1.0-rc.6`; DSH is still in developer preview, upstream UI/service changes may require plugin updates |
| Node.js | `>=22.19` | `package.json#engines.node` explicitly declares `>=22.19`, mainly used for building (`tsc` + esbuild) |
| React | `^18.2.0` | `peerDependencies.react: "^18.2.0"`, client components based on React 18 Hooks |
| Profile | Web only | `package.json#dsh.client.platform: "web"`; the Host half's RPC channel is mounted via `ctx.inject(['connection')]` only in Web Profile, terminal Profile won't trigger |
| Native Modules | None | No runtime dependencies on `node-pty`, `node:sqlite` or other native bindings; only uses browser Canvas / localStorage / fetch |

## Installation
```bash
dsh plugin --profile web add github:HanaAyane/dsh-reasoning-effort
```

## Configuration Options
| Config | Type | Description | Default |
|---|---|---|---|
| `dsh-reasoning-effort.entries[]` (Host settings.yaml) | Array | Extends gear knowledge base, each entry contains `id`, `provider` (`*` wildcard), `model` (`*` wildcard), `note`, `efforts` (gear name → endpoint actual value, `null` means not selectable), optional `compat` (required only for OpenAI-compatible endpoints, containing `thinkingFormat` and `supportsReasoningEffort`). Plugin only generates fragments and prompts, won't automatically write | `entries: []` |
| Browser localStorage `dsh-reasoning-effort.enabled` | Boolean | Enable/disable the entire reasoning effort slider enhancement; after disabling, popover immediately returns to native DSH model selector | `true` |
| Browser localStorage `dsh-reasoning-effort.chibi-thumb` | Boolean | Replaces slider thumb with eight-frame running character animation; user preference takes priority over built-in default | `true` (since 0.6.1) |
| Legacy key `@dsh-external/dsh-reasoning-effort.enabled` | Boolean | Preference under historic package name, automatically migrated to new key then cleared | — |

## FAQ
**Q: After installation, I don't see the "Model + Reasoning Effort" button below the input box. What should I do?**

A: The plugin loads when the Web Host starts; you must quit and restart the DSH Web Host then refresh the page. If the button still doesn't appear, verify that "Settings → General Settings → Reasoning Effort Slider" is enabled, and the current model exposes at least two reasoning effort gears in the DSH model directory (fewer than two will show "Current model does not provide reasoning effort gears").

**Q: The current model doesn't declare reasoning effort gears (e.g., GLM-5.3). What should I do?**

A: The model menu will show "View Effort Declaration Guide"; clicking it provides a directly copyable `reasoningEfforts` full YAML (including `- id:` line, existing name/contextWindow/maxTokens will be preserved). Copy it, replace the corresponding entry in `~/.dsh/settings.yaml` entirely and save — DSH loads automatically without restart. If the knowledge base also has no entry, it provides a general template based on endpoint documentation.

**Q: How do I confirm the plugin has loaded?**

A: Run `dsh --profile web --dump-config`; the parsed config should show a line `name: dsh-reasoning-effort`, corresponding to the bundle layer with `id: reasoning-effort`. You must manually restart the DSH Web Host after installation — plugins are not hot-loaded at runtime.

**Q: How do I uninstall?**

A: Run `dsh plugin --profile web remove dsh-reasoning-effort`, then restart the DSH Web Host again. The native model selector restores automatically; DSH's built-in model directory won't be modified.

**Q: Where are the slider toggle and "Chibi Thumb Slider" stored? Will they失效 if I switch browsers?**

A: Both toggles are stored only in the current browser's localStorage (keys are `dsh-reasoning-effort.enabled` and `dsh-reasoning-effort.chibi-thumb`), not in DSH config files. Switching browsers or clearing browser site data will revert to default state. Legacy key `@dsh-external/dsh-reasoning-effort.enabled` is automatically migrated.

**Q: Alibaba Cloud Bailian endpoint declared gears but still reports 400 error. Why?**

A: Alibaba Cloud Bailian's OpenAI-compatible endpoints (`maas.aliyuncs.com` / `dashscope.aliyuncs.com`) reject the `developer` message role; DSH's pi-ai detection treats it as standard OpenAI, and settings.yaml currently cannot override this behavior. The plugin will directly show a warning in the gear declaration guide panel and recommend using the built-in `zai` route instead.

## Learning Curve
Beginner — just install it and you'll see two toggles in "Settings → General Settings" that you can use directly; when supplementing gears for custom providers, just paste according to the YAML template in the README, no coding required.

## Known Issues and Limitations
- DSH is still in developer preview (`0.1.0-rc.6`), upstream UI or service changes may require plugin updates
- Only supports Web Profile; terminal/Cordis-only Profile won't load the Client half, and the Host half's RPC channel is also skipped
- Slider gear count is limited to what the model publicly exposes in the DSH model directory's `reasoning.efforts`: hidden entirely when fewer than two gears; the plugin never invents new gears, models with only one gear in the directory (including intentionally sparse data from official) remain unchanged
- Slider radiation effect depends on `requestAnimationFrame`; under system "Reduce Motion" settings it automatically stops at a stable frame; at high DPR (>2), canvas is cropped to 2x to control rendering cost
- Host half ignores structurally invalid entries in `dsh-reasoning-effort.entries` (e.g., wrong `efforts` field type) during loading; it won't fail diagnostics due to single bad data, but users must self-verify against schema

---

This document is auto-generated by [deepseek-plugin.org](https://deepseek-plugin.org). HTML page: [dsh-reasoning-effort](https://deepseek-plugin.org/plugins/HanaAyane/dsh-reasoning-effort)
Wiki generated by AI (model: `MiniMax-M2.5`)
