Skip to main content

كيف تتواصل الوحدات

يربط corpus callosum جميع مناطق الدماغ. تبث الوحدات إشعارات «هذا ما حدث» عبر أحداث مُصنّفة على corpus — لا تحتاج أي وحدة لمعرفة من يستمع. وعندما يتطلب الأمر طلبًا/استجابة مباشرين (مثل سؤال prefrontal لـ cerebellum عن فهرس القدرات، أو لـ cortex عن نتائج البحث)، فذلك يمر عبر مراجع وحدات تُحقن عند بدء التشغيل، لا عبر الناقل. هذا يبقي النظام معياريًا وقابلًا للفحص وسهل التوسيع.

البنية المعمارية

مبني على mitt — مُرسِل أحداث مُصنّف خفيف الوزن (200 بايت). كل وحدة تستقبل مثيل corpus الوحيد في مُنشئها:
يتم تهيئة corpus أولًا أثناء بدء التشغيل ويُمرَّر إلى جميع الوحدات الأخرى. الإشعارات تركب الناقل دائمًا؛ أما مسارات الطلب/الاستجابة المباشرة القليلة فهي مراجع تُسلَّم عند بدء التشغيل، وليست import بين الوحدات أبدًا.

الاستخدام

يُثبّت corpus نفسه مُعالج أحرف بدل داخليًا عند إنشائه — كل حدث يمر عبره يُلتقط ويُخزَّن مؤقتًا ثم يُفرَّغ إلى ملفات السجل اليومية. الوحدات تحصل على التسجيل مجانًا.

فئات الأحداث

تم تعريف أكثر من 80 حدثًا مُصنّفًا في خريطة الأنواع CorpusEvents. الفئات الرئيسية:

أحداث الرسائل والسياق

أحداث LLM

turn.usage هو التجميع الكلي للدور بأكمله، مع تسعير شطر الذاكرة المخبأة على حدة حتى تكون مكاسب التخبئة قابلة للقياس مباشرة من سجل corpus.

أحداث الأدوات والمهام

أحداث الأمان

أحداث الذاكرة والتعلم

أحداث الصحة والفهرسة

أحداث الجدولة

وفيما وراء هذه، تغطي عائلات كاملة تثبيت التبعيات (dependency.*)، والقنوات (telegram.* وwhatsapp.*)، والصوت والكلام (voice.* وstt.*)، ورفع الملفات (upload.*)، وتبديل المحادثات (conversation.changed). كلها تتبع النمط نفسه: حمولة مُصنّفة، وتسجيل تلقائي.

تسجيل الأحداث

يتم تسجيل كل حدث في ملفات Markdown يومية في brain/corpus/YYYY-MM-DD.log.md. تُجمَّع عمليات الكتابة عبر تفريغ مخزن مؤقت مدته ثانيتان لتحسين الأداء — كل حدث يهبط ككتلة بطابع زمني:
يتم تنظيف السجلات القديمة تلقائيًا بعد 7 أيام لمنع النمو غير المحدود لاستخدام القرص. هذا الحذف مقصود بالتصميم — كل ما يستحق الاحتفاظ به لمدة أطول محفوظ أصلًا في مكان آخر (الحلقات، والملخصات الأسبوعية، وrun-history.md)، والسجلات نفسها يفهرسها cortex ما دامت موجودة.
اقرأ سجلات corpus عند تصحيح سلوك غير متوقع. تُظهر لك التسلسل الدقيق للأحداث التي وقعت — أي وحدة فعلت ماذا ومتى.

الاشتراك وإلغاء الاشتراك

يستخدم مُشغّل الدور هذا النمط للاشتراك في الأحداث طوال مدة الدور، ثم يلغي الاشتراك في كتلة finally.

إضافة أحداث جديدة

لإضافة نوع حدث جديد:
  1. أضف اسم الحدث ونوع حمولته إلى خريطة الأنواع CorpusEvents في src/main/runtime/corpus.ts
  2. أرسله من الوحدة المعنية
  3. اشترك فيه من أي وحدة تحتاج للتفاعل
يتم تسجيل الحدث تلقائيًا بواسطة مُعالج أحرف البدل — لا حاجة لتوصيل إضافي.

فوائد التصميم

توفر بنية ناقل الأحداث:
  • استقلال الوحدات: يمكن تطوير واختبار وتحديث الوحدات بشكل مستقل
  • قابلية مراقبة كاملة: كل تفاعل يتم تسجيله مع طابع زمني
  • سهولة التوسيع: الوحدات الجديدة تشترك في الأحداث الموجودة دون تعديل المُنتجين
  • قابلية الاختبار: استخدم corpus وهميًا في الاختبارات وتحقق من إرسال الأحداث بشكل صحيح

مثال عملي: مراقبة صحة Hypothalamus

يوضح hypothalamus كيف تستخدم الوحدة corpus لمراقبة النظام بأكمله دون استيراد أي وحدة أخرى:
لا يلمس hypothalamus وحدات thalamus أو motor أو prefrontal مباشرة. بل يراقب سلوكها عبر الأحداث ويطلق أحداثه الخاصة عند تجاوز الحدود. يمكن لأي وحدة بعد ذلك التفاعل مع تحذيرات الصحة — يمكن لواجهة المستخدم عرض مؤشر، ويمكن لـ brainstem تشغيل مهمة تشخيصية، ويمكن لـ prefrontal تضمين سياق الصحة في المحث التالي.
يجب أن تكون مُعالجات الأحداث سريعة وغير حاجبة. يجب تأجيل العمل الثقيل الناتج عن حدث (setTimeout أو queueMicrotask) لتجنب إبطاء مُنتج الحدث.