前言¶
DeepSeek Harness 的 dsh web 以前台进程方式跑 Web UI:关掉命令行窗口,界面就没了;用户注销或机器重启后,也不会自动恢复。若希望局域网里有一台「随时能连」的 DSH 主机,需要把进程交给 Windows 服务控制管理器(SCM)托管。
普通 Node 程序不能直接注册为 Windows 服务——SCM 要求调用 StartServiceCtrlDispatcher 并周期性上报心跳,否则约 30 秒会被判定无响应而终止。因此实践中要用 nssm 或 WinSW 等原生包装器夹在 SCM 与 node.exe 之间。手工配包装器时,LocalSystem 下 ~ 指向系统配置目录、DSH_HOME 与 profile 路径、日志轮转与重启策略等细节容易踩坑。下面介绍社区插件 dsh-web-service(维护者 zheyuanlinye7),它用 MCP 工具与 CLI 把这些步骤一次性做对,并附带基于真实故障日志的诊断能力。
这是什么¶
dsh-web-service 是 DeepSeek Harness 生态里的客户端类插件:不修改 dsh 本体,也不替你下载 nssm / WinSW 二进制,只使用本机已有的包装器,生成完整服务参数并注册、启停、诊断。当前 package 版本为 0.1.0,许可证 MIT,平台限制 Windows(win32),Node.js >= 22,dsh 引擎声明为 >=0.2.0-rc.1 <0.3.0。
目录页:SkillHub - dsh-web-service
源码与文档:GitHub - zheyuanlinye7/dsh-web-service
核心功能¶
安装与修复服务¶
插件会探测 node、@deepseek-ai/dsh/lib/bin.js、$DSH_HOME、profile 目录、nssm 或 WinSW,生成完整参数并注册服务,启动后探测端口是否可用。
诊断¶
解析服务日志,将「起不来」的原因翻译为可读结论,例如端口被占用、profile 插件与新版本 dsh peer 不兼容、插件树加载失败、profile 目录不存在、权限被拒,并给出可执行的修复建议。README 说明:诊断规则来自真机日志样本,不是假想场景。
控制与预演¶
- 控制:
start/stop/restart,并等待 SCM 报告新状态,而不是仅依赖sc start的退出码。 - plan:只读预演,打印将要执行的命令与将要写入的文件,不落盘。
两种包装器¶
支持 nssm(公有领域)与 WinSW(MIT),自动探测路径;也可用 --nssm / --winsw 显式指定。
它不做什么¶
- 不打包、不下载任何第三方可执行文件。
- 不 patch DSH 源码,不改变 dsh 的监听绑定逻辑。
status、plan、diagnose为只读,无需管理员;install/uninstall/start/stop需要提权。
安装与启用 MCP¶
从 GitHub 安装到 web profile:
dsh plugin --profile web add "github:zheyuanlinye7/dsh-web-service"
安装完成后重启一次 dsh。插件包中的 cordis.patch.yml 会挂载 MCP 客户端,但默认关闭(避免装包即获得管理员级能力):
- id: mcp-dsh-web-service
name: '@deepseek-ai/dsh-mcp-client'
disabled: true
若希望由 agent 管理服务,在 DSH Plugins 页面启用该项(或将 disabled 改为 false)后再重启。
前置条件¶
- Windows,Node.js 22+
- 本机已放置 nssm 或 WinSW(PATH 或常见目录下插件可自动发现;见 README 中的探测范围说明)
典型用法¶
命令行¶
先看现状,再预演,最后在管理员终端安装;起不来时用诊断:
npx dsh-web-service status
npx dsh-web-service plan
npx dsh-web-service install
npx dsh-web-service diagnose
通过 MCP 让 agent 操作¶
启用 MCP 后,可直接说明需求,例如:把 dsh web 装成 Windows 服务,端口 3080,开机自启。可用工具包括 mcp__winsvc__service_status、service_plan、service_install、service_uninstall、service_control、service_diagnose、service_logs(名称与作用见仓库 README 表格)。
常用配置¶
CLI 与 MCP 共用一组选项(CLI 用 --dry-run,MCP 用 dryRun: true)。节选默认值如下:
| 选项 | 默认值 | 说明 |
|---|---|---|
--name |
dsh-web |
服务名 |
--profile |
web |
托管的 dsh profile |
--port |
3080 |
监听端口 |
--dsh-home |
$DSH_HOME → ~/.dsh |
harness 主目录 |
--account |
LocalSystem |
服务账户 |
--log |
<用户目录>\<服务名>.log |
stdout/stderr 合并,10 MB 轮转 |
完整选项表见 GitHub README。
工作原理(安装时在做什么)¶
安装服务本质是把五件事写对(README 归纳):
- 进程命令:例如
node.exe ...\dsh\lib\bin.js web --no-open --port 3080 - 环境变量:LocalSystem 下必须显式设置
DSH_HOME、USERPROFILE、APPDATA等,否则 dsh 会去系统 profile 目录找配置。 - 工作目录:必须是真实存在的目录。
- 日志:合并 stdout/stderr,开启轮转,避免日志无限增长。
- 退出策略:崩溃后延迟重启、停止时给予优雅退出窗口。
更细的架构说明见仓库 docs/architecture.md。
适用场景与注意¶
适合:在 Windows 上长期运行 dsh web,需要开机自启、无控制台黑窗、用户注销后仍监听;愿意自行准备 nssm 或 WinSW,并接受安装服务时的管理员权限。
安全:--host 0.0.0.0 会把 Web UI 暴露到局域网;dsh 对 Web UI 有基于 token 的浏览器会话鉴权,若环境中有绕过鉴权的改动,任何能访问该端口的设备风险会放大——启用前需自行评估。
生态说明:DeepSeek Harness 社区插件目录(如 SkillHub)为独立站点,与 DeepSeek / 幻方无官方从属关系;安装第三方插件前建议阅读源码与 LICENSE,确认与当前 dsh 版本匹配。
链接¶
- 目录页:https://www.skillhub.cn/plugins/zheyuanlinye7/dsh-web-service
- GitHub:https://github.com/zheyuanlinye7/dsh-web-service
经过上面的步骤,你可以在 Windows 上把 dsh web 从「开着窗口才活着」的前台进程,变成 SCM 托管的后台服务,并用同一套 CLI / MCP 做状态查看、预演安装与故障诊断。