Gateway
التنفيذ في الخلفية وأداة العمليات
ينفّذ OpenClaw أوامر الصدفة عبر أداة exec ويحتفظ بالمهام طويلة التشغيل في الذاكرة. تدير أداة process تلك الجلسات التي تعمل في الخلفية.
أداة exec
المعلمات:
| المعلمة | الوصف |
|---|---|
command |
مطلوبة. أمر الصدفة المراد تنفيذه. |
workdir |
دليل العمل؛ احذفه لاستخدام دليل العمل الحالي الافتراضي. |
env |
متغيرات بيئة إضافية للأمر. |
yieldMs |
عدد المللي ثواني للانتظار قبل نقل المهمة إلى الخلفية (القيمة الافتراضية 10000). |
background |
التشغيل في الخلفية فورًا. |
timeout |
المهلة بالثواني (القيمة الافتراضية tools.exec.timeoutSec)؛ تُنهي العملية عند انقضائها. عيّن timeout: 0 لتعطيل مهلة عملية exec لذلك الاستدعاء. |
pty |
التشغيل في طرفية زائفة عند توفرها (أدوات CLI التي تتطلب TTY، ووكلاء البرمجة). |
elevated |
التشغيل خارج بيئة العزل إذا كان الوضع المرتفع مفعّلًا/مسموحًا (gateway افتراضيًا، أو node عندما يكون هدف exec هو node). |
host |
هدف exec: auto أو sandbox أو gateway أو node. |
node |
معرّف/اسم Node، ويُستخدم مع host: "node". |
السلوك:
- تعيد عمليات التشغيل في الواجهة الأمامية المخرجات مباشرةً.
- عند نقل التشغيل إلى الخلفية (صراحةً أو بسبب انقضاء مهلة
yieldMs)، تعيد الأداةstatus: "running"معsessionIdونهاية قصيرة من المخرجات. - ترث عمليات التشغيل في الخلفية وعمليات
yieldMsالقيمةtools.exec.timeoutSecما لم يمرّر الاستدعاء قيمةtimeoutصريحة. - تبقى المخرجات في الذاكرة حتى يتم استطلاع الجلسة أو مسحها.
- إذا كانت أداة
processغير مسموح بها، تعملexecبشكل متزامن وتتجاهلyieldMsوbackground. - تتلقى أوامر exec المنشأة المتغير
OPENCLAW_SHELL=execلتمكين قواعد الصدفة/ملف التعريف المدركة للسياق. - للعمل طويل التشغيل الذي يبدأ الآن: ابدأه مرة واحدة واعتمد على إيقاظ الإكمال التلقائي (عند تمكينه) بمجرد أن يصدر الأمر مخرجات أو يفشل.
- إذا لم يكن إيقاظ الإكمال التلقائي متاحًا، أو كنت تحتاج إلى تأكيد نجاح صامت لأمر ينتهي بنجاح دون مخرجات، فاستطلع باستخدام
process. - لا تحاكِ التذكيرات أو المتابعات المؤجلة باستخدام حلقات
sleepأو الاستطلاع المتكرر — استخدم Cron للعمل المستقبلي.
تجاوزات متغيرات البيئة
| المتغير | التأثير |
|---|---|
OPENCLAW_BASH_YIELD_MS |
مهلة الانتظار الافتراضية قبل النقل إلى الخلفية (بالمللي ثانية). القيمة الافتراضية 10000، ومحصورة بين 10 و120000. |
OPENCLAW_BASH_MAX_OUTPUT_CHARS |
الحد الأقصى للمخرجات في الذاكرة (بالأحرف). |
OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS |
الحد الأقصى لمخرجات stdout/stderr المعلّقة لكل تدفق (بالأحرف). |
OPENCLAW_BASH_JOB_TTL_MS |
مدة البقاء للجلسات المنتهية (بالمللي ثانية)، ومحصورة بين دقيقة واحدة و3 ساعات. |
OPENCLAW_PROCESS_INPUT_WAIT_IDLE_MS |
عتبة خمول المخرجات قبل وسم جلسات الخلفية القابلة للكتابة بأنها تنتظر إدخالًا على الأرجح. القيمة الافتراضية 15000. |
الإعداد (مفضّل على تجاوزات متغيرات البيئة)
| المفتاح | القيمة الافتراضية | التأثير |
|---|---|---|
tools.exec.backgroundMs |
10000 | مماثل لـ OPENCLAW_BASH_YIELD_MS. |
tools.exec.timeoutSec |
1800 | المهلة الافتراضية لكل استدعاء. |
tools.exec.cleanupMs |
1800000 | مماثل لـ OPENCLAW_BASH_JOB_TTL_MS. |
tools.exec.notifyOnExit |
true | يضع حدث نظام في قائمة الانتظار ويطلب Heartbeat عند انتهاء عملية exec تعمل في الخلفية. |
tools.exec.notifyOnExitEmptySuccess |
false | يضع أيضًا أحداث إكمال في قائمة الانتظار لعمليات الخلفية الناجحة التي لا تنتج مخرجات. |
ربط العمليات الفرعية
عند إنشاء عمليات فرعية طويلة التشغيل خارج أداتي exec/process (إعادة تشغيل CLI، ومساعدات Gateway)، أرفق مساعد جسر العمليات الفرعية لكي يعيد توجيه إشارات الإنهاء ويفصل المستمعين عند الخروج/الخطأ. يمنع ذلك بقاء عمليات يتيمة على systemd ويحافظ على اتساق الإيقاف عبر المنصات.
أداة process
الإجراءات:
| الإجراء | التأثير |
|---|---|
list |
الجلسات قيد التشغيل والمنتهية. |
poll |
استنزاف المخرجات الجديدة لجلسة (ويُبلغ أيضًا عن حالة الخروج). |
log |
قراءة المخرجات المجمّعة وتلميحات استعادة الإدخال. يدعم offset وlimit. |
write |
إرسال stdin (data، مع eof اختياريًا). |
send-keys |
إرسال رموز مفاتيح أو بايتات صريحة إلى جلسة مدعومة بطرفية PTY. |
submit |
إرسال Enter/محرف إرجاع العربة إلى جلسة مدعومة بطرفية PTY. |
paste |
إرسال نص حرفي، مع إمكانية تغليفه في وضع اللصق المحدد بأقواس. |
kill |
إنهاء جلسة تعمل في الخلفية. |
clear |
إزالة جلسة منتهية من الذاكرة. |
remove |
إنهاء الجلسة إذا كانت قيد التشغيل، وإلا مسحها إذا كانت منتهية. |
ملاحظات:
- لا تُدرج أو تُحفظ إلا الجلسات التي تعمل في الخلفية — في الذاكرة فقط، وليس على القرص. تُفقد الجلسات عند إعادة تشغيل العملية.
- تمنع جلسة خلفية نشطة التعليق التعاوني للمضيف وإعادة التشغيل الآمنة لـ Gateway حتى يؤكد مالك العملية خروجها الفعلي.
- يمكن لـ
process removeإخفاء جلسة قيد التشغيل فورًا بعد طلب إنهائها؛ يظل التعليق وإعادة التشغيل محظورين حتى تأكيد الخروج. - لا تُحفظ سجلات الجلسة في سجل المحادثة إلا إذا شغّلت
process poll/logوسُجلت نتيجة الأداة. - يقتصر نطاق
processعلى كل وكيل؛ ولا يرى إلا الجلسات التي بدأها ذلك الوكيل. - استخدم
poll/logلمعرفة الحالة أو السجلات أو تأكيد الإكمال عندما لا يكون إيقاظ الإكمال التلقائي متاحًا. - استخدم
logقبل استعادة جلسة CLI تفاعلية، لكي يظهر النص الحالي وحالة stdin وتلميح انتظار الإدخال معًا. - استخدم
write/send-keys/submit/paste/killعندما تحتاج إلى إدخال أو تدخل. - يتضمن
process listقيمةnameمشتقة (فعل الأمر مع الهدف) للمراجعة السريعة. - لا تعرض
process listوpollوlogالقيمةwaitingForInputإلا عندما لا يزال للجلسة stdin قابلًا للكتابة وقد ظلت خاملة مدة تتجاوز عتبة انتظار الإدخال (القيمة الافتراضية 15000 مللي ثانية،OPENCLAW_PROCESS_INPUT_WAIT_IDLE_MS). - يستخدم
process logقيمتيoffset/limitالمستندتين إلى الأسطر. عند حذف كلتيهما، يعيد آخر 200 سطر مع تلميح للتنقل بين الصفحات. عند تعيينoffsetدونlimit، يعيد المحتوى منoffsetإلى النهاية (دون حد أقصى قدره 200). - تنتظر قيمة
timeoutفيpollحتى ذلك العدد من المللي ثواني قبل العودة؛ وتُحصر القيم التي تتجاوز 30000 عند 30000. - الاستطلاع مخصص لمعرفة الحالة عند الطلب، وليس لجدولة حلقات الانتظار. إذا كان ينبغي تنفيذ العمل لاحقًا، فاستخدم Cron.
أمثلة
شغّل مهمة طويلة واستطلعها لاحقًا:
{ "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }{ "tool": "process", "action": "poll", "sessionId": "<id>" }افحص جلسة تفاعلية قبل إرسال الإدخال:
{ "tool": "process", "action": "log", "sessionId": "<id>" }ابدأ فورًا في الخلفية:
{ "tool": "exec", "command": "npm run build", "background": true }أرسل stdin:
{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n" }أرسل مفاتيح PTY:
{ "tool": "process", "action": "send-keys", "sessionId": "<id>", "keys": ["C-c"] }أرسل السطر الحالي:
{ "tool": "process", "action": "submit", "sessionId": "<id>" }الصق نصًا حرفيًا:
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }ذو صلة
Was this useful?