engram

Протокол

Unix socket JSON протокол и trainer stdout протокол

Протокол

Engram использует два JSON-протокола: Unix socket для связи MCP-сервер -> Rust core, и stdout JSON Lines для связи Rust core -> trainer.

Unix socket протокол

Связь между MCP-сервером и Rust core осуществляется через Unix socket с newline-delimited JSON.

Формат запроса

{
  "id": "uuid-запроса",
  "method": "memory_search",
  "params": {
    "query": "auth middleware",
    "limit": 10
  }
}
ПолеТипОписание
idstringUUID для корреляции запроса и ответа
methodstringИмя метода (совпадает с именем MCP-инструмента)
paramsobjectПараметры метода

Формат ответа (успех)

{
  "id": "uuid-запроса",
  "ok": true,
  "data": {
    "memories": [],
    "count": 0
  },
  "error": null
}

Формат ответа (ошибка)

{
  "id": "uuid-запроса",
  "ok": false,
  "data": null,
  "error": {
    "code": 1002,
    "message": "[1002] not found: memory abc-123"
  }
}
ПолеТипОписание
idstringUUID запроса
okbooleanУспешность операции
dataobject/nullДанные при успехе
errorobject/nullОшибка при неудаче
error.codenumberЧисловой код ошибки
error.messagestringТекстовое описание ошибки

Разделитель

Каждое сообщение (запрос или ответ) завершается символом \n (newline). Одна строка = один JSON-объект.

Доступные методы

МетодОписание
memory_storeСохранить запись
memory_searchПоиск записей
memory_judgeОценить запись
memory_statusСтатус системы
memory_configЧтение конфигурации
memory_exportЭкспорт записей
memory_importИмпорт записей
memory_consolidate_previewПревью консолидации
memory_consolidateLLM-анализ кандидатов
memory_consolidate_applyПрименение рекомендаций
memory_train_generateГенерация insights
memory_train_listСписок insights
memory_train_deleteУдаление insight

Trainer stdout протокол

Trainer (Python) выводит результаты в stdout как JSON Lines. Каждая строка — JSON-объект с обязательным полем type.

progress

Прогресс выполнения этапа.

{
  "type": "progress",
  "stage": "clustering",
  "percent": 45.0
}

insight

Сгенерированный insight для сохранения как запись памяти.

{
  "type": "insight",
  "id": "uuid",
  "context": "Обнаружен кластер из 5 записей об обработке ошибок auth",
  "action": "Использовать единый middleware для валидации токенов",
  "result": "Уменьшение дублирования кода на 60%",
  "insight_type": "cluster",
  "tags": "auth,middleware",
  "source_ids": "id1,id2,id3"
}

recommendation

Рекомендация по существующей записи.

{
  "type": "recommendation",
  "target_id": "uuid-существующей-записи",
  "action": "merge",
  "reasoning": "Записи описывают одно и то же решение с разных сторон"
}

metric

Метрика анализа.

{
  "type": "metric",
  "name": "cluster_count",
  "value": 12.0
}

artifact

Информация о созданном файле (ONNX-модель, токенизатор).

{
  "type": "artifact",
  "path": "/home/user/.engram/models/text_generator.onnx",
  "size_bytes": 15728640
}

complete

Завершение работы trainer.

{
  "type": "complete",
  "insights_generated": 7,
  "duration_secs": 42.5
}

Маршрутизация

Rust core использует dispatch.rs для маршрутизации запросов по полю method. Неизвестные методы возвращают ошибку 6007 (DispatchError).

Trainer вызывается синхронно через tokio::process::Command с таймаутом. Stdout парсится построчно через serde_json::from_str с тегированной десериализацией (#[serde(tag = "type")]).