Skip to main content

deepseek-harness-desktop/packages/dsh-web-ui-settings

156Stars5Forks6Issues0Watchers

On the DSH Web settings page, add a "Web UI Plugins" top-level section to group the toggles and settings for the dsh-web-ui plugin family. Also provide an rc.6 compatible settings bridge to allow older hosts to read/write these settings.

Evidence5/5methodologySourceInstallMaintenanceDSH versionSecurity scan
Machine-auditedInstall commandRepo verifieddsh-plugin topicLicenseREADMEAI wiki

ⓘ This plugin is a sub-package of the ningbainb/deepseek-harness-desktop monorepo — stars and activity count the whole repository.

Language
TypeScript
License
BSD-3-Clause
Branch
main
ai-agentai-coding-assistantcodexdeepseekdeepseek-harnessdesktop-appdshdsh-plugin

Install

cmdweb profile
$ dsh plugin --profile web add @linxin666/dsh-client-ui-web-ui-settings

Run the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial

Install via your agent

Install the DeepSeek Harness plugin ningbainb/deepseek-harness-desktop/packages/dsh-web-ui-settings for me: review the repository at https://github.com/ningbainb/deepseek-harness-desktop first, then run the install command and verify the plugin loads successfully.

Paste this instruction to the DSH Web GUI assistant — it will install and verify for you.

One-Sentence Positioning

Add a top-level "Web UI Plugins" section in DSH web version's Settings page to consolidate the enable/disable toggles and configuration forms for dsh-web-ui suite plugins in one place; also provides a loopback-only settings bridge enabling older hosts (rc.6 era apiproxy) to read/write these third-party configurations.

Core Capabilities

  • Register a top-level "Web UI Plugins" section in the Settings page to host toggle cards for dsh-web-ui suite plugins
  • Declare web-ui.plugin.item list-type sub-slot for sibling plugins like task-board, git-graph, pet, live-stats, remote-web-ui, ssh, describe-image, particle-theme, skin-background to mount their respective configuration cards
  • Built-in community plugin index card: collapsible pure-link list, each pointing to contributors' own repositories (no third-party code included)
  • Provide webUiSettings.bind() compatibility binder: when official settings scope reports namespace unavailable, automatically fall back to local loopback HTTP bridge, enabling local browser to still read configuration forms
  • Host half registers two same-origin endpoints /api/dsh-web-ui-settings/describe and /mutate on webServer, projecting host settings seam namespace data into official apiproxy wire protocol view
  • Use mountOnce to mount only once within the process, avoiding duplicate route registration when loaded by both aggregate and standalone bundles

Technical Implementation

  • Language: TypeScript + React 18 (CSS Modules compiled into bundle via lightningcss)
  • Key Dependencies: @deepseek-ai/cordis (plugin runtime and Context types), @deepseek-ai/dsh-client-ui-settings (settings.section slot and settingsScope), @deepseek-ai/dsh-host-webserver (host route registration), @deepseek-ai/dsh-settings (host settings namespace and SettingsConflictError), schemastery (profile Config schema)
  • Architecture Pattern: cordis bundle plugin (cordis.patch.yml inserts ui-web-ui-settings line in web profile); host half (src/index.ts) declares settings namespace and same-origin HTTP bridge routes; browser half (src/client/index.ts) registers locale, declares settings.section slot, initializes webUiSettings compatibility binder; host/client align via shared src/protocol.ts and src/allowlist.ts protocol constants
  • Entry Files: src/index.ts (host exports apply / Config / resolveProxyAccess / DEFAULT_PROXY_TOKEN_ENV), src/client/index.ts (browser exports apply)

Use Cases

Users who want to centrally manage dsh-web-ui suite plugin toggles and configurations in one place within DSH Settings page, reducing the need to search across multiple locations; and deployments still running older hosts (cannot natively expose third-party namespaces) where local browser-side configuration forms need to work properly.

Prerequisites & Compatibility

