النموذج الذهني (30 ثانية)
كل رسالة Gateway WS هي واحد من ثلاثة إطارات:- طلب:
{ type: "req", id, method, params } - استجابة:
{ type: "res", id, ok, payload | error } - حدث:
{ type: "event", event, payload, seq?, stateVersion? }
connect. بعد ذلك، يمكن للعملاء استدعاء
الطرق (مثل health، وsend، وchat.send) والاشتراك في الأحداث (مثل
presence، وtick، وagent).
تدفق الاتصال (الحد الأدنى):
| الفئة | أمثلة | ملاحظات |
|---|---|---|
| النواة | connect, health, status | يجب أن يكون connect أولا |
| المراسلة | send, agent, agent.wait, system-event, logs.tail | تحتاج الآثار الجانبية إلى idempotencyKey |
| الدردشة | chat.history, chat.send, chat.abort | يستخدم WebChat هذه |
| الجلسات | sessions.list, sessions.patch, sessions.delete | إدارة الجلسات |
| الأتمتة | wake, cron.list, cron.run, cron.runs | التحكم في wake + cron |
| العقد | node.list, node.invoke, node.pair.* | Gateway WS + إجراءات العقد |
| الأحداث | tick, presence, agent, chat, health, shutdown | دفع من الخادم |
src/gateway/server-methods-list.ts (listGatewayMethods, GATEWAY_EVENTS).
مكان وجود المخططات
- المصدر:
packages/gateway-protocol/src/schema.ts - أدوات التحقق في وقت التشغيل (AJV):
packages/gateway-protocol/src/index.ts - سجل الميزات/الاكتشاف المعلن:
src/gateway/server-methods-list.ts - مصافحة الخادم + توجيه الطرق:
src/gateway/server.impl.ts - عميل Node:
src/gateway/client.ts - JSON Schema المولد:
dist/protocol.schema.json - نماذج Swift المولدة:
apps/macos/Sources/OpenClawProtocol/GatewayModels.swift
خط الأنابيب الحالي
pnpm protocol:gen- يكتب JSON Schema (draft-07) إلى
dist/protocol.schema.json
- يكتب JSON Schema (draft-07) إلى
pnpm protocol:gen:swift- يولد نماذج Swift لـ Gateway
pnpm protocol:check- يشغل كلا المولدين ويتحقق من أن المخرجات ملتزم بها
كيف تستخدم المخططات في وقت التشغيل
- جهة الخادم: يتم التحقق من كل إطار وارد باستخدام AJV. لا تقبل المصافحة إلا
طلب
connectتطابق معاملاتهConnectParams. - جهة العميل: يتحقق عميل JS من إطارات الأحداث والاستجابة قبل استخدامها.
- اكتشاف الميزات: يرسل Gateway قائمة محافظة
features.methodsوfeatures.eventsفيhello-okمنlistGatewayMethods()وGATEWAY_EVENTS. - ليست قائمة الاكتشاف هذه تفريغا مولدا لكل مساعد قابل للاستدعاء في
coreGatewayHandlers؛ فبعض مساعدات RPC منفذة فيsrc/gateway/server-methods/*.tsمن دون إدراجها في قائمة الميزات المعلنة.
أمثلة على الإطارات
Connect (الرسالة الأولى):عميل بسيط (Node.js)
أصغر تدفق مفيد: الاتصال + الصحة.مثال عملي: إضافة طريقة من البداية إلى النهاية
مثال: أضف طلبsystem.echo جديدا يعيد { ok: true, text }.
- المخطط (مصدر الحقيقة)
packages/gateway-protocol/src/schema.ts:
ProtocolSchemas وصدّر الأنواع:
- التحقق
packages/gateway-protocol/src/index.ts، صدّر أداة تحقق AJV:
- سلوك الخادم
src/gateway/server-methods/system.ts:
src/gateway/server-methods.ts (يدمج systemHandlers بالفعل)،
ثم أضف "system.echo" إلى مدخل listGatewayMethods في
src/gateway/server-methods-list.ts.
إذا كانت الطريقة قابلة للاستدعاء من عملاء المشغل أو العقد، فصنفها أيضا في
src/gateway/method-scopes.ts حتى يبقى فرض النطاق وإعلان ميزات hello-ok
متوافقين.
- إعادة التوليد
- الاختبارات + الوثائق
src/gateway/server.*.test.ts واذكر الطريقة في الوثائق.
سلوك توليد كود Swift
يصدر مولد Swift ما يلي:- تعداد
GatewayFrameمع حالاتreq، وres، وevent، وunknown - بنى/تعدادات payload قوية النوع
- قيم
ErrorCode، وGATEWAY_PROTOCOL_VERSION، وGATEWAY_MIN_PROTOCOL_VERSION
الإصدار + التوافق
- يوجد
PROTOCOL_VERSIONفيpackages/gateway-protocol/src/version.ts. - يرسل العملاء
minProtocol+maxProtocol؛ ويرفض الخادم النطاقات التي لا تتضمن بروتوكوله الحالي. - تحتفظ نماذج Swift بأنواع الإطارات المجهولة لتجنب كسر العملاء الأقدم.
أنماط المخططات والاصطلاحات
- تستخدم معظم الكائنات
additionalProperties: falseللحمولات الصارمة. NonEmptyStringهو الافتراضي للمعرفات وأسماء الطرق/الأحداث.- يستخدم
GatewayFrameالأعلى مستوى مميزا علىtype. - تتطلب الطرق ذات الآثار الجانبية عادة
idempotencyKeyفي المعاملات (مثال:send، وpoll، وagent، وchat.send). - يقبل
agentخيارinternalEventsلسياق تنسيق مولد في وقت التشغيل (على سبيل المثال تسليم إكمال مهمة subagent/cron)؛ تعامل مع هذا كسطح API داخلي.
JSON المخطط الحي
يوجد JSON Schema المولد في المستودع عندdist/protocol.schema.json. يكون
الملف الخام المنشور متاحا عادة عند:
عند تغيير المخططات
- حدّث مخططات TypeBox.
- سجل الطريقة/الحدث في
src/gateway/server-methods-list.ts. - حدّث
src/gateway/method-scopes.tsعندما يحتاج RPC الجديد إلى تصنيف نطاق المشغل أو العقدة. - شغّل
pnpm protocol:check. - التزم بالمخطط المعاد توليده + نماذج Swift.