Задача: Сделать ядро сервиса агентов и диалогов

Сделать ядро сервиса агентов и диалогов

Центральное хранение сайтов, агентов, диалогов и сообщений.

Реализовать базовые сущности и API центрального сервиса: наши сайты, связанные с ними агенты, диалоги и сообщения. Агент сайта должен работать через этот сервис, а не как отдельная независимая система.

Ворклоги

Серверный фундамент и LLM/API

По фактическому состоянию проекта реализован базовый серверный слой центра агентов:

  • добавлены GraphQL-операции llmChatCompletion, llmCompletion, llmImageGeneration, llmSpeechGeneration;
  • общий LLM-клиент поддерживает Local и OpenRouter, ключи остаются на сервере;
  • добавлен общий контекст выполнения и WebSocket-транспорт GraphQL;
  • GraphQL LLM-операции сейчас защищены авторизацией активного пользователя;
  • реализованы PostgreSQL/Prisma и серверный слой аккаунтов (User, Token, регистрация, вход, профиль, сессии, JWT + проверка сохранённой сессии, bcrypt, отзыв сессий);
  • добавлен bootstrap БД и исправлен production-запуск/сборка.

Связанные коммиты, зафиксированные в аудите: d3bea97, ea2c78e, b8ce41b, bc95738.

Повторно подтверждено локально: TypeScript checks успешны, соответствие БД Prisma-контракту успешно, подключение к agents-center с хоста и из контейнера успешно, новый сервер на порту 3001 отвечает HTTP 200, через прокси на 8080 также HTTP 200.

Важно: постоянное хранение разговоров и полноценные сущности сайтов/агентов/диалогов/сообщений как продуктовый слой ещё не завершены.

HTTP-чат и минимальная событийная реакция агента

Реализованы серверные контракты, на которых может строиться центральный сервис диалогов:

  • POST /api/chat поддерживает обычный JSON и потоковый NDJSON;
  • единый ExecutionContext несёт execution id, режим ответа, abort signal и отправку событий;
  • поддержаны старт, последовательные delta, успешное завершение, ошибка и отмена;
  • есть явная отмена через DELETE, отмена при disconnect/timeout/shutdown и независимость параллельных запусков;
  • реализованы класс Agent и POST /api/agent с цепочкой message.received → Agent.react → message.publish;
  • действия связаны со stimulus через stimulusId, фрагменты одного ответа имеют общий actionId;
  • мок реакции уже заменён реальным вызовом существующего runChat/LLM.

Повторные проверки из аудита: HTTP-чат 8/8 тестов, реакции агента 2/2 теста.

Это фундамент диалоговой части, но пока без постоянной памяти разговора, дедупликации событий и общей модели сайтов/посетителей/диалогов.