Версия 5.9.4#
18.08.2026
Вышел новый релиз Sherpa Orchestrator: Версия 5.9.4.
1. Безопасное и корректное подключение к Sherpa VNC#
В Sherpa VNC добавлена защищённая схема подключения RA2ne с обязательной проверкой ключа сервера по SHA-256. Учётные данные передаются только после совпадения заранее сохранённого отпечатка ключа. Попытка перейти на менее защищённый протокол отклоняется, а логин и пароль больше не добавляются в адрес новой вкладки и не остаются в истории браузера или журналах запросов.
В карточке Робота сохраняется отдельный отпечаток ключа для текущего Аккаунта. Для пароля применяется единое ограничение по длине и запрещаются пробельные символы. Это снижает риск подключения к подменённому серверу и передачи реквизитов посторонней стороне.
Также исправлено отображение цветов при подключении к Sherpa VNC. Данные изображения в формате BGR теперь преобразуются перед отрисовкой, поэтому рабочий стол удалённого Робота отображается с правильными цветами.
2. Улучшения экрана «Ресурсы» и Групп ресурсов#
На экране «Ресурсы» исправлена сортировка Групп ресурсов по колонке «Описание». Выбранное направление сортировки применяется ко всему списку, что помогает быстрее находить нужную группу.
Для каждого Аккаунта теперь создаётся собственная защищённая Группа ресурсов «All Assets». Новый или импортированный Ресурс связывается либо с выбранной Группой ресурсов, либо с группой «All Assets», если группа не указана. Одноимённые группы разных Аккаунтов больше не смешиваются.
Исправлена работа связей Ресурсов с Группами ресурсов. Список, карточка и экспорт используют фактически сохранённые связи. Дополнительные группы назначаются только явным действием добавления, а обычное редактирование Ресурса больше не создаёт лишние связи.
В API добавлен отдельный маршрут для получения Ресурсов выбранной Группы ресурсов:
GET /api/v1/asset_groups/{asset_group_guid}/assets
Ответ не содержит паролей и внутренних числовых идентификаторов. Это упрощает безопасную загрузку состава группы внешними интеграциями.
3. Управление Триггерами#
В таблице «Триггеры» исправлено отображение связанных Роботов, Групп роботов и Процессов. Сохранённые связи снова видны непосредственно в списке и не теряются при загрузке данных.
В таблице добавлена колонка «Триггер включен». Пользователь с правом изменения Триггеров может включить или выключить Триггер прямо в строке. При ошибке переключатель возвращается в прежнее состояние и появляется уведомление. Пользователь без необходимого права видит текущее состояние без возможности его изменить.
Исправлено массовое включение и выключение Триггеров. Ошибка при обработке одного Триггера больше не отменяет изменения остальных. После завершения операции таблица обновляется, а уведомление показывает количество состояний, которые сохранить не удалось. Если строки не выбраны, интерфейс предлагает сначала выбрать Триггеры.
Исправлено отображение Тегов задач в карточке Триггера. Ранее Тег задачи без GUID мог привести к ошибке всего списка Тегов задач и таблицы «Триггеры». Теперь существующие Теги задач получают GUID, а отдельная некорректная связь не блокирует открытие карточки.
Настройки «Удалённая отладка» и «Локальный запуск» Робота, а также проверка почтовых настроек Триггера переведены на рабочие методы API. При сохранении проверяются тип Робота, принадлежность Аккаунту, доступ к Папке объектов и права Пользователя. Проверка почты использует только сохранённый Триггер и требует право изменения Триггеров.
4. Фильтрация, сортировка и переходы между экранами#
Исправлена фильтрация Папок объектов по датам создания и изменения. Выбранный диапазон передаётся в API и применяется ко всему набору данных, а не только к уже загруженной странице таблицы.
Исправлена фильтрация списка Процессов по дате создания последней Работы. Фильтр применяется на сервере и корректно работает независимо от количества Процессов.
В таблице «Работы» снова отображаются Работы, связанные с Роботом или Процессом из выбранной Папки объектов. Пользователь может применять фильтр Папок объектов без потери доступных Работ.
На экране «Сообщения Роботов» сообщения по умолчанию отсортированы по дате создания: новые записи показываются сверху. Такой порядок сохраняется и при постраничном просмотре больших журналов.
На экране «Сообщения Роботов» исправлена колонка «Создано». Дата и время отображаются для сохранённых значений с часовым поясом, микросекундами и различными допустимыми разделителями.
Колонка «Работа» теперь показывает GUID той Работы, по которой выполняется фильтрация. При переходе на экран «Работы» активный фильтр виден отдельной меткой и может быть сброшен кнопкой с крестиком.
Исправлены переходы из «Аудита» и «Сообщений Роботов» к связанной Работе. Нужная запись открывается по GUID независимо от текущей страницы таблицы и количества загруженных Работ.
Страницы с таблицами больше не накапливают повторные подписки на обновление данных. После нескольких переходов на один экран событие от веб-сокета вызывает одно обновление таблицы вместо серии одинаковых запросов. Это делает интерфейс отзывчивее и уменьшает количество лишних загрузок.
5. Работы, Задачи, Процессы и Роботы#
Исправлено редактирование Версии процесса. Изменения имени, описания и файла теперь действительно сохраняются при отправке формы. Ранее сервер мог вернуть успешный ответ, не изменив данные.
В разделе «Действия» исправлено сохранение текущей Задачи перед переходом к следующей. Заполненные параметры сохраняются до выполнения перехода и больше не зависят от переведённого названия статуса.
В блоке «Изменить задачу» восстановлена возможность выбрать статус «Отложена» без обязательного указания даты отложенного запуска. Это сохраняет совместимость со сценариями, в которых дата назначается позднее.
В диалоге создания Работы исправлен выбор Робота и Процесса. Список больше не раскрывается из-за автоматической установки фокуса, не перекрывает соседние поля и позволяет выбрать значение одним нажатием.
Исправлено создание Координатора из диалога Робота. Пустые значения скрытых параметров удалённой отладки обрабатываются как выключенные настройки и больше не приводят к ошибке проверки данных.
Исправлена атомарная связь Работы и Задачи. Создание, изменение и клонирование Работы согласованно обновляют обе стороны связи. Параллельная попытка изменить уже занятую Задачу возвращает конфликт без частично сохранённых данных.
Повторное сохранение Работы с той же Задачей в MariaDB больше не возвращает ложный конфликт. При частичном изменении Работы дополнительно проверяется сохранённый Триггер и совместимость новых Процесса, Робота, Группы роботов и Задачи.
Повторная установка конечного статуса Работы не перезаписывает время завершения. Остановка или отмена незапущенной Работы корректно фиксирует время завершения.
Получение следующей Задачи допускает только переход из начального состояния в состояние выполнения. Наступившие отложенные Задачи предварительно переводятся в начальное состояние планировщиком. Это исключает преждевременную выдачу Задачи Роботу.
6. Пользователи, Аккаунты и Лицензии#
Формы Пользователя и Аккаунта теперь показывают понятную причину отказа, полученную от API, вместо служебного текста HTTP-статуса или непереведённого ключа. Например, при повторном использовании пароля отображается сообщение «Пароль уже использован», а при занятом Логине — «Логин уже используется».
Исправлено сохранение Пользователя и Аккаунта без изменения текущего Логина. Проверка уникальности выполняется только при фактической смене Логина, поэтому можно изменить пароль или другие поля без ложной ошибки «Логин уже используется».
Поиск и проверка уникальности Логинов приведены к единым правилам во всех интерфейсах Sherpa Orchestrator. Регистр символов учитывается так же, как в ранее действовавших сценариях, что исключает разные результаты при работе через старый и новый API.
Исправлена выдача Лицензии Роботу. Код запроса снова формируется по данным выбранного Робота, а обработка типа Лицензии одинаково работает с MariaDB и PostgreSQL.
Исправлена работа ожидающей активации Лицензии обслуживаемого Робота. Служебная информация Робота сохраняется до получения кода ответа и больше не блокируется преждевременной проверкой Лицензии.
7. Расширенный и безопасный Аудит#
В «Аудите» усилена защита секретных данных. Токены API, пароли, содержимое Ресурсов и чувствительные значения внутри параметров Триггеров и Заданий сохраняются в замаскированном виде, включая вложенные структуры данных. Если строку параметров невозможно безопасно разобрать, но она содержит пароль, её содержимое скрывается целиком.
Расширен перечень операций, которые фиксируются в «Аудите». Теперь журналируются включение и выключение Триггеров, смена продуктивной Версии процесса, снятие владельца Папки объектов, захват Задач, клонирование и импорт, очистка Журналов, изменение подписок на уведомления, назначение Ролей и операции подготовки Sherpa Autopilot.
Для массовых операций сохраняется количество изменённых записей. Администратор может понять масштаб выполненного действия без просмотра каждой сущности по отдельности.
Добавлены подробные события неудачного входа. Записываются отказ при парольной и OAuth-авторизации, срабатывание ограничения частоты запросов и ошибки проверки формы входа. Защита от частых повторов не позволяет бесконтрольно раздувать журнал.
Исправлены сообщения Login failed и Session expired для запросов API v1. Формулировки снова совместимы с прежними фильтрами «Аудита», поэтому существующие правила мониторинга продолжают находить события входа и истечения сессии.
При удалении объекта сохраняется его имя или заголовок. Администратор видит, какой именно объект был удалён, даже если в набор изменений попал только признак удаления.
Исправлена привязка событий к Пользователю при параллельной работе через интерфейс, API-токен и GUID Робота. Запись больше не получает имя Пользователя из другой активной сессии. Действия авторизованного Пользователя снова корректно отображаются в соответствующей колонке.
В карточке записи исправлено отображение Логина Аккаунта и Логина Пользователя. Карточка возвращает те же связанные данные, что и общий список.
Повышена точность записей: сохранение без фактических изменений больше не создаёт событие, одинаковые значения даты не считаются изменёнными, массивы отображаются без повторного кодирования, а новые объекты получают в сообщении имя вместо значения unknown.
Пустое значение пароля больше не заменяется отметкой о скрытом секрете. Администратор может отличить отсутствие значения от замаскированного пароля.
Добавлено архивирование «Аудита» во время плановой очистки. Записи переносятся в архив по тем же правилам, что Журналы, а ошибка архивации «Аудита» не прерывает очистку Журналов, Задач и Работ.
Адрес клиента определяется с учётом доверенных прокси. Заголовки прокси используются только для запросов от явно разрешённых адресов и подсетей, а в остальных случаях сохраняется непосредственный адрес подключения. Это предотвращает подмену адреса клиента через произвольные HTTP-заголовки.
Также улучшена надёжность почтовых записей «Аудита». Значения передаются в базу данных безопасным способом, а ошибка сохранения больше не остаётся незамеченной.
8. Установка с внешней PostgreSQL#
Добавлена установка Sherpa Orchestrator с внешней PostgreSQL. Новый экран в интерфейсе не появляется: изменения предназначены для администраторов, которые устанавливают и сопровождают систему.
Установщик определяет использование внешнего сервера, проверяет его доступность, наличие роли и базы данных. Если указаны административные реквизиты, недостающие объекты создаются автоматически. Если автоматическое создание невозможно, установка останавливается и выводит перечень ручных действий.
В документации добавлена отдельная инструкция по установке с внешней PostgreSQL. Это помогает обнаружить ошибку подключения до запуска системы и избежать неработающего интерфейса с ошибкой шлюза.
9. Надёжное обновление Sherpa Orchestrator#
Перед остановкой системы обновление проверяет комплектность поставки, одинаковую версию всех архивов, контрольные суммы, свободное место, версию Docker Compose, доступность внешней базы данных и состояние перехода на новые тома. Проблема обнаруживается до остановки работающей версии.
Перед загрузкой новых Docker-образов текущим образам назначаются резервные теги. При позднем сбое, если структура базы данных ещё не изменена, автоматически запускается прежняя версия.
Скрипт обновления находит собственную актуальную копию в новой поставке и передаёт ей управление. Новые проверки и шаги обновления выполняются сценарием текущего релиза, а не копией из предыдущей версии.
После обновления в интерфейсе отображается версия фактически установленной поставки. Значение версии обновляется в конфигурации и больше не остаётся равным версии первой установки.
Проверяются результаты распаковки, остановки и запуска контейнеров, миграций базы данных и ответа веб-интерфейса. При незавершённом шаге администратор получает конкретную причину и ненулевой код завершения вместо сообщения об успехе.
При ошибке миграции обновление не пытается автоматически запустить предыдущую версию на уже изменённой структуре базы данных. Администратору выводится безопасный порядок восстановления из резервной копии.
При остановке и повторном запуске учитываются включённые профили VNC и Vault. Отключённый сервис не остаётся работать после обновления, а нужный сервис не пропускается при запуске.
В резервную копию включается файл Docker Compose, старые копии автоматически ротируются, а пользовательские сертификаты не перезаписываются сертификатами из дистрибутива.
Загрузчик поставки проверяет, что все Docker-образы относятся к одной версии, и загружает Docker-образ Vault вместе с остальными компонентами. Это исключает запуск из несовместимого набора компонентов.
Исправлено определение результата миграций при запуске контейнера. Успех определяется реальным кодом завершения всех этапов, поэтому администратор больше не увидит сообщение Migration successful! после неудачной миграции.
10. Автоматическая подготовка и разблокировка Vault#
При установке Sherpa Orchestrator автоматически инициализирует Vault, включает требуемый режим хранения секретов и сохраняет рабочий токен в конфигурации. Если обнаружены существующие данные, повторная инициализация блокируется, чтобы не потерять сохранённые секреты.
При обновлении Vault автоматически разблокируется с использованием ранее сохранённых ключей. Если хранилище остаётся заблокированным, обновление завершается с явной ошибкой вместо ложного сообщения об успехе.
Новый экран в интерфейсе не появляется. Изменение упрощает работу администратора и снижает риск недоступности секретов после установки или перезапуска системы.
11. Защита OAuth, OIDC и LDAP#
Для входа через OAuth и OIDC добавлены одноразовый параметр состояния, PKCE S256, проверка защищённых адресов провайдера, ограничения размера ответов, запрет перенаправлений и ограничение частоты запросов. Это снижает риск подмены входа и повторного использования данных авторизации.
Адрес возврата OAuth должен быть постоянным HTTPS-адресом с путём /api/v1/system/oauth_hook. Если адрес не задан отдельно, он формируется на основе доменного имени Sherpa Orchestrator.
Для связи Пользователя с учётной записью провайдера по умолчанию используется неизменяемый идентификатор sub. Установка поддерживает одного настроенного провайдера. При смене провайдера или поля связи администратору необходимо перенести сохранённые Логины OAuth-пользователей.
Для LDAP включена проверка сертификата сервера, добавлены сетевые и операционные таймауты, безопасная обработка имён и фильтров каталога. Неоднозначный результат поиска приводит к отказу во входе, а ошибка неверного пароля отличается от недоступности LDAP-сервера.
Значение tls включает StartTLS, значение ssl используется для LDAPS, а сертификат сервера должен быть доверенным. Настроенный фильтр поиска применяется обязательно. Это делает поведение конфигурации однозначным и помогает избежать незаметного обхода ограничений каталога.
12. Защита пользовательских сессий и вход десктопного клиента#
После входа и выхода обновляются идентификатор пользовательской сессии и защитный токен. Запросы, изменяющие данные, проверяются на межсайтовую подделку, а сессия в cookie изолирована от авторизации по API-токену.
Исправлен вход десктопного клиента через:
POST /api/v1/session/login
Для первого запроса авторизации больше не требуется предварительно получать защитный токен. При этом защита сохраняется для выхода, OAuth и последующих операций с данными.
При истечении срока действия пользовательская сессия полностью уничтожается. После этого создаётся новая сессия и новый защитный токен, что исключает повторное использование устаревшего состояния.
13. Разграничение доступа между Аккаунтами и Папками объектов#
Усилена проверка принадлежности связанных сущностей текущему Аккаунту и доступной Папке объектов. Проверки применяются к Роботам, Группам роботов, Процессам, Очередям, Задачам, Ресурсам, Тегам задач и Ролям, в том числе при частичном обновлении.
При создании Папки объектов через API v1 от имени Пользователя текущий Пользователь автоматически назначается владельцем. Новая Папка объектов сразу появляется среди доступных ему объектов.
Исправлено снятие владельца Папки объектов. Операция изменяет фактическое поле владельца и больше не завершается успешным ответом без изменения данных.
Для изменения и удаления отдельных объектов проверка Аккаунта и Папки объектов выполняется непосредственно в операции базы данных. Запрос к чужому или недоступному объекту возвращает одинаковый ответ 404, не раскрывая его существование.
Роботу не выдаётся Работа, если Аккаунты Робота, Работы, Версии процесса или связанной Задачи не совпадают. Это предотвращает выполнение данных другого Аккаунта даже при повреждённой или вручную изменённой связи.
При импорте Версии процесса проверяется доступ к исходному Процессу и его Папке объектов. Версию нельзя перенести из скрытого или чужого Процесса.
14. Безопасное получение Задач Роботами#
При каждом запросе следующей Задачи проверяются активность Робота, принадлежность Аккаунту и Папке объектов, действующая Лицензия и доступный лицензионный слот.
Лицензионный слот резервируется до выдачи Задачи. Параллельные запросы двух отключённых Роботов больше не могут одновременно использовать единственный доступный слот.
GUID Робота разрешён только для получения следующей Задачи и не предоставляет доступ к остальным маршрутам API v1. Назначенная Лицензия проверяется перед каждой выдачей.
Фильтр статусов при получении Задачи принимает как одно значение, так и список значений. Время начала и изменения сохраняется в UTC, а отложенная Задача сравнивается с текущим временем независимо от настроек часового пояса соединения с базой данных.
15. Изменения API v1 для внешних интеграций#
API v1 теперь различает неверные учётные данные и недостаток прав стандартными ответами 401 и 403. API-токен, ключ Аккаунта, пользовательская сессия и GUID Робота имеют отдельные области применения. Это позволяет интеграциям точнее обрабатывать причины отказа.
Обновлены маршруты для специальных настроек Роботов, проверки почты и значений фильтров «Аудита»:
PATCH /api/v1/robots/{robot_guid}/remote_debugging
PATCH /api/v1/robots/{robot_guid}/local_run
POST /api/v1/schedules/{schedule_guid}/email_tests
GET /api/v1/audit/filter_values
Неработающие старые маршруты удалены. Интеграциям, использовавшим прежние адреса, необходимо перейти на новые методы.
Форматы запросов на изменение Аккаунтов, Папок объектов, Ресурсов, Задач, Работ, Журналов и Файлов стали строгими. Неизвестные поля отклоняются с ошибкой проверки данных. Родитель Папки объектов задаётся через parent_guid, а основной Дашборд выбирается отдельным методом API. Это помогает быстрее обнаруживать ошибочно сформированные запросы.
Удалён общий маршрут GET /api/v1/tasks. Для получения Задач используется маршрут выбранной Очереди:
GET /api/v1/queues/{queue_guid}/tasks
Список поддерживает фильтрацию и сортировку по комментарию, дате начала, сроку выполнения и другим полям таблицы.
Завершён переход API v1 для Ресурсов, Работ и Журналов на связи по GUID. Связанные сущности ищутся только в текущем Аккаунте и доступной Папке объектов. Межаккаунтные совпадения GUID при импорте Ресурсов отклоняются.
GUID связанных Задач, Работ, Папок объектов и Файлов приводятся к единому регистру. PostgreSQL больше не возвращает ложный ответ 404 для корректного идентификатора с заглавными буквами.
При создании Журнала проверяется совместимость указанного Робота со связанной Работой. Допускается непосредственный Робот Работы или участник назначенной Группы роботов. Несвязанного Робота указать нельзя.
Имена Тегов задач остаются регистрозависимыми: например, «Отчёт» и «отчёт» считаются разными Тегами задач. Сохранение Тегов задач и их связей выполняется согласованно, а повторное добавление не приводит к ошибке при параллельных запросах.
16. Файлы, экспорт и Журналы#
Улучшена загрузка, замена и скачивание Файлов и Версий процессов. Большие данные передаются потоково, а при ошибке базы данных изменения в файловом хранилище откатываются. Это снижает потребление памяти и предотвращает расхождение записи в базе с фактическим файлом.
Имена скачиваемых Файлов очищаются от управляющих символов и опасных частей пути перед добавлением в заголовок ответа или ZIP-архив. Это защищает интеграции и рабочие станции пользователей от подмены заголовков и записи файла за пределами выбранной папки.
Экспорт Ресурсов, Папок объектов, Работ и Журналов теперь требует явно передать GUID выбранной записи или список GUID. Пустой запрос больше не запускает выгрузку всех данных, включая чувствительные реквизиты Ресурсов.
Исправлена проверка ответов при скачивании Файлов и Версий процессов. Двоичный поток больше не обрабатывается как JSON, поэтому корректная загрузка не завершается ошибкой проверки OpenAPI.
При создании Файла сервер использует канонический GUID Папки из базы данных. Другой регистр символов в адресе запроса больше не приводит к сохранению содержимого в неверном каталоге.
Исправлена запись Журналов через API v1. Поддерживаются дополнительные поля и снимок экрана PNG в формате Base64 с проверкой типа и размера. Двоичное содержимое снимка не сохраняется в изменениях «Аудита».
Строка параметров и тела запросов больше не записываются в журнал доступа веб-сервера. Это снижает риск попадания токенов, паролей и других чувствительных данных в служебные файлы.
17. Встроенный просмотр документов#
Встроенный просмотрщик документов снова открывает файлы в клиентской поставке Sherpa Orchestrator. Сервер возвращает модули просмотрщика с корректным типом содержимого, поэтому браузер больше не блокирует их загрузку.
Новых кнопок или экранов не добавлено. Пользователь продолжает открывать документ привычным способом, но просмотр теперь работает без дополнительной настройки браузера или сервера.