前言¶
用 DeepSeek Harness(DSH)跑 Web 界面时,若要重启进程或退出应用,常见做法是去找托盘图标或标题栏菜单。窗口在前台、会话进行中时,这套路径往往不顺手。dsh-powerbox 是社区维护的客户端插件,把「重启 DSH」和「退出 DSH」放到当前对话页顶栏右侧,点电源图标后先选动作、再单独确认,避免误触直接结束会话或打断进行中的工具调用。
这是什么¶
dsh-powerbox(仓库 AsterLuo/dsh-powerbox)由 AsterLuo 维护,在 SkillHub 目录中归类为客户端插件。它在 DSH Web UI 的对话标题区域增加一个电源按钮:点击后弹出小对话框,可选 Restart DSH 或 Quit DSH;每一种操作都会再弹一次确认,确认后才真正执行。取消、Esc 或点击遮罩都不会改动运行状态。
核心功能¶
下面介绍插件在界面上提供的两条路径及其约束。
标题栏入口¶
插件向 conversation.session.header.utilities 插槽注册一项工具(与会话顶栏官方「在应用中打开」同类位置),按钮出现在对话标题右侧。样式只使用 --dsw-alias-* 主题变量,随浅色/深色主题切换。
重启与退出¶
- 重启 DSH:经二次确认后调用
dshDesktop.boot.restart()。会终止进行中的工具调用。 - 退出 DSH:经二次确认后调用
dshDesktop._call('win.close-force', {}),强制关闭应用。
交互顺序可概括为:
[⏻] → 选择 Restart DSH / Quit DSH → 再次确认 → 执行
环境与降级¶
- 需要 DSH 带 Web UI(
dsh --profile <name>),版本 0.2 及以上。 - 需要桌面壳提供
window.dshDesktop。在纯浏览器里按钮会禁用,并通过 tooltip 说明原因,避免半可用状态。
安全与反馈¶
确认按钮在请求进行中会禁用;同步重入保护避免重复触发。动作执行中 Esc 不能关掉对话框,以免掩盖已发起的重启。对话框关闭后焦点回到电源按钮。失败会在对话框内展示并可重试,不会静默吞掉错误。
安装与启用¶
官方 README 给出的安装命令如下(将 <your-profile> 换成你的 profile 名):
dsh plugin --profile <your-profile> add github:AsterLuo/dsh-powerbox
包声明了 dsh.bundle.patch,新版 CLI 会自动把 dsh-powerbox 写入 dsh.profile.bundles,一般不必手改 cordis.patch.yml 或 package.json。安装后重启 DSH 或重新加载 Web UI,标题栏即可看到电源按钮。
若 CLI 较旧、不会自动合并 bundles,可手动在 profile 的 cordis.patch.yml 增加:
- insert:
- id: powerbox
name: 'dsh-powerbox'
卸载:
dsh plugin --profile <your-profile> remove dsh-powerbox
若曾手动添加 patch 行,需一并删除,并再次重启 DSH。
典型用法¶
- 用指定 profile 启动带 Web UI 的 DSH(桌面环境,且
dshDesktop可用)。 - 打开任意对话,在标题栏右侧找到电源图标并点击。
- 在第一步对话框中选择「Restart DSH」或「Quit DSH」。
- 在第二步确认框中确认;若误点,选 Cancel 或按
Esc退出。
不需要额外配置项;插件无构建步骤,客户端逻辑在 lib/client.js,通过 window.__ModuleLoader__.load 加载,react 由宿主提供。
适用场景与注意¶
适合经常在 Web 对话界面工作、又需要快速重启或退出 DSH 的开发者。两类操作都具有破坏性:重启会打断未完成的调用,退出会关闭整个应用,因此插件刻意做成两步确认。
插件以当前 DSH 进程的权限运行,安装前建议阅读仓库源码与 MIT 许可证。DSH 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。