Gateway
Gateway protokolü
Gateway WS protokolü, OpenClaw için tek kontrol düzlemi + node aktarımıdır. Tüm istemciler (CLI, web UI, macOS uygulaması, iOS/Android node'ları, başsız node'lar) WebSocket üzerinden bağlanır ve el sıkışma sırasında rol + kapsam bildirir.
Aktarım
- JSON yükleri içeren metin çerçeveleriyle WebSocket.
- İlk çerçeve mutlaka bir
connectisteği olmalıdır. - Bağlantı öncesi çerçeveler 64 KiB ile sınırlıdır. Başarılı bir el sıkışmadan sonra istemciler
hello-ok.policy.maxPayloadvehello-ok.policy.maxBufferedBytessınırlarına uymalıdır. Tanılama etkinleştirildiğinde, aşırı büyük gelen çerçeveler ve yavaş giden arabellekler, gateway etkilenen çerçeveyi kapatmadan veya düşürmeden öncepayload.largeolayları yayar. Bu olaylar boyutları, sınırları, yüzeyleri ve güvenli neden kodlarını saklar. İleti gövdesini, ek içeriklerini, ham çerçeve gövdesini, belirteçleri, çerezleri veya gizli değerleri saklamaz.
El Sıkışma (connect)
Gateway → İstemci (bağlantı öncesi challenge):
{ "type": "event", "event": "connect.challenge", "payload": { "nonce": "…", "ts": 1737264000000 }}İstemci → Gateway:
{ "type": "req", "id": "…", "method": "connect", "params": { "minProtocol": 3, "maxProtocol": 4, "client": { "id": "cli", "version": "1.2.3", "platform": "macos", "mode": "operator" }, "role": "operator", "scopes": ["operator.read", "operator.write"], "caps": [], "commands": [], "permissions": {}, "auth": { "token": "…" }, "locale": "en-US", "userAgent": "openclaw-cli/1.2.3", "device": { "id": "device_fingerprint", "publicKey": "…", "signature": "…", "signedAt": 1737264000000, "nonce": "…" } }}Gateway → İstemci:
{ "type": "res", "id": "…", "ok": true, "payload": { "type": "hello-ok", "protocol": 4, "server": { "version": "…", "connId": "…" }, "features": { "methods": ["…"], "events": ["…"] }, "snapshot": { "…": "…" }, "auth": { "role": "operator", "scopes": ["operator.read", "operator.write"] }, "policy": { "maxPayload": 26214400, "maxBufferedBytes": 52428800, "tickIntervalMs": 15000 } }}Gateway başlangıç sidecar'larını hâlâ tamamlıyorken, connect isteği
details.reason değeri "startup-sidecars" olarak ayarlanmış ve retryAfterMs içeren yeniden denenebilir bir UNAVAILABLE hatası döndürebilir. İstemciler bu yanıtı terminal
el sıkışma hatası olarak göstermek yerine genel bağlantı bütçeleri içinde yeniden denemelidir.
server, features, snapshot ve policy öğelerinin tümü şema tarafından zorunludur
(packages/gateway-protocol/src/schema/frames.ts). auth da zorunludur ve anlaşılan
rol/kapsamları bildirir. pluginSurfaceUrls isteğe bağlıdır ve canvas gibi plugin
yüzey adlarını kapsamlandırılmış barındırılan URL'lerle eşler.
Kapsamlandırılmış plugin yüzey URL'lerinin süresi dolabilir. Node'lar, pluginSurfaceUrls içinde yeni bir
girdi almak için { "surface": "canvas" } ile
node.pluginSurface.refresh çağırabilir. Deneysel Canvas plugin refaktörü, kullanımdan kaldırılmış canvasHostUrl, canvasCapability veya
node.canvas.capability.refresh uyumluluk yolunu desteklemez; mevcut yerel istemciler ve
gateway'ler plugin yüzeylerini kullanmalıdır.
Cihaz belirteci verilmediğinde, hello-ok.auth anlaşılan
izinleri belirteç alanları olmadan bildirir:
{ "auth": { "role": "operator", "scopes": ["operator.read", "operator.write"] }}Güvenilen aynı işlem backend istemcileri (client.id: "gateway-client",
client.mode: "backend"), paylaşılan gateway belirteci/parolasıyla kimlik doğruladıklarında
doğrudan local loopback bağlantılarında device alanını atlayabilir. Bu yol, dahili kontrol düzlemi RPC'leri için ayrılmıştır ve eski CLI/cihaz eşleştirme temel çizgilerinin
subagent oturum güncellemeleri gibi yerel backend çalışmalarını engellemesini önler. Uzak istemciler,
tarayıcı kökenli istemciler, node istemcileri ve açık cihaz belirteci/cihaz kimliği
istemcileri normal eşleştirme ve kapsam yükseltme kontrollerini kullanmaya devam eder.
Cihaz belirteci verildiğinde, hello-ok şunu da içerir:
{ "auth": { "deviceToken": "…", "role": "operator", "scopes": ["operator.read", "operator.write"] }}Yerleşik QR/kurulum kodu bootstrap, yeni bir mobil devir yoludur. Başarılı temel kurulum kodu connect işlemi, birincil node belirteci ve sınırlandırılmış bir operator belirteci döndürür:
{ "auth": { "deviceToken": "…", "role": "node", "scopes": [], "deviceTokens": [ { "deviceToken": "…", "role": "operator", "scopes": ["operator.approvals", "operator.read", "operator.talk.secrets", "operator.write"] } ] }}Operator devri kasıtlı olarak sınırlandırılmıştır; böylece QR ile onboarding,
mobil operator döngüsünü başlatabilir ve eşleştirme
mutasyon kapsamları veya operator.admin vermeden yerel kurulumu tamamlayabilir. Yerel istemcinin bootstrap sonrasında ihtiyaç duyduğu Talk yapılandırmasını okuyabilmesi için operator.talk.secrets içerir. Daha geniş
eşleştirme ve admin erişimi, ayrı bir onaylanmış operator eşleştirmesi veya belirteç
akışı gerektirir. İstemciler
hello-ok.auth.deviceTokens değerini yalnızca
connect, wss:// veya loopback/yerel eşleştirme gibi güvenilir aktarımda bootstrap auth kullandığında kalıcı hale getirmelidir.
Node örneği
{ "type": "req", "id": "…", "method": "connect", "params": { "minProtocol": 3, "maxProtocol": 4, "client": { "id": "ios-node", "version": "1.2.3", "platform": "ios", "mode": "node" }, "role": "node", "scopes": [], "caps": ["camera", "canvas", "screen", "location", "voice"], "commands": ["camera.snap", "canvas.navigate", "screen.record", "location.get"], "permissions": { "camera.capture": true, "screen.record": false }, "auth": { "token": "…" }, "locale": "en-US", "userAgent": "openclaw-ios/1.2.3", "device": { "id": "device_fingerprint", "publicKey": "…", "signature": "…", "signedAt": 1737264000000, "nonce": "…" } }}Çerçeveleme
- İstek:
{type:"req", id, method, params} - Yanıt:
{type:"res", id, ok, payload|error} - Olay:
{type:"event", event, payload, seq?, stateVersion?}
Yan etki oluşturan yöntemler idempotency key'leri gerektirir (şemaya bakın).
Roller + kapsamlar
Tam operator kapsam modeli, onay zamanı kontrolleri ve paylaşılan gizli anlamları için bkz. Operator kapsamları.
Roller
operator= kontrol düzlemi istemcisi (CLI/UI/otomasyon).node= yetenek barındırıcısı (kamera/ekran/canvas/system.run).
Kapsamlar (operator)
Yaygın kapsamlar:
operator.readoperator.writeoperator.adminoperator.approvalsoperator.pairingoperator.talk.secrets
includeSecrets: true ile talk.config, operator.talk.secrets
(veya operator.admin) gerektirir.
Gizliler dahil edildiğinde, istemciler etkin Talk sağlayıcı
kimlik bilgisini talk.resolved.config.apiKey alanından okumalıdır; talk.providers.<id>.apiKey
kaynak biçiminde kalır ve bir SecretRef nesnesi veya maskelenmiş bir dize olabilir.
Plugin tarafından kaydedilen gateway RPC yöntemleri kendi operator kapsamlarını isteyebilir, ancak
ayrılmış core admin önekleri (config.*, exec.approvals.*, wizard.*,
update.*) her zaman operator.admin değerine çözümlenir.
Yöntem kapsamı yalnızca ilk kapıdır. chat.send üzerinden ulaşılan bazı slash komutları
bunun üzerine daha katı komut düzeyi kontroller uygular. Örneğin, kalıcı
/config set ve /config unset yazmaları operator.admin gerektirir.
node.pair.approve, temel yöntem kapsamının üstünde ek bir onay zamanı kapsam kontrolüne de sahiptir:
- komutsuz istekler:
operator.pairing - exec olmayan node komutları içeren istekler:
operator.pairing+operator.write system.run,system.run.prepareveyasystem.whichiçeren istekler:operator.pairing+operator.admin
Caps/commands/permissions (node)
Node'lar connect sırasında yetenek iddialarını bildirir:
caps:camera,canvas,screen,location,voicevetalkgibi üst düzey yetenek kategorileri.commands: invoke için komut izin listesi.permissions: ayrıntılı anahtarlar (örn.screen.record,camera.capture).
Gateway bunları iddia olarak ele alır ve sunucu tarafı izin listelerini uygular.
Presence
system-presence, cihaz kimliğine göre anahtarlanmış girdiler döndürür.- Presence girdileri
deviceId,rolesvescopesiçerir; böylece UI'lar, cihaz hem operator hem node olarak bağlansa bile cihaz başına tek satır gösterebilir. node.list, isteğe bağlılastSeenAtMsvelastSeenReasonalanlarını içerir. Bağlı node'lar, geçerli bağlantı zamanlarınıconnectnedeniylelastSeenAtMsolarak bildirir; eşleştirilmiş node'lar, güvenilir bir node olayı eşleştirme metaverilerini güncellediğinde kalıcı arka plan presence'ı da bildirebilir.
Node arka plan alive olayı
Node'lar, eşleştirilmiş bir node'un arka plan uyanması sırasında
bağlı olarak işaretlenmeden alive olduğunu kaydetmek için event: "node.presence.alive" ile node.event çağırabilir.
{ "event": "node.presence.alive", "payloadJSON": "{\"trigger\":\"silent_push\",\"sentAtMs\":1737264000000,\"displayName\":\"Peter's iPhone\",\"version\":\"2026.4.28\",\"platform\":\"iOS 18.4.0\",\"deviceFamily\":\"iPhone\",\"modelIdentifier\":\"iPhone17,1\",\"pushTransport\":\"relay\"}"}trigger kapalı bir enum'dur: background, silent_push, bg_app_refresh,
significant_location, manual veya connect. Bilinmeyen trigger dizeleri, kalıcılıktan önce
gateway tarafından background değerine normalleştirilir. Olay yalnızca kimliği doğrulanmış node
cihaz oturumları için kalıcıdır; cihazsız veya eşleştirilmemiş oturumlar handled: false döndürür.
Başarılı gateway'ler yapılandırılmış bir sonuç döndürür:
{ "ok": true, "event": "node.presence.alive", "handled": true, "reason": "persisted"}Daha eski gateway'ler, node.event için hâlâ { "ok": true } döndürebilir; istemciler bunu
kalıcı presence saklama olarak değil, onaylanmış bir RPC olarak ele almalıdır.
Yayın olayı kapsamlandırması
Sunucu tarafından gönderilen WebSocket yayın olayları, eşleştirme kapsamlı veya yalnızca node oturumlarının oturum içeriğini pasif olarak almaması için kapsam kapılıdır.
- Sohbet, agent ve tool-result çerçeveleri (stream edilen
agentolayları ve tool çağrısı sonuçları dahil) en azoperator.readgerektirir.operator.readolmayan oturumlar bu çerçeveleri tamamen atlar. - Plugin tanımlı
plugin.*yayınları, plugin'in bunları nasıl kaydettiğine bağlı olarakoperator.writeveyaoperator.adminile sınırlandırılır. - Durum ve aktarım olayları (
heartbeat,presence,tick, connect/disconnect yaşam döngüsü vb.), aktarım sağlığı her kimliği doğrulanmış oturum tarafından gözlemlenebilir kalsın diye kısıtlanmadan kalır. - Bilinmeyen yayın olayı aileleri, kayıtlı bir işleyici bunları açıkça gevşetmediği sürece varsayılan olarak kapsam kapılıdır (fail-closed).
Her istemci bağlantısı kendi istemci başına sıra numarasını tutar; böylece yayınlar, farklı istemciler olay akışının farklı kapsam filtreli alt kümelerini görse bile o sokette monoton sıralamayı korur.
Yaygın RPC yöntem aileleri
Genel WS yüzeyi, yukarıdaki el sıkışma/auth örneklerinden daha geniştir. Bu
oluşturulmuş bir döküm değildir — hello-ok.features.methods, src/gateway/server-methods-list.ts ve yüklenen
plugin/channel yöntem dışa aktarımlarından oluşturulan muhafazakâr bir
keşif listesidir. Bunu src/gateway/server-methods/*.ts öğelerinin tam
sayımı olarak değil, özellik keşfi olarak ele alın.
Sistem ve kimlik
health, önbelleğe alınmış veya yeni yoklanmış Gateway sağlık anlık görüntüsünü döndürür.diagnostics.stability, son döneme ait sınırlandırılmış tanılama kararlılığı kaydedicisini döndürür. Olay adları, sayılar, bayt boyutları, bellek okumaları, kuyruk/oturum durumu, kanal/Plugin adları ve oturum kimlikleri gibi operasyonel meta verileri tutar. Sohbet metnini, Webhook gövdelerini, araç çıktılarını, ham istek veya yanıt gövdelerini, belirteçleri, çerezleri ya da gizli değerleri tutmaz. Operatör okuma kapsamı gerekir.status,/statustarzı Gateway özetini döndürür; hassas alanlar yalnızca yönetici kapsamlı operatör istemcileri için dahil edilir.gateway.identity.get, aktarma ve eşleştirme akışları tarafından kullanılan Gateway cihaz kimliğini döndürür.system-presence, bağlı operatör/Node cihazları için geçerli varlık anlık görüntüsünü döndürür.system-event, bir sistem olayı ekler ve varlık bağlamını güncelleyebilir/yayınlayabilir.last-heartbeat, kalıcı hale getirilmiş en son Heartbeat olayını döndürür.set-heartbeats, Gateway üzerinde Heartbeat işlemeyi açıp kapatır.
Modeller ve kullanım
models.list, çalışma zamanında izin verilen model kataloğunu döndürür. Seçici boyutunda yapılandırılmış modeller için{ "view": "configured" }(agents.defaults.modelsönce, ardındanmodels.providers.*.models) veya tam katalog için{ "view": "all" }iletin.usage.status, sağlayıcı kullanım pencerelerini/kalan kota özetlerini döndürür.usage.cost, bir tarih aralığı için toplulaştırılmış maliyet kullanımı özetlerini döndürür. Bir ajan içinagentIdiletin veya yapılandırılmış ajanları toplulaştırmak içinagentScope: "all"kullanın.doctor.memory.status, etkin varsayılan ajan çalışma alanı için vektör belleği / önbelleğe alınmış gömme hazırlığını döndürür. Yalnızca çağıran taraf açıkça canlı gömme sağlayıcısı ping'i istediğinde{ "probe": true }veya{ "deep": true }iletin. Dreaming uyumlu istemciler, Dreaming deposu istatistiklerini seçili bir ajan çalışma alanıyla kapsamlamak için ayrıca{ "agentId": "agent-id" }iletebilir;agentIdatlandığında varsayılan ajan yedeği korunur ve yapılandırılmış Dreaming çalışma alanları toplulaştırılır.doctor.memory.dreamDiary,doctor.memory.backfillDreamDiary,doctor.memory.resetDreamDiary,doctor.memory.resetGroundedShortTerm,doctor.memory.repairDreamingArtifactsvedoctor.memory.dedupeDreamDiary, seçili ajan Dreaming görünümleri/eylemleri için isteğe bağlı{ "agentId": "agent-id" }parametrelerini kabul eder.agentIdatlandığında yapılandırılmış varsayılan ajan çalışma alanında çalışırlar.doctor.memory.remHarness, uzak kontrol düzlemi istemcileri için sınırlandırılmış, salt okunur bir REM harness önizlemesi döndürür. Çalışma alanı yollarını, bellek parçacıklarını, işlenmiş temellendirilmiş Markdown'ı ve derin yükseltme adaylarını içerebilir; bu nedenle çağıranlarınoperator.readiznine ihtiyacı vardır.sessions.usage, oturum başına kullanım özetlerini döndürür. Bir ajan içinagentIdiletin veya yapılandırılmış ajanları birlikte listelemek içinagentScope: "all"kullanın.sessions.usage.timeseries, bir oturum için zaman serisi kullanımını döndürür.sessions.usage.logs, bir oturum için kullanım günlüğü girdilerini döndürür.
Kanallar ve oturum açma yardımcıları
channels.status, yerleşik + paketlenmiş kanal/Plugin durum özetlerini döndürür.channels.logout, kanalın çıkış yapmayı desteklediği belirli bir kanal/hesaptan çıkış yapar.web.login.start, geçerli QR destekli web kanalı sağlayıcısı için bir QR/web oturum açma akışı başlatır.web.login.wait, bu QR/web oturum açma akışının tamamlanmasını bekler ve başarılı olursa kanalı başlatır.push.test, kayıtlı bir iOS Node'una test APNs anlık bildirimi gönderir.voicewake.get, depolanan uyandırma sözcüğü tetikleyicilerini döndürür.voicewake.set, uyandırma sözcüğü tetikleyicilerini günceller ve değişikliği yayınlar.
Mesajlaşma ve günlükler
send, sohbet çalıştırıcısı dışında kanal/hesap/iş parçacığı hedefli gönderimler için doğrudan giden teslimat RPC'sidir.logs.tail, yapılandırılmış Gateway dosya günlüğü kuyruğunu imleç/sınır ve maksimum bayt kontrolleriyle döndürür.
Talk ve TTS
talk.catalog, konuşma, akışlı transkripsiyon ve gerçek zamanlı ses için salt okunur Talk sağlayıcı kataloğunu döndürür. Sağlayıcı sırlarını döndürmeden veya genel yapılandırmayı değiştirmeden kanonik sağlayıcı kimliklerini, kayıt defteri takma adlarını, etiketleri, yapılandırılmış durumu, isteğe bağlı grup düzeyireadysonucunu, açığa çıkarılan model/ses kimliklerini, kanonik modları, taşıma biçimlerini, beyin stratejilerini ve gerçek zamanlı ses/yetenek bayraklarını içerir. Geçerli Gateway'ler, çalışma zamanı sağlayıcı seçimini uyguladıktan sonrareadydeğerini ayarlar; istemciler, eski Gateway'lerle uyumluluk için bunun yokluğunu doğrulanmamış olarak ele almalıdır.talk.config, etkin Talk yapılandırma yükünü döndürür;includeSecrets,operator.talk.secrets(veyaoperator.admin) gerektirir.talk.session.create,realtime/gateway-relay,transcription/gateway-relayveyastt-tts/managed-roomiçin Gateway'in sahibi olduğu bir Talk oturumu oluşturur.stt-tts/managed-roomiçin,sessionKeyiletenoperator.writeçağıranları kapsamlı oturum anahtarı görünürlüğü içinspawnedByde iletmelidir; kapsamsızsessionKeyoluşturma vebrain: "direct-tools"içinoperator.admingerekir.talk.session.join, yönetilen oda oturum jetonunu doğrular, gerektiğindesession.readyveyasession.replacedolaylarını yayınlar ve düz metin jeton veya saklanan jeton karması olmadan oda/oturum meta verilerini ve son Talk olaylarını döndürür.talk.session.appendAudio, Gateway'in sahibi olduğu gerçek zamanlı aktarma ve transkripsiyon oturumlarına base64 PCM giriş sesini ekler.talk.session.startTurn,talk.session.endTurnvetalk.session.cancelTurn, durum temizlenmeden önce eski dönüş reddiyle yönetilen oda dönüş yaşam döngüsünü yürütür.talk.session.cancelOutput, özellikle Gateway aktarma oturumlarında VAD kapılı araya girme için asistan ses çıkışını durdurur.talk.session.submitToolResult, Gateway'in sahibi olduğu gerçek zamanlı aktarma oturumu tarafından yayılan sağlayıcı araç çağrısını tamamlar. Nihai sonuç daha sonra gelecekse ara araç çıktısı içinoptions: { willContinue: true }, araç sonucunun başka bir gerçek zamanlı asistan yanıtı başlatmadan sağlayıcı çağrısını karşılaması gerektiğinde iseoptions: { suppressResponse: true }iletin.talk.session.steer, etkin çalışma ses kontrolünü Gateway'in sahibi olduğu ajan destekli Talk oturumuna gönderir.{ sessionId, text, mode? }kabul eder; buradamode,status,steer,cancelveyafollowupdeğerlerinden biridir; atlanan mod konuşulan metinden sınıflandırılır.talk.session.close, Gateway'in sahibi olduğu aktarma, transkripsiyon veya yönetilen oda oturumunu kapatır ve son Talk olaylarını yayınlar.talk.mode, WebChat/Control UI istemcileri için geçerli Talk modu durumunu ayarlar/yayınlar.talk.client.create, Gateway yapılandırma, kimlik bilgileri, yönergeler ve araç politikasının sahibi olurkenwebrtcveyaprovider-websocketkullanarak istemcinin sahibi olduğu gerçek zamanlı sağlayıcı oturumu oluşturur.talk.client.toolCall, istemcinin sahibi olduğu gerçek zamanlı taşıma biçimlerinin sağlayıcı araç çağrılarını Gateway politikasına iletmesine olanak tanır. İlk desteklenen araçopenclaw_agent_consultaracıdır; istemciler bir çalışma kimliği alır ve sağlayıcıya özgü araç sonucunu göndermeden önce normal sohbet yaşam döngüsü olaylarını bekler.talk.client.steer, istemcinin sahibi olduğu gerçek zamanlı taşıma biçimleri için etkin çalışma ses kontrolü gönderir. Gateway,sessionKeyüzerinden etkin gömülü çalışmayı çözer ve yönlendirmeyi sessizce düşürmek yerine yapılandırılmış bir kabul/ret sonucu döndürür.talk.event, gerçek zamanlı, transkripsiyon, STT/TTS, yönetilen oda, telefon ve toplantı adaptörleri için tek Talk olay kanalıdır.talk.speak, etkin Talk konuşma sağlayıcısı üzerinden konuşma sentezler.tts.status, TTS etkin durumunu, etkin sağlayıcıyı, yedek sağlayıcıları ve sağlayıcı yapılandırma durumunu döndürür.tts.providers, görünür TTS sağlayıcı envanterini döndürür.tts.enablevetts.disable, TTS tercih durumunu açıp kapatır.tts.setProvider, tercih edilen TTS sağlayıcısını günceller.tts.convert, tek seferlik metinden konuşmaya dönüştürme işlemini çalıştırır.
Gizli bilgiler, yapılandırma, güncelleme ve sihirbaz
secrets.reload, etkin SecretRef'leri yeniden çözer ve çalışma zamanı gizli bilgi durumunu yalnızca tam başarı durumunda değiştirir.secrets.resolve, belirli bir komut/hedef kümesi için komut hedefli gizli bilgi atamalarını çözer.config.get, geçerli yapılandırma anlık görüntüsünü ve karmasını döndürür.config.set, doğrulanmış bir yapılandırma yükü yazar.config.patch, kısmi yapılandırma güncellemesini birleştirir. Yıkıcı dizi değiştirme, etkilenen yolunreplacePathsiçinde bulunmasını gerektirir; dizi girdileri altındaki iç içe dizileragents.list[].skillsgibi[]yollarını kullanır.config.apply, tam yapılandırma yükünü doğrular ve değiştirir.config.schema, Control UI ve CLI araçları tarafından kullanılan canlı yapılandırma şeması yükünü döndürür: şema,uiHints, sürüm ve üretim meta verileri; çalışma zamanı yükleyebildiğinde Plugin + kanal şeması meta verileri dahil. Şema, eşleşen alan dokümantasyonu mevcut olduğunda iç içe nesne, joker karakter, dizi öğesi veanyOf/oneOf/allOfbileşim dalları dahil olmak üzere UI tarafından kullanılan aynı etiketlerden ve yardım metninden türetilen alantitle/descriptionmeta verilerini içerir.config.schema.lookup, bir yapılandırma yolu için yol kapsamlı arama yükü döndürür: normalleştirilmiş yol, sığ bir şema düğümü, eşleşen ipucu +hintPath, isteğe bağlıreloadKindve UI/CLI ayrıntılarına inme için doğrudan alt özetler.reloadKind,restart,hotveyanonedeğerlerinden biridir ve istenen yol için Gateway yapılandırma yeniden yükleme planlayıcısını yansıtır. Arama şeması düğümleri, kullanıcıya yönelik dokümanları ve yaygın doğrulama alanlarını (title,description,type,enum,const,format,pattern, sayısal/dize/dizi/nesne sınırları veadditionalProperties,deprecated,readOnly,writeOnlygibi bayraklar) korur. Alt özetlerkey, normalleştirilmişpath,type,required,hasChildren, isteğe bağlıreloadKindve eşleşenhint/hintPathdeğerlerini açığa çıkarır.update.run, Gateway güncelleme akışını çalıştırır ve yalnızca güncellemenin kendisi başarılı olduğunda yeniden başlatma zamanlar; oturumu olan çağıranlar, başlangıcın yeniden başlatma devam kuyruğu üzerinden bir takip ajan dönüşünü sürdürmesi içincontinuationMessageekleyebilir. Denetim düzleminden gelen paket yöneticisi güncellemeleri ve denetimli git checkout güncellemeleri, canlı Gateway içinde paket ağacını değiştirmek veya checkout/derleme çıktısını mutasyona uğratmak yerine ayrık bir yönetilen hizmet devri kullanır. Başlatılmış bir devirok: truedeğeriniresult.reason: "managed-service-handoff-started"vehandoff.status: "started"ile döndürür; kullanılamayan veya başarısız devirlermanaged-service-handoff-unavailableveyamanaged-service-handoff-failedileok: falsedöndürür ve manuel kabuk güncellemesi gerektiğindehandoff.commandekler. Kullanılamayan bir devir, OpenClaw'ın systemd içinOPENCLAW_SYSTEMD_UNITgibi güvenli bir gözetmen sınırından veya kalıcı hizmet kimliğinden yoksun olduğu anlamına gelir. Başlatılmış bir devir sırasında yeniden başlatma bekçisi kısa süreliğinestats.reason: "restart-health-pending"raporlayabilir; CLI yeniden başlatılan Gateway'i doğrulayıp nihaiokbekçisini yazana kadar devam işlemi ertelenir.update.status, mevcut olduğunda yeniden başlatma sonrası çalışan sürüm dahil en son güncelleme yeniden başlatma bekçisini yeniler ve döndürür.wizard.start,wizard.next,wizard.statusvewizard.cancel, işe alım sihirbazını WS RPC üzerinden açığa çıkarır.
Ajan ve çalışma alanı yardımcıları
agents.list, etkin model ve çalışma zamanı meta verileri dahil olmak üzere yapılandırılmış ajan girdilerini döndürür.agents.create,agents.updateveagents.delete, ajan kayıtlarını ve çalışma alanı bağlantılarını yönetir.agents.files.list,agents.files.getveagents.files.set, bir ajan için sunulan önyükleme çalışma alanı dosyalarını yönetir.tasks.list,tasks.getvetasks.cancel, Gateway görev defterini SDK ve operatör istemcilerine sunar.artifacts.list,artifacts.getveartifacts.download, açık birsessionKey,runIdveyataskIdkapsamı için transkriptten türetilmiş yapıt özetlerini ve indirmelerini sunar. Çalıştırma ve görev sorguları, sahip oturumu sunucu tarafında çözümler ve yalnızca eşleşen kökene sahip transkript medyasını döndürür; güvenli olmayan veya yerel URL kaynakları, sunucu tarafında getirilmek yerine desteklenmeyen indirmeler döndürür.environments.listveenvironments.status, SDK istemcileri için salt okunur Gateway-yerel ve düğüm ortam keşfini sunar.agent.identity.get, bir ajan veya oturum için geçerli asistan kimliğini döndürür.agent.wait, bir çalıştırmanın bitmesini bekler ve varsa terminal anlık görüntüsünü döndürür.
Oturum denetimi
sessions.list, bir ajan çalışma zamanı arka ucu yapılandırılmışsa satır başınaagentRuntimemeta verileri dahil olmak üzere geçerli oturum dizinini döndürür.sessions.subscribevesessions.unsubscribe, geçerli WS istemcisi için oturum değişikliği olay aboneliklerini açıp kapatır.sessions.messages.subscribevesessions.messages.unsubscribe, tek bir oturum için transkript/ileti olay aboneliklerini açıp kapatır.sessions.preview, belirli oturum anahtarları için sınırlı transkript önizlemeleri döndürür.sessions.describe, tam oturum anahtarı için bir Gateway oturum satırı döndürür.sessions.resolve, bir oturum hedefini çözümler veya kanonikleştirir.sessions.create, yeni bir oturum girdisi oluşturur.sessions.send, mevcut bir oturuma ileti gönderir.sessions.steer, etkin bir oturum için kes ve yönlendir varyantıdır.sessions.abort, bir oturum için etkin işi iptal eder. Çağıran,keyile isteğe bağlırunIdgeçebilir veya Gateway'in bir oturuma çözümleyebileceği etkin çalıştırmalar için yalnızcarunIdgeçebilir.sessions.patch, oturum meta verilerini/geçersiz kılmalarını günceller ve çözümlenen kanonik modeli artı geçerliagentRuntimedeğerini bildirir.sessions.reset,sessions.deletevesessions.compact, oturum bakımını gerçekleştirir.sessions.get, tam saklanan oturum satırını döndürür.- Sohbet yürütmesi hâlâ
chat.history,chat.send,chat.abortvechat.injectkullanır.chat.history, UI istemcileri için görüntüye göre normalleştirilir: satır içi yönerge etiketleri görünür metinden çıkarılır, düz metin araç çağrısı XML yükleri (<tool_call>...</tool_call>,<function_call>...</function_call>,<tool_calls>...</tool_calls>,<function_calls>...</function_calls>ve kısaltılmış araç çağrısı blokları dahil) ve sızmış ASCII/tam genişlikli model denetim belirteçleri çıkarılır, tamNO_REPLY/no_replygibi yalnızca sessiz belirteç içeren asistan satırları atlanır ve aşırı büyük satırlar yer tutucularla değiştirilebilir. chat.message.get, tek bir görünür transkript girdisi için eklemeli sınırlı tam ileti okuyucusudur. İstemcilersessionKey, oturum seçimi ajan kapsamlı olduğunda isteğe bağlıagentId, ayrıca daha öncechat.historyüzerinden sunulmuş bir transkriptmessageIdgeçirir; Gateway ise saklanan girdi hâlâ kullanılabilir ve aşırı büyük değilse hafif geçmiş kısaltma sınırı olmadan aynı görüntüye göre normalleştirilmiş projeksiyonu döndürür.chat.send, otomatik kesme zamanından önce başlatılan model çağrılarında hızlı modu kullanmak, ardından sonraki yeniden deneme, geri dönüş, araç sonucu veya devam çağrılarını hızlı mod olmadan başlatmak için tek turlukfastMode: "auto"kabul eder. Kesme varsayılanı 60 saniyedir ve model başınaagents.defaults.models["<provider>/<model>"].params.fastAutoOnSecondsile yapılandırılabilir. Birchat.sendçağırıcısı, o istek için kesmeyi geçersiz kılmak üzere tek turlukfastAutoOnSecondsgeçebilir.
Cihaz eşleştirme ve cihaz belirteçleri
device.pair.list, bekleyen ve onaylanmış eşleştirilmiş cihazları döndürür.device.pair.setupCode, bir mobil kurulum kodu ve varsayılan olarak bir PNG QR veri URL'si oluşturur.operator.admingerektirir ve bilerek duyurulan keşiften çıkarılmıştır. SonuçsetupCode, isteğe bağlıqrDataUrl,gatewayUrl, gizli olmayanauthetiketi veurlSourceiçerir.device.pair.approve,device.pair.rejectvedevice.pair.remove, cihaz eşleştirme kayıtlarını yönetir.device.token.rotate, eşleştirilmiş bir cihaz belirtecini onaylanmış rolü ve çağıran kapsamı sınırları içinde döndürür.device.token.revoke, eşleştirilmiş bir cihaz belirtecini onaylanmış rolü ve çağıran kapsamı sınırları içinde iptal eder.
Kurulum kodu, kısa ömürlü bir önyükleme kimlik bilgisini gömer. İstemciler bunu eşleştirme akışının ötesinde günlüğe yazmamalı veya kalıcı olarak saklamamalıdır.
Düğüm eşleştirme, çağırma ve bekleyen iş
node.pair.request,node.pair.list,node.pair.approve,node.pair.reject,node.pair.removevenode.pair.verify, düğüm eşleştirmeyi ve önyükleme doğrulamasını kapsar.node.listvenode.describe, bilinen/bağlı düğüm durumunu döndürür.node.rename, eşleştirilmiş bir düğüm etiketini günceller.node.invoke, bağlı bir düğüme komut iletir.node.invoke.result, bir çağırma isteğinin sonucunu döndürür.node.event, düğüm kaynaklı olayları gateway'e geri taşır.node.pending.pullvenode.pending.ack, bağlı düğüm kuyruğu API'leridir.node.pending.enqueuevenode.pending.drain, çevrimdışı/bağlantısı kesilmiş düğümler için dayanıklı bekleyen işi yönetir.
Onay aileleri
exec.approval.request,exec.approval.get,exec.approval.listveexec.approval.resolve, tek seferlik exec onay isteklerini ve bekleyen onay aramayı/yeniden oynatmayı kapsar.exec.approval.waitDecision, bekleyen bir exec onayını bekler ve son kararı döndürür (veya zaman aşımındanull).exec.approvals.getveexec.approvals.set, gateway exec onay ilkesi anlık görüntülerini yönetir.exec.approvals.node.getveexec.approvals.node.set, düğüm aktarma komutları üzerinden düğüm-yerel exec onay ilkesini yönetir.plugin.approval.request,plugin.approval.list,plugin.approval.waitDecisionveplugin.approval.resolve, plugin-tanımlı onay akışlarını kapsar.
Otomasyon, Skills ve araçlar
- Otomasyon:
wake, anında veya bir sonraki Heartbeat'te uyandırma metni enjeksiyonu zamanlar;cron.get,cron.list,cron.status,cron.add,cron.update,cron.remove,cron.run,cron.runszamanlanmış işi yönetir. cron.run, manuel çalıştırmalar için kuyruğa alma tarzı bir RPC olarak kalır. Tamamlanma semantiğine ihtiyaç duyan istemciler, döndürülenrunIddeğerini okumalı vecron.runsyoklamalıdır.cron.runs, istemcilerin aynı iş için diğer geçmiş girdileriyle yarışmadan kuyruktaki tek bir manuel çalıştırmayı takip edebilmesi için isteğe bağlı boş olmayan birrunIdfiltresi kabul eder.- Skills ve araçlar:
commands.list,skills.*,tools.catalog,tools.effective,tools.invoke.
Yaygın olay aileleri
chat:chat.injectve diğer yalnızca transkript sohbet olayları gibi UI sohbet güncellemeleri. Protokol v4'te delta yüklerideltaTexttaşır;messagekümülatif asistan anlık görüntüsü olarak kalır. Önek olmayan değiştirmelerreplace=trueayarlar vedeltaTextdeğerini değiştirme metni olarak kullanır.session.message,session.operationvesession.tool: abone olunan bir oturum için transkript, uçuş hâlindeki oturum işlemi ve olay akışı güncellemeleri.sessions.changed: oturum dizini veya meta veriler değişti.presence: sistem presence anlık görüntüsü güncellemeleri.tick: periyodik keepalive / canlılık olayı.health: gateway sağlık anlık görüntüsü güncellemesi.heartbeat: heartbeat olay akışı güncellemesi.cron: cron çalıştırma/iş değişikliği olayı.shutdown: gateway kapatma bildirimi.node.pair.requested/node.pair.resolved: düğüm eşleştirme yaşam döngüsü.node.invoke.request: düğüm çağırma isteği yayını.device.pair.requested/device.pair.resolved: eşleştirilmiş cihaz yaşam döngüsü.voicewake.changed: uyandırma sözcüğü tetikleyici yapılandırması değişti.exec.approval.requested/exec.approval.resolved: exec onay yaşam döngüsü.plugin.approval.requested/plugin.approval.resolved: Plugin onay yaşam döngüsü.
Düğüm yardımcı yöntemleri
- Düğümler, otomatik izin kontrolleri için beceri çalıştırılabilirlerinin geçerli listesini almak üzere
skills.binsçağırabilir.
Görev defteri RPC'leri
Operatör istemcileri, Gateway arka plan görev kayıtlarını görev defteri RPC'leri aracılığıyla inceleyebilir ve iptal edebilir. Bu yöntemler ham çalışma zamanı durumu değil, temizlenmiş görev özetleri döndürür.
tasks.list,operator.readgerektirir.- Parametreler: isteğe bağlı
status("queued","running","completed","failed","cancelled"veya"timed_out") ya da bu durumların bir dizisi, isteğe bağlıagentId, isteğe bağlısessionKey,1ile500arasında isteğe bağlılimitve isteğe bağlı dizecursor. - Sonuç:
{ "tasks": TaskSummary[], "nextCursor"?: string }.
- Parametreler: isteğe bağlı
tasks.get,operator.readgerektirir.- Parametreler:
{ "taskId": string }. - Sonuç:
{ "task": TaskSummary }. - Eksik görev kimlikleri Gateway bulunamadı hata şeklini döndürür.
- Parametreler:
tasks.cancel,operator.writegerektirir.- Parametreler:
{ "taskId": string, "reason"?: string }. - Sonuç:
{ "found": boolean, "cancelled": boolean, "reason"?: string, "task"?: TaskSummary }. found, defterde eşleşen bir görev olup olmadığını bildirir.cancelled, çalışma zamanının iptali kabul edip etmediğini veya kaydedip kaydetmediğini bildirir.
- Parametreler:
TaskSummary, id, status ve kind, runtime, title, agentId, sessionKey, childSessionKey, ownerKey, runId, taskId, flowId, parentTaskId, sourceId, zaman damgaları, ilerleme, terminal özeti ve temizlenmiş hata metni gibi isteğe bağlı meta verileri içerir. agentId, görevi yürüten ajanı tanımlar; sessionKey ve ownerKey, istekte bulunanı ve denetim bağlamını korur.
Operatör yardımcı yöntemleri
- Operatörler bir aracı için çalışma zamanı komut envanterini almak üzere
commands.list(operator.read) çağırabilir.agentIdisteğe bağlıdır; varsayılan aracı çalışma alanını okumak için atlayın.scope, birincilnamealanının hangi yüzeyi hedeflediğini kontrol eder:text, baştaki/olmadan birincil metin komutu belirtecini döndürürnativeve varsayılanbothyolu, mevcut olduğunda sağlayıcıya duyarlı yerel adları döndürür
textAliases,/modelve/mgibi tam eğik çizgi takma adlarını taşır.nativeName, varsa sağlayıcıya duyarlı yerel komut adını taşır.provideristeğe bağlıdır ve yalnızca yerel adlandırmayı ve yerel plugin komutu kullanılabilirliğini etkiler.includeArgs=false, serileştirilmiş argüman meta verilerini yanıttan çıkarır.
- Operatörler bir aracı için çalışma zamanı araç kataloğunu almak üzere
tools.catalog(operator.read) çağırabilir. Yanıt, gruplanmış araçları ve köken meta verilerini içerir:source:coreveyapluginpluginId:source="plugin"olduğunda plugin sahibioptional: bir plugin aracının isteğe bağlı olup olmadığı
- Operatörler bir oturum için çalışma zamanında etkili araç envanterini almak üzere
tools.effective(operator.read) çağırabilir.sessionKeyzorunludur.- Gateway, çağıranın sağladığı kimlik doğrulama veya teslimat bağlamını kabul etmek yerine güvenilir çalışma zamanı bağlamını oturumdan sunucu tarafında türetir.
- Yanıt, çekirdek, plugin, kanal ve daha önce keşfedilmiş MCP sunucusu araçlarını içeren, etkin envanterin oturum kapsamlı ve sunucu tarafından türetilmiş bir projeksiyonudur.
tools.effective, MCP için salt okunurdur: sıcak bir oturum MCP kataloğunu nihai araç politikası üzerinden projekte edebilir, ancak MCP çalışma zamanları oluşturmaz, aktarımları bağlamaz veyatools/listyayınlamaz. Eşleşen sıcak katalog yoksa yanıtmcp-not-yet-connected,mcp-not-yet-listedveyamcp-stale-cataloggibi bir bildirim içerebilir.- Etkili araç girdileri
source="core",source="plugin",source="channel"veyasource="mcp"kullanır.
- Operatörler,
/tools/invokeile aynı Gateway politikası yolu üzerinden kullanılabilir bir aracı çağırmak içintools.invoke(operator.write) çağırabilir.namezorunludur.args,sessionKey,agentId,confirmveidempotencyKeyisteğe bağlıdır.- Hem
sessionKeyhem deagentIdmevcutsa çözümlenen oturum aracısıagentIdile eşleşmelidir. cron,gatewayvenodesgibi yalnızca sahip çekirdek sarmalayıcıları,tools.invokeyönteminin kendisioperator.writeolsa bile sahip/yönetici kimliği (operator.admin) gerektirir.- Yanıt,
ok,toolName, isteğe bağlıoutputve tiplierroralanları içeren SDK'ya dönük bir zarftır. Onay veya politika retleri, Gateway araç politikası işlem hattını atlamak yerine yük içindeok:falsedöndürür.
- Operatörler bir aracı için görünür skill envanterini almak üzere
skills.status(operator.read) çağırabilir.agentIdisteğe bağlıdır; varsayılan aracı çalışma alanını okumak için atlayın.- Yanıt, ham gizli değerleri açığa çıkarmadan uygunluk, eksik gereksinimler, yapılandırma denetimleri ve temizlenmiş kurulum seçeneklerini içerir.
- Operatörler ClawHub keşif meta verileri için
skills.searchveskills.detail(operator.read) çağırabilir. - Operatörler, yüklemeden önce özel bir skill arşivini hazırlamak için
skills.upload.begin,skills.upload.chunkveskills.upload.commit(operator.admin) çağırabilir. Bu, güvenilir istemciler için ayrı bir yönetici yükleme yoludur; normal ClawHub skill kurulum akışı değildir veskills.install.allowUploadedArchivesetkinleştirilmediği sürece varsayılan olarak devre dışıdır.skills.upload.begin({ kind: "skill-archive", slug, sizeBytes, sha256?, force?, idempotencyKey? }), bu slug ve force değerine bağlı bir yükleme oluşturur.skills.upload.chunk({ uploadId, offset, dataBase64 }), baytları tam çözümlenmiş ofsette ekler.skills.upload.commit({ uploadId, sha256? }), nihai boyutu ve SHA-256 değerini doğrular. Commit yalnızca yüklemeyi sonlandırır; skill'i kurmaz.- Yüklenen skill arşivleri, bir
SKILL.mdkökü içeren zip arşivleridir. Arşivin iç dizin adı kurulum hedefini asla seçmez.
- Operatörler
skills.install(operator.admin) öğesini üç modda çağırabilir:- ClawHub modu:
{ source: "clawhub", slug, version?, force? }, varsayılan aracı çalışma alanındakiskills/dizinine bir skill klasörü kurar. - Yükleme modu:
{ source: "upload", uploadId, slug, force?, sha256?, timeoutMs? }, commit edilmiş bir yüklemeyi varsayılan aracı çalışma alanındakiskills/<slug>dizinine kurar. Slug ve force değeri özgünskills.upload.beginisteğiyle eşleşmelidir. Bu mod,skills.install.allowUploadedArchivesetkinleştirilmedikçe reddedilir. Ayar, ClawHub kurulumlarını etkilemez. - Gateway kurucu modu:
{ name, installId, timeoutMs? }, Gateway ana makinesinde bildirilen birmetadata.openclaw.installeylemini çalıştırır. Eski istemciler hâlâdangerouslyForceUnsafeInstallgönderebilir; bu alan kullanımdan kaldırılmıştır, yalnızca protokol uyumluluğu için kabul edilir ve yok sayılır. Operatörün sahip olduğu kurulum kararları içinsecurity.installPolicykullanın.
- ClawHub modu:
- Operatörler
skills.update(operator.admin) öğesini iki modda çağırabilir:- ClawHub modu, varsayılan aracı çalışma alanındaki izlenen tek bir slug'ı veya izlenen tüm ClawHub kurulumlarını günceller.
- Yapılandırma modu,
enabled,apiKeyveenvgibiskills.entries.<skillKey>değerlerine yama uygular.
models.list görünümleri
models.list, isteğe bağlı bir view parametresi kabul eder:
- Atlanmış veya
"default": geçerli çalışma zamanı davranışı.agents.defaults.modelsyapılandırılmışsa yanıt,provider/*girdileri için dinamik olarak keşfedilmiş modeller dahil olmak üzere izin verilen katalogdur. Aksi halde yanıt, tam Gateway kataloğudur. "configured": seçici boyutunda davranış.agents.defaults.modelsyapılandırılmışsa,provider/*girdileri için sağlayıcı kapsamlı keşif dahil olmak üzere yine önceliklidir. İzin listesi olmadan yanıt, açıkmodels.providers.*.modelsgirdilerini kullanır ve yalnızca yapılandırılmış model satırı yoksa tam kataloğa geri döner."all":agents.defaults.modelsöğesini atlayarak tam Gateway kataloğu. Bunu normal model seçiciler için değil, tanılama ve keşif kullanıcı arayüzleri için kullanın.
Exec onayları
- Bir exec isteği onay gerektirdiğinde Gateway
exec.approval.requestedyayınlar. - Operatör istemcileri
exec.approval.resolveçağırarak çözer (operator.approvalskapsamı gerektirir). host=nodeiçinexec.approval.request,systemRunPlaniçermelidir (kanonikargv/cwd/rawCommand/oturum meta verileri).systemRunPlaneksik olan istekler reddedilir.- Onaydan sonra iletilen
node.invoke system.runçağrıları, bu kanoniksystemRunPlanöğesini yetkili komut/cwd/oturum bağlamı olarak yeniden kullanır. - Bir çağıran, hazırlama ile nihai onaylı
system.runiletimi arasındacommand,rawCommand,cwd,agentIdveyasessionKeydeğerini değiştirirse Gateway, değiştirilen yüke güvenmek yerine çalıştırmayı reddeder.
Aracı teslimat geri dönüşü
agentistekleri, dışa teslimat istemek içindeliver=trueiçerebilir.bestEffortDeliver=falsekatı davranışı korur: çözümlenemeyen veya yalnızca dahili teslimat hedefleriINVALID_REQUESTdöndürür.bestEffortDeliver=true, harici olarak teslim edilebilir hiçbir rota çözümlenemediğinde oturumla sınırlı yürütmeye geri dönüşe izin verir (örneğin dahili/webchat oturumları veya belirsiz çok kanallı yapılandırmalar).- Nihai
agentsonuçları, teslimat istendiğinderesult.deliveryStatusiçerebilir;openclaw agent --json --deliveriçin belgelenen aynısent,suppressed,partial_failedvefaileddurumlarını kullanır.
Sürümleme
PROTOCOL_VERSION,packages/gateway-protocol/src/version.tsiçinde bulunur.- İstemciler
minProtocol+maxProtocolgönderir; sunucu, kendi geçerli protokolünü içermeyen aralıkları reddeder. Geçerli istemciler ve sunucular protokol v4 gerektirir. - Şemalar + modeller TypeBox tanımlarından oluşturulur:
pnpm protocol:genpnpm protocol:gen:swiftpnpm protocol:check
İstemci sabitleri
src/gateway/client.ts içindeki referans istemci bu varsayılanları kullanır. Değerler protokol v4 genelinde kararlıdır ve üçüncü taraf istemciler için beklenen taban çizgisidir.
| Sabit | Varsayılan | Kaynak |
|---|---|---|
PROTOCOL_VERSION |
4 |
packages/gateway-protocol/src/version.ts |
MIN_CLIENT_PROTOCOL_VERSION |
4 |
packages/gateway-protocol/src/version.ts |
| İstek zaman aşımı (RPC başına) | 30_000 ms |
src/gateway/client.ts (requestTimeoutMs) |
| Ön kimlik doğrulama / bağlantı-sorgulama zaman aşımı | 15_000 ms |
src/gateway/handshake-timeouts.ts (config/env eşleştirilmiş sunucu/istemci bütçesini artırabilir) |
| İlk yeniden bağlanma geri çekilmesi | 1_000 ms |
src/gateway/client.ts (backoffMs) |
| Maksimum yeniden bağlanma geri çekilmesi | 30_000 ms |
src/gateway/client.ts (scheduleReconnect) |
| Cihaz belirteci kapanışından sonra hızlı yeniden deneme sınırı | 250 ms |
src/gateway/client.ts |
terminate() öncesi zorla durdurma ek süresi |
250 ms |
FORCE_STOP_TERMINATE_GRACE_MS |
stopAndWait() varsayılan zaman aşımı |
1_000 ms |
STOP_AND_WAIT_TIMEOUT_MS |
Varsayılan tik aralığı (hello-ok öncesi) |
30_000 ms |
src/gateway/client.ts |
| Tik zaman aşımı kapanışı | sessizlik tickIntervalMs * 2 değerini aştığında kod 4000 |
src/gateway/client.ts |
MAX_PAYLOAD_BYTES |
25 * 1024 * 1024 (25 MB) |
src/gateway/server-constants.ts |
Sunucu, etkin policy.tickIntervalMs, policy.maxPayload ve policy.maxBufferedBytes değerlerini hello-ok içinde duyurur; istemciler el sıkışma öncesi varsayılanlar yerine bu değerlere uymalıdır.
Kimlik Doğrulama
- Paylaşılan gizli anahtarlı gateway kimlik doğrulaması, yapılandırılmış kimlik doğrulama moduna bağlı olarak
connect.params.auth.tokenveyaconnect.params.auth.passwordkullanır. - Tailscale Serve gibi kimlik taşıyan modlar
(
gateway.auth.allowTailscale: true) veya loopback olmayangateway.auth.mode: "trusted-proxy", bağlanma kimlik doğrulaması denetiminiconnect.params.auth.*yerine istek başlıklarından karşılar. - Özel giriş
gateway.auth.mode: "none", paylaşılan gizli anahtarlı bağlanma kimlik doğrulamasını tamamen atlar; bu modu herkese açık/güvenilmeyen girişlerde açığa çıkarmayın. - Eşleştirmeden sonra Gateway, bağlantı rolü + kapsamlarıyla sınırlı bir cihaz belirteci
yayınlar. Bu belirteç
hello-ok.auth.deviceTokeniçinde döndürülür ve istemci tarafından gelecekteki bağlantılar için kalıcı olarak saklanmalıdır. - İstemciler, başarılı herhangi bir bağlantıdan sonra birincil
hello-ok.auth.deviceTokendeğerini kalıcı olarak saklamalıdır. - Bu saklanmış cihaz belirteciyle yeniden bağlanmak, o belirteç için saklanmış onaylı kapsam kümesini de yeniden kullanmalıdır. Bu, daha önce verilmiş olan okuma/sondalama/durum erişimini korur ve yeniden bağlantıların sessizce daha dar örtük yalnızca yönetici kapsamına düşmesini önler.
- İstemci tarafı bağlanma kimlik doğrulaması derlemesi (
src/gateway/client.tsiçindekiselectConnectAuth):auth.passwordbağımsızdır ve ayarlandığında her zaman iletilir.auth.tokenöncelik sırasıyla doldurulur: önce açık paylaşılan belirteç, sonra açık birdeviceToken, ardından saklanmış cihaz başına belirteç (deviceId+roleile anahtarlanır).auth.bootstrapToken, yalnızca yukarıdakilerin hiçbiri birauth.tokençözemediğinde gönderilir. Paylaşılan belirteç veya çözümlenen herhangi bir cihaz belirteci onu bastırır.- Tek seferlik
AUTH_TOKEN_MISMATCHyeniden denemesinde saklanmış bir cihaz belirtecinin otomatik yükseltilmesi yalnızca güvenilir uç noktalarla sınırlıdır — loopback veya sabitlenmiştlsFingerprintilewss://. Sabitleme olmadan herkese açıkwss://uygun değildir.
- Yerleşik kurulum kodu bootstrap işlemi, birincil düğüm
hello-ok.auth.deviceTokendeğerini ve güvenilir mobil devretme içinhello-ok.auth.deviceTokensiçinde sınırlı bir operatör belirtecini döndürür. Operatör belirteci, yerel Talk yapılandırması okumaları içinoperator.talk.secretsiçerir, ancak eşleştirme mutasyonu kapsamlarını veoperator.adminkapsamını hariç tutar. - Temel olmayan bir kurulum kodu bootstrap işlemi onay beklerken,
PAIRING_REQUIREDayrıntılarırecommendedNextStep: "wait_then_retry",retryable: truevepauseReconnect: falseiçerir. İstemciler, istek onaylanana veya belirteç geçersiz hale gelene kadar aynı bootstrap belirteciyle yeniden bağlanmayı sürdürmelidir. hello-ok.auth.deviceTokensdeğerini yalnızca bağlantıwss://veya loopback/yerel eşleştirme gibi güvenilir bir aktarımda bootstrap kimlik doğrulaması kullandığında kalıcı olarak saklayın.- Bir istemci açık bir
deviceTokenveya açıkscopessağlarsa, çağıranın istediği bu kapsam kümesi yetkili kalır; önbelleğe alınmış kapsamlar yalnızca istemci saklanmış cihaz başına belirteci yeniden kullandığında yeniden kullanılır. - Cihaz belirteçleri
device.token.rotatevedevice.token.revokeile döndürülebilir/iptal edilebilir (operator.pairingkapsamı gerekir). Bir düğüm veya başka bir operatör dışı rolü döndürmek ya da iptal etmek ayrıcaoperator.admingerektirir. device.token.rotate, döndürme meta verilerini döndürür. Yerine geçen taşıyıcı belirteci yalnızca halihazırda o cihaz belirteciyle kimlik doğrulaması yapılmış aynı cihaz çağrıları için yansıtır; böylece yalnızca belirteç kullanan istemciler yeniden bağlanmadan önce yenisini kalıcı olarak saklayabilir. Paylaşılan/yönetici döndürmeleri taşıyıcı belirteci yansıtmaz.- Belirteç yayınlama, döndürme ve iptal işlemleri, ilgili cihazın eşleştirme girdisine kaydedilmiş onaylı rol kümesiyle sınırlı kalır; belirteç mutasyonu, eşleştirme onayının hiç vermediği bir cihaz rolünü genişletemez veya hedefleyemez.
- Eşleştirilmiş cihaz belirteci oturumlarında, çağıranın ayrıca
operator.adminkapsamı yoksa cihaz yönetimi kendi kapsamıyla sınırlıdır: yönetici olmayan çağıranlar yalnızca kendi cihaz girdileri için operatör belirtecini yönetebilir. Düğüm ve diğer operatör dışı belirteç yönetimi, çağıranın kendi cihazı için bile yalnızca yöneticilere açıktır. device.token.rotatevedevice.token.revoke, hedef operatör belirteci kapsam kümesini çağıranın mevcut oturum kapsamlarına karşı da denetler. Yönetici olmayan çağıranlar, zaten sahip olduklarından daha geniş bir operatör belirtecini döndüremez veya iptal edemez.- Kimlik doğrulama hataları
error.details.codeve kurtarma ipuçları içerir:error.details.canRetryWithDeviceToken(boolean)error.details.recommendedNextStep(retry_with_device_token,update_auth_configuration,update_auth_credentials,wait_then_retry,review_auth_configuration)
AUTH_TOKEN_MISMATCHiçin istemci davranışı:- Güvenilir istemciler, önbelleğe alınmış cihaz başına belirteçle bir sınırlı yeniden deneme yapabilir.
- Bu yeniden deneme başarısız olursa, istemciler otomatik yeniden bağlanma döngülerini durdurmalı ve operatör eylemi rehberliğini göstermelidir.
AUTH_SCOPE_MISMATCH, cihaz belirtecinin tanındığı ancak istenen rol/kapsamları kapsamadığı anlamına gelir. İstemciler bunu hatalı belirteç olarak sunmamalıdır; operatörden yeniden eşleştirme yapmasını veya daha dar/daha geniş kapsam sözleşmesini onaylamasını istemelidir.
Cihaz kimliği + eşleştirme
- Düğümler, anahtar çifti parmak izinden türetilmiş kararlı bir cihaz kimliği (
device.id) içermelidir. - Gateway'ler cihaz + rol başına belirteç yayınlar.
- Yerel otomatik onay etkinleştirilmemişse yeni cihaz kimlikleri için eşleştirme onayları gerekir.
- Eşleştirme otomatik onayı, doğrudan local loopback bağlantılarına odaklanır.
- OpenClaw ayrıca güvenilir paylaşılan gizli anahtar yardımcı akışları için dar bir backend/konteyner yerel kendi kendine bağlanma yoluna sahiptir.
- Aynı ana bilgisayar tailnet veya LAN bağlantıları eşleştirme için hâlâ uzak olarak değerlendirilir ve onay gerektirir.
- WS istemcileri normalde
connectsırasındadevicekimliği içerir (operatör + düğüm). Cihazsız operatör için tek istisnalar açık güven yollarıdır:- Yalnızca localhost güvenli olmayan HTTP uyumluluğu için
gateway.controlUi.allowInsecureAuth=true. - Başarılı
gateway.auth.mode: "trusted-proxy"operatör Control UI kimlik doğrulaması. gateway.controlUi.dangerouslyDisableDeviceAuth=true(acil durum, ciddi güvenlik düşüşü).- Ayrılmış dahili yardımcı yoldaki direct-loopback
gateway-clientbackend RPC'leri.
- Yalnızca localhost güvenli olmayan HTTP uyumluluğu için
- Cihaz kimliğini atlamanın kapsam sonuçları vardır. Cihazsız bir operatör
bağlantısına açık bir güven yolu üzerinden izin verildiğinde bile OpenClaw, bu yolun adlandırılmış
bir kapsam koruma istisnası yoksa kendi beyan ettiği kapsamları boş kümeye temizler.
Kapsam kapılı yöntemler daha sonra
missing scopeile başarısız olur. gateway.controlUi.dangerouslyDisableDeviceAuth=true, Control UI acil durum kapsam koruma yoludur. Rastgele özel backend veya CLI biçimli WebSocket istemcilerine kapsam vermez.- Ayrılmış direct-loopback
gateway-clientbackend yardımcı yolu, kapsamları yalnızca dahili yerel kontrol düzlemi RPC'leri için korur; özel backend kimlikleri bu istisnayı almaz. - Tüm bağlantılar, sunucunun sağladığı
connect.challengenonce değerini imzalamalıdır.
Cihaz kimlik doğrulaması geçiş tanıları
Hâlâ challenge öncesi imzalama davranışı kullanan eski istemciler için, connect artık
kararlı bir error.details.reason ile error.details.code altında DEVICE_AUTH_* ayrıntı kodları döndürür.
Yaygın geçiş hataları:
| İleti | details.code | details.reason | Anlam |
|---|---|---|---|
device nonce required |
DEVICE_AUTH_NONCE_REQUIRED |
device-nonce-missing |
İstemci device.nonce atladı (veya boş gönderdi). |
device nonce mismatch |
DEVICE_AUTH_NONCE_MISMATCH |
device-nonce-mismatch |
İstemci eski/yanlış bir nonce ile imzaladı. |
device signature invalid |
DEVICE_AUTH_SIGNATURE_INVALID |
device-signature |
İmza yükü v2 yüküyle eşleşmiyor. |
device signature expired |
DEVICE_AUTH_SIGNATURE_EXPIRED |
device-signature-stale |
İmzalanmış zaman damgası izin verilen sapmanın dışında. |
device identity mismatch |
DEVICE_AUTH_DEVICE_ID_MISMATCH |
device-id-mismatch |
device.id, açık anahtar parmak iziyle eşleşmiyor. |
device public key invalid |
DEVICE_AUTH_PUBLIC_KEY_INVALID |
device-public-key |
Açık anahtar biçimi/kanonikleştirmesi başarısız oldu. |
Geçiş hedefi:
- Her zaman
connect.challengeiçin bekleyin. - Sunucu nonce değerini içeren v2 yükünü imzalayın.
- Aynı nonce değerini
connect.params.device.nonceiçinde gönderin. - Tercih edilen imza yükü
v3değeridir; bu, cihaz/istemci/rol/kapsamlar/belirteç/nonce alanlarına ek olarakplatformvedeviceFamilydeğerlerini de bağlar. - Eski
v2imzaları uyumluluk için kabul edilmeye devam eder, ancak eşleştirilmiş cihaz meta verisi sabitlemesi yeniden bağlantıda komut politikasını hâlâ kontrol eder.
TLS + sabitleme
- TLS, WS bağlantıları için desteklenir.
- İstemciler isteğe bağlı olarak gateway sertifika parmak izini sabitleyebilir (
gateway.tlsyapılandırmasına vegateway.remote.tlsFingerprintveya CLI--tls-fingerprintdeğerine bakın).
Kapsam
Bu protokol tam gateway API'sini açığa çıkarır (durum, kanallar, modeller, sohbet,
ajan, oturumlar, düğümler, onaylar vb.). Tam yüzey
packages/gateway-protocol/src/schema.ts içindeki TypeBox şemaları tarafından tanımlanır.