إنتقل إلى المحتوى الرئيسي

بيئة التشغيل

بيئة تشغيل EstaCoda هي البيئة التي تملك تنفيذ الجلسة. تحمّل ملفًا شخصيًا واحدًا محددًا، وتبني البنية المشتركة لبيئة التشغيل، وتجمع المكونات المقيّدة بالجلسة، وتنفّذ عمل المزوّدين والأدوات تحت السياسة النشطة، ثم تحفظ الحالة الناتجة.

تشرح هذه الصفحة كيف يتم إنشاء بيئة التشغيل، ما الذي يُعاد استخدامه، ما الذي يُعاد بناؤه لكل جلسة، وأين تحدث الأعطال عادة.


ما هي بيئة التشغيل

تجمع بيئة التشغيل بين بنية مشتركة ومكونات تنفيذ مقيّدة بالجلسة.

المجالأمثلة
حالة الملف الشخصيالإعدادات، الاعتمادات، ملفات الذاكرة، المهارات، حالة البوابة
بنية المزوّدين المشتركةسجل المزوّدين، منفّذ المزوّدين، المسار الأساسي، مسارات الرجوع الاحتياطي، المسارات المساعدة
بنية الأدوات المشتركةمزوّدو الأدوات المدمجة، أدوات MCP المكتشفة، مدير العمليات، backend المتصفح
بنية الذاكرة المشتركةمخزن الذاكرة، مزوّد الذاكرة، فهرس الذاكرة، خدمة الاسترجاع، باني سياق prompt
المكونات المقيّدة بالجلسةسجل الأدوات، منفّذ الأدوات، مخطط الأدوات، حلقة جولات المزوّد، موجّه بيئة التشغيل، حلقة الوكيل
الحفظقاعدة بيانات الجلسات، artifacts، مسار التنفيذ، cron، حالة سير العمل حيث تتوفر
السياسةوضع الأمان، مخزن الثقة، التحكم بالموافقات، سياسة منع الفشل في الجلسات الفرعية

تُحمّل إعدادات بيئة التشغيل من ملف شخصي واحد محدد فقط. تتحكم ثقة المساحة العملية في سلوك الإجراءات المحلية، وقد تؤثر في قدرات بيئة التشغيل الموثوقة مثل بدء MCP، لكنها لا تغيّر ملف الإعدادات الشخصي الذي يتم تحميله.


اختيار الملف الشخصي

تُحمّل إعدادات بيئة التشغيل من ملف شخصي واحد، بهذا الترتيب:

  1. profileId صريح مُمرر إلى الأمر
  2. الملف الشخصي النشط إذا لم يُمرر ملف شخصي صريح
  3. default إذا لم يكن هناك ملف شخصي نشط

لا يوجد دمج بين إعدادات المستخدم والمشروع. تعيش حالة الملف الشخصي تحت:

~/.estacoda/profiles/<id>/

تُقيّد الجلسات بـ profile_id في قاعدة بيانات الجلسات. يرفض createRuntime() جلسة موجودة إذا كانت تلك الجلسة تنتمي إلى ملف شخصي مختلف عن ملف بيئة التشغيل الجاري إنشاؤها.

راجع البنية لخريطة حدود الحالة الكاملة.


إنشاء بيئة التشغيل

يمر إنشاء بيئة التشغيل بثلاث مراحل عملية.

المرحلة A: البنية المشتركة

يبني createRuntime() البنية المشتركة للملف الشخصي والجلسة المحددين.

ينشئ أو يحل:

