Aller au contenu
Sonenta

CLI

v0.2.1 · npm · MIT

@sonenta/cli

Une ligne de commande légère et scriptable pour tout ce que vous feriez autrement dans le dashboard : importer un projet i18next existant, pousser et tirer des traductions, comparer la CI au distant, publier une release CDN, et faire un snapshot des bundles pour un build offline-first. MIT, sur npm.

Rupture · 0.1 → 0.2

Toute la CLI passe désormais par la surface MCP : il lui faut une clé API au scope mcp:* — les clés limitées au projet renvoient 403. Générez-en une dans le dashboard sous Org Settings → API Keys et ré-émettez toute clé utilisée avec la 0.1.

Installation

npm uniquement — il n'y a pas de formule Homebrew pour la CLI. Nécessite Node 18 ou plus récent, et installe la commande sonenta.

terminal
1# installer une fois, globalement2npm i -g @sonenta/cli 4# ou exécuter sans installer5npx @sonenta/cli <command>

S'authentifier

Chaque appel envoie Authorization: ApiKey <prefix>.<secret> au scope mcp:*. Connectez-vous une fois pour stocker la clé dans ~/.sonenta/credentials, ou définissez SONENTA_TOKEN en CI.

terminal
1# interactif — stocke la clé par hôte dans ~/.sonenta/credentials (0600)2sonenta login --host https://api.sonenta.com3API key: snt_live_••••••••.••••••••••••••••4✓ enregistré pour https://api.sonenta.com 6# CI — sans invite, la clé est lue depuis l'environnement7export SONENTA_TOKEN=snt_live_<prefix>.<secret>8sonenta push

Ordre de résolution, le premier l'emporte : la variable d'environnement SONENTA_TOKEN, puis ~/.sonenta/credentials pour l'hôte actif. Générez la clé sous Org Settings → API Keys au scope mcp:*.

Configurer

sonenta init écrit un sonenta.config.json dans votre dépôt (résolu en remontant depuis le répertoire courant). Les identifiants vivent à part, par utilisateur, et ne sont jamais committés.

sonenta.config.json
1# committé dans votre dépôt — aucun secret ici2{3  "host": "https://api.sonenta.com",4  "project_uuid": "<project_uuid>",5  "version_slug": "main"6}
~/.sonenta/credentials
1# ~/.sonenta/credentials — mode 0600, par utilisateur, ne jamais committer2{ "default": "https://api.sonenta.com",3  "hosts": {4    "https://api.sonenta.com": { "api_key": "snt_live_..." }5  } }

version_slug vaut main par défaut. Gardez la clé API hors du sonenta.config.json — elle n'a sa place que dans le fichier d'identifiants ou dans SONENTA_TOKEN.

Commandes

Regroupées par usage — configurer l'authentification et la config, inspecter un projet, ou synchroniser les traductions. Chaque commande passe par la surface MCP et respecte sonenta.config.json.

Auth & config

sonenta login Stocker une clé API pour un hôte.

Options

  • --host <url> Hôte API contre lequel s'authentifier.
  • --token <key> Passer la clé sans invite plutôt qu'au prompt.

Exemple

sonenta login --host https://api.sonenta.com
sonenta logout Supprimer les identifiants stockés d'un hôte.

Options

Aucune option.

Exemple

sonenta logout
sonenta whoami Afficher l'hôte actif et une clé masquée.

Options

Aucune option.

Exemple

sonenta whoami
sonenta init Générer sonenta.config.json pour un projet.

Options

  • --project <uuid> UUID du projet à écrire dans la config (obligatoire).
  • --version <slug> Slug de version à cibler (défaut main).
  • --force Écraser un fichier de config existant.

Exemple

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

Inspecter

sonenta projects list Lister les projets accessibles à votre clé.

Options

Aucune option.

Exemple

sonenta projects list
sonenta keys list Lister les clés sous la forme namespace_slug/key_name.

Options

  • --namespace <slug> Restreindre à un namespace.

Exemple

sonenta keys list --namespace common
sonenta status Comparer votre locales/ local au distant.

Options

  • --language <code> Limiter la comparaison à une langue.
  • --namespace <slug> Limiter la comparaison à un namespace.
  • --src <dir> Répertoire source (défaut locales).

Exemple

sonenta status
sonenta missing Lister les clés manquantes détectées à l'exécution.

Options

  • --language <code> Filtrer par langue.
  • --namespace <slug> Filtrer par namespace.
  • --limit <n> Plafonner le nombre de lignes.

Exemple

sonenta missing --limit 50

Import & synchronisation

sonenta import <files...> Import i18next en une passe — imbriqué ou plat ; crée les clés, met à jour les traductions, idempotent.

Options

  • --dry-run Prévisualisation seule ; n'envoie rien.
  • --status <draft|translated> Statut entrant (défaut translated).
  • --language <code> Forcer la langue au lieu de la déduire du chemin.
  • --namespace <slug> Forcer le namespace (obligatoire pour un <lang>.json nu).
  • --version <slug> Cibler une version non par défaut.

Exemple

sonenta import locales/fr/common.json
sonenta push Pousser tout l'arbre locales/ local en un seul appel d'import.

Options

  • --src <dir> Répertoire source (défaut locales).
  • --dry-run Prévisualisation seule ; n'envoie rien.
  • --status <state> Statut entrant (défaut translated).

Exemple

sonenta push --dry-run
sonenta pull Écrire les traductions distantes dans locales/<lang>/<namespace>.json (plat).

Options

  • --language <code> Limiter à une langue.
  • --namespace <slug> Limiter à un namespace.
  • --dest <dir> Répertoire de destination (défaut locales).

Exemple

sonenta pull --language fr
sonenta export Exporter en JSON i18next — plat par défaut, --nested pour des arbres.

Options

  • --nested Émettre des arbres imbriqués au lieu de clés plates.
  • --out <dir> Écrire des fichiers dans un répertoire plutôt que sur stdout.

Exemple

sonenta export --nested --out ./dump
sonenta releases publish Déclencher une release CDN ; les SDK abonnés se rafraîchissent en direct.

Options

  • --version <slug> Version à publier (défaut main).
  • --dry-run Prévisualisation seule ; ne publie rien.

Exemple

sonenta releases publish
sonenta snapshot Récupérer les bundles CDN publics dans un module de build pour le fallback offline-first du SDK.

Options

  • --format <ts|json> Format de sortie : ts (défaut) ou json.
  • --out <file> Écrire dans un fichier plutôt que sur stdout.
  • --cdn <base> Base CDN (défaut https://cdn.sonenta.com).

Exemple

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

Chaque commande accepte aussi --host <url> pour surcharger l'hôte API configuré le temps d'une exécution.

Ruptures 0.1 → 0.2

Vous montez depuis la 0.1 ? Deux changements demandent une action.

Ensuite