SuperAPI AI 工具集

watch

智能体与模型

查看项目

更新于 10-26 18:53

技能介绍

用途

watch 用于监督并行运行的会话与智能体(并行舰队/车队)。典型触发场景包括“观察舰队”“现在有什么需要关注”“对分子和 PR 运行监控循环”。该技能本身只承载策略:何时应该让一个会话运行监视器由本技能决定,而快照的具体机制由 bro review watch 命令实现。

前提条件

  • bro 在 PATH 中,或使用 npx -y @broject/bro@0
  • bd 已初始化

主要命令

  • bro review watch [--once]:产生一次快照,即心跳调用,包含关注列表、打开的分子、每个舰队 PR 的动作门控以及舰队行。
  • bro review watch --every N --for S:会话脉搏,每 N 秒执行一次快照;持有 <git-common>/bro/pulse.lock(每个仓库一个,重复者待命),在 BRO_AGENT_ID 存在时拒绝执行;--for 对会话拥有的脉搏是必需的,窗口结束即会话的唤醒事件;省略它则留下无界监视器,只能由外部监督者拥有。
  • bro review watch --notify:将初始快照及每次状态转变投递到邮箱(<git-common>/bro/notify/),由通知连接器排空并送入父会话。
  • bro review watch --json:输出机器可读的 {ts, attention, mols, gates, fleet, janitor?}。
  • bro review watch install [--every N] [--print]:装配会话脉搏,写入 <git-common>/bro/pulse.json(会话启动时重新装配所依据的意愿标记),并清除遗留的 systemd/cron 条目;节奏由 --every N 或 watch.intervalSec 决定(默认 60)。不安装操作系统定时器。
  • bro review watch uninstall:解除标记并清除遗留定时器/cron 条目;运行中的脉搏会自行退出。

每次 tick 还会重写 <git-common>/bro/heartbeat.json,即持久化的最后已知状态文件。邮箱投递约 1 小时后过期,而该文件不过期,因此隔夜状态应读取(bro fleet status 行、会话启动上下文),而不是从会话是否被轮询来推断。

策略要点

  • 读关注列表,而不是表格。快照首先呈现需要决策的事项:就绪的人工门控、丢失—是否重启?的智能体、阻塞的 PR 退出门控、失败的门控探测。(quiet) 表示没有列出任何关注条件被触发,并非一切正常:在将快照视为健康之前,应检查 degraded / unavailable / probe-failed 行,并且不要去寻找心跳未提出的工作。
  • 会话拥有节奏——有人值守的一支是 bro pulse。活跃的编排会话在可见后台 shell 中装配 bro pulse <S>(/pulse 技能)——一个连续节拍器,其邮箱 tick 即唤醒事件。有界形式 bro review watch --every N --for S --notify(watch.pulseSec 建议窗口,默认 900 秒)是无人值守的一支——当没有会话的脉搏持有锁时,检查点从 pulse.json 重新装配。绝不要在前台轮询中停留,绝不要 nohup 一个无界的 --every。
  • 已装配但死亡会自行重新装配。bro review watch install(以及每次 bro pulse start)写入 bro/pulse.json——持久意愿记录。会话启动(或压缩后)发现标记已装配但没有活跃脉搏锁时会收到重新装配提示;由编排者重新装配。操作系统定时器已退役——systemd/crontab 安装不再存在;install 只会清除它们遗留的条目。
  • 只有编排者运行脉搏。设置了 BRO_AGENT_ID 的会话——被生成的工作者——永远不会看到提示,并会被 bro pulse、bro review watch --every 和 bro review drive --every 拒绝:递归正是监视器树增殖的方式。
  • --notify 是监视器触达父会话的方式。安装通知连接器后,邮箱投递会在父会话的回合中途浮现——初始快照加上每次状态转变。去重按进程进行。
  • 邮箱是拉取式的。投递永远不会唤醒睡眠中的父会话——它会在会话下一次工具调用(postTool 排空)时落地到上下文中。有界窗口的结束是唤醒边界;tick 之间,投递遵循会话自身的工具节奏。
  • 监视从不触碰你的工作。它从不声称步骤、从不修改 beads、从不重启智能体——丢失—是否重启?行是决策面;重启是手动行为(bro fleet agents up <step>)。除 --notify 投递外的写入是心跳文件(每个 tick 的快照,原子替换)和清理器:每个 tick 回收 <git-common>/bro/ 下已死亡的会话/智能体状态(保留策略,而非工作流),并在关注列表中报告。
  • 降级不等于死亡。list() 失败的后端将其行渲染为 unknown,而非 lost——不要因读取失败而重启。
  • 用文字而非 ID 汇报进展。向用户转达快照状态时,应翻译每个代码:bro-mol-3n2 → “the notify connector molecule”,bro-mol-0io → “the bro review watch molecule”。状态行必须说明智能体在做什么、刚刚落地了什么(“X 的 PR 已合并,会话转到 Y”)——单独的 mol/bead/PR ID 不算报告。ID 可以出现在括号中。