Skip to content

Pulse 26.0.0

Choose a tag to compare

@github-actions github-actions released this 30 Sep 04:30
71671dd

26.0.0 — Step(一步)

这一版的目标是简化、聚焦:一行说清一个会话在做什么——上一步是什么、这一回合跑了多久——而且只凭
Agent 自己的 hook 事件。
Pulse 不再读任何厂商文件(没有 transcript),Codex 只装 hooks.json;
同时合并了行的几层中间值、一处计数,删掉详情页里给开发者看的块和一个门禁。源码从 15.2k 行降到 14.8k 行。
这是一个大版本:事件日志第 9 列不再是 transcript 路径(写空、永不读),「读 transcript 拿标题与最后的
话」这项能力删除了;25.0 写下的日志照常能读,但第 9 列被忽略。

新的

  • 上一步回来了。 会话簿按会话记下最后 5 个工具步骤(工具、目标、时间,来自 v5 tool 行)和本回合
    开始的时间,启动时从日志重放重建,不另存。运行中的行第二行安静地写「Bash · swift test · 12 分钟前」
    ——说的是已经发生的一步,从不写「正在」;时间位是本回合时长「14 分」。停滞的「为什么」点名上一步
    (「已经 23 分钟 没有新动静——上一步:Bash · swift test」);详情页列最近 5 步和「本回合」。
    Copilot 的 toolArgs 读出命令或路径,Pi 扩展转发工具名与一个参数。
  • 标题来自提示事件本身:提交提示的那条 hook 事件带着原文(剥掉厂商信封、脱敏、至多 200 字写进日志),
    第一条说了事的提示(至多 120 字)就是标题;回合以错误结束时,hook 报的错误写进详情页。
  • 为什么还是不显示 token。 步骤、标题、最后的话都来自 hook 事件;token、上下文、费用、模型与套餐
    不是「需要你吗」这个问题的答案,而且要拿到就得读各家的会话文件或用量接口——那是另一个产品。
    catalog_check 仍然拒绝任何读 usage / token_count / rate_limits / cost 的代码。
  • 「复制报告」多一节「sessions」:每个列出的会话一行——状态、事实来自 hook 还是只有进程、前往是否精确、
    进程是否在盯、最近事件多久前;不含路径、提示、会话 id 或项目。

删掉的

  • 读 transcript:标题与最后的话不再从厂商的会话文件里读,只来自事件;日志第 9 列写空、不读。
  • Codex 的 notify 与 config.toml:Codex 只装 ~/.codex/hooks.json,config.toml 一个字节都不动。
  • 详情页的「来源」一行与折叠的「Pulse 如何读取这个会话」:这些信息搬进了「复制报告」;对应文案
    (中英)一并删除。
  • appearance_check 门禁,以及 catalog_check 里的 README 矩阵核对与「按 Agent 的表又长出来」的
    正则——它们守的是文字,不是事实。名册、只经 libproc 的进程规则、隐私与不读 token、拦截类事件、
    hook 出处这些检查照旧。
  • 中间层与死代码:Explain 并进 TrayRowModel(行的每一句话是它上面的纯函数,详情页说同样的话;
    灯的一句规则在 TrayState);Census、sectionTotals 与托盘头部各自数一遍,合成投影里只数一次的
    TrayState.Counts;随 transcript 与 Codex notify 一起走的代码。

修复

  1. 安装失败的 Agent 不会再在设置卡里被当作「连接」重新提供(同样会失败),而是单独一条提示说明原因、给出「打开设置」;
  2. 设置卡只列这台 Mac 上装了的 Agent,不再因为一个进程在跑就列出;
  3. 找不到属于 Agent 的祖先进程时,pid 写空,不再误记成 hook 的直接父进程(通常是随 hook 退出的 sh -c);
  4. 事件日志读失败会重试,从 5 秒起翻倍、最长 1 分钟,只排一个定时器;读失败不清空已应用的状态;
  5. 行只在 0x0A 字节处断开:字段里的 U+2028、NEL 或单独的 \r 不再把一条记录切成两半;写入时
    NEL、U+2028、U+2029 与其他换行一样被压平成空格;
  6. 压缩日志时,正在追加的那一行一定保留——追加只在这一行真的进了文件时才算成功;
  7. 没有会话 id 的忽略(done)按 Agent + 目录认领,不再清掉同一 Agent 所有无会话的条目;
  8. docs/samples 里的示例桥接脚本改为调用 pulse-hook,不再自己拼日志行;
  9. 被压缩重写的日志按位置认出已应用的行,同一文本写了两次就应用两次,不再只按文本去重;
  10. 语言选项里的「跟随系统」在中文界面下不再写成英文 System;
  11. 改一项设置只执行它需要的副作用(例如改语言只重注册横幅按钮并重新投影,不再重装快捷键、重设登录项、重启更新检查)。

已知限制 / 注意

  • 这一版没有在真机上验证过。 代码只在 CI(macos-26)上编译和测试;上一步、本回合时长、设置卡、
    横幅撤回与补发、落点,都没有在一台真的 Mac 上和真的 Agent 一起跑过。
  • Pi 与 OpenCode 没有提示事件,所以没有标题,主行退回最后的话或项目。
  • Cursor 与 OpenCode 的 hook 不报工具名,所以没有上一步,它们的行始终一行、不会停滞变橙。
  • 事件日志现在存提示原文(脱敏、至多 200 字),文件仍是 0600、只在本机。
  • 从 25.0 升级:25.0 写进 ~/.codex/config.toml 的 notify 一行,26.0 不再管理——卸载 hook 也不会
    还原它。需要的话,升级前在 25.0 里先卸载 Codex 的 hook,或手动删掉那一行。
  • 没有 Apple Developer 账号时,发布的包是 preview、ad-hoc 签名、未公证;第一次打开要按住 Control
    点按 Pulse.app →「打开」。

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

dadcb9dcda184f9745aff64db4532768f9f8326e4751bf8f9f8302e25e78e7d7  zig-out/package/pulse-26.0.0-macos-PulseBar.dmg