الانتقال إلى المحتوى الرئيسي

أداة التنفيذ في الخلفية + أداة العمليات

يقوم OpenClaw بتشغيل أوامر الصدفة عبر أداة exec ويحتفظ بالمهام طويلة الأمد في الذاكرة. تدير أداة process جلسات الخلفية تلك.

أداة exec

المعلمات الأساسية:
  • command (مطلوب)
  • yieldMs (الافتراضي 10000): الانتقال التلقائي إلى الخلفية بعد هذا التأخير
  • background (قيمة منطقية): التشغيل في الخلفية فورًا
  • timeout (بالثواني، الافتراضي 1800): إنهاء العملية بعد انتهاء هذه المهلة
  • elevated (قيمة منطقية): التشغيل على المضيف إذا كان وضع الامتيازات مُمكّنًا/مسموحًا
  • هل تحتاج إلى TTY حقيقي؟ اضبط pty: true. تعيين pty: true.
  • workdir، env
السلوك:
  • عمليات التشغيل في الواجهة الأمامية تُعيد المخرجات مباشرةً.
  • عند التشغيل في الخلفية (صراحةً أو بسبب المهلة)، تُعيد الأداة status: "running" + sessionId وذيلًا قصيرًا.
  • يتم الاحتفاظ بالمخرجات في الذاكرة حتى يتم استطلاع الجلسة أو مسحها.
  • إذا كانت أداة process غير مسموح بها، يعمل exec بشكل متزامن ويتجاهل yieldMs/background.

سد عملية الأطفال

عند إنشاء عمليات فرعية طويلة الأمد خارج أدوات exec/process (على سبيل المثال، إعادة تشغيل CLI أو مساعدات Gateway)، أرفِق مساعد ربط العمليات الفرعية بحيث يتم تمرير إشارات الإنهاء وفصل المستمعين عند الخروج/الخطأ. يمنع ذلك العمليات اليتيمة على systemd ويحافظ على سلوك إيقاف تشغيل متسق عبر المنصات. تجاوزات البيئة:
  • PI_BASH_YIELD_MS: العائد الافتراضي (مللي ثانية)
  • PI_BASH_MAX_OUTPUT_CHARS: الحد الأقصى للمخرجات في الذاكرة (عدد الأحرف)
  • OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS: الحد الأقصى للمخرجات المعلّقة stdout/stderr لكل دفق (عدد الأحرف)
  • PI_BASH_JOB_TTL_MS: مدة الاحتفاظ بالجلسات المنتهية (مللي ثانية، محدودة بين 1 دقيقة و3 ساعات)
التهيئة (المفضلة):
  • tools.exec.backgroundMs (الافتراضي 10000)
  • tools.exec.timeoutSec (الافتراضي 1800)
  • tools.exec.cleanupMs (الافتراضي 1800000)
  • tools.exec.notifyOnExit (الافتراضي true): إدراج حدث نظام + طلب نبضة قلب عند انتهاء تنفيذ في الخلفية.
  • tools.exec.notifyOnExitEmptySuccess (القيمة الافتراضية false): عند التفعيل، يتم أيضًا إدراج أحداث إكمال للتشغيلات الخلفية الناجحة التي لم تُنتج أي مخرجات.

أداة process

الإجراءات:
  • list: الجلسات الجارية والمنتهية
  • poll: تفريغ المخرجات الجديدة لجلسة ما (ويُبلّغ أيضًا عن حالة الخروج)
  • log: قراءة المخرجات المُجمّعة (يدعم offset + limit)
  • write: إرسال stdin (data، وeof اختياري)
  • kill: إنهاء جلسة في الخلفية
  • clear: إزالة جلسة منتهية من الذاكرة
  • remove: الإنهاء إذا كانت قيد التشغيل، وإلا فالمسح إذا كانت منتهية
ملاحظات:
  • يتم إدراج الجلسات التي تعمل في الخلفية فقط والاحتفاظ بها في الذاكرة.
  • تُفقد الجلسات عند إعادة تشغيل العملية (لا يوجد حفظ على القرص).
  • لا تُحفظ سجلات الجلسات في سجل الدردشة إلا إذا قمت بتشغيل process poll/log وتم تسجيل نتيجة الأداة.
  • process مُقيّد لكل وكيل؛ ولا يرى إلا الجلسات التي بدأها ذلك الوكيل.
  • يتضمن process list قيمة مشتقة هي name (فعل الأمر + الهدف) لتسهيل الاستعراض السريع.
  • يستخدم process log آلية offset/limit المعتمدة على الأسطر (احذف offset لجلب آخر N أسطر).
  • عند عدم تحديد كلٍ من offset وlimit، يتم إرجاع آخر 200 سطر مع تضمين تلميح للترقيم.
  • عند تحديد offset وعدم تحديد limit، يتم الإرجاع من offset حتى النهاية (دون تقييد بـ 200).

أمثلة

تشغيل مهمة طويلة والاستطلاع لاحقًا:
{ "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }
{ "tool": "process", "action": "poll", "sessionId": "<id>" }
البدء فورًا في الخلفية:
{ "tool": "exec", "command": "npm run build", "background": true }
إرسال stdin:
{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n" }