- الرئيسية
- Documentation
- الموفرون
- أداة Python ووقت تشغيل IPython
أداة Python ووقت تشغيل IPython
تصف هذه الوثيقة مكدس تنفيذ Python الحالي في packages/coding-agent.
تغطي سلوك الأداة، ودورة حياة النواة/البوابة، ومعالجة البيئة، ودلالات التنفيذ، وعرض المخرجات، وأنماط الفشل التشغيلي.
النطاق والملفات الرئيسية
Section titled “النطاق والملفات الرئيسية”- واجهة الأداة:
src/tools/python.ts - تنسيق النواة لكل جلسة/استدعاء:
src/ipy/executor.ts - بروتوكول النواة + تكامل البوابة:
src/ipy/kernel.ts - منسق البوابة المحلية المشتركة:
src/ipy/gateway-coordinator.ts - عارض الوضع التفاعلي لتشغيل Python الذي يبدأه المستخدم:
src/modes/components/python-execution.ts - تصفية وقت التشغيل/البيئة وتحليل مسار Python:
src/ipy/runtime.ts
ما هي أداة Python
Section titled “ما هي أداة Python”تُنفّذ أداة python خلية Python واحدة أو أكثر عبر نواة مدعومة ببوابة Jupyter Kernel Gateway (وليس عن طريق إطلاق python -c مباشرةً لكل خلية).
معاملات الأداة:
{ cells: Array<{ code: string; title?: string }>; timeout?: number; // بالثواني، محدودة بين 1..600، الافتراضي 30 cwd?: string; reset?: boolean; // إعادة تعيين النواة قبل الخلية الأولى فقط}الأداة تعمل بـ concurrency = "exclusive" للجلسة، لذا لا تتداخل الاستدعاءات.
دورة حياة البوابة
Section titled “دورة حياة البوابة”الأوضاع
Section titled “الأوضاع”هناك مساران للبوابة:
-
البوابة الخارجية (
PI_PYTHON_GATEWAY_URLمُضبوطة)- تستخدم عنوان URL المُهيَّأ مباشرةً.
- مصادقة اختيارية عبر
PI_PYTHON_GATEWAY_TOKEN. - لا يتم إطلاق أي عملية بوابة محلية أو إدارتها.
-
البوابة المحلية المشتركة (المسار الافتراضي)
- تستخدم عملية مشتركة واحدة يتم تنسيقها تحت
~/.xcsh/agent/python-gateway. - ملف البيانات الوصفية:
gateway.json - ملف القفل:
gateway.lock - أمر الإطلاق:
python -m kernel_gateway- مرتبطة بـ
127.0.0.1:<allocated-port> - فحص سلامة الإقلاع:
GET /api/kernelspecs
- تستخدم عملية مشتركة واحدة يتم تنسيقها تحت
تنسيق البوابة المحلية المشتركة
Section titled “تنسيق البوابة المحلية المشتركة”acquireSharedGateway():
- تأخذ قفل الملف (
gateway.lock) مع نبضة قلب. - تُعيد استخدام
gateway.jsonإذا كان PID حياً واجتاز فحص السلامة. - تُنظّف المعلومات/PIDs القديمة عند الحاجة.
- تبدأ بوابة جديدة حين لا توجد بوابة سليمة.
releaseSharedGateway() هي في الوقت الحالي عملية بلا أثر (إيقاف تشغيل النواة لا يُفكّك البوابة المشتركة).
shutdownSharedGateway() تُنهي العملية المشتركة صراحةً وتمسح بيانات البوابة الوصفية.
قيد مهم
Section titled “قيد مهم”python.sharedGateway=false مرفوض عند بدء تشغيل النواة:
- الخطأ:
Shared Python gateway required; local gateways are disabled - لا يوجد وضع بوابة محلية غير مشتركة لكل عملية.
دورة حياة النواة
Section titled “دورة حياة النواة”يستخدم كل تنفيذ نواةً تُنشأ عبر POST /api/kernels على البوابة المحددة.
تسلسل إقلاع النواة:
- فحص التوافر (
checkPythonKernelAvailability) - إنشاء النواة (
/api/kernels) - فتح WebSocket (
/api/kernels/:id/channels) - تهيئة بيئة النواة (
cwd، متغيرات البيئة،sys.path) - تنفيذ
PYTHON_PRELUDE - تحميل وحدات الامتداد من:
- المستخدم:
~/.xcsh/agent/modules/*.py - المشروع:
<cwd>/.xcsh/modules/*.py(يتجاوز وحدة المستخدم بالاسم ذاته)
- المستخدم:
إيقاف تشغيل النواة:
- حذف النواة البعيدة عبر
DELETE /api/kernels/:id - إغلاق WebSocket
- استدعاء خطاف تحرير البوابة المشتركة (بلا أثر حالياً)
دلالات استمرارية الجلسة
Section titled “دلالات استمرارية الجلسة”يتحكم python.kernelMode في إعادة استخدام النواة:
-
session(الافتراضي)- يُعيد استخدام جلسات النواة مفهرسةً بهوية الجلسة + cwd.
- يتم تسلسل التنفيذ لكل جلسة عبر طابور انتظار.
- تُطرد الجلسات الخاملة بعد 5 دقائق.
- بحد أقصى 4 جلسات؛ تُطرد الأقدم عند تجاوز الحد.
- تكشف فحوصات النبضة النوى المتوقفة.
- يُسمح بإعادة التشغيل التلقائي مرة واحدة؛ التعطل المتكرر => فشل نهائي.
-
per-call- يُنشئ نواةً جديدة لكل طلب تنفيذ.
- يُوقف النواة بعد انتهاء الطلب.
- لا استمرارية في الحالة بين الاستدعاءات.
سلوك الخلايا المتعددة في استدعاء أداة واحد
Section titled “سلوك الخلايا المتعددة في استدعاء أداة واحد”تعمل الخلايا بالتسلسل في نفس نسخة النواة لذلك الاستدعاء.
إذا أخفقت خلية وسيطة:
- تبقى حالة الخلية الأسبق في الذاكرة.
- تُعيد الأداة خطأً محدداً يشير إلى الخلية التي أخفقت.
- لا تُنفَّذ الخلايا اللاحقة.
reset=true يُطبَّق فقط على تنفيذ الخلية الأولى في ذلك الاستدعاء.
تصفية البيئة وتحليل وقت التشغيل
Section titled “تصفية البيئة وتحليل وقت التشغيل”تُصفَّى البيئة قبل إطلاق وقت تشغيل البوابة/النواة:
- تشمل القائمة البيضاء المتغيرات الأساسية مثل
PATH،HOME، متغيرات المنطقة،VIRTUAL_ENV،PYTHONPATH، وغيرها. - بوادئ مسموح بها:
LC_،XDG_،PI_ - تحذف القائمة السوداء مفاتيح API الشائعة (OpenAI/Anthropic/Gemini/إلخ.)
ترتيب اختيار وقت التشغيل:
- البيئة الافتراضية النشطة/الموجودة (
VIRTUAL_ENV، ثم<cwd>/.venv،<cwd>/venv) - البيئة الافتراضية المُدارة في
~/.xcsh/python-env pythonأوpython3في PATH
عند اختيار بيئة افتراضية، يُضاف مسار bin/Scripts إلى مقدمة PATH.
تهيئة بيئة النواة داخل Python أيضاً:
os.chdir(cwd)- حقن خريطة البيئة المُقدَّمة في
os.environ - التأكد من أن cwd موجود في
sys.path
توافر الأداة واختيار الوضع
Section titled “توافر الأداة واختيار الوضع”يتحكم python.toolMode (الافتراضي both) + التجاوز الاختياري PI_PY في الكشف:
ipy-onlybash-onlyboth
القيم المقبولة لـ PI_PY:
0/bash->bash-only1/py->ipy-onlymix/both->both
إذا فشل الفحص المسبق لـ Python، يتراجع إنشاء الأداة إلى bash-only لتلك الجلسة.
تدفق التنفيذ والإلغاء/المهلة
Section titled “تدفق التنفيذ والإلغاء/المهلة”مهلة مستوى الأداة
Section titled “مهلة مستوى الأداة”مهلة أداة python بالثواني، الافتراضي 30، محدودة بين 1..600.
تجمع الأداة:
- إشارة إلغاء المستدعي
- إشارة إلغاء المهلة
مع AbortSignal.any(...).
إلغاء تنفيذ النواة
Section titled “إلغاء تنفيذ النواة”عند الإلغاء/المهلة:
- يُوسَم التنفيذ بالإلغاء.
- تُحاوَل مقاطعة النواة عبر REST (
POST /interrupt) وقناة التحكمinterrupt_request. - تتضمن النتيجة
cancelled=true. - تُضيف مسار المهلة تعليقاً على المخرجات:
Command timed out after <n> seconds.
سلوك stdin
Section titled “سلوك stdin”المدخلات التفاعلية stdin غير مدعومة.
إذا أصدرت النواة input_request:
- تسجّل الأداة
stdinRequested=true - تُصدر نصاً توضيحياً
- ترسل
input_replyفارغاً - يُعامَل التنفيذ على أنه فشل في طبقة المنفّذ
التقاط المخرجات وعرضها
Section titled “التقاط المخرجات وعرضها”فئات المخرجات الملتقطة
Section titled “فئات المخرجات الملتقطة”من رسائل النواة:
stream-> مقاطع نص عاديdisplay_data/execute_result-> معالجة العرض الغنيerror-> نص تتبع الخطأ- MIME مخصص
application/x-xcsh-status-> أحداث الحالة المنظمة
أولوية MIME في العرض:
text/markdowntext/plaintext/html(يُحوَّل إلى Markdown أساسي)
يُلتقط إضافةً إلى ذلك كمخرجات منظمة:
application/json-> بيانات شجرة JSONimage/png-> حمولات الصورapplication/x-xcsh-status-> أحداث الحالة
التخزين والاقتطاع
Section titled “التخزين والاقتطاع”تتدفق المخرجات عبر OutputSink ويمكن استمرارها في تخزين الأدوات المساعدة.
يمكن أن تتضمن نتائج الأداة بيانات وصفية للاقتطاع وartifact://<id> لاسترداد المخرجات الكاملة.
سلوك العارض
Section titled “سلوك العارض”- عارض الأداة (
python.ts):- يعرض كتل خلايا الكود مع حالة لكل خلية
- يعرض المعاينة المطوية افتراضياً لـ 10 أسطر
- يدعم الوضع الموسّع للمخرجات الكاملة وتفاصيل الحالة الأغنى
- العارض التفاعلي (
python-execution.ts):- يُستخدم لتنفيذ Python الذي يبدأه المستخدم في TUI
- يعرض المعاينة المطوية افتراضياً لـ 20 سطراً
- يقيّد الأسطر الفردية الطويلة جداً إلى 4000 حرف لسلامة العرض
- يعرض إشعارات الإلغاء/الخطأ/الاقتطاع
دعم البوابة الخارجية
Section titled “دعم البوابة الخارجية”اضبط:
export PI_PYTHON_GATEWAY_URL="http://127.0.0.1:8888"# اختياري:export PI_PYTHON_GATEWAY_TOKEN="..."الاختلافات في السلوك عن البوابة المحلية المشتركة:
- لا ملفات قفل/معلومات للبوابة المحلية
- لا إطلاق/إنهاء لعملية محلية
- تعمل فحوصات السلامة وعمليات CRUD للنواة على النقطة الطرفية الخارجية
- تُعرض أخطاء المصادقة مع توجيه صريح بشأن الرمز المميز
استكشاف الأخطاء التشغيلية وإصلاحها (أنماط الفشل الحالية)
Section titled “استكشاف الأخطاء التشغيلية وإصلاحها (أنماط الفشل الحالية)”-
أداة Python غير متاحة
- تحقق من
python.toolMode/PI_PY. - إذا فشل الفحص المسبق، يتراجع وقت التشغيل إلى bash-only.
- تحقق من
-
أخطاء توافر النواة
-
يتطلب الوضع المحلي أن يكون كلٌّ من
kernel_gatewayوipykernelقابلَين للاستيراد في وقت تشغيل Python المحلول. -
ثبّتهما بـ:
Terminal window python -m pip install jupyter_kernel_gateway ipykernel
-
-
python.sharedGateway=falseيسبب فشل الإقلاع- هذا متوقع مع التطبيق الحالي.
-
أخطاء مصادقة/وصول البوابة الخارجية
- 401/403 -> اضبط
PI_PYTHON_GATEWAY_TOKEN. - مهلة/تعذر الوصول -> تحقق من URL/الشبكة وسلامة البوابة.
- 401/403 -> اضبط
-
تعليق التنفيذ ثم انتهاء المهلة
- زد
timeoutالأداة (بحد أقصى 600 ثانية) إذا كان حجم العمل مشروعاً. - للكود المتوقف، يُشغّل الإلغاء مقاطعة النواة لكن كود المستخدم قد يحتاج إلى إعادة هيكلة.
- زد
-
مطالبات stdin/input في كود Python
input()غير مدعومة بشكل تفاعلي في مسار وقت التشغيل هذا؛ مرّر البيانات برمجياً.
-
استنفاد الموارد (
EMFILE/ عدد كبير جداً من الملفات المفتوحة)- يُشغّل مدير الجلسات استرداد البوابة المشتركة (تفكيك الجلسة + إعادة تشغيل البوابة المشتركة).
-
أخطاء دليل العمل
- تتحقق الأداة من وجود
cwdوكونه دليلاً قبل التنفيذ.
- تتحقق الأداة من وجود
متغيرات البيئة ذات الصلة
Section titled “متغيرات البيئة ذات الصلة”PI_PY— تجاوز كشف الأداة (تعيينbash-only/ipy-only/bothالموضّح أعلاه)PI_PYTHON_GATEWAY_URL— استخدام بوابة خارجيةPI_PYTHON_GATEWAY_TOKEN— رمز مصادقة البوابة الخارجية الاختياريPI_PYTHON_SKIP_CHECK=1— تجاوز فحوصات الإقلاع/التدفئة لـ PythonPI_PYTHON_IPC_TRACE=1— تسجيل آثار إرسال/استقبال IPC للنواةPI_DEBUG_STARTUP=1— إصدار علامات تصحيح مرحلة الإقلاع