- platform/interface.py: PlatformClient Protocol + Pydantic models (User, MessageResponse, UserSettings) — no explicit session management, Master handles container lifecycle - platform/mock.py: MockPlatformClient with simulated latency, [MOCK] responses, is_new correctly True only on first creation - core/protocol.py: unified dataclasses for all events and responses (IncomingMessage/Command/Callback, OutgoingMessage/UI/Notification, AuthFlow, ChatContext, SettingsAction, etc.) - core/store.py: StateStore Protocol + InMemoryStore (tests) + SQLiteStore (prod) with JSON serialization - core/chat.py: ChatManager — chat metadata (C1/C2/C3), not container lifecycle (that's the platform's job) - core/auth.py: AuthManager — start_flow / confirm / is_authenticated - core/settings.py: SettingsManager — get/apply with store cache - core/handler.py: EventDispatcher — registry-based routing with keys (command name, action name, attachment type, "*" catch-all) - core/handlers/: register_all() + start/new/message/callback/settings handlers; voice slot falls back to stub text until voice_handler added - conftest.py: sys.path fix so local platform/ shadows stdlib platform - docs/api-contract.md: rewritten for Lambda Lab 3.0 container model 46 tests passing, 0 warnings. |
||
|---|---|---|
| core | ||
| docs | ||
| platform | ||
| src | ||
| tests | ||
| .DS_Store | ||
| .env.example | ||
| .gitignore | ||
| conftest.py | ||
| pyproject.toml | ||
| README.md | ||
Lambda Lab 3.0 — Surfaces
Команда поверхностей. Telegram и Matrix боты для взаимодействия пользователя с AI-агентом Lambda.
Статус
Прототип в разработке. SDK платформы ещё не готов — работаем через MockPlatformClient.
| Поверхность | Статус | Описание |
|---|---|---|
| Telegram | 🔨 В разработке | Forum Topics: одна группа, чат = тема |
| Matrix | 🔨 В разработке | Space + комнаты: чат = отдельная комната |
Концепция
Пользователь получает персонального AI-агента через привычный мессенджер. Агент выполняет реальные задачи: разбирает почту, ищет информацию, работает с файлами, управляет календарём.
Поверхности — тонкие клиенты. Вся бизнес-логика на стороне платформы. Задача команды: сделать интерфейс удобным, надёжным и легко расширяемым.
Архитектура
surfaces-bot/
core/ — общее ядро, не зависит от транспорта
protocol.py — унифицированные структуры (IncomingMessage, OutgoingUI, ...)
handler.py — логика: IncomingEvent → OutgoingEvent
session.py — управление сессиями и чатами
auth.py — аутентификация
settings.py — коннекторы, скиллы, SOUL, безопасность
adapter/
telegram/ — aiogram 3.x адаптер
matrix/ — matrix-nio адаптер
platform/
interface.py — PlatformClient Protocol (контракт к SDK)
mock.py — MockPlatformClient (заглушка)
docs/ — документация
.claude/agents/ — агенты для Claude Code
Ключевой принцип: добавить новую поверхность = написать один адаптер-конвертер.
Ядро (core/) не трогается. Подробнее: docs/surface-protocol.md
Функционал прототипа
Telegram (подробнее)
- Чаты — Forum Topics: бот создаёт личную группу пользователя, каждый чат = отдельная тема
- Аутентификация — привязка Telegram аккаунта к аккаунту платформы
- Диалог — typing indicator, передача файлов, подтверждение опасных действий через inline-кнопки
- Настройки через
/settings: коннекторы (Gmail, GitHub, Notion...), скиллы, личность агента (SOUL), безопасность, подписка
Matrix (подробнее)
- Чаты — Space + комнаты: бот создаёт личное пространство, каждый чат = комната
- Аутентификация — привязка Matrix аккаунта к аккаунту платформы
- Диалог — typing, файлы, подтверждение действий через реакции 👍/❌, треды для долгих задач
- Настройки — отдельная комната «Настройки» с командами
!connectors,!skills,!soul,!safety,!status
Замена SDK
Вся работа с платформой идёт через PlatformClient Protocol:
class PlatformClient(Protocol):
async def get_or_create_user(...) -> User: ...
async def create_session(...) -> Session: ...
async def send_message(...) -> AgentResponse: ...
async def close_session(...) -> None: ...
async def get_settings(...) -> UserSettings: ...
async def update_settings(...) -> None: ...
Сейчас: MockPlatformClient в platform/mock.py.
Когда SDK готов: добавляем SdkPlatformClient, меняем одну строку в DI. Адаптеры и ядро не трогаем.
Быстрый старт
# Зависимости
uv sync # или: pip install -e ".[dev]"
# Тесты
pytest tests/ -v
# Запустить Telegram бота
cp .env.example .env # заполнить TELEGRAM_BOT_TOKEN
python -m adapter.telegram.bot
# Запустить Matrix бота
cp .env.example .env # заполнить MATRIX_* переменные
python -m adapter.matrix.bot
Документация
| Файл | Содержание |
|---|---|
docs/surface-protocol.md |
Унификация поверхностей — все структуры, как добавить новую поверхность |
docs/telegram-prototype.md |
Функционал Telegram прототипа |
docs/matrix-prototype.md |
Функционал Matrix прототипа |
docs/api-contract.md |
Контракт к SDK платформы |
docs/user-flow.md |
FSM и user journey |
docs/claude-code-guide.md |
Гайд по работе с Claude Code |
Команда
Поверхности и интеграции Lambda Lab 3.0, МАИ