前言¶
DeepSeek Harness(DSH)侧栏可以按工作区分组会话。分组行折叠以后,里面的会话行不再渲染,官方「进行中」标记也只画在展开后的会话行上。想确认哪个工作区里还有任务在跑,往往只能逐层展开。下面介绍社区插件 dsh-workspace-running-dot:在工作区分组行的标题右侧补一个带数字的小圆点,折叠状态下也能看到每个工作区正在运行的会话数。
这是什么¶
dsh-workspace-running-dot 由 VisualStudioXu 维护,分类为客户端插件,当前 package 版本为 0.1.0,许可证 MIT。它只做一件事:读取 ctx.sessions.list 与 ctx.workspaces.list 两个快照,统计各工作区内正在运行的会话数,并把结果画在对应分组行上。没有在跑的会话时不显示圆点;数字会随会话结束实时减少,归零后圆点消失。
官方侧栏对工作区分组行(ProjectRowItem)没有可用的插槽,折叠后仍可见的运行指示无法走正规扩展点,因此插件通过 DOM 注入实现。DSH 侧栏大版本若改动分组行结构,选择器可能需要跟着调整。
核心功能¶
折叠行上的计数圆点¶
圆点内始终显示数字(例如 1 个在跑显示「1」,3 个显示「3」)。计数对齐官方语义:子代理在主会话轮次结束后仍可能继续运行,插件会读 projectionsBySession[id].values.subagentCatalog,与官方侧栏对 runningChildCount 的处理一致。子代理不会单独多计一次——侧栏不给子代理单独一行,判据必须走 subagentCatalog,而不是快照 summary 里并不存在的 parentSessionId 字段。
不属于任何工作区的会话归入「未分组」桶(官方 buildGroup("", …),行的 data-row-key 为 workspace:)。这一桶也会被统计,避免新会话尚未落进工作区时侧栏毫无提示。
「按工作区树」下的父行汇总¶
在 groupBy === 'workspace-tree' 时,子工作区会折叠进父工作区行。插件按目录前缀建立子工作区到父工作区的映射(与官方 owningParentFolder 类似:child.startsWith(root + '/') 取最长匹配,大小写敏感),把子工作区的计数累加到所有祖先行。父行 tooltip 为「N 个会话正在进行(含子工作区)」,与单工作区的「N 个会话正在进行」区分。
平铺模式(groupBy === 'workspace')不做父子累加,避免父行出现不属于它的数字。模式优先从浏览器 localStorage 的 dsh.workspace.view.v5 读取顶层 groupBy;读不到时用 DOM 兜底——树模式会有 div[role="group"] 包住分组行,平铺模式不会。切换分组方式只改视图 store,计数逻辑放在绘制阶段,由挂在 body 上的 MutationObserver 在侧栏重渲染时触发重扫。
圆点颜色¶
在 DSH 客户端打开「插件 → dsh-workspace-running-dot」,可设置圆点颜色:6 个预设色、自定义取色器、「恢复默认」。改动立即生效,选中颜色保存在本机 localStorage['dsrwd.color'],只影响当前浏览器。样式通过根元素 CSS 变量 --dsrwd-dot-color 生效;未手动设置时跟随官方主题色 --dsw-alias-state-business-primary。设置页注册在官方 plugins.bundle.config 插槽,整段用 try/catch 包裹,设置页异常时不影响圆点本身。
实现与生命周期(摘要)¶
| 关注点 | 做法 |
|---|---|
| 锚点 | [data-row-key^="workspace:"],row-key 后半段为 workspaceId |
| 插入位置 | projectText 之后、rowActions 之前 |
| 数据 | sessions.list.subscribe + workspaces.list.subscribe |
| 卸载 | 副作用挂在 ctx.effect 上,样式、观察器、订阅与已画圆点一并回收 |
圆点不可点击,仅作指示;要进入工作区仍点击分组行本身。「单列表」视图没有分组行,插件不绘制任何内容。
安装与启用¶
资料中的安装方式为克隆仓库后 link 进 profile,并重启 DSH。按 README 步骤操作:
git clone https://github.com/VisualStudioXu/dsh-workspace-running-dot.git
# 1. 装进 profile
cd ~/.dsh/profiles/desktop
# package.json 的 dependencies 加:
# "dsh-workspace-running-dot": "link:<克隆下来的绝对路径>"
# 并把它加进 dsh.profile.bundles 数组
# 2. 建链接(Windows 用 junction,bash 的 ln -s 在这里会退化成复制)
cd ~/.dsh/profiles/desktop/node_modules
cmd //c "mklink /J dsh-workspace-running-dot <克隆下来的绝对路径>"
# 3. 重启 DeepSeek Harness
插件通过 cordis.patch.yml 注入客户端,依赖 @deepseek-ai/dsh-client-ui-sidebar,并在 web 端 immediately 加载。安装前应自行查看仓库源码与 MIT 许可证;插件在 DSH 客户端进程权限下运行,link 本地路径前请确认来源可信。
社区目录页:SkillHub - dsh-workspace-running-dot(独立社区站点,与 DeepSeek / 幻方无官方从属关系)。
典型用法与验证¶
日常使用无需额外配置:在「按工作区」或「按工作区树」分组下展开或折叠侧栏,观察分组行标题右侧圆点与数字即可。需要改外观时在插件设置里调整颜色。
维护者在仓库提供 DOM 桩测试脚本,可在克隆目录下执行:
node scripts/20261025-test-dot.mjs
脚本覆盖单/多会话计数、空闲无圆点、插入位置、折叠态可见、归零无残留、未分组桶与子代理计数、颜色默认值与持久化、卸载清理等 17 条断言;全部通过时输出 ALL PASS。
适用场景与注意¶
适合经常在侧栏折叠工作区、又需要快速扫一眼「哪里还在跑」的 DSH 用户。局限包括:依赖当前官方 DOM 结构;仅在「按工作区」「按工作区树」两种分组有意义;DSH 大版本升级后可能需要更新 dotAnchor() 与 ROW_SELECTOR。
结尾¶
dsh-workspace-running-dot 用最小改动补上了折叠工作区行上的运行状态:数字圆点、树模式祖先汇总、可选颜色,卸载路径也挂在 ctx.effect 上。源码与 issue 见 GitHub 仓库,目录介绍见 SkillHub 插件页。