Multi-agent
حضور
«presence» در OpenClaw نمایی سبک و با بهترین تلاش از موارد زیر است:
- خود Gateway، و
- کلاینتهای متصل به Gateway (برنامه مک، WebChat، CLI، و غیره)
Presence عمدتاً برای رندر کردن زبانه Instances در برنامه macOS و فراهم کردن دید سریع برای اپراتور استفاده میشود.
فیلدهای Presence (آنچه نمایش داده میشود)
ورودیهای Presence آبجکتهای ساختاریافتهای با فیلدهایی مانند موارد زیر هستند:
instanceId(اختیاری اما قویاً توصیهشده): هویت پایدار کلاینت (معمولاًconnect.client.instanceId)host: نام میزبان خوانا برای انسانip: نشانی IP با بهترین تلاشversion: رشته نسخه کلاینتdeviceFamily/modelIdentifier: سرنخهای سختافزاریmode:ui,webchat,cli,backend,probe,test,node, ...lastInputSeconds: «ثانیههای گذشته از آخرین ورودی کاربر» (اگر معلوم باشد)reason:self,connect,node-connected,periodic, ...ts: مهر زمانی آخرین بهروزرسانی (میلیثانیه از epoch)
تولیدکنندهها (presence از کجا میآید)
ورودیهای Presence توسط چندین منبع تولید و ادغام میشوند.
1) ورودی خود Gateway
Gateway همیشه هنگام راهاندازی یک ورودی «self» اولیه ایجاد میکند تا UIها میزبان gateway را حتی پیش از اتصال هر کلاینتی نشان دهند.
2) اتصال WebSocket
هر کلاینت WS با یک درخواست connect شروع میکند. پس از handshake موفق، Gateway یک ورودی presence را برای آن اتصال upsert میکند.
چرا دستورهای یکباره CLI نمایش داده نمیشوند
CLI اغلب برای دستورهای کوتاه و یکباره وصل میشود. برای جلوگیری از شلوغ شدن فهرست Instances، client.mode === "cli" به ورودی presence تبدیل نمیشود.
3) بیکنهای system-event
کلاینتها میتوانند بیکنهای دورهای غنیتری را از طریق متد system-event ارسال کنند. برنامه مک از این برای گزارش نام میزبان، IP، و lastInputSeconds استفاده میکند.
4) اتصال Nodeها (role: node)
وقتی یک node از طریق WebSocket مربوط به Gateway با role: node وصل میشود، Gateway یک ورودی presence برای آن node upsert میکند (همان جریان سایر کلاینتهای WS).
قواعد ادغام + حذف تکراریها (چرا instanceId مهم است)
ورودیهای Presence در یک map واحد درونحافظهای ذخیره میشوند:
- ورودیها با یک کلید presence کلیدگذاری میشوند.
- بهترین کلید یک
instanceIdپایدار است (ازconnect.client.instanceId) که از راهاندازیهای مجدد جان سالم به در میبرد. - کلیدها به حروف بزرگ و کوچک حساس نیستند.
اگر کلاینتی بدون instanceId پایدار دوباره وصل شود، ممکن است بهصورت یک ردیف تکراری نمایش داده شود.
TTL و اندازه محدود
Presence عمداً موقتی است:
- TTL: ورودیهای قدیمیتر از 5 دقیقه هرس میشوند
- حداکثر ورودیها: 200 (قدیمیترینها اول حذف میشوند)
این کار فهرست را تازه نگه میدارد و از رشد نامحدود حافظه جلوگیری میکند.
نکته مربوط به راه دور/تونل (IPهای loopback)
وقتی کلاینتی از طریق تونل SSH / فوروارد پورت محلی وصل میشود، Gateway ممکن است نشانی راه دور را بهصورت 127.0.0.1 ببیند. برای جلوگیری از بازنویسی IP خوبی که کلاینت گزارش کرده است، نشانیهای راه دور loopback نادیده گرفته میشوند.
مصرفکنندهها
زبانه Instances در macOS
برنامه macOS خروجی system-presence را رندر میکند و بر اساس سن آخرین بهروزرسانی، یک نشانگر وضعیت کوچک (فعال/بیکار/کهنه) اعمال میکند.
نکتههای اشکالزدایی
- برای دیدن فهرست خام،
system-presenceرا روی Gateway فراخوانی کنید. - اگر موارد تکراری میبینید:
- تأیید کنید کلاینتها در handshake یک
client.instanceIdپایدار ارسال میکنند - تأیید کنید بیکنهای دورهای از همان
instanceIdاستفاده میکنند - بررسی کنید آیا ورودی مشتقشده از اتصال فاقد
instanceIdاست (در این حالت موارد تکراری مورد انتظار هستند)
- تأیید کنید کلاینتها در handshake یک
مرتبط
اینکه چه زمانی نشانگرهای تایپ ارسال میشوند و چگونه آنها را تنظیم کنید.
استریم خروجی، قطعهبندی، و قالببندی مختص هر کانال.
اجزای Gateway و پروتکل WebSocket که بهروزرسانیهای presence را هدایت میکند.
پروتکل سیمی برای connect، system-event، و system-presence.