الوثائق

خطوات الكود (Code Steps)

تنفّذ عقدة code_step منطقًا مخصّصًا في sandbox من نوع Starlark — قابلة للتحرير بحرّية، ومحدودة بقائمة أدوات مسموح بها.

خطوات الكود (code_step)

بعض المنطق أخصّ من أن يُنفَّذ عبر operator compute، لكنه في الوقت نفسه أكثر حتميةً من أن يستدعي وكيل LLM: مطابقات متعدّدة المصادر، حسابات عمل مُفصَّلة، تطبيعات غريبة. ولهذه الحالات، تنفّذ عقدة code_step كودًا داخل sandbox، بلا استدعاء LLM وبإخراج متوقَّع.

يُحرَّر الكود مباشرةً، كأي حقل تهيئة آخر: لا يوجد أي مفتاح مقفل في code_step، ولا يُشترط أي اعتماد خاص بالكود. ويسري التعديل بمجرّد نشر الـpipeline، عند التنفيذ التالي.

نموذج التنفيذ

ينفّذ code_step لغة Starlark — وهي لهجة من Python مصمَّمة للعزل: بلا وصول إلى نظام الملفات، بلا شبكة، بلا import، بلا حلقة while ولا عَوْدية (recursion)، حتمية، ومحدودة بميزانية زمنية. ولا يرى الكود سوى:

  • الـمدخلات التي تربطها به صراحةً (input_paths).
  • الـأدوات التي تصرّح له باستدعائها (allowed_tools).

وكل ما عدا ذلك بعيد المنال. فلا تستطيع خطوة كود الوصول إلى مورد لم تُسلّمه إليها.

التهيئة

الحقلالغرض
الكودمصدر Starlark الذي يُنفَّذ، ويُحرَّر مباشرةً.
المدخلات (input_paths)ربط variable → selector. ولا تُعرَض على الكود سوى مفاتيح السياق هذه. وتُرفَض المفاتيح الداخلية (_*).
قائمة الأدوات المسموح بها (allowed_tools)الأدوات القابلة للاستدعاء عبر tool(name, args)، بحدّ أقصى 50 استدعاءً لكل تنفيذ. ويرث كل استدعاء ضمانات الأداة نفسها (حماية SSRF، الفوترة، التدقيق، مفتاح الإيقاف).
مفتاح الإخراج (output_key)مكان وضع النتيجة (القابلة للتسلسل بصيغة JSON) في السياق. وتقرأ العُقد اللاحقة هذا المفتاح. إذا كان فارغًا = لا تُخزَّن النتيجة.
ميزانية التنفيذ (timeout_ms)سقف زمني: 5 000 مللي ثانية افتراضيًا، و30 000 مللي ثانية كحدّ أقصى. والخطوة التي تتجاوزه تفشل.

أين حدّ الأمان

اللغة ليست التهديد: فـStarlark معزولة بحكم التصميم — فهي وحدها لا تستطيع قراءة ملف، ولا الوصول إلى الشبكة، ولا التكرار إلى ما لا نهاية. والحساب الصِّرف غير مؤذٍ.

القدرة الحقيقية الوحيدة هي جسر tool()، وهو محدود بـقائمة الأدوات المسموح بها المفروضة في وقت التشغيل: فلا يستطيع الكود استدعاء سوى الأدوات التي أدرجتها (ويُرفَض أي استدعاء آخر)، ولكلٍّ منها ضماناتها الخاصة (حماية SSRF، الفوترة، التدقيق، مفتاح الإيقاف). وتُحرَّر قائمة الأدوات المسموح بها بالحرّية نفسها التي يُحرَّر بها الكود: فباختيار الأدوات تحدّد ما يُسمح للخطوة بفعله.

قائمة أدوات فارغة = بلا قدرة على أي أثر جانبي: تكتفي الخطوة بالحساب على مدخلاتها وإنتاج مخرج.

متى تستخدمها

  • نعم: منطق حتمي يمكنك وصفه بدقّة، لكنه يتجاوز عمليات compute المدمجة (مطابقة عدّة قوائم، قواعد عمل مركّبة، صيغ خاصّة).
  • لا: عامل تصفية أو تجميع أو إسقاط بسيط ← يكفي operator compute.
  • لا: مهمّة تتطلّب حكمًا أو كتابةً مفتوحة ← تلك مهمّة agent، لا كود.