@sonenta/cli
Una línea de comandos ligera y scriptable para todo lo que de otro modo harías en el dashboard: importar un proyecto i18next existente, hacer push y pull de traducciones, comparar la CI con el remoto, publicar una release de CDN y crear un snapshot de los bundles para un build offline-first. MIT, en npm.
Instalación
Solo npm, no hay fórmula de Homebrew para la CLI. Requiere Node 18 o más reciente, e instala el comando sonenta.
terminal
1# instalar una vez, globalmente2npm i -g @sonenta/cli 4# o ejecutar sin instalar5npx @sonenta/cli <command>
Autenticarse
Cada llamada envía Authorization: ApiKey <prefix>.<secret> con el scope mcp:*. Inicia sesión una vez para almacenar la clave en ~/.sonenta/credentials, o define SONENTA_TOKEN en la CI.
terminal
1# interactivo, almacena la clave por host en ~/.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, sin prompt, la clave se lee del entorno6export SONENTA_TOKEN=snt_live_<prefix>.<secret>7sonenta push
Orden de resolución, gana el primero: la variable de entorno SONENTA_TOKEN, luego ~/.sonenta/credentials para el host activo. Genera la clave en Org Settings → API Keys con el scope mcp:*.
Configurar
sonenta init escribe un sonenta.config.json en tu repositorio (resuelto subiendo desde el directorio actual). Las credenciales viven aparte, por usuario, y nunca se commitean.
sonenta.config.json
1# commiteado en tu repositorio, ningún secreto aquí2{3 "host": "https://api.sonenta.dev",4 "project_uuid": "<project_uuid>",5 "version_slug": "main"6}
~/.sonenta/credentials
1# ~/.sonenta/credentials, modo 0600, por usuario, nunca commitear2{ "default": "https://api.sonenta.dev",3 "hosts": {4 "https://api.sonenta.dev": { "api_key": "snt_live_<prefix>.<secret>" }5 } }
version_slug vale main por defecto. Mantén la clave API fuera de sonenta.config.json, solo tiene su sitio en el archivo de credenciales o en SONENTA_TOKEN.
Comandos
Agrupados según lo que estés haciendo, configurar la autenticación y la config, inspeccionar un proyecto o sincronizar traducciones. Cada comando pasa por la superficie MCP y respeta sonenta.config.json.
Auth y config
sonenta login Almacenar una clave API para un host. Opciones
-
--host <url> Host API contra el que autenticarse. -
--token <key> Pasar la clave sin prompt en lugar de pedirla. -
--email <email> cmd_login_flag_email -
--default cmd_login_flag_default
Ejemplo
sonenta login --host https://api.sonenta.dev --token snt_live_<prefix>.<secret> sonenta logout Eliminar las credenciales almacenadas de un host. sonenta whoami Mostrar el host activo y una clave enmascarada. sonenta init Generar sonenta.config.json para un proyecto. Opciones
-
--project <uuid> UUID del proyecto a escribir en la config (obligatorio). -
--version <slug> Slug de versión a apuntar (por defecto main). -
--force Sobrescribir un archivo de config existente.
Ejemplo
sonenta init --project <uuid> --version main Inspeccionar
sonenta projects list Listar los proyectos accesibles para tu clave.
Ejemplo
sonenta projects list sonenta keys list Listar las claves con la forma namespace_slug/key_name. Opciones
-
--namespace <slug> Restringir a un namespace.
Ejemplo
sonenta keys list --namespace common sonenta status Comparar tu locales/ local con el remoto. Opciones
-
--language <code> Limitar la comparación a un idioma. -
--namespace <slug> Limitar la comparación a un namespace. -
--src <dir> Directorio de origen (por defecto locales).
Ejemplo
sonenta status sonenta missing Listar las claves faltantes detectadas en tiempo de ejecución. Opciones
-
--language <code> Filtrar por idioma. -
--namespace <slug> Filtrar por namespace. -
--limit <n> Limitar el número de filas.
Ejemplo
sonenta missing --limit 50 Importación y sincronización
sonenta import <files...> Importación i18next en una sola pasada, anidado o plano; crea las claves, actualiza las traducciones, idempotente. Opciones
-
--dry-run Solo vista previa; no envía nada. -
--status <draft|translated> Estado entrante (por defecto translated). -
--language <code> Forzar el idioma en lugar de deducirlo de la ruta. -
--namespace <slug> Forzar el namespace (obligatorio para un <lang>.json simple). -
--version <slug> Apuntar a una versión no predeterminada.
Ejemplo
sonenta import locales/fr/common.json sonenta push Hacer push de todo el árbol locales/ local en una sola llamada de import. Opciones
-
--src <dir> Directorio de origen (por defecto locales). -
--dry-run Solo vista previa; no envía nada. -
--status <state> Estado entrante (por defecto translated).
Ejemplo
sonenta push --dry-run sonenta pull Escribir las traducciones remotas en locales/<lang>/<namespace>.json (plano). Opciones
-
--language <code> Limitar a un idioma. -
--namespace <slug> Limitar a un namespace. -
--dest <dir> Directorio de destino (por defecto locales).
Ejemplo
sonenta pull --language fr sonenta export Exportar como JSON i18next, plano por defecto, --nested para árboles. Opciones
-
--nested Emitir árboles anidados en lugar de claves planas. -
--out <dir> Escribir archivos en un directorio en lugar de en stdout.
Ejemplo
sonenta export --nested --out ./dump sonenta releases publish Disparar una release de CDN; los bundles publicados se sirven a tus apps desde el CDN. Opciones
-
--version <slug> Versión a publicar (por defecto main). -
--dry-run Solo vista previa; no publica nada.
Ejemplo
sonenta releases publish sonenta snapshot Recuperar los bundles públicos del CDN en un módulo de build para el fallback offline-first del SDK. Opciones
-
--format <ts|json> Formato de salida: ts (por defecto) o json. -
--out <file> Escribir en un archivo en lugar de en stdout. -
--cdn <base> Base del CDN (por defecto https://cdn.sonenta.com).
Ejemplo
sonenta snapshot --out src/sonenta-bundles.ts Cada comando también acepta --host <url> para sobrescribir el host API configurado durante una sola ejecución.