dsh-better-push:为 DeepSeek Harness 提供 macOS 原生通知

前言

用 DeepSeek Harness(DSH)跑长回合、后台任务或子智能体时,窗口不在前台就很容易被漏掉:回合结束、工具等待批准、智能体提问、后台命令收尾,都不会主动提醒你。系统自带的浏览器通知往往和应用脱节,点击也难以回到对应 Session。下面介绍社区插件 dsh-better-push:在 macOS 上把上述事件转成以 DeepSeek Harness 应用名和图标展示的系统横幅,点击即可聚焦到触发通知的 Session。

这是什么

dsh-better-push(npm 包名 @ceasarxuu/dsh-better-push,当前版本 0.1.0,MIT 许可证)由维护者 ceasarXuu 发布,分类属于 DSH 客户端 类插件。README 明确标注为第三方插件,不是 DeepSeek / DeepSeek Harness 官方组件。

定位一句话:在 macOS 上为 DSH 提供原生通知,覆盖回合完成、待批准工具、提问、错误、后台任务、子智能体与 workflow 等触发点,并支持点击横幅打开对应 Session。

运行环境要求 DeepSeek Harness 0.2.1-rc.3 及以上、低于 0.3.0,且需 macOS 上的桌面或 Web 界面;插件未发布到 npm,安装来源以 GitHub 仓库或仓库内 market 索引为准。

会通知哪些事件

插件按事件类型分别开关,默认大多开启。下表摘自 README,便于对照配置项名称。

触发条件 通知内容概要 默认
回合结束 Session 名、一行回复预览、耗时 开
工具等待批准 Session 名 + 工具名;批准后横幅自行关闭 开
智能体提问 Session 名 + 问题正文 开
回合失败 / 中断 / 上下文溢出 提供商或回合错误信息 开
后台任务结束 任务标签 + 状态(含 run_in_background、promoted 命令) 开
子智能体回合结束 父对话名 + preset;点击打开父 Session 关
Workflow 运行结束 Workflow 名 + 停止原因 开
测试通知 设置页或 POST /plugin/better-push/test —

前台 Bash 调用虽在内部也是 job,但插件读取 job feed 的 awaited 标志,只有真正留在后台跑完的任务才会推送,避免你在终端前盯着时仍被刷屏。

核心机制(简要)

包内分为两半,同一安装包一并加载:

  1. Host 半(index.js) 监听各 live Session 的 session/event(如 turn/end、approval/asked 等)、user-questions/request 瀑布流,以及 jobs feed;做分类、去重、静默时段过滤,并在 /plugin/better-push 提供 GET /poll、GET /state、GET /health、POST /test 等 HTTP 接口。
  2. Browser 半(client.js) 约每秒轮询上述路由,在渲染进程里发出 UNUserNotification,署名 DeepSeek Harness;桌面端点击后调用 uiWorkspace.openSession(sessionId)。无窗口附着时,Host 可回退到 osascript display notification(归因与点击行为与渲染器路径不同,见后文限制)。

采用轮询而非 WebSocket,是因为桌面渲染器运行在 dsh-app://app,同源 fetch 由 Electron 壳转发到 Host;每秒一次 loopback 请求同时充当「窗口是否在线」的心跳。

安装与启用

安装前请先退出 DSH 应用(运行中 profile 会被锁定)。安装完成后需 重启应用一次。配置写在 profile 的 cordis.patch.yml 中,行 id 为 better-push。

仓库 README 给出三种方式,任选其一。

1. 插件市场发现(推荐,版本 pinned 到具体 commit)

在 Settings → Plugins → Discover → market sources 添加索引 URL(只需添加一次),再从列表安装 “Better Push — macOS notifications”:

https://raw.githubusercontent.com/ceasarXuu/dsh-better-push/main/market/index.json

2. Plugin Manager → Add

可粘贴仓库 URL、pnpm 简写,或 release 打包的 tgz:

