dsh-ping-macos: DSH reply completion and pending confirmation notifications on macOS

前言

在 DeepSeek Harness(DSH)里跑 agent 时,任务往往在后台继续执行。窗口切到其他应用后,很难凭肉眼判断「回复是否已经结束」或「是否出现了需要你审批、选方案、回答提问的 pending 交互」。常见做法是反复切回 DSH 看会话列表,或自己写脚本轮询状态——既打断工作,又和 Harness 已有的事件模型脱节。

下面介绍社区插件 dsh-ping-macos(维护者 adamxu-git):在 macOS 上利用系统通知和标准提示音(Glass),在回复跑完或需要你介入时提醒;点击通知抬起窗口并切到对应会话。它不请求网络、不做 Dock 角标或菜单栏图标,定位是「最小可用」的通知层。

这是什么

dsh-ping-macos 是 DSH 的 client + 宿主半插件:lib/client.js 在浏览器侧订阅会话与 UI 状态;lib/index.js 在宿主侧注册 POST /__dsh-ping-macos/sound,用 afplay 播放 /System/Library/Sounds/Glass.aiff。配置保存在本机 localStorage,不联网。

npm 包名与仓库一致,当前资料中的版本为 0.2.0(MIT)。package.json 标明与 DSH 0.2.1-rc.2 兼容;行为依赖 sessions.list、uiSession.sessionStatus 等 0.2.x 快照形状,宿主 API 变更时需插件跟进。

核心功能

插件监听两类事件(详见仓库 README 行为表):

事件 触发条件 通知表现
回复完成 sessions.list 中某会话 running: true → false 「回复完成 · 会话名」,普通横幅
需要你确认 uiSession.sessionStatus 出现新的 pendingInteraction 「需要你确认 · 审批/方案/提问」,常驻提醒

其他已核实行为:

  • 子代理会话(origin: 'subagent' 或带 parentId)默认静音。
  • 前台策略:取决于「设置 → 通知提醒」;默认「回复完成」在窗口可见时不弹、「需要你确认」默认仍弹。
  • 合并完成:同一次列表更新里多个 running → false 合并为一条「N 个会话完成」;此类汇总通知点击只抬窗,不切到单一会话。
  • 点击通知:经隐藏 iframe 导航 dsh://open 抬起 Electron 窗口,并调用 sessions.open(id)(0.1.5)或 uiWorkspace.openSession(id)(0.1.6+);两者皆无时仅抬窗。
  • 提示音:非 macOS 或宿主无 webServer 时静默,通知仍可显示。

设置页路径:设置 → 通知提醒——总开关、回复完成策略(仅离开 / 总是 / 关闭)、待处理策略、提示音开关及测试按钮。系统通知权限需在「系统设置 → 通知 → DeepSeek Harness」中允许。

安装与启用

DSH Desktop:插件 → 添加插件 → 搜索 dsh-ping-macos → 安装 → Cmd+Q 完全退出后再打开。

Web 配置:

dsh plugin --profile web add dsh-ping-macos

装完后重启对应的 dsh web,并对页面做硬刷新。

安装前建议自行查看 GitHub 仓库 源码与 MIT 许可证;插件以当前 DSH 进程/页面权限运行,仅在本机读写 localStorage 与调用宿主 sound 路由,无对外网络请求。

典型用法与验证

重启后插件不再弹欢迎通知。可按 README 建议验证:

  1. 将窗口切到其他应用,让 agent 跑完一个任务,结束时应出现「回复完成」类通知。
  2. 在 DevTools 控制台:
__dshPing.state()            // 绑定状态、permission、记账条数、通知句柄数、定时器状态
__dshPing.test('done')       // 立即弹一条完成通知
__dshPing.test('attention')  // 立即弹一条待处理通知

点通知应抬起 DSH 并切换到对应会话(单会话完成通知);汇总完成通知仅抬窗。

卸载示例(资料中的桌面 profile 路径,操作前请自行备份):

cp ~/.dsh/profiles/desktop/cordis.patch.yml.bak-20261029-203052 \
   ~/.dsh/profiles/desktop/cordis.patch.yml
rm -rf ~/.dsh/profiles/desktop/node_modules/dsh-ping-macos

然后重启 DSH Desktop。

适用场景与注意

适合:在 macOS 上使用 DSH Desktop 或 Web,希望 agent 在后台跑完或出现待确认交互时能被动提醒,且接受「仅系统横幅 + Glass 提示音、无 Dock/菜单栏角标」的方案。

限制(仓库「已知限制」摘要):

  • 页面进程仍存活时才能提醒;完全退出 App 后无通知。
  • 多开 DSH 页面/窗口时,每个页面各跑一份 client,会各自提醒,设置也分属各页 localStorage。
  • 桌面端通知无审批按钮(Service Worker 在 dsh-app:// 下不可用)。
  • 同一会话连续两次完成会各弹一条(按 tag 去重,不合并同会话的多次完成)。

DSH 生态强调「一切皆插件」;SkillHub 目录页 为社区收录,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-ping-macos 把 Harness 里「会话结束」和「待你确认」两类状态变化,映射成 macOS 原生通知与可选提示音,并用 dsh://open 把点击动作接回当前会话。若你需要在 macOS 上少切几次窗口、又不愿引入网络或角标方案,可以从目录或 GitHub 安装后,用 __dshPing.test 与真实任务各验一遍。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye