DSH Plugins Marketplace

DSH Plugins

Plugins

/

UI & Experience

/

dsh-model-grid

d

dsh-model-grid

Manifest valid

Responsive card grid for the DeepSeek Harness composer model picker, grouped by provider. Host-only: injects a stylesheet through webserver/index-inject without rebuilding the client bundle, and suppo

hasBundlePatch

dsh-model-grid

CI License: MIT

Turn the composer model picker in DeepSeek Harness from a long one-per-row list into a responsive card grid, grouped by provider.

BeforeAfter
beforeafter

Features

  • Responsive grid. As many columns as fit the popup (auto-fill), never fewer than one, so it degrades gracefully on narrow windows.
  • Grouped by provider. Each provider keeps its own section; the provider heading spans the full row.
  • Works with both pickers. The stock dsh-client-ui-model-selection dropdown and the third-party dsh-peakrate model menu (which replaces the stock trigger when installed). The stylesheet does not depend on either plugin being present.
  • Configurable. Width, card width, gap, height cap, and whether to hide the long price countdown.
  • Host-only, upgrade-safe. A single <style> is injected into the page <head> through the webserver/index-inject event. No client bundle is rebuilt, so it keeps working after DSH updates.
  • No runtime dependencies.

Supported pickers

PickerWhat identifies itNotes
Stock dsh-client-ui-model-selection[data-menu-group] sections, [role="menuitemradio"] buttonsAttribute-based selectors, so hashed CSS-module class names don't matter.
dsh-peakrate model menu.dsh-peakrate-ms-menu, .dsh-peakrate-ms-group, .dsh-peakrate-ms-optionOptional; this plugin never depends on it.

The rules are scoped so the two-cell root pane (Model / Reasoning effort) of the peakrate menu keeps its normal narrow width — only the grouped model list is widened.

Install

This is a DSH profile plugin. It is host-only, and the web UI must live at the bundle layer to appear, so it needs to be in dsh.profile.bundles.

# 1. add the dependency to a profile
dsh plugin --profile web add github:anonamerjaxon-dev/dsh-model-grid

# 2. add "dsh-model-grid" to dsh.profile.bundles in
#    ~/.dsh/profiles/web/package.json, then restart the profile
dsh web

If you prefer a local checkout:

dsh plugin --profile web add link:/path/to/dsh-model-grid

Then add the same "dsh-model-grid" entry to dsh.profile.bundles and restart.

Restarting the profile is required: the host plugin is loaded at boot and the stylesheet is injected when the page is served.

Configuration

Options are passed through the plugin entry's config and merged with the defaults.

KeyDefaultDescription
maxWidth900Hard cap on the popup width, in CSS px (clamped 240–4000).
minCardWidth200Minimum width of a model card, in CSS px (clamped 80–1200).
gap6Gap between cards, in CSS px (clamped 0–64).
maxHeightVh76Popup height cap, in vh (clamped 20–100).
hideCountdowntrueHide the long "· 14h 23m" countdown in the price badge.
enabledtrueWhen false, nothing is injected.

Example — in the profile's cordis.patch.yml:

- insert:
    - id: model-grid
      name: 'dsh-model-grid'
      config:
        maxWidth: 1100
        minCardWidth: 180
        hideCountdown: false

How it works

  1. apply(ctx, config) listens for the host's webserver/index-inject event.
  2. On every index response, the listener pushes one { kind: "style", text } row.
  3. DSH renders that row as a <style> block in <head>.

Because the CSS is generated from css.js at injection time, there is no file I/O and nothing to keep in sync. buildCss() is exported and unit-tested independently of the host.

Compatibility

  • DeepSeek Harness 0.2.1-rc.2 (declared in package.json → dsh.compatibility).
  • Node.js >= 22.
  • No bundler, no client build step.

Development

git clone https://github.com/anonamerjaxon-dev/dsh-model-grid.git
cd dsh-model-grid
node --test

The test suite covers config defaults/clamping, both picker selector sets, the countdown toggle, and the injection table.

Maintainer: registry submission

Listing in the awesome-dsh-plugin registry is a one-file pull request. The scripts/ helpers automate it:

scripts/submit-to-market.sh --dry-run   # validate, change nothing
scripts/submit-to-market.sh             # open the PR
scripts/schedule-submit.sh              # one-shot launchd timer for the first eligible moment
scripts/schedule-submit.sh --uninstall  # remove the timer

The registry's CI enforces a 1-day minimum repository age, which is exactly what schedule-submit.sh waits for. See scripts/README.md.

License

MIT © 2026 Jackson Yao

Versions

Latest versionPublishedSize
1.0.0——

Comments

Loading…

Similar plugins

dsh-provider-model-picker

by icrefin

Names the provider beside the model in DeepSeek Harness's composer control (Provider/Model) while keeping the provider-grouped picker.

Manifest valid

★ 0

MIT

TypeScript

Oct 11, 2026

dsh plugin --profile web add dsh-provider-model-picker

by mrdevlorx

A searchable, sortable model picker for the DeepSeek Harness Web UI — provider groups, favorites, models.dev prices, context windows, live per-task token cost and a local-model filter. One-command ins

UI & ExperienceManifest valid

★ 7

↓ 61/wk

MIT

JavaScript

Sep 16, 2026

dsh plugin --profile web add dsh-model-garden

Third-party model settings for DeepSeek Harness: pick a provider and a model in the composer menu, gate a model's thinking level with one switch on the official Models page card, and configure per-rou

Models & ProvidersManifest valid

★ 1

MIT

TypeScript

dsh plugin --profile web add dsh-model-think-level

by liu19666

DeepSeek Harness 插件:把输入框模型选择器改成按来源渠道分块 + 下钻选模型,保留搜索与推理强度

UI & ExperienceManifest valid

★ 0

MIT

JavaScript

Oct 18, 2026

dsh plugin --profile web add dsh-model-block-picker

by LiuCrane

DSH Web UI plugin: model provider chip beside the composer plus DeepSeek and OpenCode Go balances below it, only for providers the profile configures.

Manifest valid

★ 0

JavaScript

Oct 3, 2026

dsh plugin --profile web add dsh-easy-balance

by a1073097082

Adds searchable filtering to the model selector by provider, model name, and model ID; spaces act as wildcards.

UI & ExperienceTerminal & ClientsManifest valid

★ 4

↓ 98/wk

MIT

JavaScript

Aug 15, 2026

dsh plugin --profile web add dsh-model-search