"""Окна: личка с ботом для мастера и веток, файлы vault для глубоких, API и админка.""" from __future__ import annotations import os from datetime import date from typing import TYPE_CHECKING from beaver_gateway.frontends.admin import AdminFrontend from beaver_gateway.frontends.anthropic import AnthropicMessagesFrontend from beaver_gateway.frontends.api import ApiFrontend from beaver_gateway.frontends.markdown import MarkdownFrontend from beaver_gateway.frontends.mcp_server import McpServerFrontend from beaver_gateway.frontends.telegram import Attachments, TelegramFrontend from beaver_gateway.frontends.turn_record import slugify from beaver_agent import texts from beaver_agent.vault import ATTACHMENTS, BEAVER, CHATS, TZ, VAULT if TYPE_CHECKING: from pathlib import Path from beaver_gateway.frontends.base import Frontend DISPATCHER = "beaver-dispatcher" DEEP = "beaver-opus-high" def chat_path(title: str, agent: str, vault: Path) -> Path: # noqa: ARG001 """Файл глубокого чата: помесячная папка, дата и тема.""" today = date.today() return ( vault / f"{today:%Y-%m}" / f"{today:%Y-%m-%d} - {slugify(title, maxlen=60)}.md" ) telegram = ( TelegramFrontend( token=os.environ["TELEGRAM_BOT_TOKEN"], user_id=int(os.environ["TELEGRAM_USER_ID"]), master_agent=DISPATCHER, branch_agent=DISPATCHER, attachments=Attachments(mode="vault", dir=ATTACHMENTS, keep_days=30, tz=TZ), texts=texts.TELEGRAM, ) if os.environ.get("TELEGRAM_BOT_TOKEN") else None ) """Вложения - входящая папка по дням в зоне агента; нужное он переносит сам.""" frontends: list[Frontend] = [ *([telegram] if telegram is not None else []), AnthropicMessagesFrontend(), McpServerFrontend(), AdminFrontend(), ApiFrontend( master_agent=DISPATCHER, branch_agent=DISPATCHER, memory_root=BEAVER, vault_root=VAULT, ), MarkdownFrontend( vault_path=CHATS, default_agent=DEEP, log_all_chats=True, chat_path=chat_path ), ]