Introduction

Under the plugin-based architecture of DeepSeek Harness (DSH), settings pages for managing multiple LLM Providers can easily become fragmented. The dsh-llm-providers-ui plugin acts as the host, uniformly managing the LLM Providers settings shell, card ordering, and selector logic, and provides shared UI context and tooling for other Provider plugins.

What It Is

This plugin is responsible for mounting the LLM Providers settings page. It owns the llm-providers settings namespace (the sole writer) and takes over the id: providers area (order 12) within settings.section on the Web side. Through it, Provider plugins can register cards and share ordering, quota display, and model catalog editing capabilities.

Core Features

  • Settings Shell Management: Provides a unified container for the LLM Providers settings page.
  • Cards and Ordering: Supports drag-and-drop card reordering, Picker ordering management, and logic for saving and restoring the order.
  • UI Component Library: Provides shared Provider quota dashboards, detail templates, model catalog editors, and selector dialogs.
  • Interaction Implementation: Provides an implementation of a draggable sortable list.
  • Data and Caching: Provides Provider usage readers, cache management, and quota status evaluation.

Installation and Activation

This plugin is a packaged artifact and must be listed in the Profile. Before installing other Provider plugins, install this plugin first:

dsh plugin --profile web add --force \
  https://github.com/NOirBRight/dsh-llm-providers-ui/releases/latest/download/dsh-llm-providers-ui-0.2.8.tgz

Typical Usage

Provider plugins need to register and integrate using the interfaces provided by this plugin:

  1. Register Cards: Register cards under settings.provider.item, using the Provider’s settingsNs as the Key.
  2. Register Directory: Register { key, role, header, usage } in ctx.providerDirectory.
  3. Import Readers: If the Provider needs to display usage, import the reader factory from dsh-llm-providers-ui/usage-readers.
  4. Import Types and Slots: Import the directory and slot types from dsh-llm-providers-ui/client (using import type {} syntax).
  5. Render Components: Use the ProviderCardHeader and ProviderQuotaMeter components from dsh-llm-providers-ui/provider-ui to render the header and quota, and use dsh-llm-providers-ui/provider-detail to render the details.

Caveats

  • Version Locking: The host @deepseek-ai/dsh-* packages have unlocked versions (peer is *); only devDependencies locks the build target 0.1.5-rc.1. The Cordis version must remain within >=4.0.2 <5.0.0.
  • Dependencies: Before DSH supports mounting transitive Bundles, this plugin must be listed in the Profile.
  • Export Paths: Only the built lib/ entry points are exported. Importing code from the src directory is strictly prohibited.
  • Navigation Icon: The 14px globe icon in the navigation bar is a temporary DOM adapter (src/client/nav-icon.ts) implemented via MutationObserver. It should not be copied into Provider plugins. Wait until DSH exposes a public icon API before removing this file.
  • Uninstall Behavior: Uninstalling this plugin will cause its owner to discard the settings namespace; reloading will recreate it, but the Provider Host services themselves are not affected (because their llm routes are independent).
  • No Permission Restrictions: This plugin runs with the current DSH process permissions. Please inspect the source code and license before installing.

Conclusion

dsh-llm-providers-ui is core infrastructure for building Provider plugins. By providing a unified shell, quota management, and ordering logic, it simplifies the complexity of settings management in multi-Provider environments. Developers should rely on its exported build artifacts and follow its consumption contract to maintain ecosystem consistency.