dsh-sidebar-fold

uiinstall failsnpmMIT

Folds the sidebar's add-on panel rows (schedules, agent teams, plugin market, context pages, …) under the shipped "More" row: a 28x28 chevron toggle on that row collapses them into a single header line and expands them back, the fold state persists per window, the rows kept visible are chosen with p

下载量 / Downloads
1,672
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

Install

dsh plugin --profile web add dsh-sidebar-fold

Sandbox test results

StageResult
1 install✗
2 list—
3 mount—
4 boot—
First error
dsh: initialized profile web at /home/node/.dsh/profiles/web

Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).

README

dsh-sidebar-fold

![npm version](https://www.npmjs.com/package/dsh-sidebar-fold)

![license](https://github.com/drscrewdriver/dsh-sidebar-fold/blob/main/LICENSE)

把 DSH 左侧栏的「加项入口」收进宿主的 「更多」行。

左侧栏的「全局面板」列表会随安装变长:自动化任务、agent 团队、插件市场、上下文页……

本插件在宿主「更多」行右端挂一个 28×28 的方形箭头按钮。点一下把这些加项行整体收纳,

只剩「更多」一行;箭头由 ▲(可收起)翻成 ▼(可展开),再点复原。

  • 非侵入 —— 纯 client 插件,只新增 DOM。不打宿主补丁、不碰 app.asar;卸载后侧边栏

与原版逐行一致(自持的 <style> 标签与 data-dshsf-* 标记一并清除)。

  • 结构化定位头行 —— 头行 = 「全局面板」nav 内带 aria-haspopup="menu" 的 panelRow。

不依赖任何文案,也不依赖插件注册顺序。

  • 状态按窗口持久化 —— 折叠/展开记录在 localStorage,刷新后保持。
  • 对齐可切换 —— 被管理的入口行(含「更多」行)的文字与图标可整体左对齐 / 居中 / 右对齐;

右对齐时折叠钮自动镜像到行左端,不压文字。覆盖层只用宿主的 justify-content 长属性,

不动行的 display/gap/高度。

  • 可配置 —— 默认态、保持可见的行、行对齐都在插件设置卡里改(宿主 Config + .volatile(),

保存即生效,不用重启)。

  • 窄栏友好 —— 侧边栏收成 36px 图标栏时自动摘掉按钮并显示全部行:不挤压、不留半隐藏态。
  • 静默降级 —— 宿主 DOM 漂移导致锚点找不到时,插件不注入、不改坏侧边栏;控制台会出现

dsh-sidebar-fold: fold installed { mounted: false } 告知未挂载。

截图

展开态(各行居中)—— 折叠钮挂在「更多」行,加项行正常列出:

折叠态 —— 只剩「插件」行与「更多」行:

安装

# npm 通道(发版后)
dsh plugin --profile <profile> add dsh-sidebar-fold

# 本地构建
npm run build && npm run verify
npm pack --pack-destination .
dsh plugin --profile <profile> add ./dsh-sidebar-fold-0.1.2.tgz

装完把 dsh-sidebar-fold 补进 profile 的 dsh.profile.bundles(或在应用内启用该

bundle)再重启。desktop profile 必须先关停 Electron 应用再改它的 package.json——

运行中的桌面端会按自身内存态重写该文件并回滚外部修改。

设置

打开 插件 → dsh-sidebar-fold(配置卡注册在 plugins.bundle.config 席位,

key 为包名):

字段 · 含义 · 默认

默认折叠 · 窗口在没有本地记录时采用的初始状态 · 关

文字与图标对齐 · 三档分段控件(左 / 居中 / 右);作用于被折叠管理的入口行,「更多」行跟随同一档 · 左

保持可见的入口 · 按当前侧边栏实时读出的行逐个开关;打开的行在折叠时保留可见 · 仅 插件 / Plugins

行清单在打开卡片时从 DOM 读取,所以之后新装的入口会自动出现在列表里;如果全部都打开了,

折叠钮会自动置灰并报 aria-disabled="true",不会出现“箭头动了但什么都没变”。

开发

npm run build        # scripts/build-client.mjs -> lib/client.js(模块加载器 bundle)
npm run verify       # 门禁:loader id === 包名、双清单同串、无模块请求、
                     #       不引宿主 primitives、9 语词典、无机器绝对路径
npm test             # node --test,覆盖纯逻辑面(头行/分组划分、nav 回退链)
npm run hosts:check  # 与 scripts/hosts.mjs 的枚举漂移检查(--write 修复)

prepack 会串起 build + verify,过期的 lib/client.js 发不出去。

支持宿主

仅 DSH 0.2.1-rc.3。 唯一事实源 scripts/hosts.mjs(三处声明 —— engines.dsh、

peerDependencies、dsh.plugin.json —— 都由它生成,禁止手改)。

为什么不放宽:挂载同时需要侧边栏的面板列表与宿主「更多」行。逐版本实测

所有已发布的 dsh-client-ui-sidebar rc:

宿主线 · 面板列表 · 「更多」行

0.1.0-rc.8 / 0.1.1-rc.2 / 0.1.2-rc.1 · 无 · 无

0.1.5-rc.3 / 0.1.7-rc.2 / 0.2.0-rc.2 · 有 · 无

0.2.1-rc.1 / 0.2.1-rc.2 · 有 · 无

0.2.1-rc.3 · 有 · 有

没有「更多」行的宿主上,插件按设计静默降级——不注入、不改坏侧边栏;声明这类宿主

只会让用户装上一个什么都不做的插件。

宿主换代后先跑浏览器冒烟再扩表:CSS-module hash 每次构建都漂移(rc.2 是

wtg9ga_,rc.3 是 hHd-Xa_),只有片段选择器(_panelList、_panelRow、

_moreAnchor、_collapsed)是稳的。

升级护栏

宿主 CSS-module hash 每次构建都会漂移(rc.2 是 wtg9ga_,rc.3 运行时是 hHd-Xa_),

所以所有选择器只匹配片段(_panelList、_panelRow、_moreAnchor、_collapsed)。

宿主换代后必须重跑浏览器冒烟再认定折叠仍在挂载:插件按设计静默降级,回归表现为

“什么都没发生”,不是报错。

目录

src/index.js                 宿主半:Config schema + 空 apply(无需构建)
src/client/constants.ts      实测锚点、属性标记、注入的样式表
src/client/locales.ts        9 部运行时词典(zh 键集为真理源)
src/client/fold.ts           nav 定位、头行/分组划分、按钮挂载、折叠状态
src/client/settings-card.ts  bundle 详情页配置卡(纯 DOM)
src/client/index.ts          apply:先装折叠,再各自带守卫地接设置腰
scripts/                     build-client / verify / sync-hosts / hosts / gen-locale-meta

许可

MIT

Rendered from the README published on npm. Formatted only, not edited.

Versions

Published on npm::7,最后更新 2026-11-06

Links

GitHub · Homepage · npm

Same category