dsh-plugin-archive-last
简介
归档自动沉底 是一个纯客户端的 DSH 侧栏增强插件:让每个工作区(以及
「未分组」「单列表」)里的活跃会话始终按最近更新排在最前面,已归档的会话
自动沉到列表最底部。
它解决的场景:项目做完、归档掉之后,归档行仍然留在列表上方,把还在进行的
正常对话挤进「展开其余 N 个会话」;本插件让已完成的项目自动沉底、正在进行的
项目保持在视野顶部,不需要手动拖拽,也不必在「全部对话 / 仅显示已归档」之间
来回切换。
插件特点:
- 纯插件实现:不修改 app.asar,不写任何 host 数据、不迁移会话;
- 自动生效:归档 / 取消归档、会话更新、工作区变化都会触发重排;
- 可随时停用:停用后自动恢复官方的「最近更新」排序;
- 无界面、无额外按钮:装好即生效,不改变列表之外的其他交互。
效果
开启后,每个工作区的会话列表顺序变为:
活跃会话(最近更新在前)
├─ 正在进行 / 最近聊过的项目
└─ 较早的正常会话
已归档会话(最新归档在前)
└─ 已完成、不再需要关注的项目
在「全部对话(显示已归档)」筛选下,归档行会以灰色样式出现在列表最底部;
切到「隐藏已归档」则完全不显示。前 5 条的「展开其余」水位线只由活跃会话
占据,不会再被归档挤掉。
原理
DSH 官方的工作区浏览器没有排序扩展点,但它把视图 store 的 actions 挂在
uiWorkspace 服务上。本插件订阅官方的 sessions.list / workspaces.list,
算出每个账户应有的顺序(活跃按 updatedAt 降序 + 归档在其后),再通过
uiWorkspace.view.setSessionOrder(...) 写入官方的手动排序。
- 第一次写入会把视图排序切换为“手动排序”(插件在持续驱动它);
- 归档 / 取消归档、会话更新、工作区变化都会触发重算,归档自动沉底;
- 插件停用时会调用
setOrderBy("updated") 恢复“最近更新”;
- 依赖的是
uiWorkspace.view 这个非文档化属性,DSH 升级后可能需要适配;
- 用户手动拖拽会被下一次重算覆盖(这是本插件的预期行为)。
启用与停用
作为 profile bundle 注册:把本仓库放到持久目录(如 ~/.dsh/plugins/dsh-plugin-archive-last),
profile 的 package.json 依赖写 link:<该路径>,并加入 dsh.profile.bundles。
- 新装或修改后需要重启 DSH 才会组合进启动图;
- 在「插件」页找到
dsh-plugin-archive-last 即可停用;停用即恢复官方排序;
- 也可以从 profile 的
dsh.profile.bundles 中移除后重启卸载。
配置(可选,挂在 profile 的 archive-last 行上)
| 字段 | 默认 | 含义 |
|---|
applyDelayMs | 700 | 列表变化后延迟多久写一次顺序(防抖)。 |
watchIntervalMs | 10000 | 多久检查一次是否被用户切回“最近更新”,是则重新接管。 |
已知限制
- 不是列表内文件夹:归档只是排到列表底部(在“显示已归档”筛选下可见灰色行);
- 视图菜单会显示“手动排序”;
- 依赖官方内部形态,升级后若失效请先停用插件。