前言¶
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。