dsh-wake-up:按需叫醒休眠的 DSH 會話

前言

DeepSeek Harness(DSH)重啓後,只有你在 GUI 裏點開過的會話會留在內存裏;其餘會話仍在磁盤上,並未「活着」。QQ 通道、定時任務、webhook 或其它插件若要把消息投進某間未打開的會話,往往會收到宿主提示:那間會話現在沒活着,需要先打開。手工在界面裏逐個點開,對自動化集成並不友好。下面介紹的 dsh-wake-up 把「叫醒」做成可複用能力:在會話休眠時,帶着它上次使用的模型路由執行 resume,外部消息即可正常投遞,且喚醒本身不重複拉起已活着的會話、也不額外調用模型。

這是什麼

dsh-wake-up 由社區維護者 TiFu799 發佈,在 SkillHub 社區目錄中歸類爲「模型推理」。插件當前版本 0.1.0(MIT 許可),定位是:按需叫醒休眠的 DSH 會話,帶模型路由 resume,同時提供 HTTP 端點、模型工具與其它插件可調用的服務。

核心功能

端點(給腳本用)

向本地 GUI 端口 POST 喚醒指定會話;可選 GET 查看狀態與最近日誌。

curl -X POST http://127.0.0.1:<GUI 端口>/dsh-wake-up/wake \
  -H 'content-type: application/json' \
  -H 'origin: http://127.0.0.1:<GUI 端口>' \
  -d '{"會話":"session-0e4e241e-…"}'
# {"ok":true,"說":"已拉起 0e4e241e","路由":{"provider":"deepseek-account","model":"deepseek-flash","reasoningEffort":"max"}}

GET /dsh-wake-up/state 返回磁盤上的會話、哪些處於活着狀態、哪些讀到了路由,以及最近日誌。

工具(給模型用)

模型在需要往未打開的會話投消息時,可調用:

wake_session({ session: "session-0e4e241e-…" })

服務(給別的插件用)

其它插件通過注入 wakeUp 服務調用:

export const inject = ['wakeUp']

export function apply(ctx) {
  if (await ctx.wakeUp.resume(id)) { /* 現在可以把消息投進去了 */ }
  ctx.wakeUp.isAwake(id)   // 已經在活着嗎
  ctx.wakeUp.route(id)     // 這間會話會帶什麼路由去喚醒
  ctx.wakeUp.state()       // 概況
}

resume 與路由

  1. resume 必須帶路由。 不帶 agentOptions(provider / model)時,恢復出來的 agent 沒有模型路由,提示詞裏 deployment:persona-prefix 的 {{model}} 無法組裝,整輪會報 prompt variable "{{model}}" has no value for this assembly。本插件從會話的 modelSelection 投影讀取上次路由,讀不到則退回 profile 的 agent-default-model。

  2. resume 不調用模型。 僅把會話歷史讀回內存,空閒時 0 次模型請求,開銷與在 GUI 裏點開會話相當;模型請求只在本輪真正需要出字時發生。

安裝與啓用

市場收錄後,在 SkillHub 或 DSH 市場裏搜索 dsh-wake-up 一鍵安裝;命令行等價於:

dsh plugin add dsh-wake-up --profile desktop

收錄前若需本地試裝:在本倉庫執行 pnpm pack 得到 dsh-wake-up-0.1.0.tgz,再在 profile 目錄安裝:

pnpm pack                                  # 產出 dsh-wake-up-0.1.0.tgz
cd ~/.dsh/profiles/desktop && pnpm add <上面的 tgz 路徑>

並在 profile 的 cordis.patch.yml 中登記插件(插件本身按 dsh.bundle.patch 自動掛載,此步是讓 profile 認識它):

- insert:
    - id: wake-up
      name: dsh-wake-up

裝完刷新頁面即可,無需重啓 DSH。

可選配置

同樣在 profile 的 cordis.patch.yml 中可寫:

- id: wake-up
  name: dsh-wake-up
  config:
    開機喚醒:              # 插件加載 3 秒後先叫醒這幾間,默認空
      - session-0e4e241e-…
    日誌上限: 40           # 最近日誌留多少條

典型用法

  1. 外部 webhook / 腳本:在投遞消息前,對目標 session-<uuid> 調用 POST /dsh-wake-up/wake,確認返回 ok 與 路由 後再寫入該會話。

  2. 通道類插件:在 apply 裏注入 wakeUp,對用戶指定的會話 ID 先 await ctx.wakeUp.resume(id),再投遞消息;可用 isAwake 避免重複喚醒。

  3. 長駐集成:配置 開機喚醒,在 DSH 加載插件約 3 秒後自動拉起指定會話,減少首次消息前的等待。

適用場景與注意

適合需要在 會話未在 GUI 中打開 時仍接收消息的集成:聊天橋、定時任務、多會話路由、插件間協作等。要求宿主 DSH >= 0.2.1-rc.2(自帶 ctx.agents.resume);插件無前端、無額外 npm 依賴,僅使用 agents / webServer / tools 三個宿主服務。在沒有 agents.resume 的舊宿主上會安靜降級爲「叫不醒」,不會因此報錯崩潰。

安裝前請自行查看 GitHub 倉庫 源碼與 MIT 許可證。插件與 DSH 進程同權限運行,接入生產環境前應確認喚醒與會話 ID 來源可信。SkillHub 爲社區插件目錄,與 DeepSeek / 幻方無官方從屬關係。

結尾

dsh-wake-up 把「那間會話現在沒活着」從集成阻塞點變成一次帶路由的 resume 調用,並同時暴露 HTTP、工具與服務三種入口。目錄頁:https://www.skillhub.cn/plugins/TiFu799/dsh-wake-up;源碼與 README:https://github.com/TiFu799/dsh-wake-up。

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

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

小夜