Skip to main content

Справочник возможностей интерфейса Велеса

Эта страница описывает расширенные функции графического интерфейса Велеса: поиск по чату, экспорт, файловый браузер, доску задач, предложения ассистента, настройки речи, лимиты, служебные события и используемые HTTP-маршруты.

Панели интерфейса

Чат

Панель чата поддерживает:
  • потоковый ответ ассистента;
  • группировку вызовов инструментов и их результатов;
  • сворачивание длинных технических блоков;
  • журнал действий и индикатор обработки;
  • подгрузку старой истории при прокрутке;
  • кнопку остановки ответа;
  • создание нового диалога;
  • открытие путей рабочей области из сообщений;
  • предпросмотр изображений, аудио и файловых вложений;
  • историю ввода и автодополнение названий сессий в поле сообщения.
Глобальный поиск по чату открывается из интерфейса или палитры команд и использует текущую историю сообщений. При переходе к найденному сообщению интерфейс разворачивает его, если оно было скрыто.

Режим «Проект»

Переключатель Обычный / Проект виден только в пустом диалоге и сбрасывается на Обычный при каждом создании диалога. Для проекта интерфейс показывает специальные сообщения в общей ленте диалога со следующими состояниями: Специальное сообщение имеет стабильный id: повторная доставка не создаёт дубль, а сообщение с меньшей revision не заменяет уже показанную новую редакцию. Если события пропущены, соединение восстановлено или пользователь сменил диалог, Nerve запрашивает свежий снимок у Велеса и при необходимости восстанавливает текущее действие в общей ленте. Продолжение проекта не отправляет исходное сообщение второй раз и не очищает уже подготовленные материалы. Сведения о запуске доступны и в сводке сессии, поэтому интерфейс может найти связанный проект после перезагрузки. Полное руководство: Режим «Проект».

Экспорт DOCX

Интерфейс Велеса умеет экспортировать разговор в DOCX на стороне браузера. Экспорт создаёт собственные части документа Word, включая word/numbering.xml, поэтому списки сохраняются как настоящие списки, а не как обычный текст.

Вложения и медиа

Интерфейс использует схему «сначала загрузить файл, потом отправить сообщение»:
  1. файл загружается через /api/gateway/attachments;
  2. сообщение отправляет ссылки на загруженные файлы;
  3. Велес приводит медиа к единому виду в message.attachments;
  4. браузер строит ссылки предпросмотра и скачивания через файловые маршруты рабочей области.
Поддерживаются изображения, документы и аудио. Файлы можно выбрать кнопкой, перетащить в область ввода или вставить изображение из буфера обмена. Для изображений есть полноэкранный просмотр и сжатие перед отправкой, если оно включено на стороне клиента.

Файловый браузер

Файловый браузер использует такие маршруты: Если рабочая область недоступна локально серверу интерфейса, чтение, запись, дерево, скачивание и удаление идут через внутренние вызовы Велеса. Локальные rename и move в таком режиме возвращают REMOTE_WORKSPACE, потому что сервер Nerve не может безопасно переставлять файлы в удалённой песочнице. Параметр includeHidden=true маршрута GET /api/files/tree включает папки с точкой, например .veles. По умолчанию они скрыты; параметр не меняет отдельные правила показа скрытых файлов. В удалённом режиме параметр без изменений передаётся в personalities.files.tree. Удаление окончательное: это не корзина и не скрытие файла из списка. Для текстового редактора действует ограничение размера содержимого около 1 МБ; активный изменённый файл сохраняется кнопкой с иконкой сохранения в панели вкладок или сочетанием Ctrl/Cmd+S. Маршрут /api/files/raw отдаёт поддерживаемые изображения и аудио для встроенного предпросмотра. Если файл находится только в рабочей области Велеса, Nerve получает его через файловые вызовы Велеса, поэтому вложения в чате снова показываются после перезагрузки страницы.

Память

