← Back to home@d0ublecl1ck

dsh-hide-empty-workspace

DSH Web 插件:最后一个未归档会话被归档的瞬间自动隐藏该工作区行,并在工作区行自带的「…」菜单里追加「隐藏工作区」,另配侧栏底部恢复入口;不归档、不删除、不改写任何工作区注册与会话数据。Auto-hide a sidebar workspace the moment its last unarchived session is archived — display only, no data writes.

Stars
0
Language
JavaScript
Created
Oct 2, 2026
Updated
Oct 7, 2026
GitHub repo

Introduction

🌐 中文 · English

dsh-hide-empty-workspace

「把最后一个会话归档的那一刻,那个空工作区自己从侧栏消失了。」

DSH plugin License: MIT no data writes

侧栏的自动瘦身。它只在这条规则成立时动手:某个工作区的未归档会话从 1+ 掉到 0。它不归档、不删除、不改写工作区注册,唯一会写的是浏览器里的隐藏集合。

它解决什么问题 · 效果示例 · 快速开始 · 触发方式 · 安全边界 · 文件结构


它解决什么问题

归档是 DSH 里一个手动动作,而「这个工作区已经空了」没有人替你判断。

于是侧栏总是这样烂掉:你随手给某个项目开过一两次会话,用过就归档掉,可那个工作区还留在列表里——没有会话,也不再有用,只是在那里占一行。攒到十几个之后,真正在用的那几个被挤到了下面。

这个插件把「空了」变成一个被动触发的清理信号:某工作区的未归档会话数从 1+ 掉到 0 的那一刻,它的侧栏行自动隐藏。

它只在那一刻动手。 手动隐藏在任一工作区行自己的「…」菜单里;恢复入口在侧栏底部。插件不接管任何状态。

效果示例

工作区行菜单里的「隐藏工作区」、底部「已隐藏 N」入口与官方恢复对话框

上图是侧栏一列的截图,工作区名已隐去。连着隐藏两个工作区时只有一个变成 display:none——另一个是「正在使用的工作区」,按设计保持可见。

快速开始

# 从 npm 装(最短)
dsh plugin --profile web add dsh-hide-empty-workspace

# 或直接从 GitHub 装(不需要 npm 账号,也不等镜像同步)
dsh plugin --profile web add https://codeload.github.com/d0ublecl1ck/dsh-hide-empty-workspace/tar.gz/refs/heads/main

# 本地改代码时,把它以路径形式加进 profile
dsh plugin --profile web add /绝对路径/dsh-hide-empty-workspace

dsh plugin add 会在 profile 目录里同时写入 dependencies 与 dsh.profile.bundles 两处,装完刷新页面即可。

DSH Desktop 里没有 dsh 命令时

Desktop 自带一份运行时,直接用它可以跳过 PATH:

DSH_HOME="$HOME/Library/Application Support/dsh-desktop/harness" \
  "$DSH_HOME/.desktop-bin/node" \
  "/Applications/DSH Desktop.app/Contents/Resources/app.asar.unpacked/node_modules/@deepseek-ai/dsh/lib/bin.js" \
  plugin --profile web add /绝对路径/dsh-hide-empty-workspace

Windows 上把路径换成本机对应位置即可,参数不变。

触发方式

  • 自动:你把某个工作区的最后一个未归档会话归档掉 → 它的行隐藏。
  • 手动:悬停任意工作区行,点行内「…」菜单里的「隐藏工作区」。任何情况下都立即隐藏。
  • 恢复:点侧栏底部的「已隐藏 N」→ 打开官方对话框 → 逐个「恢复」,恢复完自动关闭。
  • 自动恢复:某个被隐藏的工作区重新有了未归档会话 → 自动取消隐藏。

不会触发的情况:

  • 刚添加的工作区:新工作区没有会话,但它是「首次见到」的,只被记录、不被隐藏。这是本插件不做「无会话即隐藏」的直接原因。
  • 正在使用的工作区:即使满足隐藏条件也保持可见(隐藏两个工作区时实测只有一个变成 display:none,另一个就是它)。
  • 「未分组」桶:永不隐藏。

安全边界

  • 不归档、不取消归档、不删除任何会话或工作区。
  • 不改写工作区注册:不动 workspaces 服务,不动 settings.yaml。
  • 不联网:插件不发任何请求。
  • 唯一写入是浏览器 localStorage 里的隐藏集合(键 dsh-hide-empty-workspace.hidden.v1)。清掉它,一切恢复原样。
  • 不替换官方 UI:只在官方已经渲染好的行上切 display,在工作区行自带的「…」菜单里追加一项,恢复入口用官方 Modal;不接管、不重绘官方组件。官方改版导致找不到行时,它不再默默无闻——侧栏底部会出现 ⚠ 工作区行标记失配,插件未生效;但侧栏收成 rail(窄窗口自动收起)或切到「分组方式 → 单列表」时本就不渲染工作区行,自检保持安静。

文件结构

index.js                    宿主半边(本插件不需要宿主能力,占位 apply)
client.js                   浏览器半边:判定、行菜单项注入、官方 Modal 恢复入口、自检
cordis.patch.yml            bundle 层,声明插入本插件
tests/hidden-workspaces.test.mjs   28 条纯函数单测
scripts/verify-browser.mjs  真实浏览器验收 + 展示产物录制
scripts/check-release.mjs   离线发布门
assets/showcase/            由 verify-browser 产出的截图与 GIF
screenshots.json            给插件市场/目录站的展示截图清单
AGENTS.md                   给下一次会话的边界与命令
.freak                      待核查线索:对标观察 + 未验证清单