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。

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

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

小夜