dsh-bsk-daemon:让 BrowserSkill 守护进程与 DSH 共生

前言

DeepSeek Harness(DSH)通过 bsk_* 工具暴露浏览器自动化能力,背后依赖一个本地 bsk 守护进程。在沙箱环境中,这个守护进程常被杀掉或无法连接,因为沙箱会回收或禁止子进程。Windows 的 job object 限制子进程脱离,Linux 的 bubblewrap 沙箱会终止子命令。文档建议将守护进程放在持久的主机上下文中,通过本地 IPC 与沙箱通信,这正是 DSH 插件托管守护进程的场景。

插件介绍

dsh-bsk-daemon 是一个 DSH bundle,负责管理 BrowserSkill 的 bsk 守护进程。它将守护进程作为 DSH 的子进程运行:与 DSH 同生同灭,崩溃后自动重启(有界),避免与其它守护进程混淆。插件由社区开发者 XFY9326 维护,面向 Windows、macOS 和 Linux,底层使用 Node.js 内置模块(child_process、net、fs、os、path),无需平台分支代码。

核心功能

  • 生命周期托管:守护进程随 DSH 启动,随 DSH 停止;插件行在 DSH 设置的插件列表中显示为“bsk Daemon Supervisor / bsk 守护进程托管”。
  • 崩溃重启:守护进程崩溃后插件会自动重启,并保持有限的重启次数以避免无限循环。
  • 进程归属:启动后守护进程的父进程是 DSH 主进程;通过 bsk status --json 可验证。
  • 跨平台 IPC:Windows 使用命名管道(\\.\pipe\bsk-daemon-*),macOS/Linux 使用 Unix 域套接字(~/.bsk/run/daemon.sock),插件统一使用 net.connect() 连接。
  • 停止行为:通过 bsk daemon stop 命令停止;Windows job object 会在 DSH 被强制终止时回收守护进程;macOS/Linux 在 DSH 正常退出时停止,被强制终止时可能残留,下次启动会探测并复用。

安装与启用

从 GitHub Packages 安装:

npm config set @xfy9326:registry https://npm.pkg.github.com
npm config set //npm.pkg.github.com/:_authToken $env:GITHUB_TOKEN

或交互式登录:

npm login --scope=@XFY9326 --registry=https://npm.pkg.github.com

然后在 DSH agent 中安装 bundle:

Install @xfy9326/dsh-bsk-daemon from https://npm.pkg.github.com with plugin_manager install_bundle.

工具会将依赖写入当前配置文件,应用 bundle 补丁,并返回 application: applied。安装后可在 DSH 设置→插件中看到“bsk Daemon Supervisor / bsk 守护进程托管”行。

从本地 checkout 安装:

git clone https://github.com/XFY9326/dsh-bsk-daemon.git C:\Tools\dsh-bsk-daemon

然后使用 plugin_manager install_bundle 指向该绝对路径。

配置

插件在配置中插入一行,无显式配置项,默认值如下:

Key Default Meaning
bskPath bsk 可执行文件名或绝对路径
bskHome $BSK_HOME 或 ~/.bsk daemon.json、IPC 端点和日志所在目录
args daemon start --foreground --daemon-idle 30d 传递给 bskPath 的参数

如需覆盖,可在安装前编辑插件的 cordis.patch.yml:

- insert:
    - id: bsk-daemon
      name: '@xfy9326/dsh-bsk-daemon'
      config:
        bskPath: 'C:\Tools\bsk\bsk.exe'
        bskHome: 'C:\Users\me\.bsk'
        args: [daemon, start, --foreground, --daemon-idle, 30d]

注意:配置是整体替换;如不希望由 DSH 启动守护进程(例如自行运行共享守护进程),应禁用该行。

验证与用法

安装后,通过以下命令验证守护进程状态:

bsk status --json

在 Windows 上检查进程层级:

Get-CimInstance Win32_Process -Filter "Name='bsk.exe'" | Select-Object ProcessId, ParentProcessId, CommandLine

在 macOS/Linux 上:

pgrep -fl 'bsk daemon start --foreground'

查看日志:

Get-Content "$env:USERPROFILE\.bsk\daemon.log.*" -Tail 20   # Windows
tail -n 20 ~/.bsk/daemon.log.*                            # macOS/Linux

预期结果:一个守护进程,其父进程为 DSH 主进程,监听回环端口(默认 52800),且 daemon.json 中包含 sock_path 与 host_managed: true。

测试生命周期:

# 在插件背后重启守护进程,插件应在几秒内将其拉回
bsk daemon stop --json
Start-Sleep 5
bsk status --json

适用场景与注意

  • 适合需要在沙箱中安全使用 BrowserSkill 的开发者,尤其是 Windows 沙箱或 Linux bubblewrap 等限制子进程的场景。
  • 插件以当前 DSH 进程的权限运行,安装前建议查看源码与许可证。
  • 依赖 DSH 0.2.x(带 bundle 支持)和 Node.js >= 22;与 Cordis plugin API 4.x(ctx.effect、standard-schema Config)兼容;需要 BrowserSkill 0.3.x。

结尾

dsh-bsk-daemon 将守护进程的生命周期与 DSH 绑定,让浏览器自动化能力在沙箱中更可靠地可用。安装后,守护进程成为 DSH 的子进程,随主进程启动、停止与重启,避免权限与连接问题。更多细节可查阅目录页与 GitHub 仓库。

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

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

小夜