dsh-startup-command: DeepSeek Harness Web 插件

前言

DeepSeek Harness (DSH) Web 在启动完成后,默认行为通常是打开系统的默认浏览器。但在实际开发或自动化场景中,开发者往往需要更精细的控制:例如,强制在特定浏览器中以应用窗口模式打开,或者需要在 GUI 启动前执行一些系统级准备动作(如等待服务就绪、启动辅助程序)。

这就需要一种机制,能够在 DSH Web 服务器完全就绪后,由系统自动触发指定的命令。dsh-startup-command 插件正是为此设计,它允许用户配置启动后的执行动作。

插件简介

这是一个 DeepSeek Harness Web 插件,由维护者 kagurazakayashi 提供。其核心作用是在 Web 服务器监听端口、Loader 树稳定之后,执行用户在配置文件中定义的命令。该插件通过 settings.yaml 中的 dsh-startup-command 命名空间进行配置,支持占位符替换,且不会阻塞 DSH 主进程的关闭。

核心功能

  • 启动后触发:插件严格遵循 DSH 的生命周期,在 Web 服务器开始监听、Loader 树稳定后才执行命令,确保获取到真实的端口和 Token。
  • 完全可配置:命令支持单行字符串或命令数组,数组中的命令会按顺序依次执行(前一个退出后,下一个才开始)。
  • 占位符支持:
    • {url}:自动替换为 GUI 的实际访问地址(包含 Token,支持 OS 分配端口)。
    • {home}:替换为用户目录(os.homedir())。
    • {browser}:自动检测 Chromium 系浏览器(优先级:Chromium > Chrome > Edge,或系统默认浏览器)。
  • 非阻塞设计:子进程以 detached 和 unrefed 模式启动,独立于 DSH 运行,不会阻碍 DSH 的关闭流程。
  • 开关与模式:提供 enabled 开关临时禁用,以及 shell 模式选项(用于处理包含空格的路径)。
  • Web 配置界面:在设置菜单中提供可视化卡片,支持直接编辑配置和生成示例命令。

安装与启用

安装该插件需要通过 npm 安装,并在配置文件中挂载。

1. 获取插件包

在终端中执行以下命令安装:

npm install @kagurazakayashi/dsh-startup-command

2. 挂载插件

编辑 C:\Users\<you>\.dsh\profiles\web\cordis.patch.yml,添加挂载配置。该步骤仅注册插件,具体的命令逻辑仍在 settings.yaml 中定义。

- insert:
    - id: dsh-startup-command
      name: '@kagurazakayashi/dsh-startup-command'
      inject: [webServer]

3. 配置并重启

在 C:\Users\<you>\.dsh\settings.yaml 中添加 dsh-startup-command 命名空间,并重启 dsh web。重启后,在 Settings → Plugins → Plugin configuration 下会出现该插件的设置卡片。

配置与用法

配置项位于 settings.yaml 的 dsh-startup-command 键下:

dsh-startup-command:
  enabled: true
  shell: false
  command: '"C:\Program Files\Google\Chrome\Application\chrome.exe" --app={url}'

配置项说明

  • command (string | string[]):要执行的命令。如果是数组,将按顺序执行;如果是字符串,需注意路径中包含空格的情况。
  • enabled (boolean):是否启用插件,默认为 true。
  • shell (boolean):是否通过系统 Shell 执行命令。默认为 false(直接传参数组),更安全;设为 true 可处理带空格的路径。

占位符使用

  • {url}:替换为 http://127.0.0.1:<实际端口>/?token=...。这是新版本 DSH Web 必需的认证地址。
  • {home}:替换为当前用户的主目录路径。
  • {browser}:替换为检测到的 Chromium 系浏览器可执行文件路径。

使用示例

示例 1:自动检测浏览器并启动应用模式窗口

dsh-startup-command:
  command: '"{browser}" --user-data-dir="{home}/.dsh/dsh-browser-data" --disk-cache-dir="{home}/.dsh/dsh-browser-cache" --app={url} --no-first-run --disable-extensions'

示例 2:多命令顺序执行

先执行等待命令,再启动浏览器:

dsh-startup-command:
  command:
    - 'cmd /c ping -n 3 127.0.0.1'
    - '"C:\Program Files\Google\Chrome\Application\chrome.exe" --app={url}'

示例 3:打开任意程序

dsh-startup-command:
  command: 'C:\Windows\System32\notepad.exe'

注意事项

  1. 避免双重打开:DSH 内置了 open default browser 功能。如果使用此插件来打开浏览器,通常需要在 cordis.patch.yml 中覆盖 web-runtime 的 config,关闭内置的浏览器打开行为,否则会出现浏览器被打开两次的情况。
  2. 权限问题:插件以 DSH 进程的权限运行,因此配置的命令不应尝试访问普通用户无权限的敏感目录或文件。
  3. 依赖版本:该插件需要 DSH 版本 >= 0.1.2-rc.1 以及 Node.js >= 20。

结语

dsh-startup-command 提供了一种轻量级的方式,将 DSH Web 的启动与其后的浏览器或工具启动流程解耦。通过配置文件驱动而非硬编码,它保持了灵活性,同时通过非阻塞机制保证了 DSH 运行时的稳定性。对于需要自动化启动特定浏览器环境或执行启动后脚本的场景,这是一个实用的工具。

相关链接:
* 插件目录页
* GitHub 仓库

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

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

小夜