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

الدماغ نفسه في كل قناة

يتواصل وولف فيش من خلال ثلاث قنوات: واجهة سطح المكتب عبر Electron، وبوت Telegram، والمراسلة المباشرة عبر WhatsApp. تعمل القنوات الثلاث بنفس خط معالجة الذكاء — الفرق الوحيد هو كيفية وصول المدخلات وكيفية عرض المخرجات.

القنوات الثلاث

واجهة Electron

واجهة سطح المكتب الأصلية. بث لحظي، تنسيق Markdown غني، نوافذ موافقة، وإدارة كاملة للمحادثات.

Telegram

بوت شخصي يستجيب لرسائلك الخاصة. أزرار مضمّنة للموافقات، تنسيق HTML، ومعالجة الملفات.

WhatsApp

مراسلة مباشرة عبر بروتوكول WhatsApp Web. موافقات نصية، تحويل الرسائل الصوتية لنص، وإعادة اتصال تلقائية.

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

كل قناة تصب في نفس خط المعالجة. القناة هي مجرد طبقة نقل — تستقبل مدخلات المستخدم، وتسلّمها للذكاء، ثم تعرض ما يعود منه.
User ─┬─ Electron UI ──┐
      ├─ Telegram Bot ──┼──► TurnRunner ──► Agent Pipeline ──► TurnRouter ──► Channel ──► User
      └─ WhatsApp ──────┘

واجهة TurnSink

كل قناة تنفّذ واجهة TurnSink — وهي العقد الذي يحدد كيفية استقبال مخرجات خط المعالجة:
interface TurnSink {
  onSegment(segment: StreamSegment): void     // Streamed text/tool-use chunks
  onTurnEvent(event: TurnEvent): void         // Status changes (thinking, executing, done)
  onApprovalRequest(req: ApprovalRequest): void  // Amygdala flagged a tool call
  onDone(summary: TurnSummary): void          // Turn completed successfully
  onError(error: TurnError): void             // Turn failed
}
واجهة Electron تعرض onSegment كبث لحظي بتنسيق Markdown. أما Telegram فيصيغ الأجزاء كرسائل HTML. بينما يرسل WhatsApp نصًا عاديًا. نفس البيانات، عرض مختلف.

مُشغّل الأدوار TurnRunner

يقوم TurnRunner بتسلسل الأدوار عبر جميع القنوات. دور واحد فقط يعمل في كل مرة — إذا وصلت رسائل من عدة قنوات في نفس الوقت، فإنها تصطف في سلسلة انتظار.
Turn from Telegram → [running]
Turn from Electron → [queued]
Turn from WhatsApp → [queued]
هذا يمنع تعارض العمليات في كتابة الذاكرة، وتنفيذ الأدوات، وتجميع السياق. قائمة الانتظار تعمل بنظام الأول دخولًا الأول خروجًا (FIFO).
إذا كان هناك دور يعمل حاليًا ووصلت رسالة جديدة من قناة مختلفة، يتلقى المرسل إشعارًا مختصرًا بأن رسالته في قائمة الانتظار. لن يضطر للانتظار في صمت.

موجّه الأدوار TurnRouter

عندما تُصنّف الـ amygdala استدعاء أداة على أنه يحتاج موافقة، يوجّه TurnRouter طلب الموافقة إلى القناة المالكة للدور النشط. إذا بدأت محادثة في Telegram، يظهر زر الموافقة في Telegram — وليس في واجهة Electron. منطق التوجيه واضح ومباشر:
  1. كل دور يحمل معرّف قناة channelId (electron أو telegram أو whatsapp)
  2. عندما يُرجع amygdala.classify() القيمة confirm، يُصدر TurnRunner طلب موافقة
  3. يبحث TurnRouter عن channelId الخاص بالدور النشط ويستدعي onApprovalRequest على واجهة TurnSink لتلك القناة
  4. تعرض القناة الموافقة بشكلها الأصلي (نافذة حوار، أو زر مضمّن، أو رسالة نصية)
  5. يعود رد المستخدم إلى TurnRunner لمتابعة العملية أو إلغائها

الحالة المشتركة

