hennysky/dsh-notch

dsh-notch

DeepSeek Harness 的 macOS 原生伴侣:刘海看余额,任务完成 / 等你处理时发系统通知(配套 DSH 插件)

未分類deepseek-harnessmacosmenu-bar

DSHNotch

DeepSeek Harness 的 macOS 原生伴侣:刘海看余额,任务完成 / 等你处理时发系统通知。

English · 下载 · 工程笔记 · DSH 通知协议

余额就在刘海里 · 没有刘海的 Mac 也能用 · 通知可以分别关 · · 点刘海展开卡片 · 自动用菜单栏形态 · 任务完成 / 需要处理,两个开关

三件事:

  • 余额:点刘海(或菜单栏)就能看到 DeepSeek Harness 余额;跌破阈值、单次消耗过大时主动提醒。
  • DSH 通知:任务完成、失败、或 agent 停下来等你审批/回答时发 macOS 系统通知。点通知切回 DSH;

横幅会消失,但菜单栏图标上的红点不会——直到你点开卡片。

  • 跟着 DSH 启动:装一个配套插件,DSH 启动时自动拉起,并负责把会话事件转成通知。
状态:v1.6.9(Windows 1.2.3 / 插件 1.6.1)· MIT · macOS 14+ · Apple Silicon | 14 项零人工自检、插件测试与真实通知投递均已实测

这个项目解决什么问题

DSH 的余额只在应用界面里看得到。挂着长任务的时候,你不点开就不知道额度掉了多少, 往往等发现时已经快用完了。长任务还有另一个问题:任务跑完了、或 agent 停下来等你审批, 人不在窗口前就完全不知道——DSH 桌面端没有任何系统通知。

DSHNotch 解决这两件事:把余额搬到刘海/菜单栏,并在额度异常、任务完成、需要你处理时 主动提醒。

功能边界刻意守住:只读余额、只转发 DSH 的事件。不代发消息、不碰你的账号、不做充值流程。

安装

要求

· 机型 · Apple Silicon 的 Mac(带刘海的 MacBook 全部是 Apple Silicon) 系统 · macOS 14.0 或更高 前置 · 已安装并登录 DeepSeek Harness——余额数据来自它的登录凭据

没有装 DSH 的话这个工具对你没用,它会显示下面这个引导页而不是余额。
应用读的是你自己机器上的凭据,不会看到别人的数据。

下载

GitHub Releases · Gitee 发行版(国内更快;资产目前更新到 v1.7.5,通知图标等最新修复请用 GitHub)

同一版本的安装包在两个平台逐字节相同;Gitee 资产目前更新到 v1.7.5。

安装(一条命令)

# GitHub
curl -fL -o /tmp/DSHNotch.zip \
  https://github.com/hennysky/dsh-notch/releases/download/v1.7.8/DSHNotch-1.6.9.zip \
  && unzip -q -o /tmp/DSHNotch.zip -d /Applications \
  && xattr -dr com.apple.quarantine /Applications/DSHNotch.app \
  && open /Applications/DSHNotch.app
# Gitee
curl -fL -o /tmp/DSHNotch.zip \
  https://gitee.com/hennysky/dsh-notch/releases/download/v1.7.5/DSHNotch-1.6.5.zip \
  && unzip -q -o /tmp/DSHNotch.zip -d /Applications \
  && xattr -dr com.apple.quarantine /Applications/DSHNotch.app \
  && open /Applications/DSHNotch.app

手动安装

  1. 下载 DSHNotch-1.6.9.zip
  2. 解压,把 DSHNotch.app 拖进「应用程序」
  3. 首次打开必须右键 → 打开(原因见下)

为什么首次要「右键 → 打开」

应用没有 Apple 开发者签名与公证(需要 99 美元/年)。macOS 的 Gatekeeper 会拦下未签名的应用, 双击只会看到「无法打开」。「右键 → 打开」是一次性的放行,之后不再提示。

不想用右键,也可以去掉隔离标记:

xattr -dr com.apple.quarantine /Applications/DSHNotch.app

这行命令做的事情就是删掉「这个文件来自网络」的标记。应用本身不联网下载任何东西, 只读取本机 DSH 的凭据、请求 DeepSeek 平台的余额接口。

使用

启动

把 DSHNotch.app 拖进「应用程序」,双击即可(首次需要右键 → 打开)。

或者让它跟着 DSH 一起启动 —— 装一个配套的 DSH 插件即可,见下面的「作为 DSH 插件使用」。

启动之后菜单栏会出现一个卡片图标——应用不占 Dock,刘海形态下屏幕上也不显示东西, 这个图标是用来确认「它在运行」的:

操作 · 效果 左键 · 展开余额卡片 右键 · 菜单:显示卡片 / 立即刷新 / 打开充值页 / 设置 / 开机自启 / 退出

不想看到它?设置 → 通用 → 菜单栏图标,可以关掉。 (菜单栏形态下不需要它,那个图标本身就是入口。)

不想每次手动启动:设置 → 通用 → 打开「开机自启」。已实测可用。

第一次打开:需要先连上 DSH

余额来自 DSH 保存的登录凭据。如果这台机器上还没有(没装 DSH、或装了没登录), 卡片会直接告诉你该做什么:

情况 · 卡片显示 找不到凭据文件 · 「还没有找到 DSH 的登录凭据」+ 引导去安装并登录 有凭据但没登录记录 · 「DSH 还没有登录」+ 引导去登录 其它错误(网络、限流) · 正常的错误行——不会被误判成引导态

登录完点「重新检查」即可,不用重启应用。

两种形态,自动选

不需要在安装时选择,也不需要你知道自己有没有刘海。 应用会在运行时判断, 并在显示器变化时自动重判:

