dsh-run-sessions:側欄「本次啓動」會話列表

前言

在 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

命令行不方便時:

  1. 將插件目錄放到 ~/.dsh/profiles/<profile>/node_modules/dsh-run-sessions(目錄聯接即可);
  2. 在該 profile 的 package.json 中:
    - dependencies 增加 "dsh-run-sessions": "link:/path/to/dsh-run-sessions"
    - dsh.profile.bundles 數組末尾增加 "dsh-run-sessions"
  3. 完全退出 DSH 再打開(客戶端 bundle 按啓動時版本緩存,僅刷新頁面不生效)。

方式三:拷貝文件

將 lib/、cordis.patch.yml、package.json 複製到上述 node_modules 目錄,同樣修改 package.json 後重啓 DSH。

典型用法

  1. 安裝並重啓 DSH 後,確認已啓用 dsh-im-connect。
  2. 在側欄「任務 / 頻道」旁打開 本次啓動 頁籤,查看本次啓動以來有更新的會話。
  3. 點擊列表項進入會話;當前項會高亮。
  4. 右鍵可「打開」或「從本次啓動移除」;誤移除可用底部「恢復」。
  5. 需要固定瀏覽順序時,直接拖拽會話行;新會話默認出現在頂部。

從本頁籤打開的會話會通過 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
羽毛球分组比赛记分
小程序二维码

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

小夜