النموذج الذهني (30 ثانية)
كل رسالة WS خاصة بـ Gateway هي أحد ثلاثة إطارات:- طلب:
{ 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).
تدفق الاتصال (الحد الأدنى):
توجد قائمة الاكتشاف المعلنة والمرجعية في
src/gateway/server-methods-list.ts (listGatewayMethods وGATEWAY_EVENTS).
مواضع المخططات
- ملف التصدير المصدر: يعيد
packages/gateway-protocol/src/schema.tsتصدير وحدات النطاق ضمنpackages/gateway-protocol/src/schema/*.ts(frames.tsللأغلفة العليا والمصافحة، وagent.tsوsessions.tsوcron.tsوغيرها بحسب مجال الميزة). يمثّلprotocol-schemas.tsسجلProtocolSchemasالمركزي الذي يربط أسماء المخططات بتعريفاتها في TypeBox. - أدوات التحقق أثناء التشغيل (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/shared/OpenClawKit/Sources/OpenClawProtocol/GatewayModels.swift
مسار المعالجة الحالي
- يكتب
pnpm protocol:genملف JSON Schema (draft-07) إلىdist/protocol.schema.json. - يولّد
pnpm protocol:gen:swiftنماذج Gateway بلغة Swift. - يشغّل
pnpm protocol:checkكلا المولّدين ويتحقق من تضمين ناتج Swift في المستودع (أما ناتج JSON Schema فهو أثر بناء يتجاهله Git).
كيفية استخدام المخططات أثناء التشغيل
- جانب الخادم: يُتحقق من كل إطار وارد باستخدام AJV. لا تقبل المصافحة سوى طلب
connectتطابق معاملاتهConnectParams. - جانب العميل: يتحقق عميل JS من إطارات الأحداث والاستجابات قبل استخدامها.
- اكتشاف الميزات: يرسل Gateway قائمة متحفظة من
features.methodsوfeatures.eventsضمنhello-ok، مصدرهاlistGatewayMethods()وGATEWAY_EVENTS. - قائمة الاكتشاف هذه ليست تفريغًا مولَّدًا لكل دالة مساعدة قابلة للاستدعاء في
coreGatewayHandlers؛ إذ توجد بعض إجراءات RPC المساعدة المنفَّذة فيsrc/gateway/server-methods/*.tsمن دون إدراجها في قائمة الميزات المعلنة.
أمثلة على الإطارات
الاتصال (الرسالة الأولى):عميل مبسّط (Node.js)
أصغر تدفق مفيد: الاتصال + فحص الصحة.مثال عملي: إضافة أسلوب من البداية إلى النهاية
مثال: أضف طلبًا جديدًا باسمsystem.echo يعيد { ok: true, text }.
- المخطط (مصدر الحقيقة)
packages/gateway-protocol/src/schema/system.ts (أو إلى أقرب وحدة ميزة مطابقة):
packages/gateway-protocol/src/schema/protocol-schemas.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 - بُنى/تعدادات حمولة قوية الأنواع
- قيم
ErrorCodeوGATEWAY_PROTOCOL_VERSIONوGATEWAY_MIN_PROTOCOL_VERSION
إدارة الإصدارات والتوافق
- يوجد
PROTOCOL_VERSIONفيpackages/gateway-protocol/src/version.ts(القيمة الحالية:4). - ترسل البرامج العميلة
minProtocolوmaxProtocol؛ ويرفض الخادم النطاقات التي لا تشمل بروتوكوله الحالي. - تحتفظ نماذج Swift بأنواع الإطارات غير المعروفة لتجنب تعطيل البرامج العميلة الأقدم.
أنماط المخططات واصطلاحاتها
- تستخدم معظم الكائنات
additionalProperties: falseللحِمولات الصارمة. - يمثّل
NonEmptyString(Type.String({ minLength: 1 })) الخيار الافتراضي للمعرّفات وأسماء الأساليب/الأحداث. - يستخدم
GatewayFrameعالي المستوى مميِّزًا علىtype. - تتطلب الأساليب ذات الآثار الجانبية عادةً
idempotencyKeyضمن المعاملات (مثلsendوpollوagentوchat.send). - يقبل
agentالخيارinternalEventsلأجل سياق التنسيق المولَّد أثناء التشغيل (مثل تسليم اكتمال مهمة وكيل فرعي أو Cron)؛ تعامل معه كسطح API داخلي.
ملف JSON المباشر للمخطط
يمثّل JSON Schema المولَّد أثر بناء غير مُضمَّن في المستودع. يتوفر الملف الخام المنشور عادةً على:عند تغيير المخططات
- حدّث مخططات TypeBox في وحدة
packages/gateway-protocol/src/schema/*.tsالمالكة وسجّلها فيprotocol-schemas.ts. - سجّل الأسلوب/الحدث في
src/gateway/server-methods-list.ts. - حدّث
src/gateway/method-scopes.tsعندما يحتاج إجراء RPC الجديد إلى تصنيف نطاق المشغّل أو العُقدة. - شغّل
pnpm protocol:check. - ضمّن نماذج Swift المعاد توليدها في المستودع.