Телеграм
Телеграм — модуль, а не часть ядра. Он живёт отдельным процессом
(eva/telegram-bridge) на
eva-sdk: свой токен, своя база под телеграмное состояние (допуски,
привязка чатов, настройки, дебаунс, триаж), свой перезапуск. Поведение
поверхности — что́ считается обращением, как выглядит /settings, чем
триажатся группы — описано у него; здесь только шов с ядром.
Ядро знает о нём ровно то же, что о любом модуле: подключён по
modules.servers.telegram, его инструменты приезжают в реестр как
telegram_* в группе telegram. Всё остальное ядро получает от него
обычным ходом через HTTP/SSE API.
Что в ядре есть ради поверхностей
Ничего телеграм-специфичного, но кое-что появилось под поверхность с внешними сообщениями — телеграм её первый (и пока единственный) носитель:
- Якорь тура (
anchorвPOST /v1/chats/{id}/messages) — внешнее сообщение, на которое отвечает тур. По нему инструменты поверхности знают цель (реакция, реплай, «гашу этот ответ»), а ядро понимает, что тур пришёл из чата с живыми людьми. Инструмент, которому якорь необходим, объявляет_meta["dev.eva/anchored"]и без якоря не показывается и не исполняется. - Инструмент-вердикт (
_meta["dev.eva/ends_turn"]) — успешный вызов закрывает тур, управление модели не возвращается. Так объявленtelegram_skip: сказанное «молчу» окончательно, и модель не успевает ни передумать, ни уйти в цикл повторных skip. - Говорящий (
sender) — личность из/v1/persons/resolve. Ею ядро решает, чей это тур: личность изmaster.aliases— тур Господина, прочие — гости с урезанной памятью и без master-инструментов. Доступ к личной памяти говорящим не открывается: он требует ещё иtrusted, а доверенной мост объявляет одну личку Господина — в группе его личное придержано, даже когда спрашивает он сам. - Поверхность чата (
surfaceвPOST /v1/chats, параметрeva-sdk::create_chat) — поверхность помечает им свои чаты, и в общий список клиентов они не попадают: переписки с другими людьми считаются десятками и затопили бы его. Смотрятся явным фильтромGET /v1/chats?surface=<имя|any>. - Окно живой истории и компакция публичных чатов настраиваются отдельно
от личных, секцией
context.telegram: вход дорогой модели в группе режется жёстче. Окно истории ключуется якорем тура, профиль компакции — поверхностью самого чата. - Кэш промпта для таких туров отдельный (
llm.prompt_cache_telegram): в группе реплики идут пачками от разных людей, и TTL там осмысленно другой. - Кнопочные вопросы (
ask_questions) — общий инструмент ядра, не телеграмный: варианты уезжают клиенту вtool_call-событии, ответ приходит вPOST /v1/chats/{id}/questions/answer. Кнопки рисует поверхность — телеграм своими inline-кнопками, tui и android своими. Сколько вопросы живут —tools.ask_ttl. - Уведомления инструментом (
notify.tool+notify.tool_args, см. конфигурацию): когда Ева просит внимания, ядро зовёт названный оператором инструмент и кладёт текст полемtext. Личка Господина в телеграме — этоtelegram_send_to_other_chatс еёchat_idв аргументах; телеграмной семантики у ядра при этом нет.
Телеграм-таблицы в базе ядра
В схеме ядра лежат telegram_*-таблицы, которых оно не читает: это
состояние моста той поры, когда мост жил в ядре. Данные переживают код —
таблицы остались на месте, а модуль ведёт своё состояние у себя.