工作区归档(Workspace Archive)
@local/dsh-workspace-archive 0.2.1,DSH Web / Desktop 客户端插件,纯 JavaScript,无构建步骤。
一键归档或恢复整个工作区的会话。工作区的全部实际会话归档后,整个工作区会从侧栏隐藏,包括空白「新会话」入口。 在「工作区归档」面板仍能查看该工作区,恢复任一实际会话后会重新显示。插件也支持工作区置顶。
使用
点击侧栏的归档图标,打开「工作区归档」面板。每个工作区显示会话计数、路径、归档全部、恢复全部和置顶控件;可展开逐条处理会话。已经隐藏的工作区会显示「已从侧栏隐藏」。会话行的「…」菜单也提供归档整个工作区和置顶工作区入口。
归档前会确认处理数量;默认跳过正在运行的会话。只有显式勾选「同时停止运行中的会话」或点击结果中的停止并归档,才会停止运行中的工作。进度卡片不阻挡切换面板;支持取消剩余任务、查看失败原因和恢复本次归档。
隐藏与恢复规则
- 有实际会话且全部已归档时隐藏。空白占位和子代理不阻止隐藏。
- 部分会话仍未归档,包括运行中被跳过、归档失败或取消后未处理的会话,会让工作区继续显示。
- 空工作区和只有空白会话的工作区仍显示,便于开始工作。
- 隐藏基于 Host 持久化的会话归档集合计算;刷新后仍有效,也会处理旧版本已经归档的工作区。不需要再次点击归档。
- 隐藏工作区的会话不会回流到「未分组」、平铺列表或侧栏搜索中。侧栏的显示归档筛选也不会重新显示整个隐藏工作区;统一从本插件面板恢复。
- 恢复任一实际会话后工作区重新显示;「恢复全部」恢复整个分组。单独归档过的空白会话也可以恢复。
- 不删除工作区注册、会话日志或目录,不改会话归属;归档前的工作区展开和手工排序缓存继续保留。隐藏一个父工作区不自动归档其独立注册的子工作区。
置顶
置顶调用宿主的 workspaces.insertBefore,顺序保存在 Host 上。插件通过订阅维持置顶块,最近置顶的在最前;取消置顶后落到剩余置顶块之后。置顶集合保存在当前浏览器的 localStorage(dsh.workspace-archive.pinned-workspaces),不跨浏览器同步。宿主缺少重排接口时隐藏置顶控件。
安装与更新
通过 DSH 插件管理器安装本目录。清单的 dsh.bundle.patch 指向 cordis.patch.yml,插入 workspace-archive 行。Host 入口不执行业务操作;归档仍调用 Client 的 uiWorkspace.archiveSession/unarchiveSession。
客户端更新是否即时生效以插件管理器返回的 application / nextStep 为准。未运行客户端构建监听时不要假定源码编辑会自动更新现有页面。更新后刷新当前 DSH 页面;管理器要求重启时,重启 Desktop 后再验证。
兼容实现与回滚
0.2.1 针对 DSH 0.2.1-rc.3 的侧栏契约做了源码核对。该版本没有工作区可见性过滤器,也没有官方 occupant wrapper API。因此 installSidebarFilter 是隔离的兼容适配:为现有 sidebar.workspaces 登记项包装 component,仅过滤传给浏览器的工作区/会话快照,同时保留原登记项的 children、store、inject、locale 和操作。它不会重复声明子插槽、导入 Harness Client 包或读写其它插件的 DOM。
此处依赖登记项可修改的结构,不是宿主承诺稳定的过滤扩展点;升级宿主后需要回归验证。适配通过 slots.inject 跟随声明生命周期,观察登记项重建,并在卸载时恢复原组件。独立面板始终读取完整快照。停用插件会取消工作区隐藏,但不会自动恢复已经归档的会话。
验证
node scripts/check.mjs
node --test 'test/**/*.test.mjs'
测试覆盖归档按钮路径、运行中拒绝、置顶、完整归档后隐藏、空白占位、部分归档、缺失摘要、加载期、未分组/搜索泄漏、恢复、排序缓存保留、登记项重建和卸载恢复。浏览器实测与安装状态另见 VERIFICATION.md;模拟组件测试不能替代真实页面验收。