البنيةأمثلة
مسارات الحالةمجلد الحالة العام، مجلد حالة الملف الشخصي، جذر المساحة العملية
المخازنمخزن الذاكرة، مخزن artifacts، مخزن cron، قاعدة بيانات الجلسات
بنية الذاكرةمخزن فهرس الذاكرة، مزامنة فهرس الذاكرة، استرجاع الذاكرة المحلية، سياق memory prompt
بنية المزوّدينسجل المزوّدين، منفّذ المزوّدين، المسار الأساسي، مسارات الرجوع الاحتياطي، المسارات المساعدة
بنية المهاراتالمهارات الرسمية، مهارات الملف الشخصي، المهارات المستخرجة من الحزم، مخازن تطور المهارات
بنية MCPخوادم MCP المهيأة وأدوات MCP المكتشفة، مقيّدة بحالة قدرات بيئة التشغيل الموثوقة
حالة العمليات والوسائطمدير العمليات، جذر وسائط القنوات، ذاكرة الصوت المؤقتة، ذاكرة الصور المؤقتة
بنية المتصفحbackend المتصفح، دورة حياة CDP المحلي الخاضعة للإشراف، التنظيف الطارئ
بنية الصوتعامل Whisper المحلي عند تهيئته
بنية promptمحمّل سياق المشروع، موسّع مراجع السياق، خدمة ضغط الجلسة
بنية التفويض المشتركةFileStateTracker، مسارات الأصل، بنية المزوّدين والأدوات المشتركة
مسار التنفيذTrajectoryRecorder للجلسة النشطة

يُحقن التحكم بالموافقات أثناء إنشاء بيئة التشغيل، وتستخدمه طرق بيئة التشغيل التي تمنح الموافقات أو تفحصها أو تلغيها.

المرحلة B: المكونات المقيّدة بالجلسة

يجمع AgentLoopBuilder.buildSession() مكونات التنفيذ المقيّدة بالجلسة.

ينشئ:

المكوّنالدور
ToolRegistryسجل الأدوات المرئي للجلسة
ToolExecutorينفّذ إجراءات الأدوات تحت سياسة الأمان
ToolCallPlannerيربط استدعاءات أدوات المزوّد بخطط أدوات قابلة للتنفيذ
RunRecorderيسجل أحداث الجولة والأدوات والجلسة وبيانات مسار التنفيذ
MemoryRecallOrchestratorيجهّز سياق الاسترجاع لكل جولة
ToolPlanRunnerيشغّل الأدوات المخططة، ويدير التوازي، وحدود الفشل، وحزم المتابعة
ProviderTurnLoopيشغّل تكرارات المزوّد وينهي خرج المزوّد
SkillPlaybookRunnerينفّذ خطوات أدوات skill playbook
NativeToolExecutorينفّذ أوامر بيئة التشغيل الأصلية
IntentRouterيوجّه قصد المستخدم إلى مسارات بيئة التشغيل والمهارات
RuntimeRouterيختار التنفيذ الأصلي، أو تنفيذ المهارة، أو التنفيذ المدعوم بالمزوّد
AgentLoopينسّق حد الجولة والحفظ

يحدث تسجيل الأدوات على مراحل حتى تحصل الأدوات على سياق بيئة التشغيل والجلسة الصحيح:

  1. pre-skill-visibility
  2. post-skill-visibility
  3. post-memory-provider
  4. post-tool-executor

تُضاف أدوات MCP المكتشفة إلى سجل الأدوات المرئي للجلسة أثناء إنشاء الجلسة، إلى جانب مراحل تسجيل الأدوات المدمجة.

المرحلة C: ربط سير العمل

بعد عودة AgentLoopBuilder.buildSession()، يربط createRuntime() دعم سير العمل عندما تكون قاعدة بيانات الجلسات من نوع SQLiteSessionDB.

يشمل ربط سير العمل:

المكوّنالدور
SQLiteWorkflowStoreيحفظ تشغيلات سير العمل، والخطوات، والأحداث، والأقفال، وartifacts
WorkflowLockServiceينسّق أقفال سير العمل
WorkflowEngineينفّذ خطط سير العمل
WorkflowProcessRegistryيتتبع العمليات المرتبطة بسير العمل
WorkflowEventSummaryServiceيضغط سجل أحداث سير العمل
WorkflowCommandDispatcherيتعامل مع أوامر سير العمل
WorkflowAgentLoopAdapterيمرّر جولات سير العمل النشطة عبر حلقة الوكيل
WorkflowRestartRecoveryيعلّم التشغيلات المنقطعة ويستعيد الأقفال القديمة

يحاول النظام ربط سير العمل دون أن يجعل فشله سببًا لإسقاط إنشاء بيئة التشغيل. إذا فشل إعداد سير العمل، يمكن أن يستمر إنشاء بيئة التشغيل من دون دعم سير العمل، ويجب أن تبلغ أوامر سير العمل المتخصصة عن القدرة المفقودة.


حل مسارات المزوّدين

تحل بيئة التشغيل ثلاثة أنواع من مسارات المزوّدين.

المسار الأساسي

يأتي المسار الأساسي من model في إعدادات الملف الشخصي. يُستخدم للاستدلال العادي.

إذا لم يكن المسار الأساسي قابلًا للتشغيل بسبب غياب الاعتمادات، أو تقادم النموذج، أو فشل المزوّد، يبلغ EstaCoda عن الفشل. لا يرجع بصمت إلى مسار آخر إلا إذا كانت مسارات الرجوع الاحتياطي مهيأة.

مسارات الرجوع الاحتياطي

تأتي مسارات الرجوع الاحتياطي من model.fallbacks. لا تُجرّب إلا عندما يفشل المسار الأساسي أثناء التنفيذ.

تحافظ مسارات الرجوع الاحتياطي على بيانات المسار مثل:

البياناتالاستخدام
apiKeyEnvمتغير بيئة الاعتمادات
baseUrlنقطة نهاية المزوّد
apiModeوضع الموائم، مثل OpenAI-compatible أو OpenAI Responses
authMethodوضع الاعتماد أو المصادقة

إذا فشلت كل مسارات الرجوع الاحتياطي، تبلغ الجولة عن الخطأ وتتوقف.

المسارات المساعدة

المسارات المساعدة هي مسارات نماذج متخصصة مهيأة تحت auxiliaryModels. تستخدم سجل المزوّدين ومسار التنفيذ نفسهما المستخدمين للمسارات الأساسية.

الخانةالغرض
visionتحليل الصور
compressionضغط الجلسة دلاليًا
assessorتصنيف الموافقات الذكي
web_extractاستخراج الويب
session_searchالبحث الدلالي في الجلسات
mcpتفويض أدوات MCP
memory_flushعمليات الذاكرة
delegationتفويض الوكلاء الفرعيين
skills_libraryتوزيع المهارات
title_generationتوليد عنوان الجلسة
curatorتنقيح الذاكرة
memory_compactionاختزال ملفات الذاكرة
profile_contextتوليد سياق الملف الشخصي

تفشل أسماء المهام المساعدة غير المدعومة أثناء تطبيع الإعدادات.


حد تنفيذ المزوّدين

يعامل ProviderTurnLoop خرج المزوّد كقابل للاستخدام فقط بعد الإنهاء. يمكن للبث أن يصدر رموزًا مرئية حية، لكن هذه الأسطح لا تستخدم إلا الخرج المرئي النهائي:

السطحيستخدم الخرج النهائي
استدعاءات الأدوات القابلة للتنفيذنعم
محتوى المساعد المحفوظنعم
السجل المرسل إلى المزوّدنعم
الملخصات والضغطنعم
مدخلات الذاكرةنعم
تعلم المهاراتنعم
التصديرنعم

قواعد أمان البث:

  • تُجمع أجزاء استدعاءات الأدوات المبثوثة أثناء بقاء البث مفتوحًا.
  • أخطاء البث تتخلص من الأجزاء المجموعة.
  • البث غير المكتمل يبقى فشلًا من جهة المزوّد.
  • [DONE] علامة نقل داخلية، وليست خرجًا ظاهرًا للمستخدم.
  • اكتمال النقل للنص المرئي فقط قد ينتهي بـ finishReason: "unknown".
  • اكتمال النقل مع أجزاء أدوات غير منتهية يفشل كـ incomplete-stream.
  • تدعم OpenAI-compatible chat completions البث.
  • تنفيذ OpenAI Responses موجود. بث Responses ليس جزءًا من خط أساس بيئة التشغيل المدعوم حاليًا.

ProviderExecutionResult.toolCalls هو المرجع الحاسم. استدعاءات الأدوات المقتطعة بسبب الطول تُعاد مرة واحدة على سلسلة المسار الناجح. إذا بقيت مقتطعة بسبب الطول بعد الإعادة، تعيد بيئة التشغيل نص رفض حتميًا ولا تنفّذ أي أدوات.

الاستدلال مادة مخفية. الاستدلال الخام محلي للجولة فقط. الخرج المرئي، والسجل المرسل إلى المزوّد، والضغط الدلالي، والملخصات، والذاكرة، وتعلم المهارات، والتصدير تزيل الاستدلال الخام وكتل الاستدلال المخفية المضمنة.

يمكن للنص المرئي ذي finishReason: "length" أن يتابع على سلسلة المسار الناجح. رسائل المتابعة الاصطناعية محلية فقط. لا تُحفظ الأجزاء الوسطية. يُحفظ النص المرئي النهائي مرة واحدة. تستخدم المتابعة قصّ التداخل الدقيق.


حد الأدوات

المزوّد لا يعرف كيف ينفّذ الأدوات. منفّذ الأدوات لا يعرف كيف يستدعي المزوّدين. حلقة الوكيل تربط الاثنين.

المكوّنالمسؤولية
المزوّديعيد نصًا مرئيًا واستدعاءات أدوات نهائية
ToolCallPlannerيحل استدعاءات أدوات المزوّد إلى تعريفات أدوات معروفة
ToolExecutorينفّذ إجراءات أدوات فعلية تحت السياسة
ToolPlanRunnerيشغّل خطط الأدوات ويبني حزم المتابعة
ProviderTurnLoopيعيد نتائج الأدوات إلى المزوّد عند الحاجة
AgentLoopينسّق حد الجولة الكامل

تصنيفات مخاطر الأدوات تقود الحجب والموافقة:

تصنيف الخطرالمعنى
safeقراءة منخفضة الخطر أو حساب محلي
cautionيحتاج إلى عناية أو قد يكشف حالة محلية
external-side-effectيمكن أن يؤثر في أنظمة خارجية
irreversibleيمكن أن ينشئ تغييرات يصعب عكسها

تُقيّد سياسة الأمان على أساس targetKey الموحّد، لا على أساس ملخص العرض.


دورة حياة بيئة تشغيل CLI

في الوضع التفاعلي لـ CLI، تبقى بيئة التشغيل قائمة عبر الجولات داخل الجلسة النشطة. هذا يتجنب إعادة بناء بيئة التشغيل كاملة بعد كل رسالة، ويحافظ على الحالة المقيّدة بالجلسة متاحة في الذاكرة.

يتم التخلص من بيئة تشغيل CLI عند خروج الجلسة أو إيقاف العملية. يوقف التخلص الموارد التي تملكها بيئة التشغيل مثل خوادم MCP، وموارد دورة حياة المتصفح، وعوامل Whisper المحلية، ومزامنة فهرس الذاكرة، واتصالات قاعدة بيانات الجلسات عندما تكون بيئة التشغيل هي المالكة لها.


دورة حياة بيئة تشغيل البوابة

يستخدم وضع البوابة RuntimeCache.

لا تُنشأ بيئة تشغيل البوابة من الصفر لكل جولة واردة. تطلب البوابة من الذاكرة المؤقتة بيئة تشغيل مرتبطة بـ sessionId وruntime fingerprint الحالي.

حالة الذاكرة المؤقتةالسلوك
لا يوجد إدخالإنشاء بيئة تشغيل
تطابق في الذاكرة المؤقتةإعادة استخدام بيئة التشغيل
عدم تطابق runtime fingerprintإنشاء بيئة تشغيل بديلة وتعطيل الإدخال القديم
إدخال معلّقإنشاء بيئة تشغيل بديلة
إبطال صريحتعليق الإدخال واستبداله عند الاستخدام التالي
تجاوز مهلة الخمولالتخلص من بيئة التشغيل الخاملة
تجاوز حد LRUالتخلص من أقل بيئات التشغيل الخاملة استخدامًا مؤخرًا

الإعدادات الافتراضية في التنفيذ الحالي:

الإعدادالافتراضي
الحد الأقصى لبيئات التشغيل المخزنة مؤقتًا50
مهلة الخمول30 minutes
مهلة التخلص10 seconds

هذه افتراضيات تنفيذ، وليست ضمانات API عامة. افحص RuntimeCache للقيم الحالية.

تبطل البوابة بيئات التشغيل المخزنة مؤقتًا عندما تتغير حالة تؤثر في السياسة، مثل منح أو إلغاء موافقة دائمة أو تغيير تجاوز نموذج الجلسة.

تُفهرس إدخالات ذاكرة بيئة التشغيل المؤقتة حسب sessionId. تُقيّد صفوف الجلسات بـ profile_id، ويرفض createRuntime() حالات عدم تطابق الملف الشخصي والجلسة. مع ذلك، يجب أن تعامل وثائق ذاكرة بيئة التشغيل المؤقتة هوية الجلسة كحد حساس.


بيئة تشغيل التفويض

يبني delegate_task حلقات وكلاء فرعيين عبر DefaultChildAgentLoopFactory، الذي يستخدم AgentLoopBuilder المشترك.

تُعاد استخدام البنية التي يملكها الأصل:

المعاد استخدامه من الأصلأمثلة
بنية المزوّدين المشتركةسجل المزوّدين، منفّذ المزوّدين، المسارات
المخازنقاعدة بيانات الجلسات، مزوّد الذاكرة، مخزن artifacts
بنية بيئة التشغيل المشتركةمدير العمليات، backend المتصفح، مخزن الثقة
بنية MCPتسجيلات أدوات MCP
حالة التفويضSubagentRegistry، FileStateTracker

المكونات المقيّدة بالجلسة تكون جديدة لكل جلسة فرعية. تمتلك الجلسات الفرعية سجل أدوات، ومنفّذ أدوات، وحلقة جولات مزوّد، وموجّه بيئة تشغيل، وحلقة وكيل خاصة بها.

تُحفظ الجلسات الفرعية مع معرف الجلسة الأصلية، ودور الجلسة الفرعية وعمق التفويض، وصلاحية الأدوات الفعلية، والتشخيصات المحذوفة أو المحجوبة، وبيانات تجاوز النموذج حيث توجد، وبيانات كبت بيئة التشغيل.

تُحل صلاحية أدوات الجلسة الفرعية قبل بناء schemas المزوّد. يحتفظ الملف الافتراضي للجلسة الفرعية فقط بأدوات read-only-local وread-only-network المرئية للأصل، ويزيل الأدوات المحجوبة بالتطابق الدقيق أو بالبادئة، ويستبعد مجموعات أدوات المتصفح والوسائط وMCP. يبقى terminal.run مستبعدًا.

موافقات الجلسات الفرعية غير تفاعلية وتفشل باتجاه المنع. قرارات المنع الصارمة تعمل أولًا. أي إجراء يحتاج إلى سؤال، أو يستخدم منح الأصل، أو يستخدم طوابير الموافقة المعلقة، أو يعتمد على موافقات محفوظة أو موافقات جلسة، يُرفض داخل بيئة تشغيل الجلسة الفرعية.

تأخذ متابعة حالة الملفات لقطات من قراءات الأصل قبل التفويض، وتصدر تحذيرات استشارية عن الملفات القديمة عندما تمس كتابات الجلسة الفرعية مسارات متتبعة. ذاكرة النتيجة اختيارية، وتحفظ معاينة محدودة للمهمة مع بيانات حالة/سبب حتمية.


تركيب memory prompt

يُجهّز سياق الذاكرة لكل جولة قبل تركيب prompt المزوّد. يجمع MemoryRecallOrchestrator سياق الاسترجاع، ويعرض MemoryPromptContextBuilder سياق memory prompt المرجعي.

يشمل مسار تركيب prompt:

  1. سياق memory prompt المرجعي
  2. سياق المشروع، بما في ذلك AGENTS.md
  3. إشعار ضغط اختياري
  4. سجل الجلسة
  5. استرجاع الجلسة والاسترجاع الخارجي اختياريًا
  6. رسالة المستخدم الحية
  7. مرفقات القنوات
  8. القصد، وتعليمات المهارة، وإعداد المهارة، وموارد المهارة
  9. خطة سير العمل
  10. قائمة الأدوات
  11. سياق مرجعي صريح
  12. نتائج الأدوات أو تغذية المتابعة الراجعة

الاسترجاع، والاسترجاع الخارجي، وملخصات الضغط هي سياق مرجعي فقط. تُضمّن من أجل الاستمرارية، لكنها لا تُعامل كتعليمات موثوقة.

الضغط الدلالي لجولة المزوّد يملكه AgentLoop، لا ProviderTurnLoop. عندما يكون مفعّلًا ويتجاوز العتبة، يحافظ AgentLoop على سجل الأصل عبر ضغطه داخل جلسة فرعية قبل تركيب prompt المزوّد.


التخلص من بيئة التشغيل

التخلص من بيئة التشغيل مسؤول عن تنظيف الموارد التي تملكها بيئة التشغيل.

يشمل التخلص:

الموردالتنظيف
دورة حياة المتصفحإيقاف دورة الحياة، تنظيف الجلسات، إغلاق backend المملوك
Whisper المحليالتخلص من العامل عند وجوده
خوادم MCPإيقاف خوادم MCP المحمّلة
مزامنة فهرس الذاكرةالتخلص من عامل المزامنة
قاعدة بيانات الجلساتإغلاق الاتصال عندما تملكه بيئة التشغيل

يتم التخلص من بيئات التشغيل المخزنة مؤقتًا في البوابة عبر RuntimeCache.safeDispose()، الذي يطبق مهلة حتى لا يمنع التخلص العالق تنظيف الذاكرة المؤقتة إلى الأبد.


فشل بدء بيئة التشغيل

الفشلماذا يحدثأول أمر للفحص
إعداد ملف شخصي مفقوديفشل إنشاء بيئة التشغيل مبكرًاestacoda verify
عدم تطابق الملف الشخصي والجلسةيرفض إنشاء بيئة التشغيل الجلسةestacoda sessions list
المسار الأساسي غير قابل للتشغيلتبلغ الجولة عن فشل المزوّد/النموذجestacoda model diagnose
مسار مساعد مفقوديرجع النظام الفرعي المستدعي حيث يكون الرجوع مدعومًاestacoda model show
خادم MCP غير متاحلا تُسجّل أدوات MCP؛ تستمر بيئة التشغيلestacoda gateway diagnose
backend المتصفح غير متاحتبلغ أدوات المتصفح عن أخطاء اتصالestacoda doctor
قفل SQLite أو تلفهتفشل عمليات الجلسات أو سير العملافحص أذونات ~/.estacoda/sessions.sqlite
ربط سير العمل غير متاحتستمر بيئة التشغيل من دون دعم سير العملأوامر سير العمل والسجلات المرتبطة به

كيفية فحص حالة بيئة التشغيل

# المسار الأساسي الحالي والجاهزية
estacoda model show

# تشخيص حي ضد المزوّد المهيأ
estacoda model diagnose

# عرض المزوّدين المعروفين في الكتالوج
estacoda model list

# جاهزية الإعداد الكاملة
estacoda verify

# التشخيص العام
estacoda doctor

# جاهزية البوابة
estacoda gateway diagnose

# حالة البوابة الكاملة، بما في ذلك حالة ذاكرة بيئة التشغيل المؤقتة عند توفرها
estacoda gateway status

# الجلسات الأخيرة
estacoda sessions list

# الجلسة الحالية
estacoda sessions current

# مخطط اعتماديات الكود
estacoda knowledge code summary
estacoda knowledge code refresh

مرتبط