جميع القنوات تتشارك نفس حالة الذكاء:
  • الذاكرة — نفس حلقات hippocampus، ونفس فهرس cortex
  • المعرفة — نفس ملفات Markdown في مساحة العمل
  • المحادثات — محادثة بدأت في Telegram يمكن استكمالها في واجهة Electron أو WhatsApp
  • القدرات — نفس المهارات والإضافات المحمّلة
يمكنك بدء مهمة طويلة في واجهة سطح المكتب، ثم مغادرة مكتبك، ومتابعة التقدم أو إكمال المحادثة من Telegram على هاتفك.

نتائج المهام المفصّلة

لكل قناة مفتاح نتائج المهام المفصّلة يتحكم في مقدار ما تراه من خطوات عمل الوكيل. وهو مُعطّل افتراضيًا، مما يُبقي التغذية نظيفة:
  • إيقاف (تغذية نظيفة) — فقط ما يهمّك: ردود الوكيل، وأي ملفات يُنتجها أو يرسلها، والأخطاء. أما استدعاءات الأدوات الروتينية ونتائجها الناجحة وإشعارات الضغط فتُخفى. وفي واجهة سطح المكتب يبقى مؤشّر النموذج المستخدَم ظاهرًا أيضًا.
  • تشغيل (مفصّل) — يظهر كل استدعاء أداة وكل نتيجة وكل بطاقة نشاط، تمامًا كما جرى الدور خطوةً بخطوة.
يوجد المفتاح ضمن إعدادات كل قناة، وكلها تحت الإعدادات → القنوات:
القناةالمكانما الذي يتحكم فيه المفتاح
داخل التطبيقالإعدادات → القنوات → داخل التطبيقما تعرضه تغذية سطح المكتب
Telegramالإعدادات → القنوات → Telegramما يُعاد بثّه إلى المحادثة
WhatsAppالإعدادات → القنوات → WhatsAppما يُعاد بثّه إلى المحادثة
لا يغيّر الوضع المفصّل سوى ما يُعرض أو يُبثّ — لا ما يفعله الوكيل. فكل جزء يُحفظ كاملًا في السجل والذاكرة، لذا فإن تبديل المفتاح يعيد رسم التغذية فقط؛ ولا يضيع شيء عند إيقافه.

القنوات اتّصالات لا تطبيقات

Telegram وWhatsApp اتّصالات يخاطبك وولف فيش من خلالها — لا تطبيقات سطح مكتب مثبَّتة على جهازك. لا يصل إليها وولف فيش إلا عبر أدواتها الخاصة (telegram_send وwhatsapp_send و…)، لا بتشغيل نافذة «Telegram»/«WhatsApp» أو النقر عليها. وأدوات الإرسال لأي قناة لا توجد إلا ما دامت متّصلة، فوجودها نفسه هو الإشارة إلى أنّ القناة حيّة. وحين يحتاج وولف فيش إلى مراسلتك خارج السياق — مهمة خلفية انتهت، أو وظيفة مجدوَلة — يتحقّق أولًا من channel_status (أو wolffish_status الذي يسرد حالة الاتصال). فإن كانت القناة منقطعة، لا يخمّن ولا يعيد المحاولة؛ بل يخبرك أنّها منقطعة ويبلّغك خطوات إعادة الوصل الدقيقة (Telegram → رمز البوت من @BotFather؛ WhatsApp → امسح رمز QR).

مقارنة القنوات

الميزةواجهة ElectronTelegramWhatsApp
البثأجزاء لحظيةرسائل مجمّعةرسائل مجمّعة
التنسيقMarkdown غنيمجموعة فرعية من HTMLنص عادي
الموافقاتنافذة حوار أصليةأزرار مضمّنةرسالة نصية
الملفاتسحب وإفلاتمرفقاترسائل وسائط
الصوتغير متاحرسائل صوتيةرسائل صوتية
إعادة الاتصالمتصل دائمًامستمرإعادة اتصال تلقائية
التغذية المفصّلةمفتاح عرض، مُعطّل افتراضيًامفتاح بثّ، مُعطّل افتراضيًامفتاح بثّ، مُعطّل افتراضيًا

قناة Telegram

إعداد واستخدام بوت Telegram.

قناة WhatsApp

إعداد واستخدام مراسلة WhatsApp.