@sonenta/cli
Uma linha de comandos leve e programável para tudo o que, de outra forma, faria no dashboard: importar um projeto i18next existente, enviar e obter traduções, comparar a CI com o remoto, publicar uma release CDN e capturar um snapshot dos bundles para um build offline-first. MIT, no npm.
Instalar
Apenas npm, não existe fórmula Homebrew para a CLI. Requer Node 18 ou mais recente e instala o comando sonenta.
terminal
1# instalar uma vez, globalmente2npm i -g @sonenta/cli 4# ou executar sem instalar5npx @sonenta/cli <command>
Autenticar
Cada chamada envia Authorization: ApiKey <prefix>.<secret> com o scope mcp:*. Inicie sessão uma vez para guardar a chave em ~/.sonenta/credentials, ou defina SONENTA_TOKEN na CI.
terminal
1# interativo, guarda a chave por host em ~/.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, sem prompt, a chave é lida do ambiente6export SONENTA_TOKEN=snt_live_<prefix>.<secret>7sonenta push
Ordem de resolução, vence a primeira: a variável de ambiente SONENTA_TOKEN, depois ~/.sonenta/credentials para o host ativo. Gere a chave em Org Settings → API Keys com o scope mcp:*.
Configurar
sonenta init escreve um sonenta.config.json no seu repositório (resolvido subindo a partir do diretório de trabalho). As credenciais ficam à parte, por utilizador, e nunca são commitadas.
sonenta.config.json
1# commitado no seu repositório, nenhum segredo aqui2{3 "host": "https://api.sonenta.dev",4 "project_uuid": "<project_uuid>",5 "version_slug": "main"6}
~/.sonenta/credentials
1# ~/.sonenta/credentials, modo 0600, por utilizador, nunca commitar2{ "default": "https://api.sonenta.dev",3 "hosts": {4 "https://api.sonenta.dev": { "api_key": "snt_live_<prefix>.<secret>" }5 } }
version_slug assume por omissão main. Mantenha a chave de API fora de sonenta.config.json, o seu lugar é apenas o ficheiro de credenciais ou SONENTA_TOKEN.
Comandos
Agrupados pelo que está a fazer, configurar autenticação e config, inspecionar um projeto, ou sincronizar traduções. Cada comando passa pela superfície MCP e respeita sonenta.config.json.
Auth e config
sonenta login Guardar uma chave de API para um host. Opções
-
--host <url> Host de API contra o qual autenticar. -
--token <key> Passar a chave sem prompt em vez de a introduzir interativamente. -
--email <email> cmd_login_flag_email -
--default cmd_login_flag_default
Exemplo
sonenta login --host https://api.sonenta.dev --token snt_live_<prefix>.<secret> sonenta logout Remover as credenciais guardadas de um host. sonenta whoami Mostrar o host ativo e uma chave mascarada. sonenta init Gerar sonenta.config.json para um projeto. Opções
-
--project <uuid> UUID do projeto a escrever na config (obrigatório). -
--version <slug> Slug de versão a visar (por omissão main). -
--force Sobrescrever um ficheiro de config existente.
Exemplo
sonenta init --project <uuid> --version main Inspecionar
sonenta projects list Listar os projetos acessíveis à sua chave.
Exemplo
sonenta projects list sonenta keys list Listar as chaves na forma namespace_slug/key_name. Opções
-
--namespace <slug> Restringir a um namespace.
Exemplo
sonenta keys list --namespace common sonenta status Comparar o seu locales/ local com o remoto. Opções
-
--language <code> Limitar a comparação a um idioma. -
--namespace <slug> Limitar a comparação a um namespace. -
--src <dir> Diretório de origem (por omissão locales).
Exemplo
sonenta status sonenta missing Listar as chaves em falta detetadas em tempo de execução. Opções
-
--language <code> Filtrar por idioma. -
--namespace <slug> Filtrar por namespace. -
--limit <n> Limitar o número de linhas.
Exemplo
sonenta missing --limit 50 Import e sincronização
sonenta import <files...> Import i18next numa só passagem, aninhado ou plano; cria chaves, atualiza traduções, idempotente. Opções
-
--dry-run Apenas pré-visualização; não envia nada. -
--status <draft|translated> Estado de entrada (por omissão translated). -
--language <code> Forçar o idioma em vez de o inferir a partir do caminho. -
--namespace <slug> Forçar o namespace (obrigatório para um <lang>.json simples). -
--version <slug> Visar uma versão não predefinida.
Exemplo
sonenta import locales/fr/common.json sonenta push Enviar toda a árvore locales/ local numa única chamada de import. Opções
-
--src <dir> Diretório de origem (por omissão locales). -
--dry-run Apenas pré-visualização; não envia nada. -
--status <state> Estado de entrada (por omissão translated).
Exemplo
sonenta push --dry-run sonenta pull Escrever as traduções remotas em locales/<lang>/<namespace>.json (plano). Opções
-
--language <code> Limitar a um idioma. -
--namespace <slug> Limitar a um namespace. -
--dest <dir> Diretório de destino (por omissão locales).
Exemplo
sonenta pull --language fr sonenta export Exportar como JSON i18next, plano por omissão, --nested para árvores. Opções
-
--nested Emitir árvores aninhadas em vez de chaves planas. -
--out <dir> Escrever ficheiros num diretório em vez de stdout.
Exemplo
sonenta export --nested --out ./dump sonenta releases publish Dispara uma release de CDN; os bundles publicados são servidos às suas apps a partir do CDN. Opções
-
--version <slug> Versão a publicar (por omissão main). -
--dry-run Apenas pré-visualização; não publica nada.
Exemplo
sonenta releases publish sonenta snapshot Obter os bundles CDN públicos para um módulo de build, para o fallback offline-first do SDK. Opções
-
--format <ts|json> Formato de saída: ts (por omissão) ou json. -
--out <file> Escrever num ficheiro em vez de stdout. -
--cdn <base> Base CDN (por omissão https://cdn.sonenta.com).
Exemplo
sonenta snapshot --out src/sonenta-bundles.ts Cada comando aceita também --host <url> para substituir o host de API configurado durante uma única execução.