@sonenta/cli
Лёгкая и скриптуемая командная строка для всего, что вы иначе делали бы в дашборде: импортировать существующий проект i18next, отправлять и забирать переводы, сравнивать CI с удалённым состоянием, публиковать релиз CDN и снимать снапшоты бандлов для offline-first сборки. MIT, в npm.
Установка
Только npm, Homebrew-формулы для CLI нет. Требуется Node 18 или новее; устанавливает команду sonenta.
terminal
1# установить один раз, глобально2npm i -g @sonenta/cli 4# или запустить без установки5npx @sonenta/cli <command>
Аутентификация
Каждый вызов отправляет Authorization: ApiKey <prefix>.<secret> со скоупом mcp:*. Войдите один раз, чтобы сохранить ключ в ~/.sonenta/credentials, либо задайте SONENTA_TOKEN в CI.
terminal
1# интерактивно, сохраняет ключ для каждого хоста в ~/.sonenta/credentials (0600)2sonenta login --host https://api.sonenta.dev --token snt_live_<prefix>.<secret>3Logged in as user@example.com (Acme Inc) on https://api.sonenta.dev. 5# CI, без запроса, ключ читается из окружения6export SONENTA_TOKEN=snt_live_<prefix>.<secret>7sonenta push
Порядок разрешения, выигрывает первый: переменная окружения SONENTA_TOKEN, затем ~/.sonenta/credentials для активного хоста. Создайте ключ в разделе Org Settings → API Keys со скоупом mcp:*.
Настройка
sonenta init создаёт sonenta.config.json в вашем репозитории (путь определяется поднятием вверх от текущего каталога). Учётные данные хранятся отдельно, для каждого пользователя, и никогда не коммитятся.
sonenta.config.json
1# закоммичено в ваш репозиторий, никаких секретов здесь2{3 "host": "https://api.sonenta.dev",4 "project_uuid": "<project_uuid>",5 "version_slug": "main"6}
~/.sonenta/credentials
1# ~/.sonenta/credentials, режим 0600, для каждого пользователя, никогда не коммитить2{ "default": "https://api.sonenta.dev",3 "hosts": {4 "https://api.sonenta.dev": { "api_key": "snt_live_<prefix>.<secret>" }5 } }
version_slug по умолчанию равен main. Держите ключ API вне sonenta.config.json, ему место только в файле учётных данных или в SONENTA_TOKEN.
Команды
Сгруппированы по задачам, настроить аутентификацию и конфигурацию, проинспектировать проект или синхронизировать переводы. Каждая команда работает через поверхность MCP и учитывает sonenta.config.json.
Аутентификация и настройка
sonenta login Сохранить ключ API для хоста. Опции
-
--host <url> Хост API, против которого аутентифицироваться. -
--token <key> Передать ключ без запроса вместо ввода в приглашении. -
--email <email> cmd_login_flag_email -
--default cmd_login_flag_default
Пример
sonenta login --host https://api.sonenta.dev --token snt_live_<prefix>.<secret> sonenta logout Удалить сохранённые учётные данные для хоста. sonenta whoami Показать активный хост и замаскированный ключ. sonenta init Сгенерировать sonenta.config.json для проекта. Опции
-
--project <uuid> UUID проекта для записи в конфигурацию (обязательно). -
--version <slug> Слаг версии, на который ориентироваться (по умолчанию main). -
--force Перезаписать существующий файл конфигурации.
Пример
sonenta init --project <uuid> --version main Инспекция
sonenta projects list Перечислить проекты, доступные вашему ключу.
Пример
sonenta projects list sonenta keys list Перечислить ключи в виде namespace_slug/key_name. Опции
-
--namespace <slug> Ограничить одним namespace.
Пример
sonenta keys list --namespace common sonenta status Сравнить ваш локальный locales/ с удалённым состоянием. Опции
-
--language <code> Ограничить сравнение одним языком. -
--namespace <slug> Ограничить сравнение одним namespace. -
--src <dir> Исходный каталог (по умолчанию locales).
Пример
sonenta status sonenta missing Перечислить отсутствующие ключи, обнаруженные во время выполнения. Опции
-
--language <code> Фильтровать по языку. -
--namespace <slug> Фильтровать по namespace. -
--limit <n> Ограничить количество строк.
Пример
sonenta missing --limit 50 Импорт и синхронизация
sonenta import <files...> Однопроходный импорт i18next, вложенный или плоский; создаёт ключи, обновляет переводы, идемпотентен. Опции
-
--dry-run Только предпросмотр; ничего не отправляет. -
--status <draft|translated> Входящий статус (по умолчанию translated). -
--language <code> Принудительно задать язык вместо вывода его из пути. -
--namespace <slug> Принудительно задать namespace (обязательно для голого <lang>.json). -
--version <slug> Нацелиться на версию, отличную от версии по умолчанию.
Пример
sonenta import locales/fr/common.json sonenta push Отправить всё локальное дерево locales/ одним вызовом импорта. Опции
-
--src <dir> Исходный каталог (по умолчанию locales). -
--dry-run Только предпросмотр; ничего не отправляет. -
--status <state> Входящий статус (по умолчанию translated).
Пример
sonenta push --dry-run sonenta pull Записать удалённые переводы в locales/<lang>/<namespace>.json (плоско). Опции
-
--language <code> Ограничить одним языком. -
--namespace <slug> Ограничить одним namespace. -
--dest <dir> Каталог назначения (по умолчанию locales).
Пример
sonenta pull --language fr sonenta export Экспортировать в JSON i18next, плоско по умолчанию, --nested для деревьев. Опции
-
--nested Выводить вложенные деревья вместо плоских ключей. -
--out <dir> Записывать файлы в каталог вместо stdout.
Пример
sonenta export --nested --out ./dump sonenta releases publish Запустить релиз CDN; опубликованные бандлы отдаются вашим приложениям с CDN. Опции
-
--version <slug> Версия для публикации (по умолчанию main). -
--dry-run Только предпросмотр; ничего не публикует.
Пример
sonenta releases publish sonenta snapshot Загрузить публичные бандлы CDN в build-time модуль для offline-first запасного варианта SDK. Опции
-
--format <ts|json> Формат вывода: ts (по умолчанию) или json. -
--out <file> Записывать в файл вместо stdout. -
--cdn <base> База CDN (по умолчанию https://cdn.sonenta.com).
Пример
sonenta snapshot --out src/sonenta-bundles.ts Каждая команда также принимает --host <url>, чтобы переопределить настроенный хост API на время одного запуска.