DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

stone-beka /

stone-beka/dsh-workspace-insight

Verified

Workspace and session activity dashboard for the DSH Web UI: overview, month heat calendar and a continuous-date timeline matrix. Read-only, local data.

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@9b5a9dd1

dsh-workspace-insight

npm version license

给 DSH Web UI 加一块工作区 / 会话活动看板:哪些工作区还活着、它们跑了哪些对话、花了多少时间、哪些可以放心归档。全部只读本地数据,不出本机。

English | 中文

安装

桌面版:打开「设置 → 插件 → 添加插件」,粘贴包名

dsh-workspace-insight

点安装,然后硬刷新(Ctrl/Cmd + Shift + R)。

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),所以桌面版请走上面的界面。

两种方式都一定要用包名,不要贴 https://www.npmjs.com/package/... 这种网页链接 —— pnpm 会把它当成 tarball 地址去下载,而 npmjs.com 的网页对非浏览器请求返回 403, 报错就是 ERR_PNPM_FETCH_403 ... 403 Forbidden。

装完后左侧栏出现柱状图图标,点它把主区域切到「工作区洞察」;设置页里也能打开。

卸载:桌面版在「设置 → 插件」里移除;CLI 用

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 的会话存储(workpsace 注册表、投影缓存、会话日志)。DSH 大版本若改动存储格式,插件会显示警告条而不是给出错误数字。

安装报错排查

报错 原因 处理
ERR_PNPM_FETCH_403 ... Forbidden 或 E403 403 Forbidden - GET https://www.npmjs.com/package/dsh-workspace-insight 安装时填的是 npm 网页地址,pnpm 把它当成 tarball 去下载,npmjs.com 的网页对非浏览器请求返回 403 改用包名 dsh-workspace-insight;如果 profile 的 package.json 里已经写进了这条 URL,先把它删掉(或改成版本号)再装
同一报错里跟着 No authorization header was set for the request 公共包不需要 token,这句是 pnpm 的附带提示,不是失败原因 忽略;只有 401 才需要配 token
profile "desktop" is managed exclusively by the Electron application 桌面版的 profile 只能由桌面应用管理,终端里不能装 改用桌面版的「设置 → 插件 → 添加插件」
装完左侧栏没有图标 没硬刷新,或插件行没启用 Ctrl/Cmd + Shift + R;设置 → 插件 → 确认这一行是启用状态

隐私

  • 只读 $DSH_HOME 下的本地文件;不发任何网络请求,数据不出本机。
  • 唯一的写入是日活跃索引缓存 $DSH_HOME/cache/workspace-insight/,删掉会自动重建。
  • 两条数据路由同时受 Host 的 connection.admit() 与同源请求头校验保护。

维护

  • 变更记录见 CHANGELOG,许可证 MIT。
  • 无构建步骤:Host 端 index.js、Client 端 client.js 各自单文件,目录结构见文末。

解决什么问题

  • 工作区太多记不过来:一页看完 39 个工作区的最近使用、会话数、轮次、模型+工具耗时。
  • 判断该归档谁:超过 20 天未使用且仍有会话的工作区会被标记「建议归档」。
  • 判断该不该建定时任务:近 14 天触达图 + 会话列表,能看出哪些工作区是周期性在用。

入口

  • 左侧栏图标(柱状图,和「插件」等面板并排):点一下把主区域切到「工作区洞察」页;再点对话切回去。这是 DSH 原生的面板导航方式(main 面板 + sidebar.panellist 图标),侧边栏自己负责按钮和选中态,图标只负责画。
  • 右侧栏的标签页仍然保留(注册为原生 tab 类型 workspace-insight,从右侧栏 + 打开)。
  • 设置 → 工作区洞察 也仍然保留,作为完整版。

主区域版是宽版(总览 / 月视图 / 时间轴 三个标签都全);右侧栏窄版只放月视图 + 时间轴。

总览

  • 39 个工作区一行一个:最近使用、会话数、轮次、模型+工具耗时、近 14 天触达柱。
  • 超过 20 天未使用且仍有会话的工作区自动标记「建议归档」。
  • 点行展开会话,可直接打开 / 归档 / 取消归档。
  • 今日热力:每行左边缘一条工作区身份色(今天没动 → 压到 30%,看着接近白;今天动过 → 原色);行尾「今日 N」胶囊用绿色深浅表示今天在这个工作区新开 / 再用的对话数(1–2 浅、3–5 中、6+ 深);顶部有一行「今天 N 个工作区 · N 段对话(新开 N)」。
  • 悬停「今日 N」:浮层列出今天在这个工作区用过的对话——时间、标题、是否今天新开,超过 6 条折成「+N 个对话」。
  • 展开会话时,今天用过的对话浅绿底 + 左侧绿条,并标「今天 / 今天新开」(新开 = 该对话就是今天创建的)。

