النموذج الذهني (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).
مكان وجود المخططات
- المصدر:
src/gateway/protocol/schema.ts - مدققات وقت التشغيل (AJV):
src/gateway/protocol/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؛ فبعض RPCs المساعدة منفذة فيsrc/gateway/server-methods/*.tsدون تعدادها في قائمة الميزات المعلنة.
أمثلة على الإطارات
Connect (الرسالة الأولى):عميل بسيط (Node.js)
أصغر تدفق مفيد: الاتصال + الصحة.مثال عملي: إضافة طريقة من البداية إلى النهاية
مثال: أضف طلبsystem.echo جديدًا يعيد { ok: true, text }.
- المخطط (مصدر الحقيقة)
src/gateway/protocol/schema.ts:
ProtocolSchemas وصدّر الأنواع:
- التحقق
src/gateway/protocol/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:- enum باسم
GatewayFrameمع حالاتreqوresوeventوunknown - structs/enums للحمولات مكتوبة الأنواع بقوة
- قيم
ErrorCodeوGATEWAY_PROTOCOL_VERSIONوGATEWAY_MIN_PROTOCOL_VERSION
الإصدارات + التوافق
- يوجد
PROTOCOL_VERSIONفيsrc/gateway/protocol/version.ts. - يرسل العملاء
minProtocol+maxProtocol؛ يرفض الخادم النطاقات التي لا تتضمن بروتوكوله الحالي. - تحتفظ نماذج Swift بأنواع الإطارات غير المعروفة لتجنب كسر العملاء الأقدم.
أنماط المخططات والاصطلاحات
- تستخدم معظم الكائنات
additionalProperties: falseللحمولات الصارمة. NonEmptyStringهو الافتراضي للمعرفات وأسماء الطرق/الأحداث.- يستخدم
GatewayFrameفي المستوى الأعلى مميزًا علىtype. - الطرق ذات الآثار الجانبية تتطلب عادة
idempotencyKeyفي المعاملات (مثال:send، وpoll، وagent، وchat.send). - يقبل
agentقيمةinternalEventsاختيارية لسياق التنسيق المولد في وقت التشغيل (على سبيل المثال تسليم إكمال مهمة وكيل فرعي/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.