DependencyMinimum VersionDescription
DSH Platform SDK>=0.1.0-rc.7@deepseek-ai/dsh-client-* / dsh-host-webserver / dsh-settings in devDependencies all require ^0.1.0-rc.7
Official Settings UI>=0.1.0-rc.7Settings section depends on settings.section slot and settingsScope service from @deepseek-ai/dsh-client-ui-settings
React^18.2.0package.json#peerDependencies
Node Runtime`^22.19
PlatformCross-platform (DSH Web)dsh.client.platform = web; bridge defaults to local loopback only
Native ModulesNoneOnly depends on schemastery and official SDK, no node-pty / node:sqlite or other native bindings

Installation

dsh plugin --profile web add github:ningbainb/deepseek-harness-desktop/packages/dsh-web-ui-settings

Configuration Options

ConfigTypeDescriptionDefault
trustedProxyHostsstring arrayAllowed normalized host[:port] to route authenticated reverse proxy forwarding to this bridge; empty means only accept local loopback, no proxy mode enabled[]
proxyTokenEnvstring (≥1 char)When proxyTokenEnv is non-empty, environment variable name holding reverse proxy shared token (token cannot be directly written in profile)DSH_WEB_UI_SETTINGS_PROXY_TOKEN

FAQ

Q: The "Web UI Plugins" section doesn't appear in Settings after installation. What should I do?

A: Restart dsh web first. The section depends on the official @deepseek-ai/dsh-client-ui-settings providing settings.section slot; if your host version doesn't include this SDK, the section won't appear in Settings.

Q: Does this plugin require additional configuration?

A: No configuration is needed by default—the bridge defaults to local loopback only, all namespaces go through built-in fallback list. To enable reverse proxy forwarding from same host, write trustedProxyHosts and proxyTokenEnv in profile, and set the shared token in process environment variable with the same name.

Q: I'm using rc.7 or newer host. Do I still need the bridge provided by this package?

A: Usually not. When host apiproxy already natively exposes the corresponding namespace, createCompatScope keeps official scope authoritative and the bridge won't activate; the bridge only takes over when official scope reports unavailable and browser is on local loopback.

Q: Card shows "This namespace is not exposed to Settings page". What should I do?

A: This means host apiproxy doesn't recognize this namespace currently. The loopback bridge provided by this package will let local browser take over first, but only if the namespace is registered in host settings; if still not displaying, confirm the corresponding sub-plugin (task-board / git-graph etc.) is correctly installed and loaded.

Q: How should I fill in trustedProxyHosts?

A: Must be normalized host[:port], e.g., dsh.example.com or 127.0.0.1:8443. Case and port range are validated during parsing; non-compliant will throw error at startup and block host half mounting.

Q: Can I write reverse proxy token in plaintext in profile?

A: No. Profile only allows writing proxyTokenEnv (environment variable name); actual token must be read from process environment variable; this prevents token leakage to config repository or version control.

Q: Are items in the "Community Plugins" card safe?

A: The card is just a collapsible pure-link list; index entries are self-registered by contributors, this package does not include or bundle third-party code; clicking redirects to authors' own repositories, installation is user's own decision.

Q: How to uninstall?

A: Use dsh plugin --profile web remove to uninstall. This plugin doesn't write local storage or create resources outside host, no residual data after uninstallation.

Difficulty Level

Beginner — After installation and restart, the section appears in Settings; in most scenarios zero configuration needed to see dsh-web-ui suite toggles and configurations; refer to README proxy configuration examples when proxy forwarding is required.

Known Issues & Limitations

  • Settings section only displays when host carries @deepseek-ai/dsh-client-ui-settings SDK; hosts missing this SDK won't automatically show this section (README.zh.md:47 / README.md:47)
  • Authenticated proxy mode itself doesn't provide identity authentication; upstream reverse proxy must complete authentication and replace x-dsh-web-ui-settings-proxy-token request header before allowing forwarding to host loopback listener (README.zh.md:48 / README.md:48)
  • trustedProxyHosts list must strictly use normalized host[:port] (lowercase hostname, valid port range), one wrong character will cause host half to directly throw error at startup and block mounting (src/bridge.ts:88-102)
  • Bridge only serves browser-side local loopback requests (127.0.0.1, ::1, localhost), remote browsers never trigger bridge, ensuring bypass of host's native same-origin policy (src/client/compat-settings-scope.ts:304-315)
  • Process-wide singleton guard mountOnce depends on Symbol registry on globalThis; if plugin is both loaded by aggregate bundle and via link path simultaneously, the later instance is silently discarded, won't re-register webServer routes (src/mount-once.ts:19-27)

Read the usage guide →

Install steps, key points, FAQ and compatibility for this plugin — auto-derived from indexed fields.

Listing badge

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/ningbainb/deepseek-harness-desktop/packages/dsh-web-ui-settings)

Paste this markdown into your GitHub README to link back to this listing. The badge only states the listing — not a security endorsement.

← Back to plugin directory