dsh-recent-sessions:在 DSH Web 側欄底部跨工作區查看「最近」會話

前言

在 DeepSeek Harness(DSH)Web 界面裏,會話往往按工作區分組掛在左側樹形側欄中。切換工作區或滾動列表時,要找回「剛纔還在聊、但不在當前分組裏」的會話,通常只能依賴記憶在工作區間來回找,或接受原生列表裏沒有統一的「最近活動」視圖。

社區插件 dsh-recent-sessions(維護者 hotheat,倉庫 hotheat/dsh-recent-sessions)在側欄工作區樹的底部追加一塊「最近」列表:跨工作區收集有內容的會話,按最後活動時間倒序排列,並過濾空白、已歸檔及 subagent 會話。實現上參考了 ttmouse/dsh-recent 的 ModuleLoader、槽位與 portal 機制;原生 UI 契約以 DeepSeek Harness 源碼爲準。

這是什麼

dsh-recent-sessions 是面向 DSH Web 的客戶端插件(package.json 中 dsh.client.platform 爲 web)。它在左側工作區樹的可識別分組結構下,通過 React portal 將「最近」區塊掛到樹容器末尾,與工作區列表共用滾動區域;在單列表、搜索模式或無法識別分組段時整塊隱藏。

插件當前版本爲 0.1.0,許可證 MIT,聲明的 DSH 引擎要求爲 >=0.2.1-rc.2。

核心功能

列表內容與排序

  • 跨工作區彙總「有內容」的會話,按最後活動時間倒序。
  • 過濾:空白會話、已歸檔會話、subagent 會話不出現。
  • 同一時間的多條記錄保留宿主側欄裏的原有順序。

展示與交互

  • 插件通過 sidebar.footer.action 註冊;從 owner props 讀取 wide(寬側欄相關展示)。
  • 展開側欄時渲染「最近」;收起側欄時整個區塊卸載。
  • 頭部可摺疊,摺疊狀態寫入瀏覽器 localStorage 鍵 dsh-recent-sessions:collapsed。
  • 首屏顯示 10 條,點擊「展開更多」每次再增加 10 條。
  • 點擊標題調用 ctx.uiWorkspace.openSession(id) 打開對應會話。
  • 狀態指示覆用原生 StateDot:運行中顯示原生 spinner,等待響應爲 warning 點,跑完未讀爲 done 點,其餘不顯示;讀屏通過行按鈕的 aria-label 播報;鼠標懸停時用原生 tooltip 顯示「項目名 · 相對時間」。
  • 標題優先用宿主的 title,缺失時用 displayTitle;中英文跟隨宿主 locale(默認中文);顏色跟隨宿主主題 token。

掛載與邊界

  • 展開時以第一個工作區分組段的父節點定位樹容器;portal 固定進插件自有的 host,host 掛在樹容器最後。
  • 工作區列表很長時,需要滾到底部才能看到「最近」。
  • 只有檢測到分組段但取不到父節點的異常結構時,纔回退到 footer 內聯顯示,並使用限高的內部滾動。
  • 過濾後沒有會話時,整個區塊隱藏。
  • 插件只移動自己擁有的 host;觀察器僅監聽側欄內子節點變化,通過 requestAnimationFrame 合併重定位,卸載時取消待執行幀並移除 host。

安裝與啓用

Web 配置檔下安裝(命令來自倉庫 README):

dsh plugin --profile web add github:hotheat/dsh-recent-sessions

瀏覽器端插件由 DSH 啓動時載入內存;安裝或修改插件後需要重啓 dsh web,僅刷新頁面不足以生效。

卸載:

dsh plugin --profile web remove dsh-recent-sessions

若需重置摺疊偏好,可在瀏覽器中刪除 localStorage 鍵 dsh-recent-sessions:collapsed。

典型用法

安裝並重啓 dsh web 後,打開 DSH Web,展開左側側欄並滾到工作區樹底部(在有多工作區分組且存在符合條件的會話時),即可看到「最近」區塊:

  1. 點擊某條會話標題,直接在該工作區打開會話。
  2. 需要更多歷史時,使用「展開更多」分批加載。
  3. 不需要佔用視線時,摺疊頭部;選擇會保存在本機 localStorage。

倉庫內提供的驗證步驟(面向開發與 CI,可在克隆後的目錄執行):

node --check lib/index.js
node --check lib/client.js
npm test

其中 test/client-load.mjs 檢查 ModuleLoader 與槽位契約;test/rows.mjs 檢查派生、排序、過濾及分頁;test/portal.mjs 檢查短樹掛載、無分組隱藏、host 移動、異常結構回退、幀合併與觀察器清理。

適用場景與注意

適合:經常在 DSH Web 裏跨多個工作區切換、希望按「最近活動」快速回到會話的開發者或日常使用者;且側欄處於正常的多工作區分組樹結構(非單列表、非搜索模式)。

注意:

  • 插件以當前 dsh 進程的權限運行;安裝前請自行查看 GitHub 源碼 與 MIT 許可證,確認符合你的安全與合規要求。
  • 側欄結構不符合插件識別條件時,「最近」不會出現——這是設計上的隱藏,而非安裝失敗。
  • 社區目錄頁 skillhub.cn 上的條目 與 GitHub 倉庫由社區維護,與 DeepSeek / 幻方無官方從屬關係;DSH 生態遵循「一切皆插件」,本插件是 Web 側欄增強的一種可選方案。

結尾

dsh-recent-sessions 把「最近有內容的會話」集中到 DSH Web 側欄樹底部,減少跨工作區找回對話的成本。進一步瞭解可訪問目錄頁 https://www.skillhub.cn/plugins/hotheat/dsh-recent-sessions 與源碼倉庫 https://github.com/hotheat/dsh-recent-sessions。

羽毛球分组比赛记分
小程序二维码

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

小夜