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

CLI

v0.2.1 · npm · MIT

@sonenta/cli

Маленький скриптуемый CLI для всего, что ты иначе делал бы кликами в дашборде: bootstrap проекта, push и pull переводов, гейтинг CI на дрейф, просмотр очереди missing-keys. Лицензия MIT, поставка через npm и Homebrew.

Breaking · 0.1 → 0.2

The whole CLI now runs on the MCP surface, so it needs an API key with the mcp:* scope — project-scoped keys return 403. Generate one in the dashboard under Org Settings → API Keys and re-issue any key you used with 0.1.

Установка

Требуется Node 20 LTS или новее. Ставится два бинарника: verbumia и короткий алиас vrb — взаимозаменяемы.

terminal
1# поставить глобально один раз — bin "verbumia" плюс короткий алиас "vrb"2npm i -g @sonenta/cli 4# или использовать без установки5npx @sonenta/cli <command>

Аутентификация

Получи API-ключ в Org Settings → API Keys → Create в дашборде (секрет показывается один раз; скопируй полный vrb_live_<prefix>.<secret>). Используй scope project:read для status / pull / missing / projects, project:write — для push.

terminal
1# interactive — stores the key per host in ~/.verbumia/credentials (0600)2sonenta login --host https://api.sonenta.com3API key: vrb_live_••••••••.••••••••••••••••4✓ saved for https://api.sonenta.com 6# CI — no prompt, key read from the environment7export SONENTA_TOKEN=vrb_live_<prefix>.<secret>8sonenta push

Resolution order, first wins: the SONENTA_TOKEN environment variable, then ~/.verbumia/credentials for the active host. Mint the key under Org Settings → API Keys with the mcp:* scope.

Настрой проект

Запусти verbumia init в репо, чтобы создать verbumia.config.json в корне, или напиши вручную. CLI также автоопределяет verbumia.config.{ts,js,toml,yml}, если предпочитаешь один из этих форматов.

sonenta.config.json
1# committed to your repo — no secrets here2{3  "host": "https://api.sonenta.com",4  "project_uuid": "<project_uuid>",5  "version_slug": "main"6}
~/.verbumia/credentials
1# ~/.verbumia/credentials — mode 0600, per user, never commit2{ "default": "https://api.sonenta.com",3  "hosts": {4    "https://api.sonenta.com": { "api_key": "vrb_live_..." }5  } }

version_slug defaults to main. Keep the API key out of sonenta.config.json — it belongs in the credentials file or SONENTA_TOKEN only.

Команды

Каждая команда принимает --config <path>, чтобы указать на нестандартный конфиг, --token <vrb_live_…> для переопределения авторизации, и --json для машинно-читаемого вывода.

Auth & setup

sonenta login Интерактивный ввод API-ключа. CLI валидирует ключ через GET /v1/auth/me, затем сохраняет его в ~/.verbumia/credentials с правами 600.

Флаги

  • --host <url> API host to authenticate against.
  • --token <key> передать ключ инлайн (пропускает промпт; удобно для скриптов)

Пример

sonenta login --host https://api.sonenta.com
sonenta logout Стирает ~/.verbumia/credentials. Серверный отзыв не делает — для этого используй дашборд.

Флаги

Специфичных флагов нет. Используй глобальные флаги выше.

Пример

sonenta logout
sonenta whoami Печатает org, привязку к проекту и выданные scope'ы для активного ключа. Быстрый способ отладить сюрпризы вида «не тот аккаунт».

Флаги

Специфичных флагов нет. Используй глобальные флаги выше.

Пример

sonenta whoami
sonenta init Создаёт verbumia.config.json в текущем каталоге, проводя тебя по project_uuid, исходному языку и формату.

Флаги

  • --project <uuid> заранее заполнить project_uuid
  • --version <slug> Version slug to target (defaults to main).
  • --force Overwrite an existing config file.

Пример

sonenta init --project <uuid> --version main

Inspect

sonenta projects list Список проектов, к которым у активного ключа есть доступ.

Флаги

Специфичных флагов нет. Используй глобальные флаги выше.

Пример

sonenta projects list
sonenta keys list List keys as namespace_slug/key_name.

Флаги

  • --namespace <slug> Restrict to one namespace.

Пример

sonenta keys list --namespace common
sonenta status Только-чтение diff между локальными файлами и remote-проектом — added / removed / changed по локали и namespace. Без записи.

Флаги

  • --language <code> Limit the diff to one language.
  • --namespace <slug> Limit the diff to one namespace.
  • --src <dir> Source directory (defaults to locales).

Пример

sonenta status
sonenta missing Список накопленных событий missing-keys, собранных runtime SDK. Только чтение — удобно для триажа из терминала без открытия дашборда.

Флаги

  • --language <code> Filter by language.
  • --namespace <slug> Filter by namespace.
  • --limit <n> максимум строк (по умолчанию 20)

Пример

sonenta missing --limit 50

Import & sync

sonenta import <files...> One-shot i18next import — nested or flat; creates keys, upserts translations, idempotent.

Флаги

  • --dry-run Preview only; sends nothing.
  • --status <draft|translated> Incoming status (default translated).
  • --language <code> Force the language instead of inferring it from the path.
  • --namespace <slug> Force the namespace (required for a bare <lang>.json).
  • --version <slug> Target a non-default version.

Пример

sonenta import locales/fr/common.json
sonenta push Загружает локальные i18n-файлы в Verbumia: создаёт новые ключи, обновляет изменённые значения и решает по политике on-missing-key, когда ключ упомянут, но отсутствует на сервере.

Флаги

  • --src <dir> Source directory (defaults to locales).
  • --dry-run Preview only; sends nothing.
  • --status <state> Incoming status (default translated).

Пример

sonenta push --dry-run
sonenta pull Скачивает удалённые переводы в настроенный pull.dest_dir — атомарно по файлу. Заодно играет роль «export»: передай --format для конвертации на выходе.

Флаги

  • --language <code> Limit to one language.
  • --namespace <slug> Limit to one namespace.
  • --dest <dir> Destination directory (defaults to locales).

Пример

sonenta pull --language fr
sonenta export Export as i18next JSON — flat by default, --nested for trees.

Флаги

  • --nested Emit nested trees instead of flat keys.
  • --out <dir> Write files to a directory instead of stdout.

Пример

sonenta export --nested --out ./dump
sonenta releases publish Trigger a CDN release; subscribed SDKs refresh live.

Флаги

  • --version <slug> Version to publish (defaults to main).
  • --dry-run Preview only; publishes nothing.

Пример

sonenta releases publish
sonenta snapshot Fetch the public CDN bundles into a build-time module for offline-first SDK fallback.

Флаги

  • --format <ts|json> Output format: ts (default) or json.
  • --out <file> Write to a file instead of stdout.
  • --cdn <base> CDN base (defaults to https://cdn.sonenta.com).

Пример

sonenta snapshot --out src/verbumia-bundles.ts

Every command also accepts --host <url> to override the configured API host for a single run.

Известные грядущие breaking changes

Зафиксированы для прозрачности. Каждое прилетит в minor-релизе с deprecation-окном на один релиз — сиди на свежем @verbumia/cli, и увидишь предупреждение до поломки.

Дальше