Панель памяти показывает не сокращённый список строк, а полные документы из рабочей области Велеса:
  • USER.md — общий профиль пользователя; его безопасно ограниченная копия добавляется в контекст каждого обращения;
  • memory/MEMORY.md — отобранные долгосрочные сведения;
  • memory/**/*.md — дневные записи, резюме сессий и диалогов, включая memory/conversations/*.md.
Список строится рекурсивно и не ограничивается несколькими последними файлами. Каждая директория запрашивается отдельно с пределом 500 просмотренных записей, а общий обход останавливается после 1000 директорий или 20 000 записей. Если предел достигнут или метаданные отдельного пути недоступны, интерфейс показывает подробное предупреждение и сохраняет доступ к исправной части каталога. USER.md и memory/MEMORY.md всегда остаются в списке: отсутствующий файл, пустой файл и ошибка чтения показываются как разные состояния. Nerve не обрезает содержимое: до общего предела текстового файла около 1 МиБ USER.md показывается полностью, а превышение размера отображается отдельным состоянием. Ограничение активного профиля применяется только при сборке запроса к модели и не изменяет файл. Исторические документы доступны только для чтения; профиль и долгосрочную память можно править во встроенном редакторе. При конкурентном изменении файла сохранение останавливается и предлагает перечитать свежую версию, не уничтожая черновик. Эти маршруты не читают файловую систему контейнера Nerve. Они обращаются к рабочей области Велеса только через personalities.files.tree/read/write. Каталог загружается при открытии интерфейса или смене личности, а затем обновляется вручную кнопкой со стрелками в панели памяти. События изменения файлов и памяти не запускают фоновое перечитывание каталога; после внешнего изменения нажмите эту кнопку. После сохранения или добавления записи из самой панели она обновляет каталог как часть выполненного действия. Для одного текстового документа действует общий предел около 1 МБ. Память не предназначена для секретов и больших одноразовых фрагментов.

Личности, сессии и подспециалисты

Личности управляются через RPC personalities.* и хранятся в workspace как Markdown-файлы: SOUL.md для main и personalities/<id>/SOUL.md для дополнительных личностей. Они меняют identity-layer системного промпта и могут иметь собственные навыки в personalities/<id>/skills, но не создают отдельные workspace-файлы, память или cron. Подробнее: Личности. Окно создания нового диалога поддерживает два пути: ручной выбор личности из списка и Подобрать. При автоподборе пользователь вводит своё реальное первое сообщение, Nerve показывает состояние выбора личности, вызывает /api/personalities/select с этим текстом, получает рекомендованную root session, создаёт новый диалог с этой личностью и отправляет тот же текст первым сообщением в новой сессии. Панель личностей использует filesystem-backed personalities как авторитетный список и объединяет их с sessions.list: личности без текущей root session всё равно видны, а удалённые из файловой системы личности скрываются вместе с их дочерними сессиями. При выборе root personality Nerve открывает последний диалог этой личности, если он есть; иначе выбирает root session. Панель сессий использует внутренние вызовы Велеса:
  • sessions.history;
  • sessions.list;
  • sessions.activate;
  • sessions.patch;
  • chat.abort;
  • chat.send для создания подВелеса.
Интерфейс поддерживает:
  • дерево корневых и дочерних сессий;
  • подспециалистов;
  • переименование;
  • скрытые сессии;
  • признак непрочитанных сообщений;
  • стартовую инструкцию для новых подспециалистов;
  • сведения о модели сессии.
ПодВелес создаётся через обычное сообщение в чат: интерфейс формирует инструкцию на создание подВелеса и ждёт появления дочерней сессии в списке.

Доска задач и предложения

Панель задач покрывает:
  • создание задач;
  • колонки статусов;
  • быстрый просмотр;
  • боковую панель с деталями;
  • приоритеты и метки;
  • входящие предложения ассистента.
Входящие предложения показывают, что Велес предлагает создать или обновить задачу. Пользователь может принять или отклонить предложение. Это полезно для рабочих процессов, где ассистент не должен менять доску без подтверждения. Nerve не хранит состояние доски самостоятельно. Запросы идут на /api/tasks и проксируются в gateway Велеса; /api/kanban сохранён только как временный совместимый алиас для старого frontend-кода.

Расписания

Панель расписаний работает с:
  • GET /api/crons;
  • POST /api/crons;
  • PATCH /api/crons/:id;
  • DELETE /api/crons/:id;
  • POST /api/crons/:id/toggle;
  • POST /api/crons/:id/run;
  • GET /api/crons/:id/runs.
Через интерфейс можно создать задание, изменить его, отключить, запустить вручную и посмотреть прошлые запуски. Для изолированных agent-turn расписаний ручной запуск создаёт отдельную cron-сессию и записывает локальную запись ручного запуска, чтобы UI сразу показал последнее выполнение. Хранилище самих заданий привязано к рабочей области: <workspace>/cron/jobs.json.

Навыки

Панель навыков читает /api/skills. Каталог объединяет навыки активной личности, навыки рабочей области и встроенные навыки; версия активной личности имеет приоритет при совпадении имени. Описание навыка может переводиться по targetLanguage; кэш зависит от языка перевода и contentHash. Заголовки, статусы и пустые состояния панели берутся из локализаций Nerve, поэтому отображаются на выбранном языке интерфейса.

Секреты

Панель секретов работает поверх внутренних вызовов Велеса secrets.*:
  • GET /api/secrets — каталог целей с замаскированными значениями;
  • PUT /api/secrets/targets/:targetId — сохранить новое значение;
  • DELETE /api/secrets/targets/:targetId — удалить сохранённое значение;
  • POST /api/secrets/refresh — обновить статус;
  • POST /api/secrets/oauth/:provider/start — начать OAuth-поток;
  • GET /api/secrets/oauth/:provider/flows/:flowId — проверить OAuth-поток;
  • POST /api/secrets/oauth/:provider/flows/:flowId/complete — завершить OAuth-поток кодом или callback URL;
  • DELETE /api/secrets/oauth/:provider — отключить OAuth-профиль.
OAuth-потоки вроде Codex возвращают браузеру только ссылку и статус. Токены доступа и обновления остаются внутри зашифрованного хранилища Велеса. Сейчас серверный маршрут Nerve принимает OAuth-провайдер openai-codex; новые провайдеры требуют расширения серверной схемы. Подписи групп, статусы целей и действия в панели секретов также локализованы через общий язык интерфейса Nerve.

Настройки речи

Интерфейс разделяет:
  • режим распознавания речи: браузер, локальный обработчик или гибридный режим;
  • запись голосового ввода;
  • поддержку фразы пробуждения;
  • голосовые фразы;
  • настройки озвучивания ответов.
Основные маршруты: Голосовые сообщения помечаются префиксом [voice], чтобы внутренняя логика могла отличить голосовой ввод и при необходимости запустить озвучивание ответа.

Настройки интерфейса

Настройки внешнего вида управляют:
  • языком интерфейса;
  • темой;
  • шрифтом;
  • размером шрифта;
  • показом служебных событий и журнала действий.
Настройки подключения управляют адресом сервера Велеса, токеном и поведением при переподключении. Проверка входа использует /api/auth/status; вход и выход идут через /api/auth/login и /api/auth/logout. Раздел «Конфиг» в настройках читает и сохраняет config.json через шлюз Велеса. Интерфейс строится по серверной схеме, а вложенные объекты раздела выбираются вторым выпадающим списком: например, в channels отдельно открываются общие поля, Telegram и Email. После сохранения кнопка «Сохранить и перезапустить» планирует перезапуск шлюза. gateway.token в этом разделе не показывается; секреты отображаются только как заглушки. Кнопка «Править JSON» открывает полный физический config.json во вкладке файлового редактора. В этой вкладке видны gateway.token и секреты, если они записаны в файл открытым текстом. Сохранение проверяет JSON и схему Велеса, но не перезапускает шлюз; перезапуск выполняется вручную.

Лимиты и статус

Интерфейс показывает служебную информацию: Расход подключённых поставщиков, включая баланс OpenRouter и ограничения подписки OpenAI Codex, Nerve получает через WebSocket-метод Велеса providers.usage. Сервер Nerve не читает ~/.codex и не хранит отдельную копию учётных данных. Подробная панель строится по списку показателей из ответа, а в настройках внешнего вида можно выбрать показатель для компактного значка. Если Claude Code возвращает время сброса лимита без указания часового пояса, Nerve считает такое время всемирным координированным временем (UTC). Если часовой пояс указан в скобках, используется именно он. Эти данные помогают понять, где источник проблемы: в модели, сервере, токенах, лимитах или интерфейсе.

Графики и Markdown

Отрисовщик сообщений поддерживает:
  • Markdown;
  • действия для блоков кода;
  • извлечение встроенных графиков;
  • Lightweight Charts;
  • виджет TradingView;
  • блоки изменений и содержимого файлов.
Если Велес возвращает структурированный блок графика, интерфейс может показать его как интерактивный график, а не как простой текст.

Палитра команд и горячие клавиши

Палитра команд собирает быстрые действия: поиск, создание сессии, фокус ввода, переключение панелей и другие команды интерфейса. Горячие клавиши завязаны на useKeyboardShortcuts, useInputHistory и useTabCompletion: ввод поддерживает историю сообщений и автодополнение по сессиям. Escape сначала остаётся у открытых диалогов и всплывающих панелей. Общий обработчик интерфейса закрывает палитру, поиск или останавливает ответ только когда на экране нет диалогового слоя, который должен обработать клавишу сам.

Служебные события

Интерфейс слушает события WebSocket и server-sent events:
  • поток чата;
  • ход выполнения инструментов;
  • состояние ассистента;
  • события расписаний;
  • изменение памяти;
  • ошибки;
  • переподключение и восстановление.
При восстановлении мобильной вкладки интерфейс не должен полагаться только на переход состояния WebSocket. Надёжный путь — сверить chat.history и локальное состояние ответа. Результат chat.history применяется только пока выбран тот же диалог и после начала запроса не произошло более нового изменения переписки. Снимок истории объединяется с текущими сообщениями: он не должен удалять окончательный ответ, который уже пришёл через WebSocket, или ещё не отражённые на сервере сообщения пользователя. Если подряд отправлено несколько сообщений, сохраняются все такие сообщения, а не только последнее. Со стороны Велеса обычное входящее сообщение сохраняется до сжатия контекста. Дополнительные сообщения, подхваченные уже во время ответа, при окончательном сохранении сохраняют метаданные своих вложений, чтобы повторная загрузка истории могла восстановить предпросмотр и скачивание файлов.