Перейти к содержимому
Sonenta

CLI

v0.2.1 · npm · MIT

@sonenta/cli

Лёгкая и скриптуемая командная строка для всего, что вы иначе делали бы в дашборде: импортировать существующий проект i18next, отправлять и забирать переводы, сравнивать CI с удалённым состоянием, публиковать релиз CDN и снимать снапшоты бандлов для offline-first сборки. MIT, в npm.

Несовместимость · 0.1 → 0.2

Теперь весь CLI работает через поверхность MCP: ему нужен ключ API со скоупом mcp:* — ключи, ограниченные проектом, возвращают 403. Сгенерируйте такой ключ в дашборде в разделе Org Settings → API Keys и перевыпустите любой ключ, который вы использовали в 0.1.

Установка

Только 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.com3API key: snt_live_••••••••.••••••••••••••••4✓ сохранено для https://api.sonenta.com 6# CI — без запроса, ключ читается из окружения7export SONENTA_TOKEN=snt_live_<prefix>.<secret>8sonenta 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.com",4  "project_uuid": "<project_uuid>",5  "version_slug": "main"6}
~/.sonenta/credentials
1# ~/.sonenta/credentials — режим 0600, для каждого пользователя, никогда не коммитить2{ "default": "https://api.sonenta.com",3  "hosts": {4    "https://api.sonenta.com": { "api_key": "snt_live_..." }5  } }

version_slug по умолчанию равен main. Держите ключ API вне sonenta.config.json — ему место только в файле учётных данных или в SONENTA_TOKEN.

Команды

Сгруппированы по задачам — настроить аутентификацию и конфигурацию, проинспектировать проект или синхронизировать переводы. Каждая команда работает через поверхность MCP и учитывает sonenta.config.json.

Аутентификация и настройка

sonenta login Сохранить ключ API для хоста.

Опции

  • --host <url> Хост API, против которого аутентифицироваться.
  • --token <key> Передать ключ без запроса вместо ввода в приглашении.

Пример

sonenta login --host https://api.sonenta.com
sonenta logout Удалить сохранённые учётные данные для хоста.

Опции

Опций нет.

Пример

sonenta logout
sonenta whoami Показать активный хост и замаскированный ключ.

Опции

Опций нет.

Пример

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; подписанные SDK обновляются вживую.

Опции

  • --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 на время одного запуска.

Несовместимые изменения 0.1 → 0.2

Обновляетесь с 0.1? Два изменения требуют действий.

Далее