تخطَّ إلى المحتوى
Sonenta

CLI

v0.2.1 · npm · MIT

@sonenta/cli

سطر أوامر خفيف وقابل للبرمجة لكل ما قد تفعله بطريقة أخرى في لوحة التحكم: استيراد مشروع i18next موجود، ودفع الترجمات وسحبها، ومقارنة الـ CI بالنسخة البعيدة، ونشر إصدار CDN، وأخذ لقطة من الحزم لبناء يعمل دون اتصال أولاً. رخصة MIT، على npm.

تغيير جذري · 0.1 ← 0.2

تمر الآن كامل الـ CLI عبر سطح MCP: فهي تحتاج مفتاح API بنطاق mcp:* — أما المفاتيح المقيّدة بالمشروع فتُرجع 403. أنشئ مفتاحًا في لوحة التحكم ضمن Org Settings → API Keys وأعد إصدار أي مفتاح استخدمته مع الإصدار 0.1.

التثبيت

npm فقط — لا توجد صيغة Homebrew للـ CLI. تتطلب Node 18 أو أحدث، وتثبّت أمر sonenta.

terminal
1# install once, globally2npm i -g @sonenta/cli 4# or run without installing5npx @sonenta/cli <command>

المصادقة

يرسل كل نداء Authorization: ApiKey <prefix>.<secret> بنطاق mcp:*. سجّل الدخول مرة واحدة لتخزين المفتاح في ~/.sonenta/credentials، أو عيّن SONENTA_TOKEN في الـ CI.

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

ترتيب الحسم، الأول يفوز: متغيّر البيئة SONENTA_TOKEN، ثم ~/.sonenta/credentials للمضيف النشط. أنشئ المفتاح ضمن Org Settings → API Keys بنطاق mcp:*.

الإعداد

يكتب sonenta init ملف sonenta.config.json في مستودعك (يُحسم بالصعود من المجلد الحالي). تبقى بيانات الاعتماد منفصلة، لكل مستخدم، ولا تُودَع أبدًا في الإيداع.

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}
~/.sonenta/credentials
1# ~/.sonenta/credentials — mode 0600, per user, never commit2{ "default": "https://api.sonenta.com",3  "hosts": {4    "https://api.sonenta.com": { "api_key": "snt_live_..." }5  } }

تكون قيمة version_slug الافتراضية main. أبقِ مفتاح API خارج sonenta.config.json — فمكانه ملف بيانات الاعتماد أو SONENTA_TOKEN فقط.

الأوامر

مُجمَّعة حسب ما تقوم به — إعداد المصادقة والإعداد، أو فحص مشروع، أو مزامنة الترجمات. يمر كل أمر عبر سطح MCP ويحترم sonenta.config.json.

المصادقة والإعداد

sonenta login تخزين مفتاح API لمضيف.

الخيارات

  • --host <url> مضيف API الذي تجري المصادقة معه.
  • --token <key> تمرير المفتاح دون مطالبة بدلًا من الإدخال التفاعلي.

مثال

sonenta login --host https://api.sonenta.com
sonenta logout إزالة بيانات الاعتماد المخزّنة لمضيف.

الخيارات

لا توجد خيارات.

مثال

sonenta logout
sonenta whoami عرض المضيف النشط ومفتاح مُقنّع.

الخيارات

لا توجد خيارات.

مثال

sonenta whoami
sonenta init توليد sonenta.config.json لمشروع.

الخيارات

  • --project <uuid> UUID المشروع لكتابته في الإعداد (إلزامي).
  • --version <slug> slug الإصدار المستهدف (الافتراضي main).
  • --force الكتابة فوق ملف إعداد موجود.

مثال

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

الفحص

sonenta projects list سرد المشاريع التي يصل إليها مفتاحك.

الخيارات

لا توجد خيارات.

مثال

sonenta projects list
sonenta keys list سرد المفاتيح بصيغة namespace_slug/key_name.

الخيارات

  • --namespace <slug> التقييد بنطاق أسماء واحد.

مثال

sonenta keys list --namespace common
sonenta status مقارنة مجلد locales/ المحلي بالنسخة البعيدة.

الخيارات

  • --language <code> حصر المقارنة بلغة واحدة.
  • --namespace <slug> حصر المقارنة بنطاق أسماء واحد.
  • --src <dir> مجلد المصدر (الافتراضي locales).

مثال

sonenta status
sonenta missing سرد المفاتيح المفقودة المكتشفة وقت التشغيل.

الخيارات

  • --language <code> التصفية حسب اللغة.
  • --namespace <slug> التصفية حسب نطاق الأسماء.
  • --limit <n> تحديد سقف لعدد الصفوف.

مثال

sonenta missing --limit 50

الاستيراد والمزامنة

sonenta import <files...> استيراد i18next بمرور واحد — مُتداخل أو مُسطّح؛ ينشئ المفاتيح، ويحدّث الترجمات، وعديم التأثير الجانبي.

الخيارات

  • --dry-run معاينة فقط؛ لا يرسل شيئًا.
  • --status <draft|translated> الحالة الواردة (الافتراضي translated).
  • --language <code> فرض اللغة بدلًا من استنتاجها من المسار.
  • --namespace <slug> فرض نطاق الأسماء (إلزامي لملف <lang>.json مجرّد).
  • --version <slug> استهداف إصدار غير افتراضي.

مثال

sonenta import locales/fr/common.json
sonenta push دفع كامل شجرة locales/ المحلية في نداء استيراد واحد.

الخيارات

  • --src <dir> مجلد المصدر (الافتراضي locales).
  • --dry-run معاينة فقط؛ لا يرسل شيئًا.
  • --status <state> الحالة الواردة (الافتراضي translated).

مثال

sonenta push --dry-run
sonenta pull كتابة الترجمات البعيدة إلى locales/<lang>/<namespace>.json (مُسطّح).

الخيارات

  • --language <code> الحصر بلغة واحدة.
  • --namespace <slug> الحصر بنطاق أسماء واحد.
  • --dest <dir> مجلد الوجهة (الافتراضي locales).

مثال

sonenta pull --language fr
sonenta export التصدير بصيغة JSON الخاصة بـ i18next — مُسطّح افتراضيًا، و--nested للأشجار.

الخيارات

  • --nested إصدار أشجار متداخلة بدلًا من مفاتيح مُسطّحة.
  • --out <dir> كتابة الملفات إلى مجلد بدلًا من stdout.

مثال

sonenta export --nested --out ./dump
sonenta releases publish إطلاق إصدار CDN؛ تتحدّث حزم SDK المشترِكة مباشرةً.

الخيارات

  • --version <slug> الإصدار المراد نشره (الافتراضي main).
  • --dry-run معاينة فقط؛ لا ينشر شيئًا.

مثال

sonenta releases publish
sonenta snapshot جلب حزم CDN العامة إلى وحدة وقت بناء للرجوع غير المتصل أولًا في SDK.

الخيارات

  • --format <ts|json> صيغة الإخراج: ts (الافتراضي) أو json.
  • --out <file> الكتابة إلى ملف بدلًا من stdout.
  • --cdn <base> قاعدة CDN (الافتراضي https://cdn.sonenta.com).

مثال

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

يقبل كل أمر أيضًا --host <url> لتجاوز مضيف API المُعَدّ لتشغيلة واحدة.

التغييرات الجذرية 0.1 ← 0.2

هل تترقّى من الإصدار 0.1؟ تغييران يتطلبان إجراءً.

بعد ذلك