Bu sayfada
Bu sayfada
Schemas and formatting
TypeBox
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:
| Kategori | Örnekler | Notlar |
|---|---|---|
| Çekirdek | connect, health, status |
connect ilk olmalıdır |
| Mesajlaşma | send, agent, agent.wait, system-event, logs.tail |
yan etkili yöntemler idempotencyKey gerektirir |
| 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 ve cron denetimi |
| Node'lar | node.list, node.invoke, node.pair.* |
Gateway WS ve node eylemleri |
| Olaylar | tick, presence, agent, chat, health, shutdown |
sunucu gönderimi |
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):
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.
- Ş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:
- 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:
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.
- 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
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.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.