Ir para o conteúdo
Sonenta

CLI

v0.2.1 · npm · MIT

@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.

Rutura · 0.1 → 0.2

Toda a CLI passa agora pela superfície MCP: precisa de uma chave de API com o scope mcp:* — chaves limitadas ao projeto devolvem 403. Gere uma no dashboard em Org Settings → API Keys e reemita qualquer chave usada com a 0.1.

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.com3API key: snt_live_••••••••.••••••••••••••••4✓ guardado para https://api.sonenta.com 6# CI — sem prompt, a chave é lida do ambiente7export SONENTA_TOKEN=snt_live_<prefix>.<secret>8sonenta 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.com",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.com",3  "hosts": {4    "https://api.sonenta.com": { "api_key": "snt_live_..." }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.

Exemplo

sonenta login --host https://api.sonenta.com
sonenta logout Remover as credenciais guardadas de um host.

Opções

Sem opções.

Exemplo

sonenta logout
sonenta whoami Mostrar o host ativo e uma chave mascarada.

Opções

Sem opções.

Exemplo

sonenta whoami
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.

Opções

Sem opções.

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 Despoletar uma release CDN; os SDK subscritos atualizam-se em direto.

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.

Ruturas 0.1 → 0.2

A atualizar a partir da 0.1? Duas alterações exigem ação.

A seguir