TypeBox كمصدر الحقيقة للبروتوكول
آخر تحديث: 2026-01-10 TypeBox هي مكتبة مخططات تعتمد TypeScript أولًا. نستخدمها لتعريف بروتوكول Gateway عبر WebSocket (المصافحة، الطلب/الاستجابة، أحداث الخادم). تقود هذه المخططات التحقق أثناء التشغيل وتصدير JSON Schema وتوليد شيفرة Swift لتطبيق macOS. مصدر واحد للحقيقة؛ وكل ما عداه يتم توليده. إذا كنت تريد السياق الأعلى مستوى للبروتوكول، فابدأ بـ بنية Gateway.النموذج الذهني (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).
تدفّق الاتصال (الحد الأدنى):
| الفئة | أمثلة | ملاحظات |
|---|---|---|
| الأساسية | connect، health، status | يجب أن يكون connect أولًا |
| المراسلة | send، poll، agent، agent.wait | الآثار الجانبية تتطلب idempotencyKey |
| الدردشة | chat.history، chat.send، chat.abort، chat.inject | يستخدم WebChat هذه |
| الجلسات | sessions.list، sessions.patch، sessions.delete | إدارة الجلسات |
| Nodes | node.list، node.invoke، node.pair.* | Gateway WS + إجراءات العُقد |
| الأحداث | tick، presence، agent، chat، health، shutdown | دفع من الخادم |
src/gateway/server.ts (METHODS، EVENTS).
أين تعيش المخططات
- المصدر:
src/gateway/protocol/schema.ts - مُحقِّقات وقت التشغيل (AJV):
src/gateway/protocol/index.ts - مصافحة الخادم + توزيع الأساليب:
src/gateway/server.ts - عميل العُقدة:
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 عن
methodsوeventsالمدعومة فيhello-ok.
أمثلة على الإطارات
الاتصال (الرسالة الأولى):عميل حدّ أدنى (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" إلى METHODS في src/gateway/server.ts.
- إعادة التوليد
- الاختبارات + التوثيق
src/gateway/server.*.test.ts واذكر الأسلوب في الوثائق.
سلوك توليد شيفرة Swift
يُصدِر مولِّد Swift:- تعداد
GatewayFrameمع حالاتreqوresوeventوunknown - هياكل/تعدادات حمولة مُحكَمة الأنواع
- قيم
ErrorCodeوGATEWAY_PROTOCOL_VERSION
الإصدارات + التوافق
- يعيش
PROTOCOL_VERSIONفيsrc/gateway/protocol/schema.ts. - يرسل العملاء
minProtocol+maxProtocol؛ ويرفض الخادم حالات عدم التطابق. - تحتفظ نماذج Swift بأنواع الإطارات غير المعروفة لتجنّب كسر العملاء الأقدم.
أنماط واتفاقيات المخطط
- تستخدم معظم الكائنات
additionalProperties: falseللحِمولات الصارمة. NonEmptyStringهو الافتراضي للمعرّفات وأسماء الأساليب/الأحداث.- يستخدم
GatewayFrameعلى المستوى الأعلى مميِّزًا علىtype. - غالبًا ما تتطلب الأساليب ذات الآثار الجانبية
idempotencyKeyضمن المعلمات (مثال:sendوpollوagentوchat.send).
JSON للمخطط الحي
يتوفر JSON Schema المُولَّد في المستودع عندdist/protocol.schema.json. عادةً ما يكون
الملف الخام المنشور متاحًا على:
عند تغيير المخططات
- حدِّث مخططات TypeBox.
- شغِّل
pnpm protocol:check. - التزم بالمخطط المُعاد توليده ونماذج Swift.