Remove session management concepts (no create_session/close_session/
DELETE /sessions — Master handles container lifecycle automatically).
Update PlatformClient contract, ChatContext, project structure tree,
and FSM diagrams across all docs to match the implemented core/.
- README.md: fix core/ structure tree + PlatformClient snippet
- docs/surface-protocol.md: remove session.py/_template.py, fix
ChatContext (drop session_id), fix PlatformClient contract, fix
"free features" list
- docs/telegram-prototype.md: remove "создаёт сессию на платформе"
- docs/matrix-prototype.md: same + remove !sessions, fix FSM
(SessionCreated → ChatCreated), fix status block
- docs/user-flow.md: rewrite sequence diagram to POST /users/{id}/
chats/{id}/messages; update FSM states
11 KiB
Matrix — описание прототипа
Концепция
Один бот, каждый чат — отдельная комната, все комнаты собраны в Space.
При первом входе бот создаёт для пользователя личное пространство (Space) — это как папка в Element. Внутри Space бот создаёт комнату для каждого нового чата с агентом. Пользователь видит аккуратную структуру: одно пространство, внутри — список чатов. История хранится нативно в Matrix — это часть протокола, ничего дополнительно делать не нужно.
Matrix выбран как внутренняя поверхность: команды лаборатории, тестировщики, разработчики скиллов. Поэтому UX здесь — про удобство работы, а не онбординг.
Аутентификация
Флоу
- Пользователь приглашает бота в личные сообщения или пишет в общей комнате
- Бот проверяет
@user:matrix.org— есть ли аккаунт на платформе - Если нет — бот отправляет одноразовый код или ссылку
- Пользователь подтверждает, платформа возвращает токен
- Бот сохраняет привязку
matrix_user_id → platform_user_id
В моке
- Любой пользователь проходит аутентификацию автоматически
- Бот отвечает: «Добро пожаловать, {display_name}. Создаю ваше пространство...»
- Демонстрирует флоу без реальной платформы
Чаты через Space + комнаты (вариант Б)
Структура
Space: «Lambda — {display_name}»
├── 📌 Настройки ← специальная комната для команд управления
├── 💬 Чат 1 ← первый чат, создаётся автоматически
├── 💬 Чат 2
└── 💬 Исследование рынка ← пользователь сам называет
Создание Space
При первом входе бот:
- Создаёт Space
Lambda — {display_name} - Создаёт комнату
Настройки(закреплена вверху) - Создаёт первую комнату-чат
Чат 1 - Приглашает пользователя во все комнаты
- Пишет в
Чат 1приветствие
Управление чатами
Команды работают в любой комнате Space:
| Команда | Действие |
|---|---|
!new |
Создать новый чат (новую комнату в Space) |
!new Название |
Создать чат с именем |
!rename Название |
Переименовать текущую комнату |
!archive |
Вывести комнату из Space (не удалять) |
!chats |
Показать список чатов |
Создание нового чата
- Пользователь пишет
!newили!new Анализ конкурентов - Бот создаёт новую комнату в Space
- Приглашает пользователя
- Пишет приветствие; при первом сообщении платформа автоматически поднимает контейнер
- Пользователь переходит в новую комнату — начинает диалог
В моке
- Space и комнаты создаются реально через matrix-nio
- Сообщения передаются в MockPlatformClient с
chat_id(C1, C2...) - История хранится в Matrix нативно
Основной диалог
Флоу сообщения
- Пользователь пишет текст в комнату-чат
- Бот показывает typing (m.typing event)
- Запрос уходит в платформу (MockPlatformClient)
- Бот отвечает в той же комнате
Вложения
- Файлы, изображения отправляются как Matrix media events
- Бот принимает
m.file,m.image,m.audio - Передаёт в платформу как
attachmentsчерезIncomingMessage - В моке: подтверждение получения + заглушка-ответ
Реакции как действия
Matrix поддерживает реакции на сообщения (m.reaction).
Используем это для подтверждения действий агента:
Агент: Хочу отправить письмо на vasya@mail.ru
Тема: «Отчёт за неделю»
👍 — подтвердить ❌ — отменить
Пользователь ставит реакцию — бот обрабатывает. Нативно и удобно.
Треды для длинных задач
Если агент выполняет долгую задачу (deep research, генерация документа), бот создаёт тред от своего первого ответа и пишет промежуточные статусы туда. Основной чат не засоряется.
Бот: Начинаю исследование по теме «AI агенты 2025» [→ в треде]
└── Ищу источники... (1/4)
└── Анализирую статьи... (2/4)
└── Формирую отчёт... (3/4)
└── Готово. Отчёт: [...]
Комната «Настройки»
Специальная комната для управления агентом. Закреплена вверху Space. Команды работают только здесь — не мешают диалогу в чатах.
Коннекторы
!connectors — показать список
!connect gmail — подключить Gmail (OAuth ссылка)
!connect github — подключить GitHub
!connect calendar — подключить Google Calendar
!connect notion — подключить Notion
!disconnect gmail — отключить
Статус:
Коннекторы:
✅ Gmail — подключён (user@gmail.com)
❌ GitHub — не подключён → !connect github
❌ Google Calendar — не подключён
❌ Notion — не подключён
В моке: OAuth ссылка-заглушка → «Подключено ✓»
Скиллы
!skills — показать список
!skill on browser — включить Browser Use
!skill off browser — выключить
Статус:
Скиллы:
✅ web-search — поиск в интернете
✅ fetch-url — чтение веб-страниц
✅ email — чтение почты (требует Gmail)
❌ browser — управление браузером
❌ image-gen — генерация изображений
❌ video-gen — генерация видео
✅ files — работа с файлами
❌ calendar — календарь (требует Google Calendar)
В моке: состояние хранится локально.
Личность агента
!soul — показать текущий SOUL.md
!soul name Лямбда — задать имя агента
!soul style brief — стиль: brief | friendly | formal
!soul priority «разбирать почту утром» — приоритетная задача
!soul reset — сбросить к дефолту
В моке: SOUL.md генерируется и хранится локально, агент обращается по имени.
Безопасность
!safety — показать настройки
!safety on email-send — требовать подтверждение перед отправкой письма
!safety off calendar-create — не спрашивать для создания событий
Статус:
Подтверждение требуется для:
✅ отправка письма
✅ удаление файлов
✅ публикация в соцсетях
❌ создание события в календаре
❌ поиск в интернете
Подписка
!plan — показать текущий план
Подписка: Beta (бесплатно)
Токены этот месяц: 800 / 1000
━━━━━━━━░░ 80%
Заглушка, реализует другая команда.
Статус и диагностика
!status — состояние платформы и чатов
!whoami — текущий аккаунт платформы
Статус:
Платформа: ✅ доступна
Аккаунт: user@lambda.lab
Активных чатов: 3
FSM состояния
[Invite] → AuthPending → AuthConfirmed
↓
SpaceSetup → Idle (в комнате Настройки)
↓
[новая комната] → ChatCreated → Idle (в чате)
↓
ReceivingMessage → WaitingResponse → Idle
↓
WaitingReaction (confirm) → [✅/❌] → Idle
↓
LongTask → [тред со статусами] → Done → Idle
Стек
- Python 3.11+
- matrix-nio (async) — Matrix клиент
- MockPlatformClient →
platform/interface.py - structlog для логирования
- SQLite для хранения
matrix_user_id → platform_user_id, состояния скиллов, маппингаchat_id → room_id