الدماغ نفسه في كل قناة
يتواصل وولفيش من خلال خمس قنوات: واجهة سطح المكتب عبر Electron، وطرفية، وبوت Telegram، والمراسلة المباشرة عبر WhatsApp، وهاتفٍ مقترن. تعمل القنوات الخمس بنفس خط معالجة الذكاء — الفرق الوحيد هو كيفية وصول المدخلات وكيفية عرض المخرجات.القنوات الخمس
واجهة Electron
واجهة سطح المكتب الأصلية. بث لحظي، تنسيق Markdown غني، نوافذ موافقة، وإدارة كاملة للمحادثات.
الطرفية
أمر
wolffish — جلسة تفاعلية أو طلب واحد ينتهي بجوابه، متصلًا بالوكيل الذي يعمل. تنسيق Markdown يُصيَّر بألوان ANSI، والموافقات تُجاب بضغطة زر، والملفات مسارات في الاتجاهين. القناة الوحيدة التي تعمل على خادم بلا شاشة.Telegram
بوت شخصي يستجيب لرسائلك الخاصة. أزرار مضمّنة للموافقات، تنسيق HTML، ومعالجة الملفات.
مراسلة مباشرة عبر بروتوكول WhatsApp Web. موافقات نصية، تحويل الرسائل الصوتية لنص، وإعادة اتصال تلقائية.
الهاتف
رفيق الهاتف، مقترنٌ بهذا السطح عبر نفقٍ مشفَّرٍ من طرفٍ إلى طرف. ليس خيط رسائل بل واجهةٌ ثانية للتطبيق كلّه — والرسالة المُرسَلة منه تشغّل دورًا حقيقيًا هنا.
البنية المعمارية
كل قناة تصب في نفس خط المعالجة. القناة هي مجرد طبقة نقل — تستقبل مدخلات المستخدم، وتسلّمها للذكاء، ثم تعرض ما يعود منه.واجهة TurnSink
كل قناة تنفّذ واجهةTurnSink — وهي العقد الذي يحدد كيفية استقبال مخرجات خط المعالجة:
onSegment كبث لحظي بتنسيق Markdown. أما Telegram فيصيغ الأجزاء كرسائل HTML. بينما يرسل WhatsApp نصًا عاديًا. نفس البيانات، عرض مختلف.
مُشغّل الأدوار TurnRunner
يقوم TurnRunner بتسلسل الأدوار لكل محادثة على حدة، لا عالميًّا. المحادثة الواحدة نصٌّ واحد مرتّب — أدوارها تصطف خلف بعضها فلا تتداخل أبدًا — لكنّ أدوار المحادثات المختلفة تعمل بالتوازي، أيًّا كانت القناة التي وصلت منها. وكل دور يعمل في نطاقٍ معزول بحالته الخاصة، فلا يُفسد دورٌ متزامنٌ آخرَ.الرسالة الجديدة في دردشة مشغولة تصطفّ خلف الدور الجاري، لا تُدمج فيه — يوقفها Telegram وWhatsApp جانباً ويشغّلانها تالياً، بالترتيب (انظر الرسائل المصطفّة في كل قناة). وما زال TurnRunner يدعم استباق دور محادثةٍ ما بإجهاضه أولاً — وهو بالضبط ما يفعله
/stop — لكنّ الرسالة العادية لم تعد تُطلق ذلك، ولا يستبق شيءٌ أبداً محادثةً مختلفة.موجّه الأدوار TurnRouter
عندما تُصنّف الـ amygdala استدعاء أداة على أنه يحتاج موافقة، يوجّه TurnRouter طلب الموافقة إلى القناة المالكة للدور النشط. إذا بدأت محادثة في Telegram، يظهر زر الموافقة في Telegram — وليس في واجهة Electron. منطق التوجيه واضح ومباشر:- كل دور يحمل معرّف قناة
channelId(electron أو cli أو telegram أو whatsapp أو mobile) - عندما يُرجع
amygdala.classify()القيمةconfirm، يُصدر TurnRunner طلب موافقة - يبحث TurnRouter عن
channelIdالخاص بالدور النشط ويستدعيonApprovalRequestعلى واجهة TurnSink لتلك القناة - تعرض القناة الموافقة بشكلها الأصلي (نافذة حوار، أو زر مضمّن، أو رسالة نصية)
- يعود رد المستخدم إلى TurnRunner لمتابعة العملية أو إلغائها
الحالة المشتركة
جميع القنوات تتشارك نفس حالة الذكاء:- الذاكرة — نفس حلقات hippocampus، ونفس فهرس cortex
- المعرفة — نفس ملفات Markdown في مساحة العمل
- المحادثات — محادثة بدأت في أي مكان يمكن إكمالها في أي مكان (انظر أدناه)
- القدرات — نفس المهارات والإضافات المحمّلة
كل محادثة قابلة للإكمال في كل مكان
المحادثات ثنائية الاتجاه بين القنوات بالكامل — لا شيء للقراءة فقط:- من الهاتف إلى سطح المكتب، حيّةً. المحادثة التي بدأت على تيليجرام أو واتساب تُفتَح في التطبيق دردشةً حية: صندوق الكتابة يعمل، وتُكملها بلوحة مفاتيح حقيقية. وإن كان دورٌ يعمل على الهاتف الآن — أو أتمتةٌ تشتغل بالمحادثة — عكسه سطح المكتب وهو يجري: الردّ ينساب في التغذية وهو يُكتَب، وزرّ الإيقاف يوقف ذلك التشغيل حقاً أيّاً كان الجهاز الذي بدأه، والرسالةُ التي تكتبها في منتصفه تصطفّ وتنطلق من تلقاء نفسها حين يحطّ التشغيل — ولو فتحتَ النافذة في منتصف تشغيلٍ ظهر حيّاً. والرسائل التي تحطّ على هاتفك تظهر في مكانها، والرسائل الصوتية تنجو من الرحلة كما هي.
- والأتمتة أيضاً. تشغيلة الأتمتة أو الإجراء المنتهية ليست سجلاً مختوماً — أكملها في التطبيق لتسأل سؤال المتابعة، فتعود محادثة حية من جديد.
- من سطح المكتب إلى الهاتف. أمر
/resumeعلى أي من القناتين يفتح قائمة اختيار مرقّمة على كل محادثة لدى وولفيش — كل القنوات، الأحدث أولاً، خمس وعشرون في الصفحة معnext، وكل صف موسوم بمصدره. وتشغيلات الأتمتة المجدولة مخفية منها افتراضياً (بمفتاح إعدادات لكل قناة)، مع بقائها في/deleteوفي التطبيق. - الردود تحطّ حيث تنتمي. حين يراسل وولفيش قناةً من خارج السياق — أتمتة تبلّغ عن مهمة أنجزت، أو محادثة في التطبيق تترك لك ملاحظة — تعيد تلك الدردشة توجيه نفسها إلى المحادثة المُرسِلة، فيُكمل ردُّك بالضبط المحادثة التي راسلتك.
- والمشاريع تسافر أيضاً. يبدأ
/projectعلى أي من القناتين محادثةً داخل أحد مشاريعك — مُطلَعةً على تعليماته الدائمة وملفاته، تماماً كمحادثة مشروع فُتحت في التطبيق. الربط يعيش على المحادثة نفسها، فإكمالها في أي مكان يُبقي سياق المشروع.
تسليم الملفات
عندما يُنتج وولفيش ملفًا — ملف PDF، أو فيديو محوَّلًا، أو جدول بيانات — فإن تسليمه فعل متعمَّد يقوم به الوكيل: عبر أداتهsend_file. لا شيء يُسلَّم تلقائيًا. الأداة التي تكتب ملفًا على القرص لا ترسله بنفسها أبدًا، والمسارات المذكورة في مخرجات الأدوات لا تُلتقط ولا تُرفع تلقائيًا — إن لم يرسل الوكيل الملف فلن يصلك، وعقد التشغيل الخاص بالوكيل يُلزمه بإرسال النتيجة فور اكتمال أي مهمة مُنتِجة للملفات.
تظهر ملفات send_file بشكل أصلي على كل واجهة:
نتائج المهام المفصّلة
لكل قناة مفتاح نتائج المهام المفصّلة يتحكم في مقدار ما تراه من خطوات عمل الوكيل. وهو مُعطّل افتراضيًا، مما يُبقي التغذية نظيفة:- إيقاف (تغذية نظيفة) — فقط ما يهمّك: ردود الوكيل، وأي ملفات يرسلها، والأخطاء. أما استدعاءات الأدوات الروتينية ونتائجها الناجحة وإشعارات الضغط فتُخفى. وفي واجهة سطح المكتب يبقى مؤشّر النموذج المستخدَم ظاهرًا أيضًا.
- تشغيل (مفصّل) — يظهر كل استدعاء أداة وكل نتيجة وكل بطاقة نشاط، تمامًا كما جرى الدور خطوةً بخطوة.
لا يغيّر الوضع المفصّل سوى ما يُعرض أو يُبثّ — لا ما يفعله الوكيل. فكل جزء يُحفظ كاملًا في السجل والذاكرة، لذا فإن تبديل المفتاح يعيد رسم التغذية فقط؛ ولا يضيع شيء عند إيقافه.
القنوات اتّصالات لا تطبيقات
Telegram وWhatsApp اتّصالات يخاطبك وولفيش من خلالها — لا تطبيقات سطح مكتب مثبَّتة على جهازك. لا يصل إليها وولفيش إلا عبر أدواتها الخاصة (telegram_send وwhatsapp_send و…)، لا بتشغيل نافذة «Telegram»/«WhatsApp» أو النقر عليها. وأدوات الإرسال لأي قناة لا توجد إلا ما دامت متّصلة، فوجودها نفسه هو الإشارة إلى أنّ القناة حيّة.
وحين يحتاج وولفيش إلى مراسلتك خارج السياق — مهمة خلفية انتهت، أو وظيفة مجدوَلة — يتحقّق أولًا من channel_status (أو wolffish_status الذي يسرد حالة الاتصال). فإن كانت القناة منقطعة، لا يخمّن ولا يعيد المحاولة؛ بل يخبرك أنّها منقطعة ويبلّغك خطوات إعادة الوصل الدقيقة (Telegram → رمز البوت من @BotFather؛ WhatsApp → امسح رمز QR).
مقارنة القنوات
سطر أوامر الطرفية
التطبيق كله في طرفية — وعلى خادم.
قناة Telegram
إعداد واستخدام بوت Telegram.
قناة WhatsApp
إعداد واستخدام مراسلة WhatsApp.