前言¶
在 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 仓库