Agent routing: - Remove !agent command and manual agent selection flow - Registry auto-assigns agent from user_agents mapping (fallback: agents[0]) - provision_workspace_chat and !new both write agent_id to room_meta - Reconciliation backfills agent_id from registry on cold start - Fix duplicate agent_id block in auth.py Deployment stability: - Add bot-state named volume to persist lambda_matrix.db and matrix_store - Fix docker-compose.prod.yml duplicate environment: key (was silently losing all Matrix credentials) - Fix MATRIX_AGENT_REGISTRY_PATH to use absolute container path /app/config/... - Add bot-state volume declaration to docker-compose.fullstack.yml Docs and config: - Rewrite README.md for platform handoff (deploy table, working commands only) - Rewrite docs/matrix-prototype.md (remove stale commands and mock descriptions) - Remove !save/!load/!context/!agent from help text and welcome message - Add !clear, !list, !remove, !yes/!no to help text - Clean up .env.example (remove Telegram token, internal vars, real URLs) - Update config/matrix-agents.example.yaml with user_agents section and comments - Add explanatory comment to Dockerfile for --ignore-requires-python - Remove silent uv sync fallbacks in Dockerfile
5.3 KiB
Matrix — описание прототипа
Концепция
Один бот, каждый чат — отдельная комната, все комнаты собраны в personal Space.
При первом invite бот создаёт для пользователя личное пространство (Space) и первую рабочую комнату.
История хранится нативно в Matrix. UX прагматичный: явные !-команды, локальный state-store, нативные Matrix rooms.
Matrix — внутренняя поверхность: команда лаборатории, тестировщики, разработчики скиллов.
Онбординг
- Пользователь приглашает бота в личные сообщения (DM) на Matrix-сервере
- Бот принимает invite, создаёт Space
Lambda — {display_name}и первую комнатуЧат 1 - Приглашает пользователя в
Чат 1и пишет приветствие - Дальнейшее общение ведётся в рабочих комнатах, не в DM
Space: «Lambda — {display_name}»
├── 💬 Чат 1 ← создаётся автоматически при invite
├── 💬 Чат 2
└── 💬 Исследование рынка ← пользователь называет сам через !new
Требование: незашифрованные комнаты. E2EE не поддержан (инфраструктурное ограничение).
Работающие команды
Управление чатами
| Команда | Действие |
|---|---|
!new |
Создать новый чат (новую комнату в Space) |
!new Название |
Создать чат с именем |
!chats |
Список активных чатов |
!rename <название> |
Переименовать текущую комнату |
!archive |
Архивировать чат |
!help |
Справка |
Контекст
| Команда | Действие |
|---|---|
!clear |
Сбросить контекст текущего чата (создаёт новый thread у агента) |
!reset |
Псевдоним для !clear |
Подтверждения
| Команда | Действие |
|---|---|
!yes |
Подтвердить действие агента |
!no |
Отменить действие агента |
Вложения (файловая очередь)
Matrix-клиенты отправляют файлы и текст отдельными событиями. Файл без текстовой инструкции ставится в очередь, а не уходит агенту сразу.
| Команда | Действие |
|---|---|
!list |
Показать файлы в очереди |
!remove <n> |
Удалить файл из очереди по номеру |
!remove all |
Очистить всю очередь |
Как отправить файлы агенту:
- Отправь один или несколько файлов в рабочую комнату
- Напиши текстовое сообщение с инструкцией, например:
что на изображении? - Бот отправит агенту текст вместе со всеми файлами из очереди
Диалог
- Любое текстовое сообщение уходит агенту, бот показывает typing-индикатор
- Ответ стримится по WebSocket и выводится в ту же комнату
- Каждая комната имеет свой
platform_chat_id— контексты изолированы между комнатами
Передача файлов
Пользователь → Агент
Бот сохраняет файл в shared volume: /agents/surfaces/matrix/{user}/{room}/inbox/{stamp}-{filename}
и передаёт агенту относительный путь как workspace_path.
Агент → Пользователь
Агент эмитит путь к файлу в своём workspace. Бот читает файл из /agents/...
и отправляет пользователю как Matrix file message.
Известные ограничения
| Проблема | Причина |
|---|---|
!save / !load / !context |
Нестабильны: !save зависит от агента (пишет файл в workspace), сессии хранятся in-memory и теряются при рестарте |
| Первый чанк ответа иногда пропадает после tool/file flow | Баг в upstream platform-agent; подробности: docs/reports/2026-04-22-platform-streaming-final-bug-report-ru.md |
| Персистентность истории между рестартами агента | platform-agent использует MemorySaver (in-memory) |
| E2EE комнаты | python-olm не собирается на macOS/ARM |
!settings и настройки скиллов/SOUL/безопасности |
Заглушки MVP, требуют готового SDK платформы |