DSH Status Notifier:把智能体状态放到 macOS 菜单栏

前言

DSH 的插件体系里,很多交互发生在 agent 执行过程中:权限审批、任务运行、任务结束。这些状态默认只在 Harness 窗口里能看到,如果你切到别的应用,只能靠窗口标题或事后看日志。DSH Status Notifier 就是为这个问题做一个外显层:它把智能体的状态渲染到 macOS 菜单栏,并在窗口不可见时发系统通知。

这是什么

DSH Status Notifier 是一个 DSH bundle,由 Carlos5986515 维护,仓库在 https://github.com/Carlos5986515/dsh-status-notifier,分类为客户端插件,GitHub 1 星。它的定位很清楚:把 agent 的实时状态放进菜单栏(依赖 SwiftBar),而不是做一个新面板。

主成分是两个半:Host 半(index.js)在 DSH Host 进程里跑,负责观察持久化事件并渲染 SwiftBar 脚本;Client 半(client.js)在 Web GUI 里跑,负责在页面离开时发通知。

核心功能

菜单栏图标按状态着色,含义如下:

菜单栏显示 含义
⚠ 1(橙色) 有一个权限请求等待你批准
● 1(蓝色) 有一个任务在运行
✓ 1(绿色) 有一个任务在 30 分钟内结束
○ 空闲(灰色) 空闲

点击菜单栏项会弹出下拉列表,列出各状态下的 session;点击任意一行,或点击「打开 DeepSeek Harness」行,都会把 Harness 窗口唤回前台。菜单栏状态每 5 秒刷新一次。

通知有两条路径,且不会重复触发:

  • 页面在但窗口隐藏或失焦时,由 Client 半触发浏览器通知(基于框架自身的 uiSession.sessionStatus,取值 running / pendingInteraction / completionUnread)。
  • 窗口已关闭但 Host 仍在运行时,由 Host 半通过 osascript 触发 macOS 系统通知。Host 只在没有页面连接时才发通知,所以两条路径不会双通知。

Host 半观察的是持久化、与顺序无关的事件信号:session/event 里的 approval/asked 与 approval/decided(Approval 服务追加的审批审计对),以及 agent/status 的 running↔idle 转换。它渲染出 dsh-status.5s.sh 及其输出到插件目录;渲染出来的状态文件放在插件目录之外,避免 SwiftBar 把它们误认成插件。

安装与启用

前提条件:macOS,且已安装 SwiftBar;DSH 支持 plugin bundle。先装 SwiftBar:

brew install --cask swiftbar

然后按下面步骤安装 bundle。

1、把仓库 clone 到任意位置,或把目录复制到你的 workspace。

2、在 DSH 里安装这个 bundle。两种方式任选:在 Plugin Manager 中选 install local bundle;或让 agent 执行 plugin_manager 的 install_bundle,并把这个目录作为目标。

3、让 SwiftBar 盯住插件目录。二选一:

  • 创建 ~/.swiftbar,并把 SwiftBar 的 Preferences → General → Plugin Folder 指到它;
  • 或者保留 SwiftBar 自己的目录,把它的路径写进 ~/.dsh/swiftbar-dir.txt 的第一行。

4、重启 DeepSeek Harness,让 Host 半加载。几秒内菜单栏项就会出现。

注意:官方给出的是 clone 后本地安装,不要凭插件名去拼 dsh plugin add github:owner/repo 之类的命令。

配置

改变体行为靠这两个变量或文件:

变量 / 文件 作用
DSH_SWIFTBAR_DIR SwiftBar 插件目录(优先级最高)
~/.dsh/swiftbar-dir.txt 第一行为插件目录路径
DSH_SWIFTBAR_STATE_DIR 渲染后状态文件的存放位置,默认 ~/.dsh/swiftbar-state

解析顺序:DSH_SWIFTBAR_DIR → ~/.dsh/swiftbar-dir.txt → ~/.swiftbar。状态目录在插件加载时解析,改完需要重启 DSH 才生效。

本地测试渲染逻辑

仓库里的 test-render.mjs 会用桩化的 Cordis context 跑一遍 Host 半,模拟 approval / running / idle 事件,并检查渲染出的 SwiftBar 输出与旧文件清理:

node test-render.mjs

改动渲染逻辑时可以先跑它。

适用场景与注意

适合 macOS 上用 DSH、希望长任务跑起来能看到状态、又不想频繁切回 Harness 窗口的人。

几个实际限制要提前知道:

  • 菜单栏项本质上是一个 SwiftBar 脚本,SwiftBar 没在跑,菜单栏项就不会出现。
  • 点击某行只是把 Harness 窗口唤回前台,还不能直接深链进某个具体 session。
  • 插件以当前 DSH 进程的权限运行,并在你的本地环境读取和写入上述目录。安装前先读一遍源码和 LICENSE(MIT 许可)。

结尾

DSH Status Notifier 的价值不复杂:给 agent 状态一个不需要切窗口就能看到的出口,补上 DSH 窗口在后台时的状态盲区。社区目录页在 https://www.skillhub.cn/plugins/Carlos5986515/dsh-status-notifier,源码与 README 在 https://github.com/Carlos5986515/dsh-status-notifier。

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

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

小夜