# Lambda Lab 3.0 — Surfaces Команда поверхностей. Telegram и Matrix боты для взаимодействия пользователя с AI-агентом Lambda. ## Статус Прототип в разработке. SDK платформы ещё не готов — работаем через `MockPlatformClient`. | Поверхность | Статус | Описание | |---|---|---| | Telegram | 🔨 В разработке | DM + Forum Topics mode, активная реализация сейчас в отдельном worktree | | Matrix | 🔨 В разработке | Незашифрованные комнаты: бот создаёт private Space и отдельную room на каждый чат | --- ## Концепция Пользователь получает персонального AI-агента через привычный мессенджер. Агент выполняет реальные задачи: разбирает почту, ищет информацию, работает с файлами, управляет календарём. **Поверхности** — тонкие клиенты. Вся бизнес-логика на стороне платформы. Задача команды: сделать интерфейс удобным, надёжным и легко расширяемым. --- ## Архитектура ``` surfaces-bot/ core/ — общее ядро, не зависит от транспорта protocol.py — унифицированные структуры (IncomingMessage, OutgoingUI, ...) handler.py — EventDispatcher: IncomingEvent → OutgoingEvent handlers/ — обработчики по типам событий store.py — StateStore Protocol + InMemoryStore + SQLiteStore chat.py — ChatManager: метаданные чатов C1/C2/C3 auth.py — AuthManager: аутентификация settings.py — SettingsManager: коннекторы, скиллы, SOUL, безопасность adapter/ telegram/ — aiogram 3.x адаптер matrix/ — matrix-nio адаптер sdk/ interface.py — PlatformClient Protocol (контракт к SDK) mock.py — MockPlatformClient (заглушка) docs/ — документация .claude/agents/ — агенты для Claude Code ``` **Ключевой принцип:** добавить новую поверхность = написать один адаптер-конвертер. Ядро (`core/`) не трогается. Подробнее: [`docs/surface-protocol.md`](docs/surface-protocol.md) --- ## Функционал прототипа ### Telegram ([подробнее](docs/telegram-prototype.md)) - **Чаты** — основной Telegram UX сейчас развивается в отдельном worktree `feat/telegram-adapter` - **Forum Topics mode** — бот умеет подключать forum-группу через `/forum`; чат может быть привязан к отдельной теме - **DM-режим** — базовый диалог и переключение чатов сохраняются - **Аутентификация** — привязка Telegram аккаунта к аккаунту платформы - **Диалог** — typing indicator, передача файлов, подтверждение опасных действий через inline-кнопки - **Настройки** через `/settings`: коннекторы (Gmail, GitHub, Notion...), скиллы, личность агента (SOUL), безопасность, подписка ### Matrix ([подробнее](docs/matrix-prototype.md)) - **Онбординг** — при первом invite бот создаёт private Space `Lambda — {display_name}` и первую комнату `Чат 1`, сразу приглашая туда пользователя - **Чаты** — `!new`, `!chats`, `!rename`, `!archive`, `!help`; новые комнаты регистрируются в локальном `ChatManager` - **Диалог** — сообщения, вложения, подтверждения `!yes` / `!no` и routing через `EventDispatcher` - **Стабильность** — перед `sync_forever()` бот делает bootstrap sync и стартует с `since`, чтобы не переигрывать старую timeline после рестарта - **Текущее ограничение** — encrypted DM пока не поддержан; ручное тестирование Matrix ведётся в незашифрованных комнатах и зависит от локального state-store бота --- ## Замена SDK Вся работа с платформой идёт через `PlatformClient` Protocol: ```python class PlatformClient(Protocol): async def get_or_create_user(self, external_id: str, platform: str, ...) -> User: ... async def send_message(self, user_id: str, chat_id: str, text: str, ...) -> MessageResponse: ... async def get_settings(self, user_id: str) -> UserSettings: ... async def update_settings(self, user_id: str, action: Any) -> None: ... ``` Бот не управляет lifecycle контейнеров — это делает Master (платформа). Бот передаёт `user_id` + `chat_id` + сообщение; платформа сама решает нужно ли поднять контейнер. Сейчас: `MockPlatformClient` в `sdk/mock.py`. Когда SDK готов: добавляем `SdkPlatformClient`, меняем одну строку в DI. Адаптеры и ядро не трогаем. --- ## Быстрый старт ```bash # Зависимости uv sync # или: pip install -e ".[dev]" # Тесты pytest tests/ -v # Запустить Matrix бота cp .env.example .env # заполнить MATRIX_* переменные PYTHONPATH=. uv run python -m adapter.matrix.bot ``` ### Telegram worktree Текущая Telegram-разработка идёт в отдельном worktree: ```bash cd .worktrees/telegram export BOT_TOKEN=... PYTHONPATH=. python -m adapter.telegram.bot ``` ### Matrix manual QA Пока Matrix-бот тестируется в незашифрованных комнатах: ```bash cd /path/to/surfaces-bot rm -f lambda_matrix.db rm -rf matrix_store PYTHONPATH=. uv run python -m adapter.matrix.bot ``` --- ## Документация | Файл | Содержание | |---|---| | [`docs/surface-protocol.md`](docs/surface-protocol.md) | Унификация поверхностей — все структуры, как добавить новую поверхность | | [`docs/telegram-prototype.md`](docs/telegram-prototype.md) | Функционал Telegram прототипа | | [`docs/matrix-prototype.md`](docs/matrix-prototype.md) | Функционал Matrix прототипа | | [`docs/api-contract.md`](docs/api-contract.md) | Контракт к SDK платформы | | [`docs/user-flow.md`](docs/user-flow.md) | FSM и user journey | | [`docs/claude-code-guide.md`](docs/claude-code-guide.md) | Гайд по работе с Claude Code | --- ## Команда Поверхности и интеграции Lambda Lab 3.0, МАИ