lousho. ينشئ هذا الأمر هياكل المشاريع، ويفحص إعدادك، ويشغّل وكيلًا محليًا، ويقدّمه عبر MCP، ويشغّل التقييمات، ويبني مخرجًا قابلًا للنشر، ويفتح لوحة التحكم Agent Forge. شغّله بـ npx lousho <command> داخل مشروع مثبَّتة فيه الـ SDK.
كل أمر يقبل
<spec> يقرأ ملف مواصفات وكيل (.yaml أو .yml أو .json، انظر الإعداد).
طريقة الاستخدام
parseArgs في Node، بالوضع الصارم): تعمل الصيغتان --flag value و--flag=value، وعند تكرار خيار تُعتمد قيمته الأخيرة (أما --tag فتتراكم قيمه)، وتنهي -- الخيارات، ويطبع -h / --help صيغة استخدام الأمر ويخرج بالرمز 0. الخيار غير المعروف، أو الخيار الذي تنقصه قيمته (لا يأخذ الخيارَ التالي قيمةً له أبدًا)، أو الوسيط الزائد، يفشل بالخطأ LOUSHO_CONFIG_INVALID مع سطر صيغة الاستخدام. والقيمة التي تبدأ بـ - تحتاج إلى صيغة =: --model=-x.
يشغّل npm create lousho-agent my-agent الأمر lousho init بالوسائط نفسها. ولإنشاء هيكل مشروع يعتمد على بناء غير منشور من الـ SDK، مرِّر --sdk-path (انظر التثبيت من بناء محلي).
lousho dev
channels/ تحت /channels وتُشغَّل الجداول الزمنية في schedules/ (ويُستبدل الاثنان عند إعادة التحميل، بعد إيقاف الجداول القديمة أولًا)؛ ومع --no-schedules لا يُشغَّل أي جدول. انظر مجلدات الوكلاء.
يقدّم واجهة محادثة على GET /، وGET /health، وGET /dev/status ونقاط نهاية المحادثة أدناه (حدّ الجسم 1 ميغابايت). ونوع <path> يُستنتج من المسار نفسه:
أي امتداد آخر، أو مسار غير موجود، أو وحدة لا تصدّر وكيلًا، يفشل بخطأ ذي رمز (
LOUSHO_SPEC_UNSUPPORTED_FORMAT أو LOUSHO_CONFIG_INVALID) مع حلّه. وحدة .ts يستوردها Node العامل نفسه (الإصدار 22.19 أو أحدث يزيل الأنواع، ولذلك تحتاج الاستيرادات النسبية إلى امتداد الملف)؛ استخدم .js للشيفرة التي تحتاج إلى مترجم مصدري (transpiler).
جلسات المحادثة. تحتفظ واجهة المحادثة بجلسة واحدة لكل تبويب في المتصفح (معرّفها في sessionStorage؛ والزر “New session” يبدأ جلسة أخرى) وتعرض الدورة المبثوثة: النص فور وصوله، واستدعاءات الأدوات مع وسائطها ونتائجها، والأخطاء، والرموز (tokens) والتكلفة من run.done. استدعاء الأداة الذي يحتاج إلى موافقة يعرض زرَّي Approve / Reject؛ واستدعاء ask_question يعرض خياراته كأزرار مع حقل نص حر. وتعمل نقاط النهاية نفسها من curl أو من صفحتك الخاصة:
تعيش الجلسات في
memoryStore() داخل العملية (تزول حين يتوقف lousho dev)، أو في مخزن store الخاص بالوكيل حين تضبطه خيارات createAgent() في الوحدة. تتمة الموافقة لا تُبَث رمزًا رمزًا: فنقطة النهاية تشغّلها بـ agent.approvals.resolve() وترسل نتائج أدوات الدورة ونصها كأحداث بعد انتهائها.
خوادم lousho build (node-server وdocker) تقدّم نقاط النهاية نفسها من الشيفرة نفسها، مع جلسات في مخزن يحدده LOUSHO_STORE ومصادقة bearer اختيارية: انظر النشر: واجهة HTTP البرمجية.
إعادة التحميل الفوري. يُعاد بناء الوكيل بعد لحظة (100 ميلي ثانية) من تغيّر ملف، دون إعادة تشغيل الخادم ولا تحرير المنفذ:
- في حالة ملف المواصفات: ملف المواصفات نفسه؛
- في حالة المجلد: كل ما تحته (
instructions.md، وملف الإعداد، وtools/، وskills/، وsubagents/)، ما عداnode_modulesو.git؛ - في حالة الوحدة: الملف والملفات المحلية التي يستوردها (محدِّدات
import/requireالنسبية، ويُعثر عليها مرة واحدة عند بدء التشغيل؛ دون مُحزِّم).
?t=<time> يتجاوز التخزين المؤقت، فيُعاد تقييم ملف الأداة أو الوكيل بعد تعديله. أما الملف الذي يستورده ذلك الملف (دالة مساعدة مشتركة مثلًا) فيبقى مخزَّنًا مؤقتًا لدى Node: أعد تشغيل lousho dev بعد تعديل ملف كهذا. تسجّل الطرفية ما أُعيد تحميله. يُبنى الوكيل الجديد (ويُنتظر ready()، فتتصل خوادم MCP) قبل أن يحل محل القديم، ثم يُستدعى close() على القديم. وإذا فشلت إعادة البناء، استمر آخر وكيل سليم في الإجابة، وسُجِّل الخطأ وعُرض في شريط تنبيه على صفحة المحادثة (وكذلك في الحقل error ضمن GET /dev/status)؛ ويزيله أول تعديل سليم لاحق. الجلسات تبقى بعد إعادة التحميل: فالمخزن يعيش أطول من تبديل الوكيل، ولذلك تكمل الرسالة التالية المحادثةَ على الوكيل الجديد. أما الموافقة التي كانت معلّقة على الوكيل القديم فلا يعرفها الجديد (404)؛ ابدأ جلسة جديدة.
المجلدات والوحدات هي شيفرتك وتعمل بصلاحياتك؛ فلا تشغّل lousho dev إلا على ما تثق به منها.
--port- الافتراضي3737.--host- الافتراضي127.0.0.1(localhost فقط). مرِّر مثلًا--host=0.0.0.0لتتيح الوصول من الشبكة المحلية صراحةً.
lousho chat
<path> كما يحمّله lousho dev (ملف مواصفات، أو مجلد وكيل، أو وحدة .ts/.js، انظر lousho dev)؛ والمسار غير الموجود أو الامتداد غير الصالح يفشل بالخطأ ذي الرمز نفسه (LOUSHO_CONFIG_INVALID أو LOUSHO_SPEC_UNSUPPORTED_FORMAT)، وكذلك معرّف --session غير الصالح (LOUSHO_SESSION_ID_INVALID).
- يُكتب النص فور أن ينتجه النموذج. وكل استدعاء أداة سطر واحد باهت اللون،
[tool_name] {args}، يتبعه-> result(أو-> error: ...). - استدعاء الأداة الذي يحتاج إلى موافقة يسأل
Approve <tool>(args)? [y/N]: الإجابةyأوyesتنفّذه، وأي إجابة أخرى ترفضه ويواصل النموذج عمله. استدعاءask_question(askQuestion: true) يطبع السؤال مع خيارات مرقَّمة؛ أجب بالرقم أو بنص حر. - بعد كل دورة يعرض
[usage]عدد الرموز، وكذلك التكلفة حين تكون أسعار كل النماذج المستخدمة معروفة (العلامة~تدل على رموز مقدَّرة). - أخطاء الـ SDK تُطبع مع رمزها
[LOUSHO_...]وحلّها، وتستمر الجلسة.
حلقة REPL نفسها هي
runChatRepl() في src/cli/chatRepl.ts؛ وهي تأخذ أسطر الإدخال، ومجرى إخراج، ودالة مصنع للوكيل، فيمكن اختبارها بأسطر معدّة مسبقًا ووكيل mockModel ودون طرفية.
lousho build
--out (الافتراضي .lousho/build/<target>) ويطبع أمر تشغيله أو نشره. يحتاج البناء إلى tsup (npm install --save-dev tsup). الأهداف، وواجهة HTTP البرمجية التي تقدّمها، وحدود Workers مذكورة في النشر.
lousho studio
.lousho/ في المجلد الحالي. انظر Agent Forge للجولة التعريفية.