Skip to content

Pulse 23.0.0

Choose a tag to compare

@github-actions github-actions released this 29 Sep 16:24
ee15a55

23.0.0 — Essence(本质)

这一版继续做减法,并且把剩下的部分按「一盏灯」重新搭了一遍。不兼容任何旧版本:旧的设置、历史文件和
协议写法都不迁移,直接丢弃。源码从约 34.7k 行降到 25.5k 行,测试从 18k 行降到 12.7k 行。

删掉的

  • Respond 删除。 Pulse 不再替你回答任何权限请求,hook 也不再等待裁决:它写一行事件就退出。
    回答永远在 Agent 自己的提示里给出。
  • Python hooks 整套删除,只保留原生 pulse-hook。hooks 安装器仍只装 Claude 和 Codex。
  • 更新只检查、不安装。 有新版本时打开 Release 页;下载、校验、原地安装、回滚、重复安装检测、
    崩溃恢复提示全部删除 —— 没有公证版本,这些路径从来没有被用户走到过。
  • 「稍后」删除。 只剩两个动词:忽略这条等待,静音这个 Agent。
  • 空闲通知、实时更新开关、按 Agent 的应用数据授权删除(合成一个开关);Attention 桥工具包移出
    app,只在文档里给命令;多机残留(PULSE_HOST、主机列、v1 协议)删除,attention 行必须是 8 列。
  • 离开期间的变化提示、等待历史、会话摘要(SessionDigest) 删除。
  • 格式未核实的 11 个 Agent 不再推断「需要你」(Cursor、Cursor Agent、Amp、Amazon Q、Cascade、
    Windsurf、Augment、Zed、Kiro、Droid、Command Code):它们只显示在跑。等格式核实后再逐个打开。

重新搭的

  • 一个事件簿。 session-log.json 取代原来的 ledger、hook 历史、时间线和忽略列表四份文件;
    时间线、通知去向、活动记录都是它的视图。安静的扫描不写盘;重启后正确闭合会话,不把停机时间算进去。
  • 状态分三块。 ScanEngine 负责扫描,WaitNotifier 负责通知,界面只观察 17 个属性的
    StatusStore。设置是一个 settings.json,9 项。
  • 会话身份稳定。 一行的 key 从出现到消失不再变化(RowIdentity);只看到进程的行在会话出现后
    直接消失,不再「升级」。所有 remap 代码删除。
  • 一个解释。 Explain 给每一行一句「在做什么」和一句「为什么是这个状态」,托盘行、详情页、
    菜单栏提示都说同一句话。原来的 RowNarrator、行卡片、Why 卡、诊断卡等 8 个模块删除。

界面与交互

  • 灯按「需要什么」分形状:实心 = 需要你,圆环 = 在跑,空心灰 = 轮到你 / 最近,虚线 = 只看到进程。
    橙色只留给停滞和出错;只看到进程不再变橙。菜单栏和托盘用同一套图形。
  • 菜单栏只在需要你时出字,例如「2 · 4 分钟」;提示框只有一句:灯为什么是这个颜色。
  • 头部一行说清「为什么」和「多新」:「2 个需要你 · 3 个运行中 · 3 秒前更新」;扫描停了会变橙说出来。
    刷新按钮删除(⌘R)。同一时间最多一条提示,每条一个动作。
  • 一行只有一行:灯、Agent、项目、正在做的事、时长;只有等待(问题)和停滞/出错(原因)才有第二行。
    去掉整行底色、「新」蓝点和重复的时间。托盘打开时行顺序冻结,不会在鼠标下移动。
  • 键盘:打字就是过滤(有可见的输入框,⌫ 只删字);↑↓ 选择,↩ 前往,→ 详情,⌘D 忽略,⌘M 静音,
    Esc 逐层退出且在任何状态下都有效。全局热键永远是开关托盘。点横幅只聚焦终端。
  • 详情页每件事只说一次:问题和动作、原因、带刻度的 60 分钟时间条、最后的消息、计划、错误、
    通知去向、几项事实;读取方式默认折叠。
  • 「健康」改为「诊断」窗口:先列问题,再每个 Agent 一行,活动记录单独一页并带日期,一键复制报告。
  • 设置一页 7 组;文案一个概念一个词(需要你 / 运行中 / 轮到你 / 最近 / 仅进程 / 停滞)。

修复

  • 在终端里批准了权限请求后,红灯不再一直亮到这一轮结束。
  • 同一会话的第二个请求会重新通知;忽略之后的新请求不再被当成已忽略。
  • 打字过滤不会再误触忽略或静音。
  • 没有会话 id 的 hook 等待能正确忽略,也不会清掉同一 Agent 其他会话的等待。
  • 已经解决的等待不再弹横幅,积压的通知队列不再无限增长;点旧横幅不会记到新的等待上。
  • 等待期间每轮扫描不再重绘界面;只看到进程和「轮到你」的会话不再拖住高频扫描。
  • hook 不会因为 stdin 没关而卡住;空事件类型不再变成红灯;一个坏字节不再让所有等待消失。
  • hooks 自检不再和扫描抢同一个文件路径。
  • 已完成但进程还在的会话显示灰色,不再亮绿。
  • 打开托盘时头部不再闪橙;提示出现或消失时面板会重新贴合;超过当天的时间带日期。

工程

  • gate 合并:四个目录检查合成一个 catalog_check.py;删除只守护已删代码的检查。
  • 测试按组件重组:47 个按版本命名的文件合成 13 个(核心、采集、转录、厂商格式、attention、构建、
    解释、事件簿、通知、托盘、设置、诊断、引擎)。

诚实说明

  • 开发环境没有 Mac 和 Swift 编译器:所有代码只在 CI(macos-26)上编译和测试过,新界面没有在真机上看过。
  • 「批准后红灯熄灭」依赖同一会话随后出现的活动事件;如果 Agent 并行调用工具,灯可能提前熄灭。
  • attention 协议有一处行为变化:没有会话 id 的 done 只清掉没有会话 id 的等待。依赖旧行为的第三方
    桥接需要带上会话 id。
  • 格式未核实的 11 个 Agent 在这一版不会变红,这是有意的取舍。

Gatekeeper

This build is ad-hoc / unnotarized (no Apple Developer ID in CI).
About stays preview — it is not Gatekeeper-ready and must not be
described as notarized stable. First open: Control-click → Open, or
xattr -dr com.apple.quarantine /Applications/Pulse.app.

Download verification

67c373bd53193c8ade7e483595c1e7b5e96dd00b456a03bc5eed37b3ae8a1358  zig-out/package/pulse-23.0.0-macos-PulseBar.dmg