前言¶
DeepSeek Harness(DSH)里,模型每跑完一轮会停手等你下一句。长任务切去写文档、或同时开几个会话时,很容易不知道哪一轮已经结束;出错或被中断时,也可能误以为还在跑。DSH 桌面版自带的通知主要是应用级提示(例如新版本、需要重启),并不覆盖「这一轮任务处理完成」这一格。下面介绍社区插件 dsh-notice(维护者 yimengsuper2432),在每轮结束时向本机发系统通知,并可在点击通知时把 DSH 窗口拉回前台。插件分类为客户端,当前在 GitHub 上星标为 0;许可证 MIT,版本见仓库 package.json(资料中为 0.4.0)。
这是什么¶
dsh-notice 监听 DSH 每轮任务结束(模型停手、等待下一轮输入),按结束原因决定是否弹系统通知:正常完成、出错、被中断可分别开关;默认只在窗口不在前台时提醒,并可设最短耗时门槛,避免几秒就结束的一轮反复打断。通知里会带上项目/会话信息、轮次、用时,以及助手最后一条回复的摘要。Windows、macOS、Linux 通用,依赖 DSH ≥ 0.2.0(README 徽章)、Node ≥ 18、@deepseek-ai/cordis ^4.0.1。
DeepSeek Harness 生态主张「一切皆插件」;SkillHub 目录页 是社区站点,与 DeepSeek / 幻方无官方从属关系。
通知内容与展示逻辑¶
通知大致为三行结构:标题行带会话标题与状态词(已完成 / 出错 / 中断);正文第一行为「模型 · 第 N 轮 · 用时」,第二行起为返回内容摘要。
- 会话标题来自 DSH 的
session/title;尚无标题时用项目目录名。 - 模型来自每轮
request/header里的config.model;拿不到则第二行只保留轮次与用时。 - 返回内容为这一轮助手最后一条文本,压成一行后按
snippetChars截断(插件 patch 默认 90 字);出错时改为错误原因。
README 中四组开关与常见痛点一一对应:按结束原因分别开关、仅窗口不在前台时提醒、最短耗时门槛、子任务默认静默(includeSubagents 默认 false)。
两条通道:页面通道与本机原生命令¶
桌面版宿主可能是独立 Node 进程(ELECTRON_RUN_AS_NODE),并非 Electron 主进程,直接拉子进程发通知可能被策略拦截。因此插件优先走页面通道:
- 页面加载时用
EventSource连接GET /api/dsh-notice-v1/events; - 宿主判定「该提示了」后把标题/正文推给已连接的页面;
- 页面用 Web
Notification弹出,在桌面版中即本机系统通知。
preferClient 默认为 true:只要有页面连着就走这条路,设置页会显示「已连接的页面:N」。关闭该选项,或仅 dsh web / 终端跑、窗口未开时,回退到本机原生命令(Windows PowerShell、macOS osascript、Linux notify-send 等)。backend 默认 auto,按平台串联 electron 与对应原生后端。
点击通知回到 DSH:渲染进程里的 window.focus() 在窗口最小化或被遮挡时可能不够,页面点击时会再调 POST /api/dsh-notice-v1/focus,由宿主执行恢复与抢前台。原生回退路径(如部分 WinRT toast、notify-send)往往没有点击回调;若要「点一下回到 DSH」,需保持窗口开着、让页面通道生效。
配置¶
两层配置:cordis.patch.yml 里的 config 为默认值,<DSH_HOME>/dsh-notice.json(设置页保存)覆盖前者。改设置页任意一项会立刻落盘,无需重启。
| 键 | 默认 | 说明 |
|---|---|---|
enabled |
true |
总开关 |
onCompleted |
true |
正常完成时提示 |
onError |
true |
出错时提示 |
onAborted |
false |
被中断时提示 |
includeSubagents |
false |
子任务也提示 |
minSeconds |
0 |
短于该秒数的一轮不提示 |
onlyWhenUnfocused |
true |
仅窗口不在前台时提示 |
silent |
false |
静音 |
snippetChars |
90 |
正文摘要字数,0 表示不带 |
backend |
auto |
auto / electron / powershell / osascript / notify-send / none |
preferClient |
true |
有页面连接时由页面弹通知 |
设置页还提供「发送诊断」:宿主身份、PowerShell 是否可用、最近一次子进程错误等,并支持「诊断一次」与 POST /api/dsh-notice-v1/test 发测试通知。
本机 HTTP 接口¶
接口仅接受本机回环地址请求:
GET /api/dsh-notice-v1/state— 配置、平台、后端就绪状态、最近发送与计数GET /api/dsh-notice-v1/events— SSE,页面收通知POST /api/dsh-notice-v1/config— 修改部分配置并落盘POST /api/dsh-notice-v1/focus— 将 DSH 窗口拉回前台POST /api/dsh-notice-v1/test— 立即发测试通知POST /api/dsh-notice-v1/probe— 仅走本机原生命令诊断(约 2.6 秒返回子进程结果)
例如在本机验证抢前台(端口以实际 DSH 为准):
curl -X POST http://127.0.0.1:<端口>/api/dsh-notice-v1/focus
安装与启用¶
README 未提供 dsh plugin add 一类一键命令,安装方式为手动接入 profile:
- 将插件目录放到
<DSH_HOME>/plugins/dsh-notice; - 在 profile 的
package.json增加"dsh-notice": "link:<绝对路径>"与dsh.profile.bundles条目; - 使用 DSH 运行时自带的 node + pnpm,在 profile 目录执行
install; - 重启 DSH 生效。
Linux 若需原生回退,需安装 libnotify:Debian/Ubuntu 使用 apt install libnotify-bin,Fedora 使用 dnf install libnotify,Arch 使用 pacman -S libnotify。macOS 自带 osascript,无需额外安装。
插件以当前 DSH 进程权限运行,安装前请自行查看仓库源码与 MIT 许可证,确认符合你的环境与安全策略。
典型用法与自检¶
日常使用:安装并启用后,保持桌面版窗口打开(推荐,以便页面通道与点击回前台);切到其他应用让 DSH 在后台跑长任务,轮次结束后应收到系统通知。可在设置页调整「仅后台提醒」「最短秒数」「完成/出错/中断」等开关;短轮次可用 minSeconds 过滤。
仓库提供的自检命令:
node --check lib/index.js
node --check lib/client.js
node test.mjs
适用场景与已知边界¶
适合:长时间单轮或多会话并行、需要离开屏幕又想知道「停手了没」的 DSH 用户;三平台桌面或混合 dsh web 场景,可按 backend / preferClient 调试。
边界(来自 README):
- 只覆盖「一轮结束」,权限确认、工具报错等中途事件不会单独通知。
- 窗口全关时只能靠原生命令;Linux 未装 libnotify 时可能退到
none,设置页显示「未就绪」。 - 长回答仅截
snippetChars字,摘要不换行。 - 发送失败不重试、不打断任务,仅记录原因供诊断查看。
结尾¶
dsh-notice 补的是 DSH 默认通知里缺失的「每轮任务结束」提醒,并通过页面通道与本机回退兼顾三平台;配合前台判断与按原因开关,减少无效打扰。更多信息见 SkillHub 目录页 与 GitHub 仓库。