dsh-service-hub:在 DSH 侧栏启停本机服务

前言

用 DSH 做开发时,常见的麻烦是本机服务散落在各处:有的藏在安装目录里,有的是端口监听进程,有的是 npm 或用户 bin 目录下的命令包装脚本,还有随手写的 bat 批处理。想停掉一个服务,得先想起来它装在哪、启动脚本叫什么名字、日志写到哪个目录。

下面介绍 liuhuan007/dsh-service-hub。它把本机服务、一次性脚本和终端工具登记成一个列表,然后在 DSH 侧栏里提供启动、停止、重启、看日志、刷新这些操作,不用去记启动器在哪。

它是一个客户端分类的插件,由 liuhuan007 维护,许可证为 MIT,包版本见 README 中的 package.json。

这是什么

一句话定位:一个 DSH 服务面板插件,用来启停和监控你本机上自己登记的服务、脚本和终端工具。

它解决的核心问题是入口分散。README 的说法是,这样你就不用记住每个启动器放在哪。插件自带一个零依赖的控制台守护进程(console/,只用 Node 标准库),装上插件即可用,不用再单独装别的工具,也没有机器相关的硬编码路径需要下载或配置。

核心功能

插件激活后,Host 端会在 127.0.0.1:3999 启动自带的控制台守护进程;插件卸载时随之停止。注册数据和日志放在 ~/.dsh-service-hub/,因此升级或重装插件后服务列表仍保留。

DSH 侧栏获得一个 Service 选项卡,列出每条已登记条目,并显示实时状态、健康信息、端口和快捷访问 URL,同时提供 start / stop / restart / logs / refresh 按钮,以及一个可在手机上打开的 LAN 地址。

因为进程控制归守护进程所有,所以即使你关掉面板,已启动的服务也会继续运行。

从 0.3.0 起插件自带控制台,无需额外安装第三方插件。

发现与登记

面板支持扫描未登记的可执行文件和监听端口。Scan 会给每个候选先给出一个建议类型:安装目录下的程序和快捷方式为 app,监听端口的程序为 service,npm 或用户 bin 目录下的命令包装为 terminal,其他批处理文件为 script。发现对话框里带类型选择器,这个猜测始终可以覆盖。系统目录(C:\Windows\...)会被跳过。

安全边界

README 中写明的边界如下,都是可对照的设计约束:

  • 客户端 bundle 只对 http://127.0.0.1:3999 发起 fetch,只访问 localhost。
  • 自带守护进程只绑定 127.0.0.1,不绑定任何对外接口。
  • 插件自身不做遥测,也没有对外网络请求。
  • 守护进程只启停你登记过的命令,不会自行运行任何东西;每条命令在面板中可见,并存放于 ~/.dsh-service-hub/data/registry.json。

防护细节

自带控制台只监听 127.0.0.1,并对随手触发的使用做了防护:

  • 不返回 CORS 头,其他来源的浏览器请求会在预检阶段失败,随机网站读不到 /api/state,也调不动修改类接口。
  • Origin / Sec-Fetch / Host 校验会拦截脚本发起的跨站请求并返回 403;顶级导航和 iframe 导航仍然放行,面板可以嵌入页面。
  • 条目 id 限制为 [A-Za-z0-9._-]{1,64},日志路径全部解析在日志目录内,因此 /api/items/<id>/logs 读不到其他文件。
  • /healthz 只暴露 { ok, version, pid } 和 X-LC-Daemon 头,Host 用它确认自己连的是这个插件的守护进程,而不是恰好占用 3999 端口的无关进程。

这些保证有对应的回归测试,npm test 即可运行。

安装与启用

官方安装命令,按官方 README 原文:

dsh plugin --profile desktop add dsh-service-hub

然后重启 DeepSeek Harness(或重载窗口),打开 Service 选项卡。

在 npm 正式发布之前,从源码安装的命令是:

dsh plugin --profile desktop add github:liuhuan007/dsh-service-hub

前置条件

要求 原因
DeepSeek Harness 0.2.1+,带 Web/Desktop UI 客户端 bundle 面向 platform: web
dsh-better-sidebar 面板通过该服务的机制注册侧栏选项卡
Node 18+ 运行自带的控制台守护进程(桌面应用自带一个)
Windows 进程管理使用 PowerShell 和 tasklist/netstat

端口 3999 必须空闲。如果已有另一个控制台在监听该端口,插件会复用它,而不是再启动一个。

典型用法

下面按 README 的可复现路径走一遍。

1、安装插件并重载窗口。

dsh plugin --profile desktop add dsh-service-hub

2、在面板里扫描本机候选。发现对话框会列出未注册的可执行文件和监听端口,每条带建议类型,可当场修改。

3、把需要的服务加入列表。每条条目的命令在面板中可见,同时写入 ~/.dsh-service-hub/data/registry.json。

4、通过面板的启动 / 停止 / 重启按钮管理进程,用 logs 查看日志,用 refresh 刷新状态。

5、如需查看回归测试和发布文件清单:

npm test
npm pack --dry-run

注意:以当前 dsh 进程权限运行

插件运行在当前 dsh 进程的权限下,它能启动和停止你登记的命令。安装前应先检查源码与许可证,确认 registry.json 里登记的命令符合预期,再按需启停。

其他来自官方 README 的已知限制:

  • 面板从会话头部打开(⚙ 服务)。安装 dsh-better-sidebar 会额外在左侧栏加一个同样的面板选项卡,这一步是可选的。
  • 面板文本目前只有中文;locale/ 下的 meta.title / meta.description 有英文和中文两版,供插件清单使用。
  • 控制台 URL 固定为 127.0.0.1:3999。

兼容性方面,README 给出的范围是 DSH >=0.2.1,UI 为 Web / Desktop(侧栏选项卡),对 TUI 和 headless profile 无效果,OS 为 Windows。

小结

这个插件的价值在于把本机服务的入口收进 DSH 侧栏,并提供状态、健康、端口与日志的统一视图,同时用一个只绑定 localhost 的自带守护进程承担进程控制。如果你的服务清单已经点状分布在安装目录、bin 目录和批处理文件里,可以先按上面的安装命令试一遍,再用 Scan 逐步登记。

插件目录页:https://www.skillhub.cn/plugins/liuhuan007/dsh-service-hub

源码:https://github.com/liuhuan007/dsh-service-hub

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

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

小夜