Консоль: обзор, доступ и навигация
Веб-консоль botruntime.ru: вход по учётной записи, воркспейсы и роли, командная палитра и карта разделов бота.
Консоль — веб-приложение для управления ботами в облаке botruntime.ru.
Это SPA поверх того же API, которым пользуются brt и ваши скрипты.
У консоли нет отдельной привилегированной двери. Она ходит по тем же публичным маршрутам API. Всё, что вы видите и меняете в консоли, доступно и напрямую по API. Консоль лишь даёт удобную оболочку.
Отсюда главный принцип: доступ в консоли — это членство в воркспейсе и роль, а не отдельный админский режим. Вы видите те воркспейсы и тех ботов, где состоит ваш аккаунт. И делаете ровно то, что разрешает роль. Супер-доступа мимо API нет.
Тонкий клиент
Консоль не хранит данные и не держит бизнес-логику. Она рендерит ответы API и отправляет обратно ваши действия.
Каждый запрос из браузера несёт токен и проходит ту же проверку тенантности, что и машинный вызов. Воркспейс и роль берутся из токена, а не из того, что нарисовано на экране.
Не можете сделать по API под своим токеном — не сделаете и из консоли. UI прячет недоступные кнопки заранее, но финальное слово за сервером.
Вход
Вы входите в консоль по учётной записи через внешний OIDC-провайдер. Провайдер подтверждает личность и выдаёт короткоживущий session-JWT. Пароли и профили людей платформа не хранит — только связку «аккаунт → его воркспейсы и роли».
JWT короткоживущий, поэтому консоль его не кэширует. Перед каждым запросом она
берёт у провайдера свежий токен и кладёт в заголовок Authorization. Истёкшая
сессия не тянется через долго открытую вкладку.
Мост «вход → сеть» работает по принципу fail-loud. Если данные запросятся раньше, чем провайдер готов, консоль поднимет явную ошибку и не пойдёт в сеть без авторизации. Тихого запроса «как-нибудь» не будет.
Выход — в меню аккаунта внизу сайдбара. Пока вы не вошли, консоль показывает только экран входа.
Выбранный воркспейс
Почти всё в консоли принадлежит воркспейсу: боты, участники, диалоги, таблицы,
интеграции. Поэтому у консоли всегда есть выбранный воркспейс. Он живёт в
localStorage и переживает перезагрузку вкладки. Переключатель — вверху сайдбара
слева.
Ключевой инвариант кэша: id выбранного воркспейса подмешивается в каждый ключ запроса. Данные разных воркспейсов лежат под разными ключами и не протекают друг в друга. Сменили воркспейс — увидели его данные, а не остатки предыдущего.
Пока воркспейс не выбран, разделы показывают приглашение выбрать или создать воркспейс. Не пустую страницу и не ошибку — это осознанное состояние.
Проект и окружения
В списке ботов одна карточка соответствует одному проекту. Development-runtime,
который создаёт brt dev, не становится вторым ботом в каталоге: он привязан к
production-боту как отдельное окружение того же проекта.
Переключатель Production / Development находится в общем топбаре и действует
на все разделы бота. После переключения консоль читает и изменяет данные
выбранного runtime: диалоги, события, логи, аналитику, Evals, таблицы, файлы,
интеграции и переменные. URL при этом продолжает указывать на проект, а не на
внутренний bot_id окружения.
Данные окружений не объединяются. У каждого runtime собственные диалоги, таблицы, файлы, подключения, секреты, логи и история качества. Переключатель меняет область запросов, но ничего не копирует между Production и Development.
Development нельзя создать без Production-проекта. brt dev передаёт
production-привязку из agent.json, а платформа атомарно создаёт runtime внутри
этого проекта. Запрос без родительского проекта отклоняется: окружение не может
оказаться отдельным ботом или потерять связь с общей карточкой.
У одного проекта может быть несколько Development-runtime. Каждый checkout или
разработчик хранит свою локальную привязку в gitignored agent.local.json,
поэтому их диалоги, настройки и история качества остаются независимыми.
Страница Окружения в настройках бота показывает Production и все связанные
Development-runtime: их числовые runtime ID, дату создания и обновления, число
диалогов и запусков Evals. Для Production она отдельно показывает текущую
сохранённую версию бандла. Development работает через живую сессию brt dev и
не обязан иметь такую версию. admin и owner могут дать Development понятное
имя или удалить его. Production удалить на этой странице нельзя.
На обзоре выбранного окружения доступность проверяется по supervisor. Статусы
«Работает», «Не запущен» и «Статус недоступен» не выводятся из даты изменения
или наличия версии: это отдельная живая проверка. Поэтому недоступная проверка
не выдаётся за подтверждённую остановку, а старый updatedAt — за сбой runtime.
Удаление Development необратимо удаляет только данные выбранного runtime:
диалоги, файлы, таблицы, интеграции, секреты и историю Evals. Сам проект,
Production и остальные Development продолжают работать. Если удалён runtime,
записанный в agent.local.json текущего checkout, следующий brt dev обнаружит,
что target больше не существует, создаст новый Development и обновит локальную
привязку.
Роли
Роль в текущем воркспейсе приходит из GET /v1/admin/me вместе со списком
воркспейсов. Она определяет, какие управляющие элементы вообще отрисуются.
| Роль | Что делает в консоли |
|---|---|
member | Читает данные бота: диалоги, события, логи, аналитику, evals, таблицы, файлы. |
admin | Всё выше плюс пишет конфигурацию, управляет Development-окружениями и читает аудит. |
owner | Всё выше плюс единолично управляет составом участников воркспейса. |
Гейтинг двойной. Консоль скрывает недоступные действия — форму добавления
участника видит только owner. Сервер перепроверяет право до выполнения.
Скрытая кнопка — удобство, реальная граница на бэкенде.
Строка владельца (owner) неизменяема: его роль нельзя понизить, а самого
владельца — удалить из воркспейса. Так воркспейс никогда не остаётся без
владельца. Полная матрица прав — на странице Воркспейсы, участники и
токены.
Карта навигации
Сайдбар контекстный. Вне бота он показывает разделы воркспейса. Внутри бота — переключатель ботов и разделы выбранного бота плюс ссылку назад к списку. Активный раздел подсвечивается по текущему маршруту.
Уровень воркспейса
| Раздел | Назначение |
|---|---|
| Боты | Список ботов воркспейса и вход в конкретного бота. |
| Участники | Люди в воркспейсе и их роли (управление — у owner). |
| Аудит | Журнал действий воркспейса (доступен admin и owner). |
Уровень бота
Разделы одного бота сгруппированы по назначению:
| Группа | Раздел | Что внутри |
|---|---|---|
| — | Обзор | Сводка по боту: статус, ключевые счётчики. |
| Монитор | Диалоги | Диалоги и сообщения бота, инспектор переписки. |
| События | Поток событий бота. | |
| Логи | Рантайм-логи бота. | |
| Аналитика | Агрегаты по диалогам и потреблению. | |
| Evals | История проверок качества, регрессии и результаты assertions. | |
| Операции | Безопасная история длительных действий интеграций. | |
| Знания | Таблицы | Строки таблиц бота, просмотр и правка. |
| Данные | Файлы | Файлы бота. |
| Подключения | Интеграции | Установленные интеграции и их подключение. |
| Настройки | Переменные | Зашифрованные write-only secrets/env бота. |
| Окружения | Production и Development-runtime: обновления, объём данных, имена и удаление ненужных Development. |
Значения secrets из раздела «Переменные» невосстановимы: платформа хранит их
зашифрованными и наружу не отдаёт. Задать secret можно в консоли или командой
brt secret set. Публичная конфигурация управляется отдельно через brt config.
Шелл
Оболочка одинакова на всех страницах:
- Хлебные крошки в топбаре собираются из маршрута и всегда показывают, где вы находитесь. Каждый уровень, кроме текущего, кликабелен.
- Переключатель воркспейса вверху сайдбара и переключатель бота внутри бота позволяют прыгать между тенантами и ботами, не возвращаясь к спискам.
- Переключатель Production / Development в топбаре выбирает runtime для всех разделов текущего проекта.
- Меню аккаунта и выход — внизу сайдбара, там же ссылка в настройки аккаунта.
Командная палитра
Палитра открывается по ⌘K (или Ctrl+K) на любой странице и даёт переход без мыши: к любому боту воркспейса, к разделам текущего бота, к общей навигации. Ввод фильтрует список, стрелки и Enter выбирают.
Две оси доступа
Доступ к платформе идёт по двум параллельным осям. Консоль работает по первой, автоматизация — по второй. Друг друга они не подменяют.
- Человеческий вход (OIDC). Вы входите в консоль по учётной записи.
Session-JWT ходит по human-дереву API (
/v1/admin/me,/v1/admin/workspaces/*). Scope — членство человека в воркспейсах. - Машинный доступ (ключ или PAT). После входа
brtработает с личным токеном (PAT) выбранного профиля, а production-команды конкретного бота — с привязанным ключом бота. Scope выводится из самих учётных данных.
Обычный путь входа в CLI — brt login: команда открывает device authorization
в браузере, после подтверждения предлагает выбрать воркспейс и сохраняет
профиль. PAT со страницы «Аккаунт» нужен для ручного входа через
brt login --no-device или автоматизации; его значение показывается ровно один
раз. Ключ бота также показывается ровно один раз — при выпуске — и безопасно
передаётся в brt link --key-stdin. Полная таксономия токенов и правила резолва
тенанта — на странице тенантности.
Секреты и токены не передавайте аргументами командной строки. Значение PAT или секрета задавайте через stdin или файл, иначе оно осядет в истории shell и списке процессов:
printf '%s' "$MY_SECRET" | brt secret set STRIPE_KEY