Справочник возможностей интерфейса Велеса
Эта страница описывает расширенные функции графического интерфейса Велеса: поиск по чату, почту, экспорт, файловый браузер, доску задач, предложения ассистента, настройки речи, лимиты, служебные события и используемые HTTP-маршруты.Панели интерфейса
Чат
Панель чата поддерживает:- потоковый ответ ассистента;
- группировку вызовов инструментов и их результатов;
- сворачивание длинных технических блоков;
- журнал действий и индикатор обработки;
- подгрузку старой истории при прокрутке;
- нижнюю панель действий: экспорт оформлен такой же компактной кнопкой, как голос и вложение; общий выбор модели и уровня рассуждения, переключатель режима первого сообщения и кнопка отправки находятся рядом, а во время подготовки ответа кнопка отправки превращается в кнопку остановки;
- создание нового диалога;
- открытие путей рабочей области из сообщений;
- предпросмотр изображений, аудио и файловых вложений;
- историю ввода и автодополнение названий сессий в поле сообщения.
Режим «Проект»
Переключатель Обычный / Проект виден только в пустом диалоге и сбрасывается на Обычный при каждом создании диалога. Для проекта интерфейс показывает специальные сообщения в общей ленте диалога со следующими состояниями:
Специальное сообщение имеет стабильный
id: повторная доставка не создаёт дубль, а сообщение с меньшей revision не заменяет уже показанную новую редакцию. Если события пропущены, соединение восстановлено или пользователь сменил диалог, Nerve запрашивает свежий снимок у Велеса и при необходимости восстанавливает текущее действие в общей ленте. Продолжение проекта не отправляет исходное сообщение второй раз и не очищает уже подготовленные материалы.
Сведения о запуске доступны и в сводке сессии, поэтому интерфейс может найти связанный проект после перезагрузки. Полное руководство: Режим «Проект».
Экспорт DOCX
Интерфейс Велеса умеет экспортировать разговор в DOCX на стороне браузера. Кнопка экспорта находится в нижней панели чата рядом с кнопками микрофона и вложения. Пока в диалоге нет сообщений, она недоступна.
Экспорт создаёт собственные части документа Word, включая
word/numbering.xml, поэтому списки сохраняются как настоящие списки, а не как обычный текст.
Вложения и медиа
Интерфейс использует схему «сначала загрузить файл, потом отправить сообщение»:- файл загружается через
/api/gateway/attachments; - сообщение отправляет ссылки на загруженные файлы;
- Велес приводит медиа к единому виду в
message.attachments; - браузер строит ссылки предпросмотра и скачивания через файловые маршруты рабочей области.
Файловый браузер
Панель файлов закрывается кнопкой в её заголовке. Когда панель закрыта, в верхней панели рядом с переключателями разделов появляется кнопка её открытия. На компьютере и мобильном устройстве панель также переключается сочетаниемCtrl/Cmd+B.
Файловый браузер использует такие маршруты:
Если рабочая область недоступна локально серверу интерфейса, проверка пути, чтение, запись, дерево, скачивание и удаление идут через внутренние вызовы Велеса. Поэтому ссылки на файлы из сообщений, сведения об ошибках проекта и каталоги открываются и в удалённой рабочей области. Локальные
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.
USER.md и memory/MEMORY.md всегда остаются в списке: отсутствующий файл, пустой файл и ошибка чтения показываются как разные состояния. Nerve не обрезает содержимое: до общего предела текстового файла около 1 МиБ USER.md показывается полностью, а превышение размера отображается отдельным состоянием. Ограничение активного профиля применяется только при сборке запроса к модели и не изменяет файл. Исторические документы доступны только для чтения; профиль и долгосрочную память можно править во встроенном редакторе. При конкурентном изменении файла сохранение останавливается и предлагает перечитать свежую версию, не уничтожая черновик.
Эти маршруты не читают файловую систему контейнера Nerve. Они обращаются к рабочей области Велеса только через
personalities.files.tree/read/write. Каталог загружается при открытии интерфейса или смене личности, а затем обновляется вручную кнопкой со стрелками в панели памяти. События изменения файлов и памяти не запускают фоновое перечитывание каталога; после внешнего изменения нажмите эту кнопку. После сохранения или добавления записи из самой панели она обновляет каталог как часть выполненного действия. Для одного текстового документа действует общий предел около 1 МБ.
Память не предназначена для секретов и больших одноразовых фрагментов.
Личности, сессии и подспециалисты
Личности управляются через RPCpersonalities.* и хранятся в 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для создания подВелеса.
- дерево корневых и дочерних сессий;
- подспециалистов;
- переименование;
- скрытые сессии;
- признак непрочитанных сообщений;
- стартовую инструкцию для новых подспециалистов;
- сведения о модели сессии.
Доска задач и предложения
Панель задач покрывает:- создание задач;
- колонки статусов;
- быстрый просмотр;
- боковую панель с деталями;
- приоритеты и метки;
- объединённое чтение локальных задач, YouTrack и Bitrix24;
- обозначение источника и переход к исходной задаче;
- диагностику, ручное обновление и фильтрацию по источнику;
- поручение внешней задачи Велесу через связанную локальную задачу;
- завершение внешней задачи через Велес;
- входящие предложения ассистента.
/api/tasks и проксируются в шлюз Велеса; /api/kanban сохранён только как временный совместимый псевдоним для старого кода интерфейса.
Расписания
Панель расписаний работает с: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.
<workspace>/cron/jobs.json.
Навыки
Панель навыков читает/api/skills. Каталог объединяет навыки активной личности, навыки рабочей области и встроенные навыки; версия активной личности имеет приоритет при совпадении имени.
Исходное поле description не изменяется. По targetLanguage маршрут добавляет translatedDescription из общего кэша либо пустую строку и не обращается к языковой модели во время чтения. Такой же контракт действует для навыков внутри GET /api/skill-marketplaces.
В конце непустого описания находится кнопка перевода. Она вызывает POST /api/skills/translate с исходным описанием и текущим языком интерфейса; во время запроса показывает индикатор загрузки, а после успеха заменяет видимый текст. Кэш в памяти использует SHA-256 описания и язык, хранит не более 1000 записей и удаляет каждую запись через 60 минут после создания.
Заголовки, статусы и пустые состояния панели берутся из локализаций Nerve, поэтому отображаются на выбранном языке интерфейса.
Кнопка со значком загрузки и подсказкой «Установить» открывает отдельное полноразмерное окно с разделами «Каталог навыков» и «Маркетплейсы». На мобильном устройстве панель навыков при этом закрывается, поэтому она не перекрывает открытый каталог. Кнопка оформлена так же, как соседняя кнопка обновления. Первый раздел группирует доступные навыки по источникам, позволяет синхронизировать каждый источник и устанавливать навык в общую папку <workspace>/skills. Если у навыка отсутствуют секреты или настройки, перед установкой открывается диалог их заполнения. В этом диалоге прокручивается только область с ошибкой и полями, а заголовок и нижние кнопки остаются на месте. Под каждым ограниченным параметром постоянно показываются допустимый числовой диапазон, длина строки и требуемый формат. Некорректный параметр или незаполненный обязательный секрет выделяется цветом и получает отдельное объяснение ошибки; блокировка нижней кнопки остаётся дополнительной защитой. После установки рядом со статусом появляется кнопка «Редактировать настройки» стандартного размера: она использует общее оформление кнопок со значками и тот же размер, что действия синхронизации и изменения маркетплейса. Если хотя бы один обязательный секрет или параметр не настроен, кнопка становится янтарной, а её подсказка меняется на «Нужна настройка — редактировать»; отдельная метка рядом со статусом «Установлен» не показывается. Если объявленная навыком командная программа не найдена, внизу карточки показывается причина «Не хватает: CLI: …». Это информационное предупреждение не отключает установку и показывается также для уже установленного навыка. Синхронизация маркетплейса принудительно обновляет сведения о доступности его командных программ. Имя ветки в списке навыков не показывается. Второй раздел управляет конфигурациями источников.
Форма поддерживает GitHub и GitLab и для обоих типов показывает одинаковые поля: адрес репозитория и необязательную ветку. GitHub принимает публичный адрес HTTPS на github.com; GitLab принимает адрес HTTP или HTTPS на любом узле, включая самостоятельные установки, нестандартные порты и вложенные группы. Например, допустим адрес http://git.alor.ru/ai/alor-skills. При изменении маркетплейса его тип показывается без возможности замены. Nerve передаёт только общие поля type, displayName и settings; клонирование, проверку описаний и файловые операции выполняет шлюз. Кнопки изменения и удаления показываются только по серверным флагам editable и removable. У пользовательских записей оба флага равны true, у предопределённых — false. Создание, изменение и удаление маркетплейса применяются без перезапуска шлюза, поэтому соединение с 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-профиль.
openai-codex; новые провайдеры требуют расширения серверной схемы.
Подписи групп, статусы целей и действия в панели секретов также локализованы через общий язык интерфейса Nerve.
Панель не выводит общие предупреждения из каталога секретов. Если у конкретной цели есть ошибка, 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 получает через веб-сокет-метод Велеса
providers.usage. Сервер Nerve не читает ~/.codex и не хранит отдельную копию учётных данных. Подробная панель строится по списку показателей из ответа, а в настройках внешнего вида можно выбрать показатель для компактного значка.
Для OpenAI Codex Велес берёт длительность ограничения из limit_window_seconds, поэтому семидневное основное окно называется недельным, даже если поставщик вернул его как primary_window. Пятичасовое, дневное и другие окна получают подпись по своей фактической длительности на русском и английском языках.
Выбранный показатель сохраняется в interface.usageBadgeMetric файла config.json через методы interface.preferences.get и interface.preferences.set. Перезапуск шлюза для этого не нужен. Локальное хранилище браузера остаётся временным запасным вариантом и источником однократного переноса старого выбора; после подключения источником истины служит Велес.
Если Claude Code возвращает время сброса лимита без указания часового пояса, Nerve считает такое время всемирным координированным временем (UTC). Если часовой пояс указан в скобках, используется именно он.
Эти данные помогают понять, где источник проблемы: в модели, сервере, токенах, лимитах или интерфейсе.
Графики и Markdown
Отрисовщик сообщений поддерживает:- Markdown;
- действия для блоков кода;
- извлечение встроенных графиков;
- Lightweight Charts;
- виджет TradingView;
- блоки изменений и содержимого файлов.
Палитра команд и горячие клавиши
Палитра команд собирает быстрые действия: поиск, создание сессии, фокус ввода, переключение панелей и другие команды интерфейса. Горячие клавиши завязаны наuseKeyboardShortcuts, useInputHistory и useTabCompletion: ввод поддерживает историю сообщений и автодополнение по сессиям. В многострочном поле Enter добавляет новую строку, а Shift+Enter отправляет сообщение.
Escape сначала остаётся у открытых диалогов и всплывающих панелей. Общий обработчик интерфейса закрывает палитру, поиск или останавливает ответ только когда на экране нет диалогового слоя, который должен обработать клавишу сам.
Служебные события
Интерфейс слушает события WebSocket и server-sent events:- поток чата;
- ход выполнения инструментов;
- состояние ассистента;
- события расписаний;
- изменение памяти;
- ошибки;
- переподключение и восстановление.
chat.history и локальное состояние ответа.
Результат chat.history применяется только пока выбран тот же диалог и после начала запроса не произошло более нового изменения переписки. Снимок истории объединяется с текущими сообщениями: он не должен удалять окончательный ответ, который уже пришёл через WebSocket, или ещё не отражённые на сервере сообщения пользователя. Если подряд отправлено несколько сообщений, сохраняются все такие сообщения, а не только последнее.
Со стороны Велеса обычное входящее сообщение сохраняется до сжатия контекста. Дополнительные сообщения, подхваченные уже во время ответа, при окончательном сохранении сохраняют метаданные своих вложений, чтобы повторная загрузка истории могла восстановить предпросмотр и скачивание файлов.