dsh-session-console:給 DSH 側欄加一個會話總控臺

前言

DSH 跑一段時間後,左側對話列表裏往往堆着一堆會話:跑完沒關的、跑掛了半途的、幾週沒碰但上下文還熱着的。原生列表只回答”有哪些會話”,不回答”哪個最燒 token”“哪個快到上下文上限”“我想把一句話派給那個跑了一半的會話,怎麼派”。日常做法是逐個點開看狀態,或者靠標題和目錄名腦子裏記,規模一大就不現實。

onlyinliu/dsh-session-console 是社區維護的客戶端插件,維護者 onlyinliu,分類”客戶端”。它把這張列表擴展成一張覆蓋全部會話的儀表盤:讀全局狀態、用一句自然語言定位某個會話,並把一句任務投遞到那個會話裏並讀回結果。下面介紹它實際暴露的能力、安裝方式和用法。

這是什麼

插件在 DSH 側欄放一個圖標,點開是主面板。README 的定位是”左側對話管理員”。它解決三個本來要手工完成的動作:翻會話看狀態、憑目錄名找會話、切到別的對話裏發話。

插件市場條目(awesome-dsh-plugin)把它的簡介寫成:覆蓋每個會話的儀表盤、自然語言會話定位、跨會話任務投遞。倉庫當前 10 個文件在 main,topics 含 dsh-plugin;npm 包名 dsh-session-console,當前 latest 爲 0.1.1(2026-11-04 發佈,內容是兼容性修復)。插件市場目錄頁給的星標數是 0。這個插件是社區自發維護的,與 DeepSeek / 幻方沒有官方從屬關係。

儀表盤:讀全局

主面板列出全部會話,每行顯示一批指標:

指標 含義
會話總數 / 運行中 / 冷會話 / 空白 全局狀態分佈
累計 token(輸入 / 輸出 / 緩存讀 / 緩存寫) 來自 tokenUsage projection,不掃描歸檔
緩存命中率 cacheRead ÷ (input + cacheRead + cacheWrite)
今日活躍 / 本週活躍 按會話最後活躍時間分桶
上下文壓力 來自 contextPressure projection,顯示 pressureTokens ÷ contextWindow 的百分比
模型 來自 modelSelection projection 的 next(已合併 pending),顯示 provider/model
熱度 100/(1+靜默小時/6) + log10(1+token)*8 + log10(1+事件)*5 + 運行中40
最熱 / 按工作區聚合 誰在燒 token、哪個目錄最忙

列表支持 全部 / 運行中 / 今日 / 冷會話 / 空會話 過濾,可按熱度、消耗、最近排序,並提供標題與路徑的即時過濾。數據來自 DSH 已有的 projection 與 session header,不做歸檔掃描,開銷集中在本進程。

指代:用一句人話定位會話

“指代與派任務”輸入框裏輸入一句自然語言,例如 示例項目的相關內容怎麼樣了,插件的處理分四步:

  1. 剝掉「怎麼樣了 / 情況 / 進度 / 相關 / 內容 / 幫我 / 看看」這類口頭語,留下主語 示例項目;
  2. 拿主語比對每個會話的標題、cwd、目錄末段、agent preset、會話 id,權重分別爲 6 / 4 / 3 / 1 / 1;
  3. 子串命中給滿權重加成,其餘用 CJK bigram 加拉丁詞的 Dice 相似度;
  4. score ≥ 40 且不存在跨工作區的同分對手纔算”鎖定”,否則列出候選讓你點。

比對用的是會話 header 裏的真實 cwd,不是歸檔目錄那串 ~6570~636E~… 編碼名,所以目錄叫 示例項目-v2 時,一句「示例項目」也能對上。同工作區裏分數相同的兄弟會話不算歧義,直接取熱度最高的一個;只有跨工作區出現同分對手才判爲歧義並列出候選。

派任務:把一句話寫進別的對話

選定目標後寫一句話,兩種投遞方式:

  • queue(排隊):作爲下一輪輸入排進去,目標對話空閒時立刻跑;
  • steer(打斷插入):如果它正在跑,就把這句插進當前這一輪。

走的是 UI 輸入框同一條通道(sessionController.prompt),所以冷會話會自動恢復,消息也會持久化。派完後可以在詳情卡里讀最近的用戶 / 助手消息、輪次 / 工具調用 / 工具失敗 / 異常輪次統計、最後一次失敗原因,也可以一鍵跳到那個對話看完整上下文。

安裝與啓用

已發佈到 npm:

plugin_manager install_bundle  target=dsh-session-console

也可以直接從 GitHub 裝:

plugin_manager install_bundle  target=github:onlyinliu/dsh-session-console