https://github.com/ceasarXuu/dsh-better-push
github:ceasarXuu/dsh-better-push
https://github.com/ceasarXuu/dsh-better-push/releases/download/v0.1.0/ceasarxuu-dsh-better-push-0.1.0.tgz

3. CLI

先退出应用,再执行:

dsh plugin --profile desktop add github:ceasarXuu/dsh-better-push
# 或本地目录:
dsh plugin --profile desktop add /absolute/path/to/dsh-better-push

更新版本时用同样方式覆盖安装;仅 market 索引会把 git 源钉死在 commit 上,github: 安装会跟踪默认分支 HEAD。

设置项

在 Settings → 通知 / Notifications(侧栏独立一节,与 General、Plugins 并列;同一表单也出现在 Settings → Plugins 对应插件行)中编辑。各开关独立,修改后立即生效:设置页写入 profile patch,加载器把 volatile 字段提交到运行中的插件,浏览器半在下次轮询时采用新策略。

键 默认值 含义
enabled true 系统通知总开关
notifyInForeground true 窗口聚焦时也通知;关则仅后台通知
sound true 每条通知播放声音
turnEnd true 回合结束
approvals true 工具待批准
questions true 智能体提问
errors true 失败 / 中断 / 上下文溢出
jobs true 后台任务结束
subagents false 子智能体 / Agent Teams 队友回合结束
workflows true Workflow 运行结束
preview true 回合结束正文里放简短助手回复预览
minTurnSeconds 0 短于该秒数的回合结束不通知(0 表示全部通知)
quietHours "" 本地静默窗口 HH:MM-HH:MM,可跨午夜
fallbackWhenNoClient true 无窗口附着时用 osascript
fallbackSoundName Glass 回退路径使用的系统声音名

若团队里子智能体频繁收尾,保持 subagents 默认关闭可避免通知轰炸;需要时再单独打开。

典型用法与自检

从设置页发测试通知,或使用 Host 提供的测试接口(端口以本机 DSH 为准,README 示例为 61670):

curl -s -X POST http://127.0.0.1:61670/plugin/better-push/test \
  -H 'content-type: application/json' -d '{"body":"hello"}'

查看插件当前状态:

curl -s http://127.0.0.1:61670/plugin/better-push/state | jq

clients: 0 表示窗口已关,走 osascript 回退路径;clientIds 以 denied 结尾表示渲染器无法通知,Host 已对该客户端回退。

日常使用时,离开 DSH 窗口跑长任务即可依赖默认策略:后台任务结束、待批准、提问等会推横幅;回到 Mac 点击通知即可打开对应 Session。若只希望「人不在窗口前才响」,将 notifyInForeground 设为 false。

适用场景与注意

适合谁:在 macOS 上用 DSH 桌面或 Web 面、经常切到其他应用或合盖等待 agent 收尾的开发者。不适合在非 macOS 环境指望同等体验——README 写明当前 仅 macOS;渲染器半在 Windows/Linux 理论上可工作,但回退逻辑与文案针对 macOS,未在其他系统测试。

权限与安全:插件以当前 DSH 进程权限运行,会监听 Session 与 job 事件并在本机 loopback 上提供 HTTP 面。安装前请自行查看 GitHub 仓库 源码与 MIT 许可证,确认符合你的安全策略。

已知限制(摘自 README):渲染器路径无法自定义通知声音(仅 silent)、无副标题与 action 按钮;暂无 Dock 角标、通知历史页、按 Session 静音。点击聚焦为尽力而为。关闭 DSH 窗口后若仍要收到提醒,需保持 fallbackWhenNoClient 为 true,但回退通知的点击无法打开 DSH;若宁可错过也不要 Script Editor 归因,可关闭该选项。

DSH 生态强调「一切皆插件」;社区目录 skillhub.cn 上的插件页 与 GitHub 均为独立分发渠道,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-better-push 把 DSH 里「该你回来处理」的时刻接到 macOS 系统通知上,并按事件类型细粒度开关,减少漏批、漏答与漏看后台结果。需要安装说明与完整配置表时,以仓库 README 为准:

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

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

小夜