dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Adds a footer button to the DeepSeek Harness sidebar that collapses or expands the global panel list.
A tiny DeepSeek Harness plugin that adds one button to the sidebar footer, next to the settings control, which collapses or expands the global panel list (Plugins, Scheduled tasks, Context insight, Memory, … and any other plugin that registers a sidebar panel).
Collapsing frees the vertical space the panel rows occupy, so the workspace and session list gets more room. The state is remembered per browser profile and survives restarts.
dsh plugin --profile <your-profile> add dsh-panel-collapse
Restart the app afterwards — DeepSeek Harness only loads a new client module generation on startup, so the button will not appear until you relaunch.
git clone https://github.com/RiddanceY/dsh-panel-collapse.git
dsh plugin --profile <your-profile> add "link:/absolute/path/to/dsh-panel-collapse"
link: makes the profile point at the clone instead of copying it, so git pull is enough to
update and there is nothing to reinstall.
To remove it:
dsh plugin --profile <your-profile> remove dsh-panel-collapse
--profile must come immediately after plugin; dsh plugin add x --profile y is rejected
with required option '--profile' not specified.
The button sits in the sidebar footer, to the right of the existing icon buttons.
localStorage under dsh.panel-collapse.collapsed.The plugin is a client-side bundle only — index.js is an empty host half, all the work
happens in client.js, which the app loads lazily via window.__ModuleLoader__.
apply(ctx) registers the panel-collapse locale namespace (zh, en) as a context
effect, so the dictionary is disposed when the plugin unloads.
It registers one entry in the sidebar.footer.action list slot with id: "panel-collapse"
and order: 40, which puts it after the built-in Cordis panel button.
The component keeps a boolean in React.useState, mirrored into localStorage, and
renders a <style> element while collapsed:
nav:has([data-slot="sidebar.panellist"]),
nav[aria-label="全局面板"],
nav[aria-label="Global panels"] { display: none !important; }
The first selector is the locale-independent one: every panel row hosts a
sidebar.panellist outlet, so the nav that contains them is exactly the panel group.
The other two are a fallback that keys off the host's own accessible names.
No host code is imported, patched or monkey-patched. The button reuses only the public
--dsw-alias-* / --dsw-radius-* / --dsw-focus-ring-* theme tokens, so it follows the
light and dark themes and the sidebar's wide/collapsed states.
| DeepSeek Harness | >=0.2.0-rc.2 |
| Client slots used | sidebar.footer.action (list) |
| Runtime dependencies | none (React is taken from the app's module table) |
The package is plain ESM with no build step. client.js is the shipped artifact.
node --check client.js
node scripts/smoke.mjs # loads the module with a stub loader + React shim
node scripts/verify.mjs # full static verification (manifest, locale, slot, render tree)
scripts/verify.mjs also checks the install state when the package is linked into a profile
(node_modules/<name> + dsh.profile.bundles); it skips those checks otherwise. Set
DSH_PROFILE_DIR to point it at a non-default profile.
These scripts are static checks. They do not prove the button looks right on screen — that still needs a human looking at the running app.
dsh plugin --profile <your-profile> add "link:/absolute/path/to/dsh-panel-collapse"
link: makes the profile point at this directory instead of copying it, so edits to
client.js take effect on the next app restart without reinstalling.
:has() selector requires a reasonably modern Chromium, which the desktop app is built
on. The two aria-label fallbacks do not depend on it.