前言¶
用 DSH(DeepSeek Harness)做智能体开发的同行,一般都会攒下一堆工作区:每个项目、每次实验、每个临时想法各开一个。时间一长,「上次那个工作区还用不用」「哪个可以归档了」「哪个其实是周期性在跑」就没人记得清了,只能一个个点开对话框翻记录。
看板类工具不是没有,但多数要自己搭,或者要引入额外的数据库。本项目的思路是直接读 Host 已有的本地存储——工作区注册表、会话投影缓存、会话日志——在 Web UI 里算给你看。下面介绍的是 stone-beka/dsh-workspace-insight,一个客户端插件,维护者是 stone-beka,定位是只读、本地、无任何网络请求的活动洞察面板。
这是什么¶
一句话定位:给 DSH Web UI 加一块工作区 / 会话活动看板,回答「哪些工作区还活着、它们跑了哪些对话、花了多少时间、哪些可以放心归档」。
- 形式:客户端插件(client),通过标准的
dsh.bundle.patch+dsh.clientmanifest 挂载,无构建步骤。 - 数据:只读
$DSH_HOME下的本地文件,不发任何网络请求。 - 许可证:MIT。版本
0.2.1。
相比「打开每个工作区翻会话列表」的做法,它把所有工作区的活动压到一屏,并且按天给出分布,归档判断有明确规则(超过 20 天未使用且仍有会话,标记「建议归档」),而不是凭感觉。
核心功能¶
插件有三个视图,共用同一份只读数据。
总览¶
一行一个工作区,给出最近使用、会话数、轮次、模型+工具耗时、近 14 天触达柱。超过 20 天未使用且仍有会话的工作区自动标「建议归档」。点行展开会话,可直接打开 / 归档 / 取消归档。
另有「今日热力」:行左边缘一条工作区身份色,今天没动压到 30%,动过保留原色;行尾「今日 N」胶囊用绿色深浅表示今天在该工作区新开 / 再用的对话数(1–2 浅、3–5 中、6+ 深)。悬停「今日 N」会浮层列出今天用过的对话,超过 6 条折成「+N 个对话」。
月视图(月度热力日历)¶
每天一格,格子加高到 118px,网格最小列宽 86px,面板窄时横向滚动。
格子内部按一天中出现的工作区分段:每段宽度 = 当天该工作区的会话数占比,颜色 = 工作区的列色(混到 78% 保持柔和),段内用竖排文字写工作区名,宽度约 10px,窄段也能露出名字。
交互上,点彩色段直接筛选该工作区,点格子空白选中当天;筛选后其他工作区的段变暗到 22%,整月形状仍保留。悬停彩色段在格子下方弹出当天全部会话,整行可点跳转;悬停日期或空白不再弹浮层,完整列表在下方「当天记录」面板。
顶部有月度摘要:活跃天数、对话数、涉及工作区数、最长连续活跃天数、环比上月。也可以只看某个工作区,无记录时会明确提示而不是给一张空日历。
时间轴(连续日期矩阵)¶
行 = 日期,从最早记录(2026-08-14)到今天一天不落;列 = 工作区,整列有固有色(表头 12%、有数据格 8%、空格 3% 的同色相底纹)。列顺序按最近活跃分四段:7 天内 / 8–14 / 15–21 / 21 天以上,段内按最新会话创建时间新→旧。
格子里每条对话一个同色小圆点 + 标题,默认最多 3 条(+ N),有「显示全部」开关。缩放低于 80% 时进入小字模式,仍保留 9px 标题(最多 2 条 + + N)。点击对话切回对话面板并打开该会话。
缩放交互:滚轮只上下;左键拖动平移;Ctrl / Cmd + 滚轮缩放(40%–180%,锚在鼠标处);− / + 按 10% 微调。
安装与启用¶
插件发布在 npm,包名是 dsh-workspace-insight。安装命令必须用包名,不能贴 npmjs 网页链接——pnpm 会把网页 URL 当成 tarball 地址去下载,而 npmjs.com 的页面对非浏览器请求返回 403,报错会是 ERR_PNPM_FETCH_403 ... 403 Forbidden。
桌面版:打开「设置 → 插件 → 添加插件」,粘贴包名并安装,然后硬刷新:
dsh-workspace-insight
dsh web / CLI 用户:
dsh plugin --profile web add dsh-workspace-insight
注意事项两点。其一,桌面版的 desktop profile 由桌面应用独占管理,在终端里跑 dsh plugin --profile desktop ... 会被拒绝(error: profile "desktop" is managed exclusively by the Electron application),桌面版请走设置界面。其二,如果报错里跟着 No authorization header was set for the request,那是 pnpm 的附带提示,公共包不需要 token,忽略即可;只有 401 才需要配 token。
装完后左侧栏出现柱状图图标,点它把主区域切到「工作区洞察」;设置页里也能打开。右侧栏还注册了一个窄版标签页(只有月视图 + 时间轴)。
卸载:
dsh plugin --profile web remove dsh-workspace-insight
兼容性前提:需要 DSH 的 Web UI(dsh web 的 web profile 和桌面版的 desktop profile 都行),在 DSH 0.2.2-rc.1 上验证;Host 端解压会话日志需要 Node ≥ 20。插件直接读 Host 的会话存储,DSH 大版本若改动存储格式,插件显示警告条而不是给出错误数字。
装完左侧栏没有图标,一般是没硬刷新或插件行没启用——Ctrl/Cmd + Shift + R,再确认设置 → 插件中该行是启用状态。
典型用法¶
下面是基于插件文档的几条可复现操作。
- 打开左侧栏的「工作区洞察」图标,默认进入总览,滚动查看全部工作区。
- 在总览里展开一个超 20 天未使用但仍有会话的工作区,点归档完成清理;归档走 Client 的
uiWorkspace.archiveSession(),插件本身不写任何会话或工作区存储。 - 点某个工作区行的「今日 N」胶囊,浮层列出今天在该工作区用过的对话,确认今天到底动了哪些东西。
- 切到月视图,点某一天的彩色段筛选工作区,看这个月它的活动分布;再点「在时间轴看」跳到时间轴并只保留该列,顶部「显示所有列」可以还原。
- 在时间轴上用 Ctrl / Cmd + 滚轮缩放到 80% 以下,确认小字模式下仍能读出对话标题,而不是退化成色块。
刷新不是手动的:总览每 60 秒、月视图每 5 分钟最多重算一次,URL 加 ?refresh=1 可强制刷新。日活跃索引有磁盘缓存 $DSH_HOME/cache/workspace-insight/session-days.v2.json,按文件 size + mtime 增量更新,首次 5–10 秒,之后约 100–300 毫秒;删掉缓存会自动重建,这是插件唯一的写入。
数据来源与口径¶
插件只读三处 Host 数据:
| 来源 | 用途 |
|---|---|
$DSH_HOME/storages/workspace.json |
工作区注册表、会话归属、已归档会话 id |
$DSH_HOME/storages/session_projcache/sessions/*.json |
标题、createdAt、轮次、llmMs/toolMs、token、最后提问时间 |
$DSH_HOME/sessions/**/*.zstd |
会话日志(多帧 zstd),逐帧解压提取事件时间戳 → 每日活跃 |
隐私方面:不发任何网络请求,两条数据路由同时受 Host 的 connection.admit() 与同源请求头校验保护。
口径上需要注意几处:
- 月视图统计的是「会话-天」——一个对话在 3 天里被用到,记 3 条,不是消息条数。
- 日期按本机时区从事件
time换算。 - 统计覆盖所有有投影缓存的会话(文档中给出当前值 400 条 / 518 会话-天)。
llmMs/toolMs是本地计时,不是计费口径。
适用场景与注意¶
适合需要在多个工作区之间来回切换、又没精力逐个翻会话记录的 DSH 使用者。它把「找哪个工作区在用、该归档谁」变成一个浏览动作,不需要额外记录自己的使用习惯。
插件以当前 DSH 进程的权限运行,能读会话日志和工作区注册表。「建议归档」只是基于最后使用时间的提示,删除前请再次确认,归档动作走界面按钮,插件本身不写存储。
安装前应先读一遍源码确认行为,并核对许可证(MIT)。插件读取的是本机数据,但任何会读写本地存储的第三方代码都值得自己审一眼。
结尾¶
dsh-workspace-insight 的价值在于把分散在注册表、投影缓存和会话日志三处信息里的活动视图收拢到 Web UI 的一屏之内:总览看全局,月视图按天看节奏,时间轴看连续历史。全部只读本地,不装监控也不外发数据。
- 目录页:https://www.skillhub.cn/plugins/stone-beka/dsh-workspace-insight
- GitHub:https://github.com/stone-beka/dsh-workspace-insight