---
read_when:
    - تصحيح أخطاء تبويب Instances
    - التحقيق في صفوف Instances المكررة أو القديمة
    - تغيير اتصال Gateway WS أو إشارات أحداث النظام
summary: كيف يتم إنتاج إدخالات حضور OpenClaw ودمجها وعرضها
title: الحضور
x-i18n:
    generated_at: "2026-04-24T07:38:25Z"
    model: gpt-5.4
    provider: openai
    source_hash: 2f33a7d4a3d5e5555c68a7503b3a4f75c12db94d260e5546cfc26ca8a12de0f9
    source_path: concepts/presence.md
    workflow: 15
---

يُعد "الحضور" في OpenClaw عرضًا خفيفًا وبأفضل جهد لكل من:

- **Gateway** نفسها، و
- **العملاء المتصلين بـ Gateway** ‏(تطبيق Mac، وWebChat، وCLI، وما إلى ذلك)

ويُستخدم الحضور أساسًا لعرض تبويب **Instances** في تطبيق macOS
ولإتاحة رؤية سريعة للمشغل.

## حقول الحضور (ما الذي يظهر)

إدخالات الحضور هي كائنات منظَّمة تحتوي على حقول مثل:

- `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)

## المنتجون (من أين يأتي الحضور)

يتم إنتاج إدخالات الحضور من مصادر متعددة ويتم **دمجها**.

### 1) إدخال Gateway الذاتي

تقوم Gateway دائمًا بتهيئة إدخال "ذاتي" عند بدء التشغيل حتى تعرض واجهات المستخدم
مضيف gateway
حتى قبل اتصال أي عملاء.

### 2) اتصال WebSocket

يبدأ كل عميل WS بطلب `connect`. وعند نجاح المصافحة،
تقوم Gateway بإدراج أو تحديث إدخال حضور لذلك الاتصال.

#### لماذا لا تظهر أوامر CLI أحادية الاستخدام

غالبًا ما يتصل CLI لأوامر قصيرة وأحادية الاستخدام. ولتجنب إغراق
قائمة Instances، لا يتم تحويل `client.mode === "cli"` إلى إدخال حضور.

### 3) إشارات `system-event`

يمكن للعملاء إرسال إشارات دورية أغنى عبر الطريقة `system-event`. ويستخدم تطبيق Mac
هذا للإبلاغ عن اسم المضيف وعنوان IP و`lastInputSeconds`.

### 4) اتصالات Node ‏(الدور: node)

عندما تتصل Node عبر Gateway WebSocket مع `role: node`، تقوم Gateway
بإدراج أو تحديث إدخال حضور لتلك الـ Node ‏(نفس التدفق مثل عملاء WS الآخرين).

## قواعد الدمج وإزالة التكرار (لماذا تهم `instanceId`)

تُخزَّن إدخالات الحضور في خريطة واحدة داخل الذاكرة:

- تُفهرس الإدخالات بواسطة **مفتاح حضور**.
- أفضل مفتاح هو `instanceId` مستقرة (`connect.client.instanceId`) تصمد عبر عمليات إعادة التشغيل.
- المفاتيح غير حساسة لحالة الأحرف.

إذا أعاد عميل الاتصال من دون `instanceId` مستقرة، فقد يظهر على شكل
صف **مكرر**.

## TTL وحجم محدود

الحضور مؤقت بطبيعته عمدًا:

- **TTL:** يتم حذف الإدخالات الأقدم من 5 دقائق
- **الحد الأقصى للإدخالات:** 200 ‏(يتم حذف الأقدم أولًا)

يبقي هذا القائمة حديثة ويتجنب النمو غير المحدود للذاكرة.

## ملاحظة خاصة بالاتصال البعيد/النفق (عناوين loopback IP)

عندما يتصل عميل عبر نفق SSH / إعادة توجيه منفذ محلي، قد ترى Gateway
العنوان البعيد على أنه `127.0.0.1`. ولتجنب استبدال عنوان IP جيد أبلغ عنه العميل،
يتم تجاهل العناوين البعيدة الخاصة بـ loopback.

## المستهلكون

### تبويب Instances في macOS

يعرض تطبيق macOS ناتج `system-presence` ويطبق مؤشر حالة صغير
(نشط/خامل/قديم) بناءً على عمر آخر تحديث.

## نصائح لتصحيح الأخطاء

- لرؤية القائمة الخام، استدعِ `system-presence` على Gateway.
- إذا رأيت تكرارات:
  - تأكد من أن العملاء يرسلون `client.instanceId` مستقرة في المصافحة
  - تأكد من أن الإشارات الدورية تستخدم `instanceId` نفسها
  - تحقق مما إذا كان الإدخال المشتق من الاتصال يفتقد `instanceId` ‏(والتكرارات متوقعة حينها)

## ذو صلة

- [مؤشرات الكتابة](/ar/concepts/typing-indicators)
- [البث والتقسيم](/ar/concepts/streaming)
