Settings page for per-model capabilities: reasoning-effort levels with their wire spellings, input modalities, and token capacities, written as declarations or sparse catalog overrides.
Install
# from npm (prebuilt)
dsh plugin --profile web add better-model-provider
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:sanshanya/better-model-provider
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
Sparse, non-destructive per-model overrides on official-catalog routes — including reasoning-effort levels and their wire spellings — without replacing the catalog.
Custom models: edit declarations. Official models: edit overrides. Provider configuration remains official.

Why
The official Models page edits a model's input types and token capacities, but it does so by rewriting that route's whole models array: one field touched, and every other model on the route stops following the catalog — and sparse modelOverrides becomes illegal there. It also has no control for per-model reasoning effort.
This page is the other seam. On an official-catalog route it writes only the difference for the model you touched — including reasoningEfforts levels and their wire spellings — and leaves the rest of the catalog following upstream. On your own declared routes it edits the declarations directly.
Install
dsh plugin --profile web add better-model-provider
The npm package ships ready-built, so this path never builds locally. Alternates: github:sanshanya/better-model-provider#master (CI republishes ready-built artifacts to the master branch on every green main push), or the default branch (github:sanshanya/better-model-provider), which builds from source and prints one pnpm allowBuilds key to add, then rerun add; a local link: install must npm install && npm run build first. Restart dsh web, and the Settings sidebar gains Model capabilities.
dsh plugin --profile web rm better-model-provider

Use
- Configure the provider and API key on the official Models page first — keys and route lifecycle are always managed there; this page does not repeat them.
- Expand a model row and edit its capabilities:
- Reasoning effort: pick Custom, check the levels you need; to offer "off" too, check
off(its wire value may stay blank). - Vision models: check
imageunder input modalities — otherwise sending an image to this model gets refused. - Capacities: K/M spelling reads best (
380K,1M). Tap Apply and the change takes effect at once.
- Reasoning effort: pick Custom, check the levels you need; to offer "off" too, check
- Official-catalog routes: tap Manage official models and edit. Every change here stores only the difference from the official default — everything else keeps following catalog updates; Reset to official defaults undoes all of one model's edits at once.
- Manage official providers (N) unfolds installed-but-unconfigured routes: pick one, apply the first change, and the route comes into being (its API key still goes on the official page).
The official Models page can also edit input types and capacities — but only by replacing a route's whole model list, which stops that route following the catalog and rules out overrides. Use this page when you want one model changed and the other thirty-seven still following it. Once a route's list has been replaced on the official page, this page edits that list like any declared route.
Dedicated-adapter apps (built-in DeepSeek / OpenAI Codex) declare their capabilities on their own settings pages and never appear here.
Compatibility
| Harness line | Status |
|---|---|
dsh 0.2.0-rc.1 (npm next) |
verified end-to-end |
dsh 0.1.7-alpha.2 (npm alpha) |
verified end-to-end |
dsh 0.1.7-rc.2 (npm latest) |
verified end-to-end |
dsh 0.1.5-rc.3 |
verified end-to-end |
0.1.2-alpha.1 … 0.1.6-alpha.2 |
not verified — admitted by the peer ranges, no lane has run on them |
0.1.0-rc.7 … 0.1.1-rc.2 |
refused: no connection.api generation here any more |
Verified means both lanes on a real harness: integration boots a checkout and serves the plugin's client module, functional drives a real browser through a capability write and its revert. They are opt-in — BMP_DSH_DIR=/path/to/deepseek-harness npm run test:live (see CONTRIBUTING.md for the functional lane) — and skip without it.
The peers are a single interval, >=0.1.2-alpha.1 <0.3.0: the floor keeps the retired connection.api generation out (the 0.1.0-rc.7 line stays refused), the ceiling admits the dsh 0.2 line. What actually rules on them at install time is dsh's admission gate — it reads prereleases with includePrerelease: true, and that is the path every install of this plugin takes; npm's own peer rule reads the tuple more strictly and disagrees on some versions, but it never governs that path. (Through 0.0.6 the range was enumerated per published line — a residue of npm's stricter reading; 0.0.7 converged it on dsh's semantics.) The nightly canary re-proves the latest, next and alpha channels, and a leg whose channel resolved but whose lane skipped fails the run instead of passing quietly; when a leg turns green again it closes that channel's accumulated red-tracking issues itself.
Field overlap: this page edits per-model reasoningEfforts (levels and their wire spellings) and sparse modelOverrides — the official Models page has no control for either. It also edits input, contextWindow and maxTokens, which the official page edits natively, so those are a convenience here rather than a unique capability. Recovery: if the official page rewrote a route's whole model list while overrides saved here linger beside it, write validation rejects the route — the card offers Remove leftover overrides, one explicit click, never automatic.
License
MIT
Links
More in this category
zhu1090093659/dsh-web#packages/dsh-task-board★ 8488
Task board for the dsh web GUI: a sidebar multi-column kanban whose cards run in real DSH agent sessions and can also be scheduled with cron expressions, executed host-side even with the browser closed.
zhu1090093659/dsh-web#packages/dsh-web-all★ 8488
Plugin and skin collection for the DSH Web UI: task board, Git graph, right-side panel, remote mobile UI, pet, live token stats, and a skin center.
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 4217
A fixed-corner whale widget for the DSH web GUI — balance, today's usage and per-turn cost with peak/off-peak pricing, editable balance-alert and daily-budget bubbles, a module-based custom bubble queue with A/B weighted choices and random lines or images, 30+ vendor templates (OpenAI, OpenRouter, Kimi, SiliconFlow, Ark, Zhipu, MiniMax and more) with per-model balance and subscription quota, plus task-end sound, imported audio, custom roles and a resource manager. Local-only, no telemetry.
ccch1mneyyy/dsh-TUI★ 4167
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
omdsh-dev/DSH-better-sidebar★ 4045
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
Devin-AXIS/deepseek-design#deepseek-idesign★ 1432
Visual design studio for websites, app prototypes, posters, cards, reports, and magazines, with templates, direct element editing, selection-aware AI draft handoff, and export.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.