Change language

Унифицированный интерфейс командной строки

Converged CLI — это ориентированный на оператора механизм выполнения команд. Он предоставляет единый
интерфейс команд для диагностики платформы, автоматизации, работы с хранилищем и
операций предметной области, позволяя при этом каждой возможности оставаться в собственном модуле
команд.

Модульная поверхность команд

Ядро CLI не содержит фиксированного реестра бизнес-команд. При запуске
оно считывает один или несколько каталогов, переданных через --commands, и загружает
выбранный модуль TypeScript для каждого раздела команд. Модуль экспортирует фабрику,
возвращающую процессор; процессор объявляет свои команды и направляет каждое
имя команды соответствующему обработчику.

bun cli <section> <command> [param] | | | +-> command handler v command module -> processor -> generated NRPC client

Это делает CLI расширяемым без изменения его среды выполнения. Решение или
продукт может добавить каталог команд, и новый модуль <section>.ts станет
новым разделом CLI. Ядро загружает для выполнения только запрошенный раздел,
поэтому необязательный или неисправный модуль не может помешать работе
несвязанных команд.

BaseCommandProcessor предоставляет общую карту команд, вывод справки, передачу
ошибок и единообразное поведение при перечислении. Модули сосредоточены на собственных
аргументах и действиях предметной области; средство запуска отвечает за настройку
соединения, отчёт о жизненном цикле, хронометраж, код завершения и закрытие канала.

Единая модель авторизации

Все модули команд с поддержкой NRPC используют один и тот же сеанс CLI и путь
авторизации. Сначала CLI считывает пользовательский JWT из локального файла сеанса,
а затем использует SERVICE_TOKEN, если сеанс недоступен. Пользовательский сеанс имеет
приоритет, поскольку действия оператора могут требовать идентификации вызывающего.

Токен передаётся во время общего рукопожатия Fujin WebSocket, а также
предоставляется конфигурации клиента NRPC. Если сохранённый сеанс отклонён,
средство запуска удаляет его из активного соединения и повторяет попытку один раз
с токеном сервиса, если он настроен. Ошибки аутентификации сообщаются единообразно,
с рекомендацией войти снова, вместо того чтобы заставлять отдельные модули команд
самостоятельно обрабатывать состояние токена.

Авторизация по-прежнему обеспечивается принимающим сервисом. CLI передаёт
учётные данные вызывающего и область действия рабочей среды; он не интерпретирует
разрешения и не предоставляет доступ локально. Команда может отказаться от канала WebSocket только
в том случае, если она намеренно обращается к конечной точке, не использующей NRPC,
например выполняет прямую диагностическую операцию.

Интеграция с NRPC

Модули команд создают клиентов из сгенерированных пакетов g-<service> и передают
им общую конфигурацию createCliNrpcClientConfig. NRPC сериализует типизированный
вызов метода в запрос WebSocket, адресованный логической цели Fujin
и сервису. Fujin перенаправляет его работающему узлу среды выполнения, а сервис
применяет свою обычную политику доступа перед выполнением метода.

Тот же канал поддерживает обычные методы «запрос-ответ» и потоковые
методы. Идентификаторы запросов, крайние сроки, порядок ответов и обработка
сбоев соединения централизованы в канале CLI, поэтому каждый модуль получает
одинаковое поведение без повторной реализации протокольного кода.

Граница ответственности

CLI отвечает за обнаружение команд, жизненный цикл выполнения команд, выбор
локального сеанса и общий канал клиента NRPC/WebSocket. Он не отвечает за бизнес-
логику предметной области, принятие решений о разрешениях, реализацию сервиса или маршрутизацию Fujin.
Эти обязанности остаются за модулями команд, внутренними сервисами и
инфраструктурой среды выполнения, принимающей вызов.