Skip to main content
TypeBox, TypeScript öncelikli bir şema kütüphanesidir. OpenClaw bunu Gateway WebSocket protokolünü (el sıkışma, istek/yanıt, sunucu olayları) tanımlamak için kullanır. Bu şemalar çalışma zamanı doğrulamasını (AJV), JSON Schema dışa aktarımını ve macOS uygulaması için Swift kod üretimini yönlendirir. Tek bir doğruluk kaynağı vardır; diğer her şey üretilir. Üst düzey protokol bağlamı için Gateway mimarisi ile başlayın.

Zihinsel model (30 saniye)

Her Gateway WS mesajı üç çerçeveden biridir:
  • İstek: { type: "req", id, method, params }
  • Yanıt: { type: "res", id, ok, payload | error }
  • Olay: { type: "event", event, payload, seq?, stateVersion? }
İlk çerçeve mutlaka bir connect isteği olmalıdır. Bundan sonra istemciler yöntemleri (ör. health, send, chat.send) çağırır ve olaylara (ör. presence, tick, agent) abone olur. Bağlantı akışı (asgari):
Yaygın yöntemler ve olaylar: Yetkili olarak duyurulan keşif envanteri src/gateway/server-methods-list.ts içinde bulunur (listGatewayMethods, GATEWAY_EVENTS).

