Gateway
أداة التنفيذ في الخلفية والعمليات
يشغّل OpenClaw أوامر الصدفة عبر أداة exec ويحتفظ بالمهام طويلة التشغيل في الذاكرة. تدير أداة process تلك الجلسات الخلفية.
أداة exec
المعاملات الرئيسية:
command(مطلوب)yieldMs(الافتراضي 10000): النقل التلقائي إلى الخلفية بعد هذا التأخيرbackground(bool): التشغيل في الخلفية فورًاtimeout(بالثواني، الافتراضيtools.exec.timeoutSec): يقتل العملية بعد انتهاء هذه المهلة؛ اضبطtimeout: 0فقط لتعطيل مهلة عملية exec لذلك الاستدعاءelevated(bool): التشغيل خارج صندوق العزل إذا كان الوضع المرتفع مفعّلًا/مسموحًا (gatewayافتراضيًا، أوnodeعندما يكون هدف exec هوnode)- هل تحتاج إلى TTY حقيقي؟ اضبط
pty: true. workdir,env
السلوك:
- تُرجع عمليات التشغيل في المقدمة الخرج مباشرة.
- عند النقل إلى الخلفية (صراحةً أو بسبب المهلة)، تُرجع الأداة
status: "running"+sessionIdوذيلًا قصيرًا. - ترث عمليات الخلفية وعمليات
yieldMsالقيمةtools.exec.timeoutSecما لم يوفّر الاستدعاء قيمةtimeoutصريحة. - يُحتفظ بالخرج في الذاكرة حتى تُستطلَع الجلسة أو تُمسح.
- إذا كانت أداة
processغير مسموح بها، يعملexecتزامنيًا ويتجاهلyieldMs/background. - تتلقى أوامر exec المُنشأة
OPENCLAW_SHELL=execلقواعد الصدفة/الملف الشخصي الواعية بالسياق. - للعمل طويل التشغيل الذي يبدأ الآن، ابدأه مرة واحدة واعتمد على تنبيه الإكمال التلقائي عندما يكون مفعّلًا ويصدر الأمر خرجًا أو يفشل.
- إذا لم يكن تنبيه الإكمال التلقائي متاحًا، أو كنت تحتاج إلى تأكيد نجاح هادئ
لأمر خرج بنجاح من دون خرج، فاستخدم
processلتأكيد الإكمال. - لا تحاكِ التذكيرات أو المتابعات المؤجلة بحلقات
sleepأو الاستطلاع المتكرر؛ استخدم Cron للعمل المستقبلي.
تجسير العمليات الفرعية
عند إنشاء عمليات فرعية طويلة التشغيل خارج أدوات exec/process (مثلًا، عمليات إعادة تشغيل CLI أو مساعدي Gateway)، أرفق مساعد جسر العمليات الفرعية بحيث تُمرَّر إشارات الإنهاء وتُفصل المستمعات عند الخروج/الخطأ. يتجنب هذا العمليات اليتيمة على systemd ويحافظ على اتساق سلوك الإيقاف عبر المنصات.
تجاوزات البيئة:
PI_BASH_YIELD_MS: مدة الإرجاع الافتراضية (ms)PI_BASH_MAX_OUTPUT_CHARS: حد الخرج داخل الذاكرة (chars)OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS: حد stdout/stderr المعلّق لكل دفق (chars)PI_BASH_JOB_TTL_MS: TTL للجلسات المنتهية (ms، محدود بين 1m و3h)OPENCLAW_PROCESS_INPUT_WAIT_IDLE_MS: عتبة خمول الخرج قبل وسم جلسات الخلفية القابلة للكتابة بأنها غالبًا تنتظر إدخالًا (الافتراضي 15000 ms)
الإعداد (المفضل):
tools.exec.backgroundMs(الافتراضي 10000)tools.exec.timeoutSec(الافتراضي 1800)tools.exec.cleanupMs(الافتراضي 1800000)tools.exec.notifyOnExit(الافتراضي true): يضيف حدث نظام إلى قائمة الانتظار + يطلب Heartbeat عند خروج exec يعمل في الخلفية.tools.exec.notifyOnExitEmptySuccess(الافتراضي false): عند true، يضيف أيضًا أحداث إكمال إلى قائمة الانتظار لعمليات التشغيل الخلفية الناجحة التي لم تنتج خرجًا.
أداة process
الإجراءات:
list: الجلسات الجارية + المنتهيةpoll: تفريغ الخرج الجديد لجلسة (ويبلّغ أيضًا عن حالة الخروج)log: قراءة الخرج المجمّع وإظهار تلميحات استرداد الإدخال (يدعمoffset+limit)write: إرسال stdin (data، وeofاختياري)send-keys: إرسال رموز مفاتيح صريحة أو بايتات إلى جلسة مدعومة بـ PTYsubmit: إرسال Enter / carriage return إلى جلسة مدعومة بـ PTYpaste: إرسال نص حرفي، مع إمكانية تغليفه اختياريًا في وضع اللصق ذي الأقواسkill: إنهاء جلسة خلفيةclear: إزالة جلسة منتهية من الذاكرة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 قابل للكتابة وتكون خاملة مدة أطول من عتبة انتظار الإدخال. - يستخدم
process logقيمتيoffset/limitالمعتمدتين على الأسطر. - عند حذف كل من
offsetوlimit، يُرجع آخر 200 سطر ويتضمن تلميح ترقيم صفحات. - عند توفير
offsetوحذفlimit، يُرجع منoffsetحتى النهاية (غير محدود بـ 200). - الاستطلاع مخصص للحالة عند الطلب، وليس لجدولة حلقات انتظار. إذا كان العمل يجب أن يحدث لاحقًا، فاستخدم 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" }