TypeBox هي مكتبة مخططات موجهة لـ TypeScript. نستخدمها لتعريف بروتوكول WebSocket الخاص بـ Gateway (المصافحة، الطلب/الاستجابة، أحداث الخادم). تقود هذه المخططات التحقق في وقت التشغيل، وتصدير JSON Schema، وتوليد كود Swift لتطبيق macOS. مصدر حقيقة واحد؛ وكل شيء آخر يتم توليده. إذا أردت سياق البروتوكول الأعلى مستوى، فابدأ بـ بنية Gateway.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
النموذج الذهني (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.