dsh-ws-recency: Sidebar Workspace and Session Management

前言

DeepSeek Harness(DSH)侧栏按工作区分组展示会话时,组内会话通常已按最近更新排序,但分组本身的顺序往往仍按工作区注册先后排列——刚跑完一堆任务的工程可能仍排在列表下方。原生置顶只把会话顶到所属分组的第一行,分组若在下面仍不易看见;归档会话缺少统一的取消归档入口;删除、跨工作区移动、token 归因等能力在宿主侧也不完整。

下面介绍社区插件 dsh-ws-recency(维护者 chyxhtc)。它单独安装即可生效,不依赖其它插件;若另装 dsh-plugin-busy-workspace,会尊重其分组上的 data-busy-rank,在其档位内再按活跃度排序。

这是什么

dsh-ws-recency 是面向 DSH 侧栏的会话与工作区增强插件,npm 包名 dsh-ws-recency,当前资料中的版本为 0.24.1,许可证 MIT,要求宿主 dsh 版本 >=0.2.0-rc.2 <0.3.0。

它通过 Client 注入与宿主半(index.js)路由,实现:工作区分组按最近活跃排序、过期历史折叠、运行中/未读/需跟进三色标记、全局置顶区、可恢复删除与归档统一管理、按来源拆分的 token 消耗统计(含参数/结果分段)、会话移动到另一工作区,以及对话内「交接到新会话」。

工作区分组按最近活跃排序

DSH 组内会话已按 updatedAt 倒序,但分组顺序来自工作区注册表。插件从 Client store 读取各工作区会话,取组内最大 updatedAt;空工作区回落到该工作区的 createdAt,再写入分组元素的 flex order。不修改会话行、原生置顶、归档或 store。

「未分组」桶始终排在真实工作区之后。仅在按工作区分组(含工作区树顶层)时生效;搜索、扁平视图、侧栏收起时不应用排序逻辑。

历史折叠

超过 foldDays(默认 3 天)未更新的会话会被折叠;整个工作区都过期时,侧栏只保留一行工作区标题,需要时再展开。

每组由插件提供「展开历史 N」/「收起历史」,替代宿主隐藏的「展开其余 N 条会话」。点「展开历史」会逐轮驱动宿主隐藏按钮(每轮多渲染 5 条),直到整组展开并展开过期行;点「收起历史」则重新折叠过期行。选中、运行中、等待处理、以及手动标记「需要跟进」的会话默认不折叠(前三项可在设置中关闭豁免,跟进标记始终不折叠)。空白草稿行不参与折叠;每 5 分钟自动重算一次。

折叠只能作用于宿主已经渲染的行;更早的行仍在宿主「展开其余」之后。

颜色与「需要跟进」

自动标记仅依赖宿主可读状态:运行中(蓝)、完成未读(绿)。「看过但未决策」不猜测,避免噪音。

「需要跟进」(琥珀)由用户在会话「…」菜单点「标记需要跟进」产生,存在 Client store 的 followUps(随 dsh.ws-recency.prefs.v1 持久化)。琥珀圆点渲染在宿主 sidebar.session.row.leading 槽,点圆点取消标记;只有手动取消才会消失,强状态期间被盖住,跑完且读完无新未读后琥珀会再显示。

全局置顶区

在所有工作区分组之上增加「置顶」区,使用宿主原生 workspaces.pinnedSessionIds,不是第二套置顶。每行显示标题与所属工作区名,hover 可取消置顶;置顶期间原分组内对应行隐藏。工作区分组、折叠、颜色逻辑不变;仅在按工作区分组时显示。

回收站与归档

删除(移入回收站):「…」→「删除会话(移入回收站)」——停任务、去归档与置顶、从工作区 detach、移投影缓存,并将日志目录移到 ~/.hypers-work/.trash/ws-recency/<sessionId>-<时间戳>/,附带 .wsr-trash.json 元数据;侧栏通过 api-session/removed 立即更新。可在侧栏面板「回收站」中恢复或彻底删除。

归档:仍为宿主「归档会话」;插件在回收站面板列出已归档会话,支持取消归档、移到回收站、彻底删除(与删除路径一致,需二次确认)。

Token 消耗统计

