rig(bro)是一个策略型技能,所有实际机制都位于 bro CLI 中,该技能仅负责策略。其目标是保持机器上的主检出跟踪上游——代理运行的是由该检出构建出的 bro,因此滞后的检出意味着整个集群运行过期的 dist。一次完整流程为:git fetch → git merge --ff-only @{upstream} → 合并后刷新(依赖清单发生移动则安装 → 构建 → 热补丁槽位)。其替代的临时 setsid 轮询器此前以 10 分钟为周期运行相同流程。
前置条件:bro 在 PATH 中,或使用 npx -y @broject/bro@0。
命令
bro fleet rig sync [--repo <dir>]:对解析出的检出执行一次保鲜流程:守卫(脏树 → 跳过;无上游/分叉 → 报错)→ fetch → 仅快进合并 → install→build→patch 刷新。出错或刷新未完成(done-sha ≠ HEAD)时退出码为 1。
bro fleet rig status [--repo] [--json]:读取平面,不联网——分支 → 上游、与存储引用的领先/落后、脏文件数、done-sha 新鲜度、解析出的刷新步骤、rig-pulse 状态。
bro fleet rig watch [--every N] [--for S]:前台监督器——每个 tick 在 bro/rig-pulse.lock 下执行一次 rig sync(每个仓库一把锁,争用时待命);节奏由 rig.intervalSec 决定(默认 600 秒);--for 限定会话侧运行时长。仅限编排器使用——在 BRO_AGENT_ID 下会拒绝运行。
bro fleet rig install [--every N] [--print]:挂载会话脉冲——写入 bro/rig-pulse.json;会话的检查点会据此重新武装一个有界的 bro fleet rig watch 窗口(bro-killn:不写入操作系统定时器)。
bro fleet rig uninstall:卸载标记——正在运行的 rig watch 会保留其锁直到退出。
bro rig next [<item>] [--json]:引擎基于持久状态给出的重入判定:step(处理它)、gate(PR 已打开——门控决策)、wait(停驻帧或活跃 worker——信号可重入)、done、blocked(外部声明/依赖)。无状态且只读——竞态在下次调用时解决。
策略
目标是主检出,而非你当前所在的工作树。解析顺序:--repo > rig.repo 配置 > 仓库的主工作树。loop/* 临时工作树永远不是 rig——在其中键入 bro fleet rig sync 仍会刷新 rig 二进制所来自的检出。
上游即契约。无论主检出位于哪个分支,sync 都会将其快进到 @{upstream}。脏树会被跳过(有人正在编辑中);分叉则报错等待手动变基——机制从不自行解决两者。
rig 负责做什么与何时做,保鲜负责如何做。刷新步骤(install/build/patch,包括 ~/.local/share/bro-hotpatch.sh 槽位)仍由保鲜配置节拥有——热补丁会在每次构建后重新应用,直到其上游落地。
挂载,而非值守。rig watch 是调试/前台形态——持久轮询请使用 bro fleet rig install:want 标记可在重启与会话死亡后存活,编排器会话的检查点在脉冲死亡时重新武装一个有界窗口(bro-killn——与 bro review watch install 所依赖的模型相同)。在回合之间点查 bro fleet rig status;切勿坐在前台等待。
一次拉取会掉下一个 rig:邮箱事件,使活跃会话得知其下的二进制已变更——看到该事件的会话应预期 dist 会在飞行中被重建。