dsh-workspace-insight:給 DSH Web UI 加一塊工作區 / 會話活動看板

前言

用 DSH(DeepSeek Harness)做智能體開發的同行,一般都會攢下一堆工作區:每個項目、每次實驗、每個臨時想法各開一個。時間一長,「上次那個工作區還用不用」「哪個可以歸檔了」「哪個其實是週期性在跑」就沒人記得清了,只能一個個點開對話框翻記錄。

看板類工具不是沒有,但多數要自己搭,或者要引入額外的數據庫。本項目的思路是直接讀 Host 已有的本地存儲——工作區註冊表、會話投影緩存、會話日誌——在 Web UI 裏算給你看。下面介紹的是 stone-beka/dsh-workspace-insight,一個客戶端插件,維護者是 stone-beka,定位是隻讀、本地、無任何網絡請求的活動洞察面板。

這是什麼

一句話定位:給 DSH Web UI 加一塊工作區 / 會話活動看板,回答「哪些工作區還活着、它們跑了哪些對話、花了多少時間、哪些可以放心歸檔」。

  • 形式:客戶端插件(client),通過標準的 dsh.bundle.patch + dsh.client manifest 掛載,無構建步驟。
  • 數據:只讀 $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,再確認設置 → 插件中該行是啓用狀態。

典型用法

下面是基於插件文檔的幾條可復現操作。

  1. 打開左側欄的「工作區洞察」圖標,默認進入總覽,滾動查看全部工作區。
  2. 在總覽裏展開一個超 20 天未使用但仍有會話的工作區,點歸檔完成清理;歸檔走 Client 的 uiWorkspace.archiveSession(),插件本身不寫任何會話或工作區存儲。
  3. 點某個工作區行的「今日 N」膠囊,浮層列出今天在該工作區用過的對話,確認今天到底動了哪些東西。
  4. 切到月視圖,點某一天的彩色段篩選工作區,看這個月它的活動分佈;再點「在時間軸看」跳到時間軸並只保留該列,頂部「顯示所有列」可以還原。
  5. 在時間軸上用 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
羽毛球分组比赛记分
小程序二维码

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

小夜