4.9 KiB
4.9 KiB
Thread: Matrix file ingestion and agent-visible storage contract
Status: IN PROGRESS
Goal
Сохранить текущий контекст сессии для следующего агента и зафиксировать следующую архитектурную развилку: как принимать вложения из Matrix и делать их доступными агенту.
Current State
Phase 4 Matrix MVP уже собран и проверен на уровне per-room routing:
- обычные сообщения теперь идут в
platform_chat_id, а не в общий локальныйC1/C2 !contextпоказывает состояние текущего Matrix-чата!saveи!loadпривязаны к текущему room-contextPrototypeStateStoreхранит live state per context- последние изменения закоммичены в
feat/matrix-direct-agent-prototype
Коммиты, которые важно знать:
c11c8ecfeat(task-5): scope matrix context state per room07c5078feat(task-7): verify matrix per-room context routing
What We Learned About Platform Runtime
Текущий external/platform-agent не является отдельным контейнером на чат.
Фактическая модель сейчас такая:
- один FastAPI-процесс
- singleton
AgentService thread_idиспользуется как ключ памяти в LangGraph, а не как контейнерная изоляция- файловой изоляции на чат сейчас нет
/workspaceкак общий mount для Matrix bot и platform-agent сейчас не настроен- отдельного upload API для вложений в текущем коде не видно
Ключевые файлы:
external/platform-agent/src/api/external.pyexternal/platform-agent/src/agent/service.pyexternal/platform-agent/src/agent/base.py
File Handling Requirement
Пользовательский запрос на текущем этапе:
- принимать файл или сообщение с файлом из Matrix
- сохранять файл локально
- передавать агенту явный сигнал, что к сообщению есть вложения
- сообщать, где лежит файл
Но есть техническое ограничение:
- если Matrix bot пишет файл только в своём контейнере, platform-agent его не увидит
- значит нужен либо общий storage, либо upload в платформу, либо контейнеризация platform-agent с общим volume
Recommended Design Direction
Самый прагматичный MVP-вариант:
- хранить вложения в общем каталоге, который виден и Matrix bot, и platform-agent
- формировать для агента структурированный payload с:
- локальным путём
- original filename
- mime type
- attachment type
- если есть текст пользователя, дополнять сообщение краткой summary-подсказкой про вложения
- если прислан только файл, отправлять synthetic message вроде “пользователь прислал файл”
Если общий каталог невозможен в текущем runtime:
- следующий вариант это upload endpoint в platform-agent
- Matrix surface скачивает файл и загружает его в платформу, а платформа уже кладёт его в своё доступное хранилище
Open Questions
- Где должен жить shared storage: host path, docker volume или platform-side volume?
- Нужен ли немедленный upload API в platform-agent, или сначала достаточно shared path?
- Должны ли файлы быть scoped per room/platform_chat_id, а не per user?
Next Step For Another Agent
- Подтвердить runtime-модель хранения файлов.
- Проверить, как сейчас запускаются Matrix bot и platform-agent в реальной dev-схеме.
- После выбора storage contract начать с изменений в Matrix attachment ingestion.
Notes
- Контекст этой сессии сохранён как отдельный thread, потому что текущий следующий рискованный шаг уже не про context routing, а про файловый transport.
- Не смешивать этот трек с незавершённой историей про
!branch: upstream branch/snapshot API всё ещё не подтверждён.