feat(hands,jobs): watchdog ring with a neighbour agent, daily heartbeat and silence alarm

This commit is contained in:
hh committed 2026-09-22 14:21:51 +00:00
1 parent 0475e09c81
commit f6cb17acaf
9 files changed
+1029

No files matched your search

+25
View File
@@ -6,6 +6,7 @@
from __future__ import annotations
import logging
import os
from pathlib import Path
@@ -19,6 +20,7 @@ from beaver_agent.hands.vibegram import Vibegram
from beaver_agent.vault import TZ
env = os.environ.get
_log = logging.getLogger(__name__)
obsidian = McpServer.stdio(
name="obsidian-fs",
@@ -98,6 +100,29 @@ vibegram = (
)
vibegram_exposed = (ExposedMcp(name="vibegram"),) if VIBEGRAM else ()
VIBEGRAM_HB_NICK = env("VIBEGRAM_HB_NICK") or env("VIBEGRAM_NICK")
VIBEGRAM_HB = (
Vibegram(
hub=os.environ["VIBEGRAM_HUB"],
token=os.environ["VIBEGRAM_HB_TOKEN"],
nick=VIBEGRAM_HB_NICK or "",
tz=TZ,
)
if env("VIBEGRAM_HB_TOKEN") and env("VIBEGRAM_HUB") and VIBEGRAM_HB_NICK
else None
)
"""Сторожевая комната: ВТОРОЙ, независимый экземпляр клиента.
Комната на хабе определяется токеном, а `/api/pending` - курсор на стороне
хаба: общий с основной комнатой экземпляр означал бы, что отметки соседа
съедает триаж-джоб, а сами они тонут в разговоре. Модели эта рука не
выдаётся: сторож - механизм, у него нет тулзы.
"""
if VIBEGRAM_HB is None:
_log.info(
"сторож: VIBEGRAM_HB_TOKEN не задан - отметка и слежка за соседом выключены"
)
t3code = (
McpServer.http(name="t3code", url=env("T3CODE_MCP", "http://t3code-mcp:8000/mcp"))
if "t3" in env("COMPOSE_PROFILES", "").split(",")