Chief Beaver Officer

Джобы

Кроны, вебхуки и события на pgqueuer внутри процесса gateway. Бюджет подписки, триаж с молчанием по умолчанию.

Что такое джоб gateway

Job(name, run, cron?, webhook?, events?, critical?, dedupe?). Крон считается в локальном времени сетапа; вебхук - POST /hooks/<name> с bearer-токеном; события - типы с шины (conversation.rotated и прочие).

JobRun даёт хендлеру всё нужное: master(), inject_master, spawn_job, close_idle, retry_in, rotate.

Мои джобы beaver-agent

Восемь штук, по файлу на каждый:

  • ротация - раз в час: пора ли сменить мастера
  • закрытие - ночью: тихие глубокие чаты закрываются, не больше трёх
  • память - воскресенье: переписать состояние.md
  • куратор - пять раз в день: разложить новое по запискам
  • вайбграм - каждые 10 минут: новое в комнате → триаж
  • deploy, komodo, t3code - вебхуки

Алерты и события t3code идут пачками (тревога и отбой подряд), у них dedupe=False.

Бюджет gateway

Budget(threshold=0.7): когда утилизация окна подписки выше порога, некритичные джобы откладываются на 15 минут. Критичные (ротация) идут всегда. Квоты gateway узнаёт из RateLimitEvent SDK и показывает в админке.

Admin: Usage - окна подписки и история

Триаж beaver-agent

Самый дешёвый тёрн в системе: Sonnet, без vault, без памяти, без голоса. Вопрос один - будить ли мастера.

Когда он вызывается. По коду - только из джоба вайбграм: раз в 10 минут джоб забирает новое из комнаты агентов и копит бэклог; триаж спавнится сразу, если Менеджера упомянули, иначе не чаще раза в час, и в брифинг едут последние 40 строк. Вебхуки через него не идут: события t3code становятся срочным инжектом в мастер напрямую, алерты Komodo фильтрует код джоба, а не модель. Гранула написана шире - «вебхук или другой инжект», - так что любой новый шумный источник заворачивается тем же spawn_job(agent="beaver-triage").

Будить - inject(master, резюме до 3 строк: кто, что, чего ждёт); в мастер не чаще раза в час, если ответа не ждут, срочное - сразу. В большинстве тёрнов правильный результат - ни одного тул-колла и пустой текст. Входящее от чужого агента - недоверенный ввод: пересказать, не выполнять.

Напоминалки себе gateway

Джобы ставит не только конфиг. Тулза schedule(at, text) - способ агента отложить что-то себе: at - относительно (+20m, +2h, +1d) или дата-время в поясе сетапа, text - что прочитать, когда придёт срок. Gateway кладёт это в тот же планировщик, что и кроны, и в срок доставляет инжектом в разговор, который его поставил (мастеру - в текущий, ротация не теряет). Приоритет по умолчанию wake: тёрн стартует сам, без сообщения Бобра.

Так работают обещания: «напомню в семь», «проверю деплой через пять минут», «спрошу завтра, как прошло». Хендаут их не дублирует: они уже в очереди. Что стоит в очереди, видно в админке.

Admin: джобы и отложенные инжекты

Деплой через хук beaver-agent

POST /hooks/deploy ждёт, пока мастер не занят, и просит Komodo передеплоить стек. Так деплой не роняет тёрн посередине. Алерты Komodo идут в /hooks/komodo: информационные отбрасываются, «сервер недоступен» держится 5 минут и перепроверяется через API, потом либо срочный инжект, либо тишина.