Şemaların bulunduğu yer

  • Kaynak dışa aktarma noktası: packages/gateway-protocol/src/schema.ts, packages/gateway-protocol/src/schema/*.ts altındaki alan modüllerini yeniden dışa aktarır (üst düzey zarflar ve el sıkışma için frames.ts; özellik alanına göre agent.ts, sessions.ts, cron.ts vb.). protocol-schemas.ts, şema adlarını TypeBox tanımlarıyla eşleyen merkezi ProtocolSchemas kayıt defteridir.
  • Çalışma zamanı doğrulayıcıları (AJV): packages/gateway-protocol/src/index.ts
  • Duyurulan özellik/keşif kayıt defteri: src/gateway/server-methods-list.ts
  • Sunucu el sıkışması ve yöntem yönlendirmesi: src/gateway/server.impl.ts
  • Node istemcisi: src/gateway/client.ts
  • Üretilen JSON Schema: dist/protocol.schema.json (derleme çıktısıdır, depoya kaydedilmez)
  • Üretilen Swift modelleri: apps/shared/OpenClawKit/Sources/OpenClawProtocol/GatewayModels.swift

Geçerli işlem hattı

  • pnpm protocol:gen, JSON Schema’yı (draft-07) dist/protocol.schema.json konumuna yazar.
  • pnpm protocol:gen:swift, Swift Gateway modellerini üretir.
  • pnpm protocol:check, her iki üreticiyi çalıştırır ve Swift çıktısının depoya kaydedildiğini doğrular (JSON Schema çıktısı, git tarafından yok sayılan bir derleme yapıtıdır).

Şemaların çalışma zamanında kullanımı

  • Sunucu tarafı: gelen her çerçeve AJV ile doğrulanır. El sıkışma yalnızca parametreleri ConnectParams ile eşleşen bir connect isteğini kabul eder.
  • İstemci tarafı: JS istemcisi, olay ve yanıt çerçevelerini kullanmadan önce doğrular.
  • Özellik keşfi: Gateway, listGatewayMethods() ve GATEWAY_EVENTS kaynaklarından alınan temkinli bir features.methods ve features.events listesini hello-ok içinde gönderir.
  • Bu keşif listesi, coreGatewayHandlers içindeki çağrılabilir her yardımcının üretilmiş bir dökümü değildir; bazı yardımcı RPC’ler duyurulan özellik listesinde sıralanmadan src/gateway/server-methods/*.ts içinde uygulanır.

Örnek çerçeveler

Bağlanma (ilk mesaj):
Hello-ok yanıtı:
İstek ve yanıt:
Olay:

Asgari istemci (Node.js)

Kullanışlı en küçük akış: bağlantı + sistem durumu.

Ayrıntılı örnek: uçtan uca yöntem ekleme

Örnek: { ok: true, text } döndüren yeni bir system.echo isteği ekleyin.
  1. Şema (doğruluk kaynağı)
packages/gateway-protocol/src/schema/system.ts dosyasına (veya en yakın eşleşen özellik modülüne) ekleyin:
Her ikisini de packages/gateway-protocol/src/schema/protocol-schemas.ts içine aktarın, ProtocolSchemas kayıt defterine ekleyin ve türetilmiş türleri dışa aktarın:
  1. Doğrulama
packages/gateway-protocol/src/index.ts içinde bir AJV doğrulayıcısını dışa aktarın:
  1. Sunucu davranışı
src/gateway/server-methods/system.ts içine bir işleyici ekleyin:
Bunu src/gateway/server-methods.ts içinde kaydedin (zaten systemHandlers birleştirilmektedir), ardından src/gateway/server-methods-list.ts içindeki listGatewayMethods girdisine "system.echo" ekleyin. Yöntem operatör veya node istemcileri tarafından çağrılabiliyorsa kapsam zorlamasıyla hello-ok özellik duyurusunun uyumlu kalması için yöntemi src/gateway/method-scopes.ts içinde de sınıflandırın.
  1. Yeniden üretme
  1. Testler ve belgeler
src/gateway/server.*.test.ts içine bir sunucu testi ekleyin ve yöntemi belgelerde belirtin.

Swift kod üretimi davranışı

Swift üreticisi şunları oluşturur:
  • req, res, event ve unknown durumlarını içeren bir GatewayFrame enum’u
  • kesin tür belirtilmiş yük yapıları/enum’ları
  • ErrorCode değerleri, GATEWAY_PROTOCOL_VERSION ve GATEWAY_MIN_PROTOCOL_VERSION
Bilinmeyen çerçeve türleri ileriye dönük uyumluluk için ham yükler olarak korunur.

Sürüm oluşturma ve uyumluluk

  • PROTOCOL_VERSION, packages/gateway-protocol/src/version.ts içinde bulunur (geçerli değer: 4).
  • İstemciler minProtocol ve maxProtocol gönderir; sunucu geçerli protokolünü içermeyen aralıkları reddeder.
  • Swift modelleri, eski istemcilerin bozulmasını önlemek için bilinmeyen çerçeve türlerini korur.

Şema kalıpları ve kuralları

  • Çoğu nesne katı yükler için additionalProperties: false kullanır.
  • NonEmptyString (Type.String({ minLength: 1 })), kimlikler ve yöntem/olay adları için varsayılandır.
  • Üst düzey GatewayFrame, type üzerinde bir ayırt edici kullanır.
  • Yan etkileri olan yöntemler genellikle parametrelerde bir idempotencyKey gerektirir (örnek: send, poll, agent, chat.send).
  • agent, çalışma zamanında üretilen orkestrasyon bağlamı (örneğin alt ajan/cron görevi tamamlanma devri) için isteğe bağlı internalEvents kabul eder; bunu dahili API yüzeyi olarak değerlendirin.

Canlı şema JSON’u

Üretilen JSON Schema bir derleme yapıtıdır ve depoya kaydedilmez. Yayımlanan ham dosya genellikle şu adreste bulunur:

Şemaları değiştirdiğinizde

  1. Sahibi olan packages/gateway-protocol/src/schema/*.ts modülündeki TypeBox şemalarını güncelleyin ve bunları protocol-schemas.ts içinde kaydedin.
  2. Yöntemi/olayı src/gateway/server-methods-list.ts içinde kaydedin.
  3. Yeni RPC operatör veya node kapsamı sınıflandırması gerektiriyorsa src/gateway/method-scopes.ts dosyasını güncelleyin.
  4. pnpm protocol:check komutunu çalıştırın.
  5. Yeniden üretilen Swift modellerini depoya kaydedin.

İlgili