CLI
ثبّت واستخدم كل أوامر RunAPI CLI لإجراءات النموذج والمهام والملفات والتحميلات ومعلومات الحساب والتسعير وعمليات الاستدعاء وHarness.
واجهة RunAPI CLI هي عميل طرفي يُعطي الأولوية لـ JSON لإجراءات النماذج وأدوات الحساب. تكتب بيانات النتائج إلى الإخراج القياسي وتقدّم تقدم العمليات إلى الخطأ القياسي، مما يجعلها تعمل على حدٍّ سواء في الطرفية وفي سكريبتات الشل ووظائف CI وHarness.
التثبيت
ثبّت الإصدار الحالي على Linux أو macOS:
curl -fsSL https://runapi.ai/cli/install.sh | sh
تتوفر أيضاً طرق التثبيت عبر Homebrew ومن المصدر باستخدام Go:
brew install runapi-ai/tap/runapi
go install github.com/runapi-ai/cli/cmd/runapi@latest
على Windows، نزِّل أرشيف windows-amd64 أو windows-arm64 المطابق من
أحدث إصدار CLI، واستخرج runapi.exe، وأضفه إلى PATH.
ثبّت المثبّت على إصدار معين أو دليل تثبيت محدد عند الحاجة إلى ثنائي قابل للإعادة الإنتاج:
curl -fsSL https://runapi.ai/cli/install.sh | sh -s -- --version v0.13.1
curl -fsSL https://runapi.ai/cli/install.sh | sh -s -- --dir "$HOME/.local/bin"
يقبل المثبّت أيضًا RUNAPI_VERSION وRUNAPI_INSTALL_DIR وRUNAPI_INSTALL_BASE وRUNAPI_DOWNLOAD_BASE وRUNAPI_SKIP_LIBC_CHECK=1.
البدء السريع
على محطة عمل، سجّل الدخول في المتصفح وتحقق من مصدر بيانات الاعتماد:
runapi login
runapi auth status
شغِّل إجراء نموذج بإدخال JSON مضمَّن أو ملف JSON:
runapi nano-banana text-to-image --input '{"prompt":"a hummingbird drinking espresso","aspect_ratio":"1:1"}'
runapi nano-banana text-to-image --input-file request.json
معظم إجراءات النموذج غير متزامنة. وتنتظر نتيجة نهائية افتراضيًا؛ أضف
--async للإعادة الفورية للمهمة واستخدم wait لاحقًا:
TASK_ID=$(runapi suno text-to-music --async --input '{"model":"suno-v5","vocal_mode":"instrumental","style":"minimal piano","title":"Short Piano Theme"}' | jq -r '.id')
runapi wait "$TASK_ID" --service suno --action text-to-music
اصطلاحات الأوامر
يُصدر كل أمر JSON على الإخراج القياسي ما لم يطلب خيار ما صراحةً قيمة عددية، مثل files create --url-only أو listen
--print-secret. تبقى رسائل التقدم والتشخيص على الخطأ القياسي، لذا يمكن تمرير JSON بأمان إلى jq:
runapi nano-banana text-to-image --input-file request.json \
| jq -r '.images[].url' \
| xargs -I{} curl -OL {}
تقبل إجراءات النموذج مصدر إدخال طلب واحد بالضبط:
--input '<json object>'يُمرّر JSON مضمّناً.--input-file path/to/request.jsonيحمّل JSON من ملف.--input-file -يقرأ JSON من الإدخال القياسي.
استخدم runapi <service> <action> --help قبل إنشاء طلب.
يعرض CLI المثبت الحقول الحالية للإجراء ومعرّفات النماذج المقبولة
وقيود التحقق من الصحة.
تنطبق هذه الخيارات العامة على كل أمر:
--api-key
استخدام مفتاح API لهذا الاستدعاء. يتجاوز RUNAPI_API_KEY.
--base-url
استخدام أصل API مختلف لهذا الاستدعاء.
--timeout
تعيين المهلة الإجمالية للأمر والحد الأقصى لانتظار المهمة. القيمة الافتراضية هي 15 دقيقة.
--poll-interval
تعيين الفترة الزمنية لاستطلاع المهمة. القيمة الافتراضية هي 3 ثوانٍ.
--async
العودة فورًا بعد إرسال إجراء نموذج غير متزامن.
--quiet
إخفاء تقدم العملية على الخطأ القياسي دون تغيير مخرجات JSON.
إجراءات النموذج
شكل أمر النموذج هو runapi <service> <action>. تُعيد الإجراءات المتزامنة استجابتها فورًا. أما الإجراءات غير المتزامنة فالسلوك الافتراضي هو الإرسال والاستطلاع وإعادة نتيجة المهمة النهائية؛ بينما يُعيد --async استجابة الإنشاء بدلاً من ذلك.
بالنسبة لحقول URL الوسائط على المستوى الأعلى، يتم رفع مسار ملف محلي قابل للقراءة قبل تشغيل إجراء النموذج. تُرسَل عناوين URL الحالية التي تبدأ بـ http:// وhttps:// دون تغيير. استخدم files create عندما تحتاج إلى URL مؤقت قابل لإعادة الاستخدام، أو عندما يكون المصدر عنوان URL بعيداً، أو عندما يكون المصدر بيانات Base64.
إجراءات الصوت والموسيقى
suno:add-instrumental،add-vocals،blend-lyrics،boost-style،check-voice،convert-audio،cover-audio،create-mashup،extend-music،generate-artwork،generate-lyrics،generate-midi،generate-persona،generate-voice،get-timestamped-lyrics،regenerate-validation-phrase،replace-section،separate-audio-stems،text-to-music،text-to-sound،visualize-music،voice-to-validation-phraseproducer:text-to-musicgemini-omni:create-audio،create-character،text-to-videoopenai-tts:text-to-speechfish-audio:text-to-speechgemini-tts:text-to-speechelevenlabs:isolate-audio،speech-to-text،text-to-dialogue،text-to-sound،text-to-speech
إجراءات الصورة
nano-banana:edit-image،text-to-imageimagen-4:remix-image،text-to-imageseedream:decompose-layers،edit-image،text-to-imageflux:remix-image،text-to-imageflux-2:remix-image،text-to-imageflux-kontext:text-to-imageqwen-2:edit-image،text-to-imageqwen-3:edit-image،text-to-imageqwen-image:edit-image،remix-image،text-to-imagerecraft:remove-background،upscale-imagez-image:text-to-imageideogram-v3:edit-image،reframe-image،remix-image،text-to-imagegpt-image:edit-image،text-to-imagegpt-image-2:edit-image،text-to-imagegpt-4o-image:text-to-imagemidjourney:edit-image،get-seed،image-to-prompt،shorten-prompt،text-to-image
إجراءات الفيديو والرسوم المتحركة
veo-3-1:extend-video،text-to-video،upscale-videoseedance:text-to-videorunway:extend-video،text-to-videorunway-aleph:edit-videokling:avatar،edit-video،extend-video،image-to-video،motion-control،text-to-videoinfinitetalk:audio-to-videoomnihuman:audio-to-video،human-identification،subject-detectionwan:animate،edit-video،image-to-video،speech-to-video،text-to-image،text-to-videoluma:modify-videohailuo:image-to-video،text-to-videovolcengine-lip-sync:lip-sync-videohappyhorse:edit-video،image-to-video،text-to-videogrok-imagine:edit-image،extend،image-to-video،text-to-image،text-to-video،upscale-imagetopaz:upscale-image،upscale-videomidjourney:extend-video،image-to-video
القائمة أعلاه هي المخزون الكامل للإجراءات في إصدار واجهة سطر الأوامر هذا. يتوفر عقد الطلب والاستجابة الدقيق لكل إجراء في مرجع API، ومساعدة الأوامر المحلية هي المصدر للحقول الخاصة بالإصدار.
دورة حياة المهمة
استخدم get لفحص الحالة الراهنة لمهمة Task غير متزامنة دون
انتظار. استخدم wait للاستطلاع حتى تكتمل المهمة أو تفشل أو تبلغ مهلة
الأمر الزمنية. يتطلب كلا الأمرَين تحديد الخدمة والإجراء الأصليَّين
حتى يتمكن CLI من اختيار شكل نتيجة Task الصحيح.
runapi get "$TASK_ID" --service suno --action text-to-music
runapi wait "$TASK_ID" --service suno --action text-to-music --poll-interval 5s
الملفات
runapi files create يحتفظ بتدفق رابط تحميل الملف المؤقت. يُحمّل
مساراً محلياً واحداً أو رابط URL بعيداً أو مصدر Base64 ويُعيد رابطاً
ينتهي صلاحيته بعد ساعة واحدة.
runapi files create ./reference.png --url-only
runapi files create --url https://example.test/reference.png --file-name reference.png
runapi files create --base64 "$(base64 < reference.png)" --file-name reference.png
خيارا المصدر متعارضان. يطبع --url-only عنوان URL وحده؛ احذفه لاستقبال استجابة JSON الكاملة.
استخدم دورة حياة الملف الدائم عندما تحتاج إلى file_id ثابت بدلاً من رابط URL:
runapi files create-file ./knowledge.pdf
runapi files list --order desc
runapi files retrieve file_123
runapi files content file_123 --output ./knowledge-copy.pdf
runapi files delete file_123
content يتطلب --output؛ مرّر - لكتابة بايتات الملف الدقيقة إلى
الإخراج القياسي. راجع Files and Uploads للاطلاع على
الحدود وعزل الحساب ودورة حياة REST.
الرفوعات
استخدم Uploads لإرسال جزء واحد أو أكثر من Parts قبل تأليف الملف النهائي File.
تُعلن Create عن عدد البايتات النهائي والبيانات الوصفية؛ كرر --part-id بترتيب التأليف عند الاكتمال:
runapi uploads create --bytes 1048576 --filename archive.bin --mime-type application/octet-stream
runapi uploads add-part upload_123 ./archive.part-01
runapi uploads complete upload_123 --part-id part_123
runapi uploads cancel upload_123
الحساب والتسعير
افحص المستخدم المُصادق عليه والحساب المحدد، ثم استعلم عن الرصيد وعدادات الإنفاق:
runapi account info
runapi account balance
pricing list يقرأ جداول الأسعار الحالية. صفّه حسب الخدمة أو الإجراء
أو النموذج. يُقدّر pricing quote حجز المهمة لخدمة وإجراء محددَين؛
أضف --model عندما يكون الإجراء خاصاً بنموذج معين وزوّد
مدخلات التسعير باستخدام --params أو --params-file.
runapi pricing list --service suno --action text-to-music --model suno-v4
runapi pricing quote --service suno --action text-to-music --model suno-v4 \
--params '{"vocal_mode":"auto_lyrics","prompt":"A chill lo-fi beat"}'
runapi pricing quote --service suno --action text-to-music --params-file pricing-inputs.json
لا تتطلب أوامر التسعير بيانات اعتماد إلا إذا كان العرض يشير إلى مهمة مصدر مملوكة لحساب.
المصادقة والإعداد
runapi login يفتح تدفق تفويض المتصفح ويحفظ بيانات الاعتماد الناتجة.
للخوادم وبيئات CI، يقبل auth import-token مفتاح API من المدخل
القياسي ويتحقق منه افتراضياً ويحفظه دون إظهار القيمة في قائمة
العمليات أو سجل الشل:
printf '%s' "$RUNAPI_API_KEY" | runapi auth import-token --token -
runapi auth status
runapi logout
auth import-token --skip-verify يدعم إعداد الصورة دون اتصال. استخدمه
فقط عندما لا يمكن تشغيل التحقق أثناء الإعداد؛ يتحقق auth status
من بيانات الاعتماد النشطة لاحقاً.
أولوية مفتاح API هي --api-key، ثم RUNAPI_API_KEY، ثم ملف تكوين CLI
المحلي. أولوية Base URL هي --base-url، ثم RUNAPI_BASE_URL، ثم
Base URL المحفوظ، ثم https://runapi.ai. ملف التكوين هو
~/.config/runapi/config.json، أو $XDG_CONFIG_HOME/runapi/config.json
حين يكون XDG_CONFIG_HOME مضبوطاً.
مستمع عمليات الاستدعاء المحلي
runapi listen يستقبل عمليات استدعاء المهام لمفتاح API واحد محدد
ويُعيد توجيه كل استدعاء موقّع اختيارياً إلى نقطة نهاية HTTP محلية.
يُشترط تسجيل الدخول عبر المتصفح قبل استخدام عمليات الاستماع.
runapi login
runapi api-keys list --json
runapi listen http://localhost:3000/webhooks/runapi --callback-api-key-id token_abc123
عنوان URL الموضعي و--forward-to بديلان لبعضهما. يكتب المستمع كل جسم استدعاء موقَّع إلى الإخراج القياسي. تستمر مهمة تحتوي على callback_url في التسليم إلى عنوان URL ذاك وتُنسَخ أيضًا إلى المستمع المحلي.
بعد تلقي حدث مستمع صالح، يُقرّ CLI باستلامه قبل محاولة طلب HTTP المحلي.
يُوجَّه كل حدث محلياً مرة واحدة: تُبلَّغ الاستجابات غير 2xx وأخطاء
الاتصال في الطرفية، لكنها لا تجعل المستمع يُعيد إرسال الحدث. لا يؤثر
هذا السلوك في تصحيح الأخطاء المحلي على إعادة محاولات تسليم callback_url
الخاصة بالمهمة.
يمكن لكل حساب تشغيل ما يصل إلى 100 مستمع نشط لكل مفتاح اشتراك Callback و1,000 مستمع نشط إجمالاً. عند الوصول إلى الحد، أوقف مستمعاً خاملاً أو انتظر وأعد المحاولة. يحدد رد API ما إذا كان المفتاح المحدد أو حسابك أو طاقة الخدمة الكلية قد امتلأت.
يتحقق المستمع الخامل من الأحداث الجديدة كل 15 إلى 30 ثانية تقريباً. تُكتشف الأحداث عادةً في غضون نحو 15 ثانية وتُقرأ فور توفرها. عند بلوغ حد معين، أوقف مستمعاً خاملاً أو انتظر وحاول مجدداً. يظل سلوك التسليم والإقرار الحالي دون تغيير.
ترتيب اختيار المفتاح هو: --callback-api-key-id لأمر واحد، ثم callback_api_key_id في .runapi.toml الخاص بالمشروع، ثم محدد تفاعلي. يُحفظ إعداد المشروع في جذر Git، أو الدليل الحالي خارج مستودع Git، ويحتوي فقط على المعرّف الثابت:
callback_api_key_id = "token_abc123"
اطبع سرّ التوقيع الخاص بمفتاح مُحدد دون بدء مستمع، أو أعِد تدويره بعد تعرّضه:
runapi listen --print-secret --callback-api-key-id token_abc123
runapi listen --rotate-secret --callback-api-key-id token_abc123
يُبطل التدوير المستمعين النشطين للمفتاح المحدد. حدِّث كل مُتحقِّق محلي بالسرّ المطبوع حديثاً قبل إعادة تشغيل مستمعه.
Harness
ثبّت مهارة RunAPI CLI المحمولة في Harness مدعوم، افحص الأهداف المدعومة، أو أزل مهارة مثبتة:
runapi agent install-skill --target codex
runapi agent list-targets
runapi agent uninstall-skill --target codex
الأهداف المدمجة هي claude وcodex وgemini وopenclaw و
hermes. يقبل install-skill الخيار --version لتثبيت إصدار مهارة،
و--target-dir لمسار وجهة مخصص، و--source لمستودع مصدر،
و--force للكتابة فوق دليل مهارة موجود.
إكمال الصدفة والإصدار
أنشئ سكريبتات الإكمال التلقائي لـ Bash أو Zsh أو Fish أو PowerShell. على سبيل المثال، لتحميل إكمال Bash في الصدفة الحالية:
source <(runapi completion bash)
runapi completion zsh
runapi completion fish
runapi completion powershell
runapi version
استخدم runapi --help لعرض قائمة الأوامر، وrunapi <command> --help لخيارات
أمر معين، وrunapi <service> <action> --help لحقول إجراء نموذج معين.
رموز الخروج
تخرج الأوامر برمز غير صفري يمكن للنصوص البرمجية التعامل معه:
0
نجاح
2
فشل المصادقة أو منصة غير مدعومة
3
رصيد غير كافٍ أو تبعية محلية مطلوبة مفقودة
4
خطأ في التحقق أو العنصر غير موجود أو خطأ في تحليل البيان
5
انتهاء المهلة أو فشل التنزيل أو عدم تطابق المجموع الاختباري
6
تجاوز حد المعدل
7
فشل المهمة