開發時從本地目錄裝(改動即時生效):

plugin_manager install_bundle  target=D:\create\dsh-session-console

裝完重開一次 DSH,側欄纔會出現圖標。包名和 github: 兩條來自 README 原文,不要憑插件名自己拼接命令。

兩個已知安裝問題,README 對原因有說明:

  • 按包名裝報 declares no dsh.bundle:鏡像還沒同步到最新版,解析到了 npm 側發佈時留下的 0.0.0-stage 佔位版本。解法是把安裝源切到 npm 官方源,或改用 github:onlyinliu/dsh-session-console。鏡像的 latest 同步到 0.1.1 後重試即可。
  • 裝的時候報 incompatible-version:裝到的是 0.1.0。它的 engines.dsh 上界寫成 <0.2.2-0,按 semver 預發佈規則 0.2.2-rc.1 大於 0.2.2-0,於是被判不兼容;0.1.1 已把上界放寬到 <0.3.0-0。

0.1.1 的聲明是:

"engines": { "node": ">=18", "dsh": ">=0.2.0-rc.2 <0.3.0-0" }

需要留意 DSH 裝載插件時的判定行爲:只要清單聲明瞭 engines.dsh 就只認它,peerDependencies 裏那些 @deepseek-ai/dsh-* 會被忽略,比較時帶 includePrerelease: true。所以上界寫成 <0.2.2-0 這種帶 -0 的形式,等於每次 DSH 發新 rc 都會被判成不兼容,這正是 0.1.0 在 0.2.2-rc.1 上裝不上的原因。已有舊版想升級:當初用包名裝的可以在設置 → 插件 → 條目詳情頁用「更新」;從本地目錄 / link: / github: / tarball 裝的沒有「更新」入口,先移除再重新添加。README 也說明,已裝同名包時 install_bundle 直接報 already-installed,寫精確版本繞不過去,必須先移除再裝。倉庫裏的 tools/compat-check.mjs 可以脫離 DSH 復刻這個判定:

node tools/compat-check.mjs package.json
# dsh-session-console@0.1.1  engines.dsh = ">=0.2.0-rc.2 <0.3.0-0"
#   dsh 0.2.2-rc.1      compatible
#   ...
# ALL_COMPATIBLE

典型用法

下面這段是 README 給的流程,可以理解成一次完整操作。

  1. 打開側欄圖標進入面板,用過濾和排序找到目標會話;不確定是哪個時,在「指代與派任務」輸入一句自然語言,例如 示例項目的相關內容怎麼樣了,看候選是否鎖定。
  2. 鎖定後寫一句要說的話,選擇 queue 或 steer。目標會話如果處於冷狀態會自動恢復。
  3. 在詳情卡里讀最近的用戶 / 助手消息和輪次 / 工具調用 / 工具失敗 / 異常輪次統計,失敗時看最後一次失敗原因。需要完整上下文就點跳轉到那個對話。

Host 側暴露了同源 HTTP 路由(僅迴環地址可訪問)和聚合入口,客戶端面板通過這些路由取數。除了側欄面板,插件還註冊了 5 個給 agent 用的 tool,具體名稱和參數以倉庫 lib/index.js 爲準。

適用場景與注意

適合手裏同時開着多個 DSH 會話、需要按工作區或主題快速定位、並且希望臨時往別的會話裏派活的開發者。它的讀操作覆蓋全局 token 用量和上下文壓力,可以減少逐個點開看狀態的負擔;派任務走的是 UI 輸入通道,冷會話會恢復,消息持久化。

用之前要清楚兩點:

  • 插件以當前 DSH 進程的權限運行,能看到全部會話的統計信息,也能向別的會話投遞輸入。安裝前應先讀一遍源碼,確認路由和 tool 的暴露範圍符合預期。
  • 許可證是 MIT(來自 package.json),發佈憑據和內部 token 都不在倉庫裏,不屬於本插件引入的內容。

另外注意發佈節奏:插件市場的國內區域優先讀 npm 包 dsh-plugin-catalog,它只在 build-site 的 schedule / workflow_dispatch 分支發佈,所以國內目錄最遲可能滯後到次日夜間。急着看可以在「市場設置 → 下載區域」切「全球」,或直接把安裝源寫成 npm 官方源。

結尾

這個插件的價值在於把”翻列表找會話”這件高頻小事做成一張靜態總覽,再配一句自然語言定位和一條跨會話投遞通道。好處是顯見的:少點幾次、少切幾次窗口。不適合的場景也清楚:只需要一兩個會話、或者工作流本來就靠命令行管理的,收益有限。

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

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

小夜