前言¶
在 Windows 上跑 SnowLuma 这类 QQ 机器人时,常见做法是单独开终端执行 launcher.bat,再用肉眼盯控制台里的 WebUI、OneBot 是否已监听。DeepSeek Harness(DSH)本身支持插件化扩展;若你已经在 desktop profile 里日常工作,把机器人进程管理收进设置页,比来回切终端更省事。下面介绍客户端插件 dsh-snowluma-control(维护者 Britneycode):在宿主设置页一键启动、停止、重启 SnowLuma 的 Node 进程,并用日志驱动方式展示 WebUI 与 OneBot 就绪状态。
这是什么¶
dsh-snowluma-control 是 DSH 的 客户端(web)插件,分类上属于进程管理与面板集成。它不负责 QQ 登录(仍由 SnowLuma 自身处理),只负责:发现安装目录、拉起/停下 launcher 子进程、解析标准输出判断服务是否就绪、在宿主 Browser 标签打开真实 WebUI 端口。
平台限定为 Windows:停止流程使用 taskkill,进程查询走 powershell.exe,Node 路径探测走 where.exe。实现上仅依赖 Node 标准库(node:*)与宿主机提供的 React,README 中称为零额外 npm 运行时依赖。当前仓库版本为 0.1.0(MIT 许可),要求 Node >= 22.5.0。
设置页面板怎么用¶
安装并重启宿主后,打开 设置 →「SnowLuma 控制台」。面板大致四块:
| 区域 | 作用 |
|---|---|
| 运行状态 | 徽章:已停止 / 启动中 / 运行中 / 停止中 / 残留进程 / 异常退出 (code N);副行汇总 WebUI、OneBot、pid |
| 安装目录 | 可手填或点「自动识别」;候选优先级为运行中进程 > 插件同级目录 > 常见路径,并标置信度 strong / medium / weak |
| 进程 | 「启动 / 停止 / 重启」;若存在残留进程,停止变为「强制停止」 |
| WebUI | 「打开 WebUI」在宿主右栏 Browser 中打开日志解析出的真实端口 |
| 日志 | 环形滚动区,约 2 秒轮询,可「清空」 |
典型操作顺序可以是:先确认或自动识别安装目录 → 点启动 → 看日志与副行直到 WebUI、OneBot 显示就绪 → 需要时在面板内打开 WebUI。日常改配置仍走 SnowLuma 自身;本插件只做进程与就绪展示。
核心能力(设计层面)¶
就绪判定来自日志,不设固定端口¶
插件不假设 WebUI 一定停在 5099:SnowLuma 在端口被占用时会静默顺延(5099 → 5100 …)。因此就绪与访问地址一律从 stdout 解析,例如 [App] SnowLuma starting、[WebUI] listening …、各类 [OneBot.*] … listening、[App] Node integrity: pid=…、Shutting down (launcher disconnected) 等标记。进程 spawn 成功并不等同于服务可用。
三段式停止¶
① 先结束 launcher,让子进程通过 IPC disconnect 尝试优雅退出;② 最多等待 15 秒;③ 仍存活才 taskkill /T /F 强杀整棵进程树。README 说明:SnowLuma 的 launcher 仅在子进程退出码为 75 时重拉,其他退出码会自行退出,因此不宜一上来就整树强杀。
孤儿进程对账¶
若宿主曾被强杀,可能留下 SnowLuma 残留进程。下次打开面板会标为「残留进程」,并允许一键强制停止。判定同时检查 pid 存活、启动时间与命令行匹配,避免仅凭 pid 误判无关进程。
状态与退出码¶
停止后 WebUI / OneBot 就绪位会立即归零,避免按钮仍指向已死端口。用户主动停止后,迟到的 exit 事件不会把界面改成「异常退出」。
安装与启用¶
从 npm 安装(若包已发布):
dsh plugin --profile desktop add dsh-snowluma-control
使用本地源码目录:
dsh plugin --profile desktop add ./dsh-snowluma-control
手工等价方式:在 profile 的 package.json 里把 dsh-snowluma-control 加入 dsh.profile.bundles,并在 dependencies 中写 "dsh-snowluma-control": "link:/path/to/dsh-snowluma-control",再执行 pnpm install。
插件向 webServer 注入路由,前缀为 /api/plugins/snowluma-control,包含 GET /state、GET /logs、GET /detect,以及写操作 POST /start、/stop、/restart、/config(写操作校验同源)。安装后需重启 DSH 宿主;若用 link: 挂载插件目录,改代码后同样要重启宿主,运行中的实例仍是启动时加载的那份。
开发与自测¶
在插件源码目录执行:
node --test
README 记录:69 个断言约 2.5 秒通过。注意不要在 Windows 下写 node --test test/(目录参数会被当作入口模块)。若在类 Unix 环境下跑测试,宿主会话 PATH 可能缺 C:\Windows\System32,可先补 PATH 再测,否则 lib/procs.js 调用裸名 powershell.exe 可能 ENOENT,导致进程时间戳为 null、对账相关逻辑误判:
export PATH="/c/Windows/System32:/c/Windows/System32/WindowsPowerShell/v1.0:$PATH"
适用场景与注意¶
适合谁:已在 Windows 上使用 DSH desktop profile,并希望把 SnowLuma QQ 机器人启停和就绪状态集中在设置页里的开发者。
权限与安全:插件以当前 DSH 进程的身份启动、查询和结束本机进程;安装前请阅读 GitHub 仓库 源码与 MIT 许可证,确认与你的工作区策略一致。DSH 社区插件目录(如 SkillHub 条目)为社区站点,与 DeepSeek / 幻方无官方从属关系,不宜理解为官方应用商店。
环境:仅 Windows;需本机已安装可被 where.exe 找到的 Node,且 SnowLuma 按常规方式安装在可识别目录中。
结尾¶
若你厌烦反复开终端跑 launcher.bat,又需要对照日志确认 WebUI 与 OneBot 是否真在监听,dsh-snowluma-control 把这一过程收进 DSH 设置页,并处理了优雅停止与残留进程对账等 Windows 下的细节。更多信息见目录页 SkillHub:dsh-snowluma-control 与源码 github.com/Britneycode/dsh-snowluma-control。