Как устроен Велес
Эта страница объясняет Велес как единый продукт. Внутренние названия компонентов здесь не важны: пользователь работает с Велесом, а Велес уже сам связывает чат, модели, инструменты, файлы, память и фоновые задачи.Общая схема
Поток сообщения
- Пользователь отправляет сообщение в Велес.
- Велес определяет текущую сессию, активную личность и загружает нужный контекст.
- Модель анализирует задачу.
- Если нужны действия, Велес использует инструменты: читает файлы, ищет информацию, обращается к памяти, создаёт задачу или запускает внешний сервис.
- Результаты инструментов возвращаются в модель.
- Велес сохраняет историю и показывает ответ пользователю.
Основные части
Встроенные модули продукта
Задачи, календарь и интерактивная почта подключены к шлюзу через небольшой статический реестр. Это не система установки расширений: Велес не ищет сторонние репозитории и не исполняет добавленный извне код. Реестр только связывает заранее собранный модуль с его жизненным циклом, маршрутами, обработчиками вызовов, средствами агента и, при необходимости, внешним контекстом. При запуске шлюз один раз читаетmodules.<id>.enabled. Для выключенного модуля не создаётся прикладная служба, не запускается фоновая работа, не регистрируются маршруты и средства агента. Nerve получает тот же снимок состояния от шлюза и скрывает соответствующие представления. Перечитывание секретов обновляет настройки уже включённых модулей, но не включает и не выключает их без перезапуска.
Постоянные данные остаются у Велеса и не переносятся в Nerve. Поэтому цикл «выключить — перезапустить — включить — перезапустить» возвращает прежние задачи, календарные источники и почтовый анализ.
Код каждого такого модуля собран вертикально в veles/modules/<id>/. Внутри находятся его
точка подключения module.py, прикладная служба, типы, маршруты, средства агента и адаптеры
внешних систем. Общий реестр и жизненный цикл находятся в veles/modules/manager.py, а
нейтральные примитивы проверки HTTP-запросов — в veles/api/http.py. Основной файл
veles/api/routes.py содержит только маршруты ядра и не знает о прикладных исключениях задач,
почты или календаря. Проверки доменов повторяют ту же структуру в tests/modules/<id>/.
veles/channels: это независимый способ доставки сообщений, а не часть интерактивного
почтового модуля.
Рабочая область
Рабочая область — это папка, с которой работает Велес. В ней могут находиться:- документы;
- заметки;
- файлы памяти;
- результаты работы;
- инструкции для поведения ассистента;
- файлы проекта.
SOUL.md в корне workspace задаёт личность main; дополнительные личности лежат в personalities/<id>/SOUL.md. У дополнительной личности может быть свой каталог personalities/<id>/skills, который подключается только для активной личности. Файл AGENTS.md остаётся общим проектным контекстом для всех личностей. Подробнее: Личности.
Память и история
История сессии нужна для текущего диалога. Память нужна для сведений, которые должны сохраниться надолго. Не всё из истории должно попадать в память. Хорошая память короткая, проверяемая и полезная в будущем: предпочтения пользователя, правила проекта, постоянные ограничения, важные решения.Инструменты
Инструменты позволяют Велесу выполнять практические действия:- читать и редактировать файлы;
- искать информацию;
- разбирать документы;
- обращаться к внешним сервисам;
- создавать фоновые задачи;
- работать с долговременной памятью.
Задачи и доска
Доска задач в интерфейсе — это клиент к задачам Велеса. Nerve не хранит состояние процесса самостоятельно: Локальные задачи остаются файлами в рабочей области. Задачи YouTrack и Bitrix24 не копируются туда: Велес получает их по настроенным адресам и недолго хранит последний удачный снимок каждого источника. При первом запросе страницы он объединяет локальные и внешние записи в отдельный краткоживущий снимок всей выдачи не более чем на две минуты; последующие страницы используют его непрозрачный идентификатор и потому не сдвигаются из-за параллельных изменений. Повторная синхронизация не создаёт дубликаты. «Поручить Велесу» — явное исключение: шлюз создаёт один обычный локальный файл задачи со структурированной ссылкой на внешнюю запись и запускает его через стандартный исполнитель. Повторный запрос на ту же внешнюю задачу возвращает существующий локальный файл. Этот путь не вызывает запись в YouTrack или Bitrix24 и никогда автоматически не завершает исходную задачу. Завершение во внешнем источнике остаётся отдельным подтверждаемым действием шлюза; Nerve не получает секреты внешних систем. Новые интеграции должны использовать/api/tasks/*. Старый путь /api/kanban/* оставлен только для совместимости.
