7.6 KiB
7.6 KiB
Phase 1: Matrix QA & Polish — Context
Gathered: 2026-04-02 Status: Ready for planning
## Phase BoundaryПереработать и довести Matrix адаптер до уровня "приемлемо работает" как Telegram:
- Переход с DM-first на Space+rooms архитектуру
- Убрать реакции как механизм подтверждения — заменить текстовыми командами
- Реализовать все команды управления (
!new,!chats,!rename,!archive,!skills,!soul,!safety,!settings) - Подтвердить работу ручным тестированием (бот уже запускался)
Новые возможности (коннекторы, E2EE, Space discovery) — вне scope.
## Implementation DecisionsАрхитектура: Space + rooms
- D-01: Space+rooms — единственная поддерживаемая модель. DM-first убрать.
- D-02: При первом invite бот создаёт Space
Lambda — {display_name}, внутри — первую комнатуЧат 1. Приглашает пользователя. - D-03:
!new [name]создаёт новую комнату внутри Space пользователя, приглашает его туда. - D-04:
!archiveвыводит комнату из Space (не удаляет). - D-05: Маппинг
room_id → space_id+room_id → chat_idхранится в SQLite черезadapter/matrix/store.py.
Подтверждение действий
- D-06: Реакции (
👍/❌) — убрать полностью.OutgoingUIс кнопками рендерится как текст +!yes/!no. - D-07: Когда агент запрашивает подтверждение, бот пишет текстовое сообщение с описанием и подсказкой:
Ответьте !yes для подтверждения или !no для отмены. - D-08:
!yes/!noработают в текущей комнате. Состояние ожидания подтверждения хранится per (user_id, room_id).
Команды
- D-09: Все команды работают из любой комнаты Space — нет выделенной комнаты «Настройки».
- D-10: Команды:
!new [name],!chats,!rename <name>,!archive,!skills,!soul,!safety,!settings,!yes,!no. - D-11:
!start— не нужен, онбординг через invite flow.
Настройки (Вариант D)
- D-12:
!settings— read-only дашборд: одно сообщение со статусом всего (скиллы, soul, safety, активные чаты). Ничего не меняет. - D-13: Изменения через субкоманды:
!skills— показать список;!skill on/off <name>— переключить!soul— показать профиль;!soul name/style/priority/reset <value>— изменить!safety— показать статус;!safety on/off <action>— переключить
- D-14: Каждая команда без аргументов (
!skills,!soul,!safety) выводит текущее состояние + подсказку как менять.
Claude's Discretion
- Формат текста в Matrix (plain text vs markdown) — на усмотрение, Matrix клиенты рендерят markdown
- Структура invite-сообщения в новом Space — на усмотрение, главное: приветствие + список команд
- Обработка ошибок matrix-nio (room_create fail, join fail) — логировать + ответить пользователю
<canonical_refs>
Canonical References
Downstream agents MUST read these before planning or implementing.
Архитектурные документы
docs/matrix-prototype.md— описание Space+rooms структуры, FSM состояний, команд (ВНИМАНИЕ: секция "Реакции как действия" устарела — заменена D-06..D-08)bot-examples/matrix_bot_rooms.py— reference реализация Space+rooms на matrix-nio (другая архитектура поверх, но паттерны работы с Space/rooms актуальны)
Текущая реализация (требует переработки)
adapter/matrix/bot.py— точка входа,send_outgoing(реакции убрать),MatrixBot,MatrixRuntimeadapter/matrix/handlers/auth.py—handle_invite(сейчас создаёт DM без Space — переписать)adapter/matrix/handlers/chat.py—make_handle_new_chat(сейчас не добавляет комнату в Space — переписать)adapter/matrix/store.py— хранилище метаданных комнат (расширить для space_id)adapter/matrix/room_router.py— маршрутизация room_id → chat_id
Протокол
core/protocol.py—IncomingCommand,OutgoingUI,OutgoingMessage— типы не менятьadapter/matrix/converter.py— маппинг nio events → IncomingEvent
</canonical_refs>
<code_context>
Existing Code Insights
Reusable Assets
adapter/matrix/store.py:get_room_meta/set_room_meta— переиспользовать, добавить поляspace_idadapter/matrix/room_router.py:resolve_chat_id— переиспользовать, возможно расширитьcore/handlers/: все обработчики команд уже зарегистрированы черезregister_alladapter/matrix/handlers/settings.py,confirm.py— проверить, возможно переиспользовать/обновить
Known Bugs (из анализа кода)
auth.py:27:"chat_id": "C1"захардкожен — у каждого нового пользователя будет коллизияbot.py:167:_button_action_to_reaction— убрать целикомhandlers/chat.py:50:room_createне добавляет комнату в Space (space_idне указан)
Integration Points
AsyncClient.room_create(space=True)— создание Space через matrix-nioAsyncClient.room_put_state(room_id, "m.space.child", ...)— добавление комнаты в Space- Оба метода есть в
bot-examples/matrix_bot_rooms.py
</code_context>
## Specific Ideas- Подтверждение: бот пишет
Ответьте !yes для подтверждения или !no для отмены.— явно, без двусмысленности !settings— один дашборд-блок, не несколько сообщений
- Комната «Настройки» как отдельная закреплённая комната — решили не делать в Phase 1
- E2EE / python-olm — инфраструктурный трек, вне scope
- Space discovery (бот находит существующий Space при повторном invite) — Phase 2+
- Attachment handling (m.file, m.image, m.audio) — Phase 2+
Phase: 01-matrix-qa-polish Context gathered: 2026-04-02