前言¶
在 DeepSeek Harness(DSH)裏同時開着多個工作區、多個會話時,「剛纔在哪個窗口聊過」很容易靠記憶硬找。官方側欄有「任務」「頻道」等頁籤,但並不會按「這一次啓動 DSH 以來」單獨列出你動過的會話。dsh-run-sessions 是社區維護的客戶端側欄插件:在「任務 / 頻道」旁邊增加 本次啓動(This run) 頁籤,只展示本次進程啓動後有活動的會話,支持點進、高亮、右鍵移除和拖拽排序。本文基於插件倉庫 README 與 package.json(當前版本 0.2.0,許可證 MIT)整理安裝與用法。
這是什麼¶
- 名稱:
dsh-run-sessions - 維護者:ayachinene285
- 分類:客戶端(
dsh.client.platform: web) - 倉庫:github.com/ayachinene285/dsh-run-sessions
- 定位:只讀旁掛側欄插件,不接管、不替換官方側欄;找不到掛載點時不動作。
插件依賴 dsh-im-connect 提供的頁簽註冊表(__dshNativeTabs)。未安裝 im-connect 時本插件不會顯示,也不會報錯。
核心功能¶
| 能力 | 說明 |
|---|---|
| 本次啓動列表 | 僅顯示 updatedAt >= 本次進程啓動時間 且非空白新會話,按最近活動排序 |
| 選中高亮 | 當前打開的會話有底色與加粗標題(沿用 --dsw-alias-interactive-bg-hover)及 aria-current |
| 右鍵菜單 | 打開 / 從本次啓動移除;移除後可在底部一鍵恢復 |
| 拖拽排序 | 可拖動改順序;新出現的會話默認排在最上面 |
| 留在本頁籤 | 從列表點開會話時,側欄不自動跳回「任務」;頻道會話在粘性窗口內也不會被「頻道」頁籤搶走 |
| 跟隨語言 | 文案隨 DSH locale 服務中英文切換 |
| 持久範圍 | 移出列表與手動順序存在 localStorage,刷新頁面保留;重啓 DSH 後列表按設計重置 |
過濾與會話數據來源:頁面側讀取已有 ctx.sessions.list,不額外請求 Host 會話接口。
「本次啓動」如何判斷¶
宿主在 lib/index.js 首次 import 時記錄 STARTED_AT,並通過只讀接口暴露:
GET /api/dsh-run-sessions/state
返回形如 { startedAt, now, pid }。頁面用 startedAt 過濾會話;每次 DSH 重啓 startedAt 變化,列表自然清空;僅刷新頁面不影響 cutoff。
瀏覽器控制台可覈對:
await (await fetch('/api/dsh-run-sessions/state')).json()
調試日誌前綴爲 [run-sessions]。
安裝與啓用¶
插件以當前 dsh 進程 權限運行;安裝前請自行審閱源碼與 MIT 許可證。社區目錄頁:skillhub.cn/plugins/ayachinene285/dsh-run-sessions(與 DeepSeek / 幻方無官方從屬關係,DSH 生態理念是「一切皆插件」)。
方式一:本地插件鏈接(README 推薦)¶
git clone https://github.com/ayachinene285/dsh-run-sessions.git
cd dsh-run-sessions
# 裝進當前 profile(桌面版一般是 desktop)
dsh plugin --profile desktop add "$(pwd)"
方式二:手動改 profile¶
命令行不方便時:
- 將插件目錄放到
~/.dsh/profiles/<profile>/node_modules/dsh-run-sessions(目錄聯接即可); - 在該 profile 的
package.json中:
-dependencies增加"dsh-run-sessions": "link:/path/to/dsh-run-sessions"
-dsh.profile.bundles數組末尾增加"dsh-run-sessions" - 完全退出 DSH 再打開(客戶端 bundle 按啓動時版本緩存,僅刷新頁面不生效)。
方式三:拷貝文件¶
將 lib/、cordis.patch.yml、package.json 複製到上述 node_modules 目錄,同樣修改 package.json 後重啓 DSH。
典型用法¶
- 安裝並重啓 DSH 後,確認已啓用 dsh-im-connect。
- 在側欄「任務 / 頻道」旁打開 本次啓動 頁籤,查看本次啓動以來有更新的會話。
- 點擊列表項進入會話;當前項會高亮。
- 右鍵可「打開」或「從本次啓動移除」;誤移除可用底部「恢復」。
- 需要固定瀏覽順序時,直接拖拽會話行;新會話默認出現在頂部。
從本頁籤打開的會話會通過 matchSession 被認領,避免側欄跳回「任務」或頻道頁籤爭搶焦點。
實現要點(瞭解邊界用)¶
側欄「任務 / 頻道」由 dsh-im-connect 繪製並暴露 insert / getTabs / subscribe / addSessionFilter。本插件僅 registry.insert({ id, label, order: 30, render, matchSession }),不替換官方組件;apply() 帶 try/catch,面板外包 error boundary,最壞情況只是少一個頁籤。
主要文件(無構建步驟,改 lib/client.js 後需完全重啓 DSH):
package.json # dsh.bundle.patch + dsh.client(platform: web)
cordis.patch.yml # 只 insert 本插件
lib/index.js # 宿主:啓動時間 + /api/dsh-run-sessions/state
lib/client.js # 瀏覽器:頁籤、列表、右鍵、拖拽
適用場景與注意¶
- 適合:一次啓動內頻繁切換多個會話、希望有「短記憶」列表的 DSH 桌面 / Web 客戶端用戶。
- 不適合指望跨重啓的歷史:「本次啓動」嚴格按進程,重啓後列表清空是設計行爲,不是 bug。
- 依賴:必須有 dsh-im-connect 的頁簽註冊表,否則頁籤不出現。
- 安全:插件隨 DSH 進程運行,安裝前請檢查倉庫源碼;勿在未審閱的情況下用於不可信環境。
結尾¶
dsh-run-sessions 在側欄補了一塊「這一次啓動以來聊過的會話」視圖,減少在多工作區間來回翻找的成本;實現上只讀現有會話 store,並與 im-connect 協作保持頁籤粘性。需要安裝命令與行爲細節時,以 README 爲準。
- 目錄頁:https://www.skillhub.cn/plugins/ayachinene285/dsh-run-sessions
- GitHub:https://github.com/ayachinene285/dsh-run-sessions