DopeAgent
تطوير نشطنظام تشغيل شخصي للوكلاء — خدمة محلية واحدة وعملاء خفيفون متعددون.
تعمل طبقة تحكم مكتوبة بلغة Rust محليًا وتتولى بيئة التشغيل ومزوّدي نماذج اللغة وموصلات القنوات والتخزين والأحداث. أما العملاء فيبقون خفيفين: واجهة ويب بـ React، وواجهة طرفية Rust بملء الشاشة، وموصلات لقنوات المحادثة، وحزمة تطوير بـ TypeScript — وجميعها تتحدث نفس عقود JSON Schema.
نظرة عامة
الخدمة المحلية هي المنتج نفسه. كل ما يجب أن يكون صحيحًا — حالة الجلسة، وتوجيه المزوّدين، وحزمة الأدوات، وسجل الأحداث — يعيش داخل مساحة عمل Rust واحدة خلف واجهة HTTP محلية، فلا يكون العميل أكثر من عرض لها. ملف الخدمة التنفيذي هو `dope-cli`، وواجهة HTTP هي `dope-api`.
العقود المشتركة بين اللغات موجودة في `schemas/` بصيغة JSON Schema، وهي المرجع الوحيد للواجهة والأحداث والإعدادات: تُولَّد خدمة Rust وعملاء TypeScript من التعريفات نفسها بدل مزامنتها يدويًا بالاتفاق.
من الافتراضات المعلنة أن حالة الوكيل طويلة العمر يجب أن تكون قابلة للمراقبة وإعادة التشغيل والتطوير الآمن؛ ولذلك يُعاد تصميم هندسة السياق والذاكرة والتخطيط وتسليم المهام والسياسات بدل ترقيعها.
ماذا يفعل
- طبقة تحكم بلغة Rust: بيئة التشغيل ومزوّدو نماذج اللغة والقنوات والموصلات والتخزين والأحداث وواجهة HTTP وحزمة الأدوات في مساحة عمل واحدة.
- ثلاث واجهات فوق خدمة واحدة: واجهة ويب بـ React 19 و Vite، وواجهة طرفية Rust بملء الشاشة (`dope-tui`)، وموصلات لقنوات المحادثة.
- حزمة تطوير للعميل بـ TypeScript (`@dope/client`) مولَّدة من عقود JSON Schema المشتركة.
- فصل بيئتي الاختبار والإنتاج — `~/.dope-test` على المنفذ 19192 مقابل `~/.dope` على 19191، مع تعطيل الموصلات الحقيقية افتراضيًا في بيئة الاختبار.
- استُبدلت خدمة Go السابقة بالكامل بمساحة عمل Rust، وموثّق ذلك في `crates/MIGRATION.md`.