Files

69 lines
2.3 KiB
Python

"""Окна: личка с ботом для мастера и веток, файлы 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
from beaver_agent.voice import AGENT as VOICE
from beaver_agent.voice import VoiceFrontend
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
),
VoiceFrontend(agent=VOICE),
]