通过会话下方统计条的「用量分析」,或「…」→「Token 消耗统计」打开:

  • 真实账单:步数、输入(未缓存)、缓存命中、输出、合计(来自每步 usage)。
  • 消耗分布图:按内容长度估算主 agent(思考/回复/用户/系统)与各工具占比;工具横条可拆「参数」(淡色)与「结果」(实色)。
  • 设置 → 通用中的 把工具参数计入主 agent:打开后工具只计返回结果,参数量并入主 agent(默认关闭)。

数据从会话日志计算,跨重启可用;大日志首次打开约 1–2 秒,10 秒内重复打开走缓存。若面板提示「宿主半未加载」,需重启应用加载新版本;0.10.1 起失败时会附带 HTTP 状态与 /ws-recency/health 自检信息。

移动到工作区

「…」→「移动到工作区…」选择目标。因会话 cwd 写在日志首条不可变 header 中,插件在宿主侧:停会话、读全量事件、旧目录备份到 .trash/ws-recency/、用新 cwd 回放重建、校验并 attach 到新工作区、按 workspace.json 原始记录 detach 旧工作区。旧工作区里创建/修改的文件不会随会话移动;备份可用于回滚。

交接到新会话

动作行或「…」→ 交接到新会话:插件经宿主 Session 控制器发送交接指令;当前会话 AI 输出 handoff 围栏块(资料中 0.23.2 起推荐 ~~~handoff,兼容旧 ``handoff)。抓取后在回复下方出现问询卡片:确认则在本工作区新建会话并发送交接内容;可重新生成或填写调整意见。内容另存~/.hypers-work/.wsr/handoff/-<时间>.md。0.24.1 起优先走sessions.using+session.prompt` API。

设置

设置 → 通用(持久化键 dsh.ws-recency.prefs.v1):

  • 历史折叠天数:1–90,默认 3;可选「选中 / 运行中 / 等待处理的会话不折叠」。
  • 颜色与跟进标记总开关、全局置顶区显示开关。
  • 把工具参数计入主 agent(token 分布)。

安装与启用

插件以当前 DSH 进程权限运行,安装前请自行查看源码与 MIT 许可证。社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系。

npm 安装(资料推荐):

dsh plugin --profile <profile> add dsh-ws-recency

或从 GitHub:

dsh plugin --profile <profile> add github:chyxhtc/dsh-ws-recency

或固定版本预构建包:

dsh plugin --profile <profile> add https://github.com/chyxhtc/dsh-ws-recency/releases/download/v0.24.1/dsh-ws-recency-0.24.1.tgz

装完后将 dsh-ws-recency 加入 ~/.hypers-work/profiles/<profile>/package.json 的 dsh.profile.bundles,重启应用。

本地开发可用 link: 指向源码目录(示例路径以 README 为准)。

仓库提供离线自检命令,例如:

node tests/selfcheck.cjs
node tests/stats.cjs
node tests/move.cjs
node tests/trash.cjs
node tests/archive.cjs
node tests/handoff.cjs

典型用法

  1. 日常开发:依赖分组按最近活跃上浮,用 3 天折叠收拢旧会话,用琥珀「需要跟进」标记待决策项。
  2. 多工程并行:把常用会话在宿主菜单置顶,在插件「置顶」区集中打开;归档或删错的会话到侧栏「回收站」恢复或清理。
  3. 成本排查:打开某会话 Token 消耗统计,看工具参数 vs 结果占比,必要时在设置里切换「参数计入主 agent」对比分布。
  4. 上下文过长:在当前会话发起交接,确认卡片后在新会话继续,交接 markdown 落在 ~/.hypers-work/.wsr/handoff/。
  5. 会话归属错了 cwd:用「移动到工作区…」迁移(注意磁盘上旧目录文件不跟随)。

适用场景与注意

适合长期在 DSH 中维护多个工作区、会话数量多、需要侧栏秩序与生命周期管理的开发者。

已知边界(来自 README):依赖宿主 DOM 结构(如 _groupSection、data-row-key="workspace:<id>" / session:<id> 等);宿主改结构需插件跟进。折叠仅作用于已渲染行。可选与 dsh-plugin-busy-workspace 互操作,本插件不依赖它。

结尾

dsh-ws-recency 把侧栏里与工作区顺序、历史可见性、置顶、删除/归档、token 归因、跨区移动和会话交接串成一套可配置能力,单独安装即可使用。进一步了解请查看 SkillHub 目录页 与 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye