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

مسار الرسالة

كل رسالة تتبع هذا المسار بالضبط عبر النظام. لا استثناءات، ولا اختصارات.
رسالة المستخدم
  → prefrontal.buildContext()
    → thalamus.stream()
      → broca.streamToUI()
        → wernicke.parse()
          → [في حال وجود استدعاءات أدوات: amygdala → motor → cerebellum → حلقة]
            → hippocampus.appendEpisode()
              → basalganglia.recordOutcome()
                → انتهى

خطوة بخطوة

1. استلام الرسالة

يرسل المستخدم رسالة من واجهة الدردشة. تصل في العملية الرئيسية عبر IPC وتدخل حلقة الوكيل.

2. تجميع السياق (prefrontal)

هذه هي أهم خطوة. تقوم القشرة الأمامية الجبهية بما يلي:
  1. تقرأ كل ملفات Markdown في مساحة العمل (الهوية، الذاكرة، المهارات)
  2. تستدعي cerebellum للحصول على تعريفات الأدوات من القدرات المحمَّلة
  3. تستدعي cortex للبحث في الذاكرة (SQLite FTS5)
  4. تمرر كل المرشحين عبر ras لتسجيل الصلة
  5. تطبق توزيع ميزانية الرموز (15% هوية / 10% prefrontal / 30% ذاكرة / 20% مهارات / 25% سجل)
  6. تجمّع المُطالبة النظامية النهائية مع وسوم XML
  7. تكتب لقطة تصحيح في brain/prefrontal/.debug/
يمكنك فحص ما استلمه نموذج اللغة بالضبط بقراءة ملفات لقطات التصحيح. هكذا تصحّح أسئلة “لماذا فعل وولف فيش ذلك؟“.

3. استدعاء نموذج اللغة (thalamus)

يذهب السياق المُجمَّع إلى thalamus.stream()، الذي:
  1. يتحقق من net.isOnline() لكشف وضع عدم الاتصال فوريًا
  2. يستدعي نموذج الدماغ — الذي اخترته صراحةً في الإعدادات ← الأوضاع (وفي وضع التنسيق، يحلّ نموذج العامل للعمّال)
  3. عند خطأ عابر، يُعيد محاولة دماغ السحابة نفسه وفق جدول تراجع؛ لا يوجد تدرّج تلقائي إلى مزوّد آخر
  4. يُرجع مولّدًا غير متزامن موحدًا من نوع StreamChunk

4. تدفق الرد (broca)

يستلم broca قطع التدفق ويمررها إلى المُعرِّض (renderer) عبر IPC للعرض في الوقت الفعلي في واجهة الدردشة.

5. تحليل الرد (wernicke)

يحلل wernicke الرد المتدفق، ويوحّد بين تنسيقات المزودين:
  • DeepSeek: كائنات function_call متوافقة مع OpenAI
  • Anthropic: كتل محتوى tool_use
  • OpenAI: كائنات function_call
  • Ollama: JSON مهيكَل في الاستجابة
كل الأربعة تُوحَّد في نوع واحد ToolCall: { name, args, id }.

6. حلقة تنفيذ الأدوات (إن وُجدت استدعاءات أدوات)

إذا وجد wernicke استدعاءات أدوات، تبدأ الحلقة (بحد أقصى 8 تكرارات):
  1. amygdala.classify() — يتحقق من استدعاء الأداة مقابل أنماط الخطر المُحمَّلة من ملفات SKILL.md. ثلاث نتائج: safe (المتابعة)، confirm (إظهار مربع حوار موافقة)، block (الرفض).
  2. motor.execute() — ينشئ ملف TASK-{id}.md، ويسجل الخطوة، ويستدعي الإضافة مع منطق إعادة المحاولة (3 مرات بتأجيل 2ث/6ث/18ث).
  3. cerebellum.executeTool() — يوجّه الاستدعاء إلى إضافة القدرة الصحيحة.
  4. تعود النتائج إلى نموذج اللغة للتكرار التالي.
قبل كل استدعاء لنموذج اللغة في التكرار، يفحص ضغط السياق ما إذا كانت مصفوفة الرسائل تتجاوز 75% من ميزانية سياق النموذج. إذا تجاوزت، تُقتطع الرسائل القديمة تناسبياً مباشرةً ويُنتج استدعاء LLM واحد ملخصاً منظماً مع تذكير بالمتابعة — مما يضمن أن النموذج يُكمل المهام متعددة الخطوات حتى بعد الضغط.

ضغط السياق

كيف يحافظ الاقتطاع التناسبي والتلخيص بمرة واحدة على استمرار المحادثات الطويلة دون فقدان المعلومات.

7. الذاكرة (hippocampus + basalganglia)

بعد اكتمال الرد:
  • يضيف hippocampus ملخصًا للدور إلى ملف حلقة اليوم (brain/hippocampus/episodes/YYYY-MM-DD.md)
  • يسجل basalganglia النتيجة (نجاح/فشل/رفض) في ملف ملاحظات اليوم

ما ليس في خطّ المعالجة

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