lousho acp يقدّم أي وكيل Lousho بهذه الطريقة، فتستطيع أن تحادثه
وتراقب استدعاءات أدواته وتوافق عليها من لوحة الوكيل في المحرر.
الأمر
<path> كما يحمّله lousho chat، ويعمل
--model بالطريقة نفسها. المحرر هو من يبدأ العملية؛ وتستمر حتى
يُغلق stdin. لا يحمل stdout سوى رسائل البروتوكول: فالأخطاء،
وكل ما تطبعه شيفرة الوكيل عبر console.log، تذهب إلى stderr الذي
تعرضه المحررات في سجلاتها. المسار أو الخيار الخاطئ يُنهي العملية برمز الخروج 1 مع
الخطأ ذي الرمز (LOUSHO_CONFIG_INVALID، …) على stderr.
Zed
أضف الوكيل إلى ملفsettings.json في Zed، ثم اختره من لوحة الوكيل:
@lousho/build-ai-agent (أو استخدم
مسارًا مطلقًا إلى node_modules/.bin/lousho في command). تأتي مفاتيح المزوّد
من env أو من البيئة التي شُغّل Zed فيها.
ما المدعوم
الإصدار 1 من البروتوكول. يستجيب الوكيل لما يلي:
أثناء تنفيذ الدورة يرسل الوكيل إشعارات
session/update:
agent_message_chunkمع كتلة محتوىtextلكل جزء من النص يكتبه النموذج؛agent_thought_chunkمع كتلة محتوىtextلكل جزء من استدلال النموذج؛tool_call(status: 'in_progress'، وkind: 'other'، واسم الأداة فيtitle، ومعاملاتها فيrawInput) عند بدء استدعاء أداة؛tool_call_updateمعstatus: 'completed'(النتيجة محتوًى نصيًا وفيrawOutput) أو'failed'(الخطأ) عند انتهائه.
task لا تُمرَّر إلى المحرر؛ ويظهر استدعاء task
نفسه استدعاءَ أداة واحدًا.
الصلاحيات. عندما تحتاج أداة إلى موافقة (needsApproval، أو قواعد permissions
التي تطلب السؤال)، يرسل الوكيل إلى المحرر طلب session/request_permission
يتضمن استدعاء الأداة وخيارين: allow (Allow، allow_once)
وreject (Reject، reject_once). تحسم الإجابةُ الموافقةَ عبر
agent.approvals.streamResolve() وتواصل الدورة المستأنفة بثّ
التحديثات؛ والرفض يضع استدعاء الأداة في حالة failed ويواصل النموذج عمله.
قد تطلب الدورة الواحدة الصلاحية عدة مرات.
الأسئلة. التوقف المؤقت من نوع ask_question (askQuestion: true) لا يُحوَّل إلى
طلب صلاحية، لأن إجابة المستخدم قد تكون نصًا حرًا. بل يُنهي
الدورة (end_turn) ويكون السؤال، مع خياراته المرقَّمة، هو رسالة
الوكيل؛ والموجّه التالي في الجلسة هو الإجابة
(agent.approvals.streamAnswer()).
أسباب التوقف. end_turn للانتهاء الطبيعي، وmax_turn_requests عند
استنفاد maxSteps، وmax_tokens عند تجاوز إحدى ميزانيات limits أو توقف النموذج
عند حدّ مخرجاته، وrefusal عندما يحظر حاجز حماية أو يوقف
مرشّح المحتوى لدى المزوّد النموذج، وcancelled بعد
session/cancel.
الأخطاء. الطريقة غير المعروفة يُرَدّ عليها بخطأ JSON-RPC رقمه -32601، والسطر الذي
ليس JSON بالخطأ -32700، وsessionId غير المعروف أو الموجّه الفارغ بالخطأ -32602، والموجّه
الثاني أثناء تنفيذ موجّه آخر في الجلسة نفسها بالخطأ -32600. والتشغيل الذي يفشل
يُرَدّ عليه بالخطأ -32603 مع رسالة الخطأ، ورمز خطأ الـ SDK الخاص به (مثل
LOUSHO_PROVIDER_RATE_LIMITED) في error.data.code.
غير المدعوم
session/load(loadSession: false) وأوضاع الجلسة.- طرق العميل
fs/*وterminal/*: يقرأ الوكيل الملفات وينفّذ الأوامر بأدواته هو (أدوات مساحة العمل)، لا عبر المحرر. - كتل الموجّه من نوع الصور والصوت والموارد المضمَّنة (الموجّهات النصية فقط).
- تحديثات
plan، وخيارا الصلاحيةallow_always/reject_always. - المصادقة (
authMethodsفارغة): تأتي مفاتيح المزوّد من البيئة.
في الشيفرة
نواة البروتوكول هيserveAcp(agent, { input, write }): تقرأ أسطر JSON-RPC
من أي كائن قابل للتكرار غير المتزامن (async iterable) وتسلّم كل سطر صادر إلى write،
فتستطيع تقديمه عبر وسيلة نقل أخرى أو تشغيله في الاختبارات دون عملية.
ويُحسم وعدها عند انتهاء input، بعد إلغاء أي دورة جارية.
store لحفظ سجلات محادثات جلسات ACP في AgentStore (مثل
SqliteStore)؛ وافتراضيًا تستخدم store الخاص بالوكيل، أو الذاكرة.