Protokol için doğruluk kaynağı olarak TypeBox
Son güncelleme: 2026-01-10 TypeBox, TypeScript öncelikli bir şema kitaplığıdır. Bunu Gateway WebSocket protokolünü tanımlamak için kullanıyoruz (el sıkışma, istek/yanıt, sunucu olayları). Bu şemalar çalışma zamanı doğrulamasını, JSON Schema dışa aktarmasını ve macOS uygulaması için Swift codegen sürecini yönlendirir. Tek bir doğruluk kaynağı; diğer her şey üretilir. Daha üst düzey protokol bağlamını istiyorsanız, şuradan başlayın: Gateway mimarisi.Zihinsel model (30 saniye)
Her Gateway WS mesajı şu üç çerçeveden biridir:- İstek:
{ type: "req", id, method, params } - Yanıt:
{ type: "res", id, ok, payload | error } - Olay:
{ type: "event", event, payload, seq?, stateVersion? }
connect isteği olmalıdır. Bundan sonra istemciler
yöntem çağırabilir (ör. health, send, chat.send) ve olaylara abone olabilir
(ör. presence, tick, agent).
Bağlantı akışı (en düşük düzeyde):
| Kategori | Örnekler | Notlar |
|---|---|---|
| Çekirdek | connect, health, status | connect ilk olmalıdır |
| Mesajlaşma | send, agent, agent.wait, system-event, logs.tail | yan etkiler için idempotencyKey gerekir |
| Sohbet | chat.history, chat.send, chat.abort | WebChat bunları kullanır |
| Oturumlar | sessions.list, sessions.patch, sessions.delete | oturum yönetimi |
| Otomasyon | wake, cron.list, cron.run, cron.runs | uyandırma + cron kontrolü |
| Düğümler | node.list, node.invoke, node.pair.* | Gateway WS + düğüm eylemleri |
| Olaylar | tick, presence, agent, chat, health, shutdown | sunucu itmesi |
src/gateway/server-methods-list.ts içinde bulunur (listGatewayMethods, GATEWAY_EVENTS).
Şemalar nerede bulunur
- Kaynak:
src/gateway/protocol/schema.ts - Çalışma zamanı doğrulayıcıları (AJV):
src/gateway/protocol/index.ts - Duyurulan özellik/keşif kaydı:
src/gateway/server-methods-list.ts - Sunucu el sıkışması + yöntem sevki:
src/gateway/server.impl.ts - Düğüm istemcisi:
src/gateway/client.ts - Üretilen JSON Schema:
dist/protocol.schema.json - Üretilen Swift modelleri:
apps/macos/Sources/OpenClawProtocol/GatewayModels.swift
Geçerli işlem hattı
pnpm protocol:gen- JSON Schema’yı (draft‑07)
dist/protocol.schema.jsondosyasına yazar
- JSON Schema’yı (draft‑07)
pnpm protocol:gen:swift- Swift Gateway modellerini üretir
pnpm protocol:check- her iki üreticiyi de çalıştırır ve çıktının commit edildiğini doğrular
Şemalar çalışma zamanında nasıl kullanılır
- Sunucu tarafı: gelen her çerçeve AJV ile doğrulanır. El sıkışma yalnızca
parametreleri
ConnectParamsile eşleşen birconnectisteğini kabul eder. - İstemci tarafı: JS istemcisi, olay ve yanıt çerçevelerini kullanmadan önce doğrular.
- Özellik keşfi: Gateway,
hello-okiçinde temkinli birfeatures.methodsvefeatures.eventslistesinilistGatewayMethods()veGATEWAY_EVENTSüzerinden gönderir. - Bu keşif listesi,
coreGatewayHandlersiçindeki çağrılabilir her yardımcı işlevin üretilmiş bir dökümü değildir; bazı yardımcı RPC’ler, duyurulan özellik listesinde numaralandırılmadansrc/gateway/server-methods/*.tsiçinde uygulanır.
Örnek çerçeveler
Bağlanma (ilk mesaj):En düşük düzey istemci (Node.js)
En küçük kullanışlı akış: connect + health.Uçtan uca yöntem ekleme: işlenmiş örnek
Örnek:{ ok: true, text } döndüren yeni bir system.echo isteği ekleyin.
- Şema (doğruluk kaynağı)
src/gateway/protocol/schema.ts dosyasına ekleyin:
ProtocolSchemas içine ekleyin ve türleri dışa aktarın:
- Doğrulama
src/gateway/protocol/index.ts içinde bir AJV doğrulayıcıyı dışa aktarın:
- Sunucu davranışı
src/gateway/server-methods/system.ts içine bir işleyici ekleyin:
src/gateway/server-methods.ts içinde kaydedin (systemHandlers zaten birleştirilir),
ardından "system.echo" değerini
src/gateway/server-methods-list.ts içindeki listGatewayMethods girdisine ekleyin.
Yöntem operatör veya düğüm istemcileri tarafından çağrılabiliyorsa, kapsam zorlaması ile hello-ok özellik duyurusu uyumlu kalsın diye bunu
src/gateway/method-scopes.ts içinde de sınıflandırın.
- Yeniden üretin
- Testler + belgeler
src/gateway/server.*.test.ts içine bir sunucu testi ekleyin ve belgelerde yöntemden bahsedin.
Swift codegen davranışı
Swift üreticisi şunları çıkarır:req,res,eventveunknowndurumlarına sahipGatewayFrameenum’u- Güçlü türlendirilmiş payload struct/enum’ları
ErrorCodedeğerleri veGATEWAY_PROTOCOL_VERSION
Sürümleme + uyumluluk
PROTOCOL_VERSION,src/gateway/protocol/schema.tsiçinde bulunur.- İstemciler
minProtocol+maxProtocolgönderir; sunucu eşleşmezlikleri reddeder. - Swift modelleri, eski istemcileri bozmamak için bilinmeyen çerçeve türlerini korur.
Şema kalıpları ve kuralları
- Çoğu nesne, katı payload’lar için
additionalProperties: falsekullanır. NonEmptyString, kimlikler ve yöntem/olay adları için varsayılandır.- Üst düzey
GatewayFrame,typeüzerinde bir ayırt edici kullanır. - Yan etkili yöntemler genellikle parametrelerde bir
idempotencyKeygerektirir (örnek:send,poll,agent,chat.send). agent, çalışma zamanında üretilen orkestrasyon bağlamı için isteğe bağlıinternalEventskabul eder (örneğin alt ajan/cron görevi tamamlama aktarımı); bunu iç API yüzeyi olarak değerlendirin.
Canlı şema JSON
Üretilen JSON Schema repodadist/protocol.schema.json içinde bulunur. Yayımlanmış ham dosya genellikle şu adreste bulunabilir:
Şemaları değiştirdiğinizde
- TypeBox şemalarını güncelleyin.
- Yöntemi/olayı
src/gateway/server-methods-list.tsiçinde kaydedin. - Yeni RPC operatör veya
düğüm kapsamı sınıflandırması gerektiriyorsa
src/gateway/method-scopes.tsdosyasını güncelleyin. pnpm protocol:checkçalıştırın.- Yeniden üretilen şema + Swift modellerini commit edin.