场景 · 形态 MacBook 有刘海 · 刘海形态:点刘海展开卡片 Mac mini / iMac / 纯外接屏 · 菜单栏形态:菜单栏显示金额,点开是卡片 MacBook 合盖接外屏 · 自动切到菜单栏形态,功能不丢

想固定用某一种,可以在设置里指定:自动 / 仅刘海 / 仅菜单栏。

卡片里有什么

● DeepSeek Harness                    ⚙  ↻
¥20.75
充值钱包余额
────────────────────────────────
赠送钱包                        ¥0.00
累计消费                      ¥555.11
今日消耗                        ¥2.63
────────────────────────────────
更新于 15:23:57              [ 充值 ↗ ]
  • 充值 ↗ 用系统浏览器打开平台充值页,沿用那边的登录态,不带任何 token
  • ↻ 手动刷新,立即生效
  • ⚙ 进入设置

什么时候刷新

触发 · 说明 点开卡片 / 菜单栏 · 立刻刷新,你看到的就是当下余额 后台轮询 · 每 5 分钟一次 手动点 ↻ · 立即刷新,不受限制

点开时的刷新有 30 秒下限(刚查过就不重复查)——否则反复点开会触发平台的频率限制。

额度提醒

余额藏在刘海后面,不点开就不知道掉了多少,所以有两条主动提醒规则:

规则 · 默认 · 行为 余额低于 · ¥10 · 跌破那一刻提醒一次 单次消耗超过 · ¥2 · 相邻两次查询之间掉得太多就提醒

  • 阈值设为 0 即关闭该规则
  • 两条同时命中时,余额告急优先
  • 刘海形态:卡片自动弹出来,停留几秒后自己收回
  • 菜单栏形态:菜单栏标题临时变色(¥5.74 → ⚠ ¥5.74),不打断你正在做的事
  • 你一旦自己点击,提醒立刻交还给你
为什么「跌破」只提醒一次?因为后台每 5 分钟查一次,按「处于低位」判定会变成每 5 分钟响一次。
充回阈值之上后会重新武装,下次再跌破才会再提醒。

DSH 通知(v1.4)

DSH 桌面端本身没有任何系统通知:任务跑完了、或 agent 停下来等你审批,人不在窗口前就 完全不知道。装上配套插件(plugin/,v1.6.1+)后,这些事件由 DSHNotch 变成 macOS 通知:

什么时候 · 通知 DSH 跑完一轮 · 「任务完成」,正文是会话名 + 用时 任务失败 / 被阻塞 / 达到长度上限 · 对应的标题,失败时附错误信息 agent 等你审批 · 「需要你确认」+ 工具名与原因 agent 提问 · 「需要你回答」+ 问题题干

  • 通知横幅左侧图标是 DeepSeek 鲸鱼(1.6.9+;升级后首次启动会重新请求一次通知权限)
  • 点通知直接切回 DeepSeek Harness(应用没在跑就先打开它)
  • 横幅会消失,红点不会:有新通知时菜单栏图标右上角出现红点(菜单栏形态是金额后面的

●),直到你点开卡片(或点开那条通知)才清除——不在屏幕前也不会永久错过

  • 第一次会问一次系统授权,之后可在「系统设置 → 通知 → DSH Notch」里关掉;

也可以在卡片设置 → 通知页单独关掉「任务完成通知」/「需要处理通知」

  • 用户自己按停止的轮次默认不通知(你本来就知道);子 agent 的轮次不单独通知
  • 通知由 DSHNotch 用自己的身份发出,不经过「脚本编辑器」这类替身

链路:插件在 DSH 侧监听会话事件 → POST 127.0.0.1:47810/notify → DSHNotch 用 UNUserNotificationCenter 投递。端口只绑回环;没装插件、或插件没加载时,DSHNotch 的 其余功能完全不受影响。协议与设计见 docs/dsh-notifications.md。

通知没出来时按顺序排查:

curl -s http://127.0.0.1:47810/health
# {"app":"DSHNotch","authorization":"authorized","ok":true,"version":"1.4"}

grep 通知 "$(node -e 'process.stdout.write(require("os").tmpdir())')/dsh-notch-plugin.log"

现象 · 原因 curl 连不上 · DSHNotch 没在跑(或端口被另一个实例占用) authorization 不是 authorized · 系统通知权限没开 日志里没有「已注册 3 个监听」 · 插件还是旧版:重启一次 DSH 加载新代码 日志里 HTTP 200 … shown:false · 卡片设置里对应的开关被关了

Token 用量日历

卡片标题栏的日历按钮可以切到「用量日历」:日历页会把同一张卡片放大到 380×390, 展示近 3 个月的每日 token 用量或金额(token 紫色、金额绿色),鼠标悬停色块查看当天具体数值。

  • 数据由插件按天聚合会话日志,首次回填需要几十秒,之后增量更新
  • 只读本地 ~/.dsh/notch/token-activity.json;口径见 docs/token-activity.md

当前会话花费

装插件(1.6.1+)后,卡片会多一块「当前会话」:你正在看的那个 DSH 会话用了多少 token、 按官方价目估算花了多少钱(如 ≈¥0.42,标注预估、以平台账单为准)。

  • token 来自 DSH 会话日志,是精确值;金额是按官方高峰/空闲单价折算的估算
  • 只读本地 ~/.dsh/notch/session-cost.json,不联网、不记录对话内容
  • 数据来源与计价规则见 docs/session-cost.md

设置

卡片右上角的滑杆图标进入设置,分四页:

页 · 内容 提醒 · 余额低于、单次消耗、弹出停留时长 动画 · 展开/收起动画时长与缓动曲线 通用 · 呈现形态、开机自启 通知 · 任务完成通知、需要处理通知(DSH 插件发来的系统通知)