أداة Exec
تشغيل أوامر الصدفة في مساحة العمل. تدعم التنفيذ في المقدّمة + الخلفية عبرprocess.
إذا كان process غير مسموح، فإن exec يعمل بشكل متزامن ويتجاهل yieldMs/background.
جلسات الخلفية تكون محصورة لكل وكيل؛ حيث إن process لا يرى إلا الجلسات التابعة لنفس الوكيل.
المعلمات
command(مطلوب)workdir(الافتراضي cwd)env(تجاوزات مفتاح/قيمة)yieldMs(الافتراضي 10000): التحويل التلقائي إلى الخلفية بعد مهلةbackground(قيمة منطقية): التشغيل في الخلفية فورًاtimeout(بالثواني، الافتراضي 1800): الإنهاء عند الانقضاءpty(قيمة منطقية): التشغيل داخل طرفية زائفة عند توفرها (واجهات CLI المعتمدة على TTY فقط، وكلاء البرمجة، واجهات الطرفية)host(sandbox | gateway | node): مكان التنفيذsecurity(deny | allowlist | full): وضع الإنفاذ لـgateway/nodeask(off | on-miss | always): مطالبات الموافقة لـgateway/nodenode(سلسلة): معرّف/اسم العُقدة لـhost=nodeelevated(قيمة منطقية): طلب وضع مرتفع (مضيف Gateway)؛ ولا يُفرضsecurity=fullإلا عندما يُحلّ الوضع المرتفع إلىfull
hostافتراضيًا هوsandbox.- يتم تجاهل
elevatedعندما يكون sandboxing معطّلًا (إذ يعمل exec بالفعل على المضيف). - يتم التحكم في موافقات
gateway/nodeبواسطة~/.openclaw/exec-approvals.json. - يتطلب
nodeعُقدة مقترنة (تطبيق مُرافِق أو مضيف عُقدة بلا واجهة). - إذا كانت هناك عدة عُقد متاحة، فاضبط
exec.nodeأوtools.exec.nodeلاختيار واحدة. - على المضيفين غير العاملين بنظام Windows، يستخدم exec القيمة
SHELLعند تعيينها؛ وإذا كانSHELLهوfish، فإنه يفضّلbash(أوsh) منPATHلتجنّب سكربتات غير المتوافقة مع fish، ثم يعود إلىSHELLإذا لم يوجد أيٌّ منهما. - تنفيذ المضيف (
gateway/node) يرفضenv.PATHوتجاوزات المُحمِّل (LD_*/DYLD_*) من أجل منع اختطاف الثنائيات أو حقن الشيفرة. - مهم: sandboxing معطّل افتراضيًا. إذا كان sandboxing معطّلًا، فإن
host=sandboxيعمل مباشرةً على مضيف Gateway (من دون حاوية) ولا يتطلب موافقات. لفرض الموافقات، شغّل باستخدامhost=gatewayواضبط موافقات exec (أو فعّل sandboxing).
التهيئة
tools.exec.notifyOnExit(الافتراضي: true): عند التفعيل، تقوم جلسات exec التي تعمل في الخلفية بإدراج حدث نظام وطلب نبضة قلب عند الخروج.tools.exec.approvalRunningNoticeMs(الافتراضي: 10000): إصدار إشعار «قيد التشغيل» واحد عندما يستمر exec الخاضع للموافقة أطول من هذه المدة (0 للتعطيل).tools.exec.host(الافتراضي:sandbox)tools.exec.security(الافتراضي:denyلـ sandbox، وallowlistلـ Gateway + العُقدة عند عدم التعيين)tools.exec.ask(الافتراضي:on-miss)tools.exec.node(الافتراضي: غير معيّن)tools.exec.pathPrepend: قائمة أدلة تُضاف في المقدّمة إلىPATHلتشغيل exec.tools.exec.safeBins: ثنائيات آمنة لمدخل stdin فقط يمكن تشغيلها دون إدخالات صريحة في قائمة السماح.
التعامل مع PATH
host=gateway: يدمجPATHالخاص بصدفة تسجيل الدخول لديك في بيئة exec. تُرفض تجاوزاتenv.PATHعند تنفيذ المضيف. ويستمر تشغيل البرنامج الخدمي نفسه معPATHالأدنى:- macOS:
/opt/homebrew/bin,/usr/local/bin,/usr/bin,/bin - Linux:
/usr/local/bin,/usr/bin,/bin
- macOS:
host=sandbox: يشغّلsh -lc(صدفة تسجيل الدخول) داخل الحاوية، لذا قد يعيد/etc/profileتعيينPATH. يضيف OpenClaw في المقدّمةenv.PATHبعد استيراد ملفات التعريف عبر متغير بيئة داخلي (من دون تفسير للصدفة)؛ وينطبقtools.exec.pathPrependهنا أيضًا.host=node: تُرسل إلى العُقدة فقط تجاوزات البيئة غير المحظورة التي تمرّرها. تُرفض تجاوزاتenv.PATHعند تنفيذ المضيف. إذا كنت بحاجة إلى إدخالات PATH إضافية على عقدة ما، فقم بتهيئة بيئة خدمة المضيف الخاصة بالعقدة (systemd/launchd) أو ثبّت الأدوات في المواقع القياسية.
تجاوزات الجلسة (/exec)
استخدم /exec لتعيين الإعدادات الافتراضية لكل جلسة لكل من host و security و ask و node.
أرسل /exec دون وسائط لعرض القيم الحالية.
مثال:
نموذج التفويض
لا يتم احترام/exec إلا للمرسلين المخوّلين (قوائم سماح القنوات/الاقتران إضافةً إلى commands.useAccessGroups).
يقوم بتحديث حالة الجلسة فقط ولا يكتب التهيئة. لتعطيل exec بشكل صارم، ارفضه عبر سياسة الأدوات
(tools.deny: ["exec"] أو لكل وكيل). تظل موافقات المضيف سارية ما لم تعيّن صراحةً
security=full و ask=off.
موافقات Exec (التطبيق المُرافِق / مضيف العُقدة)
يمكن للوكلاء المعزولين بـ sandbox أن يتطلبوا موافقة لكل طلب قبل أن يعملexec على مضيف Gateway أو مضيف العُقدة.
انظر موافقات Exec لمعرفة السياسة وقائمة السماح وتدفق واجهة المستخدم.
عندما تكون الموافقات مطلوبة، تعيد أداة exec فورًا
status: "approval-pending" ومعرّف موافقة. بمجرد الموافقة (أو الرفض / انتهاء المهلة)،
يبعث Gateway أحداث نظام (Exec finished / Exec denied). وإذا ظل الأمر
قيد التشغيل بعد tools.exec.approvalRunningNoticeMs، يُصدَر إشعار واحد Exec running.
قائمة السماح + الثنائيات الآمنة
يطابق إنفاذ قائمة السماح مسارات الثنائيات المُحلّة فقط (من دون مطابقة أسماء مجردة). عندما يكونsecurity=allowlist، تُسمح أوامر الصدفة تلقائيًا فقط إذا كان كل مقطع من خط الأنابيب
مدرجًا في قائمة السماح أو ضمن ثنائي آمن. يُرفض التسلسل (; و && و ||) وإعادة التوجيه في
وضع قائمة السماح.
إعادة التوجيهات لا تزال غير مدعومة.
أمثلة
الواجهة:apply_patch (تجريبي)
apply_patch هي أداة فرعية من exec لإجراء تعديلات منظّمة على عدة ملفات.
فعّلها صراحةً:
- متاحة فقط لنماذج OpenAI/OpenAI Codex.
- تظل سياسة الأدوات سارية؛ إذ يسمح
allow: ["exec"]ضمنيًا بـapply_patch. - تقع التهيئة تحت
tools.exec.applyPatch. tools.exec.applyPatch.workspaceOnlyالقيمة الافتراضية لها هيtrue(ضمن مساحة العمل). عيّنها إلىfalseفقط إذا كنت تريد عمدًا أن يقومapply_patchبالكتابة/الحذف خارج دليل مساحة العمل.