READMESource: main@1f0921a2
DSH 重启按钮(dsh-restart-button)
给 DeepSeek Harness 桌面版 的本地插件:在「设置 → 通用」里加一个一键重启按钮,并把同一动作做成可自定义的快捷键。不用再右键托盘图标退出、再手动启动。
仅支持 Windows 桌面版。原理依赖 Electron 主进程 + Host 进程的父子关系,Web/CLI 部署不适用。
功能
- 设置里的重启按钮:设置 → 通用 → 「重启 DeepSeek Harness」→ 点「重启」,约 2 秒窗口关闭并自动重新打开。
- 快捷键:默认 Ctrl+Alt+R(仅桌面端默认绑定),在 设置 → 通用 → 键盘快捷键 里可以改成任意组合(支持单键/双键)。
- 左下角账号菜单:点左下角头像 → 弹窗里在「退出登录」上方多一项「重启」(官方菜单没有插件扩展位,这一项是克隆官方菜单行实现的,见「已知限制」)。
- 有任务时会先问:仅当真的有进行中的任务(agent 正在生成/工具在跑、排队的用户消息、后台 job、挂起的定时任务)时,才会弹出确认卡片(Esc 取消);空闲时一键直接走。
- 优雅重启:结束的是 Electron 外壳,宿主进程会因 IPC 断开自行完成关闭(会话日志正常落盘),然后重新启动应用。
安装
这是 DSH 的本地插件包(dsh.bundle),把整个目录放在任意位置,然后用 DSH 的插件管理器安装:
plugin_manager install_bundle target = <本目录的绝对路径>
或在会话里让 DSH 的 agent 帮你装(对它说「装一下这个本地插件」)。安装会写入 desktop profile 的 bundle 列表,插件对所有会话生效并随应用启动加载。
使用
| 操作 | 位置 |
|---|---|
| 重启按钮 | 设置 → 通用(在「当前版本」上方) |
| 账号菜单入口 | 左下角头像 → 账户弹窗 → 「退出登录」上方 |
| 改快捷键 | 设置 → 通用 → 键盘快捷键 → 「重启 DeepSeek Harness」→ 点键位重新录制 |
| 查看诊断日志 | 插件目录下的 launch.log(重启脚本每一步)、orchestrator.log(交接记录)、blocked.json(最近一次被拦截的原因) |
实现原理
页面(设置行 / 快捷键)
└─ POST /api/dsh-restart ← 走 DSH 自带的 /api 鉴权载体
└─ 宿主插件:判断是否有任务 → 需要确认就先回 needs-confirmation
└─ spawn + await launch.ps1 (同步等交接完成)
└─ WMI Win32_Process.Create (让重启脚本独立于宿主存活)
└─ restart.ps1:结束 Electron 主进程
→ Host 感知 IPC 断开,自行优雅退出(会话落盘)
→ Start-Process 重新启动 DeepSeek Harness.exe
几个关键点:
- 宿主进程用
detached: true拉起的 PowerShell 会直接退出且不执行脚本(实测),所以改用 WMI 创建独立进程; - 判断「是否有任务」不能用
agent.inbox.nextStep:系统通知(例如权限变更提示)会滞留在 idle 会话里,导致永远误报; - 快捷键默认值只声明桌面端:Web 端的
page.refresh(刷新页面)已占用primary+alt+KeyR。
文件结构
| 文件 | 作用 |
|---|---|
index.js |
宿主半边:/api/dsh-restart 路由、任务检测、启动重启编排脚本 |
client.js |
页面半边:设置行、确认卡片、快捷键命令、文案字典 |
launch.ps1 |
编排器:用 WMI 创建真正执行重启的脚本(宿主退出后仍存活) |
restart.ps1 |
真正重启:校验进程路径 → 结束主进程 → 等待宿主优雅退出 → 启动应用 |
cordis.patch.yml |
插件加载条目 |
locale/*.json |
插件管理页显示用的标题/描述 |
icon.svg |
插件图标 |
已知限制
- 仅 Windows 桌面版;重启时没有「你确定要退出吗」的原生对话框(有任务时由插件自己的卡片确认)。
- 依赖系统自带的 WMI 与 PowerShell 7(没有 PowerShell 7 时回退到 Windows PowerShell)。
- 重启会中断正在生成的任务(确认卡片里会说明)。
- 账号菜单那一项依赖官方 DOM:DSH 的账户弹窗是硬编码菜单、没有插件扩展位,插件是克隆「退出登录」那一行(保留原生样式、图标位、悬停)后替换文案/图标/点击实现的。DSH 改版后该行可能不再出现,另外两个入口不受影响;届时告诉项目维护者适配即可。
更新记录
每次迭代、修复都会在这里记一条;提交号可在 GitHub 提交历史里对应查看。
2026-10-23
初版(6516780)
- 设置 → 通用 增加「重启 DeepSeek Harness」按钮。
- 重启链路:结束 Electron 外壳 → 宿主因 IPC 断开自行优雅退出(会话日志落盘)→ 重新启动应用;执行重启的进程由 WMI 独立创建,不随宿主退出而中断。
- 有任务时先确认:判断依据是真实工作(运行中的 agent、排队的用户消息、运行中/正在停止的后台任务、挂起的定时任务),空闲时一键直接重启。
账号菜单入口(cf26aa6)
- 左下角头像弹窗在「退出登录」上方增加「重启」。官方菜单没有插件扩展位,这一项是克隆官方「退出登录」行(沿用原生样式、图标位、悬停)后替换文案/图标/点击实现的,DSH 改版后可能失效,见「已知限制」。
- 同时补充 README 的三入口说明与兼容性说明。
快捷键修复(4f8ea5c)
- 修复:某些启动顺序下「重启 DeepSeek Harness」没有出现在 设置 → 通用 → 键盘快捷键 列表里。原因是客户端比快捷键服务先激活导致注册被跳过;改为等待服务就绪后再注册。
- 清理了排查用的临时诊断代码。
文档(458d949)
- 补充「关于上传」一节,说明本仓库由 AI 助手代为创建、提交和推送。
早期开发中的两个问题(发布仓库前已修)
- 用
detached方式拉起 PowerShell 会让脚本直接退出、什么都不执行;改为由编排脚本通过 WMI 创建独立进程来执行重启。 - 判断「是否有任务」时曾把 idle 会话 inbox 里滞留的系统通知(例如权限变更提示)算作任务,导致空闲时误报;改为只看真正会打断的工作。
关于上传
本仓库不是仓库主人手动创建/上传的:代码由仓库主人在 DSH(DeepSeek Harness)会话中与 AI 助手协作完成,仓库创建、提交、推送以及临时访问令牌的创建与删除,全部由该 AI 助手代为自动执行(主人只授权了 GitHub 登录会话并选择了公开可见性)。因此提交历史里的自动化痕迹(单次批量提交、临时 PAT)是预期现象。
No comments yet. Be the first to write one.