dsh-desktop-auto-restart:宿主重启与会话恢复工具

前言

在 DeepSeek Harness(DSH)的日常开发中,修改宿主侧插件(host 半边)通常需要重启 DSH 应用才能生效。重启宿主会直接中断当前所有正在运行的会话,包括发起这次重启操作的 agent 自身,导致工作流中断。

comer2031/dsh-desktop-auto-restart 插件旨在解决这个痛点。它提供了一套机制,将“重启宿主”封装为可调用的工具或侧边栏操作,并在新进程启动后,利用清单机制自动唤醒指定的会话,使 agent 能够继续工作。

核心功能

插件主要包含以下功能:

  • 工具 dsh_restart:默认关闭,测试性质。调用参数包括 reason(原因)、sessionIds(待唤醒清单)和可选的 delaySeconds。若不传 delaySeconds,默认等待 10 秒以等待回执落盘;若传 0 则立即重启。模型调用该工具需在设置中开启开关。
  • 侧边栏按钮:在 DSH 界面侧边栏底部提供操作入口。当宿主处于空闲状态时,点击直接重启;当宿主繁忙时,会弹出一个红色确认层,确认后才会执行重启。
  • 自动唤醒机制:重启后,插件会读取待唤醒清单,通过官方通道尝试唤醒会话,并注入“已重启完成,请继续”的通知。若唤醒失败,清单会保留,等待下次启动重试。
  • 防自杀机制:脚本优先使用宿主自身的 PID(进程树)来定位和终止进程,而不是通过进程名批量杀戮。这避免了在多实例或特定环境下误杀其他同名进程。

安装与启用

插件通过 DSH CLI 安装:

dsh plugin --profile <profile 名> add dsh-desktop-auto-restart

安装完成后,需重启 DSH 应用使插件生效。若需在设置页面调整配置,则无需重启,但若要开启 Agent 调用工具的权限,必须重启 DSH。

配置项

插件配置位于 <profile>/cordis.patch.yml 中,可通过定向 patch 修改默认值。核心配置如下:

  • agentToolEnabled:默认 false。控制 dsh_restart 工具是否注册给模型调用。设为 true 后需重启 DSH 才生效。
  • wakeOnStart:默认 true。控制插件启动时是否读取清单并执行唤醒。
  • wakeDelayMs:默认 3000。启动后等待多久开始唤醒,避免过早获取不到会话对象。
  • pendingTtlMs:默认 1800000(30分钟)。待唤醒清单的过期时间。
  • scriptPath:默认 ''。自定义重启脚本路径。留空则使用插件自带的脚本。
  • dryRun:默认 false。设为 true 时仅落清单、不执行实际重启,用于演练。
  • installRoot:默认 ''。宿主安装目录。留空时自动探测(读取当前进程 exe 所在目录),探测失败才使用内置默认路径。

兼容性与注意事项

  • 平台限制:仅支持 Windows 平台的 DSH 桌面端(宿主版本 ≥ 0.2.0-rc.1)。非 Windows 平台插件会拒绝重启操作。
  • 依赖环境:依赖 PowerShell 和 WMI。PowerShell 执行策略需允许本地脚本(RemoteSigned)。若执行策略为 Restricted,脚本可能不会被执行,但工具会误报成功。
  • 安全软件:火绒等安全软件可能会拦截 WMI 操作,在日志中记录 WmiPrvSE.exe 的敏感动作。这属于预期行为,需放行。
  • 工具注册:工具默认不注册,必须通过设置页面开启 agentToolEnabled 并重启 DSH,模型才能看到并调用该工具。
  • 执行结果:工具的回执只覆盖“脚本是否被拉起”或“脚本头几秒是否拒绝”。脚本中途的失败(如强杀进程超时)只会记录在日志文件中,不会反映在工具返回值里。
  • 忙碌判定:宿主繁忙时(有运行中的会话、排队消息、后台任务等)会拒绝重启。特别地,调用方自己所在的会话不计入繁忙判定。

结语

该插件为 DSH 宿主的重启提供了一种可控的自动化方案。通过配合会话恢复能力,它能在重启宿主后尽量减少业务中断。使用前请确保环境满足 PowerShell 和 WMI 的运行条件,并留意安全软件的拦截策略。

插件目录与源码:
* SkillHub 目录页
* GitHub 仓库

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

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

小夜