前言¶
在使用 DeepSeek Harness (DSH) 进行开发时,左侧工作区的顺序直接影响交互效率。默认情况下,工作区列表是静态的,随着会话增多,最近使用的工作区容易沉底。dsh-workspace-recency-order 插件通过 Host 侧的底层操作,解决了工作区顺序无法自动更新的问题。
插件介绍¶
这是一个 Host 侧插件,由开发者 dgmico 维护。它的核心作用是:按工作区内最新会话活动时间自动重排左侧工作区顺序(Host 侧,写入官方持久工作区顺序,不覆盖官方 UI)。
核心功能¶
- Host 侧插件:直接操作 Host 侧的工作区注册表,而非注入 DOM 或替换组件。
- 按最新会话活动时间自动重排:工作区会根据其名下会话的最新活跃时间(
updatedAt)进行排序。 - 持久化排序:重启 DSH 后顺序保持,并继续自动维护。
- 实时更新:通过监听事件,在用户发送消息时实时调整顺序。
- 不覆盖官方 UI:利用官方渲染逻辑,只需修改 Host 侧数据,UI 会自动跟随。
- 幂等重排:计算出的顺序若与当前一致,则不写入,避免无效操作。
- 支持配置:提供多种配置项以调整排序行为。
安装与启用¶
插件支持通过绝对路径安装。
dsh plugin --profile <profile> add /绝对路径/dsh-workspace-recency-order
安装后,插件会自动处理配置。如果需要手动干预,可以在 profile 的 cordis.patch.yml 中添加配置项。
配置说明¶
在 profile 的补丁层(~/.dsh/profiles/<profile>/cordis.patch.yml)中按 id 重述整行。补丁按行替换 config,因此只需写入想修改的键。
- id: workspace-recency-order
name: 'dsh-workspace-recency-order'
config:
sweepMs: 0 # 关掉兜底巡检
debounceMs: 1000 # 防抖放宽到 1 秒
| 配置项 | 默认值 | 说明 |
|---|---|---|
enabled |
true |
插件启用开关。 |
direction |
'desc' |
排序方向,desc 为最近活跃在最上,asc 为最久未动在最上。 |
emptyWorkspace |
'createdAt' |
空工作区的排序策略:createdAt 按自身创建时间参与排序,bottom 固定沉底,top 固定置顶。 |
countSubagentSessions |
false |
是否将子代理会话(origin: 'subagent')计入活跃度。 |
debounceMs |
400 |
事件合并防抖窗口(毫秒)。 |
sweepMs |
300000 |
兜底巡检间隔(毫秒),0 表示关闭。 |
skipWhenSessionListEmpty |
true |
当无法读取会话列表时,放弃本轮排序。 |
注意:本插件不依赖
@deepseek-ai/schemastery,因此 DSH 的配置页无法显示表单。改配置需直接编辑cordis.patch.yml。
开发与维护¶
该插件采用零依赖、纯 ESM 模式编写。
- 测试:包含 54 个测试用例,覆盖了 24 种工作区全排列和随机打乱的写入计划正确性校验。
- 开发文件:
lib/order.js:核心排序逻辑。lib/index.js:插件本体,处理事件、防抖和生命周期。
- 热重载:插件本身支持热重载,但修改
lib/下的源码需要重启 DSH。
注意事项¶
- 全局持久:顺序是全局持久的,对 profile 下所有客户端生效。
- 子代理处理:子代理会话默认不参与活跃度计算。
- 时间基准:排序依据的“最新时间”取的是最后一次用户消息时间,而非助手回复时间。
- 重启需求:修改
lib/下的代码后必须重启 DSH。 - UI 限制:目前 DSH 暂未提供手动拖拽排序 UI,插件不会与手动操作冲突。