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

4.9 KiB
Raw Blame History

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

Самый прагматичный 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 всё ещё не подтверждён.