- Home
- Plugins
- UI Enhancements
- dsh-sidebar-panel-collapse
dsh-sidebar-panel-collapse
sunday530/dsh-sidebar-panel-collapse
Adds a chevron row under New Session that folds the sidebar panel list in place, returning the height to the workspace and session list. The hiding is driven by one attribute on the page root plus CSS: no host bundle is patched and no row is unregistered, and plugin entries injected outside the panel slot fold too because they are matched by their own data attributes. The state is remembered per browser and the control hides itself in the 56px rail.
Install
dsh plugin --profile web add github:sunday530/dsh-sidebar-panel-collapseREADME
dsh-sidebar-panel-collapse
Adds a collapse toggle above the DSH sidebar panel list. One click hides the whole panel block (MUV 表格 / 插件 / 插件市场 / 技能 / 归档会话 / 自动化任务 / 上下文洞察 / 记忆系统 / 更多) so the workspace list below it gets the vertical space.
Nothing else changes: the sidebar itself stays, the collapse state is remembered per browser, and the workspace area simply grows from one row-height section up.
What it looks like
Expanded — the toggle sits right under 「新会话」, above 「MUV 表格」:

Collapsed — every panel entry row is gone and 工作区 fills the height:

Install
dsh plugin --profile web add dsh-sidebar-panel-collapse
Or from a checkout of this repository:
dsh plugin --profile web add github:Sunday530/dsh-sidebar-panel-collapse
Restart DeepSeek Harness once after installing so the bundle row is composed into the profile. In the plugin market card you can toggle it off/on at any time.
How it works
The browser half (lib/client.js) registers one client bundle:
- Injects a single
<style>element keyeddsh-sidebar-panel-collapse/toggle.css. All hiding rules key onhtml[data-dsh-sidebar-panel-collapsed="1"], so the state lives in one attribute on<html>and the rules are trivially reversible. - Inserts a 20px-high chevron button as a sibling of the sidebar's panel
<nav>(nav[class*="_panelList"]), directly under the new-session button. The shell's React tree never removes it, because it is not part of that tree; aMutationObserverre-attaches it if the sidebar is re-rendered. - Marks any plugin entry button that skips the
sidebar.panellistslot and mounts itself directly into the sidebar column (dshpc-extra), plus attribute-based rules for the plugins that stamp a stable data attribute on their row ([data-dsh-muv-entry],[data-dsh-mnemon-entry],[data-dsh-vr-entry],[data-dsh-ctx-entry]). Without this, "collapse" would only hide the slot-based rows and leave the out-of-slot ones behind. - Persists the choice in
localStorageunderdsh-sidebar-panel-collapse:collapsed(and migrates the olderdsh-panel-collapse:collapsedkey once).
The node half (lib/index.js) is intentionally a no-op cordis plugin — it exists only
so the package is a valid dsh.bundle row. It exports a named apply because cordis
rejects a module that has neither an apply export nor a callable default
(invalid plugin, expect function or object with an "apply" method, received object).
Notes
- Selectors match CSS-module class names by their stable suffix (
_panelList,_newSession,_collapsed) rather than the hashed whole name, so a rebuild of the shell does not break the plugin. - The toggle is hidden while the sidebar is in its 56px rail (
_collapsed), because the shell already hides the panel list there. - The plugin never touches the shell's own collapsed state or width — it only hides the panel-entry block.
- Tested against DSH release
0.2.1-rc.5.
License
MIT
Related plugins
dsh-web (dsh-task-board)
zhu1090093659/dsh-web
dsh-web (dsh-web-all)
zhu1090093659/dsh-web
dsh-TUI
ccch1mneyyy/dsh-tui
dsh-web-ui (dsh-task-board)
zhu1090093659/dsh-web-ui