前言¶
DeepSeek Harness(DSH)里常会同时开着多个会话:有的在跑任务,有的在后台跑完但你还没点开,还有的停在授权、计划审查或提问上等你点选。侧栏能逐行看状态,但当你把注意力放在当前对话区时,很容易漏掉「别处还在跑」或「有会话在等你」。
下面介绍社区客户端插件 dsh-session-hud(维护者 ShiMarin233):在界面右下角放一只可拖拽的桌宠,用三个实时数字概括主会话层面的「在跑 / 完成未读 / 等你选」,点数字即可跳转;同类多个会话时连续点击同一行会依次轮换目标。
这是什么¶
dsh-session-hud 是面向 DSH Web 客户端的纯前端插件:零 npm 运行时依赖,无宿主侧逻辑,客户端逻辑打包在自包含的 lib/client.js 中(宠物动画以内联 base64 形式打进 bundle)。package.json 中声明通过 cordis.patch.yml 注入客户端,并依赖官方包 @deepseek-ai/dsh-client-ui-session 提供的会话状态面。
分类为客户端;在 Skillhub 社区目录 可检索到该插件(页面标注可安装,展示版本 v0.1.0)。源码与说明见 GitHub 仓库,许可证 MIT。
核心功能¶
右下角桌宠与三行计数¶
单击桌宠展开气泡,三行数字彼此独立,多状态并存时不会互相「盖住」:
- 进行中:当前有多少主会话处于运行态(含其直接子代理仍在跑的情况)。
- 完成未读:后台跑完、你尚未通过主视图打开过的主会话数量。
- 待你选择:需要你交互的会话数量;
pendingInteraction.kind与活动面板口径一致,分为approval(待确认授权)、plan-review(待审查计划)、question(待回答问题)。气泡可附带按 kind 的明细,例如「1 确认 · 1 提问」。
单击任意一行会调用 uiWorkspace.openSession(id) 跳到对应会话。同一类下若有多个会话,连续单击同一行会在该组内轮换;界面会提示类似「2/3,再点下一个」。
角标只显示一位汇总数字(超过 9 显示 9+);宠物动画按状态在空闲、忙碌、等待、庆祝等情绪间切换,拖拽时有单独反馈动画。
数据从哪来(事件驱动、无轮询)¶
数字全部来自 DSH 原生客户端服务,订阅变更后更新,不做定时轮询:
| 计数 | 主要来源 | 判定要点 |
|---|---|---|
| 进行中 | uiSession.sessionStatus + sessions.list.projectionsBySession |
主会话 running === true,或其直接子代理中仍有 running(与官方侧栏 runningSubagentCount 同口径) |
| 完成未读 | uiSession.sessionStatus |
仅主会话 completionUnread === true;子代理跑完不计入 |
| 待你选择 | uiSession.sessionStatus |
主会话自身有 pendingInteraction,或其直接子代理持有 pending(v0.6.0 起;与侧栏展示有意分叉,见下文) |
sessionStatus.getSnapshot() 返回 Map<sessionId, { running, pendingInteraction, completionUnread }>,是 DSH 0.2.0 起的统一会话状态面。列表标题与排序用 sessions.list,归档过滤用 workspaces.list。
统计范围:只计侧栏意义上的主会话行,排除 origin === "subagent"、blank 以及已归档会话,与官方侧栏及活动面板一致。只聚合直接子级:孙辈子代理计入其父会话行,不会额外算到祖父会话上。
与侧栏的一处刻意差异:侧栏行上的 pending 只看该会话自身;桌宠在「待你选择」里还会把直接子代理的 pending 算进来。原因是子代理卡在提问或审批时,侧栏往往只显示「子智能体运行中」,看不出在等你操作。子代理跑完仍不算「完成未读」,与官方 UI 一致。
若 projectionsBySession 缺失或结构异常,进行中与子代理相关逻辑会安全退化为 0,不抛异常打断渲染。宿主过旧、没有 sessionStatus 时,会退化到仅读会话摘要的 running,此时「待你选择」可能为 0。
扩展接口(可选)¶
其它脚本或插件可向气泡追加内容:
window.__dshSessionHud.registerBubbleSource({
id: 'schedule',
order: 100,
getLines: (state) => [
{ icon: '', text: '14:00 组会', sub: '会议室 A' }
]
})
常用调试与 API:window.__dshSessionHud.open(sessionId)、refresh()、show(true/false);打开调试日志:
localStorage.setItem('dsh-session-hud:debug', '1')
桌宠位置保存在 localStorage 键 dsh-session-hud:prefs。
安装与启用¶
Skillhub 目录页将本插件标为可安装(展示 v0.1.0)。仓库 README 未单独给出 CLI 安装命令,安装时请以目录页指引为准,或在 DSH 客户端内走第三方插件安装流程:
- 打开左侧 插件,选择 添加插件(或箭头菜单中的安装第三方插件入口)。
- 按你环境支持的方式添加包名为 dsh-session-hud 的插件(例如目录提供的规格、或已下载到本地的插件目录)。
- 安装后 立即启用;若提示重启 DSH,完全退出后重新启动,以便加载客户端 bundle。
插件以当前 DSH 进程与已登录用户的客户端权限运行;安装前建议阅读 GitHub 源码 与 MIT 许可证,以及 NOTICE.md 中的第三方素材声明(宠物动画来自 dsh-pet,同样 MIT)。
典型用法¶
日常无需配置项:启用后桌宠默认在右下角。
- 扫一眼角标或展开气泡,确认「在跑 / 没看 / 等你选」各有多少。
- 需要处理时,单击对应数字行进入会话;多个同类会话时用连续单击轮换。
- 若你写了日程或其它气泡扩展,通过
registerBubbleSource注册后,内容会出现在三行数字下方。
从手机或 Tailscale 访问 DSH 时,动画资源随客户端 bundle 内联下发,不依赖本机 127.0.0.1 回环静态路由,与 README 中说明的设计一致。
适用场景与注意¶
适合谁:同时维护多个 DSH 会话、依赖子代理并行、又希望在不盯着侧栏时仍能发现「后台跑完」或「子代理在等你点选」的开发者。
体积与性能:内联动图后客户端 bundle 约 4.8MB(README 给出的构建结果量级);逻辑侧零 npm 依赖。
边界:
sessionStatus是进程本地投影;浏览器重连后,极端情况下数字可能短暂偏小,待宿主重放 pending 后恢复。- 气泡三行与侧栏单行状态文案并非一一对应:例如 pending 与「已完成」在侧栏会互斥展示时,桌宠可能两行同时非零,属于多展示维度而非统计错误。
- 自行改逻辑需编辑
src/widget.js后执行node tools/build.mjs生成lib/client.js;不要直接改生成产物。
结尾¶
dsh-session-hud 把 DSH 原生 sessionStatus 与列表投影收成右下角三个可点击的数字,并补上子代理 pending 的可见性,适合作为多会话工作时的轻量 HUD。社区目录:Skillhub - dsh-session-hud;源码与详细状态矩阵:GitHub - ShiMarin233/dsh-session-hud。