让 DSH 桌面版侧栏的会话全部展开。它的控制页(/dsh-sidebar-expand-all)对 app.asar 内 workspace client bundle 打四处等长补丁,带备份与一键还原;之后「展开其余 N 个会话」点一次就展开该工作区全部剩余会话,「收起」严格回到 5 个,重开工作区也保持全展开而不是退回五个。需要重启应用,DSH 升级后补丁会被覆盖。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:mzjqwq/dsh-sidebar-expand-all
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
深色侧栏里会话很多时,DSH 默认每点一次「展开其余 N 个会话」只多展开 5 个,几十个会话要点很多次;点「收起」后也常常回不到 5 个。这个插件把它改成:
- 默认就全部展开(打开侧栏就是全部会话,重启 DSH 也不会变回 5 个);
- 点一次「展开其余 N 个会话」展开该工作区的全部剩余会话;
- 点「收起」严格回到 5 个。
English: README.md
两种运行路径的差异
从 DSH 宿主插件(插件自带的 /dsh-sidebar-expand-all 控制页)调用时,代码跑在 Electron 里:Electron 会把 app.asar 当成目录——statSync().isFile() 返回 false,openSync() 直接抛 ENOENT。所以本包一旦检测到 process.versions.electron,就改用 Electron 的 original-fs 读取(并用 process.noAsar 兜底)。在普通终端里跑 CLI 时仍走普通 node:fs。两条路径都在真实安装上验证过。
插件市场的安装按钮生成的是
--profile web。在 DSH 桌面版上请改用--profile desktop——那才是应用真正启动的 profile。
它改了什么
DSH 给每个工作区维护一个「水位线」——该组显示多少个会话。上游逻辑每次点击加 SESSION_WATERMARK_BASE = 5;折叠基线又会被 Math.max(...) 抬高(为了让运行中/未读会话可见),所以收起后往往不止 5 个。
而且这个水位线只存在 React 组件内存里(useState({}),不持久化、组件重挂载即丢),所以只改点击逻辑的话,重启/切工作区后又会变回 5 个。
插件对 asar 内的
app.asar
└─ dsh/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/client.js
做四处等长替换:
| 补丁 | 官方原文 | 替换为 | 效果 |
|---|---|---|---|
toggle-all |
整段 onClick(if (sessionsExpanded) { dropWatermarks(...); return; } + 三元 visible.hiddenCount <= SESSION_WATERMARK_BASE ? Infinity : watermark + SESSION_WATERMARK_BASE) |
setStoredWatermarks((marks) => ({ ...marks, [group.key]: sessionsExpanded ? SESSION_WATERMARK_BASE : Number.POSITIVE_INFINITY })) |
点一次展开全部剩余会话;点「收起」写回 5(不再 drop) |
collapse-baseline |
Math.max(SESSION_WATERMARK_BASE, requiredWatermark(...)) |
SESSION_WATERMARK_BASE |
收起后严格 5 个 |
default-expanded |
const watermark = sessionWatermarks[group.key] ?? SESSION_WATERMARK_BASE; |
... ?? Infinity; |
默认全展开 |
default-expanded-drag |
sessionWatermarks[group.key] ?? SESSION_WATERMARK_BASE).rows |
... ?? Infinity).rows |
拖拽排序与渲染一致 |
替换用空格填充到原长度(文件大小不变),并原地更新 asar header 里该条目的 integrity.hash 与 blocks[0].hash。asar 的 header 记录每个条目的 offset/size,任何长度变化都会让后续所有条目错位,所以必须等长替换。
安装
发布后从插件市场 / npm 安装:
dsh plugin --profile desktop add dsh-sidebar-expand-all
本地目录:
dsh plugin --profile desktop add ./dsh-sidebar-expand-all
直接从 GitHub 仓库:
dsh plugin --profile desktop add github:mzjqwq/dsh-sidebar-expand-all
使用
本机页面
DSH 启动后打开:
http://127.0.0.1:<当前 DSH 端口>/dsh-sidebar-expand-all
页面上能看到当前状态,并点「应用补丁」/「还原官方文件」/「刷新」。
安装插件本身不会改动任何东西——它只是提供这个页面和这套 CLI。在你点「应用补丁」(或直接跑不带参数的 CLI)之前,
app.asar不会被写入。建议先看清楚它要改什么,再应用并重启 DSH。
命令行
node scripts/patch-workspace-expand-all.mjs --check # 只检查
node scripts/patch-workspace-expand-all.mjs # 打补丁(幂等)
node scripts/patch-workspace-expand-all.mjs --list # 列出内置补丁
node scripts/patch-workspace-expand-all.mjs --restore # 还原官方文件
退出码:0 正常 · 2 找不到 asar 或备份 · 3 内容与 header integrity 不一致(拒绝写入)· 4 检查发现 header 与实际内容不一致。
必须重启
DSH 宿主启动时把每个 client bundle 缓存在内存,dsh-client-hmr 对 asar 内文件做 stat 得到的还是启动时的值,所以改 asar 无法热更。请完全退出 DSH 再重新打开(刷新页面无效)。
安全
- 不改文件大小:两处替换等长,写完后回读条目内容与 header hash 双重校验。
- 首次写入前把原
client.js与原 asar header 备份到~/.dsh/dsh-sidebar-expand-all/.asar-bak/(可用DSH_BAK覆盖)。 - 还原时校验备份 header 与备份内容一致后再写回。
- 当前内容与 header integrity 不一致(比如被别的工具改过)时直接中止,不猜。
- 找不到官方片段时报
unsupported并放弃写入,绝不乱替换。
DSH 升级之后
升级会整体替换 app.asar,补丁随之消失,升级后重新点一次「应用补丁」即可。如果新版本源码结构变了、四处原文找不到,状态会变成 unsupported,需要按新版 client.js 重新定位这四处表达式。
随包 SKILL
插件启用时会把同名 skill 安装到 ~/.dsh/skills/dsh-sidebar-expand-all/,会话里的 agent 可以直接按 SKILL 执行检查 / 应用 / 还原,不必依赖网页。
开发
node --check lib/asar-patch.js
node --check lib/index.js
node scripts/patch-workspace-expand-all.mjs --check # 只读:补丁是否已应用
node scripts/smoke-plugin.mjs # 冒烟:加载两半代码并断言补丁长度可容纳
lib/asar-patch.js 无依赖,可以脱离插件单独使用。
许可证
MIT
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-task-board★ 10290
侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
zhu1090093659/dsh-web#packages/dsh-web-all★ 10290
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。
ccch1mneyyy/dsh-TUI★ 7336
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 7093
右下角常驻的小鲸鱼挂件:余额、今日已用与每轮对话消耗(含峰谷价),余额预警与今日预算的泡泡内容都可编辑;泡泡点击序列模块化自定义,支持并列加权 A/B、随机台词与随机图片;内置 30+ 厂商模板(OpenAI / OpenRouter / Kimi / 硅基流动 / 方舟 / 智谱 / MiniMax 等),按模型查余额与订阅额度;另有任务结束音效、导入音频、自定义角色与资源管理。数据全在本机,无遥测。
omdsh-dev/DSH-better-sidebar★ 5036
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。
Devin-AXIS/deepseek-design#deepseek-idesign★ 1792
可视化设计工作室,支持网站、App 原型、海报、信息卡、报告和杂志的模板创建、元素编辑、选区级 AI 草稿衔接与导出。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。