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

Documentation Index

Fetch the complete documentation index at: https://docs.wolffi.sh/llms.txt

Use this file to discover all available pages before exploring further.

خطّ معالجة الوكيل

كل رسالة تتبع هذا المسار بالضبط عبر النظام. لا استثناءات، ولا اختصارات.
رسالة المستخدم
  → 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/
يمكنك فحص ما استلمه نموذج اللغة بالضبط بقراءة ملفات لقطات التصحيح. هكذا تصحّح أسئلة “لماذا فعل Wolffish ذلك؟“.

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

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

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

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

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

يحلل wernicke الرد المتدفق، ويوحّد بين تنسيقات المزودين:
  • 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. تعود النتائج إلى نموذج اللغة للتكرار التالي.

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

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

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

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