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? }
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):
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/*.tsaltındaki alan modüllerini yeniden dışa aktarır (üst düzey zarflar ve el sıkışma içinframes.ts; özellik alanına göreagent.ts,sessions.ts,cron.tsvb.).protocol-schemas.ts, şema adlarını TypeBox tanımlarıyla eşleyen merkeziProtocolSchemaskayı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.jsonkonumuna 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
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,
listGatewayMethods()veGATEWAY_EVENTSkaynaklarından alınan temkinli birfeatures.methodsvefeatures.eventslistesinihello-okiçinde gönderir. - Bu keşif listesi,
coreGatewayHandlersiç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ıralanmadansrc/gateway/server-methods/*.tsiçinde uygulanır.
Örnek çerçeveler
Bağlanma (ilk mesaj):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.
- Ş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:
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:
- Doğrulama
packages/gateway-protocol/src/index.ts içinde bir AJV doğrulayıcısını 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 (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.
- Yeniden üretme
- 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,eventveunknowndurumlarını içeren birGatewayFrameenum’u- kesin tür belirtilmiş yük yapıları/enum’ları
ErrorCodedeğerleri,GATEWAY_PROTOCOL_VERSIONveGATEWAY_MIN_PROTOCOL_VERSION
Sürüm oluşturma ve uyumluluk
PROTOCOL_VERSION,packages/gateway-protocol/src/version.tsiçinde bulunur (geçerli değer:4).- İstemciler
minProtocolvemaxProtocolgö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: falsekullanı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
idempotencyKeygerektirir (ö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ıinternalEventskabul 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
- Sahibi olan
packages/gateway-protocol/src/schema/*.tsmodülündeki TypeBox şemalarını güncelleyin ve bunlarıprotocol-schemas.tsiçinde kaydedin. - Yöntemi/olayı
src/gateway/server-methods-list.tsiçinde kaydedin. - Yeni RPC operatör veya node kapsamı sınıflandırması gerektiriyorsa
src/gateway/method-scopes.tsdosyasını güncelleyin. pnpm protocol:checkkomutunu çalıştırın.- Yeniden üretilen Swift modellerini depoya kaydedin.