dsh-app-control:在会话里安全重启与更新 DSH 桌面端

前言

在 DeepSeek Harness(DSH)里做插件开发或排查问题时,经常需要重启桌面应用、装新版本插件,或确认进程与插件版本是否正常。这些操作若在 DSH 会话内部由脚本或模型触发,很容易踩到 Windows 进程树、批处理行尾、插件加载等坑:应用关掉后无人负责重开,或工具注册成功却从未执行。下面介绍维护者 cheng-wj 发布的客户端类插件 dsh-app-control,它向模型暴露三个工具,在 Windows 上实现可预期的重启、更新与体检。

这是什么

dsh-app-control 是 DSH 插件,仓库:cheng-wj/dsh-app-control,社区目录页:skillhub.cn 插件页。简介:从模型侧重启、更新并检查 DeepSeek Harness 桌面应用(Windows)。许可证 MIT;package.json 标明版本 1.0.0,要求 Node >=18、DSH >=0.1.7-rc,仅支持 win32。

插件的核心价值不只是「能重启」,而是重启不会把调用链一起杀掉——从会话内重启 DSH 需要避开多个独立故障点,任一失败都可能导致应用关闭后无法再次打开且无明显报错。

三个模型工具

工具 作用 是否中断会话
dsh_status 列出 DSH 进程、python 记忆桥、已装插件版本(对比 registry 最新版) 不中断,只读
dsh_restart 干净关闭全部 DSH 进程,等待退出后自动重新打开 中断
dsh_update 安装指定版本插件(绕开 already-installed 相关问题),然后重启 中断

模型可直接调用;典型对话包括「帮我重启 DSH」→ dsh_restart,「dshmarket 更新失败」→ 先 dsh_status 再 dsh_update 传如 dshmarket@1.66.44,「记忆插件没生效」→ dsh_status 查看 python 桥接进程是否在运行。

安装与启用

dsh plugin add 底层等价于 pnpm add,可接受 Git 仓库、本地目录和 tarball。本插件不发布到 npm,以 GitHub 仓库为分发渠道。安装前请自行查看源码与许可证;插件以当前 DSH 进程权限运行。

方式一:从 Git 安装(推荐)

dsh plugin --profile desktop add git+https://github.com/cheng-wj/dsh-app-control.git

装的是仓库快照;README 注明从 Git 安装时 assets/dsh-tools.bat 的 CRLF 可由 .gitattributes 保留,三个工具可正常注册。升级需重新执行 add。

方式二:本地目录链接(开发调试)

dsh plugin --profile desktop add link:"C:\Users\ZY\Documents\deepseek-harness\默认工作区\dsh-app-control-plugin"

link: 为目录软链,改 src/index.js 后重启即可生效,无需重新打包。

方式三:tarball 离线分发

从 Releases 下载 .tgz,或自行打包后:

dsh plugin --profile desktop add "C:\path\to\dsh-app-control-1.0.0.tgz"

适合内网分发或归档快照。

配置

在 profile 的 cordis.patch.yml 中为该插件行增加配置,例如:

- dsh-app-control:
    delaySeconds: 10   # 倒计时秒数,留出取消余地
    profile: desktop   # dsh_update 的默认 profile

dsh_restart 与 dsh_update 也可在调用参数中覆盖 delaySeconds,传 0 表示立即重启。

实现要点(为何需要专用插件)

README 将以下问题列为插件设计动机,前三个在开发中曾真实触发。

  1. taskkill /T 会杀掉调用者:若调度脚本是 DSH 子进程,/T 会向上遍历进程树并终止自身,无人负责重开。解法:用 WMI Win32_Process.Create 启动调度器,父进程为 WmiPrvSE.exe,不在 DSH 树内。
  2. 批处理 start 未真正脱离:新进程继承 cmd 控制台,关小黑窗会向 Electron 发 CTRL_CLOSE_EVENT。重开应用同样经 WMI,避免共享控制台。
  3. .bat 必须为 CRLF:纯 LF 时 cmd.exe 对 call :LABEL 的偏移会错,脚本可静默停在中途(进程已关、未重开、无报错)。插件在运行前用字节统计 CR/LF 并必要时修复。
  4. cmd.exe 将 = 当参数分隔符:--delay=5 会变成两个参数;解析需匹配裸 --delay 并从下一参数取值;空包名的 update 会在关应用前校验包列表。
  5. 插件装上了但 apply() 未执行:Config 须为 schemastery Schema;peer 依赖宜惰性可选解析,否则 Loader 可能静默跳过整行。诊断可参考 %DSH_HOME%\dsh-app-control\logs\apply-trace.log。

运行时会把 assets 下脚本复制到 $DSH_HOME/dsh-app-control/scripts/,日志写到 $DSH_HOME/dsh-app-control/logs/,避免写入 node_modules。

适用场景与注意

  • 适合:在 Windows 桌面 DSH 上,让模型或你在对话中完成状态查看、可控倒计时重启、带版本号的插件更新。
  • 平台:仅 Windows;非 Windows 宿主上工具仍会注册,调用返回明确错误。
  • 会话:dsh_restart / dsh_update 会中断当前对话,使用前应保存工作。
  • 单实例:Electron 单实例使重复启动落回已有实例,重开失败可能无弹窗,需查日志。
  • 生态:DSH 奉行「一切皆插件」;skillhub.cn 为社区目录,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-app-control 把「重启桌面 DSH、更新插件、看进程与版本」收敛为三个模型工具,并用 WMI 脱离进程树等方式处理 Windows 上常见的自毁与静默失败。安装以 README 中的 dsh plugin --profile desktop add git+https://github.com/cheng-wj/dsh-app-control.git 为准;细节与五个坑的完整说明见仓库 README。

  • 目录页:https://www.skillhub.cn/plugins/cheng-wj/dsh-app-control
  • GitHub:https://github.com/cheng-wj/dsh-app-control
羽毛球分组比赛记分
小程序二维码

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

Xiaoye