DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Sidebar Settings Button — DSH Plugin for DeepSeek Harness
← Plugins
S

dsh-sidebar-settings-button

Sidebar Settings Button

DSH plugin: the Settings button moves into the sidebar header, immediately before Plugins, opening the native Settings panel in one click.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:Nishikinov/dsh-sidebar-settings-button#cbde5b022210b4af3525198d0dfe11397588b2fd
READMECompatibilityVersions

Compatibility and provenance

Sidebar Settings Button is published as dsh-sidebar-settings-button and currently resolves to version 0.2.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
github
Registry updated
10/6/2026

Versions

0.2.0
stable
10/6/2026

Related plugins

Loading related plugins…

Latest
0.2.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
web
License
MIT
Source
github
GitHub
★ 0
Weekly downloads
0
Last push
10/6/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in

Related plugins

More verified plugins in ui-customization.

Client Ui Skill Explorer@linxin666/dsh-client-ui-skill-explorerDSH skill center: browse loaded skills by source (bundled / project / user / custom / runtime), enable or disable, create and delete, in a web GUI panel.Remote Web Ui@linxin666/dsh-remote-web-uiScan-to-pair remote access for the dsh web GUI that shares one official interface: a QR beside the settings button pairs phones and PCs into the same Web GUI (a portrait-touch adaptation layer for phones, full desktop on PCs) through one-time tokens and rClient Ui Task Board@linxin666/dsh-client-ui-task-boardHost-authoritative task board for the DSH Web GUI with real session execution, Host cron scheduling, and optional cross-platform idle-sleep protection; mounted without DSH source changes.Web All@linxin666/dsh-web-allDSH Web UI 全家桶聚合插件:一键安装全部功能插件(task-board / git-graph / pet / remote-web-ui / web-ui-settings / skin-center / community-plugins / compat shim)。compat 桥接层已并入本包(src/client),无需独立 compat npm 包。

README

dsh-sidebar-settings-button

DSH plugin: puts a Settings row in the sidebar header, immediately before Plugins, opening the native Settings panel in one click.

┌─ sidebar ─────────────────┐
│  ⚙  Settings   ← new row
│  ⊛  Plugins
│  ⏱  Schedules
└───────────────────────────┘

What it does

Registers one entry in the sidebar's own sidebar.panellist seat with order: -10 (Plugins ships at 0, Schedules at 10), so the row lands first and the shipped sidebar draws it: native geometry, hover, focus ring, collapsed-rail icon and tooltip, localized label. A click opens the same panel as Ctrl+, / ⌘+,.

How it works

The click is intercepted. sidebar.panellist is the seat for main panels — ui-sidebar turns each entry into a button whose onClick calls ctx.layout.selectPanel(id), and that id must address a component in the layout's keyed main slot. Settings is not a panel but a modal owned by ui-settings-general, and selectPanel throws for an unknown key. So one capture-phase listener on document takes the click above the React root (React 18 delegates to the container) and opens Settings instead. It re-resolves the row's enclosing button on every click, so the icon, the label and the button's padding all count as the row.

Settings is opened through the shortcut registry. settings.open is the only programmatic door: the panel's open state is private to ui-settings-general, and the settings.launcher seat that receives openSettings is a single slot already occupied by the account menu. ctx.shortcuts.registry.invoke(id, context) is the path the native Electron menu uses to run a command without its key binding. It is called with modal: null on purpose — the registry's modal guard would otherwise swallow the call whenever any [role="menu"] is mounted, and the action is idempotent (open: true) so the panel cannot be toggled shut by accident.

No silent failures. Every degraded path returns a short reason, shown in a Toast and logged to the console. DevTools is available on F12.

Install

# Windows, using the app's own CLI:
& "$env:LOCALAPPDATA\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" `
  plugin --profile desktop add <path-to-folder-or-tgz>

dsh plugin --profile desktop remove dsh-sidebar-settings-button   # uninstall

dsh plugin add is pnpm add inside the profile plus a dsh.profile.bundles reconcile, so a package declaring dsh.bundle joins the layer list automatically. A folder install is a link:, which is why this checkout stays the single source of truth.

Verify

node test/bundle.test.mjs                      # 6 tests: registration, order, whole-row click, Toast, degradations
node --check src/index.js; node --check client/bundle.js

Live check — the client slot inspector must list our entry before plugins:

cordis_inspect_query(platform: "client", provider: "Slots",
                     method: "listSubTree", input: { root: "sidebar.panellist" })

Limits

  • The avatar menu's "Settings" item stays — it belongs to another plugin's React tree. The header row is an additional, always-visible entry point.
  • The row's id addresses no main panel; the click interception is the only thing keeping selectPanel from throwing. If ui-sidebar ever switches to onClickCapture, that interception needs rework (the test only covers our side).
  • The sidebar passes { size, active }; only size is used, and the row is never highlighted — Settings is not a panel.

Layout

No build step: the browser half is a plain classic script calling window.__ModuleLoader__.load({ id, factory }). Its only requires are platform modules (react, @deepseek-ai/dsh-client-ui-primitives), so dsh.client.inject / dsh.client.external are unnecessary.

src/index.js        host half — no-op stub; exists so dsh-client-modules finds the browser bundle
client/bundle.js    the entire feature
cordis.patch.yml    inserts the Loader entry into the profile composition
test/bundle.test.mjs