surfaces/.planning/threads/matrix-file-ingestion-context.md

81 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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-context
- `PrototypeStateStore` хранит live state per context
- последние изменения закоммичены в `feat/matrix-direct-agent-prototype`
Коммиты, которые важно знать:
- `c11c8ec` `feat(task-5): scope matrix context state per room`
- `07c5078` `feat(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.py`
- `external/platform-agent/src/agent/service.py`
- `external/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
1. Где должен жить shared storage: host path, docker volume или platform-side volume?
2. Нужен ли немедленный upload API в platform-agent, или сначала достаточно shared path?
3. Должны ли файлы быть scoped per room/platform_chat_id, а не per user?
## Next Step For Another Agent
1. Подтвердить runtime-модель хранения файлов.
2. Проверить, как сейчас запускаются Matrix bot и platform-agent в реальной dev-схеме.
3. После выбора storage contract начать с изменений в Matrix attachment ingestion.
## Notes
- Контекст этой сессии сохранён как отдельный thread, потому что текущий следующий рискованный шаг уже не про context routing, а про файловый transport.
- Не смешивать этот трек с незавершённой историей про `!branch`: upstream branch/snapshot API всё ещё не подтверждён.