月视图

  • 日历:每天一格,格子加高到 118px,网格最小列宽 86px(面板窄时横向滚动,保证名字放得下)。
  • 格子里的空间分配:日期行独立占顶部,彩色段内缩 6px 边距、段间 3px 缝、4px 圆角,留出呼吸感;没有活动的日子是一块极淡的底。
  • 格内左右按比例分段:每段宽度 = 当天该工作区会话数占比,颜色 = 该工作区的列色(混到 78% 保持柔和);段内用竖排文字写工作区名(宽度只要 ~10px,所以窄段也能露出名字),完整名字与数量看悬停预览。
  • 点某个彩色段 = 直接筛选该工作区(再点取消),点格子空白处 = 选中当天。筛选后其它工作区的段变暗到 22%,整月形状仍然保留,不会只剩一列;表头出现「彩色且带 × 的筛选标签」,一键清掉。
  • 星期表头沿用 7 色(周一红 → 周日紫,表头是同色淡底胶囊),周末格子有淡底、今天有描边高亮,日期数字按星期几标色。
  • 只有一个悬停预览(不再有钉住的浮层):
    • 悬停彩色段 → 在格子下方弹出预览,列出这个工作区当天的全部会话;每行右边有「打开 ›」,整行可点 = 跳转到那个对话;底部「只看这个工作区」「在时间轴看」。鼠标移开格子再离开浮层才收起。
    • 悬停日期 / 格子空白不再弹浮层——当天忙不忙一眼能看出来,完整列表在下方「当天记录」里。这样从段往浮层移动时,指针经过格子的内边距和段间缝隙也不会打断预览。
    • 点某一天 = 选中:日历高亮这一天,并把下方「当天记录」面板自动滚进视野——选中态只由面板承载,不再弹第二个浮层。
    • 筛选某个工作区时,预览里其它工作区的条目变淡。
  • 顶部月度摘要:活跃天数 · 对话数 · 涉及工作区数 · 最长连续活跃天数 · 环比上月(+N / -N / 持平)。
  • 顶部可 只看指定工作区:选中后日历与摘要只统计该工作区,下方列出它本月全部对话;若该工作区本月无记录,会明确提示而不是给一张空日历。
  • 点某一天 → 按工作区分组列出当天用过的对话,可打开 / 归档;每组右侧有 「在时间轴只看这个工作区」,一键跳到时间轴并只保留该列(时间轴顶部「显示所有列」可还原)。
  • 月份可前后翻页,「回到本月」可直接跳回。

时间轴(连续日期矩阵)

  • 行 = 日期,一天不落:从最早记录(2026-08-14)到今天连续 84 行,不再跳过空白天;月份首日有加粗分隔线,左侧日期列吸附。
  • 周与周之间的分隔线:相邻两行不属于同一自然周时(周日在上一行、下周一在下一行之间)画一条 1px 虚线,行按"周"成组;月份首日仍是 2px 实线(比周线更重)。
  • 同一星期几永远同一种颜色(周一→周日固定 7 色):日期数字、星期文字、左侧色条同色。
  • 每一列 = 一个工作区,并且整列有固有色:表头色块 12%、有数据的格子 8%、空格子 3% 的同色相底纹,一眼能顺着列往下读。
  • 列顺序:按最近活跃分 7 天内 / 8–14 / 15–21 / 21 天以上 四段,段内有分隔条;段内按最新会话创建时间新→旧。
  • 格子内容:每条对话一个同色小圆点 + 标题,默认最多 3 条(+ N);显示全部开关可展开全部;空格子不再画点。
  • 缩小也看得见字:缩放低于 80% 时进入小字模式——每条对话仍保留一行 9px 标题(最多 2 条 + + N),不会再退化成只剩色块;列头始终显示竖排工作区名。
  • 悬停对话 → 浮层显示完整标题 + 工作区 + 日期;点击 → 切回对话面板并打开该会话。
  • 交互:滚轮只上下;左键拖动平移(横竖都行);Ctrl / Cmd + 滚轮缩放(40%–180%,锚在鼠标处);− / + 可按 10% 微调。
  • 选列 列 n/40 ▾:勾选要显示的工作区(全选 / 全不选),列色与排序不受隐藏影响。

数据来源(只读)

来源 用途
$DSH_HOME/storages/workspace.json 工作区注册表、会话归属、已归档会话 id
$DSH_HOME/storages/session_projcache/sessions/*.json 标题、createdAt、轮次、llmMs/toolMs、token、最后提问时间
$DSH_HOME/sessions/**/*.zstd 会话日志(多帧 zstd),逐帧解压提取事件时间戳 → 每日活跃
  • 不写任何会话或工作区存储;归档动作走 Client 的 uiWorkspace.archiveSession()。
  • 日活跃索引有磁盘缓存:$DSH_HOME/cache/workspace-insight/session-days.v2.json,按文件 size+mtime 增量更新——首次 5–10 秒,之后 ~100–300 毫秒。
  • 总览每 60 秒、月视图每 5 分钟最多重算一次(?refresh=1 强制刷新)。

口径与限制

  • 月视图统计的是「会话-天」:一个对话在 3 天里被用到,记 3 条,不是消息条数。
  • 日期按本机时区从事件 time 换算。
  • 统计覆盖所有有投影缓存的会话(当前 400 条 / 518 会话-天,最早 2026-08-14)。
  • llmMs/toolMs 是本地计时,不是计费口径。

结构

package.json        manifest:dsh.bundle.patch + dsh.client
cordis.patch.yml    插入 workspace-insight 行
index.js            Host:registry/projcache 统计 + 会话日志日索引 + 两条 JSON 路由
client.js           Client:settings.section 页面(总览 + 月视图),主题 token 内联样式
locale/{zh,en}.json 插件清单标题/描述
icon.svg            插件图标
—/ 5

No ratings yet

Verified DSH bundle

Commit 9b5a9dd177cb

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout